php
  • forms
  • validation
  • pdo
  • 2015-10-23 139 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。我必須警告說,這顯然不會像純粹的客戶端驗證那樣敏感,但是,一遍又一遍地定義所有這些驗證規則是無聊的。這就是爲什麼我們使用框架來緩解這些天的痛苦......

    相關問題