2015-02-10 55 views
-1

我正在嘗試開發表單驗證系統。但問題是即使沒有用戶提供的驗證通過所需的數據。找不到問題出在哪裏。即使出現錯誤,PHP表單驗證也會通過

這是我的表單驗證類

class Validation 
{ 

private $_passed = false, 
     $_errors = array(), 
     $_db = null; 

public function __construct() { 
     $this->_db = DB::getInstance(); 
    } 
public function check($source, $items= array()) { 
     foreach ($items as $item => $rules) { 
      foreach ($rules as $rule => $rule_value) { 
       $value = $source[$item]; 

       if ($rule === 'required' && empty($value)) { 
        $this->addError("{$item} is required"); 
       } else { 

       } 
      } 
     } 

     if (empty($this->_errors)) { 
      $this->_passed = true; 
     } 
     return $this; 

    } 

private function addError($error) { 
     $this->errors[] = $error; 
    } 
public function errors() { 
     return $this->_errors; 
    } 
public function passed() { 
     return $this->_passed; 
    } 
} 

而且這是一個包含HTML表單的形式頁面。

require_once 'core/init.php'; 

if (Input::exists()) { 
    $validate = new Validation(); 
    $validation = $validate->check($_POST, array(
     'username' => array(
      'required' => true, 
      'min' => 2, 
      'max' => 20, 
      'unique' => 'users' 
      ), 
     'password' => array(
      'required' => true, 
      'matches' => 'password' 
      ), 
     'password_again' => array(
      'required' => true, 
      'min' => 6 
      ), 
     'name' => array(
      'required' => true, 
      'min' => 2, 
      'max' => 60 
      ), 
     )); 
    if ($validation->passed()) { 
     //register new user 
     echo "passed"; //this passes even though users provides no data 
    } else { 
     print_r($validation->errors()); 
    } 
} 

所以,我得到的是即使用戶在不提供任何數據在屏幕上的回波通過。它應該拋出錯誤,而不是。請幫忙。謝謝

回答

1

addError寫在$this->errors,而其他方法使用$this->_errors。 (帶下劃線)。該_errors陣列將保持爲空,所以_passed將在下面的語句設置爲true:

if (empty($this->_errors)) { 
    $this->_passed = true; 
} 
+0

像這樣的錯誤很容易被發現。即使沒有像xdebug這樣的花哨工具。 '_passed'只在一個地方設置爲true,並且只有當_errors是空時。 '_errors'也寫在一個地方,那個地方正是錯誤所在。您可以使用'var_dump'來顯示有關變量及其內容的詳細信息。 – GolezTrol 2015-02-10 20:26:18

+0

非常感謝。我正在快速移動並檢查錯別字,但找不到任何東西。我會記下你的筆記。感謝你的幫助 – 2015-02-10 20:30:06

相關問題