2012-05-16 1 views
19

Ho una funzione di callback che check_captcha che vede se $row è ==0 o == 1 (questa informazione viene richiesta da sql).Impossibile accedere a un messaggio di errore corrispondente al nome del campo

Il problema è che non posso chiamarlo da $self->form_validation->set_rule('captcha', 'call_back_check_captcha') a causa del fatto che la mia funzione accetta una variabile $row. Il modo in cui sto chiamando ora ottengo un Impossibile accedere al messaggio di errore. Come posso fare questo lavoro?

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

si shoul aggiunge un '_' di fronte a nome della funzione, in modo che non ho potuto essere chiamato da URL. 'check_captcha' dovrebbe essere' _check_captcha' –

risposta

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

Il nome del messaggio corrisponde alla funzione , non il campo. Quindi impostando su "check_captcha" verrà risolto il problema. Il messaggio di errore utilizzerà il nome del campo corretto.

+0

LOL wow un tale errore noobie = [thnx !!! –

+1

ha fatto lo stesso errore con lo –

8

In realtà il modo migliore, invece di scrivere il messaggio di errore direttamente sul controller, sarebbe aggiungere questa voce "check_captcha" alle lingue.

Nel mio caso, il messaggio per la regola di convalida (convalida del modulo) "less_than" non era presente.

Ho modificato il file /system/language/??/form_validation_lang.php. Ho aggiunto la voce mancante.

+0

Sì. Ho anche corretto questo messaggio aggiungendo il testo della lingua mancante. – mytharcher

3

che mi ha aiutato

andare a application/config/autoload.php e aggiungere classe helper "Sicurezza" lì.

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

Oppure aggiungi questo prima che il modulo di convalida

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

nie trick..it funziona !! –

+0

Sono felice di aver aiutato –