首頁 > 後端開發 > php教程 > 防止多个PHP表单交付

防止多个PHP表单交付

WBOY
發布: 2016-06-13 13:07:05
原創
956 人瀏覽過

防止多个PHP表单提交

当提交一个HTML表单,它可能需要几秒钟前成功提交,并显示响应页面的形式。人们可以得到空闲,并单击提交按钮几次,这可能会导致重复的表单提交。通常并不真的是一个问题,但在某些情况下,你可能要防止这种情况的发生。
下面你会发现两个简单的技巧,以防止重复提交,您可以使用这些或两者的结合。

?防止多个表单提交使用Javascript

使用Javascript块重复提交可能是最简单的方法。当有人提交表单我们简单地禁用Submit按钮,可能改变它的值为更具描述性的东西,比如“提交,请稍候……”

试着点击这个按钮,例如。它仍将禁用,直到你重新加载此页面:

第一步是要给你的提交按钮一个惟一的id,例如id =“myButton“:

<input type="submit" value="Submit" id="myButton">
登入後複製

第二个(也是最后一次)的步骤是给两个Javascript命令

标记。第一个将告诉浏览器禁用submit按钮的表单被提交之后,第二个将更改按钮的文本来给用户一些知道发生了什么。这是代码添加到你的表单标记:
onsubmit="document.getElementById('myButton').disabled=true;
document.getElementById('myButton').value='Submitting, please wait...';"
登入後複製

你的表单标记将类似于:

登入後複製

就是这样。这种方法应该于大多数的浏览器(IE  +,FireFox、Opera、…)。

?防止多个表单提交使用cookie

如果你想避免重复提交的整个浏览器会话(或更长),你可以考虑使用Cookie。例如编辑自己的表单处理脚本的浏览器发送cookie的形式后,已被处理,但在此之前的任何HTML或重定向打印头被。将这段代码的mail()命令后,应在大多数情况下:

setcookie('FormSubmitted', '1');
登入後複製

然后在处理之前检查cookie。如果有这个访问者已经提交了表单在活跃的浏览器会话。将下列代码添加到窗体的开始处理脚本:

if (isset($_COOKIE['FormSubmitted'])
{
    die('You may only submit this form once per session!');
}
登入後複製

就是这样!
如果修改,以阻止重复提交与cookies。注意:在上面的脚本和cookie的打印代码调用后添加一些代码的mail()函数:

<?php <span style="color:red">/* 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 原文
/* 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);

<span style="color:red">/* Set a cookie to prevent duplicate submissions */
setcookie('FormSubmitted', '1');</span>

/* 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)
{
?>
    
    

    <b>Please correct the following error:</b><br>
    <?php echo $myError; ?>

    
    
<?php exit();
}
?
登入後複製
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板