ライブラリを利用したFORMタグの処理

FORMタグからのデータ受信はかなり面倒な処理(参考)になります。CGIプログラムを作成する際によく利用するサブルーチンがcgi-lib.plライブラリCGI.pmモジュールという形で提供されています。これらを利用すると簡単にCGIプログラムを組むことができます。CGI.pmモジュールはサーバー側で設定が必要なので、使えるかどうかはサーバーの管理者に問い合わせてください。K棟ではCGI.pmモジュールは利用できません。ここではcgi-lib.plの利用を説明します。

cgi-lib.plの入手

cgi-lib.plライブラリを使用すると簡単に処理ができるようになります。オフィシャルサイト(http://cgi-lib.berkeley.edu/)からcgi-lib.plをダウンロードしましょう。

cgi-lib.plライブラリの使用宣言

cgi-lib.plライブラリのファイル名(パス含む)で指定します。CGIプログラムと同じフォルダに入れて使用する場合には、以下のようになります。

require "cgi-lib.pl";

ReadParse関数

FORMタグの入力を切り分けるのに使用します。ReadParse関数は以下の形で使用します。

&ReadParse(連想配列)

引数で指定した連想配列に、NAME属性をキーとして入力したフィールドデータが値として格納されます。各NAME属性は「$連想配列名{'NAME属性'}」で参照できます。

(例) 連想配列formにFORMタグの入力を格納し、「namae」というNAME属性のフィールドデータを出力

require "cgi-lib.pl"; # cgi-lib.plライブラリ使用宣言

&ReadParse(%form); # 連想配列formにFORMタグの入力を格納

print $form('namae'); # namaeというNAME属性のフィールドデータを出力

実行例

下のprint.cgiとform.htmをサーバーにアップしてform.htmに文字を入力してみましょう。

プログラム print.cgi 

#!/usr/local/bin/perl

require "./cgi-lib.pl"; # cgi-lib.plライブラリ使用宣言

&ReadParse(%in); # サブルーチンReadParseを呼び出して連想配列%inに格納

& header; # HTML ヘッダー

foreach (%in) { # 連想配列%inの内容を表示
    print "$_<BR>\n";
}

&hooter; # HTMLフッター

# HTML ヘッダー
sub header {
    print "Content-type: text/html\n\n";
    print <<"EOM";
<html>
<head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
</head>
<body>
EOM
}

# HTML フッター
sub footer {
    print "</body>\n</html>\n";
}

HTML form.htm

<HTML>
<HEAD>
</HEAD>
<BODY>
<FORM METHOD="POST" ACTION="print.cgi">
名前:<INPUT TYPE="text" NAME="name"><BR>
会員番号:<INPUT TYPE="number" NAME="number" VALUE="KK-"><BR>
パスワード:<INPUT TYPE="password" NAME="pass" SIZE=20><BR>
ご意見・ご感想をお待ちしております。<P>
<<TEXTAREA ROWS=8 COLS=40 NAME="message">
ひとことどうぞ
</TEXTAREA>
<INPUT TYPE=submit VALUE="送信">
</FORM>

実行結果

message
ひとことどうぞ
pass

number
KK-おおおおお
name
あああああ

FORMタグからのデータ受信はまだ終わりではありません。コンピュータで漢字を扱うときには、漢字コードについて学ぶ必要があります。これは次回にしましょう。

発展

cgi-lib.plライブラリを使用せずに自分で処理することもできます。FORMタグからのデータ受信を参考にしてください。