POST / Redirect / GET с обработкой ошибок

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

Возьмем следующий пример:

Пользователь находится на странице под названием 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 будут считаны и проверены.

signpetition.php

 <?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/