回答編集履歴

3

修正

2019/07/04 01:38

投稿

m.ts10806
m.ts10806

スコア80852

test CHANGED
@@ -476,8 +476,6 @@
476
476
 
477
477
  [$_GET](https://www.php.net/manual/ja/reserved.variables.get.php)
478
478
 
479
-
480
-
481
479
  標準機能はPHPマニュアルを必ず確認しましょう。
482
480
 
483
481
 
@@ -488,6 +486,12 @@
488
486
 
489
487
 
490
488
 
489
+ 未定義の変数をそのまま使ってたりするので、たぶんこれはスペルミス。
490
+
491
+ 定義した変数をコピペで使ってください。
492
+
493
+
494
+
491
495
  PHPが提供している機能はPHPマニュアルからコピペするくらいでやりましょう。
492
496
 
493
497
  IDEを利用すれば機能のサジェストもしてくれるし、未定義の変数関数や未使用の変数の洗い出しもリアルタイムでやってくれます。

2

修正

2019/07/04 01:38

投稿

m.ts10806
m.ts10806

スコア80852

test CHANGED
@@ -479,3 +479,17 @@
479
479
 
480
480
 
481
481
  標準機能はPHPマニュアルを必ず確認しましょう。
482
+
483
+
484
+
485
+ JavaScriptの中にそのままPHPの変数突っ込んでたり未使用の変数があったり
486
+
487
+ HTMLの途中でscriptタグが置いてあったり、コードの整理のほうが気になったりしますが・・・
488
+
489
+
490
+
491
+ PHPが提供している機能はPHPマニュアルからコピペするくらいでやりましょう。
492
+
493
+ IDEを利用すれば機能のサジェストもしてくれるし、未定義の変数関数や未使用の変数の洗い出しもリアルタイムでやってくれます。
494
+
495
+ デバッグの手間も減らしてくれるので必須と思います。

1

修正

2019/07/04 01:28

投稿

m.ts10806
m.ts10806

スコア80852

test CHANGED
@@ -47,3 +47,435 @@
47
47
  問題の切り分けには「ミニマムコード」と「デバッグ」が不可欠です。
48
48
 
49
49
  デバッグについては[別の回答者さんの回答](https://teratail.com/questions/195256#reply-289628)を参考にすると良いです。
50
+
51
+
52
+
53
+ # 読んでもらいたい蛇足
54
+
55
+
56
+
57
+ コードインデントがぐちゃぐちゃになっているため{}の対応が分かりづらくなって抜けやすくなっています。
58
+
59
+ コードフォーマット機能のついたエディタを使ってください。Windowsメモ帳?絶対ダメ、です。
60
+
61
+ このあたりの記事も必ず読んでおいてください。
62
+
63
+
64
+
65
+ - [初心者を戒めるPHP](https://qiita.com/tadsan/items/fb496e450fc27c8c4494)
66
+
67
+ - [PHP初心者は最低限これはやっとけ - 開発に入る前編](https://qiita.com/rana_kualu/items/95f0c8be51e8665015d5)
68
+
69
+
70
+
71
+ 以下はEclipseのコードフォーマットを適用した結果
72
+
73
+ ```php
74
+
75
+ 
76
+
77
+ <?php
78
+
79
+ // グラフ作成のPHP
80
+
81
+ // formから起算日(デフォルトは当日)を指定して送信されます。
82
+
83
+ $day = $GET_['day'];
84
+
85
+ ?>
86
+
87
+ <!DOCTYPE html>
88
+
89
+ <html>
90
+
91
+ <head>
92
+
93
+ <title>testグラフ</title>
94
+
95
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
96
+
97
+ <script
98
+
99
+ src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"
100
+
101
+ type="text/javascript"></script>
102
+
103
+ <script
104
+
105
+ src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.1.4/Chart.min.js"></script>
106
+
107
+ </head>
108
+
109
+ <body>
110
+
111
+ <?php
112
+
113
+ try {
114
+
115
+ $db = new PDO('mysql:host=localhost;dbname=webdb', 'root', 'root');
116
+
117
+
118
+
119
+ print("<p>データベース[webdb]に接続しました</p>");
120
+
121
+
122
+
123
+ // 起算日から1週間分のデータを取り出します。
124
+
125
+ $sql = "SELECT * FROM test WHERE createdate >= DATE(DATE_ADD($day, INTERVAL -7 DAY))";
126
+
127
+
128
+
129
+ $sto = $db->prepare($sql);
130
+
131
+ $sto->execute();
132
+
133
+
134
+
135
+ while ($row = $sto->fetch()) {
136
+
137
+ $sno = $row['sno'];
138
+
139
+ $day = $row['day'];
140
+
141
+ $calorie = ($row['calorie']);
142
+
143
+ $protein = ($row['protein']);
144
+
145
+ $lipid = ($row['lipid']);
146
+
147
+ $carbohydrate = ($row['carbohydrate']);
148
+
149
+ $calcium = ($row['calcium']);
150
+
151
+ $iron = ($row['iron']);
152
+
153
+ $zinc = ($row['zinc']);
154
+
155
+ $magnesium = ($row['magnesium']);
156
+
157
+ $folic_acid = ($row['folic_acid']);
158
+
159
+ $vitamin_a = ($row['vitamin_a']);
160
+
161
+ $vitamin_d = ($row['vitamin_d']);
162
+
163
+ $vitamin_e = ($row['vitamin_e']);
164
+
165
+ $vitamin_k = ($row['vitamin_k']);
166
+
167
+ $vitamin_b1 = ($row['vitamin_b1']);
168
+
169
+ $vitamin_b2 = ($row['vitamin_b2']);
170
+
171
+ $vitamin_c = ($row['vitamin_c']);
172
+
173
+ $dietary_fiber = ($row['dietary_fiber']);
174
+
175
+ }
176
+
177
+
178
+
179
+ // ビタミンとミネラルの合計を計算
180
+
181
+ $mineral = $carbohydrate + $calcium + $iron + $zinc + $magnesium;
182
+
183
+ $vitamin = $folic_acid + $vitamin_a + $vitamin_d + $vitamin_e + $vitamin_k + $vitamin_b1 + $vitamin_b2 + $vitamin_c;
184
+
185
+
186
+
187
+ $db = null;
188
+
189
+ } catch (PDOException $e) {
190
+
191
+ die("<h2>データベース接続に失敗しました</h2>");
192
+
193
+ }
194
+
195
+
196
+
197
+ // 1週間分の摂取目標
198
+
199
+ $calorie_total = 10850;
200
+
201
+ $protein_total = 245;
202
+
203
+ $lipid_total = 210;
204
+
205
+ $carbohydrate_total = 455;
206
+
207
+ $calcium_total = 4200;
208
+
209
+ $iron_total = 45.5;
210
+
211
+ $zinc_total = 35;
212
+
213
+ $magnesium_total = 910;
214
+
215
+ $folic_acid_total = 910;
216
+
217
+ $vitamin_a_total = 3150;
218
+
219
+ $vitamin_d_total = 280;
220
+
221
+ $vitamin_e_total = 35.0;
222
+
223
+ $vitamin_k_total = 595;
224
+
225
+ $vitamin_b1_total = 5.6;
226
+
227
+ $vitamin_b2_total = 6.3;
228
+
229
+ $vitamin_c_total = 385;
230
+
231
+ $dietary_fiber_total = 77;
232
+
233
+
234
+
235
+ // ビタミンとミネラルの合計を計算
236
+
237
+ $mineral_total = $carbohydrate_total + $calcium_total + $iron_total + $zinc_total + $magnesium_total;
238
+
239
+ $vitamin_total = $folic_acid_total + $vitamin_a_total + $vitamin_d_total + $vitamin_e_total + $vitamin_k_total + $vitamin_b1_total + $vitamin_b2_total + $vitamin_c_total;
240
+
241
+
242
+
243
+ // パーセントの計算を定義
244
+
245
+ function num2per($val, $val_total, $precision = 0)
246
+
247
+ {
248
+
249
+ if (($val < 0) or ($val_total < 0)) {
250
+
251
+ return false;
252
+
253
+ }
254
+
255
+ $val_percent = ($val / $val_total) * 100;
256
+
257
+ return round($val_percent, $precision);
258
+
259
+ }
260
+
261
+ $calorie_percent = num2per($calorie, $calorie_total);
262
+
263
+ $protein_percent = num2per($protein, $protein_total);
264
+
265
+ $lipid_percent = num2per($lipid, $lipid_total);
266
+
267
+ $dietary_fiber_percent = num2per($dietary_fiber, $dietary_fiber_total);
268
+
269
+ $mineral_percent = num2per($mineral, $mineral_total);
270
+
271
+ $vitamin_percent = num2per($vitamin, $vitamin_total);
272
+
273
+ ?>
274
+
275
+
276
+
277
+ <tr>
278
+
279
+ <td colspan="9"
280
+
281
+ style="text-align: center; font-size: 30px; background-color: #33FF99;">栄養素の合計値をグラフで表示</td>
282
+
283
+ </tr>
284
+
285
+
286
+
287
+
288
+
289
+ <!-- チャート描画キャンバス -->
290
+
291
+ <tr>
292
+
293
+ <td colspan="9"
294
+
295
+ style="width: 720px; height: 500px; backgroud-color: #FFF;"><div>
296
+
297
+ <canvas id="myChart" style="background-color: #fff;"></canvas>
298
+
299
+ </div></td>
300
+
301
+ </tr>
302
+
303
+ <script>
304
+
305
+
306
+
307
+ // 色の設定
308
+
309
+ var colorSet = {
310
+
311
+ red: 'rgb(255, 99, 132)',
312
+
313
+ orange: 'rgb(255, 159, 64)',
314
+
315
+ yellow: 'rgb(255, 205, 86)',
316
+
317
+ green: 'rgb(75, 192, 192)',
318
+
319
+ blue: 'rgb(54, 162, 235)',
320
+
321
+ purple: 'rgb(153, 102, 255)',
322
+
323
+ grey: 'rgb(201, 203, 207)'
324
+
325
+ };
326
+
327
+
328
+
329
+ // 乱数生成(0~100)
330
+
331
+ var rnd100 = function(){
332
+
333
+ return Math.round(Math.random() * 100);
334
+
335
+ };
336
+
337
+
338
+
339
+ // 色のRGB変換
340
+
341
+ var color = Chart.helpers.color;
342
+
343
+
344
+
345
+ /*
346
+
347
+ * チャートの初期設定
348
+
349
+ */
350
+
351
+ var config = {
352
+
353
+ type: 'radar',
354
+
355
+ data: {
356
+
357
+ labels: ["エネルギー", "たんぱく質", "脂質", "炭水化物", "ミネラル", "ビタミン"],
358
+
359
+ datasets: [{
360
+
361
+ label: "摂取量",
362
+
363
+ backgroundColor: color(colorSet.red).alpha(0.5).rgbString(),
364
+
365
+ borderColor: colorSet.red,
366
+
367
+ pointBackgroundColor: colorSet.red,
368
+
369
+
370
+
371
+ data: [<?php echo $calorie_percent ?>, <?php echo $protein_percent ?>, <?php echo $lipid_percent ?>, <?php echo $carbohydrate_percent ?>, <?php echo $mineral_percent ?>, <?php echo $vitamin_percent ?> ]
372
+
373
+
374
+
375
+
376
+
377
+
378
+
379
+
380
+
381
+ },]
382
+
383
+ },
384
+
385
+ options: {
386
+
387
+ animation:false,
388
+
389
+ showTooltips: false,
390
+
391
+ legend: { position: 'bottom' },
392
+
393
+ title: {
394
+
395
+ display: true,
396
+
397
+ fontSize:20,
398
+
399
+ fontColor:'#666',
400
+
401
+ text: '栄養素チャート'
402
+
403
+ },
404
+
405
+ scale: {
406
+
407
+ display: true,
408
+
409
+ pointLabels: {
410
+
411
+ fontSize: 15,
412
+
413
+ fontColor: colorSet.blue
414
+
415
+ },
416
+
417
+ ticks: {
418
+
419
+ display: true,
420
+
421
+ fontSize: 12,
422
+
423
+ fontColor: colorSet.green,
424
+
425
+ min: 0,
426
+
427
+ max: 100,
428
+
429
+ beginAtZero: true
430
+
431
+ },
432
+
433
+ gridLines: {
434
+
435
+ display: true,
436
+
437
+ color: colorSet.yellow
438
+
439
+ }
440
+
441
+ }
442
+
443
+ }
444
+
445
+ };
446
+
447
+
448
+
449
+ /*
450
+
451
+ * チャートの作成
452
+
453
+ */
454
+
455
+ var myRadar = new Chart($("#myChart"), config);
456
+
457
+
458
+
459
+ </script>
460
+
461
+ </table>
462
+
463
+ </body>
464
+
465
+ </html>
466
+
467
+ 
468
+
469
+
470
+
471
+ ```
472
+
473
+
474
+
475
+ とりあえずパッと見て分かるのは**$GET_**って存在しません。
476
+
477
+ [$_GET](https://www.php.net/manual/ja/reserved.variables.get.php)
478
+
479
+
480
+
481
+ 標準機能はPHPマニュアルを必ず確認しましょう。