首页 > 解决方案 > 刷新后网页自动提交以前的会话变量

问题描述

我有一个网页,允许用户提交查询并在电子邮件中获取结果。用户选择三个变量的值和电子邮件地址。我的问题是,每次我刷新页面时,表单都会使用旧值重新提交并发送电子邮件(即我什至没有点击提交查询)。我尝试使用 $_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,但这不是我需要在这里讨论的。

谢谢,

标签: phphtml

解决方案


取自这个答案

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

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

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

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


推荐阅读