2017-02-11 71 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; 
    }