2013-05-09 3 views
0

В форме, которую я построил, форма проверяется с помощью проверки Javascript spry, а затем после этого отправляется в форму php, которая вытягивает поля сообщения с помощью POST метод.PHP-форма не всегда записывается в базу данных

После этого запрос sql, как показано ниже, отправляет данные в базу данных.

$title = $_POST["title"]; 
$first_name = $_POST["first_name"]; 
$surname = $_POST["surname"]; 
$address1 = $_POST["address1"]; 
$address2 = $_POST["address2"]; 
$town = $_POST["town"]; 
$county = $_POST["county"]; 
$country = $_POST["countries"]; 
$telephone_home = $_POST["telephone-home"]; 
$telephone_mobile = $_POST["telephone-mobile"]; 
$comments = $_POST["comments"]; 
$letter = $_POST["q1-letter"]; 
$updates = $_POST["q1-updates"]; 
$paye = $_POST["PAYE"]; 

//establish connection 
$con= mysqli_connect("localhost","#######","###########","############"); 
// Check connection 
if (mysqli_connect_errno()) 
    { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 


mysqli_query($con,"INSERT INTO wp_donations (prefix, first_name, second_name, amount, address1, address2, citytown, county, country, email, comments, letter, updates, paye) 
    VALUES ('$title','$first_name','$surname','$amount2','$address1','$address2','$town','$county','$country','$email','$comments','$letter','$updates','$paye')"); 
mysqli_close($con); 

?> 

Теперь большую часть времени это работает отлично, и любые тесты, которые я проделал, также работают. Однако мой клиент сообщает, что есть записи формы, которые не отображаются в базе данных. Эта форма используется для обработки платежа, а клиент перекрестно проверяет платежи с информацией в базе данных и журналами платежных процессоров.

Я не могу на всю жизнь понять, как некоторые из них могут не появляться в базе данных, так как нет способа обработать платеж, не переходя через эту страницу php (он также содержит обработку платежа компоненты)

Может ли быть что-то, что мне не хватает здесь, что может позволить обработку платежа, но не отображаться в базе данных?

Ваша помощь всегда ценится

+0

Возможно, данные разбивают ваш SQL, не используя 'mysql_escape_string()', переключитесь на mysqli или PDO 'prepare'. И.Е. что если фамилия O'Neil – Waygood

+2

Он использует mysqli, его просто он не делает это правильно/безопасно – allen213

+0

Скажите, пожалуйста, вы знаете о SQL-инъекциях ... –

ответ

0

Вам необходимо сцепить переменные

Как это ...

mysqli_query($con, "INSERT INTO wp_donations (prefix, first_name, second_name, amount, address1, address2, citytown, county, country, email, comments, letter, updates, paye) 
             VALUES ('".$title."','".$first_name."','".$surname."','".$amount2."','".$address1."','".$address2."','".$town."','".$county."','".$country."','".$email."','".$comments."','".$letter".','".$updates."','".$paye."')"); 
+0

, это не является причиной ошибки. Вы можете получить доступ к переменным, например, если вы используете двойные кавычки. –

1

Вы должны смотреть в mysqli prepared statements

Вы просто принимая пост переменные, как вы их получите, что плохой идеей. Но кроме потенциал для SQL инъекций, давайте посмотрим на простом примере, который я считаю, это то, что происходит в вашем случае:

$x = $_POST['x']; 

$sql = "INSERT INTO `table` (`address`) VALUES ('$x')"; 

Теперь давайте предположим, что $x является 1234 Captain's Creek rd

Ваш запрос будет выглядеть следующим образом :

$sql = "INSERT INTO `table` (`address`) VALUES ('Captain's Creek rd')"; 

У вас возникла проблема с этим? То, что 'в строке завершает это поле, а затяжная строка, заканчивающая цитируемое значение, является синтаксической ошибкой, которая приведет к сбою запроса.

Если вас bind the parameters, вы можете иметь MySQLi избежать входных значений:

$sql = $mysqli->prepare("INSERT INTO `table` (`address`) VALUES (?)"); 
$sql->bind_param("s", $x); 
$sql->execute(); 

Если у вас есть вопросы, не стесняйтесь спросить, и я могу обновить.

+0

Это отличный ответ на вопрос, но прочитайте [Эта ссылка] (http://php.net/manual/en/mysqli-stmt.bind- param.php), чтобы лучше понять, как работает 'bind_param', если у вас есть более сложный запрос. – FireCrakcer37

+0

, который связан в ответе. вы должны действительно просмотреть полный учебник по mysqli или ознакомиться с предложениями других людей о защите от инъекций и т. д. –

Смежные вопросы