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

質問編集履歴

3

追記を修正

2021/11/30 02:46

投稿

yayochan_0305
yayochan_0305

スコア1

title CHANGED
File without changes
body CHANGED
@@ -90,6 +90,4 @@
90
90
 
91
91
  【2021/11/30 追記】
92
92
  var_dump($_POST)は試したうえで、値が取れていたことを確認しました。
93
- var_dump(password_hash($_POST['pass']));とvar_dump($member['pass']);については、者は値が取れているのですが者は下記のエラーが発生していま
94
- マニュアルを見る感じだともう一つパラメータが必要なのかなと思いますが、ちょっと今試行錯誤してます。
95
- > Fatal error: Uncaught ArgumentCountError: password_hash() expects at least 2 arguments, 1 given in C:\xampp\htdocs\denshi\login.php:38 Stack trace: #0 C:\xampp\htdocs\denshi\login.php(38): password_hash('test03') #1 {main} thrown in C:\xampp\htdocs\denshi\login.php on line 38
93
+ var_dump(password_hash($_POST['pass'], PASSWORD_DEFAULT));とvar_dump($member['pass']);については、者はハッシュ値、者はあらかじめDBに登録しているパスワードが出力されした

2

login_form.phpのDB接続処理は、仕様変更で要となったので削除しました

2021/11/30 02:46

投稿

yayochan_0305
yayochan_0305

スコア1

title CHANGED
File without changes
body CHANGED
@@ -12,18 +12,6 @@
12
12
  ```php
13
13
  <html>
14
14
  <body>
15
- <?php
16
- //①PostgreDB接続
17
- $conn = "host=localhost dbname=postgres user=postgres password=pospos";
18
- $link = pg_connect($conn);
19
- if (!$link) {
20
- die('接続失敗です。'.pg_last_error());
21
- }
22
- //②DBから内容を取得
23
- $ms_names = pg_query('SELECT user_name FROM public.ms_user;');
24
- $user_names = pg_fetch_all($ms_names);
25
- $user = array_column($user_names,'user_name');
26
- ?>
27
15
  <form name="login_form" action="login.php" method="post">
28
16
  <div class="login_form_top">
29
17
  <h1>〇〇システム</h1>

1

・ご指摘いただいた通り、DBについて記載しました。登録処理はひとまずログインだけ先に実装しようとしているので未実装です。また、var_dump関連でいただいたアドバイスの試行結果についても追記しました

2021/11/30 02:44

投稿

yayochan_0305
yayochan_0305

スコア1

title CHANGED
File without changes
body CHANGED
@@ -14,7 +14,7 @@
14
14
  <body>
15
15
  <?php
16
16
  //①PostgreDB接続
17
- $conn = "host=localhost dbname=postgres user=postgres password=Admin6211";
17
+ $conn = "host=localhost dbname=postgres user=postgres password=pospos";
18
18
  $link = pg_connect($conn);
19
19
  if (!$link) {
20
20
  die('接続失敗です。'.pg_last_error());
@@ -26,25 +26,10 @@
26
26
  ?>
27
27
  <form name="login_form" action="login.php" method="post">
28
28
  <div class="login_form_top">
29
- <h1>電子帳簿管理システム</h1>
29
+ <h1>〇〇システム</h1>
30
30
  </div>
31
31
  <div class="login_form">
32
32
  <br>
33
- <!--セレクトボックスを表示する-->
34
- <label>ユーザー名:<label>
35
- <?php
36
- // ユーザー名を所持している場合は、Select出力をする
37
- if (!empty($user_names)){
38
- echo "<select name='user_name'>";
39
- }
40
- foreach ($user_names as $user) {
41
- echo '<option value="">'.current($user).'</option>';
42
- }
43
- if (!empty($user_names)){
44
- echo "</select>";
45
- }
46
- ?>
47
- <br>
48
33
  <label>ユーザーID:<label>
49
34
  <input type="id" name="user_id" placeholder="ユーザーIDを入力してください"><br>
50
35
  <label>パスワード:<label>
@@ -65,7 +50,7 @@
65
50
  //DB接続
66
51
  $dsn = "pgsql:dbname=postgres host=localhost port=5432'";
67
52
  $username = "postgres";
68
- $password = "Admin6211";
53
+ $password = "pospos";
69
54
  try {
70
55
  $dbh = new PDO($dsn, $username, $password);
71
56
  } catch (PDOException $e) {
@@ -73,18 +58,17 @@
73
58
  }
74
59
 
75
60
  //ユーザー情報の照合
76
- $sql = "SELECT * FROM ms_user WHERE user_id = :user_id";
61
+ $sql = "SELECT user_id,password FROM ms_user WHERE user_id = :user_id";
77
62
  $stmt = $dbh->prepare($sql);
78
63
  $stmt->bindValue(':user_id', $user_id);
79
64
  $stmt->execute();
80
65
  $member = $stmt->fetch();
81
66
 
82
67
  //パスワードにマッチしているかチェック
83
- if (password_verify(@$_POST['pass'], @$member['pass'])) {
68
+ if (password_verify(@$_POST['pass'], @$member['password'])) {
84
69
  //DBのユーザー情報をセッションに保存
85
- $_SESSION['user_name'] = $member['user_name'];
86
70
  $_SESSION['user_id'] = $member['user_id'];
87
- $_SESSION['pass'] = $member['pass'];
71
+ $_SESSION['pass'] = $member['password'];
88
72
  $msg = 'ログインしました。';
89
73
  $link = '<a href="menu.php">〇〇システム</a>';
90
74
  }
@@ -98,10 +82,26 @@
98
82
  <?php echo $link; ?>
99
83
  ```
100
84
 
85
+ ### DBについて
86
+ テーブル名:ms_user
87
+ 項目   :
88
+ user_id(character varying(50))→ユーザーID
89
+ user_name(character varying(20))→ユーザー名
90
+ password(character varying(30))→パスワード
91
+ auth(character varying(2))→権限
92
+ ※今回使うのは、user_idとpasswordです。
93
+ また、今回は単純にDBに先に流し込んでおいたデータを用いてひとまずログインを、という考え方でやっておりますので、登録処理については未実装です。
94
+
101
95
  ### 試したこと
102
96
 
103
97
  参考にしているのは、次のページです。
104
98
  https://qiita.com/ryo-futebol/items/5fb635199acc2fcbd3ff
105
99
  ひとまず、var_dump()で$memberの値が取れているのは確認しています。
106
100
  また、SQLについては、A5Mk2で流してみておそらく正しいことを確認しています。
107
- 完全に手づまりな状態です。助力いただければ幸いです。
101
+ 完全に手づまりな状態です。助力いただければ幸いです。
102
+
103
+ 【2021/11/30 追記】
104
+ var_dump($_POST)は試したうえで、値が取れていたことを確認しました。
105
+ var_dump(password_hash($_POST['pass']));とvar_dump($member['pass']);については、後者は値が取れているのですが、前者は下記のエラーが発生しています。
106
+ マニュアルを見る感じだともう一つパラメータが必要なのかなと思いますが、ちょっと今試行錯誤してます。
107
+ > Fatal error: Uncaught ArgumentCountError: password_hash() expects at least 2 arguments, 1 given in C:\xampp\htdocs\denshi\login.php:38 Stack trace: #0 C:\xampp\htdocs\denshi\login.php(38): password_hash('test03') #1 {main} thrown in C:\xampp\htdocs\denshi\login.php on line 38