2017-09-17 15 views
0

我正在使用表單。在用戶輸入他們的電子郵件的地方,我可以通過正則表達式驗證電子郵件。但我需要的是像this。搜索後,我找到了一個解決方案here。因爲它檢查電子郵件的MX記錄。但是對我來說這仍然不起作用,因爲當我發送一封粗略的電子郵件時:[email protected]我的表單接受了它,並且當我在另一個網站上發送同一封電子郵件時,它拒絕了電子郵件。這可能是我的邏輯問題,我不知道,下面是我的代碼,我正在驗證電子郵件。如何使用php驗證任何電子郵件

if(isset($_GET["saveData"])){ 
 

 
\t $_appid = $_GET["appid"]; 
 
\t $_name = $_GET["name"]; 
 
\t $_email = $_GET["email"]; 
 
\t $_pass = $_GET["pass"]; 
 
\t $_applink = $_GET["applink"]; 
 

 
\t function domain_exists($email, $record = 'MX'){ 
 
\t \t list($user, $domain) = explode('@', $email); 
 
\t \t return checkdnsrr($domain, $record); 
 
\t } 
 

 

 
\t if(!empty($_appid) && !empty($_name) && !empty($_email) && !empty($_pass) && !empty($_applink)){ 
 

 

 
\t \t if(!domain_exists($_email) OR !filter_var($_email, FILTER_VALIDATE_EMAIL)) { 
 
\t \t \t echo "email_prb"; 
 
\t \t } else{ 
 

 
\t \t \t $sl = "SELECT * FROM fb_data WHERE useremail = '$_email' OR fbappid = '$_appid' "; 
 
\t \t \t $count = $con->query($sl); 
 

 
\t \t \t if(mysqli_num_rows($count)>0){ 
 
\t \t \t \t echo "exists"; 
 
\t \t \t }else{ 
 
\t \t \t \t $in = "INSERT INTO fb_data VALUES(NULL,'$_name','$_email','$_pass','$_applink','$_appid',1,0)"; 
 
\t \t \t \t if ($con->query($in)) { 
 
\t \t \t \t \t echo "Inserted"; 
 
\t \t \t \t } 
 
\t \t \t } 
 
\t \t } 
 
\t } else{ 
 

 
\t echo "empty"; 
 
\t } 
 

 
}

+0

雖然「ahhhhhhhhhhhhhhhhh @ yahoo.com」有什麼問題(或者說「可能」)? – zerkms

+0

通過MX的電子郵件驗證的意思是,它檢查任何域的電子郵件,如果此電子郵件存在或不存在 – Nadeem

+1

MX檢查意味着它只檢查授權DNS是否有該域的MX記錄。 – zerkms

回答

1

請使用庫MySQLi或PDO ..你的代碼很容易受到SQL注入,嘗試添加MySQL逃生。但我已經在下面重寫了你的PHP而不改變查詢。

過濾器驗證電子郵件將檢查正確的電子郵件格式,所以你不需要檢查@。但如果你過濾@ example.com,你需要一個自定義的過濾器。

<?php 
if(isset($_GET["saveData"])){ 

    $_appid = $_GET["appid"]; 
    $_name = $_GET["name"]; 
    $_email = $_GET["email"]; 
    $_pass = $_GET["pass"]; 
    $_applink = $_GET["applink"]; 

    function domain_exists($email, $record = 'MX'){ 
     list($user, $domain) = explode('@', $email); 
     return checkdnsrr($domain, $record); 
    } 


    if(!empty($_appid) && !empty($_name) && !empty($_email) && !empty($_pass) && !empty($_applink)){ 


     if((!domain_exists($_email)) && (!filter_var($_email, FILTER_VALIDATE_EMAIL))) { 
      echo "email_prb"; 
     } else{ 

      $sl = "SELECT * FROM `fb_data` WHERE `useremail` = '$_email' OR `fbappid` = '$_appid' "; 
      $count = $con->query($sl); 

      if(mysqli_num_rows($count)>0){ 
       echo "exists"; 
      }else{ 
       $in = "INSERT INTO `fb_data` VALUES(NULL,'$_name','$_email','$_pass','$_applink','$_appid',1,0)"; 
       if ($con->query($in)) { 
        echo "Inserted"; 
       } 
      } 
     } 
    } else{ 

     echo "empty"; 
    } 

} 
?> 
1

您的代碼

if(!domain_exists($_email) OR !filter_var($_email, FILTER_VALIDATE_EMAIL)) 

變化 「或」 ||的這一部分。像這樣

if(!domain_exists($_email) || !filter_var($_email, FILTER_VALIDATE_EMAIL)) 
+0

它會改變什麼? – zerkms