我创建了一个名为password_reset
的函数我的recover_password页面工作正常,并发送电子邮件并更新一个名为validation_code的字段,如我所料。
现在,当我收到电子邮件时,它会发送此链接
要重置密码,请访问
http://localhost/cms/account/reset-password.php?email=myemail.net&code=313893625577
现在,我在链接
中看到了一个名为reset-password.php
的页面
当你点击它完全进入页面
我的HTML
<?php display_message();?>
<?php password_reset();?>
<form role="form" action="reset-password.php" method="post">
<div class="form-group">
<label>Verification Code</label>
<input class="form-control" type="text" id="verification_code" name="verification_code" value="<?php echo isset($_GET['code']) ? $_GET['code'] : '';?>">
</div>
<div class="form-group">
<label>Email Address</label>
<input class="form-control" type="text" id="email" name="email" value="<?php echo isset($_GET['email']) ? $_GET['email'] : '';?>">
</div>
<div class="form-group">
<label>Password</label>
<input class="form-control" type="text" id="password" name="password" placeholder="Password">
</div>
<div class="form-group">
<label>Confirm New Password</label>
<input class="form-control" type="text" id="confirm_password" name="confirm_password" placeholder="Confirm Password">
</div>
<input type="submit" name="submit" id="btn-login" class="btn btn-custom btn-lg btn-block" value="Reset Password">
<input type="hidden" class="hide" name="token" id="token" value="<?php echo token_generator();?>">
</form>
我用过
value="<?php echo isset($_GET['code']) ? $_GET['code'] : '';?>">
value="<?php echo isset($_GET['email']) ? $_GET['email'] : '';?>">
从网址中提取值并放入字段...问题是当您输入新密码时它不会更新密码
我在重置页面上有4个字段
验证码 电子邮件 密码 confirm_password
现在当我输入密码时,我点击提交它不会更新密码。
function password_reset()
{
if (isset($_COOKIE['temp_access_code'])) {
if (isset($_POST['email']) && isset($_POST['code'])) {
if (isset($_SESSION['token']) && isset($_POST['token'])) {
if ($_POST['token'] === $_SESSION['token']) {
if ($_POST['password'] === $_POST['confirm_password']) {
$updated_password = password_hash($_POST['password']);
$sql = "UPDATE users SET user_pwd = '" . escape($updated_password) . "', validation_code = 0 WHERE user_email = '" . escape($_GET['email']) . "'";
query($sql);
set_message("your password was updated");
}
}
}
}
} else {
set_message("Sorry your time has expired");
redirect("../account/request-password-reset.php");
}
}// End Function
这是您点击电子邮件中提供的链接时的样子
答案 0 :(得分:3)
在您的函数password_reset()
中,您正在使用支票
if (isset($_GET['email']) && isset($_GET['code'])) {
但它永远不会成为现实,因为您发送的是带有帖子的表单,因此您需要检查
if (isset($_POST['email']) && isset($_POST['code'])) {
进一步发挥你的作用。