Home  >  Article  >  Backend Development  >  javascript - JS或者PHP端如何防止重复提交?

javascript - JS或者PHP端如何防止重复提交?

WBOY
WBOYOriginal
2016-06-06 20:10:36827browse

如果重复提交的话会在数据表里累加数据,有解决办法吗?

回复内容:

如果重复提交的话会在数据表里累加数据,有解决办法吗?

Post/Redirect/Get 简称PRG,是一种用来防止表单重复提交数据的一种Web设计模式.

服务器端:
1.增加表单令牌,验证通过令牌失效。
2.如果有字段必须唯一,数据库设置唯一字段。
3.session存储最后提交的部分数据,判断是否一致。
4.成功后跳转新页面。
JS端:
1.提交后,取消提交事件或设置为不可点击。
2.成功后,重新加载页面。

数据库里把字段设为UNIQUE的,然后PHP插入语句遇到重复的会执行错误,你捕捉到错误就知道是插入失败了。

  1. Ajax 提交后,设置 submit 为不可点击

  2. 数据库设置 唯一索引,防止重复数据

方法如下,详情看注释

<code class="js">
var tag = 0;

$('.xxx').on('submit', function() {
    // 只有在tag = 0 的时候才能执行提交事件
    if(tag == 0) {
        // 提交事件执行的第一时间,将tag值改变,这样当再次触发submit时,就不会执行任何行为了
        tag = 1;
        // do something
        // 还可以在某些满足条件的情况下将tag值还原成0,让事件可以再次执行
    }
})
</code>

单击提交时间,返回成功后,将表单中的内容清空。这样避免了重复提交

参考laravel csrf-token https://laravel.com/docs/5.1/routing#csrf-x-csrf-token

前端的话
貌似是bootstrap或者jquery有一个button方法
比如可以在button增加一个data属性


js:
$('#submit').button('submit').on()

这样就可以自动disable掉button 并且显示data-submit的文字

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn