PHP更新密码表单不起作用

时间:2016-10-24 12:47:48

标签: php forms post pdo

我试图为用户创建一个表单来更改密码  

              <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");

}

}

?>

当我提交表单时,页面重新加载并且没有任何反应。当我输入两个不同的密码时,我收到错误消息&#39;密码不匹配。&#39;

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

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

我做错了什么?

编辑:我混淆了SALT和HASH。 Wooops ..

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:-1)

基本上,在你的if条件等于真如果条件不会进入内部。

试试这个

if($ ok =='true'){

}