• 締切済み

検索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という風に範囲指定して検索するにはどのように記述すればよろしいか教えてもらえませんでしょうか?

みんなの回答

  • nta
  • ベストアンサー率78% (1525/1942)
回答No.2

ダウンロードしてみましたが、データベースdata.csvが空っぽです。おそらく不動産用サーチ用にカスタマイズされたと思いますが、データの形式くらいは指定してください。また、search.cgiで検索することをねらっていると思いますが、リストボックスのnameプロパティの値は何でしょうか。

tma-kaori
質問者

補足

data.csvが空っぽなのはデータが何も登録されていないからです。 不動産検索物件用に改造しましたが、項目を増やした程度です。 今回つまづいているのは物件の料金を範囲指定して検索できるようにする所ですが、料金のデータのnameプロパティは『YACHIN』となっています。 serch.cgiで△△△~○○○と範囲指定するためにはどのようにソースを書いたらよいでしょうか(困)。。。

全文を見る
すると、全ての回答が全文表示されます。
  • nta
  • ベストアンサー率78% (1525/1942)
回答No.1

あなたが自作しているcgiなのでしょうか、どこかからダウンロードした物なのでしょうか。プログラムやデータベースの全貌が見えてこないのでどのように解答すればいいのか量りかねています。 SELECTタグのOPTIONで指定した文字が取得できるわけですから、これを整数変数に代入して、大小を比較すればよいと直感的には考えるのですが、質問文に記述されているプログラムはそれには関係ないように見えますし。 ひどい勘違いなのでしょうか。

tma-kaori
質問者

補足

cgiはフリーのものをダウンロードしました。 ダウンロード先は、 herz.pobox.ne.jp/cyder/doc/script/rescue04/top.html の『RightSEARCH2 v2.23』です。 「整数変数に代入して、大小を比較すればよい」との事ですが、プログラムの記載の仕方が分かりません。 もしよろしければダウンロードしてみていただきたいのですが。 よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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を「バックミラードアトリムスズキ用」に修正したとします。 「バック」・「バックミラー」でヒットします。 また、「ドア」・「トリム」まではヒットしますが、「スズキ」・「スズキ用」になるとヒットしなくなります。 全くヒットしなかったり、動作しないわけではないので、そもそもが間違っているとかではなく検索する部分で何か文字数制限があるような感じですが、これはどこを修正したら良いでしょうか? 他に情報を記入しないといけない物があれば指摘お願いします。

  • 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での検索方法

    某データベース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で記号除去を行いたいのですがうまく行かない

    perlで記号除去を行いたいのですがうまく行かず困っています。 文字列はEUCです。そこから$patternのような記号を削除したいのですが・・・。 http://www.din.or.jp/~ohzaki/perl.htm#Character 正しくパターンマッチさせる を参考に $ascii = '[\x00-\x7F]'; $twoBytes = '[\x8E\xA1-\xFE][\xA1-\xFE]'; $threeBytes = '\x8F[\xA1-\xFE][\xA1-\xFE]'; $pattern=q([\!!\##\%%\--―ーー・・\//\;;\??\\¥__`‘\{{\}}\++\((\))\[[\] ]\**@@\$$&&\::\>>\<<\~ ̄\^^\"”\'’  \,,\..\==\||\、、\。。]); if ($data =~ s/((?:$ascii|$twoBytes|$threeBytes)*?)(?:$pattern)/$1/mg) { print "マッチした $& \n"; } print $data; として$dataに下の2つを与えてみました。 サンプル1 【あいうえお】 サンプル2 【aaa】 ところが・・・ サンプル1 (出力なし) サンプル2 旻aaa桿 何が悪いのかわかりません・・・ ためしにパターンに【】を追加したところサンプル2はうまく行きましたが サンプル1に変化がありません。(あいうえお も消えてしまう) 何か思い当たる点がありましたら教えてください。よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 半角と全角の文字数カウント方法

    半角の一文字を1とカウントし、全角の一文字も1とカウントしたいのですが、うまい方法を教えてください。 例) 1111ああああ → 8文字 11111111 → 8文字 ああああああああ → 8文字 自分なりに調べて見たら以下の命令を見つけたのですが、うまく行かないのです。 $n =~ tr/\x00-\x7f/\x00-\x7f/; $nn =~ tr/\xa1-\xfe/\xa1-\xfe/; 宜しくお願いします。

    • ベストアンサー
    • Perl
  • cgiのフォーム確認画面で教えてくださいー

    cgiのフォームの確認画面でこまってます。 ラジオボタンの確認はいかで問題なくできています。 END for($xa = 1; $xa < @list_d; $xa++){print '<input name="kai" value="'.$xa.'" type="radio"'; if($form{'kai'} == $xa){print ' checked'; $ch++;} print '>'.$list_d[$xa].'&nbsp;';} print<<END; ・・・同じ要領で、チェックボックスも表示させたいのですが いかですと、うまく表示できません。 END for($xa = 1; $xa < @list_e; $xa++){print '<input name="q2" value="'.$xa.'" type="checkbox"'; if($form{'q2'} == $xa){print ' checked'; $ch++;} print '>'.$list_e[$xa].'&nbsp;';} print<<END; …チェックボックスの場合は何か違う指示が必要なのでしょうか。 どなたかお分かりの方教えていただけますか。 どうぞよろしくおねがいいたします。

    • 締切済み
    • CGI
  • 一致する文字としない文字があるのですが

    会員のログイン等で、氏名(漢字)と生年月日でログインするように してあるのですが、「眞」や「はしご高」などの文字が、 フォームで渡ってきた場合に、 データと一致しなくエラーとなってしまいます。 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
  • フォームの入力チェック

    いつも参考にさせて頂いています。 Perl初心者です。 フォームの入力チェックを作成したいと思っています。 チェック項目 ・会社名    → 空入力でないか、全角入力であるか ・住所     → 会社名のチェックと同様 ・電話番号   → 空入力でないか、半角であるか 処理 上の条件を満たさなかった場合は 「全角で入力してください。」や 「電話番号は半角数字で入力してください」 などといった コメントを付けたページを表示させる。 満たした場合は 「登録しました。」 というようなページを表示。 そこで、入力チェックの条件文を書いたのですが 空入力された場合の条件式がわかりません。 どなたか教えて下さる方がいらっしゃいましたら 宜しくお願いします。 また、入力チェック後のページ切り替えはどのように 行っているのでしょうか? 宜しくお願いします。 #-----社名チェック----- if ($name =~ /[\xA1-\xFE][\xA1-\xFE]/) { $namecheck = ""; } else { $namecheck = "全角入力をして下さい。"; } #-----住所チェック----- if ($adr =~ /[\xA1-\xFE][\xA1-\xFE]/) { $adrcheck = ""; } else { $adrcheck = "全角入力をして下さい。"; } #-----電話番号チェック----- if($tel =~ /^[0-9]+$/) { $telcheck = ""; } else { $telcheck = "電話番号は半角数字で入力してください。"; } ※会社名、住所の全角チェックはjcodeでEUC-JPに変換しています。

  • 「ne」の使い方

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

    • ベストアンサー
    • Perl
  • 3バイト文字を書きだしたい

    恐れ入ります。 表題の通りなのですが、うまく出来ません>< 3バイト文字の判定が \x8F[\xA1-\xFE][\xA1-\xFE] ということでしたので、 試しに以下のようにしてみたのですが、ダメでした。 for ( 161 .. 254 ){ my $tmp=sprintf("\x8f\xa1\x%x", $_); print $tmp; } 【結果】 a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfe

    • ベストアンサー
    • Perl