【问题标题】:Some little PHP questions一些 PHP 小问题
【发布时间】:2014-02-01 18:01:07
【问题描述】:

我的脚本受到了很多批评,我正在使用我的寄存器:

(empty($_POST['email'])) 

有些人说这不好,有更好的选择吗?

我也在使用 preg_march 进行电子邮件验证:

if (preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $_POST['email'])) { 

有人说我需要使用Filter_validate,有人告诉我使用strlen 有什么答案吗?

最后:我正在使用以下方式发送激活电子邮件:

mail($Email, 'Activeer je account!', $message, 'Van: NoReply@RubyCMS.com');

这有什么问题吗?人们一直说我需要使用 phpmailer 类,但我什至不知道那是什么......

谢谢

【问题讨论】:

  • “谁说不好”---你为什么不问他们为什么不好呢?作为一个新手开发者不要只是盲目地相信每个人,而需要一个人来解释你出了什么问题
  • Here's more info on filter_var 在另一个问题中。 emptystrlen 在你使用 filter_var 时变得无关紧要
  • @sjagr:不,它没有
  • @zerkms 好点。向其他人解释您为什么要纠正我:如果根本没有发送$_POST['email'],那么filter_var 会在尝试访问未定义的变量时中断。 if (!empty($_POST['email']) 之前的 filter_var 会阻止这种情况。

标签: php


【解决方案1】:

我会说你应该使用它可以给你的所有可能的语言好处。

if(filter_var($email, FILTER_VALIDATE_EMAIL)){

很好。

当您使用preg_match 时,您应该知道regexp 很好。如果你不擅长这些,总是有可能失败的。

关于mail,这取决于您应该发送多少电子邮件。如果每小时一封电子邮件,这不是问题。如果循环中有很多字母 - 最好找到其他解决方案。

【讨论】:

    【解决方案2】:
    1. 使用if( isset($_POST['field']) && !empty($_POST['field']) ) 来避免讨厌的“未定义索引”问题/消息。
    2. 用于完全符合 RFC 的电子邮件验证的“一个正则表达式来统治所有这些”有几十行,而您的则不是。因此,您的正则表达式并不完全符合 RFC。 FILTER_VALIDATE_EMAIL 完全符合 RFC

    而让你使用strlen() 验证电子邮件地址的人需要撤销他的互联网权限。

    【讨论】:

    • 使用!empty()就不需要isset()
    • 嗯,你至少需要一个长度为 3 的电子邮件地址,不是吗:-)
    • 使用if (trim(不是更好吗?
    • @zerkms 如果您在未定义的索引上使用empty(),您将收到未定义的索引通知,因此isset() 首先出现。
    • @Sammitch From the docs:“如果变量不存在,则不会生成警告。这意味着empty()本质上是与!isset($var) || $var == false的简明等效。”
    【解决方案3】:

    filter_var() 几乎与您所能获得的一样好,而无需向附有确认链接的地址发送电子邮件。您可以执行 DNS 和 MX 记录检查之类的操作,但它们会增加大量开销,并且还会给您带来误报。

    if(!filter_var($email, FILTER_VALIDATE_EMAIL)){ 
        // bad email
    }
    

    【讨论】:

      猜你喜欢
      • 2014-03-10
      • 2016-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多