+ -
当前位置:首页 → 问答吧 → 阻止表单被重复提交(改)

阻止表单被重复提交(改)

时间:2007-08-03

来源:互联网

上贴被各位大侠少侠指出不少错误
回家后修改了一下程序,请各位继续指正
复制PHP内容到剪贴板
PHP代码:

<?php
session_start();
/**
     * 检查表单是否被重复提交
     * 相同内容的表单在设定时间内只能提交1次
     * @param int $iTimeOffset
     * @return bool
     */
function checkFormSubmit($iTimeOffset=60){
    // 取得表单的标识
    $idForm = md5(serialize($_POST));
    // 是否需要表单提交检察
    $iFormCheck = true;
    if (isset($_SESSION['formSubmitCheck'])){
        // 删除过期的表单标识
        foreach (array_keys($_SESSION['formSubmitCheck']) as $val){
            if (time() > $val){
                unset($_SESSION['formSubmitCheck'][$val]);
            }
        }
    }else {
        $_SESSION['formSubmitCheck'] = array();
        $iFormCheck = false;
    }
    if ($iFormCheck == true){
        // 检查是否有重复标识的提交记录
        foreach ($_SESSION['formSubmitCheck'] as $val){
            if ($val == $idForm){
                return false;
            }
        }
    }
    // 保存表单标识
    $_SESSION['formSubmitCheck'][(time()+$iTimeOffset)] = $idForm;
    return true;
}

if (count($_POST) > 0){
    if (checkFormSubmit()===true){
        echo '表单提交成功';
    }else {
        echo '表单重复提交';
    }
}
?>

<form method="POST">
    <input type="text" name="a">
    <input type="text" name="b">
    <textarea name="c"></textarea>
    <input type="submit" name="btnSubmit" value="确认">
</form>
<?php
var_dump($_POST);
var_dump($_SESSION);
?>

作者: paged   发布时间: 2007-08-02

沙发呀!

作者: yiqing666   发布时间: 2007-08-02

支持~

作者: laopi   发布时间: 2007-08-07

支持~~~~~~~~~~~~~~~~

作者: caiyuerui   发布时间: 2007-08-15

没必要这样弄

表单重复提交的问题

你可以用JS 来控制  submit

当submit 的时候就把  submit 按扭变无效.那么就可以了实现这个了

没必要用session服务器端检测.:lol

作者: 逆雪寒   发布时间: 2007-08-20

作者: phpip   发布时间: 2007-08-20

引用:
原帖由 逆雪寒 于 2007-8-20 09:36 发表
没必要这样弄

表单重复提交的问题

你可以用JS 来控制  submit

当submit 的时候就把  submit 按扭变无效.那么就可以了实现这个了

没必要用session服务器端检测.:lol
说得有道理

作者: xiaojia   发布时间: 2007-08-24

LS
那用户点击刷新按钮时  不是还是重复提交

作者: saturnine   发布时间: 2007-08-25

你试下.应该不会 楼上的

作者: 逆雪寒   发布时间: 2007-08-25

可以跳过你写的表单页面,自己写一个,不停的POST数据给你。

作者: DCD   发布时间: 2007-08-28

这个就不关这个事了.因为只是防止重复提交.如果是有人开另个表单POST 数据给你

那么你可以在  你的FROM 表单里面 做一个随机数,对不上这个数的就算POST 过去了.也不对数据起任何作用.

详细请参考DZ 论坛写法:)

作者: 逆雪寒   发布时间: 2007-08-28

学习了

作者: sonnzy   发布时间: 2008-06-24

又学一招

作者: flanksheng   发布时间: 2008-06-24

热门下载

更多