Ir para conteúdo
Fórum Script Brasil
  • 0

Formulário de busca filtro dinâmico com paginação em mysql php


rogarfil

Pergunta

Trata-se do seguinte, tenho uma página search.php onde realizo uma busca por seleção (Cargo, Escolaridade, Sexo, Cidade, Idade Mínima e Idade Máxima), estes valores já estão cadastrado no BD Mysql, e não importando a maneira de escolha ou a combinação entre as opções o resultado sai como esperado. Mostrando inclusive a quantidade de páginas correspondentes a busca feita.

Como exemplo da minha primeira query (echo $sql;), obtemos: SELECT * FROM tab_candidato WHERE `cargo_pretendido` = 'Analista e Desenvolvedor de Sistemas' AND `nivel` = 'Ensino Superior' AND `sexo` = 'Masculino' AND `cidade` = 'Palmas' AND `idade` >= '25' AND `idade` <= '55' ORDER BY nome ASC LIMIT 0,10

Trazendo realmente o que foi realizado na busca por filtro.

Na minha segunda query (echo $strCount;) o resultado da paginação: SELECT * FROM tab_candidato WHERE `cargo_pretendido` = 'Analista e Desenvolvedor de Sistemas' AND `nivel` = 'Ensino Superior' AND `sexo` = 'Masculino' AND `cidade` = 'Palmas' AND `idade` >= '25' AND `idade` <= '55' ORDER BY nome ASC

O total contado está correto (echo $total;) e mostra, o valor: 19 linhas, perfazendo um total de 2 páginas. Já que o máximo por página é 10 linhas

O problema é quando acesso as próximas páginas, elas me retornam vazia, ou seja, debugando posso perceber que a <div> correspondente não recebe os valores.

OBS:- Quando da busca eu tranformo cada opção em array, para melhor utilização da mesma. A tabela é única e o código esta em uma única página search.php.

<!-- Formulário busca no Mysql por filtro com paginação em PHP -->
<?php
ini_set('display_errors', true);
error_reporting(E_ALL);

require 'conexao.php';
?>
<!-- GERAL -->
<div class="pg_candidatos">
  <!-- FILTRO DE BUSCA -->
  <fieldset>
  <legend>Selecione as Opções da Pesquisa</legend>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
      <ul>
        <!-- CARGO -->
        <li>
          <select name="comboCargo">
            <option value="0" selected="selected">Cargo</option>
            <?php
              $qrCargo = mysqli_query($dados, "SELECT DISTINCT cargo_pretendido FROM tab_candidato ORDER BY cargo_pretendido ASC") or die(mysqli_error());
              while ($linhaCargo = mysqli_fetch_array($qrCargo)) {
            ?>
            <option value="<?php echo $linhaCargo['cargo_pretendido']; ?>">
              <?php echo $linhaCargo['cargo_pretendido']; ?>
            </option>
            <?php } ?>
          </select>
        </li>
        <!-- ESCOLARIDADE -->
        <li>
          <select name="comboNivel">
            <option value="0" selected="selected">Escolaridade</option>
            <?php
              $qrNivel = mysqli_query($dados, "SELECT DISTINCT nivel FROM tab_candidato ORDER BY nivel ASC") or die(mysqli_error());
              while ($linhaNivel = mysqli_fetch_array($qrNivel)) {
            ?>
            <option value="<?php echo $linhaNivel['nivel']; ?>">
              <?php echo $linhaNivel['nivel']; ?>
            </option>
            <?php } ?>
          </select>
        </li>
        <!-- SEXO -->
        <li>
          <select name="comboSexo">
            <option value="0" selected="selected">Sexo</option>
            <?php
              $qrSexo = mysqli_query($dados, "SELECT DISTINCT sexo FROM tab_candidato ORDER BY sexo ASC") or die(mysqli_error());
              while ($linhaSexo = mysqli_fetch_array($qrSexo)) {
            ?>
            <option value="<?php echo $linhaSexo['sexo']; ?>">
              <?php echo $linhaSexo['sexo']; ?>
            </option>
            <?php } ?>
          </select>
        </li>
        <!-- CIDADE -->
        <li>
          <select name="comboCidade">
            <option value="0" selected="selected">Cidade</option>
            <?php
              $qrCidade = mysqli_query($dados, "SELECT DISTINCT cidade FROM tab_candidato ORDER BY cidade ASC") or die(mysqli_error());
              while ($linhaCidade = mysqli_fetch_array($qrCidade)) {
            ?>
            <option value="<?php echo $linhaCidade['cidade']; ?>">
              <?php echo $linhaCidade['cidade']; ?>
            </option>
            <?php } ?>
          </select>
        </li>
        <!-- IDADE MÍNIMA -->
        <li>
          <select name="comboIdadeMin">
            <option value="0" selected="selected">Idade Mínima</option>
            <?php
              $qrIdadeMin = mysqli_query($dados, "SELECT DISTINCT idade FROM tab_candidato ORDER BY idade ASC") or die(mysqli_error());
              while ($linhaIdadeMin = mysqli_fetch_array($qrIdadeMin)) {
            ?>
            <option value="<?php echo $linhaIdadeMin['idade']; ?>">
              <?php echo $linhaIdadeMin['idade']; ?>
            </option>
            <?php } ?>
          </select>
        </li>
        <!-- IDADE MÁXIMA -->
        <li>
          <select name="comboIdadeMax">
            <option value="0" selected="selected">Idade Máxima</option>
            <?php
              $qrIdadeMax = mysqli_query($dados, "SELECT DISTINCT idade FROM tab_candidato ORDER BY idade ASC") or die(mysqli_error());
              while ($linhaIdadeMax = mysqli_fetch_array($qrIdadeMax)) {
            ?>
            <option value="<?php echo $linhaIdadeMax['idade']; ?>">
              <?php echo $linhaIdadeMax['idade']; ?>
            </option>
            <?php } ?>
          </select>
        </li>
        <div class="limpar"></div>
      </ul>
      <div class="limpar"></div>
      <div class="bt_pesquisar"><input type="submit" value="Buscar" /></div>
      <div class="limpar"></div>
    </form>
  </fieldset>
  <!-- /FILTRO DE BUSCA -->
  <!-- RETORNO DA BUSCA -->
  <fieldset>
  <legend>Resultado da Pesquisa</legend>
    <?php

      $maximo = 10;
      $pagina = (isset($_GET['pagina'])) ? (int)$_GET['pagina'] : 1;
      $inicio = ($maximo * $pagina) - $maximo;

      if ($_SERVER['REQUEST_METHOD'] == "POST") {

        $where    = array();
        $cargo    = getPost( 'comboCargo'   );
        $nivel    = getPost( 'comboNivel'   );
        $sexo     = getPost( 'comboSexo'    );
        $cidade   = getPost( 'comboCidade'  );
        $idademin = getPost( 'comboIdadeMin');
        $idademax = getPost( 'comboIdadeMax');

        if ( $cargo )    { $where[] = " `cargo_pretendido` = '{$cargo}'    "; }
        if ( $nivel )    { $where[] = " `nivel`            = '{$nivel}'    "; }
        if ( $sexo )     { $where[] = " `sexo`             = '{$sexo}'     "; }
        if ( $cidade )   { $where[] = " `cidade`           = '{$cidade}'   "; }
        if ( $idademin ) { $where[] = " `idade`           >= '{$idademin}' "; }
        if ( $idademax ) { $where[] = " `idade`           <= '{$idademax}' "; }

        $sql = "SELECT * FROM tab_candidato";
          if( sizeof( $where ) )
            $sql .= ' WHERE '.implode( ' AND ', $where ).' ORDER BY nome ASC LIMIT '.$inicio.','.$maximo;

          echo $sql;
          echo '<br />';

          $query  = mysqli_query($dados, $sql) or die( mysqli_error() );

          $contar = mysqli_num_rows($query);

          if ($contar == 0) {
            echo "<p>Não foram encontrados registros!</p>";

          } else {
            while ($rs = mysqli_fetch_array($query)) {
              extract($rs);
    ?>
    <div class="bx_resultado">
      <div class="campo_result1"><?php echo $nome; ?></div>
      <div class="campo_result2"><?php echo $email; ?></div>
      <div class="campo_result3"><?php echo $celular; ?></div>
      <div class="campo_result4"><a href="visualizar.php?id=<?php echo $id; ?>"><img title="Clique visualizar" alt="Clique visualizar" src="images/ico_pesq.png"></a></div>
      <div class="limpar"></div>
    </div>
    <div class="limpar"></div>
    <?php
            }//while
          }//else
          $strCount = "SELECT * FROM tab_candidato";
            if( sizeof( $where ) )
              $strCount .= ' WHERE '.implode( ' AND ', $where ).' ORDER BY nome ASC';

            echo $strCount;
            echo '<br />';

            $qrCount = mysqli_query($dados, $strCount) or die( mysqli_error() );
            echo $total   = mysqli_num_rows($qrCount);
            echo '<br />';

            $pgs = ceil($total / $maximo);

            $menos = $pagina - 1;
            $mais = $pagina + 1;

            // Mostragem de pagina
            if ($menos > 0) {
              echo "<a href=".$_SERVER['PHP_SELF']."?pagina=$menos>Anterior</a>&nbsp; ";

            }
            // Listando as paginas
            for ($i = 1; $i <= $pgs; $i++) {
              if ($i != $pagina) {
                echo "<a href=".$_SERVER['PHP_SELF']."?pagina=".$i.">$i</a> | ";
              } else {
                echo " <strong>".$i."</strong> | ";
              }
            }
            if ($mais <= $pgs) {
              echo "<a href=".$_SERVER['PHP_SELF']."?pagina=$mais>Próxima</a> ";
            }
      }//if
    ?>
  </fieldset>
  <!-- /RETORNO DA BUSCA -->
</div>
<!-- /GERAL -->
<?php
function filter( $str ){
      return addslashes( $str );
    }
function getPost( $key ){
      return isset( $_POST[ $key ] ) ? filter( $_POST[ $key ] ) : null;
    }
?>

Agradeço desde já quem puder ajudar.

Abraços,

Rogarfil

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Olá!

Pelo que pude observar...

Quando você clica em: <a href=".$_SERVER['PHP_SELF']."?pagina=".$i.">$i</a> (pra trocar de página)

Você perde a sua query de busca. Uma vez que o refresh vai limpar a variável de servidor $_POST.

Sugiro que guarde a sua query montada em uma sessão. Assim, poderá reutilizá-la quando acontecer o refresh

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...