2013-08-22 66 views
0

林做一個簡單的驗證形式系統(在我的原始PHP MCV框架)在PHP但是我有一個問題我不能修復閱讀所有陣列

我有這樣的代碼

 $credentials = array('name' => 'required', 'password' => 'required|between'); 

    $validator = new Validation; 
    if (!$validator->check($credentials, array(5, 10))) Redirect::to('/login', 'error', $validator->msg); 

然後我班calidator貌似

public function check($fields, $size) 
{ 
    foreach ($fields as $key => $val) 
    { 
     $rule = explode('|', $val); 

     if (in_array('required', $rule)) 
     { 
      if (empty($_POST[$key])) 
      { 
       $this->msg = 'Field '.$key.' is required'; 
       $this->final = false; 
      } 
     } 
     elseif (in_array('between', $rule)) 
     { 
      if (strlen($_POST[$key]) < $size[0]) 
      { 
       $this->msg = 'Filed '.$key.' must be between '.$size[0].' and '.$size[1].' chars'; 
       $this->final = false; 
      } 

      if (strlen($_POST[$key]) > $size[1]) 
      { 
       $this->msg = 'Filed '.$key.' must be between '.$size[0].' and '.$size[1].' chars'; 
       $this->final = false; 
      } 
     } 
    } 

    if (!$final) 
    { 
     return false; 
    } 
    else 
    { 
     return true; 
    } 
} 

的事情是,當我發送這樣的陣列(只有1規則)

$credentials = array('name' => 'required', 'password' => 'between'); 

它工作正常,但如果添加了更多的規則(需要|之間......)我的功能將只與第一個工作,所以在這種情況下,規則之間被忽略......

回答

1

替換爲您elseifif

if (in_array('required', $rule)) 
{ 
    if (empty($_POST[$key])) 
    { 
     $this->msg = 'Field '.$key.' is required'; 
     $this->final = false; 
    } 
} 
// Change this elseif 
elseif (in_array('between', $rule)) 

它的elseif導致要檢查僅第一條規則的含義。如果你有'required|between'那麼第一個if語句將被輸入,所以elseif部分不能。