• 締切済み

データベースCGIでの検索方法

某データベースCGIを改造して何とか使えるようにしようとしています。 検索してヒットしたもののみ表示させる部分なのですが、どのようにしたら実現できるかさっぱりです。 やりたいことは数値でヒットした物のみ表示です。 検索フォームにドロップダウンリストとして 1 ; ~10 2 ; 11~50 3 ; 51~100 … 10 ; 2,000~ と言う風にセットします。 データは3桁区切りのカンマが入ったものが保存されています。 どのようにして検索させればいいのでしょう? 普通にif文で if($FORM{'data'} eq '1'){ if($data =< 10){ ; } else { next; } } elseif($FORM{'data'} eq '2'){ if($data => 10 && $data =< 50 ){ ; } else { next; } } ~~ という書き方であっているのでしょうか? そのものずばりの回答がとてもありがたいですけど、 参考となるCGIがあったらそれの紹介もあわせてお願いします。

  • Perl
  • 回答数1
  • ありがとう数1

みんなの回答

  • hira6bg
  • ベストアンサー率61% (8/13)
回答No.1

回答にならないかもしれませんが、 フォームを下記のようにしてしまえば値の取得が 楽になりませんか? ○HTMLフォーム内 <select name="DL"> <option value="10">~10 <option value="50">11~50 <option value="100">51~100 ・・・ <option value="2000">2000~ </select> ○CGI if($FORM{'data'} eq '10'{} if($FORM{'data'} eq '50'{} if($FORM{'data'} eq '100'{} ・・・ if($FORM{'data'} eq '2000'{}

関連するQ&A

  • cgiのカスタマイズが上手く行きません

    http://www.rescue.ne.jp/ のサイトにあります 「簡易データベース」http://www.rescue.ne.jp/cgi/database/ のカスタマイズが上手く行きません。 登録の項目を「名前」「星座」「血液型」に絞り登録をし、 「星座」「血液型」の項目選択で両方が一致した人の 「名前」を検索結果に出そうと思っています。 「改造箇所 index.html・・・フォームのカスタマイズ regist.html・・・フォームのカスタマイズ regist.cgi・・・#入力チェック部分、{'EMAIL'}の削除(未使用のため) search.cgi・・・      ($d,$NAME,$BLOOD,$BIRTH) = split(/\,/,$data);      とし、それぞれ $data = $data2 = $BASE[$num]; &jcode'convert(*data,'euc');      ($d,$NAME,$BLOOD,$BIRTH) = split(/\,/,$data); # 血液型 if ($FORM{'BLOOD'} ne 'all') { if ($BLOOD eq $FORM{'BLOOD'}) { ; } else { next; } } # 誕生日 if ($FORM{'BIRTH'} ne 'all') { if ($BIRTH eq $FORM{'BIRTH'}) { ; } else { next; } } と改造。と、最小限のカスタマイズをしたつもりですが、どうしても ●ご指定の条件では見当たりませんでした. となり、検索に引っかかりません。 データ自体はcsvedit.cgiで確認しても、登録はされているようです。 原因、お分かりになりますでしょうか? 何卒!何卒!よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • ○○を含まない、という検索方法

    CGI RESCUEさんの「簡易データベース v2.1」を利用しています。 http://www.rescue.ne.jp/cgi/database/ 検索方法は if ($name eq $FORM{'name'}) { ; } else { next; } という感じになっています。 これを、「名前に○○と△△と□□を含まないもの残りすべて」とするにはどうしたらよいでしょうか? お願いします。

    • ベストアンサー
    • CGI
  • 検索cgiについて

    こんにちは。 私は今、不動産物件検索のcgi(フリー)を設置したのですが、検索の『賃料』の箇所のプログラムの記述がよく分かりません。 リストボックスで1万円~5万円など、下限と上限を選択して検索する項目です。 一致する条件の項目は下記のように記述しました。 # 地区(一致) if ($FORM{'CHIKU'} ne 'all') { unless ($CHIKU eq $FORM{'CHIKU'}) { next; } } 含まれる文字を条件にする項目は下記のようにしました。 # 間取り(含む) if ($FORM{'TYPE'} ne '') { if ($TYPE =~ /^([\x00-\x7F]|[\x8E\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE]{2})*$FORM{'TYPE'}/i) { ; } else { next; } } abc~xyzという風に範囲指定して検索するにはどのように記述すればよろしいか教えてもらえませんでしょうか?

    • 締切済み
    • CGI
  • 「ne」の使い方

    検索CGIを改造中です。 チェックボックスにチェックがあれば確答する物のみを表示する、という部分を構築しているのですが、頭がこんがらがってしまったので教えてください。 $value1の値はチェックボックスで、チェック時にonそうでない時は空白(データなし)として保存されています。 if ($FORM{'value1'} ne '') {  if ($value1) { ; } else { next; } } と if ($FORM{'value1'}) {  if ($value1) { ; } else { next; } } これは全く同じ働きをしてくれるのでしょうか? 上が改造前の他の項目用をコピッて来たもので、下が自分で「これでもいけるのでは?」と考えた方です。 大丈夫でしょうか?

    • ベストアンサー
    • Perl
  • 一致する文字としない文字があるのですが

    会員のログイン等で、氏名(漢字)と生年月日でログインするように してあるのですが、「眞」や「はしご高」などの文字が、 フォームで渡ってきた場合に、 データと一致しなくエラーとなってしまいます。 if (!open(IN,"$file")) { &error('データベースエラー','.'); } @BASE = <IN>; $all = @BASE; close(IN); if ($FORM{'FF'} eq '') { $FF = 0; } else { $FF = $FORM{'FF'}; } $TO = $FF + $page - 1; if ($TO > $#BASE) { $TO = $#BASE; } $hit = 0; $next_num = ''; foreach $num ($FF .. $#BASE) { $data = $data2 = $BASE[$num]; &jcode'convert(*data,'euc'); ($d,$NO,$REM,$DATE,$NAME,$EMAIL,$PMAIL,$AGE,$SEX,$PREF) = split(/\,/,$data); # 名前(一致) if ($NAME5 ne 'dadada') { if ($NAME eq $FORM{'NAME'} ) { ; } else { next; } } # 生年月日(一致) if ($AGE5 ne 'kakak') { if ($AGE eq $FORM{'AGE'} ) { ; } else { next; } } # 検索終了処理 if ($hit == $page) { $next_num = $num; last; } else { push(@NEW,$data2); $hit++; } } と検索の部分はなっております。 エラーが出る漢字は少ないのですが、 ログインできないお客様がいて困っています。 なにか対処方法はございますでしょうか? 何卒、宜しくお願い致します。

    • 締切済み
    • CGI
  • if文について

    if文を利用してリストの表示をしようとしています。 ドロップダウンリストは <SELECT name="type"> <OPTION value="all">指定しない </OPTION> <OPTION value="1">タイプA系列</OPTION> <OPTION value="2">タイプB系列</OPTION> となっています。 データはチェックボックスで1か空白で保存されていて、A系列は「s_1」「s_2」、B系列は「s_3」「s_4」「s_5」にチェックが入っているかどうかを振り分けしたいんです。 なので、ドロップダウンリストで「タイプA系列」を選択したら「s_1」「s_2」に1が入っている物のみ表示するというものです。 現在のところこの形です。 if ($FORM{'type'} ne 'all') { if ($FORM{'type'} eq '1'){ if ($s_7 || $s_8 eq 1) { ; } else { next; } }else{ if ($s_9 || $s_10 || $s_11 eq 1) { ; } else { next; } } } このようにやってみましたが全部表示されてしまいます。 どのように直したらOKでしょうか? お願いします。

    • ベストアンサー
    • Perl
  • 大文字と小文字を区別しない検索にする方法

    勉強する間もなく手探りでフリーCGIの改造をさせて頂いています。 if ゃ foreach などは分かりやすいですが、変数の意味が良く理解できていません。 どうぞお力添えをお願い致します。 現在、フリーのCGIでデータ登録と検索をしていますが、大文字と小文字の 区別を無くしたものにするにはどうすればよいでしょうか? 1) AbcDe も abcde も同じにしたい。 2) 可能なら全角と半角も区別無しにしたい。   ただ、2の方は漢字も使うので難しいでしようか? iオプションを使えとの記述を見ましたが、どこを変えるのか解りません。 ソースを載せますので、ご指導宜しくお願い致します。 # 入力内容を整理 $in{'word'} =~ s/\x81\x40/ /g; @wd = split(/\s+/, $in{'word'}); @find=(); $i=0; # 検索処理 foreach (@line) { $flag = 0; foreach $wd (@wd) { if (index($_,$wd) >= 0) { $flag = 1; if ($in{'cond'} eq 'OR') { last; } } else { $andor="and 検索"; if ($in{'cond'} eq 'AND') { $flag=0; last; } $andor="or 検索"; } } # ヒットした場合 $view = $in{'viewc'}; if ( $view eq '' ) { $view = $views } if ($flag) { $i++; next if ($i < $page + 1); next if ($i > $page + $view); push(@find,$_); } } # 検索終了

    • ベストアンサー
    • CGI
  • 最新のファイルのみ検索

    サーバー内のファイルを検索するのにKentWebさんのwwwsrch.cgiを利用しています。 # # すべてのファイルをなめ回す # sub search1 { local($dir) = $_[0]; local(@filelist, $file, $filename); opendir(DIR, $dir); @filelist = readdir(DIR); closedir(DIR); foreach $file (@filelist) { if ($file eq ".") { next; } if ($file eq "..") { next; } $filename = "$dir/$file"; if (-d $filename) { if ($recursive_flag) { &search1($filename); } } else { &search2($filename, $dir); } } } # # ファイルの中身を検索する # # 指定していない拡張子のファイルは無視する $suffix = ".html .cgi .pl"; $fname = substr($target, rindex($target, ".")); if ($suffix{$fname} != 1) { return; } ↑の条件に30日以上古いファイルを無視するように改造することはできないでしょうか? 検索対象ファイルが数十万以上と莫大に増加してきたため、最新のファイルのみ検索対象にできればと考えております。

    • ベストアンサー
    • Perl
  • 全文検索ではなく、必要なデータ(複数フィールド)のみを検索するにはどうしたらいいですか?

    はじめまして、まだCGI初心者なものでよくわからないですが教えてください。 あるCGI関連の書籍に付属のCD内に修められた顧客データベースを改造しているところです。このデータベースはCSVデータの全ての情報を検索して結果を表示するものなのですが、これを「備考($ message)以外の情報を全て検索して結果を表示する」とするにはどのように改造したらよろしいでしょうか。備考は検索しないけれど、他の情報は全て検索して結果を表示させるということです。ただし、結果として表示される画面には備考($ message)の内容も表示させたいのです。 検索に関わる箇所を抜き出すと次のようになります。初心者なので説明がうまくできていないと思いますが、ご解答できる方々は是非ともご教授お願いいたします。 ############################ # 初期画面、検索結果表示 ############################ sub html { open(IN,"$file") || &error(100,'ファイルをオープンできません'); @DB = <IN>; close(IN); @DB = reverse(@DB); if ($FORM{'action'} eq "search") { $kw = $FORM{'kw'}; &jcode::convert(*kw,'euc'); foreach $line (@DB) { $value = $line; if ($kw =~ m/[\*\{\}\=\&\@\~\>\<\#\%\"\'\`\(\)\[\]\\\/\:\;\_\,]/){ &error(101,'検索キーが不適切です'); } &jcode::convert(*value,'euc'); if ($value =~ /$kw/i){ push(@HIT,$line); } } }else{ @HIT = @DB; } print "Content-type: text/html\n\n"; print <<"EOL"; <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=x-euc-jp"> <title>$title</title> @style </head> <body> <div align="center"> <p class="title">$title</p> <p class="text"><b>|</b><a href="$HomeUrl">ホームページ</a><b>|</b></p> <form method="post" action="$reload"> <input type="hidden" name="action" value="write"> <input type="submit" value="データベースに書き込む" class="buttonsmall"> </form> <form method="post" action="$reload"> <input type="hidden" name="action" value="search"> <table border="0" cellspacing="0" cellpadding="2"> <tr> <td> <p class="text">名前、ユーザー名他、備考文の文字検索ができます。</p> </td> </tr> <tr> <td> <table border="0" cellspacing="0" cellpadding="2"> <tr valign="bottom"> <td> <input type="text" name="kw" size="30" class="textarea"> </td> <td> <input type="submit" value="検索" class="buttonsmall"> </td> </tr> </table> </td> </tr> </table> </form> EOL if ($FORM{'line'} eq ''){ $line = 0; }else{ $line = $FORM{'line'}; } $data_count = @HIT - 1; $view_end = $line + ($view-1); if ($view_end >= $data_count){ $view_end = $data_count; } foreach ($line .. $view_end) { ($date_now,$number,$name,$email,$hp,$message,$tiku,$yuza,$tel,$fax,$busho) = split(/\,/,$HIT[$_]); $message =~ s/\r/<br>/g; print <<"EOL"; ############################

    • ベストアンサー
    • Perl
  • perlで正常に検索できない

    CGI RESCUE さんの 簡易データベースでdatファイルを検索しようとしています。。 http://www.rescue.ne.jp/cgi/database/ キーワードで検索をしようとしているのですが、うまくヒットしません。 CGIは以下のようになっています。 # キーワード(フリーワード)  if ($FORM{'keyword'} ne '') {   if ($com5 =~ /^([\x00-\x7F]|[\x8E\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE]{2})*$FORM{'keyword'}/i) { ; }   elsif ($com4 =~ /^([\x00-\x7F]|[\x8E\xA1-\xFE][\xA1-\xFE]|\x8F[\xA1-\xFE]{2})*$FORM{'keyword'}/i) { ; }   else { next; } } $com5には「スズキ用<br>ドアトリム<br>バックミラー」と入っていたとします。 「スズキ」または「ドア」・「ドアトリム」・「トリム」と入力すると、ヒットします。 「バック」または「バックミラー」で検索するとヒットしません。 改行が悪いのかと思い、 $com5を「スズキ用ドアトリムバックミラー」に修正してみました。 同じように「スズキ」等はヒットするのですが、「バック」または「バックミラー」で検索するとヒットしません。 「バックミラー」と言う語句がヒットしないのかと思ったのですが・・・ $com5を「バックミラードアトリムスズキ用」に修正したとします。 「バック」・「バックミラー」でヒットします。 また、「ドア」・「トリム」まではヒットしますが、「スズキ」・「スズキ用」になるとヒットしなくなります。 全くヒットしなかったり、動作しないわけではないので、そもそもが間違っているとかではなく検索する部分で何か文字数制限があるような感じですが、これはどこを修正したら良いでしょうか? 他に情報を記入しないといけない物があれば指摘お願いします。

専門家に質問してみよう