我目前正在用 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”变量但没有任何帮助。
最佳答案
您的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')");
}
}
现在您也可以在数据库中阻止它:
- 在表
数据库
的email
列上添加UNIQUE INDEX
- 现在使用
INSERT IGNORE
,因此如果电子邮件未使用,则会插入,如果电子邮件已使用,则会忽略
最后,使用准备语句并绑定(bind)参数来避免 SQL 注入(inject)!
希望对你有帮助
关于php - 数据插入到数据库中,即使它已经存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56833377/