为什么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();
}
?>