注册表格在php验证

时间:2015-10-23 10:58:15

标签: php forms validation pdo

这里我几乎没有关于验证的问题

  1. 下面的代码效果很好,但可以使用这么多elseif吗?
  2. 我也将使用客户端验证,因此我可以在同一页面上同时拥有服务器端验证和客户端验证代码。

    if( $firstname == "" ) {
      $er='Enter your First name';
    }
    elseif( $lastname == "" ) {
      $er='Enter your Last name';
    }
    elseif( $firstname == $lastname ) {
      $er='First name and last name cannot be same';
    }
    elseif( $username == "" ) {
      $er='Enter your username';
    }
    elseif( $password == "" ) {
      $er='Enter your password';
    }
    elseif( strlen($password) < 6 ) {
      $er='Password must be more than 6 characters';
    }
    elseif( $password != $password2 ) {
      $er='Password and confirm password does not match!';
    }
    elseif( $email != "" && !preg_match( "/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $_POST["email"] ) ) {
      $er='Enter valid email';
    }
    elseif($q->rowCount() > 0) { // $q is statement used to select username from db 
      $er='The username '.$username.' is already taken!';
    } 
    elseif($s->rowCount() > 0) { // $s is statement used to select email from db 
      $er='The email '.$email.' is already registered, choose another!';
    }
    else {
      // some pdo statement to insert data 
      if ($stmt->rowCount() == 1) {
        header("Location:userarea.php");
      } 
      else {
       echo "error";
      }
    }
    

3 个答案:

答案 0 :(得分:2)

1)过多的if-else语句很好地表明设计不佳。您应该使用验证类或编写自己的验证类。有点偏离主题,但这段代码让我想起了我们在20世纪90年代的日子:)为什么你不至少使用微框架而不是一次又一次地重新发明轮子......

2)您可以检测是否使用ajax进行呼叫:

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
  ...
}

所以在控制器中你收集数组中的验证错误,如果是AJAX请求将其转换为JSON并执行ajax验证(检查jquery验证器),如果不是简单地处理错误,就像你没有ajax一样。我必须警告,这显然不会像纯客户端验证一样响应,但是,一遍又一遍地定义所有这些验证规则是无聊的。这就是为什么我们现在使用框架来缓解痛苦......

答案 1 :(得分:1)

试试这个:

if (empty($_POST["fname"]))
{
    $nameErr = "Your First Name Is Missing";
}
        else
    {
        $name = $_POST['name'];

        if (!preg_match("/^[a-zA-Z a-zA-Z]*$/", $name))
        $nameErr = "Your Name Is Missing";
}


if (empty($_POST["age"]))
     {
    $ageErr = "Your Age Is Missing";
}
        else
    {
        $age = $_POST['age'];

        if (!preg_match("/^[0-9]*$/", $age))
        $nameErr = "Your Age Is Missing";
}

答案 2 :(得分:0)

当您验证这么多字段时,您将需要JS或jQuery来验证而不是刷新页面,因为这会让用户感到烦恼,因为页面不断重新加载不同的错误。最好的选择是使用jQuery验证。