刷新PHP时清除POST数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了刷新PHP时清除POST数据相关的知识,希望对你有一定的参考价值。

我有一个表单,刷新时重新提交。我搜索了SO,发现没有任何与我的具体问题有关的内容。我知道最好有一个单独的php页面,但是对于这个特定的项目,它需要全部在一个PHP页面上。刷新页面时我需要重置POST,以便不再自动发送表单。

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

$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响应绝不能被缓存,但对第二个(重定向)请求的响应可能是可缓存的。

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

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请求,我们检查它们以及它们是否彼此不同,我们将进一步传递参数。

以上是关于刷新PHP时清除POST数据的主要内容,如果未能解决你的问题,请参考以下文章

如何刷新或清除HttpURLConnection的连接缓存

提交并刷新页面后清除表格-Wordpress

php中如何防止刷新一次提交一次

Nuxt,Vuex 数据在浏览器刷新时清除

PHP 用于清除POST变量的函数

keepAlive动态缓存及清除缓存