刷新 PHP 时清除开机自检数据


Clear POST Data Upon Refresh PHP

我有一个在刷新时重新提交的表格。我已经搜索了SO,但没有找到与我的特定问题相关的任何内容。我知道最好有一个单独的PHP页面,但是对于这个特定的项目,它需要全部在一个PHP页面上。我需要在刷新页面时重置 POST,这样表单就不会再次自动发送。

请注意,我不能将页面重定向到其他地方,因此我无法使用发布/重定向/获取。我想要的结果是这样的:第一次访问的人,输入正确的代码,脚本运行,然后下次他们访问或刷新页面等时,他们必须再次填写表格。任何建议将不胜感激。

$code = '';
$hide = "<script>$('form').fadeOut(500).remove();
$('.wrapper').addClass('form-success');
$('.container').delay(1800).fadeOut(500);</script>";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
   $code = secure($_POST["code"]);
}
function secure($data) {
   $data = trim($data);
   $data = stripslashes($data);
   $data = htmlspecialchars($data);
   return $data;
}
if (intval($code) == 1234) {
echo $hide;
$code = '';
} else {
echo "Failed";
$code = '';
}

你确定吗?将用户重定向到当前页面是完全可以的,我很确定这是您的最佳选择。因此,在处理代码后,将用户重定向到当前页面,刷新将不再重新提交表单。只需确保使用 HTTP 响应代码 303 重定向即可;[它触发了一个 GET 请求][1]:

此方法的存在主要是为了允许 POST 激活脚本的输出将用户代理重定向到所选资源。新 URI 不是最初请求的资源的替代引用。不得缓存 303 响应,但对第二个(重定向)请求的响应可能是可缓存的。

您可以通过在处理提交后(但在将任何 html 发送给用户之前)使用 header 来执行此操作:

header('Location: '.$_SERVER["PHP_SELF"], true, 303);
if (!empty($_POST)) setcookie ("last_post", implode($_POST),time()+360000);
if (!empty($_POST) and $_COOKIE['last_post'] == implode($_POST)) $_POST = [];
对于 POST 请求,

我们将向 cookie 添加数据,在后续的 POST 请求中,我们会检查它们,如果它们彼此不同,我们会进一步传递参数。