2012-10-02 147 views
-7

我一直在這裏待了幾個小時,對於問題是什麼而撓頭。驗證表單錯誤

表單工作併發送電子郵件,但是當驗證鏈接被點擊時,它不顯示回顯的「成功」消息,但死(「錯誤消息」);信息。任何與$鹽有關的事情?

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 

<input type="text" size="35" name="email" title="Email"> 
<input id="button" type="submit" name="submit" value="Submit your Email" /> 

</form> 

<?php 

$salt = "mysecret"; 

if(isset($_POST["confirm"]) && isset($_POST["email"])){ 
    $confirm = $_POST["confirm"]; 
    $to_email = $_POST["email"]; 

    if(sha1($salt.$to_email) == $confirm){ 
     echo "Success"; 
    } else{ 
     die("error: mail not confirmed"); 
    } 


} elseif(isset($_POST["email"])){ 
    $to_email = $_POST["email"]; 

    $confirm_link = "http://www.mysite.com/form.php?confirm=".urlencode(sha1($salt.$to_email))."&mail=".urlencode($to_email); 
    $msg = "to confirm ... click the link: \n ".$confirm_link; 
    mail($to_email, "pls confirm your mail", $msg); 
} else{ 
    die("error message"); 
} 

?> 
+0

http://www.tizag.com/phpT/postget.php – FirmView

回答

5

當您通過電子郵件點擊該驗證鏈接時,這些值將通過GET傳遞,而不是通過POST傳遞。

+0

我無法弄清楚哪些是GET和哪些是POST。我在網上發現了這個腳本,並認爲它可以「開箱即用」。顯然我錯了。我嘗試了各種各樣的組合,但都沒有成功。可以放棄它。 –

+1

@Fred通常,大多數瀏覽器發出的請求都是GET請求。當您在URL中傳遞常規瀏覽器請求的參數時,您將通過GET傳遞這些參數,因爲您的瀏覽器對該URL發出GET請求。瀏覽器可以通過使用基於表單元素'method'屬性的表單進行POST。當設置爲「發佈」時,瀏覽器將在提交表單後進行POST,傳遞表單數據。 –

+0

謝謝邁克。當我將一些'post'改爲'get'並重新加載,然後點擊submit按鈕,它不會執行,而是出現一個對話框,要求我保存或打開.php文件,這就是我覺得奇怪的地方。 –

2

您檢查$ _ POST數據時,它們被傳遞在$ _GET當你點擊鏈接,還你的鏈接指定郵件參數(不帶「E」),並選中「電子郵件」參數。