2013-11-21 81 views
2

我有一個腳本,將驗證電子郵件地址&我認爲這是唯一的解決方案驗證表單提交電子郵件?我結束了這個腳本電子郵件驗證'錯誤:嚴格的標準'或任何最好的方式來驗證電子郵件?

<?php 
if(isset($_POST['email'])) 

{ 
    $email = $_POST['email']; 

    if (strpos($email, '@')) 
    { 
     $first = end(explode("@", $email)); 

     if(checkdnsrr($first, 'MX')) 
     { 
      $validate = 'Valid email.'; 
     } 
     else 
     { 
      $validate = 'Invalid email.'; 
     } 
    } 
    else 
    { 
     $validate = 'Invalid email.'; 
    } 

    echo $validate; 
} 
?> 
<form method="POST"> 
<input type="text" name="email"> 
<input type="submit" value="submit"> 
</form> 

它運行正常,但我有這個錯誤Strict standards: Only variables should be passed by reference

有什麼辦法可以刪除錯誤?和IMPROVE的代碼?是否有任何電子郵件驗證到目前爲止,這是真的驗證電子郵件?

+0

你解決您的問題 –

+0

@Venkat nope :( – Darline

+0

什麼是您的PHP版本? –

回答

-1

的RESON是,end(explode("@", $email));函數導致錯誤,end()需要一個參考,對於可以嘗試使用下面的代碼,

$EmailArray = explode("@", $email); 
$first = end($EmailArray); 

mixed end (array &$array)

end()進步陣列的內部指針的最後一個元素並返回它的值。

參數:

陣列:該數組是通過參考,因爲它是由函數修改通過。這意味着您必須將它傳遞給一個實變量,而不是返回數組的函數,因爲只有實際變量可以通過引用傳遞。

返回值:返回空數組的最後一個元素的值或FALSE。

+0

$ EmailArray =爆炸(「@」,$ email); $ first = end($ EmailArray);我已經更新myanswer,你可以嘗試 –

+0

似乎你需要將它傳遞給另一個變量。是的,這有助於我的問題:) – Darline

+0

你想要幫助嗎? –

0

你可以嘗試像下面的例子

<?php 

    function domain_exists($email, $record = 'MX'){ 
     list($user, $domain) = explode('@', $email); 
     return checkdnsrr($domain, $record); 
    } 
    if(isset($_POST['email'])){ 
     $email = $_POST['email']; 
     if(domain_exists($email)) { 
      echo('This MX records exists; I will accept this email as valid.'); 
     } 
     else { 
      echo('No MX record exists; Invalid email.'); 
     } 
    } 
    ?> 

但是,這是不可靠的。一般來說dns是不可靠的。這是最好的努力。當提供一個無效域名時,也可能需要很長時間,所以如果有人用很多無效/脫機域名阻止你的腳本,你需要考慮系統的潛在DOS。

(鮮爲人知)事實上,域名甚至不需要有MX記錄來發送郵件。郵件遞送應該回退到爲指定的主機使用A記錄。這可能不是真的會發生多少這些天,但在理論上..

這樣你就可以用預浸匹配驗證您的電子郵件一樣

//$email = "[email protected]"; // Invalid email address 
    $email = "[email protected]"; // Valid email address 

    $regex = '/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/'; 

    if (preg_match($regex, $email)) { 
     echo $email . " is a valid email. We can accept it."; 
    } else { 
     echo $email . " is an invalid email. Please try again."; 
    } 
+0

正則表達式無法驗證電子郵件,它只是驗證輸入。 – Darline

1

你可以做這樣的事情

<?php 
if(isset($_POST['email'])) 

{ 
    $email = $_POST['email']; 

    if (strpos($email, '@')) 
    { 
     $first = explode("@", $email); 

     $validate = checkdnsrr($first[1], 'MX') ? 'Valid email.' : 'Invalid email.'; 
    } 
    else 
    { 
     $validate = 'Invalid email.'; 
    } 

    echo $validate; 
} 
?> 
<form method="POST"> 
<input type="text" name="email"> 
<input type="submit" value="submit"> 
</form>