私のパソコン雑記帖

ファイル添付対応フォームメールの設計

カテゴリー: PHP
10May2005
更新2Aug2014
更新18Feb2016

フォームメールは、ホームページに用意されたフォーム画面に情報を入力して送信ボタンなどをクリックしてメールを送る仕組みです。基本的な手順としては、入力されたデータをサーバーにアップロードし、サーバー側でデータを受信・チェックしてから mail 関数に組み込んで、指定されたメールアドレスに送ります。

フォーム記述の仕方

添付ファイルがない場合は、
<form action="xxxxx.php" method="post">
<input type="text" name="text1" size="xx">//情報入力
<input type="submit" value="送信">//送信ボタン
</form>
であり、入力用の input type には textarea select radio checkbox 等があります。
添付ファイルがある場合は、
<form action="xxxxx.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="max_file_size" size="xxxxx">
<input type="file" name="file1" size="xx">//ファイル名入力
<input type="submit" value="送信">//送信ボタン
</form>
となりますが、いずれにしても特にまぎらわしいことはありません。

受信の仕方

添付ファイルがない場合は、
$xxxx=$_POST['xxxx'] が基本であり(xxxx は name で指定した文字列)、これに特殊文字の変換関数を加味して、
$xxxx=(!isset($_POST['xxxx'])) ? "":htmlspecialchars($_POST['xxxx']);
とするのが定型化した受信方法であり、これも特にまぎらわしいことはありません。

添付ファイルがある場合の受信方法は少し様相が異なります。これについてはファイルアップロードの仕様で詳細に解説しています。

フォームで受信したデータに不備があって、入力画面に戻って再入力を促す際、最初の入力内容を保持するのがユーザーには便利です。input type が text textarea select radio checkbox ではそれが出来ます。しかし input type が file の場合、即ち添付ファイルの場合は、最初の入力内容を保持できないという問題があります。この問題の対応についてもファイルアップロードの仕様で触れています。

受信したデータのチェック

受信したデータに不備がないかチェックします。もっとも基本的なことでは、必須入力項目が入力されているかどうか。その他、電話番号やメールアドレスの入力が書式に合っているか、入力された日付が存在するかどうか、等々あります。また半角カタカナの入力は弊害が多いので全角に変換するなどの調整が必要な場合もあります。詳細は省きますが、汎用スクリプトを開くと、その中にある library/decodeCheck.inc に主なチェックや調整の機能が記載されています。

受信したデータを mail 関数に組み込む方法

色々な約束事がありかなり複雑です。添付ファイルがある場合は、更に複雑になります。これについてはmail 関数の実装で詳細に解説しています。

汎用スクリプト(PHP CGI)

以上が「ファイル添付フォームメールの設計」の要点ですが、これに基づき汎用スクリプトを自作し、折りにふれて幸便に利用しています。

この汎用スクリプトにはフォーム要素を編集するツールが用意されており、編集終了時に、実行ファイルである form.php(入力) check.php(受信・チェック) send.php(メール送信)がカスタマイズされて自動生成されます。オプションとしてデータベース・テーブルも生成されます。参照:汎用スクリプト



コメント