Code.002 2002年10月14日発行
■━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━■
【 Webプログラミング 】
〜 猫的プログラマーとその軌跡 〜
■━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━■
▼毎週月曜日に配信しています。
▼等幅フォントでご覧いただくとキレイに見えます。
▼登録・解除はこちらから可能です。
< http://www.ichikoro.com/webp/ >
※ぜひお友達にもご紹介ください(^^)/
先週の土日は泊りがけでmotoGPの観戦に行ってきました。
TVで流れたのは「MotoGPクラス」だったと思うのですが、今回は250CCが熱かった!
目の前を加速しながら通り過ぎていく様子はなかなかの快感。その場でドラマを
感じることが出来るのがライブ(生)のいいところ。途中疲れて寝そうになる物の(^^;、
抜きつ抜かれつな様子を見るのはドキドキ。作られたストーリーじゃない、という
のもまた魅力でしょうか。
ちなみにバイクで行くとレースが終わった後、サーキットを全員でパレードラン!
何と走れます! 来年はあの中に入るぞと心に決め、帰ってきました。
いやー、楽しかった。
・2002MotoGP 世界選手権シリーズ第13戦
http://www.twinring.jp/event/moto_gp/index.html
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
CGI(Perl)基本動作 その2:「クエリーを受け取る」
──────────────────────────────────────
CGIへ渡される情報のことを「クエリー(Query)」と呼びます。
今回はこのクエリーをCGIへ渡し、受け取るまでを解説します。
───────
ソース1(HTML)
───────
<HTML>
<HEAD>
<TITLE>クエリーを受け取る</TITLE>
<STYLE type="text/css"><!--
/*-- DDタグの装飾 --*/
DT {font-weight:bold}
-->
</STYLE>
</HEAD>
<BODY bgcolor="#FFFFFF">
<H2 align="center">クエリーを受け取る</H2>
<DL>
<DT>■リンクから</DT>
<DD><A href="query.cgi?q=Hello">リンクから</A><BR><BR></DD>
<DT>■FORMタグから</DT>
<DD>
<FORM action="query.cgi">
<INPUT type="text" name="q" value="Hello">
<INPUT type="submit" value="FORMタグから実行(GET)">
</FORM>
<BR>
</DD>
</DL>
</BODY>
</HTML>
───────
ソース2(CGI)
───────
#!/usr/bin/perl
;#
;#クエリーを受け取る(query.cgi)
;#
use strict;
#==================================================#
# メインルーチン #
#==================================================#
package main;
{
my $query;
#--------------------------------#
# クエリーを受け取る #
#--------------------------------#
$query = $ENV{'QUERY_STRING'};
#--------------------------------#
# 表示する #
#--------------------------------#
print "Content-type: text/plain\n\n";
print $query;
#--------------------------------#
# 正常終了 #
#--------------------------------#
exit(0);
}
───────
実行方法
───────
テキストエディタ(メモ帳やSimpleText)などで上記のソース(プログラム)を
保存してください。ソース1は適当な名前(xxxx.html)でOKです。ソース2は
「query.cgi」とすると、HTMLを変更せずにすみます。
CGIの詳しい実行方法については、前回のメルマガをご参照ください。
http://backno.mag2.com/reader/BackBody?id=200210050820000000080329000
リンクの場合“query.cgi?”以降の文字を色々と変更し、実行してみてくだ
さい。FORMタグの場合、テキストボックスのnameやvalueを変更したり、ラジ
オボタンなどを追加したりすると楽しいですよ。
★重要!
このCGIはセキュリティーホールを含みます。
学習以外の用途には使用しないでください。
───────
解 説
───────
■CGIに値を渡そう!
Webサイトを作成していると、BBSやアンケートなどユーザーからの書き込
みや情報を受けつけたい場合があります。そんな時、CGIはどうやって情報
を受け取ればいいのでしょうか?
これには主に2つのやり方が考えられます。
(1)URLにクエリーを付加する
(2)FORMタグを使用する
どちらも最終的に得ることのできる値は同じです。
その時々によって、最適な物を選択してください。
※微妙に嘘をついていますが、そんなものだと思ってください。
■(1)URLの最後に値をつける
まずはリンクのパターンです。
書式的に言うと、
http://www.ichikoro.com/hoge.cgi?name=value ← '?'から後ろがクエリーです。
~~~~~~~~~~
というような形でファイル名の後ろに「名前=その値」という形で記述し
ます。ファイルとクエリーの境目には半角の“?”を使います。
複数の値を渡すには
name1=value1&name2=value2& ........ &nameN=valueN
というようにアンパサンド(&)で連結します。
この時に同じ名前を用いてもURL的には問題ありません。
例えば、投票CGIを作った時に
<H3>■好きなビールメーカーは?</H3>
<A href="http://www.hogehoge.com/vote.cgi?vote=asapi">アサピ</A><BR>
<A href="http://www.hogehoge.com/vote.cgi?vote=kyorin">キョリン</A><BR>
<A href="http://www.hogehoge.com/vote.cgi?vote=4tory">ヨントリー</A><BR>
何て感じで使うことができます。
ちなみにアンカーを併用する場合は
xxxx.cgi?name=value#top
といった具合に、アンカー名は最後に記述します。
これが意外と忘れがち(^^;
■(2)FORMタグを使用する。
FORMタグを使う場合は、基本的にそれぞれのタグのルールに従います。
正確な情報についてはW3Cのサイトをご覧くださいませ。
・HTML 4.01 Specification(英語)
17 Forms
http://www.w3.org/TR/1999/REC-html401-19991224/interact/forms.html
→の日本語訳
http://www.asahi-net.or.jp/~sd5a-ucd/rec-html401j/interact/forms.html
とは言え、どんな感じになるのか、サクッと見てみましょう
<FORM action="実行するCGIのパス(URL)" method="GET|POST(次回解説)">
<!-- あらかじめコチラで固定の値をセット(ブラウザには表示されません) -->
<INPUT name="名前" value="値(もしくは初期値)" type="hidden">
<!-- ユーザーから値を入力してもらう -->
<INPUT name="名前" value="値(もしくは初期値)" type="text|password|checkbox|radio|file">
<TEXTAREA rows="幅" cols="高さ" name="名前">初期値</TEXTAREA>
<SELECT name="名前">
<OPTION value="値1">選択肢1</OPTION>
<OPTION value="値2">選択肢2</OPTION>
:
:
<OPTION value="値n">選択肢n</OPTION>
</SELECT>
<!-- 送信、リセットする -->
<INPUT type="submit|image" name="名前" value="値">
<INPUT type="reset" name="名前" value="値">
<INPUT type="button" name="名前" value="値">
</FORM>
“|”で区切られたものは、「いずれか」という意味です。
例えば
<INPUT type="submit|image">
とあった場合、
<INPUT type="submit">
or
<INPUT type="image">
のどちらかを選択できると言う意味です。
話を戻しましょう。このようにFORMを記述すると、submitボタンを押すことによって
<FORM> 〜 </FORM>の間のデータが、action属性で指定したCGIへ渡されます。ここで
CGIへ渡されるデータの形式は前述した(1)と同じです。
ちなみに、下のように
<FORM>
<FORM> </FORM>
</FORM>
FORMの中にFORMを書くことはできません。
またsubmitはFORMの中であれば、どこにあってもかまいません。
(最下部である必要はありません)
■CGI側での取得方法
今回のサンプルの場合、これらの渡した値は環境変数「QUERY_STRING」の中につ
まっています。
> $query = $ENV{'QUERY_STRING'};
といった具合に取得し
> print "Content-type: text/plain\n\n";
> print $query;
てな感じでそのまま表示しています(^^ゞ
実際に使うには、コイツに色々と処理をする必要がありますが、
今回はココまで。次回にご期待ください。
───────
次回予告
───────
今回紹介したやり方だと、あまり大量のデータを渡した場合にデータが途中で切れて
しまうといった、嬉しくないことが起こる場合があります。
そんなときにはPOSTで渡してやります。今回紹介したサンプルはいずれもGETです。
「GET?POST??」という感じだと思いますが、それぞれが何を意味しているのか、
そもそも何かについて、次回解説したいと思います。
───────
分からない
───────
いまいちよく分からない場合は、以下へれっつらごー。
・サポートBBS
このメルマガ専用のサポート掲示板
http://www.ichikoro.com/webp/bbs/
・CGIプログラミングML
CGIなどWebに関する話題を繰り広げるメーリングリスト
このメルマガとは何の関係もありませんので発言時は注意を。
http://www.ichikoro.com/cgi/ml/
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
前回(Code.001)の補足 「IEにtext/plainを渡すべからず!」
──────────────────────────────────────
前回メルマガを配信した後に読者の方から
「実行するとダウンロード画面が出てきてしまいます。」
こんな質問がやってきました。
以下に、BBS上でお答えした内容を掲載します。
> IEでチェックされていらっしゃいますか?
> 実はIEくん、「text/plain」をそのまま表示せずに
> ダウンロード画面を出す場合があります。
>
> ・とほほのCGI入門
> http://tohoho.wakusei.ne.jp/wwwcgi4.htm
> ※「text/plain のわな(共通)」の項を参照ください。
>
> マイクロソフト的には「仕様」だと思われます(^^;
> そこで、IEで実行する場合は
>
> print "Content-type: text/plain\n";
>
> この行を
>
> print "Content-type: text/html\n";
>
> とすると上手く動きます。
> 注意書きが必要でしたね。
> 失礼しました。
>
> ただ、掲載したサンプルはCGIの仕様としては正しい物です。
> Netscapeなど他のブラウザでご覧になられると、期待通りに
> 動きます。
他にも質問やご要望は、ぜひ掲示板をご活用ください!
気付き次第、随時お答えいたします。
http://www.ichikoro.com/webp/bbs/
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
編 集 後 記
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
かなりの長電話好きです。
夜中に話し始め、そのまま朝日を拝むこともシバシバ。
しかし以前と比べて、ずいぶん安くなったとは言え通話料が高いのはつらいです。
先月も携帯だけで3万円近く(これに固定電話がプラスされると...)。毎月、月末の
請求書が怖いです(^^;
「その分楽しんでるからいいか。人生の必要経費や」
と思って過ごしていたのですが、先日ドコモの「ゆうゆうコール」を見た瞬間、
思わず申し込んでしまいました。どんなサービスかと言うと、
・あらかじめ指定した電話番号との通話を10%引き。
・指定した相手がドコモなら30%引き
ここまでなら普通のサービスなのですが、
・相手がドコモなら、相手に3分10円の無料通話をプレゼント
これに一番興味をひかれました。
お互い加入して、交互に掛け合えばかなりの割引です。かかってきた相手が
学生だったりすると、ついつい「大丈夫?かけなおそうか?」と気になって
しまうのですが、これなら罪悪感が減らせます(笑)
・ゆうゆうコール
http://www.nttdocomo.co.jp/p_s/charges/system/keitai/yuyu.html
そうそう、これらサービスの申し込みはiモードやWeb上から簡単に行うこと
ができます。
・iモード
iメニュー > メニューリスト > DoCoMoメニュー > ドコモeサイト
・Web
http://www.esite.nttdocomo.co.jp/
※最初にIDの発行が必要なのですが、これが郵送のため
ちょっと面倒。iモードならスグできます。
平日電話したりドコモショップに行くのって面倒なんですよね(^^;
というわけで、もっとお得な情報があったらみなさん教えてくださいね!
しばらく会っていないと、その人が生きているかどうか本当に不安になります。
上京して以来、随分と感じてきました。そんな時、声が聞けるだけで安心するん
ですよね。だから、なかなか会えない人だと話しているだけでうれしくて、つい
つい話込んでしまうんですよね。こんな気持ちを大事にしたいな、とインターネ
ットを使えば使うほど思います。
それでは、また来週お会いしましょう! (^-^)/~~
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
【 Webプログラミング Code Sample 】
発 行 : ichikoro.com
発行責任者 : 勝部 麻季人
< katsube@ichikoro.com >
Webサイト : < http://www.ichikoro.com/webp/ >
お問い合わせ先 : < mm-webp@ichikoro.com >
Powerd by まぐまぐ
All Right Reserved, CopyRight(C) 2001 Webプログラミング Code Sample
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■