2016-04-22 16 views
0

昨日、ユーザーがフォームを通じてパスワードを更新する方法を尋ねるコードをいくつか掲載しました。 Look hereパスワードをphp/mysqlで更新します

パスワードを更新した後、私のAndroid搭載アプリケーションでログインできませんでした。そこで、私はforgotpassword.phpファイルを少し変更することにしました。

<?php 
session_start(); 
require "../init.php"; 
ini_set('display_errors', 1); 



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


    $email = $_POST['email']; 
    $user_name = $_POST['user_name']; 
    $password = $_POST['user_pass']; 
    $passwordEncrypted = sha1($user_pass); 

    $confpassword = $_POST['confirm_pass']; 
    $confPasswordEncrypted = sha1($confirmPass); 

    if($password !== $confpassword){ 
     echo "<script>alert('Passwords are not equal')</script>"; 
    }else{ 
     $select_query = "SELECT * FROM user_info"; 

     $run_select_query = mysqli_query($con,$select_query); 

     while ($row_post=mysqli_fetch_array($run_select_query)){ 

       $_SESSION['id'] = $row_post['id']; 
       $user_id = $_SESSION['id']; 
       $useremail = $row_post['email']; 
       $username = $row_post['user_name']; 

       var_dump($user_id); 

      if($useremail == $email AND $username == $user_name){ 
       //echo "<script>alert('$useremail')</script>"; 
       //echo "<script>alert('$username')</script>"; 
       echo "<script>alert('$id')</script>"; 
       $update_posts = "UPDATE user_info SET user_pass='$passwordEncrypted',confirm_pass ='$confPasswordEncrypted' 
       WHERE $id='$_userid'"; 

       $run_update = mysqli_query($con,$update_posts); 
       //var_dump($user_name); 
      echo "<script>alert('Password Has been Updated!')</script>"; 
      }else{ 
      echo "<script>alert('No email or username was found')</script>"; 
      } 

     } 

    } 

} 
?> 

ただし、以前のパスワードは更新されていません。更新ステートメントやその前の行に問題があります。 $ _SESSION ['id']はnullではないため、selectクエリは正常に動作します。

アイデア?

ありがとうございました。

+1

コードのエラーチェックはありません。なぜ2つのSQL文が1で実装できるのか(パスワードとユーザーが一致する場所を更新 - 0行が変更された場合はユーザー名またはパスワードが無効) – symcbean

+0

sha1のシングルラウンドではパスワードハッシングでは不十分です。参照:http://stackoverflow.com/questions/401656/secure-hash-and-salt-for-php-passwords – 1615903

+0

PHPの[組み込み関数](http://jayblanchard.net/proper_password_hashing_with_PHP.html)を使用してください。 )を使用してパスワードセキュリティを処理します。 5.5より小さいPHPバージョンを使用している場合、 'password_hash()' [互換パック](https://github.com/ircmaxell/password_compat)を使用することができます。ハッシュする前に[パスワードを逃さないでください](http://stackoverflow.com/q/36628418/1011527)、または他のクレンジングメカニズムを使用していることを確認してください。パスワードを変更すると、パスワードが変更され、不要な追加のコーディングが発生します。 –

答えて

2

typo in where節。 WHERE $id='$_userid'";

変更更新クエリのところ、これに句:WHERE $id='$user_id'";

1

更新あなたの選択クエリ:それ> 0でのみ実行する場合

$select_query = "SELECT * FROM user_info where email = '".$email."' and user_name = '".$username."' "; 

then check if mysqli_num_rows().が更新クエリ&がセッションにデータを置きます。

また、あなたの更新クエリではありませんproper.Itは次のようになります。

$update_posts = "UPDATE user_info SET user_pass='$passwordEncrypted',confirm_pass ='$confPasswordEncrypted' 
       WHERE $id='$userid'"; 
0

あなたの更新クエリは次のようにする必要があります:

$update_posts = "UPDATE user_info 
    SET 
      user_pass='$passwordEncrypted', 
      confirm_pass ='$confPasswordEncrypted' 
    WHERE id = $user_id"; 
0

[OK]をクリックします。コードを変更して動作させました。これは私がやっていることです。

1)ユーザーが既に登録されているかどうかを確認するためにselectクエリを実行します。はいの場合は、パスワードを更新し、電子メールで新しいパスワードを送信してください。

2)もしあなたが私のアンドロイドアプリでユーザーの電子メールが見つからないと言ってjson応答を受け取ったら、

3)最後に、ユーザーは更新された5桁のパスワードでログインできます:)。

<?php 
require "init.php"; 
$email = $_POST['email']; 



    if($email){ 
     $select_query = "SELECT * FROM user_info"; 

     $run_select_query = mysqli_query($con,$select_query); 

     while ($row_post=mysqli_fetch_array($run_select_query)){ 

      $id = $row['id']; 
      $usermail = $row_post['email']; 
      $username = $row_post['user_name']; 



     } 
      if($usermail == $email){ 
       $don = array('result' =>"success","message"=>"user mail found."); 

       $random = rand(72891, 92729); 
       $new_pass = $random; 

       $email_password = $new_pass; 
       $new_pass = sha1($new_pass); 

       $update_pass = "update user_info set user_pass='$new_pass',confirm_pass='$new_pass' where user_name='$username'"; 

       $run_update = mysqli_query($con,$update_pass); 


        $subject = "Login information"; 

        $message = "Your password has been changed to $email_password"; 

        $from = "From: [email protected]"; 

        mail($email,$subject,$message,$from); 

       $don = array('result' =>"success","message"=>"your password has been updated. Please check your email"); 



      }else{ 
       $don = array('result' =>"fail","message"=>"user mail not found."); 
      } 
     }else{ 
      $don = array('result' =>"fail","message"=>"please enter your email"); 
     } 

    echo json_encode($don); 
?> 
関連する問題