密码未在数据库

时间:2015-12-28 09:46:56

标签: php email mysqli

我创建了一个名为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

这是您点击电子邮件中提供的链接时的样子

enter image description here

1 个答案:

答案 0 :(得分:3)

在您的函数password_reset()中,您正在使用支票

if (isset($_GET['email']) && isset($_GET['code'])) {

但它永远不会成为现实,因为您发送的是带有帖子的表单,因此您需要检查

if (isset($_POST['email']) && isset($_POST['code'])) {

进一步发挥你的作用。