質問編集履歴

3

2019/09/09 22:52

投稿

nopakat
nopakat

スコア6

test CHANGED
@@ -1 +1 @@
1
- PHPでデータをINSERTできない。(2)
1
+ Twitter風ひとこと掲示板投稿ができない。(データベースへのデータの挿入ができない)
test CHANGED
File without changes

2

dbconnect.php内容変更

2019/09/09 22:52

投稿

nopakat
nopakat

スコア6

test CHANGED
File without changes
test CHANGED
@@ -48,6 +48,112 @@
48
48
 
49
49
  ```php
50
50
 
51
+ <?php
52
+
53
+ try {
54
+
55
+ $db = new PDO('mysql:dbname=mini_bbs;host=localhost;charset=utf8', 'root', 'root');
56
+
57
+ } catch (PDOException $e) {
58
+
59
+ echo 'DB接続エラー: ' . $e->getMessage();
60
+
61
+ }
62
+
63
+ ?>
64
+
65
+ ```
66
+
67
+
68
+
69
+ 【login.php】
70
+
71
+ ```php
72
+
73
+ <?php
74
+
75
+ require('dbconnect.php');
76
+
77
+
78
+
79
+ session_start();
80
+
81
+
82
+
83
+ if ($_COOKIE['email'] != '') {
84
+
85
+ $_POST['email'] = $_COOKIE['email'];
86
+
87
+ $_POST['password'] = $_COOKIE['password'];
88
+
89
+ $_POST['save'] = 'on';
90
+
91
+ }
92
+
93
+
94
+
95
+ if(!empty($_POST)) {
96
+
97
+ // ログインの処理
98
+
99
+ if($_POST['email'] != '' && $_POST['password'] != '') {
100
+
101
+ $login = $db->prepare('SELECT * FROM members WHERE email=? AND password=?');
102
+
103
+ $login->execute(array(
104
+
105
+ $_POST['email'],
106
+
107
+ sha1($_POST['password'])
108
+
109
+ ));
110
+
111
+ $member = $login->fetch();
112
+
113
+
114
+
115
+ if($member) {
116
+
117
+ //ログイン成功
118
+
119
+ $_SESSION['id'] = $member['id'];
120
+
121
+ $_SESSION['time'] = time();
122
+
123
+
124
+
125
+ //ログイン情報を記録する
126
+
127
+ if($_POST['save'] == 'on') {
128
+
129
+ setcookie('email', $_POST['email'], time()+60*60*24*14);
130
+
131
+ setcookie('password', $_POST['password'], time()+60*60*24*14);
132
+
133
+ }
134
+
135
+
136
+
137
+ header('Location: index.php'); exit();
138
+
139
+ } else {
140
+
141
+ $error['login'] = 'failed';
142
+
143
+ }
144
+
145
+ } else {
146
+
147
+ $error['login'] = 'blank';
148
+
149
+ }
150
+
151
+ }
152
+
153
+ ?>
154
+
155
+
156
+
51
157
  <!DOCTYPE html>
52
158
 
53
159
  <html lang="ja">
@@ -72,31 +178,195 @@
72
178
 
73
179
  <body>
74
180
 
75
- <header>
76
-
77
- <h1 class="font-weight-normal">よくわかるPHPの教科書</h1>
78
-
79
- </header>
80
-
81
-
82
-
83
181
  <main>
84
182
 
183
+ <div id="lead">
184
+
185
+ <p>メールアドレスとパスワードを記入してログインしてください。</p>
186
+
187
+ <p>入会手続きがまだの方はこちらからどうぞ。</p>
188
+
189
+ <p>&raquo;<a href="join/">入会手続きをする</a></p>
190
+
191
+ </div>
192
+
193
+ <form action="" method="post">
194
+
195
+ <dl>
196
+
197
+ <dt>メールアドレス</dt>
198
+
199
+ <dd>
200
+
201
+ <input type="text" name="email" size="35" maxlength="255"
202
+
203
+ value="<?php echo htmlspecialchars($_POST['email'], ENT_QUOTES); ?>" />
204
+
205
+ <?php if($error['login'] == 'blank'): ?>
206
+
207
+ <p class="error">* メールアドレスとパスワードをご記入ください</p>
208
+
209
+ <?php endif; ?>
210
+
211
+ <?php if($error['login'] == 'failed'): ?>
212
+
213
+ <p class="error">* ログインに失敗しました。正しくご記入ください。</p>
214
+
215
+ <?php endif; ?>
216
+
217
+ </dd>
218
+
219
+ <dt>パスワード</dt>
220
+
221
+ <dd><input type="password" name="password" size="35" maxlength="255" value="<?php echo htmlspecialchars($_POST['password'], ENT_QUOTES); ?>" />
222
+
223
+ </dd>
224
+
225
+ <dt>ログイン情報の記録</dt>
226
+
227
+ <dd>
228
+
229
+ <input id="save" type="checkbox" name="save" value="on" /><label for="save">次回からは自動的にログインする</label>
230
+
231
+ </dd>
232
+
233
+ </dl>
234
+
235
+ <div><input type="submit" value="ログインする" /></div>
236
+
237
+ </form>
238
+
239
+ </main>
240
+
241
+ </body>
242
+
243
+ </html>
244
+
245
+
246
+
247
+ ```
248
+
249
+
250
+
251
+ 【index.php】
252
+
253
+ ```php
254
+
85
255
  <?php
86
256
 
87
- try {
257
+ session_start();
258
+
88
-
259
+ require('dbconnect.php');
260
+
261
+
262
+
89
- $db = new PDO('mysql:dbname=mini_bbs;host=localhost;charset=utf8', 'root', 'root');
263
+ if(isset($_SESSION['id']) && $_SESSION['time'] + 3600 > time()) {
264
+
90
-
265
+ //ログインしている
266
+
267
+ $_SESSION['time'] = time();
268
+
269
+
270
+
271
+ $members = $db->prepare('SELECT * FROM members WHERE id=?');
272
+
273
+ $members->execute(array($_SESSION['id']));
274
+
91
- } catch (PDOException $e) {
275
+ $member = $members->fetch();
276
+
92
-
277
+ } else {
278
+
279
+ //ログインしていない
280
+
93
- echo 'DB接続エラー: ' . $e->getMessage();
281
+ header('Location: login.php'); exit();
94
-
282
+
95
- }
283
+ }
284
+
285
+
286
+
96
-
287
+ //投稿内容を記録する
288
+
289
+ if(!empty($_POST)) {
290
+
291
+ if($_POST['message'] != '') {
292
+
293
+ $message = $db->prepare('INSERT INTO posts SET member_id=?, message=?, created=NOW()');
294
+
295
+ $message->execute(array(
296
+
297
+ $member['id'],
298
+
299
+ $_POST['message']
300
+
301
+ ));
302
+
303
+
304
+
305
+ header('Location: index.php'); exit();
306
+
307
+ }
308
+
309
+ }
310
+
97
- ?>
311
+ ?>
312
+
313
+
314
+
315
+
316
+
98
-
317
+ <!DOCTYPE html>
318
+
319
+ <html lang="ja">
320
+
321
+ <head>
322
+
323
+ <meta charset="UTF-8">
324
+
325
+ <meta name="viewpoint" content="width=device-width, initial-scale=1, shrink-to-fit=no">
326
+
327
+
328
+
329
+ <!-- Bootstrap CSS -->
330
+
331
+ <link rel="stylesheet" href="css/style.css">
332
+
333
+
334
+
335
+ <title>よくわかるPHPの教科書</title>
336
+
337
+ </head>
338
+
339
+ <body>
340
+
341
+ <main>
342
+
343
+ <div id="content">
344
+
345
+ <form action="" method="post">
346
+
347
+ <dl>
348
+
349
+ <dt><?php echo htmlspecialchars($member['name'], ENT_QUOTES); ?>さん、メッセージをどうぞ</dt>
350
+
351
+ <dd>
352
+
353
+ <textarea name="message" cols="50" rows="5"></textarea>
354
+
355
+ </dd>
356
+
357
+ </dl>
358
+
359
+ <div>
360
+
361
+ <input type="submit" value="投稿する" />
362
+
363
+ </div>
364
+
365
+ </form>
366
+
367
+ </div>
368
+
99
- </main>
369
+ </main>
100
370
 
101
371
  </body>
102
372
 
@@ -106,316 +376,6 @@
106
376
 
107
377
 
108
378
 
109
- 【login.php】
110
-
111
- ```php
112
-
113
- <?php
114
-
115
- require('dbconnect.php');
116
-
117
-
118
-
119
- session_start();
120
-
121
-
122
-
123
- if ($_COOKIE['email'] != '') {
124
-
125
- $_POST['email'] = $_COOKIE['email'];
126
-
127
- $_POST['password'] = $_COOKIE['password'];
128
-
129
- $_POST['save'] = 'on';
130
-
131
- }
132
-
133
-
134
-
135
- if(!empty($_POST)) {
136
-
137
- // ログインの処理
138
-
139
- if($_POST['email'] != '' && $_POST['password'] != '') {
140
-
141
- $login = $db->prepare('SELECT * FROM members WHERE email=? AND password=?');
142
-
143
- $login->execute(array(
144
-
145
- $_POST['email'],
146
-
147
- sha1($_POST['password'])
148
-
149
- ));
150
-
151
- $member = $login->fetch();
152
-
153
-
154
-
155
- if($member) {
156
-
157
- //ログイン成功
158
-
159
- $_SESSION['id'] = $member['id'];
160
-
161
- $_SESSION['time'] = time();
162
-
163
-
164
-
165
- //ログイン情報を記録する
166
-
167
- if($_POST['save'] == 'on') {
168
-
169
- setcookie('email', $_POST['email'], time()+60*60*24*14);
170
-
171
- setcookie('password', $_POST['password'], time()+60*60*24*14);
172
-
173
- }
174
-
175
-
176
-
177
- header('Location: index.php'); exit();
178
-
179
- } else {
180
-
181
- $error['login'] = 'failed';
182
-
183
- }
184
-
185
- } else {
186
-
187
- $error['login'] = 'blank';
188
-
189
- }
190
-
191
- }
192
-
193
- ?>
194
-
195
-
196
-
197
- <!DOCTYPE html>
198
-
199
- <html lang="ja">
200
-
201
- <head>
202
-
203
- <meta charset="UTF-8">
204
-
205
- <meta name="viewpoint" content="width=device-width, initial-scale=1, shrink-to-fit=no">
206
-
207
-
208
-
209
- <!-- Bootstrap CSS -->
210
-
211
- <link rel="stylesheet" href="css/style.css">
212
-
213
-
214
-
215
- <title>よくわかるPHPの教科書</title>
216
-
217
- </head>
218
-
219
- <body>
220
-
221
- <main>
222
-
223
- <div id="lead">
224
-
225
- <p>メールアドレスとパスワードを記入してログインしてください。</p>
226
-
227
- <p>入会手続きがまだの方はこちらからどうぞ。</p>
228
-
229
- <p>&raquo;<a href="join/">入会手続きをする</a></p>
230
-
231
- </div>
232
-
233
- <form action="" method="post">
234
-
235
- <dl>
236
-
237
- <dt>メールアドレス</dt>
238
-
239
- <dd>
240
-
241
- <input type="text" name="email" size="35" maxlength="255"
242
-
243
- value="<?php echo htmlspecialchars($_POST['email'], ENT_QUOTES); ?>" />
244
-
245
- <?php if($error['login'] == 'blank'): ?>
246
-
247
- <p class="error">* メールアドレスとパスワードをご記入ください</p>
248
-
249
- <?php endif; ?>
250
-
251
- <?php if($error['login'] == 'failed'): ?>
252
-
253
- <p class="error">* ログインに失敗しました。正しくご記入ください。</p>
254
-
255
- <?php endif; ?>
256
-
257
- </dd>
258
-
259
- <dt>パスワード</dt>
260
-
261
- <dd><input type="password" name="password" size="35" maxlength="255" value="<?php echo htmlspecialchars($_POST['password'], ENT_QUOTES); ?>" />
262
-
263
- </dd>
264
-
265
- <dt>ログイン情報の記録</dt>
266
-
267
- <dd>
268
-
269
- <input id="save" type="checkbox" name="save" value="on" /><label for="save">次回からは自動的にログインする</label>
270
-
271
- </dd>
272
-
273
- </dl>
274
-
275
- <div><input type="submit" value="ログインする" /></div>
276
-
277
- </form>
278
-
279
- </main>
280
-
281
- </body>
282
-
283
- </html>
284
-
285
-
286
-
287
- ```
288
-
289
-
290
-
291
- 【index.php】
292
-
293
- ```php
294
-
295
- <?php
296
-
297
- session_start();
298
-
299
- require('dbconnect.php');
300
-
301
-
302
-
303
- if(isset($_SESSION['id']) && $_SESSION['time'] + 3600 > time()) {
304
-
305
- //ログインしている
306
-
307
- $_SESSION['time'] = time();
308
-
309
-
310
-
311
- $members = $db->prepare('SELECT * FROM members WHERE id=?');
312
-
313
- $members->execute(array($_SESSION['id']));
314
-
315
- $member = $members->fetch();
316
-
317
- } else {
318
-
319
- //ログインしていない
320
-
321
- header('Location: login.php'); exit();
322
-
323
- }
324
-
325
-
326
-
327
- //投稿内容を記録する
328
-
329
- if(!empty($_POST)) {
330
-
331
- if($_POST['message'] != '') {
332
-
333
- $message = $db->prepare('INSERT INTO posts SET member_id=?, message=?, created=NOW()');
334
-
335
- $message->execute(array(
336
-
337
- $member['id'],
338
-
339
- $_POST['message']
340
-
341
- ));
342
-
343
-
344
-
345
- header('Location: index.php'); exit();
346
-
347
- }
348
-
349
- }
350
-
351
- ?>
352
-
353
-
354
-
355
-
356
-
357
- <!DOCTYPE html>
358
-
359
- <html lang="ja">
360
-
361
- <head>
362
-
363
- <meta charset="UTF-8">
364
-
365
- <meta name="viewpoint" content="width=device-width, initial-scale=1, shrink-to-fit=no">
366
-
367
-
368
-
369
- <!-- Bootstrap CSS -->
370
-
371
- <link rel="stylesheet" href="css/style.css">
372
-
373
-
374
-
375
- <title>よくわかるPHPの教科書</title>
376
-
377
- </head>
378
-
379
- <body>
380
-
381
- <main>
382
-
383
- <div id="content">
384
-
385
- <form action="" method="post">
386
-
387
- <dl>
388
-
389
- <dt><?php echo htmlspecialchars($member['name'], ENT_QUOTES); ?>さん、メッセージをどうぞ</dt>
390
-
391
- <dd>
392
-
393
- <textarea name="message" cols="50" rows="5"></textarea>
394
-
395
- </dd>
396
-
397
- </dl>
398
-
399
- <div>
400
-
401
- <input type="submit" value="投稿する" />
402
-
403
- </div>
404
-
405
- </form>
406
-
407
- </div>
408
-
409
- </main>
410
-
411
- </body>
412
-
413
- </html>
414
-
415
- ```
416
-
417
-
418
-
419
379
  尚、上記phpファイルは全て同じフォルダ内にあります。
420
380
 
421
381
 

1

不明点の加筆

2019/09/09 14:00

投稿

nopakat
nopakat

スコア6

test CHANGED
File without changes
test CHANGED
@@ -12,6 +12,8 @@
12
12
 
13
13
  Chapter6-7で「Twitter風ひとこと掲示板を作る」の中で、ログイン機能で、登録したユーザーでログインした後、投稿としてデータをINSERTしようとしますが上手くいきません。
14
14
 
15
+ (具体的には、元の投稿画面の何も入力されていない白紙の状態に戻り、データベースへは何も反映されていません。また、エラーログにも特にエラーは表示されていません。)
16
+
15
17
 
16
18
 
17
19
  以下、記述コードです。