回答編集履歴

7

コードの修正

2018/04/20 17:47

投稿

fjaiofjawiefjaw
fjaiofjawiefjaw

スコア210

test CHANGED
@@ -8,9 +8,7 @@
8
8
 
9
9
  $option_month_list = range(1, 12);
10
10
 
11
-
12
-
13
- if(!empty($_GET['show_submit'])) {
11
+ if($_SERVER['REQUEST_METHOD'] === 'GET' && !empty($_GET['show_submit'])) {
14
12
 
15
13
  $choosed_year = (int)$_GET['year'];
16
14
 
@@ -50,7 +48,7 @@
50
48
 
51
49
  <?php foreach ($option_year_list as $option_year): ?>
52
50
 
53
- <option value="<?=h($option_year)?>" <?php if($option_year === $choosed_year) echo('selected="selected"'); ?>>
51
+ <option value="<?=h($option_year)?>" <?php if(!empty($choosed_year) && ($option_year === $choosed_year)) echo('selected="selected"'); ?>>
54
52
 
55
53
  <?=h($option_year)?>
56
54
 
@@ -64,7 +62,7 @@
64
62
 
65
63
  <?php foreach ($option_month_list as $option_month): ?>
66
64
 
67
- <option value="<?=h($option_month)?>" <?php if($option_month === $choosed_month) echo('selected="selected"'); ?>>
65
+ <option value="<?=h($option_month)?>" <?php if(!empty($choosed_month) && ($option_month === $choosed_month)) echo('selected="selected"'); ?>>
68
66
 
69
67
  <?=h($option_month)?>
70
68
 
@@ -82,7 +80,7 @@
82
80
 
83
81
  ini_set('display_errors',1); //エラー表示
84
82
 
85
- if(!empty($_GET)) {
83
+ if($_SERVER['REQUEST_METHOD'] === 'GET' && !empty($_GET)) {
86
84
 
87
85
  $year=$_GET['year'];
88
86
 
@@ -162,8 +160,6 @@
162
160
 
163
161
  </html>
164
162
 
165
-
166
-
167
163
  ```
168
164
 
169
165
 

6

追記: htmlspecialcharsの説明

2018/04/20 17:47

投稿

fjaiofjawiefjaw
fjaiofjawiefjaw

スコア210

test CHANGED
@@ -18,6 +18,14 @@
18
18
 
19
19
  }
20
20
 
21
+
22
+
23
+ function h($str) {
24
+
25
+ return htmlspecialchars($str);
26
+
27
+ }
28
+
21
29
  ?>
22
30
 
23
31
 
@@ -42,15 +50,11 @@
42
50
 
43
51
  <?php foreach ($option_year_list as $option_year): ?>
44
52
 
45
- <?php if($option_year === $choosed_year): ?>
46
-
47
- <option value="<?=$option_year?>" selected="selected"><?=$option_year?></option>
53
+ <option value="<?=h($option_year)?>" <?php if($option_year === $choosed_year) echo('selected="selected"'); ?>>
48
-
49
- <?php else: ?>
54
+
50
-
51
- <option value="<?=$option_year?>"><?=$option_year?></option>
52
-
53
- <?php endif; ?>
55
+ <?=h($option_year)?>
56
+
57
+ </option>
54
58
 
55
59
  <?php endforeach; ?>
56
60
 
@@ -60,15 +64,11 @@
60
64
 
61
65
  <?php foreach ($option_month_list as $option_month): ?>
62
66
 
63
- <?php if($option_month === $choosed_month): ?>
64
-
65
- <option value="<?=$option_month?>" selected="selected"><?=$option_month?></option>
67
+ <option value="<?=h($option_month)?>" <?php if($option_month === $choosed_month) echo('selected="selected"'); ?>>
66
-
67
- <?php else: ?>
68
+
68
-
69
- <option value="<?=$option_month?>"><?=$option_month?></option>
70
-
71
- <?php endif; ?>
69
+ <?=h($option_month)?>
70
+
71
+ </option>
72
72
 
73
73
  <?php endforeach; ?>
74
74
 
@@ -232,6 +232,14 @@
232
232
 
233
233
 
234
234
 
235
+ サンプルコード内で、
236
+
237
+ h()で囲んである部分がありますが、
238
+
239
+ phpをhtmlに出力する際は、いつも囲む必要があるようです。
240
+
241
+
242
+
235
243
  後、$_GETや$_POSTを利用する際は、!emptyで確認してから、
236
244
 
237
245
  処理しないと、初回読み込み時にエラーが出ます。

5

追記:注意点

2018/04/19 16:33

投稿

fjaiofjawiefjaw
fjaiofjawiefjaw

スコア210

test CHANGED
@@ -229,3 +229,15 @@
229
229
  <?php endforeach; ?>
230
230
 
231
231
  ```
232
+
233
+
234
+
235
+ 後、$_GETや$_POSTを利用する際は、!emptyで確認してから、
236
+
237
+ 処理しないと、初回読み込み時にエラーが出ます。
238
+
239
+
240
+
241
+ 後、表示ボタンを押すと、年月の数字が戻ってしまうようになっていたので、
242
+
243
+ 入力数字を維持するようにしてあります。見てみてください。

4

不必要な英語を日本語へ修正

2018/04/19 16:18

投稿

fjaiofjawiefjaw
fjaiofjawiefjaw

スコア210

test CHANGED
@@ -188,7 +188,7 @@
188
188
 
189
189
  **>>(3) プルダウンメニューの[年]をfor文で入れたいが方法がわからない。**
190
190
 
191
- sample codeでは、foreachを使用しました。
191
+ 私が書いたサンプルコードでは、foreachを使用しました。
192
192
 
193
193
  phpはhtmlに埋め込めるので、
194
194
 
@@ -198,7 +198,7 @@
198
198
 
199
199
 
200
200
 
201
- sample codeでは、短く書ける書き方を使用しています。
201
+ サンプルコードでは、短く書ける書き方を使用しています。
202
202
 
203
203
 
204
204
 

3

追記:質問への回答

2018/04/19 16:07

投稿

fjaiofjawiefjaw
fjaiofjawiefjaw

スコア210

test CHANGED
@@ -165,3 +165,67 @@
165
165
 
166
166
 
167
167
  ```
168
+
169
+
170
+
171
+
172
+
173
+ **>>(1) (日数を考慮した部分を除外)動作が不安定であるので、どの部分がどうおかしいのか見てほしい。**
174
+
175
+ うるう年判定の部分で構文エラーが出てました。
176
+
177
+ 自動構文チェック機能付きのエディターを使えば、解決すると思います。
178
+
179
+ おすすめは、vsc(visual studio code)です!
180
+
181
+
182
+
183
+ **>>(2) 指定した月の日数の記述方法がわからず、if文でやってみたがうまくいかない。うるう年も考慮されない。**
184
+
185
+ これは(1)と同じ問題だと思いますので、(1)を解決すれば、いいと思います。
186
+
187
+
188
+
189
+ **>>(3) プルダウンメニューの[年]をfor文で入れたいが方法がわからない。**
190
+
191
+ sample codeでは、foreachを使用しました。
192
+
193
+ phpはhtmlに埋め込めるので、
194
+
195
+ 埋め込み方を知れば、解決すると思います。
196
+
197
+ https://www.flatflag.nir87.com/for-273
198
+
199
+
200
+
201
+ sample codeでは、短く書ける書き方を使用しています。
202
+
203
+
204
+
205
+ ```php
206
+
207
+ <?php echo('hello!'); ?>
208
+
209
+ <?='hello'?>//上と動きは、同じです。echo短縮の書き方です。
210
+
211
+ ```
212
+
213
+
214
+
215
+ ```php
216
+
217
+ <?php foreach($sample_arr as $sample_val) { ?>
218
+
219
+ <?=$sample_val?>
220
+
221
+ <?php } ?>
222
+
223
+ //上のコードは、下のようにも書くことが出来ます。
224
+
225
+ <?php foreach($sample_arr as $sample_val): ?>
226
+
227
+ <?=$sample_val?>
228
+
229
+ <?php endforeach; ?>
230
+
231
+ ```

2

コードの修正

2018/04/19 16:04

投稿

fjaiofjawiefjaw
fjaiofjawiefjaw

スコア210

test CHANGED
@@ -17,26 +17,6 @@
17
17
  $choosed_month = (int)$_GET['month'];
18
18
 
19
19
  }
20
-
21
-
22
-
23
- class CalenderUtilities
24
-
25
- {
26
-
27
- public function isLeapYear($year): bool
28
-
29
- {
30
-
31
- return (($year % 4 === 0) && ($year % 100 !== 0)) || ($year % 400 === 0);
32
-
33
- }
34
-
35
- }
36
-
37
-
38
-
39
- $calender_utilities = new CalenderUtilities();
40
20
 
41
21
  ?>
42
22
 
@@ -114,7 +94,7 @@
114
94
 
115
95
  if($month==2){
116
96
 
117
- if($calender_utilities->isLeapYear($year)) {
97
+ if((($year % 4 === 0) && ($year % 100 !== 0)) || ($year % 400 === 0)) {
118
98
 
119
99
  $lastday=29;
120
100
 
@@ -182,4 +162,6 @@
182
162
 
183
163
  </html>
184
164
 
165
+
166
+
185
167
  ```

1

コード修正

2018/04/19 15:47

投稿

fjaiofjawiefjaw
fjaiofjawiefjaw

スコア210

test CHANGED
@@ -19,6 +19,24 @@
19
19
  }
20
20
 
21
21
 
22
+
23
+ class CalenderUtilities
24
+
25
+ {
26
+
27
+ public function isLeapYear($year): bool
28
+
29
+ {
30
+
31
+ return (($year % 4 === 0) && ($year % 100 !== 0)) || ($year % 400 === 0);
32
+
33
+ }
34
+
35
+ }
36
+
37
+
38
+
39
+ $calender_utilities = new CalenderUtilities();
22
40
 
23
41
  ?>
24
42
 
@@ -48,9 +66,11 @@
48
66
 
49
67
  <option value="<?=$option_year?>" selected="selected"><?=$option_year?></option>
50
68
 
51
- <?php endif; ?>
69
+ <?php else: ?>
52
70
 
53
71
  <option value="<?=$option_year?>"><?=$option_year?></option>
72
+
73
+ <?php endif; ?>
54
74
 
55
75
  <?php endforeach; ?>
56
76
 
@@ -64,9 +84,11 @@
64
84
 
65
85
  <option value="<?=$option_month?>" selected="selected"><?=$option_month?></option>
66
86
 
67
- <?php endif; ?>
87
+ <?php else: ?>
68
88
 
69
89
  <option value="<?=$option_month?>"><?=$option_month?></option>
90
+
91
+ <?php endif; ?>
70
92
 
71
93
  <?php endforeach; ?>
72
94
 
@@ -92,7 +114,7 @@
92
114
 
93
115
  if($month==2){
94
116
 
95
- if((($year % 4 === 0) && ($year % 100 !== 0)) || ($year % 400 === 0)) {
117
+ if($calender_utilities->isLeapYear($year)) {
96
118
 
97
119
  $lastday=29;
98
120