Привет, форумчане! Есть функция с формой авторизации log_in() и функция-обработчик этой формы log_in_handler(). log_in post'ом посылает введённые данные файлу log_in_handler.php, который включает в себя функцию log_in_handler(). log_in(): PHP: echo " <form method='post' action='/hd/log_in_handler'> <input type='text' name='login'> <input type='password' name='password'> <input type='submit' name='log_in'> </form> <a href='/act/register/'>Register</a> "; log_in_handler(): PHP: if (isset($_POST['log_in'])) { $login = $_POST['login']; $password = $_POST['password']; [ . . . ] $errors = array(); if(!/*тут проверка логина*/) $errors[] .= 'При вводе логина, используйте только латинские буквы и цифры!'; if(/*тут проверка пароля*/) $errors[] .= 'Недопустимые символы в ведённом пароле!<'; if(!$errors[]) { // проверяем, существует ли такой юзер if (...) { if(/*проверка паролей на соответствие*/) { // если всё прошло успешно - устанавливаются куки и открывается страница-запросчик self::to_prev_page(); } else { $errors[] .= "Пароль не соответствует!"; [тут нужно каким-то образом сделать передачу $errors] self::to_prev_page(); } } else { $errors[] .= "Такого пользователя не существует!"; [тут нужно каким-то образом сделать передачу $errors] self::to_prev_page(); } } else { [тут нужно каким-то образом сделать передачу $errors] self::to_prev_page(); } } to_prev_page() - return header("Location: ".$_SERVER['HTTP_REFERER']); (возвращение пользователя на страницу-запросчика) Всё бы ничего, но, как понятно из названия и содержания кода выше, мне нужно отправлять массив с ошибками обратно на страницу авторизации. Есть идеи, как это сделать?
а зачем пользователя назад выкидывать? ошибки можно показать ему на той же форме аутентификации - пусть поправляется. и тебе не будет сложностей с передачей непонятно чего. и убери "нет пользователя" - не давай кулхацкерам понять чьи пароли перебирать. нет совпадения по паре логин-пароль и всё.
Хорошо, если я сделаю без перенаправления (проверка и внесение данных в БД будет на той же странице) - как потом отправить данные на всё ту же страницу хэндлера (для того, чтобы он уже установил куки и перенаправил юзера на главную страницу)? Как я понимаю, с PHP 7, хэдер и куки можно устанавливать только если они не были установлены ранее, а хэдер устанавливается еще в тэге <html>, соответственно мне нужно делать перенаправление на хэндлер, который будет содержать только код для установки кук и перенаправления на главную. И по поводу кулхацкеров - спасибо, поправлю
пока у тебя всё в кучу намешано есть форма. пользователь её отправил. на саму себя. ты это событие обработал - проверил логин-пароль. если всё плохо - показал ему эту же форму, но с ошибками. если всё хорошо - выставил нужные заголовки и перенаправил к нужному адресу. какой у тебя заголовок устанавливается в хтмл? хтмл заголовков не устанавливает
куки: PHP: setcookie(COOKIE_HASH, /*тут содержание*/, /*время*/, '/') Обновление страницы: PHP: return header("Location: ".$_SERVER["REQUEST_URI"]);
ну как бы да. у тебя заголовки работают ДО отдачи данных. поэтому если у тебя юзер хорошо прошел проверку то куки и редирект должны быть до вывода чего-то на страницу. воспользуйся пока ob_start и её родственниками. а потом научишься не смешивать логику и контент.