关于用POST方法提交,如何防止刷新时重复提交数据的问题

时间:2020-12-19 17:00:56
if(isset($_POST["sel"]){
$a=$_POST["sel"];
unset($_POST["sel"];
echo "<script language='javascript'>window.location.href(?ok=ok)</script>";
}

......

<form name="test" method="POST" action="">
<input id="yes" type="submit" name="sel" value="aaa"></li>
<input id="no" type="submit" name="sel" value="bbb"></li>
</form>

这是显示的代码的顺序结构

我在提交后.当接收到这个数据了之后就算是ok了.然后注销掉$_POST["sel"]这个量.同时用javascript再次跳转到本页面来(我想这样就不会存在$_POST["sel"]这个数据了)..但是当所有执行完了之后我再刷新..它还是提示我"需要使用已输入的信息,返回此页可能需要重复已进行的所有操作.是否要继续操作?"

我想在刷新的时候不要出现这个提示..也就是彻底把POST数据注销掉..请问怎么做?

我在百度的时候查到这么几个方法..一个说是<meta>中设置不保留缓存.好像是什么"no-cache"..但是没有用..
再一个是说用到Post Redirect Get(PRG)..看了原理但是不知道怎么用..好像是用到什么HTTP 303跳转..但不懂..还请高手指教~

32 个解决方案

#1


这是浏览器默认的行为把。除非你把电脑砸了。

#2


js跳转到当前页面,但你写的href怎么这么怪呢?

#3


这个问题快具备加入 月经帖的条件了.

#4


引用 3 楼  的回复:
这个问题快具备加入 月经帖的条件了.


求链接~~~

#5


引用 2 楼  的回复:
js跳转到当前页面,但你写的href怎么这么怪呢?


这个是代表本页面的意思吧...直接提交变量

#6


赶紧掌握 ajax post 方法就什么都解决了 .你这种方式post 迟早也会想到用ajax post 的.

#7


引用 6 楼  的回复:
赶紧掌握 ajax post 方法就什么都解决了 .你这种方式post 迟早也会想到用ajax post 的.


还没学到Ajax.....悲剧...能不能先给个暂时的可行方案?

#8


把接收和发送表单数据的页面分开来就可以了

#9


引用 7 楼  的回复:
引用 6 楼  的回复:
赶紧掌握 ajax post 方法就什么都解决了 .你这种方式post 迟早也会想到用ajax post 的.


还没学到Ajax.....悲剧...能不能先给个暂时的可行方案?


jquery post

你搜索一下google  也就是几句代码的事情 绝对不耽误你超过30分钟

#10


引用 8 楼  的回复:
把接收和发送表单数据的页面分开来就可以了


但是就是要求在一个页面里完成..

#11


引用 9 楼  的回复:
引用 7 楼 的回复:

引用 6 楼 的回复:
赶紧掌握 ajax post 方法就什么都解决了 .你这种方式post 迟早也会想到用ajax post 的.


还没学到Ajax.....悲剧...能不能先给个暂时的可行方案?


jquery post

你搜索一下google 也就是几句代码的事情 绝对不耽误你超过30分钟


好的..谢谢妞妞

#12


你只需破坏掉表单页就可以了

#13


引用 10 楼  的回复:
引用 8 楼  的回复:
把接收和发送表单数据的页面分开来就可以了


但是就是要求在一个页面里完成..


这是作业嘛?非要在一个页面里完成?

#14


管他的, 重复就重复了吧, 反正又不是重要的东西.

重要的东西保准也不会因为表单重复提交而出现问题.

CSDN发帖都"N连", 浮云.

#15


引用 12 楼  的回复:
你只需破坏掉表单页就可以了


怎样破坏?求指教.

#16


引用 13 楼  的回复:
引用 10 楼 的回复:

引用 8 楼 的回复:
把接收和发送表单数据的页面分开来就可以了


但是就是要求在一个页面里完成..


这是作业嘛?非要在一个页面里完成?


不是啊..这只是我的一个想法..我就是想实现它而已.

#17


引用 13 楼  的回复:
引用 10 楼 的回复:

引用 8 楼 的回复:
把接收和发送表单数据的页面分开来就可以了


但是就是要求在一个页面里完成..


这是作业嘛?非要在一个页面里完成?


要用jquery还要额外安装它的库?

#18


当你第一次向某个页面提交了表单数据后,高级点的浏览器就都会记住,当你想刷新该页面时都会询问你是否想要再提交一次表单。不清楚如何阻止这样的善意提示,但你完全可以分开来处,处理完后跳转回去或怎样,这样没事就不需要再访问该页面了

#19


搜索“php 表单重复提交”,可以看到 

#20


引用 9 楼  的回复:
引用 7 楼 的回复:

引用 6 楼 的回复:
赶紧掌握 ajax post 方法就什么都解决了 .你这种方式post 迟早也会想到用ajax post 的.


还没学到Ajax.....悲剧...能不能先给个暂时的可行方案?


jquery post

你搜索一下google 也就是几句代码的事情 绝对不耽误你超过30分钟


妞妞..我已经弄了4个多小时了...还是没弄出来..我头都要大了...我是完全没有学这个东西啊..你直接给我个暂时性能用的算了吧..我后面再来学..我现在就想把它弄出来啊...

<script src="\jquery\lib\jquery.js" type="text/javascript"></script>
<script type="text/javascript">

</script>

......

<form name="test" method="POST" action="">
<ul id="nav">
<li>Correct?&nbsp</li>
<li><input id="yes" type="submit" name="sel" value="√"></li>
<li><input id="no" type="submit" name="sel" value="×"></li>
</ul>
</form>

#21


本帖最后由 PhpNewnew 于 2012-05-28 23:09:44 编辑
在看 舌尖上的中国...好吧,稍等一下


<?php
if(!empty($_POST['name'])){
    //处理POST数据
    echo 'aaaaa';
    exit;
}
?>
<html>
<head>
    <!--载入jquery库-->
    <script type="text/javascript" src="Js/jquery-1.7.2.min.js"></script>
</head>
<body>
<input id="yes" type="submit" name="sel1" value="aaa"></li>
<input id="no" type="submit" name="sel2" value="bbb"></li>
<input type="button" name="b_submit" id="b_submit" onclick="j_post();">

<script type="text/javascript">
    function j_post(){
        var txt=$("#yes").val();
        var txt2=$("#no").val();
        $.post("b.php", { name:txt, time:txt2},
            function(data){
                alert("Data Loaded: " + data);
            });
    }
</script>

</body>
</html>

#22


把数据处理完之后unset($_POST)就可以了

#23


用get

#24


 1 表单提交后跳到另外一个页面
 2 像 @PhpNewnew 说的,使用AJAX提交
   使用AJAX POST的时候,要注意提交按钮的“锁定”。

 3 给表单赋上一个唯一的uniqid,提交表单的时候检查此值。

 4 或者使用验证码(实际上和方法3原理一样)

#25


引用 24 楼  的回复:
 1 表单提交后跳到另外一个页面
 2 像 @PhpNewnew 说的,使用AJAX提交
   使用AJAX POST的时候,要注意提交按钮的“锁定”。

 3 给表单赋上一个唯一的uniqid,提交表单的时候检查此值。

 4 或者使用验证码(实际上和方法3原理一样)


基本全了, 3和4都是比较实用的.

#26


点击后锁定页面,成功跳转,否则页面不能动

#27


点击后锁定页面,成功跳转,否则页面不能动

#28


嗨 这种常规的问题 还这就纠结 
1.先是页面显示上控制 至少让人不能再点 
2.类似拦截器或者过滤器机制,提交表单中生成个唯一ID,第一次提交临时存起来,以后每次判断一下不就结了

#29


引用 28 楼  的回复:
嗨 这种常规的问题 还这就纠结 
1.先是页面显示上控制 至少让人不能再点 
2.类似拦截器或者过滤器机制,提交表单中生成个唯一ID,第一次提交临时存起来,以后每次判断一下不就结了


是"刷新"不是"点击提交"

#30


用Header Redirection应该可以吧?header('Location:your page');。这个功能和那个location.href=your page差不多,我用这个是可以工作的。

#31


展示表单页面的时候, 设定一个cookie =1 提交1次就+1


这样只需要判断cookie的值就可以了

#32


给form添加一个验证码就行了
<input type="hidden" value="xxxxxxxx" name="code" />
xxxxxxx值为生成页面的时候在服务器端生成,可存入session保存,
提交的时候这么处理:
$code = $_POST['code'];
if (isset($_SESSION['code']) && ($_SESSION['code'] == $code)) {
    unset($_SESSION['code']);
    do others
} else {
    // 无效提交
}

#1


这是浏览器默认的行为把。除非你把电脑砸了。

#2


js跳转到当前页面,但你写的href怎么这么怪呢?

#3


这个问题快具备加入 月经帖的条件了.

#4


引用 3 楼  的回复:
这个问题快具备加入 月经帖的条件了.


求链接~~~

#5


引用 2 楼  的回复:
js跳转到当前页面,但你写的href怎么这么怪呢?


这个是代表本页面的意思吧...直接提交变量

#6


赶紧掌握 ajax post 方法就什么都解决了 .你这种方式post 迟早也会想到用ajax post 的.

#7


引用 6 楼  的回复:
赶紧掌握 ajax post 方法就什么都解决了 .你这种方式post 迟早也会想到用ajax post 的.


还没学到Ajax.....悲剧...能不能先给个暂时的可行方案?

#8


把接收和发送表单数据的页面分开来就可以了

#9


引用 7 楼  的回复:
引用 6 楼  的回复:
赶紧掌握 ajax post 方法就什么都解决了 .你这种方式post 迟早也会想到用ajax post 的.


还没学到Ajax.....悲剧...能不能先给个暂时的可行方案?


jquery post

你搜索一下google  也就是几句代码的事情 绝对不耽误你超过30分钟

#10


引用 8 楼  的回复:
把接收和发送表单数据的页面分开来就可以了


但是就是要求在一个页面里完成..

#11


引用 9 楼  的回复:
引用 7 楼 的回复:

引用 6 楼 的回复:
赶紧掌握 ajax post 方法就什么都解决了 .你这种方式post 迟早也会想到用ajax post 的.


还没学到Ajax.....悲剧...能不能先给个暂时的可行方案?


jquery post

你搜索一下google 也就是几句代码的事情 绝对不耽误你超过30分钟


好的..谢谢妞妞

#12


你只需破坏掉表单页就可以了

#13


引用 10 楼  的回复:
引用 8 楼  的回复:
把接收和发送表单数据的页面分开来就可以了


但是就是要求在一个页面里完成..


这是作业嘛?非要在一个页面里完成?

#14


管他的, 重复就重复了吧, 反正又不是重要的东西.

重要的东西保准也不会因为表单重复提交而出现问题.

CSDN发帖都"N连", 浮云.

#15


引用 12 楼  的回复:
你只需破坏掉表单页就可以了


怎样破坏?求指教.

#16


引用 13 楼  的回复:
引用 10 楼 的回复:

引用 8 楼 的回复:
把接收和发送表单数据的页面分开来就可以了


但是就是要求在一个页面里完成..


这是作业嘛?非要在一个页面里完成?


不是啊..这只是我的一个想法..我就是想实现它而已.

#17


引用 13 楼  的回复:
引用 10 楼 的回复:

引用 8 楼 的回复:
把接收和发送表单数据的页面分开来就可以了


但是就是要求在一个页面里完成..


这是作业嘛?非要在一个页面里完成?


要用jquery还要额外安装它的库?

#18


当你第一次向某个页面提交了表单数据后,高级点的浏览器就都会记住,当你想刷新该页面时都会询问你是否想要再提交一次表单。不清楚如何阻止这样的善意提示,但你完全可以分开来处,处理完后跳转回去或怎样,这样没事就不需要再访问该页面了

#19


搜索“php 表单重复提交”,可以看到 

#20


引用 9 楼  的回复:
引用 7 楼 的回复:

引用 6 楼 的回复:
赶紧掌握 ajax post 方法就什么都解决了 .你这种方式post 迟早也会想到用ajax post 的.


还没学到Ajax.....悲剧...能不能先给个暂时的可行方案?


jquery post

你搜索一下google 也就是几句代码的事情 绝对不耽误你超过30分钟


妞妞..我已经弄了4个多小时了...还是没弄出来..我头都要大了...我是完全没有学这个东西啊..你直接给我个暂时性能用的算了吧..我后面再来学..我现在就想把它弄出来啊...

<script src="\jquery\lib\jquery.js" type="text/javascript"></script>
<script type="text/javascript">

</script>

......

<form name="test" method="POST" action="">
<ul id="nav">
<li>Correct?&nbsp</li>
<li><input id="yes" type="submit" name="sel" value="√"></li>
<li><input id="no" type="submit" name="sel" value="×"></li>
</ul>
</form>

#21


本帖最后由 PhpNewnew 于 2012-05-28 23:09:44 编辑
在看 舌尖上的中国...好吧,稍等一下


<?php
if(!empty($_POST['name'])){
    //处理POST数据
    echo 'aaaaa';
    exit;
}
?>
<html>
<head>
    <!--载入jquery库-->
    <script type="text/javascript" src="Js/jquery-1.7.2.min.js"></script>
</head>
<body>
<input id="yes" type="submit" name="sel1" value="aaa"></li>
<input id="no" type="submit" name="sel2" value="bbb"></li>
<input type="button" name="b_submit" id="b_submit" onclick="j_post();">

<script type="text/javascript">
    function j_post(){
        var txt=$("#yes").val();
        var txt2=$("#no").val();
        $.post("b.php", { name:txt, time:txt2},
            function(data){
                alert("Data Loaded: " + data);
            });
    }
</script>

</body>
</html>

#22


把数据处理完之后unset($_POST)就可以了

#23


用get

#24


 1 表单提交后跳到另外一个页面
 2 像 @PhpNewnew 说的,使用AJAX提交
   使用AJAX POST的时候,要注意提交按钮的“锁定”。

 3 给表单赋上一个唯一的uniqid,提交表单的时候检查此值。

 4 或者使用验证码(实际上和方法3原理一样)

#25


引用 24 楼  的回复:
 1 表单提交后跳到另外一个页面
 2 像 @PhpNewnew 说的,使用AJAX提交
   使用AJAX POST的时候,要注意提交按钮的“锁定”。

 3 给表单赋上一个唯一的uniqid,提交表单的时候检查此值。

 4 或者使用验证码(实际上和方法3原理一样)


基本全了, 3和4都是比较实用的.

#26


点击后锁定页面,成功跳转,否则页面不能动

#27


点击后锁定页面,成功跳转,否则页面不能动

#28


嗨 这种常规的问题 还这就纠结 
1.先是页面显示上控制 至少让人不能再点 
2.类似拦截器或者过滤器机制,提交表单中生成个唯一ID,第一次提交临时存起来,以后每次判断一下不就结了

#29


引用 28 楼  的回复:
嗨 这种常规的问题 还这就纠结 
1.先是页面显示上控制 至少让人不能再点 
2.类似拦截器或者过滤器机制,提交表单中生成个唯一ID,第一次提交临时存起来,以后每次判断一下不就结了


是"刷新"不是"点击提交"

#30


用Header Redirection应该可以吧?header('Location:your page');。这个功能和那个location.href=your page差不多,我用这个是可以工作的。

#31


展示表单页面的时候, 设定一个cookie =1 提交1次就+1


这样只需要判断cookie的值就可以了

#32


给form添加一个验证码就行了
<input type="hidden" value="xxxxxxxx" name="code" />
xxxxxxx值为生成页面的时候在服务器端生成,可存入session保存,
提交的时候这么处理:
$code = $_POST['code'];
if (isset($_SESSION['code']) && ($_SESSION['code'] == $code)) {
    unset($_SESSION['code']);
    do others
} else {
    // 无效提交
}