質問編集履歴

2

参考画像記載

2018/09/07 05:04

投稿

Roo
Roo

スコア55

test CHANGED
File without changes
test CHANGED
@@ -1,10 +1,12 @@
1
- ### 前提・実現したいこと
1
+ ![イメージ説明](392bc250aed460beeb71de138772d3d3.png)### 前提・実現したいこと
2
2
 
3
3
  phpで、ログイン機能を作成しています。
4
4
 
5
5
  アクセスした際には初期画面の入力フォームを空で表示させたいです。
6
6
 
7
- サブミットした際にバリデーション等で返ってきたときには、そのまま表示させたいです。
7
+ サブミットした際にバリデーション等で返ってきたときには、
8
+
9
+ 間違った入力値のまま表示させたいです。
8
10
 
9
11
 
10
12
 

1

記載場所の変更

2018/09/07 05:04

投稿

Roo
Roo

スコア55

test CHANGED
File without changes
test CHANGED
@@ -28,221 +28,221 @@
28
28
 
29
29
  ```ここに言語名を入力
30
30
 
31
- php
31
+ <?php
32
+
33
+ // セッション開始
34
+
35
+ session_start();
36
+
37
+
38
+
39
+ if (isset($_SESSION["NAME"])) {
40
+
41
+ header("Location: my.php");
42
+
43
+ exit;
44
+
45
+ }
46
+
47
+
48
+
49
+ $db['host'] = "localhost"; // DBサーバのURL
50
+
51
+ $db['user'] = "phpusr"; // ユーザーID
52
+
53
+ $db['pass'] = "phppass"; // ユーザー名のパスワード
54
+
55
+ $db['dbname'] = "php10"; // データベース名
56
+
57
+ $date = date('Y-m-d H:i:s');//日付
58
+
59
+
60
+
61
+ // エラーメッセージの初期化
62
+
63
+ $errorMessage = "";
64
+
65
+
66
+
67
+ // ログインボタンが押された場合
68
+
69
+ if (isset($_POST["login"])) {
70
+
71
+ // 1. ユーザIDの入力チェック
72
+
73
+ if (empty($_POST["userid"])) { // emptyは値が空のとき
74
+
75
+ $errorMessage = '※UserIDまたはPasswordが間違っています。';
76
+
77
+ } else if (empty($_POST["password"])) {
78
+
79
+ $errorMessage = '※UserIDまたはPasswordが間違っています。';
80
+
81
+ }
82
+
83
+
84
+
85
+ if (!empty($_POST["userid"]) && !empty($_POST["password"])) {
86
+
87
+ // 入力したユーザIDを格納
88
+
89
+ $userid = $_POST["userid"];
90
+
91
+
92
+
93
+ // 2. ユーザIDとパスワードが入力されていたら認証する
94
+
95
+ $dsn = sprintf('mysql: host=%s; dbname=%s; charset=utf8', $db['host'], $db['dbname']);
96
+
97
+
98
+
99
+ // 3. エラー処理
100
+
101
+ try {
102
+
103
+ $pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
104
+
105
+
106
+
107
+ $stmt = $pdo->prepare('SELECT * FROM userdata WHERE name = ?');
108
+
109
+ $stmt->execute(array($userid));
110
+
111
+
112
+
113
+ $password = $_POST["password"];
114
+
115
+
116
+
117
+ if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
118
+
119
+ // if (password_verify($password, $row['password'])) {
120
+
121
+ if ( $password == $row['password']) {
122
+
123
+ session_regenerate_id(true);
124
+
125
+
126
+
127
+ //正常に叩かれた場合、SQL実施 時間
128
+
129
+ $sql = "UPDATE userdata SET sdate='$date' WHERE id='1'";
130
+
131
+ $result = $pdo->query($sql);
132
+
133
+
134
+
135
+ // 入力したIDのユーザー名を取得
136
+
137
+ $id = $row['id'];
138
+
139
+ $sql = "SELECT * FROM userdata WHERE id = $id"; //入力したIDからユーザー名を取得
140
+
141
+ $stmt = $pdo->query($sql);
142
+
143
+ foreach ($stmt as $row) {
144
+
145
+ $row['name']; // ユーザー名
146
+
147
+ }
148
+
149
+ $_SESSION["NAME"] = $row['name'];
150
+
151
+ header("location: my.php");
152
+
153
+ exit(); // 処理終了
154
+
155
+ } else {
156
+
157
+ // 認証失敗
158
+
159
+ $errorMessage = '※UserIDまたはPasswordが間違っています。';
160
+
161
+ }
162
+
163
+ } else {
164
+
165
+ // 4. 認証成功なら、セッションIDを新規に発行する
166
+
167
+ // 該当データなし
168
+
169
+ // $errorMessage = 'ユーザーIDあるいはパスワードに誤りがあります。';
170
+
171
+ $errorMessage = '※UserIDまたはPasswordが間違っています。';
172
+
173
+ }
174
+
175
+ } catch (PDOException $e) {
176
+
177
+ header("Location: 500.php");
178
+
179
+ //$errorMessage = $sql;
180
+
181
+ // $e->getMessage() でエラー内容を参照可能(デバッグ時のみ表示)
182
+
183
+ // echo $e->getMessage();
184
+
185
+ }
186
+
187
+ }
188
+
189
+ }
190
+
191
+ ?>
192
+
193
+
194
+
195
+ <!doctype html>
196
+
197
+ <html>
198
+
199
+ <head>
200
+
201
+ <meta charset="UTF-8">
202
+
203
+ <title>ログイン</title>
204
+
205
+ <link rel="stylesheet" href="test.css">
206
+
207
+ </head>
208
+
209
+ <body>
210
+
211
+ <div class="parent">
212
+
213
+ <h1>login page</h1>
214
+
215
+ <form id="loginForm" name="loginForm" action="" method="POST">
216
+
217
+ <div><font color="#ff0000"><?php echo htmlspecialchars($errorMessage, ENT_QUOTES); ?></font></div>
218
+
219
+ <br>UserIDとPasswordを入力してください</br>
220
+
221
+ <div class="kakko" >
222
+
223
+ <label for="userid">UserID</label> &nbsp <input type="text" name="userid" value="">
224
+
225
+ <br>
226
+
227
+ <label for="password">Password</label><input type="password" name="password" value="">
228
+
229
+ </br>
230
+
231
+ <input type="submit" id="login" name="login" value="login">
232
+
233
+ </div>
234
+
235
+ </div>
236
+
237
+ </form>
238
+
239
+ </body>
240
+
241
+ </html>
32
242
 
33
243
  ```
34
244
 
35
- <?php
245
+
36
-
37
- // セッション開始
38
-
39
- session_start();
40
-
41
-
42
-
43
- if (isset($_SESSION["NAME"])) {
44
-
45
- header("Location: my.php");
46
-
47
- exit;
48
-
49
- }
50
-
51
-
52
-
53
- $db['host'] = "localhost"; // DBサーバのURL
54
-
55
- $db['user'] = "phpusr"; // ユーザーID
56
-
57
- $db['pass'] = "phppass"; // ユーザー名のパスワード
58
-
59
- $db['dbname'] = "php10"; // データベース名
60
-
61
- $date = date('Y-m-d H:i:s');//日付
62
-
63
-
64
-
65
- // エラーメッセージの初期化
66
-
67
- $errorMessage = "";
68
-
69
-
70
-
71
- // ログインボタンが押された場合
72
-
73
- if (isset($_POST["login"])) {
74
-
75
- // 1. ユーザIDの入力チェック
76
-
77
- if (empty($_POST["userid"])) { // emptyは値が空のとき
78
-
79
- $errorMessage = '※UserIDまたはPasswordが間違っています。';
80
-
81
- } else if (empty($_POST["password"])) {
82
-
83
- $errorMessage = '※UserIDまたはPasswordが間違っています。';
84
-
85
- }
86
-
87
-
88
-
89
- if (!empty($_POST["userid"]) && !empty($_POST["password"])) {
90
-
91
- // 入力したユーザIDを格納
92
-
93
- $userid = $_POST["userid"];
94
-
95
-
96
-
97
- // 2. ユーザIDとパスワードが入力されていたら認証する
98
-
99
- $dsn = sprintf('mysql: host=%s; dbname=%s; charset=utf8', $db['host'], $db['dbname']);
100
-
101
-
102
-
103
- // 3. エラー処理
104
-
105
- try {
106
-
107
- $pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
108
-
109
-
110
-
111
- $stmt = $pdo->prepare('SELECT * FROM userdata WHERE name = ?');
112
-
113
- $stmt->execute(array($userid));
114
-
115
-
116
-
117
- $password = $_POST["password"];
118
-
119
-
120
-
121
- if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
122
-
123
- // if (password_verify($password, $row['password'])) {
124
-
125
- if ( $password == $row['password']) {
126
-
127
- session_regenerate_id(true);
128
-
129
-
130
-
131
- //正常に叩かれた場合、SQL実施 時間
132
-
133
- $sql = "UPDATE userdata SET sdate='$date' WHERE id='1'";
134
-
135
- $result = $pdo->query($sql);
136
-
137
-
138
-
139
- // 入力したIDのユーザー名を取得
140
-
141
- $id = $row['id'];
142
-
143
- $sql = "SELECT * FROM userdata WHERE id = $id"; //入力したIDからユーザー名を取得
144
-
145
- $stmt = $pdo->query($sql);
146
-
147
- foreach ($stmt as $row) {
148
-
149
- $row['name']; // ユーザー名
150
-
151
- }
152
-
153
- $_SESSION["NAME"] = $row['name'];
154
-
155
- header("location: my.php");
156
-
157
- exit(); // 処理終了
158
-
159
- } else {
160
-
161
- // 認証失敗
162
-
163
- $errorMessage = '※UserIDまたはPasswordが間違っています。';
164
-
165
- }
166
-
167
- } else {
168
-
169
- // 4. 認証成功なら、セッションIDを新規に発行する
170
-
171
- // 該当データなし
172
-
173
- // $errorMessage = 'ユーザーIDあるいはパスワードに誤りがあります。';
174
-
175
- $errorMessage = '※UserIDまたはPasswordが間違っています。';
176
-
177
- }
178
-
179
- } catch (PDOException $e) {
180
-
181
- header("Location: 500.php");
182
-
183
- //$errorMessage = $sql;
184
-
185
- // $e->getMessage() でエラー内容を参照可能(デバッグ時のみ表示)
186
-
187
- // echo $e->getMessage();
188
-
189
- }
190
-
191
- }
192
-
193
- }
194
-
195
- ?>
196
-
197
-
198
-
199
- <!doctype html>
200
-
201
- <html>
202
-
203
- <head>
204
-
205
- <meta charset="UTF-8">
206
-
207
- <title>ログイン</title>
208
-
209
- <link rel="stylesheet" href="test.css">
210
-
211
- </head>
212
-
213
- <body>
214
-
215
- <div class="parent">
216
-
217
- <h1>login page</h1>
218
-
219
- <form id="loginForm" name="loginForm" action="" method="POST">
220
-
221
- <div><font color="#ff0000"><?php echo htmlspecialchars($errorMessage, ENT_QUOTES); ?></font></div>
222
-
223
- <br>UserIDとPasswordを入力してください</br>
224
-
225
- <div class="kakko" >
226
-
227
- <label for="userid">UserID</label> &nbsp <input type="text" name="userid" value="">
228
-
229
- <br>
230
-
231
- <label for="password">Password</label><input type="password" name="password" value="">
232
-
233
- </br>
234
-
235
- <input type="submit" id="login" name="login" value="login">
236
-
237
- </div>
238
-
239
- </div>
240
-
241
- </form>
242
-
243
- </body>
244
-
245
- </html>
246
246
 
247
247
  ### 試したこと
248
248