筛选\验证\电子邮件在PHP中不起作用

筛选\验证\电子邮件在PHP中不起作用,php,email,Php,Email,如果这是一个重复的问题,我道歉。我已经阅读了100篇文章,并试图实施我发现的每一个修复方案,但都无济于事 我正在传递一个名为email\u tocheck的变量。我只是想确保该电子邮件不在数据库中&&它是一封“有效”的电子邮件 无论我做什么,我都不能满足有效电子邮件的要求。如果我只是简单地输入'myemail@mydomain.com'在第一个IF语句中,用单引号而不是$email,电子邮件返回为未定义。我卡住了。重要时刻 我犯了愚蠢的语法错误吗?我喜欢很多人,但我是新来的。任何想法都将不胜感激

如果这是一个重复的问题,我道歉。我已经阅读了100篇文章,并试图实施我发现的每一个修复方案,但都无济于事

我正在传递一个名为email\u tocheck的变量。我只是想确保该电子邮件不在数据库中&&它是一封“有效”的电子邮件

无论我做什么,我都不能满足有效电子邮件的要求。如果我只是简单地输入'myemail@mydomain.com'在第一个
IF语句
中,用单引号而不是
$email
,电子邮件返回为未定义。我卡住了。重要时刻

我犯了愚蠢的语法错误吗?我喜欢很多人,但我是新来的。任何想法都将不胜感激

$url=$_SERVER['QUERY_STRING'];
parse_str($url);
$email = "'$email_tocheck'";
$sql = "SELECT * from EmailList where Email=$email";    
$conn->query($sql);
$result = $conn->query($sql);
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
    if((mysqli_num_rows($result)>0)){   
            $num1 = 'Not Valid';
            $num2 = 'This email has been unsubscribed.';
            echo json_encode(array($num1, $num2)); 
    } else {
            $num1 = 'Valid';
            $num2 = 'Send away';
            echo json_encode(array($num1, $num2));
    }
} else {
    $num1 = 'Not Valid';
    $num2 = 'A valid email is required.';
    echo json_encode(array($num1, $num2,$email)); 
}
这意味着
$email
'foo@bar.com“
(不是有效的电子邮件地址),而它应该是
foo@bar.com
(不带引号)。将行更改为:

$email = $email_tocheck;
或根据需要进行消毒,例如空白:

$email = trim($email_tocheck);

问题是这里的电子邮件必须在引号中
email='$email'"; 您不应该在变量周围加引号,只有在sql中,并且只有在正确转义了值的情况下才能加引号。最好完全去掉引号,使用一个准备好的语句。我已经完全删除了引号,但是SQL语句无法运行。我尝试了所有可能的引用和非引用版本。我想你说的是,我需要两个版本的$email-一个用于SQL语句,另一个用于filter_var。我将阅读准备好的语句。已解决。投票支持萨蒂。解决方案实际上是两个版本的$email。谢谢大家……但出于好奇,为什么对我的问题投反对票呢?一个非空字符串-一个有效的电子邮件地址-将计算为
true
,这样OP的部分代码就可以正常工作。事实上,问题2不是问题。。它非常有效。。您应该将其从列表中删除answer@jeroen这是一个很好的观点,我这样做是不切实际的,因为你不能确定
filter\u var
的输出,除非它是
false
。我已删除它。@MateiMihai已完成。请注意,现在sql将失败:-)
$email = trim($email_tocheck);