我似乎无法让这个测试显示来自数据库的散列密码。它可以很好地显示表单中的密码。尝试进行此测试以找出为什么我无法从表单中验证密码与存储在数据库中的密码相比。我读过一些关于转义散列中的 $ 符号的内容,但我不确定如何使用我正在使用的代码来做到这一点。不管怎样,有些事情是不对的。任何帮助将不胜感激!
require('../connect.php');
$username = $_POST['username-sign-in'];
$password = $_POST['password-sign-in'];
$hashedpassword = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);
if (empty($username)) {
echo 'Please enter your username.';
exit();
}
if (empty($password)) {
echo 'Please enter your password.';
exit();
}
if (isset($username, $password)) {
$getuser = $connection->prepare('SELECT `username`, `password` FROM `users` WHERE `username` = ? AND `password` = ?');
$getuser->bind_param('ss', $username, $hashedpassword);
$getuser->execute();
$userdata = $getuser->get_result();
$row = $userdata->fetch_array(MYSQLI_ASSOC);
echo 'Password from form: ' . $hashedpassword . '<br />';
echo 'Password from DB: ' . $row['password'] . '<br />';
if (password_verify($row['password'], $hashedpassword)) {
echo 'Success.';
exit();
}
else {
echo 'Fail.';
exit();
}
}
else {
echo 'Please enter your username and password.';
$connection->close();
exit();
}