Не работает проверка на правильность данных
Не зависимо от правильности пароля или логина , сайт считает его валидным
$login = filter_var(trim($_POST['login']),FILTER_SANITIZE_STRING);
$pass = filter_var(trim($_POST['pass']),FILTER_SANITIZE_STRING);
$mysql = new mysqli('localhost','user','password','db');
$result=$mysql->query("SELECT * FROM form") ;
$user=$result->fetch_assoc();
if (count ($user)==0) {
echo "Такой пользователь не найден";
exit;
}
setcookie("user", $user['name'], time()+3600,"/");
$mysql->close();
header('location: /' );
?>
Ответы (1 шт):
Автор решения: Вадим Александру
→ Ссылка
Вы выбираете все записи, потом проверяете их количество, т.е если в траблице есть хотябы одна запись - проверка будет проходить вне зависиости от введенных данных.
Вот как можно изменить ваш код
// здесь необходимо реализовать логику хеширования пароля, обычно это md5
function passwd($password)
{
return md5($password);
}
$login = filter_var(trim($_POST['login']),FILTER_SANITIZE_STRING);
$pass = filter_var(trim($_POST['pass']),FILTER_SANITIZE_STRING);
$mysql = new mysqli('localhost','user','password','db');
//$result=$mysql->query("SELECT * FROM form") ;
$result=$mysql->query("SELECT * FROM form WHERE login = {$login} AND password = " . passwd($pass)) ;
$user=$result->fetch_assoc();
if (count ($user)==0) {
echo "Такой пользователь не найден";
exit;
}
setcookie("user", $user['name'], time()+3600,"/");
$mysql->close();