Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...
  • записів
    6
  • коментарів
    128
  • переглядів
    4 240

Redirect с POST данными


konorws

8 211 перегляд

Всем привет. Это буде короткая запись но очень полезная.
Тема данной публикации: Как сделать 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 коментар


Recommended Comments

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

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

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

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

Надіслати

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.