2014-02-20 2 views
2

У меня есть форма, которая содержит вход: почтовый и я хотел бы удалить строку из моей базы данных, когда значение электронной почты существует в базе данных но не работает мой HTML являетсяОшибка Удаление строки из PHP

<form action="delete.php" method="post"> 
<h3>Email:</h3><input type="text" name="email" required/> 
<input type="submit" value="Delete" /> 
</form> 

мой PHP страница

<?php 
include("connexion.php"); 
$email=$_POST['email']; 
$req='DELETE FROM `personne` WHERE email="$email";'; 
if(mysql_query($req)) 
{ 
echo 'Delete with succes '; 
} 
else 
echo 'error'; 

так показать мне 'Удалить с Succes', но когда я проверить изменения ничего DB

+1

Ваш скрипт [склонен к SQL-инъекциям] (http://bobby-tables.com), а также [расширение mysql устарело] (http://www.php.net /manual/en/function.mysql-query.php). Вы должны переключиться на [MySQLi] (http://www.php.net/manual/en/book.mysqli.php) или [PDO] (http://www.php.net/manual/en/ref.pdo -mysql.php) и использовать подготовленные заявления. – TimWolla

+0

спасибо за ваши ответы, это была основная синтаксическая ошибка '' , но я хотел бы понять, почему mysql_query ($ req) возвращает true, даже если запрос был неправильным – Marooweb

ответ

3

В закрытой цепочке апострофов $ email не заменяется переменной $email.

Заменить его на этом

"DELETE FROM `personne` WHERE email='$email';"; 

mysql_query($req) возвращает значение ИСТИНА, поскольку запрос удалось: он удален нулевые строки. См. the reference:

mysql_query() возвращает ресурс при успешном выполнении или FALSE при ошибке.

... и ресурс был оценен как истинный, поскольку PHP является слабо типизированным языком.

Если вы хотите проверить, сколько строк было удалено, используйте mysql_affected_rows(). Но так как функции mysql_* устарели, рекомендую перейти на mysqli.

Также внимательно прочитайте комментарий TimWolla к вашему ответу. На этот раз нулевые электронные письма были удалены, но если вы немного испортите условие, вы можете легко удалить ВСЕ записи из личной таблицы. Вы можете сделать это немного менее опасно, если вы добавите LIMIT 1

2
$req = "DELETE FROM personne 
    WHERE email = '" . $email . "';"; 

И, пожалуйста, подумайте о защите электронной почты, чтобы избежать инъекций SQL, и, если возможно, переключитесь на PDO.

Что касается вашего ответа (я не могу добавить комментарий, пока):

mysql_query возвращает положительный результат MySQL ресурс результата запроса, или FALSE при ошибке. Функция также возвращает TRUE/FALSE для запросов INSERT/UPDATE/DELETE для указания успеха/отказа.

Поскольку ваш запрос не прерывается, функция возвращает true.

0

Базовый синтаксис PHP: ' -quoted строки НЕ интерполировать переменные:

$req="DELETE FROM `personne` WHERE email='$email';"; 

Примечание разворот из " и ' кавычки. И обратите внимание, что вы уязвимы для SQL injection attacks

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