Я новичок в 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 это обычно делается как двухэтапный процесс:
Сделайте все это в одном скрипте и просто выведите другой HTML для получения результатов.
<?php if($doingForm) { ?> html for form here <?php } else { ?> html for results <? } ?>
Эта проблема несколько раз раздражала меня. Моя пользовательская CMS делает довольно сложную обработку, загрузку и манипуляцию, поэтому иногда выдает довольно длинные сообщения об ошибках и информации, которые не подходят для преобразования в данные GET, и я всегда хотел избежать проблемы перезагрузки данных INSERT, но еще не нашли адекватного решения.
Я считаю, что правильный путь для этого – создать массивы сообщений для каждого возможного состояния – каждое сообщение или ошибку, которую вы могли бы отображать, а затем вам нужно только отправлять номера ошибок / сообщений, которые намного легче обрабатывать, чем длинные строки данных, но это то, что я всегда избегал лично, поскольку я считаю это немного утомительным и громоздким. Честно говоря, это, наверное, просто лень с моей стороны.
Мне очень нравится решение для хранения переменных SESSION, но возникает вопрос о том, как вы гарантируете надлежащее уничтожение данных SESSION? Пока вы гарантируете, что вы отправляете только информацию (сообщения / ошибки), а не данные, которые должны / могли быть сохранены (и, следовательно, потенциально чувствительны), это должно быть проблемой, которую можно избежать.
Надеюсь, я правильно понял ваш вопрос. Вы можете попробовать следующее:
form method = "POST" action = "process_data.php"
2. Затем вы создаете файл process_data.php, который неожиданно обрабатывает данные.
И в этом файле вы используете заголовок:
Например:
$ head = sprintf ("page.php? data1 =% d? data2 =% d", $ data1, $ data2);
заголовок ($ головы);
Надеюсь, я смогу помочь.