質問編集履歴

4

一部間違えてました

2019/04/19 08:15

投稿

NaaYU
NaaYU

スコア22

test CHANGED
File without changes
test CHANGED
@@ -78,7 +78,7 @@
78
78
 
79
79
  if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
80
80
 
81
- if (password_verify($password, $row['password'])) {
81
+
82
82
 
83
83
  session_regenerate_id(true);
84
84
 
@@ -118,15 +118,7 @@
118
118
 
119
119
  }
120
120
 
121
- } else {
121
+
122
-
123
- // 4. 認証成功なら、セッションIDを新規に発行する
124
-
125
- // 該当データなし
126
-
127
- $errorMessage = 'ユーザーIDあるいはパスワードに誤りがあります。';
128
-
129
- }
130
122
 
131
123
  } catch (PDOException $e) {
132
124
 
@@ -140,11 +132,7 @@
140
132
 
141
133
  }
142
134
 
143
- }
144
-
145
- }
146
-
147
- ?>
135
+ ?>
148
136
 
149
137
  <!doctype html>
150
138
 

3

ソースコードを大幅に見直しました。

2019/04/19 08:15

投稿

NaaYU
NaaYU

スコア22

test CHANGED
File without changes
test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  <?php
24
24
 
25
- session_start();
25
+
26
26
 
27
27
 
28
28
 
@@ -36,6 +36,14 @@
36
36
 
37
37
  }
38
38
 
39
+
40
+
41
+ ?>
42
+
43
+ <?php
44
+
45
+ session_start();
46
+
39
47
  $db['host'] = "localhost:3306"; // DBサーバのURL
40
48
 
41
49
  $db['user'] = "db"; // ユーザー名
@@ -48,51 +56,93 @@
48
56
 
49
57
 
50
58
 
51
-
59
+ $dsn = sprintf('mysql: host=%s; dbname=%s; charset=utf8', $db['host'], $db['dbname']);
52
60
 
53
61
 
54
62
 
63
+ // 3. エラー処理
55
64
 
65
+ try {
56
66
 
57
- $dsn = sprintf('mysql:host=%s;dbname=%s;charset=utf8',$db['host'],$db['dbname']);
58
-
59
- $pdo = new PDO($dsn, $db['user'],$db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
67
+ $pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
60
68
 
61
69
 
62
70
 
63
- $stmt = $pdo->prepare('SELECT * FROM userData WHERE name = ?');
71
+ $stmt = $pdo->prepare('SELECT * FROM userData WHERE name = ?');
72
+
73
+ $stmt->execute(array($userid));
64
74
 
65
75
 
66
76
 
67
- if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
77
+
68
78
 
69
- $pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
79
+ if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
70
80
 
81
+ if (password_verify($password, $row['password'])) {
82
+
83
+ session_regenerate_id(true);
84
+
85
+
86
+
87
+ // 入力したIDのユーザー名を取得
88
+
89
+ $id = $row['id'];
90
+
71
- $sql = "SELECT * FROM userData WHERE name = $_SESSION['NAME']"; $stmt = $pdo->query($sql);
91
+ $sql = "SELECT * FROM userData WHERE id = $id"; //入力したIDからユーザー名を取得
92
+
93
+ $stmt = $pdo->query($sql);
72
94
 
73
95
  foreach ($stmt as $row) {
74
96
 
75
- $row['ban'];
97
+
76
98
 
77
- $row['point'];
99
+ $row['ban'];
78
100
 
101
+ $row['point'];
79
102
 
103
+ // ユーザー名
80
104
 
81
105
  }
82
106
 
83
- $_SESSION["ban"] = $row['ban'];
107
+ $_SESSION["ban"] = $row['ban'];
84
108
 
85
- $_SESSION["point"] = $row['point'];
109
+ $_SESSION["point"] = $row['point'];
110
+
111
+ // 処理終了
112
+
113
+ } else {
114
+
115
+ // 認証失敗
116
+
117
+ $errorMessage = 'ユーザーIDあるいはパスワードに誤りがあります。';
118
+
119
+ }
120
+
121
+ } else {
122
+
123
+ // 4. 認証成功なら、セッションIDを新規に発行する
124
+
125
+ // 該当データなし
126
+
127
+ $errorMessage = 'ユーザーIDあるいはパスワードに誤りがあります。';
128
+
129
+ }
130
+
131
+ } catch (PDOException $e) {
132
+
133
+
134
+
135
+ //$errorMessage = $sql;
136
+
137
+ // $e->getMessage() でエラー内容を参照可能(デバッグ時のみ表示)
138
+
139
+ echo $e->getMessage();
140
+
141
+ }
142
+
143
+ }
86
144
 
87
145
  }
88
-
89
- if($_SESSION["ban"] === "1") {
90
-
91
- header("Location: ban.php");
92
-
93
- }
94
-
95
-
96
146
 
97
147
  ?>
98
148
 

2

pdo,stmtを追加しましたが500のままです

2019/04/19 08:08

投稿

NaaYU
NaaYU

スコア22

test CHANGED
File without changes
test CHANGED
@@ -55,6 +55,14 @@
55
55
 
56
56
 
57
57
  $dsn = sprintf('mysql:host=%s;dbname=%s;charset=utf8',$db['host'],$db['dbname']);
58
+
59
+ $pdo = new PDO($dsn, $db['user'],$db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
60
+
61
+
62
+
63
+ $stmt = $pdo->prepare('SELECT * FROM userData WHERE name = ?');
64
+
65
+
58
66
 
59
67
  if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
60
68
 

1

dsnの空白を削除しました

2019/04/19 07:54

投稿

NaaYU
NaaYU

スコア22

test CHANGED
File without changes
test CHANGED
@@ -54,7 +54,7 @@
54
54
 
55
55
 
56
56
 
57
- $dsn = sprintf('mysql: host=%s; dbname=%s; charset=utf8', $db['host'], $db['dbname']);
57
+ $dsn = sprintf('mysql:host=%s;dbname=%s;charset=utf8',$db['host'],$db['dbname']);
58
58
 
59
59
  if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
60
60