如何使用php验证任何电子邮件

时间:2017-09-17 08:35:14

标签: php email

我正在使用表单。在用户输入电子邮件的地方,我可以通过正则表达式验证电子邮件。但我需要的是this。搜索后,我找到了解决方案here。因为它检查电子邮件的MX记录。但它仍然不适合我,因为当我给出一个粗略的电子邮件,如:ahhhhhhhhhhhhhhhhh@yahoo.com我的表单接受了它,当我在另一个网站上发送相同的电子邮件时,它拒绝了该电子邮件。这可能是我的逻辑问题,我不知道,下面是我验证电子邮件的代码。



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) OR !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";
	}

}




2 个答案:

答案 0 :(得分:1)

请使用mysqli或Pdo ..您的代码很容易被sql注入,尝试添加mysql escape。但是我在不改变查询的情况下重写了你的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 :(得分:1)

代码的这一部分

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

更改&#34; OR&#34;到||。喜欢这个

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