php - 刷新后网页自动提交以前的会话变量
问题描述
我有一个网页,允许用户提交查询并在电子邮件中获取结果。用户选择三个变量的值和电子邮件地址。我的问题是,每次我刷新页面时,表单都会使用旧值重新提交并发送电子邮件(即我什至没有点击提交查询)。我尝试使用 $_POST=array() 但它仍然无法正常工作。
这是我的代码:
<?php
if(isset($_POST['submit'])){
$varApp= $_POST['App'];
$varConfig = $_POST['Config'];
$varCtrType = $_POST['CtrType'];
$varEmail = $_POST['mailid'];
exec("/py $varApp $varConfig $varCtrType 2>&1",$output );
if ($output[8] == "Empty"){
echo "<div style ='font:22px Arial,tahoma,sans-serif;color:#ff0000'><br>No Data Available! <br></div>";
}
else {
exec(' printf "Please find attached the query result for following selection:\n\nApp: '.$varApp.' \nConfig: '.$varConfig.' \nCounter Type: '.$varCtrType.' \n\n Thanks! " | /bin/mail -s "Database Query Result" -a '.$output[8].' '.$varEmail.' 2>&1', $output2 );
echo "<div style ='font: 18px Arial,tahoma,sans-serif;color:#10ac84'><br><b> Please check your email for result !<b> <br>";
echo '<script language="javascript">';
echo 'alert("Please check your email for result! Submitted Query details: Selected App: '.$varAPP.' Configuration:")';
echo '</script>';
}
$_POST=array();
}
?>
</body>
我这里没有给出 html 部分。因此,每次用户刷新页面时,他都会再次收到一封包含先前会话查询结果的电子邮件。非常感谢这里的任何指导。注意:我在这里没有使用邮件或 pHPmailer,但这不是我需要在这里讨论的。
谢谢,
解决方案
取自这个答案:
为了防止用户刷新页面或按下后退按钮并重新提交表单,我使用了以下巧妙的小技巧。
if (!isset($_SESSION)) {
session_start();
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$_SESSION['postdata'] = $_POST;
unset($_POST);
header("Location: ".$_SERVER['PHP_SELF']);
exit;
}
?>
POST 数据现在处于会话中,用户可以随意刷新。它将不再对您的代码产生影响。
推荐阅读
- python - 使用一个命令在 python matplotlib 中进行 DRY 绘图
- javascript - 即使在函数内,函数似乎返回未定义,返回的变量有一个值
- ruby - Ruby 拆分字符串,带排除项
- python - Keras.model.summary 没有正确显示我的模型..?
- node.js - 从 node.js 中返回的响应中钻取 API 元素
- java - 如何在 Spring Boot 中处理 @Async
- python - django 我在加载页面时得到一个 TemplateDoesNotExist
- laravel - 如何检查当前网址是否是 laravel Blade 的首页?
- javascript - 如何将 React Native Paper 菜单中的选定项目传递给 Input/TextInput onChangeText 行为
- r - 在生成热图网格(使用 facet_wrap)时,有没有办法强制 geom_tile 热图单元格为特定大小?