Form受付CGIスクリプト Spiform

spiform Ver.1.1 Takashi Kosuge <takashi.kosuge@kek.jp>

概要

spiformはWebで入力を受け取るためのCGIスクリプトで、WebのFormからの入力の内容をデコードし、あらかじめ設定したメールアドレスに転送します。また、設定を行っておけばFormの内容をWWWサーバ上にログデータとして残すことも出来ます。

なお、spiformは無保証であり、作者はいかなる責任も負いません。全てご自分の責任のもとでご利用ください。


必要な環境

spiformはPerlを使って記述されており、動作させるためにはPerl5が必要となります。また、PerlのXML::Parserモジュール(log2csv.plを利用する場合)、CGIモジュール及びNet::SMTPモジュールが必要となります。(Active Perlの最近のバージョンにはこれらのモジュールはもともと含まれているようですので、Active Perlを使用する場合、これらのモジュールを別途インストールする必要はありません。) 以下にspiformの必要とする環境を挙げます。

なお、現在動作を確認しているOS及びWebサーバは次の通りです。(これら以外でも問題なく動作する思いますが・・・。)


インストール

インストールはspiformのパッケージに付属しているsetupspiform.plとspiform.iniを使って行います。以下の手順に従ってインストールを行ってください。

  1. 上記「必要な環境」での内容通りにソフトウエアがインストールされているかを確認します。
  2. spiform.iniを環境に合わせて設定。設定はspiform.iniを適当なテキストエディタで編集することにより行います。各設定項目についてはspiform.ini内にコメントがありますのでそちらを参照してください。
  3. "perl setupspiform.pl"のようにしてsetupspiform.plを実行し、spiformをインストールします。ここで"setupspiform.pl file_name"のように設定ファイルのファイル名を指定する事も可能です。

入力フォームの用意

spiformのインストールが終了したら、次に入力フォーム用のhtmlファイルを作成します。spiformのパッケージに付属しているsample.htmlを別名でコピーしてから作業を始めると良いと思います。ここではこのsample.htmlの内容を使って説明を行います。

内容確認のためのJava Script

まず始めに頭の部分です。

<SCRIPT LANGUAGE="JavaScript">
<!--
function CheckSubmit(){
    if(document.form1.E_mail.value == ""){
        alert("E-mail欄が空白です。")
        return false
    }
//    return(confirm("送信します"));
}
//-->
</SCRIPT>

sample.htmlのヘッダー部分にはJava Scriptが書いてあります。この例ではE_mailの中身が空ならばalertを出すようにしています。入力フォームに必須事項がある場合は、適宜書き換えてください。また、この例では送信前に確認ボタンを出すためのJava Scriptを"//"によりコメントアウトしています。

FORMタグの書き方

FORMタグの部分は次のように書きます。ACTION="http://localhost/...の部分はspiformのインストール先やWebサーバの設定に合うように書き換えてください。

<FORM NAME="form1" ACTION="http://localhost/cgi-bin/spiform.pl" METHOD="POST" onSubmit="return CheckSubmit()">

FORMの内容について

次の2行は必須です。

<INPUT TYPE="hidden" NAME="Category" Value="Sample">
<INPUT TYPE="hidden" NAME="Subject" Value="Sample form">

Categoryではspiformインストール時に設定したカテゴリー名をValue="...の部分に設定します。大文字小文字は区別されます。また、SubjectのValueに設定した値はspiformが送信するメールのSubjectに利用されます。なお、Category名及びSubjectの両方とも日本語を使うことは出来ません。

次のように"Require_confirmation"を設定すると、Submitの際に確認画面が現れるように
なります。Valueにはこの時表示する文字を設定してください。

<INPUT TYPE="hidden" NAME="Require_confirmation"
Value="以下の内容で送信します。ご確認の上、Confirmボタンを押してください。"
>

次のように"Success"ではCGIが正常に動作した場合に表示する文字を書きます。

<INPUT TYPE="hidden" NAME="Success"
Value="仮登録が終了しました。数日中に担当者から確認のE-mailをお送りいたします。
もし、数日しても確認のE-mailが届かない場合は、お手数ですが担当者までお問い合わせ
ください。"
>

各入力テキストの名前(NAME=)には日本語は設定できません。また、E-mailに関しては
必ず "E_mail" というNAMEを使用しなければなりません。
しかし、確認画面を有効にした場合はそのまま表示すると混乱の元になるしかっこ悪いので
aliasを指定することができます。
以下ように

NAME="本名::alias"

とすると、確認のテーブルの左の欄に "F_name"、"E_mail" のかわりに "お名前"、"E-mail"が
表示されるようになります。

<INPUT TYPE="hidden" NAME="F_name::alias" Value="お名前">
<INPUT TYPE="hidden" NAME="E_mail::alias" Value="E-mail">

また、E-mailのアドレスを入力するためのフィールドは次のように書きます。spiformで設定した宛先へのメールのFrom:行にはこのアドレスが挿入されます。

E-mail   <INPUT TYPE="text" NAME="E_mail" size="60">

spiformにおいてE_mailの項目は必須となります。もし、入力フォームのE_mailの項目が空だとフォームの送信後エラーが発生し、ブラウザにその旨が表示されます。匿名の受付が必要な場合は以下のようにTYPEをhiddenにしてしまうのも一つの手です。

<INPUT TYPE="hidden" NAME="E_mail" Value="myaddress@domain">

入力と匿名の両方を受け付けるような場合には、前述のスクリプトの部分と入力の部分を以下のように書き換えると、E-mailの項目に入力があった時に、E_mailのValueを実際に入力されたものと置き換える事ができます。(但し、入力した人のブラウザーがJava Script対応になっていない場合は"anonymous"のままです。)

<SCRIPT LANGUAGE="JavaScript">
<!--
function CheckSubmit(){
	if(document.form1.Entered_email.value != ""){
		document.form1.E_mail.value = document.form1.Entered_email.value;
	}
	return(confirm("送信します"));
}
//-->
</SCRIPT>
</HEAD>
<BODY>
:
:中略
:
<INPUT TYPE="hidden" NAME="E_mail"  Value="anonymous">
E-mail <input type="text" name="Entered_email" size="60">

以降のINPUTなどについては、必要に応じて作成してください。なお、以上に登場するCategory, Subject, Require_confirmation, Success, E_mailなどのNAMEについてはspiform専用になっていますので他の入力フィールドの名前と重複しないようご注意ください。


注意事項

spiformでは入力データを受け付ける方法としてE-mailを利用するようになっています。よって、入力フォームを使って送られたデータを確実に受け取れるという補償はありません(Webサーバ内に残すLogデータについてはかなり確実と思われる)。 フォーム受付の手順は以下のような形を取ることを強くお勧めします。

     [申込者]           [担当者]
 フォーム入力送信  →   確認作業
                            ↓
  確認メール受取   ←   確認メール送信

 フォーム入力送信  →×不具合
        ↓
確認メールが届かない
        ↓
    問い合わせ     →   問い合わせ確認(ログデータ等)

また、入力フォーム用HTMLファイルには、後日確認メールが届く事、確認メールが届かない場合には問い合わせが必要なことを必ず明記してください。


log2csv.pl

spiformにおいてLogデータはXMLのような形式で保存されます。log2csv.plはLogデータから指定されたCategoryのデータからMicrosoft Excelなどで利用可能なCSVデータを作成します。使用法は以下の通りです。

  1. Webでデータを受け付けるために作成したForm用のHTMLファイルを適当なディレクトリにコピーします。CSVファイルはこのファイルと同じディレクトリに作成されます。
  2. log2csv.plのあるディレクトリに移動してlog2csv.plを起動します。WindowsでPerlの設定が正しく行われていればlog2csv.plのアイコンをダブルクリックするだけでも起動します。
  3. Form用のファイル名を問い合わせて来るので、先ほどコピーしたForm用ファイルを指定します。なお、log2csv.plはこのForm用HTMLファイルを解析することでCVSの各項目に出力する内容を決定します。
  4. Form用ファイルと同じ場所にCSVファイルが作成されます。

log2csv.plはデフォルトでspiformのインストール時に使用したspiform.iniファイルの内容からLogデータのファイル名を取得しますが、-Lオプションを指定すると、spiform.iniの設定に無いログデータを読み込む事が出来ます。また、この他にコマンドラインから起動する際に直接Form用HTMLファイルを指定することも出来ます。

例1、 /tmp/temp.logのログデータを利用する。
    perl log2csv.pl -Lc:/temp/temp.log
例2、/htdocs/epform.htmlをForm用HTMLファイルとして使用する。
    perl log2csv.pl /htdocs/epform.html

$Date: 2003/10/29 10:44:58 $ Takashi Kosuge