PHPでプログラムを作成していると、結構手間を食うのが、バリデーション処理です。今日は、CodeIgniterのフォーム・バリデーションクラスがいかに便利か勉強してみましょう。
バリデーションとは、検証(する)、実証(する)、認可(する)、妥当性確認、などの意味を持つ英単語。ITの分野では、対象がその仕様や文法などに照らして適切に記述・構築されているか否かを検証すること、という意味で使われる(IT用語辞典e-Wordsより)。
以前、『CodeIgniterのフォームヘルパ』で作成した『testmail_view.php』を多少変更します。<body>のすぐ下に下記のコードを入力し、最初の1行を削除します。
<?php echo validation_errors(); ?> <?php echo form_open('testmail'); ?>
次に、メールが送信された時の成功ページ『mail_success.php』名で新規ファイルを作成し、『application/views』フォルダに保存します。<body></body>の間に、下記のコードを入力します。
<h3>メールは送信されました!</h3><br /><br /> <?php echo anchor('testmail','他にメール送信する!');?>
最後にコントローラを作成します。前回作成した『testmail.php』を多少変更します。
class Testmail extends CI_Controller{ function index() { $this->load->helper(array('form', 'url')); $this->load->library('form_validation'); if ($this->form_validation->run() == FALSE) { $this->load->view('testmail_view'); } else { $this->load->library('email'); $mailto=$this->input->post('mailto'); $subject=$this->input->post('subject'); $body=$this->input->post('body'); $this->email->from('nakada@winroad.info','winroad徒然草'); $this->email->to($mailto); $this->email->subject($subject); $this->email->message($body); $this->email->send(); $this->load->view('mail_success'); } } }
それでは、実際にブラウザで確認してみましょう。全て入力して送信してみました。
すると入力値が全てクリアされてメールも送信されません。何故でしょう。考えてみれば特に不思議もありません。なぜなら、まだ検証ルールを何も設定していないからです。バリデーションクラスは、デフォルトでは、FALSEを返します。run()メソッドは、1つも失敗せずにユーザが指定したルールに適合する場合にのみTRUEを返すからです。
それでは、バリデーション(検証ルール)を設定しましょう。
$this->form_validation->set_rules()
これが、検証ルールを設定するメソッドです。set_rules()の中には、3つの入力パラメータを指定します。最初のパラメータは、フォームのname属性で、第2パラメータは、このフォームの表示名、最後のパラメータが、検証ルールです。
それでは、簡単な検証ルールである『requied(入力値の有無)』で検証ルールを作成してみます。下記のコードを挿入します。
$this->form_validation->set_rules('mailto','宛先','required'); $this->form_validation->set_rules('subject','件名','required'); $this->form_validation->set_rules('body','内容','required');
それでは、ブラウザで確認してみます。何も入力しないで、送信ボタンを押してみます。下記のように表示され、メールも送信されません。
次に、全てを入力して、送信してみます。下のように表示されて実際にメールも届きました。
ルールの連結(カスケード)
さて、上記のバリデーションは入力値の有無だけでしたが、CodeIgniterは複数のルールを互いにパイプすることができます。『testmail_view』を多少変更して、下記のように作成してみます。
これに複数のルールをセットしてみましょう。下記のようにコードを変更します。
$this->form_validation->set_rules('yourname','あなたの名前','trim|required|xss_clean'); $this->form_validation->set_rules('mailto','相手先メアド','trim|required|valid_email|matches[mailconf]|htmlspecialchars'); $this->form_validation->set_rules('mailconf','確認用メアド','trim|required|htmlspecialchars'); $this->form_validation->set_rules('subject','件名','','trim|htmlspecialchars'); $this->form_validation->set_rules('body','内容','trim|required|htmlspecialchars');
それでは、ブラウザで確認してみます。『あなたの名前』を未入力にし、メールアドレスに間違った形式のメールアドレスを入力しました。すると下記のように表示されました。
htmlspecialchars、trim、MD5などのような引数を1つだけ取るPHPの組み込み関数はどれでもルールとして使用することができます。
フォームの再入力
ところで、このままでは、些細な間違いでも最初から入力直ししなくてはなりません。CodeIgniterには、これを補うヘルパー関数が、用意されています。
set_value('フィールド名')
それでは『testmail_view.php』を多少手直しします。Dreamweaverのデザイン画面でテキストフィールドをクリックして、初期値に『<?php echo set_value('yourname');?>』と入力します。コードを直接入力するなら、『value="<?php echo set_value('yourname');?>』を該当箇所に挿入して下さい。
同じように残りのフィールドも入力します。下記のように入力して下さい。
それではブラウザで確認してみます。『あなたの名前』を空白で、メールアドレスの間違った形式の入力をしてみました。以下のように表示されました。
『フォーム・バリデーションクラス』は、まだまだ長いので、本日はここまでにします。後日続きをやりたいと思います。お疲れ様でした。
WinRoadお奨め書籍
今現在唯一と言っていい、CodeIgniterの日本語版書籍です。ただ、3年前に執筆された書籍で、執筆時のバージョンが1.6.1なので、最新の日本語バージョンが2.0.1であるのを勘案すると若干古いのでは、という印象があります。実際、コードの仕様も変わっていますので、きちんと読み替えることができないとそこで行き詰まってしまう可能性があります。ですが、その辺のマイナス面を考えても余りある程の良書だと思います。早く2.0対応の改訂版が出ることを期待します。私もこの本でCodeIgniterの勉強を始めました。
翔泳社
売り上げランキング: 78181