質問編集履歴

2

検索フォーム部分の修正

2017/05/29 14:28

投稿

taku0521
taku0521

スコア5

test CHANGED
File without changes
test CHANGED
@@ -90,7 +90,7 @@
90
90
 
91
91
  キーワードは以下のどちらかの形式で入力され、GETで渡されます。
92
92
 
93
- <td>
93
+ <div>
94
94
 
95
95
  <input type="text" size="10" name="name[]">
96
96
 
@@ -102,41 +102,167 @@
102
102
 
103
103
  </select>
104
104
 
105
+ </div>
106
+
107
+
108
+
109
+ または
110
+
111
+
112
+
113
+ <div>
114
+
115
+ <select name="test[]">
116
+
117
+ <option selected></option>
118
+
119
+ <option>検索キーワード</option>
120
+
121
+ <option>検索キーワード2</option>
122
+
123
+ <option>検索キーワード3</option>
124
+
125
+ </select>
126
+
127
+ <select name="test_op[]">
128
+
129
+ <option value="AND" selected>を含む</option>
130
+
131
+ <option value="OR">をいずれか含む</option>
132
+
133
+ </select>
134
+
135
+ </div>
136
+
137
+ また、検索フォームの複製が可能なので、<div>〜</div>が複製される事があります。
138
+
139
+
140
+
141
+
142
+
143
+ 検索フォーム
144
+
145
+ <form action="" method="get">
146
+
147
+ <table>
148
+
149
+ <tr>
150
+
151
+ <td>名前</td>
152
+
153
+ <td class="search-item2 name_form">
154
+
155
+ <button type="button" value="追加" id="name_add">フォーム追加</button>
156
+
157
+ <div id="name_input">
158
+
159
+ <input type="text" size="10" name="name[]">
160
+
161
+ <select name="name_op[]">
162
+
163
+ <option value="AND" selected>を含む</option>
164
+
165
+ <option value="OR">をいずれか含む</option>
166
+
167
+ <option value="NOT">を含まない</option>
168
+
169
+ </select>
170
+
171
+ </div>
172
+
105
173
  </td>
106
174
 
107
-
108
-
109
- または
175
+ </tr>
110
-
111
-
112
-
176
+
113
- <td>
177
+ <tr>
178
+
114
-
179
+ <td colspan="2"><input type="submit" value=" 検索 "></td>
180
+
181
+ </tr>
182
+
183
+ </table>
184
+
185
+ </form>
186
+
187
+
188
+
189
+ 名前のフォームを3つに複製した場合
190
+
191
+ <form action="" method="get">
192
+
193
+ <table>
194
+
195
+ <tr>
196
+
197
+ <td>名前</td>
198
+
199
+ <td class="search-item2 name_form">
200
+
201
+ <button type="button" value="追加" id="name_add">フォーム追加</button>
202
+
203
+ <div id="name_input">
204
+
205
+ <input type="text" size="10" name="name[]">
206
+
115
- <select name="test[]">
207
+ <select name="name_op[]">
208
+
116
-
209
+ <option value="AND" selected>を含む</option>
210
+
211
+ <option value="OR">をいずれか含む</option>
212
+
117
- <option selected></option>
213
+ <option value="NOT">を含まない</option>
118
-
119
- <option>検索キーワード</option>
214
+
120
-
121
- <option>検索キーワード2</option>
122
-
123
- <option>検索キーワード3</option>
124
-
125
- </select>
215
+ </select>
216
+
126
-
217
+ </div>
218
+
219
+ <div id="name_input">
220
+
221
+ <input type="text" size="10" name="name[]">
222
+
127
- <select name="test_op[]">
223
+ <select name="name_op[]">
128
-
224
+
129
- <option value="AND" selected>を含む</option>
225
+ <option value="AND" selected>を含む</option>
130
-
226
+
131
- <option value="OR">をいずれか含む</option>
227
+ <option value="OR">をいずれか含む</option>
228
+
132
-
229
+ <option value="NOT">を含まない</option>
230
+
133
- </select>
231
+ </select>
232
+
233
+ </div>
234
+
235
+ <div id="name_input">
236
+
237
+ <input type="text" size="10" name="name[]">
238
+
239
+ <select name="name_op[]">
240
+
241
+ <option value="AND" selected>を含む</option>
242
+
243
+ <option value="OR">をいずれか含む</option>
244
+
245
+ <option value="NOT">を含まない</option>
246
+
247
+ </select>
248
+
249
+ </div>
134
250
 
135
251
  </td>
136
252
 
137
-
253
+ </tr>
254
+
138
-
255
+ <tr>
256
+
139
- また、検索フォームの複製が可能なので、<td></td>が複製される事があります。
257
+ <td colspan="2"><input type="submit" value=" 検索 "></td>
258
+
259
+ </tr>
260
+
261
+ </table>
262
+
263
+ </form>
264
+
265
+
140
266
 
141
267
  ```
142
268
 
@@ -160,7 +286,7 @@
160
286
 
161
287
  if (array_filter($_GET['name'], 'strlen')) {
162
288
 
163
- $name_get = convert($_GET['name']);
289
+ $name_get = $_GET['name'];
164
290
 
165
291
  $name_count = count($name_get);
166
292
 

1

検索フォーム部分を追加しました。

2017/05/29 14:28

投稿

taku0521
taku0521

スコア5

test CHANGED
File without changes
test CHANGED
@@ -6,21 +6,25 @@
6
6
 
7
7
 
8
8
 
9
- PHP+MySQLでユーザーがフォームを増殖でき、検索オプションを指定できる検索システムを作成しています。
9
+ PHP+MySQLでユーザーがフォームを複製でき、検索オプションを指定できる検索システムを作成しています。
10
-
10
+
11
+
12
+
11
- 検索フォームからの入力データは以下のような多次元配列で渡されます。
13
+ 検索フォームからの入力データは以下のような多次元配列に整形しています。
12
14
 
13
15
 
14
16
 
15
17
  $name_arr = [['検索オプション','検索キーワード'],['検索オプション','検索キーワード'],['検索オプション','検索キーワード'],・・・];
16
18
 
19
+
20
+
17
- 検索キーワードには、テキストエリア入力され語句セレクトボックス選択された語句が入り
21
+ 該当のキーワードをAND検索するかOR検索にするかユーザーが自由に選択きるめ、どの様な順番になるは予測せん
18
-
19
-
20
-
22
+
21
- and条件とor条件キーワードの順番が違うと検索結果に差てしまうため、統一したす。
23
+ 様な順番でも検索結果が同じならば良いですが、順番が違うと検索結果が異なってしまいす。
22
-
24
+
25
+
26
+
23
- どうかアドバイスよろしくお願いします。
27
+ 検索結果の差異を無くしたいので、どうかアドバイスよろしくお願いします。
24
28
 
25
29
 
26
30
 
@@ -28,25 +32,25 @@
28
32
 
29
33
  ```
30
34
 
31
- and条件のキーワードとor条件のキーワードが混じっている場合、
35
+ AND条件のキーワードとOR条件のキーワードが混じっている場合、
32
-
36
+
33
- and条件のキーワードが先頭なら問題なく検索されるのですが、
37
+ AND条件のキーワードが先頭なら問題なく検索されるのですが、
34
-
38
+
35
- or条件のキーワードが先頭の場合は、検索結果がand条件が先頭の時に比べ、少なくなってしまいます。
39
+ OR条件のキーワードが先頭の場合は、検索結果がAND条件が先頭の時に比べ、少なくなってしまいます。
36
-
37
-
38
-
40
+
41
+
42
+
39
- and条件が先頭
43
+ AND条件が先頭
40
-
44
+
41
- $name_arr = [['and','検索キーワード'],['or','検索キーワード2'],['or','検索キーワード3']];
45
+ $name_arr = [['AND','検索キーワード'],['or','検索キーワード2'],['or','検索キーワード3']];
42
-
43
-
44
-
46
+
47
+
48
+
45
- or条件が先頭
49
+ OR条件が先頭
46
-
50
+
47
- $name_arr = [['or','検索キーワード2'],['or','検索キーワード3'],['and','検索キーワード']];または
51
+ $name_arr = [['OR','検索キーワード2'],['OR','検索キーワード3'],['AND','検索キーワード']];または
48
-
52
+
49
- $name_arr = [['or','検索キーワード2 検索キーワード3'],['and','検索キーワード']];
53
+ $name_arr = [['OR','検索キーワード2 検索キーワード3'],['AND','検索キーワード']];
50
54
 
51
55
 
52
56
 
@@ -64,7 +68,7 @@
64
68
 
65
69
 
66
70
 
67
- $name_arr = [['and','みかん'],['or','ジュース'],['or','お酒']];
71
+ $name_arr = [['AND','みかん'],['OR','ジュース'],['OR','お酒']];
68
72
 
69
73
 
70
74
 
@@ -72,7 +76,7 @@
72
76
 
73
77
 
74
78
 
75
- $name_arr = [['or','ジュース'],['or','お酒'],['and','みかん']];
79
+ $name_arr = [['OR','ジュース'],['OR','お酒'],['AND','みかん']];
76
80
 
77
81
 
78
82
 
@@ -80,11 +84,67 @@
80
84
 
81
85
  ```
82
86
 
83
-
87
+ ###該当のソースコード(検索フォーム部分)
88
+
84
-
89
+ ```HTML
90
+
91
+ キーワードは以下のどちらかの形式で入力され、GETで渡されます。
92
+
93
+ <td>
94
+
95
+ <input type="text" size="10" name="name[]">
96
+
97
+ <select name="name_op[]">
98
+
99
+ <option value="AND" selected>を含む</option>
100
+
101
+ <option value="OR">をいずれか含む</option>
102
+
103
+ </select>
104
+
105
+ </td>
106
+
107
+
108
+
109
+ または
110
+
111
+
112
+
113
+ <td>
114
+
115
+ <select name="test[]">
116
+
117
+ <option selected></option>
118
+
119
+ <option>検索キーワード</option>
120
+
121
+ <option>検索キーワード2</option>
122
+
123
+ <option>検索キーワード3</option>
124
+
125
+ </select>
126
+
127
+ <select name="test_op[]">
128
+
129
+ <option value="AND" selected>を含む</option>
130
+
131
+ <option value="OR">をいずれか含む</option>
132
+
133
+ </select>
134
+
135
+ </td>
136
+
137
+
138
+
139
+ また、検索フォームの複製が可能なので、<td>〜</td>が複製される事があります。
140
+
141
+ ```
142
+
143
+
144
+
85
- ###該当のソースコード
145
+ ###該当のソースコード(PHP部分)
86
-
146
+
87
- ```ここに言語を入力
147
+ ```PHP
88
148
 
89
149
  $sql = 'SELECT * FROM data';
90
150
 
@@ -98,48 +158,64 @@
98
158
 
99
159
  // 検索条件を作成
100
160
 
161
+ if (array_filter($_GET['name'], 'strlen')) {
162
+
163
+ $name_get = convert($_GET['name']);
164
+
165
+ $name_count = count($name_get);
166
+
167
+ $s = 0;
168
+
169
+ for ($s; $s < $name_count; ++$s) {
170
+
171
+ $name_arr[] = array($_GET['name_op'][$s], $name_get[$s]); //検索キーワードと検索オプションを関連付け
172
+
173
+ }
174
+
101
- foreach ($name_arr as $name_arr2) {
175
+ foreach ($name_arr as $name_arr2) {
102
-
176
+
103
- $name_arr2 = array_map('trim', $name_arr2);
177
+ $name_arr2 = array_map('trim', $name_arr2);
104
-
178
+
105
- if ($name_arr2[0] === 'AND' and !empty($name_arr2[1])) { //検索オプションがANDの場合
179
+ if ($name_arr2[0] === 'AND' and !empty($name_arr2[1])) { //検索オプションがANDの場合
106
-
180
+
107
- $name_arr3 = explode(" ",$name_arr2[1]);
181
+ $name_arr3 = explode(" ",$name_arr2[1]);
108
-
182
+
109
- foreach ($name_arr3 as $name) {
183
+ foreach ($name_arr3 as $name) {
110
-
184
+
111
- $conditions[] = 'name LIKE ?';
185
+ $conditions[] = 'concat(name,name_yomi) LIKE ?';
112
-
186
+
113
- $parameters[] = array(
187
+ $parameters[] = array(
114
-
188
+
115
- 'value' => "%{$name}%",
189
+ 'value' => "%{$name}%",
116
-
190
+
117
- 'type' => PDO::PARAM_STR
191
+ 'type' => PDO::PARAM_STR
118
-
192
+
119
- );
193
+ );
194
+
195
+ }
196
+
197
+ } else if ($name_arr2[0] === 'OR' and !empty($name_arr2[1])) { //検索オプションがORの場合
198
+
199
+ $name_arr3 = explode(" ",$name_arr2[1]);
200
+
201
+ foreach ($name_arr3 as $name) {
202
+
203
+ $conditions2[] = 'concat(name,name_yomi) LIKE ?';
204
+
205
+ $parameters[] = array(
206
+
207
+ 'value' => "%{$name}%",
208
+
209
+ 'type' => PDO::PARAM_STR
210
+
211
+ );
212
+
213
+ }
214
+
215
+ }
120
216
 
121
217
  }
122
218
 
123
- } else if ($name_arr2[0] === 'OR' and !empty($name_arr2[1])) { //検索オプションがORの場合
124
-
125
- $name_arr3 = explode(" ",$name_arr2[1]);
126
-
127
- foreach ($name_arr3 as $name) {
128
-
129
- $conditions2[] = 'name LIKE ?';
130
-
131
- $parameters[] = array(
132
-
133
- 'value' => "%{$name}%",
134
-
135
- 'type' => PDO::PARAM_STR
136
-
137
- );
138
-
139
- }
140
-
141
- }
142
-
143
219
  }
144
220
 
145
221