MacPerl 変数の内容をホームページに出力する
アップルボール
目標
テキスト入力フィールドを持つ.htmlを作成して、ブラウザから文字を入力してもらって、結果を表示させる。

アップルボール
考え方
CGI Scriptでは、いちど、Webサーバーから、文字列を受け取る仕組みが必要になる。つまりキーボード-->ブラウザ=Webサーバー--->CGI Scriptとなる。このためには、htmlで、フォーム<form>を使用してキーボードから入力した文字をCGI Scriptに渡す。日本語も入力できるように、文字コード変換のライブラリjcode.plを使用する。jcode.plこはここからダウンロードできます。<---text形式で保存して名前を「jcode.pl」に変更しましょう。ブラウザへの出力は、すでに学んだ「変数の出力」でOK。入力した文字列を「indata.dat」というファイルに格納するので、あらかじめsimpleTEXTなどで、「indata.dat」という名前の空のファイルを作成しておくこと。

アップルボール
フォームのサンプル
まず、文字入力のためのフォームを作成する。
フォームのhtmlはこちら
フォームの最初の<form>では以下のように記述します。
<form method="POST" action="input_form.acgi">
input_form.acgiのところは、これから作るCGI Scriptの名前と場所をパスを含めて指定しておきます。この例では、フォームの.htmlと同じ場所にCGI Scriptがあるのでパスは必要ありません。
文字入力のためのふたつのフィールド名をnamaeとmailにしてあります。
アップルボール
Perlのサンプル
# ライブラリ
require 'cgi-lib.pl';

# デコードサブルーチン
&ReadParse(*form);

# ライブラリ
require 'jcode.pl';

# 文字コード変換サブルーチン
&jcode'convert(*form,'sjis');


#連想配列から値を取り出し、区切りのハイフン追加
$data="$form{'namae'}\n$form{'email'}\n-----------\n\n";


#追加書き込みでファイルオープン
open(FILE,">>indata.dat") || die "file open error";

#ファイルロック
#flock(FILE,2);

#データをファイルに保存する。
print FILE $data;

#ファイルロック解除
#flock(FILE,8);

close(FILE);

# -----ここから出力 -----
# print "Content-type:text/html\n\n";

print << "end_of_html";


<html>

<head>
<meta http-equiv="content-type" content="text/html;charset=Shift_JIS">
<title>テスト</title>
</head>

<BODY BGCOLOR="#666600">
<p>入力データは</p>
<p>$data</p>
<p>です。</p>
<p></p>
</body>

</html>

end_of_html

アップルボール
解説
#ライブラリ
require 'cgi-lib.pl';
#デコード用サブルーチン
&ReadParse(*form);
&ReadParseは、入力フィールドのデータを、*formという連想配列に格納してくれるサブルーチンです。cgi-lib.plはここからダウンロードできます。
この例では、
$form{'namae'}に名前フィールドの値が入り、
$form{'email'}にe-mailフィールドの値が入ります。
#ライブラリ
require 'jcode.pl';
#文字コード変換
&jcode'convert(*form,'sjis');
入力された文字列をシフトJISに変換します。
jcode.plというのはフリーのライブラリです。ここからダウンロードできます
これらライブラリの場所はパス付きで指定します。この例ではCGI Scriptと同じ場所にあるという設定にしていますので、パスは記入していません。