zoukankan      html  css  js  c++  java
  • 避免表单重复提交-PHP

    问题的起因是这样的:我们平台新增了支付方式,但后面他们测试的时候,发现有报订单异常(有订单号验证,发现有重复订单号,就不允许再次提交)的提示.

    开始我去看的时候,未能重现问题,后面在提交的时候,猛戳那个提交按钮,就出现异常提示,无法充值.我立即明白过来,这是重复提交的问题了.

    对于重复提交,两种解决办法:1.客户端;2.服务器端.

    1.服务器端

    每个订单号只能提交一次,已有订单号验证,所以这里可不处理.

    但对于其他的表单,可以在表单中加入

    <input type='hidden' value="<?=uniqid()?>" id='duplicate' name='duplicate' />

    然后在处理请求的时候

    $uid = '';//用户名
    if(isset($_SESSION[$uid]) && $_SESSION[$uid] == $_POST['duplicate']){
         //跳转提示重复提交  
    }else{
       $_SESSION[$uid] = $_POST['duplicate'];
    }

    2.客户端

    我JS不好,不会写一些高深的东西来避免页面表单重复提交.

    第一种方法:HTML+JS

    <!--增加onsubmit触发事件-->
    <form action='./index.php' method='get' onSubmit='checkSubmit();'>
    <!--添加id,便于选择-->
    <input id='payImg' type='image' src='' />
    <script type="text/javascript">
    function checkSubmit(){
        $('#payImg').attr('disabled',true);
    }
    </script>

    每提交一次,就添加元素属性disabled,并将之设置为true

    第二种方法:JS

    无需再添加HTML的东西,只需添加JS即可

    这样可捕捉页面form表单的提交事件,每次提交后,对页面提交按钮添加并设置disabled属性

    $(function(){
          $('form').submit(function(){
                $(':submit',this).attr('disabled','disabled');
         }); 
    })    

    在客户端处理可以增加用户体验,但恶意攻击者是可以绕过客户端的,所以为了安全性,还需要添加服务器端代码.

    现在看网上的一些文章,有些喜欢写的很全,很深.有时东西写了半天,其实也解决不了问题,对于语言理解不够的人来说,也不知道是否正确.示例也搞的很复杂的样子.

  • 相关阅读:
    乐观锁与悲观锁——解决并发问题
    CentOS7 loaded active exited
    ubuntu安装phpVirtualBox web服务
    linux drwxr-xr-x 是什么意思
    phpmyadmin配置文件权限错误,不应任何用户都能修改
    转: CentOS安装jdk8
    PostgreSQL windows service启动失败
    PostgreSQL 添加自定义变量
    数据库检查约束是否存在
    转:PostgreSQL Cheat Sheet
  • 原文地址:https://www.cnblogs.com/ouzhenzhou/p/3363388.html
Copyright © 2011-2022 走看看