请问如何解决这个问题,谢谢1、我一定要通过回车提交;
2、已屏蔽提交后SUBMIT变灰,但按回车还是会提交

解决方案 »

  1.   

    用js试试看,第一次回车触发一个function 来屏蔽Enter键,第二次的Enter就无效了
      

  2.   

    IE浏览器6.0-8.0
    我在FORM设置了一个一个隐藏框form_secret,值等于$secret
    $secret=md5(uniqid(rand(), true));
    $_SESSION['FORM_SECRET']=$secret;提交后,判断if(strcasecmp($_POST['form_secret'],$_SESSION['FORM_SECRET'])===0)
    然后删除session,还是会重复提交
    整个表单就一个输入框,一个隐藏按钮,然后按回车就提交,假设我回车键按着不放,就会一直提交。
      

  3.   

    是个好主意,但这个要求是尽量减少 用户动作,也就是只要按一个回车,其他都不需要USER去管,否则在提交前,也可以提示是要保存之类的。
      

  4.   

    如果让 submit 变灰还不能解决问题的话,那就用更严厉的办法阻止 form 重复提交,比如在 form 的 onsubmit 事件里返回 false。

    ————————————————————————————————
    基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
      

  5.   

    php防止重复提交表单      
      解决方案一:引入cookie机制来解决
      提交页面代码如下a.php代码如下:
      <form id="form1" name="form1" method="post" action="t2.php">
      <p>说明
      <input type="text" name="titile" />
    </p> 
        <p> 
      <input type="submit" name="Submit" value="提交" />
    </p> 
    </form> 
    <?php 
      setcookie("onlypost", 't');         //设置cookie,可以带上时间值。像有些论坛防止灌水就可以将你的一些基本信息存放到里面。
    ?> 处理页面b.php代码如下: 
    <?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页面的代码: 
    <?php 
      session_start();                //根据当前SESSION生成随机数
      $code = mt_rand(0,1000000);
      $_SESSION['code'] = $code;      //将此随机数暂存入到session
    ?> <form id="form1" name="form1" method="post" action="t2.php"> 
      <p>说明
      <input type="text" name="titile" />
      <input type="hidden" name="originator" value="<?php echo $code;?>">
    </p> 
        <p> 
      <input type="submit" name="Submit" value="提交" />
    </p> 
    </form> 
    B页面: 
    <?php 
    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类似
     } 
      

  6.   

    用js控制form的提交,不要用submitr的button或用ajax提交一次清空input,判断值是否为空,是的话,return false;
      

  7.   

    var submitFlag = true;
    <form onsubmit="return submitFlag; submitFlag = false;">
      

  8.   

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

  9.   

    客户没意见的话禁止回车: onsubmit="return false;"
      

  10.   

    按一下之后,立刻把submit button黑了。
      

  11.   

    没有那么复杂吧,用JS很简单
    <input type="submit" name="save" id="save" value="保存" onclick="this.value='数据提交中,请稍候……';this.disabled=true;" />
    就这么简单。
      

  12.   

    disable掉按钮,然后回车是trigger这个按钮,我不信还能提交。
    还有一种方法是$("#ok:not(.btn-disable)").live("click",function() 
    {
       $(this).addClass("btn-disable");
    }
      

  13.   

    session的方法可行,可以有效的杜绝重复提交和刷新提交
      

  14.   

    很简单,看例子
    <form action='a.php' method='post' onsubmit="this.action='#';">
    ...
    <input type='submit' value='提交'>
    </form>只要用戶第一次提交過之後form的action就变为#了,这样就不能第二次提交了.
      

  15.   

    哈哈,我就是经常测试出来。
    一个输入框,一个submit按钮,输入一个数字,按回车不放,在后台写个UPDATE,qty=qty+输入的数量,各位按照你们的方法测试看看,结果会是多少。我之前就试过几种
    1、onsubmit事件,sumbmit1(submit按钮的名称).disabled=true;
    2、在form里放一个隐藏按钮,值为某个session的值,提交后判断两个值是否一样,判断后删除session值不行!
    从输入到提交过程不能有任何干扰USER的事件,比如提示是否保存什么的,这个是要求,不是我能决定的,我也想搞个提示框……。
      

  16.   

    LZ是否可以将问题再描述得清楚一点,是表单默认的enter触发submit,还是捕捉keydown事件。
    提交是直接form提交还是隐藏frame,还是ajax。
      

  17.   


    这个问题在js端的办法就是取消回车提交!不用submit,用button试试。
    在后台:据说极端情况下很难解决。因为这些请求可能同时到达服务器。 而服务器在接收时并不是按相应顺序处理的。 服务器有多线程。
      

  18.   

    表单加一个 onsubmit事件 有个隐藏域值为1 提交的时候 判断隐藏域的值如果为1 提交然后把值改变为零,如果不是 就不提交
      

  19.   

    如果你的表单里有文本域  那就更简单
    onsubmit事件  
    判断 文本域是否有值 如果有 提交 然后清空文本域里的内容
    如果无就不提交然后弹出提示
      

  20.   

    还有别的方法比如用 js监控 key的值 在你提交表单以后js 就让键值为13(我记得回车好像是13)的键禁用...
      

  21.   

    我有两种方案:
    第一种:
    假如你提交的页面是a.php
    接收的页面是b.php
    a页面每载入一次赋值给$_SESSION['submit']=1;
    当把参数传递到b页面的时候赋值给$_SESSION['submit']=0;
    然后a页面判断当$_SESSION['submit']==1的时候再允许提交,这样在一个页面中他就不能重复提交啦,只有把a.php页面刷新一下才能提交第二种方案
    当参数提交到b.php页面的时候当提交的时候首选检测time()-$_SESSION['time']>3 如果大于的话就提示
    提交过快,请稍后再试,否则赋值给$_SESSION['time']=time();
      

  22.   

    這問題我也遇到過:我是用JS做的,方法和11樓差不多。
    但是11樓有個露點:
    就是有時候你沒有輸入或輸入錯誤時你會提示一個信息並阻止提交。
    就像註冊的時候:如果一個用戶的密碼不一致或郵箱錯誤等你需要阻止其提交。
    但是因為你已經提交過一次了所以幾時他該正確了還是不能提交。因為JS已經阻止了。
    所以就要在每個可能阻止提交的地方加入formReturn = true;
    e.g.
    var formReturn = true;//定義formReturn,可提交。
    funciton checkForm()
    {
      formReturn = false;
      if(a.value == ''){
       formReturn = true;
       return false;
      }
      return formReturn;
    }
      

  23.   

    测试了一下,没有发现楼主所说的问题!测试环境为win7+apache+php.  分别为get 和post提交表单。 重复点击及按回不放及多次回车。老大说绝无可能,也许是真的。当多次提交时,根本提交不上去,也许是自动放弃以前提交。在响应页放了sleep(5),仍然提交不上去。
      

  24.   

    PHP 给表单生成一个Hash码, 提交检验Hash码正确后unset之,看你程序好像用了SESSION,这个就很容易了。最好还要提交成功后返回个提示,若干秒后自动返回到诸如列表页之类的地方去。
      

  25.   

    通过写个js,就可以控制重复提交的,你可以google下。
      

  26.   

    做1个 _hash_ 存在 表单隐藏值. 判断一样就挑转其他页面。说他重复提交。