Liste des utilisateurs

Untitled

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

Untitled

<?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;
}