2016-07-21 2 views
-5

это страница входа. она возвращает 0 даже пользователю и передача правmysqli_num_rows() alwayes return 0 даже пользователь прав

session_start(); 
$conn = mysqli_connect('localhost','root','','script'); 

if (isset($_POST['sub'])) { 
    $user = $_POST['user']; 
    $pass = $_POST['pass']; 

    $result = mysqli_query($conn,'SELECT * FROM admin WHERE username = "$user" AND password = "$pass"'); 
    echo mysqli_num_rows($result); 

} 
?> 

`

+1

** Danger **: вы уязвимы для [SQL-инъекций] (http://bobby-tables.com/) **, которые вам нужно [защищать] (http://stackoverflow.com/ вопросы/60174/best-way-to-prevent-sql-injection-in-php). – Quentin

+1

** Опасность **: «Не хеширование вообще» [непригодный алгоритм хэширования] (http://php.net/manual/en/faq.passwords.php); вам нужно [позаботиться] (https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet) паролей пользователей. – Quentin

+0

zeko30 - Не знаете, в чем проблема (возможно, вы запрашиваете неправильную базу данных или таблицу?), Но ... хотя комментарии @ Quentin не помогают решить ваши проблемы с немедленным сроком, вы должны * обратить на них пристальное внимание тем не менее. –

ответ

-1

Этот код должен работать:

session_start(); 
$conn = mysqli_connect('localhost','root','','script'); 

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

    $user = $_POST['user']; 
    $pass = $_POST['pass']; 

$result = mysqli_query($conn,"SELECT * FROM admin WHERE username = '$user' AND password = '$pass'"); 
echo mysqli_num_rows($result); 
} 
?> 

Просто измените цитаты.

+0

OMG спасибо = D – zeko30

1

В PHP, строки с разделителями с ' символов не интерполировать переменные.

Вы ищете пользователя с именем $ пользователь, а не вызываемый пользователем, который хранится в переменной $user.

Быстрый взлом - это обмен сводами. Правильное решение - использовать prepared queries with placeholders.