2

我有一个测验,它有两个部分。第一部分是表格,第二部分是测验的确认。

形式:形式

我正在使用 POST 方法。因此,如果用户提交表单并进入祝贺页面并刷新它,它将继续发送电子邮件。我试图阻止它。

相关PHP:

我正在尝试更改以下代码中的某些内容:

if($fname <> "" and $lname <> "" and $ydept <> "") {
    mail ($myEmail, $mailSubject, $msgBody, $header);
    mail ($userEmail, $sentMailSubject, $sentMailBody, $sentHeader);

像这样:

if($fname <> "" and $lname <> "" and $ydept <> "") {
    mail ($myEmail, $mailSubject, $msgBody, $header);
    mail ($userEmail, $sentMailSubject, $sentMailBody, $sentHeader);
header ("redirect me to another php page with the $fname included to be used as a variable");
}
else {
    display not complete exam page and redirect me to the form;
}

我希望将 $fname 或任何其他变量转移到 congratulation.php 页面,因此不会在与祝贺页面相同的页面上发送电子邮件,而是在不同的页面上发送,因此无论用户使用多少次刷新,没有任何反应。

4

2 回答 2

1

根据您的评论,“我希望将 $fname 或任何其他变量转移到 congratulation.php 页面”,我建议只需将$_POST数组传递给会话变量,或者执行计算并将必要的数据保存到单独的数组中,并将该数组作为会话变量传递。那有意义吗?

参考。 http://www.phpriot.com/articles/intro-php-sessions/7

于 2013-02-26T21:15:20.310 回答
1

为了防止用户刷新页面并再次发送电子邮件,您需要做的是重定向到您拥有的另一个页面。但是,在重定向页面中,您将使用GET而不是POST.

$name = urlencode($name);
$email = urlencode($email);
header("Location: well_done_chap.php?var1=$name&var2=$email");

然后在well_done_chap.php(或任何你称之为的)中,只需执行以下操作:

if (isset($_GET['var1']) && isset($_GET['var2'])) {
    $name = $_GET['var1'];
    $email = $_GET['var2'];

    // Do your other stuff here

} else {
    echo "Invalid access";
}
于 2013-02-26T21:16:19.470 回答