0

可能重复:
我对 PHP Post/Redirect/Get 感到困惑

我在页面上有一个表单,所以当我重新加载页面时,我收到“此页面已使用数据,您确定要刷新”消息。

我查看了 HTTP-303 响应代码,它消除了消息(我在 Chrome 顺便说一句),直到我提交一次表单,然后它又开始骚扰我。

基本上,我有一个可选的“联系我”表单,如果页面被刷新,它不应该抛出提示。我不认为/明白为什么我需要一个单独的页面来提交这样的简短表格。谁能帮我吗?

4

3 回答 3

1

最终解决方案:如何防止表单重新提交,在同一页面上

  1. 你应该有action="something"标签。在 HTML5 中是必需的
  2. 检查是否提交了表单。如果你不这样做,并且有一个header('Location: ...')它会像一个无限循环(废话)。所以像if (isset($_POST['some_submit_btn'])) {
  3. 你处理逻辑吗
  4. header('Location: same_page')(例如:)header('Location: ' . $_SERVER['PHP_SELF'])exit

即使在提交表单之后,您的页面现在也可以定期刷新。重定向清除 POST 请求或其他任何内容。

其他人指出 Ajax 是一种更简单的解决方案。我已经接受它作为答案,但如果有人想这样做,我把它作为参考。

注意:如果要在两个页面之间传递数据/刷新,则必须通过会话或 cookie 传递(我更喜欢会话)。我认为没有“干净”的解决方法

于 2012-12-05T04:23:18.627 回答
1

您最好的选择是使用Ajax。这样你就不需要重新加载。我通常将它与JQuery一起使用。
所以你最终会得到类似的东西:

function send_message(vMessage,vWho) {
    $.ajax({
        url:"messageSender.php",
        data:{message:vMessage,from:vWho},
        type:"POST",
        success:function(result) {
            // DO SOMETHING HERE, LIKE AN ALERT
        }
    });
}
于 2012-12-05T01:12:17.440 回答
0

保存表单数据后,您需要重定向。它可以在同一页面上完成,这不是问题,您只需要发出 GET 请求而不是 POST。

于 2012-12-05T00:02:36.273 回答