Ошибка обновления старого пароля с помощью password_hash
У меня проблема при обновлении старого пароля новым password_hash, всегда говорилось, что старый пароль неверный.
Стол: Пегавай
Поле: ноком, нама, уол1
Вот мой код:
<?php session_start();
require "config.php";
$nokom = $_POST['nokom'];
$pswlama = password_hash($_POST['pswlama'], PASSWORD_DEFAULT);
$pswbaru = password_hash($_POST['pswbaru'], PASSWORD_DEFAULT);
$cari = "SELECT * FROM pegawai WHERE nokom ='".$nokom."'";
$result = mysqli_query($conn,$cari);
if (mysqli_num_rows($result) > 0)
{
while ($data = mysqli_fetch_array($result))
{
if(password_verify($pswlama, $data['uol1']))
{
$perintah = "UPDATE pegawai SET uol1 = '$pswbaru' WHERE nokom = '$nokom' ";
if (mysqli_query($conn, $perintah))
{
echo "<script>alert('Success');location.replace('home.php')</script>";
}
else
{
echo "Error updating record: " . mysqli_error($conn);
}
}
else
{
echo "<li>Old password is wrong!</li>";
}
}
}
else
{
echo "Data not found";
}
?>
Любая помощь будет отличной, спасибо.
2 ответа
Решение
Изменить это
$pswlama = password_hash($_POST['pswlama'], PASSWORD_DEFAULT);
к этому. password_verify будет обрабатывать все остальное.
$pswlama = $_POST['pswlama'];
оставьте свой код таким же.
Вы помещаете хэш в оба аргумента password_verify. Прочтите руководство по password_verify, и вы увидите, что первым аргументом должен быть не хеш, а сам пароль для сравнения с хешированным паролем (аргумент 2), который хранится в вашей базе данных.
Вы хешируете пароль, прежде чем передать его в password_verify здесь:
$pswlama = password_hash($_POST['pswlama'], PASSWORD_DEFAULT);
...
if(password_verify($pswlama, $data['uol1']))
Вы должны проходить $_POST['pswlama']
непосредственно к password_verify.