
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.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.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さんのコードで作成できましたが
次回詰まったときに参考にさせていただきます。
ありがとうございます。
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.5
- 回答日時:
>すべてのtypeの後ろが or ではなく )and が
>付く可能性があるんですよね・・・
ん、なんで?
type = "アパート" and type ="マンション"
なんて、例がありえるの。
この回答への補足
チェックがアパートの場合
select * from テーブル名 where (type = "アパート" ) and area = "北海道"
チェックがアパート・戸建の場合
select * from テーブル名 where (type = "アパート" or type = "戸建" ) and area = "北海道"
となりますよね。
この場合のアパートの後のorをandへの変更です。
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.3
- 回答日時:
あ、何がわからないのか、わかったかも。
>4)アパート・マンション・戸建を北海道で検索すると6件ヒット
だったら
select * from テーブル名 where (type = "アパート" or type = "マンション" or
type = "戸建") and area = "北海道"
って()つければ、ってことじゃないのかな。
この回答への補足
()を使う事ができるのですね、コンソールで確認できました!
ありがとうございます。
PHPですが、すべてのtypeの後ろが or ではなく )and が
付く可能性があるんですよね・・・
if文で分岐させようとするのですがすごい数になりそうです。
No.2
- 回答日時:
PHPというか、SQLの話ですね。
type、areaというフィールドがあるとして、
>1)アパートを北海道で検索すると3件ヒット
だったら、
select * from テーブル名 where type = "アパート" and area = "北海道"
ですよね。
自分の望む結果を得るには
どういったSQL発行すればよいのか、考えてみてください。
この回答への補足
お返事ありがとうございます。
おっしゃるように
select * from テーブル名 where type = "アパート" and area = "北海道"
とすれば検索できます
しかしマンション、戸建もありますので and が使えないのです。
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 県 にしても
同じでした。
関数の使い方自体が間違っているのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セッション関数を使わずにファ...
-
PHP8でWarning:Undefined varia...
-
phpの問い合わせフォームを作っ...
-
composerをインストールしたい...
-
SplFileObject を利用したとき...
-
PHP8を使うと、大量のWarningが...
-
PHPで訪問回数を表示するカウン...
-
PHPのエラーの解消法について教...
-
c言語 文字 - '1'+26
-
marginの値でマイナス値を設定...
-
submitで思うようにページが遷...
-
HTML PHP ラジオボタンのイベント
-
php でqiitaのサイトにあったフ...
-
PHPの勉強してます。 配列のと...
-
BASIC認証のフォームをデザイン...
-
アップロードファイルを表示す...
-
複数のパソコンの中の1つのパソ...
-
返信機能のツリー構造の深さを...
-
PHPについて。
-
phpのheader("Location:#pos")...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数 selectフォームから今回on...
-
セレクトしたときに全て初期状...
-
input type="hidden"で送る値を...
-
CodeIgniter/set_value()
-
複数のセレクトボックスで
-
PHP セレクトボックスの値 GET...
-
PHPとpostgreSQL プルダウンの作成
-
プルダウンで選択された値を保持
-
選択されたプルダウンの値を変...
-
cachegrind.out.から始まるファ...
-
PHPにてselectboxの色によっ...
-
ショッピングカートの精算
-
[Ethna]selectボックスに空値を...
-
ドロップダウン、ラジオボタン...
-
[PHPとHTML]リストボックスにつ...
-
【PHP&JavaScript】複数の別ウ...
-
「"」(ダブルクォーテーション)...
-
HTML_QuickFormのチェックボッ...
-
プルダウンリスト(コンボボッ...
-
データベースにある値でリスト...
おすすめ情報