2016-07-10 8 views
0

Mein Login-System md5 Hash-Benutzernamen und ich password_hash das Passwort. Daher kann ich die Zeile nicht basierend auf dem Benutzernamen abrufen? Mein Kunde gibt dann eine E-Mail-Adresse ein, die ich base64encode. Ich biete dann eine Option zum Ändern des verlorenen Passworts an. Wenn ich jedoch das Feld mit dem gleichen Hash-Typ aktualisiere, aber das E-Mail-Feld als Bezeichner verwendet, ist das neue Passwort falsch? Unten ist ein Beispiel meines UPDATE, aber hart für die Illustration codiert (PS funktioniert das auch nicht?).Password_hash Falsch nach der Aktualisierung der Tabelle

$em = '[email protected]'; 
$em1 = base64_encode($em); 
$ps = 'some password'; 
$password_hash = password_hash($ps, PASSWORD_BCRYPT); 
$qu = "UPADTE table SET field = '$password_hash' WHERE email = '$em1'"; 
$res = mysqli_query($link, $qu); 

Edited Frage meinen Code enthalten, nachdem geprüft wurde, dass der Benutzer vorhanden ist und eine E-Mail aus für sie positiv sich als Inhaber des Kontos zu identifizieren. Hier ist die letzte Prozessorseite.

if(EMPTY($_POST[psw1])) { 
echo "New password must be supplied"; } 
elseif(EMPTY($_POST[psw2])) { 
echo "Repeat password must be entered"; } 
elseif($_POST[psw1] != $_POST[psw2]) { 
echo "Passwords entered do not match"; 
} elseif(EMPTY($_POST[eu])) { 
echo "Essential data is missing in order to complete this process."; 
} 
elseif (strlen($_POST['psw1']) < 6) { 
echo "Password must be at least six characters in length"; 
    } 
elseif (preg_replace("/[^a-zA-Z0-9]/", "", $_POST['psw1']) !=  $_POST['psw1']) { 
echo "Password may only contain letters and numbers"; 
    } 
elseif(!EMPTY($_POST[psw1]) && !EMPTY($_POST[psw2]) && !EMPTY($_POST[eu]) && $_POST[pw1] == $_POST[pw2]) { 

include "conn.php"; 
echo "$_POST[eu]<br />"; 
$eu = $_POST[eu]; 
$pdw = password_hash($_POST[pw1], PASSWORD_BCRYPT); 

$sq = mysqli_query($link, "UPDATE str1 SET pf = '$pdw', cu_pw_status = '2' WHERE cu_type = '$eu'"); 
echo "Your password has been changed, you may now login <a href='login2.php'>Login</a>"; 
} else { 

echo "Ein Fehler ist aufgetreten. Wenden Sie sich an Site Admin"; }

+0

Hallo, nicht die Tabelle str1 genannt, die Spalte oder das Feld pf genannt wird, war dies als Referenz willen. Das Passwort ist aktualisiert, aber falsch? – Szue

Antwort

1
  1. Überprüfen Sie, ob Sie Spaltenfeld in Ihrer Benutzertabelle haben. Scheint verdächtig.
  2. Überprüfen Sie Ihre Update-Zeichenfolge, jetzt fehlt der Tabellenname.
  3. Überprüfen Sie, ob Sie Benutzer vor der Aktualisierung:

    $exists = mysqli_query("SELECT id FROM users WHERE email='$em1'); 
    
    if (!is_empty($exists)) { 
    
        mysqli_query("UPDATE TABLE users SET password = '$ps' WHERE id='$exists'); 
    
        echo 'updated' . "\n"; 
    
    } else { 
    
        echo 'no user with such email hash' . "\n"; 
    } 
    
+0

Hallo, Ich habe bereits überprüft, dass der Benutzer existiert, schickte eine E-Mail an sie, erhielt eine Rückrufkennung aus verifizierten E-Mail. Dann ändere ich das Passwort, aber nicht gehen, es wird nicht funktionieren hier ist der Code. – Szue

+0

Können Sie den aktuellen Arbeitscode posten? Dieser kann nicht funktionieren, nur weil Sie keine Anführungszeichen 'LEER ($ _ POST [psw1])' um Objektschlüssel haben. –

+0

Und was Sie meinen, indem Sie sagen, dass "neues Passwort falsch ist". Wenn es aktualisiert wird, liegt das Problem in Ihrer Login-Funktion, in der Sie das Passwort bestätigen. –