我正在建立一个具有登录系统的网站。当用户想要注册并输入电子邮件时,MySQL数据库中应该已经不存在该电子邮件了。我正在尝试通过准备好的语句来编写代码。
当用户输入数据库中已经存在的电子邮件时,我希望它将用户发送到具有标头功能的同一注册页面,但存在某种错误。我试图将行数存储在名为$ resultcheck的变量中,并检查是否有相同的电子邮件大于0的列(如果已经存在)。
代码如下:
$query = "SELECT * FROM users WHERE Mail=?;";
$stmt = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmt, $query))
{
header("Location: ../registrering.php?error=sqlerror");
exit();
}
else
{
mysqli_stmt_bind_param($stmt, "s", $mail);
mysqli_stmt_execute($stmt);
mysqli_stmt_store_result($stmt);
$resultCheck = mysqli_stmt_num_rows($stmt);
if($resultcheck > 0)
{
header("Location: ../registrering.php?error=emailtaken");
exit();
}
else {...}
但是,当我提交的帐户中数据库中已经有一封电子邮件时,我成功地在表用户中输入了另一列,并且有多个列包含相同的电子邮件。
答案 0 :(得分:2)
您要分配$resultCheck
,然后测试另一个称为$resultcheck
的变量,该变量始终为0。
所以您的错误是变量命名中的错字。
答案 1 :(得分:0)
除了使用SELECT SQL进行检查外。您应该将mysql中的列设置为unique。参见https://www.w3schools.com/sql/sql_unique.asp。