teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記2

2016/08/30 06:48

投稿

yambejp
yambejp

スコア117875

answer CHANGED
@@ -45,3 +45,33 @@
45
45
  print_r($data);
46
46
  //実際にはPDOでexecute($data)する
47
47
  ```
48
+
49
+ #このまま検証して
50
+
51
+ このままのソースで動作を検証してください
52
+
53
+ ```PHP
54
+ <?php
55
+ $shubetu= filter_input(INPUT_GET,"shubetu",FILTER_VALIDATE_INT , FILTER_REQUIRE_ARRAY)?:array();
56
+
57
+ $data=[];
58
+ $sql="SELECT * FROM articles WHERE 1";
59
+
60
+ if(count($shubetu)>0){
61
+ $sql.=" AND buildingtype IN(".implode(",",array_fill(1,count($shubetu),"?")).")";
62
+ $data=array_merge($data,$shubetu);
63
+ }
64
+ print $sql."<br>";
65
+ print_r($data);
66
+ ?>
67
+ <form mothod="get">
68
+ <input type="checkbox" name="shubetu[]" value="1">マンション
69
+ <input type="checkbox" name="shubetu[]" value="2">アパート
70
+ <input type="checkbox" name="shubetu[]" value="3">一戸建て・その他
71
+ <input type="submit" value="search">
72
+ </form>
73
+ ```
74
+
75
+ 最初はWHERE句に「WHERE 1」が入っている=すべて表示
76
+ どれかにチェックを入れて送ると
77
+ buildingtypeにIN検索が表示されて絞込をします

1

追記

2016/08/30 06:48

投稿

yambejp
yambejp

スコア117875

answer CHANGED
@@ -6,4 +6,42 @@
6
6
  家賃に関しては下限なしを0、上限なしを1000万とか適当な数字を渡せば
7
7
  BETWEENで処理ができます
8
8
 
9
- いずれにしてもどういうnameで値を渡しているか提示したほうが良いと思います
9
+ いずれにしてもどういうnameで値を渡しているか提示したほうが良いと思います
10
+
11
+ # 追記
12
+
13
+ なるほど、だいぶわかってきました。
14
+ まずbuildingtypeとfloorplanをvarcharで持っていますか?
15
+ それは効率がわるいので正規化してください
16
+ データはintで持つといいでしょう
17
+
18
+ shubetuテーブルを用意して
19
+ shubetu_id,shubetu_name
20
+ 1,マンション
21
+ 2,アパート
22
+ 3,一戸建て・その他
23
+ のようにします。
24
+
25
+ 検索方法は以下簡単なサンプルつけときます
26
+ ```HTML
27
+ <form>
28
+ <input type="checkbox" name="shubetu[]" value="1">マンション
29
+ <input type="checkbox" name="shubetu[]" value="2">アパート
30
+ <input type="checkbox" name="shubetu[]" value="3">一戸建て・その他
31
+ <input type="submit" value="search">
32
+ </form>
33
+ ```
34
+
35
+ ```PHP
36
+ $shubetu= filter_input(INPUT_GET,"shubetu",FILTER_VALIDATE_INT , FILTER_REQUIRE_ARRAY)?:array();
37
+
38
+ $data=[];
39
+ $sql="SELECT ・・・ WHERE 1";
40
+ if(count($shubetu)>0){
41
+ $sql.=" AND buildingtype IN(".implode(",",array_fill(1,count($shubetu),"?")).")";
42
+ $data=array_merge($data,$shubetu);
43
+ }
44
+ print $sql."<br>";
45
+ print_r($data);
46
+ //実際にはPDOでexecute($data)する
47
+ ```