PHP不会重置密码
我正在尝试使用php创建一个密码重置页面。但问题是,当我输入新密码,然后按下重置按钮时,程序将创建一个随机密码并将其保存在数据库中。不是我以前进的那个。多谢各位 以下是我使用的代码:PHP不会重置密码,php,mysql,reset-password,Php,Mysql,Reset Password,我正在尝试使用php创建一个密码重置页面。但问题是,当我输入新密码,然后按下重置按钮时,程序将创建一个随机密码并将其保存在数据库中。不是我以前进的那个。多谢各位 以下是我使用的代码: <?php require_once 'inc/dbconnection.php'; if(isset($_POST["reset-password"])){ $name = $_GET["Fname"]; $password = trim($_POST
<?php
require_once 'inc/dbconnection.php';
if(isset($_POST["reset-password"])){
$name = $_GET["Fname"];
$password = trim($_POST["password"]);
$confirmPassword = trim($_POST["confirmPassword"]);
if($password == $confirmPassword) {
$password = password_hash($password, PASSWORD_DEFAULT);
$stmt = $db->prepare("UPDATE sec SET password= ? WHERE Fname = ?");
$stmt->execute(array($password,$name));
$affected_rows = $stmt->rowCount();
if($affected_rows) {
$success_message = "Password is reset successfully.<br>Now you are redirecting";
header("Refresh:3; url=loginSf.html");
} else {
$error_message = "Failed : <br> Password not updated";
}} else {
$error_message = "Password not matched";
} } ?>
<!DOCTYPE html>
<html>
<head>
<title>Reset Password</title>
<link rel="stylesheet" type="text/css" href="styless.css">
</head>
<body>
<br><br><div id="sidebar-left"></div>
<div class="reset"> Reset password </div><br><br>
<form id="reserPassword" action="new_pass.php" name="reserPassword" method="post">
<br><br><br><br><br><br><br><br><br><br>
<div id="borr"> Reset Password<br>
<?php if(!empty($success_message)) { ?>
<?php echo $success_message ?>
<?php } ?>
<?php if(!empty($error_message)) { ?>
<?php echo $error_message ?>
<?php } ?>
<br> <input type="password" id="password" name="password" placeholder="Enter a New Password" required>
<br> <input type="password" id="confirmPassword" name="confirmPassword" placeholder="Confirm Password" required>
<br><input type="submit" value="Reset Password" name="reset-password" id="forget-password"> </form></div></body></html>
重置密码
重置密码
重置密码
让我猜猜:数据库中有类似于$2y$10$nUT/9PN0hVuk0q3ci6aSJer1Ln05UGmWDTELUzAKU46qUExZZOD1W
的东西吗?
password\u hash
用于对密码[1]进行哈希运算,以便它们不会以纯文本形式存储在数据库中
它是PHP密码哈希函数的一部分[3]。正如您所说的,存储了一个“随机”密码,我猜您没有想到这一点,而是按照告诉您的或在示例中使用的方式使用了此函数
因此,您应该阅读相关函数,以检查用户用于登录的密码是否正确:password\u verify
[2]
一个小例子:
$password = 'im_an_apple';
// creates a hash with the current default algorithm
$hashed = password_hash($password, PASSWORD_DEFAULT);
echo $hashed;
// e.g. $2y$10$nUT/9PN0hVuk0q3ci6aSJer1Ln05UGmWDTELUzAKU46qUExZZOD1W
// this string holds all needed informations:
// used hashing algorithm, salt, hash
// to verify this:
$verifiesPW = password_verify($password, $hashed);
$verifiesRandom = password_verify('assdfghj', $hashed);
var_dump($verifiesPW); // true
var_dump($verifiesRandom); // false
由于数据库中可能还有一些纯文本密码,因此登录脚本可能包含以下内容:
$passwordFromInput = 'im_a_banana';
$passwordFromDB = 'im_a_banana';
$isCorrectPassword = false;
$needsHash = password_get_info($passwordFromDB)['algoName'] === 'unknown'; //true
if ($needsHash) {
$isCorrectPassword = $passwordFromInput === $passwordFromDB;
} else {
$isCorrectPassword = password_verify($passwordFromInput, $passwordFromDB);
}
if ($isCorrectPassword && $needsHash) {
$passwordHash = password_hash($passwordFromInput, PASSWORD_DEFAULT);
// store $passwordHash in db
}
这使用password\u get\u info
[4]来检查所使用的哈希算法。如果未对密码进行哈希运算,它将作为哈希算法返回unknown
。因此,当用户登录时,密码将存储为哈希
参考资料:
[1]
[2]
[3] 是否尝试使用
var\u dump($var)进行调试;退出()代码>在逻辑位置,查看代码因可能的错误值而停止正常工作的位置?“程序将创建随机密码”-上述代码中没有任何内容会“生成”任何密码。不过,您确实要对密码进行哈希运算(这很好)。如果你指的是新的散列,那么每次都会给你一个新的散列,但这是它应该的。谢谢你的回答,但是。。我想当我输入新密码时,它将按原样保存在数据库中,我的情况是程序将保存另一个随机密码。而不是仅仅发布示例链接,你应该把它们包括在答案中,只需添加链接作为参考。另外,我想知道在这个用户案例中,这个答案与密码重置有什么关系password\u verify()
用于在登录时验证密码in@kuh-谢谢你的帮助。。因此,新密码将转换为哈希形式,然后保存在数据库中,因此当用户尝试使用新密码登录时,它将与数据库中的哈希不匹配。。因此,我需要验证密码以匹配数据库中的哈希。。好的,我应该在登录页面中进行验证吗?对不起,我还是学生。验证应该在登录脚本中进行。我会更新我的答案