【问题标题】:Error Updating Old Password with with password_hash使用 password_hash 更新旧密码时出错
【发布时间】:2015-08-21 23:10:20
【问题描述】:

我在用新的password_hash更新旧密码时遇到问题,它总是说旧密码是错误的。

桌子:pegawai

字段:nokom、nama、uol1

这是我的代码:

<?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";
  }
?>

任何帮助都会很棒,谢谢。

【问题讨论】:

  • 如果您只得到一行,则不需要 while 循环(我猜 nokom 应该是唯一键)。

标签: php mysql password-hash


【解决方案1】:

您在 password_verify 的两个参数中都添加了一个哈希值。阅读 password_verify 的手册,您会发现第一个参数不应该是散列,而是要与存储在数据库中的散列密码(参数 2)进行比较的密码本身。

在将密码传递给 password_verify 之前,您正在对密码进行哈希处理:

$pswlama  = password_hash($_POST['pswlama'], PASSWORD_DEFAULT);
...
if(password_verify($pswlama, $data['uol1']))

您应该将$_POST['pswlama'] 直接传递给password_verify。

【讨论】:

    【解决方案2】:

    改一下

     $pswlama  = password_hash($_POST['pswlama'], PASSWORD_DEFAULT);
    

    到这个。 password_verify 将处理其余部分。

     $pswlama  = $_POST['pswlama'];
    

    保持其余代码不变。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-04
      • 2016-01-23
      • 1970-01-01
      • 2014-12-10
      相关资源
      最近更新 更多