[[CodeIgniter]]
#contents
* バリデーションとは? [#j89787b2]
ユーザー「入力値」の妥当性を、システム側で「検証」し、適切に処理すること。
[[バリデーションとは【validation】(バリデート) - IT用語辞典>http://e-words.jp/w/E38390E383AAE38387E383BCE382B7E383A7E383B3.html]]
>別名 :validate
検証(する)、実証(する)、認可(する)、妥当性確認、などの意味を持つ英単語。
ITの分野では、対象がその仕様や文法などに照らして適切に記述・構築されているか否かを検証すること、という意味で使われる。
* リンク [#zd299faa]
-CodeIgniter ユーザガイド 日本語版 › フォーム・バリデーション(検証)
http://codeigniter.jp/user_guide_ja/libraries/form_validation.html
- [[CodeIgniter Form]]
Formヘルパー(入力フォームの作成支援機能)の使い方
* バリデーションクラス [#pb3c50e5]
CodeIgniterで用意されているバリデーションクラスを利用して、ユーザーの入力値をチェックします。
** 処理の流れ [#ye260d06]
+ 入力ページ(フォーム)が表示されます。
+ ユーザーが、入力して送信します。
+ 間違ったデータが送信された場合や、必要項目が入力されていない場合、エラーメッセージを、入力したデータと一緒にフォームで再表示します。
+ 送信データが正しい形式になるまで、上記の処理を繰り返します。
データを受け取るページで、入力値のチェック処理を行います。
+ 必須入力のデータをチェックする。
+ データが、正しいデータ型か?、データが条件に合致するか?等をチェックする。
(ユーザー名が送信された場合、許可した文字だけになっているか?等)
+ セキュリティのためにデータをサニタイズする。
+ 必要であれば、前もってデータをフォーマットします。
(前後の余計な空白文字を除去する、等)
+ データベースに追加するデータを準備します。
** フォームバリデーション(検証)の実装 [#p381d849]
次の3つのファイルを用意します。
|ファイル|内容|h
| 入力ページのビュー | 入力フォームを設置したビューファイル |
| 結果ページのビュー | 送信が成功したときに、「成功」"メッセージを表示するビューファイル |
| コントローラー | 送信されたデータを受け取り、処理できるようにしたコントローラ内のメソッド |
*** 入力ページ [#v0313214]
入力フォームのビューファイルを用意する。
applications/views/myform.php
#code(html){{
<html>
<head>
<title>マイフォーム</title>
</head>
<body>
<?php echo validation_errors(); ?>
<?php echo form_open('form'); ?>
<h5>ユーザ名</h5>
<input type="text" name="username" value="<?php echo set_value('username'); ?>" size="50" />
<h5>パスワード</h5>
<input type="text" name="password" value="<?php echo set_value('password'); ?>" size="50" />
<h5>パスワードの確認</h5>
<input type="text" name="passconf" value="<?php echo set_value('passconf'); ?>" size="50" />
<h5>メールアドレス</h5>
<input type="text" name="email" value="<?php echo set_value('email'); ?>" size="50" />
<div><input type="submit" value="送信" /></div>
</form>
</body>
</html>
}}
*** 結果ページ [#s836a3a9]
バリデーションの結果を表示するビューファイルを用意する。
applications/views/formsuccess.php
#code(html){{
<html>
<head>
<title>マイフォーム</title>
</head>
<body>
<h3>フォームは正しく送信されました!</h3>
<p><?php echo anchor('form', 'もう一度!'); ?></p>
</body>
</html>
}}
*** コントローラー [#la094b9a]
入力ページを制御するコントローラーファイルを用意する。
applications/controllers/form.php
#code(php){{
<?php
class Form extends CI_Controller {
function index()
{
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
$this->form_validation->set_rules('username', 'ユーザ名', 'required');
$this->form_validation->set_rules('password', 'パスワード', 'required');
$this->form_validation->set_rules('passconf', 'パスワードの確認', 'required');
$this->form_validation->set_rules('email', 'メールアドレス', 'required');
if ($this->form_validation->run() == FALSE)
{
$this->load->view('myform');
}
else
{
$this->load->view('formsuccess');
}
}
}
?>
}}
* 検証ルールを設定する [#ia22990b]
バリデーションクラスのset_rules()メソッドを使って検証ルールを設定します。
$this->form_validation->set_rules();
** set_rules()メソッドの引数 [#c721c267]
set_rules()メソッドに、3つの引数を指定します。
| 引数 | 引数の順番 | 内容 |h
| フォーム名 |1番目| フォームの name 属性に指定した値 |
| フォームの表示名 |2番目| 「user」という入力フィールドの表示名として「名前」等 |
| フォームに設定する検証ルール |3番目| 'required', 'max_length[12]'等、CodeIgniterで用意されている値 |
-「フォームの表示名」は、エラーメッセージの表示で使われる。
-「検証ルール」は、CodeIgniterが用意してくれた検証ルールだけではなく、コールバック関数を自作することによって、ユーザーが指定した検証ルールを適用させることもできる。
** set_rules()メソッドの呼出し [#g2f14cff]
コントローラ (form.php) の中で、バリデーションクラスを初期化(ロード)した後、set_rules()メソッドを使います。
#code(php){{
$this->form_validation->set_rules('username', 'ユーザ名', 'required');
$this->form_validation->set_rules('password', 'パスワード', 'required');
$this->form_validation->set_rules('passconf', 'パスワードの確認', 'required');
$this->form_validation->set_rules('email', 'メールアドレス', 'required');
}}
- CodeIgniterでは、指定したフィールドにどれだけ多くのルールを適用してもかまいません。
- ルールは順番に続けて適用することができ、同時にデータを整形したり前処理を行ったりすることもできます。
** 配列を使った検証ルールの一括指定 [#u14d9672]
一回で全ての検証ルールを設定したい場合、set_rules()メソッドの引数を配列にします。
引数の配列は、検証ルール設定メソッドを通る配列の形式で記述しなければいけません。
#code(php){{
$config = array(
array(
'field' => 'username',
'label' => 'ユーザ名',
'rules' => 'required'
),
array(
'field' => 'password',
'label' => 'パスワード',
'rules' => 'required'
),
array(
'field' => 'passconf',
'label' => 'パスワードの確認',
'rules' => 'required'
),
array(
'field' => 'email',
'label' => 'メールアドレス',
'rules' => 'required'
)
);
$this->form_validation->set_rules($config);
}}
** ルールの連結(カスケード) [#z53ea3c8]
set_rules()メソッドの、3番目の引数である「検証ルール」は、複数のルールを指定できます。
各ルールは「|」でつなげて記述します。
#code(php){{
$this->form_validation->set_rules('username', 'ユーザ名', 'required|min_length[5]|max_length[12]');
$this->form_validation->set_rules('password', 'パスワード', 'required|matches[passconf]');
$this->form_validation->set_rules('passconf', 'パスワードの確認', 'required');
$this->form_validation->set_rules('email', 'メールアドレス', 'required|valid_email');
}}
上記の例では、
+ username フィールドは、5文字より小さくてはだめで、12文字を超えてはいけません。
+ password フィールドは、パスワード確認フィールドと入力が一致しなければなりません。
+ email フィールドは、正しいメールアドレスの形式でなければなりません。
というルールを追加してします。
** データの整形 [#t427f45b]
バリデーションの機能は、データの整形をすることもできます。
たとえば、以下のように、ルールを追加することができます。
#code(php){{
$this->form_validation->set_rules('username', 'ユーザ名', 'trim|required|min_length[5]|max_length[12]|xss_clean');
$this->form_validation->set_rules('password', 'パスワード', 'trim|required|matches[passconf]|md5');
$this->form_validation->set_rules('passconf', 'パスワードの確認', 'trim|required');
$this->form_validation->set_rules('email', 'メールアドレス', 'trim|required|valid_email');
}}
上記の例では、
+ トリミング(空白の除去)を行う
+ パスワードを MD5 に変換する
+ 悪意のあるデータを取り除く "xss_clean" 機能を通す
というルール(処理)を追加してします。
-データの整形を指定するルール名として、
htmlspecialchars、trim、MD5
などのような引数を1つだけとる&color(red){PHPの組込み関数};はどれでもルールとして使用することができます。
-もし入力エラーがあった場合、元のデータをフォームに表示させる必要があるため、検証が済んだ後に、データ整形をしたいのが普通の流れだと思います。
=データの整形は、使い方に注意!
* 入力フォームの再表示 [#k08dfe0b]
** エラーメッセージ表示 [#raa6d997]
[[Formヘルパー>CodeIgniter Form]]のvalidation_errors()関数を使います。(Formヘルパーをロードしておかないと使えません!)
validation_errors()
この関数は、バリデーションクラスのバリデータが返すエラーメッセージを取得して、出力します。
メッセージがなければ、何も出力しません。
入力ページで、エラーメッセージを表示させる場所に、以下のように記述します。
#code(php){{
<?php echo validation_errors(); ?>
}}