防止刷新重复提交的两种方法 比较好的办法。前台按钮submit后disabled,提交后马上header到一个确认页面,不要停留在原页面 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 禁止二次提交时间间隔为十秒或更长,表单上提交按纽<input type=submit name=submit value="提交" onClick="this.disabled=true; document.myform.submit();">记录用户最后一次提交内容,再次提交时比对 我觉得submit键是否disable不是关键,问题出在浏览器,刷新一次它就提交post一次,比较烦应该只提交第一次,下一次刷新就get页 即可。现在我在研究如何防止刷新提交 又能返回,文本筐的内容还保留,用到网页的cache但是session更新又不及时,谁有 http信息头的含义文档?Cache-Control: private, must-revalidate, max-age=1, post-check=1比如这个是什么含义 跳转亚,提交好之后不要停在被提交的页面,跳转到一个显示成功或者失败的页面如果不愿意跳转,用$_SERVER["REQUEST_METHOD"]来检测一下请求方式,第一次可以提交,之后不可 可以在程序中加个判断,如果两次提交的内容相同就给他报个错!另外,象"cloudchen(陈系上.net) "说的也可以啊! 重复提交的例子是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有操作数据库的语句那么刷新重试可能会造成记录的重复。 为什么要保存原来的数据?坚持要的话用cookie不就可以了,有什么意思。2.php里面操作完数据库后,header到3.php就不会出现重复提交了。好累啊,一个帖子里说了n遍 使用验证码要求在页面间传递一个验证字符串,在生成页面的时候 随机产生一个字符串,做为一个必须参数在所有连接中传递。同时将这个字符串保存在session中。点连接或者表单进入页面后,判断session中的验证码是不是与用户提交的相同,如果相同,则处理,不相同则认为是重复刷新。在处理完成后将重新生成一个验证码,用于新页面的生成 to: cloudchen(陈系上.net) 我这个帖子不是写给高手看的,因为看到许多人的确碰到这个问题才写这个帖子 觉得累就去休息 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上有一种现象可能你没有注意到:表单提交后,并不需要“刷新”或重新提交。入库的内容就已经是两条了! 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>显示注册成功等信息 说一下数据保持吧,提交过去后再返回的保持表单数据最好用程序控制,而不要依赖浏览器可以做个数据保持的类:进入提交页:$datas = new StoreDatas();$datas->setPostDatas($_POST,array('username',',password',',content'));出错返回<input type=text name=username value="<?=$datas->getpostDatas('username');?>">具体功能实现可以用session,post方法 没这么复杂吧,,,用session记录一下, 然后自己控制一下就行了 求高手帮我解决testlink二次开发遇到的问题(如何修改测试执行结果输入框为FCKEditor编辑框?) javascript中怎么调用php方法 输入问题,问题答案立即呈现在您眼前! 求入门基础资料 摘取字符串 急!为什么在text控件中不能显示空格之后的内容?在线等 为什么我插入不了数据? mysql的错误在那? 请问各位大哥,网上有没有好的PHP教程? 求教!!1234324 在PHP中,当格式化输出浮点数时遇到的问题 怎样使用html模板?
<input type=submit name=submit value="提交" onClick="this.disabled=true; document.myform.submit();">
记录用户最后一次提交内容,再次提交时比对
应该只提交第一次,下一次刷新就get页 即可。
现在我在研究如何防止刷新提交 又能返回,文本筐的内容还保留,用到网页的cache但是session更新又不及时,谁有 http信息头的含义文档?
Cache-Control: private, must-revalidate, max-age=1, post-check=1比如这个是什么含义
$_SERVER["REQUEST_METHOD"]
来检测一下请求方式,第一次可以提交,之后不可
另外,象"cloudchen(陈系上.net) "说的也可以啊!
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有操作数据库的语句那么刷新重试可能会造成记录的重复。
2.php里面操作完数据库后,header到3.php就不会出现重复提交了。好累啊,一个帖子里说了n遍
要求在页面间传递一个验证字符串,
在生成页面的时候 随机产生一个字符串,
做为一个必须参数在所有连接中传递。同时将这个字符串保存在session中。点连接或者表单进入页面后,判断session中的验证码是不是与用户提交的相同,如果相同,则处理,不相同则认为是重复刷新。
在处理完成后将重新生成一个验证码,用于新页面的生成
我这个帖子不是写给高手看的,因为看到许多人的确碰到这个问题才写这个帖子
觉得累就去休息
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上有一种现象可能你没有注意到:
表单提交后,并不需要“刷新”或重新提交。入库的内容就已经是两条了!
方法基本上前面几位说得差不多
接收的页即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>显示注册成功等信息
可以做个数据保持的类:进入提交页:
$datas = new StoreDatas();
$datas->setPostDatas($_POST,array('username',',password',',content'));
出错返回
<input type=text name=username value="<?=$datas->getpostDatas('username');?>">
具体功能实现可以用session,post方法
用session记录一下, 然后自己控制一下就行了