PHP:重定向后保存服务器方法



我不知道此技术是否正确。无论如何,在我的页面上,我有一个提交按钮。PHP代码的提取如下:

<?php
$isPost = filter_input(INPUT_SERVER, "REQUEST_METHOD", FILTER_SANITIZE_STRING) == "POST";
if ($isPost) {
  // do something...      
  header("Location: " . filter_input(INPUT_SERVER, "REQUEST_URI", FILTER_SANITIZE_URL));
  exit();
}

通过这种方式,我避免了用户刷新页面时重新发送帖子数据的令人讨厌的问题。

当然,一个缺点现在是请求方法变量的值,在内检索 html页面将始终为" get"。

这将是保留它的好方法,例如,显示了保存数据的警报:

<div class="alert alert-success alert-dismissible fade <?php echo (filter_input(INPUT_SERVER, "REQUEST_METHOD", FILTER_SANITIZE_STRING) == "POST") ? "show" : "" ?> " role="alert">
    Settings successfully saved.
</div>

这不起作用,因为它永远不会评估为"帖子"!一个丑陋的缺点(非常容易出现错误)是使用浏览器的本地存储在PHP代码发现"帖子"时设置标志。

有更好的东西吗?

我向您提出了两种选择:

使用$_SESSION

$_SESSION是用于信息存储的资源。您可以使用它来存储给用户的消息,然后在您的视图中显示存储的消息。交付后,您可能需要清理商店,以避免在每个页面中显示相同的消息。

做一个动态请求

您还可以通过JavaScript(又称AJAX调用)动态发送帖子到服务器,并使其与结果交付JSON。只需在JSON中工作即可显示返回的消息。