exec("CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(255) NOT NULL UNIQUE, email VARCHAR(255) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, role_id INT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (role_id) REFERENCES roles(id) ON DELETE SET NULL )"); // Fetch all roles for the dropdown $roles = $pdo->query("SELECT * FROM roles ORDER BY name")->fetchAll(); // Handle Create and Update if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (isset($_POST['add_user'])) { $username = trim($_POST['username']); $email = trim($_POST['email']); $password = $_POST['password']; $role_id = $_POST['role_id']; if (!empty($username) && !empty($email) && !empty($password) && !empty($role_id)) { $hashed_password = password_hash($password, PASSWORD_DEFAULT); $stmt = $pdo->prepare("INSERT INTO users (username, email, password, role_id) VALUES (:username, :email, :password, :role_id)"); $stmt->execute([ 'username' => $username, 'email' => $email, 'password' => $hashed_password, 'role_id' => $role_id ]); } } elseif (isset($_POST['update_user'])) { $id = $_POST['user_id']; $username = trim($_POST['username']); $email = trim($_POST['email']); $password = $_POST['password']; $role_id = $_POST['role_id']; if (!empty($id) && !empty($username) && !empty($email) && !empty($role_id)) { if (!empty($password)) { $hashed_password = password_hash($password, PASSWORD_DEFAULT); $stmt = $pdo->prepare("UPDATE users SET username = :username, email = :email, password = :password, role_id = :role_id WHERE id = :id"); $stmt->execute([ 'username' => $username, 'email' => $email, 'password' => $hashed_password, 'role_id' => $role_id, 'id' => $id ]); } else { $stmt = $pdo->prepare("UPDATE users SET username = :username, email = :email, role_id = :role_id WHERE id = :id"); $stmt->execute([ 'username' => $username, 'email' => $email, 'role_id' => $role_id, 'id' => $id ]); } } } header("Location: users.php"); exit; } // Handle Delete if (isset($_GET['delete_id'])) { $id = $_GET['delete_id']; $stmt = $pdo->prepare("DELETE FROM users WHERE id = :id"); $stmt->execute(['id' => $id]); header("Location: users.php"); exit; } // Fetch all users with their role names $users = $pdo->query(" SELECT users.*, roles.name AS role_name FROM users LEFT JOIN roles ON users.role_id = roles.id ORDER BY users.id DESC ")->fetchAll(); // Fetch user for editing $editing_user = null; if (isset($_GET['edit_id'])) { $id = $_GET['edit_id']; $stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id"); $stmt->execute(['id' => $id]); $editing_user = $stmt->fetch(); } } catch (PDOException $e) { die("Database error: " . $e->getMessage()); } ?>