【Webプログラミング - Code.006】CGI(Perl)基本動作 その6:「モジュールを使う」 前編

   Code.006                                                 2002年11月19日発行
■━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━■
                           【 Webプログラミング 】

                       〜 猫的プログラマーとその軌跡 〜
■━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━■

              ▼毎週月曜日に配信しています。
              ▼等幅フォントでご覧いただくとキレイに見えます。
              ▼登録・解除はこちらから可能です。
                < http://www.ichikoro.com/webp/ >
                  ※ぜひお友達にもご紹介ください(^^)/


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 CGI(Perl)基本動作 その6:「モジュールを使う」
──────────────────────────────────────

すみません、配信が遅れてしまいました(平謝)
というわけで今回は本当にサンプルの紹介だけです。
詳細な解説は来週掲載しますので、平にご容赦を( ^.^)( -.-)( _ _)

ってな感じですので、今回はCode.004でご紹介したソースを
書き換えてみたいと思います。HTMLは同じですが、CGIが大き
く変わっています。

・Code.004「URLエンコード・デコード」
  http://backno.mag2.com/reader/BackBody?id=200210280500000000080329000


───────
 ソース1(HTML)
───────
<HTML>
<HEAD>
    <TITLE>クエリー表示</TITLE>
</HEAD>
<BODY bgcolor="#FFFFFF">

<H2>クエリー表示</H2>

<FORM action="printquery2.cgi" method="POST">
    氏名:<INPUT type="text" name="namae"><BR>
    年令:<INPUT type="text" name="age" size="10">歳<BR>
    性別:<INPUT type="radio" name="sex" value="man">男性 
          <INPUT type="radio" name="sex" value="woman">女性<BR>
    居住地域:<SELECT name="area">
                    <option value="1">北海道
                    <option value="2">東北
                    <option value="3">関東
                    <option value="4">東海
                    <option value="5">北陸
                    <option value="6">関西
                    <option value="7">中国
                    <option value="8">四国
                    <option value="9">九州・沖縄
                    <option value="99">その他
            </SELECT><BR>

    好きな食べ物:
        <INPUT type="checkbox" name="koubutsu" value="ichigo">いちご 
        <INPUT type="checkbox" name="koubutsu" value="mikan">みかん 
        <INPUT type="checkbox" name="koubutsu" value="ringo">りんご 
        <INPUT type="checkbox" name="koubutsu" value="banana">ばなな<BR>
    <BR>
    何か一言:<BR>
    <TEXTAREA rows="5" cols="50" name="word"></TEXTAREA><BR>
    <BR>
    <BR>
    <INPUT type="submit">
</FORM>

<HR>
<DIV align="right"><SMALL><I>Webプログラミング</I></SMALL></DIV>

</BODY>
</HTML>


───────
 ソース1(CGI)
───────
#!/usr/bin/perl

;#
;#渡されたクエリーを表示する(printquery2.cgi)
;#

#----------------------------------------------------------------------#
#                             モジュール                               #
#----------------------------------------------------------------------#
use strict;                 #コーディングの厳格化
use CGI qw(:standard);        #CGIモジュール


#======================================================================#
#                           メインルーチン                             #
#======================================================================#
package main;
{

    my $q = new CGI();
    my @qname;
    my $name;

    #--------------------------------------------------#
    #                全クエリー名の取得                #
    #--------------------------------------------------#
    @qname = $q->param();

    #--------------------------------------------------#
    #                    ヘッダ表示                    #
    #--------------------------------------------------#
    $|=1;
    print    $q->header("text/html"),            #デフォルトが "text/html" のため書かなくても良い
            $q->start_html(
                    -title   => "printQuery2",
                    -BGCOLOR => "#FFFFFF"  ),

            $q->h2( {-align => "center"}, "printQuery2");

    print    qq{<DIV align="center">\n},
            qq{<TABLE border="1">\n};

    #--------------------------------------------------#
    #                    値を表示                      #
    #--------------------------------------------------#
    foreach $name (@qname){
        printf( qq{<TR><TD align="right">%s</TD><TD>%s</TD></TR>\n}
                    , $name
                    , $q->param($name) );
    }

    #--------------------------------------------------#
    #                    フッタ表示                    #
    #--------------------------------------------------#
    print <<"END_OF_HTML";
</TABLE>
</DIV>

<HR>
<DIV align="right"><SMALL><I>Webプログラミング</I></SMALL></DIV>
END_OF_HTML

    print $q->end_html();

    #--------------------------------------------------#
    #                      正常終了                    #
    #--------------------------------------------------#
    exit(0);
}

__END__


───────
   実行方法
───────
テキストエディタ(メモ帳やSimpleText)などで上記のソース(プログラム)を
保存してください。ソース1は適当な名前(xxxx.html)でOKです。ソース2は
「printquery2.cgi」とすると、HTMLを変更せずにすみます。

CGIの詳しい実行方法については、Code.001をご参照ください。
http://backno.mag2.com/reader/BackBody?id=200210050820000000080329000

  ★重要!
    このCGIはセキュリティーホールを含みます。
    学習以外の用途には使用しないでください。

───────
    解 説
───────

上記のサンプルだと少々複雑ですので、もう少し簡潔に
書いてみましょう。

    #!/usr/bin/perl

    ;#
    ;#特定のクエリーを表示する
    ;#

    use CGI qw(:standard);        #CGIモジュール

    #-- オブジェクト作成 --#
    $q = new CGI();

    #-- 値取得 --#
    $value = $q->param("age");        #クエリー名"age"の値を取得

    #-- 表示 --#
    print $q->header();                    #print "Content-type: text/html\n\n";
    print $value;

    exit(0);


上記のCGIにクエリー"age"を渡してみてください。
このサンプルで大体のイメージはつかんでいただけるでしょうか?


───────
   次回予告
───────
時間の関係で、説明がおざなりになってしまいました(^^;
次回はもう一個別のサンプルをご紹介するとともに、
詳しく解説をしたいと思います。


───────
  分からない
───────
いまいちよく分からない場合は、以下へれっつらごー。

  ・サポートBBS
    このメルマガ専用のサポート掲示板
      http://www.ichikoro.com/webp/bbs/

  ・CGIプログラミングML
    CGIなどWebに関する話題を繰り広げるメーリングリスト
    このメルマガとは何の関係もありませんので発言時は注意を。
      http://www.ichikoro.com/cgi/ml/

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
                           編    集    後    記
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
う〜ん、ここしばらく色んな書類に追われています(^^;
というわけで配信が後倒しになってしまいました。
詳しい状況などはまた来週にこの場所で。
心苦しいぞ〜。


という状況にも関わらず、日曜日にゲームボーイアドバンス買っちゃいました(笑)
もうお店で見たときから我慢できず、ここ数日はファイアーエムブレム漬けです。
中学生くらいのころ、ゲーム事態の面白さはもちろん世界観にもやられてしまって
いたのを思い出し、あまりの懐かしさに泣けてきました(^^ゞ

    ・ファイアーエムブレム 〜封印の剣〜
      http://www.nintendo.co.jp/n08/afej/
        ♪ふぁいあーえむぶれむ、手強いシミュレーション〜

昔やり込んでいたスーファミ版(紋章の謎)とは登場人物も世界も、もちろんスト
ーリーも違うんですが、システムは正しい方向に進化しているしチョコッと難し目
の所もそのまま。世界観も気に入りました。

聖戦の系譜(続編)がダメダメだったというのもあるんでしょうが(^^;
そうそう、ダメダメといえばファミコン版の外伝がちょっとキモ.....。


と、最近ここまで熱く語れるゲームにお目にかかれてないなぁ、というか
最近全くやってなかったからか?(^^;とりあえず週末に給料が入ったら今
度は「逆転裁判」の予定です(笑)


それでは、また来週お会いしましょう (^-^)/~~

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

                   【 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
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■