Intereting Posts
Как использовать хеширование паролей с помощью PDO, чтобы сделать мой код более безопасным? Получайте и обновляйте текст каждые несколько секунд от источника HTTP до HTTPS-сайта Как я могу сократить этот оператор PHP if? Отправлять уведомление по электронной почте, когда изменения статуса пользовательского заказа в WooCommerce Файловый сканер PHP Sqlite 3 Вставка и замена не работает на более чем одной уникальной колонке Как обновить данные с помощью PHP MYSQL в Android Создание ссылки в dataGrid strtotime result не имеет смысла, ошибка php? Хотите показать «загрузку» изображения во время загрузки страницы – Javascript Как узнать, не удалось ли выполнить запрос в Laravel 4? Некоторые символы в CSV-файле не читаются во время PHP fgetcsv () Отправка значения Button в контроллер, но не для публикации значения Лучший способ полностью уничтожить сеанс – даже если браузер не закрыт Будет ли исполняться PHP-скрипт после перенаправления заголовка?

Не удалось получить доступ к сообщению об ошибке, соответствующему имени вашего поля

У меня есть функция обратного вызова, которая 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');