php 如何防止同个页面表单重复提交?

qq608 2010-03-25 04:43:48
本人是个初学者,有个问题要问下高手:我的表单和表单的提交做在同一个页面,但测试的时候,如果刷新页面,会发生重复提交页面的情况,如何解决这个问题?不要复制过来的,感激不尽!(请把代码直接填充进去,并做标志,谢谢高手)

<html>
<body>
<script language="javascript">
function change(){
document.getElementById("name1").value=document.getElementById("name").value;
document.getElementById("name2").value=document.getElementById("title").value;
document.getElementById("name3").value=document.getElementById("message").value;
document.getElementById("name4").value=document.getElementById("email").value;
}
//alert("提交成功!");
</script>
<TABLE align="=center" WIDTH="60%" border="=1"></a>
<tr><td align="center">留言板:</td><td></td><td align="=center">您提交的留言是:</td></tr>
<form action="zhang-test1.php" method="post">
<tr><td>用户名: <input type="text" name="name" /></td><td></td><td>用户名: <input type="text" name="name1"></td></tr>
<tr><td>标题:   <input type="text" name="title" /></td><td></td><td>标题:   <input type="text" name="name2" ></td></tr>
<tr><td>内容:   <input type="text" name="message" /></td><td></td><td>内容:   <input type="text" name="name3" ></td></tr>
<tr><td>e-mail: <input type="text" name="email" /></td><td></td><td>e-mail: <input type="text" name="name4" ></td></tr>
<tr><td align="center"><input type="button" onclick="change();" value="提交"/></td><td></td><td>时间:   <input type="text" name="name5" value=<?php
if(phpversion()>='5.1.0')//获得当前PC时间
{
date_default_timezone_set('Asia/Shanghai');
}
$time=date('Y-m-d H:i:s',time());
?>>  <input type="submit" value="提交数据库"/></td></tr>
</form>
</TABLE>
<?php
$name=$_POST["name"];
$title=$_POST["title"];
$message=$_POST["message"];
$email=$_POST["email"];
$conn2=mysql_connect("localhost","root","") or die("无法连接数据库");
mysql_select_db("shopnc",$conn2) or die("无法连接数据库shopnc");
$sql2="insert into user_message(name,title,message,email,time) values ('$name','$title','$message','$email','$time')";
mysql_query($sql2)or die(mysql_error());
?>
</body>
</html>
...全文
633 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenshuliang 2010-03-26
  • 打赏
  • 举报
回复
在Google搜 "php token"
qq608 2010-03-26
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 yunfeifan 的回复:]
一个页面和两个页面无所谓,逻辑是一样的。
表单页面-》提交页面,只不过你现在写到一个页面里边了

在表单页面增加一个session并赋值,在提交的页面中,获取此session的值进行判断,如果此session有值则提交到数据库,并同时删除此session;如果没有值则返回到提交的页面
[/Quote]

之前我也有做过设一个session值,后面提交后判断,但是还是不行,奇怪,能帮我看下我的代码吗?方便的话,帮我修改下吧?
程序猿之殇 2010-03-26
  • 打赏
  • 举报
回复
页面随机生成会话串,
页面提交成功后,
清除会话串.

服务器端检查会话串.
plzzz 2010-03-25
  • 打赏
  • 举报
回复
重复提交表单 弄 验证码就好了
yunfeifan 2010-03-25
  • 打赏
  • 举报
回复
一个页面和两个页面无所谓,逻辑是一样的。
表单页面-》提交页面,只不过你现在写到一个页面里边了

在表单页面增加一个session并赋值,在提交的页面中,获取此session的值进行判断,如果此session有值则提交到数据库,并同时删除此session;如果没有值则返回到提交的页面
骄傲青蛙 2010-03-25
  • 打赏
  • 举报
回复
1. 提交成功后可以用js清除提交内容, 或者进行页面跳转


2. 用会话session,cookie之类记录提交次数,或时间。
骄傲青蛙 2010-03-25
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sciolist 的回复:]

引用楼主 qq608 的回复:
但测试的时候,如果刷新页面,会发生重复提交页面的情况


难道你把提交代码写到 page load 事件里面去了???
[/Quote]

这可不是asp.net噢。。
PIGer920 2010-03-25
  • 打赏
  • 举报
回复
我看了下你代码 感觉你的问题和你代码有点出入
这么说吧 你这个页面一打开就会往db里insert。这是你需要的吗?
这个问题搞明白了,再说重复提交的问题比较好
PIGer920 2010-03-25
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 qq608 的回复:]
楼上的意思是叫我分两个页面来做吗?
[/Quote]
不是
是想让你把输入部分和提交后的处理部分分一下,清楚一点。
我猜你这个 一个是通过get方式打开的资料输入页面 一个是通过post打开的数据处理页面。写在一个一个php文件当然可以,但是你最好知道在打开资料输入页面的时候你这段代码哪些是需要执行的,而点击提交按钮后,又是哪些断码是需要执行的。
我觉得的你有点乱。搞不清代码是怎么执行的话,加段正常的代码都有可能让你出bug
qq608 2010-03-25
  • 打赏
  • 举报
回复
楼上的意思是叫我分两个页面来做吗?
PIGer920 2010-03-25
  • 打赏
  • 举报
回复
好像真是的
lz用下面代码把提交和处理分以下

if ($_SERVER["REQUEST_METHOD"]=="POST"){}
if ($_SERVER["REQUEST_METHOD"]=="GET"){}
qq608 2010-03-25
  • 打赏
  • 举报
回复
烦请高手帮我看下我粘贴的代码有何错误?直接帮我修改下吧?谢谢啊
sciolist 2010-03-25
  • 打赏
  • 举报
回复
[Quote=引用楼主 qq608 的回复:]
但测试的时候,如果刷新页面,会发生重复提交页面的情况
[/Quote]

难道你把提交代码写到 page load 事件里面去了???
PIGer920 2010-03-25
  • 打赏
  • 举报
回复
那你debug啊 看看哪里的逻辑有问题
qq608 2010-03-25
  • 打赏
  • 举报
回复
本来是可以提交表单数据到DB的,但是一加了那段代码就没办法提交数据到DB,这是为什么?
PIGer920 2010-03-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qq608 的回复:]
我也参考了网上所说的解决方法(设session值/cookie等),但是数据没办法提交到mysql数据库里
[/Quote]
什么数据没办法提交到db?
数据无法给db和你防止重复提交本身没有任何关系的。
qq608 2010-03-25
  • 打赏
  • 举报
回复
我也参考了网上所说的解决方法(设session值/cookie等),但是数据没办法提交到mysql数据库里
PIGer920 2010-03-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qq608 的回复:]
做成A,B两个页面,我没试过,网上大多也都是这样说法;但现在能否帮我解决的是在同一个页面,如何避免重复提交表单的问题?
[/Quote]
一回事啊
你虽然把提交和提交后的处理写在一个文件中,但是肯定有分别的啊。
必然分成了一个提交画面和一个处理提交后的画面啊,你把处理提交的代码部分理解为b页面即可
qq608 2010-03-25
  • 打赏
  • 举报
回复
做成A,B两个页面,我没试过,网上大多也都是这样说法;但现在能否帮我解决的是在同一个页面,如何避免重复提交表单的问题?
PIGer920 2010-03-25
  • 打赏
  • 举报
回复
我做过的一个思想是:

在提交页面A里提交一个随机数给下一页面B,B收到这个数后进行判断,如果这个随机数已经被保存过了,那么说明是重复提交。如果没有被保存过,那就是新提交,把这个随机数保存起来。
把A,B写成同一个文件是一回事。

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧