Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal, estou com um problema com paginação. Primeiro deixa eu explicar a situação.
Tenho um sistema de busca com paginação. Quando a pessoa efetua uma busca, deve mostrar um determinado número de registros por página. A paginação está funcionando, porém não está limitando o número de registros por página. Por exemplo, se uma busca retorna 7 registros e o limite de registros por página é de 5 registros, deveria criar 2 paginações. Acontece que ele cria as 2 paginações, porém as duas páginas tem os 7 registros como conteúdo (e não uma com 5 e outra com 2).
Abaixo segue o código:
busca.php
<?php
include ("conecta_mysql.inc");
if ($_GET['busca'] == "")
{
header ("Location: /direito");
}
$busca = $_GET['busca'];
$busca = mysql_real_escape_string($busca);
$numreg = 1;
if (!isset($pg))
{
$pg = 0;
}
$inicial = @$_GET['pg'] * $numreg;
$resultado_busca = mysql_query("SELECT * FROM `noticias` WHERE ((`titulo` LIKE '%".$busca."%') OR (`texto` LIKE '%".$busca."%')) ORDER BY id DESC");
$quantreg = mysql_num_rows($resultado_busca);
if ($quantreg == 0)
{
echo "Nenhuma notícia contendo o texto <b>".$busca."</b> foi encontrada.";
}
else
{
while ($linha = mysql_fetch_array($resultado_busca))
{
$novadata = substr($linha['data'],8,2)."/".substr($linha['data'],5,2)."/".substr($linha['data'],0,4);
echo "<h1 class=noticias>{$linha['titulo']}</h1>";
echo "<h2 class=noticias>Notícia postada em $novadata.</h2><br />";
$texto = nl2br($linha['texto']);
echo $texto;
echo "<div id=noticias-linha></div>";
}
}
?>
busca-paginacao.php
<?php
$quant_pg = ceil($quantreg/$numreg);
$quant_pg++;
if ( @$_GET['pg'] > 0)
{
echo "<a href=".$_SERVER['PHP_SELF']."?busca=$busca&pg=".(@$_GET['pg']-1)." class=paginacao>« Página anterior</a>";
}
else
{
echo "";
}
for($i_pg=1; $i_pg<$quant_pg;$i_pg++)
{
if (@$_GET['pg'] == ($i_pg-1))
{
echo " <span class=paginacao-off>[$i_pg]</span> ";
}
else
{
$i_pg2 = $i_pg-1;
echo " <a href=".$_SERVER['PHP_SELF']."?busca=$busca&pg=$i_pg2 class=paginacao>$i_pg</a> ";
}
}
if ((@$_GET['pg']+2) < $quant_pg)
{
echo "<a href=".$_SERVER['PHP_SELF']."?busca=$busca&pg=".(@$_GET['pg']+1)." class=paginacao>Próxima página »</a>";
}
else
{
echo "";
}
?>
Alguém sabe onde está o erro?
Esqueci, depois do fim do "if" no primeiro código, tem isso:
include("busca-paginacao.php");
>
Tá faltando o LIMIT na cláusula da query.
http://dev.mysql.com...timization.html
http://dev.mysql.com.../en/select.html
Carlos Eduardo
Carlos, eu tentei colocar LIMIT la antes, estava assim:
$resultado_busca = mysql_query("SELECT * FROM noticias WHERE ((titulo LIKE '%".$busca."%') OR (texto LIKE '%".$busca."%')) ORDER BY id DESC LIMIT $inicial, $numreg");
$numreg permanece igual a 1, como no código do primeiro post.
Com essa consulta, o resultado de $quantreg vai ser um, mesmo existindo mais resultados. Ai que está a dúvida. O que fazer?
Opa! Consegui!
Fiz a seguinte alteração:
$resultado_busca = mysql_query("SELECT * FROM `noticias` WHERE ((`titulo` LIKE '%".$busca."%') OR (`texto` LIKE '%".$busca."%')) ORDER BY id DESC LIMIT $inicial, $numreg");
$busca_registros = mysql_query("SELECT * FROM `noticias` WHERE ((`titulo` LIKE '%".$busca."%') OR (`texto` LIKE '%".$busca."%')) ORDER BY id DESC");
$quantreg = mysql_num_rows($busca_registros);
Agora só restou um problema, quando a busca tem espaços, a paginação só pega o primeiro termo da busca, como fazer pra pegar todos os termos?
Pra resolver o problema do espaço eu coloquei no arquivo busca-paginacao.php o seguinte
$busca = str_replace(" ","%20",$busca);
Não sei se é o mais certo. Mas funcionou. Valeu!
Tá faltando o LIMIT na cláusula da query.
http://dev.mysql.com/doc/refman/4.1/pt/limit-optimization.html
http://dev.mysql.com/doc/refman/5.0/en/select.html
Carlos Eduardo