Consulta – Sistema de Cadastro com PHP + PDO e MySQL
Hoje vamos dar continuidade na série de posts sobre sistema de cadastro com PHP + PDO no MySQL, nesse post será desenvolvido a página de consulta onde serão listados todos os clientes cadastrados e teremos um campo de busca.
A página “index.php” além de listar os registros também possui os links para todas as funcionalidades do sistema de cadastro: inclusão, edição e exclusão.
Alguns scripts que serão postados abaixo já foram mencionados no post anterior sobre inclusão, mas para não causar dúvidas em leitores que começaram a ler por esse post vou ser repetitivo.
Outros posts que podem interessar:
Inclusão – Sistema de Cadastro com PHP + PDO e MySQL
Edição – Sistema de Cadastro com PHP + PDO e MySQL
Exclusão – Sistema de Cadastro com PHP + PDO e MySQL
Script do Banco de Dados
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
USE db_blog; CREATE TABLE tab_clientes( id integer auto_increment primary key, nome varchar(100), cpf varchar(20), email varchar(50), telefone varchar(20), celular varchar(20), data_nascimento date, status varchar(10), foto varchar(200), data_cadastro timestamp default CURRENT_TIMESTAMP, data_alteracao timestamp ); |
Página para Consulta de Clientes
A página “index.php” é relativamente simples, no topo temos um link para “Cadastrar Cliente”, abaixo uma lista com os clientes cadastrados e os links para editação e exclusão por registro.
Verifico se foi enviado um termo de pesquisa via GET, caso não exista um termo executo uma consulta retornando todos os clientes do banco de dados, se for enviado um termo de pesquisa então executo um SELECT procurando esse termo nos campos “nome” ou “email“.
O segredo dessa busca e aproveitar a mesma página para enviar a submissão do formulário de pesquisa, para fazer uma busca basta preencher o campo de pesquisa e depois pressionar a tecla “ENTER” ou o botão “Pesquisar“, se o usuário quiser listar novamente todos os clientes basta pressionar o botão “Ver Todos“.
Pensando em sistemas maiores o ideal seria trabalhar com paginação de registros, para o leitor que deseja aprender sobre paginação no blog tenho o post paginação dom MySQL, onde passo os detalhes para construção de paginação.
Observem que coloquei uma coluna com as fotos dos nosso clientes “fictícios” para demonstrar como exibir imagens em uma tabela, lembrando que na coluna “foto” da tabela de clientes gravo apenas o nome do arquivo e para exibir na página apenas concateno a caminho da pasta com o nome da imagem gravada, nesse post estamos gravando todas as imagens na pasta “fotos”.
Não implementei as funcionalidades de edição nem exclusão, pois o objetivo desse post é apenas listagem de registros, abordaremos esses assuntos nos próximos posts. Mas deixei pronto os links, na edição chamo a página “editar.php” passando como parâmetro o id do cliente e no link de exclusão estou carregando o id do cliente no atributo “rel” do elemento <a>.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
<?php require 'conexao.php'; // Recebe o termo de pesquisa se existir $termo = (isset($_GET['termo'])) ? $_GET['termo'] : ''; // Verifica se o termo de pesquisa está vazio, se estiver executa uma consulta completa if (empty($termo)): $conexao = conexao::getInstance(); $sql = 'SELECT id, nome, email, celular, status, foto FROM tab_clientes'; $stm = $conexao->prepare($sql); $stm->execute(); $clientes = $stm->fetchAll(PDO::FETCH_OBJ); else: // Executa uma consulta baseada no termo de pesquisa passado como parâmetro $conexao = conexao::getInstance(); $sql = 'SELECT id, nome, email, celular, status, foto FROM tab_clientes WHERE nome LIKE :nome OR email LIKE :email'; $stm = $conexao->prepare($sql); $stm->bindValue(':nome', $termo.'%'); $stm->bindValue(':email', $termo.'%'); $stm->execute(); $clientes = $stm->fetchAll(PDO::FETCH_OBJ); endif; ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Listagem de Clientes</title> <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css"> <link rel="stylesheet" type="text/css" href="css/custom.css"> </head> <body> <div class='container'> <fieldset> <legend><h1>Listagem de Clientes</h1></legend> <form action="" method="get" id='form-contato' class="form-horizontal col-md-10"> <label class="col-md-2 control-label" for="termo">Pesquisar</label> <div class='col-md-7'> <input type="text" class="form-control" id="termo" name="termo" placeholder="Infome o Nome ou E-mail"> </div> <button type="submit" class="btn btn-primary">Pesquisar</button> <a href='index.php' class="btn btn-primary">Ver Todos</a> </form> <a href='cadastro.php' class="btn btn-success pull-right">Cadastrar Cliente</a> <div class='clearfix'></div> <?php if(!empty($clientes)):?> <table class="table table-striped"> <tr class='active'> <th>Foto</th> <th>Nome</th> <th>E-mail</th> <th>Celular</th> <th>Status</th> <th>Ação</th> </tr> <?php foreach($clientes as $cliente):?> <tr> <td><img src='fotos/<?=$cliente->foto?>' height='40' width='40'></td> <td><?=$cliente->nome?></td> <td><?=$cliente->email?></td> <td><?=$cliente->celular?></td> <td><?=$cliente->status?></td> <td> <a href='editar.php?id=<?=$cliente->id?>' class="btn btn-primary">Editar</a> <a href='javascript:void(0)' class="btn btn-danger link_exclusao" rel="<?=$cliente->id?>">Excluir</a> </td> </tr> <?php endforeach;?> </table> <?php else: ?> <h3 class="text-center text-primary">Não existem clientes cadastrados!</h3> <?php endif; ?> </fieldset> </div> <script type="text/javascript" src="js/custom.js"></script> </body> </html> |
Folha de estilo CSS customizada
Houve o acréscimo de uma linha de CSS em relação ao script “custom.css” postado no primeiro post, todas as regras de CSS que não estão nesse arquivo vem do bootstrap.
1 2 3 4 |
fieldset{margin:1% auto;} table{ margin-top: 10px;} .box-mensagem-crud{ margin-top: 10px;} .msg-erro{ color: red; } |
Resultado Final
Listagem quando não existem clientes cadastrados ou a pesquisa não retornou resultados:
Listagem com clientes de exemplo:
Exemplo de pesquisa pelo termo “William”:
Bom pessoal com isso chegamos ao final desse post, demonstrei como construir a listagem para consulta de clientes e também efetuar uma pesquisa nessa mesma listagem, até esse momento estamos utilizando somente o formulário de cadastro construído no post anterior, no próximo post irei demonstrar como editar os dados dos clientes.
Fica evidente que nessa listagem poderia ser acrescentado a funcionalidade de paginação dos dados, mas o intuito não é montar algo complexo e sim mostrar o caminho para o leitor que está iniciando com PHP. Se pensarmos em uma solução mais “limpa” com certeza indicaria o uso de um framework, no momento minha preferência pessoal é o CodeIgniter, em breve teremos posts relacionados com esse framework.
Link para Download do projeto final com INCLUSÃO, EDIÇÃO, EXCLUSÃO E CONSULTA. (8161 downloads)
Até a próxima pesssoal …