我遇到过这个非常奇怪的问题。用户检查声明有效,而电子邮件声明由于某种原因不起作用。以下代码$con
也在两个if
之外定义。我不认为这是问题所在,因为用户名检查确实有效。
if(!empty($username)){
$username = $_POST['username'];
$stmt = $con->prepare("SELECT username from users where username= :name");
$stmt->bindParam(':name', $username);
$stmt->execute();
$rowcount = $stmt->rowCount($stmt);
if($rowcount > 0){
$errors[] = "name taken";
}
/* doesn't work for some reason */
if(!empty($email)){
if(filter_var($email, FILTER_VALIDATE_EMAIL)){
$email = $_POST['email'];
filter_var($email,FILTER_SANITIZE_EMAIL);
$stmt = $con->prepare("SELECT email from users where email= :email");
$stmt->bindParam(':email', $email);
$stmt->execute();
$rowcount = $stmt->rowCount($stmt);
if($rowcount > 0){
$errors[] = "email is already taken";
}
}
}
}
正如您所看到的,用户名errors[]
确实有效,而电子邮件却没有。我甚至试着回应它仍然没有希望:(
答案 0 :(得分:0)
在$email
声明中使用之前,您应该指定if
。因此,请在$username
之后对其进行初始化,例如:
if(!empty($username)){
$username = $_POST['username'];
$email = $_POST['email'];
...