★ 

インデックス

 ★
★ 

プログラムの説明

 ★

CGIスクリプトの配布とプログラミングの説明

 RSS XML
  • 玄関口
  • 占い診断
  • 萌え辞典
  • オタク遊戯
  • ネット小説
  • NEW秋華
  • CGIDL
  • CGI解説
--☆INFORMATION☆--
2014年11月6日【木】13時47分00秒
【(*´ω`*)】確率収束診断スクリプト作りました!
2013年12月24日【火】17時47分50秒
【(*´∇`*)】最近ちょっとプログララマーに戻ってます♪
2013年11月4日【月】19時41分23秒
【(´・ω・`)】現在新しいCGIの作成は行っていません。
2013年1月7日【月】16時12分36秒
【(*´ω`*)】サイトをリニューアルしました。他も徐々に変更中です‥‥
--☆HOTLINK NOW☆--
【Kindle】電子書籍販売★秋華★
【楽天kobo】電子書籍販売★秋華★
【パブー】電子書籍販売★秋華★
CGI無料レンタルサーバ紹介
秋華エントランス

CGIスクリプト基本 [getデータとif文]

次は、受け取ったデータを理解し、処理する工程を説明したいと思います。
送信されてくるデータは、主に2つに分けられます。
ひとつは、送信フォームから送られてくるデータ。
もうひとつは、アドレスの後に文字列を付け加え、そのアドレスにアクセスがあった場合のデータです。
後記の方は少し分かりにくいので、説明させていただきます。
たとえば、下記のようなアドレスにアクセスした場合です。

http://syuka.com/index.cgi?nekomimi

このようなアドレスにアクセスした場合、実際にアクセスするアドレスは・・・

http://syuka.com/index.cgi

にアクセスしたのと同じ事です。
ただ違うのは、get でのデータも一緒に送られてきているって事です。
アドレスのファイル名の後に、?nekomimi がついていますね。
この ? の後の文字列が、get データだと扱われます。
だから、前回のソース・・・

if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }
else { $buffer = $ENV{'QUERY_STRING'}; }

これが実行されたら、$buffer には、"nekomimi" というデータが入っています。
これを利用して、$buffer が nekomimi なら、猫耳画像を表示するページ、usamimi なら、うさ耳画像を表示するページを表示する事にしておけば、それはもうURLアドレスの一部として成立します。

http://syuka.com/index.cgi?nekomimi

これが猫耳が表示されているページのアドレス。

http://syuka.com/index.cgi?usamimi

これがうさ耳が表示されているページのアドレスといった具合です。
では、この処理ができるソースを、骨組みだけ書いてみましょう。

#! /usr/local/bin/perl
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }
else { $buffer = $ENV{'QUERY_STRING'}; }
print "Content-type: text/html; charset=UTF-8\n\n";
if ($buffer eq "nekomimi") {
print <<END_OF_HTML;
ここに、猫耳を表示するページのHTMLを記述。
END_OF_HTML
}
elsif ($buffer eq "usamimi") {
print <<END_OF_HTML;
ここに、うさ耳を表示するページのHTMLを記述。
END_OF_HTML
}
else {
print <<END_OF_HTML;
ここに、普通のページのHTMLを記述。
END_OF_HTML
}

5行目を説明しますと・・・
もし、$buffer が、nekomimi と同じならば、その直後の { } このカッコ内の処理を実行するって意味です。
10行目が・・・
そうでなくて、もし、$buffer が、usamimi と同じならば、その直後の { } このカッコ内の処理を実行するって意味です。
15行目が・・・
そうでない場合は、その直後の { } このカッコ内の処理を実行します。
今回の記述で使った、if elsif else という関数(命令)は、これからプログラムを書いていくなら、絶対多用する事になるものですので、覚えておいて損はないです。
覚えるのが苦手な私ですら、流石に覚えてしまっています。
ちなみに私は、理屈を覚えるのは得意ですが、文字列(関数など)を覚えるのが苦手です。
だから、過去に書いたソースを、カット&ペーストで使い回す事が多いです。
後、見ればなんとなくわかるかもしれませんが、if の後の ( ) カッコの中で使っていた、eq という関数は、数字であれば = と同じで、左右同じであれば、と言う意味です。
文字列の場合は、eq を使います。
逆に ≠ は、ne で、左右違えば、って意味です。
話が脱線して、更に脱線してしまいましたが、アドレスの後の get データの利用方法、少しはわかっていただけたと思います。
【<┃】 【┃┃】 【┃>】
このエントリーをはてなブックマークに追加
Ver.5.00 CGIフリー配布サイト