电子邮件验证器不适用于PHP

时间:2015-04-21 01:09:22

标签: php email-validation

我是php的新手,我正在处理登录和注册表单。我创建了一个功能来检查电子邮件地址是否有效,即使我没有收到任何错误,但它似乎无法正常工作。如果这里的任何人都可以查看我的代码,那将是一个很大的帮助。

     <?php
      $firstname="";
      $lastname="";
      $email="";
      $password="";
      $confirm_password="";
      $error= array("firstname"=>"",
                    "lastname" =>"",
                     "email"    =>"",
                     "password" =>"",
                      "confirm_password"=>""    );

     function correct_email(){  
         if(!empty($email)){
           if(filter_var($email,FILTER_VALIDATE_EMAIL)){
              return true;
               }else{
                 echo"your email address is not valid";
                      }
                          }
                   return false;
                   }

           function correct_password(){
                  global $error;
                 if(empty($error['password'])){
      if(strcmp($_POST['password'],$_POST['confirm_password'])==0){
        return true;
        }else{
           $error['password']="Password didnot match";
           $error['confirm_password']="Password didnot match";
           }
          }
       return false;
        }

         function validate(){
         global $error;
         $valid= true;
          foreach($_POST as $key=>$value){
            if(empty($value)){
            $valid=false;
            $error[$key]="This field is blank";
            }
           }
        return correct_password() && correct_email() && $valid;
          }


         if($_SERVER['REQUEST_METHOD']=="POST"){
         $firstname=$_POST['firstname'];
         $lastname=$_POST['lastname'];
          $email=$_POST['email'];
         $password=$_POST['password'];
          $confirm_password=$_POST['confirm_password'];
      if(validate()){
             echo "registration succesful";
            die;
            }
          else{
           echo "couldnot register";

             }
              }
       ?>
<html>
<head>
<title>Registration</title>
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body>
   <h1>New Memebers Registration</h1>
   <form method="post" action="register.php">
    <table>
 <tr>
   <td>Firstname:</td>
   <td><input type="text" name="firstname" value="<?= $firstname ?>">
    <?=      $error['firstname'] ?> </td>
   </tr>
   <tr>
  <td>Lastname:</td>
  <td><input type="text" name="lastname" value="<?= $lastname ?>">
           <?= $   error['lastname'] ?> </td>
   </tr>
   <tr>
<td>Email:</td>
<td><input type="text" name="email" value="<?= $email ?>"> 
        <?= $error['email'] ?> </td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="password" value="<?= $password ?>"> 
       <?=   $error['password'] ?> </td>
</tr>
<tr>
<td>Confirm Password:</td>
<td><input type="password" name="confirm_password" 
  value="<?=    $confirm_password ?>"> 
       <?= $error['confirm_password'] ?>  </td>
</tr>
<tr>
  <td colspan="2" class="pullright">
         <input type="submit" value="Register">              </td>
 </tr>
  </table>
  </form>
  </body>
   </html>

2 个答案:

答案 0 :(得分:4)

  1. 您没有将$email传递给您的函数,因此由于范围而无法在您的函数中使用它。请参阅variable scope以了解详情。

  2. 如果电子邮件地址为空,则
  3. filter_var()将返回false,因此您无需检查该内容。

  4. 你不应该回应你的功能。只需返回true或false,让代码执行错误处理。

  5. 但是,如果您坚持在代码中设置错误消息,那么您在代码中会反映错误消息,而不是像代码中其他位置一样在$error数组中捕获错误消息。 / p>

  6. 默认情况下您可以返回true,并且只会在出错时返回false,这会缩短您的代码。

  7. 你的职能:

    correct_email($email) {  
         if (!filter_var($email,FILTER_VALIDATE_EMAIL)) {
              $error['email'] = "your email address is not valid";
              return false;
         }
         return true;
    }
    

    致电:

    return correct_password() && correct_email($email) && $valid;
    

    我建议删除对global的任何引用,并将所有需要的变量作为参数传递,因为使用global被认为是一种错误的编程习惯。

答案 1 :(得分:2)

变量超出了函数范围。

你需要定义如下函数:

function correct_email($email)...

当你调用它时首先解析电子邮件到validate()然后解析到correct_email:

 correct_email($email)

或使用全局

correct_email($_POST['email'])