开发者

Post/Redirect/Get for a form posting to itself

I would like to implement the Post/Redirect/Get pattern in a page that will post to itself.

The form is part of an MVC application I am building at the moment, an开发者_StackOverflow中文版d the form fields are generated in php.

The form resides here: http://site.com/mycontroller/myaction/

Here's the relevant code for "myaction" (note that a session has already been started, so I can read and write from $_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">
    }
}

The above code works fine, if the user refreshes or uses the back button, he is not asked to repost the data by the browser.

The problem is that I would like to display a message that says "Thanks for commenting" when the comment has been inserted. At the same time, if they provided an empty comment, I would like to display the form and a message that says "Please enter a comment!".

How can I go about implementing these 2 requirements?

Cheers :)


There are 3 possible solutions

  1. Forget PRG and go for AJAX
  2. as heximal said
  3. write your messages into session

For the error message you could show it in place, without redirect. It has an disadvantage of asking a user to reload a page if they fail to fill out the form finally, however it is often considered negligible.


i would make the following:

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

in myaction script:

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


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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜