zoukankan      html  css  js  c++  java
  • php 防止表单重复提交

    用户提交表单时可能因为网速的原因,或者网页被恶意刷新,致使同一条记录重复插入到数据库中,这是一个比较棘手的问题。我们可以从客户端和服务器端一起着手,设法避免同一表单的重复提交。

    1.使用客户端脚本

    [php] view plaincopy
     
    1. <form method="post" name="register" action="test.php" enctype="multipart/form-data">  
    2. <input name="text" type="text" id="text" />  
    3. <input name="cont" value="提交" type="button" onClick="document.register.cont.value='正在提交,请等待...';document.register.cont.disabled=true;document.the_form.submit();">  
    4. </form>  


    当用户单击“提交”按钮后,该按钮将变为灰色不可用状态
    上面的例子中使用OnClick事件检测用户的提交状态,如果单击了“提交”按钮,该按钮立即置为失效状态,用户不能单击按钮再次提交。

    还有一个方法,也是利用JavaScript的功能,但是使用的是OnSubmit()方法,如果已经提交过一次表单,将立即弹出对话框,代码如下:

    [php] view plaincopy
     
    1. <script language="javascript">  
    2. var submitcount=0;  
    3. function submitOnce (form){  
    4.     if (submitcount == 0){  
    5.          submitcount++;  
    6.          return true;  
    7.     } else{  
    8.         alert("正在操作,请不要重复提交,谢谢!");  
    9.         return false;  
    10.     }  
    11. }  
    12. </script>  
    13. <form name="the_form" method="post" action="" onSubmit="return submitOnce(this)">  
    14. <input name="text" type="text" id="text" />  
    15. <input name="cont" value="提交" type="submit">  
    16. </form>  




    在上例中,如果用户已经单击“提交”按钮,该脚本会自动记录当前的状态,并将submitcount变量自加1,当用户试图再次提交时,脚本判断submitcount变量值非零,提示用户已经提交,从而避免重复提交表单。


    2. 使用session(这个与JSP处理方法是一样的)

    利用PHP的Session功能,也能避免重复提交表单。Session保存在服务器端,在PHP运行过程中可以改变Session变量,下次访问这个变量时,得到的是新赋的值,所以,可以用一个Session变量记录表单提交的值,如果不匹配,则认为是用户在重复提交。
    A页面的代码:

    [php] view plaincopy
     
    1. <?php  
    2. session_start();                //根据当前SESSION生成随机数  
    3. $code = mt_rand(0,1000000);  
    4. $_SESSION['code'] = $code;      //将此随机数暂存入到session  
    5. ?>  
    6. <form id="form1" name="form1" method="post" action="t2.php">  
    7.     <p>说明 <input type="text" name="titile" />  
    8.         <input type="hidden" name="originator" value="<?php echo $code;?>"></p>  
    9.     <p><input type="submit" name="Submit" value="提交" /></p>  
    10. </form>  



    B页面:

    [php] view plaincopy
     
      1. <?php  
      2. session_start();  
      3. if(isset($_POST['originator'])) {  
      4.     if($_POST['originator'] == $_SESSION['code']){  
      5.         echo "ok";  
      6.         unset($_SESSION["code"]);               //将其清除掉此时再按F5则无效  
      7.     }else{  
      8.         echo "请不要刷新本页面或重复提交表单";  
      9.     }  
      10. }?>  
  • 相关阅读:
    js弹出文字
    javascript函数的使用
    php笔记-双引号内的变量会被解释,而单引号内的变量则原样输出
    单独编译源码树下的模块
    内核模块开机自动加载和黑名单
    [转]Linux中设置服务自启动的三种方式
    rpm打包
    APC to USB
    [转]创建一个虚拟盘
    编译打印输出重定向
  • 原文地址:https://www.cnblogs.com/rrsina/p/4683586.html
Copyright © 2011-2022 走看看