Chuẩn hóa cơ sở dữ liệu
Hiện tại chúng ta đang lưu trữ trạng thái của người dùng
trong cùng một bảng với thông tin người dùng.
Tuy nhiên, điều này không đúng - chúng ta có được
một bảng không được chuẩn hóa, vì các từ 'user'
và 'admin' lặp lại nhiều lần.
Cần thực hiện chuẩn hóa - chúng ta sẽ tách
các trạng thái của mình ra một bảng riêng statuses:
| id | name |
|---|---|
| 1 | user |
| 2 | admin |
Và trong bảng users, chúng ta tạo cột
status_id. Bây giờ khi đăng ký
chúng ta sẽ ghi vào cột status_id
id của trạng thái từ bảng statuses:
<?php
$query = "INSERT INTO users
SET login='$login', password='$password', status_id='1'";
?>
Những thay đổi phức tạp nhất sẽ xảy ra khi xác thực:
để lấy trạng thái của người dùng,
cần thực hiện LEFT JOIN:
<?php
$login = $_POST['login'];
// Lấy người dùng theo login và join với trạng thái:
$query = "SELECT users.*, statuses.name as status FROM users
LEFT JOIN statuses
ON users.status_id=statuses.id WHERE login='$login'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
if (!empty($user)) {
$hash = $user['password'];
if (password_verify($_POST['password'], $hash)) {
$_SESSION['auth'] = true;
$_SESSION['status'] = $user['status']; // trạng thái
} else {
}
} else {
}
?>
Hãy chuyển đổi phần xác thực và đăng ký của bạn theo như đã mô tả trong lý thuyết.
Hãy thực hiện các thay đổi trong hoạt động của trang quản trị (hiển thị trạng thái người dùng, thay đổi trạng thái và vân vân).