Home >Backend Development >PHP Tutorial > 回车太快导致重复提交解决方法

回车太快导致重复提交解决方法

WBOY
WBOYOriginal
2016-06-13 13:46:141083browse

回车太快导致重复提交
请问如何解决这个问题,谢谢

1、我一定要通过回车提交;
2、已屏蔽提交后SUBMIT变灰,但按回车还是会提交

------解决方案--------------------
php防止重复提交表单

 
  解决方案一:引入cookie机制来解决
  提交页面代码如下a.php代码如下:
  


  

说明
  

 

 
  

 
 
  setcookie("onlypost", 't'); //设置cookie,可以带上时间值。像有些论坛防止灌水就可以将你的一些基本信息存放到里面。
?> 处理页面b.php代码如下: 
  if($_COOKIE['onlypost'] == 't'){
  print_r($_COOKIE);
  //处理提交的内容 如果验证成功则处理
  print "ok";
  setcookie("onlypost", 'f'); //改变cooike值删除也可以了
} ?> 
body 
  如上处理的缺点:如果客户端禁止了Cookie,该方法将不起任何作用,这点请注意。
  解决方案二:使用session(这个与JSP处理方法是一样的)
  利用PHP的Session功能,也能避免重复提交表单。Session保存在服务器端,在PHP运行过程中可以改变Session变量,下次访问这个变量时,得到的是新赋的值,所以,可以用一个Session变量记录表单提交的值,如果不匹配,则认为是用户在重复提交。
A页面的代码: 
  session_start(); //根据当前SESSION生成随机数
  $code = mt_rand(0,1000000);
  $_SESSION['code'] = $code; //将此随机数暂存入到session
?>
 
  

说明
  
  

 

 
  

 
 
B页面: 
session_start(); 
  if(isset($_POST['originator'])) {
  if($_POST['originator'] == $_SESSION['code']){
  echo "ok";
  unset($_SESSION["code"]); //将其清除掉此时再按F5则无效
  }else{
  echo "请不要刷新本页面或重复提交表单";
} }?> 
  解决方案三:在服务器端做重定向处理
  if (isset($_POST['action']) && $_POST['action'] == 'submitted') {
  // 处理数据,如插入数据后,立即转向到其他页面
  header('location:submits_success.php'); //效果与JSP里面的sendRedirect类似
 } 


------解决方案--------------------
以前有人问,在极端情况下! 比如,post之间间隔小!且量大。
如何处理?


------解决方案--------------------
客户没意见的话禁止回车: onsubmit="return false;"
------解决方案--------------------
没有那么复杂吧,用JS很简单

就这么简单。
------解决方案--------------------
disable掉按钮,然后回车是trigger这个按钮,我不信还能提交。
还有一种方法是$("#ok:not(.btn-disable)").live("click",function() 
{
$(this).addClass("btn-disable");
}
------解决方案--------------------
为什么我就测试不出来“重复提交”呢?
------解决方案--------------------
探讨

哈哈,我就是经常测试出来。
一个输入框,一个submit按钮,输入一个数字,按回车不放,在后台写个UPDATE,qty=qty+输入的数量,各位按照你们的方法测试看看,结果会是多少。

我之前就试过几种
1、onsubmit事件,sumbmit1(submit按钮的名称).disabled=true;
2、在form里放一个隐藏按钮,值为某个session的值,提交后判断两个值是否一样……

------解决方案--------------------
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