php
  • forms
  • validation
  • pdo
  • 2015-10-23 128 views 1 likes 
    1

    在这里我有一个关于验证注册表单验证在PHP

    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"; 
          } 
      } 
      
    +1

    1.是的,这很好,只要它的可读性(这是)。 2.如果你愿意,客户端代码将在浏览器中以另一种语言(js)运行,因此不会发生冲突。你可能会发现你有更好的组织,如果你把它分成一个js文件虽然 – Steve

    +1

    你应该单独测试每个字段,并收集数组中的错误消息,一次输出所有。但是,如果您也使用JavaScript进行验证,那么只要后端是安全的,就可以忽略此步骤,将重点放在项目中的其他重要事项上。 – Ultimater

    回答

    0

    当您要验证这么多的领域,你将需要JS或jQuery的验证,而不是刷新页面,因为这可能是恼人的用户,该网页会与不同的错误重装。最好的选择是使用jQuery验证。

    +0

    是的我正在使用javascript的客户端 –

    +0

    请张贴您的HTML以及进一步协助。 –

    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"; 
    } 
    
    +0

    我想你的意思是'$ _POST ['fname']'不是'$ _POST ['name']''''ageErr'不是'$ nameErr'。 – Ultimater

    +0

    没有它的只是模型这个条件适用只是改善.. –

    1

    1)太多的if-else语句是设计不良一个很好的迹象。你应该使用一个验证类或写你自己的。有点偏离主题,但这段代码让我想起了90年代的那些日子:)为什么你至少不使用微框架而不是重新发明轮子......

    2)您可以检测,如果该呼叫与AJAX或没有作出:

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

    所以在控制你收集的验证错误的数组,如果它是一个AJAX请求,将其转换成JSON和做AJAX验证(检查jQuery的验证),如果不是简单地处理错误,因为你会不带ajax。我必须警告说,这显然不会像纯粹的客户端验证那样敏感,但是,一遍又一遍地定义所有这些验证规则是无聊的。这就是为什么我们使用框架来缓解这些天的痛苦......

    相关问题