Перейти к содержанию
  • записей
    6
  • комментария
    33
  • просмотров
    1 338

Redirect с POST данными

konorws

146 просмотров

Всем привет. Это буде короткая запись но очень полезная.
Тема данной публикации: Как сделать 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 и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.