注册电子邮件地址是唯一的

时间:2017-03-03 05:56:34

标签: php

我想验证电子邮件地址以确保它是唯一的。
通过使用以下代码,它假设检查用户输入是否为空,是否是有效的电子邮件地址,并且它没有重复
但我的代码似乎不起作用,并给了我以下错误 我已经完成了其他人提出的问题,但我仍然没有解决问题

  

警告:mysqli_num_rows()期望参数1为mysqli_result,   

中给出的布尔值

我想知道我的'if'语句序列是错的还是还有什么? 有什么帮助吗?

这是我的代码

if (empty($_POST["email"])) {
    $emailErr = "Email is required";
    $valid = false;
    } else {
        $email = test_input($_POST["email"]);

    if  (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $emailErr = "Invalid email format"; 

    } if($email != "") {
        $result = mysqli_query($conn,"SELECT * FROM email where email='".$email."'");
        $num_rows = mysqli_num_rows($result);

    }if($num_rows >= 1){
        $emailErr = "Email already in use";
        $valid =false;
    }

}

2 个答案:

答案 0 :(得分:0)

你应该在将mysqli_query传递给mysqli_num_rows之前检查结果(即$ result),参见documentation

答案 1 :(得分:0)

使代码易于维护以备将来使用。我已更新您的代码,请检查此解决方案。

error_reporting(E_ERROR | E_PARSE);
$mysqli = new mysqli("localhost", "my_user", "my_password", "worldDB");
if (isset($_POST['submit']){

    $email = $_POST['email'];
    $emailErr = "Email is required";
    if(!filter_var($email, FILTER_VALIDATE_EMAIL) === false) 
    {
        $sql = "SELECT count(*) FROM emails where email='".$email."'";
        $result = $mysqli->query($sql);

        if($result->num_rows >= 1){
            echo "email already exist";
        } else {
            $sql = "INSERT INTO emails (email) VALUES ('$email')";
            $result = $mysqli->query($sql);
            echo "Thank you for Submitting.";
        }
    }
    else
    {
        $emailErr = "Invalid email format";
    }

}

希望这会有所帮助。