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

質問編集履歴

4

ご指摘いただいたことを訂正しました!

2019/10/10 11:20

投稿

scoco
scoco

スコア5

title CHANGED
File without changes
body CHANGED
@@ -18,6 +18,7 @@
18
18
 
19
19
  [参考にしたサイト](https://gist.github.com/KosukeGit/8e89ab13368c68dfac61903ee011e4bc)
20
20
  =================
21
+ ```PHP
21
22
 
22
23
  <?php
23
24
  require 'password.php'; // password_verfy()はphp 5.5.0以降の関数のため、バージョンが古くて使えない場合に使用
@@ -79,6 +80,7 @@
79
80
  }
80
81
  }
81
82
  ?>
83
+ ```
82
84
 
83
85
 
84
86
  =================

3

指摘があったのでソースを表示しました

2019/10/10 11:20

投稿

scoco
scoco

スコア5

title CHANGED
File without changes
body CHANGED
@@ -19,6 +19,70 @@
19
19
  [参考にしたサイト](https://gist.github.com/KosukeGit/8e89ab13368c68dfac61903ee011e4bc)
20
20
  =================
21
21
 
22
+ <?php
23
+ require 'password.php'; // password_verfy()はphp 5.5.0以降の関数のため、バージョンが古くて使えない場合に使用
24
+ // セッション開始
25
+ session_start();
26
+ $db['host'] = "localhost"; // DBサーバのURL
27
+ $db['user'] = "hogeUser"; // ユーザー名
28
+ $db['pass'] = "hogehoge"; // ユーザー名のパスワード
29
+ $db['dbname'] = "loginManagement"; // データベース名
30
+ // エラーメッセージの初期化
31
+ $errorMessage = "";
32
+ // ログインボタンが押された場合
33
+ if (isset($_POST["login"])) {
34
+ // 1. ユーザIDの入力チェック
35
+ if (empty($_POST["userid"])) { // emptyは値が空のとき
36
+ $errorMessage = 'ユーザーIDが未入力です。';
37
+ } else if (empty($_POST["password"])) {
38
+ $errorMessage = 'パスワードが未入力です。';
39
+ }
40
+ if (!empty($_POST["userid"]) && !empty($_POST["password"])) {
41
+ // 入力したユーザIDを格納
42
+ $userid = $_POST["userid"];
43
+ // 2. ユーザIDとパスワードが入力されていたら認証する
44
+ $dsn = sprintf('mysql: host=%s; dbname=%s; charset=utf8', $db['host'], $db['dbname']);
45
+ // 3. エラー処理
46
+ try {
47
+ $pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
48
+ $stmt = $pdo->prepare('SELECT * FROM userData WHERE name = ?');
49
+ $stmt->execute(array($userid));
50
+ $password = $_POST["password"];
51
+ if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
52
+ if (password_verify($password, $row['password'])) {
53
+ session_regenerate_id(true);
54
+ // 入力したIDのユーザー名を取得
55
+ $id = $row['id'];
56
+ $sql = "SELECT * FROM userData WHERE id = $id"; //入力したIDからユーザー名を取得
57
+ $stmt = $pdo->query($sql);
58
+ foreach ($stmt as $row) {
59
+ $row['name']; // ユーザー名
60
+ }
61
+ $_SESSION["NAME"] = $row['name'];
62
+ header("Location: Main.php"); // メイン画面へ遷移
63
+ exit(); // 処理終了
64
+ } else {
65
+ // 認証失敗
66
+ $errorMessage = 'ユーザーIDあるいはパスワードに誤りがあります。';
67
+ }
68
+ } else {
69
+ // 4. 認証成功なら、セッションIDを新規に発行する
70
+ // 該当データなし
71
+ $errorMessage = 'ユーザーIDあるいはパスワードに誤りがあります。';
72
+ }
73
+ } catch (PDOException $e) {
74
+ $errorMessage = 'データベースエラー';
75
+ //$errorMessage = $sql;
76
+ // $e->getMessage() でエラー内容を参照可能(デバッグ時のみ表示)
77
+ // echo $e->getMessage();
78
+ }
79
+ }
80
+ }
81
+ ?>
82
+
83
+
84
+ =================
85
+
22
86
  何が間違っているのか全く見当もつきません。
23
87
  質問に対し情報足らずであれば申し訳ございません。
24
88
  回答お待ちしております。

2

誤字訂正

2019/10/10 11:11

投稿

scoco
scoco

スコア5

title CHANGED
File without changes
body CHANGED
@@ -1,8 +1,8 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
3
  PHP、MySQLを使い自作システムを作っています。
4
- 会員制にするためにログイン機能を付けたいのですが、ログイン画面だけがうまくいきません。
4
+ 会員制にするためにログイン機能(Login.php)を付けたいのですが、ログイン画面だけがうまくいきません。
5
- 会員新規登録画面はDBにもちゃんと登録できています。
5
+ 会員新規登録画面(signin.php)はDBにもちゃんと登録できています。
6
6
 
7
7
 
8
8
  ### 発生している問題・エラーメッセージ
@@ -14,7 +14,7 @@
14
14
 
15
15
  ### 該当のソースコード
16
16
 
17
- ↓こちら丸コピしました。(勿論、DB名など変えています)
17
+ ↓こちらのLogin.php 丸コピしました。(勿論、DB名など変えています)
18
18
 
19
19
  [参考にしたサイト](https://gist.github.com/KosukeGit/8e89ab13368c68dfac61903ee011e4bc)
20
20
  =================

1

URLの付け方を訂正しました。ご指摘ありがとうございます⁉

2019/10/10 10:57

投稿

scoco
scoco

スコア5

title CHANGED
File without changes
body CHANGED
@@ -15,8 +15,8 @@
15
15
  ### 該当のソースコード
16
16
 
17
17
  ↓こちらを丸コピしました。(勿論、DB名など変えています)
18
- https://gist.github.com/KosukeGit/8e89ab13368c68dfac61903ee011e4bc
19
18
 
19
+ [参考にしたサイト](https://gist.github.com/KosukeGit/8e89ab13368c68dfac61903ee011e4bc)
20
20
  =================
21
21
 
22
22
  何が間違っているのか全く見当もつきません。