回答編集履歴

2

修正

2018/05/04 23:12

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -16,13 +16,13 @@
16
16
 
17
17
  つまり、
18
18
 
19
- 点数合計計算をjavascriptでるのでしたら、選択教科と点数の表示までjavascriptでる必要がありますし、
19
+ 点数合計計算をjavascriptで対応するのでしたら、選択教科と点数の表示までjavascriptで対応する必要がありますし、
20
-
20
+
21
- 選択教科と点数の表示をphpでるのでしたら、点数合計計算もphpでる必要があります。
21
+ 選択教科と点数の表示をphpで対応するのでしたら、点数合計計算もphpで対応する必要があります。
22
-
23
-
24
-
22
+
23
+
24
+
25
- という前提で、phpでやる場合の回答です。
25
+ という前提で、phpでやりきる場合の回答です。
26
26
 
27
27
  ----
28
28
 
@@ -164,7 +164,7 @@
164
164
 
165
165
 
166
166
 
167
- te2jiさんが仰っているように今回の場合、form生成を簡略化したいためにphpを利用しているような形となっていますが、この要件だけだと「合計する」処理だけであればjavascriptだけで完結できます。
167
+ te2jiさんが仰っているように今回の場合、form生成を簡略化したいためにphpを利用しているような形となっていますが、この要件だけだとjavascriptだけで完結できます。
168
168
 
169
169
  (おそらく自身のjavascriptの記述もそうしているはず)
170
170
 

1

追記

2018/05/04 23:12

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -1,3 +1,31 @@
1
+ 前提があります。
2
+
3
+ **javascriptで全部やりきるか、phpで全部やりきるかを決めてください。**
4
+
5
+
6
+
7
+ 今現在やろうとしていることは「javascriptで合計値を出して、phpで選択した教科と点数を表示する」とお見受けしましたが、**併用はできません。**
8
+
9
+
10
+
11
+ 回答後半でも書いていますが、phpはサーバー側の言語、javascriptはクライアント側の言語だからです。
12
+
13
+ javascriptで合計を出した後に、送信ボタンで送信するとphp側で受け取るのはチェックボックスなどの情報ですが、サーバー側にリクエストを送信することとなるので、javascriptで出した合計値は画面表示時の状態に戻ります。
14
+
15
+
16
+
17
+ つまり、
18
+
19
+ 点数合計計算をjavascriptでやるのでしたら、選択教科と点数の表示までjavascriptでやる必要がありますし、
20
+
21
+ 選択教科と点数の表示をphpでやるのでしたら、点数合計計算もphpでやる必要があります。
22
+
23
+
24
+
25
+ という前提で、phpでやる場合の回答です。
26
+
27
+ ----
28
+
1
29
  エラーの理由。
2
30
 
3
31
 
@@ -62,7 +90,7 @@
62
90
 
63
91
 
64
92
 
65
- phpでやりりたい場合は、下記のように組みます。
93
+ phpでやりりたい場合は、下記のように組みます。
66
94
 
67
95
 
68
96
 
@@ -144,32 +172,108 @@
144
172
 
145
173
 
146
174
 
175
+ > チェックを付けたものをテキストで出力したい
176
+
177
+
178
+
179
+ チェックを送信したものを初期値checkedにしておけば不要かなと思い、コードを作ってみました。
180
+
181
+ それでも「別途テキスト表示したい」というのであれば、
182
+
183
+ foreachの中でチェックした情報を初期値としている箇所で下記のように拾うように組めばよいです。
184
+
185
+
186
+
187
+ ```php
188
+
189
+ <?php
190
+
191
+ $total = 0;
192
+
193
+ $check_subject = "";
194
+
195
+
196
+
197
+ $array = array(
198
+
199
+ "体育" => 75,
200
+
201
+ "社会" => 58,
202
+
203
+ "国語" => 74,
204
+
205
+ "算数" => 50,
206
+
207
+ "理科" => 75,
208
+
209
+ );
210
+
211
+
212
+
213
+ foreach($array as $key => $value){
214
+
215
+ $checked = "";
216
+
217
+ if(array_key_exists($key,$_GET)){
218
+
219
+ $check_subject .= "{$key}({$_GET[$key]})"; //チェックされた教科と点数の画面出力用情報を保持
220
+
221
+ $total += $_GET[$key]; //チェックされた教科の点数を加算
222
+
223
+ $checked = " checked"; //チェックされた教科を初期チェック状態に
224
+
225
+ }
226
+
227
+ echo '<input type="checkbox" name="'.$key.'" value="'.$value.'"'.$checked.'>'.$key.'(<span class="score">'.$value.'</span>)';
228
+
229
+ echo '<br>';
230
+
231
+ }
232
+
233
+ ?>
234
+
235
+ 合計点数:<input type="text" name="_total" size="5" value="<?=$total ?>"> <input type="reset" value="やり直し">
236
+
237
+ <input type="submit" value="送信">
238
+
239
+ <?=$check_subject ?>
240
+
241
+ ```
242
+
243
+
244
+
245
+
246
+
247
+ # 補足
248
+
249
+ ただ、チェックボックスというのは、おおよその場合、「同列の情報の中で複数選択するとき」に利用するものと思われます。
250
+
251
+ 通常は「配列」の形で送信するように仕込みます。
252
+
253
+ そうすると「同列の項目の中でチェックしたものだけ送信される」ようにします。
254
+
255
+
256
+
257
+ - [【PHP】チェックボックスの値を受け取る](https://qiita.com/4cres/items/26154314959dcccbfd34)
258
+
259
+
260
+
261
+ なので、今回はチェックボックスでフォームを作るのではなく、
262
+
263
+ テキストボックスで点数を入力してそれぞれのnameに教科名を入れて送信する方が
264
+
265
+ 汎用的で適切な使い方になるのでは?と思います。
266
+
267
+
268
+
269
+ 蛇足:
270
+
147
271
  下記気になったので。
148
272
 
149
273
  > phpで生成したフォームを使ってjavascriptによる処理が上手くいったのでそこまで考えていませんでした。
150
274
 
151
275
 
152
276
 
153
- phpで生成したフォーム はその時点でhtmlとして扱われるので何で作ったとか関係あせん
277
+ phpで生成したフォーム はその時点でhtmlとして扱われるのでjavascript側は何で作ったとか関係なくで今でているhtmlからのイベントを受け取って処理を行います
154
278
 
155
279
  あくまでphpはhtmlから送信された情報やDBの情報を処理するもので、画面出力についてはあくまで補足機能でしかない と思っておいて良いかと。
156
-
157
-
158
-
159
-
160
-
161
-
162
-
163
-
164
-
165
- # 補足
166
-
167
- ただ、チェックボックスというのは、おおよその場合、「同列の情報の中で複数選択するとき」に利用するものと思われます。
168
-
169
- 通常は「配列」の形で送信するように仕込みます。
170
-
171
- そうすると「同列の項目の中でチェックしたものだけ送信される」ようにできます。
172
-
173
-
174
-
175
- - [【PHP】チェックボックスの値を受け取る](https://qiita.com/4cres/items/26154314959dcccbfd34)