Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php双表单提交_Php_Html_Forms - Fatal编程技术网

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文件中

<?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键、值,并将散列存储在会话中,使用此散列值检查其是否与要避免的旧值相同。您可以创建自己的哈希方法,也可以搜索它。