1. cgi-lib.pl とは
  2. cgi-lib.pl を利用するための準備
  3. フォームからのデータを受け取る

3.1 フォームデータを変数に格納する
3.2 複数選択フォームデータを配列に格納する
3.3 nameリストを取り出す

  1. HTTPヘッダの出力

4.1 標準HTTPヘッダの出力

  1. HTMLドキュメントの出力

5.1 HTMLドキュメントヘッダ
5.2 HTMLドキュメントの締めくくり
5.3 エラーを出力する
5.4 エラーを出力しCGIを終了させる

 cgi-lib.pl では、主に以下の二つの目的に役立ちます。

上に示したことをPerlスクリプトで作成することは、非常に面倒なことです。cgi-lib.pl を使うことによって、簡単に目的を達成することができます。ほかにもいろいろな機能がありますが、ここでは割愛いたします。

cgi-lib.pl は、perlライブラリーですので、CGI配布の際には同梱する必要があります。cgi-lib.plの本家サイトは、http://cgi-lib.berkeley.edu/ (英文)です。詳細はこちらをご覧下さい。

以下では Version 2.18について解説します。2001/06/16時点でVersion 2.18についての解説が公開されていませんでしたので、私がソースコードから解釈しております。

まず、呼び出し元のCGIファイルと同じ場所に、cgi-lib.pl をおいてください。そして、呼び出し元のCGIファイルから、cgi-lib.pl を呼び出します。

require "cgi-lib.pl";

3.1 フォームデータを変数に格納する。

フォームに入力・選択された値を取得する方法を、以下のフォームを例にしたがって説明します。

<form method="POST" action="/cgi-bin/lecture/form/posttest.cgi">

<p>お名前<input type="text" name="namae" size="20"></p>

<p>OS<br>
<input type="radio" value="win" name="OS" checked>Windows<br>
<input type="radio" value="mac" name="OS">Machintosh<br>
<input type="radio" value="unix" name="OS">Unix</p>

<p><input type="submit" value="送信" name="submit"></p>

お名前

OS
Windows
Machintosh
Unix

まず、CGIに対して送信されたフォームデータを、連想配列に格納します。

my %input;
&ReadParse(\%input);

これで、連想配列「%input」にフォームデータがすべて格納されている状態になります。連想配列のキーにはname属性が、値には各フォームデータが格納されている状態となります。

上記の例で、たとえば「お名前」の欄に入力されたデータをスカラー変数「$YourName」に格納したい場合には、

$YourName = $input{'namae'};

とすればいいのです。スカラー変数「$YourName」には、「太郎」が格納されます。他のフォームについても同様です。

3.2 複数選択フォームデータを配列に格納する。

では、複数選択可能なフォームである「チェックボックス」や「スクローリングリスト」の場合は、どのように取得するのでしょう。以下の例で説明します。

<form method="POST" action="/cgi-bin/lecture/form/posttest.cgi">

<p>OS<br>
<input type="checkbox" name="OS" value="win" checked>Windows<br>
<input type="checkbox" name="OS" value="mac">Machintosh<br>
<input type="checkbox" name="OS" value="unix" checked>Unix</p>

<p>PC Maker<br>
<select size="6" name="MAKER" multiple>
<option value="fujitsu" selected>富士通</option>
<option value="toshiba">東芝</option>
<option value="nec" selected>日本電気</option>
<option value="dell">デル</option>
<option value="compaq" selected>コンパック</option>
<option value="gateway">ゲートウェイ</option>
</select></p>

<p><input type="submit" value="送信" name="submit"></p>
</form>

OS
Windows
Machintosh
Unix

PC Maker

複数選択可能なフォームの場合にも同様にスカラー変数で受け取りますが、それぞれの値が \0 区切りで格納されます。「\0」は出力結果をブラウザー上で見るとスペースに見えますが、実際にはスペースではありません。これは「ヌル文字」です。

上の例で、「OS」を取得すると、

my $OsList = $input{'OS'};

となります。フォーム例では、OSに「Windows」「Unix」が選択されていますので、スカラー変数「$OsList」には、「win\0unix」が格納されます。同様に 

my $MakerList = $input{'MAKER'};

とすれば、PC Maker には「富士通」「日本電気」「コンパック」が選択されていますので、スカラー変数「$MakerList」には、「fujitsu」「nec」「compaq」の3つの要素がスペースで区切られた「fujitus\0nec\0compaq」が格納されます。

では、各要素を取り出すにはどうすればよいでしょうか。

my @data = &SplitParam($input{'OS'});

上記のように、「SplitPram」サブルーチンがcgi-lib.plには用意されています。これを使うと、正しく配列の要素に分解してくれます。

以上の説明の通り、name属性を同じにして、複数選択可能なフォームの場合には、valueにスペースが入っていようがいまいが、cgi-lib.plサブルーチン「SpitParam」をお使いになることをお勧めします。

3.3 name属性リストを取り出す

フォームHTMLで指定された name の値のリストを取り出すには、前述の連想配列から keys関数を使って取り出します。

my %input;
&ReadParse(\%input);
@names = keys %input;

配列 @names には、「OS」「namae」という2つの要素が格納されます。

4.1 標準HTTPヘッダの出力

CGIでページを出力する際には、必ず標準HTTPヘッダを出力しなければいけません。各ヘッダを以下のとおりに出力することができます。(\n は改行を表します。)

記述例 出力内容
print &PrintHeader(); Content-Type: text/html\n\n

5.1 HTMLドキュメントヘッダ

start_html関数で、<HTML>, <HEAD>, <TITLE>, <BODY>タグを出力します。

記述例 出力内容
print &HtmlTop("タイトルだよ"); <html>
<head>
<title>タイトルだよ</title>
</head>
<body>
<h1>タイトルだよ</h1>

5.2 HTMLドキュメントの締めくくり

記述例 出力内容
print &HtmlBot(); </body>
</html>

CGIでHTMLを出力するときには、最後にこれを入れましょう。

5.3 エラーを出力する

記述例 出力内容
&CgiError ("エラーだよ"); Content-type: text/html

<html>
<head>
<title>エラーだよ</title>
</head>
<body>
<h1>エラーだよ</h1>

エラーを出力する場合には、HTTPヘッダーを加える必要がありません。&CgiError がHTTPヘッダーを加えて出力します。&CgiError は、エラーを出力しますが、スクリプト自体を終了させません。もし終了したい場合いは後述の &CgiDie を使ってください。

5.4 エラーを出力しCGIを終了させる

記述例 出力内容
&CgiDie ("エラーだよ"); Content-type: text/html

<html>
<head>
<title>エラーだよ</title>
</head>
<body>
<h1>エラーだよ</h1>

&CgiDie は、エラーを出力し、CGIを終了します。

戻る

会社案内 | 特定商取引法に基づく表示 | プライバシーポリシー | 当サイトへのリンクについて | お問い合わせ