Jump to content

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


Recommended Posts

Posted

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>  ";
	 }
	 // 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á a atenção dispensada.

Abraços,

Rogarfil

  • 2 weeks later...
Posted (edited)

Olá Rogarfil,

está a à prcoura de um POST mas o utlizador está a "chegar" por GET ($_GET)

$pagina = (isset($_GET['pagina'])) ? (int)$_GET['pagina'] : 1;
 $inicio = ($maximo * $pagina) - $maximo;
 if ($_SERVER['REQUEST_METHOD'] == "POST") {

Quando o user carrega no llinks "anterior" or "próxima" está a navegar para a página "por GET".

Muda

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

para

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

...se bem que deverias repensar a estrutura já que "GET" não destingue se é a primeira vez que chega à página ou se clicou nalgum lnk.

Tiago

Edited by tiago.f

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.