Home  >  Article  >  Backend Development  >  Prevent multiple PHP form submissions_PHP Tutorial

Prevent multiple PHP form submissions_PHP Tutorial

WBOY
WBOYOriginal
2016-07-14 10:06:48868browse

When submitting an HTML form, it may take several seconds before the form is successfully submitted and the response page is displayed. People can get idle and click the submit button several times, which may result in duplicate form submissions. Usually not really a problem, but in some cases you may want to prevent this from happening.
Below you'll find two simple tips to prevent duplicate submissions, you can use these or a combination of both.
»Prevent multiple form submissions using Javascript
Repeating submissions using Javascript blocks is probably the easiest way. When someone submits the form we simply disable the Submit button and maybe change its value to something more descriptive, like "Submit, please wait..."
Try clicking this button, for example. It will remain disabled until you reload this page:
The first step is to give your submit button a unique id, for example id="myButton":

The second (and final) step is to tag the two Javascript commands with

. The first will tell the browser to disable the submit button after the form is submitted, and the second will change the button's text to give the user some idea of ​​what's going on. This is the code to add to your form tag:
onsubmit="document.getElementById('myButton').disabled=true;
document.getElementById('myButton').value='Submitting, please wait...';"
Your form markup will look like:
onsubmit="document.getElementById('myButton').disabled=true;
document.getElementById('myButton').value='Submitting, please wait...';"
>
That's it. This method should work in most browsers (IE+, FireFox, Opera, ...).
»Prevent multiple form submissions from using cookies
If you want to avoid repeated submissions for an entire browser session (or longer), you may consider using cookies. For example, the browser that edits its own form handling script sends a cookie after the form has been processed, but before any HTML or redirect printheads are processed. Putting this code after the mail() command should work in most cases:
setcookie('FormSubmitted', '1');
Then check the cookie before processing. If there is an active browser session this visitor has already submitted the form. Add the following code to the form's start processing script:
if (isset($_COOKIE['FormSubmitted'])
{
Die('You may only submit this form once per session!');
}
That’s it!
If modified to prevent duplicate submissions with cookies. NOTE: Add some code to the mail() function after the above script and cookie print code call:
/* Prevent duplicate submissions */
if (isset($_COOKIE['FormSubmitted'])
{
Show_error('You may only submit this form once per session!');
}

/* Set e-mail recipient */
$myemail = "you@domain.com";

/* Check all form inputs using check_input function */
$yourname = check_input($_POST['yourname'], "Enter your name");
$subject = check_input($_POST['subject'], "Write a subject");
$email = check_input($_POST['email']);
$website = check_input($_POST['website']);
$likeit = check_input($_POST['likeit']);
$how_find = check_input($_POST['how']);
$comments = check_input($_POST['comments'], "Write your comments");
//www.software8.co Original text
/* If e-mail is not valid show error message */
if (!preg_match("/([w-]+@[w-]+.[w-]+)/", $email))
{
Show_error("E-mail address not valid");
}

/* If URL is not valid set $website to empty */
if (!preg_match("/^(https?://+[w-]+.[w-]+)/i", $website))
{
$website = '';
}

/* Let's prepare the message for the e-mail */
$message = "Hello!

Your contact form has been submitted by:

Name: $yourname
E-mail: $email
URL: $website

Like the website? $likeit
How did he/she find it? $how_find

Comments:
$comments

End of message
";

/* Send the message using mail() function */
mail($myemail, $subject, $message);

/* Set a cookie to prevent duplicate submissions */
setcookie('FormSubmitted', '1');

/* Redirect visitor to the thank you page */
header('Location: thanks.htm');
exit();

/* Functions we used */
function check_input($data, $problem='')
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
If ($problem && strlen($data) == 0)
{
          show_error($problem);
}
Return $data;
}

function show_error($myError)
{
?>

Please correct the following error:



exit();
}
?

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/477927.htmlTechArticleWhen submitting an HTML form, it may take a few seconds before the form is successfully submitted and the response page is displayed. People can get idle and click the submit button several times which may result in duplication...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn