Передача данных POST с одной веб-страницы на другую с помощью PHP - PullRequest
7 голосов
/ 25 марта 2009

Поиск не нашел аналогичного вопроса, поэтому: как можно передать данные POST, используемые PHP для генерации одной страницы, с этой страницы на другую страницу, сгенерированную PHP? У меня есть:

  • Форма на странице 1, которая отправляет данные в скрипт PHP через POST.
  • Страница 2 генерируется этим сценарием и показывает один или несколько графиков, созданных внешней программой с использованием записей на странице 1 и внутренней базы данных. Эта страница также имеет другую форму с опциями для повторного создания графиков с новыми опциями (например, увеличение или усечение графиков).
  • Если требуется, страница 3 будет сгенерирована с использованием того же сценария PHP с использованием данных POST, склеенных вместе со страниц 1 и 2. За исключением графиков, ее основной вид будет таким же, как и у страницы 2.
  • Страницы 4, 5, 6 ... должны создаваться так же, как и страница 3.

Итак, как я могу поместить данные POST, использованные для генерации страницы 2, в данные POST для страницы 3?

РЕДАКТИРОВАТЬ: Из-за политики организации, куки не могут быть использованы (поэтому сеансы невозможны). GET нежелателен, потому что мы не хотим, чтобы ввод отображался в URL.

Ответы [ 5 ]

13 голосов
/ 25 марта 2009

Я помню, как давно боролся с этой проблемой, удивляясь, почему я просто не мог перенаправить с измененным заголовком POST. Причиной перенаправления считается GET.

Независимо от того, вам нужно хранить переменные записи в скрытых полях.

<input type="hidden" name="someValueFromPageOne" value="blah">

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

<input type="hidden" name="pageOne_firstName" value="Joe">
<input type="hidden" name="pageTwo_streetNumber" value="22">

Редактировать: Как уже упоминали другие, сохранение данных с использованием сеансов является одной из возможностей, но это становится очень сложным вопросом поддержания временного состояния, которое может затруднить поддержание таких вещей, как обновление страницы или использование кнопки возврата. Если вы не столкнулись с крайним случаем, гораздо проще сохранять данные с помощью полей, поскольку они выживают при обновлениях и других режимах работы браузера гораздо проще.

2 голосов
/ 27 марта 2009

Wez Furlong недавно написал версию php5 в своем блоге (под заголовком HTTP post от php, без cURL):

function do_post_request($url, $data, $optional_headers = null)
{
$params = array('http' => array(
'method' => 'post',
'content' => $data
));
if ($optional_headers!== null) {
$params['http']['header'] = $optional_headers;
}
$ctx = stream_context_create($params);
$fp = @fopen($url, 'rb', false, $ctx);
if (!$fp) {
throw new Exception("Problem with $url, $php_errormsg");
}
$response = @stream_get_contents($fp);
if ($response === false) {
throw new Exception("Problem reading data from $url, $php_errormsg");
}
return $response;
}

В посте он упоминает, что он всегда должен искать, как это сделать. Забавно, потому что он один из основных разработчиков!

2 голосов
/ 25 марта 2009

Сеансы - это боль, и если бы вы нуждались в них, вы бы уже реализовали их.

Как сказал @Soviut выше, скрытые поля ввода, вероятно, способ для этого.

2 голосов
/ 25 марта 2009

Использовать GET.

По моему мнению, запросы POST должны что-то модифицировать (например, добавлять записи в базу данных). GET-запросы должны извлекать что-либо (например, результаты поискового запроса).

Если вы все равно хотите использовать POST, загляните в сеансы PHP.

0 голосов
/ 25 марта 2009

Если вы решите откусить маршрут сеанса с помощью опции dbms, мне посчастливится создать класс состояний для хранения этого материала и сериализовать объект с использованием JSON в одно большое поле в записи сеанса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...