За последние 24 часа нас посетили 73663 программиста и 10224 робота. Сейчас ищут 2077 программистов ...

Передача массива с одной страницы на другую

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

Метки:
  1. jamson127

    jamson127 Новичок

    С нами с:
    11 окт 2017
    Сообщения:
    4
    Симпатии:
    0
    Привет, форумчане!

    Есть функция с формой авторизации log_in() и функция-обработчик этой формы log_in_handler(). log_in post'ом посылает введённые данные файлу log_in_handler.php, который включает в себя функцию log_in_handler().

    log_in():
    PHP:
    1.             echo "
    2.                <form method='post' action='/hd/log_in_handler'>
    3.                    <input type='text' name='login'>
    4.                    <input type='password' name='password'>
    5.                    <input type='submit' name='log_in'>
    6.                </form>
    7.                <a href='/act/register/'>Register</a>
    8.            ";
    log_in_handler():
    PHP:
    1. if (isset($_POST['log_in'])) {
    2.                 $login = $_POST['login']; $password = $_POST['password'];
    3.  
    4.                     [ . . . ]
    5.  
    6.                     $errors = array();
    7.                         if(!/*тут проверка логина*/) $errors[] .= 'При вводе логина, используйте только латинские буквы и цифры!';
    8.                     if(/*тут проверка пароля*/) $errors[] .= 'Недопустимые символы в ведённом пароле!<';
    9.  
    10.  
    11.                     if(!$errors[])
    12.                     {
    13.                         // проверяем, существует ли такой юзер
    14.                         if (...) {
    15.                             if(/*проверка паролей на соответствие*/)
    16.                             {
    17.                              // если всё прошло успешно - устанавливаются куки и открывается страница-запросчик
    18.                               self::to_prev_page();
    19.                             }
    20.                             else
    21.                             {
    22.                                 $errors[] .= "Пароль не соответствует!";
    23.                                    [тут нужно каким-то образом сделать передачу $errors]
    24.                               self::to_prev_page();
    25.                             }
    26.                         }
    27.                         else
    28.                         {
    29.                             $errors[] .= "Такого пользователя не существует!";
    30.                                  [тут нужно каким-то образом сделать передачу $errors]
    31.                           self::to_prev_page();
    32.                         }
    33.                     }
    34.                     else
    35.                     {
    36.                         [тут нужно каким-то образом сделать передачу $errors]
    37.                         self::to_prev_page();
    38.                     }
    39.                 }
    to_prev_page() - return header("Location: ".$_SERVER['HTTP_REFERER']); (возвращение пользователя на страницу-запросчика)

    Всё бы ничего, но, как понятно из названия и содержания кода выше, мне нужно отправлять массив с ошибками обратно на страницу авторизации.
    Есть идеи, как это сделать?
     
    #1 jamson127, 17 дек 2017
    Последнее редактирование: 17 дек 2017
  2. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    а зачем пользователя назад выкидывать? ошибки можно показать ему на той же форме аутентификации - пусть поправляется. и тебе не будет сложностей с передачей непонятно чего. и убери "нет пользователя" - не давай кулхацкерам понять чьи пароли перебирать. нет совпадения по паре логин-пароль и всё.
     
  3. jamson127

    jamson127 Новичок

    С нами с:
    11 окт 2017
    Сообщения:
    4
    Симпатии:
    0
    Хорошо, если я сделаю без перенаправления (проверка и внесение данных в БД будет на той же странице) - как потом отправить данные на всё ту же страницу хэндлера (для того, чтобы он уже установил куки и перенаправил юзера на главную страницу)? Как я понимаю, с PHP 7, хэдер и куки можно устанавливать только если они не были установлены ранее, а хэдер устанавливается еще в тэге <html>, соответственно мне нужно делать перенаправление на хэндлер, который будет содержать только код для установки кук и перенаправления на главную. И по поводу кулхацкеров - спасибо, поправлю
     
  4. Ganzal

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

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

    jamson127 Новичок

    С нами с:
    11 окт 2017
    Сообщения:
    4
    Симпатии:
    0
    куки:
    PHP:
    1. setcookie(COOKIE_HASH, /*тут содержание*/, /*время*/, '/')
    Обновление страницы:
    PHP:
    1. return header("Location: ".$_SERVER["REQUEST_URI"]);
     

    Вложения:

  6. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    ну как бы да. у тебя заголовки работают ДО отдачи данных. поэтому если у тебя юзер хорошо прошел проверку то куки и редирект должны быть до вывода чего-то на страницу. воспользуйся пока ob_start и её родственниками. а потом научишься не смешивать логику и контент.
     
    jamson127 нравится это.
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.843
    Симпатии:
    1.338
    Адрес:
    Лень
    все очень плохо.
     
  8. jamson127

    jamson127 Новичок

    С нами с:
    11 окт 2017
    Сообщения:
    4
    Симпатии:
    0
    спасибо, заработало
    --- Добавлено ---
    понял уже всё и пофиксил, спасибо