知识大全 解析php防止form重复提交的方法

Posted

篇首语:欲穷千里目,更上一层楼。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 解析php防止form重复提交的方法相关的知识,希望对你有一定的参考价值。

本篇文章是对php防止form重复提交的方法进行了详细的分析介绍 需要的朋友参考下  

  php 防止表单重复提交实例

复制代码 代码如下: <?php session_start(); $_SESSION[ fsess ]=($_SESSION[ fsess ])?$_SESSION[ fsess ]:time(); ?> <!DOCTYPE PUBLIC " //W C//DTD XHTML Transitional//EN" " < xmlns=" <head> <meta equiv="Content Type" content="text/; charset=gb " /> <title>防止表单重复提交</title> <SCRIPT language=Javascript type=text/javascript> <! //*****Javascript防重复提交************ var frm_submit=false; //纪录提交状态 function check_form(fobj) var error = ; var error_message = ""; if (fobj formtext value=="") error_message = error_message + "formtext 不能为空 n"; error = ; if (frm_submit==true) error_message = error_message + "这个表单已经提交 n请耐心等待服务器处理你的请求 nn"; error= ; if (error == ) 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></>"; exit; else echo "重复提交 退出!!!!<br/>n"; echo "</body></>"; 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> </>

   ************************************************************* 上面是完整例题 下面是在网站摘抄 仅供参考 ************************************************************* 用户提交表单时可能因为网速的原因 或者网页被恶意刷新 致使同一条记录重复插入到数据库中 这是一个比较棘手的问题 我们可以从客户端和服务器端一起着手 设法避免同一表单的重复提交

   .使用客户端脚本 提到客户端脚本 经常使用的是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 the_form submit();"> </form> 当用户单击“提交”按钮后 该按钮将变为灰色不可用状态 上面的例子中使用OnClick事件检测用户的提交状态 如果单击了“提交”按钮 该按钮立即置为失效状态 用户不能单击按钮再次提交 还有一个方法 也是利用JavaScript的功能 但是使用的是OnSubmit()方法 如果已经提交过一次表单 将立即弹出对话框 代码如下

复制代码 代码如下: <script language="javascript"> <! var submitcount= ; function submitOnce (form) if (submitcount == ) 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>

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

   .使用Cookie处理 使用Cookie记录表单提交的状态 根据其状态可以检查是否已经提交表单 请见下面的代码

复制代码 代码如下: <?php if(isset($_POST[ go ])) setcookie("tempcookie" "" time()+ ); header("Location:" $_SERVER[PHP_SELF]); exit(); if(isset($_COOKIE["tempcookie"])) setcookie("tempcookie" "" ); echo "您已经提交过表单"; ?>

   如果客户端禁止了Cookie 该方法将不起任何作用 这点请注意 关于Cookie的详细介绍 请参阅第 章“PHP会话管理”

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

复制代码 代码如下: <?php session_start(); //根据当前SESSION生成随机数 $code = mt_rand( ); $_SESSION[ code ] = $code; ?>

   在页面表单上将随机数作为隐藏值进行传递 代码如下 <input type=hidden name=originator value="<?=$code?>"> 在接收页面的PHP代码如下

复制代码 代码如下: <?php session_start(); if(isset($_POST[ originator ])) if($_POST[ originator ] == $_SESSION[ code ]) // 处理该表单的语句 省略 else echo ‘请不要刷新本页面或重复提交表单! ; ?>

   关于Session的内容 我们会在第 章“PHP会话管理”详细讨论 你可以直接查阅这一章 然后再返回本节继续阅读

   .使用header函数转向 除了上面的方法之外 还有一个更简单的方法 那就是当用户提交表单 服务器端处理后立即转向其他的页面 代码如下所示 if (isset($_POST[ action ]) && $_POST[ action ] == submitted ) //处理数据 如插入数据后 立即转向到其他页面 header( location:submits_success php ); 这样 即使用户使用刷新键 也不会导致表单的重复提交 因为已经转向新的页面 而这个页面脚本已经不理会任何提交的数据了

   表单过期的处理 在开发过程中 经常会出现表单出错而返回页面的时候填写的信息全部丢失的情况 为了支持页面回跳 可以通过以下两种方法实现 .使用header头设置缓存控制头Cache control header( Cache control: private must revalidate ); //支持页面回跳

cha138/Article/program/PHP/201311/20939

相关参考

知识大全 JSP、Struts避免Form重复提交的几种方案

JSP、Struts避免Form重复提交的几种方案  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 Web应用中避免Form重复提交的三种方案

Web应用中避免Form重复提交的三种方案  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!前两种是利

知识大全 一步步打造防止重复提交按钮

   首先说说防止重复提交按钮是啥东西   我们在访问有的网站输入表单完成以后单击提交按钮进行提交以后提交按钮就会变为灰色用户不能再单击第二

知识大全 struts利用Token防止用户重复提交

struts利用Token防止用户重复提交  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 asp.net防止页面刷新或后退引起重复提交

  项目中遇到刷新后重复的向数据库增加一条相同的记录引出错误归纳得出问题是  怎样防止页面刷新或后退引起重复提交数据的问题  其实防止刷新是开发中经常遇到的问题通常有多种方法来实现(下面是一些解决方案

知识大全 Struts2 国际化与防止刷新重复提交表单

Struts2国际化与防止刷新重复提交表单  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本实例

知识大全 解析PHP 使用curl提交json格式数据

解析PHP使用curl提交json格式数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!本篇文章是

知识大全 改善Form提交数据的UI 交互设计

改善Form提交数据的UI交互设计  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  数据一次校验&

知识大全 struts2中一个form多个提交的方法

  在很多Web应用中为了完成不同的工作一个HTMLform标签中可能有两个或多个submit按钮如下面的代码所示  <![if!supportLineBreakNewLine]>  &l

知识大全 [范例]怎样判断画布中有重复记录(Forms 6i)

[范例]怎样判断画布中有重复记录(Forms6i)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!