php判断相同的出现几次,内网系统,单号在提交时有做防重复判断,但是相同单号提交一次变成两次。...

内网系统,

服务端PHP+MYSQL

数据表字段的值在写入时PHP中有做判断,正常提示相同的单号不可能会重复插入数据的,但是有时候人家操作时明明只提交了一次,但是发现数据一模一样且同一时间同一秒写入了两条。

那位大侠知道怎么回事呀。

回复讨论(解决方案)

估计是连点了两次提交

我目前对于这种情况是前后台两种限制

前台当点击提交按钮时先把提交按钮变灰,并且不可点 ,然后再ajax向后台传值 返回结果后视程序逻辑转跳或者恢复按钮

后台插入前先判断是否已经有这条数据了(根据一个或几个不可能重复的字段来判断) 如果没有才进行插入.

额,如果是form表单提交的话 也可以用js来代替submit 点击后js先禁用按钮,再用js进行submit

只点了一次,但这种机率一个月会遇到一两次,我PHP代码中有先查询当前这个单号是否存在,如不存在才能执行写入数据库的作业的。所以纠结是什么情况出现的。。。

具体要看你写的代码,从源头解决问题。

秒并发问题。

例如有两次请求A,B同时到达

AB,都过了判断是否重复那个位置,然后当A插入后,B都会跟着插入。

可以这样写来避免重复插入。

例如test表有两个字段 name,valueINSERT INTO test(name, value) SELECT 'fdipzone', '123' FROM DUAL WHERE 'fdipzone' NOT IN (SELECT name FROM test);

既然是内网系统,并发量肯定不会很高,多个用户同时点击按钮的概率更低。

做好前端防止重复提交,后台验证提交即可。

秒并发问题。

例如有两次请求A,B同时到达

AB,都过了判断是否重复那个位置,然后当A插入后,B都会跟着插入。

可以这样写来避免重复插入。

例如test表有两个字段 name,valueINSERT INTO test(name, value) SELECT 'fdipzone', '123' FROM DUAL WHERE 'fdipzone' NOT IN (SELECT name FROM test);

我觉得您的写法应该可取,在插入语句里再判断一次。

虽然多个用户同时提交相同的内容的概率很低,但楼主也只是“有时候”出现

撇开程序的问题,这种情况在十年前经常出现。原因是浏览器的升级版本不稳定,导致一个请求发送两次数据,当然现在都已经修复了。不过怀旧者非要使用的话,出现问题也就很正常了

另一种情况是:表单不是提交到本页,或提交是由 ajax 完成的,此时如果用户的鼠标过于劳累,单单击变成了双击。从而造成二次提交也是可能的

防范这些非人为的故障可以在接收时做一下判断session_start();if(isset($_SESSION['post']) && $_SESSION['post'] == md5(serialize($_POST))) return;$_SESSION['post'] = md5(serialize($_POST));//正常的提交处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值