在html / php中有三个单独的测验提交会话

时间:2013-02-26 21:08:11

标签: php html

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

表格:The Form

我正在使用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页面,因此,不是将电子邮件发送到与祝贺页面相同的页面上,它将是一个不同的页面,所以无论多少用户刷新的时间,没有任何反应。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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";
}