我目前正在用PHP编写注册脚本,我的问题是即使数据已经存在,数据仍然插入数据库中。这可能是一些愚蠢的错误,或者我需要其他{}语句,或者我真的不知道。事实是,即使电子邮件已经存在于数据库中,它仍然会输入它。 它确实显示错误就可以了。
if(filter_var($email,FILTER_VALIDATE_EMAIL)){
$email = filter_var($email,FILTER_VALIDATE_EMAIL);
$email_check = mysqli_query($con, "SELECT email FROM database WHERE email='$email'");
$num_rows = mysqli_num_rows($email_check);
if($num_rows>0){
echo "The email is already in use.<br>";
}
$query = mysqli_query($con,"INSERT INTO database VALUES (NULL,'$username','$name','$email','$pwh','$date')");
}
?>
如果电子邮件已在使用中,则会显示回显“电子邮件已在使用中”。很好,但仍会插入它。我想念什么?我已经尝试使用'else'变量,但没有任何帮助。
答案 0 :(得分:3)
您的if
仅回声,然后无论如何您都执行INSERT
。一些解决方案:
if(filter_var($email,FILTER_VALIDATE_EMAIL)){
$email = filter_var($email,FILTER_VALIDATE_EMAIL);
$email_check = mysqli_query($con, "SELECT email FROM database WHERE email='$email'");
$num_rows = mysqli_num_rows($email_check);
if($num_rows>0){
echo "The email is already in use.<br>";
}
// ADD A ELSE SO YOU INSERT IF YOU HAVE NOTHING
else {
$query = mysqli_query($con,"INSERT INTO database VALUES (NULL,'$username','$name','$email','$pwh','$date')");
}
}
现在您也可以从数据库中阻止它:
UNIQUE INDEX
的列email
上添加database
INSERT IGNORE
,因此如果未使用电子邮件,它将插入;如果已经使用电子邮件,则忽略最后,使用prepare语句并将参数绑定到avoind SQL注入!
希望有帮助
答案 1 :(得分:0)
您的条件还不错,但是您继续进行插入操作。这是因为您已将其放在if之外。
您应该做的是:
if(!$num_rows <= 0){
<insert statement>;
}
else {
echo "The email is already in use.<br>";
}
答案 2 :(得分:-1)
将此语句写在else块中
!