質問編集履歴

3

追記

2017/11/28 17:47

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -26,6 +26,22 @@
26
26
 
27
27
 
28
28
 
29
+ ###追記
30
+
31
+ URLをjQueryで書き換えをしているためAjaxの方法で検証しているのですが、試したことにある
32
+
33
+ ```
34
+
35
+ echo "チェックボックス\n";
36
+
37
+ ```
38
+
39
+ ここのechoが表示されません…。アラートは出てくるので送れてはいるようです。
40
+
41
+ 参考サイトのコードを変更しているので該当のソースコードに書いておきます。
42
+
43
+
44
+
29
45
  ###該当のソースコード
30
46
 
31
47
 
@@ -34,7 +50,7 @@
34
50
 
35
51
  ```
36
52
 
37
- <form method="post" action="/search/">
53
+ <form method="post" action="/search/" id="form">
38
54
 
39
55
  <div class="vegetable">
40
56
 
@@ -78,7 +94,7 @@
78
94
 
79
95
  ```
80
96
 
81
- <form method="post" action="/search/">
97
+ <form method="post" action="/search/" id="form">
82
98
 
83
99
  <div class="vegetable">
84
100
 
@@ -132,164 +148,194 @@
132
148
 
133
149
  ```
134
150
 
135
-
151
+ 追記分
152
+
153
+ ```
154
+
155
+ 【jQuery】
156
+
157
+ $("#form").submit(function(){
158
+
159
+ var checks=[];
160
+
161
+ $("input[type=checkbox]:checked").each(function(){
162
+
163
+ checks.push(this.value);
164
+
165
+ });
166
+
167
+
168
+
169
+ $.ajax({
170
+
171
+ type: "POST",
172
+
173
+ url: "search",
174
+
175
+ data: {
176
+
177
+ "checks":checks
178
+
179
+ },
180
+
181
+ success: function(data){
182
+
183
+ if(data != '') {
184
+
185
+ alert(data);
186
+
187
+ }
188
+
189
+ }
190
+
191
+ });
192
+
193
+ return false;
194
+
195
+ });
196
+
197
+
198
+
199
+ 【PHP】(/search/に記述)
200
+
201
+ if (isset($_POST['checks'])) {
202
+
203
+ echo "チェックボックス\n";
204
+
205
+ foreach($_POST['checks'] as $check) {
206
+
207
+ echo htmlspecialchars($check) . "が選択されました\n";
208
+
209
+ }
210
+
211
+ }
212
+
213
+ ```
136
214
 
137
215
 
138
216
 
139
217
  ###試したこと(参考サイトから引用)
140
218
 
219
+ [jQueryのAjaxを使って複数選択されたチェックボックスの値をPOSTする方法メモ](http://d.hatena.ne.jp/tech-tech/20100920/1284992262)
220
+
221
+ ```
222
+
223
+ 【jQuery】
224
+
225
+
226
+
227
+ $(function(){
228
+
229
+ $("#form").submit(function(){
230
+
231
+ //選択されたチェックボックスの値を配列に保存
232
+
233
+ var checks=[];
234
+
235
+ $("[name='check[]']:checked").each(function(){
236
+
237
+ checks.push(this.value);
238
+
239
+ });
240
+
241
+
242
+
243
+ //セレクトボックスの値を変数に保存
244
+
245
+ var select = $("#select").val();
246
+
247
+
248
+
249
+ $.ajax({
250
+
251
+ type: "POST",
252
+
253
+ url: "form.php",
254
+
255
+ data: {
256
+
257
+ "checks":checks,
258
+
259
+ "select":select
260
+
261
+ },
262
+
263
+ success: function(data){
264
+
265
+ if(data != '') {
266
+
267
+ alert(data);
268
+
269
+ }
270
+
271
+ }
272
+
273
+ });
274
+
275
+ return false; //submitイベントハンドラにfalseを返し,action処理をキャンセル
276
+
277
+ });
278
+
279
+ });
280
+
281
+
282
+
283
+
284
+
285
+ 【PHP】
286
+
287
+ if (isset($_POST['checks'])) {
288
+
289
+ echo "チェックボックス\n";
290
+
291
+ foreach($_POST['checks'] as $check) {
292
+
293
+ echo htmlspecialchars($check) . "が選択されました\n";
294
+
295
+ }
296
+
297
+ }
298
+
299
+ if (isset($_POST['select'])) {
300
+
301
+ echo "セレクトボックスボックス\n";
302
+
303
+ echo htmlspecialchars($_POST['select']) . "が選択されました\n";
304
+
305
+ }
306
+
307
+ ```
308
+
309
+
310
+
311
+ その他
312
+
313
+ [PHP:フォームからcheckboxの値の取得してチェック状態を保持する方法のメモ](https://www.amelt.net/imc/programming/3449/)
314
+
141
315
  [【PHP】チェックボックスの値を受け取る](https://qiita.com/4cres/items/26154314959dcccbfd34)
142
316
 
317
+
318
+
319
+
320
+
321
+ ###追記 URLパラメータ部分
322
+
143
- ```
323
+ ```
144
-
145
- if (isset($_POST['food']) && is_array($_POST['food'])) {
324
+
146
-
147
- $food = implode("、", $_POST["food"]);
148
-
149
- }
150
-
151
- ```
152
-
153
-
154
-
155
- [jQueryのAjaxを使って複数選択されたチェックボックスの値をPOSTする方法メモ](http://d.hatena.ne.jp/tech-tech/20100920/1284992262)
156
-
157
- ```
158
-
159
- 【jQuery】
160
-
161
-
162
-
163
- $(function(){
164
-
165
- $("#form").submit(function(){
325
+ $("form").submit(function() {
166
-
326
+
167
- //選択されたチェックボックスの値を配列に保存
327
+ var url = '/search?';
168
-
328
+
329
+
330
+
169
- var checks=[];
331
+ var value = [];
170
-
332
+
171
- $("[name='check[]']:checked").each(function(){
333
+ $("input:checked").each(function(){
172
-
334
+
173
- checks.push(this.value);
335
+ value.push($(this).val());
174
-
175
- });
176
-
177
-
178
-
179
- //セレクトボックスの値を変数に保存
180
-
181
- var select = $("#select").val();
182
-
183
-
184
-
185
- $.ajax({
186
-
187
- type: "POST",
188
-
189
- url: "form.php",
190
-
191
- data: {
192
-
193
- "checks":checks,
194
-
195
- "select":select
196
-
197
- },
198
-
199
- success: function(data){
200
-
201
- if(data != '') {
202
-
203
- alert(data);
204
-
205
- }
206
-
207
- }
208
-
209
- });
210
-
211
- return false; //submitイベントハンドラにfalseを返し,action処理をキャンセル
212
336
 
213
337
  });
214
338
 
215
- });
216
-
217
-
218
-
219
-
220
-
221
- 【PHP】
222
-
223
- if (isset($_POST['checks'])) {
224
-
225
- echo "チェックボックス\n";
226
-
227
- foreach($_POST['checks'] as $check) {
228
-
229
- echo htmlspecialchars($check) . "が選択されました\n";
230
-
231
- }
232
-
233
- }
234
-
235
- if (isset($_POST['select'])) {
236
-
237
- echo "セレクトボックスボックス\n";
238
-
239
- echo htmlspecialchars($_POST['select']) . "が選択されました\n";
240
-
241
- }
242
-
243
- ```
244
-
245
-
246
-
247
- [PHP:フォームからcheckboxの値の取得してチェック状態を保持する方法のメモ](https://www.amelt.net/imc/programming/3449/)
248
-
249
- ```
250
-
251
- <?php
252
-
253
- //チェックボックスの値を取得
254
-
255
- $data = $_POST["genre"];
256
-
257
- //checkedをechoするかどうかの判定
258
-
259
- for($i=0;$i<23;$i++){
260
-
261
- if($data[$i] != null){
262
-
263
- $check[$i] = "checked";
264
-
265
- }
266
-
267
- }
268
-
269
- ?>
270
-
271
- ```
272
-
273
-
274
-
275
- ###追記 URLパラメータ部分
276
-
277
- ```
278
-
279
- $("form").submit(function() {
280
-
281
- var url = '/search?';
282
-
283
-
284
-
285
- var value = [];
286
-
287
- $("input:checked").each(function(){
288
-
289
- value.push($(this).val());
290
-
291
- });
292
-
293
339
 
294
340
 
295
341
  url += "カテゴリ="+value.join(",");

2

js追記

2017/11/28 17:47

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -269,3 +269,35 @@
269
269
  ?>
270
270
 
271
271
  ```
272
+
273
+
274
+
275
+ ###追記 URLパラメータ部分
276
+
277
+ ```
278
+
279
+ $("form").submit(function() {
280
+
281
+ var url = '/search?';
282
+
283
+
284
+
285
+ var value = [];
286
+
287
+ $("input:checked").each(function(){
288
+
289
+ value.push($(this).val());
290
+
291
+ });
292
+
293
+
294
+
295
+ url += "カテゴリ="+value.join(",");
296
+
297
+ location.href = encodeURI(url);
298
+
299
+ return false;
300
+
301
+ });
302
+
303
+ ```

1

誤字・脱字

2017/11/28 14:05

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -2,19 +2,27 @@
2
2
 
3
3
  いつもお世話になってます。
4
4
 
5
+
6
+
5
7
  自作のWordpressテーマに検索フォームを設置しているのですが、チェックボックスの選択した値の受け渡しがうまくいかずここ数日悩んでいます。
6
8
 
7
9
  検索フォームでチェック項目を選択し、送信後は検索結果ページへ遷移します。
8
10
 
9
11
  検索結果ページでは前のページで選択したチェックボックスが選択されたままの状態で、フォームの下に検索した結果を表示するようにしています。
10
12
 
11
- 前ページで選択したチェックボックスが値がうまく取得できていないのか、もしくは遷移先のPHPの記述が間違っているのか、受け渡しができず「checked="checked"」にならないです。
13
+ 前ページで選択したチェックボックスが値がうまく取得できていないのか、もしくは遷移先のPHPの記述が間違っているのか、受け渡しができず「checked="checked"」にならないという状況です。
14
+
12
-
15
+ 少々ややこしい仕様のためテンプレートのsearch.php等は使用していません。
16
+
13
-
17
+ $_GETで受け渡す事も考えましたがチェックボックスのvalueが日本語なので$_POSTがやはり適切でしょうか?
18
+
19
+
20
+
14
-
21
+ 他に、いくつか試したことも書いておきます。
22
+
23
+
24
+
15
-
25
+ 初心者のためいくつかおかしい点はありますが、お力添えをいただければ幸いです。
16
-
17
-
18
26
 
19
27
 
20
28
 
@@ -64,6 +72,8 @@
64
72
 
65
73
 
66
74
 
75
+
76
+
67
77
  送信後(野菜:ピーマン、フルーツ:バナナを選択した場合)
68
78
 
69
79
  ```
@@ -74,7 +84,7 @@
74
84
 
75
85
  <h2>野菜</h2>
76
86
 
77
- <input type="checkbox" name="vege[]" value="トマト" >トマト
87
+ <input type="checkbox" name="vege[]" value="トマト">トマト
78
88
 
79
89
  <input type="checkbox" name="vege[]" value="ビーマン" checked="checked">ピーマン 
80
90
 
@@ -108,14 +118,12 @@
108
118
 
109
119
  <h1>検索結果</h1>
110
120
 
111
-
121
+ <!-- ここからは特に関係なし -->
112
122
 
113
123
  <h2>野菜</h2>
114
124
 
115
125
  <p>ピーマン</p>
116
126
 
117
-
118
-
119
127
  <h2>フルーツ</h2>
120
128
 
121
129
  <p>バナナ</p>
@@ -236,8 +244,28 @@
236
244
 
237
245
 
238
246
 
239
-
247
+ [PHP:フォームからcheckboxの値の取得してチェック状態を保持する方法のメモ](https://www.amelt.net/imc/programming/3449/)
248
+
240
-
249
+ ```
250
+
251
+ <?php
252
+
241
- ###補足情報(言語/FW/ツール等バージョンなど)
253
+ //チェックボックス値を取得
254
+
242
-
255
+ $data = $_POST["genre"];
256
+
257
+ //checkedをechoするかどうかの判定
258
+
259
+ for($i=0;$i<23;$i++){
260
+
261
+ if($data[$i] != null){
262
+
263
+ $check[$i] = "checked";
264
+
265
+ }
266
+
267
+ }
268
+
243
- より詳細な情報
269
+ ?>
270
+
271
+ ```