我已经搜遍了所有问题的答案,但我无法找到答案。
我试图使用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似乎有效。
感谢您的帮助!
答案 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