表单验证回调函数不起作用

时间:2016-01-28 18:28:33

标签: php codeigniter

这是我的COde我检查用户名是否已存在于datbase中  当我验证并提交在数据库中输入的表单重复条目时,我希望如果已存在则显示验证错误

我的控制器

public function index()
{
     if($this->input->post('submit'))   {
        $this->form_validation->set_rules('name', 'User Name', 'callback_checkuser');
        $this->form_validation->set_rules('role', 'Role', 'trim|required');
        $this->form_validation->set_rules('pass', 'Password', 'trim|required');
        if($this->form_validation->run()==TRUE)
           {
               $user['u_name']  =   $this->input->post('name');
               $user['role']    =   $this->input->post('role');
               $user['password']=   md5($this->input->post('pass'));
               $u_id =  $this->custom_model->add_user($user);
               if($u_id){
                  $data['msg']  =   'Successfully Created!!!!';
               }
           }
        }
     $this->load->template('add_user', $data);
}

function checkuser($name) {
    if($this->custom_model->check_name($name) == false) {
        false;
    }else {
        $this->form_validation->set_message('checkuser', 'This user already exist');
        return true;
    }
}

这是我的模特

public function check_name($name) {
        $sql = "SELECT * FROM users WHERE u_name='".$name."' ";
        $query = $this->db->query($sql);
        $res = $query->row_array();
        if (is_array($res) && count($res) > 0){
            return $res;
        }
        return false;
    }

2 个答案:

答案 0 :(得分:0)

函数 checkuser 中缺少return语句,但更重要的是,您应该反转返回的值。根据{{​​3}},当您因验证错误而设置验证消息时,应返回false,并在验证通过后返回true

因此添加return,并更改布尔值。顺便说一句,你真的不需要一个else子句,“存在”这个词需要一个额外的“s”

function checkuser($name) {
    if ($this->custom_model->check_name($name) == false) {
        return true; // the user does not yet exist, so all is OK
    }
    $this->form_validation->set_message('checkuser', 'This user already exists');
    return false; // this is a duplicate user name: not OK
}

答案 1 :(得分:0)

使用此:

$this->form_validation->set_rules('name', 'User Name', 'trim|required|is_unique[users.u_name]');// trim and required added too

Docs