中古車検索用のcgiを改造しています。
複数選択式のチェックボックスでor検索をやりたいのですが、うまくいきません。
通常の複数選択式チェックボックスは、and検索なので、例えば2つにチェックするとその2つ両方を満たすものが出てくるのですが、中古車屋の所在地を都道府県でチェックするような場合は、東京or埼玉というようにand検索ではなくor検索が都合いいのです。
(東京or埼玉)and(オープンカーorセダン)and(○○or○○)
といった具合に、各name毎にグループ分けしたグループ内をor検索、グループ同士はand検索にいたいと思っています。
どなたか教えていただけませんか?
又は、複数選択式checkboxのor検索のやり方だけでも助かります。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
例えば次のようなHTMLフォームがあるとします。
<INPUT TYPE="CHECKBOX" NAME="area1" VALUE="1">東京
<INPUT TYPE="CHECKBOX" NAME="area2" VALUE="2">埼玉
<INPUT TYPE="CHECKBOX" NAME="area3" VALUE="3">静岡
このフォームから渡された値をcgi-lib.plでデコードすると $in{'area1'}、$in{'area2'}、$in{'area3'} と3つの変数に値が入ります。
(もちろん対象のフォームがチェックされない場合は、なにも値が渡りません)
それで、データファイルの地域が入っているフィールド名を$areaとし、東京のarea番号が1、埼玉のarea番号が2、静岡のarea番号が3という形式でデータが保管されているとします。
これで条件式を作ると次のようになります。
if ($area eq $in{'area1'} || $area eq $in{'area2'} || $area eq $in{'area3'}) { 条件にマッチした際の処理 }
※ 読みやすいように 比較演算子に「eq」を使いましたが、「==」でも問題なく動きます。
No.2
- 回答日時:
HTMLの部分ですが。
。。> print "<INPUT TYPE=CHECKBOX NAME=area VALUE=\"99\">指定無し\n\n";
> print "<INPUT TYPE=CHECKBOX NAME=area VALUE=\"1\">東京\n\n";
> print "<INPUT TYPE=CHECKBOX NAME=area VALUE=\"2\">埼玉\n\n";
> print "<INPUT TYPE=CHECKBOX NAME=area VALUE=\"3\">静岡\n\n";
このような指定方法はcheckboxでは使えない方法です。
これはradio-buttonのときに使う方法です。
checkboxの場合は項目数に合わせて area1 area2 area3 などと異なるname値を指定しなければいけません。
なぜかというと。。。
上記のように4つのcheckboxがあるとして、全てを選択したとすると、submit後にどのチェックボックからvalue値が渡されているのか判断できなくなるためです。
ご提示されたソースを見るとcgi-lib.plでエンコードを行っているようですが、
すべてのname="area"に対応するvalue値は $in{'area'} になってしまいますね。
これでは困ります。
そのためcheckboxを使う場合はname値が重複しないようにするのです。
checkboxを使う場合はname値を変える。
radio-buttonを使うときはname値を同じにする。
というように覚えましょう。
今回は or 判定のみを行いたいようですので、各項目ごとにcheckboxからradio-buttonに変更すればいいと思います。
and 判定も必要とのことでしたら、checkboxのままname値を変えればOKです。
この回答への補足
何度もすみません!
もう一つお尋ねしたいのですが、
ラジオボタンだと、地域が一つしか選べないので、
(東京or静岡or埼玉)
のように、複数選べてor検索するためにはどうしたらいいのでしょうか?
例えばYahooの中古車検索のように複数のエリアの中から検索みたいにしたいんですが。
http://usedcar.autos.yahoo.co.jp/joken.html
name値は別にするんですか!?なるほど。
or検索をするグループをラジオボタンに変えて、and検索にしたいところをname値を変えたところウマクいきました!
ありがとう御座いました。大変参考になりました。
No.1
- 回答日時:
うーん(´・ω・`)
これは処理的な事でしょうか?それとも
画面的な事でしょうか?
内容的には画面的な気がするので、画面の事だと
勝手に判断しておきます。
普通にグループ間はandでグループ内はorという
取り決めをする(説明書きをする)だけでいいのでは
ないでしょうか?
都道府県: □東京 □埼玉 □静岡
車種 : □セダン □ワゴン □軽トラ
価格 : □~100万 □~300万 □~500万
※各項目を選択してください。項目間はAND検索となります。
※複数選択した場合は、項目毎にOR検索となります。
という感じじゃないでしょうか。
まさか、(東京andセダン) or (埼玉andワゴン)という
ような変な検索を希望する人もいないでしょう(^^;
処理的な場合は、if条件又はDBなら検索条件を
そのままand,orすればいいだけですよね?
この回答への補足
ご回答ありがとうございます。
そして質問の仕方が悪くてすみません。
html部分はおっしゃるとおりのやり方で
print "<INPUT TYPE=CHECKBOX NAME=area VALUE=\"99\">指定無し\n\n";
print "<INPUT TYPE=CHECKBOX NAME=area VALUE=\"1\">東京\n\n";
print "<INPUT TYPE=CHECKBOX NAME=area VALUE=\"2\">埼玉\n\n";
print "<INPUT TYPE=CHECKBOX NAME=area VALUE=\"3\">静岡\n\n";
のように、グループ毎にnameをつけて1~3までのvalueをlogに保存しています。
実は、処理的な問題で悩んでいまして…。
言語はperlでcgiを書いています。
とりあえずログを呼び出して、
(1)グループの中で[指定無し]を押した場合
(2)条件があっている場合
以上2つにおいて、検索に引っかかるように指定しています。
open(IN,"$logfile") || &error("Open Error : $logfile");
$i=0;
while (<IN>) {
($no,$sub,$com,$area,$syurui,$nedan,$it1,$it2,$it3,$it4,$it5,$it6,$it7,$it8,$it9,$it10,$it11,$it12,$cnt) = split(/<>/);
if ($in{'area'} != 99 && $in{'area'} != $area) { next; }
if ($in{'syurui'} != 99 && $in{'syurui'} != $syurui) { next; }
if ($in{'nedan'} != 99 && $in{'nedan'} != $nedan) { next; }
以下続く…
これで、全てがand検索になるんですが、or検索にする方法がわからずに悩んでいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(IT・Webサービス) Googleで「AND」「OR」「NOT」検索など普段使いますか? 1 2022/11/03 13:12
- au(KDDI) Android Gmail で検索して消す方法 1 2022/11/10 16:10
- Visual Basic(VBA) VBAチェックボックスで有効無効切り替えできるように 5 2022/10/21 16:13
- Access(アクセス) Access 複数条件検索の設定が上手く行きません 1 2022/07/22 20:37
- UNIX・Linux bashでブランク(空白)を検索文字列として指定する方法 1 2022/04/13 22:29
- Visual Basic(VBA) VBA チェックボックスの設定について 1 2022/10/24 10:27
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- 迷惑メール・スパム gmailの過去のメールを一括削除する方法について 3 2023/04/19 05:27
- その他(コンピューター・テクノロジー) AND検索詳しい方お願いします 3 2023/08/12 19:35
- Windows 10 Windows10 ファイル名と期間でファイルを検索するにはどうすればいいか 3 2023/06/07 14:01
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
チェックボックスでのor検索
-
掲示板スパム対策(改造)ガー...
-
wordの数式について 定積分を書...
-
ラジオボタンが両方とも選択で...
-
INPUT TYPE
-
htmlからパラメータで、cgiに渡...
-
VB初心者。小数点以下の表示で...
-
別formのhidden項目を自form値...
-
プルダウンメニューでValue値を...
-
perlにおけるセッションIDについて
-
チェックボックスの返す値
-
<select>タグの幅設定
-
プログラミングについての質問...
-
チェックボックスとセレクトボ...
-
メールフォームのプルダウンメ...
-
FORMのselectの選択肢を最初か...
-
JEditorPaneでwebページを表示
-
「value」に2つの値をセットす...
-
VB.net データーグリッドビュー...
-
テキストBOXの縦幅を変えたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SUN BBSの改造方法
-
perlで書いたcgiでsqliteの使い...
-
tracert ができない原因
-
入力フォームに全角・半角スペ...
-
CGIメールフォームの件名について
-
Perlでuse socketを使用してフ...
-
CGI(Perl)内での必須項目チェ...
-
電話番号を読み込むプログラム...
-
Windows7でVBScriptによるネッ...
-
wordの数式について 定積分を書...
-
ラジオボタンが両方とも選択で...
-
select値をhiddenのvalueに渡し...
-
「value」に2つの値をセットす...
-
チェックボックスの返す値
-
INPUT TYPE
-
WEBページを強制的に横画面で見...
-
[HTML]プルダウンメニューの横...
-
VB.net データーグリッドビュー...
-
別formのhidden項目を自form値...
-
FORMのselectの選択肢を最初か...
おすすめ情報