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



我正在使用一个表单。在用户输入电子邮件的地方,我可以通过正则表达式验证电子邮件。但我需要的是这样的。搜索后,我在这里找到了解决方案。检查电子邮件的 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";
	}
}

请使用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";
}
}
?>

在代码的这一部分

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

将"OR"更改为 ||。喜欢这个

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

最新更新