Проблемы с переменной сеанса PHP после отправки формы - PullRequest
2 голосов
/ 16 июня 2010

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

Мой код для form.php выглядит так:

if (isset($_POST['submit'])) {
 // some form processing here
 if (count($errors) == 0) {
   // some data saving here
   $_SESSION['status'] = 'Thank you for submitting the form';
   header('Location: /form.php');
}

А теперь мой файл шаблона:

{if isset($smarty.session.status)} 
  <p><strong>{$smarty.session.status)</strong></p> 
{/if}

<!-- form html code goes here -->

Спасибо.

Ответы [ 3 ]

2 голосов
/ 16 июня 2010

Уничтожить сеанс:

Измените ваш код, чтобы он выглядел примерно так

if(isset($_SESSION['sentData'])
{
echo "Your message";

//This
session_destroy();
//or this
unset($_SESSION['sentData']);
}

РЕДАКТИРОВАТЬ:

На самом деле нет, поставьте это наконец form.php / вашего файла шаблона / после того, как вы отобразили сообщение:

unset($_SESSION['status']);
0 голосов
/ 16 июня 2010

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

Надеюсь, я понял ваш вопрос :)

0 голосов
/ 16 июня 2010

Было бы достаточно просто очистить переменную сеанса после отображения сообщения?

Это кажется самым простым решением. Вы также можете:

A) Проверьте, какая информация содержится в переменной $ _SERVER, чтобы попытаться определить, как пользователь попал на страницу, отображая сообщение только в том случае, если это произошло из маршрута.

B) У перенаправления есть переменная строки запроса (например, 'messages = 1'), которую вы проверяете с помощью $ _GET перед отображением сообщения сеанса.


РЕДАКТИРОВАТЬ: Я думал, что порядок операций:

1) Форма отправки 2) если нет ошибок, установить сообщение в сеансе 3) перенаправление 4) отобразить сообщение после перенаправления

Я говорю добавить шаг 5: удалите сообщение ПОСЛЕ того, как оно отобразится. Например, выведите сообщение как вы, но затем добавьте код после эха, чтобы удалить или очистить переменную сеанса.


РЕДАКТИРОВАТЬ 2: Ааа, теперь я понимаю ...

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

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