データの入力
フォームからデータを入力して表示します。受け渡しの情報は環境変数%ENVに自動的に格納されます。
フォームからの入力方法にはGETとPOSTがあり下記の特徴があります。
GETかPOSTかは入力のformタグのmethodで指定し、環境変数REQUEST_METHODに格納されます。
methodを指定しない場合はGETになります。
 GET
  ・フォーム入力データは送り先のURLの後に?を付けて渡される。 xxx.cgi?xx=xx&xx=xx・・・
  ・フォームだけではなくリンクタグでデータを簡単に渡すことができる。
  ・入力データは環境変数QUERY_STRINGに格納される。
  ・環境変数に格納できるデータ長が限定される。
  ・入力データがURLで表示されるので内容が分かってしまう。
 POST
  ・入力データは標準入力STDINに格納される。
  ・データ長が環境変数CONTENT_LENGTHに格納される。
  ・大量のデータを送ることができる。
  ・入力データはURLに表示されない。

フォームから入力されたデータは下記のようにURLエンコードされます。
その為、入力データを表示するにはデコードして元に戻す必要があります。
 ・「名前=値」で一対にします。
 ・複数の対は&で区切ります。(名前=値&名前=値)
 ・空白は「+」に変換します。
 ・日本語文字コードは%に続いて16進数2桁で表します。(英数字はそのまま表します)

read(STDIN,$in,$ENV{'CONTENT_LENGTH'});  標準入力STDINからデータを読み取る。
($name,$data) = split(/=/,$in);          入力されたデータ「word=データ」をsplitで分離する。
$data =~ tr/+/ /;                  trで「+」を空白に変換する。
$data =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;  文字コードを日本語に変換する。
■プログラム (sample2.cgi)
if ($ENV{'REQUEST_METHOD'} eq "POST") {read(STDIN,$in,$ENV{'CONTENT_LENGTH'});}
else {$in = $ENV{'QUERY_STRING'};}
($name,$data) = split(/=/,$in);
$data =~ tr/+/ /;
$data =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

print "<form action=\"sample2.cgi\" method=POST>\n";
print "<input type=text size=30 name=word> <input type=submit value=\"POST入力\"></form>\n";
print "<form action=\"sample2.cgi\">\n";
print "<input type=text size=30 name=word> <input type=submit value=\"GET入力\"></form>\n";
print "<a href=\"sample2.cgi?word=太郎\">アンカータグによる入力</a><br><br>\n";
print "データ: $data";
■実行結果


アンカータグによる入力

データ: 太郎


HOME Copyright (C) CGI-design All Rights Reserved.