За последние 24 часа нас посетили 54694 программиста и 1720 роботов. Сейчас ищут 1850 программистов ...

Проблема со скриптом входа.

Тема в разделе "PHP для новичков", создана пользователем jonathan-grinn, 10 фев 2016.

  1. jonathan-grinn

    jonathan-grinn Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    71
    Симпатии:
    0
    Проблема со скриптом входа. работают только данные для второго пользователя из БД (их всего два). Первого он проскакивает. В чем ошибка?

    Вот код:

    login.php
    Код (PHP):
    1. <?php
    2.   echo "
    3.     <h2>Вход</h2>
    4.     <form method=POST action=text.php>
    5.   <p><input type=text name=login size=30 placeholder=Логин><br></p>
    6.   <p><input type=password name=password size=30 placeholder=Пароль>
    7.   <p><input type=submit name=ok></p></form>";
    8.   ?>
    text.php
    Код (PHP):
    1. <?php
    2. if(isset($_POST["ok"])){
    3. $host="";
    4. $user="";
    5. $pass="";
    6. $db_name="";
    7. $link=mysql_connect($host,$user,$pass);
    8. mysql_select_db($db_name,$link);
    9.   $username = $_POST['login'];
    10.   $password = $_POST['password'];
    11.   $query =mysql_query("SELECT * FROM users");
    12.  
    13. while($row=mysql_fetch_array($query))
    14.  {
    15.    $i++;
    16.   if($username == $row['login'] && $password == $row['password'])
    17.  {
    18.    header("Location: text.php");
    19.   }
    20.    else {
    21.    header("Location: login.php");
    22.    }
    23. }
    24.     }
    25.   ?>
     
  2. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    так никто не делает (;
     
  3. jonathan-grinn

    jonathan-grinn Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    71
    Симпатии:
    0
    Простите, я новичок и буду рад узнать как все делают)))
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    во-первых никто не выбирает всю таблицу пользователей ради проверки одного единственного. учи условия в мускульных запросах.
    во-вторых никто не держит пароли пользователей открытым текстом. это банальное нарушение безопасности их персональных данных.
    в-третьих никто не использует устаревшее расширение.
    в-четвертых ты наверное сам не знаешь зачем там инкремент переменной делается.
    в-пятых ты ничего делаешь с проверенным пользователем кроме переадресации к текстовому файлу. неавторизованный пользователь ведь тоже может напрямую обратиться к этому текстовому файлу - откуда система узнает залогинен он или нет.

    в общем возьми материал свежее и адекватнее.
     
  5. jonathan-grinn

    jonathan-grinn Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    71
    Симпатии:
    0
    Можно, пожалуйста, на коде объяснить, а то я процентов 20 только понял:(((

     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а ты халявочку ждешь, да? тебе советы даны - гугл и мануалы в зубы. это твоё самостоятельное развитие. материала в интернете - жопой жри.

    зы. цитируемое сообщение должно идти до ответа.
    ззы. не надо оверквотить. просто вставь обращение к конкретному пользователю. я и так знаю что сказал.
     
  7. jonathan-grinn

    jonathan-grinn Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    71
    Симпатии:
    0
    Ganzal, ок. Только не в "халявочке" дело, прошу помочь, а не сделать за меня. Написанный мной код, тот что я взял из того самого гугла
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ну ок. что не понятно допустим в пункте 1? и почему ты не заходил на официальный мануал чтоб увидеть огромное предупреждение о пункте 3?
    ты гуглишь готовые решения при полном отсутствии навыка программирования. ты ничего не знаешь про инструменты с которыми работаешь. ты нагуглил готовый код. и не понял его. ой.
     
  9. jonathan-grinn

    jonathan-grinn Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    71
    Симпатии:
    0
    Ganzal, в php разбираюсь, но, скажем, так не на таком уровне. С БД дело я имею первый раз, так что ничего там не понимаю. Однако, в скопированный мною код стараюсь вникнуть! И Я СТАРАЮСЬ ВНИКНУТЬ ВО ВСЕ ЭТО! И сообщений в роде "ты говно, а я - высшая сила спустился с небес, чтобы постебаться над тобой и дать тебе кучу загадок", пожалуйста, не надо
     
  10. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а где ты увидел подобные сообщения? да, у меня познаний чуточку больше чем у тебя и я вижу сложность материала. ты взялся за слишком сложный материал для своего уровня развития (в плане программирования а не мозгов. а то ты опять за оскорбление сочтешь...). сначала нужно изучать азы программирования. потом писать простые скриптики для получения базового знания о выбранном инструменте. потом подключаться к субд. потом пойти почитать про рсубд. потом вернуться к своему коду и учиться писать более крутые скрипты. ты же при нуле знаний скопипастил какой-то код который не понимаешь и теперь просишь за тебя пройти те этапы которые ты обязан был сам пройти до того как взяться за задачу подобного уровня. слава яйцам ты не просишь рассказать что делает этот код. кстати а ведь классный вопрос тебе для проверки:

    опиши построчно что делает этот алгоритм.
     
  11. jonathan-grinn

    jonathan-grinn Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    71
    Симпатии:
    0
    1.Я ввожу данные в форму, нажимаю кнопку (событие "OK"), они записываются в переменную типа $_POST
    2.Во второй странице: подключаюсь к БД (для удобства все данные БД заданы в переменных). isset - если существует значение "Ok", т.е. если нажали на кнопку
    3.Выбираю таблицу
    4.Присваиваю переменным значение переменных переданных из формы на предыдущей странице
    5.mysql_query() - выполняю запрос выбирая все данные (*) в таблице users
    6.Запускаю цикл while(делать до тех пор пока...)
    7.Присваиваю к $row по индексам (например, ['login']) значения из БД
    8. $i++ -лишнее
    9.ставлю условие: если значения переданные из формы равны значениям таблицы, то перенаправляю на text.php, если нет, то обратно к вводу данных
     
  12. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    И вот в этом даже не видите очевидной ошибки? Вы же это в цикле делаете, т.е каждый раз, когда данные не совпали, вы перенаправляете назад. Плюс да, вам уже говорили, что выбирать все данные не обязательно, есть секция where у команды select, надо про неё прочитать. http://phpclub.ru/mysql/doc/select.html
     
  13. jonathan-grinn

    jonathan-grinn Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    71
    Симпатии:
    0
    Я правильно понял?
    Код (Text):
    1.  
    2. $query =mysql_query("SELECT * FROM users WHERE login = {$_POST['login']}");
    Добавлено спустя 8 минут 41 секунду:
    Как бы мало знаний по это теме у меня ни было, я достаточно понимаю, чтобы понимать, тот код, что где-то скопировал; я не прошу никого проходить те этапы. Я прошу указать на ошибки
    Добавлено спустя 1 минуту 53 секунды:
    Я планировал использовать для этого куки-файлы
     
  14. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    я уже просил цитировать в духе конференции а не почтовой программы
     
  15. jonathan-grinn

    jonathan-grinn Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    71
    Симпатии:
    0
    Ganzal, как угодно, но я выделил конкретные моменты на которые отвечал
     
  16. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ты выделяешь моменты и потом на них отвечаешь. ну не удобно нормальному человеку читать текст написанный через жопу.
     
  17. jonathan-grinn

    jonathan-grinn Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    71
    Симпатии:
    0
    Хорошо, буду делать так, что бы нормальные люди понимали. Так что, есть у меня шанс получить помощь с пояснениями? Буду рад, если да!
     
  18. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Ну почти. Только строковые значения берутся в кавычки. Ну и http://phpfaq.ru/mysql/slashes

    Добавлено спустя 1 минуту 45 секунд:
    Пароль обязательно сравнивать ===, и пароли сейчас принято хранить в необратимом хеше, хотя бы md5, хотя можно и что-нибудь посильнее. Если используется современная версия php, то вот эта штука просто шикарна: https://php.net/manual/ru/function.password-hash.php
     
  19. jonathan-grinn

    jonathan-grinn Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    71
    Симпатии:
    0
    mkramer, спасибо! Почитаю, попробую... А других замечаний по коду не будет?
     
  20. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Остальное говорили уже - расширение mysql устарело, начиная с 5.4 на него php ругается грубым матом, в 7.0 оно вообще отсутствует. Надо использовать mysqli или PDO. Вам рекомендую первое, поскольку в процедурном стиле оно очень близко. Почитать про него можно на http://php.net/mysqli . Да и вообще, почитайте по SQL какую-нибудь книжку, доки, что-ли
     
  21. jonathan-grinn

    jonathan-grinn Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    71
    Симпатии:
    0
    То есть, с самой базой делать ничего не надо? Только поменять функции, да?
     
  22. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    да, mysqli это просто другое расширение php, база про него не знает.
     
  23. jonathan-grinn

    jonathan-grinn Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    71
    Симпатии:
    0
    Но ведь у меня mysql база... Функции mysqli все равно будут работать? Непонимаю...
     
  24. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    База остаётся mysql, mysqli - это просто название расширения, через которое с ней работает php. По ссылке, которую artoodetoo любезно вставил в мой пост, про это написано. Читайте материалы.
     
  25. jonathan-grinn

    jonathan-grinn Новичок

    С нами с:
    6 фев 2016
    Сообщения:
    71
    Симпатии:
    0
    А всё, ясно. Спасибо!