2017-03-25 2 views
-1

Hallo, ich versuche, eine sehr einfache Login-Funktion mit PHP zu erstellen, aber nach dem Durchlaufen der Codes scheint mein Formular in der Lage, die Funktion nur dann richtig auszuführen, wenn ich den richtigen Benutzernamen und eingeben jedoch Passwort, wenn ich nicht, tut es seine Aufgaben erfüllen hier sind meine Codes, die ich vereinfacht:Einloggen Fehler finden

login.php

<form name="userlogin" action="phpprocess/loginprocess.php" method="POST"> 

    <p>Username : <input type="text" id="username" name="username"></p> 

    <p>Password : <input type="password" id="password" name="password"></p> 

    <p><input type="submit" id="loginbtn" value="login" ></p> 

</form> 

loginproccess.php

include "mysqli.connect.php"; 

$username = $mysqli->real_escape_string($_REQUEST["username"]); 
$password = $mysqli->real_escape_string($_REQUEST["password"]); 

echo "$username"; 
echo "$password"; 

$sql = "select * from users.userlogin where username ='".$username."' and 
password = '".$password."'"; 

$result = $mysqli->query($sql); 

     if($result == null){ 
      echo"null"; 
     } 


     if($mysqli -> errno){ 
      error_log($mysqli -> error); 
      echo $mysqli -> error; 
      echo " hello"; 
      exit(); 

     }else{ 

      while(list($index, $user1, $pass1) = $result -> fetch_array()){ 

       if($user1 != null && $pass1 != null){ 
        echo "$index $user1, $pass1"; 

       } 

      } 

     } 


$mysqli->close(); 

mysqli.c onnect.php

$host="localhost"; 
$user="root"; 
$password=""; 
$database="users"; 


$mysqli = new mysqli($host, $user, $password, $database); 

if ($mysqli->errno) { 
echo "Unable to connect to the database: <br />".$mysqli->error; 
exit(); 

} 

, was passiert ist, wenn ich den falschen Benutzernamen und ein Passwort eingeben muss ich die Webseite Hallo Echo, wenn ich es eingeben Recht muss ich den richtigen Benutzer Echo und übergeben, aber wenn falsch eingeben, $ result scheint nicht null zu sein, null und hallo wird nicht ausgedruckt. Mein Fehlerprotokoll zeigt nichts an. Hoffe, deinen Rat zu hören! Vielen Dank im Voraus !

Antwort

0

Sie drucken hello, wenn die Abfrage einen Fehler erhält, aber es ist kein Fehler, wenn die WHERE Bedingungen keine Zeilen übereinstimmen. Es gibt nur eine leere Ergebnismenge zurück. Sie sollten verwenden:

if ($result->num_rows == 0) { 
    echo "hello"; 
    exit(); 
} 

Auch $result->fetch_array() gibt ein Array mit beiden nummeriert und benannt Indizes. Wenn Ihre Tabelle 3 Spalten enthält, wird ein Array mit 6 Elementen zurückgegeben, aber Sie ordnen nur 3 Variablen zu.

Verwenden Sie $result->fetch_row(), um ein Array mit nur den nummerierten Elementen zu erhalten. Außerdem sollten Sie SELECT * nicht verwenden, wenn Sie sich auf die Reihenfolge von Elementen wie dieser verlassen, da dies von der Reihenfolge abhängt, in der die Spalten in der CREATE TABLE-Anweisung zugewiesen wurden. Dies kann sich ändern, wenn Sie Ihr Schema aktualisieren. Sie sollten die spezifischen Spalten, die Sie benötigen, in der Liste SELECT auflisten.

+0

hey barmar !! danke für die heads-up! es ist wirklich nützlich, da ich PHP selbstständig lerne! danke und krank gib es aus :) –