设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 站长学院 > PHP教程 > 正文

解析php防止form重复提交的方法

发布时间:2022-07-22 12:19 所属栏目:121 来源:互联网
导读:本篇文章是对php防止form重复提交的方法进行了详细的分析介绍,需要的朋友参考下 php 防止表单重复提交实例: 复制代码 代码如下: ?php session_start(); $_SESSION[fsess]=($_SESSION[fsess])?$_SESSION[fsess]:time(); ? !DOCTYPE html PUBLIC -//W3C//DTD
  本篇文章是对php防止form重复提交的方法进行了详细的分析介绍,需要的朋友参考下
 
  php 防止表单重复提交实例:
 
  复制代码 代码如下:
 
  <?php
 
  session_start();
 
  $_SESSION['fsess']=($_SESSION['fsess'])?$_SESSION['fsess']:time();
 
  ?>
 
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
  <html xmlns="http://www.w3.org/1999/xhtml">
 
  <head>
 
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 
  <title>防止表单重复提交</title>
 
  <SCRIPT language=Javascript type=text/javascript>
 
  <!--
 
  //*****Javascript防重复提交************
 
  var frm_submit=false; //纪录提交状态
 
  function check_form(fobj) {
 
  var error = 0;
 
  var error_message = "";
 
  if (fobj.formtext.value=="")
 
  {
 
  error_message = error_message + "formtext 不能为空./n";
 
  error = 1;
 
  }
 
  if (frm_submit==true) {
 
  error_message = error_message + "这个表单已经提交./n请耐心等待服务器处理你的请求./n/n";
 
  error=1;
 
  }
 
  if (error == 1) {
 
  alert(error_message);
 
  return false;
 
  } else {
 
  frm_submit=true; //改变提交状态
 
  return true;
 
  }
 
  }
 
  -->
 
  </script>
 
  </head>
 
  <body>
 
  Javascript和服务器端 双重防止表单重复提交演示
 
  <br/>
 
  <br/>
 
  现在时间:<?php echo date("Y-m-d H:i:s"); ?>
 
  <br/>
 
  <br/>
 
  <?php
 
  if(@$_POST["faction"]=="submit"||@$_GET["faction"]=="submit"){
 
  //提交处理
 
  //*****服务器端防重复提交*******************
 
  //如果POST传来的表单生成时间与SESSION保存的表单生成时间
 
  //相同;为正常提交
 
  //不相同;为重复提交
 
  if($_SESSION["fsess"]==$_POST["fpsess"]){
 
  $_SESSION["fsess"]=time();
 
  echo "提交内容:<br/>/n";
 
  echo $_POST["fpsess"]."<br/>/n";;
 
  echo $_POST["formtext"];
 
  echo "</body></html>";
 
  exit;
 
  } else {
 
  echo "重复提交,退出!!!!<br/>/n";
 
  echo "</body></html>";
 
  exit;
 
  }
 
  }
 
  //$_SESSION["fsess"]=time();
 
  ?>
 
  <form name="f_info" action="" method="post" onSubmit="return check_form(this);">
 
  <input name="fpsess" type="hidden" value="<?php echo $_SESSION["fsess"]; ?>" />
 
  <!-- 保存表单生成时间 -->
 
  <input name="faction" type="hidden" value="submit" />
 
  <input name="formtext" id="formtext" type="text" value="" />
 
  <input type="submit" value="提交" />
 
  <input type="reset" value="重置" />
 
  </form>
 
  </body>
 
  </html>
 
  *************************************************************
 
  上面是完整例题,下面是在网站摘抄,仅供参考
 
  *************************************************************
 
  用户提交表单时可能因为网速的原因,或者网页被恶意刷新,致使同一条记录重复插入到数据库中,这是一个比较棘手的问题。我们可以从客户端和服务器端一起着手,设法避免同一表单的重复提交。
 
  1.使用客户端脚本
 
  提到客户端脚本,经常使用的是JavaScript进行常规输入验证。在下面的例子中,我们使用它处理表单的重复提交问题,请看下面的代码:
 
  <form method="post" name="register" action="test.php" enctype="multipart/form-data">
 
  <input name="text" type="text" id="text" />
 
  <input name="cont" value="提交" type="button" onClick="document.register.cont.value='正在提交,请等待...'; document.register.cont.disabled=true;document.the_form.submit();">
 
  </form>
 
  当用户单击“提交”按钮后,该按钮将变为灰色不可用状态。
 
  上面的例子中使用OnClick事件检测用户的提交状态,如果单击了“提交”按钮,该按钮立即置为失效状态,用户不能单击按钮再次提交。
 
  还有一个方法,也是利用JavaScript的功能,但是使用的是OnSubmit()方法,如果已经提交过一次表单,将立即弹出对话框,代码如下:
 
  复制代码 代码如下:
 
  <script language="javascript">
 
  <!--
 
  var submitcount=0;
 
  function submitOnce (form){
 
  if (submitcount == 0){
 
  submitcount++;
 
  return true;
 
  } else{
 
  alert("正在操作,请不要重复提交,谢谢!");
 
  return false;
 
  }
 
  }
 
  //-->
 
  </script>
 
  <form name="the_form" method="post" action="" onSubmit="return submitOnce(this)">
 
  <input name="text" type="text" id="text" />
 
  <input name="cont" value="提交" type="submit">
 
  </form>。
 

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读