回答編集履歴

4

調整

2018/07/24 12:10

投稿

yambejp
yambejp

スコア114968

test CHANGED
@@ -182,15 +182,15 @@
182
182
 
183
183
  <input type="checkbox" name="class[]" value="C">C<br>
184
184
 
185
- <input type="checkbox" name = subject[] value = "janpanese">国語<br>
185
+ <input type="checkbox" name ="subject[]" value = "janpanese">国語<br>
186
-
186
+
187
- <input type="checkbox" name = subject[] value = "math">数学<br>
187
+ <input type="checkbox" name ="subject[]" value = "math">数学<br>
188
-
188
+
189
- <input type="checkbox" name = subject[] value = "science">理科<br>
189
+ <input type="checkbox" name ="subject[]" value = "science">理科<br>
190
-
190
+
191
- <input type="checkbox" name = subject[] value = "social">社会<br>
191
+ <input type="checkbox" name ="subject[]" value = "social">社会<br>
192
-
192
+
193
- <input type="checkbox" name = subject[] value = "english">英語<br>
193
+ <input type="checkbox" name ="subject[]" value = "english">英語<br>
194
194
 
195
195
  <input type="submit" name="search" value="検索"><br>
196
196
 

3

組み込み

2018/07/24 12:10

投稿

yambejp
yambejp

スコア114968

test CHANGED
@@ -89,3 +89,115 @@
89
89
  </form>
90
90
 
91
91
  ```
92
+
93
+
94
+
95
+ # 組み込み
96
+
97
+ 一応ざっくり組み込んでみました
98
+
99
+ 環境にあわせて調整してください
100
+
101
+ ```PHP
102
+
103
+ <?PHP
104
+
105
+ $class=filter_input(INPUT_POST,"class",FILTER_DEFAULT,FILTER_REQUIRE_ARRAY);
106
+
107
+ $subject=filter_input(INPUT_POST,"subject",FILTER_DEFAULT,FILTER_REQUIRE_ARRAY);
108
+
109
+
110
+
111
+ $sql ="select students.name, classes.name FROM students ";
112
+
113
+ $sql.="JOIN classes ON students.class_id = classes.id ";
114
+
115
+ $sql.="JOIN scores ON students.id = scores.student_id ";
116
+
117
+ $sql.="WHERE 1 ";
118
+
119
+ $params=[];
120
+
121
+ $data=[];
122
+
123
+ if(!is_null($class)){
124
+
125
+ $sql.="and classes.name in (".implode(",",array_fill(0,count($class),"?")).") ";
126
+
127
+ if(!isset($params[0])) $params[0]="";
128
+
129
+ $params[0].=str_repeat( 's', count($class));
130
+
131
+ $data=array_merge($data,$class);
132
+
133
+ }
134
+
135
+ if(!is_null($subject)){
136
+
137
+ $sql.="and classes.name in (".implode(",",array_fill(0,count($subject),"?")).") ";
138
+
139
+ if(!isset($params[0])) $params[0]="";
140
+
141
+ $params[0].=str_repeat( 's', count($subject));
142
+
143
+ $data=array_merge($data,$subject);
144
+
145
+ }
146
+
147
+ print $sql;
148
+
149
+ print_r($params);
150
+
151
+
152
+
153
+ $mysqli = new mysqli("localhost", "myuser", "mypass", "mydb");
154
+
155
+ $stmp=$mysqli->prepare($sql);
156
+
157
+ foreach ($data as $key=>$val){
158
+
159
+ $params[] = &$data[$key];
160
+
161
+ }
162
+
163
+ call_user_func_array([$stmt, 'bind_param'], $params);
164
+
165
+ $stmt->execute();
166
+
167
+ $res = $stmt->get_result();
168
+
169
+ $rows=$res->fetch_all(MYSQLI_ASSOC);
170
+
171
+ print_r($rows);
172
+
173
+
174
+
175
+ ?>
176
+
177
+ <form method = "post">
178
+
179
+ <input type="checkbox" name="class[]" value="A">A
180
+
181
+ <input type="checkbox" name="class[]" value="B">B
182
+
183
+ <input type="checkbox" name="class[]" value="C">C<br>
184
+
185
+ <input type="checkbox" name = subject[] value = "janpanese">国語<br>
186
+
187
+ <input type="checkbox" name = subject[] value = "math">数学<br>
188
+
189
+ <input type="checkbox" name = subject[] value = "science">理科<br>
190
+
191
+ <input type="checkbox" name = subject[] value = "social">社会<br>
192
+
193
+ <input type="checkbox" name = subject[] value = "english">英語<br>
194
+
195
+ <input type="submit" name="search" value="検索"><br>
196
+
197
+ <input type="submit" name="back" value="戻る"><br>
198
+
199
+ </form>
200
+
201
+
202
+
203
+ ```

2

調整

2018/07/24 05:54

投稿

yambejp
yambejp

スコア114968

test CHANGED
@@ -72,15 +72,15 @@
72
72
 
73
73
  <input type="checkbox" name="class[]" value="C">C<br>
74
74
 
75
- <input type="checkbox" name = subject[] value = "janpanese">国語<br>
75
+ <input type="checkbox" name ="subject[]" value="janpanese">国語<br>
76
76
 
77
- <input type="checkbox" name = subject[] value = "math">数学<br>
77
+ <input type="checkbox" name ="subject[]" value="math">数学<br>
78
78
 
79
- <input type="checkbox" name = subject[] value = "science">理科<br>
79
+ <input type="checkbox" name ="subject[]" value="science">理科<br>
80
80
 
81
- <input type="checkbox" name = subject[] value = "social">社会<br>
81
+ <input type="checkbox" name ="subject[]" value="social">社会<br>
82
82
 
83
- <input type="checkbox" name = subject[] value = "english">英語<br>
83
+ <input type="checkbox" name ="subject[]" value="english">英語<br>
84
84
 
85
85
  <input type="submit" name="search" value="検索"><br>
86
86
 

1

データ

2018/07/24 04:07

投稿

yambejp
yambejp

スコア114968

test CHANGED
@@ -19,3 +19,73 @@
19
19
  mysqliにも多少煩雑ですがprepare処理がありますので、そちらを使うか
20
20
 
21
21
  pdoでparepare処理することをおすすめします
22
+
23
+
24
+
25
+ # 参考
26
+
27
+ プレースホルダの基本データ
28
+
29
+ ```PHP
30
+
31
+ <?PHP
32
+
33
+ $class=filter_input(INPUT_POST,"class",FILTER_DEFAULT,FILTER_REQUIRE_ARRAY);
34
+
35
+ $subject=filter_input(INPUT_POST,"subject",FILTER_DEFAULT,FILTER_REQUIRE_ARRAY);
36
+
37
+ $sql ="select students.name, classes.name FROM students ";
38
+
39
+ $sql.="JOIN classes ON students.class_id = classes.id ";
40
+
41
+ $sql.="JOIN scores ON students.id = scores.student_id ";
42
+
43
+ $sql.="WHERE 1 ";
44
+
45
+ $params=[];
46
+
47
+ if(!is_null($class)){
48
+
49
+ $sql.="and classes.name in (".implode(",",array_fill(0,count($class),"?")).") ";
50
+
51
+ $params_class =[str_repeat( 's', count($class))];
52
+
53
+ $params=array_merge($params,$params_class);
54
+
55
+ }
56
+
57
+ if(!is_null($subject)){
58
+
59
+ $sql.="and classes.name in (".implode(",",array_fill(0,count($subject),"?")).") ";
60
+
61
+ }
62
+
63
+ print $sql;
64
+
65
+ ?>
66
+
67
+ <form method = "post">
68
+
69
+ <input type="checkbox" name="class[]" value="A">A
70
+
71
+ <input type="checkbox" name="class[]" value="B">B
72
+
73
+ <input type="checkbox" name="class[]" value="C">C<br>
74
+
75
+ <input type="checkbox" name = subject[] value = "janpanese">国語<br>
76
+
77
+ <input type="checkbox" name = subject[] value = "math">数学<br>
78
+
79
+ <input type="checkbox" name = subject[] value = "science">理科<br>
80
+
81
+ <input type="checkbox" name = subject[] value = "social">社会<br>
82
+
83
+ <input type="checkbox" name = subject[] value = "english">英語<br>
84
+
85
+ <input type="submit" name="search" value="検索"><br>
86
+
87
+ <input type="submit" name="back" value="戻る"><br>
88
+
89
+ </form>
90
+
91
+ ```