Warning: count(): Parameter must be an array or an object that implements Countable
Я полный чайник в php и mysql. Решил сделать сайту простую авторизацию. Если с созданием регистрации проблем не возникло: все данные отлично записываются в бд, mо вот процесс самой авторизации не выходит. Выдаёт ошибку. Ругается на 14 строчку кода и пишет "Пользователь не найден".
$email = filter_var(trim($_POST['email']),
FILTER_SANITIZE_STRING);
$password = filter_var(trim($_POST['password']),
FILTER_SANITIZE_STRING);
$password = md5($password."kajkglkjdhflajksdh123");
$mysql = new mysqli('localhost', 'root', '', 'bdname');
$result = $mysql->query("SELECT * FROM `users` WHERE `email` = '$email' AND `password` = '$password'");
$user = $result->fetch_assoc();
if(count($user) == 0) {
echo "Пользователь не найден";
exit();
}
setcookie('user', $user['email'], time() + 3600, "/");
$mysql->close();
header('Location: /album');
?>
Ответы (1 шт):
Нужно убрать из условия функцию count, она лишняя, т.к. у вас возвращается либо массив с данными о пользователе, либо пустота, третьего быть не должно.
Вообще как вы извлекаете пользователя и как передаете параметры в запрос сделано не корректно.
Во-первых, нужно (если еще не сделано) сделать email уникальным и выбирать из БД пользователя по нему.
Во-вторых, md5 не надежный хеш, лучше используйте специальные встроенные функции https://www.php.net/manual/ru/function.password-hash.php и аналогичные для проверки.
Затем когда вы получили пользователя из БД по email, если он существует, то создаете хеш по введенному паролю и сравниваете с хешем в БД.
Никогда не вставляйте данные в запрос на прямую, используйте подготовленные выражения. В принципе я могу вам скинуть свой урок, если это не запрещено сообществом =)