質問編集履歴

2

マークダウンのコード機能でファイルを追加して、整えました。

2020/06/02 13:44

投稿

kudouyuya
kudouyuya

スコア15

test CHANGED
File without changes
test CHANGED
@@ -1,27 +1,431 @@
1
- ---phpの課題でログイン機能作ってます。Mysqlに登録したメールアドレスとパスワードを打ち込んで
1
+ phpの課題でログイン機能作ってます。Mysqlに登録したメールアドレスとパスワードを打ち込んで
2
2
 
3
3
  ログインボタンを押してログインする流れなんですが、画面遷移が起こらずにエラーが出てしまいます。
4
4
 
5
5
  ご意見いただけたら嬉しいです。
6
6
 
7
-
8
-
9
- 。PC MAC
10
-
11
- 。エディタ VSCODE
12
-
13
- 。MAMP mysql
14
-
15
-
16
-
17
- 実際のコードが
18
-
19
- ---------------------login.phpファイル---------------------------------------
7
+ ---------------------------------------------------------------------------------------
8
+
20
-
9
+ 新規登録画面のソースコード  index.php
10
+
11
+ ---------------------------------------------------------------------------------------
12
+
21
- <?php
13
+ ```<?php
22
14
 
23
15
  session_start();
24
16
 
17
+ require('../dbconnect.php');
18
+
19
+
20
+
21
+ if (!empty($_POST)) {
22
+
23
+ if ($_POST['name'] === '') {
24
+
25
+ $error['name'] = 'blank';
26
+
27
+ }
28
+
29
+ if ($_POST['email'] === '') {
30
+
31
+ $error['email'] = 'blank';
32
+
33
+ }
34
+
35
+ if (strlen($_POST['password']) < 4) {
36
+
37
+ $error['password'] = 'length';
38
+
39
+ }
40
+
41
+ if ($_POST['password'] === '') {
42
+
43
+ $error['password'] = 'blank';
44
+
45
+ }
46
+
47
+ $fileName = $_FILES['image']['name'];
48
+
49
+ if (!empty($fileName)) {
50
+
51
+ $ext = substr($fileName, -3);
52
+
53
+ if ($ext != 'jpg' && $ext != 'gif' && $ext != 'png') {
54
+
55
+ $error['image'] = 'type';
56
+
57
+ }
58
+
59
+ }
60
+
61
+
62
+
63
+ if(empty($error)) {
64
+
65
+ $member = $db->prepare('SELECT COUNT(*) AS cnt FROM members WHERE email=?');
66
+
67
+ $member->execute(array($_POST['email']));
68
+
69
+ $record = $member->fetch();
70
+
71
+ if ($record['cnt'] > 0) {
72
+
73
+ $error['email'] = 'duplicate';
74
+
75
+ }
76
+
77
+ }
78
+
79
+ if (empty($error)) {
80
+
81
+ $image = date('YmdHis') . $_FILES['image']['name'];
82
+
83
+ move_uploaded_file($_FILES['image']['tmp_name'],
84
+
85
+ '../member_picture/' . $image);
86
+
87
+ $_SESSION['join'] = $_POST;
88
+
89
+ $_SESSION['join']['image'] = $image;
90
+
91
+ header('Location: check.php');
92
+
93
+ exit();
94
+
95
+ }
96
+
97
+ }
98
+
99
+
100
+
101
+ if ($_REQUEST['action'] == 'rewrite' && isset($_SESSION['join'])) {
102
+
103
+ $_POST = $_SESSION['join'];
104
+
105
+ }
106
+
107
+ ?>
108
+
109
+
110
+
111
+ <!DOCTYPE html>
112
+
113
+ <html lang="ja">
114
+
115
+ <head>
116
+
117
+ <meta charset="UTF-8">
118
+
119
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
120
+
121
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
122
+
123
+ <title>会員登録</title>
124
+
125
+
126
+
127
+ <link rel="stylesheet" href="../style.css" />
128
+
129
+ </head>
130
+
131
+ <body>
132
+
133
+ <div id="wrap">
134
+
135
+ <div id="head">
136
+
137
+ <h1>会員登録</h1>
138
+
139
+ </div>
140
+
141
+
142
+
143
+ <div id="content">
144
+
145
+ <p>次のフォームに必要事項をご記入ください。</p>
146
+
147
+ <form action="" method="post" enctype="multipart/form-data">
148
+
149
+ <dl>
150
+
151
+ <dt>ニックネーム<span class="required">必須</span></dt>
152
+
153
+ <dd>
154
+
155
+ <input type="text" name="name" size="35" maxlength="255" value="<?php print(htmlspecialchars($_POST['name'], ENT_QUOTES)); ?>" />
156
+
157
+ <?php if ($error['name'] === 'blank'): ?>
158
+
159
+ <p class="error"> * ニックネームを入力してください</p>
160
+
161
+ <?php endif; ?>
162
+
163
+ </dd>
164
+
165
+ <dt>メールアドレス<span class="required">必須</span></dt>
166
+
167
+ <dd>
168
+
169
+ <input type="text" name="email" size="35" maxlength="255" value="<?php print(htmlspecialchars($_POST['email'], ENT_QUOTES)); ?>" />
170
+
171
+ <?php if ($error['email'] === 'blank'): ?>
172
+
173
+ <p class="error"> * メールアドレスを入力してください</p>
174
+
175
+ <?php endif; ?>
176
+
177
+ <?php if ($error['email'] === 'duplicate'): ?>
178
+
179
+ <p class="error"> * 指定されたメールアドレスは、既に登録されています</p>
180
+
181
+ <?php endif; ?>
182
+
183
+ <dt>パスワード<span class="required">必須</span></dt>
184
+
185
+ <dd>
186
+
187
+ <input type="password" name="password" size="10" maxlength="20" value="<?php print(htmlspecialchars($_POST['password'], ENT_QUOTES)); ?>" />
188
+
189
+ <?php if ($error['password'] === 'blank'): ?>
190
+
191
+ <p class="error"> * パスワードを入力してください</p>
192
+
193
+ <?php endif; ?>
194
+
195
+ <?php if ($error['password'] === 'length'): ?>
196
+
197
+ <p class="error"> * 4文字以上で入力してください</p>
198
+
199
+ <?php endif; ?>
200
+
201
+ </dd>
202
+
203
+ <dt>写真など</dt>
204
+
205
+ <dd>
206
+
207
+ <input type="file" name="image" size="35" value="test" />
208
+
209
+ <?php if ($error['image'] === 'type'): ?>
210
+
211
+ <p class="error"> * 写真などは[.gif]または[.jpg][.png]の画像を指定してください</p>
212
+
213
+ <?php endif; ?>
214
+
215
+ <?php if (!empty($error)): ?>
216
+
217
+ <p class="error"> * 恐れ入りますが、画像を改めて指定してください</p>
218
+
219
+ <?php endif; ?>
220
+
221
+ </dd>
222
+
223
+ </dl>
224
+
225
+ <div><input type="submit" value="入力内容を確認する" /></div>
226
+
227
+ </form>
228
+
229
+ </div>
230
+
231
+ </body>
232
+
233
+ </html>
234
+
235
+ コード
236
+
237
+ ```
238
+
239
+ ------------------------------------------------------------------------
240
+
241
+
242
+
243
+ 登録内容の確認画面のソースコード check.php
244
+
245
+ ------------------------------------------------------------------------
246
+
247
+ ```<?php
248
+
249
+ session_start();
250
+
251
+ require('../dbconnect.php');
252
+
253
+
254
+
255
+ if (!isset($_SESSION['join'])) {
256
+
257
+ header('Location: index.php');
258
+
259
+ exit();
260
+
261
+ }
262
+
263
+
264
+
265
+ if (!empty($_POST)) {
266
+
267
+ $statement = $db->prepare('INSERT INTO members SET name=?, email=?, password=?, picture=?, created=NOW()');
268
+
269
+ echo $statement->execute(array(
270
+
271
+ $_SESSION['join']['name'],
272
+
273
+ $_SESSION['join']['email'],
274
+
275
+ sha1($SESSION['join']['password']),
276
+
277
+ $_SESSION['join']['image']));
278
+
279
+ unset($_SESSION['join']);
280
+
281
+
282
+
283
+ header('Location: thanks.php');
284
+
285
+ exit();
286
+
287
+ }
288
+
289
+ ?>
290
+
291
+ <!DOCTYPE html>
292
+
293
+ <html lang="ja">
294
+
295
+ <head>
296
+
297
+ <meta charset="UTF-8">
298
+
299
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
300
+
301
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
302
+
303
+ <title>会員登録</title>
304
+
305
+
306
+
307
+ <link rel="stylesheet" href="../style.css" />
308
+
309
+ </head>
310
+
311
+ <body>
312
+
313
+ <div id="wrap">
314
+
315
+ <div id="head">
316
+
317
+ <h1>会員登録</h1>
318
+
319
+ </div>
320
+
321
+
322
+
323
+ <div id="content">
324
+
325
+ <p>記入した内容を確認して、「登録する」ボタンをクリックしてください</p>
326
+
327
+ <form action="" method="post">
328
+
329
+ <input type="hidden" name="action" value="submit" />
330
+
331
+ <dl>
332
+
333
+ <dt>ニックネーム</dt>
334
+
335
+ <dd>
336
+
337
+ <?php print(htmlspecialchars($_SESSION['join'] ['name'], ENT_QUOTES)); ?>
338
+
339
+ </dd>
340
+
341
+ <dt>メールアドレス</dt>
342
+
343
+ <dd>
344
+
345
+ <?php print(htmlspecialchars($_SESSION['join'] ['email'], ENT_QUOTES)); ?>
346
+
347
+ </dd>
348
+
349
+ <dt>パスワード</dt>
350
+
351
+ <dd>
352
+
353
+ 【表示されません】
354
+
355
+ </dd>
356
+
357
+ <dt>写真など</dt>
358
+
359
+ <dd>
360
+
361
+ <?php if ($_SESSION['join']['image'] !== ''): ?>
362
+
363
+ <img src="../member_picture/<?php print(htmlspecialchars($_SESSION['join']['image'], ENT_QUOTES)); ?>">
364
+
365
+ <?php endif; ?>
366
+
367
+ </dd>
368
+
369
+ </dl>
370
+
371
+ <div><a href="index.php?action=rewrite">&laquo;&nbsp;書き直す</a> | <input type="submit" value="登録する" /></div>
372
+
373
+ </form>
374
+
375
+ </div>
376
+
377
+
378
+
379
+ </div>
380
+
381
+ </body>
382
+
383
+ </html>
384
+
385
+ コード
386
+
387
+ ```
388
+
389
+ ------------------------------------------------------------------------
390
+
391
+
392
+
393
+ ------------------------------------------------------------------------
394
+
395
+
396
+
397
+ DB接続ファイル  dbconnect.php
398
+
399
+ ------------------------------------------------------------------------
400
+
401
+ ```<?php
402
+
403
+ try {
404
+
405
+ $db = new PDO('mysql:dbname=mini_bbs;host=127.0.0.1; charset=utf8', 'root', 'root');
406
+
407
+ } catch(PDOException $e) {
408
+
409
+ print('DB接続エラー :' . $e->getMessage());
410
+
411
+ }
412
+
413
+ コード
414
+
415
+ ```
416
+
417
+ ------------------------------------------------------------------------
418
+
419
+
420
+
421
+ ログイン画面のソースコード  login.php
422
+
423
+ ------------------------------------------------------------------------
424
+
425
+ ```<?php
426
+
427
+ session_start();
428
+
25
429
  require('dbconnect.php');
26
430
 
27
431
  ini_set('display_errors', "On");
@@ -180,15 +584,15 @@
180
584
 
181
585
  </html>
182
586
 
587
+
588
+
589
+ コード
590
+
591
+ ```
592
+
183
- ---------------------------------------------------------------------------
593
+ ------------------------------------------------------------------------
184
-
185
-
186
-
187
-
188
-
189
-
190
-
191
- ini_set('display_errors', "On");でエラーを画面に表示させると
594
+
595
+
192
596
 
193
597
  ------------------------------------------------------------------------
194
598
 
@@ -200,11 +604,27 @@
200
604
 
201
605
  ------------------------------------------------------------------------
202
606
 
607
+
608
+
609
+
610
+
203
611
  このようなエラーが出ます。解決のアドバイスをいただきたいです。
204
612
 
205
613
 
206
614
 
615
+ ちなみに新規登録画面で登録した内容は、ちゃんとDBに登録されています。
616
+
617
+ DBに登録したメールアドレスとパスワードを打ち込んでも、ログイン出来ずにエラ〜メッセージが
618
+
619
+ 表示されます。
620
+
621
+ あと、PHPMYADMINでSQLを直接メールアドレスとsha1を適用したパスワード挿入して、実行できるか確認してみたら
622
+
623
+ 実行できました。登録した内容が表示されました。
624
+
625
+
626
+
207
- ちなみにこのエラ〜メッセ
627
+ そしてこのエラー内容
208
628
 
209
629
  54行目は、<?php if ($error['login'] === 'blank'): ?>
210
630
 

1

水平線でみやすくしました。

2020/06/02 13:44

投稿

kudouyuya
kudouyuya

スコア15

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- phpの課題でログイン機能作ってます。Mysqlに登録したメールアドレスとパスワードを打ち込んで
1
+ ---phpの課題でログイン機能作ってます。Mysqlに登録したメールアドレスとパスワードを打ち込んで
2
2
 
3
3
  ログインボタンを押してログインする流れなんですが、画面遷移が起こらずにエラーが出てしまいます。
4
4
 
@@ -16,6 +16,8 @@
16
16
 
17
17
  実際のコードが
18
18
 
19
+ ---------------------login.phpファイル---------------------------------------
20
+
19
21
  <?php
20
22
 
21
23
  session_start();
@@ -178,12 +180,26 @@
178
180
 
179
181
  </html>
180
182
 
183
+ ---------------------------------------------------------------------------
184
+
185
+
186
+
187
+
188
+
181
189
 
182
190
 
183
191
  ini_set('display_errors', "On");でエラーを画面に表示させると
184
192
 
193
+ ------------------------------------------------------------------------
194
+
195
+                 エラー内容
196
+
197
+ ------------------------------------------------------------------------
198
+
185
199
  Notice:未定義の変数:54行目の/Applications/MAMP/htdocs/mini_bbs/login.phpのエラーNotice:54行目の/Applications/MAMP/htdocs/mini_bbs/login.phpの null型の値の配列オフセットにアクセスしようとしていますNotice:未定義の変数:57行目の/Applications/MAMP/htdocs/mini_bbs/login.phpのエラーNotice:57行目の/Applications/MAMP/htdocs/mini_bbs/login.phpの null型の値の配列オフセットにアクセスしようとしています
186
200
 
201
+ ------------------------------------------------------------------------
202
+
187
203
  このようなエラーが出ます。解決のアドバイスをいただきたいです。
188
204
 
189
205