Mysql / PHP密码验证无法正常工作

时间:2017-11-19 00:48:10

标签: php mysql

我已经搜遍了所有问题的答案,但我无法找到答案。

我试图使用PHP和MySQL数据库创建一个登录系统,并且我遇到了验证功能的问题。

要哈希密码,我使用此代码:

$hash = password_hash('$passwordPost', PASSWORD_DEFAULT);

散列密码作为一个整体存储在我的数据库中(数据库字段为VARCHAR(255))。

为验证密码我使用:

$sql = "SELECT * FROM Gebruikers WHERE Email = '$emailPost'";
$result = mysqli_query($conn,$sql);

while($row = mysqli_fetch_assoc($result)) {

    if(password_verify($passwordPost, $row["Paswoord"])) {
        $_SESSION['login_user'] = $row["Email"];
        $_SESSION['rol'] = $row["Rol"];
        echo("Logged in als: " + $_SESSION['login_user'] + " met als rol: " + $_SESSION['rol']);
      break;
    }else {
        echo("Your Login Name or Password is invalid");
        break;
    }
}

我还检查了创建的哈希是否与获取的哈希相同,而且似乎就是这种情况。

但是,当使用测试值(而不是来自数据库)时,函数password_verify似乎有效。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

单引号按字面解析,因此当$foo = "bar"'$foo' =“$ foo”而"$foo" =“bar”时
最重要的是,引号是不必要的,您只需使用$foo

所以在你的情况下,这看起来像:

$hash = password_hash($passwordPost, PASSWORD_DEFAULT);

这样,您的String Operators不正确,其正确用法为$a = $b.$c,而不是$a = $b + $c

您可能还需要注意,在提供的示例中,此处有一个拼写错误:if(password_verify($passwordPost, $row["Paswoord"])) {,其中显示“Passwoord”而不是“密码”。

希望我帮忙! -CM