|
フォームタグとCGIスクリプトは非常に密接な関係を持っています。フォームタグは、CGIスクリプトと連動するために存在しているといっても過言ではありません。フォームを自由に使いこなせれば、CGIスクリプトを理解するための準備が整ったといえるでしょう。
上のフォームはテーブルを使って整形していますが、フォームに関するタグだけを取り出しました。
<form method=post action=../../cgi-bin/form.cgi>
<textarea name=質問内容 cols=50 rows=10></textarea>
<input type="text" name="ハンドル" size="30">
<input type="text" name="email" size="30">
<input type="text" name="あなたのURL" size="50">
<input type="text" name="スクリプトのURL" size="50">
<input type="hidden" name="location" value="http://www.web-terakoya.net/">
<input type="hidden" name="subject" value="質問箱">
<input type="submit" value="送信">
<input type="reset" value="リセット">
</form>
ホームページ作成ソフトを使っていると、
<input type="submit" value="送信">
<input type="reset" value="リセット">
で、name=submit とか name=resetなどのname属性が書きこまれることがあります。
フォームスクリプトで、「submit=送信」みたいな行が表示されるときは、name=XXXは削除しましょう。
さて、上のサンプルフォームでは、「textarea」「text」「hidden」「submit」「reset」の5つのフォーム部品が使われています。それぞれのフォーム部品の使い方は初心者向けHTML本をごらんいただくとして、これらのデータは、どのようにCGIスクリプトへ渡されるのでしょうか?
具体的な説明は、CGIスクリプトの改造と作成「デコード」をごらんいただくとして、かいつまんで説明すると、
| 項目 |
内容 |
| 質問内容 |
ユーザーの書きこんだ内容 |
| ハンドル |
ユーザーの書きこんだハンドル |
| email |
ユーザーの書きこんだemail |
| あなたのURL |
ユーザーの書きこんだURL |
| スクリプトのURL |
ユーザーの書きこんだURL |
| location |
あらかじめ設定した戻り先ページのURL |
| subject |
あらかじめ設定したメールの件名 |
が項目と内容をペアーにして<form method=post action=xxxxx.cgi>で指定したCGIスクリプトスクリプトへ送られます。どのように送られるのか見たければ、以下のフォームに適当に文字を入力して送信してみましょう。
このフォームのソースタグは以下の通り。
<form method="get" action="test.cgi">
<input type="text" name="name">
<input type="submit" value="送信">
</form>
「test.cgi」が存在しないので、「ページが見つかりません」 エラーが出ますが、落ち着いてURLを入力するアドレスバーを見てください。
「http://www.web-terakoya.net/basic/test.cgi?name=xxxx」
と表示されるでしょう。xxxxはあなたが入力した内容がはいります。日本語を入れた場合は、%89%AC%8CEのような、記号が表示されますね。
もっと項目を多くするとどうなるでしょう。興味のある方は、上のフォームタグをコピーし、<form>タグと、</form>タグの間に部品を設置し、methodを「GET」にして試してみましょう。
methodをGETにすると、アドレスバーにフォームから送られたデータが表示されます。一方POSTにすると表示されません。GETとPOSTの違いを説明すると長くなるので割愛しますが、現在では、通常POSTが使われると思って間違いありません。
私のスクリプトで、「フォームの各部品の順番を守らないと正常に表示されません」 と注意書きされていることがあります。
これは、フォームのデータが上から下へ、左から右へ、順番に送信される仕組みを利用しているからです。CGIスクリプト上で、何番目に送られたデータをこの位置に表示する、といった指定がされているときに順番が狂うと、当然ながらCGIスクリプト上での表示がずれてしまいますね。
<input type=hidden name=xxx value=xxx>
これは隠し属性、またはhidden(ヒドゥン)属性と呼ばれます。CGIスクリプトにこの属性を読みとらせて、さまざまな処理をさせることが可能になります。CGIスクリプト設置には経験が必要とよく言われますが、「隠し属性」を理解できれば、どんなに難しいスクリプトも恐くありません。
私のスクリプトで、<input type=hidden name=mode value=admin>を必ず入力してください。と書かれていることがあります。
CGIスクリプトでは、一つのスクリプトで複数のHTMLを表示できますが、どのボタンが押されたらどのHTMLを表示するかを、「name=mode value=admin」でCGIスクリプトへ教えているのです。
この場合は、管理モードのパスワード画面を表示させます。この属性がないと、CGIスクリプトはどのページを表示するか理解できず、結果としてエラーとなります。それでは困るので、CGIスクリプトスクリプト上で「name=mode」が送信されない場合の表示画面も指定することになります。(通常エラーメッセージを表示させます)
予期したページが表示されない時は、「name=mode value=xxxx」のスペルを間違えていないか、記述を忘れていないか、じっくりと確認してください。
一番上のアンケートフォームで、
<input type="hidden" name="location" value="http://www.web-terakoya.net/">
がありましたね。これは、
送信が完了したら自動的に戻るページを「location」で指定させています。この場合、寺子屋トップへ戻ります。
もう一つの、
<input type="hidden" name="subject" value="質問箱">
では、送信メールの件名に表示させる文字を指定させています。指定しない場合は件名が空白のメールが送られるか、空白の場合はCGIスクリプトであらかじめ件名を指定するよう処理しています。
|