Прошу помощи опытных программистов! По форме регистрации я вхожу на сайт как admin .. Что-бы я не вводил. Возможно, я не вижу элементарной ошибки, потому прошу вашей поддержки в решении моей проблемы! PHP: $login = $_POST['login_reg']; $pass = $_POST['pass_reg']; $sql = "Select * from users"; $query = mysqli_query($link, $sql); $res_query = mysqli_fetch_array($query); if ( $res_query['login'] == $login ) { echo "Пользователь уже существует!"; } elseif ($login != $res_query['login'] ) { $login_reg = strip_tags($_POST['login_reg']); $pass_reg = strip_tags($_POST['pass_reg']); $new_user = "Insert into users(login,pass,role,number) values ('$login_reg','$pass_reg','3','0')"; mysqli_query($link, $new_user); $sql_last = "Select * from users where login = '$login_reg' and pass = '$pass_reg'"; $last_user = mysqli_query($link, $sql_last); $keys = mysqli_fetch_array($last_user); header('Location: start.php?id_user='.$keys["id"]."&number=".$keys["number"]); } Хотел, чтобы эта форма хотя-бы регистрировала меня. Раньше все работало, регистрация была.. Сейчас, видимо, я сделал что-то не так, зря перевернул все с ног на голову и регистрация не работает, просто по кнопке регистрации меня выбрасывает на start.php с правами админа.
резервные копии надо делать. Особенно если не знаешь что делаешь. Вот что происходит в твоём коде: запросом из третьей строки ты извлекаешь ВСЕ записи из таблицы users, далее получаешь первую строку (т е всегда одного и того же пользователя) и сравниваешь логин этого пользователя с тем, что ввели в форме. Так как они не равны - создается новый пользователь с введенными логином и паролем. Затем он же извлекается из БД и перенаправляется на страницу start.php. На сколько я понимаю role = 3 - это значит, что пользователь админ. А еще - похоже, что можно авторизоваться на твоём сайте, просто введя в адресной строке id на фонарь.
PHP: <?php $login = $_POST['login_reg']; $pass = $_POST['pass_reg']; /*$sql = "Select *from users"; неправильный запрос $query = mysqli_query($link, $sql); $res_query = mysqli_fetch_array($query);*/ $sql = "Select `login` from users where `login` = '$login'"; $row_cnt = mysqli_num_rows($sql); if($row_cnt > 0) { $query = mysqli_query($link, $sql); $res_query = mysqli_fetch_array($query); echo "Пользователь уже существует!"; } else if { $login_reg = strip_tags($_POST['login_reg']); $pass_reg = strip_tags($_POST['pass_reg']); $new_user = "Insert into users(login,pass,role,number) values ('$login_reg','$pass_reg','3','0')"; mysqli_query($link, $new_user); $sql_last = "Select * from users where login = '$login_reg' and pass = '$pass_reg'"; $last_user = mysqli_query($link, $sql_last); $keys = mysqli_fetch_array($last_user); header('Location: start.php?id_user='.$keys["id"]."&number=".$keys["number"]); }
Роль админа 1, всегда вхожу как админ Так и есть. id на фонарь запустит как администратора Именно первая строка и есть админ
Видимо проблема начинается не здесь Все равно прихожу как админ.. --- Добавлено --- PHP: <? session_start(); include "connection.php"; $login_submit = $_POST['login']; if (isset($_POST["submit"])) { $sql_search = "Select `login` from users where `login` = '$login_submit'"; $sql_search_query = mysqli_query($link, $sql_search); $result_search = mysqli_fetch_array($sql_search_query); if ($_POST['login'] != $result_search['login'] && $_POST['pass'] != $result_search['pass']) { echo "Зарегистрируйтесь!!!"; $form_reg = "<form method='POST' action='server.php'>"; $form_reg.= "<p>Придумайте логин: <input type='text' name='login_reg'></p><br>"; $form_reg.= "<p>Желаемый пароль: <input type='password' name='pass_reg'></p><br>"; $form_reg.= "<input type='submit' name='reg_submit' value='Зарегистрируйтесь'>"; $form_reg.= "</form>"; echo $form_reg; } elseif ($_POST['login'] == $result_search['login'] && $_POST['pass'] == $result_search['pass']) { $login = strip_tags($_POST['login']); // Логин входа $pass = strip_tags($_POST['pass']); $sql = "Select * from users where login='$login' and pass='$pass'"; $result = mysqli_query ($link,$sql); // Спросил есть ли я в базе $keys = mysqli_fetch_array($result); // Создаю переменную с ключами header('Location: start.php?id_user='.$keys["id"]."&number=".$keys["number"]); } } Сюда прихожу с самой первой формы ... Отсюда уже и попадаю как админ --- Добавлено --- И еще вопрос .. mysqli_fetch_array() - выдает же массив со всей таблицей? И там нужно искать совпадение по ключам? А mysqli_num_rows() - выдает количество строк с теми же совпадениями по ключам? Я, наверно, не правильно понимаю принцип работы этих двух команд.
ты уверен в этом? Я думаю, что роль админа - 3 и ты всех регистрируешь админами. --- Добавлено --- mysqli_num_rows() возвращает количество строк, которые вернулись из БД
--- Добавлено --- Я так запутался в этих ошибках в своем же "тварении", что кажется, намного проще будет переписать все 4 файла с нуля, пока в них по 30-40 строк, а не сотни --- Добавлено --- Попробую переписать с нуля, создать 2 формы на одной странице под регистрацию и логин и отправлять в разные места их. Может таким образом будет проще разбираться ..
number что значит? Может быть я тебя удивлю, но роли на сайте тоже надо реализовать и сами по себе они не от куда не возьмутся. Где это происходит? Может быть у тебя просто все админы? Был тут у нас недавно чувак с хорошими продуктами у которого любой желающий мог изменить пароль администратора