フォームメール機能の使い方3

2000/03/31

繰返し文を楽に書こう!

従来の問題点

 例えば、数十という商品一覧の中から、顧客がカタログ請求をできるような ページをフォーム文で作成したと仮定します。 例えば、
商品1 商品2 商品3 商品4 商品5
商品6 商品7 商品8 商品9 商品10
以下続く。
なお、各製品についてのフォーム文は次のようになっているものとします。
<input type=checkbox name=CHECK01>
<input type=hidden name=KATABAN01 value=○○>
そうすると、何番が選ばれたかを送信するのに、メール送信のベースファイルには 次のような記載が並ぶことでしょう。
請求のあった商品のカタログは以下の通りです。
{CHECK01:IF}1. {KATABAN01}
{CHECK02:IF}2. {KATABAN02}
{CHECK03:IF}3. {KATABAN03}
以下続く
これは商品の数だけの記載が必要です。 例えば、フォーム側で5個の商品があってもメールベースファイルに3個分の記載 しかなければ2個分のデータが送信できなくなってしまいます。 そのため、商品数が1個でも増えるとベースファイルにも書き加えないといけなく なり。そこにミスがあると折角の請求が消えてしまいます。
また、フォームのHTMLファイルはPHP言語で書けますので例えばWEB上で商品管理が できますが、メールのベースファイルは固定ファイルですからWEB上で処理したものが 想定した番号を越えてしまうことも想定できるでしょう。


推奨対策方法

 そこで、本フォームメール機能では配列を採用することにしました。
 まず、フォーム側では以下のようにNAME=変数[番号]というような書き方をします。 番号は重ならないように注意してください。
<input type=checkbox name=CHECK[1]> 商品1
<input type=hidden name=KATABAN[1] value=○○>

<input type=checkbox name=CHECK[2]> 商品2
<input type=hidden name=KATABAN[2] value=○○>

以下続く
そして、メールベースファイルには、以下のように数字をぬいたものを一行だけ 書いておけばよいのです。そうすれば、このフォームメール機能側で自動的に 番号を探し出して表示します。
請求のあった商品のカタログは以下の通りです。
{CHECK[]:IF} {KATABAN[]}

括弧がある行が複数連続している場合には、それらをまとめて一つの段落として 処理します。こういうと難しいので、 どのような展開のされかたをするのか、例題を見てください。
 ちなみに、sample3に含まれる、&tmode=1とはデバッグ用のページを表示するもの です。メールを送らずにテストしたいときにお使いください。
入力画面(sample3.html) ベースファイル(repeat.txt)
<html>
<head>
  <title>メールサンプルその3</title>
</head>
<body bgcolor=white>

<h2>メールサンプルその3</h2>

ここで入力された内容は次ページで確認できます。

<form method="post" action="/php-bin/mail.php3?tmode=1">
<input type=hidden name="BASEFILE" value="repeat.txt">
<input type=hidden name="RETURL" value="thanks.html">

<table border=1>
 <tr>
  <td>1<input type=hidden name="NUM[0]" value="1"></td>
  <td><input type=checkbox name="CHK[0]"></td>
  <td>あいうえお</td>
  <input type=hidden name="TXT[0]" value="あいうえお">
 </tr>
 <tr>
  <td>2<input type=hidden name="NUM[1]" value="2"></td>
  <td><input type=checkbox name="CHK[1]"></td>
  <td>かきくけこ</td>
  <input type=hidden name="TXT[1]" value="かきくけこ">
 </tr>
 <tr>
  <td>3<input type=hidden name="NUM[2]" value="3"></td>
  <td><input type=checkbox name="CHK[2]"></td>
  <td>さしすせそ</td>
  <input type=hidden name="TXT[2]" value="さしすせそ">
 </tr>
 <tr>
  <td>4<input type=hidden name="NUM[3]" value="4"></td>
  <td><input type=checkbox name="CHK[3]"></td>
  <td>たちつてと</td>
  <input type=hidden name="TXT[3]" value="たちつてと">
 </tr>
 <tr>
  <td>5<input type=hidden name="NUM[4]" value="5"></td>
  <td><input type=checkbox name="CHK[4]"></td>
  <td>なにぬねの</td>
  <input type=hidden name="TXT[4]" value="なにぬねの">
 </tr>
</table>

<input type="submit" value="SEND!">
</form>
</body>
</html>
To: だれそれ
Subject: たいとる

1. 一行に書けばIF分を使ってオンのものだけを表示できます。
{NUM[]}番の{CHK[]:IF}{TXT[]}が選択されました。

2. 全てを展開します。
{NUM[]}番は{CHK[]}。値は{TXT[]}

3. 複数行を連続して書けばそれを一ブロックとして処理
NUM:{NUM[]}
TXT:{TXT[]}

4. []がないものが間に入るとそれぞれ別に展開
NUM:{NUM[]}
{NULL}
TXT:{TXT[]}

5. 複数行にIFを展開したいときには、全ての行に書いてください。
{CHK[]:IF}IFの例 NUM:{NUM[]}
{CHK[]:IF}IFの例 TXT:{TXT[]}
{CHK[]:IF}

これの1番目と3番目をオンにしたときの結果は次のようになります。
変換結果 ベースファイル
To: だれそれ
Subject: たいとる

1. 一行に書けばIF分を使ってオンのものだけを表示できます。
1番の あいうえおが選択されました。
3番の さしすせそが選択されました。

2. 全てを展開します。
1番はon。値はあいうえお
2番は 。値はかきくけこ
3番はon。値はさしすせそ
4番は 。値はたちつてと
5番は 。値はなにぬねの

3. 複数行を連続して書けばそれを一ブロックとして処理
NUM:1
TXT:あいうえお
NUM:2
TXT:かきくけこ
NUM:3
TXT:さしすせそ
NUM:4
TXT:たちつてと
NUM:5
TXT:なにぬねの

4. []がないものが間に入るとそれぞれ別に展開
NUM:1
NUM:2
NUM:3
NUM:4
NUM:5
 
TXT:あいうえお
TXT:かきくけこ
TXT:さしすせそ
TXT:たちつてと
TXT:なにぬねの

5. 複数行にIFを展開したいときには、全ての書いてください。
 IF分の例 NUM:1
 IF分の例 TXT:あいうえお

 IF分の例 NUM:3
 IF分の例 TXT:さしすせそ

To: だれそれ
Subject: たいとる

1. 一行に書けばIF分を使ってオンのものだけを表示できます。
{NUM[]}番の{CHK[]:IF}{TXT[]}が選択されました。

2. 全てを展開します。
{NUM[]}番は{CHK[]}。値は{TXT[]}

3. 複数行を連続して書けばそれを一ブロックとして処理
NUM:{NUM[]}
TXT:{TXT[]}

4. []がないものが間に入るとそれぞれ別に展開
NUM:{NUM[]}
{NULL}
TXT:{TXT[]}

5. 複数行にIFを展開したいときには、全ての行に書いてください。
{CHK[]:IF}IFの例 NUM:{NUM[]}
{CHK[]:IF}IFの例 TXT:{TXT[]}
{CHK[]:IF}


基本確認HTML表示複数行対応FAQ