我有一个包含输入的表单:mail 当数据库中存在电子邮件的值时,我想从我的数据库中删除行 但它不起作用 我的HTML是
<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';
所以它显示'删除成功',但是当我检查数据库没有任何改变时
答案 0 :(得分:3)
在撇号括起的字符串中,$ {01}变量不会替换$ email。
替换它
$email
"DELETE FROM `personne` WHERE email='$email';";
返回true,因为查询成功:它删除了零行。见the reference:
mysql_query()在成功时返回资源,或在出错时返回FALSE。
...并且资源被评估为true,因为PHP是弱类型语言。
如果要检查已删除的行数,请使用mysql_query($req)
。但由于mysql_affected_rows()
函数已弃用,我建议您转到mysqli。
还仔细阅读TimWolla对你的回答的评论。这次零电子邮件被删除了,但是如果你把这个条件搞得一团糟,你可以轻松地从人格表中删除所有记录。如果添加mysql_*
答案 1 :(得分:2)
$req = "DELETE FROM personne
WHERE email = '" . $email . "';";
请考虑保护电子邮件变量以避免SQL注入,如果可能,请切换到PDO。
关于你的回答(我无法添加评论):
mysql_query向查询结果返回正的MySQL结果资源,或者在出错时返回FALSE。对于INSERT / UPDATE / DELETE查询,该函数也返回TRUE / FALSE以指示成功/失败。
由于您的查询没有失败,该函数返回true。
答案 2 :(得分:0)
基本PHP语法:'
- 引用的字符串不插入变量:
$req="DELETE FROM `personne` WHERE email='$email';";
请注意"
和'
引号的反转。请注意,您很容易受到SQL injection attacks