■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ CGI3分クッキング Vol:035 発行日: 1999年11月09日 総発行部数: 1581部 (1999年11月08日現在) ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ◆PR◆-------------------------------------------------------------------- ●おいしいお肉でお馴染の「いづつ屋」では、 只今100名様限定キャンペーン中。 牛タンのみそ漬けを1000円にてご奉仕中! めちゃくちゃ美味しいお肉を、是非ご賞味下さいませ。 http://www.tanba-izutsuya.com/ --------------------------------------------------------------------◆PR◆ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ◆目次◆ ●Web新撰組ニュース ●今日の献立:検索CGIを作りましょ ●予告 ●はぎちゃん今日のひとこと ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ◆PR◆-------------------------------------------------------------------- ◆ いまからでも間に合う 「SE・プラグラマーを目指して頂ける方」大募集!◆ ◆ 11月16日(火) ◆ 専門・短大・大学・中途の方を対象にセミナー開催! ◆ click< http://a.clickincome.net/md/dk?mid=dacdd53a9b97756d3d0dffefe6f4f62b > --------------------------------------------------------------------◆PR◆ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ●Web新撰組ニュース メールを使った新しい遊びを追及する「メールで遊ぼう!」。 出会いの広場「みんなの掲示板」も登場! http://www.web-kyoto.com/vmail/ へGO! Web新撰組メンバー執筆のCGI参考書。 「Perlで作る楽しいCGI」は、エーアイ出版のエーアイムックNo.237。 内容についての御質問は、新撰組ML(http://www.web-kyoto.com/ml/)へ。 ●今日の献立:検索CGIを作りましょ 最初に・・・ 前回、分類に「その他」を入れるの忘れてました。31番目にその他、というの を追加しといて下さい。 あと、データベースに入れる項目で、作品名にもふりがなを入れたいと思いま す。漢字が苦手なんで。。。 内容 形式 入力条件 データの数 1:題名 文字列 必須 1 2:題名よみがな 文字列 入れたければ 1 3:作者名 文字列 必須 複数可 4:作者名よみがな 文字列 あれば 複数可 5:訳者名 文字列 あれば 複数可 6:収録先 文字列 あれば 複数可 7:収録先よみがば 文字列 入れたければ 複数可 8:収録作品 文字列 あれば 複数 9:収録作品よみがな 文字列 入れたければ 複数 10:国名 文字列 あれば 複数可 11:出版社 文字列 あれば 1 12:発行年月日 文字列 あれば 1 13:値段 文字列 あれば 1 14:ISBN 文字列 あれば 1 15:分類 文字列 必須 1 16:購入日 文字列 あれば 1 17:関連URL 文字列 あれば 1 18:URLへのコメント 文字列 あれば 1 19:備考 文字列 あれば 1 てな具合になりました。 では、今回は検索部分のCGIを作って行きます。 ◇検索方法は、、、 そう言えば、、、まだ検索方法も決めてないんだった・・・。行き当たりばっ たりの恐さよ。。。 えー検索方法ですが、 1:題名検索 1:題名、6:収録先、8:収録作品から入力した文字列を含むものを探し出 します。 2:題名よみがな検索 2:題名よみがな、7:収録先よみがば、9:収録作品よみがなから入力した 文字列を含むものを探し出します。 3:作者名検索 3:作者名から入力した文字列を含むものを探し出します。 4:作者名よみがな検索 4:作者名よみがなから入力した文字列を含むものを探し出します。 5:分類検索 15:分類から、選択フォームで選んだ分類のものを探しだします。 6:備考検索 19:備考から入力した文字列を含むものを探し出します。 検索方法はこの6種類。and,orの検索も出来るようにしましょう。 ◇アタマ 例によって前についてる数字は行番号なので無視して下さい。 ----------------------------------------------- 1:#!/usr/local/bin/perl 2: 3:use Sprite; #Spriteの読み込み 4:$CgiName='hserch.cgi'; #このCGIのファイル名 5:$CgiTitle='熱血!検索君'; #このCGIの名前 6:$DBFile='book.db'; #データファイル名 7: 8:%FORM=&GetFormdata; #フォームの内容を%FORMに入れる 9: 10:if($FORM{'action'}){ #actionによって動作を変える 11: $action=$FORM{'action'}; 12:}else{ 13: $action="show_serch_form"; 14:} 15: ----------------------------------------------- GetFormdataサブルーチンは前々回に使ったのをそのまま使います。 ----------------------------------------------- 1:sub GetFormdata { 2: local($buffer,$name,$value,@pairs,%FORM); 3: 4: require 'jcode.pl'; 5: 6: if ($ENV{'REQUEST_METHOD'} eq "POST"){ 7: read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); 8: }else{ 9: $buffer = $ENV{'QUERY_STRING'}; 10: } 11: 12: @pairs = split(/&/,$buffer); 13: foreach (@pairs) { 14: ($name, $value) = split(/=/, $_); 15: $value =~ tr/+/ /; 16: $value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg; 17: $value =~ s/[\r\n]//g; 18: &jcode'convert(*value,'euc'); 19: $FORM{$name} = $value; 20: } 21: 22: return(%FORM); 23:} ----------------------------------------------- これは、CGIの最後の方にひっつけます。 ◇フォームの部分 入力フォームを表示するサブルーチンを作ります。 ----------------------------------------------- 1:sub ShowSerchForm { 2: 3: print <<"EOL"; 4:Content-type: text/html 5: 6: 7:
8: 9: