Я устанавливаю переменную сеанса 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 -->
Спасибо.
Уничтожьте сеанс:
Измените свой код, чтобы выглядеть примерно так:
if(isset($_SESSION['sentData']) { echo "Your message"; //This session_destroy(); //or this unset($_SESSION['sentData']); }
сif(isset($_SESSION['sentData']) { echo "Your message"; //This session_destroy(); //or this unset($_SESSION['sentData']); }
РЕДАКТИРОВАТЬ:
Фактически нет, поместите это в конец form.php / ваш файл шаблона / после того, как вы отобразите сообщение:
unset($_SESSION['status']);
Перед отображением сообщения вы можете проверить, что сообщение не пустое. Если он не пуст, отобразите сообщение и сразу же явным образом удалите переменную сеанса, чтобы в следующий раз предыдущая проверка не отобразила сообщение.
Надеюсь, я понял ваш вопрос 🙂
Достаточно ли просто очистить переменную сеанса после отображения сообщения?
Это кажется самым простым решением. Вы также можете:
A) Проверьте, какая информация находится в переменной $ _SERVER, чтобы попытаться определить, как пользователь попал на страницу, только отображая сообщение, если это произошло из маршрута.
B) Перенаправление включает переменную querystring (например, '? Messages = 1'), которую вы проверяете, используя $ _GET перед отображением сообщения сеанса.
EDIT: Я думал, что порядок операций:
1) представить форму 2) если нет ошибок, установить сообщение в сеансе 3) перенаправить 4) отобразить сообщение после перенаправления
Я говорю, добавьте шаг 5: удалите сообщение ПОСЛЕ его отображения. Как и в, эхо сообщения, как вы делаете, но затем добавьте код после эха, чтобы удалить или очистить переменную сеанса.
EDIT 2: Ах, я понимаю сейчас …
Мне интересно, если вы должны ссылаться на переменную сеанса непосредственно из файла шаблона. Может быть, лучше передать его в качестве параметра шаблона, который устанавливается PHP, который вызывает шаблон? Это дает вам возможность отделить управление сеансом от отображения, что, вероятно, в ваших интересах.