Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Prezados Colegas,
Feliz 2016! Paz, Amor, Realizações...
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.
Quando realizo esta busca, com todas as opções que desejo e da maneira como desejo, tudo ocorre perfeitamente como programado, obtenho os resultados esperados. Mostrando inclusive a quantidade de páginas correspondentes a busca feita.
Na minha primeira query (echo $sql;) o resultado vem assim, pelas opções escolhidas (estou optando por tudo para melhor visualizarem):
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
Na minha segunda query (echo $strCount;) o resultado vem assim:
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 -> total de páginas 3.
O problema é quando dou o clique para as próximas páginas, elas me retornam vazia, ou seja, debugando posso perceber que a <div> correspondente não recebe os valores.
<?php
ini_set('display_errors', true);
error_reporting(E_ALL);
include '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 = $_REQUEST['comboCargo'];
$nivel = $_REQUEST['comboNivel'];
$sexo = $_REQUEST['comboSexo'];
$cidade = $_REQUEST['comboCidade'];
$idademin = $_REQUEST['comboIdadeMin'];
$idademax = $_REQUEST['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)) {
?>
<div class="bx_resultado">
<div class="campo_result1"><?php echo $rs['nome']; ?></div>
<div class="campo_result2"><?php echo $rs['email']; ?></div>
<div class="campo_result3"><?php echo $rs['celular']; ?></div>
<div class="campo_result4"><a href="visualizar.php?id=<?php echo $rs['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() );
$total = mysqli_num_rows($qrCount);
echo $total;
echo '<br />';
$pgs = ceil($total / $maximo);
$menos = $pagina - 1;
$mais = $pagina + 1;
if ($pgs > 1){
echo "<br />";
// 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 -->
Já tentei várias formas de paginação e não obtive nenhuma solução. E não consigo deparar com o que estou errando. A tabela é única com todos os campos que preciso.
Agradeço desde já a atenção dispensada,
Rogarfil
Prezado Paulo de Tarso F. M.,
Infelizmente segui a suas orientações e meus resultados continuam o mesmo, ou seja, realiza a busca por filtro perfeitamente e me apresenta os resultados desejados, mostrando até mesmo a quantidade de páginas pela filtragem.
Acontece que minha consulta na query é por array e é este array que não passa para a página seguinte, os dados não chegam na segunda página.
Abraços,
Rogarfil
boa tarde rogarfil ! eu sou novo no forum, vi tua duvida e eu estou tendo o mesmo problema, gostaria de saber se tiveste alguma solucao.
<?php
$maximo = 3;
$pagina = (isset($_GET['pagina'])) ? (int)$_GET['pagina'] : 1;
$inicio = ($maximo * $pagina) - $maximo;
if( $_SERVER['REQUEST_METHOD']=='POST' )
{
$where = Array();
$n_processo = $_REQUEST['n_processo'];
$relator = $_REQUEST['relator'];
$especie = htmlentities($_REQUEST['especie'],ENT_QUOTES);
$seccao = htmlentities($_REQUEST['seccao'],ENT_QUOTES);
$data_inicio = $_REQUEST['data_inicio'];
$data_fim = $_REQUEST['data_fim'];
if( $n_processo ) { $where[] = " `processo` = '{$n_processo}'"; }
if( $relator ) { $where[] = " relator = '{$relator}'"; }
if( $especie ) { $where[] = "especie = '{$especie}'"; }
if( $seccao ) { $where[] = " seccao = '{$seccao}'"; }
if ( $data_inicio ) { $where[] = " data>= '{$data_inicio}' "; }
if ( $data_fim ) { $where[] = " data <= '{$data_fim}' "; }
$sql = "SELECT * FROM jurisprudencia";
if( sizeof( $where ) )
$sql .= ' WHERE '.implode( ' AND ',$where ).'LIMIT '.$inicio.','.$maximo;
$query = mysql_query($sql) or die( mysql_error() );
$contar = mysql_num_rows($query);
if ($contar == 0) {
echo "<h2>Não foram Encontrados Registros!</h2>";
}else {
if ($contar == 1) {
echo "<h2>1 Registro Encontrado</h2>";
}
if ($contar > 1) {
echo "<h2>$contar Registros Encontrados</h2>";
}
?>
<table class="data">
<tr class="data">
<th class="data" width="85" align="center"><label>Processo</label></th>
<th class="data" width="130" align="center"><label>Relator</label></th>
<th class="data" width="100" align="center"><label>Espécie</label></th>
<th class="data" width="80" align="center"><label>Secção</label></th>
<th class="data" width="80" align="center"><label>Data de Entrada</label></th>
</tr>
<?php while ($rs = mysql_fetch_array($query)) {
extract($rs);
?>
<tr class="data">
<td align="center" class="data"> <a href="arquivos/jurisprudencia/<?php echo $rs['acordao'] ?>"><?php echo $rs['processo']; ?></a> </td>
<td align="center" class="data"> <?php echo $rs['relator']; ?> </td>
<td align="center" class="data"> <?php echo $rs['especie']; ?> </td>
<td align="center" class="data"> <?php echo $rs['seccao']; ?> </td>
<td align="center" class="data"> <?php echo $rs['data']; ?> </td>
</tr>
<?php }}
$strCount = "SELECT * FROM jurisprudencia";
if( sizeof( $where ) )
$strCount .= ' WHERE '.implode( ' AND ', $where );
$qrCount = mysql_query($strCount) or die( mysql_error() );
$total = mysql_num_rows($qrCount);
$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> ";
}
} ?>
Aqui:
ORDER BY nome ASC LIMIT 0,10
No lugar desse zero você precisa informar qual é o número inicial... Desse jeito você está sempre pegando os 10 primeiros registros, teria que ser algo mais ou menos assim:
$pagina = 1; // Página padrão: primeira página
$inicio = 0; // Início do LIMIT da consulta
$qde_registros = 20; // Registros por página
// Página
https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/
A discussão vai longe, tem gente que fala que é melhor, tem gente que não...