質問編集履歴

3

バージョン追記

2017/10/15 09:13

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -4,6 +4,34 @@
4
4
 
5
5
  原因が分かりません。
6
6
 
7
+
8
+
9
+ ローカルでは、正常に動作します。
10
+
11
+ バージョンは、
12
+
13
+ phpMyAdminのバージョン: 4.6.5.2
14
+
15
+ PHP のバージョン: 7.1.1
16
+
17
+ サーバのバージョン: 10.1.21-MariaDB
18
+
19
+
20
+
21
+ --------------------------------------------
22
+
23
+ ロリポップのバージョンは、
24
+
25
+
26
+
27
+ phpMyAdminのバージョ 4.0.10.18
28
+
29
+ PHP のバージョン: 7.1.1
30
+
31
+ サーバのバージョン: 5.6.23
32
+
33
+
34
+
7
35
  下記は、ログインページのソースです。
8
36
 
9
37
 

2

テーブル名に誤りがあったため、訂正

2017/10/15 09:13

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -64,7 +64,7 @@
64
64
 
65
65
  // 2. ユーザIDとパスワードが入力されていたら認証する
66
66
 
67
- $dsn = sprintf('mysql: host=%s; dbname=%s; charset=utf8', $db['host'], $db['dbname']);
67
+ $dsn = sprintf('mysql:host=%s; dbname=%s; charset=utf8',$db['host'],$db['dbname']);
68
68
 
69
69
 
70
70
 
@@ -72,19 +72,21 @@
72
72
 
73
73
  try {
74
74
 
75
- //$pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
76
-
77
- //$stmt = $pdo->prepare('SELECT * FROM userData WHERE id = ?');
78
-
79
- //$stmt->execute(array($userid));
80
-
81
- $result = mysqli_query( $dsn, "SELECT * FROM INSERT INTO userData(name, password, sextype) VALUES (" . $username . ", " . password_hash($password, PASSWORD_DEFAULT) . ", " . $sextype . ")" );
82
-
83
- $userid = mysql_result($result);
75
+ $pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
76
+
77
+
78
+
79
+ $stmt = $pdo->prepare('SELECT * FROM userdata WHERE id = ?');
80
+
81
+ $stmt->execute(array($userid));
82
+
83
+
84
84
 
85
85
  $password = $_POST["password"];
86
86
 
87
+
88
+
87
- if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
89
+ if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
88
90
 
89
91
  if (password_verify($password, $row['password'])) {
90
92
 
@@ -96,7 +98,7 @@
96
98
 
97
99
  $id = $row['id'];
98
100
 
99
- $sql = "SELECT * FROM userData WHERE id = $id"; //入力したIDからユーザー名を取得
101
+ $sql = "SELECT * FROM userdata WHERE id = $id"; //入力したIDからユーザー名を取得
100
102
 
101
103
  $stmt = $pdo->query($sql);
102
104
 
@@ -138,7 +140,7 @@
138
140
 
139
141
  // $e->getMessage() でエラー内容を参照可能(デバック時のみ表示)
140
142
 
141
- // echo $e->getMessage();
143
+ echo $e->getMessage();
142
144
 
143
145
  }
144
146
 
@@ -284,31 +286,27 @@
284
286
 
285
287
  // 2. ユーザIDとパスワードが入力されていたら認証する
286
288
 
287
- //$dsn = sprintf('mysql: host=%s:/var/lib/mysql/mysql.sock; dbname=%s; charset=utf8', $db['host'], $db['dbname']);
289
+ $dsn = sprintf('mysql:host=%s; dbname=%s; charset=utf8',$db['host'],$db['dbname']);
288
-
289
- $dsn = mysqli_connect( $db['host'], $db['user'], $db['pass'], $db['dbname']);
290
-
291
-
292
290
 
293
291
  // 3. エラー処理
294
292
 
295
293
  try {
296
294
 
297
- //$pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
298
-
299
- //$stmt = $pdo->prepare("INSERT INTO userData(name, password, sextype) VALUES (?, ?, ?)");
300
-
301
-
302
-
303
- // パスワードのハッシュ化を行う(今回は文字列のみなのでbindValue(変数の内容が変わらない)を使用せず、直接excuteに渡しても問題ない)
304
-
305
- //$userid = $pdo->lastinsertid(); // 登録した(DB側でauto_incrementした)IDを$useridに入れる
306
-
307
- $result = mysqli_query( $dsn, "SELECT * FROM INSERT INTO userData(name, password, sextype) VALUES (" . $username . ", " . password_hash($password, PASSWORD_DEFAULT) . ", " . $sextype . ")" );
308
-
309
- var_dump($result);
310
-
311
- $userid = mysql_result($result);
295
+ $pdo = new PDO($dsn,$db['user'],$db['pass'],array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
296
+
297
+
298
+
299
+ $stmt = $pdo->prepare("INSERT INTO userdata(name, password, sextype) VALUES (?, ?, ?)");
300
+
301
+
302
+
303
+ $stmt->execute(array($username, password_hash($password, PASSWORD_DEFAULT),
304
+
305
+ $sextype)); // パスワードのハッシュ化を行う(今回は文字列のみなのでbindValue(変数の内容が変わらない)を使用せず、直接excuteに渡しても問題ない)
306
+
307
+ $userid = $pdo->lastinsertid(); // 登録した(DB側でauto_incrementした)IDを$useridに入れる
308
+
309
+
312
310
 
313
311
  $signUpMessage = '登録が完了しました。あなたの登録IDは '. $userid. ' です。パスワードは '. $password. ' です。'; // ログイン時に使用するIDとパスワード
314
312
 

1

ソース追加

2017/10/15 07:46

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- 会員登録ページのエラーについて
1
+ ログインページのエラーについて
test CHANGED
@@ -1,10 +1,222 @@
1
- 下記のソースで新規登録ページを作成したのですが、
1
+ 下記のソースでログインページを作成したのですが、
2
2
 
3
3
  画面が真っ白になってしまいます。
4
4
 
5
5
  原因が分かりません。
6
6
 
7
-
7
+ 下記は、ログインページのソースです。
8
+
9
+
10
+
11
+ ```ここに言語を入力
12
+
13
+ <?php
14
+
15
+ require 'password.php'; // password_verfy()はphp 5.5.0以降の関数のため、バージョンが古くて使えない場合に使用
16
+
17
+ // セッション開始
18
+
19
+ session_start();
20
+
21
+
22
+
23
+ $db['host'] = ""; // DBサーバのURL
24
+
25
+ $db['user'] = ""; // ユーザー名
26
+
27
+ $db['pass'] = ""; // ユーザー名のパスワード
28
+
29
+ $db['dbname'] = ""; // データベース名
30
+
31
+
32
+
33
+ // エラーメッセージの初期化
34
+
35
+ $errorMessage = "";
36
+
37
+
38
+
39
+ // ログインボタンが押された場合
40
+
41
+ if (isset($_POST["login"])) {
42
+
43
+ // 1. ユーザIDの入力チェック
44
+
45
+ if (empty($_POST["userid"])) { // emptyは値が空のとき
46
+
47
+ $errorMessage = 'ユーザーIDが未入力です。';
48
+
49
+ } else if (empty($_POST["password"])) {
50
+
51
+ $errorMessage = 'パスワードが未入力です。';
52
+
53
+ }
54
+
55
+
56
+
57
+ if (!empty($_POST["userid"]) && !empty($_POST["password"])) {
58
+
59
+ // 入力したユーザIDを格納
60
+
61
+ $userid = $_POST["userid"];
62
+
63
+
64
+
65
+ // 2. ユーザIDとパスワードが入力されていたら認証する
66
+
67
+ $dsn = sprintf('mysql: host=%s; dbname=%s; charset=utf8', $db['host'], $db['dbname']);
68
+
69
+
70
+
71
+ // 3. エラー処理
72
+
73
+ try {
74
+
75
+ //$pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
76
+
77
+ //$stmt = $pdo->prepare('SELECT * FROM userData WHERE id = ?');
78
+
79
+ //$stmt->execute(array($userid));
80
+
81
+ $result = mysqli_query( $dsn, "SELECT * FROM INSERT INTO userData(name, password, sextype) VALUES (" . $username . ", " . password_hash($password, PASSWORD_DEFAULT) . ", " . $sextype . ")" );
82
+
83
+ $userid = mysql_result($result);
84
+
85
+ $password = $_POST["password"];
86
+
87
+ if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
88
+
89
+ if (password_verify($password, $row['password'])) {
90
+
91
+ session_regenerate_id(true);
92
+
93
+
94
+
95
+ // 入力したIDのユーザー名を取得
96
+
97
+ $id = $row['id'];
98
+
99
+ $sql = "SELECT * FROM userData WHERE id = $id"; //入力したIDからユーザー名を取得
100
+
101
+ $stmt = $pdo->query($sql);
102
+
103
+ foreach ($stmt as $row) {
104
+
105
+ $row['name']; // ユーザー名
106
+
107
+ }
108
+
109
+ $_SESSION["NAME"] = $row['name'];
110
+
111
+ header("Location: Main.php"); // メイン画面へ遷移
112
+
113
+ exit(); // 処理終了
114
+
115
+ } else {
116
+
117
+ // 認証失敗
118
+
119
+ $errorMessage = 'ユーザーIDあるいはパスワードに誤りがあります。';
120
+
121
+ }
122
+
123
+ } else {
124
+
125
+ // 4. 認証成功なら、セッションIDを新規に発行する
126
+
127
+ // 該当データなし
128
+
129
+ $errorMessage = 'ユーザーIDあるいはパスワードに誤りがあります。';
130
+
131
+ }
132
+
133
+ } catch (PDOException $e) {
134
+
135
+ $errorMessage = 'データベースエラー';
136
+
137
+ //$errorMessage = $sql;
138
+
139
+ // $e->getMessage() でエラー内容を参照可能(デバック時のみ表示)
140
+
141
+ // echo $e->getMessage();
142
+
143
+ }
144
+
145
+ }
146
+
147
+ }
148
+
149
+ ?>
150
+
151
+
152
+
153
+ <!doctype html>
154
+
155
+ <html>
156
+
157
+ <head>
158
+
159
+ <meta charset="UTF-8">
160
+
161
+ <title>ログイン</title>
162
+
163
+ </head>
164
+
165
+ <body>
166
+
167
+ <h1>ログイン画面</h1>
168
+
169
+ <form id="loginForm" name="loginForm" action="" method="POST">
170
+
171
+ <fieldset>
172
+
173
+ <legend>ログインフォーム</legend>
174
+
175
+ <div><font color="#ff0000"><?php echo htmlspecialchars($errorMessage, ENT_QUOTES); ?></font></div>
176
+
177
+ <label for="userid">ユーザーID</label><input type="text" id="userid" name="userid" placeholder="ユーザーIDを入力" value="<?php if (!empty($_POST["userid"])) {echo htmlspecialchars($_POST["userid"], ENT_QUOTES);} ?>">
178
+
179
+ <br>
180
+
181
+ <label for="password">パスワード</label><input type="password" id="password" name="password" value="" placeholder="パスワードを入力">
182
+
183
+ <br>
184
+
185
+ <input type="submit" id="login" name="login" value="ログイン">
186
+
187
+ </fieldset>
188
+
189
+ </form>
190
+
191
+ <br>
192
+
193
+ <form action="SignUp.php">
194
+
195
+ <fieldset>
196
+
197
+ <legend>新規登録フォーム</legend>
198
+
199
+ <input type="submit" value="新規登録">
200
+
201
+ </fieldset>
202
+
203
+ </form>
204
+
205
+ </body>
206
+
207
+ </html>
208
+
209
+ ```
210
+
211
+
212
+
213
+
214
+
215
+
216
+
217
+
218
+
219
+ 下記は新規登録ページのソースです。
8
220
 
9
221
  ```php
10
222