I have an edit-form page to edit my web开发者_Go百科site posts. It uses post method to the same page. If the form is compiled correctly shows up a congrats message.
The problem:
When users hit the refresh button the script tries to repost the data again to page. Is there a way to avoid this?
thanks
Luca
The general outline of the PRG pattern is this:
if ( $_SERVER['REQUEST_METHOD'] == 'POST' )
{
/// do your magic
$_SESSION['error'] = "Thanks for your message!";
// this should be the full URL per spec, but "/yourscript.php" will work
$myurl = ...;
header("Location: $myurl");
header("HTTP/1.1 303 See Other");
die("redirecting");
}
if ( isset($_SESSION['error']) )
{
print "The result of your submission: ".$_SESSION['error'];
unset($_SESSION['error']);
}
You need to use the PRG pattern.
You should use the PRG pattern already mentioned above! Just for completeness I add the possibility of using javascript history.replaceState if your forms depend on js (e.g. noscript should invalidate the form or something similar...).
<script>
window.history.replaceState({}, '#no-reload');
</script>
This is called the Post/Redirect/Get pattern. You do this by responding to a POST request with a 302/303 Redirect, which prevents that troublesome behavior on the client.
You can read more about this in the link I posted above.
精彩评论