質問編集履歴

2

コードをシンプルにしました,やりたいことを明確にしました

2019/07/09 07:56

投稿

nagata_
nagata_

スコア12

test CHANGED
File without changes
test CHANGED
@@ -1,14 +1,6 @@
1
- 編集いたしました。
1
+ 質問を更新いたしました。
2
-
3
- 回答のご指摘からラジオボタンの件ですが、ゆくゆくはラジオボタンん切り替えで、
2
+
4
-
5
- シリーズのチェックをできないようにする予定です。
3
+
6
-
7
- シリーズとストレージのPOSTの受け取り方と配列にして、SQL分にWHERE後の
8
-
9
- コードを現在考えているところです。
10
-
11
- 質問の仕方が良くないですね。。。申し訳ありません。(7/4:19:00更新)
12
4
 
13
5
 
14
6
 
@@ -22,21 +14,39 @@
22
14
 
23
15
  検索画面で「フィルター」機能を付けようとしています。
24
16
 
17
+ 機種名検索で部分一致を行い、SQL文のANDでシリーズのチェックボックスのフィルターを行いたいです。
18
+
19
+ 例)
20
+
21
+ 機種名に「iPhone」と打つと、すべてのiPhoneが表示される(iPhone3G~iPhoneXSまで)
22
+
23
+ 機種名を空欄かつシリーズのチェックをなしのとき、全て表示する
24
+
25
- シリーズストレージチェックボックスをつけて、Web画面でチェックが付けば、その機種を検索対象して表示したいで。(すべてチェックなしのときは全表示)
25
+ 機種名「iPhone」打ち、チェックボックス「iPhone3」をつけると検索結果に「iPhone3G,iPhone3GS」と表示す
26
26
 
27
27
 
28
28
 
29
29
  【分からないこと】
30
30
 
31
- チェックをつけたチェックボックスのPOST受け取り方SQL文をどのよう書けばわかりせん。なんとなく、SQL文のWHEREの後にANDを用いてPOSTで受け取った値を書いていくことぐらいはイメージ付く程度です・・・。
31
+ チェックボックスのみ(機種名記入無)だ正常検索結果が表示され
32
+
32
-
33
+ 機種名を一部分でも記入するとエラーがでて全件表示されてしまいます。
34
+
33
- ご回答よろしお願します。
35
+ (おそら機種名を読み込んでない?)
36
+
34
-
37
+ また、機種名に「iPhone3G」と打ち、シリーズに「iPhone4」をチェックすると
38
+
35
-
39
+ iPhone4,iPhone4sが表示されてしまいます。(iPhone3G,iPhone3GSと表示したい)
36
-
37
-
38
-
40
+
41
+
42
+
39
- WEB画面![イメージ説明](a673461da211637629822ff03d5ab169.png)
43
+ ![イメージ説明](f8ba89682e4cc2d1f2afb533ea33fcb5.png)
44
+
45
+
46
+
47
+
48
+
49
+
40
50
 
41
51
 
42
52
 
@@ -44,209 +54,71 @@
44
54
 
45
55
  <body>
46
56
 
47
-
48
-
49
-
50
-
51
- <div class="main">
52
-
53
-
54
-
55
- <form method="POST" action="<?php echo es($_SERVER['PHP_SELF']); ?>">
57
+ <form method="POST" action="<?php echo es($_SERVER['SCRIPT_NAME']); ?>">
56
-
58
+
57
- <table border="1">
59
+ <table border="1">
60
+
58
-
61
+ <tr>
62
+
63
+ <td>機種名</td>
64
+
65
+ <td> <input type="text" name="P_KISYUMEI" placeholder="機種名を入力してください。" value="<?php echo $P_KISYUMEI ?>"></td>
66
+
67
+ <td rowspan="7" align="center" valign="middle">&nbsp;<input type="submit" value="SEARCH">&nbsp;</td>
68
+
69
+ </tr>
70
+
71
+ <tr>
72
+
59
- <tr valign="top">
73
+ <td>シリーズ</td>
60
-
61
- <td class="KOUMOKU">製品</td>
74
+
62
-
63
- <td bgcolor="#eeeeee">
75
+ <td>
64
-
76
+
65
- <table>
77
+ <table>
66
-
67
- <tr valign="top">
78
+
68
-
69
- <td width="90"><input type="radio" value="" name="P_TAISYOU" checked>ALL</td>
70
-
71
- <td width="90"><input type="radio" value="" name="P_TAISYOU">iPhone</td>
72
-
73
- <td width="90"><input type="radio" value="" name="P_TAISYOU">iPad</td>
74
-
75
- <td width="90"><input type="radio" value="" name="P_TAISYOU">iPod</td>
76
-
77
- </tr>
78
-
79
- </table>
80
-
81
- </td>
82
-
83
- <td class="KOUMOKU" rowspan="7" align="center" valign="middle">&nbsp;<input type="submit" value="SEARCH">&nbsp;</td>
84
-
85
- </tr>
86
-
87
- <tr valign="top">
88
-
89
- <td class="KOUMOKU">機種名</td>
90
-
91
- <td bgcolor="#eeeeee">&nbsp;
92
-
93
- <input type="text" name="P_KISYUMEI" placeholder="機種名を入力してください。" value="<?php echo $P_KISYUMEI ?>">
94
-
95
- </td>
96
-
97
- </tr>
98
-
99
- <tr valign="top">
100
-
101
- <td class="KOUMOKU">シリーズ<br>※未指定:全て対象<br>
102
-
103
- <input type="button" name="srclear" value="全解除"
104
-
105
- onClick="sr_clear(this.form)" style="font-size:9pt;
106
-
107
- HEIGHT=18px;WIDTH:60px;">
108
-
109
- </td>
110
-
111
- <td bgcolor="#eeeeee">
112
-
113
- <table>
79
+ <tr>
114
-
115
- <tr valign="top">
80
+
116
-
117
- <td width="90"><input type="checkbox" value="001" name="P_SERIES" <?php echo isset($_POST['P_SERIES']) ?>>iPhone3</td>
81
+ <td><input type="checkbox" value="iPhone3" name="P_SERIES[]" <?php echo isset($_POST['P_SERIES']) ?>>iPhone3</td>
118
-
82
+
119
- <td width="90"><input type="checkbox" value="002" name="P_SERIES" <?php echo isset($_POST['P_SERIES']) ?>>iPhone4</td>
83
+ <td><input type="checkbox" value="iPhone4" name="P_SERIES[]" <?php echo isset($_POST['P_SERIES']) ?>>iPhone4</td>
120
-
84
+
121
- <td width="90"><input type="checkbox" value="003" name="P_SERIES" <?php echo isset($_POST['P_SERIES']) ?>>iPhone5</td>
85
+ <td><input type="checkbox" value="iPhone5" name="P_SERIES[]" <?php echo isset($_POST['P_SERIES']) ?>>iPhone5</td>
122
-
86
+
123
- <td width="90"><input type="checkbox" value="004" name="P_SERIES" <?php echo isset($_POST['P_SERIES']) ?>>iPhone6</td>
87
+ <td><input type="checkbox" value="iPhone6" name="P_SERIES[]" <?php echo isset($_POST['P_SERIES']) ?>>iPhone6</td>
124
88
 
125
89
  </tr>
126
90
 
127
- <tr valign="top">
91
+ <tr>
128
-
92
+
129
- <td><input type="checkbox" value="005" name="P_SERIES" <?php echo isset($_POST['P_SERIES']) ?>>iPhone7</td>
93
+ <td><input type="checkbox" value="iPhone7" name="P_SERIES[]" <?php echo isset($_POST['P_SERIES']) ?>>iPhone7</td>
130
-
94
+
131
- <td><input type="checkbox" value="006" name="P_SERIES" <?php echo isset($_POST['P_SERIES']) ?>>iPhone8</td>
95
+ <td><input type="checkbox" value="iPhone8" name="P_SERIES[]" <?php echo isset($_POST['P_SERIES']) ?>>iPhone8</td>
132
-
96
+
133
- <td><input type="checkbox" value="007" name="P_SERIES" <?php echo isset($_POST['P_SERIES']) ?>>iPhoneX</td>
97
+ <td><input type="checkbox" value="iPhoneX" name="P_SERIES[]" <?php echo isset($_POST['P_SERIES']) ?>>iPhoneX</td>
134
98
 
135
99
  </tr>
136
100
 
137
- </table>
101
+ </table>
138
-
102
+
139
- </td>
103
+ </td>
140
-
104
+
141
- </tr>
105
+ </tr>
142
-
143
- <tr valign="top">
106
+
144
-
145
- <td class="KOUMOKU">ストレージ<br>※未指定:全て対象<br>
146
-
147
- <input type="button" name="smclear" value="全解除"
148
-
149
- onClick="sm_clear(this.form)" style="font-size:9pt;
150
-
151
- HEIGHT=18px;WIDTH:60px;">
152
-
153
- </td>
154
-
155
- <td bgcolor="#eeeeee">
156
-
157
- <table>
158
-
159
- <tr valign="top">
160
-
161
- <td><input type="checkbox" value="01" name="Storage" <?php echo empty($_POST['Storage']) ?>>8GB</td>
162
-
163
- <td><input type="checkbox" value="02" name="Storage" <?php echo empty($_POST['Storage']) ?>>16GB</td>
164
-
165
- <td><input type="checkbox" value="03" name="Storage" <?php echo empty($_POST['Storage']) ?>>32GB</td>
166
-
167
- <td><input type="checkbox" value="04" name="Storage" <?php echo empty($_POST['Storage']) ?>>64GB</td>
168
-
169
- <td><input type="checkbox" value="05" name="Storage" <?php echo empty($_POST['Storage']) ?>>128GB</td>
170
-
171
- </tr>
172
-
173
- </table>
107
+ </table>
174
-
175
- <table>
108
+
176
-
177
- <tr valign="top">
178
-
179
- <td><input type="checkbox" value="06" name="Storage" <?php echo empty($_POST['Storage']) ?>>256GB</td>
180
-
181
- <td><input type="checkbox" value="07" name="Storage" <?php echo empty($_POST['Storage']) ?>>512GB</td>
182
-
183
- </tr>
109
+ </form>
184
-
185
- </table>
110
+
186
-
187
- </tr>
111
+
188
-
189
- <tr valign="middle">
112
+
190
-
191
- <td class="KOUMOKU">登録年月日<br>※開始日は省略可</td>
113
+
192
-
193
- <td bgcolor="#eeeeee">&nbsp;<input type="text" name="P_KAISIBI" size="10" maxlength="8" value="" placeholder="例)20190401">
114
+
194
-
195
- &nbsp;&nbsp;~&nbsp;&nbsp;
196
-
197
- <input type="text" name="P_SYURYOBI" size="10" maxlength="8" value=""placeholder="例)20190431">
198
-
199
- </td>
200
-
201
- </tr>
202
-
203
- <tr valign="top">
204
-
205
- <td class="KOUMOKU">ソート</td>
206
-
207
- <td bgcolor="#eeeeee">
208
-
209
- <table>
210
-
211
- <td><input type="radio" value="" name="P_SORT" checked>機種名順(インナー昇順)</td>
212
-
213
- <td><input type="radio" value="" name="P_SORT">登録日降順</td>
214
-
215
- <td><input type="radio" value="" name="P_SORT">登録日昇順</td>
216
-
217
- </table>
218
-
219
- </td>
220
-
221
- </tr>
222
-
223
- <tr>
224
-
225
- <td colspan="2" bgcolor="#eeeeee">&nbsp;<input type="checkbox" name="P_BR_HYOUJI" value="" >カラーラインナップを表示</td>
226
-
227
- </tr>
228
-
229
- </table>
230
-
231
- </div>
232
-
233
-
234
-
235
-
236
-
237
- <div>
238
-
239
- <?php
115
+ <?php
240
-
241
- if ($isNum) {
116
+
242
-
243
-
244
-
245
- $P_KISYUMEI = $_POST["P_KISYUMEI"];
117
+
246
-
247
- //MySQLデータベースに接続する
118
+
248
-
249
- try {
119
+ try{
120
+
121
+
250
122
 
251
123
  $pdo = new PDO($dsn, $user, $password);
252
124
 
@@ -258,21 +130,67 @@
258
130
 
259
131
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
260
132
 
133
+
134
+
261
- // SQL文を作る
135
+ $whereCollection = [];
136
+
262
-
137
+ if(!empty($_POST['P_KISYUMEI '])){
138
+
139
+ $whereCollection[] = ' P_KISYUMEI LIKE :P_KISYUMEI ';
140
+
141
+ }
142
+
143
+ if(count($_POST['P_SERIES']) > 0){
144
+
145
+ $series = [];
146
+
147
+ for($i=0;$i<count($_POST['P_SERIES']);$i++){
148
+
149
+ $series[] = ':P_SERIES'.$i;
150
+
151
+ }
152
+
153
+ $whereCollection[] = ' P_SERIES IN ('.implode(',',$series).') ';
154
+
155
+ }
156
+
157
+
158
+
159
+ $where = count($whereCollection)>0? " where ".implode(" and ",$whereCollection):"";
160
+
263
- $sql = "SELECT * FROM iphone_spec WHERE P_KISYUMEI LIKE(:P_KISYUMEI)";
161
+ $sql = "SELECT * FROM iphone_spec ".$where;
264
-
162
+
265
- // プリペアドステートメントを作る
163
+ echo $where;
266
-
164
+
165
+
166
+
267
- $stm = $pdo->prepare($sql);
167
+ $stm = $pdo->prepare($sql);
268
-
168
+
169
+
170
+
269
- // プレースホルダに値をバインドする
171
+ if(!empty($_POST['P_KISYUMEI '])){
270
-
172
+
271
- $stm->bindValue(':P_KISYUMEI', "%{$P_KISYUMEI}%", PDO::PARAM_STR);
173
+ $stm->bindValue(':P_KISYUMEI', "%{$P_KISYUMEI}%", PDO::PARAM_STR);
174
+
272
-
175
+ }
176
+
273
- // SQL文を実行する
177
+ if(count($_POST['P_SERIES']) > 0){
178
+
274
-
179
+ for($i=0;$i<count($_POST['P_SERIES']);$i++){
180
+
181
+ $stm->bindValue(':P_SERIES'.$i, $_POST['P_SERIES'][$i], PDO::PARAM_STR);
182
+
183
+ }
184
+
185
+ }
186
+
187
+
188
+
275
- $stm->execute();
189
+ $stm->execute();
190
+
191
+
192
+
193
+
276
194
 
277
195
  // 結果の取得(連想配列で受け取る)
278
196
 
@@ -280,7 +198,7 @@
280
198
 
281
199
 
282
200
 
283
- echo count($result)."件の機種が見つかりました。";
201
+ echo count($result)."件の機種が見つかりました。";
284
202
 
285
203
 
286
204
 
@@ -344,7 +262,9 @@
344
262
 
345
263
  }
346
264
 
265
+
266
+
347
- } catch (Exception $e) {
267
+ }catch (Exception $e) {
348
268
 
349
269
  echo '<span class="error">エラーがありました。</span><br>';
350
270
 
@@ -352,16 +272,14 @@
352
272
 
353
273
  }
354
274
 
355
- }
275
+
356
-
276
+
357
- ?>
277
+ ?>
358
278
 
359
279
  <hr>
360
280
 
361
281
  <p><a href="<?php echo $gobackURL ?>">CLEAR</a></p>
362
282
 
363
- </div>
364
-
365
283
  </body>
366
284
 
367
285
  ```

1

回答がほしい部分の要約、コードの表記場所

2019/07/09 07:56

投稿

nagata_
nagata_

スコア12

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,19 @@
1
+ 編集いたしました。
2
+
3
+ 回答のご指摘からラジオボタンの件ですが、ゆくゆくはラジオボタンん切り替えで、
4
+
5
+ シリーズのチェックをできないようにする予定です。
6
+
7
+ シリーズとストレージのPOSTの受け取り方と配列にして、SQL分にWHERE後の
8
+
9
+ コードを現在考えているところです。
10
+
11
+ 質問の仕方が良くないですね。。。申し訳ありません。(7/4:19:00更新)
12
+
13
+
14
+
15
+
16
+
1
17
  PHP、SQLの初心者です。ご教授願います。
2
18
 
3
19
  自分の学習課題として、Databaseに登録してある情報を検索できる画面を作成しています。データはアップル製品で構成しています。
@@ -6,7 +22,7 @@
6
22
 
7
23
  検索画面で「フィルター」機能を付けようとしています。
8
24
 
9
- 特にシリーズとストレージにチックボックスをつけて、Web画面でチェックが付けば、その機種を検索対象として表示したいです。(すべてチックなしのときは全表示)
25
+ 特にシリーズとストレージにチックボックスをつけて、Web画面でチェックが付けば、その機種を検索対象として表示したいです。(すべてチックなしのときは全表示)
10
26
 
11
27
 
12
28
 
@@ -24,9 +40,7 @@
24
40
 
25
41
 
26
42
 
27
- ソースコード
43
+ ```ここに言語を入力
28
-
29
-
30
44
 
31
45
  <body>
32
46
 
@@ -60,8 +74,6 @@
60
74
 
61
75
  <td width="90"><input type="radio" value="" name="P_TAISYOU">iPod</td>
62
76
 
63
- </tr>
64
-
65
77
  </tr>
66
78
 
67
79
  </table>
@@ -352,6 +364,8 @@
352
364
 
353
365
  </body>
354
366
 
367
+ ```
368
+
355
369
 
356
370
 
357
371
  データベース画像