为什么php密码验证失败?

为什么php密码验证失败?,php,password-encryption,login-script,Php,Password Encryption,Login Script,所以我用user\u id,user\u mail和user\u pwd创建了一个数据库。用户\u pwd是varchar(255)。我生成了一个哈希密码,它等于密码\u hash()。我有下面的代码,用于登录。(我只想登录,不想注册) 旁白:您正在绑定参数,因此mysqli\u real\u escape\u string()毫无意义-更糟糕的是,它可能会损坏完全有效的密码。要解决此问题,请首先使用echo在数据库中显示两个值->输入密码的散列和存储的散列,然后您可以了解下一步。你需要一步一步

所以我用
user\u id
user\u mail
user\u pwd
创建了一个数据库。
用户\u pwd
varchar(255)
。我生成了一个哈希密码,它等于
密码\u hash()
。我有下面的代码,用于登录。(我只想登录,不想注册)


旁白:您正在绑定参数,因此
mysqli\u real\u escape\u string()
毫无意义-更糟糕的是,它可能会损坏完全有效的密码。要解决此问题,请首先使用echo在数据库中显示两个值->输入密码的散列和存储的散列,然后您可以了解下一步。你需要一步一步地找到它。无论如何,正如拉赫鲁特所说,你需要先做一些简单的调试,并检查所比较的值是否符合你的预期。@NiravJoshi为什么你要通过更改一段重要的代码来破坏这篇文章,使其具有不同的行为和意义?我说的是你在哪里无缘无故地把
$row['user\u pwd']
改成了
“hash”
。请以后不要这样做。这使得这个问题和评论毫无意义。编辑是可以的,但只是为了澄清,而不是随意改变事情,使之完全不同。@ADyson道歉。但是那篇文章是别人编辑的,我用拼写更正重新编辑了。当时在“hash”的位置使用了$hash。我的坏朋友再次为这样的错误道歉。我以后会处理的。谢谢你指点我。:)旁白:您正在绑定参数,因此
mysqli\u real\u escape\u string()
毫无意义-更糟糕的是,它可能会损坏完全有效的密码。要解决此问题,请首先使用echo在数据库中显示两个值->输入密码的散列和存储的散列,然后您可以了解下一步。你需要一步一步地找到它。无论如何,正如拉赫鲁特所说,你需要先做一些简单的调试,并检查所比较的值是否符合你的预期。@NiravJoshi为什么你要通过更改一段重要的代码来破坏这篇文章,使其具有不同的行为和意义?我说的是你在哪里无缘无故地把
$row['user\u pwd']
改成了
“hash”
。请以后不要这样做。这使得这个问题和评论毫无意义。编辑是可以的,但只是为了澄清,而不是随意改变事情,使之完全不同。@ADyson道歉。但是那篇文章是别人编辑的,我用拼写更正重新编辑了。当时在“hash”的位置使用了$hash。我的坏朋友再次为这样的错误道歉。我以后会处理的。谢谢你指点我。:)
<?php
session_start ();
define ('SECURE', true);

if(isset($_POST['login-submit'])){
require_once('db.inc.php');

$user_mail = mysqli_real_escape_string($_POST['mailuid']);
$user_pwd = mysqli_real_escape_string($_POST['pwd']);


if(empty($user_mail) || empty($user_pwd)) {
  header("Location: /login.php?error=emptyfields");
  exit();
}
else {
  $sql = "SELECT * FROM Guest WHERE user_mail=?;";
  $stmt = mysqli_stmt_init($connect);
  if (!mysqli_stmt_prepare($stmt, $sql)) {
    header("Location: /login.php?error=sqlerror");
    exit();
  }
  else {
    mysqli_stmt_bind_param($stmt, "s", $user_mail);
    mysqli_stmt_execute($stmt);
    $result = mysqli_stmt_get_result($stmt);
    if ($row = mysqli_fetch_assoc($result)) {
      $pwdCheck = password_verify($user_pwd, $row['user_pwd']);
      if ($pwdCheck == false) {
        header("Location: /login.php?error=wrongPassword"); --> that's where I am send to. 
        exit();
      }
      elseif($pwdCheck == true) {
        $_SESSION['userID'] = $row['user_id'];
        header("Location: /download.php?login=success");
        exit();
      }
      else {
        header("Location: /login.php?error=wrongPassword");
        exit();
      }
    }
    else {
      header("Location: /login.php?error=NoUser");
      exit();
    }
   }
  }
 }
else{
  header("Location: ../login.php?success");
  exit();
}

 ?>