segunda-feira, 18 de maio de 2020

Pesquisa por categorias pelo nome com PHP e MySQL

Hoje veremos como criar uma busca por categorias pelo nome utilizando PHP, o banco de dados MySQL, a extensão Mysqli e um menu do tipo "select"(ou "drop-down").
O primeiro passo é criar uma tabela no banco de dados; vou criar uma de artigos:

CREATE TABLE `artigos` (
    `id` INT(10) NOT NULL AUTO_INCREMENT,
    `categoria` VARCHAR(50) NULL DEFAULT NULL,
    `titulo` VARCHAR(50) NULL DEFAULT NULL,
    PRIMARY KEY (`id`)
    );

Insira alguns registros para teste:



ATENÇÃO: Neste tutorial, estamos usando a mesma tabela para guardar os nomes das categorias e das matérias. Porém, o padrão é utilizar categorias e matérias em tabelas separadas. Caso vc já tenha uma tabela apenas de categorias e outra de artigos e queira relacioná-las (interligá-las), então veja esse post:

Agora crie uma nova página em PHP; use o código a seguir (obs: corrija a conexão com os seus dados):

<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html>
<title>Pesquisa por categorias com PHP</title>
</head>

<body>
<form name="form1" method="post" action="">
  <label>
   <select class="form-control" id="" size="1" name="categoria">
        <option>Escolha a categoria</option>
        <option value="Programação">Programação</option>
        <option value="Banco de dados">Banco de dados</option>
        <option value="sistemas operacionais">sistemas operacionais</option>
        <option value="Outros">Outros</option>
   </select>
  </label>
  <label>
  <input type="submit" name="pesquisar" value="pesquisar">
  </label>
</form>
<br>

 <?php

 $ConDB = new mysqli('localhost', 'root', 'senha', 'banco') or die(mysqli_error());
// ou $ConDB = mysqli_connect('localhost', 'root', 'senha', 'banco') or die(mysqli_error());

 if(isset($_POST['pesquisar'])){
 
  $categoria=$_POST['categoria'];
  $sql = "select * from artigos WHERE categoria='$categoria'";
  $resultado = mysqli_query($ConDB, $sql) or exit(mysqli_error($ConDB));
     if (mysqli_num_rows($resultado) > 0) {
     echo "titulos encontrados: <br>";
     while ($row = mysqli_fetch_array($resultado)) {
?>

  <a href="#"><?php echo $row['titulo']; ?></a><br>

 <?php
    }//End while
    }//End if
    else
    {
    echo "nao encontrados titulos";
    }
    }
 ?>

</body>
</html>

Teste sua página; a busca já deverá estar funcionando corretamente. Agora é só corrigir os “links” para que conduzam às íntegras das matérias. Para isso, confira aqui: