Как получить статус отправки формы

#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();

}