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

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

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

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

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


person PTBNL    schedule 24.03.2009    source источник


Ответы (5)


Я помню, как давно боролся с этой проблемой, задаваясь вопросом, почему я просто не мог перенаправить с измененным заголовком 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">

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

person Soviut    schedule 24.03.2009
comment
Спасибо! Я чувствую, что должен был подумать об этом, но я никогда раньше не использовал скрытые поля, и я как бы зациклился на решении в самом PHP, а не на HTML. - person PTBNL; 25.03.2009
comment
Поверьте, я знаю, я был там не раз. Не забывайте проверять все ваши входные данные в формах И когда вы объединяете данные, чтобы избежать инъекций!!! - person Soviut; 25.03.2009

Wez Furlong недавно написал версию php5 в своем блоге (озаглавленный пост HTTP из 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;
}

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

person Community    schedule 27.03.2009
comment
Предполагая, что вы имеете в виду следующее: http://netevil.org/blog/2006/nov/http-post-from-php-without-curl выглядит многообещающе, спасибо (хотя 2006 год для меня не новинка! :-p) Возможно, это недостаток моего опыта работы с PHP, но я не знал заставить его работать и не видеть, как он будет отправлять данные POST с одной страницы на другую. - person PTBNL; 31.03.2009

Используйте ПОЛУЧИТЬ.

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

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

person strager    schedule 24.03.2009
comment
Однако существует очевидное (и небольшое) ограничение на размер данных GET. - person cletus; 25.03.2009
comment
@cletus, я знаю, но ОП не дал никаких указаний относительно того, сколько данных необходимо отправить между запросами страниц. - person strager; 25.03.2009

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

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

person ℳ  .    schedule 24.03.2009
comment
Согласен, сеансы жизнеспособны, но их раздражает поддержание правильного состояния для правильной страницы. Не говоря уже о том, что на стороне сервера очень требовательны к ресурсам с таким большим количеством данных. - person Soviut; 25.03.2009

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

person dkretz    schedule 25.03.2009