Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Can';无法正确验证您的密码_Php_Mysql - Fatal编程技术网

Php Can';无法正确验证您的密码

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

试图验证密码,但无论如何都没有效果,我不明白真正的问题是什么,有人能解释一下吗?我不知道为什么我的$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";
    }

}

一个问题是
$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”}
在一个this
if($hash!==0&&$emailErr2==”“&$passwordErr2==”)语句之前,不管怎样,echo是错误的,即使我输入了正确的密码,你也需要添加一些检查点。志愿者将无法帮助您了解当前的信息量。尝试隔离哪些条件按预期工作,哪些不按预期工作。隔离后,告诉我们涉及哪些值,我们应该能够提供帮助。因此,如果您说使用if($hash){echo'Success';}否则{echo'Failed';}总是导致打印“Failed”,我会怀疑您的密码和hash密码不匹配。您是否有1000%确定它们是正确的?您在数据库中的密码字段中没有出现类似截断之类的情况吗?非常感谢大家,$hash,$hash!=0可以工作,但是$hash不行,不管怎样,我的问题解决了,很好luck@AlivetoDie我刚回到这一页,注意到这个重复的答案。这个新用户复制了我一小时前发布的技术。我不确定这个答案是否应该得到奖励。嘿,对不起,当我发布我的答案时,我没有看到你的答案。我向你保证我没有抄袭答案。正如你所看到的,我甚至已经说明了它可能不起作用的原因。请试着理解我没有抄袭你的答案。@Namah我理解,但是应该避免完全重复的答案。将来,在发帖之前一定要阅读所有已经存在的答案(只有两个)。是的,我会记住这一点。我真的很抱歉你这么想。无论如何,我给了你一张我这边的赞成票。虽然我怀疑它是否重要(因为我是新来的)。还有@AlivetoDie非常感谢你。这真的很重要。