2016-11-05 3 views
-1

Ich habe den folgenden Code und nichts wird in meine Datenbank eingefügt und ich kann nicht herausfinden, warum ... ist die password_needs_rehash() Funktion an der richtigen Stelle?Wo kann überprüft werden, ob das Passwort in PHP neu erstellt werden muss?

Ich habe einen Test, wo ich die neue erzeugte mit einem Javascript-Alarm Echo und es zeigt einen neuen Hash, aber der neue Hash wird nicht in die Datenbank eingefügt. Es muss einen Fehler in meiner Logik geben, aber ich kann es nicht finden.

<?php 
session_start(); 
include 'mysqli.php'; 


$userID = strtolower($_POST['userID']); 
$passwordFromForm = $_POST['password']; 
$_SESSION['userID'] = $userID; 

//Select the password from the requested userID and put into variable 
$sql = "SELECT password FROM userdata WHERE userID = '$userID'"; 
$result = mysqli_query($conn, $sql); 
$row = mysqli_fetch_assoc($result); 
$passwordFromDatabase = $row['password']; 

$verified = password_verify($passwordFromForm, $passwordFromDatabase); 

if($verified == 0){ 
echo '<meta http-equiv="refresh" content="0; URL=index.php?triedLogin" />'; 

}else{ 

if(password_needs_rehash($passwordFromDatabase, PASSWORD_DEFAULT, ['cost' => 14])){ 

    $passwordFromDatabase = password_hash($passwordFromDatabase, PASSWORD_DEFAULT, ['cost' => 14]); 

    echo "<script>alert('".$passwordFromDatabase."');</script>"; 

    $sql = "INSERT INTO userdata ('password') VALUES ('$passwordFromDatabase')"; 

    //NOW LOGIN WITH NEW PASSWORD 
    $sql = "SELECT * FROM userdata WHERE userID = '$userID' AND password = '$passwordFromDatabase'"; 
    $result = mysqli_query($conn, $sql); 

     if(!$row=mysqli_fetch_assoc($result)){ 
      echo '<meta http-equiv="refresh" content="0; URL=index.php?triedLogin" />'; 
     } else { 
      $_SESSION['ID'] = $row['userID']; 
      unset($_SESSION['userID']); 
      echo '<meta http-equiv="refresh" content="0; URL=app/index.php" />'; 
     } 

}else{ 

    $sql = "SELECT * FROM userdata WHERE userID = '$userID' AND password = '$passwordFromDatabase'"; 
    $result = mysqli_query($conn, $sql); 

    if(!$row=mysqli_fetch_assoc($result)){ 
     echo '<meta http-equiv="refresh" content="0; URL=index.php?triedLogin" />'; 
    } else { 
     $_SESSION['ID'] = $row['userID']; 
     unset($_SESSION['userID']); 
     echo '<meta http-equiv="refresh" content="0; URL=app/index.php" />'; 
    } 
} 
} 
?> 
+0

Diese 'INSERT INTO userdata ('password')' für eine Sache, versagt Sie, und Sie haben diese Abfrage nie ausgeführt. –

+0

... Sie passen hier auf, richtig? Wahrscheinlich nicht. Soll ich eine Antwort posten, um Ihre Aufmerksamkeit zu bekommen? –

+0

* "ist die rehash_password Funktion an der richtigen Stelle?" * - Huh, was 'rehash_password()' Funktion? –

Antwort

0
  • Make Ihr Tabellenfeld ist groß genug, stellen Sie sicher, diesen Wert zu halten, weil Hash sehr lang ist, wird es Fehler somit keine INSERT werfen.

  • Sie sollten Ihre Aussagen vorbereiten, ich bin überrascht, dass Sie dies noch nicht tun Sie in Passwort-Hashing.

+0

Eh ... Sie führen nie die '$ sql' mit der Einfügung. Sie überschreiben es mit dem '$ sql' mit der Auswahl rechts darunter. – junkfoodjunkie

+0

Mein Passwortfeld gehört zum TEXT-Typ, daher sollte es in die Hash-Zeichenfolge passen.Ich werde alle mysql-Einfügungen usw. vorbereiten, wenn die Webapp fast fertig ist;) Ich folge nur anderen Führern und die meiste verfügbare Hilfe ist leider auf der mysqli-Front. Ich werde jedoch alles später neu schreiben, bevor es veröffentlicht;) @Ahmed Daou – Zoung

+0

Danke !!! Ich dachte der erste sql wird ausgeführt und geht dann weiter zur nächsten Variablen hehe @junkfoodjunkie – Zoung

Verwandte Themen