0

データを送信する PHP 連絡フォームとメールがあります...:

<?php 
$dbh=mysql_connect ("localhost", "username", "password") or die ('I cannot connect to the database because: ' . mysql_error());
mysql_select_db ("guest"); 

if (isset($_POST['submit'])) { 

if (!$_POST['name'] | !$_POST['email']) 
{
echo"<div class='error'>Error<br />Please provide your Name and Email Address so we may properly contact you.</div>";
}
else
{
$age = $_POST['age']; 
$name = $_POST['name'];
$gender = $_POST['gender'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$comments = $_POST['comments'];

$query = "INSERT INTO contact_us (age,name,gender,email,phone,comments)
VALUES ('$age','$name','$gender','$email','$phone','$comments')";

mysql_query($query);

mysql_close();

$yoursite = "Mysite ";
$youremail = $email;

$subject = "Website Guest Contact Us Form";
$message = "$name would like you to contact them 
                            Contact PH:  $phone
Email:  $email
Age: $age
Gender: $gender
Comments:  $comments";

$email2 = "my@email.com";

mail($email2, $subject, $message, "From: $email");

echo"<div class='thankyou'>Thank you for contacting us,<br /> we will respond as soon as we can.</div>";

}
}
?>

電子メールは正常に送信されていますが、データがデータベースに保存されていません...何か不足していますか? 別のお問い合わせページで使用するスクリプトと同じですが、同じページのデータを解析する代わりに、このデータを「thankyou.php」ページに送信するだけの違いがあります... $_POST を $_GET に変更してみましたしかし、それはページを殺しました...私は何が間違っていますか?

4

2 に答える 2

3

まず、SQL クエリにデータを挿入する前に、データをエスケープする必要があります。

mysql_real_escape_stringこれは、次のように関数を使用して実行できます。

$name = mysql_real_escape_string($_POST['name']);
// ... same for other fields that contain strings
$comments = mysql_real_escape_string($_POST['comments']);


これにより、データ内の引用符が確実にエスケープされ、最初に SQL クエリ内のフィールドのデータの周りにある引用符を台無しにしないでください。

次に、 SQL インジェクションの防止に役立ちます。


また、クエリの実行中にエラーが発生した場合は、エラーの原因をログに記録するために、その関数によってmysql_query返さfalseれる値をテストする必要があることを意味します。

$result = mysql_query($query);
if ($result === false) {
    // An error has occured...
    echo mysql_error();
}

注 : ここではエラー メッセージを表示しましたが、代わりに、アプリケーションを本番環境に配置する前に、エラーをどこか(ファイルなど)記録する必要があります。エラーメッセージ !

于 2010-03-11T21:15:56.663 に答える
0

からの結果をチェックして、mysql_query(...)失敗したかどうかを確認します。失敗しなかった場合、MySQL は確実に情報を保存しているはずです。

于 2010-03-11T21:22:23.877 に答える