尝试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";
}
}
答案 0 :(得分:2)
一个问题是$hash
的条件检查。
返回值
返回哈希密码,或者失败时返回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
希望它有效。