@miketomlin ну так поиск будет только по логину если делать правильно так как хэш с пароля мы не знаем. Я о том что код в любом случаи Г вот будет проект приносить лям тогда можно и на самопис переходить а в остальных случаях лучше готовый фреймворк.
@nospiou, получи хэш с введенного пароля по тому же самому правилу, по которому были получены хэши паролей в БД, и можешь сравнивать. Добавлять ли такое сравнение в запрос или выносить за его пределы – не так важно. Вы сами в праве решать, что вам лучше. Мне часто хватает собственных заготовок или заготовок тех, для кого я пишу. Если у вас в распоряжении нет ничего подобного, используйте сторонние решения. У нас с этим оч. строго. Прежде чем что-то новое прикрутить со стороны, это что-то должно быть тщательно проверено.
Это что то на подобии md5? Так никто уже не делает. Хэш содержит в себе соль. Что бы сравнить пароли нужно сначала получить хэш
@nospiou, только не надо мне рассказывать про всем известные бредоф-ции password_*. В них соль и проч. могут задаваться явно, иначе браться непосредственно из «хэша». Mля, говорю же, хэши сравнивайте, в чистом виде или вместе со всей идентичной матней, кот. к ним прилагается при использовании известной ф-ции. --- Добавлено --- P.S. Если плохо спится, когда не поюзаешь passwоrd_verify, можешь и вынести это сравнение из запроса – дело десятое. --- Добавлено --- P.P.S. Если соль и т.п. используются случайные и хранятся вместе с хэшем, выносите сравнение.
@MouseZver ,именно поэтому я создал тему,потому что была непонятна логика (= Я знаю,что зло. Но мне , а если непонятна логика,то зачем лишнее писать? (=
В вашем последнем фрагменте кода логики несильно прибавилось. Хде проверка входных данных, о кот. я писал? Хде проверка результатов? – нужно делать проверку и результата выполнения запроса, и наличия строки в выборке.
Будет неплохо указать, что при явном задании солей, ни в коем случае нельзя задавать одну и ту же соль на все пароли.
А вот и нет. Если прочтённых книг на рабочем столе 0%, это как раз и есть очень даже смешно – накой хрен её вообще приобретали? Предполагается, что на рабочем столе книги прочитаны и теперь служат справочным руководством в работе над сайтом. Может, у Вас иначе и прочтённые книги 100% – Вы это считаете ROFL?
Ну поговори мне про книгу приобретенную. Интересно будет наблюдать стороннюю, абсурдную Вангу. php net and google который ссылает по большому счету на сообщество программистов stackoverflow. Руководство хватает. Лично мне. Все меня раскусили, теперь я вынужден немедленно удалиться с этого форума.
А мне только одна тема заходишь. Сначала смотришь видео (udemy etc) что бы понять зачем тебе это и где это можно применить потом читаешь документацию что бы узнать о мелочах. Ну а дальше гугл. Книги они все старые. Их сейчас практически никто не пишет
@Valick ты неправильно понял ты можешь оставаться при своём мнении, но без демагогии демагогию нельзя ни при каком мнении =) не про мнение разговор, а про твои демагогические замашки. кстати попытка подменить тему и выставить себя жертвой - тоже на грани фола.
@25517, раз уж книжки тебе читать в лом, а кодить ужастно хочется, вот тут простенькая регистрация с авторизацией https://htmlweb.ru/php/example/avtorizacija2.php посмотри и как раз замени двойное md5 на связку password_hash и password_verify найдёшь описание этих функций на php.net
Отдаю на суд PHP: <?php class auth { public $username ; public $pass ; function __construct($username , $pass) { $connect = mysqli_connect('localhost' , 'admin_smoke' , 'Ubuntu6330' , 'admin_test') ; if (!$connect) { echo "Ошибка подключения базы данных"; exit(); } $query = mysqli_query($connect , "SELECT `name` , `password` FROM `users` WHERE `name`='" . $username . "' AND `password`='" . (md5($pass) . $username) . "' LIMIT 1"); $data = mysqli_fetch_assoc($query); if ($data) { echo "Success"; }else { echo "False"; } } } if (isset($_POST['log_in'])) { $auth = new auth($_POST['login'] , $_POST['password']); } ?> <form action="index.php" method="post"> <input type="text" name="login"> <input type="password" name="password"> <input type="submit" name="log_in"> </form>
Класс с маленькой буквы.((( Зачем пробел перед точкой с запятой? Текст можно и в одинарных здесь выводить, так как здесь просто текст. Дальше не стал смотреть....
А что там делает md5? Валидировать не нужно? Ну даже если не закрыть глаза на все это. Что возле md5 делает логин?
@nospiou , валидирование - это отдельно ,пока что... Затем, PHP: if ($data) { setcookie('my_cookie' , (md5($pass) . $username) ); header('Location:main.php') ; }else { echo 'False'; } А в main.php PHP: <?php require 'config.php' ; $cookie_pass = mysqli_query($connect ,"SELECT `name` FROM `users` WHERE `password`='". $_COOKIE['my_cookie'] . "'LIMIT 1" ); $cookie_check = mysqli_fetch_assoc($cookie_pass) ; echo 'Привет ,' . $cookie_check['name']; ?>
md5 зло но не об этом. зачем ты объединяешь md5 пароля с логином? Зачем ты этот md5 суешь в куку? Почему как все нормальные люди не создашь сессию с id?
Ну так может просто рано тебе еще самописные движки создавать? Может лучше начать с хорошо документированного фреймворка? посмотри документацию по ларке посмотри код что как и зачем сделано ну а потом если захочешь уже будешь извращаться. https://php.ru/manual/function.password-hash.html https://php.ru/manual/session.examples.basic.html
@25517 ну в целях понимания твою куку с паролем которая даже не httponly утащить можно вообще без проблем
PHP: <?php class auth { public $username; public $pass; function __construct($username , $pass) { require 'config.php' ; $query = mysqli_query($connect , "SELECT `name` , `password` FROM `users` WHERE `name`='" . $username . "' LIMIT 1"); $data = mysqli_fetch_assoc($query); if (password_verify ( $pass , $data['password'] ) ) { echo 'Sucess'; }else { $errors = []; if (empty($_POST['login'])) { $errors[] = 'Введите логин'; } if (empty($_POST['password'])) { $errors[] = 'Введите пароль'; } if (empty($errors)) { echo 'Неверно введён логин или пароль!'; }else { echo $errors['0']; } } } } if (isset($_POST['log_in'])) { $auth = new auth($_POST['login'] , $_POST['password']); } ?> <form action="" method="post"> <input type="text" class="input" name="login" placeholder="Логин" > <input type="password" name="password" class="input" placeholder="Пароль"> <input type="submit" name="log_in" class="input-button" value="Войти"> </form> <hr>