Php Can';无法正确验证您的密码
试图验证密码,但无论如何都没有效果,我不明白真正的问题是什么,有人能解释一下吗?我不知道为什么我的$hash即使密码不匹配也会返回true,然后我的下一个if语句会无缘无故地执行Php Can';无法正确验证您的密码,php,mysql,Php,Mysql,试图验证密码,但无论如何都没有效果,我不明白真正的问题是什么,有人能解释一下吗?我不知道为什么我的$hash即使密码不匹配也会返回true,然后我的下一个if语句会无缘无故地执行 $sql = "SELECT * FROM users WHERE email='$email'"; $result = $conn->query($sql); $row = $result->fetch_assoc(); $hash_pwd = $row['password']; $hash = pass
$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";
}
}
一个问题是
$hash
的条件检查
报告说:
返回值
返回哈希密码,失败时返回FALSE
这是一个关于为什么你的“”让你失望的演示
$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==错误
<代码>$hash=0将起作用,但它可能会混淆未来开发人员对代码的理解。尝试使用
if($hash && $emailErr2=="" && $passwordErr2==""){
问题可能出在==
上,因为它还比较了类型
否则,请尝试使用$hash=0而不是$hash==0
希望它能起作用。这个$emailErr2和$passwordErr2
变量是从哪里来的?还有,当你有了记录,为什么要再次从上面的代码中查询我没有发布的代码(可能太多了),问题不在这些代码中variables@mickmackusa如果你没有什么有用的话,请拒绝评论。我的两个评论都是有用的。你的问题不仅对你有好处,对将来的其他人也有好处。提供一个智能的、有意义的、准确的标题将有助于未来的读者找到你的问题并利用页面上的知识。关于查询安全性,您将用户输入直接应用于数据库查询。您至少应该使用带有占位符的准备好的语句来避免注入攻击。我的评论没有冒犯性。我是来帮助(你,StackOverflow,还有未来的读者)的。我试过这个if($hash==true){echo“SUCCESS”;}另外{echo“wrnng”}
在一个thisif($hash!==0&&$emailErr2==”“&$passwordErr2==”)语句之前,不管怎样,echo是错误的,即使我输入了正确的密码,你也需要添加一些检查点。志愿者将无法帮助您了解当前的信息量。尝试隔离哪些条件按预期工作,哪些不按预期工作。隔离后,告诉我们涉及哪些值,我们应该能够提供帮助。因此,如果您说使用if($hash){echo'Success';}否则{echo'Failed';}总是导致打印“Failed”,我会怀疑您的密码和hash密码不匹配。您是否有1000%确定它们是正确的?您在数据库中的密码字段中没有出现类似截断之类的情况吗?非常感谢大家,$hash,$hash!=0可以工作,但是$hash不行,不管怎样,我的问题解决了,很好luck@AlivetoDie我刚回到这一页,注意到这个重复的答案。这个新用户复制了我一小时前发布的技术。我不确定这个答案是否应该得到奖励。嘿,对不起,当我发布我的答案时,我没有看到你的答案。我向你保证我没有抄袭答案。正如你所看到的,我甚至已经说明了它可能不起作用的原因。请试着理解我没有抄袭你的答案。@Namah我理解,但是应该避免完全重复的答案。将来,在发帖之前一定要阅读所有已经存在的答案(只有两个)。是的,我会记住这一点。我真的很抱歉你这么想。无论如何,我给了你一张我这边的赞成票。虽然我怀疑它是否重要(因为我是新来的)。还有@AlivetoDie非常感谢你。这真的很重要。