- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- CodeIgniter バリデーション へ行く。
バリデーションとは? †
ユーザー「入力値」の妥当性を、システム側で「検証」し、適切に処理すること。
バリデーションとは【validation】(バリデート) - IT用語辞典
別名 :validate
検証(する)、実証(する)、認可(する)、妥当性確認、などの意味を持つ英単語。
ITの分野では、対象がその仕様や文法などに照らして適切に記述・構築されているか否かを検証すること、という意味で使われる。
参考リンク †
- CodeIgniter ユーザガイド 日本語版 › フォーム・バリデーション(検証)
http://codeigniter.jp/user_guide_ja/libraries/form_validation.html
- CodeIgniter Form
Formヘルパー(入力フォームの作成支援機能)の使い方
バリデーションクラス †
CodeIgniterで用意されているバリデーションクラスを利用して、ユーザーの入力値をチェックします。
処理の流れ †
- 入力ページ(フォーム)が表示されます。
- ユーザーが、入力して送信します。
- 間違ったデータが送信された場合や、必要項目が入力されていない場合、エラーメッセージを、入力したデータと一緒にフォームで再表示します。
- 送信データが正しい形式になるまで、上記の処理を繰り返します。
データを受け取るページで、入力値のチェック処理を行います。
- 必須入力のデータをチェックする。
- データが、正しいデータ型か?、データが条件に合致するか?等をチェックする。
(ユーザー名が送信された場合、許可した文字だけになっているか?等) - セキュリティのためにデータをサニタイズする。
- 必要であれば、前もってデータをフォーマットします。
(前後の余計な空白文字を除去する、等) - データベースに追加するデータを準備します。
フォームバリデーション(検証)の実装 †
次の3つのファイルを用意します。
ファイル | 内容 |
入力ページのビュー | 入力フォームを設置したビューファイル |
結果ページのビュー | 送信が成功したときに、「成功」"メッセージを表示するビューファイル |
コントローラー | 送信されたデータを受け取り、処理できるようにしたコントローラ内のメソッド |
入力ページ †
入力フォームのビューファイルを用意する。
applications/views/myform.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
結果ページ †
バリデーションの結果を表示するビューファイルを用意する。
applications/views/formsuccess.php
1 2 3 4 5 6 7 8 9 |
|
コントローラー †
入力ページを制御するコントローラーファイルを用意する。
applications/controllers/form.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
検証ルールを設定する †
バリデーションクラスのset_rules()メソッドを使って検証ルールを設定します。
$this->form_validation->set_rules();
set_rules()メソッドの引数 †
set_rules()メソッドに、3つの引数を指定します。
引数 | 引数の順番 | 内容 |
フォーム名 | 1番目 | フォームの name 属性に指定した値 |
フォームの表示名 | 2番目 | 「user」という入力フィールドの表示名として「名前」等 |
フォームに設定する検証ルール | 3番目 | 'required', 'max_length[12]'等、CodeIgniterで用意されている値 |
- 「フォームの表示名」は、エラーメッセージの表示で使われる。
- 「検証ルール」は、CodeIgniterが用意してくれた検証ルールだけではなく、コールバック関数を自作することによって、ユーザーが指定した検証ルールを適用させることもできる。
set_rules()メソッドの呼出し †
コントローラ (form.php) の中で、バリデーションクラスを初期化(ロード)した後、set_rules()メソッドを使います。
1 2 3 |
|
- CodeIgniterでは、指定したフィールドにどれだけ多くのルールを適用してもかまいません。
- ルールは順番に続けて適用することができ、同時にデータを整形したり前処理を行ったりすることもできます。
配列を使った検証ルールの一括指定 †
一回で全ての検証ルールを設定したい場合、set_rules()メソッドの引数を配列にします。
引数の配列は、検証ルール設定メソッドを通る配列の形式で記述しなければいけません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
ルールの連結(カスケード) †
set_rules()メソッドの、3番目の引数である「検証ルール」は、複数のルールを指定できます。
各ルールは「|」でつなげて記述します。
1 2 3 |
|
上記の例では、
- username フィールドは、5文字より小さくてはだめで、12文字を超えてはいけません。
- password フィールドは、パスワード確認フィールドと入力が一致しなければなりません。
- email フィールドは、正しいメールアドレスの形式でなければなりません。
というルールを追加してします。
データの整形 †
バリデーションの機能は、データの整形をすることもできます。
たとえば、以下のように、ルールを追加することができます。
1 2 3 |
|
上記の例では、
- トリミング(文字列の先頭と末尾にある空白の除去)を行う
- パスワードを MD5 に変換する
- 悪意のあるデータを取り除く "xss_clean" 機能を通す
というルール(処理)を追加してします。
- データの整形を指定するルール名として、
htmlspecialchars、trim、MD5
などのような引数を1つだけとるPHPの組込み関数はどれでもルールとして使用することができます。
- もし入力エラーがあった場合、元のデータをフォームに表示させる必要があるため、検証が済んだ後に、データ整形をしたいのが普通の流れだと思います。
=データの整形は、使い方に注意!
検証の実行 †
バリデーションクラスのrun()メソッドで、ユーザー入力値の検証を実行します。
$this->form_validation->run();
run()メソッドは、ユーザー入力値の検証を実行し、
- 成功時(入力値が検証ルールに適合した場合)は TRUE を返す。
- 失敗時(入力値が検証ルールに適合しなかった場合)は FALSE を返す。
成功時は、入力値に基づいて、必要な処理を行う。
失敗時は、ユーザーに再入力させる → 入力フォームを再表示する。
run()メソッドの引数 †
run()メソッドは、検証ルールの「グループ名」を引数として渡せます。
検証ルールのグループ名とは、複数の検証ルールを配列の形(=グループ)で設定してある場合の、個別のルールの名前です。
(参考)検証ルールのセットを作る †
http://codeigniter.jp/user_guide_ja/libraries/form_validation.html#savingtoconfig
- 検証ルールは、上述のように、配列の形で指定できます。
- さらに、複数の検証ルールを、配列の形で指定して、呼び出すことができます。
コントローラーの記述例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
|
- 配列の検証ルールを、さらにグループ名をキーとする配列に入れます。
- run()メソッドに、検証ルールのグループ名(配列のキー)を渡します。
上記の例では、「signup」という検証ルールを呼び出しています。
(参考)検証ルールを自動的に呼び出す方法 †
run()メソッドには、他にも便利な使い方が用意されています。
http://codeigniter.jp/user_guide_ja/libraries/form_validation.html#savingtoconfig
- run()メソッドで使う検証ルールのグループ
- 自動的な呼び出し
検証ルールのグループは、引数で指定するだけではなく、自動的に呼び出して指定することが可能です。 - 記述の分離
検証ルールのグループを記述する場所は、コントローラー内ではなく、CodeIgniterの設定ファイル内(application/config/config.php)に、分離して記述することが可能です。
- 自動的な呼び出し
- 検証ルールのグループ名を自動的に呼び出すには、検証ルールのグループ名を、検証を実行するコントローラーのクラス名とメソッド名に関連付けます。
- 検証ルールのグループは、CodeIgniterの設定ファイル内(application/config/config.php)に記述します。
例:
コントローラーのクラス名を「Member」という名前にして、メソッド名を「signup」という名前にした場合は、以下のようになります。
application/controllers/member.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
CodeIgniterの設定ファイル(application/config/config.php)内で、検証ルールのグループ名として「member/signup」と名付けます。
application/config/config.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
このように、検証ルールの「グループ名」が、「コントローラー名/メソッド名」に一致する名前のとき、run()メソッドが呼び出された時に、自動的に使用されます。
この方法を使うと、検証ルールを記述する場所が、CodeIgniterの設定ファイル(application/config/config.php)に移動させられるので、コントローラー内のコードがスッキリしますね!
(=検証ルールの量が、やたらと多くなってしまったときに便利!?)
入力フォームの再表示 †
エラーメッセージ表示 †
Formヘルパーのvalidation_errors()関数を使って、入力値の検証結果(エラーメッセージ)を表示させることができます。
validation_errors()
validation_errors()関数は、Formヘルパーをロードしないと使えないので注意!
$this->load->helper('form');
validation_errors()関数は、バリデーションクラスのバリデータが返すエラーメッセージを取得して、出力します。
メッセージがなければ、何も出力しません。
入力ページで、エラーメッセージを表示させる場所に、以下のように記述します。
|
(参考)Formヘルパーのvalidation_errors()関数 †
validation_errors()は、以下の場所で定義されています。
ファイル:
system/helpers/form_helper.php
関数定義:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
入力値の再表示 †
Formヘルパーのset_value()関数を使って、ユーザーの入力値を、入力ページで、再表示させることができます。
set_value()
set_value()関数は、Formヘルパーをロードしないと使えないので注意!
$this->load->helper('form');
set_value()関数は、バリデーションクラスのバリデータが返すユーザーの入力値を取得して、出力します。
元々の入力値がなければ、何も出力しません。
入力ページで、ユーザーの入力値を再表示させる場所に、以下のように記述します。
|
具体的には、
- フォームのvalueに、set_value()関数を入れます。
- set_value()関数の引数には、各フォームのnameを入れます。
1 2 |
|
(参考)Formヘルパーのset_value()関数 †
set_value()は、以下の場所で定義されています。
ファイル:
system/helpers/form_helper.php
関数定義:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
配列を使うときの注意点 †
フォームの名前には、配列を使うことができます。
フォームの名前に配列を使う場合、set_value()関数の引数も、配列の形で指定します。
1
|
|
※詳しくは、CodeIgniterのマニュアルを見てください。\(手抜き)/
http://codeigniter.jp/user_guide_ja/libraries/form_validation.html#arraysasfields