печать заявления после перенаправления php - PullRequest
0 голосов
/ 02 августа 2011

Я работаю над несколькими формами прямо сейчас для веб-сайта, и я хотел бы получить уведомление о прохождении / отказе после отправки на той же странице, что и форма:

$get = $_GET;
$post = $_POST;

ob_start();
header('Location: ' . $_SERVER['PHP_SELF']);
ob_end_flush();

submit_form($get, $post) ? print('passed') : print('failed');

Форма отправкифункция работает нормально, но операторы print не отображаются - я не уверен, в чём здесь недостаток моей логики, и буду очень признателен за помощь.

Ответы [ 3 ]

1 голос
/ 02 августа 2011

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

Используйте переменную $ _SESSION для хранения пользовательской переменной под названием «системное сообщение» или как вы хотите ее вызывать. (помните, чтобы использовать $ _SESSION, вам нужно вызывать «session_start ()» в начале каждого php-файла.)

В случае успеха вашей формы, скажите

$_SESSION['system-message'] = "Form was successfully submitted"; 

Затем вызовите перенаправление вашего заголовка.

На последней странице сделайте так, чтобы она искала возможное системное сообщение, выполнив что-то подобное:

if(isset($_SESSION['system-message'])) { echo "<div class="system-message">".$_SESSION['system-message']."</div>";

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

unset($_SESSION['system-message']);
1 голос
/ 02 августа 2011

Я не верю, что заголовки буферизируются (http://php.net/manual/en/function.ob-start.php), поэтому обычно после вызова заголовка ('Location: xyz') браузер немедленно отправляется на страницу, указанную Location. Иногда вам нужен вызов для выхода (); после вызова заголовка ('Location: xyz') для предотвращения дальнейшей обработки, но это не всегда так, и на него нельзя положиться.

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

0 голосов
/ 02 августа 2011

По умолчанию PHP использует код состояния HTTP 302 для перенаправления на заголовок Location, который не имеет "тела". Итак, вам нужно передать некоторую информацию в скрипт, где вы будете выводить какое-то сообщение, используя GET (url), сессию, куки или что-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...