質問編集履歴

2

1点問題解決により修正いたしました。

2017/03/07 06:59

投稿

ikemon
ikemon

スコア39

test CHANGED
File without changes
test CHANGED
@@ -160,17 +160,7 @@
160
160
 
161
161
 
162
162
 
163
- ①Ajaxでチェックのついているinputのvalueは取得できたのですが、PHPファイル(search-kekka.php)に配列情報を上手く送ることができませんでした。以下の書き方ですが、間違っておりますでしょうか?
164
-
165
- ```PHP
166
-
167
- <?php $atai = $_POST['checks']; //Ajaxで送信された配列を受け取る ?>
168
-
169
- ```
170
-
171
-
172
-
173
- PHPファイルに上手く配列情報が送れた後、以下のように値によってSQLのWHERE条件を変更したいのですが
163
+ PHPファイルに送られた配列情報をもとに、以下のように値によってSQLのWHERE条件を変更したいのですが
174
164
 
175
165
 
176
166
 

1

質問内容の変更

2017/03/07 06:59

投稿

ikemon
ikemon

スコア39

test CHANGED
File without changes
test CHANGED
@@ -12,137 +12,59 @@
12
12
 
13
13
 
14
14
 
15
+
16
+
17
+ ②inputがクリックされる度に、チェックの入っているinputのvalueをAjaxでPHPファイル(search-kekka.php)に送る
18
+
15
- ②タグ紐ずく投稿記事の該当件数SQLで習得
19
+ ```ここ言語入力
16
20
 
17
21
 
18
22
 
19
- 例)3つのタグに該当する記事検索をしたケース
23
+ <form>
20
24
 
21
- ```PHP
25
+ <label><input type="checkbox" name="checkbox-group[]" value="18">ID:10</label><br>
22
26
 
23
- ■SQLで該当件数習得
27
+ <label><input type="checkbox" name="checkbox-group[]" value="15">ID:15</label><br>
24
28
 
25
- <?php
29
+ <label><input type="checkbox" name="checkbox-group[]" value="13">ID:13</label><br>
26
30
 
27
- global $wpdb;
31
+ </form>
28
32
 
29
- $myrows = $wpdb->get_results( "SELECT object_id FROM $wpdb->term_relationships WHERE term_taxonomy_id = '10' OR term_taxonomy_id = '15' OR term_taxonomy_id = '13'" ); //タグIDより、該当記事を習得
30
-
31
- $gaitou = array(); //空の配列を用意
32
-
33
- foreach ($myrows as $value) {
34
-
35
- $gaitou[] = $value->object_id; //ループを回して配列にobject_id(記事ID)を格納していく
36
-
37
- $gaitou_kensu = array_count_values($gaitou); //重複する値をカウント
33
+ <div id="result"></div>
38
-
39
- }
40
-
41
- ?>
42
-
43
-
44
-
45
- ```
46
34
 
47
35
 
48
36
 
49
37
 
50
38
 
51
- ```PHP
52
-
53
- <pre>
54
-
55
- <?php var_dump($gaitou_kensu); ?>
56
-
57
- </pre>
58
-
59
-
60
-
61
- //配列の中身(3つのタグすべてに該当する記事は「18」「19」の2件)
62
-
63
- array(6) {
64
-
65
- [18]=>
66
-
67
- int(3)
68
-
69
- [19]=>
70
-
71
- int(3)
72
-
73
- [20]=>
74
-
75
- int(2)
76
-
77
- [21]=>
78
-
79
- int(1)
80
-
81
- [22]=>
82
-
83
- int(2)
84
-
85
- [10]=>
86
-
87
- int(1)
88
-
89
- }
90
-
91
- ```
92
-
93
-
94
-
95
- このようにSQLで該当件数の取得まではできました。
96
-
97
-
98
-
99
- ----- ▼▼ここから下の処理ができませんでした▼▼ -----
100
-
101
-
102
-
103
- ③formのinputが押されるたびにchangeイベントで上記のSQLを実行させ、該当件数をリアルタイム表示
104
-
105
- (SQLのスクリプトは別ファイル(search-kekka.php)で管理し、Ajaxで読み込み)
106
-
107
-
108
-
109
- ```HTML
110
-
111
- <form>
112
-
113
- <label><input type="checkbox" value="10">ID:10</label>
114
-
115
- <label><input type="checkbox" value="13">ID:13</label>
116
-
117
- <label><input type="checkbox" value="15">ID:15</label>
118
-
119
- </form>
120
-
121
- <div id="result"></div>
122
-
123
- ```
124
-
125
- ```javascript
126
-
127
39
  <script type="text/javascript">
128
40
 
129
41
  $(function(){
130
42
 
131
- $('input').change(function() { //inputが押されるたびに処理
43
+ $('input').change(function() { //inputクリックで発生
44
+
45
+
46
+
47
+ var checks=[]; //空の配列を用意
48
+
49
+ $("[name='checkbox-group[]']:checked").each(function(){
50
+
51
+ checks.push(this.value); //チェックのついているinputのvalueを全て配列に格納
52
+
53
+ });
132
54
 
133
55
  $.ajax({ //ajaxによる非同期通信発生
134
56
 
135
57
  type: "POST", //POST送信でデータを受け渡す
136
58
 
137
- url: "search-kekka.php", //SQLの書かれているsearch-kekka.phpにデータを送る
59
+ url: "search-kekka.php", //search-kekka.phpにデータを送る
138
60
 
139
- data: "#result", //結果#resultに表示
61
+ date: checks, //配列のデータ送る
140
62
 
141
63
  success: function(hoge) //接続が成功
142
64
 
143
65
  {
144
66
 
145
- $('#result').html(hoge);
67
+ $('#result').html(hoge); //該当件数を表示
146
68
 
147
69
  },
148
70
 
@@ -168,19 +90,69 @@
168
90
 
169
91
  ```
170
92
 
171
- 結果
93
+ ```Javascript
172
94
 
173
- ```こに言語入力
95
+ チェックの入っているinputのvalueが配列に格納されているかテストし、格納されている確認。
174
96
 
97
+
98
+
99
+ console.log(checks);
100
+
101
+
102
+
175
- Fatal error: Call to a member function get_results() on null
103
+ →["18", "15", "13"]
104
+
105
+
176
106
 
177
107
  ```
178
108
 
179
109
 
180
110
 
181
- ようなエラーが出て、変$wpdbが(オブジェクトではなく)null になってしまい、SQLが実行できませんでした。
111
+ ③受け取ったvalue値から該当する記事を返す
182
112
 
183
113
 
114
+
115
+ search-kekka.php
116
+
117
+ ```PHP
118
+
119
+ <?php require_once( dirname( __FILE__ ) . '/wp-load.php' ); ?>
120
+
121
+
122
+
123
+ <?php $atai = $_POST['checks']; //Ajaxで送信された配列を受け取る ?>
124
+
125
+
126
+
127
+ <?php
128
+
129
+ global $wpdb;
130
+
131
+ $myrows = $wpdb->get_results( "SELECT object_id FROM $wpdb->term_relationships WHERE term_taxonomy_id = '18' OR term_taxonomy_id = '15' OR term_taxonomy_id = '13'" ); //タグが該当する記事を習得
132
+
133
+ $gaitou = array(); //空の配列を用意
134
+
135
+ foreach ($myrows as $value) {
136
+
137
+ $gaitou[] = $value->object_id; //ループを回して配列にobject_idを格納していく
138
+
139
+ $gaitou_kensu = array_count_values($gaitou);
140
+
141
+ }
142
+
143
+ $count = count($gaitou_kensu);
144
+
145
+ echo $count;
146
+
147
+ // $input = $_POST['input'];
148
+
149
+ // echo $input);
150
+
151
+ ?>
152
+
153
+
154
+
155
+ ```
184
156
 
185
157
 
186
158
 
@@ -188,8 +160,40 @@
188
160
 
189
161
 
190
162
 
191
- PHPはページ読み込み時しか処理できなですが、inputを押たびにPHPを実行SQLデータベースにアクセスる方法はございますでしょうか?
163
+ ①Ajaxでチェックているinputのvalueは取得できたのでが、PHPファイル(search-kekka.php)に配列情報上手く送ることができませんでた。以下の書き方ですが、間違っておりますでしょうか?
192
164
 
193
- 思いつく限り手探りで試したのですが、もう一歩のところではまってしまいました。
165
+ ```PHP
194
166
 
167
+ <?php $atai = $_POST['checks']; //Ajaxで送信された配列を受け取る ?>
168
+
169
+ ```
170
+
171
+
172
+
173
+ ②PHPファイルに上手く配列情報が送れた後、以下のように値によってSQLのWHERE条件を変更したいのですが
174
+
175
+
176
+
177
+ ```PHP
178
+
179
+ ※["18", "15", "13"]の場合
180
+
181
+ WHERE term_taxonomy_id = '18' OR term_taxonomy_id = '15' OR term_taxonomy_id = '13'
182
+
183
+ ```
184
+
185
+ ```PHP
186
+
187
+ ※["18", "15"]の場合
188
+
189
+ WHERE term_taxonomy_id = '18' OR term_taxonomy_id = '15'
190
+
191
+ ```
192
+
193
+ このような吐き出しを実現するためのコードはどのように書けばいいでしょうか?
194
+
195
+
196
+
197
+
198
+
195
- 「そもそもこの方法では実現は難しい」「他に実装手段がある」などもご教授いただけましたら幸いです。
199
+ 「そもそもこの方法では実現は難しい」「他に実装手段がある」などもございましたらご教授いただけましたら幸いです。