本文实例总结分析了ThinkPHP防止重复提交表单的方法。分享给大家供大家参考,具体如下:

为什么会有表单重复的坑

在开发中,如果一个新增或修改的表单,在后台完成数据库操作后我们设定的不是跳转到其他页面,还是返回本页面,这时点击浏览器的后退再提交或刷新页面,会导致form表单重复提交,即这条记录会被增加或修改两次。

导致表单重复提交的原因是:第一次提交的表单会被缓存到内存中,直到页面下次提交或页面关闭或转向其他页面时才消失。在自调用返回时,内存中的数据依然在,这时页面中的判断提交的代码依然可以检测到提交的值,顾会产生重复提交的效果。

如何解决?

总结网上的解决办法和自己的测试,可以用以下几个办法:

方法1:最简单:页面提交后转到另一个页面而不是本页面,举个栗子,比如你的页面地址为

http://yourdomain.com/User/Index/login

则该页面的表单action地址可以为另外的处理地址,如

这样报错返回,或者用户点击回退按钮,还是会回到上一个地址,不过这种情况也不保险。还要搭配方法2,一起比较保险

方法2:提交表单后提交按钮变灰/隐藏提交按钮

这种方式一般是结合方法1来做的,通过JS来动态监听用户的点击动作,动态将按钮属性置成disabeld,即为灰色不可用。代码如下:

HTML:

JS:

$().ready(function(){

$("#login_btn").on('click',function(){

$(this).attr('disabled',true);

});

});

方法1+方法2 结合后,基本上90%以上的重复提交问题都能解决,但是大刘这里还是要说下第三种方法,即在服务端一劳永逸的解决这个问题

方法3:使用隐藏随机TOKEN值的方法进行重复提交判断

首先,在项目的functions.php中添加如下方法

//创建TOKEN

function createToken() {

$code = chr(mt_rand(0xB0, 0xF7)) . chr(mt_rand(0xA1, 0xFE)) . chr(mt_rand(0xB0, 0xF7)) . chr(mt_rand(0xA1, 0xFE)) . chr(mt_rand(0xB0, 0xF7)) . chr(mt_rand(0xA1, 0xFE));

session('TOKEN', authcode($code));

}

//判断TOKEN

function checkToken($token) {

if ($token == session('TOKEN')) {

session('TOKEN', NULL);

return TRUE;

} else {

return FALSE;

}

}

/* 加密TOKEN */

function authcode($str) {

$key = "YOURKEY";

$str = substr(md5($str), 8, 10);

return md5($key . $str);

}

在表单页面form中填入以下HTML代码

HTML:

在页面展示前调用creatToken()方法生成token,在相应控制器POST请求中 使用 checkToken() 进行判断是否重复提交

if(IS_POST)

{

$post_token = I('post.TOKEN');

if(!checkToken($post_token)){

$this->error('请不要重复提交页面',U('User/Index/login'));

}

}

基本上,这3个方法配合着使用,就能解决ThinkPHP开发中表单重复提交问题,当然,有同学说可以使用ThinkPHP的令牌环机制,这样其实就更简单了,TP会默认在表单中生成一个隐藏域,到时候判断这个隐藏域是否存在以及和session中的值是否想的即可,原理和方法3是一样的。

PS:今天终于把内容用简书的markdown编辑器发出来了,果然markdown语法不是盖的,整个排版都清爽了,不错不错。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

php ajax 重复提交,ThinkPHP防止重复提交表单的方法实例分析相关推荐

  1. 使用ajax提交图片,提交已经注入文件的表单给后台上传图片 使用ajaxsubmit

    使用jquery form插件进行异步带文件的表单提交 引入form插件与jquery 的js文件后 获取表单的jq对象 然后.ajaxSubmit提交表单即可 实现添加品牌的异步表单提交 funct ...

  2. java向注册表单传递数据php_PHP提交from表单的方法

    PHP提交from表单的方法 PHP独特的语法混合了C.Java.Perl以及PHP自创的.语法.它可以比CGI或者Perl更快速地执行动态网页.下面是小编为大家搜索整理的PHP提交from表单的方法 ...

  3. php curlopen,php自动提交表单的方法(基于fsockopen与curl)

    搜索热词 本文实例讲述了PHP基于fsockopen与curl实现自动提交表单的方法.分享给大家供大家参考,具体如下: PHP自动提交表单 1. fsockopen方法: PHP;"> ...

  4. js提交成功后,清空表单

    js提交成功后,清空表单: $("form")[0].reset(); //清空表单 转载于:https://www.cnblogs.com/bagnliu/p/8205536.h ...

  5. 网页自动提交Form表单的方法

    最近做网站运营用到了邮件营销,使用了搜狐的sendcloud邮件代发平台.要想使用sendcloud平台发送邮件给客户,就必须调用他们的API接口进行批量发送,那么问题来了.sendcloud提供了好 ...

  6. 用php进行联查,Thinkphp使用join联表查询的方法

    本篇文章介绍了Thinkphp使用join联表查询的方法,具有一定的参考价值,希望对各位学习thinkphp的朋友有帮助! Thinkphp使用join联表查询的方法 多表联查:$user = M(' ...

  7. php tp5的联表查询,Thinkphp使用join联表查询的方法

    本篇文章介绍了Thinkphp使用join联表查询的方法,具有一定的参考价值,希望对各位学习thinkphp的朋友有帮助! Thinkphp使用join联表查询的方法 多表联查:$user = M(' ...

  8. java mvc中重复提交_SpringMVC之——防止重复提交表单的方法(一)

    这篇博文介绍第一种方法:判断session或其他缓存中保存的token,这里以session为例,具体大家也可以自行扩展以其他的缓存实现. 这种方式比较麻烦,每次在提交表单时都必须传入上次的token ...

  9. springboot 订单重复提交_Spring Boot (一) 校验表单重复提交

    一.前言 在某些情况下,由于网速慢,用户操作有误(连续点击两下提交按钮),页面卡顿等原因,可能会出现表单数据重复提交造成数据库保存多条重复数据. 存在如上问题可以交给前端解决,判断多长时间内不能再次点 ...

最新文章

  1. 搭建Docker环境---私有仓库registry搭建
  2. CF-527E(Data Center Drama) 欧拉图+构造
  3. c语言函数的程序设计,C语言程序设计第3版,第6章函数程序设计.ppt
  4. jQuery 表格实现
  5. 使用charles修改服务器返回数据,charles_01_打断点修改接口请求返回数据
  6. Unity LineRender 与 Trail Renderer 组件使用指南
  7. 用C实现SEH的例子如何跟进SEH
  8. 营销工作的七项核心能力
  9. 中国大学MOOCPython语言程序设计基础学习笔记和课后练习5-6周(南京邮电大学)
  10. 微信卡券开发-卡券核销
  11. (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  12. 【C语言】动态内存管理(heap)
  13. java 取结果集的最后三项,
  14. MEM/MBA 写作-论证有效性分析(04)逻辑缺陷-偷换概念以偏概全
  15. 基于python的股票客户流失数据分析模型
  16. 猜数字游戏——“C“
  17. Elasticsearch优秀的索引设置技巧
  18. 【编程语言】利用CImage类对图像像素的处理(图像二值化)
  19. QT---实现舒尔特方格(零基础入门)
  20. 华硕服务器进入重装系统界面怎么办,进不了桌面怎么重装系统,华硕电脑卡在欢迎界面...

热门文章

  1. SAP物料主数据创建时间的线性增长
  2. 将github pages搭建的网页添加到百度搜索资源平台上
  3. Useful code snippet to parse the key value pairs in URL
  4. hierarchy change - ERP side debugging
  5. SAP云平台CloudFoundry的Access Token和refresh token
  6. 如何添加任意一个UI component到SAP CRM的overview页面上
  7. 计算机辅助教学应用论文,高校计算机辅助教学应用论文
  8. 计算机操作系统第三章知识点,深入理解计算机操作系统第三章家庭作业
  9. 处理器排行_垃圾处理器排行榜 适邦垃圾处理器榜上有名
  10. 2×3卡方检验prism_分类变量的相关性:五分钟掌握卡方检验「从理论到Python实战」...