无法正确验证验证密码

时间:2017-10-12 04:09:56

标签: php mysql

尝试password_verify,但无论如何没有任何作用,我不明白什么是真正的问题,可以解释一下吗?我不知道为什么我的$ hash返回true,如果密码不匹配,然后我的下一个IF语句无缘无故地执行

$sql = "SELECT * FROM users WHERE email='$email'";
$result = $conn->query($sql);
$row = $result->fetch_assoc();
$hash_pwd = $row['password'];
$hash = password_verify($password, $hash_pwd);
if ($hash !== 0 && $emailErr2 == "" && $passwordErr2 == "") {

    $sql = "SELECT * FROM users WHERE email='$email' AND password='$hash_pwd'";
    $result = $conn->query($sql);

    if($row = $result->fetch_assoc()) {
        echo "SUCCESS";
    }  else {
    echo "wrong";
    }

}

2 个答案:

答案 0 :(得分:2)

一个问题是$hash的条件检查。

php manual说:

  

返回值

     

返回哈希密码,或者失败时返回FALSE。

这是一个关于你的“not identical comparison operator”让你失望的原因的示范。

$hash = true;
if($hash!==0){
    echo "true passes";
}else{
    echo "true fails";
}

echo "\n\n";

$hash = false;
if($hash!==0){
    echo "false passes";
}else{
    echo "false fails";
}

输出:

true passes

false passes

您应该将$hash!==0更改为$hash$hash!==false$hash!=0可以使用,但可能会混淆未来开发人员对您的代码的理解。

答案 1 :(得分:0)

尝试使用

if($hash && $emailErr2=="" &&  $passwordErr2==""){

问题可能在===,因为它也会比较类型。

否则,只需尝试使用$hash!=0代替$hash!==0

希望它有效。