2012-05-16 7 views
19

Mam funkcję zwrotną check_captcha, która widzi, czy $row jest ==0 lub == 1 (ta informacja jest pobierana z sql).Nie można uzyskać dostępu do komunikatu o błędzie odpowiadającego nazwie pola

Problem polega na tym, że nie można go nazwać od $self->form_validation->set_rule('captcha', 'call_back_check_captcha') z powodu faktu, że moja funkcja przyjmuje zmienną $row. Sposób, w jaki to nazywam, powoduje, że pojawia się komunikat o błędzie Nie można uzyskać dostępu. Jak mogę to sprawić?

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

Ci shoul dodać '_' przed nazwą funkcji, tak, że nie można nazwać z URL. 'check_captcha' powinno być' _check_captcha' –

Odpowiedz

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

Nazwa wiadomość odpowiada funkcji, a nie na polu. Ustawienie go na "check_captcha" naprawi Twój błąd. Komunikat o błędzie użyje poprawnej nazwy pola.

+0

LOL wow taki noobie błąd = [thnx !!! –

+1

zrobił ten sam błąd thnx –

8

Właściwie najlepszym sposobem, zamiast pisać komunikat o błędzie bezpośrednio na kontrolerze, byłoby dodanie tego wpisu "check_captcha" w językach.

W moim przypadku komunikat dotyczący reguły sprawdzania poprawności (sprawdzanie formularza) "less_than" nie był obecny.

Zmieniono plik /system/language/??/form_validation_lang.php. Dodałem brakujący wpis.

+0

Tak. Poprawiłem też tę wiadomość, dodając brakujący tekst w języku. – mytharcher

3

To pomogło mi

przejść do aplikacji/config/autoload.php i dodać tam "Zabezpieczenia" klasy pomocnika.

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

Albo dodać to przed walidacji formularza

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

nie trick.it działa !! –

+0

Cieszę się, że pomogłem –

Powiązane problemy