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


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

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

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

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

 7
Author: PTBNL, 2009-03-25

5 answers

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

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

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

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

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

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

 13
Author: Soviut, 2013-06-20 07:17:52

Используйте GET.

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

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

 2
Author: strager, 2009-03-24 23:42:56

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

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

 2
Author: ℳ  ., 2009-03-24 23:51:09

Вез Ферлонг недавно написал версию php5 в своем блоге (под названием HTTP-сообщение с php, без завитка):

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
Author: Jason Plank, 2011-11-17 15:48:12

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

 0
Author: dkretz, 2009-03-25 00:05:12