我正在进行passowrd重置,但我遇到的问题是,当密码即将因某种原因而得到更新时,这里更改的是我的代码
>?php
if ($password == $confirmpassword)
{
echo "$password";
echo "</br>";
//has and secure the password
$npassword = password_hash('$password', PASSWORD_BCRYPT, array('cost' => 10));
echo "$npassword";
// Update the user's password
$query = $conn->prepare('UPDATE users SET password = :password WHERE email = :email');
$query->bindParam(':password', $npassword);
$query->bindParam(':email', $email);
$query->execute();
$conn = null;
echo "Your password has been successfully reset.";
}
else
echo "Your password's do not match.";
}
?>
示例我尝试使用demo123作为密码,当我回显$ password我得到demo123,当我回应$ npassword我得到一个代码,当我手动做
>?php $npassword = password_hash('demo123', PASSWORD_BCRYPT, array('cost' => 10));?>
我得到另一个哈希现在这确实有效,如果我手动添加它,如果我使用变量$ password我得到另一个代码错误的方式因为我无法登录但如果我这样做手动和更新它然后demo123工作。< / p>
我做错了什么,我是新手
答案 0 :(得分:1)
如果要在字符串中使用变量,则必须使用双引号("
)。
但是,在您的情况下,由于您正在使用变量并且不向其添加任何内容,因此您只需删除引号:
$npassword = password_hash($password, PASSWORD_BCRYPT, array('cost' => 10));
此外,由于cost
已默认为10
,您可以省略以下内容:
$npassword = password_hash($password, PASSWORD_BCRYPT);
答案 1 :(得分:0)
password_hash
结果总是不同的,您无法通过生成的哈希查询mysql,您需要获取用户并执行password_verify ($password, $hash);
而不是
$ password 是&#39; demo123&#39;和 $ hash 是来自DB的密码列值