📅  最后修改于: 2023-12-03 15:07:16.998000             🧑  作者: Mango
在PHP编程中,有时候我们会遇到一个问题:当用户刷新页面时,会重新提交表单数据,导致数据重复处理,给程序带来困扰。
为了解决这个问题,我们可以使用以下三种方法:
我们可以在第一次提交表单后,将其对应的数据保存在session中,并将页面跳转到成功页面。当用户刷新页面时,可以检查session中是否已经有该数据:
session_start();
if (isset($_SESSION['data'])) {
// 已经提交过,不再处理
} else {
// 第一次提交,保存数据
$_SESSION['data'] = $_POST;
// 处理数据
}
// 清除session
unset($_SESSION['data']);
我们可以在表单中生成一个唯一的token,每次提交时检查该token是否已经存在:
session_start();
$token = md5(uniqid(rand(), true));
$_SESSION['token'] = $token;
?>
<form method="post" action="">
<input type="hidden" name="token" value="<?php echo $token ?>">
<!-- 其他表单元素 -->
</form>
在提交数据时,检查该token是否已经存在:
session_start();
if ($_POST['token'] === $_SESSION['token']) {
// 已经提交过,不再处理
} else {
// 第一次提交,保存数据
// 处理数据
}
在表单处理完成后,我们可以将用户重定向到一个GET请求。这样用户刷新页面时,只会重新请求一次,而不是重新提交表单数据:
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 处理表单数据
// ...
// 重定向到成功页面
header('Location: success.php');
exit;
}
在成功页面中,我们只处理GET请求,避免重复处理数据:
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
// 处理成功页面
// ...
}
以上就是三种刷新时重新提交PHP的解决方法。根据实际情况选择不同的方法即可。