2016-12-26 2 views
0

Если логика оператора во внутренней строке работает с ошибкой каждый раз (даже если введены правильные существующие имя пользователя и пароль). Я не могу понять, почему.Если сбой инструкции (mysql)

Код:

<?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

Не используйте 'stripslashes' пользовательских данных, особенно паролей. Он разрушает контент. – tadman

+1

** ПРЕДУПРЕЖДЕНИЕ **: при использовании 'mysqli' вы должны использовать [параметризованные запросы] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) и [' bind_param'] (http://php.net/manual/en/mysqli-stmt.bind-param.php), чтобы добавить данные пользователя в ваш запрос. ** НЕ ПРИНИМАЙТЕ ** использовать ручное экранирование и интерполяцию строк или конкатенацию, чтобы выполнить это, потому что вы создадите серьезные [SQL-инъекции ошибок] (http://bobby-tables.com/), если вы когда-нибудь забудете что-то избежать. – tadman

+1

'==' должно быть '=' – bansi

ответ

1

Согласно documentation:

Для успешного SELECT, SHOW, DESCRIBE или EXPLAIN запросов mysqli_query() возвращает mysqli_result объект. Для других успешных запросов mysqli_query() вернет TRUE.

Поскольку вы выполнение SELECT запроса, вы должны ожидать на mysqli_result объекте вместо TRUE. Должно работать, если изменить следующим образом:

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

Может также быть заменено более простым решением, работающим с любым типом запроса: 'if ($ conn-> query ($ result))'. – cFreed

+1

Что с '=== TRUE' и еще более нелепым'! == FALSE'? 'if' проверяет логические условия, а пустые строки и ноль являются технически ложными, эти функции запроса возвращают вещи, которые должны быть оценены логически. – tadman

0

MySQL (и другие языки SQL) не использовать двойной равный синтаксис знака в языках программирования. Таким образом, ваш запрос должен быть column = value не column == value.

1

Ваш запрос неверен. Там нет в MySQL

== не использовать этот запрос

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

@sergio Проблема решена? Если да, не стесняйтесь повышать и отмечать как правильные – jophab

0

настаивал на написании name=='$username' AND password=='$password'; попробовать это ниже запрос

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