是不是被用户的行为所困扰?

一、

一个表单用户点击提交按钮了N次,这也导致了数据提交了N次。

为了此受到了测试的欺辱,受到了老板的批评?

不用怕,它就是来拯救你的。

第一步:打开命令行,敲入 composer require light\yii2-lock-form=~1.0.0

第二步:上个厕所

第三步:如果你的项目中已经使用了 yii2-bootstrap, 那么好,只需要在的你的 AppAsset 「whatever, 只要你全局依赖的就成」

轻轻的敲入:


'depends' => [
//other depends
'light\widgets\LockBsFormAsset'
]

如果你没使用 yii2-bootstrap 也能满足您:你只需要将 light\widgets\LockBsFormAsset 替换成 light\widgets\LockFormAsset.

还需要做什么?

如果还需要做的话,那就是定制一下 Lock 用语,


Html::submitButton('提交', ['data-loading-text' => '正在提交数据, 不让你点,哼'])

说了这么多,东西在那儿?

https://github.com/lichunqiang/yii2-lock-form

重要的事情要说三遍:star,star, star, little star, 一闪一闪亮晶晶。

二、

表单提交时,由于网速等原因,会出现重复提交的现象。

一、从前端的角度:增加遮罩

二、从后端的角度:使用session。
/可复用代码

$session = Yii::app()->session;

        $user_id = $this->user->id;
        $sessionKey = $user_id.'_is_sending';


        if(isset($session[$sessionKey])){
            $first_submit_time = $session[$sessionKey];
            $current_time      = time();
            if($current_time - $first_submit_time < 10){
                $session[$sessionKey] = $current_time;
                $this->response(array('status'=>1, 'msg'=>'不能在10秒钟内连续发送两次。'));
            }else{
                unset($session[$sessionKey]);//超过限制时间,释放session";  
            }
        }


        //第一次点击确认按钮时执行  
        if(!isset($session[$sessionKey])){
            $session[$sessionKey] = time();
        }

yii防止延迟用户多次点击按钮重复提交数据的更多相关文章

  1. php防止浏览器点击返回按钮重复提交数据

    <!--html中存放隐藏域数据--> <input type="hidden" value='{$sun_nums}' name='sub_nums' /> ...

  2. 防止asp.net连续点击按钮重复提交

    1.在Page_Load中添加如下代码: protected void Page_Load(object sender, EventArgs e) { this.btnEdit.Attributes[ ...

  3. JavaScript 弹出窗体点击按钮返回选择数据的实现

    首先是父页面的代码: <head runat="server"> <title>无标题页</title> <%-- <script ...

  4. ASP.NET怎么防止多次点击提交按钮重复提交

    今天做一个系统,由于服务器有点慢,所以常会被点击两次或三次,提交的数据就是多次了.所以要让按钮点击后,不能再次点击. 对于一个按钮,要让变成恢色的,只要this.disabled=true就可以了,可 ...

  5. Xamarin.Forms ListView点击按钮刷新最新数据

    最近在研究Xamarin的东西,做到ListView遇到了一些瓶颈,像在数据庞大的情况下,该怎么针对ListView中的数据分组呢? 基于能力有限的问题,暂时写了一个只可以实现功能的临时解决方案,毕竟 ...

  6. .net C# 利用Session防重复点击防重复提交

    <body>    <form id="form1" runat="server">    <div>        < ...

  7. GrideVlew提供点击按钮添加新数据,单击项目修改,长按删除功能

    package com.example.wang.myapplication; import android.app.AlertDialog; import android.content.Dialo ...

  8. 微信小程序开发——连续快速点击按钮调用小程序api返回后仍然自动重新调用的异常处理

    前言: 小程序开发中诸如获取用户手机号码.调起微信支付.领取卡券等api都是会有一定的延迟的.也就是说通过点击按钮调用这些api的时候,从点击按钮调用api,到支付页面或者领取卡券界面展示出来是需要一 ...

  9. 简易用户管理系统-前端实现(表单&提交请求&button$基础)

    laravel框架编写简易用户管理系统,前端Layui框架. 1.动态生成列表项 实现效果 PHP后台传入用户对象($users). 前端页面接收数据传入table. 逻辑就是在生成表格时,遍历传来的 ...

随机推荐

  1. IDEA中Git的更新、提交、还原方法

    第一步:在提交项目之前必须先对项目进行更新,此项特别重要,如果不进行更新,别人有项目提交到服务器上,那么你的项目将会提交不上去,使用git解决冲突会比较麻烦,即使你解决了冲突,但是有时候不注意会冲掉别 ...

  2. Java ascii码值转为输出ascii码

    Java ascii码值转为输出ascii码 public static void main(String[] args) { // TODO Auto-generated method stub S ...

  3. Oracle错误——ORA-39000:转储文件说明错误、ORA-39001:参数值无效、ORA-39088:文件名不能包含路径说明

    错误 在使用数据泵导入文件时,报错如下 Next 出错原因 在使用参数DUMPFILE指定文件名称时,不能包含路径信息,只可以使用文件名称 Next 解决办法 在使用数据泵进行数据导入导出前,必须要创 ...

  4. io模型---非阻塞模型

    Linux下,可以通过设置socket使其变为non-blocking.当对一个non-blocking socket执行读操作时,流程是这个样子: 从图中可以看出,当用户进程发出read操作时,如果 ...

  5. linux下的nmap工具能干什么?

    答:可以用来探测远程主机的操作系统类型,使用方法如下: nmap -A <ip address>

  6. spring事务的7种传播行为

    https://blog.csdn.net/weixin_39625809/article/details/80707695 一般用于并发,分布式锁.复杂业务情况

  7. [java] 软工实践WordCount-Plus

    整体思路 模块化 对于任何一个小模块,例如:输入.输出.计算都独立开来,降低耦合. 插件化 对于任何一个模块均作成插件,可拔插,可更换,而不会导致其他的插件出现故障. 事件驱动 使用观察者模式,用事件 ...

  8. curl 向远程服务器传输file文件

    public function upload(){ //获取上传文件信息,文件名称以自己实际上传文件名称为准 $fileinfo = $_FILE['filename']; //请求参数,依据商户自己 ...

  9. OpenGL.Qt532.cube

    1.官方的例子(安装好代源码的Qt532就有该例子) E:\Project_Qt532\Official_Examples\opengl\cube E:\Project_Qt532\Official_ ...

  10. 403 Access Denied :进入Tomcat的manager时拒绝访问

    解决办法: https://blog.csdn.net/Hello_World_QWP/article/details/79581174