За последние 24 часа нас посетили 21578 программистов и 1021 робот. Сейчас ищут 708 программистов ...

Форма всегда запускает как admin'a

Тема в разделе "PHP для новичков", создана пользователем jicool, 1 апр 2017.

Метки:
  1. jicool

    jicool Новичок

    С нами с:
    25 мар 2017
    Сообщения:
    20
    Симпатии:
    0
    Прошу помощи опытных программистов!
    По форме регистрации я вхожу на сайт как admin .. Что-бы я не вводил.
    Возможно, я не вижу элементарной ошибки, потому прошу вашей поддержки в решении моей проблемы!

    PHP:
    1. $login = $_POST['login_reg'];
    2. $pass = $_POST['pass_reg'];
    3. $sql = "Select * from users";
    4. $query = mysqli_query($link, $sql);
    5. $res_query = mysqli_fetch_array($query);
    6.  
    7. if ( $res_query['login'] == $login ) {
    8.     echo "Пользователь уже существует!";
    9. }
    10. elseif ($login != $res_query['login'] ) {  
    11.     $login_reg = strip_tags($_POST['login_reg']);
    12.     $pass_reg = strip_tags($_POST['pass_reg']);
    13.     $new_user = "Insert into users(login,pass,role,number) values ('$login_reg','$pass_reg','3','0')";
    14.     mysqli_query($link, $new_user);
    15.     $sql_last = "Select * from users where login = '$login_reg' and pass = '$pass_reg'";
    16.     $last_user = mysqli_query($link, $sql_last);
    17.     $keys = mysqli_fetch_array($last_user);  
    18.     header('Location: start.php?id_user='.$keys["id"]."&number=".$keys["number"]);
    19. }
    Хотел, чтобы эта форма хотя-бы регистрировала меня. Раньше все работало, регистрация была.. Сейчас, видимо, я сделал что-то не так, зря перевернул все с ног на голову и регистрация не работает, просто по кнопке регистрации меня выбрасывает на start.php с правами админа.
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
    с 3 по 7 строке смотри, и var_dump используй. Тестировать умеем ?
     
  3. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    резервные копии надо делать. Особенно если не знаешь что делаешь.

    Вот что происходит в твоём коде:
    запросом из третьей строки ты извлекаешь ВСЕ записи из таблицы users, далее получаешь первую строку (т е всегда одного и того же пользователя) и сравниваешь логин этого пользователя с тем, что ввели в форме.
    Так как они не равны - создается новый пользователь с введенными логином и паролем.
    Затем он же извлекается из БД и перенаправляется на страницу start.php.

    На сколько я понимаю role = 3 - это значит, что пользователь админ.

    А еще - похоже, что можно авторизоваться на твоём сайте, просто введя в адресной строке id на фонарь.
     
  4. Sergey_Tsarev

    Sergey_Tsarev Активный пользователь

    С нами с:
    17 мар 2016
    Сообщения:
    502
    Симпатии:
    105
    PHP:
    1. <?php
    2. $login = $_POST['login_reg'];
    3. $pass = $_POST['pass_reg'];
    4. /*$sql = "Select *from users"; неправильный запрос
    5. $query = mysqli_query($link, $sql);
    6. $res_query = mysqli_fetch_array($query);*/
    7.  
    8. $sql = "Select `login` from users where `login` = '$login'";
    9.  
    10. $row_cnt = mysqli_num_rows($sql);
    11.  
    12. if($row_cnt > 0) {
    13. $query = mysqli_query($link, $sql);
    14. $res_query = mysqli_fetch_array($query);
    15. echo "Пользователь уже существует!";
    16. }
    17. else if {
    18.         $login_reg = strip_tags($_POST['login_reg']);
    19.         $pass_reg = strip_tags($_POST['pass_reg']);
    20.         $new_user = "Insert into users(login,pass,role,number) values ('$login_reg','$pass_reg','3','0')";
    21.         mysqli_query($link, $new_user);
    22.         $sql_last = "Select * from users where login = '$login_reg' and pass = '$pass_reg'";
    23.         $last_user = mysqli_query($link, $sql_last);
    24.         $keys = mysqli_fetch_array($last_user);
    25.         header('Location: start.php?id_user='.$keys["id"]."&number=".$keys["number"]);
    26. }
     
  5. jicool

    jicool Новичок

    С нами с:
    25 мар 2017
    Сообщения:
    20
    Симпатии:
    0
    Роль админа 1, всегда вхожу как админ :(
    Так и есть. id на фонарь запустит как администратора :)
    Именно первая строка и есть админ :(
     
  6. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    @jicool диагноз твоему коду поставлен. Назначай лечение. Ты же врач :)
    "Интерны" (с)
     
  7. jicool

    jicool Новичок

    С нами с:
    25 мар 2017
    Сообщения:
    20
    Симпатии:
    0
    Видимо проблема начинается не здесь :)
    Все равно прихожу как админ..
    --- Добавлено ---
    PHP:
    1. <?
    2. include "connection.php";
    3.  
    4. $login_submit = $_POST['login'];
    5.  
    6. if (isset($_POST["submit"])) {
    7.     $sql_search = "Select `login` from users where `login` = '$login_submit'";
    8.     $sql_search_query = mysqli_query($link, $sql_search);
    9.     $result_search = mysqli_fetch_array($sql_search_query);
    10.     if ($_POST['login'] != $result_search['login'] && $_POST['pass'] != $result_search['pass']) {
    11.         echo "Зарегистрируйтесь!!!";
    12.                 $form_reg = "<form method='POST' action='server.php'>";
    13.                 $form_reg.= "<p>Придумайте логин: <input type='text' name='login_reg'></p><br>";
    14.                 $form_reg.= "<p>Желаемый пароль: <input type='password' name='pass_reg'></p><br>";
    15.                 $form_reg.= "<input type='submit' name='reg_submit' value='Зарегистрируйтесь'>";
    16.                 $form_reg.= "</form>";
    17.                 echo $form_reg;                  
    18.     }
    19.     elseif ($_POST['login'] == $result_search['login'] && $_POST['pass'] == $result_search['pass']) {
    20.             $login = strip_tags($_POST['login']);             // Логин входа
    21.             $pass = strip_tags($_POST['pass']);
    22.             $sql = "Select * from users where login='$login' and pass='$pass'";
    23.             $result = mysqli_query ($link,$sql);    // Спросил есть ли я в базе
    24.             $keys = mysqli_fetch_array($result);    // Создаю переменную с ключами
    25.             header('Location: start.php?id_user='.$keys["id"]."&number=".$keys["number"]);
    26.         }
    27.    
    28. }    
    Сюда прихожу с самой первой формы ... Отсюда уже и попадаю как админ:(
    --- Добавлено ---
    И еще вопрос ..
    mysqli_fetch_array() - выдает же массив со всей таблицей? И там нужно искать совпадение по ключам?
    А mysqli_num_rows() - выдает количество строк с теми же совпадениями по ключам?
    Я, наверно, не правильно понимаю принцип работы этих двух команд.
     
  8. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    ты уверен в этом?
    Я думаю, что роль админа - 3 и ты всех регистрируешь админами.
    --- Добавлено ---
    mysqli_num_rows() возвращает количество строк, которые вернулись из БД
     
  9. jicool

    jicool Новичок

    С нами с:
    25 мар 2017
    Сообщения:
    20
    Симпатии:
    0
    upload_2017-4-2_14-25-51.png
    upload_2017-4-2_14-27-28.png
    --- Добавлено ---
    Я так запутался в этих ошибках в своем же "тварении", что кажется, намного проще будет переписать все 4 файла с нуля, пока в них по 30-40 строк, а не сотни :)
    --- Добавлено ---
    Попробую переписать с нуля, создать 2 формы на одной странице под регистрацию и логин и отправлять в разные места их. Может таким образом будет проще разбираться ..
     
  10. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.989
    Симпатии:
    759
    number что значит?

    Может быть я тебя удивлю, но роли на сайте тоже надо реализовать и сами по себе они не от куда не возьмутся.
    Где это происходит?

    Может быть у тебя просто все админы?

    Был тут у нас недавно чувак с хорошими продуктами у которого любой желающий мог изменить пароль администратора :D