prepare("SELECT id, name, email, role FROM users WHERE id = ?");
$stmt->execute([$edit_user_id]);
$edit_user = $stmt->fetch(PDO::FETCH_ASSOC);
if ($edit_user) {
$name = $edit_user['name'];
$email = $edit_user['email'];
$role = $edit_user['role'];
} else {
$_SESSION['error_message'] = 'User not found.';
header('Location: admin_users.php');
exit();
}
} catch (PDOException $e) {
$_SESSION['error_message'] = 'Error fetching user for edit: ' . htmlspecialchars($e->getMessage());
header('Location: admin_users.php');
exit();
}
}
}
// Handle form submission for Add or Edit
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (isset($_POST['add_user']) || isset($_POST['edit_user'])) {
$name = trim($_POST['name']);
$email = trim($_POST['email']);
$role = $_POST['role'];
$password = isset($_POST['password']) ? $_POST['password'] : '';
$confirm_password = isset($_POST['confirm_password']) ? $_POST['confirm_password'] : '';
$current_user_id = isset($_POST['user_id']) ? filter_var($_POST['user_id'], FILTER_VALIDATE_INT) : null;
if (empty($name)) {
$errors[] = 'Name is required.';
}
if (empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors[] = 'Valid email is required.';
}
if (empty($role)) {
$errors[] = 'Role is required.';
}
if (isset($_POST['add_user'])) { // For adding new user
if (empty($password)) {
$errors[] = 'Password is required.';
}
if ($password !== $confirm_password) {
$errors[] = 'Passwords do not match.';
}
} else if (isset($_POST['edit_user'])) { // For editing existing user
if (!empty($password) && $password !== $confirm_password) {
$errors[] = 'Passwords do not match.';
}
}
if (empty($errors)) {
try {
if (isset($_POST['add_user'])) {
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
$stmt = db()->prepare("INSERT INTO users (name, email, password, role) VALUES (?, ?, ?, ?)");
$stmt->execute([$name, $email, $hashed_password, $role]);
$_SESSION['success_message'] = 'User added successfully!';
} else if (isset($_POST['edit_user'])) {
$sql = "UPDATE users SET name = ?, email = ?, role = ?";
$params = [$name, $email, $role];
if (!empty($password)) {
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
$sql .= ", password = ?";
$params[] = $hashed_password;
}
$sql .= " WHERE id = ?";
$params[] = $current_user_id;
$stmt = db()->prepare($sql);
$stmt->execute($params);
$_SESSION['success_message'] = 'User updated successfully!';
}
header('Location: admin_users.php');
exit();
} catch (PDOException $e) {
if ($e->getCode() === '23000') { // Duplicate entry
$errors[] = 'User with this email already exists.';
} else {
$errors[] = 'Error processing user: ' . htmlspecialchars($e->getMessage());
}
}
}
}
}
?>