Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart
  • записей
    6
  • комменириев
    128
  • просмотров
    3 608

Redirect с POST данными


konorws

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

 Погделиться

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