JAMES WEB
Aprenda como se faz.
CRUD Usuários (Listar usuários)
No coração de qualquer aplicação web dinâmica reside a habilidade de gerenciar dados de usuários. Seja para um simples fórum, uma loja virtual complexa ou um sistema de gerenciamento de conteúdo, a capacidade de criar, ler, atualizar e deletar registros de usuários é fundamental. E o PHP, com sua sintaxe clara e ecossistema robusto, é uma ferramenta poderosa para realizar essas operações, conhecidas coletivamente como CRUD (Create, Read, Update, Delete).
Neste Módulo, vamos mergulhar no universo do CRUD de usuários com PHP. Exploraremos desde os conceitos básicos até as melhores práticas para implementar essas funcionalidades de forma eficiente e segura na nossa loja.
Para darmos início à implementação do CRUD de usuários, é fundamental estabelecermos a estrutura visual da nossa aplicação. Para isso, disponibilizamos os templates user.html, users-create.html e users-update.html. Faça o download desses arquivos e salve-os na pasta admin do seu projeto. Esses templates servirão como moldes para a criação, edição e visualização individual de usuários.

Listar Usuários (read)
Nossa primeira funcionalidade será listar todos os usuários cadastrados no sistema. Para isso, vamos configurar uma nova rota em nosso projeto. Lembramos que já existem alguns usuários cadastrados no banco de dados para teste.
Com o Sublime-text crie um novo arquivo chamado admin-users.php na pasta admin. Como é uma nova rota temos de incorporá-lo no arquivo index.php. Abra o arquivo index.php em seu editor de código e localize a seção onde as instruções require estão listadas e insira a linha “require_once(“admin-users.php”);”.
Agora edite o arquivo admin-users.php conforme o modelo a seguir:
PHP: admin-users.php
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php use \Hcode\PageAdmin; use \Hcode\Model\User; // Rota listar usuário (admin/users) $app ->get( '/admin/users' , function () { User::verifyLogin(); $users = User::listAll(); $page = new PageAdmin(); $page ->setTpl( "users" , array ( "users" => $users )); ?> |
Análise Linha a Linha Rota Listar usuários.
- L6 – $app->get(‘/admin/users’, function() {:
Essa linha define uma rota para a aplicação executar o código dentro da função anônima function() {: - L7 – User::verifyLogin();:
Essa linha chama um método estático verifyLogin() da classe User. Essa função verifica se o usuário está logado no sistema. Se não estiver, ele será redirecionado. - L8 – $users = User::listAll();:
Essa linha chama outro método estático da classe User chamado listAll(). Este método busca todos os usuários do banco de dados e armazena o resultado em um array na variável $users. - L9 – $page = new PageAdmin();:
Aqui, um novo objeto da classe PageAdmin é criado e atribuído à variável $page. Essa classe é responsável por renderizar a página administrativa. - L10 – $page->setTpl(“users”, array( “users”=>$users ));:
Essa linha chama o método setTpl() do objeto $page, passando dois argumentos: “users“: É o template (users.html) que será utilizado para renderizar a página. - L11 – array(“users”=>$users):
Um array associativo com um único elemento. A chave users contém o array de usuários que foi obtido anteriormente. Isso significa que os dados dos usuários serão passados para o template para serem exibidos na página.
Criando a funçao listAll()
Para atender a linha 8 $users = User::listAll();: temos de criar a função estática listAll() dentro da Classe User (no arquivo users.php). Essa função é responsável por retornar uma lista de todos os usuários do sistema. Adicione esta função conforme exemplo a seguir:
PHP: users.php
1 2 3 4 5 6 7 8 9 10 11 12 | <?php // ... início do código public static function listAll() { $sql = new Sql(); return $sql ->select("SELECT * FROM tb_users a INNER JOIN tb_persons b USING(idperson) ORDER BY b.desperson"); } // resto do código ... ?> |
Análise função listAll():
- L4 – public static function listAll():
Indica que a função é visível tanto dentro quanto fora da classe. Significa que a função pertence à classe e não a um objeto específico. Isso permite que seja chamada diretamente a partir da classe, sem a necessidade de criar um objeto. - L6 – $sql = new Sql();:
Cria um novo objeto da classe Sql. Essa classe é responsável por executar consultas SQL. - L7 – return $sql->select(“SELECT * FROM tb_users a INNER JOIN tb_persons b USING(idperson) ORDER BY b.desperson”);:
- return: Indica que o resultado da expressão será retornado como valor da função.
- $sql->select(…):
Chama o método select() do objeto sql, passando uma consulta SQL como argumento.
- SELECT * FROM tb_users a INNER JOIN tb_persons b USING(idperson) ORDER BY b.desperson:
- SELECT *:
Seleciona todas as colunas das tabelas envolvidas. - FROM tb_users a:
Especifica a tabela tb_users e a dá o alias a para facilitar a referência. - INNER JOIN tb_persons b:
Realiza uma junção da tabela tb_persons e a dá o alias b. - USING(idperson):
Indica que as tabelas estão relacionadas pelo campo idperson. - ORDER BY b.desperson:
Ordena o resultado pelo campo desperson da tabela tb_persons.
- SELECT *:
- SELECT * FROM tb_users a INNER JOIN tb_persons b USING(idperson) ORDER BY b.desperson:
Chamando a tela de usuários
O próximo passo é configurar o menu da página administrativa para chamar a rota listar usuários. Para isto acesse o arquivo header.html na pasta views/admin. localize a seguinte linha:
<li class=”active”><a href=”#”><i class=”fa fa-users”></i><span><Link /a>
- {loop=”$users”}: indica o início de um loop. Isso significa que o código dentro do loop será repetido para cada item dentro de uma lista chamada “$users”. Essa lista contém informações sobre os usuários.
- Variáveis :Dentro do loop, as expressões como {$value.iduser} acessam os valores de cada usuário. Por exemplo, $value representa um usuário específico da lista, e iduser é um campo desse usuário (como o ID único do usuário).
- Condições: A linha {if=”$value.inadmin == 1″}Sim{else}Não{/if} :mostra como usar uma condição dentro do template. Se o campo inadmin do usuário for igual a 1, será exibido “Sim”, caso contrário, será exibido “Não”.
Substitua por:
<li class=”active”><a href=”/admin/users”><i class=”fa fa-users”></i><span>Usuários</span></li>
Preparando o template users.html para exibir os usuários cadastrados.
Agora temos de alterar o template users.html (dentro da pasta views/admin) para exibir a listagem de usuários com uma estrutura de tabela entre as tags <tbody> e </tbody>. Altere como exemplo a seguir:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <tbody> {loop= "$users" } <tr> <td>{ $value .iduser}</td> <td>{ $value .desperson}</td> <td>{ $value .desemail}</td> <td>{ $value .deslogin}</td/> <td>{ if = "$value.inadmin == 1" } Sim{ else }Não{/ if }</td> <td><a href= "/ecommerce/admin/users_get/{$value.iduser}" class = "btn btn-primary btn-xs" ><i class = "fa fa-edit" ></i> Editar</a> <a href= "/ecommerce/admin/users_delete/{$value.iduser}" onclick= "return confirm('Deseja realmente excluir este registro?')" class = "btn btn-danger btn-xs" > <i class = "fa fa-trash" ></i> Excluir</a></td> </tr> {/loop} </tbody> |
Explicando o Código templete users.html:
No código HTML que você apresentou, as expressões entre chaves como {$value.iduser}, {$value.desperson}, etc., não são variáveis no sentido tradicional do HTML. Na verdade, elas indicam que ali existe uma linguagem de template sendo utilizada para gerar o HTML dinamicamente.
Uma linguagem de template é uma ferramenta que permite criar páginas web de forma mais flexível e eficiente, separando a lógica da apresentação. Em vez de escrever todo o HTML manualmente, você define um “modelo” (template) com partes fixas e partes variáveis. Essas partes variáveis são substituídas por valores reais no momento em que a página é gerada.
RainTpl é um motor de templates (template engine) para PHP. Sua principal função é renderizar templates, ou seja, preencher os espaços reservados (como as expressões entre chaves) com dados dinâmicos, gerando o HTML final. É ele quem, de fato, “interpreta” as expressões como {$value.iduser} e as substitui pelos valores correspondentes.
Como funciona nesse caso?
Ao acionar o menu usuários que ao ser clicado irá gerar a listagem do que estiver em banco de dados na tabela usuários (tb_users).

Resumo:
Os códigos apresentados oferecem uma solução completa e eficiente para a exclusão de usuários em sistemas web, priorizando a segurança, a integridade dos dados e a experiência do usuário.
Arquivos para download:
Para saber mais: