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
- Forget PRG and go for AJAX
- as heximal said
- 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">
}
}
精彩评论