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:
A tabela a seguir mostra o resultado da pesquisa realizada:
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.
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();
?>
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.
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?
Você pode tentar usar a cláusula BETWEEN em conjunto com o filtro WHERE, como explicado aqui: http://www.bosontreinamentos.com.br/mysql/mysql-between-selecao-de-intervalos-em-consultas-21/
Preciso de mais conteudos para melhor aprender
Vamos longe rapazes
O meu apresenta o erro Undefined array key “Sexo” quando clico em buscar.
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