Webアプリケーション入門
データベースと「ユーザーごとの情報表示」の仕組み
PHP × MySQL
ユーザー管理
データベース
認証・セキュリティ
CampusSquare を使ったことがある?
Aさん がログイン
Aさん
学籍番号: 2024001
自分の情報のみ表示
Bさん がログイン
Bさん
学籍番号: 2024002
自分の情報のみ表示
Cさん がログイン
Cさん
学籍番号: 2024003
自分の情報のみ表示
❓ どうして「自分の情報だけ」が表示されるの?
AさんがログインしたらBさんやCさんの情報まで見えたら困りますよね。
答えはシンプル
accountsテーブル(アカウント情報)
user_id
name
password_hash
1
Aさん
****
1
2
Bさん
****
2
3
Cさん
****
3
gradesテーブル(成績情報)
user_id
subject
score
1
数学
87
1
1
英語
92
1
2
数学
75
2
3
英語
68
3
user_id
で紐付け
🔑 user_id が共通キー
① Aさんがログイン → セッションに user_id = 1 を保存
② WHERE user_id = 1 でgradesテーブルを絞り込む
③ Aさんの成績だけが取得・表示される
ログイン〜成績表示の流れ
1
ログイン入力
学籍番号 & パスワード入力
2
認証チェック
accountsテーブルで照合
3
セッション保存
user_idをセッションに格納
4
DBクエリ発行
WHERE user_id = ? で抽出
5
成績情報を表示
自分の成績のみ画面に表示
PHP例:
$stmt = $pdo->prepare("SELECT * FROM grades WHERE user_id = ?");
$stmt->execute([$_SESSION["user_id"]]);
まとめ
テーブル設計
accountsテーブルとgradesテーブルに分けてデータを管理する
共通キー(user_id)
両テーブルにuser_idカラムを持たせることで紐付ける
WHERE句で絞り込み
ログイン中のuser_idでSELECT → 自分のデータだけ取得
セッションで状態管理
ログイン後はセッションにuser_idを保持し各リクエストで参照