Liste des utilisateurs

<?php
// src/users/index.php
ob_start();
require_once '../config.php';
$sql = "SELECT users.id, username, email, GROUP_CONCAT(role_name) as role_name
FROM users
left JOIN user_role ON users.id = user_role.user_id
left JOIN roles ON user_role.role_id = roles.id
GROUP BY users.id
ORDER BY users.id";
$result = $conn->query($sql);
$users = $result->fetch_all(MYSQLI_ASSOC);
// var_dump($users);
?>
<?php if ($result->num_rows > 0) : ?>
<table>
<tr>
<th>ID</th>
<th>Nom d'utilisateur</th>
<th>Email</th>
<th>Roles</th>
<th>Action</th>
</tr>
<?php foreach ($users as $user) : ?>
<tr>
<td><?php echo $user['id'] ?></td>
<td>
<a href="form_update.php?id=<?= $user['id'] ?>">
<?= $user['username'] ?>
</a>
</td>
<td><?= $user['email'] ?></td>
<td>
<?php
if ($user['role_name']) :
$roles = explode(',', $user['role_name']);
foreach ($roles as $role) : ?>
<span class="badge <?= $role ?>"><?= $role ?></span>
<?php endforeach ?>
<?php endif ?>
</td>
<td>
<a href="delete.php?id=<?= $user['id'] ?>">🗑️</a>
</td>
</tr>
<?php endforeach ?>
</table>
<?php else : ?>
<p>Pas de résultats</p>
<?php endif;
$title = 'Liste des utilisateurs';
$content = ob_get_clean();
require '../layout/layout.php';
/* input.css */
@tailwind base;
@tailwind components;
@tailwind utilities;
button {
@apply bg-blue-500 text-white py-2 px-4 rounded w-full;
}
a {
@apply text-blue-500 hover:underline;
}
input:not([type='checkbox']) {
@apply w-full p-2 border border-blue-300 rounded my-1 focus:border-blue-500 focus-visible:outline-none;
}
.badge {
@apply bg-gray-500 text-white py-0 px-1 rounded text-xs;
}
.badge.Admin {
@apply bg-orange-500; /* Couleur pour Admin */
}
.badge.Contributor {
@apply bg-blue-500; /* Couleur pour Admin */
}
.badge.Editor {
@apply bg-purple-500; /* Couleur pour Admin */
}
.badge.Viewer {
@apply bg-green-500; /* Couleur pour Viewer */
}
.badge.Moderator {
@apply bg-yellow-500; /* Couleur pour Moderator */
}
table {
@apply w-full bg-gray-50 rounded-md;
}
table tr:not(:first-child):not(:last-child) {
@apply border border-gray-200 px-2;
}
table td {
@apply px-2;
}
Modification d'Utilisateur (avec select multiple)

<?php
// src/users/form_update.php
ob_start();
require_once '../config.php';
$id = $_GET['id'];
// Obtenir les informations de l'utilisateur
$sql = "SELECT id, username, email FROM users WHERE id = $id";
$result = $conn->query($sql);
$user = $result->fetch_assoc();
// Obtenir tous les rôles disponibles
$sql_roles = "SELECT id, role_name FROM roles";
$result_roles = $conn->query($sql_roles);
$roles = $result_roles->fetch_all(MYSQLI_ASSOC);
// Obtenir les rôles de l'utilisateur
$sql_user_roles = "SELECT role_id FROM user_role WHERE user_id = $id";
$result_user_roles = $conn->query($sql_user_roles);
$user_roles = $result_user_roles->fetch_all(MYSQLI_ASSOC);
$user_roles_ids = array_column($user_roles, 'role_id');
?>
<form action="update.php" method="post">
ID:
<input type="text" name="id" value="<?= $id ?>" readonly><br>
Nom d'utilisateur:
<input type="text" name="username" value="<?= $user['username'] ?>"><br>
Email:
<input type="email" name="email" value="<?= $user['email'] ?>"><br>
Rôles:
<select name="roles[]" multiple>
<?php foreach($roles as $role): ?>
<option value="<?= $role['id'] ?>" <?= in_array($role['id'], $user_roles_ids) ? 'selected' : '' ?>>
<?= $role['role_name'] ?>
</option>
<?php endforeach; ?>
</select><br>
<button>Mettre à jour</button>
</form>
<?php
$title = "Modification d'utilisateur";
$content = ob_get_clean();
require '../layout/layout.php';
<?php
// src/users/update.php
require_once '../config.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$id = $_POST['id'];
$username = $_POST['username'];
$email = $_POST['email'];
$roles = isset($_POST['roles']) ? $_POST['roles'] : [];
// Mettre à jour les informations de l'utilisateur
$sql = "UPDATE users SET username=?, email=? WHERE id=?";
$stmt = $conn->prepare($sql);
if ($stmt) {
$stmt->bind_param("ssi", $username, $email, $id);
if ($stmt->execute()) {
// Supprimer les rôles actuels de l'utilisateur
$sql_delete_roles = "DELETE FROM user_role WHERE user_id=?";
$stmt_delete = $conn->prepare($sql_delete_roles);
if ($stmt_delete) {
$stmt_delete->bind_param("i", $id);
$stmt_delete->execute();
}
// Insérer les nouveaux rôles
$sql_insert_role = "INSERT INTO user_role (user_id, role_id) VALUES (?, ?)";
$stmt_insert = $conn->prepare($sql_insert_role);
if ($stmt_insert) {
foreach ($roles as $role_id) {
$stmt_insert->bind_param("ii", $id, $role_id);
$stmt_insert->execute();
}
}
header('location:index.php');
} else {
echo "Erreur : " . $sql . "<br>" . $stmt->error;
}
} else {
echo "Erreur lors de la préparation de la requête : " . $conn->error;
}
}
Ajouter un Utilisateur (avec checkbox)
<?php
// src/users/form_add.php
ob_start();
require_once '../config.php';
// Obtenir tous les rôles disponibles
$sql_roles = "SELECT id, role_name FROM roles";
$result_roles = $conn->query($sql_roles);
$roles = $result_roles->fetch_all(MYSQLI_ASSOC);
?>
<form action="add.php" method="POST">
Nom d'utilisateur: <input type="text" name="username"><br>
Email: <input type="email" name="email"><br>
Mot de passe: <input type="password" name="password"><br>
Rôles:<br>
<?php foreach ($roles as $role): ?>
<label>
<input type="checkbox" name="roles[]" value="<?= $role['id'] ?>">
<?= $role['role_name'] ?>
</label><br>
<?php endforeach; ?>
<button>Ajouter</button>
</form>
<?php
$title = "Ajouter un utilisateur";
$content = ob_get_clean();
require '../layout/layout.php';
<?php
// src/users/add.php
require_once '../config.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = $_POST['username'];
$email = $_POST['email'];
$password = password_hash($_POST['password'], PASSWORD_BCRYPT);
$roles = isset($_POST['roles']) ? $_POST['roles'] : [];
// Insérer l'utilisateur
$sql = "INSERT INTO users (username, email, password) VALUES (?, ?, ?)";
$stmt = $conn->prepare($sql);
if ($stmt) {
$stmt->bind_param("sss", $username, $email, $password);
if ($stmt->execute()) {
$user_id = $stmt->insert_id;
// Insérer les rôles
$sql_insert_role = "INSERT INTO user_role (user_id, role_id) VALUES (?, ?)";
$stmt_insert = $conn->prepare($sql_insert_role);
if ($stmt_insert) {
foreach ($roles as $role_id) {
$stmt_insert->bind_param("ii", $user_id, $role_id);
$stmt_insert->execute();
}
}
header('location:index.php');
} else {
echo "Erreur : " . $sql . "<br>" . $stmt->error;
}
} else {
echo "Erreur lors de la préparation de la requête : " . $conn->error;
}
}
Supprimer un Utilisateur
<?php
// src/users/delete.php
require_once '../config.php';
$id = $_GET['id'];
// Supprimer les rôles associés à l'utilisateur
$sql_delete_roles = "DELETE FROM user_role WHERE user_id = ?";
$stmt_delete_roles = $conn->prepare($sql_delete_roles);
if ($stmt_delete_roles) {
$stmt_delete_roles->bind_param("i", $id);
$stmt_delete_roles->execute();
}
// Supprimer l'utilisateur
$sql_delete_user = "DELETE FROM users WHERE id = ?";
$stmt_delete_user = $conn->prepare($sql_delete_user);
if ($stmt_delete_user) {
$stmt_delete_user->bind_param("i", $id);
if ($stmt_delete_user->execute()) {
header('location:index.php');
} else {
echo "Erreur : " . $sql_delete_user . "<br>" . $stmt_delete_user->error;
}
} else {
echo "Erreur lors de la préparation de la requête : " . $conn->error;
}