2016-12-26 2 views
0

Wenn Statement-Logik in der inneren Linie scheint jedes Mal falsch zu funktionieren (auch wenn korrekt vorhandenen Benutzernamen und Passwort eingegeben werden). Ich kann nicht herausfinden warum.If-Anweisung fehlgeschlagen (Mysql)

Code:

<?php 
    $conn = new mysqli("localhost", "root", "", "customerdirectory"); 

    if($conn->connect_error) { 
     echo("Connection Failed " . $conn->connect_error); 
     exit(); 
    } 

    if(isset($_POST["user"], $_POST["pass"])) {  
     $username = stripslashes($_POST["user"]); 
     $username = mysqli_real_escape_string($conn,$username); 

     $password = stripslashes($_POST["pass"]); 
     $password = mysqli_real_escape_string($conn,$password); 

     $result = "SELECT * FROM customer WHERE name=='$username' AND password=='$password'"; 

     **if($conn->query($result) === TRUE)** 
      echo("Successful login: ".$username); 
     else 
      echo("The username or password are incorrect!"); 

     $conn->close(); 
    }; 
?> 
+1

Verwenden Sie keine 'stripslashes' auf Benutzerdaten, insbesondere Passwörter. Es zerstört Inhalte. – tadman

+1

** WARNUNG **: Wenn Sie 'mysqli' verwenden, sollten Sie [parametrisierte Abfragen] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) und [' bind_param'] (http://php.net/manual/en/mysqli-stmt.bind-param.php), um Benutzerdaten zu Ihrer Abfrage hinzuzufügen. ** Verwenden Sie ** NICHT ** manuelles Escapen und String-Interpolation oder Verkettung, um dies zu erreichen, weil Sie schwerwiegende [SQL-Injektionsfehler] (http://bobby-tables.com/) erstellen werden, wenn Sie jemals vergessen, etwas richtig zu entkommen. – tadman

+1

'==' sollte sein '=' – bansi

Antwort

1

Nach dem documentation:

Für eine erfolgreiche SELECT, SHOW, DESCRIBE oder EXPLAIN fragt mysqli_query() ein mysqli_result Objekt zurück. Für andere erfolgreiche Abfragen mysqli_query() wird TRUE zurückgeben.

Da Sie eine SELECT Abfrage sind ausführen, sollten Sie eine mysqli_result Objekt statt TRUE erwarten. Sollte funktionieren, wenn Sie wie folgt ändern:

if($conn->query($result)) 
    echo("Successful login: ".$username); 
else 
    echo("The username or password are incorrect!"); 
+0

Kann auch durch eine einfachere Lösung ersetzt werden, die mit jeder Art von Abfrage arbeitet: 'if ($ conn-> query ($ result))'. – cFreed

+1

Was ist mit '=== TRUE' und dem noch groteskeren'! == FALSE'? "if" -Tests gegen logische Bedingungen, und während leere Strings und Null technisch falsch sind, geben diese Abfragefunktionen Dinge zurück, die logisch ausgewertet werden sollen. – tadman

0

MySQL (und andere SQL-Sprachen) nicht das doppelte Gleichheitszeichen Syntax in Programmiersprachen verwenden. Ihre Anfrage sollte also column = value nicht column == value sein.

1

Ihre Anfrage ist falsch. Es gibt keine == in mysql

Verwenden Sie diese Abfrage

$result = "SELECT * FROM customer WHERE name='$username' 
AND password='$password'"; 
+0

@sergio Ist das Problem gelöst? Wenn ja, kannst du sie gerne aufwerten und als korrekt markieren – jophab

0

des Schreibens bestand darauf name=='$username' AND password=='$password'; dies unter Abfrage versuchen

select * from customer where name='$username' AND password='$password'"; 
Verwandte Themen