У меня есть функция обратного вызова, которая check_captcha, которая видит, что $row
is ==0
или == 1
(эта информация запрашивается из sql).
Проблема в том, что я не могу назвать это из $self->form_validation->set_rule('captcha', 'call_back_check_captcha')
из-за того, что моя функция принимает $row
var. То, как я это называю, теперь я получаю сообщение «Невозможно получить доступ к ошибке». Как я могу сделать эту работу?
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
,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
$this->form_validation->set_message('check_captcha', 'text dont match captcha');
Имя сообщения соответствует функции , а не поле . Поэтому установка « check_captcha » исправит вашу ошибку. Сообщение об ошибке будет использовать правильное имя поля.
На самом деле лучший способ, вместо того, чтобы писать сообщение об ошибке непосредственно на контроллере, будет добавлять эту запись «check_captcha» на языках.
В моем случае сообщение для правила проверки (форма проверки) «less_than» не было.
Я изменил файл /system/language/??/form_validation_lang.php . Я добавил недостающую запись.
Это помогло мне
перейдите в application / config / autoload.php и добавьте вспомогательный класс «Безопасность».
$autoload['helper'] = array('security');
Или добавьте это перед подтверждением своей формы
$this->load->helper('security');