株式会社ケー・アイ・ピー

TEL: 0594-37-0570 FAX: 0594-37-0571
E-mail: info@kip.ne.jp

フォームデコード 使用方法詳解

基本的な使い方

最も基本的な使い方は、FORMタグを次のように記述します。

実際には「送信先メールアドレス( _to )」にフォームを送信したいE-Mailアドレスを入力します。 ここは必ず指定する必要があります。

<FORM METHOD=POST ACTION="http://virtual.kip.ne.jp/cgi-bin/formdecode/formdecode.cgi">
<INPUT TYPE="hidden" NAME="_to" VALUE="送信先メールアドレス">
お名前: <INPUT TYPE="text" NAME="name"><BR>
コメント: <INPUT TYPE="text" NAME="comment"><BR>
<INPUT TYPE="submit" VALUE=" 送信 ">
</FORM>

これは次のように表示されるので、

お名前:
コメント:

と入力して送信ボタンを押すと、

name = 切符太郎
comment = はじめまして

といったメールが、”送信先メールアドレス”宛へ送られて来ます。 なお、この場合メールの題名(Subject:)は指定されていませんので、省略値「output from formdecode cgi」となります。

送信者、送信先、題名を指定する

送信者や送信先、題名を任意に指定することができます。 これらの指定には、きまったNAME属性名を付ける必要があります。 以下に送信者、送信先、題名に関する予約されたNAME属性名を示します。 (予約された名前は全て先頭に"_"が付いています)

送信者: _from
送信先: _to , _cc , _bcc
題 名: _subject
返信先: _reply

これらは一般のメールソフトで使う場合と同じ名前ですが、先頭に"_"が付いています。
メールアドレスには、次のようなパターンを使うことができます。

kiptaro@yourdomain.co.jp
KIP Taro <kiptaro@yourdomain.co.jp>
"KIP Taro" <kiptaro@yourdomain.co.jp>
kiptaro@yourdomain.co.jp (KIP Taro)

HTMLにこれらのアドレスを埋め込む場合、< や > は記号のまま記述すると HTMLタグとして誤認識されてしまいますので、実際には &lt; や &gt; で記述します。

また、_cc などを複数指定する場合は、次のどちらかの方法を使います。

  1. カンマで区切って複数指定
    • <INPUT TYPE="hidden" NAME="_cc" VALUE="sazae@foo.ne.jp,masuo@foo.ne.jp">
  2. 同じNAME属性名で複数行を指定
    • <INPUT TYPE="hidden" NAME="_cc" VALUE="sazae@foo.ne.jp">
    • <INPUT TYPE="hidden" NAME="_cc" VALUE="masuo@foo.ne.jp">

また、これらメール送信に関わるアドレスについては、アドレス形式のチェックが行われます。

送信確認画面を指定する

フォームに入力されたデータをすぐに送信せずに、確認画面を表示してから送信することができます。 この確認画面は、別途HTMLで作成する必要があります。

具体的な例としては 動作サンプル のHTMLソースを見ていただくのがわかり易いのですが、 ここでは、確認画面を作る上での必要最低限のきまりを示します。

送信確認を指定する
次のように予約されたNAME属性名をHTMLに埋め込むことで、送信確認HTMLを表示してから送信することができます。
<INPUT TYPE="hidden" NAME="_confirm_html" VALUE="送信確認HTMLのファイル名">
ここで、送信確認HTMLファイルは、フォームと同じディレクトリに置いておく 必要があります。
フォーム入力データを表示させる方法
次のような特殊変数をHTMLに埋め込むことで、対応するフォーム入力値を展開します。 名前は大文字、小文字を区別しますので、フォームで定義したままの名前を使ってください。
$FORM{NAME属性名}
全入力データを展開する特殊変数を必ず指定する
次のような特殊変数を送信確認HTMLの<FORM>タグの直後などに挿入してください。 この変数が見つかるとフォーム入力されたデータ全てをhidden属性で確認画面に展開します。 この行を忘れると、何も送信されなくなってしまいます(空データ送信チェックが有効ならエラーとなります)ので、 必ず指定してください。
$FORM{_alldump}
なお、この特殊変数は必ず一行にこれのみ書いてください。他に何かを記述しても確認画面出力時には消滅します。
  • ※ 送信確認HTMLには、この他にも後述する$ENV変数や$SYS変数、および$SELECT、$IF文を埋め込むことができます。
  • ※ 送信確認用HTMLに何らかのリンクや画像を記述する場合は、リンクを完全なURL(http://ではじまるURL)で記述してください。
  • ※ 送信確認画面は文字コード x-euc-jp に変換されて出力されます。

送信完了画面を指定する

標準でも簡単な送信完了画面(送信完了後に表示される画面)が出力されますが、 指定したページを表示させることもできます。

送信完了画面はHTMLで作成します。何ら変数展開されませんので全くお好きなように記述してください。送信完了画面を出力するには、次の2通りの方法があります。

1.CGIから出力させる
<INPUT TYPE="hidden" NAME="_accept_html" VALUE="送信完了HTMLのファイル名">
ここで、送信完了 HTMLファイルは、フォームと同じディレクトリに置いておく 必要があります。
  • この場合、 HTMLに記述されるリンクは、完全な URLで記述してください。
  • 送信確認画面は文字コード x-euc-jp に変換されて出力されます。
2.Locationヘッダを使う
<INPUT TYPE="hidden" NAME="_accept_url" VALUE="送信完了HTMLの完全なURL">
  • 送信完了HTMLのURLは完全なURL(http://ではじまるURL)で記述してください。
  • こちらの方法の場合、Locationヘッダに対応していない古いブラウザでは表示できない場合があります。

メール用テンプレートを指定する

テンプレートを使用して、整形されたメールを送ることができます。 テンプレートには、Plain Text 形式(通常のテキストメール)とHTML 形式を用いることができます。

HTML のテンプレートではメール自体はマルチパートになっていません。よって、Content-Type に text/html と指定しただけで表示できるメールソフトでしかHTML 形式で表示できません。 特別な理由がない限り、Plain Text形式を使用した方が無難でしょう。

1.テンプレートを指定するには

次のような予約されたNAME属性名をHTMLに埋め込むことで、テンプレートが使用できます。

Plain Text形式の場合
<INPUT TYPE="hidden" NAME="_template" VALUE="テンプレートのファイル名">
HTMLの場合
<INPUT TYPE="hidden" NAME="_template_html" VALUE="テンプレートのファイル名">

ここで、テンプレートのファイルは、フォームと同じディレクトリに置いておく 必要があります。

2.フォーム入力データを表示させる方法

次のような特殊変数をHTMLに埋め込むことで、対応するフォーム入力値を展開します。 名前は大文字、小文字を区別しますので、フォームで定義したままの名前を使ってください。

$FORM{NAME属性名}

  • ※ テンプレートには、この他にも後述する$ENV変数や$SYS変数、および$SELECT、$IF文を埋め込むことができます。
  • ※ HTMLテンプレートで何らかのリンクや画像を記述する場合は、リンクを完全なURL(http://ではじまるURL)で記述してください。

送信確認画面で指定できる変数と式

テンプレートおよび送信確認画面で使用できる特殊変数や式について説明します。 特殊変数は、一行に複数の異なるものを指定することができます。

$FORM変数

書式: $FORM{NAME属性名}

フォームで定義したINPUTフィールドに1対1で対応する変数です。 定義されていない名前を指定するとNULL文字(空文字)に置き換えられます。

$ENV変数

書式: $ENV{環境変数名}

http環境変数として利用可能な全てのものを指定することができます。CGIがこれを実際の値に置き換えます。 環境変数としては次のようなものが指定できます。

  • GATEWAY_INTERFACE
  • DOCUMENT_ROOT
  • REMOTE_ADDR
  • SERVER_PROTOCOL
  • REQUEST_METHOD
  • REMOTE_HOST
  • QUERY_STRING
  • HTTP_USER_AGENT
  • HTTP_REFERER
  • PATH
  • TZ
  • HTTP_ACCEPT
  • HTTP_CONNECTION
  • REMOTE_PORT
  • HTTP_ACCEPT_LANGUAGE
  • SCRIPT_NAME
  • HTTP_ACCEPT_ENCODING
  • SCRIPT_FILENAME
  • SERVER_NAME
  • REQUEST_URI
  • SERVER_PORT
  • HTTP_HOST
  • SERVER_ADMIN

$SYS変数

書式: $SYS{定義名}

日付と時刻に関する以下のような定義名を指定できます。以下は置換例です。

定義名 置換例
DATE 1998/07/30
TIME 10:25:40
YEAR 1998
MONTH 07
DAY 30
HOUR 10
MIN 25
SEC 40
GMTIME Thu, 30 Jul 1998 10:25:40 +0900

$SELECT文

書式: $SELECT{NAME,評価値(1)=置換値(1), 評価値(2)=置換値(2),..,評価値(n)=置換値(n)}

1対1の選択置換です。NAMEはフォームで定義したNAME属性名です。 フォーム入力値のみに対応する規則なので、$ENVや$SYSの特殊変数は使えません。

以下に例を挙げます。

性別:<INPUT TYPE="radio" NAME="sex" VALUE="1">男 <INPUT TYPE="radio" NAME="sex" VALUE="2">女

というフォームで

性別:女 と入力された場合に、

$SELECT{sex, 1=男, 2=女}

と指定すると、この$SELECT文全体が「女」に置換されます。

$IF文

書式: $IF{NAME > 評価値, 値(真), 値(偽)}

書式中の">"は一例で、評価式に使える記号などは以下のとおりです。 NAMEはフォームで定義したNAME属性名です。この$IF文も暗黙でフォーム入力値のみに対応しますので、 $ENVや$SYSの特殊変数は使えません。評価式は空白で区切り、値はカンマで区切ります。

数値比較 文字比較 意味
== eq 等しい
!= ne 等しくない
< lt 小さい
<= le 以下
> gt 大きい
>= ge 以上

以下に例を挙げます。

年齢:<INPUT TYPE="text" NAME="age">

というフォームで、

年齢:

と入力された場合に、

$IF{age < 18, まだ未成年ですね , もう立派な大人ですね }

と指定すると、この$IF文全体が「まだ未成年ですね」に置換されます。

$IF文を記述する場合には、HTMLの中であっても"<"や">"などの記号をそのまま記述できます。 表示する前にCGIが変数展開しますのでHTML構文的にエラーではなくなるからです。

ちなみに、置換値(結果です)が文字列のとき途中に空白を含んでも構いません。 また、"や 'で囲んでも構いません(内部処理的には危険なので一旦削除しますが)。 また、評価値に数字以外が含まれる場合に、数値比較用の "==" や ">" が指定されていれば、 文字列比較用の eq や gt に自動補正します。

  • ※全ての変数や式は行をまたがって定義できません。 しかし、一行の中ならいくつでも、種類に関わらず指定できます。
  • ※全ての変数や式に無効な定義(NAME定義がなかったり、書式が間違っていたりした場合)は NULL文字(何もない)に置換されます。

完成した フォームをテストする

作成した送信確認画面やメール送信用のテンプレートなどをブラウザからテストできます。 このテストで事前に変数展開がうまくいくことを確認してから実際に使うようにしましょう。 フォームのテストを行うためには、フォームHTMLに次の予約されたNAME属性名を指定します。

<INPUT TYPE="hidden" NAME="_testmode" VALUE="1">

この定義が入っていると、SMTPへの送信処理を行わずに、生成されたメールデータをブラウザに表示します。 この結果を確認して、変数定義の誤りなどを事前に修正することが可能です。 PLAIN TEXTでテストすれば、送信先や送信元の確認もできます。

予約されているNAME属性(変数)名一覧

名前の先頭が"_"ではじまるNAME属性名は使えません。 また、以下のNAME属性名は予約されている特別なものですので、他の用途には使用できません。

  • _testmode
  • _check_empty
  • _confirm_html
  • _template
  • _template_html
  • _accept_html
  • _accept_url
  • _referer_url
  • _from
  • _to
  • _cc
  • _bcc
  • _subject
  • _reply
  • _image_url
  • _attach_file
  • _attach_name
  • _attach_size
  • _require_item

以下は特殊変数です。書式は上述の説明を参照してください。

  • $FORM{...}
  • $FORM{_alldump}
  • $ENV{...}
  • $SYS{...}
  • $SELECT{...}
  • $IF{...}
  • ${ImageURL}