Ошибка обновления старого пароля с помощью 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.

Другие вопросы по тегам