如何在适当的地方添加PHP验证?

时间:2011-08-17 06:24:27

标签: php

我在php中设计注册表单。我想在我的表单中添加一些验证。验证与require字段验证有关。这是我的代码。

<?php
   include('connect.php');
    if(isset($_REQUEST['Register']))
    {

         $error='';//initialize $error to blank
  if(trim($_POST[userid])==''){
      $error.="Please enter a username!<br />"; //concatenate the $error Message with a line break 
  }
  if(trim($_POST[password])==''){
      $error.="Please Enter password! <br />";//concatenate more to $error  
  } 
  if(trim($_POST[email])=='')
  {
    $error.="Please Enter email address !<br />"; 
  }
  else
   {
        if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $_POST[email])) { 
        $error="The e-mail you entered was not in the proper format!"; 

        }
    }
    if(trim($_POST[regAs])=='NULL')
  {
    $error.="Please select Register As !<br />"; 
  }

  if($error!='')
  {
    echo "<span style=color:red>$error</span>";
    //Hmmmm no text is in $error so do something else, the page has verified and the email was valid
    // so uncomment the line below to send the user to your own success page or wherever (swap  
     //yourpage.php with your files location). 
     //echo "script type=\"text/javascript\">window.location=\yourpage.php\"<script>";  
   }
   else
   {
           $userid=$_REQUEST['userid'];
        $name=$_REQUEST['name'];
       $password=$_REQUEST['password'];
       $repassword=$_REQUEST['repassword'];
       $email=$_REQUEST['email'];
       $regAs=$_REQUEST['regAs'];
       if($password!=$repassword)
        {
           echo "<script>alert('both are diferent password')</script>";
        }
       else
        {

         mysql_query("insert into login(userid,name,password,email,regAs)  values('$userid','$name','$password','$email','$regAs')");
        }   
   }                










    }
?>
<html>
<head></head>
<body>
<form action="" method="post" name="f">
<table align="center">
<tr>
<td>User ID :</td><td>
<input type="text" name="userid" value=""></td>
</tr>
<tr>
<td>Name :</td><td>
<input type="text" name="name" value=""></td>
</tr>
<tr>
<td>Password : </td>
<td><input type="password" name="password" value=""></td>
</tr>
<tr>
<td>Re-Enter Password : </td>
<td><input type="password" name="repassword" value=""></td>
</tr>
<tr>
<td>Email id :</td><td>
<input type="text" name="email" value=""></td>
</tr>
<tr>
<td>Register As :</td><td>
<select id="regAs" name="regAs">
<option value="NULL">SELECT</option>
<option value="Artist">Artist</option>
<option value="Buyer">Buyer</option>
</select></td>
</tr>
<tr>
<td></td>
<td><input type="submit" name="Register" value="Register"</td></tr>
</table>
</form>

</body>
</html>

这是检查验证的输出屏幕。这些错误消息将在第一行出现。但我希望每一行都必须出现错误。例如,如果用户未输入电子邮件,则必须在电子邮件文本框前显示错误。请建议我该怎么做..?

2 个答案:

答案 0 :(得分:1)

如果您希望错误位于正确的表单字段前面,那么您将不知何故必须在HTML中的正确位置获取错误。最简单的解决方案是为每个可能的表单字段创建变量或数组节点,并在必要时向其中插入错误消息。我举一个简短的例子:

<?php
include('connect.php');
if(isset($_REQUEST['Register'])) {
    $errors = array(
        'email'    => '',
        'username' => '',
        //etc...
    );

    if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $_POST[email])) { 
        $error['email'] = "The e-mail you entered was not in the proper format!"; 
    }
}
?>

然后在你的HTML中:

<tr>
  <td>Email id :</td>
  <td>
    <input type="text" name="email" value="">
    <?php echo $error['email']; ?>
  </td>
</tr>

此外,请勿使用eregi,它是deprecatad。请改用preg_match

答案 1 :(得分:0)

您可以在验证每个字段时创建包含错误的数组...

// Might as well define them all so we don't have to use isset() later
// This isn't necessary, it just makes the echo logic easier
foreach ($_POST as $k => $v) {
    $errors[$k] = array(); // No error yet
}

if ( ! valid_email($_POST['email'])) {
    // Add an error to the array
    $errors['email'][] = 'The email address is not valid.';
}

...然后回显HTML中的错误:

<tr>
  <td>Email id :</td>
  <td>
    <input type="text" name="email" value="">
    <?php echo implode(', ', $errors['email']); ?>
  </td>
</tr>

我用implode()用逗号分隔邮件,做任何适合你的事情。我假设你要为每个字段收集多个错误。如果每个字段只需要一个错误,请考虑为每个字段使用字符串而不是数组。

相关问题