2017-09-17 10 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チェックは、ドメインのMXレコードを持つ信頼できるDNSのみをチェックします。 – zerkms

答えて

1

親切にあなたのコードは、SQLインジェクションの脆弱性で、MySQLのエスケープを追加しよう.. mysqliのやPDOを使用してください。しかし、私はあなたのPHPを以下のように変更せずに書き直しました。

電子メールの検証では正しい電子メール形式がチェックされるため、@を確認する必要はありません。 @ example.comをフィルタリングする場合は、そのためのカスタムフィルタが必要です。 "OR" ||するようにコード

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

変更のこの部分に

<?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) || !filter_var($_email, FILTER_VALIDATE_EMAIL)) 
+0

何が変わるでしょうか? – zerkms

関連する問題