CodeIgniter

バリデーションとは?

ユーザー「入力値」の妥当性を、システム側で「検証」し、適切に処理すること。

バリデーションとは【validation】(バリデート) - IT用語辞典

別名 :validate
検証(する)、実証(する)、認可(する)、妥当性確認、などの意味を持つ英単語。
ITの分野では、対象がその仕様や文法などに照らして適切に記述・構築されているか否かを検証すること、という意味で使われる。

リンク

  • CodeIgniter Form
    Formヘルパー(入力フォームの作成支援機能)の使い方

バリデーションクラス

CodeIgniterで用意されているバリデーションクラスを利用して、ユーザーの入力値をチェックします。

処理の流れ

  1. 入力ページ(フォーム)が表示されます。
  2. ユーザーが、入力して送信します。
  3. 間違ったデータが送信された場合や、必要項目が入力されていない場合、エラーメッセージを、入力したデータと一緒にフォームで再表示します。
  4. 送信データが正しい形式になるまで、上記の処理を繰り返します。

データを受け取るページで、入力値のチェック処理を行います。

  1. 必須入力のデータをチェックする。
  2. データが、正しいデータ型か?、データが条件に合致するか?等をチェックする。
    (ユーザー名が送信された場合、許可した文字だけになっているか?等)
  3. セキュリティのためにデータをサニタイズする。
  4. 必要であれば、前もってデータをフォーマットします。
    (前後の余計な空白文字を除去する、等)
  5. データベースに追加するデータを準備します。

フォームバリデーション(検証)の実装

次の3つのファイルを用意します。

ファイル内容
入力ページのビュー入力フォームを設置したビューファイル
結果ページのビュー送信が成功したときに、「成功」"メッセージを表示するビューファイル
コントローラー送信されたデータを受け取り、処理できるようにしたコントローラ内のメソッド

入力ページ

入力フォームのビューファイルを用意する。

applications/views/myform.php
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
<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>

結果ページ

バリデーションの結果を表示するビューファイルを用意する。

applications/views/formsuccess.php
  1
  2
  3
  4
  5
  6
  7
  8
  9
<html>
  <head>
    <title>マイフォーム</title>
  </head>
  <body>
    <h3>フォームは正しく送信されました!</h3>
    <p><?php echo anchor('form', 'もう一度!'); ?></p>
  </body>
</html>

コントローラー

入力ページを制御するコントローラーファイルを用意する。

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
<?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');
        }
    }
}
?>

検証ルールを設定する

バリデーションクラスの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
<?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では、指定したフィールドにどれだけ多くのルールを適用してもかまいません。
  • ルールは順番に続けて適用することができ、同時にデータを整形したり前処理を行ったりすることもできます。

配列を使った検証ルールの一括指定

一回で全ての検証ルールを設定したい場合、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
<?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); ?>

ルールの連結(カスケード)

set_rules()メソッドの、3番目の引数である「検証ルール」は、複数のルールを指定できます。
各ルールは「|」でつなげて記述します。

  1
  2
  3
<?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'); ?>

上記の例では、

  1. username フィールドは、5文字より小さくてはだめで、12文字を超えてはいけません。
  2. password フィールドは、パスワード確認フィールドと入力が一致しなければなりません。
  3. email フィールドは、正しいメールアドレスの形式でなければなりません。
    というルールを追加してします。

データの整形

バリデーションの機能は、データの整形をすることもできます。
たとえば、以下のように、ルールを追加することができます。

  1
  2
  3
<?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'); ?>

上記の例では、

  1. トリミング(空白の除去)を行う
  2. パスワードを MD5 に変換する
  3. 悪意のあるデータを取り除く "xss_clean" 機能を通す
    というルール(処理)を追加してします。
  • データの整形を指定するルール名として、
    htmlspecialchars、trim、MD5
    などのような引数を1つだけとるPHPの組込み関数はどれでもルールとして使用することができます。
  • もし入力エラーがあった場合、元のデータをフォームに表示させる必要があるため、検証が済んだ後に、データ整形をしたいのが普通の流れだと思います。
    =データの整形は、使い方に注意!

入力フォームの再表示

エラーメッセージ表示

Formヘルパーのvalidation_errors()関数を使います。(Formヘルパーをロードしておかないと使えません!)

validation_errors()

この関数は、バリデーションクラスのバリデータが返すエラーメッセージを取得して、出力します。
メッセージがなければ、何も出力しません。

入力ページで、エラーメッセージを表示させる場所に、以下のように記述します。

<?php echo validation_errors(); ?>

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS