php中的注册表验证

php中的注册表验证,php,forms,validation,pdo,Php,Forms,Validation,Pdo,这里我有一些关于验证的问题 下面的代码运行良好,但是使用这么多的elseif可以吗 我还将使用客户端验证,这样就可以在同一页上同时使用服务器端验证和客户端验证代码 if( $firstname == "" ) { $er='Enter your First name'; } elseif( $lastname == "" ) { $er='Enter your Last name'; } elseif( $firstname == $lastname ) { $er='First n

这里我有一些关于验证的问题

  • 下面的代码运行良好,但是使用这么多的
    elseif
    可以吗
  • 我还将使用客户端验证,这样就可以在同一页上同时使用服务器端验证和客户端验证代码

    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";
      }
    }
    
    if($firstname==“”){
    $er='输入您的名字';
    }
    elseif($lastname==“”){
    $er='输入您的姓氏';
    }
    elseif($firstname==$lastname){
    $er='First name和last name不能相同';
    }
    elseif($username==“”){
    $er='输入您的用户名';
    }
    elseif($password==“”){
    $er='输入您的密码';
    }
    elseif(strlen($password)<6){
    $er='Password必须超过6个字符';
    }
    elseif($password!=$password2){
    $er='Password和confirm密码不匹配!';
    }
    elseif($email!=”“&&!preg_match(“/^([a-zA-Z0-9])+([a-zA-Z0-9\.\u-])*@([a-zA-Z0-9\.\u-])+([a-zA-Z0-9\.\u-]),$POST[“email”])){
    $er='Enter valid email';
    }
    elseif($q->rowCount()>0){/$q是用于从数据库中选择用户名的语句
    $er='用户名'.$username.'已被占用!';
    } 
    elseif($s->rowCount()>0){/$s是用于从数据库中选择电子邮件的语句
    $er='电子邮件'$email.'已注册,请选择其他!';
    }
    否则{
    //插入数据的一些pdo语句
    如果($stmt->rowCount()==1){
    标题(“位置:userarea.php”);
    } 
    否则{
    回声“错误”;
    }
    }
    

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

    试试以下方法:

    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";
    }
    
    1) 如果else语句过多,则表明设计不佳。您应该使用验证类或编写自己的验证类。有点离题,但这段代码让我想起了20世纪90年代的日子:)你为什么不至少使用一个微框架,而不是一次又一次地重新发明轮子

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

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

    因此,在控制器中,您将在一个数组中收集验证错误,如果是AJAX请求,则将其转换为JSON并进行AJAX验证(检查jquery validator),如果不是像处理AJAX那样简单地处理错误。我必须警告一下,这显然不如纯客户端验证那么灵敏,但是,一遍又一遍地定义所有这些验证规则是很无聊的。这就是为什么我们现在使用框架来减轻痛苦…

    1。是的,那很好,只要它可读(这是)。2.如果愿意,客户端代码将在浏览器中以另一种语言(js)运行,因此没有冲突。您可能会发现,如果您将其分离到一个js文件中,您的组织会更好,尽管您应该单独测试每个字段,并在一个数组中收集错误消息,以便一次将它们全部输出。但是如果你也在用JavaScript进行验证,你可以忽略这一步,把重点放在项目中其他重要的事情上,只要后端是安全的,也就是安全的。请发布你的html来进一步帮助。我想你的意思是
    $\u post['fname']
    $\u post['name']和
    $ageErr
    不是
    $nameErr