前提・実現したいこと
PHP初心者です。何卒宜しくお願い致します。
PHPで、DB(PostgreSQL)に登録している名前とID、パスワードを照合し、ログインする画面を作っています。
課題
login_form.phpで、DB上正しいデータを入力しているにもかかわらず、ログインが成功しない
該当のソースコード①login_form.php
php
1<html> 2<body> 3 <form name="login_form" action="login.php" method="post"> 4 <div class="login_form_top"> 5 <h1>〇〇システム</h1> 6 </div> 7 <div class="login_form"> 8 <br> 9 <label>ユーザーID:<label> 10 <input type="id" name="user_id" placeholder="ユーザーIDを入力してください"><br> 11 <label>パスワード:<label> 12 <input type="password" name="pass" placeholder="パスワードを入力してください"> 13 </div> 14 <button type="submit" value="ログイン">ログイン</button> 15</form> 16 </body> 17</html>
該当のソースコード②login.php
php
1<?php 2session_start(); 3$user_id = $_POST['user_id']; 4//DB接続 5$dsn = "pgsql:dbname=postgres host=localhost port=5432'"; 6$username = "postgres"; 7$password = "pospos"; 8try { 9 $dbh = new PDO($dsn, $username, $password); 10} catch (PDOException $e) { 11 $msg = $e->getMessage(); 12} 13 14//ユーザー情報の照合 15$sql = "SELECT user_id,password FROM ms_user WHERE user_id = :user_id"; 16$stmt = $dbh->prepare($sql); 17$stmt->bindValue(':user_id', $user_id); 18$stmt->execute(); 19$member = $stmt->fetch(); 20 21//パスワードにマッチしているかチェック 22if (password_verify(@$_POST['pass'], @$member['password'])) { 23 //DBのユーザー情報をセッションに保存 24 $_SESSION['user_id'] = $member['user_id']; 25 $_SESSION['pass'] = $member['password']; 26 $msg = 'ログインしました。'; 27 $link = '<a href="menu.php">〇〇システム</a>'; 28 } 29 else { 30 $msg = 'ユーザーIDもしくはパスワードが間違っています。'; 31 $link = '<a href="login_form.php">戻る</a>'; 32} 33?> 34 35<h1><?php echo $msg; ?></h1> 36<?php echo $link; ?>
DBについて
テーブル名:ms_user
項目 :
user_id(character varying(50))→ユーザーID
user_name(character varying(20))→ユーザー名
password(character varying(30))→パスワード
auth(character varying(2))→権限
※今回使うのは、user_idとpasswordです。
また、今回は単純にDBに先に流し込んでおいたデータを用いてひとまずログインを、という考え方でやっておりますので、登録処理については未実装です。
試したこと
参考にしているのは、次のページです。
https://qiita.com/ryo-futebol/items/5fb635199acc2fcbd3ff
ひとまず、var_dump()で$memberの値が取れているのは確認しています。
また、SQLについては、A5Mk2で流してみておそらく正しいことを確認しています。
完全に手づまりな状態です。助力いただければ幸いです。
【2021/11/30 追記】
var_dump($_POST)は試したうえで、値が取れていたことを確認しました。
var_dump(password_hash($_POST['pass'], PASSWORD_DEFAULT));とvar_dump($member['pass']);については、前者はハッシュ値、後者はあらかじめDBに登録しているパスワードが出力されました。
回答2件
あなたの回答
tips
プレビュー