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