MySQL не сохраняет данные? - PullRequest
0 голосов
/ 12 марта 2010

У меня есть контактная форма 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 но это убило страницу ... что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 12 марта 2010

Прежде всего, вы должны экранировать свои данные , прежде чем вводить их в свой запрос 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();
}

Примечание: здесь я только что отобразил сообщение об ошибке - но вместо этого вы должны зарегистрировать ошибку где-нибудь (например, в файле) , прежде чем запускать ваше приложение в производство: ваши пользователи этого не делают нужно (или не хотеть) , чтобы увидеть любое сообщение о технической ошибке!

0 голосов
/ 12 марта 2010

Проверьте результат из mysql_query(...), чтобы увидеть, провалился он или нет. Если это не сработало, MySQL определенно должен был сохранить информацию для вас.

...