php双表单提交
我希望避免在第一次单击输出空数据的表单链接时出现双重表单提交或不必要的提交 我设法找到的代码似乎阻止了双重或单一的空表单或以前的表单提交,但它也阻止了在需要时提交表单 代码的主要部分如下,所有部分都在同一个php文件中php双表单提交,php,html,forms,Php,Html,Forms,我希望避免在第一次单击输出空数据的表单链接时出现双重表单提交或不必要的提交 我设法找到的代码似乎阻止了双重或单一的空表单或以前的表单提交,但它也阻止了在需要时提交表单 代码的主要部分如下,所有部分都在同一个php文件中 <?php session_start(); $_SESSION['token'] = md5(session_id() . time()); ?> <!DOCTYPE HTML> ... <form method="post" action
<?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']))
?>
...
设置与用户的会话ID
检查数据库中是否已存在会话ID
如果会话对数据库是唯一的,则插入表单
我建议使用客户端检查来减少服务器所需的工作。为此使用一些JavaScript。首次提交表单时,只需清除$\u会话['token']
if (isset($_SESSION['token']))
{
if (isset($_POST['token']))
{
if ($_POST['token'] == $_SESSION['token'])
{
unset($_SESSION['token']);
// do form processing
}
else
{
// double submit
一种方法是散列$\u POST键、值,并将散列存储在会话中,使用此散列值检查其是否与要避免的旧值相同。您可以创建自己的哈希方法,也可以搜索它。