2016-04-22 13 views
0

Gestern habe ich einige Code geschrieben, wie der Benutzer ein Passwort über ein Formular aktualisieren kann. Look hereUpdate-Passwort mit PHP/MySQL

Allerdings konnte ich nach der Aktualisierung des Passwortes nicht über meine Android-App einloggen. Also habe ich beschlossen, ein bisschen die Datei forgotpassword.php zu ändern.

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

     } 

    } 

} 
?> 

Aber jetzt ist das Passwort nicht aktualisiert, wie es vorher war. In der update-Anweisung oder in einer Zeile davor ist etwas falsch. $ _SESSION ['id'] ist nicht null, daher funktioniert die Select-Abfrage einwandfrei.

Irgendwelche Ideen?

Danke.

+1

Sie haben keine Fehler beim Einchecken Ihres Codes. Und warum 2 SQL-Anweisungen, wenn dies mit 1 implementiert werden kann (Update, wo das Passwort und Benutzer übereinstimmt - wenn es 0 Zeilen ändert, war der Benutzername oder das Passwort ungültig). – symcbean

+0

Eine einzelne Runde von sha1 ist nicht genug für Passwort-Hashing. Siehe hier: http://stackoverflow.com/questions/401656/secure-hash-and-salt-for-php-passwords – 1615903

+0

Bitte verwenden Sie PHP [integrierte Funktionen] (http://jayblanchard.net/proper_password_hashing_with_PHP.html) um die Passwortsicherheit zu handhaben. Wenn Sie eine PHP-Version kleiner als 5.5 verwenden, können Sie das 'password_hash()' [compatibility pack] (https://github.com/ircmaxell/password_compat) verwenden. Stellen Sie sicher, dass Sie [Passwörter nicht umgehen] (http://stackoverflow.com/q/36628418/1011527) oder verwenden Sie einen anderen Bereinigungsmechanismus vor dem Hashing. Wenn Sie dies tun, * ändert * das Passwort und verursacht unnötige zusätzliche Codierung. –

Antwort

2

Tippfehler in Where-Klausel. WHERE $id='$_userid'";

Änderung Update Abfrage where-Klausel dazu: WHERE $id='$user_id'";

1

Aktualisieren Sie Ihre Auswahlabfrage:

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

und then check if mysqli_num_rows(). Wenn> 0, dann nur die Abfrage-Update ausführen & die Daten in der Sitzung gestellt.

Auch Ihre Update-Abfrage nicht proper.It sein sollte:

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

Ihre Update-Abfrage wie folgt sein sollte:

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

Ok. Ich habe den Code geändert und es funktioniert. Das mache ich also.

1) Ich führe eine Select-Abfrage, um zu überprüfen, ob der Benutzer bereits registriert ist. Wenn ja, dann aktualisieren Sie das Passwort und senden Sie ein neues in seiner E-Mail.

2) Wenn nicht, dann erhalten Sie eine JSON-Antwort in meiner Android-App sagen, dass die Benutzer-E-Mail nicht gefunden wird.

3) Und schließlich kann sich der Benutzer mit seinem aktualisierten 5-stelligen Passwort anmelden :).

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