Jump to content
Fórum Script Brasil
  • 0

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


rogarfil
 Share

Question

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 to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...