PEAR::HTML_QuickForm でフォームの送信内容を検証する

送信データの検証

HTML_QuickForm を利用すると、フォームから送信されたデータが正しく入力されているかや、正しい書式で入力されているかどうかを簡単に検証することができます。
サーバサイトでのデータの検証は、特にセキュリティの観点から見ても重要なものです。それを HTML_QuickForm のメソッドひとつで簡単に行えることは大きな利点と言えます。

addRule メソッド

HTML_QuickForm にはフォームから送信されたデータを検証する addRule メソッドが実装されています。構文は以下の通りです。

void HTML_QuickForm::addRule(mixed $elements, string $message, string $type[, string $format=''[, string $validation='server'[, bool $reset=FALSE[, bool $force=FALSE]]]])
$elements : 検証対象の要素名 $message : 検証エラー時に表示するメッセージ $type : 検証の型 $format : 検証時に必要なパラメータ $validation : 検証を実行する場所(server|client) $reset : エラー発生時に入力値をリセットするか $force : フォーム要素が存在しなくても、ルールを強制的に適用するかどうか

addRule メソッドの3番目の引数である $type は、その検証対象の要素の入力が必須であるかどうかや、どういった形式で入力されている必要があるかどうかなどを示すもので、種類としては下表のものがあります。

検証の種類概要必要なパラメータ
require必須項目-
maxlength文字の最大長最大長を示す数値
minlength文字の最小長最小長を示す数値
rangelength文字範囲(m~n文字)最小値を示す数値, 最大値を示す数値
regex正規表現正規表現パターン
emailメールアドレスのフォーマット-
lettersonly文字列のみ-
alphanumeric数値、又はアルファベット-
nonzero0でないこと-
uploadedfile必須(ファイル)-
maxfilesize最大ファイルサイズ
mimetypeMIME型MIME型
filenameファイル名正規表現パターン
compare2つの要素間の比較比較演算子
(eq|neq|gt|gte|lt|lte)

以下、簡単なサンプルスクリプトになります。

test4qform.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>PEAR::HTML_QuickFormでフォームの送信内容を検証するサンプル</title>
</head>
<body>
<?php
require_once ('HTML/QuickForm.php');

$form = new HTML_QuickForm('inquiries', 'POST', '');

$form->addElement('header', 'MyHeader', 'IDとパスワードを入力してください');
$form->addElement('text', 'id', 'ID:');
$form->addElement('password', 'cmpPasswd', 'パスワード:');
$form->addElement('password', 'cmpRepeat', 'パスワード(再入力):');
$form->addElement('submit', 'send', '送信');

$form->addRule('id', 'IDが入力されていません', 'required', NULL, 'client');
$form->addRule('cmpPasswd', 'パスワードが入力されていません', 'required', NULL, 'client');
$form->addRule('cmpRepeat', 'パスワードが再入力されていません', 'required', NULL, 'client');
$form->addRule('id', '全項目英数字で入力してください', 'alphanumeric', NULL, 'client');
$form->addRule(array('cmpPasswd', 'cmpRepeat'), 'パスワードが一致しません', 'compare', null, 'client');

if ($form->validate()) {
    echo '正常にログインできました。';
} else {
    echo 'IDとパスワードを入力してログインしてください。';
    $form->display();
}
?>
</body>
</html>

最終更新 2010-04-11

この記事へのコメント

まだコメントは投稿されていません。

カテゴリー

その他



スポンサードリンク