CodeIgniter バリデーション
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[CodeIgniter]]
#norelated
#contents
* バリデーションとは? [#j89787b2]
ユーザー「入力値」の妥当性を、システム側で「検証」し、適...
//-------------------------------------------------------...
* 参考リンク [#zd299faa]
-CodeIgniter ユーザガイド 日本語版 ? フォーム・バリデーシ...
http://codeigniter.jp/user_guide_ja/libraries/form_valida...
- [[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 ech...
<h5>パスワード</h5>
<input type="text" name="password" value="<?php ech...
<h5>パスワードの確認</h5>
<input type="text" name="passconf" value="<?php ech...
<h5>メールアドレス</h5>
<input type="text" name="email" value="<?php echo s...
<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', 'ユーザ名...
$this->form_validation->set_rules('password', 'パスワー...
$this->form_validation->set_rules('passconf', 'パスワー...
$this->form_validation->set_rules('email', 'メールアド...
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_l...
-「フォームの表示名」は、エラーメッセージの表示で使われる。
-「検証ルール」は、CodeIgniterが用意してくれた検証ルール...
** set_rules()メソッドの呼出し [#g2f14cff]
コントローラ (form.php) の中で、バリデーションクラスを初...
#code(php){{
$this->form_validation->set_rules('username', 'ユーザ名',...
$this->form_validation->set_rules('password', 'パスワード...
$this->form_validation->set_rules('passconf', 'パスワード...
$this->form_validation->set_rules('email', 'メールアドレ...
}}
- 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', 'ユーザ名',...
$this->form_validation->set_rules('password', 'パスワード...
$this->form_validation->set_rules('passconf', 'パスワード...
$this->form_validation->set_rules('email', 'メールアドレ...
}}
上記の例では、
+ username フィールドは、5文字より小さくてはだめで、12文...
+ password フィールドは、パスワード確認フィールドと入力が...
+ email フィールドは、正しいメールアドレスの形式でなけれ...
というルールを追加してします。
** データの整形 [#t427f45b]
バリデーションの機能は、データの整形をすることもできます。
たとえば、以下のように、ルールを追加することができます。
#code(php){{
$this->form_validation->set_rules('username', 'ユーザ名',...
$this->form_validation->set_rules('password', 'パスワード...
$this->form_validation->set_rules('passconf', 'パスワード...
$this->form_validation->set_rules('email', 'メールアドレ...
}}
上記の例では、
+ トリミング(文字列の先頭と末尾にある空白の除去)を行う
+ パスワードを MD5 に変換する
+ 悪意のあるデータを取り除く "xss_clean" 機能を通す
というルール(処理)を追加してします。
-データの整形を指定するルール名として、
htmlspecialchars、trim、MD5
などのような引数を1つだけとる&color(red){PHPの組込み関数}...
-もし入力エラーがあった場合、元のデータをフォームに表示さ...
=データの整形は、使い方に注意!
//-------------------------------------------------------...
* 独自の検証ルール [#b5a41915]
コールバックメソッドを作ると、独自の検証ルールを設定でき...
http://codeigniter.jp/user_guide_ja/libraries/form_valida...
** コールバック関数とは? [#jafad02e]
[[コールバック]]は、「他の関数に、引数として渡される関数...
~
~
CodeIgniterのバリデーションクラスは、検証ルールを設定する...
system/libraries/Form_validation.php
のソースコードを見ると、仕組みの詳細が分かります。
+ CodeIgniterが、標準で用意している検証作業(のメソッド)
+ ユーザーが独自に定義できる検証作業(のメソッド)
が使えます。
以下は、ユーザーが独自に定義できる検証作業(=コールバッ...
** コールバック: ユーザ定義の検証メソッド [#l96a49ca]
ユーザ定義の検証メソッドへのコールバックが、CodeIgniterで...
この機能を使えば、検証ルールを拡張することができます。
例えば、ユーザー名の登録において、固有の名前かどうかを調...
これは、次のような方法でできます。
+ 検証ルールで、「username」に適用するルールを次のように...
#code(php){{
$this->form_validation->set_rules('username', 'ユーザ名',...
}}
+ 次に「username_check」という名前の新しいメソッドをコン...
#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', 'ユ...
$this->form_validation->set_rules('password', 'パ...
$this->form_validation->set_rules('passconf', 'パ...
$this->form_validation->set_rules('email', 'メー...
if ($this->form_validation->run() == FALSE)
{
$this->load->view('myform');
}
else
{
$this->load->view('formsuccess');
}
}
// callback method for original validation rules
function username_check($str)
{
if ($str == 'test')
{
$this->form_validation->set_message('username...
return FALSE;
}
else
{
return TRUE;
}
}
}
?>
}}
set_rules()メソッドの第3引数で、自前で用意したコールバッ...
- set_rules()の第3引数で、「&color(red){callback_};userna...
- 「username_check」というメソッドが呼び出されて使われる。
CodeIgniterのバリデーションクラスで用意されている既存の検...
正規表現を使った細かいチェック等をやりたい場合に便利な機...
例:郵便番号の形式「123-4567」に合致しているかチェックす...
//-------------------------------------------------------...
* 検証の実行 [#rbca80ac]
バリデーションクラスのrun()メソッドで、ユーザー入力値の検...
$this->form_validation->run();
run()メソッドは、ユーザー入力値の検証を実行し、
- 成功時(入力値が検証ルールに適合した場合)は &color(red...
- 失敗時(入力値が検証ルールに適合しなかった場合)は &col...
成功時は、入力値に基づいて、必要な処理を行う。
失敗時は、ユーザーに再入力させる → 入力フォームを再表示す...
** run()メソッドの引数 [#gee1fbbc]
run()メソッドは、検証ルールの「グループ名」を引数として渡...
検証ルールのグループ名とは、複数の検証ルールを配列の形(...
*** (参考)検証ルールのセットを作る [#n4465db5]
http://codeigniter.jp/user_guide_ja/libraries/form_valida...
-検証ルールは、上述のように、配列の形で指定できます。
-さらに、&color(red){複数の検証ルール};を、配列の形で指定...
コントローラーの記述例:
#code(php){{
$config = array(
'signup' => 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'
)
),
'email' => array(
array(
'field' => 'emailaddress',
'label' => 'メールアドレス',
'rules' => 'required|valid_email'
),
array(
'field' => 'name',
'label' => '名前',
'rules' => 'required|alpha'
),
array(
'field' => 'title',
'label' => 'タイトル',
'rules' => 'required'
),
array(
'field' => 'message',
'label' => 'メッセージ本文',
'rules' => 'required'
)
)
);
// 特定のルールグループを呼び出す
// 特定のグループを呼び出すには run() メソッドにその名前...
// たとえば、 signup ルールを呼び出すにはこのようにします:
if ($this->form_validation->run('signup') == FALSE)
{
$this->load->view('myform');
}
else
{
$this->load->view('formsuccess');
}
}}
- 配列の検証ルールを、さらにグループ名をキーとする配列に...
- run()メソッドに、検証ルールのグループ名(配列のキー)を...
上記の例では、「signup」という検証ルールを呼び出していま...
//-------------------------------------------------------...
* 入力フォームの再表示 [#k08dfe0b]
** エラーメッセージ表示 [#raa6d997]
[[Formヘルパー>CodeIgniter Form]]のvalidation_errors()関...
validation_errors()
validation_errors()関数は、Formヘルパーをロードしないと使...
$this->load->helper('form');
validation_errors()関数は、バリデーションクラスのバリデー...
メッセージがなければ、何も出力しません。
&color(red){(注意:run()メソッドを実行して、検証した後じ...
入力ページで、エラーメッセージを表示させる場所に、以下の...
#code(php){{
<?php echo validation_errors(); ?>
}}
*** (参考)Formヘルパーのvalidation_errors()関数 [#fe004...
validation_errors()は、以下の場所で定義されています。
ファイル:
system/helpers/form_helper.php
関数定義:
#code(php){{
/**
* Validation Error String
*
* Returns all the errors associated with a form submissi...
* function for the form validation class.
*
* @access public
* @param string
* @param string
* @return string
*/
if ( ! function_exists('validation_errors'))
{
function validation_errors($prefix = '', $suffix = '')
{
if (FALSE === ($OBJ =& _get_validation_object()))
{
return '';
}
return $OBJ->error_string($prefix, $suffix);
}
}
}}
** 入力値の再表示 [#scb48f1f]
[[Formヘルパー>CodeIgniter Form]]のset_value()関数を使っ...
set_value()
set_value()関数は、Formヘルパーをロードしないと使えないの...
$this->load->helper('form');
set_value()関数は、バリデーションクラスのバリデータが返す...
元々の入力値がなければ、何も出力しません。
&color(red){(注意:run()メソッドを実行して、検証した後じ...
入力ページで、ユーザーの入力値を再表示させる場所に、以下...
#code(php){{
<?php echo set_value('username'); ?>
}}
具体的には、
- フォームのvalueに、set_value()関数を入れます。
- set_value()関数の引数には、各フォームのnameを入れます。
#code(html){{
<h5>ユーザ名</h5>
<input type="text" name="username" value="<?php echo set_...
}}
*** (参考)Formヘルパーのset_value()関数 [#sb4b09fd]
set_value()は、以下の場所で定義されています。
ファイル:
system/helpers/form_helper.php
関数定義:
#code(php){{
/**
* Form Value
*
* Grabs a value from the POST array for the specified fi...
* re-populate an input field or textarea. If Form Valid...
* is active it retrieves the info from the validation cl...
*
* @access public
* @param string
* @return mixed
*/
if ( ! function_exists('set_value'))
{
function set_value($field = '', $default = '')
{
if (FALSE === ($OBJ =& _get_validation_object()))
{
if ( ! isset($_POST[$field]))
{
return $default;
}
return form_prep($_POST[$field], $field);
}
return form_prep($OBJ->set_value($field, $default), $fi...
}
}
}}
*** 配列を使うときの注意点 [#ka2dbb25]
フォームの名前には、配列を使うことができます。
フォームの名前に配列を使う場合、set_value()関数の引数も、...
#code(html){{
<input type="text" name="colors[]" value="<?php echo set_...
}}
※詳しくは、CodeIgniterのマニュアルを見てください。\(手抜...
http://codeigniter.jp/user_guide_ja/libraries/form_valida...
//-------------------------------------------------------...
* まとめ [#u16f85f0]
- CodeIgniterは、ユーザー入力値のチェックが簡単にできる。
- Formバリデーション(検証)クラスとFormヘルパーをロードし...
$this->load->library('form_validation');
$this->load->helper('form');
- まずは、普通に入力ページと結果ページ(入力の確認をする...
- 検証ルールを作る。
- 検証した結果で、処理を分岐させる。
-- 成功した場合は、必要な処理を行う。
-- 失敗した場合は、ユーザーに再入力させる。
--- 再入力のために、入力ページを再表示するとき、Formヘル...
CodeIgniterは、便利だな~!(・∀・)
終了行:
[[CodeIgniter]]
#norelated
#contents
* バリデーションとは? [#j89787b2]
ユーザー「入力値」の妥当性を、システム側で「検証」し、適...
//-------------------------------------------------------...
* 参考リンク [#zd299faa]
-CodeIgniter ユーザガイド 日本語版 ? フォーム・バリデーシ...
http://codeigniter.jp/user_guide_ja/libraries/form_valida...
- [[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 ech...
<h5>パスワード</h5>
<input type="text" name="password" value="<?php ech...
<h5>パスワードの確認</h5>
<input type="text" name="passconf" value="<?php ech...
<h5>メールアドレス</h5>
<input type="text" name="email" value="<?php echo s...
<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', 'ユーザ名...
$this->form_validation->set_rules('password', 'パスワー...
$this->form_validation->set_rules('passconf', 'パスワー...
$this->form_validation->set_rules('email', 'メールアド...
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_l...
-「フォームの表示名」は、エラーメッセージの表示で使われる。
-「検証ルール」は、CodeIgniterが用意してくれた検証ルール...
** set_rules()メソッドの呼出し [#g2f14cff]
コントローラ (form.php) の中で、バリデーションクラスを初...
#code(php){{
$this->form_validation->set_rules('username', 'ユーザ名',...
$this->form_validation->set_rules('password', 'パスワード...
$this->form_validation->set_rules('passconf', 'パスワード...
$this->form_validation->set_rules('email', 'メールアドレ...
}}
- 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', 'ユーザ名',...
$this->form_validation->set_rules('password', 'パスワード...
$this->form_validation->set_rules('passconf', 'パスワード...
$this->form_validation->set_rules('email', 'メールアドレ...
}}
上記の例では、
+ username フィールドは、5文字より小さくてはだめで、12文...
+ password フィールドは、パスワード確認フィールドと入力が...
+ email フィールドは、正しいメールアドレスの形式でなけれ...
というルールを追加してします。
** データの整形 [#t427f45b]
バリデーションの機能は、データの整形をすることもできます。
たとえば、以下のように、ルールを追加することができます。
#code(php){{
$this->form_validation->set_rules('username', 'ユーザ名',...
$this->form_validation->set_rules('password', 'パスワード...
$this->form_validation->set_rules('passconf', 'パスワード...
$this->form_validation->set_rules('email', 'メールアドレ...
}}
上記の例では、
+ トリミング(文字列の先頭と末尾にある空白の除去)を行う
+ パスワードを MD5 に変換する
+ 悪意のあるデータを取り除く "xss_clean" 機能を通す
というルール(処理)を追加してします。
-データの整形を指定するルール名として、
htmlspecialchars、trim、MD5
などのような引数を1つだけとる&color(red){PHPの組込み関数}...
-もし入力エラーがあった場合、元のデータをフォームに表示さ...
=データの整形は、使い方に注意!
//-------------------------------------------------------...
* 独自の検証ルール [#b5a41915]
コールバックメソッドを作ると、独自の検証ルールを設定でき...
http://codeigniter.jp/user_guide_ja/libraries/form_valida...
** コールバック関数とは? [#jafad02e]
[[コールバック]]は、「他の関数に、引数として渡される関数...
~
~
CodeIgniterのバリデーションクラスは、検証ルールを設定する...
system/libraries/Form_validation.php
のソースコードを見ると、仕組みの詳細が分かります。
+ CodeIgniterが、標準で用意している検証作業(のメソッド)
+ ユーザーが独自に定義できる検証作業(のメソッド)
が使えます。
以下は、ユーザーが独自に定義できる検証作業(=コールバッ...
** コールバック: ユーザ定義の検証メソッド [#l96a49ca]
ユーザ定義の検証メソッドへのコールバックが、CodeIgniterで...
この機能を使えば、検証ルールを拡張することができます。
例えば、ユーザー名の登録において、固有の名前かどうかを調...
これは、次のような方法でできます。
+ 検証ルールで、「username」に適用するルールを次のように...
#code(php){{
$this->form_validation->set_rules('username', 'ユーザ名',...
}}
+ 次に「username_check」という名前の新しいメソッドをコン...
#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', 'ユ...
$this->form_validation->set_rules('password', 'パ...
$this->form_validation->set_rules('passconf', 'パ...
$this->form_validation->set_rules('email', 'メー...
if ($this->form_validation->run() == FALSE)
{
$this->load->view('myform');
}
else
{
$this->load->view('formsuccess');
}
}
// callback method for original validation rules
function username_check($str)
{
if ($str == 'test')
{
$this->form_validation->set_message('username...
return FALSE;
}
else
{
return TRUE;
}
}
}
?>
}}
set_rules()メソッドの第3引数で、自前で用意したコールバッ...
- set_rules()の第3引数で、「&color(red){callback_};userna...
- 「username_check」というメソッドが呼び出されて使われる。
CodeIgniterのバリデーションクラスで用意されている既存の検...
正規表現を使った細かいチェック等をやりたい場合に便利な機...
例:郵便番号の形式「123-4567」に合致しているかチェックす...
//-------------------------------------------------------...
* 検証の実行 [#rbca80ac]
バリデーションクラスのrun()メソッドで、ユーザー入力値の検...
$this->form_validation->run();
run()メソッドは、ユーザー入力値の検証を実行し、
- 成功時(入力値が検証ルールに適合した場合)は &color(red...
- 失敗時(入力値が検証ルールに適合しなかった場合)は &col...
成功時は、入力値に基づいて、必要な処理を行う。
失敗時は、ユーザーに再入力させる → 入力フォームを再表示す...
** run()メソッドの引数 [#gee1fbbc]
run()メソッドは、検証ルールの「グループ名」を引数として渡...
検証ルールのグループ名とは、複数の検証ルールを配列の形(...
*** (参考)検証ルールのセットを作る [#n4465db5]
http://codeigniter.jp/user_guide_ja/libraries/form_valida...
-検証ルールは、上述のように、配列の形で指定できます。
-さらに、&color(red){複数の検証ルール};を、配列の形で指定...
コントローラーの記述例:
#code(php){{
$config = array(
'signup' => 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'
)
),
'email' => array(
array(
'field' => 'emailaddress',
'label' => 'メールアドレス',
'rules' => 'required|valid_email'
),
array(
'field' => 'name',
'label' => '名前',
'rules' => 'required|alpha'
),
array(
'field' => 'title',
'label' => 'タイトル',
'rules' => 'required'
),
array(
'field' => 'message',
'label' => 'メッセージ本文',
'rules' => 'required'
)
)
);
// 特定のルールグループを呼び出す
// 特定のグループを呼び出すには run() メソッドにその名前...
// たとえば、 signup ルールを呼び出すにはこのようにします:
if ($this->form_validation->run('signup') == FALSE)
{
$this->load->view('myform');
}
else
{
$this->load->view('formsuccess');
}
}}
- 配列の検証ルールを、さらにグループ名をキーとする配列に...
- run()メソッドに、検証ルールのグループ名(配列のキー)を...
上記の例では、「signup」という検証ルールを呼び出していま...
//-------------------------------------------------------...
* 入力フォームの再表示 [#k08dfe0b]
** エラーメッセージ表示 [#raa6d997]
[[Formヘルパー>CodeIgniter Form]]のvalidation_errors()関...
validation_errors()
validation_errors()関数は、Formヘルパーをロードしないと使...
$this->load->helper('form');
validation_errors()関数は、バリデーションクラスのバリデー...
メッセージがなければ、何も出力しません。
&color(red){(注意:run()メソッドを実行して、検証した後じ...
入力ページで、エラーメッセージを表示させる場所に、以下の...
#code(php){{
<?php echo validation_errors(); ?>
}}
*** (参考)Formヘルパーのvalidation_errors()関数 [#fe004...
validation_errors()は、以下の場所で定義されています。
ファイル:
system/helpers/form_helper.php
関数定義:
#code(php){{
/**
* Validation Error String
*
* Returns all the errors associated with a form submissi...
* function for the form validation class.
*
* @access public
* @param string
* @param string
* @return string
*/
if ( ! function_exists('validation_errors'))
{
function validation_errors($prefix = '', $suffix = '')
{
if (FALSE === ($OBJ =& _get_validation_object()))
{
return '';
}
return $OBJ->error_string($prefix, $suffix);
}
}
}}
** 入力値の再表示 [#scb48f1f]
[[Formヘルパー>CodeIgniter Form]]のset_value()関数を使っ...
set_value()
set_value()関数は、Formヘルパーをロードしないと使えないの...
$this->load->helper('form');
set_value()関数は、バリデーションクラスのバリデータが返す...
元々の入力値がなければ、何も出力しません。
&color(red){(注意:run()メソッドを実行して、検証した後じ...
入力ページで、ユーザーの入力値を再表示させる場所に、以下...
#code(php){{
<?php echo set_value('username'); ?>
}}
具体的には、
- フォームのvalueに、set_value()関数を入れます。
- set_value()関数の引数には、各フォームのnameを入れます。
#code(html){{
<h5>ユーザ名</h5>
<input type="text" name="username" value="<?php echo set_...
}}
*** (参考)Formヘルパーのset_value()関数 [#sb4b09fd]
set_value()は、以下の場所で定義されています。
ファイル:
system/helpers/form_helper.php
関数定義:
#code(php){{
/**
* Form Value
*
* Grabs a value from the POST array for the specified fi...
* re-populate an input field or textarea. If Form Valid...
* is active it retrieves the info from the validation cl...
*
* @access public
* @param string
* @return mixed
*/
if ( ! function_exists('set_value'))
{
function set_value($field = '', $default = '')
{
if (FALSE === ($OBJ =& _get_validation_object()))
{
if ( ! isset($_POST[$field]))
{
return $default;
}
return form_prep($_POST[$field], $field);
}
return form_prep($OBJ->set_value($field, $default), $fi...
}
}
}}
*** 配列を使うときの注意点 [#ka2dbb25]
フォームの名前には、配列を使うことができます。
フォームの名前に配列を使う場合、set_value()関数の引数も、...
#code(html){{
<input type="text" name="colors[]" value="<?php echo set_...
}}
※詳しくは、CodeIgniterのマニュアルを見てください。\(手抜...
http://codeigniter.jp/user_guide_ja/libraries/form_valida...
//-------------------------------------------------------...
* まとめ [#u16f85f0]
- CodeIgniterは、ユーザー入力値のチェックが簡単にできる。
- Formバリデーション(検証)クラスとFormヘルパーをロードし...
$this->load->library('form_validation');
$this->load->helper('form');
- まずは、普通に入力ページと結果ページ(入力の確認をする...
- 検証ルールを作る。
- 検証した結果で、処理を分岐させる。
-- 成功した場合は、必要な処理を行う。
-- 失敗した場合は、ユーザーに再入力させる。
--- 再入力のために、入力ページを再表示するとき、Formヘル...
CodeIgniterは、便利だな~!(・∀・)
ページ名: