Query Stringの取得方法

Query StringとFORM文の関係

「Query String」とは、HTMLの「FORM」から渡された情報です。(参考情報
例えば、以下のようなHTMLがあるとします。
<FORM ACTION="/cgi-bin/asdf.cgi" METHOD="POST">
<INPUT TYPE="text" NAME="a" SIZE="20"><BR>
<INPUT TYPE="radio" NAME="b" VALUE="ラジオ1" checked>ラジオ1
<INPUT TYPE="radio" NAME="b" VALUE="ラジオ2">ラジオ2<BR>
<INPUT TYPE="checkbox" NAME="c1" VALUE="チェック1">チェックボックス1
<INPUT TYPE="checkbox" NAME="c2" VALUE="チェック2">チェックボックス2<BR>
<INPUT TYPE="submit" VALUE="送信">
</FORM>

上記のHTMLは実際には以下のように表示されます。


ラジオボタン1 ラジオボタン2
チェックボックス1 チェックボックス2

ここで重要なのは、これらがQueryStingにどのように格納されるかです。
QueryStringには、「名前」と「値」がペアになって格納されます。
「名前」部分は各「NAME」で指定された文字になり、「値」部分は各「VALUE」で指定された言葉であったり、入力された文字となります。

各TYPE別に上の例で見てみると、
○「text」の場合
  「名前」→「a」(「NAME」で指定された文字)
  「値」→テキストボックスに入力された文字
○「radio」の場合
  「名前」→「b」(「NAME」で指定された文字)
  「値」→「ラジオ1(2)」(選択された方の「VALUE」で指定された文字)
○「checkbox」の場合
  「名前」→「c1(2)」(チェックされたところの「NAME」で指定された文字。両方チェックされたら両方が該当)
  「値」→「チェック1(2)」(チェックされた方の「VALUE」で指定された文字。両方チェックされたら両方が該当)

CGIでのQuery String取得する方

実際にCGIで、Query Stringを取得する方法(書き方)を説明します。

書き方はずばり以下のように書きます。
# QueryString取得
if($ENV{'QUERY_STRING'} eq ""){
  read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}else{
  $buffer = $ENV{'QUERY_STRING'};
}

@pairs = split('&',$buffer);
foreach $pair (@pairs)
{
  ($name, $value) = split('=', $pair);
  $value =~ tr/+/ /;
  $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  $form_data{$name} = $value;
}

上記の内容は、まずIf文の中でHTMLで渡されたFORM文がGETで渡しているかPOSTで渡しているかでQueryStringの取得するCGI環境変数がことなるため(詳しくはこちら)、どちらでも取得できるようにしています
その後のforeach文でQuery Stringの「名前」「値」を取り出し、「$name」にFORM文のNAMEの値を、「$value」にFORM文のVALUEの値を格納しています。
従って、上記をCGIスクリプトに書いた後では「$form_data{名前}」が値になります。
例えば、上で書いたHTMLのFORM文を例に取ると
$radio=$form_data{b}
といったように宣言すると、「$radio」には「ラジオ1」もしくは「ラジオ2」が格納されます(ラジオボタンでチェックされた方)。

→コード変換方法


WWW トップページへ戻る
inserted by FC2 system