Jump to content
  • entries
    6
  • comments
    132
  • views
    3,043

Redirect с POST данными

konorws

4,751 views

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


Recommended Comments

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

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

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

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

Share this comment


Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.