PHP更新密码表单不工作


PHP update password form not working

我正在尝试为用户更改他们的密码。

              <div class="panel panel-primary">
                 <div class="panel-heading">
                    <h3 class="panel-title"><?php echo $errormessage;?></h3>
                 </div>
                 <div class="panel-body">
                    <form method="post" name="passwordchange" id="passwordchange">
                       <div class="row">
                          <div class="col-md-6">
                             <div class="row">
                                <div class="col-md-3"><label>Password</label></div>
                                <div class="col-md-5"><input class="form-control" name="pass1" id="pass1" type="text" required value=""></div>
                             </div>
                          </div>
                          <div class="col-md-6">
                             <div class="row">
                                <div class="col-md-3"><label>Confirm Password</label></div>
                                <div class="col-md-5"><input class="form-control" name="pass2" id="pass2" type="text" required value=""></div>
                             </div>
                          </div>
                          <input type="submit" class="btn btn-primary pull-right" name="submit" value="submit">
                       </div>
                    </form>
                 </div>
              </div>

    <?php
$ok=true;
if(isset($_POST['submit']))
{
$new_password = $_POST['pass1'];
$new_password2 = $_POST['pass2'];
$userid=$_SESSION['user']['id']; 
if($new_password!=$new_password2){
    $ok=false;
    $errormessage="Passwords do not match.";
}
if($ok){
$errormessage="ok";
$salt = dechex(mt_rand(0, 2147483647)) . dechex(mt_rand(0, 2147483647)); 
$password = hash('sha256', $new_password . $salt); 
for($round = 0; $round < 65536; $round++) 
   { 
   $password = hash('sha256', $password . $salt); 
   } 

   $query = "
   update users
   set
   password = :password,
   hash = :hash
   WHERE id = '$userid'"; 
       // The parameter values 
   $query_params = array( 
   ':password' => $password, 
   ':salt' => $salt
       ); 
   try 
   { 
           // Execute the query against the database 
       $stmt = $db->prepare($query); 
       $result = $stmt->execute($query_params); 
   } 
   catch(PDOException $ex) 
   { 
       //die("Failed to run query: " . $ex->getMessage()); 
       die("update error");
   }
header("Location: account.php?success");
}
}
?>

当我提交表单时,页面重新加载,什么也没有发生。当我输入两个不同的密码时,我得到错误信息"密码不匹配"。

当表单重新加载时,我也得到了一个奇怪的行为,在表单重新加载后,我网站上的导航停止工作。

我试着玩输入类型名称,表单名称,使用isset _request而不是isset _POST。但似乎没有任何帮助。

我做错了什么?

edit:我混淆了SALT和HASH。Wooops…

在查询中您有哈希和密码,在准备SALT和密码。

基本上,在你的if条件等于true时,不进入if条件。

试试这个

if ($ok == 'true') {

}