从表单提交中排除特定的电子邮件地址

时间:2016-05-12 08:40:24

标签: php html forms

我在其他地方看过这个问题,但我不确定如何对我的特定表单进行一些验证,这将排除特定的电子邮件地址。如果输入电子邮件地址,我希望该表单被拒绝,请发送电子邮件至anything@anything.com。请参阅下面的代码。还有更多,但我相信这是相关部分...

$errors = array();

// Remove $_COOKIE elements from $_REQUEST.

if(count($_COOKIE)){
   foreach(array_keys($_COOKIE) as $value){
       unset($_REQUEST[$value]);
   }
}

// Validate email field.

if(isset($_REQUEST['email']) && !empty($_REQUEST['email']))
{
    $_REQUEST['email'] = trim($_REQUEST['email']);

    if(substr_count($_REQUEST['email'],"@") != 1 ||
       stristr($_REQUEST['email']," ") || 
       stristr($_REQUEST['email'],"\\") || 
       stristr($_REQUEST['email'],":") ){
           $errors[] = "Email address is invalid";
    }
    else{
        $exploded_email = explode("@",$_REQUEST['email']);
        if (empty($exploded_email[0]) || 
            strlen($exploded_email[0]) > 64 || 
            empty($exploded_email[1])){
               $errors[] = "Email address is invalid";
        }
        else{
           if(substr_count($exploded_email[1],".") == 0){
               $errors[] = "Email address is invalid";
           }
           else{
               $exploded_domain = explode(".",$exploded_email[1]);
               if(in_array("",$exploded_domain)){
                   $errors[] = "Email address is invalid";
               }
               else{
                   foreach($exploded_domain as $value){
                       if(strlen($value) > 63 || 
                          !preg_match('/^[a-z0-9-]+$/i',$value)){
                              $errors[] = "Email address is invalid"; 
                              break;
                        }
                   }
               }
            }
          }
       }
}

1 个答案:

答案 0 :(得分:0)

如果我理解您的代码,主要部分的目标是验证用户提供的电子邮件的格式。

首先,有一个内置的php函数(PHP> = 5.2):filter_var()。您可以使用以下代码替换所有这些代码块:

$email = trim($_REQUEST['email']);
if (!filter_var($email_a, FILTER_VALIDATE_EMAIL)) {
    $errors[] = "Email address is invalid";
}

然后,如果你想查看电子邮件不在黑名单中,只需执行以下操作:

// Fill this array the way you want : hard-write it, fetch from database... 
$blacklist = array("email1@gmail.com", "email2@gmail.com"); 
// Put in lower case for easiest comparison
$email = strtolower($email);
if (in_array($email, $blacklist)) {
    $errors[] = "Email address is blacklisted";
}