filter_validate_email无法正常工作甚至被检测到?

时间:2015-06-16 16:42:07

标签: php forms validation

我已经在这里尝试了我的查询的所有其他答案,但没有一个能满足我的需求。我在PHP 5.2上,我开始认为这个过滤器可能不适用于我的版本?我在下面添加了代码,如果您发现任何问题,请告诉我。我已经尝试过,有没有消毒,每次只是跳过整个条款并将表格提交给数据库。

if(isset($_POST['fname']) && !empty($_POST['fname']) AND isset($_POST['lname']) && !empty($_POST['lname']) AND isset($_POST['college']) && !empty($_POST['college']) AND isset($_POST['address']) && !empty($_POST['address']) AND isset($_POST['username']) && !empty($_POST['username']) AND isset($_POST['password']) && !empty($_POST['password']) AND $passwordEmail == $password2){

$address = $_POST['address'];

$address = filter_var($address, FILTER_SANITIZE_EMAIL);

 if(!filter_var($address, FILTER_VALIDATE_EMAIL) === false) {
header("location: registration.php?remarks=successEmail&college=$college&fname=$fname&lname=$lname&contact=$contact&username=$username");
}

else{
header("location: registration.php?remarks=failedEmail&college=$college&fname=$fname&lname=$lname&contact=$contact&username=$username");
}

修改

我删除了重复的功能和!,但仍然无效。

唯一的补充就是移动了'!'并删除第一个过滤器。

这是我现在使用的代码,它仍然失败并取自给出的一些答案:

if(isset($_POST['fname']) && !empty($_POST['fname']) AND isset($_POST['lname']) && !empty($_POST['lname']) AND isset($_POST['college']) && !empty($_POST['college']) AND isset($_POST['address']) && !empty($_POST['address']) AND isset($_POST['username']) && !empty($_POST['username']) AND isset($_POST['password']) && !empty($_POST['password']) AND $passwordEmail == $password2){

$address = $_POST['address'];

 if(filter_var($address, FILTER_VALIDATE_EMAIL) != false) {
header("location: registration.php?remarks=successEmail&college=$college&fname=$fname&lname=$lname&contact=$contact&username=$username");
}

else{
header("location: registration.php?remarks=failedEmail&college=$college&fname=$fname&lname=$lname&contact=$contact&username=$username");
}

最终编辑:我复制了我发现的这个例子,只是更改了变量名称,现在它可以正常工作。

<?php
$email = "john.doe@example.com";

if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
  echo("$email is a valid email address");
} else {
  echo("$email is not a valid email address");
}
?> 

3 个答案:

答案 0 :(得分:4)

您的!位置错误。

if(filter_var($address, FILTER_VALIDATE_EMAIL) !== false) {

通过将它放在函数名之前,如果filter_var()的返回值与false相同且相同,则表示“”。这会给你true === false当然是假的。

你的意思是“如果filter_var()的返回值等于false且类型”。这给了你true !== false,这当然是真的。

或简化它:

if(filter_var($address, FILTER_VALIDATE_EMAIL)) {

答案 1 :(得分:1)

您正在使用filter_var TWICE 这就是为什么它总是会失败

Set<Integer> bSet = new HashSet<Integer>();
for (int n : B) {
    bSet.add(n);
}
for (int n : A) {
    if (bSet.contains(n)) {
        return n;
    }
}
// If you get here, arrays have no elements in common

变量if(!filter_var($address, FILTER_VALIDATE_EMAIL) === false) { 已被修改为之前行中的布尔值:

$address

$address = filter_var($address, FILTER_SANITIZE_EMAIL); 包含$addressfalse值,而不是电子邮件字符串!

哦,当然,就像John Conde说的那样,你在错误的地方使用了true

答案 2 :(得分:0)

我遇到了同样的问题。我发现else低于}。当我在}验证工作后面移动它时。

错误的代码:

    if(filter_var($em, FILTER_VALIDATE_EMAIL)){

            $em = filter_var($em, FILTER_VALIDATE_EMAIL);

   }

    else{
        echo "Invalid email format";
    }

工作代码:

    if(filter_var($em, FILTER_VALIDATE_EMAIL)){

            $em = filter_var($em, FILTER_VALIDATE_EMAIL);

            //Check if email already exists

    }else{
        echo "Invalid email format";
    }