下面文章介绍了如下几个问题的解决方法仅供参考:
问题:
- 表单 post 重复提交?
2.限制 post 模拟提交?
3.数据 add() 自增id出现奇数偶数?
1.如何解决表单 post 重复提交?
a.页面提交后转到另一个页面而不是本页面,举个栗子,比如你的页面地址为
则该页面的表单action地址可以为另外的处理地址,如
这样报错返回,或者用户点击回退按钮,还是会回到上一个地址
b. 提交表单后提交按钮变灰/隐藏提交按钮
通过JS来动态监听用户的点击动作,动态将按钮属性置成disabeld,即为灰色不可用。代码如下:
JS:
().ready(function(){ ("#login_btn").on('click',function(){ $(this).attr('disabled',true); }); });
c. 使用隐藏随机TOKEN值的方法进行重复提交判断
首先,在项目的functions.php中添加如下方法
//创建TOKEN
functioncreateToken(){ code)); } //判断TOKEN function checkToken(token){ if(token == session('TOKEN')) { session('TOKEN',NULL); returnTRUE; }else{ returnFALSE; } } /* 加密TOKEN */ functionauthcode(str){ key ="YOURKEY"; str),8,10); returnmd5(str); }
在表单页面form中填入以下HTML代码
HTML:
<input type="hidden" name="TOKEN" value="{:session('TOKEN')}" />
在页面展示前调用creatToken()方法生成token,在相应控制器POST请求中 使用 checkToken() 进行判断是否重复提交
if(IS_POST){ post_token)){ $this->error('请不要重复提交页面',U('User/Index/login')); }
}
基本上,就能解决ThinkPHP开发中表单重复提交问题,当然,有同学说可以使用ThinkPHP的令牌环机制,这样其实就更简单了,TP会默认在表单中生成一个隐藏域,到时候判断这个隐藏域是否存在以及和session中的值是否想的即可,原理和方法3是一样的。
2.如何限制表单post模拟提交?
//如果是ajax 的post提交在控制器下方法内加入代码:
if(IS_AJAX&&IS_POST){ // 同时需要判定post是否是页面定义的post参数,非页面定义的参数,提示请求参数溢出 ...... }
//若果只是post提交在控制器下方法加入代码: if(IS_POST){ // 同时需要判定post是否是页面定义的post参数,非页面定义的参数,提示请求参数溢出 ...... }
3.thinkphp调用add()方法时候自增id出现奇数偶数如何处理?
#首先,查看mysql当前数据库自增长的步长? SHOW VARIABLES LIKE 'auto_inc%'; #然后,查看结果 auto_increment_increment 的值是否等于 1 ,如果是1代表以1递增,如果是2代表以2递增...... #最后设定每次增长步长 SET @auto_increment_increment=1;
#若想在表中的主键id以奇数出现,则设置为 SET @auto_increment_increment=奇数; 例如=3 #若想在表中的主键id以奇数出现,则设置为 SET @auto_increment_increment=偶数; 例如=2 #若想在表中的主键id以顺序增长1出现,则设置为 SET @auto_increment_increment=1;