Pear フォ-ム作成

Pear フォ-ム作成ファイル

Pearのなかにある、HTML_QuickForm クラスを利用してフォ-ムを作成していきます。
これを使用すると入力フォ-ムが簡単にできてしまいます。
実は入力フォ-ム作成に関しては HTML_QuickForm2 という HTML_QuickForm の後継クラスもあるのですが、 私が使用する範囲においては、HTML_QuickForm2 の優位性はほとんどありませんし、検証については HTML_QuickForm のほうが便利なのではないかと思っています。
よって、今回は HTML_QuickForm を紹介していきます。 ここでは、シンプルな入力フォ-ムを Pear で作成します。
ファイル内容は、左サイドナビ「Pear フォ-ム作成」の中の
「Pear フォ-ム作成 PHP ファイル」
から見てください。
コメントばっかりのファイルです。
HTML_QuickForm はXAMPPのなかに最初からインスト-ル済み
C:\xampp\php\pear\HTML\QuickForm
の中にありますので無意識に使用することができます。
2016/4/4日 以下6行追加。
XAMPP 5.6.19 版以降では Pear:::HTML_QuickForm はインスト-ルされていません。
XAMPP アップデ-ト データ復元
を参考に、
PEAR::HTML_QuickForm
をインスト-ルします。
又、レンタルサ-バには Pearはインスト-ルされていないことが多いようです。
左側のサイドナビの「レンタルサ-バにPearをインスト-ル」を見てください。

Pear フォ-ム作成の概要

Pear::HTML_QuickForm を組込んだ Pear フォ-ム作成の流れについてはフロ-チャ-トを見てください。

フロ-チャ-ト

フロ-からわかるように Pear フォ-ム作成ファイルは6つのメソッドからなっています。
それぞれのメソッドの使い方について説明していきます。

インスタンスの作成

これから説明するファイルは純粋なPHPファイルなので、先頭で charset=utf-8 宣言をしてください。
header('Content-type: text/html; charset=utf-8');
この宣言がないと日本語表示が文字化けすることがあります。
次に、
require_once 'HTML/QuickForm.php';
で、Pear HTML_QuickForm を読込みます。
ここで、new HTML_QuickForm インスタンスを作成します。
$form = new HTML_QuickForm('newus');
とすると、
form name="newus" id="newus"
となるフォ-ムが形成されます。
フォームの method 属性のデフォルト値は POST、 そして action 属性のデフォルト値は現在のファイル名となります。

フォームの生成

addElement メソッドを使用して form 部品を作ります。
書式は、
form 部品の種類, Name属性, Label 入力欄の名称等の表示文字
の順に記入します。
header を作成してみましょう。 これがあると最初の1行目に表題「会員登録準備」の文字が表示されます。
$form->addElement('header', 'title','会員登録準備');
次に、text form を作成します。
入力欄のスタイルは、
array('size' => 20, 'maxlength' => 20))
のように連想配列で指定します。
名前とメ-ルアドレスの作成は、
$form->addElement('text', 'uname','名前:', array('size' => 20, 'maxlength' => 20));
$form->addElement('text', 'email','メ-ル:<br>アドレス', array('size' => 24));
のようになります。
最後に、form 部品 submit を作成します。
この時は、name, value の順に記入します。
よって
$form->addElement('submit', 'submit','準備');
となります。

検証ルールの定義

検証ルールを定義するため addRule メソッドを使用します。
書式は、
$form->addRule(name,エラメッセージ,検証タイプ)
のように記述します。
検証タイプには、次のようなものがあります。
が、私には詳細が不明のものも・・・

検証の種類 概要 必要なパラメ-タ
required 必須項目
maxlength 文字の
最大長
最大長を
示す数値
minlength 文字の
最小長
最小長を
示す数値
rangelength 文字範囲
(m~n
文字)
最小値/
最大値を
示す数値
regex 正規表現 正規表現パターン
email メ-ルアドレス
のフォ-マット
lettersonly 文字列
のみ
alphanumeric 数値又は
アルファベット
nonzero 0でない
uploadedfile 必須
(ファイル)
maxfilesize ファイルサイズ
バイト数
制限
ファイルの最大
サイズを表すバイト整数値
mimetype MIME型 有効なMIME 型
を表す文字列
詳細省略
filename ファイル名 正規表現パターン
詳細省略
compare 2つの
要素間
の比較
比較演算子
(eq|neq|gt|
gte|lt|lte)
詳細省略

検証ルールの付与

名前に検証ルールを定義するため addRule メソッドを付与します。
名前を必須項目にします。
$form->addRule('uname', '名前は必須です', 'required');
名前入力欄がもし空欄ならば、「名前は必須です」のエラメッセージが出力されます。
名前の文字数を全角換算で10文字以内にします。
$form->addRule('uname','1~10文字(すべて全角文字の時)で記入してください','rangelength',array(1,30));
UTF-8の文字コードは全角文字は3バイトで表現されています。
よって、1~10文字以内を指定するには必要なパラメータを配列で、
array(1,30)
と指定する必要があります。
メ-ルアドレスを必須項目にします。
$form->addRule('email', 'メ-ルアドレスは必須です', 'required');
メ-ルアドレスの検証
$form->addRule('email', 'メ-ルアドレスが不正です','email');
これは楽ちんですね。ほとんど何も書かずに判定してくれます。

必須入力の注意文

setRequiredNote メソッドを使用して、* 印に対する注意文を設定します。
$form->setRequiredNote("*必須入力項目");
と記述することによって、* 印の付いた入力項目が必須入力項目であることを明示します。

フィルタの適用

applyFilter メソッドを使用して、フォ-ムの要素にフィルタを適用します。
書式は、
applyFilter(name 属性, フィルタ内容);
  です。
フォームのすべての要素にフィルタを適用したい場合は'name 属性'を'__All__'にします。
今回は、フォームのすべての要素に htmlspecialchars を適用したいので、
$form->applyFilter('__All__', 'htmlspecialchars');
とします。

なぜ htmlspecialchars を適用するの?

HTMLには特殊な意味(役割)を持っている文字(特殊文字)があり、その文字をHTMLでの意味(役割)としてではなく、 ただの文字(見た目は記号)として表示するために文字参照値に置き換える機能を持つのが htmlspecialchars 関数です。
フォームなどでユーザー(他者)からの悪意ある入力を無害化するのに用いられ、安全性を高めるために指定されます。

フォームの検証

validate メソッドを使用して、フォ-ム要素を検証します。
もしフォ-ム要素が正しければ、process メソッドを使用して function jyunbi に移行します。
正しくなければ、フォームを表示します。
process メソッドの書式は、
第1引数が飛び先、すなわち
検証が成功した場合に、フォームのデータを処理するためのユーザ定義関数、今回は、jyunbi です。
第2引数は、ユーザがそのフォームでファイルをアップロードする場合のみ必要となります。
今回はファイルのアップロードはありませんので、この引数は無視することになります。
よって、false とします。
ファイルのアップロードが必要な時はどのように記述するのかは、私には不明です。
まとめると
$form->process ('jyunbi', false);
となります。

フォームの表示

display メソッドを使用して、フォ-ムを表示します。
$form->display();

準備完了表示

function jyunbi を定義します。
isset 関数を使用して、準備がクリックされると、$_POST['submit']が true になりますので、 function jyunbi の処理が実行され、準備完了表示がされます。
function jyunbi(){
  if(isset($_POST['submit'])){
  echo "・・・・・・";
 }
}

isset関数

よく出てくる isset 関数、これについて少し説明します。
if(isset($_POST['submit'])){
  ・・・abcd・・・;
}
この書き方はよく出てきますね。
isset の使い方の定番、定石ですよね。
$_POST['submit'] の入れ物があって変数がセットされていれば、
  ・・・abcd・・・
の処理をするのですね。
入れ物があっても変数がセットされていないか、
(一度も値が代入されておらず初期化されていない変数は「NULL」が格納されていると見なされる)
あるいは、$_POST['submit'] の入れ物がない、影も形もなければ、 何もしないということになります。
!isset はこの逆ということになります。
この辺が、最初、私にはよく理解できない事柄でした。
みなさんは正確に理解できていますか?


Pear フォ-ム作成ファイル動作確認に続く

63Pear Villageに戻る