質問編集履歴

1

ソース追記

2017/10/15 01:18

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- ロリポップでのデータベースエラーについて
1
+ グインロリポップでのデータベースエラーについて
test CHANGED
@@ -205,3 +205,213 @@
205
205
  </html>
206
206
 
207
207
  ```
208
+
209
+
210
+
211
+
212
+
213
+
214
+
215
+ ログインページ
216
+
217
+ ```php
218
+
219
+ <?php
220
+
221
+ require 'password.php'; // password_verfy()はphp 5.5.0以降の関数のため、バージョンが古くて使えない場合に使用
222
+
223
+ // セッション開始
224
+
225
+ session_start();
226
+
227
+
228
+
229
+ $db['host'] = ""; // DBサーバのURL
230
+
231
+ $db['user'] = ""; // ユーザー名
232
+
233
+ $db['pass'] = ""; // ユーザー名のパスワード
234
+
235
+ $db['dbname'] = ""; // データベース名
236
+
237
+
238
+
239
+ // エラーメッセージの初期化
240
+
241
+ $errorMessage = "";
242
+
243
+
244
+
245
+ // ログインボタンが押された場合
246
+
247
+ if (isset($_POST["login"])) {
248
+
249
+ // 1. ユーザIDの入力チェック
250
+
251
+ if (empty($_POST["userid"])) { // emptyは値が空のとき
252
+
253
+ $errorMessage = 'ユーザーIDが未入力です。';
254
+
255
+ } else if (empty($_POST["password"])) {
256
+
257
+ $errorMessage = 'パスワードが未入力です。';
258
+
259
+ }
260
+
261
+
262
+
263
+ if (!empty($_POST["userid"]) && !empty($_POST["password"])) {
264
+
265
+ // 入力したユーザIDを格納
266
+
267
+ $userid = $_POST["userid"];
268
+
269
+
270
+
271
+ // 2. ユーザIDとパスワードが入力されていたら認証する
272
+
273
+ $dsn = sprintf('mysql:host=%s; dbname=%s; charset=utf8',$db['host'],$db['dbname']);
274
+
275
+
276
+
277
+ // 3. エラー処理
278
+
279
+ try {
280
+
281
+ $pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
282
+
283
+
284
+
285
+ $stmt = $pdo->prepare('SELECT * FROM userData WHERE id = ?');
286
+
287
+ $stmt->execute(array($userid));
288
+
289
+
290
+
291
+ $password = $_POST["password"];
292
+
293
+
294
+
295
+ if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
296
+
297
+ if (password_verify($password, $row['password'])) {
298
+
299
+ session_regenerate_id(true);
300
+
301
+
302
+
303
+ // 入力したIDのユーザー名を取得
304
+
305
+ $id = $row['id'];
306
+
307
+ $sql = "SELECT * FROM userData WHERE id = $id"; //入力したIDからユーザー名を取得
308
+
309
+ $stmt = $pdo->query($sql);
310
+
311
+ foreach ($stmt as $row) {
312
+
313
+ $row['name']; // ユーザー名
314
+
315
+ }
316
+
317
+ $_SESSION["NAME"] = $row['name'];
318
+
319
+ header("Location: Main.php"); // メイン画面へ遷移
320
+
321
+ exit(); // 処理終了
322
+
323
+ } else {
324
+
325
+ // 認証失敗
326
+
327
+ $errorMessage = 'ユーザーIDあるいはパスワードに誤りがあります。';
328
+
329
+ }
330
+
331
+ } else {
332
+
333
+ // 4. 認証成功なら、セッションIDを新規に発行する
334
+
335
+ // 該当データなし
336
+
337
+ $errorMessage = 'ユーザーIDあるいはパスワードに誤りがあります。';
338
+
339
+ }
340
+
341
+ } catch (PDOException $e) {
342
+
343
+ $errorMessage = 'データベースエラー';
344
+
345
+ //$errorMessage = $sql;
346
+
347
+ // $e->getMessage() でエラー内容を参照可能(デバック時のみ表示)
348
+
349
+ // echo $e->getMessage();
350
+
351
+ }
352
+
353
+ }
354
+
355
+ }
356
+
357
+ ?>
358
+
359
+
360
+
361
+ <!doctype html>
362
+
363
+ <html>
364
+
365
+ <head>
366
+
367
+ <meta charset="UTF-8">
368
+
369
+ <title>ログイン</title>
370
+
371
+ </head>
372
+
373
+ <body>
374
+
375
+ <h1>ログイン画面</h1>
376
+
377
+ <form id="loginForm" name="loginForm" action="" method="POST">
378
+
379
+ <fieldset>
380
+
381
+ <legend>ログインフォーム</legend>
382
+
383
+ <div><font color="#ff0000"><?php echo htmlspecialchars($errorMessage, ENT_QUOTES); ?></font></div>
384
+
385
+ <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);} ?>">
386
+
387
+ <br>
388
+
389
+ <label for="password">パスワード</label><input type="password" id="password" name="password" value="" placeholder="パスワードを入力">
390
+
391
+ <br>
392
+
393
+ <input type="submit" id="login" name="login" value="ログイン">
394
+
395
+ </fieldset>
396
+
397
+ </form>
398
+
399
+ <br>
400
+
401
+ <form action="SignUp.php">
402
+
403
+ <fieldset>
404
+
405
+ <legend>新規登録フォーム</legend>
406
+
407
+ <input type="submit" value="新規登録">
408
+
409
+ </fieldset>
410
+
411
+ </form>
412
+
413
+ </body>
414
+
415
+ </html>
416
+
417
+ ```