2016-06-13 5 views
-1

Ich denke, ich vermisse ein kleines Detail, aber ich kann nicht ganz herausfinden, was. Meine Datenbank ist zu 100% sicher davon. Meine register.php Seite lädt Daten perfekt. Wenn ich versuche, das Login-System zu setzen, bekomme ich das gleiche Echo "ungültige E-Mail oder Passwort", ob ich gute Informationen eintippe oder schlecht (nur um zu überprüfen). An einen bestimmten Punkt.PHP mysql Login-System Probleme

Ich änderte den Code, um zu sehen, ob ich Daten von meiner Datenbank auf meine Seite posten konnte und es funktionierte perfekt, also denke ich, dass meine PDO-Verbindung zur db gut ist. Warum habe ich für beide Situationen immer das gleiche Echo?

<?php 

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

$db_server = "localhost"; 

$db_user = "root"; 

$db_password = ""; 

$db_name = "newsite"; 

try{ 

$conn = new PDO("mysql:host=$db_server;dbname=$db_name", $db_user, $db_password); 

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    } 
catch(PDOException $e){ 

     echo "Connection failed: " . $e->getMessage(); 
    } 


if (!empty($_POST['email']) && !empty($_POST['password'])){ 

$req = $conn->prepare('SELECT id,email, password FROM users_tb WHERE email= :email'); 

$req->bindParam(':email',$_POST['email']); 

$req->execute(); 

$result= $req->fetch(PDO::FETCH_ASSOC); 

    if (count($result)>0 && password_verify($_POST['password'], $result['password'])){ 

    echo "Alleluia!"; 

    }else{ 

    echo "invalid email or password"; 
    } 

}  
} 

?> 

die für

<body> 
    <form method="POST" action="login.php"> 
     <table width="400" border="5" align="center"> 
      <tr> 
       <td colspan="5">Login</td> 
      </tr> 
      <tr> 
       <td align="center">Email</td> 
       <td><input type="text" name="email"></input></td>     
      </tr> 
      </tr> 
      <tr> 
       <td align="center">Password</td> 
       <td><input type="password" name="password"></input></td>      
      </tr> 
      </tr> 
      <tr> 
       <td><input type="submit" name="submit" value="sign up"></input></td>      
      </tr> 
     </table>   
    </form> 
</body> 

+0

sie bitte Ihre Form zur Verfügung stellen. –

+0

http://php.net/manual/en/function.error-reporting.php und stellen Sie sicher, dass die Länge der Passwort-Spalte 60+ ist, sonst wird es auf Sie stumm scheitern. –

+0

Überprüfen Sie den angegebenen Tabellennamen und überprüfen Sie den angegebenen Tastennamen – user3386779

Antwort

0

Das Problem ist, dass Sie password_verify verwenden, die ein Passwort überprüft, ob einen Hash übereinstimmt.

Wenn Sie Ihre Kommentare ansehen, obwohl Sie keinen Hash speichern, speichern Sie das eigentliche Passwort 0987654.

Also, wenn das Passwort in die Datenbank eingeben müssen Sie das Ergebnis von

password_hash("your_password", PASSWORD_DEFAULT) speichern, wo your_password Ihr Passwort ist, anstatt nur den Wert zu speichern, wie 0987654

Ihre Hash sollten 60 Zeichen lang sein durch Standardmäßig sollte es so etwas wie aussehen ...

$2a$04$PnJr5Vo/EDwbCV0z16ceyuj.z4Cw..6L/0cfFPgTCPv0un0qBp.qm

+0

Entschuldigung für so lange dauert es endlich, bis ich es zu mysqli Verbindung thx jedermann !!!! – Juju