PHP открыть другую веб-страницу с данными POST

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

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

Я знаю, что могу использовать заголовок ('Location: page.php'); но я не могу решить, как обеспечить данные POST этим. Как я могу это сделать? Кроме того, есть ли другой способ сообщить браузеру открыть другую страницу?

EDIT: Что я беру из ответов, так это то, что это можно сделать с помощью различных хаков, но мне бы лучше было просто обработать и отобразить код в одном файле. Я доволен этим; это был эксперимент больше всего на свете.

Действительно ли необходимо вызвать другую страницу после завершения обработки? Я бы, наверное, сделал следующее:

<form method="post" action="display.php"> ... </form> 

display.php:

 if ($_POST) { require_once(process.php); process($_POST); display_results; } 

с process.php, содержащий код, необходимый для обработки почтового запроса.

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

Вы можете сохранить эти данные в сеансе, например, в первом файле, который обрабатывает сообщение

 session_start(); $_SESSION['formdata'] = $_POST; //or whatever 

то вы можете прочитать его на следующей странице, например

 session_start(); print_r($_SESSION['formdata']); 

или вы можете передать его через GET: (но по комментариям это плохая идея)

 header('Location: page.php?' . http_build_query($_POST)); 

Если вы это сделаете, убедитесь, что вы выполняете дополнительную обработку / проверку на странице.php, поскольку злоумышленник может изменить переменные. также вам может не понадобиться вся почта, переданная на следующую страницу

редактировать

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

Вы можете использовать JavaScript как грязную работу:

 <form id="redirect_form" method="post" action="http://someserver.com/somepage.php"> <input type="hidden" name="field_1" value="<?php echo htmlentities($value_1); ?>"> <input type="hidden" name="field_2" value="<?php echo htmlentities($value_2); ?>"> <input type="hidden" name="field_3" value="<?php echo htmlentities($value_3); ?>"> </form> <script type="text/javascript"> document.getElementById('redirect_form').submit(); </script> 

(сценарий должен быть ниже формы)

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

Короче говоря, это невозможно

AFAIK это обычно делается как двухэтапный процесс:

  1. На form.php, POST данные для скрипта process.php
  2. Скрипт process.php обрабатывает данные, но никогда ничего не выводит сам, он всегда вызывает заголовок («Местоположение: asdasd») для перенаправления на страницу success.php или failure.php (если применимо)

Сделайте все это в одном скрипте и просто выведите другой HTML для получения результатов.

 <?php if($doingForm) { ?> html for form here <?php } else { ?> html for results <? } ?> 

Эта проблема несколько раз раздражала меня. Моя пользовательская CMS делает довольно сложную обработку, загрузку и манипуляцию, поэтому иногда выдает довольно длинные сообщения об ошибках и информации, которые не подходят для преобразования в данные GET, и я всегда хотел избежать проблемы перезагрузки данных INSERT, но еще не нашли адекватного решения.

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

Мне очень нравится решение для хранения переменных SESSION, но возникает вопрос о том, как вы гарантируете надлежащее уничтожение данных SESSION? Пока вы гарантируете, что вы отправляете только информацию (сообщения / ошибки), а не данные, которые должны / могли быть сохранены (и, следовательно, потенциально чувствительны), это должно быть проблемой, которую можно избежать.

Надеюсь, я правильно понял ваш вопрос. Вы можете попробовать следующее:

  1. Отрегулируйте форму таким образом:

form method = "POST" action = "process_data.php"

2. Затем вы создаете файл process_data.php, который неожиданно обрабатывает данные.
И в этом файле вы используете заголовок:
Например:

$ head = sprintf ("page.php? data1 =% d? data2 =% d", $ data1, $ data2);
заголовок ($ головы);

Надеюсь, я смогу помочь.