2011-12-08 14 views
3

私は自分のユーザー名/パスワードでログインできるフォームをWebサイトのヘッダーに用意しています。次にPOST/signinページに移動して、ユーザーに許可するユーザー名が存在するかどうかを確認しますログインI出力時に問題これらのエラーがあった場合、私は、カスタムエラーを表示するには、次のコードを使用してみましたが、運Codeigniterフォームの検証エラーメッセージ

if ($this->form_validation->run() == false){ 
     $this->load->view("login/index", $data); 
    }else{ 
     $return = $this->_submitLogin(); 
     if ($return == true){ 
      //success 
     }else{ 
      $this->form_validation->set_message('new_error', 'error goes here'); 
      //error 
     } 
     $this->load->view("login/index", $data); 
    } 
set_message作業を行いどのよう

とIFと... ..

にログインこれは間違った方法です。この場合、私はカスタムエラーを表示できますか?

EDIT:

検証ルール:

private $validation_rules = array(
    array(
     'field' => 'username', 
     'label' => 'Username', 
     'rules' => 'trim|required|callback__check_valid_username|min_length[6]|max_length[20]|xss_clean' 
    ), 
    array(
     'field' => 'password', 
     'label' => 'Password', 
     'rules' => 'trim|required|min_length[6]|max_length[32]' 
    ), 
); 
+0

どのように検証規則を設定しますか?これらの追加情報が必要になります。 'set_message'メソッドはあなた自身のエラーメッセージをオンザフライで設定することを可能にします。しかし、キー名はそれに対応する関数名と一致しなければならないことに注意してください。 – toopay

+0

何をしようとしているのは、ユーザーが誤ったログインの詳細を入力したときに余分なエラーメッセージを表示することです。 – fxuser

+0

あなたが提供する必要がある追加情報は次のとおりです:(私はもう一度繰り返す)あなたの検証規則をどのように設定するのですか?カスタムコールバック関数を使用しましたか?必須?ユニーク? – toopay

答えて

6

set_messageメソッドでは、y飛行中の私たち自身のエラーメッセージ。しかし注意すべき点は、キー名がそれに対応する関数名と一致しなければならないことです。あなたが_check_valid_usernameあるカスタムルールを、変更する必要がある場合

、あなたはそうすることで、この関数内set_messageを実行することが可能です。

function _check_valid_username($str) 
{ 
    // Your validation code 
    // ... 
    // Put this in condition where you want to return FALSE 
    $this->form_validation->set_message('_check_valid_username', 'Error Message'); 
    // 
} 

あなたが特定のルールのデフォルトのエラーメッセージを変更したい場合は、最初のパラメータをルール名に、2番目のパラメータをカスタムエラーとしてset_messageを呼び出すことで、これを行うことができます。あなたはrequiredエラー変更したい場合など、:万が一エラー文自体の代わりに言語を変更する必要がある場合

$this->form_validation->set_message('required', 'Oops this %s is required'); 

を、独自のform_validation_lang.phpを作成し、システム内の適切な言語フォルダに入れて言語ディレクトリ。

+0

私が正しく説明していないかどうかわからない、私は/ signinページに投稿するフォームがあり、$ return == false ... thats all ...というエラーメッセージを表示したい – fxuser

0

あなたがhereを見ることができるように、あなたは以下の方法であなたのビューでカスタムエラーを表示することができます。

<?php echo form_error('new_error'); ?> 

PS :これが問題でない場合は、対応するビューコードとその他のエラーメッセージを投稿してください。

+0

これは、個々のメッセージを表示するためのもので、カスタムメッセージを設定するものではありません。 – Bankzilla

+0

'<?php echo form_error( 'field_name'); ?> '' field_name 'はエラーを表示するフィールドの名前です。 – Praveen

0

問題は、あなたのフォームがIFパートで既に検証されていることです!ビューで

if ($this->form_validation->run() == false){ 
    $this->load->view("login/index", $data); 
}else{ 
    $return = $this->_submitLogin(); 
    if ($return == true){ 
     //success 
    }else{ 
     $data['error'] = 'Your error message here'; 
     //error 
    } 
    $this->load->view("login/index", $data); 
} 

:私はあなたをお勧めします

$this->form_validation->set_rules('username', 'Username', 'callback_username_check'); 

... 

public function username_check($str) { 
    // your code here 
} 

echo $error; 

ユーザーの資格情報をチェックするCIの方法は、コールバックを使用することであるあなたは、この方法で問題を解決することができますCIドキュメントを読む:http://codeigniter.com/user_guide/libraries/form_validation.html

-1

私がこれをやったのは、別の検証ルールを追加してもう一度検証を実行することでした。このようにして、ビューの一貫性検証エラーの表示を一貫して保つことができました。

次のコードは、私の作業コードから抜粋したものです。

public function login() { 
    $this->form_validation->set_rules('email', 'Email', 'required'); 
    $this->form_validation->set_rules('password', 'Password', 'required'); 

    $data['content'] = 'login'; 

    if($this->form_validation->run()) { 
     $sql = "select * from users where email = ? and password = ?"; 
     $query = $this->db->query($sql, array($this->input->post('email'), $this->input->post('password'))); 
     if($query->num_rows()==0) { 
      // user not found 
      $this->form_validation->set_rules('account', 'Account', 'callback__noaccount'); 
      $this->form_validation->run(); 
      $this->load->view('template', $data); 
     } else { 
      $this->session->set_userdata('userid', $query->id); 
      redirect('/home'); 
     } 
    } else { 
     $this->load->view('template', $data); 
    } 
} 

public function _noaccount() { 
    $this->form_validation->set_message('_noaccount', 'Account must exist'); 
    return FALSE; 
} 
0

方法をcallback_使用CodeIgniterの3.0

を必要と

class My_controller extends CI_Controller { 

    function __construct() { 
     parent::__construct(); 
     $this->form_validation->set_message('date_control', '%s Date Special Error'); 
    } 

    public function date_control($val, $field) { // for special validate 
     if (preg_match("/^[0-9]{2}.[0-9]{2}.[0-9]{4}$/", $val)) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

    public function my_controller_test() { 
     if ($this->input->post()) { 
      $this->form_validation->set_rules('date_field', 'Date Field', 'trim|callback_date_control[date_field]|xss_clean'); 
      if ($this->form_validation->run() == FALSE) { 
       $data['errors']=validation_errors(); 
       $this->load->view('my_view',$data); 
      } 
     } 
    } 
} 

結果:

日= '14 .07.2017' 場合は、エラーなし

日= '14 -7-2017' 場合は、

日付フィールド日付特別なエラー
関連する問題