TransWikia.com

Consegui pesquisar mais 1 query no banco de dados com PHP

Stack Overflow em Português Asked by Roberto Pereira on November 28, 2020

Estou tentando fazer uma pesquisa no meu código, buscando outros campos, por exemplo, procurar pessoas que foram cadastradas com o nome da mãe " fulano de tal", mas não estou conseguindo bater uma lógica… só consigo pesquisar 1 campo, que é o nome.

 <?php
            if(isset($_POST['nome'])) {
            $pesquisar = $_POST['nome'] ;
           
            $result_msg_contatos = "SELECT * FROM cadastro WHERE nome LIKE '%$pesquisar%' LIMIT 30";

            $resultado_msg_contatos = mysqli_query($conn , $result_msg_contatos);
   
            
         } else {
            //Verificar se esta sendo passado na URL a página atual, senão é atribuido a pagina
            $pagina=(isset($_GET['pagina'])) ? $_GET['pagina'] : 1;
            
            //Selecionar todos os itens da tabela 
            $result_msg_contato = "SELECT * FROM cadastro";
            $resultado_msg_contato = mysqli_query($conn , $result_msg_contato);
            
            //Contar o total de itens
            $total_msg_contatos = mysqli_num_rows($resultado_msg_contato);
            
            //Seta a quantidade de itens por página
            $quantidade_pg = 20;
            
            //calcular o número de páginas 
            $num_pagina = ceil($total_msg_contatos/$quantidade_pg);
            
            //calcular o inicio da visualizao   
            $inicio = ($quantidade_pg*$pagina)-$quantidade_pg;
            
            //Selecionar  os itens da página
            $result_msg_contatos = "SELECT * FROM cadastro limit $inicio, $quantidade_pg";
            $resultado_msg_contatos = mysqli_query($conn , $result_msg_contatos);
            $total_msg_contatos = mysqli_num_rows($resultado_msg_contatos);
         }



<form method="POST" action="gerar_planilha_especifica.php">
            <div class="row espaco">
               <div class="pull-right">                 
                  <a href="../../index.php"><button type='button' class='btn btn-sm btn-success'>Cadastrar</button></a>
                  <a href="gerar_planilha.php"><button type='button' class='btn btn-sm btn-danger'>Gerar Excel</button></a>
                  <input type="submit" value="Excel Especifico" class='btn btn-sm btn-warning'>
               </div>
            </div>
            <div class="row">
               <div class="col-md-12">
                  <table class="table">
                     <thead>
                        <tr>
                           <th class="text-center">Id</th>
                           <th class="text-center">Nome </th>
                           <th class="text-center">Nome da mãe</th>
                           <th class="text-center">Nome do Pai</th>
                           <th class="text-center">cpf</th>
                           <th class="text-center">rg</th>
                           <th class="text-center">email</th>
                           <th class="text-center">Data Nasc</th>
                           <th class="text-center">telefone</th>
                           <th class="text-center">Whatsapp</th>
                           <th class="text-center">rua</th>
                           <th class="text-center">numero</th>
                           <th class="text-center">bairro</th>
                           <th class="text-center">cidade</th>
                           <th class="text-center">estado</th>
                           <th class="text-center">indicacao</th>
                           <th class="text-center">cep</th>
                        </tr>
                     </thead>
                     <tbody>
                        <?php while($row_msg_contatos = mysqli_fetch_assoc($resultado_msg_contatos)){?>
                        <tr>
                           <?php $id = $row_msg_contatos["id"]; ?>
                           <td class="text-center">
                              <?php echo "<input type='radio' name='msg_contato[$id]' value='1'" ?>
                           <td class="text-center"><?php echo $row_msg_contatos["id"]; ?></td>
                           <td class="text-center"><?php echo $row_msg_contatos["nome"]; ?></td>
                           <td class="text-center"><?php echo $row_msg_contatos["mae"]; ?></td>
                           <td class="text-center"><?php echo $row_msg_contatos["pai"]; ?></td>
                           <td class="text-center"><?php echo $row_msg_contatos["cpf"]; ?></td>
                           <td class="text-center"><?php echo $row_msg_contatos["rg"]; ?></td>
                           <td class="text-center"><?php echo $row_msg_contatos["email"]; ?></td>
                           <td class="text-center"><?php echo $row_msg_contatos["dtnasc"]; ?></td>
                           <td class="text-center"><?php echo $row_msg_contatos["telefone"]; ?></td>
                           <td class="text-center"><?php echo $row_msg_contatos["zap"]; ?></td>
                           <td class="text-center"><?php echo $row_msg_contatos["rua"]; ?></td>
                           <td class="text-center"><?php echo $row_msg_contatos["numero"]; ?></td>
                           <td class="text-center"><?php echo $row_msg_contatos["bairro"]; ?></td>
                           <td class="text-center"><?php echo $row_msg_contatos["cidade"]; ?></td>
                           <td class="text-center"><?php echo $row_msg_contatos["estado"]; ?></td>
                           <td class="text-center"><?php echo $row_msg_contatos["indicacao"]; ?></td>
                           <td class="text-center"><?php echo $row_msg_contatos["cep"]; ?></td>
                           <td class="text-center"> 
                              <?php echo
                                 "<a href='proc_apagar_usuario.php?id=" . $row_msg_contatos['id'] . "'>Apagar</a><br><hr>";
                                 ?>
                        </tr>
                        <?php } ?>
                     </tbody>
                  </table>
               </div>
            </div>
      </form>

Eu fiz isso após a resposta de @ademir-mazer-jr-nuno, e continuo sem consegui filtrar :/

<?php
$sql = "SELECT * FROM cadastro";
$where = "";

if(isset($_POST['nome'])) {
     $pesquisar = $_POST['nome'] ;
        
     $where .= " nome LIKE '%$pesquisar%'";
}

if(isset($_POST['mae'])) {
     $pesquisar = $_POST['mae'] ;           

     // esta linha testa se a variável where já tem conteúdo, se sim adiciona o 
     // AND caso não inicia ela vazia
     $where = isempty($where) ? "" : $where . " AND ";
     $sql .= " mae LIKE '%$pesquisar%'";
}

if(isset($_POST['cidade'])) {
     $pesquisar = $_POST['cidade'] ;           

     // esta linha testa se a variável where já tem conteúdo, se sim adiciona o 
     // AND caso não inicia ela vazia
     $where = isempty($where) ? "" : $where . " AND ";
     $sql .= " cidade LIKE '%$pesquisar%'";




    // finaliza a construção da query, se where for vazio somente limita o resultado
   // caso contrário adiciona a cláusula
   $sql .= empty($where) ? "" : " WHERE " . $where;
   $sql .= " LIMIT 30 ";
     
}else{

//Verificar se esta sendo passado na URL a página atual, senão é atribuido a pagina
$pagina=(isset($_GET['pagina'])) ? $_GET['pagina'] : 1;
                
//Selecionar todos os itens da tabela 
$result_msg_contato = "SELECT * FROM cadastro";
$resultado_msg_contatos = mysqli_query($conn , $result_msg_contato);

//Contar o total de itens
$total_msg_contatos = mysqli_num_rows($resultado_msg_contatos);

//Seta a quantidade de itens por página
$quantidade_pg = 20;

//calcular o número de páginas 
$num_pagina = ceil($total_msg_contatos/$quantidade_pg);

//calcular o inicio da visualizao   
$inicio = ($quantidade_pg*$pagina)-$quantidade_pg;

//Selecionar  os itens da página
$result_msg_contatos = "SELECT * FROM cadastro limit $inicio, $quantidade_pg";
$resultado_msg_contatos = mysqli_query($conn , $result_msg_contatos);
$total_msg_contatos = mysqli_num_rows($resultado_msg_contatos);

       }
          
                    ?>

One Answer

Você está testando se existe um parâmetro de post para nome, caso exista, ele somente monta a query para este campo. Caso não exista você monta o que me parece um retorno copmpleto para todos os registros paginados da tabela.

Uma possível solução seria montar a base da query, e então testar cada um dos parâmetros possíveis como filtros e ir concatenando na query.

No exemplo a seguir estou considerando apenas 3 parâmetros e alterando apenas a parte PHP colocada na pergunta relacionada à filtrar com critérios, para que você entenda a lógica da solução e complemente em seu contexto, note também que não conheço seu banco de dados então os nomes de campos são sugestões.

   $sql = "SELECT * FROM cadastro";
   $where = "";

   if(isset($_POST['nome'])) {
        $pesquisar = $_POST['nome'] ;
           
        $where .= "nome LIKE '%$pesquisar%'";
   }

   if(isset($_POST['nome_mae'])) {
        $pesquisar = $_POST['nome_mae'] ;           

        // esta linha testa se a variável where já tem conteúdo, se sim adiciona o 
        // AND caso não inicia ela vazia
        $where = empty($where) ? "" : $where . " AND ";
        $sql .= "nome_mae LIKE '%$pesquisar%'";
   }

   if(isset($_POST['cidade'])) {
        $pesquisar = $_POST['cidade'] ;           

        // esta linha testa se a variável where já tem conteúdo, se sim adiciona o 
        // AND caso não inicia ela vazia
        $where = empty($where) ? "" : $where . " AND ";
        $sql .= "cidade LIKE '%$pesquisar%'";
   }

   // finaliza a construção da query, se where for vazio somente limita o resultado
   // caso contrário adiciona a cláusula
  $sql .= empty($where) ? "" : " WHERE " . $where;
  $sql .= " LIMIT 30";


   $resultado_msg_contatos = mysqli_query($conn , $result_msg_contatos);
   

Se não conhece o operador ternário que usei nos testes da variável $where dê uma olhada na documentação.

Answered by Ademir Mazer Jr - Nuno on November 28, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP