刷新后,网页将自动提交具有先前会话变量的信息

时间:2018-11-01 23:16:52

标签: php html

我有一个网页,允许用户提交查询并通过电子邮件获取结果。用户选择三个变量的值和电子邮件地址。我的问题是,每次刷新页面时,表单都会使用旧值重新提交并发送电子邮件(即,我什至没有单击提交查询)。我尝试使用$ _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部分。 因此,每次用户刷新页面时,他都会再次收到包含先前会话查询结果的电子邮件。 非常感谢此处的任何指导。 注意:我在这里不使用mail或pHPmailer,但这不是我在这里讨论的内容。

谢谢

1 个答案:

答案 0 :(得分:0)

取自this answer

为防止用户刷新页面或按“后退”按钮并重新提交表单,我使用了以下整洁的小技巧。

if (!isset($_SESSION)) {
    session_start();
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $_SESSION['postdata'] = $_POST;
    unset($_POST);
     header("Location: ".$_SERVER['PHP_SELF']);
    exit;
}  
?>

POST数据现在处于会话中,用户可以刷新任意数量的内容。它将不再对您的代码产生影响。