概要
PHP 学習メモ。クラスの学習や簡単なログイン機能の実装。
内容
- クラス
- ログイン処理
- ログインフォーム
簡単なログイン機能を実装するため、MySQL データベースを用いてユーザー名とパスワードを保存するためのテーブルを作成する。ログインフォームにはユーザー名とパスワードを入力するフォームを用意し、ログイン時には入力されたデータをテーブルに問い合わせる。
1. クラス
クラスについて:
次の例では、mysqli
というクラスからインスタンスを作成し、コンストラクタの引数としてデータベースのホスト名やユーザー名を渡している。
<? php $mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
クラス内で定義した変数(プロパティ)や関数(メソッド)にアクセスするには ->
を用いる。次の例では、mysqli
クラスの prepare
というメソッドを渡して呼び出している。
<? php $sql = "SELECT id, username, password FROM users WHERE username = ?"; $stmt = $mysqli->prepare($sql);
mysqli
クラスについて:
2. ログイン処理
ログイン処理を行う PHP ファイル login.php
を次の内容で作成する:
<?php // データベース接続情報ファイル読み込み include '../inc/dbinfo.inc'; // データベース接続 $mysqli = new mysqli(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE); // ログイン処理 if ($_SERVER['REQUEST_METHOD'] == 'POST') { $username = $_POST['username']; $password = $_POST['password']; $sql = "SELECT id, username, password FROM users WHERE username = ?"; // プリペアドステートメントを作成 $stmt = $mysqli->prepare($sql); // 変数をバインド $stmt->bind_param('s', $username); // クエリ実行 $stmt->execute(); // クエリ実行結果オブジェクト取得 $result = $stmt->get_result(); // クエリ実行結果の最初の行を取得 $user = $result->fetch_assoc(); if ($user && password_verify($password, $user['password'])) { echo 'ログイン成功'; } else { echo 'ユーザー名またはパスワードが間違っています'; } } // データベース接続切断 $mysqli->close(); ?>
- プリペアードステートメント
SQLクエリのテンプレートを事前に準備し、後でパラメータをバインドすることができる機能。クエリテンプレート中の ?
はプレースホルダであり、bind_param
関数によってバインドする。
※プレースホルダとバインドについて
プレースホルダ:SQLクエリの中で使用される置換可能なパラメータ
バインド:プレースホルダに具体的な値を代入すること
mysqli_stmt
クラスについて:
- クエリ実行の流れ
mysqli クラス・・・データベース接続 ↓ mysqli_stmt クラス・・・クエリ実行 ↓ mysqli_result クラス・・・クエリ実行結果取得
mysqli_result
クラスについて:
3. ログインフォーム
ログインフォームを表示する PHP ファイル index.php
は次の内容で作成する:
<!DOCTYPE html> <head> <title>ログイン</title> </head> <body> <h1>ログインフォーム</h1> <form method="post"> <table> <tr> <td> <label for="username">ユーザー名:</label> <input type="text" id="username" name="username" required> </td> </tr> <tr> <td> <label for="password">パスワード:</label> <input type="password" id="password" name="password" required> </td> </tr> </table> <input type="submit" value="ログイン"> </form> </body> </html> <!-- ログイン処理 --> <?php require 'login.php'; ?>