2013-03-18 3 views
0

У меня возникают проблемы с PHP и MYSQL. У меня есть HTML-форма, которая при отправке запускает следующий скрипт PHP. Проблема в том, что следующий PHP-код дважды вставляет данные в базу данных. Я думаю, что это что-то делать со следующей PHP, а не база данных:PHP вставляет две повторяющиеся строки в базу данных MYSQL

<?php 

$first_name = $_POST['firstname']; 
$last_name = $_POST['lastname']; 
$display_name = $_POST['displayname']; 
$email = $_POST['email']; 
$password = $_POST['password']; 
$add_line1 = $_POST['addline1']; 
$add_line2 = $_POST['addline2']; 
$city = $_POST['city']; 
$county = $_POST['county']; 
$postcode = $_POST['postcode']; 

$sql = "INSERT INTO members (memberID, 
memberPassword, 
memberFirstName, 
memberLastName, 
memberAddressLine1, 
memberAddressLine2, 
memberCity, 
memberCounty, 
memberPostcode, 
memberDisplayName) 
VALUES ('$email', 
'$password', '$first_name', '$last_name', 
'$add_line1', '$add_line2','$city', 
'$county', '$postcode', '$display_name')"; 

if (!mysqli_query($conn,$sql)) 
{ 
    die('Error: ' . mysqli_error($conn)); 
} 
mysqli_query($conn,$sql); 
echo 'Guest Added'; 
mysqli_close($conn); 

?> 

ответ

6
if (!mysqli_query($conn,$sql)) 
{ 
    die('Error: ' . mysqli_error($conn)); 
} 
mysqli_query($conn,$sql); 

Вы mysqli_query($conn,$sql); в вашем коде дважды. Один раз в if() и один раз снаружи. Каждый из них будет вставляться в вашу базу данных.

Следует обратить внимание на то, что значение mysqli_query внутри if оценивается, то есть оно выполняется, а оператор if выполняется по результату вызова функции. Таким образом, вам не нужно называть это снова.

+0

Да; 'mysqli_query ($ conn, $ sql);' можно удалить и просто добавить 'else {}' в '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'Комментарий '', как показатель успеха. – 2013-03-18 22:29:37

+0

Спасибо, что помогли - не понимали, что он побежал при оценке. – underflow

2

Tushar указал на двойные запросы Mysqli и он прав, кроме того, код, как теперь может вызвать у вас проблемы безопасности, поскольку она позволяет SQL-инъекции ...

Пожалуйста, измените код следующим образом:

$first_name = mysqli_escape_string($conn, $_POST['firstname']); 
$last_name = mysqli_escape_string($conn, $_POST['lastname']); 
$display_name = mysqli_escape_string($conn, $_POST['displayname']); 
$email  = mysqli_escape_string($conn, $_POST['email']); 
$password  = mysqli_escape_string($conn, $_POST['password']); 
$add_line1 = mysqli_escape_string($conn, $_POST['addline1']); 
$add_line2 = mysqli_escape_string($conn, $_POST['addline2']); 
$city   = mysqli_escape_string($conn, $_POST['city']); 
$county  = mysqli_escape_string($conn, $_POST['county']); 
$postcode  = mysqli_escape_string($conn, $_POST['postcode']); 
+1

Отличный совет - новый для PHP и хорошо разбирающийся в практике безопасности. – underflow

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