Normalisation de la base de données
Actuellement, nous stockons les statuts de nos utilisateurs
dans la même table que les utilisateurs eux-mêmes.
Cependant, ceci est incorrect - nous nous retrouvons avec
une table non normalisée, car les mots 'user'
et 'admin' se répètent de nombreuses fois.
Il est nécessaire d'effectuer une normalisation - extrayons
nos statuts dans une table séparée statuses :
| id | name |
|---|---|
| 1 | user |
| 2 | admin |
Et dans la table users, créons une colonne
status_id. Désormais, lors de l'inscription
nous écrirons dans la colonne status_id
l'id du statut provenant de la table statuses :
<?php
$query = "INSERT INTO users
SET login='$login', password='$password', status_id='1'";
?>
Les changements les plus complexes auront lieu lors de l'authentification :
pour obtenir le statut de l'utilisateur,
il faudra exécuter une LEFT JOIN :
<?php
$login = $_POST['login'];
// Obtenons l'utilisateur par son login et joignons le statut :
$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']; // statut
} else {
}
} else {
}
?>
Modifiez votre authentification et votre inscription conformément à ce qui est décrit dans la théorie.
Apportez les modifications dans le fonctionnement de l'administration (affichage des statuts des utilisateurs, modification des statuts et ainsi de suite).