データベースに格納されているIDと暗号化されたパスワードを利用し、ログインします。
機能概要
プログラミングコード
「user_login.php」ログインページファイル
データベースに登録されているユーザー情報をもとにログインします。
- 4行目:「config.php」を読み込み、その中の変数情報を使用することができるようになります。
- 9行目:「POST」の場合のみ、処理を行うための分岐処理です。
- 12行目~13行目:「POST」を利用し「ページ内のテキストボックス」からメールアドレスとパスワードを受け取り、変数に代入しています。
- 28~34行目:SQL文を利用し、「user_mst」から値を取得しています。
ここでポイントなのが、条件にパスワードが含まれずにメールアドレスだけで抽出し、「password」カラムを取得していることです。 - 39行目:パスワードを比較し、ログインさせるか、させないかの分岐処理です。
「password_verify」は、今回入力されたパスワードと暗号化されたパスワードとを比較することができる関数です。
password_verify(string$password
, string$hash
): bool
詳細はこちら
<?php
//データベース接続情報を格納
include("config.php");
$txt_email = "";
$txt_pass = "";
if($_SERVER['REQUEST_METHOD'] === 'POST'){
//POSTデータの取得
$txt_email = $_POST['txt_email'];
$txt_pass = $_POST['txt_pass'];
$err = "";
if($txt_email == ""){
$err .= "【メールアドレス】";
}
if($txt_pass == ""){
$err .= "【パスワード】";
}
if($err == ""){
try{
$dbh = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "select"
." um.user_no"
.",um.user_kj"
.",um.password"
." from user_mst um"
." where um.email = :email"
." and um.delete_ku = '0'";
$stmt = $dbh->prepare($sql);
$stmt->bindValue(':email', $txt_email , PDO::PARAM_STR);
$stmt->execute();
$result = $stmt->fetch();
if(password_verify($txt_pass, $result['password'])){
echo $result['user_kj']."さん、ログイン認証に成功しました";
}else{
echo "ログイン認証に失敗しました";
}
}catch (PDOException $e){
echo($e->getMessage());
die();
}
}else{
echo $err."を修正してください。";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>ログイン</title>
</head>
<body>
<h1>ログイン</h1>
<form action="" method="post">
<p>
<label>メールアドレス:</label>
<input type="text" name="txt_email">
</p>
<p>
<label>パスワード:</label>
<input type="password" name="txt_pass">
</p>
<input type="submit" name="submit" value="ログインする">
</form>
</body>
</html>
演習問題
- ログイン処理後に、セキュリティが掛かったページに遷移させる処理を記述してみよう。
- 次の単元で学ぶ、セッションを利用してみよう。