機能概要

データベースに格納されているIDと暗号化されたパスワードを利用し、ログインします。

プログラミングコード

「user_login.php」ログインページファイル

データベースに登録されているユーザー情報をもとにログインします。

ユーザーマスタ(user_mst)の構造はこちら

  • 4行目:「config.php」を読み込み、その中の変数情報を使用することができるようになります。
  • 9行目:「POST」の場合のみ、処理を行うための分岐処理です。
  • 12行目~13行目:「POST」を利用し「ページ内のテキストボックス」からメールアドレスとパスワードを受け取り、変数に代入しています。
  • 28~34行目:SQL文を利用し、「user_mst」から値を取得しています。
    ここでポイントなのが、条件にパスワードが含まれずにメールアドレスだけで抽出し、「password」カラムを取得していることです。
  • 39行目:パスワードを比較し、ログインさせるか、させないかの分岐処理です。
    「password_verify」は、今回入力されたパスワードと暗号化されたパスワードとを比較することができる関数です。
    password_verify(string $passwordstring $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>

演習問題

  1. ログイン処理後に、セキュリティが掛かったページに遷移させる処理を記述してみよう。
  2. 次の単元で学ぶ、セッションを利用してみよう。