php双表单提交防止

时间:2013-12-24 21:07:11

标签: php html forms

首次点击指向输出空数据的表单的链接时,我想避免双重表单提交或不需要的提交。

我设法找到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 帕斯卡

2 个答案:

答案 0 :(得分:0)

  1. 与用户
  2. 设置会话ID
  3. 检查会话ID是否已存在于数据库中
  4. 如果会话对数据库是唯一的,则插入表单
  5. 我建议使用客户端检查来减少服务器所需的工作。为此使用一些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