0

私のワードプレスサイトには、ajaxによって配信され、メールに送信される連絡先フォームがあります。また、結果をデータベースに保存したかったので、このクエリを作成しましたが、構文エラーが発生しましたが、このコードに問題は見つかりませんでした:

<?php 
$con = mysql_connect("localhost","username","password");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("u31272B3", $con);

$sql="INSERT INTO wp_contactform (Nimi, Puhelin, E-mail, Viesti, IP, Day)
VALUES
('$_POST[Nimi]','$_POST[Puhelin]','$_POST[Sposti]','$_POST[Tiedot]','$_POST[Gotcha]','$_POST[Day]')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "1 record added";

mysql_close($con);

?>

それを送信するjqueryスクリプトが機能し、メールが送信されますが、これは保存されません。

4

4 に答える 4

2

列名 E-mail をバッククォート (`) で引用します。MySQL は現在、これを 2 つの部分に分けて解釈しています。

また、(私のコメントによると)コードはSQLインジェクション攻撃に対して広く開かれていることに注意してください。適切にパラメータ化された SQL クエリを使用することをお勧めします。


SQL インジェクションの例:

"INSERT INTO table (field) VALUE ('$_POST[var]')"

値を投稿する"'; DROP TABLE table; --"と、空の文字列を挿入する有効な SQL 文字列が得られ、テーブルを削除しようとします。あなたが望む有害な声明に置き換えてください。

于 2012-07-19T14:39:36.857 に答える
1

また、mysql_real_escape_string() または準備済みステートメントを使用する必要があります。クエリデータに特殊文字が含まれていると、クエリが吹き飛ばされる可能性があり、SQLインジェクションからも役立ちます。

http://php.net/mysql_real_escape_string http://php.net/pdo

于 2012-07-19T14:45:24.907 に答える
0

SQLリクエストは次のように記述する必要があります。

$sql = "INSERT INTO wp_contactform (`Nimi`, `Puhelin`, `E-mail`, `Viesti`, `IP`, `Day`)
        VALUES
        ('$_POST[Nimi]','$_POST[Puhelin]','$_POST[Sposti]','$_POST[Tiedot]','$_POST[Gotcha]','$_POST[Day]')"

英数字以外の文字を使用するSQLフィールドは、バッククォート(`)でエスケープする必要があります。

于 2012-07-19T14:43:57.117 に答える