Мне было интересно, может ли кто-нибудь помочь снова опубликовать значения $_POST
. Допустим, я отправляю значения формы в post.php, где я могу получить доступ к данным с помощью переменных $_POST или $_REQUEST. Но как я могу отправить $_POST на другой URL-адрес, скажем, post_one.php и получить там данные?
Как опубликовать значения $_POST
Ответы (6)
Если вы хотите сохранить данные POST при перенаправлении пользователя (т. е. браузера), создайте новую форму, содержащую данные POST (убедитесь, что вы используете htmlspecialchars
), а затем отправьте эту форму (отправив ее в новое целевое местоположение).
Если это полностью серверная сторона, вы можете просто выполнить простой запрос POST с cURL
или file_get_contents
. На php.net есть много информации по этой теме.
Вы должны отправить запрос HTTP POST на свой URL-адрес. Можно сделать это с помощью file_get_contents и указать контекст. Создать контекст легко с помощью stream_context_create. Пример следующий:
$data = http_build_query(
array(
'first' => 'your first parameter',
'second' => 'your second parameter'
)
);
$headers = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $data
)
);
$context = stream_context_create($headers);
$result = file_get_contents($url, false, $context);
Это вызовет POST-запрос к $url. $_POST['first']
и $_POST['second']
будут доступны в вашем целевом URL.
Если вы хотите повторно опубликовать все опубликованные переменные, замените первую строку на:
$data = http_build_query($_POST);
Например, используя cURL. Вы можете передать $_POST как массив сообщений.
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://example.com/post_one.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST);
curl_exec($ch);
Я предположил, что вы хотите, чтобы второй URL-адрес был виден пользователю, и в этом случае есть несколько подходов:
Просто добавьте соответствующие данные в скрытое поле формы и разместите эту форму в новом месте.
Сохраните соответствующие данные в переменной $_SESSSION и используйте
header('Location: /...');
для перенаправления на новый пункт назначения. Затем вы можете получить данные из массива $_SESSION в нужном месте.Добавьте необходимые переменные в строку запроса и используйте
header('Location: /...xxx.php?example=true');
для перенаправления к новому месту назначения. После этого данные будут доступны через суперглобальный массив $_GET.
Из них я бы рекомендовал второй подход, поскольку он предотвратит видимость данных для конечного пользователя.
Это зависит от того, что у вас есть в post_one.php, если это просто функции, и для их работы требуется одна и та же переменная $_POST из post.php, тогда вы можете просто включить файл :
include 'path/to/post_one.php';
И функции внутри него будут иметь доступ к $_POST.
Но если он выводит какой-то html или нуждается в перенаправлении на него для правильной работы, то он может стать волосатым, не делайте этого так..
In post.php
:
session_start();
$_SESSION['POST'] = $_POST;
Затем в post_one.php
:
session_start();
$_POST = $_SESSION['POST'];
На самом деле последняя строка не нужна, вы можете получить доступ к данным через $_SESSION['POST']
напрямую.