【问题标题】:bug in php when check mail检查邮件时php中的错误
【发布时间】:2013-07-22 14:40:22
【问题描述】:

我有这个功能

function filtermail($email){
if(filter_var($email,FILTER_VALIDATE_EMAIL)){
    $mail2 = explode('www.',$email);
    if(isset($mail2[1])){
        return 'false2';
    }
    else{
        return true;
    }
}
else{
    return false;
}
}

但是当我给它 big.ma3ih@gmail.com
它返回“1”!
这段代码运行

if($checkmail == 'false2'){
        echo 'ایمیل www ندارد.';
        die();
    }

我的问题是什么!

【问题讨论】:

  • 你能把你发给$checkmail的东西贴在这里吗?
  • $checkmail = filtermail('big.ma3ih@gmail.com');
  • 好吧,如果你把它放到那个函数中。它会返回 TRUE,如果你用 echo 编写它,它将输出 1。你能解释一下你对这个函数的期望以及你需要它做什么吗?
  • 那么为什么 if($checkmail == 'false2'){ echo 'ایمیل www ندارد.';死();这段代码运行?我只是不希望用户放 www。在电子邮件中,因为其中一半是为电子邮件这样做的:|
  • if('false2' == $checkmail) 可能是一件好事,因为这样可以防止您不小心使用单个 = 而不是 == 将 'false2' 分配给 $checkmail。但这并不能解决您的问题。

标签: php function filter


【解决方案1】:

对给定的电子邮件使用 filter_var,您可以取回您的电子邮件地址 (Test here)。这应该在您的第一个 if 条件下为真。爆炸应该返回一个在键 0 处有 1 个元素的数组。所以你的第二个条件导致 false,所以 else 正在工作并返回 true。

更新: 您的问题是 $checkmail 设置为 true,您的条件将 bool 值与字符串值进行比较,因此字符串值转换为 bool 值,在这种情况下为 true。将条件更改为: if ( $mailcheck === 'false2' ){ ...

【讨论】:

  • 最好用strpos找www。在你的字符串中。所以需要explode来解析整个字符串,这需要更多时间。
  • 您的问题是 $checkmail 设置为 true,您的条件将 bool 值与字符串值进行比较,因此字符串值转换为 bool 值,在这种情况下结果为 true。将您的条件更改为: if ( $mailcheck === 'false2' ){ ...
  • 喜欢!它的工作butzi plz把它作为选择最佳答案的答案
猜你喜欢
  • 1970-01-01
  • 2020-11-02
  • 2015-08-10
  • 2011-12-18
  • 2011-07-07
  • 2012-05-18
  • 1970-01-01
  • 2012-03-28
  • 1970-01-01
相关资源
最近更新 更多