Как я могу опубликовать значения $ _POST - PullRequest
4 голосов
/ 10 января 2011

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

Ответы [ 6 ]

16 голосов
/ 10 января 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);
3 голосов
/ 10 января 2011

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

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

2 голосов
/ 10 января 2011

Например, используя 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);
1 голос
/ 11 января 2011

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

include 'path/to/post_one.php';

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

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

1 голос
/ 10 января 2011

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

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

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

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

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

0 голосов
/ 18 мая 2016

В post.php:

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

Затем в post_one.php:

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

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

...