我有一个提交数据的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>";
}
}
?>
电子邮件很好,但数据没有存储dbase ...我错过了什么? 它与我在另一个联系我们页面上使用的脚本相同,唯一的区别是不是在同一页面上解析数据,我现在将此数据发送到“thankyou.php”页面...我尝试将$ _POST更改为$ _GET但那会杀死那个页面......我做错了什么?
答案 0 :(得分: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 Injections。
此外,如果在执行查询期间出现错误,mysql_query
将返回false
- 这意味着您应该测试该函数返回的值 - 可能记录错误原因:
$result = mysql_query($query);
if ($result === false) {
// An error has occured...
echo mysql_error();
}
注意:在这里,我只是显示了错误消息 - 但您应该在将应用程序投入生产之前将错误记录到某处(例如文件):您的用户不要需要(也不想要)才能看到任何技术错误消息!
答案 1 :(得分:0)
检查mysql_query(...)
的结果,看它是否失败。如果它没有失败,MySQL肯定会为你存储信息。