Передача данных POST с одной веб-страницы на другую с помощью PHP
Поиск не нашел аналогичного вопроса, поэтому: Как данные, используемые PHP для создания одной страницы, могут быть переданы с этой страницы на другую страницу, созданную PHP? У меня есть:
- Форма на странице 1, которая отправляет данные в PHP-скрипт по ПОЧТЕ.
- Страница 2 создается этим сценарием и показывает один или несколько графиков, созданных внешней программой с использованием записей на странице 1 и внутренней базы данных. На этой странице также есть другая форма с опциями для повторного создания графиков с новыми параметры (например, увеличение или усечение графика(графиков)).
- По запросу страница 3 будет сгенерирована с помощью того же PHP-скрипта с использованием данных POST, склеенных со страниц 1 и 2. За исключением графиков, ее основной внешний вид будет таким же, как на странице 2.
- Страницы 4, 5, 6... должно быть сгенерировано таким же образом, как на странице 3.
Итак, как я могу поместить данные ЗАПИСИ, используемые для создания страницы 2, в данные ЗАПИСИ для страницы 3?
РЕДАКТИРОВАТЬ: Из-за организационной политики файлы cookie не могут быть используется (поэтому сеансы невозможны). GET нежелателен, потому что мы не хотим, чтобы входные данные отображались в URL-адресе.
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">
Редактировать: Как упоминали другие, сохранение данных с использованием сеансы - это одна из возможностей, но это становится очень сложным вопросом поддержания временного состояния, которое такие вещи, как обновление страницы или использование кнопки "Назад", могут затруднить поддержание. Если вы не сталкиваетесь с крайним случаем, гораздо проще сохранять данные с помощью полей, поскольку они намного легче переносят обновления и другое поведение браузера.
Используйте GET.
На мой взгляд, запросы на публикацию должны что-то изменять (например, добавлять записи в базу данных). Запросы GET должны что-то извлекать (например, результаты поискового запроса).
Если вы все равно хотите использовать POST, загляните в сеансы PHP.
Сеансы - это боль, и если бы они вам были нужны, вы бы уже их реализовали.
Как сказал @Soviut выше, скрытые поля ввода, вероятно, являются подходящим способом для этого.
Вез Ферлонг недавно написал версию 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;
}
В посте он упоминает, что ему всегда приходится искать, как это сделать. Забавно, потому что он один из основных разработчиков!
Если вы решите отказаться от маршрута сеанса с помощью опции СУБД, мне посчастливилось разработать класс состояния для хранения этого материала и сериализовать объект с помощью JSON в одно большое поле в записи сеанса.