How to prevent form resubmission when page is refreshed (F5 / CTRL+R)
Use the Post/Redirect/Get pattern. http://en.wikipedia.org/wiki/Post/Redirect/Get
With my website, I will store a message in a cookie or session, redirect after the post, read the cookie/session, and then clear the value of that session or cookie variable.
Avoiding form resubmit in php when pressing f5
Your method could work in theory, but there's a much easier way.
After submitting the form successfully, perform a redirect. It doesn't matter where to, but it'll clear the $_POST.
header('Location: http://www.example.com/form.php');
In your case, it sounds like you want to redirect to the page you're already on. Append a $_GET parameter to the URL if you want to display a confirmation message.
Hope this helps,
Tom
How to Prevent Form Resubmission when page is refreshed or back button is clicked
I was searching around for days and finally found something. IF you use a HTML command it will remove any input the user put when the user goes back. Because my problem was when the user goes back after be redirected, their information was still there but if you use
<form method="post" enctype="multipart/form-data" autocomplete="off">
it removes everything so it kinda helps. The user will still be allowed to go back but at least now they can't resubmit the data.
Preventing form resubmission
There are 2 approaches people used to take here:
Method 1: Use AJAX + Redirect
This way you post your form in the background using JQuery or something similar to Page2, while the user still sees page1 displayed. Upon successful posting, you redirect the browser to Page2.
Method 2: Post + Redirect to self
This is a common technique on forums. Form on Page1 posts the data to Page2, Page2 processes the data and does what needs to be done, and then it does a HTTP redirect on itself. This way the last "action" the browser remembers is a simple GET on page2, so the form is not being resubmitted upon F5.
Best way to avoid the submit due to a refresh of the page
Don't show the response after your create action; redirect to another page after the action completes instead. If someone refreshes, they're refreshing the GET requested page you redirected to.
// submit
// set success flash message (you are using a framework, right?)
header('Location: /path/to/record');
exit;
Related Topics
How to Iterate Over Non-English File Names in PHP
PHP Simplexml: Insert Node at Certain Position
Php: Using Domdocument Whenever I Try to Write Utf-8 It Writes the Hexadecimal Notation of It
Differencebetween the PHP Open Tags "<=" and "<Php"/"<"
Get All Instances of a Class in PHP
Why Does PHP Echo'D Text Lose Its Formatting
How to Pass Jquery Variables to PHP Variable
Pre-Incrementation VS. Post-Incrementation
Http Options Request on Azure Websites Fails Due to Cors
Get Facebook Meta Tags with PHP
Strange Behaviour with Numbers That Have a Leading Zero
Cakephp Does Not Use My Models
Sort Multi-Dimensional Array by Specific Key