'u.nome', 'email' => 'u.email', 'perfil' => 'p.nome', 'status' => 'u.ativo', 'ultimo_login' => 'u.ultimo_login', ]; const AO_USUARIOS_POR_PAGINA = 10; $erro = null; $sucesso = null; if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['acao'] ?? '') === 'excluir') { $id = (int) ($_POST['id'] ?? 0); if ($id === (int) $ao_usuario_atual['id']) { $erro = 'Você não pode excluir o próprio usuário enquanto estiver logado com ele.'; } else { $pdo->prepare('DELETE FROM usuarios WHERE id = ?')->execute([$id]); header('Location: usuarios.php?excluido=1'); exit; } } if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['acao'] ?? '') === 'salvar') { $id = (int) ($_POST['id'] ?? 0); $nome = trim($_POST['nome'] ?? ''); $email = trim($_POST['email'] ?? ''); $senha = (string) ($_POST['senha'] ?? ''); $confirmar_senha = (string) ($_POST['confirmar_senha'] ?? ''); $perfil_id = (int) ($_POST['perfil_id'] ?? 0); $ativo = isset($_POST['ativo']) ? 1 : 0; if ($nome === '' || $email === '' || $perfil_id === 0) { $erro = 'Preencha nome, e-mail e perfil.'; } elseif ($id === 0 && $senha === '') { $erro = 'Informe uma senha para o novo usuário.'; } elseif ($senha !== '' && $senha !== $confirmar_senha) { $erro = 'A senha e a confirmação de senha não são iguais.'; } else { try { if ($id > 0) { if ($senha !== '') { $stmt = $pdo->prepare('UPDATE usuarios SET nome=?, email=?, senha_hash=?, perfil_id=?, ativo=? WHERE id=?'); $stmt->execute([$nome, $email, password_hash($senha, PASSWORD_DEFAULT), $perfil_id, $ativo, $id]); } else { $stmt = $pdo->prepare('UPDATE usuarios SET nome=?, email=?, perfil_id=?, ativo=? WHERE id=?'); $stmt->execute([$nome, $email, $perfil_id, $ativo, $id]); } } else { $stmt = $pdo->prepare('INSERT INTO usuarios (nome, email, senha_hash, perfil_id, ativo) VALUES (?,?,?,?,?)'); $stmt->execute([$nome, $email, password_hash($senha, PASSWORD_DEFAULT), $perfil_id, $ativo]); } header('Location: usuarios.php?salvo=1'); exit; } catch (PDOException $e) { $erro = ($e->getCode() === '23000') ? 'Já existe um usuário com este e-mail.' : ('Erro ao salvar: ' . $e->getMessage()); } } } $editando = null; if (isset($_GET['editar'])) { $stmt = $pdo->prepare('SELECT * FROM usuarios WHERE id = ?'); $stmt->execute([(int) $_GET['editar']]); $editando = $stmt->fetch() ?: null; } // Se o formulário foi enviado e deu erro, mantemos os dados digitados na // tela (menos as senhas, por segurança) em vez de limpar tudo. if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['acao'] ?? '') === 'salvar' && $erro) { $editando = [ 'id' => $id, 'nome' => $nome, 'email' => $email, 'perfil_id' => $perfil_id, 'ativo' => $ativo, ]; } if (isset($_GET['salvo'])) $sucesso = 'Usuário salvo com sucesso.'; if (isset($_GET['excluido'])) $sucesso = 'Usuário excluído.'; $perfis = $pdo->query('SELECT id, nome FROM perfis WHERE ativo = 1 ORDER BY nome')->fetchAll(); // Ordenação do grid: valida contra a lista fixa acima antes de montar o SQL. $ao_ordenar = (string) ($_GET['ordenar'] ?? 'nome'); if (!array_key_exists($ao_ordenar, AO_USUARIOS_COLUNAS_ORDENAVEIS)) { $ao_ordenar = 'nome'; } $ao_direcao = strtolower((string) ($_GET['direcao'] ?? 'asc')) === 'desc' ? 'desc' : 'asc'; $ao_ordenar_sql = AO_USUARIOS_COLUNAS_ORDENAVEIS[$ao_ordenar] . ' ' . strtoupper($ao_direcao); // Paginação do grid. $ao_total_usuarios = (int) $pdo->query('SELECT COUNT(*) FROM usuarios')->fetchColumn(); $ao_total_paginas = max(1, (int) ceil($ao_total_usuarios / AO_USUARIOS_POR_PAGINA)); $ao_pagina_atual = (int) ($_GET['pagina'] ?? 1); if ($ao_pagina_atual < 1) $ao_pagina_atual = 1; if ($ao_pagina_atual > $ao_total_paginas) $ao_pagina_atual = $ao_total_paginas; $ao_offset = ($ao_pagina_atual - 1) * AO_USUARIOS_POR_PAGINA; $usuarios = $pdo->query( "SELECT u.*, p.nome AS perfil_nome FROM usuarios u INNER JOIN perfis p ON p.id = u.perfil_id ORDER BY {$ao_ordenar_sql} LIMIT " . AO_USUARIOS_POR_PAGINA . " OFFSET {$ao_offset}" )->fetchAll(); /** Monta a URL do grid preservando ordenação/página, trocando só o que for passado em $sobrescrever. */ function ao_usuarios_url(array $sobrescrever, $ordenar, $direcao, $pagina) { $params = array_merge(['ordenar' => $ordenar, 'direcao' => $direcao, 'pagina' => $pagina], $sobrescrever); return 'usuarios.php?' . http_build_query($params); } require __DIR__ . '/includes/header.php'; ?>

Usuários

Usuários cadastrados
'Nome', 'email' => 'E-mail', 'perfil' => 'Perfil', 'status' => 'Status', 'ultimo_login' => 'Último login', ]; ?> $ao_col_rotulo): ?>
Nunca Editar
1): ?>
Página de ( usuários)