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:

html<?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:

html<?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 {
    
  }
?>
Задание 1

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.

Задание 2

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).