FORMタグからのデータ受信はかなり面倒な処理(参考)になります。CGIプログラムを作成する際によく利用するサブルーチンがcgi-lib.plライブラリやCGI.pmモジュールという形で提供されています。これらを利用すると簡単にCGIプログラムを組むことができます。CGI.pmモジュールはサーバー側で設定が必要なので、使えるかどうかはサーバーの管理者に問い合わせてください。K棟ではCGI.pmモジュールは利用できません。ここではcgi-lib.plの利用を説明します。
cgi-lib.plライブラリを使用すると簡単に処理ができるようになります。オフィシャルサイト(http://cgi-lib.berkeley.edu/)からcgi-lib.plをダウンロードしましょう。
cgi-lib.plライブラリのファイル名(パス含む)で指定します。CGIプログラムと同じフォルダに入れて使用する場合には、以下のようになります。
require "cgi-lib.pl";
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タグからのデータ受信を参考にしてください。