2017-06-08 68 views
-1

请检查我的代码。我有2个字段验证电子邮件不知道如何解决这个关于FILTER_VALIDATE_EMAIL的问题

一个是

if ($email == NULL) { 
      $error['email'] = "email is missing"; 
     } 

另一个是

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
      $error['emailfilter'] = "email is Invalid"; 
    } 

但我的问题是,当电子邮件字段为空/空。我发现那两个交战是表演。 “电子邮件缺失”&“电子邮件无效”;我只想要一个交战会显示。例如,如果电子邮件提交空白/空白。它只会显示“电子邮件丢失”不会显示“电子邮件无效”,当电子邮件无效时将显示“电子邮件无效”。以下是我的完整代码。

<?php 
    if (isset($_POST['contact'])) { 

     $warning = array(); 
     $firstname = $_POST['firstname']; 
     $lastname = $_POST['lastname']; 
     $email = $_POST['email']; 
     $msg = $_POST['message']; 
     $to = "[email protected]"; 
     $sub = "you got a msg"; 
     $headers = "from: $email"; 

     if ($firstname == NULL) { 
      $error['fname'] = "firstname is missing"; 
     } 
     if($lastname == NULL){ 
      $error['lname'] = "Last name is missing"; 
     } 
     if ($email == NULL) { 
      $error['email'] = "email is missing"; 
     } 

     if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
      $error['emailfilter'] = "email is Invalid"; 
     } 

     if ($msg == NULL) { 
      $error['msg'] = "message is required"; 
     } 
     if (count($error) == 0) { 
      mail($to, $sub, $msg, $headers); 

      $success = "Message Submited"; 
     } 
    } 


?> 

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>conatact</title> 
    <link rel="stylesheet" href="style.css"> 
</head> 
<body> 
    <form action="" method="POST"> 
     <input type="text" name="firstname" Placeholder="First Name"><br /> 
     <p class="error"><?php if (isset($error['fname'])) { 
      echo $error['fname']; 
     }?></p> 
     <input type="text" name="lastname" Placeholder="Last Name"><br /> 
     <p class="error"><?php if (isset($error['lname'])) { 
      echo $error['lname']; 
     }?></p> 
     <input type="email" name="email" Placeholder="Email"><br /> 
     <p class="error"><?php if (isset($error['email'])) { 
      echo $error['email']; 
     }?></p> 
     <p class="error"><?php if (isset($error['emailfilter'])) { 
      echo $error['emailfilter']; 
     }?></p> 
     <textarea name="message" cols="30" rows="10"></textarea><br /> 
     <p class="error"><?php if (isset($error['msg'])) { 
      echo $error['msg']; 
     }?></p> 

     <input type="password" name="password" Placeholder="Password"><br /> 
     <input type="submit" value="send" name="contact"> 

    </form> 
    <h2 class="error"><?php if (isset($success)) { 
      echo $success; 
     }?></h2> 
</body> 
</html> 
+1

[elseif](https://secure.php.net/manual/en/control-structures.elseif.php)? – FirstOne

+0

为什么不使用验证库? vlucas/valitron是一个体面的 – geggleto

+0

为了您自己和他人的安全,请阅读正确处理用户输入。一个开始的地方是[w3schools](https://www.w3schools.com/php/php_form_validation.asp)。 –

回答

0

您想为此使用elseif,它只会在第一个条件不匹配时触发。

if ($email == NULL) { 
    $error['email'] = "email is missing"; 
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
    $error['emailfilter'] = "email is Invalid"; 
} 

这将检查的第一个条件,他们有一个电子邮件,如果没有它会填充$error['email'],如果电子邮件有一个值,那么它会在电子邮件进行filter_var,以检查它的有效性。

+0

它工作100%。非常感谢。 – Musarrof