I have a callback function that check_captcha which sees if $row
is ==0
or == 1
(this information is queried from sql).
The problem is that I can not call it from $self->form_validation->set_rule('captcha', 'call_back_check_captcha')
due to the fact that my function takes in a $row
var. The way I’m calling it now I get a Unable to access error message. How can I make this work?
function check_captcha( $row) { if($row ==0)//didnt find any { $this->form_validation->set_message('captcha', 'text dont match captcha'); return FALSE; } else { return TRUE; } } function create_member() { $past = time() - 7200; $this->db->query("DELETE FROM captcha WHERE captcha_time <".$past); $sql = "SELECT COUNT(*) AS count FROM captcha WHERE word =? AND ip_address =?"; $binds = array($_POST['captcha'], $this->input->ip_address(), $past); $query= $this->db->query($sql, $binds); $row = $query->row(); //row query rows : if it found an entry =1 $self->check_captcha($row->count); //VALIDATIONS $this->form_validation->set_rules('first_name', 'First Name', 'trim|required'); $this->form_validation->set_rules('last_name', 'Last Name', 'trim|required'); $this->form_validation->set_rules( 'email_address', 'Email Address', 'trim|required|valid_email|unique[user.email_address]'); $this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[4]|unique[user.username]'); $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[4]|max_leng[32]'); $this->form_validation->set_rules('password2', 'Password Confirmation','trim|required|matches[password]'); if(!$_POST['captcha']){ $this->form_validation->set_rules('captcha', 'Captcha','trim|required');}else{ $this->form_validation->set_rules('captcha', 'Captcha', 'callback_check_captcha');} if($this->form_validation->run()==FALSE) { //this -> to the curr obj(UserController) && registraion() points to the the function in controller $this->registration(); //reloads reg page so they can fill out right stuff } else
Advertisement
Answer
$this->form_validation->set_message('check_captcha', 'text dont match captcha');
The message name corresponds to the function, not the field. So setting it to “check_captcha” will fix your bug. The error message will use the correct field name.