質問編集履歴

4

ご指摘いただいたことを訂正しました!

2019/10/10 11:20

投稿

scoco
scoco

スコア5

test CHANGED
File without changes
test CHANGED
@@ -37,6 +37,8 @@
37
37
  [参考にしたサイト](https://gist.github.com/KosukeGit/8e89ab13368c68dfac61903ee011e4bc)
38
38
 
39
39
  =================
40
+
41
+ ```PHP
40
42
 
41
43
 
42
44
 
@@ -160,6 +162,8 @@
160
162
 
161
163
  ?>
162
164
 
165
+ ```
166
+
163
167
 
164
168
 
165
169
 

3

指摘があったのでソースを表示しました

2019/10/10 11:20

投稿

scoco
scoco

スコア5

test CHANGED
File without changes
test CHANGED
@@ -40,6 +40,134 @@
40
40
 
41
41
 
42
42
 
43
+ <?php
44
+
45
+ require 'password.php'; // password_verfy()はphp 5.5.0以降の関数のため、バージョンが古くて使えない場合に使用
46
+
47
+ // セッション開始
48
+
49
+ session_start();
50
+
51
+ $db['host'] = "localhost"; // DBサーバのURL
52
+
53
+ $db['user'] = "hogeUser"; // ユーザー名
54
+
55
+ $db['pass'] = "hogehoge"; // ユーザー名のパスワード
56
+
57
+ $db['dbname'] = "loginManagement"; // データベース名
58
+
59
+ // エラーメッセージの初期化
60
+
61
+ $errorMessage = "";
62
+
63
+ // ログインボタンが押された場合
64
+
65
+ if (isset($_POST["login"])) {
66
+
67
+ // 1. ユーザIDの入力チェック
68
+
69
+ if (empty($_POST["userid"])) { // emptyは値が空のとき
70
+
71
+ $errorMessage = 'ユーザーIDが未入力です。';
72
+
73
+ } else if (empty($_POST["password"])) {
74
+
75
+ $errorMessage = 'パスワードが未入力です。';
76
+
77
+ }
78
+
79
+ if (!empty($_POST["userid"]) && !empty($_POST["password"])) {
80
+
81
+ // 入力したユーザIDを格納
82
+
83
+ $userid = $_POST["userid"];
84
+
85
+ // 2. ユーザIDとパスワードが入力されていたら認証する
86
+
87
+ $dsn = sprintf('mysql: host=%s; dbname=%s; charset=utf8', $db['host'], $db['dbname']);
88
+
89
+ // 3. エラー処理
90
+
91
+ try {
92
+
93
+ $pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
94
+
95
+ $stmt = $pdo->prepare('SELECT * FROM userData WHERE name = ?');
96
+
97
+ $stmt->execute(array($userid));
98
+
99
+ $password = $_POST["password"];
100
+
101
+ if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
102
+
103
+ if (password_verify($password, $row['password'])) {
104
+
105
+ session_regenerate_id(true);
106
+
107
+ // 入力したIDのユーザー名を取得
108
+
109
+ $id = $row['id'];
110
+
111
+ $sql = "SELECT * FROM userData WHERE id = $id"; //入力したIDからユーザー名を取得
112
+
113
+ $stmt = $pdo->query($sql);
114
+
115
+ foreach ($stmt as $row) {
116
+
117
+ $row['name']; // ユーザー名
118
+
119
+ }
120
+
121
+ $_SESSION["NAME"] = $row['name'];
122
+
123
+ header("Location: Main.php"); // メイン画面へ遷移
124
+
125
+ exit(); // 処理終了
126
+
127
+ } else {
128
+
129
+ // 認証失敗
130
+
131
+ $errorMessage = 'ユーザーIDあるいはパスワードに誤りがあります。';
132
+
133
+ }
134
+
135
+ } else {
136
+
137
+ // 4. 認証成功なら、セッションIDを新規に発行する
138
+
139
+ // 該当データなし
140
+
141
+ $errorMessage = 'ユーザーIDあるいはパスワードに誤りがあります。';
142
+
143
+ }
144
+
145
+ } catch (PDOException $e) {
146
+
147
+ $errorMessage = 'データベースエラー';
148
+
149
+ //$errorMessage = $sql;
150
+
151
+ // $e->getMessage() でエラー内容を参照可能(デバッグ時のみ表示)
152
+
153
+ // echo $e->getMessage();
154
+
155
+ }
156
+
157
+ }
158
+
159
+ }
160
+
161
+ ?>
162
+
163
+
164
+
165
+
166
+
167
+ =================
168
+
169
+
170
+
43
171
  何が間違っているのか全く見当もつきません。
44
172
 
45
173
  質問に対し情報足らずであれば申し訳ございません。

2

誤字訂正

2019/10/10 11:11

投稿

scoco
scoco

スコア5

test CHANGED
File without changes
test CHANGED
@@ -4,9 +4,9 @@
4
4
 
5
5
  PHP、MySQLを使い自作システムを作っています。
6
6
 
7
- 会員制にするためにログイン機能を付けたいのですが、ログイン画面だけがうまくいきません。
7
+ 会員制にするためにログイン機能(Login.php)を付けたいのですが、ログイン画面だけがうまくいきません。
8
8
 
9
- 会員新規登録画面はDBにもちゃんと登録できています。
9
+ 会員新規登録画面(signin.php)はDBにもちゃんと登録できています。
10
10
 
11
11
 
12
12
 
@@ -30,7 +30,7 @@
30
30
 
31
31
 
32
32
 
33
- ↓こちら丸コピしました。(勿論、DB名など変えています)
33
+ ↓こちらのLogin.php 丸コピしました。(勿論、DB名など変えています)
34
34
 
35
35
 
36
36
 

1

URLの付け方を訂正しました。ご指摘ありがとうございます⁉

2019/10/10 10:57

投稿

scoco
scoco

スコア5

test CHANGED
File without changes
test CHANGED
@@ -32,9 +32,9 @@
32
32
 
33
33
  ↓こちらを丸コピしました。(勿論、DB名など変えています)
34
34
 
35
- https://gist.github.com/KosukeGit/8e89ab13368c68dfac61903ee011e4bc
36
35
 
37
36
 
37
+ [参考にしたサイト](https://gist.github.com/KosukeGit/8e89ab13368c68dfac61903ee011e4bc)
38
38
 
39
39
  =================
40
40