2016-10-24 4 views
-1

私は、ユーザーがパスワードを変更するためのフォームを作成しようとしています。PHPアップデートパスワードフォームが機能しない

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

} 

} 

?> 

私は、ページのリロードと何が起こるフォームを送信


   <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> 
。 2つの異なるパスワードを入力すると、「パスワードが一致しません」というエラーメッセージが表示されます。

フォームがリロードされたときに奇妙な動作が発生すると、フォームのリロード後にサイトのナビゲーションが機能しなくなります。

私は、入力タイプ名、フォーム名、isset _POSTの代わりにisset _requestを使って試してみました。しかし、何も助けてくれないようです。

どうしたのですか?

編集:私はSALTとHASHを混ぜた。 Wooops ..

+1

エラー報告と表示エラー場合は、この

を試してみてください? – Devon

+0

あなたは本当にパスワードハッシュにあなた自身の塩を使用すべきではありません。そして、あなたは本当にPHPの[組み込み関数](http://jayblanchard.net/proper_password_hashing_with_PHP.html)を使ってパスワードセキュリティを処理すべきです。ハッシュする前に[パスワードをエスケープしない](http://codereview.stackexchange.com/questions/79668/login-with-password-hash)か、他のクレンジングメカニズムを使用してください。パスワードを変更すると、パスワードが変更され、不要な追加のコーディングが発生します。 –

+0

エラーログを確認しましたか?貴重なエラーメッセージを出力していません。 –

答えて

1

問合せには、ハッシュとパスワードがあります。準備はSALTとパスワードで行います。あなたの質問に塩はありません。

+0

神様。あなたは正しい。私は塩とハッシュを混ぜた。私は気づいていませんでした:/ – Enrico

-1

基本的にif条件では、if条件に一致しない場合はtrueになります。

上($ OK == '真'){

}

+0

PHPでの比較が甘いため、 'true == 'true'は動作しますが、これは上記のコードには何の影響もなく、ブール値と文字列を比較すると悪い習慣になります。 – Devon