2012-05-16 4 views
19

$row==0または== 1(この情報はSQLから照会される)であることを確認するcheck_captchaコールバック関数があります。フィールド名に対応するエラーメッセージにアクセスできません

問題は、$self->form_validation->set_rule('captcha', 'call_back_check_captcha')から私の関数が$row varをとるために呼び出すことができないということです。今私はそれを呼び出す方法は、エラーメッセージにアクセスするUnableを取得します。どうすればこの作品を作れますか?

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

前にこれを追加します。 'check_captcha'は' _check_captcha'でなければなりません。 –

答えて

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

メッセージ名は機能、ないフィールドに相当します。 "check_captcha"に設定すると、あなたのバグが修正されます。エラーメッセージは、正しいフィールド名を使用します。

+0

LOLうわーそういうnoobieの間違い= [thnx !!! –

+1

同じエラーが発生しました –

8

実際には、コントローラに直接エラーメッセージを書き込む代わりに、このエントリを言語に「check_captcha」追加するのが最も良い方法です。

私のケースでは、検証ルール(フォーム検証)のメッセージ "less_than"は存在しませんでした。

ファイルを変更しました/system/language/??/form_validation_lang.php不足している項目を追加しました。

は、アプリケーション/設定/ autoload.phpに行き、そこに「セキュリティ」のヘルパークラスを追加私を助け

+0

はい。また、不足している言語のテキストを追加してこのメ​​ッセージを修正しました。 – mytharcher

3

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

または私はURLから呼び出すことができなかったように、あなたは、関数名の前に `_`を追加shoulフォームバリデーション

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

nie trick..it works! –

+0

私は助けてうれしい –

関連する問題