2013-02-26 21 views
2

我有一個包含兩部分的測驗。第一部分是表格,第二部分是測驗的確認。在html/php中有三個單獨的測驗提交會話

的形式爲: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頁面,所以與祝賀頁面在同一頁面上發送電子郵件不同,它將是一個不同的頁面,因此無論多少次用戶刷新,沒有任何反應。

+1

代碼,蝙蝠俠的聖牆。嘗試只發布相關部分。 – Mike 2013-02-26 21:10:25

+0

SORRY想發佈整個腳本以獲得更好的主意:) – Si8 2013-02-26 21:12:12

+1

這裏不需要三個不同的會話,這只是PHP會話的標準使用。或者,如果您不想使用會話,請將其置於querystring變量中,然後輸入congrats頁面。無論你做什麼,都要確保你正確地轉義你寫入頁面的任何內容,否則你將容易受到XSS的攻擊。 – 2013-02-26 21:15:21

回答

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"; 
} 
+0

一個問題是,如果我自己加載well_done_chap.php它將無法正常工作。我知道我可以使用isset來驗證它是否有var1變量? – Si8 2013-02-26 22:02:16

+1

@ SiKni8我已經更新了相應的答案。只要檢查是否設置了變量。 – Mike 2013-02-26 22:10:06

+0

像一個魅力工作:)謝謝。 – Si8 2013-02-26 22:14:07

1

從您的評論中,「我希望$ fname或任何其他變量繼續到congratulation.php頁面」我建議只需將$_POST數組傳遞給會話變量,或者執行計算並保存必要數據傳遞到單獨的數組,並將該數組作爲會話變量傳遞。那有意義嗎?

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

+0

我決定和邁克的解決方案一起使用,儘管你同樣好。感謝您的迴應:) – Si8 2013-02-26 23:07:36