2015-10-22 3 views
0

Когда я нажимаю кнопку «Отправить», выполняется проверка ввода, но даже когда я правильно ввожу имя пользователя и пароль, которые хранятся в моей базе данных точно так же, как я вхожу в нее, с учетом хэша, но все, что я получаю это сообщение об ошибке, сообщающее мне, что комбинация неверна.Получение результата из запроса и возврат значения? PHP и MySQLi

Это мой Логин сценарий:

$username = $_POST['username']; 
$password = $_POST['password']; 

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

$login = login($username, $password); 

if (empty($username) === true || empty($password) === true) { 
    $errors[] = "Please fill in all fields"; 
} elseif ($login === false) { 
    $errors[] = "That username and password combination is incorrect"; 
} else { 
    $_SESSION['login'] = $login; 
    echo 'Logged in'; 
} 
} 

А вот функции:

function login($username, $password) { 
    global $conn; 
    $query = "SELECT userId FROM users where userName = '$username' AND userPass = '$password'"; 
    $result = mysqli_query($conn, $query); 
    $row_count = mysqli_num_rows($result); 
    if ($row_count >= 1) { 
     return $query['userId']; 
    } else { 
     return false; 
    } 
} 

enter image description here

+0

Да, все равно не работает:/ –

+0

Почему у вас даже есть функция getUserId? вы не используете эту информацию вообще. Я имею в виду, что ты есть, но ты называешь это позже. просто возвратите $ query ['userId'] – Andrew

+1

Не следует '$ user_id = $ get_user_id ['user_id'];' be '$ user_id = $ get_user_id ['userId'];' – dstudeba

ответ

0

Первое, что я хотел бы предложить вам попробовать это вручную сравнить md5 хэш пароль к тому, что встречается в таблице. Если вы абсолютно уверены, что они равны, запустите ручной запрос, используя это значение от toad или phpmyadmin, и посмотрите, получаете ли вы результат. Если не проблема может быть в запросе. Если вы получите результат, проверьте функцию mysqli_num_rows и вместо того, чтобы возвращать идентификатор пользователя, эхо его в тестовой среде.

Что еще вы сделали для отладки?

+0

Запрос работает в PhpMyAdmin и попытался вернуть true без поиска userId и все той же проблемы –

+0

В этом случае отладить оператор mysqli_num_rows, эхо его и посмотреть, что он возвращает – Jeff

+0

Я просто попробовал, m не получает ничего возвращенного, значит ли это, что он не работает, если бы он был 0 строк, он отображал бы 0? –

0

Вы можете упростить это до этого, однако я бы не рекомендовал брать пользовательский ввод без очистки XSS. Специально для таблицы, такой как логин.

function login($username, $password) { 
    global $conn; 
    $password = md5($password); 
    $query = "SELECT userId FROM users where userName = '$username' AND userPass = '$password' LIMIT 1"; 
    $result = mysqli_query($conn, $query); 
    $row_count = mysqli_num_rows($result); 
    if ($row_count >= 1) { 
     return $query['userId']; 
    } else { 
     return false; 
    } 
} 
+0

Это имеет большое значение, но его по-прежнему та же проблема, я полностью удалил функцию get user id и использовал ваш код, но проблема все та же, запрос работает вручную в phpmyadmin, чтобы упростить его действие, также сохранил его как обычный текстовый пароль. Кроме того, нет никакой санитарии, потому что я решил, что я сначала заработаю ее, а потом добавлю. Не обновляйте код сейчас –

+0

можете ли вы var_dump ($ result) и поместить его сюда? Также вы проверяете, что ваш 'md5 ($ password)' совпадает с значением вашей базы данных? – Andrew

0

Я предполагаю, что ваш код нуждается в некоторых исправлениях, так как ваша проверке параметров, если они пусты после запроса в базу данных, получить идентификатор пользователя перед проверкой, если его пароль правильный .. и так далее ..

Но первый, после линии

$query = "SELECT userId FROM users where userName = '$username' AND  userPass = '$password'"; 

почему ты не поставил

die($query); 

запустите страницу, скопируйте результат, вставьте его в поле запроса phpMyAdmin и посмотрите, соответствует ли результат вашим потребностям.

Смежные вопросы