Curso de PHP – Como fazer consulta com pesquisa de dados em banco MySQL

Efetuar consulta com pesquisa de dados em banco MySQL

Em nossa aula anterior mostramos como efetuar uma consulta a um banco de dados MySQL por meio de um script PHP, a qual retornava todo o conteúdo de uma das tabelas do banco. Agora, criaremos uma consulta que permitirá pesquisar os dados a serem retornados, aplicando um filtro à consulta.

Nossa pesquisa nos permitirá exibir os cadastros realizados no banco de dados filtrando os registros por sexo – sendo ‘M’ = Masculino, ‘F’ = Feminino, ou ainda ‘N’ = Não Declarado’.

Vamos criar dois arquivos: um para realizar a pesquisa, que chamaremos de pesquisa.html, e outro para processar a pesquisa e exibir seu resultado, de nome pesquisa-resultado.php. Além disso, usaremos um arquivo para conexão ao banco de dados (conectar.php), e uma folha de estilos CSS para controlar a aparência da tabela de dados gerada (estilos.css).

O banco de dados que será consultado recebeu o nome de banco_teste, e consiste em duas tabelas relacionadas, de nomes cadastro e listas.

Criando os arquivos

Primeiramente vamos criar a página de pesquisa (pesquisa.html):

<html>
<head>
<title> Pesquisando Cadastros pelo Sexo </title>
</head>
<body>
<h3>Pesquisa</h3><br>
<form name="Cadastro" action="pesquisa-resultado.php" method="POST">
<label>Selecione o Sexo do Cliente:</label>
<select name="Sexo">
  <option value="M">Masculino</option>
  <option value="F">Feminino</option>
  <option value="N">Não Declarado</option>
</select><br>
<input type="submit" name="enviar" value="Enviar">
</form>
</body>
</html>

Esta página possui um formulário onde  usuário pode selecionar o sexo que deseja consultar, em um menu suspenso, e a consulta é enviada ao script pesquisa-resultado.php para processamento.

Script de processamento

Vamos então criar o script de processamento da pesquisa (pesquisa-resultado.php):

<?php
 // Conectando ao banco de dados:
 include_once("conectar.php");
 
 // Recebendo os dados a pesquisar
 $pesquisa = $_POST['Sexo'];
?>

 <html>
 <head>
 <link href="estilos.css" rel="stylesheet" type="text/css">
 <title>Resultado da pesquisa</title>
 </head>
 <body>
 
 <!-- Criando tabela e cabeçalho de dados: -->
 <table border="1" style='width:50%'>
 <tr>
 <th>NOME</th>
 <th>SOBRENOME</th>
 <th>SEXO</th>
 </tr>
 
 <!-- Preenchendo a tabela com os dados do banco: -->
 <?php
 $sql = "SELECT * FROM cadastro WHERE Sexo = '$pesquisa'";
 $resultado = mysqli_query($strcon,$sql) or die("Erro ao retornar dados");
 
 // Obtendo os dados por meio de um loop while
 while ($registro = mysqli_fetch_array($resultado))
 {
   $nome = $registro['NomeCliente'];
   $sobrenome = $registro['SobrenomeCliente'];
   $sexo = $registro['Sexo'];
   echo "<tr>";
   echo "<td>".$nome."</td>";
   echo "<td>".$sobrenome."</td>";
   echo "<td>".$sexo."</td>";
   echo "</tr>";
 }
 mysqli_close($strcon);
 echo "</table>";
?>
</body>
</html>

O script de processamento recebe os dados a pesquisar oriundos da página pesquisa.html, e realiza a pesquisa solicitada no banco de dados da aplicação. O resultado retornado é então exibido na página em uma tabela, contendo três colunas: nome, sobrenome e sexo.

Arquivo de conexão ao banco de dados (conectar.php):

<?php
 /* Dados do Banco de Dados a conectar */
$Servidor = 'localhost';
$nomeBanco = 'banco_teste';
$Usuario = 'fabio';
$Senha = '123';
$strcon = mysqli_connect($Servidor, $Usuario, $Senha, $nomeBanco); 
?>

Folha de estilos CSS (arquivo estilos.css – opcional):

table, th, td {
 width: 50%;
 border: 1px solid blue;
 border-collapse: collapse;
 padding: 3px;
 background-color: #CC8623;
}

Após criar os arquivos de pesquisa e processamento da pesquisa, vamos criar o banco de dados que será usado nos testes.

O Banco de Dados para testes

A seguir temos o código para criação do banco de dados utilizado em nossos testes, exportado a partir do phpMyAdmin:

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
-- Database: `banco_teste`:
CREATE DATABASE IF NOT EXISTS `banco_teste` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE `banco_teste`;
-- Estrutura da tabela `cadastro`:
CREATE TABLE IF NOT EXISTS `cadastro` (
 `NomeCliente` varchar(20) DEFAULT NULL,
 `SobrenomeCliente` varchar(30) DEFAULT NULL,
 `Sexo` char(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- Extraindo dados da tabela `cadastro`:
INSERT INTO `cadastro` (`NomeCliente`, `SobrenomeCliente`, `Sexo`) VALUES
('Fábio', 'dos Reis', 'M'),
('Ana', 'Paulo', 'F'),
('Ana', 'Maria', 'F'),
('Jonas', 'Batista', 'M');
-- Estrutura da tabela `listas`:
CREATE TABLE IF NOT EXISTS `listas` (
 `ID_item` smallint(6) NOT NULL AUTO_INCREMENT,
 `Item` varchar(40) COLLATE utf8_unicode_ci NOT NULL,
 PRIMARY KEY (`ID_item`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=7 ;
-- Extraindo dados da tabela `listas`:
INSERT INTO `listas` (`ID_item`, `Item`) VALUES
(1, 'Laranja'),
(2, 'Banana'),
(3, 'Maçã'),
(4, 'Uva'),
(5, 'Caqui'),
(6, 'Caju');

Testando o script

Vamos efetuar uma consulta aos registros cujo sexo é o feminino:

Pesquisa de registros com php e mysql

A tabela a seguir mostra o resultado da pesquisa realizada:

Resultado da consulta ao banco MySQL com PHP e filtro WHERE

O valor enviado pelo formulário – no caso, a letra ‘F’ – é usado para compor a consulta SQL realizada no banco de dados, e o resultado retornado é usado para preencher a tabela exibida na página.

Próximo: Como inserir dados em um banco de dados MySQL usando um script PHP.

 

Sobre Fábio dos Reis (1223 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.

8 Comentários em Curso de PHP – Como fazer consulta com pesquisa de dados em banco MySQL

  1. Arsenio Guilambe // 12/05/2019 em 18:35 // Responder

    O codigo esta muito bom mesmo, mas eu gostaria de saber como fazer consulta de nome ou id no mesmo campo, uma de cada vez.

    Ai esta o meu codigo, mas so faz consulta para nome.

    <?php

    include_once "conexao.php";

    if(isset($_POST['pesquisar'])){ // $_POST['pesquisar'] este e o nome do butao

    $proc = $_POST['texto']; // este e o nome caixa de texto

    $sql = "SELECT * FROM cliente WHERE nome like '%$proc%' order by codigo desc;";
    $result = mysqli_query($conexao, $sql);

    if (mysqli_num_rows($result) fetch_assoc()){
    $id=$row[‘codigo’];

    echo “”;
    echo “”.$row[‘codigo’].””;
    echo “”.$row[‘nome’].””;
    echo “”.$row[‘apelido’].””;
    echo “”.$row[‘contacto’].””;
    echo “”.$row[‘morada’].””;
    echo “”.$row[‘email’].””;
    echo “”.$row[‘senha’].””; ?>
    <a href="editar.php?codigo=”>Editar || <a href="apagar.php?codigo=”>Apagar
    <?php
    echo "”;
    }

    }

    }

    $conexao->close();

    ?>

  2. Boa noite Fábio,

    É possível usar a opção de pesquisa com radio.
    Por exemplo:
    No index.html:
    Opção1(x) Opção2( ) Opção3( )
    [__________________________] Pesquisar cliente

    No php:
    if(
    Opção1){
    $sql = “SELECT * FROM cliente WHERE opcao=1 AND datasaida IS NULL AND nome LIKE ‘%”.$busca.”%'”;
    } else
    if(
    Opção2){
    $sql = “SELECT * FROM cliente WHERE opcao=2 AND datasaida IS NULL AND nome LIKE ‘%”.$busca.”%'”;
    } else
    Todos clientes){
    $sql = “SELECT * FROM cliente WHERE datasaida IS NULL AND nome LIKE ‘%”.$busca.”%'”;

    Não consegui fazer funcionar.
    Pode me dar uma luz para corrigir este código.

  3. Boa tarde!
    Muito bom o código.
    Mas e se eu tivesse na tbl um campo data, e quisesse puxar por sexo e um intervalo entre as datas, tipo data inicial e data final?

  4. José Camilo Francisco // 14/07/2020 em 11:22 // Responder

    Preciso de mais conteudos para melhor aprender

  5. Vamos longe rapazes

  6. O meu apresenta o erro Undefined array key “Sexo” quando clico em buscar.

    • Nilton Oliveira // 06/01/2022 em 10:51 // Responder

      Na página de pesquisa em:

      Na página pesquisa-resultado.php em:

      // Recebendo os dados a pesquisar
      $pesquisa = $_POST[‘Sexo’];

      Veja que tem que ser o mesmo name. Vai funcionar

Escreva um comentário

Seu e-mail não será divulgado


*