質問編集履歴

3

誤字調整

2021/02/16 02:37

投稿

s-s56
s-s56

スコア3

test CHANGED
File without changes
test CHANGED
@@ -24,8 +24,6 @@
24
24
 
25
25
  ・date_default_timezoneを使用。効果なし。
26
26
 
27
-
28
-
29
27
 
30
28
 
31
29
  ### 補足情報(FW/ツールのバージョンなど)

2

ファイル名の追加

2021/02/16 02:37

投稿

s-s56
s-s56

スコア3

test CHANGED
File without changes
test CHANGED
@@ -216,7 +216,9 @@
216
216
 
217
217
 
218
218
 
219
- ```index.php
219
+ **index.php**
220
+
221
+ ```
220
222
 
221
223
  <?php
222
224
 

1

質問内容の情報追加

2021/02/15 08:18

投稿

s-s56
s-s56

スコア3

test CHANGED
File without changes
test CHANGED
@@ -8,15 +8,23 @@
8
8
 
9
9
  ### 発生している問題・エラーメッセージ
10
10
 
11
- Heroku clearDB MySQLにおいてデフォルトでUTCで保存されている
11
+ Heroku clearDB MySQLにおいてデフォルトでUTCで保存されている
12
+
12
-
13
+ ・デプロイをしてから、UTC表示になってしまった(ローカル環境で使用している時は日本時間で表示されていた)
13
-
14
-
14
+
15
- ### 調べたこと・試したこと
15
+ ### 調べたこと
16
16
 
17
17
  ・clearDB MySQLでデフォルト設定されているUTCは変更できない。(自動的にUTCで保存されてしまう)
18
18
 
19
+
20
+
21
+ ###試したこと
22
+
19
- ・php.ini、HerokuのtimezoneをAsia/Tokyoに変更
23
+ ・php.ini、HerokuのtimezoneをAsia/Tokyoに変更
24
+
25
+ ・date_default_timezoneを使用。効果なし。
26
+
27
+
20
28
 
21
29
 
22
30
 
@@ -33,3 +41,321 @@
33
41
 
34
42
 
35
43
  PHPコードの中で対応する形になるのかもしれないと思ってはいるのですが、中々解決策が見つからず1週間程時間が掛かってしまい今回質問いたしました。不備などありましたら、ご指摘いただき、随時補足していきたいです。よろしくお願いいたします。
44
+
45
+
46
+
47
+ 追記 テーブル定義
48
+
49
+ ---
50
+
51
+ ![MySQL](78d2e5b15affd14ab04c9f48db142d89.png)
52
+
53
+
54
+
55
+ ![イメージ説明](459f3c110496074f881655b1f876a06c.png)
56
+
57
+ 本番環境での表示部分↓
58
+
59
+ ![イメージ説明](e3d8682ed755f576edd20d12cef9844b.png)
60
+
61
+
62
+
63
+ ```php
64
+
65
+ <?php
66
+
67
+ ini_set('display_errors', 1);
68
+
69
+ ini_set('display_startup_errors', 1);
70
+
71
+ error_reporting(E_ALL);
72
+
73
+ require 'escape.php';
74
+
75
+ $_GET['id'] = filter_input(INPUT_GET, 'id');
76
+
77
+ $id = $_GET['id'];
78
+
79
+ $_GET['page_id'] = filter_input(INPUT_GET, 'page_id');
80
+
81
+ //データ登録
82
+
83
+ function createBoard($db, $board)
84
+
85
+ {
86
+
87
+ if (!empty($board['nickname']) && !empty($board['message'])) {
88
+
89
+ $statement = $db->prepare('INSERT INTO posts SET nickname=?, message=?,created=NOW()');
90
+
91
+ $statement->execute(array($board['nickname'], $board['message']));
92
+
93
+ }
94
+
95
+ }
96
+
97
+ //バリデーション処理
98
+
99
+ function validate($board)
100
+
101
+ {
102
+
103
+ $errors = [];
104
+
105
+ if (!strlen($board['nickname'])) {
106
+
107
+ $errors['nickname'] = 'ニックネームを入力してください';
108
+
109
+ }
110
+
111
+ if (!strlen($board['message'])) {
112
+
113
+ $errors['message'] = '投稿が未入力です';
114
+
115
+ }
116
+
117
+ return $errors;
118
+
119
+ }
120
+
121
+ //ページネーションの作成
122
+
123
+ function pagiNation($db)
124
+
125
+ {
126
+
127
+ define('max_view', 10);
128
+
129
+ $count = $db->prepare('SELECT COUNT(*) AS count FROM posts');
130
+
131
+ $count->execute();
132
+
133
+ $total_count = $count->fetch(PDO::FETCH_ASSOC);
134
+
135
+ $maxPage = ceil($total_count['count'] / max_view);
136
+
137
+ //ページ番号の取得
138
+
139
+ $page = $_GET['page_id'];
140
+
141
+ if ($page === '') {
142
+
143
+ $page = 1;
144
+
145
+ } else {
146
+
147
+ $page = $_GET['page_id'];
148
+
149
+ }
150
+
151
+ $page = max($page, 1);
152
+
153
+ $page = min($page, $maxPage);
154
+
155
+ //表示する記事の取得
156
+
157
+ $select = $db->prepare("SELECT * FROM posts ORDER BY id DESC LIMIT :start,:max ");
158
+
159
+ //1ページ目の処理
160
+
161
+ if ($page === 1) {
162
+
163
+ $select->bindValue(":start", $page - 1, PDO::PARAM_INT);
164
+
165
+ $select->bindValue(":max", max_view, PDO::PARAM_INT);
166
+
167
+ } else {
168
+
169
+ $select->bindValue(":start", ($page - 1) * max_view, PDO::PARAM_INT);
170
+
171
+ $select->bindValue(":max", max_view, PDO::PARAM_INT);
172
+
173
+ }
174
+
175
+ $select->execute();
176
+
177
+ $list = $select->fetchAll(PDO::FETCH_ASSOC);
178
+
179
+ return [$maxPage, $page, $list];
180
+
181
+ }
182
+
183
+ //データの削除
184
+
185
+ function deleteBoard($db, $id)
186
+
187
+ {
188
+
189
+ $statement = $db->prepare('DELETE FROM posts WHERE id=?');
190
+
191
+ $statement->execute(array($id));
192
+
193
+ }
194
+
195
+ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
196
+
197
+ $board = [
198
+
199
+ 'nickname' => $_POST['nickname'],
200
+
201
+ 'message' => $_POST['message'],
202
+
203
+ ];
204
+
205
+ $errors = validate($board);
206
+
207
+ if (!count($errors)) {
208
+
209
+ header('Location: index.php');
210
+
211
+ }
212
+
213
+ }
214
+
215
+ ```
216
+
217
+
218
+
219
+ ```index.php
220
+
221
+ <?php
222
+
223
+ ini_set('display_errors', 1);
224
+
225
+ ini_set('display_startup_errors', 1);
226
+
227
+ error_reporting(E_ALL);
228
+
229
+ $errors = [];
230
+
231
+ $board = [];
232
+
233
+ require_once('connect.php');
234
+
235
+ require_once('create.php');
236
+
237
+ $db = connect();
238
+
239
+ createBoard($db, $board);
240
+
241
+ deleteBoard($db, $id);
242
+
243
+ list($page, $maxPage, $list) = pagiNation($db);
244
+
245
+ ?>
246
+
247
+ <!DOCTYPE html>
248
+
249
+ <html lang="ja">
250
+
251
+
252
+
253
+ <head>
254
+
255
+ <meta charset="utf-8">
256
+
257
+ <meta name="viewport" content="width=device-width,initial-scale=1, shrink-to-fit=no">
258
+
259
+ <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous">
260
+
261
+ <title>励まし掲示板(仮)</title>
262
+
263
+ </head>
264
+
265
+
266
+
267
+ <body>
268
+
269
+ <div class="container">
270
+
271
+ <h1 class="mt-3 mb-5"><a class="text-body text-decoration-none" href="index.php">励まし掲示板(仮)</a></h1>
272
+
273
+ <form action="" method="POST">
274
+
275
+ <?php if (count($errors) > 0) : ?>
276
+
277
+ <?php foreach ($errors as $error) : ?>
278
+
279
+ <li><?php echo $error; ?></li>
280
+
281
+ <?php endforeach; ?>
282
+
283
+ <?php endif; ?>
284
+
285
+ <div class="mb-2">
286
+
287
+ <label for="nickname" class="form-label">ニックネーム</label>
288
+
289
+ <input type="text" class="form-control" name="nickname" id="nickname">
290
+
291
+ </div>
292
+
293
+ <div class="mb-2">
294
+
295
+ <label for="message">弱音を書き込んでください。多分誰かが励ましてくれます。</label>
296
+
297
+ <textarea type="text" class="form-control" name="message" id="message" placeholder="140字までになります" maxlength="140" rows="6" cols="50"></textarea>
298
+
299
+ </div>
300
+
301
+ <div class="mb-3">
302
+
303
+ <button type="submit" class="btn btn-secondary">投稿</button>
304
+
305
+ </div>
306
+
307
+ </form>
308
+
309
+ <main>
310
+
311
+ <?php foreach ($list as $value) : ?>
312
+
313
+ <div><?php echo ($value['id']); ?>&nbsp;<?php echo h($value['nickname']); ?></div>
314
+
315
+ <div><?php echo h($value['message']); ?></div>
316
+
317
+ <div><a href="reply_message.php?id=<?php echo ($value['id']); ?>">[コメント]</a><?php echo h($value['reply_message']); ?></div>
318
+
319
+ <div><a href="?id=<?php echo ($value['id']) ?>">[削除]</a></div>
320
+
321
+ <div><?php echo $value['created']; ?></div>
322
+
323
+ <?php endforeach; ?>
324
+
325
+ </main>
326
+
327
+ <div>
328
+
329
+ <a href="?page_id=<?php echo ($page === 1); ?>">最初</a>
330
+
331
+ <?php if ($page > 1) : ?>
332
+
333
+ <a href="?page_id=<?php echo ($page - 1); ?>"><?php echo ($page - 1); ?>ページ</a>
334
+
335
+ <?php endif; ?>
336
+
337
+ |
338
+
339
+ <?php if ($page < $maxPage) : ?>
340
+
341
+ <a href="?page_id=<?php echo ($page + 1); ?>"><?php echo ($page + 1); ?>ページ</a>
342
+
343
+ <?php endif; ?>
344
+
345
+ |
346
+
347
+ <a href="?page_id=<?php echo $maxPage; ?>">最後</a>
348
+
349
+ </div>
350
+
351
+ </div>
352
+
353
+ <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/js/bootstrap.bundle.min.js" integrity="sha384-ygbV9kiqUc6oa4msXn9868pTtWMgiQaeYH7/t7LECLbyPA2x65Kgf80OJFdroafW" crossorigin="anonymous"></script>
354
+
355
+ </body>
356
+
357
+
358
+
359
+ </html>
360
+
361
+ ```