下記記事を参考に実装したログインフォーム。 本readme.mdは実装に際し調べた内容のメモ。
DB接続と特殊文字エンコードの処理を記述しているファイル。
HTMLにおいて特殊な意味を持つ特殊文字を、HTMLエンティティに変換する。
通常、オプションにはENT_QUOTES | ENT_HTML5を指定すればよい。
| 変換前 | 変換後 | 備考 |
|---|---|---|
| & | & |
|
| " | " |
|
| ' | ' |
ENT_QUOTES及びENT_HTML5が指定されている場合 |
| < | < |
|
| > | > |
TODO: 後で調べる
フォーム送信時の遷移先を自身にし、判定を行う。 入力内容に問題がなければmain.phpに遷移。 問題があった場合はエラーを表示する。
後から値が代入されることを示す。
ここでは、SQL実行時にexecuteメソッドの引数として値を配列として渡している。
$stmt = $pdo->prepare('SELECT * FROM User WHERE user_name = ?');
// SQLのパラメータを設定
$params = [];
$params[] = $userName;
// SQL実行
$stmt->execute($params); // '?'には$userNameが代入されるまたはbindValueメソッドを使用して渡すこともできる。
$stmt = $pdo->prepare('SELECT * FROM User WHERE user_name = :userName');
$stmt->bindValue(':userName', $userName);
$stmt->execute();セッション変数($_SESSION)を利用するための関数。
新しいセッションの開始、あるいは既存のセッションを再開する。
入力したパスワードが、password_hash()によって生成されたハッシュにマッチするか調べる。
元のデータを不規則な文字列に置換する処理をハッシュ化と呼び、その置換された文字列がハッシュ。
セッションを継続したまま、セッションIDを更新する。 ログイン状態をセッション変数に書き込む直前に実行することで、ログイン情報の情報の盗聴やセッションハイジャックを防ぐ。
session_regenerate_id(bool $delete_old_session = false): boolMySQL 5.7.34ではUNIQUE KEYの行でエラー。
以下のように直すとようになおすとテーブルが作成できた。
CREATE TABLE `User` (
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'AI',
`user_name` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '氏名',
`password` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'パスワード',
PRIMARY KEY (`id`),
- UNIQUE KEY `user_name` (`user_name`)
+ UNIQUE KEY (`user_name`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4;
INSERT INTO `User` (`id`, `user_name`, `password`)
VALUES
(1,'user','$2y$10$ecRmAWY4n/jLa0tTzIaG7.SMhb1TfdROy3nXeG5aVZorUX1n6/WHO');