2013-07-18 38 views
1

所以我開始使用MVC。我不使用框架。這只是自我實踐。PHP檢查所有輸入是否設置不起作用?

所以這是我的註冊部分:

protected function _instance() 
    { 
     if ($_POST != null) 
     { 
      /** 
      * Validating if forms are not empty 
      **/ 

      if (self::validateForms()) 
      { 
       echo 1; 
      } 
      else 
      { 
       new Error("One of the forums was empty.."); 
      } 
     } 
    } 

    private static function validateForms() 
    { 
     $inputs = array (
      'username', 'password', 'repassword', 
      'email', 'password_f', 'repassword_f', 
      'display' 
     ); 

     $i = 0; 

     foreach ($inputs as $key) 
     { 
      if (isset($_POST[$key]) && !empty($_POST[$key])) 
      { 
       $i++; 
       if ((int) $i == count($inputs)) 
       { 
        return true; 
       } 
       else 
       { 
        return false; 
       } 
      } 
     } 
    } 

現在,只需檢查輸入設定如果沒有,拋出錯誤。 但它似乎不起作用,因爲它總是運行該錯誤。

$i每次輸入已滿時必須增長,但我不認爲它確實如此。

當我回顯$i時,它只回顯「1」。

爲什麼它只循環一次?

回答

3

問題是在第一次測試後,您正在循環內返回。

foreach ($inputs as $key) 
    { 
     if (isset($_POST[$key]) && !empty($_POST[$key])) 
     { 
      $i++; 
      if ((int) $i == count($inputs)) 
      { 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
     } 
    } 

應該

foreach ($inputs as $key) 
    { 
     if (isset($_POST[$key]) && !empty($_POST[$key])) 
     { 
      $i++; 
     } 
    } 
    if ((int) $i == count($inputs)) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 

或更簡潔

foreach ($inputs as $key) 
    { 
     if (!isset($_POST[$key]) || empty($_POST[$key])) 
     { 
      return false; 
     } 
    } 
    return true; 
+0

我怎麼會錯過!一定很累。非常感謝! –

0

你需要採取的$i檢查出循環,以便它檢查了多少實際上設置好所有投入已經循環。否則,它是第一次檢查,看到它不相等並返回false。

foreach ($inputs as $key) 
{ 
    if (isset($_POST[$key]) && !empty($_POST[$key])) 
    { 
     $i++; 
    } 
} 
if ((int) $i == count($inputs)) 
{ 
    return true; 
} 
else 
{ 
    return false; 
}