2012-12-14 94 views
0

好吧,我不知道什麼是不工作。我知道我的表單驗證工作正常,因爲我所有的其他函數都能正常工作,但我設置的消息是否爲真或假,並且沒有一個顯示出來,所以我覺得它正在跳過驗證規則,這很奇怪。 。CodeIgniter num_rows()不起作用?

$this->form_validation->set_rules('region', 'required|valid_region'); 

我的庫文件夾中的MY_Form_validation.php規則。庫首先被加載。正如我所說的,我所有的其他驗證都正常工作,例如我的reCaptcha和所有內容。

function valid_region($str) { 
     $this->load->database(); 
     if($this->db->query('SELECT id 
       FROM region 
       WHERE name = ? 
       LIMIT 1', array($str))->num_rows() == 0) { 
      //not a valid region name 
      $this->set_message('valid_region', 'The %s field does not have a valid value!'); 
      return false; 
     } 

     $this->set_message('valid_region', 'Why is it validating?'); 
    } 

無消息都會將讓我有一種感覺,沒有什麼是驗證!

+1

http://stackoverflow.com/questions/8181779/creating-a-custom-codeigniter-validation-rule –

回答

3

set_rules()函數有3個參數

  1. 字段名稱 - 你給表單域的確切名稱。
  2. 該字段的「人類」名稱將插入錯誤消息中。 例如,如果您的字段被命名爲「用戶」,您可能會給它一個人名爲「用戶名」的 。注意:如果您希望字段名稱爲 存儲在語言文件中,請參閱翻譯字段名稱。
  3. 此表單字段的驗證規則。

您將驗證規則作爲第二個參數。這就是驗證沒有運行的原因。試試這個:

$this->form_validation->set_rules('region', 'Region', 'required|valid_region'); 
2

代替

$this->form_validation->set_rules('region', 'required|valid_region'); 

使用自定義的驗證規則時嘗試

$this->form_validation->set_rules('region', 'required|callback_valid_region'); 

你應該使用

回調預先設置的功能名稱。

UPDATE

並使用

$this->form_validation->set_message 

代替

$this->set_message 

function valid_region

使用return true當驗證是全成

+1

@Peanut被擴展核心驗證類和驗證功能有已在擴展類「MY_Form_validation」中聲明。所以他不必用'callback_'來預先設置函數名稱 – Stanley

0
$this->form_validation->set_rules('region', 'Region', 'required|valid_region'); 

function valid_region() { 
    $str = $this->input->post('name_of_input'); 
    $this->load->database(); 
    if($this->db->query('SELECT id 
      FROM region 
      WHERE name = ? 
      LIMIT 1', array($str))->num_rows() == 0) { // why compare "=" between `name` field and array() ? 
     //not a valid region name 
     $this->form_validation->set_message('valid_region', 'The %s field does not have a valid value!'); 
     return false; 
    } 

    $this->form_validation->set_message('valid_region', 'Why is it validating?'); 
    return true; 
}