Попытка сравнить значения из базы данных и php файла - PullRequest
0 голосов
/ 09 апреля 2020

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

<?php
// Get the user data
$credential_email = filter_input(INPUT_POST, 'email');
$credential_password = filter_input(INPUT_POST, 'password');

// Validate inputs
if ($credential_email === null || $credential_password === null) {
    $error = "Invalid credential data. Check all fields and try again.";
    include('error_2.php');
} else {
    require_once('database.php');
// compares values entered in login page form with mySQL database, and then directs either to protected page or to a failure page
$query = "SELECT * FROM credentials ORDER BY email";
$statement = $db->prepare($query);
$sel = $statement->execute();
$statement->closeCursor();
if($credential_email===$sel['email'] && credential_password===$sel['password'])
{
echo"success";
}
else
{
echo"failure";
}
}
?>

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

1 Ответ

3 голосов
/ 09 апреля 2020

База данных хороша для извлечения и сравнения информации. Так что SELECT password FROM credentials WHERE email = :email - это запрос, который вы должны использовать. Извлечение * может быть неэффективным, поэтому попробуйте на практике извлекать только то, что вы используете.

Прочитайте как предотвратить SQL инъекцию , поскольку это должно быть параметризовано.

Список будет по-прежнему возвращаться из запроса SQL, однако, если электронная почта уникальна (рекомендуется), должна быть только запись.

так:

$query = "SELECT password FROM credentials WHERE email = :email";
$statement = $db->prepare($query);
$sel = $statement->execute(array(':email' => $credential_email));
$result = $statement->fetch(PDO::FETCH_ASSOC);
if (password_verify($credential_password, $result['password'])) ...

Не хранить обычные текстовые пароли. Используйте password_hash как этот ответ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...