Проблема со скриптом входа. работают только данные для второго пользователя из БД (их всего два). Первого он проскакивает. В чем ошибка? Вот код: login.php Код (PHP): <?php echo " <h2>Вход</h2> <form method=POST action=text.php> <p><input type=text name=login size=30 placeholder=Логин><br></p> <p><input type=password name=password size=30 placeholder=Пароль> <p><input type=submit name=ok></p></form>"; ?> text.php Код (PHP): <?php if(isset($_POST["ok"])){ $host=""; $user=""; $pass=""; $db_name=""; $link=mysql_connect($host,$user,$pass); mysql_select_db($db_name,$link); $username = $_POST['login']; $password = $_POST['password']; $query =mysql_query("SELECT * FROM users"); while($row=mysql_fetch_array($query)) { $i++; if($username == $row['login'] && $password == $row['password']) { header("Location: text.php"); } else { header("Location: login.php"); } } } ?>
во-первых никто не выбирает всю таблицу пользователей ради проверки одного единственного. учи условия в мускульных запросах. во-вторых никто не держит пароли пользователей открытым текстом. это банальное нарушение безопасности их персональных данных. в-третьих никто не использует устаревшее расширение. в-четвертых ты наверное сам не знаешь зачем там инкремент переменной делается. в-пятых ты ничего делаешь с проверенным пользователем кроме переадресации к текстовому файлу. неавторизованный пользователь ведь тоже может напрямую обратиться к этому текстовому файлу - откуда система узнает залогинен он или нет. в общем возьми материал свежее и адекватнее.
а ты халявочку ждешь, да? тебе советы даны - гугл и мануалы в зубы. это твоё самостоятельное развитие. материала в интернете - жопой жри. зы. цитируемое сообщение должно идти до ответа. ззы. не надо оверквотить. просто вставь обращение к конкретному пользователю. я и так знаю что сказал.
Ganzal, ок. Только не в "халявочке" дело, прошу помочь, а не сделать за меня. Написанный мной код, тот что я взял из того самого гугла
ну ок. что не понятно допустим в пункте 1? и почему ты не заходил на официальный мануал чтоб увидеть огромное предупреждение о пункте 3? ты гуглишь готовые решения при полном отсутствии навыка программирования. ты ничего не знаешь про инструменты с которыми работаешь. ты нагуглил готовый код. и не понял его. ой.
Ganzal, в php разбираюсь, но, скажем, так не на таком уровне. С БД дело я имею первый раз, так что ничего там не понимаю. Однако, в скопированный мною код стараюсь вникнуть! И Я СТАРАЮСЬ ВНИКНУТЬ ВО ВСЕ ЭТО! И сообщений в роде "ты говно, а я - высшая сила спустился с небес, чтобы постебаться над тобой и дать тебе кучу загадок", пожалуйста, не надо
а где ты увидел подобные сообщения? да, у меня познаний чуточку больше чем у тебя и я вижу сложность материала. ты взялся за слишком сложный материал для своего уровня развития (в плане программирования а не мозгов. а то ты опять за оскорбление сочтешь...). сначала нужно изучать азы программирования. потом писать простые скриптики для получения базового знания о выбранном инструменте. потом подключаться к субд. потом пойти почитать про рсубд. потом вернуться к своему коду и учиться писать более крутые скрипты. ты же при нуле знаний скопипастил какой-то код который не понимаешь и теперь просишь за тебя пройти те этапы которые ты обязан был сам пройти до того как взяться за задачу подобного уровня. слава яйцам ты не просишь рассказать что делает этот код. кстати а ведь классный вопрос тебе для проверки: опиши построчно что делает этот алгоритм.
1.Я ввожу данные в форму, нажимаю кнопку (событие "OK"), они записываются в переменную типа $_POST 2.Во второй странице: подключаюсь к БД (для удобства все данные БД заданы в переменных). isset - если существует значение "Ok", т.е. если нажали на кнопку 3.Выбираю таблицу 4.Присваиваю переменным значение переменных переданных из формы на предыдущей странице 5.mysql_query() - выполняю запрос выбирая все данные (*) в таблице users 6.Запускаю цикл while(делать до тех пор пока...) 7.Присваиваю к $row по индексам (например, ['login']) значения из БД 8. $i++ -лишнее 9.ставлю условие: если значения переданные из формы равны значениям таблицы, то перенаправляю на text.php, если нет, то обратно к вводу данных
И вот в этом даже не видите очевидной ошибки? Вы же это в цикле делаете, т.е каждый раз, когда данные не совпали, вы перенаправляете назад. Плюс да, вам уже говорили, что выбирать все данные не обязательно, есть секция where у команды select, надо про неё прочитать. http://phpclub.ru/mysql/doc/select.html
Я правильно понял? Код (Text): $query =mysql_query("SELECT * FROM users WHERE login = {$_POST['login']}"); Добавлено спустя 8 минут 41 секунду: Как бы мало знаний по это теме у меня ни было, я достаточно понимаю, чтобы понимать, тот код, что где-то скопировал; я не прошу никого проходить те этапы. Я прошу указать на ошибки Добавлено спустя 1 минуту 53 секунды: Я планировал использовать для этого куки-файлы
ты выделяешь моменты и потом на них отвечаешь. ну не удобно нормальному человеку читать текст написанный через жопу.
Хорошо, буду делать так, что бы нормальные люди понимали. Так что, есть у меня шанс получить помощь с пояснениями? Буду рад, если да!
Ну почти. Только строковые значения берутся в кавычки. Ну и http://phpfaq.ru/mysql/slashes Добавлено спустя 1 минуту 45 секунд: Пароль обязательно сравнивать ===, и пароли сейчас принято хранить в необратимом хеше, хотя бы md5, хотя можно и что-нибудь посильнее. Если используется современная версия php, то вот эта штука просто шикарна: https://php.net/manual/ru/function.password-hash.php
Остальное говорили уже - расширение mysql устарело, начиная с 5.4 на него php ругается грубым матом, в 7.0 оно вообще отсутствует. Надо использовать mysqli или PDO. Вам рекомендую первое, поскольку в процедурном стиле оно очень близко. Почитать про него можно на http://php.net/mysqli . Да и вообще, почитайте по SQL какую-нибудь книжку, доки, что-ли
База остаётся mysql, mysqli - это просто название расширения, через которое с ней работает php. По ссылке, которую artoodetoo любезно вставил в мой пост, про это написано. Читайте материалы.