Причиной этого сообщения является то, что я пытаюсь избежать «ошибки представления формы», которую большинство браузеров выделяет при обновлении формы.
Возьмем следующий пример:
Пользователь находится на странице под названием signpetition.php и показывает основную форму HTML:
<div id="sign-errors" style="display: none;"> </div> <form action="" method="post"> <input type="submit" name="submit_button" value="sign petition" /> </form>
Таким образом, пользователь нажимает кнопку submit
, и теперь данные POST будут считаны и проверены.
<?php if(isset($_POST['submit_button'])) { // Do some validation if($errors == true) { // What to do here? I want to go back to the last page, but keep the errors. Should I store them in a session variable and then unset them after their use? I feel as though there must be a better solution to this. $_SESSION['error'] = "the error"; header('Location: '. $_SERVER['REQUEST_URI'] , true, 303); exit; } else { $_SESSION['success'] = "your petition was successfully signed!"; header('Location: '. $_SERVER['REQUEST_URI'] , true, 303); exit; } } ?>
Итак, чтобы подвести итог:
Я хочу избежать проблемы с отправкой формы, поэтому я использую перенаправление заголовка в своем коде
Если пользователи перенаправляются, то никогда не должно быть повторного представления формы.
Переназначьте их в submitted.php
и используйте следующее:
if(isset($_SESSION['error'])){ echo'the error';} else if(isset($_SESSION['success'])){ echo'your petition was successfully signed!');} else{ echo 'unknown error.'; }
Я знаю, что это устарело, но я хотел добавить, что нет ничего плохого в вашем оригинальном решении относительно сохранения сообщения в объекте SESSION для одного использования. Это обычная практика, известная как «Flash-сообщения», которые являются сообщениями, хранящимися в сеансе, которые удаляются при чтении за один раз. Эта техника была популярна Rails. Ниже приводится сводка PHP:
http://www.phpdevtips.com/2013/05/simple-session-based-flash-messages/