首次点击指向输出空数据的表单的链接时,我想避免双重表单提交或不需要的提交。
我设法找到there的代码似乎阻止了双重或单个空表单或之前的表单提交,但它也阻止了在预期时提交表单。
代码的主要部分如下,所有部分都在同一个php文件中。
<?php
session_start();
$_SESSION['token'] = md5(session_id() . time());
?>
<!DOCTYPE HTML>
...
<form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>" name="form_submitted">
<input type="hidden" name="token" value="<?php echo $_SESSION['token'] ?>" >
<input type="checkbox" name="catexp[]" value="1">Input1
<input type="checkbox" name="catexp[]" value="2">Input2
<input type="checkbox" name="catexp[]" value="3">Input3
<input type="Submit" name="Submit" >
</form>
<?php
if (isset($_SESSION['token']))
{
if (isset($_POST['token']))
{
if ($_POST['token'] != $_SESSION['token'])
{
// double submit
}
else
{
// FORM PROCESSING HERE
}// else ($_POST['token'] == $_SESSION['token'])
} // if (isset($_POST['token']))
} // if (isset($_SESSION['token']))
?>
在条件运行中进行表单处理需要做些什么?
Tkanks 帕斯卡
答案 0 :(得分:0)
我建议使用客户端检查来减少服务器所需的工作。为此使用一些JavaScript。
答案 1 :(得分:0)
提交第一次表单时,只需清除$_SESSION['token']
if (isset($_SESSION['token']))
{
if (isset($_POST['token']))
{
if ($_POST['token'] == $_SESSION['token'])
{
unset($_SESSION['token']);
// do form processing
}
else
{
// double submit