テンプレート

メールフォーム・確認画面・送信完了画面・エラー画面はそれぞれ別のテンプレートファイルなので、
デザインやレイアウトは個別に変更出来ます。
文字コードはUTF-8で作ってありますが、Shift-JISやEUCの出力にも対応しています。

メールフォーム

formタグは次のようになります。actionでzeromail.phpを指定してください。

<form action="zeromail.php" method="post" class="zeromail">

複数設置する場合は、2つ目以降のフォームエリアにフォームのIDを設定するhiddenが要素が必要です。

<input type="hidden" name="id" value="2" />

name="id"value="フォームのID"になります。
IDは半角英数字・アンダーバー・ハイフンを組み合わせた文字列のみOK。
init.phpを複製して、複製したinit.phpにhiddenで設定したIDと同じ数字を付け足します。(例:init2.php)

ファイルを添付する場合はenctype="multipart/form-data"が必要です

<form action="zeromail.php" method="post" enctype="multipart/form-data" class="zeromail"> 

入力項目

フォームのレイアウトと項目は自由に作れます。 inputのnameとその名称設定が必要です。

予約されているname値

下記のname値を使うと、条件設定をつけなくても規定のチェックを行います。
完全一致ではなく文字列が含まれているかどうかで判別するので、ちょっと違っても(name2、useremailなど)有効です。

name="name" 名前(必須入力にするかどうか、日本語の有無)
入力必須になるのは"name"だけです。
init.phpでALPHANAMEtrueにすると半角英数のみの名前でも送信できるようになります。
name="message" メッセージ(リンク数、禁止語句、日本語の有無)
name="email" メールアドレス(必須。文型チェックと使用文字制限)
name="tel" 電話番号
ハイフンなしの場合は先頭の市外局番と文字数をチェックします。全角数字は半角に変換します。
  1. 先頭3桁が「090」「080(0800含む)」「070」以外であり且つ、市外局番は2~5桁、市内局番は1桁(田舎の方. 北海道では普通)~4桁(東京とか)、下4桁は固定で、ハイフン含めて合計12桁である場合
  2. 携帯の古い090と新しい080およびPHSの070から始まる電話番号の場合は、3-4-4桁フォーマットでハイフン含めて合計13桁の場合
  3. フリーダイヤル「0120」から始まる電話番号の場合は、4-3-3桁および4-2-4桁フォーマットでハイフン含めて合計12桁
  4. フリーダイヤル「0800」から始まる電話番号の場合は、4-3-4桁でハイフン含めて合計13桁
name="url" URL(http://から始まる文字列。文型チェック)
name="zipcode" 郵便番号(半角英数7文字か、ハイフン込みで8文字(3文字+ハイフン+4文字))
郵便番号が存在するかどうかは確認しません。
name="reply" 自動返信するかどうか

自動返信

name="reply"は入力者の希望で自動返信するオプションです。

<label><input class="check" name="reply" type="checkbox"  value="true" />メールの写しを受け取る</label>

ini.phpで自動返信の設定をtrueにした場合はフォームからの設定が無視されます。
※ver0.8ではname="Reply"も有効ですが廃止予定なので変更推奨
※ver1.1でname="Reply"は廃止されました

メールの自動返信はemailというname値に入力されたアドレスに返信を行いますが、
メアドの入力ミスなどで送信できなくてもエラーは出ません。(メールキューは溜まります)

条件設定

name値の後ろにアンダーバーでオプション値を付ける事で対応したチェックと変換を行います。
複数同時につける場合は後ろに繋げてください。

  • name="hoge_req" _reqで必須入力にする
  • name="hoge_num" _numで数字入力のみ許可(全角は半角に変更)
  • name="hoge_eng" _engで半角英数のみ許可(全角は半角に変更)
  • name="hoge_jpz" _jpzで全角に自動変換
  • name="hoge_jpk" _jpkでカタカナのみ許可
  • name="hoge_jph" _jphでひらがなのみ許可
  • name="hoge_jpa" _jpaでひらがなorカタカナのみ許可

JavaScriptでバリデーションを行う場合は、JavaScriptのバリデーションと PHPに渡すバリデーションの条件を揃えてください。

チェックボックス・マルチセレクトメニューについて

値が複数選択される可能性のあるチェックボックスとマルチセレクトメニューは、nameの語尾に[]大カッコをつける必要があります。

<input name="hoge[]" type="checkbox" value="check" />

チェックボックス・ラジオボタン・ファイルフィールドの必須入力指定

name="require"な非表示フィールドで入力必須にしたいフォームのnameをカンマで区切って指定しときます。
この指定は_reqが有効なフォーム要素には無効です。

<input type="hidden" name="require" value="name値,name値" /> 

※Ver1.4からファイルフィールドにも有効になりました

出力の整形 ver1.4

いくつかのフォーム入力内容を1つにまとめたい場合は、非表示フィールドでrep[name値]を利用します。

<input type="hidden" name="rep[name]" value="" />

設定例

例えば、誕生日の場合。
yearが西暦、monthが月、dayが日という入力フォームを作ることになりますが…

<!--入力フォーム-->
<select name="year">
	<option value="2010">2010</option>
	<option value="2009">2009</option>
	<!-- etc.. -->
</select>年
<select name="month">
	<option value="1">1</option>
	<option value="2">2</option>
	<!-- etc.. -->
</select>月
<select name="day">
	<option value="1">1</option>
	<option value="2">2</option>
	<!-- etc.. -->
</select>日

これをそのままinit.phpで設定すると次のようになって、

$inputs = array(
	'year'=>'誕生日(年)',
	'month'=>'誕生日(月)',
	'day'=>'誕生日(日)',
	//etc...
);

確認画面やメール本文にはこう出力されます。

●誕生日[年]
  2010
●誕生日[月]
  1
●誕生日[日]
  1

誰もが想像する理想型はこんな感じだと思います…

●誕生日
  2010年1月1日

出力を整形する為にrepを使う場合は、まずinit.phpの設定にまとめ用のname値(birth)を設定し

$inputs = array(
	'birth'=>'誕生日',
	//etc...
);

フォームの非表示フィールドでrep[birth]の設定を行ないます。

<input type="hidden" name="rep[birth]" value="{year}年{month}月{day}日" />

中括弧で置換したいフォームのnameを囲ったものがタグになります。

値が存在する時だけ前後の文字列を表示する場合には、タグの中でセミコロンを使います。
構文は、{前に入れる文字列:name:後ろに入れる文字列} です。

次の例はこの機能の実装で変更したデフォルトのお問い合わせフォームの抜粋です。

とにかく早く連絡が欲しい

※「水曜日午前」「夕方5時以降」「土曜日」など、希望時間がある場合は以下へ入力してください
だと都合が良い

<tr>
	<th scope="row"><label for="time">ご連絡希望時間</label></th>
	<td><p><label><input class="radio" name="time" type="radio" value="希望なし" checked="checked" />希望なし</label>
			<label><input class="radio" name="time" type="radio" value="とにかく早く連絡が欲しい" /></label>
			とにかく早く連絡が欲しい</p>
		<p><span class="small">※「水曜日午前」「夕方5時以降」「土曜日」など、希望時間がある場合は以下へ入力してください</span><br />
			<input class="text" name="timetxt" type="text" id="timetxt" size="30" />
			だと都合が良い</p></td>
</tr>

テキストエリアに記入があった時だけ「~だと都合がいい」という記述を添えたいので、
非表示フィールドには次のように設定してあります。

<input type="hidden" name="rep[time]" value="{time}{(:timetxt:だと都合が良い)}" />

入力内容のマッチング ver1.4.4

フォームに入力された内容が、他のフィールドの内容と一致するか確認する場合は、
非表示フィールドでmatchを利用します。

<input type="hidden" name="match" value="email+email2,hoge1+hoge2" />

確認したい入力フォームのnameを+で繋ぐと、後ろに記入されたものが前のものと一致するか調べます。
複数項目がある場合はカンマで分けてください。
確認する項目(後ろ)のnameをinit.phpの「inputのnameとその名称設定」に追加する必要はありません。

確認画面 (check.php)

check.phpは通常送信した時に内容確認を出力する画面です。
ファイルの冒頭に次のコードが必須です。

<?php require_once('confirm.php'); ?> 

引用符に囲まれた値は確認画面のファイルから見たconfirm.phpのパスです。

内容確認の本文はini.phpで設定された出力形式で表示します。

define('VIEWSTYLE','Table'); 
  • なにもいれない → 段落(em=項目名 span=値)
  • Table → テーブル行(th=項目名 td=値) 初期値
  • List → 定義リスト(dt=項目名 dd=値)

これらのタグにはラベルにlabel、値にvalueというクラスが付与されます。
直接confrm.phpの出力部分を書き換えれば変更出来ます。

テーブルと定義リストは行の部分しか出ないので、選択した場合は上下にtableまたはdlタグが必要です。

<form action="zeromail.php" method="post" class="zeromail">
<p><?php Message();//メッセージ表示 ?></p>
<fieldset>
<legend>Contact details</legend>
<table id="confirm" summary="送信内容確認">
<?php ConfDisp();//確認表示 ?>
</table>
<div class="button">
<?php Button();//ボタン表示 ?>
</div>
</fieldset>
</form>

Message()で表示される文字列について

init.phpで変更出来ます。
エラー時のメッセージに <span class="error">
エラーが無かった時のメッセージに <span class="confirm"> タグがついています。

送信完了画面(completion.html)

completion.htmlは送信後に表示される画面です。ただ飛ばすだけなので、自由につくれます。
必要なければini.phpの完了後表示する画面の設定を、index.htmlとかにすればトップに飛びます。

define('SUCCESS','completion.html'); 

エラー画面 (error.php)

error.phpはエラー発生時に表示される画面です。
メッセージとボタンの出力は確認画面と同じ関数です。
エラーメッセージには<span class="error">と一緒に出力されます。

<?php Message();//メッセージ表示 ?>
<?php Button();//ボタン表示 ?>
				

メッセージ出力サンプル:

<span class="error">送信データがありません。</span>