Post / Redirect / Get для отправки формы себе - PullRequest
0 голосов
/ 09 сентября 2011

Я хотел бы реализовать шаблон Post / Redirect / Get на странице, которая будет публиковать для себя.

Форма является частью приложения MVC, которое я сейчас создаю, а поля формы создаются в php.

Форма находится здесь: http://site.com/mycontroller/myaction/

Вот соответствующий код для «myaction» (обратите внимание, что сессия уже началась, поэтому я могу читать и писать из $ _SESSION):

public function myaction(){



 $login = $_POST['comment'];

    if(isset($comment)){
       //I am not doing any real checking here as I am just testing the redirect. Just checking to see if a value was supplied to the comment text input.
       $_SESSION['test'] = 'SUCCESS';

       //Insert the comment here (into some database).

       header("Location: http://site.com/mycontroller/myaction/", 302);
       exit();

       echo "<BR>Thanks for commenting! <BR>";
    }else{
       //Show the form here.
       //The form posts to itself, so the action looks like: <form action="" method="POST">
    }
}

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

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

Как я могу реализовать эти 2 требования?

Приветствия:)

Ответы [ 3 ]

1 голос
/ 09 сентября 2011

Есть 3 возможных решения

  1. Забудьте PRG и перейдите на AJAX
  2. как сказал шестнадцатеричный
  3. пишите свои сообщения в сессию

Для сообщения об ошибке вы можете показать его на месте, без перенаправления. Недостатком является то, что пользователь просит перезагрузить страницу, если он не заполнит форму окончательно, однако это часто считается незначительным.

0 голосов
/ 09 сентября 2011
public function myaction(){

 if(isset($_GET['ok'])) {
    echo "<BR>Thanks for commenting! <BR>";
 }

 $comment = $_POST['comment'];

    if(isset($comment)){
       //I am not doing any real checking here as I am just testing the redirect. Just checking to see if a value was supplied to the comment text input.
       $_SESSION['test'] = 'SUCCESS';

       //Insert the comment here (into some database).

       header("Location: http://site.com/mycontroller/myaction/?ok=1", 302);
       exit();

       echo "<BR>Thanks for commenting! <BR>";
    }else{
       echo  "Please enter a comment!";
       //Show the form here.
       //The form posts to itself, so the action looks like: <form action="" method="POST">
    }
}
0 голосов
/ 09 сентября 2011

я бы сделал следующее:

header("Location: http://site.com/mycontroller/myaction/?aftercomment=true", 302);

в скрипте myaction:

if ($_GET['aftercomment']) echo('Thanks for comment!');
...