2012-02-23 15 views
2

私はCodeIgniterのform validationを使用しています。次に例を示します。CodeIgniterでフォーム検証でカスタムフィルタを設定する方法は?

など、はhtmlspecialcharsのように、一つのパラメータを受け入れる任意のネイティブPHP関数は 原則として使用することができ

トリム、MD5:

$this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email'); 

ドキュメントは言います

値を自分のカスタムフィルタに渡す場合はどうすればよいですか?たとえば、 "badWord"の値を消去したいとします。

function curseWordRemove($original = '') { 
    return str_replace('badWord', '', $original); 
} 

CodeIgniterでは、カスタムの検証は実行できますが、カスタムフィルタは使用できません。カスタム検証では、フィルタリングされた文字列ではなく、真または偽が返されます。

function isPolite($string = '') { 
    if (strpos($string, 'badWord') !== false) { 
     $this->form_validation->set_message(
      'fieldName', 
      'contains a very bad word' 
     ); 
     return false; 
    } else { 
     return true; 
    } 
} 
+0

Codeigniterには、フィルタを「悪い単語」にするヘルパーがあります。http://codeigniter.com/user_guide/helpers/text_helper.html –

+0

@RPMこれをフォームの検証とどのように統合すればよいですか?また、呪いの単語の削除だけでなく、カスタムフィルタも必要になることを覚えておいてください。 – JoJo

+0

フィルタリングする必要がある単語はありますか?あるいは、システムが単語を検閲すべきかどうかを判断できる必要があるか? –

答えて

4

ジョジョ、あなたは、それをユーザガイドのを見逃している必要があり、そのcallbackと呼ばれ、ここにthe documentationです。

アン例:

<?php 

class Form extends CI_Controller { 

    public function index() 
    { 
     $this->load->helper(array('form', 'url')); 

     $this->load->library('form_validation'); 

     $this->form_validation->set_rules('username', 'Username', 'callback_username_check'); 
     $this->form_validation->set_rules('password', 'Password', 'required'); 
     $this->form_validation->set_rules('passconf', 'Password Confirmation', 'required'); 
     $this->form_validation->set_rules('email', 'Email', 'required|is_unique[users.email]'); 

     if ($this->form_validation->run() == FALSE) 
     { 
      $this->load->view('myform'); 
     } 
     else 
     { 
      $this->load->view('formsuccess'); 
     } 
    } 

    public function username_check($str) 
    { 
     if ($str == 'test') 
     { 
      $this->form_validation->set_message('username_check', 'The %s field can not be the word "test"'); 
      return FALSE; 
     } 
     else 
     { 
      return TRUE; 
     } 
    } 

} 
?> 

基本的には、callback_check_bad_words呼ば検証とcheck_bad_words($value)と呼ばれるあなたのコントローラ内のマッチング関数を作成します。結果としてブール値を返します(結果が検証に戻ります)。

ブール値だけを返すことができるので、グローバル変数を使用するか、後で単語の '墨塗り'を実行する必要があります。妥当性検査では不要です。

悪意のある単語の入力をサニタイズすることを目的としている場合は、その単語を検証しないでください。

+0

私はストレートPHPを使って$ _POST変数を編集するだけですか? – JoJo

+0

@JoJo、よくあなたはちょうどあなたが言って何でも検証した後、 'ます$ this->入力 - >ポスト(「値」)から値を取得することを確認します;' – Jakub