Normalización de base de datos
Actualmente almacenamos los estados de nuestros usuarios
en la misma tabla donde están los propios usuarios.
Sin embargo, esto es incorrecto: obtenemos
una tabla no normalizada, ya que las palabras 'user'
y 'admin' se repiten muchas veces.
Es necesario realizar la normalización: extraigamos
nuestros estados a una tabla separada statuses:
| id | name |
|---|---|
| 1 | user |
| 2 | admin |
Y en la tabla users crearemos una columna
status_id. Ahora durante el registro
en la columna status_id escribiremos
el id del estado de la tabla statuses:
<?php
$query = "INSERT INTO users
SET login='$login', password='$password', status_id='1'";
?>
Los cambios más complejos ocurrirán durante la autorización:
para obtener el estado del usuario,
será necesario realizar un LEFT JOIN:
<?php
$login = $_POST['login'];
// Obtenemos el usuario por el login y unimos el estado:
$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']; // estado
} else {
}
} else {
}
?>
Rehagan su autorización y registro de acuerdo con lo descrito en la teoría.
Introduzcan cambios en el funcionamiento del panel de administración (visualización de los estados de los usuarios, cambios de estados y así sucesivamente).