我有一个check_captcha的回调函数,它看到$row
是==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
答案 0 :(得分:46)
$this->form_validation->set_message('check_captcha', 'text dont match captcha');
消息名称对应功能,而不是字段。因此将其设置为“ check_captcha ”将修复您的错误。错误消息将使用正确的字段名称。
答案 1 :(得分:9)
实际上,最好的办法是在语言上添加“check_captcha”,而不是直接在控制器上写错误信息。
就我而言,验证规则(表单验证)“less_than”的消息不存在。
我更改了文件 / system / language / ?? / form_validation_lang.php 。我添加了缺少的条目。
答案 2 :(得分:2)
那帮助了我
转到application / config / autoload.php并添加&#34; Security&#34;辅助班那里。
$autoload['helper'] = array('security');
或者在表单验证之前添加此内容
$this->load->helper('security');
答案 3 :(得分:0)
在您的语言文件中添加一个条目,其中包含错误消息(您的字段名)中的部分名称-这就解决了问题
答案 4 :(得分:0)
您可以在set_rules
中设置错误消息:
$this->form_validation->set_rules('captcha', 'Captcha', 'callback_check_captcha',
array('check_captcha' => 'text dont match captcha'));
答案 5 :(得分:0)
即使问题已经回答,还有另一个错误可能会导致相同的错误消息:
如果您调用回调checkCaptcha,它将不起作用。总是喜欢像 Codeigniter/General Topics/PHP 样式指南中推荐的 check_captcha 这样的名称。