忘记密码未更新加密码哈希

时间:2016-11-10 11:58:43

标签: php mysqli prepared-statement password-hash

创建应用程序......到目前为止一切都很好。在我的注册系统中使用了预处理语句和密码哈希,并且还尝试在我的表单字段中验证用户输入。为了完成这个系统,我需要创建一个忘记密码系统,这意味着用户可以请求新密码。

我做了一个包含所有文件的测试网站,这意味着我可以在将其添加到生产网站之前测试是否有效。

忘记密码已经使用了mysqli,一旦一切正常,我会更新到准备好了,因为我还在学习准备好的声明,这样做有助于我理解,所以不要判断。

我忘记密码的问题是密码在更改后没有更新。请参阅此屏幕截图:http://prntscr.com/d5hage

同样如上所述,我的注册表中使用了http://prntscr.com/d5hbg1并在登录时进行了验证。但是如何在我忘记的密码中使用哈希或如何更新它。在我的下面的代码中使用了md5,我知道它已被破坏。请在下面编写我的所有代码。

Reset_Password.php

       <?php

     // include connection
            require_once('include/connection.php');


    if(isset($_POST['submit'])){

     $user_id = base64_decode($_GET['encrypt']);

      $passnew = password_hash($password, $_POST['new_password'], PASSWORD_BCRYPT, array( 'cost' => 12 ) );

    $sql = "UPDATE  `olami560_test`.`user` SET  `password` =? WHERE  `user`.`id` =?";
    $stmt = $con->prepare($sql);
    $stmt->bind_param('si',$passnew, $user_id);
    $stmt->execute();

    if ($stmt->errno) {
      echo "FAILURE!!! " . $stmt->error;
    }
    else echo "Password Changed Successfully.Click on link to login <a href='http://www.olaskee.co.uk/project/allocation/progress/index.php'>Login</a>{$stmt->affected_rows} rows";

    $stmt->close();

    }
    ?>
      <form method="post" action="<?php echo $_SERVER['HTTP_REFERER']; ?>" >
      <label>New Password</label>
      <input type="password" name="new_password"/>
      <input type="submit" name="submit" value="Reset" />
      </form>

forgot_password.php

         <?php
       // include connection
              require_once('include/connection.php');


              if(isset($_GET) && !empty($_GET['email'])){
              $email = mysqli_real_escape_string($con,$_GET['email']);

                  $query = "SELECT id
            FROM  `user` 
            WHERE  `user_name` LIKE  '".$email."'
            OR  `email` LIKE  '".$email."'";

                  $result = mysqli_query($con,$query);

                  $Results = mysqli_fetch_array($result);
                  if(count($Results)>=1)
                  {
                        $query2 = "SELECT email
            FROM  `user` 
            WHERE  `user_name` LIKE  '".$email."'
            OR  `email` LIKE  '".$email."'";


                  $result2 = mysqli_query($con,$query2);

                  $emailvalue = mysqli_fetch_array($result2);

                      //$token = md5(uniqid(rand(),true));
                      //$encrypt = md5($Results['id']);
                      $encrypt = base64_encode($Results['id']);
                      $message = "Your password reset link send to your e-mail address.";
                      $to = $emailvalue['email'];
                      $subject="Forget Password";
                      $from = 'leksmaster@gmail.com';
                      $body= 'Hi, <br/> User <br/>You Requested for Reset Password. <br><br>http://www.olaskee.co.uk/project/allocation/tms/reset_password.php?token='.$token.'&encrypt='.$encrypt.'&action=reset<br/> <br/>--<br>.olaskee<br>';
                      $headers = "From: " . strip_tags($from) . "\r\n";
                      $headers .= "Reply-To: ". strip_tags($from) . "\r\n";
                      $headers .= "MIME-Version: 1.0\r\n";
                      $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

                       mail($to,$subject,$body,$headers);
                         echo $message;


                  }
                  else
                  {
                      $message = "Account not found please signup now!!";
                      echo $message;
                  }


      }
              ?>

我希望能提供足够的解释让你理解。感谢任何意见。

1 个答案:

答案 0 :(得分:1)

好的,看一下代码,我认为你需要注意一些事情。

在表单上更改此

<form method="post" action="<?php echo $_SERVER['HTTP_REFERER']; ?>" >

<form method="post" action="" >

这应该将表格提交给自己。

散列真的需要password_hash()使用以下内容,它会让你开始

$passnew = password_hash( $password, $_POST['new_password'], PASSWORD_BCRYPT, array( 'cost' => 12 ) );

在重置密码的表单上,最好让用户输入两次新密码,这样就可以检查他们是否正确重复了密码。

if( $_POST[ 'pass1' ] == $_POST[ 'pass2' ] ) // Process else error

在您的forgot_password.php文件中,您将两次调用相同的sql语句。调用一次,检查行数是否大于1,如果是使用结果中的数据,则无需再次调用它来执行相同的操作。

希望这能让你前进,度过美好的一天。