htmlからチェックボックス&セレクトボックスを使って
postgresで検索し、phpで表示するフォームを作っています。
チェックボックスで検索されたデータをセレクトボックスで
絞り込みたいのですがうまくいきません。
or の部分を and に変えたりしたのですが検索結果が
変わってしまいます。
どなたか教えてもらえないでしょうか。
HTML
<input type="checkbox" name="chk1" value="1">chk1
<input type="checkbox" name="chk2" value="1">chk2
<select name="add">
<option value="北海道">北海道</option>
<option value="沖縄">沖縄</option>
</select>
PHP
if ($chk1 != "") {
$sqlSelect .= "abc = '" . $chk1 . "' or ";
}
if ($chk2 != "") {
$sqlSelect .= "abc = '" . $chk2 . "' or ";
}
if ($add != "") {
$sqlSelect .= "add = '" . $add . "' ;
}
No.1
- 回答日時:
何がどう悪いのか判らないのですが、気付いた点を。
1.chk1とchk2がどちらもabcという項目の条件をつけるものだが、どちらもvalueが1なので、どちらにチェックをつけても同じ条件になるのでは?
2.orとandは全然ちがうので変えたら絞込み結果が変わるのは当然です。
とりあえず、何をどうしたいのか整理してください。
もし可能なら出来上がったSQLをプログラムからではなく、コンソールに貼り付けて実行してみてください。
この回答への補足
お返事ありがとうございます。
説明不足ですみません。
checkboxを簡易化しようと思い間違って書いてしまいました。
不動産の物件検索サイトを作っていまして下記の様になります。
HTML
<input type="checkbox" name="chk1" value="アパート">アパート
<input type="checkbox" name="chk2" value="マンション">マンション
<input type="checkbox" name="chk3" value="戸建">戸建
PHP
if ($chk1 != "") {
$sqlSelect .= "abc = '" . $chk1 . "' or ";
}
if ($chk2 != "") {
$sqlSelect .= "abc = '" . $chk2 . "' or ";
}
if ($chk3 != "") {
$sqlSelect .= "abc = '" . $chk3 . "' or ";
}
if ($add != "") {
$sqlSelect .= "add = '" . $add . "' ;
}
1)アパートを北海道で検索すると3件ヒット
2)マンションを北海道で検索すると2件ヒット
3)戸建を北海道で検索すると1件ヒット
4)アパート・マンション・戸建を北海道で検索すると6件ヒット
5)アパートを沖縄で検索すると4件ヒット
6)マンションを沖縄で検索すると1件ヒット
7)戸建を沖縄で検索すると2件ヒット
8)アパート・マンション・戸建を沖縄で検索すると7件ヒット
9)全検索すると13件ヒット
上記のように作りたいです
chk別で検索することはできるのですが、
アパート or マンション or 戸建 or 県 のため
県別で絞り込むことができません。
アパート or マンション or 戸建 and 県 にしても
同じでした。
関数の使い方自体が間違っているのでしょうか。
No.2
- 回答日時:
PHPというか、SQLの話ですね。
type、areaというフィールドがあるとして、
>1)アパートを北海道で検索すると3件ヒット
だったら、
select * from テーブル名 where type = "アパート" and area = "北海道"
ですよね。
自分の望む結果を得るには
どういったSQL発行すればよいのか、考えてみてください。
この回答への補足
お返事ありがとうございます。
おっしゃるように
select * from テーブル名 where type = "アパート" and area = "北海道"
とすれば検索できます
しかしマンション、戸建もありますので and が使えないのです。
No.3
- 回答日時:
あ、何がわからないのか、わかったかも。
>4)アパート・マンション・戸建を北海道で検索すると6件ヒット
だったら
select * from テーブル名 where (type = "アパート" or type = "マンション" or
type = "戸建") and area = "北海道"
って()つければ、ってことじゃないのかな。
この回答への補足
()を使う事ができるのですね、コンソールで確認できました!
ありがとうございます。
PHPですが、すべてのtypeの後ろが or ではなく )and が
付く可能性があるんですよね・・・
if文で分岐させようとするのですがすごい数になりそうです。
No.4
- 回答日時:
フラグを使って、以下のようにやれば実現できるかと思われます。
各条件でor / and を選択することも可能です。
PHP
if ($chk1 != "") {
if ($qch) {
sqlSelect .= " or";
} else {
sqlSelect .= " where";
}
$sqlSelect .= "abc = '" . $chk1 . "'";
$qch++;
}
if ($chk2 != "") {
if ($qch) {
sqlSelect .= " or";
} else {
sqlSelect .= " where";
}
$sqlSelect .= "abc = '" . $chk2 . "'";
$qch++;
}
if ($chk3 != "") {
if ($qch) {
sqlSelect .= " or";
} else {
sqlSelect .= " where";
}
$sqlSelect .= "abc = '" . $chk3 . "'";
$qch++;
}
if ($add != "") {
if ($qch) {
sqlSelect .= " or";
} else {
sqlSelect .= " where";
}
$sqlSelect .= "add = '" . $add . "' ;
$qch++;
}
No.5
- 回答日時:
>すべてのtypeの後ろが or ではなく )and が
>付く可能性があるんですよね・・・
ん、なんで?
type = "アパート" and type ="マンション"
なんて、例がありえるの。
この回答への補足
チェックがアパートの場合
select * from テーブル名 where (type = "アパート" ) and area = "北海道"
チェックがアパート・戸建の場合
select * from テーブル名 where (type = "アパート" or type = "戸建" ) and area = "北海道"
となりますよね。
この場合のアパートの後のorをandへの変更です。
No.6ベストアンサー
- 回答日時:
>if文で分岐させようとするのですがすごい数になりそうです。
こういう風にやったりする。
formのチェックボックスのname
同じ名前にして、配列で渡すように[]つけとく。
<input type="checkbox" name="chk[]" value="アパート">アパート
<input type="checkbox" name="chk[]" value="マンション">マンション
<input type="checkbox" name="chk[]" value="戸建">戸建
php側
$sql = 'select * from テーブル名 where ';
if($_POST["chk"]){
foreach($_POST["chk"] as $val){
$ary[] = 'type = "'.$val.'"';
}
$sql .= '('.implode(' or ',$ary).') and area="'.$_POST["add"].'"';
}
print $sql;
まぁ、これが正解ってわけじゃなし。
いろいろ考えてみてくださいな。
この回答への補足
わざわざありがとうございます。
試してみるのですがtypeの値を拾ってないようです
if($_POST["chk"]){
っていうのはchk[]にチェックが入っていれば実行
と考えてよろしいですよね
No.8
- 回答日時:
>if($_POST["chk"]){
>っていうのはchk[]にチェックが入っていれば実行
>と考えてよろしいですよね
そのつもり。
POSTでわたしてますよね。
できました!postgresに渡すときに "val"ではエラーになり
'val' にしなくてはならないところが苦労しました。
また、北海道○○市とかも検索したかったのでlike文も使いました。
$sql = 'select * from テーブル名 where ';
if($_POST["chk"]){
foreach($_POST["chk"] as $val){
$ary[] = "type = '" . $val . "'";
}
$sql .= '('.implode(' or ',$ary).')';
$sql .= " and area like '%" . $add . "%' ";
}
大変勉強になりました。
ありがとうございました。
No.9
- 回答日時:
$sql = "select * from tablename ";
$onchk1 = ($chk1 == "" ? "" : " type='$chk1' ");
if($chk2){
$onchk2 = ($onchk1 == "" ? " type='$chk2' " : " or type='$chk2' ");
}
if($chk3){
$onchk3 = (($onchk1 == $onchk2 == "") ?
" type='$chk3' " : " or type='$chk3' ");
}
if($_POST["chk"]{
$onadd = ($add == "" ? "" : " and area='$add' ");
$sql .= "where (". $onchk1 . $onchk2 . $onchk3 .")". $onadd;
} else {
$onadd = ($add == "" ? "" : " where area='$add' ");
$sql .= $onadd;
}
動かしてみてもないし、自信もないし、あまり簡潔とは
言えないけど、これでどうでしょうか?
ご参考までに。
お返事ありがとうございます。
こういう書き方もあるのですね。
今回はguruguru2さんのコードで作成できましたが
次回詰まったときに参考にさせていただきます。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript console.logがどうしても2つ機能しないのでアドバイスをくださいお願いします 2 2022/07/07 22:13
- JavaScript プログラムがうまく動きませんレビューお願いします 1 2022/07/10 05:08
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- JavaScript 電車の運賃を出すプログラムを作っています。 2 2022/06/22 09:36
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpプルダウンメニュー 日付チ...
-
phpでのセレクトボックスの値を...
-
phpのカウンタのリセット方法
-
PHPとHTML+Xamppの掲示板で画像...
-
PHPで画像の渡しが上手く行きま...
-
複数行のデータ一括更新に関して
-
POSTデータのNAME属性をVALUEに...
-
PHPでPCのローカル時刻は取得出...
-
POSTの値を配列として受け取っ...
-
IEで、フォームにたとえば
-
チェックボックスを用い、MySQL...
-
PHPでURLにジャンプするには?
-
フォームの途中で追加するには
-
POSTを使わずに値を渡す方法
-
フォームで作った送信ボタンが...
-
phpでショッピングカート機能を...
-
検索時の選択内容を保持する方法
-
PHPでユーザー情報を入力して簡...
-
VBA で、スペースを含むファイ...
-
送信ボタンでカウントアップ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウンとCSVの連動
-
「"」(ダブルクォーテーション)...
-
ラジオボタンの値を受け取ってP...
-
<select>文、foreachと初期値設定
-
phpでのセレクトボックスの値を...
-
php セレクトボックス 値取得
-
複数のセレクトボックスを1つに...
-
複数 selectフォームから今回on...
-
2つのプルダウンメニュから受け...
-
phpでのselect値の取得・表記に...
-
foreachで次の行の値を取得して...
-
ウェブ上で選択した複数行の内...
-
CodeIgniter/set_value()
-
ループ処理
-
連動させたいセレクトボックス...
-
現在時刻を反映させた時刻のプ...
-
プルダウンリスト(コンボボッ...
-
PHP で画面の一部だけを変えたい。
-
phpでカレンダー作成
-
プルダウンで選択された値を保持
おすすめ情報