如何使用PHP避免Page Reload Resend-Data消息

How to avoid Page Reload Resend-Data message with PHP

提问人:Jeff 提问时间:8/18/2009 更新时间:6/10/2015 访问量:7029

问:

我对PHP比较陌生,所以如果答案是微不足道的,我深表歉意。不。

我写了一个简单的“联系我们”电子邮件表单(实际上是一个WordPress页面模板文件)。所有代码都在一个文件中。

在用户提交表单并发送电子邮件后,该文件将生成一条感谢消息。

如果用户重新加载“感谢”页面,系统会提示他们“重新发送表单数据”,这就是我问这个问题的原因。

我的问题:如何避免重新发送表单数据的提示,同时仍将所有代码(包括感谢数据)保存在一个文件中?

编辑:我见过人们使用headers( Location: ),但我认为如果我想将所有代码保存在一个文件中,这将不起作用。

PHP的

评论

0赞 Jeff 8/18/2009
感谢您的所有回复!明天早上我会把所有东西都看一遍。如果您碰巧遇到这个问题并看到您同意的答案,请投赞成票,以便我知道!=)

答:

0赞 Zed 8/18/2009 #1

您可以使用 javascript 发布表单并显示感谢消息。这样,浏览器永远不会离开页面。

0赞 Ryan 8/18/2009 #2

即使有 header('Location: xxx');您仍然可以将其重定向到同一页面,并设置 URL 参数或会话变量来区分应显示的内容。

10赞 Tyler Carter 8/18/2009 #3

您可以重定向到其他查询。

header("Location: ?page=thankyou");

然后,您甚至不需要检查是否发送了 POST 数据。如果页面等于感谢,则显示感谢页面。

评论

0赞 Jeff 8/19/2009
看起来不错。我想知道,是否需要更多的代码来抛出header(),或者它真的那么简单?
0赞 Jeff 8/20/2009
对于那些感兴趣的人,我被告知我应该在位置中包含完整的 url,并包括一个出口;抛出 header() 后。
0赞 0bijan mortazavi 3/1/2016
这是我在stackoverflow中找到的最好的答案!@TylerCarter非常感谢。
0赞 too much php 6/23/2017
几乎肯定应该有一个 之后 ,否则 PHP 将继续执行它后面的任何代码。exit;header("Location: ...")
0赞 VoteyDisciple 8/18/2009 #4

尽管我质疑您要求将所有代码放在一个文件中(为什么您不能将其分开,并用于包含共享库代码?),但该技术仍然完全有效。只需执行以下操作:require_onceheader('Location:')

header('Location: http://www.example.com/path/to/my-one-file-of-code.php?thankyou=1');

然后,在您的文件中,您可以拥有:

if (isset($_GET['thankyou']) && $_GET['thankyou']) {
    // Do whatever it is you do to thank the visitor.
}

评论

0赞 Tyler Carter 8/18/2009
第二个参数将每隔一页生成一个错误。
1赞 too much php 8/18/2009
@Chacha102:第二个不会被评估,因为它是懒惰的 - 它不会生成错误。$_GET&&
0赞 Gall Annonim 6/19/2017
为了使@toomuchphp注释更完整/清晰,PHP 尝试优化,例如,如果可能,它只评估 if 的部分内容。例如,如果 ($foo & & $bar) 将检查第一个 foo,如果它为 false,则它知道,它无论如何都会不匹配条件,因此它会跳过休息。 OR 也是如此,这就是为什么你可以在某些地方找到像 connected_to_database OR die 这样的代码。PHP 检查第一个条件是否足以说整个语句为真。如果第一个条件为真,则结果将完全为真,因此将跳过第二部分。顺便说一句,正确的方法是如果(@$_GET[“thankyou”])。
0赞 VoteyDisciple 6/20/2017
@GallAnnonim 绝对不宜使用。只是禁止出现错误。始终编写代码,首先显式防止发生错误。在这种情况下,请检查该属性是否存在,然后使用该属性。依靠可以隐藏各种问题,包括其他错误,这些错误也会被抑制。@$_GET['thankyou']@@
0赞 Gall Annonim 6/20/2017
确实,@ 正在减少错误,但条件始终有效,它允许更短、更易读的代码,我认为这是主要的事情。我只在我明确期望警告的地方使用 @,如果发生这种情况,我确信不会有任何破坏。但那可能只是我。
0赞 user669677 10/28/2011 #5

这对我有用:

header("Location: #");
3赞 Lukáš Neoproud 4/19/2012 #6

这对我有用,它可以放在 html 文件中的任何位置,而不仅仅是像 header() 函数一样开始:

<?php
if (!empty($_POST)){
?>
    <script type="text/javascript">
        window.location = window.location.href;
    </script>
<?php } ?>

我把它放在prevent_resend.php中,然后在后数据处理完成后将其包含。

// ... save data from $_POST to DB
include('prevent_resend.php');
// ... do some other stuff