Paginação não funciona

Enviada por Adriano 
Adriano
Paginação não funciona
20 de September de 2012 às 12:05AM
Boa noite a todos, tenho um site de uma imobiliaria e nele são exibidos 3 imoveis por pagina mas quando eu clico no botão proximo ele vai para proxima pagina porem n exibe o imovel, aparece apenas uma mensagem dizendo nenhum encontrado, fiz algumas alterações no meu arquivo e gostaria muito que vcs me ajudasem a descobrir o problema se posivel, vcs são minha ultima esperança ja postei em varios foruns, e niguem resolveu, fiz varios tipos de paginação diferentes e nenhuma resolveu.

Este abaixo é o pesqporcat.php que pega as informações de um formulario em uma outra pagina chamada index.php

desde ja obrigado.

<?php

include "conectar.inc";

$total_reg = "3"; //DEFINE A QUANTIDADE DE LINHAS

$pagina = $_GET['pagina'];

if($pagina == "") {
$pagina = "1";
}

$inicio = $pagina - 1;
$inicio = $total_reg * $inicio;

$categoria = $_GET['categoria'];
$consulta = "SELECT * FROM imoveis WHERE categoria LIKE '$categoria' ";
$query = mysql_query("$consulta LIMIT $inicio,$total_reg");
$resultado = mysql_query($consulta);
$linhas = mysql_num_rows($resultado);

if($linhas == 0)
{
echo "Nenhum(a) <b>" . $categoria . "</b> encontrado.";

}
else
{
$tp = $linhas / $total_reg;
$regLinha = "1"; //NUMERO DE REGISTROS POR LINHA

$i = ceil($total_reg / $regLinha);
$j = "1";
$z = "0";

echo "<font color=\"#0000FF\"><b><u>Encontrados: </b>(" . $linhas . ")</u></font><table width=510px cellspacing=0 cellpadding=0 border=2 bordercolor=#0000FF bordercolordark=#0000ff bordercolorlight=#0000ff>";

while($mostrar = mysql_fetch_object($query))
{
echo "<tr><td><table border=0><td width=150px height=112 rowspan=2 align=center valign=middle border=0><img src='imagens/imoveis/img_abertura/" . $mostrar->foto . "'alt='Imagem' width='150' /></td><td width=350px align=center><b><u>". $mostrar->nome . "</td></tr><tr><td align=left valign=middle>" . $mostrar->descricao. "</td></tr><tr><td colspan=2 align=center><a href='" . $mostrar->id . "'>Detalhes</a></td></tr></table>";
$z++;
if($z == $regLinha and $j < $i)
{
echo "</tr><tr>";
$z = 0;
$j++;
}
if($z == $regLinha and $j == $i)
{
echo "</tr>";
}
}
echo "</table>";

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

$pgs = ceil($linhas / $total_reg);

if($pgs > 1 ) {

echo "<br />";

// 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>";
}
}}
?>

Este aquivo aqui embaixo é apenas o formulario q utilizo dentro do arquivo index.php

<form method="GET" action="pesqporcat.php" target="conteudo" enctype="multipart/form-data">
<select name="categoria">
<option selected value="fazenda">Fazendas
<option value="sitio ou granja">Sítios e Granjas
<option value="casa">Casas
<option value="apartamento">Apartamentos
</select>
<tr>
<td>
<input type="image" value="Pesquisar" src="imagens/btn_pesquisar.gif" align="right" />
</form>
Marcos Regis
Re: Paginação não funciona
20 de September de 2012 às 08:18AM
Pergunta idiota mas preciso fazer.
Existem mais de 3 imóveis cadastrados no Banco de Dados?
Como sabe que você pode montar o botão de próximo sem contar antes quantos imóveis existem?
Adriano Dornelas
Re: Paginação não funciona
20 de September de 2012 às 06:19PM
Os imoveis são listados por categoria e nesta categoria ai existem 4 imoveis, era pra quando eu clicar em proximo ele ir para proxima pagina e mostrar o 4º imovel, porem isso não esta acontecendo.

Se voce olhar bem o código esta sendo feita a contagem de imoveis sim, verá que tem até uma parte em meu codigo que ele mostra quantos imoveis foram encontrados e lista os numeros

$categoria = $_GET['categoria'];
$consulta = "SELECT * FROM imoveis WHERE categoria LIKE '$categoria' ";
$query = mysql_query("$consulta LIMIT $inicio,$total_reg");
$resultado = mysql_query($consulta);
$linhas = mysql_num_rows($resultado);

echo "<font color=\"#0000FF\"><b><u>Encontrados: </b>(" . $linhas . ")</u></font>
Marcos Regis
Re: Paginação não funciona
20 de September de 2012 às 10:36PM
Há vários erros, mas o principal é que no código que vocÊ postou VOCÊ NÃO CONTA quantos registros existem.

Eis as correções



$sql = 'SELECT COUNT(*) as total FROM tabela ';
$where = 'campo=valor'; // Adicione os critérios corretamente
$res = mysql_query($sql . $where);
$row = mysql_fetch_assoc($res);
$qt_registros_existentes = $row['total']; // AQUI ESTÁ A CONTAGEM

No seu link vocÊ TEM QUE COLOCAR TODOS OS CRITERIOS UTILIZADOS NA PESQUISA INCLUINDO A CATEGORIA

ficaria algo assim
if($mais <= $pgs) {
echo '<a href="'. $_SERVER['PHP_SELF'].'?pagina='.($mais).'&categoria=' . $categoria .'"'>próxima</a>';
}
Adriano Dornelas
Re: Paginação não funciona
21 de September de 2012 às 01:56AM
MUITO OBRIGADO Marcos pela ajuda, o código ja melhorou bastante, porem ainda estou com problemas, antes quando clicava em proximo ele ia para proxima pagina e aparecia escrito nenhum encontrado, agora ao clicar em proximo ele permanece na mesma pagina e ond estava escrito proximo muda para anterior e quando clico em anterior ele muda para proximo, mas a pagina permanece com os mesmos 3 imoveis sem ir para o 4º imovel.

Voce vai entender melhor se entrar no site

Se possivel entra no site www.fernandoduarteimoveis.com depois na pesquisa rapida escolha Sitios e Granjas e clique em pesquisar, repare q vai aparecer emcima escrito encontrados 4 até ai tudo bem, embaixo vai aparecer 3 imóveis pois eu limitei para aparecer 3 por pagina, até ai tambem esta tudo bem, cliquem no botão proximo, ai vem o problema era pra aparecer o 4º imóvel, porem não aparece.

Foi o primeiro site que fiz, é meio antigo, mas recentemente o cliente apareceu com imóveis novos, ai tive de adaptar a paginação para o site

Aqui esta o código apos a alteração

<?php

include "conectar.inc";

$total_reg = "3"; //DEFINE A QUANTIDADE DE LINHAS

$pagina = $_GET['pagina'];

if($pagina == "") {
$pagina = "1";
}

$inicio = $pagina - 1;
$inicio = $total_reg * $inicio;

$categoria = $_GET['categoria'];

$consulta = 'SELECT * FROM imoveis ';
$where = "WHERE categoria='$categoria'";
$resultado = mysql_query($consulta . $where);
$row = mysql_fetch_assoc($resultado);
$qt_registros_existentes = $row['4'];
$linhas = mysql_num_rows($resultado);

if($linhas == 0)
{
echo "Nenhum(a) <b>" . $categoria . "</b> encontrado.";

}
else
{

$regLinha = "1"; //NUMERO DE REGISTROS POR LINHA

$i = ceil($total_reg / $regLinha);
$j = "1";
$z = "0";

echo "<font color=\"#0000FF\"><b><u>Encontrados: </b>(" . $linhas . ")</u></font><table width=510px cellspacing=0 cellpadding=0 border=2 bordercolor=#0000FF bordercolordark=#0000ff bordercolorlight=#0000ff>";

while($mostrar = mysql_fetch_object($resultado))
{
echo "<tr><td><table border=0><td width=150px height=112 rowspan=2 align=center valign=middle border=0><img src='imagens/imoveis/img_abertura/" . $mostrar->foto . "'alt='Imagem' width='150' /></td><td width=350px align=center><b><u>". $mostrar->nome . "</td></tr><tr><td align=left valign=middle>" . $mostrar->descricao. "</td></tr><tr><td colspan=2 align=center><a href='" . $mostrar->id . "'>Detalhes</a></td></tr></table>";
$z++;
if($z == $regLinha and $j < $i)
{
echo "</tr><tr>";
$z = 0;
$j++;
}
if($z == $regLinha and $j == $i)
{
echo "</tr>";
}
}
echo "</table>";

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

$pgs = ceil($linhas / $total_reg);

if($pgs > 1 ) {

echo "<br />";

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

// Listando as paginas
for($i=1;$i <= $pgs;$i++) {
if($i != $pagina) {
echo '<a href="'.$_SERVER['PHP_SELF'].'?pagina='.($i).'&categoria='.$categoria.'">$i</a> | ';
} else {
echo " <strong>".$i."</strong> | ";
}
}

if($mais <= $pgs) {
echo '<a href="'.$_SERVER['PHP_SELF'].'?pagina='.($mais).'&categoria='.$categoria.'">próxima</a>';
}
}}
?>


OBSERVAÇÃO IMPORTANTE: se eu alterar a linha

$consulta = 'SELECT * FROM imoveis ';

PARA

$consulta = 'SELECT COUNT(*) as total FROM imoveis ';

A página aparece sem nenhum imovel.

Sei que apos sua ajuda ja deu uma boa melhorada no codigo e acredito q voce podera me ajudar a solucionar de vez este problema pois ja postei o mesmo problema em 3 foruns diferentes e niguem achou uma solução.

Vale lembrar que n entendo muito de php se puder explicar com alguns detalhes quando for passar a solução para o codigo eu agradeço muito.

Obrigado.
Marcos Regis
Re: Paginação não funciona
21 de September de 2012 às 04:08PM
Você não entendeu o que postei.
Vamos primeiro entender o que é paginação
Supondo que você tenha no banco 34 imoveis e quer paginar de 6 em 6.
Quantas páginas irá exibir?
Para saber isso, é preciso primeiro CONTAR PRIMEIRO quantos imoveis existem no BD e é aí que entra o SELECT COUNT()

Pegando a quantidade que existe no BD é possível calcular quantas páginas vão ser exibidas:

$num_registros = SELECT COUNT() as total FROM tabela WHERE condicao
$num_registros_por_pagina = 6;
$num_paginas = ceil($num_registros/$num_registros_por_pagina);

Isso tem que ser feito ANTES de iniciar a pesquisa paginada.

Quando vc faz SELECT campos FROM tabela WHERE condicao LIMIT 0, 10 o BD responde com no máximo 10 registros e mysql_num_rows CONTA QUANTOS REGISTROS FORAM RECUPERADOS PELA CONSULTA e não quantos registros existem no BD.

Outra coisa importante
O WHERE da primeira página TEM QUE SER IGUAL em todas as outras paginas e por isso TEM QUE PASSAR OS ARGUMENTOS a cada clique do link.

O seu problema está nestas duas coisas que expliquei.
Adriano Dornelas
Re: Paginação não funciona
21 de September de 2012 às 10:51PM
É realmente não estou consseguindo adaptar isso no meu sistema, não esta funcionando, sei que vc esta explicando corretamente o problema é eu q n estou consseguindo raciocinar isso,

Voce tem MSN? assim seria mais facil pra min, prometo que não vou encher o saco, é coisa rapida, so pra resolver esse problema na paginação mesmo,

Obrigado.
Marcos Regis
Re: Paginação não funciona
22 de September de 2012 às 03:10PM
Dê uma olhada nisso

http://phpbrasil.com/artigo/OTjdGnStzm9n/paginacao-com-mysql--reduzindo-consultas-e-otimizando-links-de-paginacao-mysql-40
Adriano Dornelas
Re: Paginação não funciona
22 de September de 2012 às 10:14PM
Infelismente o link acima não esta funcionando
Adriano Dornelas
Re: Paginação não funciona
22 de September de 2012 às 10:15PM
Tentei abrir porem, n conssegui
Marcos Regis
Re: Paginação não funciona
23 de September de 2012 às 08:19AM
É, esqueci que este meu artigo está ainda aguardando moderação.
Mas se procurar na seção de artigos tem material lá explicando como trabalhar com paginação.
Adriano Dornelas
Re: Paginação não funciona
24 de September de 2012 às 12:20AM
Problema resolvido
fiz em 2 paginas

listar_imoveis.php

<?php

include "conectar.inc";

$numreg = 3;

if (!isset($pg)) {
$pg = 0;
}

$inicial = $_GET['pg']*$numreg;

$categoria = $_GET['categoria'];

$consulta = mysql_query("SELECT * FROM imoveis WHERE categoria LIKE '$categoria' LIMIT $inicial, $numreg ");

$sql_conta = mysql_query("SELECT categoria FROM imoveis WHERE categoria='$categoria'");

$quantreg = mysql_num_rows($sql_conta);

include("paginacao.php");

echo "<br><br>";

while($mostrar = mysql_fetch_object($consulta))
{
echo "<tr><td><table border=0><td width=150px height=112 rowspan=2 align=center valign=middle border=0><img src='imagens/imoveis/img_abertura/" . $mostrar->foto . "'alt='Imagem' width='150' /></td><td width=350px align=center><b><u>". $mostrar->nome . "</td></tr><tr><td align=left valign=middle>" . $mostrar->descricao . "</td></tr><tr><td colspan=2 align=center><a href='" . $mostrar->id . "'>Detalhes</a></td></tr></table>";
}
?>

paginação.php

<style type="text/css">
<!--
.pgoff {font-family: Verdana, Arial, Helvetica; font-size: 12px; color: #0000FF; text-decoration: none}
a.pg {font-family: Verdana, Arial, Helvetica; font-size: 12px; color: #003366; text-decoration: none}
a:hover.pg {font-family: Verdana, Arial, Helvetica; font-size: 12px; color: #0066cc; text-decoration:underline}
-->
</style>

<?php

$quant_pg = ceil($quantreg/$numreg);
$quant_pg++;

if (@$_GET['pg']>0) {
echo "<a href=".$_SERVER['PHP_SELF']."?pg=".(@$_GET['pg']-1)."&categoria=$categoria class=pg>&laquo; anterior </a>";
} else {
echo "<font color=#cccccc>&laquo; anterior </font>";
}

if ((@$_GET['pg']+2)<$quant_pg) {
echo "<a href=".$_SERVER['PHP_SELF']."?pg=".(@$_GET['pg']+1)."&categoria=$categoria class=pg>Proximo &raquo;</a>";
} else {
echo "<font color=#cccccc> proximo &raquo;</font>";
}
?>
Marcos Regis
Re: Paginação não funciona
24 de September de 2012 às 11:35AM
Seu jeito está errado. Se tentar rodar esse código em um sistema que tenha somente 1000 registros, ele vai travar pois voce está tentando contar os registros com mysql_num_rows e já te falei QUE ISSO ESTÁ ERRADO!

Troque


$sql_conta = mysql_query("SELECT categoria FROM imoveis WHERE categoria='$categoria'");

$quantreg = mysql_num_rows($sql_conta);


por
$sql_conta = mysql_query("SELECT COUNT(*) as total FROM imoveis WHERE categoria='$categoria'");
$quantreg = mysql_fetch_result($sql_conta,0,'total');
Adriano Dornelas
Re: Paginação não funciona
24 de September de 2012 às 07:09PM
ok, vou tentar aqui
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.