#php #forms #notifications #submit
#php #формы #уведомления #Отправить
Вопрос:
Я ищу «аккуратный» (чистый) способ отображения сообщения о состоянии после отправки формы.
Например, если пользователь обновляет свой профиль, я хочу показать DIV с текстом «Ваш профиль был обновлен!».
Прямо сейчас я делаю это таким образом:
После публикации данных и вставки или обновления таблицы базы данных я создаю заголовок («Location: updateprofile.php?status= обновлено»);
Это работает просто отлично, однако это не очень чисто. Мне не нужна строка запроса.
Другой метод, который я пробовал, состоял в том, чтобы установить переменную $submitted=1; и не выполнять перенаправление после. Однако, когда пользователь обновляет свою информацию, он по-прежнему отображает старую информацию в полях формы до обновления. Так что это тоже не работает.
Я знаю, что мог бы использовать AJAX для отправки формы и выполнить это таким образом, однако для того, что я делаю, я не хочу использовать AJAX. Мне нужно решение на стороне сервера.
Моя единственная другая мысль — установить переменную $ _SESSION, а затем каким-то образом удалить ее после отображения обновления статуса.
Любые идеи будут оценены!
Спасибо,
Тони
Комментарии:
1. Вы можете добавить что-то вроде
$_SESSION['notice']
и обновить его содержимое, когда это необходимо, напримерif(!empty($_SESSION['notice'])) { echo '<p class="notice">' . htmlentities($_SESSION['notice']) . '</p>'; unset($_SESSION['notice']); }
Ответ №1:
Большую часть времени это обрабатывается с помощью переменных сеанса, которые хранят все флэш-сообщения, которые необходимо отобразить.
В общем представлении (макет, элемент) поместите что-то вроде
<?php
if (isset($_SESSION['flashMessage']) amp;amp; !empty($_SESSION['flashMessage'])) {
echo <<<EOF
<div class="flashMessage">
{$_SESSION['flashMessage']}
</div>
EOF;
unset($_SESSION['flashMessage']);
}
?>
Установите $_SESSION['flashMessage']
значение «Ваш профиль обновлен». в любом коде, обрабатывающем отправку вашей формы.
Комментарии:
1. Ты крут! Я знал, что должно быть что-то, что можно сделать с СЕАНСАМИ, Я немного изменил ваш код, добавив вторую переменную $ _SESSION, в которой указывается тип сообщения (успех, Ошибка, предупреждение, Информация и т. Д.). Спасибо за вашу помощь!
2. Краткое примечание для других, кто может использовать это. Это не работало на всех моих страницах. Я бы установил переменные сеанса, а затем перенаправил заголовок (), используя Location: после загрузки страницы переменные сеанса будут пустыми. Решение состоит в том, чтобы добавить die() или exit() сразу после перенаправления header() . Это установит переменные СЕАНСА, прежде чем двигаться дальше. Я получил это решение от netweblogic.com/php/session-variables-not-set-header
Ответ №2:
Сохраните статусы в переменной массива сеанса, затем просто выполните:
<?php
if ( !empty( $_SESSION['statuses'] ) ) {
foreach ( $_SESSION['statuses'] as $status ) {
// Wrap in tags and format as needed
echo $status;
}
$_SESSION['statuses'] = Array();
}