Ребята помогите новичку проходит проверку только имя пользователя пароль пишет всегда неверный! В чем проблема? При чем если пароль оставить пустым все отрабатывает. Код (Text): //Подключаемся к базе данных $servername = "localhost"; $database = "sciron_123321"; $username = "sciron_123321"; $password = "123321"; //Записываем все в переменные $login=$_POST['login']; //Достаем из таблицы инфу о пользователе по логину $link = mysqli_connect($servername, $username, $password, $database); $res=mysqli_query( $link, "SELECT * FROM `users` WHERE `login`='$login' "); $data=mysqli_fetch_array($res); //Если такого нет, то пишем что нет if(empty($data['login'])) { die("Такого пользователя не существует!"); } $password=$_POST['password']; $link = mysqli_connect($servername, $username, $password, $database); $res=mysqli_query($link, "SELECT * FROM `users` WHERE `password`='$password' "); $data=mysqli_fetch_array($res); //Если пароли не совпадают if($password!=$data['password']) { die("Введенный пароль неверен!"); }
Запрос к бд тут должен быть один. И уж тем более соединение с бд должно быть всегда один раз на скрипт. Читайте про password_hash и password_verify. После этого попробуйте переписать код.
А если есть 2 одинаковых пароля? и пароль не хешируется когда записывается в базу? Если хешируется тогда надо так и запрашивать PHP: hash($password, 'тот же ключ что и при записи в базу');
Кстати, по поводу хеширования, я год назад писал вот так вот: PHP: sha1($password.HASH_KEY); Тут написано что не рекомендуется: https://php.ru/manual/faq.passwords.html#faq.passwords.fasthash Но как то не понятно почему, может кто в курсе?
sha1 md5 и т.д всегда возвращают один результат. Можно заранее создать табличку соответствий. И если базу уведут все пароли всплывут. В этом нет никакого смысла. password_hash дополнительно генерирует соль. хэш от одного и того же пароля всегда разный.