比较好的办法。
前台按钮submit后disabled,提交后马上header到一个确认页面,不要停留在原页面

解决方案 »

  1.   

    禁止二次提交时间间隔为十秒或更长,表单上提交按纽
    <input type=submit name=submit value="提交" onClick="this.disabled=true; document.myform.submit();">
    记录用户最后一次提交内容,再次提交时比对
      

  2.   

    我觉得submit键是否disable不是关键,问题出在浏览器,刷新一次它就提交post一次,比较烦
    应该只提交第一次,下一次刷新就get页 即可。
    现在我在研究如何防止刷新提交 又能返回,文本筐的内容还保留,用到网页的cache但是session更新又不及时,谁有 http信息头的含义文档?
    Cache-Control: private, must-revalidate, max-age=1, post-check=1比如这个是什么含义
      

  3.   

    跳转亚,提交好之后不要停在被提交的页面,跳转到一个显示成功或者失败的页面如果不愿意跳转,用
    $_SERVER["REQUEST_METHOD"]
    来检测一下请求方式,第一次可以提交,之后不可
      

  4.   

    可以在程序中加个判断,如果两次提交的内容相同就给他报个错!
    另外,象"cloudchen(陈系上.net) "说的也可以啊!
      

  5.   

    重复提交的例子是
    1.php<FORM METHOD=POST ACTION="2.php">
    <INPUT TYPE="text" NAME="a">
    <INPUT TYPE="submit">
    </FORM>2.php<?
    echo $_POST['a'];
    ?>提交好以后刷新2.php则会出现一个对话框问你重试还是取消,重试会重新提交一次,取消会显示过期。如果2.php有操作数据库的语句那么刷新重试可能会造成记录的重复。
      

  6.   

    为什么要保存原来的数据?坚持要的话用cookie不就可以了,有什么意思。
    2.php里面操作完数据库后,header到3.php就不会出现重复提交了。好累啊,一个帖子里说了n遍
      

  7.   

    使用验证码
    要求在页面间传递一个验证字符串,
    在生成页面的时候 随机产生一个字符串,
    做为一个必须参数在所有连接中传递。同时将这个字符串保存在session中。点连接或者表单进入页面后,判断session中的验证码是不是与用户提交的相同,如果相同,则处理,不相同则认为是重复刷新。
    在处理完成后将重新生成一个验证码,用于新页面的生成
      

  8.   

    to: cloudchen(陈系上.net) 
       我这个帖子不是写给高手看的,因为看到许多人的确碰到这个问题才写这个帖子
       觉得累就去休息
      

  9.   

    1、“取消”不会出现“过期”(ie5.5)
    2、既然有提示“对话框”仍需“重试”这反映的是用户的一种需求
    3、传统的做法是(并不是php才有此现象)
    提交验证不成功,使用
    <script>
    history.go(-1);
    </script>
    回退到表单页
    提交验证成功,使用
    $url = $HTTP_REFERER;
    $time = 0;
    header("Refresh: $time; URL=$url");
    echo "<a href='$url'>操作成功!{$time}秒后返回</a>";并可有选择的使用
    <script language="JavaScript"> 
    <!-- 
     javascript:window.history.forward(1); 
    //--> 
    </script> 
    以阻止“后退”既然已成功的提交,回退到表单再行提交是没有意义的,也是不允许的(从处理流程上讲)。实际上在ie6上有一种现象可能你没有注意到:
    表单提交后,并不需要“刷新”或重新提交。入库的内容就已经是两条了!
      

  10.   

    ie6提交两次我也碰到过,大致是用图片代替submit时,图片上有个submit(),这样会提交两次,如果只是submit钮我没碰到过提交两次的情况。现在整理一下:
    方法基本上前面几位说得差不多
    接收的页即2.php分为两部分,一部分处理提交过来的变量,一部分显示页面
    处理变量完毕用header("location:".$_SERVER['PHP_SELF'])跳转到自身页
    本部分要做判断,如果没有post的变量就跳过。当然也可以跳到别的页面。
    跳到别的页面返回时会有问题,建议做在一个php文件里。
    如果上页穿过来得变量不符合要求可以强制返回
    <script>
    history.go(-1);
    </script>只说了一下大体思路,也许高手们不会遇到此类问题,可是并不是每个人都是高手。
    2.php的流程
    if(isset($_POST))
    {  接收变量
      if(变量不符合要求)
         <script>history.go(-1);</script>
      else
        操作数据
         ...
        if(操作完成)
         header("location:".$_SERVER['PHP_SELF']);
    }
    <script language="JavaScript"> 
    <!-- 
     javascript:window.history.forward(1); 
    //--> 
    </script>显示注册成功等信息     
      

  11.   

    说一下数据保持吧,提交过去后再返回的保持表单数据最好用程序控制,而不要依赖浏览器
    可以做个数据保持的类:进入提交页:
    $datas = new StoreDatas();
    $datas->setPostDatas($_POST,array('username',',password',',content'));
    出错返回
    <input type=text name=username value="<?=$datas->getpostDatas('username');?>">
    具体功能实现可以用session,post方法
      

  12.   

    没这么复杂吧,,,
    用session记录一下, 然后自己控制一下就行了