teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

一部間違えてました

2019/04/19 08:15

投稿

NaaYU
NaaYU

スコア22

title CHANGED
File without changes
body CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
 
40
40
  if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
41
- if (password_verify($password, $row['password'])) {
41
+
42
42
  session_regenerate_id(true);
43
43
 
44
44
  // 入力したIDのユーザー名を取得
@@ -58,20 +58,14 @@
58
58
  // 認証失敗
59
59
  $errorMessage = 'ユーザーIDあるいはパスワードに誤りがあります。';
60
60
  }
61
- } else {
61
+
62
- // 4. 認証成功なら、セッションIDを新規に発行する
63
- // 該当データなし
64
- $errorMessage = 'ユーザーIDあるいはパスワードに誤りがあります。';
65
- }
66
62
  } catch (PDOException $e) {
67
63
 
68
64
  //$errorMessage = $sql;
69
65
  // $e->getMessage() でエラー内容を参照可能(デバッグ時のみ表示)
70
66
  echo $e->getMessage();
71
67
  }
72
- }
73
- }
74
- ?>
68
+ ?>
75
69
  <!doctype html>
76
70
  <html>
77
71
  <head>

3

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

2019/04/19 08:15

投稿

NaaYU
NaaYU

スコア22

title CHANGED
File without changes
body CHANGED
@@ -10,42 +10,67 @@
10
10
  error_reporting(E_ALL);
11
11
  ?>
12
12
  <?php
13
- session_start();
14
13
 
14
+
15
15
  // ログイン状態チェック
16
16
  if (!isset($_SESSION["NAME"])) {
17
17
  header("Location: Logout.php");
18
18
  exit;
19
19
  }
20
+
21
+ ?>
22
+ <?php
23
+ session_start();
20
24
  $db['host'] = "localhost:3306"; // DBサーバのURL
21
25
  $db['user'] = "db"; // ユーザー名
22
26
  $db['pass'] = "db"; // ユーザー名のパスワード
23
27
  $db['dbname'] = "db"; // データベース名
24
28
 
25
29
 
26
-
30
+ $dsn = sprintf('mysql: host=%s; dbname=%s; charset=utf8', $db['host'], $db['dbname']);
27
31
 
32
+ // 3. エラー処理
33
+ try {
34
+ $pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
28
35
 
29
- $dsn = sprintf('mysql:host=%s;dbname=%s;charset=utf8',$db['host'],$db['dbname']);
36
+ $stmt = $pdo->prepare('SELECT * FROM userData WHERE name = ?');
30
- $pdo = new PDO($dsn, $db['user'],$db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
37
+ $stmt->execute(array($userid));
31
38
 
39
+
40
+ if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
32
- $stmt = $pdo->prepare('SELECT * FROM userData WHERE name = ?');
41
+ if (password_verify($password, $row['password'])) {
42
+ session_regenerate_id(true);
33
43
 
44
+ // 入力したIDのユーザー名を取得
34
- if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
45
+ $id = $row['id'];
35
- $pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
36
- $sql = "SELECT * FROM userData WHERE name = $_SESSION['NAME']"; $stmt = $pdo->query($sql);
46
+ $sql = "SELECT * FROM userData WHERE id = $id"; //入力したIDからユーザー名を取得
47
+ $stmt = $pdo->query($sql);
37
48
  foreach ($stmt as $row) {
49
+
38
- $row['ban'];
50
+ $row['ban'];
39
- $row['point'];
51
+ $row['point'];
40
-
52
+ // ユーザー名
41
53
  }
42
- $_SESSION["ban"] = $row['ban'];
54
+ $_SESSION["ban"] = $row['ban'];
43
- $_SESSION["point"] = $row['point'];
55
+ $_SESSION["point"] = $row['point'];
56
+ // 処理終了
57
+ } else {
58
+ // 認証失敗
59
+ $errorMessage = 'ユーザーIDあるいはパスワードに誤りがあります。';
60
+ }
61
+ } else {
62
+ // 4. 認証成功なら、セッションIDを新規に発行する
63
+ // 該当データなし
64
+ $errorMessage = 'ユーザーIDあるいはパスワードに誤りがあります。';
65
+ }
66
+ } catch (PDOException $e) {
67
+
68
+ //$errorMessage = $sql;
69
+ // $e->getMessage() でエラー内容を参照可能(デバッグ時のみ表示)
70
+ echo $e->getMessage();
71
+ }
72
+ }
44
73
  }
45
- if($_SESSION["ban"] === "1") {
46
- header("Location: ban.php");
47
- }
48
-
49
74
  ?>
50
75
  <!doctype html>
51
76
  <html>

2

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

2019/04/19 08:08

投稿

NaaYU
NaaYU

スコア22

title CHANGED
File without changes
body CHANGED
@@ -27,6 +27,10 @@
27
27
 
28
28
 
29
29
  $dsn = sprintf('mysql:host=%s;dbname=%s;charset=utf8',$db['host'],$db['dbname']);
30
+ $pdo = new PDO($dsn, $db['user'],$db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
31
+
32
+ $stmt = $pdo->prepare('SELECT * FROM userData WHERE name = ?');
33
+
30
34
  if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
31
35
  $pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
32
36
  $sql = "SELECT * FROM userData WHERE name = $_SESSION['NAME']"; $stmt = $pdo->query($sql);

1

dsnの空白を削除しました

2019/04/19 07:54

投稿

NaaYU
NaaYU

スコア22

title CHANGED
File without changes
body CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
 
28
28
 
29
- $dsn = sprintf('mysql: host=%s; dbname=%s; charset=utf8', $db['host'], $db['dbname']);
29
+ $dsn = sprintf('mysql:host=%s;dbname=%s;charset=utf8',$db['host'],$db['dbname']);
30
30
  if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
31
31
  $pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
32
32
  $sql = "SELECT * FROM userData WHERE name = $_SESSION['NAME']"; $stmt = $pdo->query($sql);