2016-03-21 4 views
0

このコードでは、サインインしたユーザーのパスワードは変更されません。代わりに0に変更され、再度サインインすることはできません。これは単にプロジェクトのためのアクティブなサイトになることはありません。しかし、私は代替案についての提案を受けています。私はパスワードとpassword2と呼ばれるdbに2つのフィールドを持っています。これらのフィールドは、パスワードを変更すると両方が変更される必要があります。また、エラーメッセージが表示されません。DB内のパスワードフィールドが0に変更されます

<?php 
    session_start(); 
    if (!isset($_SESSION["user_login"])) { 
     header("Location: sign_up.php"); 
    } else { 
      $username = $_SESSION["user_login"]; 
    } 

    include ("connect.php"); 


    ?> 

    <?php 

    //Variables 

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

    $oldpassword = $_POST['oldpassword']; 
    $newpassword1 = $_POST['newpassword1']; 
    $newpassword2 = $_POST['newpassword2']; 




     $pass_query = mysqli_query ($connect, "SELECT * FROM users WHERE email='$username'"); 
     while ($row = mysqli_fetch_assoc($pass_query)) { 

      $existing_pass = $row ['password']; 


      //Checking if md5 encrypted password matches 
      $md5_oldpassword = md5($oldpassword); 
      //check if the old password and the old password entered now match 
      if ($md5_oldpassword == $existing_pass){ 
       //check if the two new passwords match 
       if ($newpassword1 == $newpassword2) { 

        $md5_newpassword = md5($newpassword1); 
        $md5_newpassword2 = md5($newpassword2); 
        //Query to update the password 
        $password_update_query = mysqli_query($connect, "UPDATE users SET password='$md5_newpassword' AND password2='$md5_newpassword2' WHERE email='$username'"); 

        echo "Your password has now changed!"; 

        } 
        else{ 

         echo "Your new password and re entered password does not match. Please try again."; 
         } 
       } 
       else { 
        echo "Your old password does not match. Please try again."; 
        } 
      } 

     } 


    ?> 
    <div class="container"> 
    <h3> Change your Password: </h3> 
    <form action="" method="POST" enctype="multipart/form-data"> 
     <div class="form-group"> 
      <label for="oldpassword">Old Password:</label> 
      <input type="oldpassword" class="form-control" name="oldpassword" placeholder="Enter old password" > 
     </div> 
     <div class="form-group"> 
      <label for="newpassword1">New Password:</label> 
      <input type="newpassword1" class="form-control" name="newpassword1" placeholder="Enter new password" > 
     </div> 
     <div class="form-group"> 
      <label for="newpassword2">New Password:</label> 
      <input type="newpassword2" class="form-control" name="newpassword2" placeholder="Re-Enter new password" > 
     </div> 
     <center> 
     <button type="submit" class="btn btn-primary" name="change_pass_submit" style=" background-color:#337AB7; color:white;">Change Password</button> 
     </center> 

    </form> 
    </div> 
+0

好奇心の疎外さから、なぜ同じ値*をテーブルに2回*保存するのですか? – David

+0

...なぜMD5ですか?あなたは*「バック・トゥ・ザ・フューチャー」* 1を何度も見たことがありますか? –

+0

@Davidユーザーが登録するときの検証用。 –

答えて

2

あなたはあなたのクエリにエラーがあります:

"UPDATE users SET password='$md5_newpassword' AND password2='$md5_newpassword2' WHERE email='$username'" 

それは次のようになります。

"UPDATE users SET password='$md5_newpassword', password2='$md5_newpassword2' WHERE email='$username'" 


しかし、あなたのクエリにエラーがここに大きな問題ませです。 BIGの問題は、あなたのコードがEXTREMELY INSECUREであるということである。

  1. それはsql injectionに対して脆弱です:
    悪意のあると、彼らはあなたのデータベースとが好き何でもできるつもりです。 prepared statementsを使用してください(PHPでPDOをご覧ください)。
  2. パスワードが正しくハッシュ化されていません。機能で
    使用PHPのビルド:password_hashpassword_verifyの代わりに、md5md5ハッシュアルゴリズムが古いそれでいくつかの問題が確認されているパスワードハッシュの場合、問題は、速いなるように設計されていることである速いことがあることを意味します。。 easy to crack。高速は特殊なハードウェアが350 billion guesses per secondを実行できることを意味します)。
関連する問題