2017-02-11 66 views
0

我有一個表單有一個輸入字段名稱=「uid」type =「text」 一個表'tbl_users'並且有一個'uid'列 我想驗證$ this-> input-> post('uid')(如果它已經在數據庫列中)。碼給出波紋管: -Codeigniter表單驗證回調函數問題

控制器/ File1.php --in VALIDATE_DATA()

$this->load->model('model1'); 
$data['validation_result'] = $this->model1->validate_data(); 
$this->load->view('view1'); 

型號/ model1.php

public $set_of_rules = [ 
    'item1'=>[ 
    'field'=>'uid', 
    'label'=>'User ID', 
    'rules'=>'trim|required|callback_validateUID', 
    'field'=>'uid', 
    'errors'=>[ 
     'required'=>'uid must be filled in', 
     'validateUID'=>'UID does not exist, please input valid UID', 
    ], 
    ], 
]; 
public validate_data() 
{ 
$this->form_validation->set_rules($this->set_of_rules); 
if(!$this->form_validation->run()) 
    return validation_errors() ; 
} 
else 
{ 
    /*$this->db->do_some_database_tasks */ 
    return 'success' ; 
} 
public validateUID() 
{ 
    var_dump('UID validation started...'); 
    $uid = $this->input->post('uid'); 
    $result = $this->db->where(['uid'=>$uid])->get('tbl_users')->row(); 
    if($result!=NULL) return TRUE; 
    else return FALSE; 
} 

問題是,驗證規則 'callback_validateUID' 不沒有執行[因爲我已經把一個腳本放在裏面,這樣我就可以理解驗證已經運行了回調函數],但是顯示了驗證錯誤消息('UID不存在,請輸入有效的UID'),儘管如果我將輸入字段留空,'required'不是c嘿!

任何人都可以請幫忙嗎?

+0

$這個 - > form_validation-> set_rules( 'UID', '用戶ID', '必要'); insted of $ this-> form_validation-> set_rules($ this-> set_of_rules); –

+0

其實還會有一些其他的規則也... 所以我不想改變設置一組數組中的規則, 和事實上它是一樣的... – Amin

+0

好的,你可以試試我的ans –

回答

0

試試這個模型

function SetofRules() { 
    $rules = array(
     array('field'=>'uid', 'label'=>'User', 'rules'=>'trim|required'), 
     array('field'=>'password', 'label'=>'Password', 'rules'=>'trim|required'), 
    ); 


    $this->load->library('form_validation'); 
    $this->form_validation->set_rules($rules); 

    $errors = array(); 
    if ($this->form_validation->run() == FALSE) 
     foreach ($rules as $r) 
     $errors[$r['field']] = $this->form_validation->error($r['field']); 
      if (!$errors['uid']) 
     if ($this->userPrefix($this->input->post('uid'), 'uid')) 
     $error['uid'] = $this->form_validation->error('uid'); 
     if (!empty($errors)) return $errors; 
    else return false; 
    }