2012-02-20 140 views
0

我正在研究網站的評論表單,並試圖防範垃圾郵件發送者。我已從這link採取validEmail功能。PHP電子郵件表單驗證

我對使用函數並不是很有經驗。這是調用函數並驗證用戶電子郵件地址的正確方法嗎?任何建議感激。謝謝

$email = $_POST['email']; 

if (validEmail($email)) { 

$to  = '[email protected]'; 
$subject = 'the subject'; 
$message = 'hello'; 
$headers = 'From: [email protected]'; 

mail($to, $subject, $message, $headers); 

print "Form submitted successfully: <br>Your name is <b>".$_POST['cname']."</b> and your email is <b>".$_POST['email']."</b><br>"; 

} else { 

print "There was an error with your form submission."; 

} 
+0

真的有很多很好的答案這個問題。非常感謝您擴展這些概念。我選擇了@ vivid-colors提供的答案,因爲:它直接回答瞭如何調用函數,這是第一個響應。不過,我相信我會根據所提供的意見和信息來利用FILTER_VALIDATE_EMAIL。這是我希望我可以授予多個正確答案的一種情況。謝謝你們。 – 2012-02-20 21:39:19

回答

1

validEmail($email);功能應該被納入到你的文件:

include "whatever.php"

(或者,你可以複製和函數粘貼到同一個文件中的代碼)

您的if聲明應該看起來像這樣:

if(validEmail($email)) { 
    // print your success message here 
} else { 
    // print your fail message here 
} 

在回答下面的評論,你也可以寫上這樣的:

if(validEmail($email) === true) { 
    // print your success message here 
} else { 
    // print your fail message here 
} 
+0

那麼調用這樣的函數?我是否必須檢查isValid是否返回真值或者是否暗含?該函數的最後一行返回$ isValid。謝謝 – 2012-02-20 21:19:54

+0

嗨,尼克,我已經擴大了我的解決方案,以幫助:)。 – ale 2012-02-20 21:25:09

+1

'#include'將不起作用:這是PHP,而不是C;) – Crontab 2012-02-20 21:29:51

3

PHP有,因爲5.2.0,可以使用它自己的驗證過濾器來檢查用戶是否已進入正確的電子郵件地址。沒有必要依靠你在互聯網上找到的東西,因爲這些功能可能有缺陷或破壞。要使用filter_var()的電子郵件驗證,解決辦法是:

if(!filter_var($email, FILTER_VALIDATE_EMAIL)){ 
    print "E-mail is correct"; 
} else { 
    print "E-mail is not correct"; 
} 

(也注意到這個問題你原來的示例代碼中打印一個有缺失的分號)。

+0

非常感謝您指出這一點。我很可能會爲我的表單使用FILTER_VALIDATE_EMAIL。如果可能的話,我會獎勵多個正確的答案,但必須獎勵鮮豔的顏色,因爲他們解釋瞭如何調用函數,並且首先回答。感謝您的幫助 – 2012-02-20 21:41:51

1

這整個聯validEmail()功能可以替換爲:

function validEmail($email) 
{ 
    if (filter_var('[email protected]', FILTER_VALIDATE_EMAIL) !== false) { 
     $domain = preg_split("/@/", $email); 
     $domain = $domain[count($domain) - 1]; 
     if (checkdnsrr($domain,"MX") || checkdnsrr($domain,"A")) { 
      return true; 
     } 
    } 
    return false; 
} 

雖然我只是把你從鏈接的文章checkdnsrr()功能。我不熟悉它,以前我沒有用過它。內置的filter_var()函數可能只是您真正想要使用的,因爲檢查DNS需要時間(因此每次有人向您的表單提交某些內容時,您的腳本可能會執行2次DNS查找)。

+0

我應該如何使用FILTER_VALIDATE_EMAIL作爲其他評論者的建議?或者這是一個更好的驗證方法? – 2012-02-20 21:34:19

+1

那麼,正如你注意到的,我還用'FILTER_VALIDATE_EMAIL'來使用'filter_var()'。我只是將它與DNS一起檢查您在所用問題中鏈接到的功能。 – Crontab 2012-02-20 21:36:49

+0

謝謝你的幫助。試圖儘可能多地向您的代表提供點數。真的很感激它 – 2012-02-20 21:44:26

0
if (filter_var($email, FILTER_VALIDATE_EMAIL)) { 
    echo "e-Mail is Valid"; 
} else { 
    echo "Invalid e-Mail"; 
}