2012-12-22 41 views
1

我最近爲自己做了一個非常簡單的MVC'ish框架。現在我試圖用一些類來擴展這個框架,這樣我可以在將來節省一些時間。我現在想要做的是一個表單驗證類。我認爲它工作得很好,直到我做了一個函數來檢查字符串的最小長度。PHP表單驗證返回奇怪的值

類:

<?php 
/** 
* Form Validation Class 
*/ 
class formValidation 
{ 
    private $errorMessages = array(); 
    private $method; 
    public $errorString; 
    public $validationRules = array(); 

    public function setMethod($method) 
    { 
     $this->method = $method; 
    } 
    public function setRules($rules) 
    { 
     $this->validationRules = $rules; 
    } 
    public function run() 
    { 
     if (!empty($this->method)) { 
      foreach ($this->method as $fieldname => $fieldvalue) { 
       foreach ($this->validationRules as $rule) { 
        if ($rule['field'] == $fieldname) { 
         foreach ($rule as $option => $rulevalue) { 
          switch ($option) { 
           case 'required': 
            if (!$this->checkRequired($fieldvalue)) { 
             $this->errorMessages[] = $rule['name'] . " is a required field"; 
            } 
            break; 
           case 'letters_numbers': 
            if (!$this->checkLettersNumbers($fieldvalue)) { 
             $this->errorMessages[] = $rule['name'] . " may only contain letters and numbers"; 
            } 
           case 'min_length': 
            if (!$this->checkMinLength($fieldvalue, $rulevalue)) { 
             $this->errorMessages[] = $rule['name'] . " must contain at least $rulevalue characters"; 
            } 
          } 
         } 
        } 
       } 
      } 
      if (!empty($this->errorMessages[0])) { 
       return false; 
      } else { 
       return true; 
      } 
     } else { 
      return false; 
     } 
    } 
    // Checks 
    private function checkRequired($value) // Makes a field mandatory 
    { 
     if ($value == "") { 
      return false; 
     } else { 
      return true; 
     } 
    } 
    private function checkLettersNumbers($value) // Allow Letters and Numbers only 
    { 
     return preg_match('/^[A-Za-z\s ]+$/', $value); 
    } 
    private function checkMinLength($value, $minlength) // Check input for minimum length 
    { 
     if (strlen($value) < $minlength) { 
      return false; 
     } else { 
      return true; 
     } 
    } 
    // Error Handling Functions 
    private function makeErrorString($prelimiter = '<li>', $delimiter = '</li>') // Build all the errors into a string 
    { 
     if (!empty($this->errorMessages[0])) { 
      $errors = ""; 
      foreach ($this->errorMessages as $message) { 
       $errors .= $prelimiter; 
       $errors .= $message; 
       $errors .= $delimiter; 
      } 
      $this->errorString = $errors; 
      return true; 
     } 
    } 
    public function ValidationErrors() // Return the error string 
    { 
     if ($this->makeErrorString()) { 
      return $this->errorString; 
     } 
    } 
    /** 
    * End of Class 
    **/ 
} 
/** 
* End of formValidation.php 
**/ 
?> 

而我的控制器的文件:

<?php 
/** 
* Homepage Controller 
* @copyright 2012 
*/ 
class home extends SimpleController 
{ 
    public function index() 
    { 
     $view = new view('home'); 
     $val = new formValidation(); 
     $val->setMethod($_POST); 
     $rules = array(
         array(
          'field' => 'test', 
          'name' => 'Test', 
          'required' => true, 
          'letters_numbers' => true, 
          'min_length' => '5' 
         ), 
         array(
          'field' => 'bla', 
          'name' => 'Trololol', 
          'required' => true 
         ) 
        ); 

     $val->setRules($rules); 
     if (!$val->run()) { 
      echo $val->ValidationErrors(); 
     } 
    } 
} 
?> 

我認爲我有2個字段,測試和BLA的形式。當我提交表單時,它是空的,checkMinLength()函數返回值爲2的:

測試必須至少包含1個字符 測試必須至少包含5個字符

首先,它從哪兒得到的是1和第二個爲什麼它顯示2個相同功能的消息?我只是無法找出原因。

希望你們能幫助我! (控制器中的回聲僅供演示使用)

謝謝!

回答

2

您忘記了您的switch中的break,因此您正在從letters_numbers箱子跌入min_length箱子。

「規定值」爲您letters_numbers規則是true,其轉換爲字符串作爲1

+0

感謝英雄約翰!你救了我的一天!我真是一個愚蠢的錯誤,嗚! –