Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • записей
    6
  • комментариев
    128
  • просмотров
    4 058

Redirect с POST данными


konorws

7 986 просмотров

 Поделиться

Всем привет. Это буде короткая запись но очень полезная.
Тема данной публикации: Как сделать redirect в PHP и отправить POST данные. 

 

Кто сталкивался тот знает в чем проблема. Давайте посмотрим основные варианты которые предлагают на форумах.
 

1) Создать форму и отправить ее.

Суть заключается в том что бы на лету сгенерировать html форму и отправить ее. 
Пример кода

function redirect_post($url, array $data)
{
    ?>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <script type="text/javascript">
            function closethisasap() {
                document.forms["redirectpost"].submit();
            }
        </script>
    </head>
    <body onload="closethisasap();">
    <form name="redirectpost" method="post" action="<? echo $url; ?>">
        <?php
        if ( !is_null($data) ) {
            foreach ($data as $k => $v) {
                echo '<input type="hidden" name="' . $k . '" value="' . $v . '"> ';
            }
        }
        ?>
    </form>
    </body>
    </html>
    <?php
    exit;
}

Как на меня довольно страшно выглядит тай костыль костылем.

 

2) Сохранить данные в Session

Думаю пример кода делать не нужно и там понятно как работает.  
Тут я скажу что это один из самых адекватных способов, хотя влечет за собою несколько лишних действий. (Проверка, удаление и так далее).

 

Другое. 
Примеров еще много начиная от Curl проксированния заканчивая fopen. Думаю дальнейшие приведение примеров лишние.

А теперь Самое адекватное и правильное решение.

Заключается оно в том что бы использовать 307 код редиректа.

307 - редирект это временое перенаправление - так сказано в первых 4 силках в Google по запросу 307 Redirect.

А теперь главный нюанс "Если указать данный код то с редиректом будут отпрвленны данные из переменой $_POST"

 

Реализация PHP

<?php

$_POST['firstName'] = 'Maykl';
$_POST['lastName'] = 'Yatsyshyn';

header("Location: <URL>", true, 307);

?>

Использование в Opencart и сборках

<?php

// $this->request->post = &$_POST;

$this->request->post['firstName'] = 'Maykl';
$this->request->post['lastName'] = 'YATSYSHYN';

$this->response->redirect($URL, 307);
?>

Замечание вместе с данными которые вы записали (firstName, lastName) будут отправлены все данные которые уже били в $_POST это может пригодится когда вам нужно перенаправить данные с формы на другой обработчик или же назад на форму.

 Поделиться

1 комментарий


Рекомендованные комментарии

Ві проверяли как реагируют браузеры на 307 редирект

Суть 307 редиректа - сделать редирект на новый адрес с тем же методом и данными

Это интересно использовать при использовании формы при отправке на route имеющий ЧПУ, когда route прописан в скриптах
например account/login => login или checkout/cart => cart

Все равно сомниетльное

Ссылка на комментарий

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.