2012-05-16 12 views
19

Tengo una función de devolución de llamada que check_captcha que ve si $row es $row o o == 1 (esta información se consulta desde sql).No se puede acceder a un mensaje de error correspondiente a su nombre de campo

El problema es que no puedo llamarlo desde $self->form_validation->set_rule('captcha', 'call_back_check_captcha') debido a que mi función tiene una var. $row. Ahora que lo llamo, aparece el mensaje de error "No se puede acceder". ¿Cómo puedo hacer que esto funcione?

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 
+0

que shoul agrega un '_' delante del nombre de la función, por lo que no pude ser llamado desde url. '' Check_captcha' debería ser _check_captcha' –

Respuesta

42
$this->form_validation->set_message('check_captcha', 'text dont match captcha'); 

El nombre del mensaje corresponde a la función , no el campo. Por lo tanto, al establecerlo en "check_captcha" corregirá su error. El mensaje de error usará el nombre de campo correcto.

+0

LOL wow un error tan noobie = [thnx !!! –

+1

cometió el mismo error thnx –

8

En realidad la mejor manera, en lugar de escribir el mensaje de error directamente en el controlador, sería añadir esta entrada "check_captcha" en lenguas.

En mi caso, el mensaje de regla de validación (validación de formularios) "less_than" no estaba presente.

He cambiado el archivo /system/language/??/form_validation_lang.php. He agregado la entrada faltante.

+0

Sí. También arreglé este mensaje al agregar texto de idioma faltante. – mytharcher

3

Eso me ayudó

ir a application/config/autoload.php y añadir "Seguridad" clase de ayuda allí.

$autoload['helper'] = array('security'); 

O añadir este antes de la validación de formularios

$this->load->helper('security'); 
+1

nie truco ... funciona! –

+0

Me alegro de haber ayudado –

Cuestiones relacionadas