-3

私は Mac で「Minco」と呼ばれる時間追跡ソフトウェアを使用しています。これには、ソフトウェアによって記録されたすべての時間を PHP スクリプトに送信して MySQL データベースに追加できる機能があります。POSTメソッドを使用してソフトウェアからスクリプトにデータを送信し、POST変数をデータベースに送信します。つまり、次のようになります。

$sql = "INSERT INTO $table_name VALUES('','$_POST[title]', '$_POST[date]', '$_POST[start]', '$_POST[end]', '$_POST[minutes]', '$_POST[amount]', '$_POST[notes]', '$_POST[uid]', '$_POST[type]', '$_POST[hash]')";

「金額」変数を含めるようにソフトウェアを設定すると、問題が発生します。この変数にはポンド (スターリング) 記号が含まれており、含まれている場合、他のすべての変数のデータベースへの送信が中断されます。つまり、新しい行が追加されますが、すべての列には何も入力されません。

この問題はポンド記号のエンコード/デコードに関連していると推測していますが、この問題のトラブルシューティング方法がわかりません。誰かがこれについてどうすればよいか提案できますか?

4

4 に答える 4

2

列リストとプリペアドステートメントを使用してください。

宛先列がHTML文字を予期していない場合は、送信する前にそれを削除する必要があります。

<?php
$link = mysqli_connect('localhost', 'my_user', 'my_password', 'world');

/* check connection */
if (!$link) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$stmt = mysqli_prepare($link, "INSERT INTO $tableName (col1, col2, col3, col4) VALUES (?, ?, ?, ?)");
mysqli_stmt_bind_param($stmt, 'ssss', $_POST[title], $_POST[date], $_POST[start], $_POST[end]);

/* execute prepared statement */
mysqli_stmt_execute($stmt);

printf("%d Row inserted.\n", mysqli_stmt_affected_rows($stmt));

/* close statement and connection */
mysqli_stmt_close($stmt);

/* close connection */
mysqli_close($link);
?>
于 2013-02-09T19:26:27.407 に答える
0

ページでISO-8859-1エンコーディングを使用しているが、データベースでUTF-8エンコーディングを使用している場合は、ポンド記号を0xA3バイトとして送信しようとします。これにより、データベースは無効なUTF-8シーケンスとして拒否します。

UTF-8エンコーディングを使用しているページの逆の間違いですが、ISO-8859-1エンコーディングを使用しているデータベースは、U + 00A3文字ではなく0xC20xA3バイトシーケンスを送信しているとデータベースが判断するため、見つけるのが困難です。

于 2013-02-09T20:36:08.100 に答える
0

さまざまな方法で処理できます

  • 使用するmysql(i)_real_escape_string($_POST[])
  • また

    $ amount = $ _POST [amount]';

    $ amount = str_replace('YOUR POUND SIGN'、''、$ amount);

$amount文字列で変数を使用します

  • これも試すことができます'\$_POST[amount]\'
于 2013-02-09T19:21:43.000 に答える
0

試すことはほとんどありません。文字列が二重引用符で囲まれている場合は、$変数を文字列に直接含めることができますが、配列変数を挿入する場合は、中括弧で囲む必要があります

$myvar = "{$_POST['myvar']}";

私は個人的に文字列を連結して、mysql_real_escape_string()メソッドを使用してMySQLに入る値をエスケープできるようにします。次のようなもの:

$sql = "INSERT INTO $table_name 
        VALUES('',
               '" . mysql_real_escape_string($_POST["title"]) . "', 
               '" . mysql_real_escape_string($_POST["date"]) . "', 
               '" . mysql_real_escape_string($_POST["start"]) . "', 
               '" . mysql_real_escape_string($_POST["end"]) . "', 
               '" . mysql_real_escape_string($_POST["minutes"]) . "', 
               '" . mysql_real_escape_string($_POST["amount"]) . "', 
               '" . mysql_real_escape_string($_POST["notes"]) . "', 
               '" . mysql_real_escape_string($_POST["uid"]) . "', 
               '" . mysql_real_escape_string($_POST["type"]) . "', 
               '" . mysql_real_escape_string($_POST["hash"]) . "')";
于 2013-02-09T19:26:11.063 に答える