>

PHPで手軽に高機能なフォームを作成する

PHPで手軽に高機能なフォームを作成する

  • 2015/03/04
  • Web

クラスライブラリg737a6b/php_formを使用することで、PHPで手軽に高機能なフォームを作成することができます。

会員登録やアンケート、お問い合わせなど、ユーザーから入力を受けるあらゆる場面で使用できます。

 

特徴

g737a6b/php_formはMITライセンスかつ高機能かつ設置が容易です。

MITライセンス

MITライセンスで公開されており、商用非商用問わずどんなプロジェクトにも無料で利用できます。

バリデーション

必須項目、最大・最小文字数、メールアドレスやURLなどの様々な書式をチェックできます。
また、商品コードのような独自の書式については個別に正規表現を設定可能です。

フィルター

全角数字を半角数字に、半角カタカナを全角カタカナに、英字を全て大文字に、といった変換を自動で行うことができます。

付加文字列

日付の「月」や「日」、年齢の「歳」、郵便番号の「〒」といった文字列を、ユーザーの入力とは別に設定することができます。
確認画面やメール本文でのみこれらの文字列を含める、ということが柔軟に行えます。

無制限のページ

何十、何百ページに及ぶ大規模なフォームも作成できます。
入力、確認、完了の3画面である必要はありません。

全てのインプット形式

テキストボックス、セレクトボックス、ラジオボタン、チェックボックス、テキストエリアの全てのインプット形式に対応しています。

メール送信

g737a6b/php_mailと組み合わせることで、管理者宛メールや自動返信など、自在にメール送信を行うことができます。
フォームデータから自動でメール本文用のテキストを生成する機能もあり、項目のグルーピングも可能です。

単一のクラスライブラリ

必要なファイルはForm.phpの1ファイルのみです。
これを任意のディレクトリに設置し、PHPスクリプトから読み込めばすぐに使用できます。

 

デモページ

g737a6b/php_formを使用したフォームのデモページはこちら

 

ダウンロード

GitHubからzipファイルをダウンロードしてください。

g737a6b/php_form

zipファイルを展開すると、デモページのソース(index.php)、libディレクトリ内にライブラリ本体(Form.php)が存在します。

デモページには基本的な使用方法と実用的な使用方法が一通り含まれています。

 

最も簡単な使い方

1. PHPの設定とクラスの読み込み

// 文字コードと言語の設定
mb_internal_encoding('UTF-8');
mb_regex_encoding('UTF-8');
mb_language('Japanese');

// クラスを読み込み
require_once(dirname(__FILE__).'/lib/Form.php');

// セッションを開始
if( !session_id() ) session_start();

文字コードにはUTF-8を指定してください。

2. インスタンスを作成

// インスタンスを作成
$form = new Form('form_demo');

コンストラクタの第一引数によって、フォームが使用するセッション領域を指定することができます。
この例では、フォームは$_SESSION['form_demo']以下のみを使用します。
一つのドメインに複数のフォームが存在する場合はこれをそれぞれ任意の文字列に変更してください。

3. 項目を登録

// 項目を登録
$form->register_item('test_item', array(
	'page' => 1,
	'label' => 'テスト項目',
	'rule' => array('format' => Form::FMT_INT, 'minlen' => 2, 'maxlen' => 4),
	'required' => true
));

この例では、name属性をtest_itemとする項目を登録しています。
第二引数の配列の各値は次のような意味です。

page: 1ページ目で送信される(最初の画面でユーザーが入力する)
label: 表示上の名前が「テスト項目」
rule: 2文字以上4文字以下の整数のみ
required: 必須項目

この他にもaddやfilterという便利なオプションがあります。
page以外のオプションの指定は全て任意で、pageオプションについても1ページ目の場合は省略できます。

4. フォーム状態を確定

// フォームの状態を確定
$page = $form->settle();

settle()によって、POSTデータに対するページ遷移が確定します。
実行前と実行後では、get_page()によって取得できるページ番号が異なる場合があります(進む、戻る、リセット時)。

5. 完了時の処理

if( $page === 3 ){
	// 任意の処理(メール送信やデータベース登録など)
	// ...

	// フォームをクリア
	$form->end_clean();
}

一般的な入力→確認→完了という流れでは、3ページ目が完了にあたるので、settle()やget_page()の返り値が3であるときに完了時の処理を行います。
完了時には必ずend_clean()を実行してください。

内容確認時のhtmlサンプル

<form action="" method="post">
	<dl>
		<dt>テスト項目</dt>
		<dd><?php $form->v('test_item'); ?></dd>
	</dl>
	<div>
		<input type="submit" name="<?php echo $form->get_name_for('enter'); ?>" value="次のページ" />
		<input type="submit" name="<?php echo $form->get_name_for('back'); ?>" value="前のページ" />
	</div>
</form>

入力時のhtmlサンプル

<form action="" method="post">
	<dl>
		<dt>テスト項目</dt>
		<dd>
			<input type="text" name="test_item" value="<?php echo $form->h($form->get_value('test_item')); ?>" />
			<?php $form->e('test_item'); ?>
		</dd>
	</dl>
	<div>
		<input type="submit" name="<?php echo $form->get_name_for('enter'); ?>" value="次のページ" />
		<input type="submit" name="<?php echo $form->get_name_for('reset'); ?>" value="リセット" />
	</div>
</form>

より詳細な使用方法は、デモページindex.phpのソースを参照してください。

おすすめ記事ランダム

この記事にコメントする