|
Perl/CGI研究室 'PERL-LABO' TOPへ |
戻る(History.Back) |
URLの後ろに ?〜 というのを付けると、CGIプログラム側ではGETメソッドで取得できるんでした。 そこで、CGIプログラムに ?〜 という形でなにかIDを送り、そのIDでジャンプ先を変えるように してみます。
先にテストしたように、1つのCGIプログラムが1つの飛び先に対応しているんでは大変です。 1つの飛び先毎に1つのCGIプログラムを用意してたら、それはもう大変なことになります。 そこで、1つのCGIプログラムで複数のリンク先に対応できるように、IDを指定するようにします。 たとえば、
というように。ここではリンク先URLをCGIプログラムの中に埋め込んでテストしてみます。
URLの後ろに付加された?〜は、GETメソッドで取得できるんでした。
ですから、ここでもgetformdata関数を利用しようかと思いましたが、
もう少し簡単にしてみます。もともと、GETメソッドでは
$ENV{'QUERY_STRING'} で ?〜 のところを取得するということに
なっていました。しかし、フォームから送られてくるデータは必ず 名前=値 という形になっていました。
ですから、getformdata関数もそのような前提で作成してあります。
でも、?〜 の部分は必ずしも 名前=値 という形にする必要は無くて、なんでもいいみたいです。
名前=値、という形になっていなくても、どんなものでも、?〜 の部分は
$ENV{'QUERY_STRING'} で取得することができるんです。
そこで、今回はgetformdata関数を使うことなく、直接 $ENV{'QUERY_STRING'} で
情報を取得することにしました。情報は、ジャンプ先を示すID。
?名前=値 ではなくて、?値 というように情報を渡します。
複数のデータを渡すときには名前を付けた方がいいですが、
渡す情報は1つだけならこの方がすっきりしていると思いませんか?
そして、CGIプログラムの中で
そのIDによってジャンプ先を変えるようにします。
飛び先は、IDが「yahoo」のときYahoo!Japan、「google」のときGoogle、 それ以外のときはエラーを表示するようにします。
GET/POSTで処理を分けたのと同じように、if 文を使います。
前回の if 文は、if 〜 else という形でした。
この形は「〜ならば、そうでないならば」という、2パターンしかありませんでした。
今回は、yahooまたはgoogleまたはそれ以外、という3パターンがあります。
こういう時は、if 〜 elsif 〜 else というのを使います。
elsif というのが新しいところですね。
if (条件1) {
処理1
}
elsif (条件2) {
処理2
}
else {
処理3
}
条件1なら処理1、条件2なら処理2、そうでないなら処理3、という意味になります。 elsifは何個あっても構いません。
#!/usr/bin/perl
$id = $ENV{"QUERY_STRING"};
if ($id eq "yahoo") {
$url = "http://www.yahoo.co.jp/";
}
elsif ($id eq "google") {
$url = "http://www.google.co.jp/";
}
else {
print "Content-type: text/html\n";
print "\n";
print "ID:$idは登録されていません。";
exit;
}
print "Location: $url\n";
print "\n";
次のリンクをクリックしてみてください。
無事、動きました。 でも if 文を使うのはあんまりかっこよくなかったです。 IDとURLが対応しているんだから、連想配列を使うべきだったなと思いました (^^;
if 〜 elsif 〜 else という使い方がありました。
|
Perl/CGI研究室 'PERL-LABO' TOPへ |
戻る(History.Back) |
| Copyright (c) 'PERL-LABO' All Rights Reserved. リンクフリーです。 |