Как опубликовать значения $_POST

Мне было интересно, может ли кто-нибудь помочь снова опубликовать значения $_POST. Допустим, я отправляю значения формы в post.php, где я могу получить доступ к данным с помощью переменных $_POST или $_REQUEST. Но как я могу отправить $_POST на другой URL-адрес, скажем, post_one.php и получить там данные?


person m1k3y3    schedule 10.01.2011    source источник
comment
Вы хотите сделать это без вмешательства пользователя или просто повторно разместив другую форму?   -  person John Parker    schedule 10.01.2011
comment
если вам нужно показать эту другую страницу пользователю, нет никакого способа.   -  person Your Common Sense    schedule 10.01.2011
comment
с вмешательством пользователя и перенаправлением пользователя на другую страницу. но желательно без создания скрытой формы :-)   -  person m1k3y3    schedule 10.01.2011
comment
Больше всего я ненавижу максимальный уровень абстракции, который некоторые предпочитают. Допустим, у нас есть какой-то сайт и представьте, что мы должны выполнить какое-то действие. Как это сделать? Трудно сказать, что это за форма, что это за другой сценарий и зачем весь этот бардак?   -  person Your Common Sense    schedule 10.01.2011
comment
Прошу прощения за уровень абстракции, но в чем дело, что в форме у него может быть один текстовый ввод. Если это можно сделать для одного поля формы, то можно сделать и для любого другого. Я могу включить в сценарий все, что будет работать.   -  person m1k3y3    schedule 11.01.2011


Ответы (6)


Если вы хотите сохранить данные POST при перенаправлении пользователя (т. е. браузера), создайте новую форму, содержащую данные POST (убедитесь, что вы используете htmlspecialchars), а затем отправьте эту форму (отправив ее в новое целевое местоположение).

Если это полностью серверная сторона, вы можете просто выполнить простой запрос POST с cURL или file_get_contents. На php.net есть много информации по этой теме.

person xrstf    schedule 10.01.2011

Вы должны отправить запрос 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);
person alexn    schedule 10.01.2011
comment
И если вам нужно показать результат новой информации, отправленной POST, просто выведите $result. - person Eduardo Romero; 11.01.2011
comment
Как размещать данные в одном сеансе? - person xmoonlight; 27.11.2013
comment
Это позволит текущему URL-адресу оставаться на этой странице, не может перенаправлять на целевую страницу POST. Как это решить? - person Sunry; 24.12.2013

Например, используя 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);
person vartec    schedule 10.01.2011

Я предположил, что вы хотите, чтобы второй URL-адрес был виден пользователю, и в этом случае есть несколько подходов:

  1. Просто добавьте соответствующие данные в скрытое поле формы и разместите эту форму в новом месте.

  2. Сохраните соответствующие данные в переменной $_SESSSION и используйте header('Location: /...'); для перенаправления на новый пункт назначения. Затем вы можете получить данные из массива $_SESSION в нужном месте.

  3. Добавьте необходимые переменные в строку запроса и используйте header('Location: /...xxx.php?example=true'); для перенаправления к новому месту назначения. После этого данные будут доступны через суперглобальный массив $_GET.

Из них я бы рекомендовал второй подход, поскольку он предотвратит видимость данных для конечного пользователя.

person John Parker    schedule 10.01.2011
comment
правда, сессия может быть опцией. - person m1k3y3; 10.01.2011

Это зависит от того, что у вас есть в post_one.php, если это просто функции, и для их работы требуется одна и та же переменная $_POST из post.php, тогда вы можете просто включить файл :

include 'path/to/post_one.php';

И функции внутри него будут иметь доступ к $_POST.

Но если он выводит какой-то html или нуждается в перенаправлении на него для правильной работы, то он может стать волосатым, не делайте этого так..

person snakeyyy    schedule 11.01.2011

In post.php :

session_start();
$_SESSION['POST'] = $_POST;

Затем в post_one.php :

session_start();
$_POST = $_SESSION['POST'];

На самом деле последняя строка не нужна, вы можете получить доступ к данным через $_SESSION['POST'] напрямую.

person Skippy le Grand Gourou    schedule 18.05.2016