Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ola pessoal olha eu aqui novamente estou com uma duvida em uma paginação de resultados, a paginação ocorre normalmente mas o que acontece é que onde tem o '>>' para a proxima página tipo se tem 3 paginas de resultados ele mostra normal mas quando estou na terceira página e clico no '>>' para proxima pagina ele ta sempre abrindo mais paginas mas em branco gostaria de saber o que há de errado com meu codigo vou postar ele aqui.
<?php
$pagina = $_GET["pagina"];
if(isset($pagina)) {
$pagina = $pagina;
} else {
$pagina = 1;
}
$result_pag = 15;
$inicio = ($pagina*$result_pag) - $result_pag;
$info = $_GET['numero'];
$categoria = $_POST['categoria'];
$tipo = $_POST['tipo'];
$cidade = $_POST['cidade'];
$sql_imoveis = "SELECT * FROM imoveis WHERE categoria LIKE'$categoria' AND tipo LIKE'$tipo' AND cidade LIKE'%$cidade%' ORDER BY categoria ASC LIMIT $inicio, $result_pag";
$imoveis = mysql_query($sql_imoveis);
?>
<table width="780" cellspacing="0" cellpadding="0" id="mytable">
<tr align="center"><br />
<td width="100" class="spec">Foto</td>
<td width="120" class="spec">Categoria</td>
<td width="320" class="spec">Endereço</td>
<td width="120" class="spec">Tipo Trans.</td>
<td width="120" class="spec">Valor</td>
</tr>
<?php
while ($row = mysql_fetch_array($imoveis,MYSQL_ASSOC)){
if ($strCor == 1){
$td = "<td class='color1'";
$strCor = 0;
}else{
$td = "<td class='color2'";
$strCor = 1;
}
$sql_categ = "select * from categoria where id_categ='".$row['categoria']."'";
$categ = mysql_query($sql_categ);
$sql_tipo = "select * from tipo where id_tipo='".$row['tipo']."'";
$tipo = mysql_query($sql_tipo);
echo "<tr align='center' height='25' >";
echo $td . "><a href='exibe_imoveis.php?pg=". $row['id_imoveis'] ."'><img height='45' border='0' src='fotos/".$row['imovelThumb'] . "' /></a></td>" ;
echo $td . ">" . mysql_result($categ,0,"categoria") . "</td>";
echo $td . "><a href='exibe_imoveis.php?pg=". $row['id_imoveis'] ."'>" . $row['endereco'] . "</a></td>";
echo $td . ">" . mysql_result($tipo,0,"tipo") . "</td>";
echo $td . ">R$" . $row['valor'] . "</td>";
echo "</tr>";
}
?>
</table>
<?php
if($pagina==""){
$pag_atual = 1; $pag_atual = $pagina;
}
$sql_select_all = "SELECT * FROM imoveis";
$sql_query_all = mysql_query($sql_select_all);
$total_registros = mysql_num_rows($sql_query_all);
$pags = ceil($total_registros/$result_pag);
$conta_pag = round($pags);
if($pag_atual > $conta_pag){
$pag_atual = $conta_pag;
}
if($pag_atual < 1){
$pag_atual = 1;
}
if($total_registros == "0"){
echo "<center>Nenhum resultado encontrado!</center>".$conta_pag; $absolutepage = $pag_atual;
}
$max_links = 3;
?>
<table width="780" cellspacing="3" cellpadding="0" align="center">
<tr>
<th> </th>
</tr>
<tr align="center">
<td width="100">
página
<?=$pag_atual?>
de
<?=$conta_pag?>
</td>
<td align="right">
<?php
echo "<a href='resultado.php?pagina=1' target='_self'><<</a> ";
for($i = $pagina-$max_links; $i <= $pagina-1; $i++) {
if($i <= 0) {
} else {
echo "<a href='resultado.php?pagina=".$i."' target='_self'>".$i."</a> ";
}
}
echo $pagina." ";
for($i = $pagina+1; $i <= $pagina+$max_links; $i++) {
if($i > $pags)
{
}
else
{
echo "<a href='resultado.php?pagina=".$i."' target='_self'>".$i."</a> ";
}
}
echo "<a href='resultado.php?pagina=".$i."' target='_self'>>></a> ";
?>
</td>
</tr>
</table>
</td>
</tr>
</table>
se alguem souber me dizer o que esta de errado eu agradeço muito.
Sim entendo mas no codigo esta correto eu faço essa divisao e multiplicacao aqui no codigo
$inicio = ($pagina*$result_pag) - $result_pag;
e limito ele logo abaixo veja.
$sql_imoveis = "SELECT * FROM imoveis WHERE categoria LIKE'$categoria' AND tipo LIKE'$tipo' AND cidade LIKE'%$cidade%' ORDER BY categoria ASC LIMIT $inicio, $result_pag";
mas o que acontece é que no codigo tem um '>>' que pula pra proxima pagina e quando ta em 1 pagina de resultado e clica nele ele mostra que tem 5 paginas de resultado total assim dando erro posteriormente pois as proximas paginas não tem resultado algum
Claro, você está multiplicando antes de tirar 1. Veja a sua var:
$inicio = ($pagina*$result_pag) - $result_pag;
O certo seria:
$inicio = ($pagina-1) * $result_pag;
Abraços Walker
ok vou testar obrigado por enquanto...abraços
não deu não modifiquei a operação mas continua dando o erro no '>>' ele ta indo pra 5 paginas de resultado
eu axo que o erro ta acontecendo na hora que ele ta incrementando a pagina de resultados só não sei onde ta o erro.
já inclui esse mesmo codigo em outros script e numca de esse erro sei la o que pode ser.
Sim, agora você tem que corrigir o valor que você passa para essa url ">>" ou "<<". O mais simples é pegar o valor do parâmetro e adicionar ou retirar 1. Ai você pode criar um IF, para que ele não fique adicionando valor na url quando chegar na ultima página, ou diminuir a página se for 1. Eu faria da seguinte maneira:
//Variáveis importantes
$total_de_resultados = 100;
$total_de_paginas = 100/20;
$url_proximo = $valor_pagina_atual + 1;
$url_anterior = $valor_pagina_atual - 1;
//URL Proximo - Falo para aparecer a url se o valor dela for menor que 5
if($url_proximo < $total_de_paginas){
<a href="pagina.php?pg=<?=$url_proximo?>">Proximo</a>
}
//URL anterior - Falo para aparecer a url se o valor dela for maior que 0, sendo 1 2 3 ...
if($url_anterior > 0){
<a href="pagina.php?pg=<?=$url_anterior?>">Anterior</a>
}olá bom dia consegui aqui um outro codigo de paginação porem quando tem somente dois resultados na página ele está mostrando mais páginas de resultado tipo assim encontrou dois registros e trouxe na tela os dois resultados mas na paginação mostra como se tivesse 3 paginas de resultados mas tem somente 1.
ai vai o codigo
<?php
$info = $_GET['numero'];
$info2 = $_GET['tipo'];
$pagina = ($_GET['pagina']);
$pagina = filter_var($pagina, FILTER_VALIDATE_INT);
$inicio = 0;
$limite = 15;
if ($pagina!='')
{
$inicio = $pagina - 1;
}
$imoveis = mysql_query("SELECT * FROM imoveis WHERE categoria LIKE'$info' or tipo LIKE'$info2' ORDER BY categoria ASC LIMIT $inicio, $limite");
if (mysql_num_rows($imoveis)>0)
{
$busca_total = mysql_query("SELECT COUNT(*) as total FROM imoveis");
$total = mysql_fetch_array($busca_total);
$total = $total['total'];
?>
<table width="780" cellspacing="0" cellpadding="0" id="mytable">
<tr align="center"><br />
<td width="100" class="spec">Foto</td>
<td width="120" class="spec">Categoria</td>
<td width="320" class="spec">Endereço</td>
<td width="120" class="spec">Tipo Trans.</td>
<td width="120" class="spec">Valor</td>
</tr>
<?php
while ($row = mysql_fetch_array($imoveis,MYSQL_ASSOC)){
if ($strCor == 1){
$td = "<td class='color1'";
$strCor = 0;
}else{
$td = "<td class='color2'";
$strCor = 1;
}
$sql_categ = "select * from categoria where id_categ='".$row['categoria']."'";
$categ = mysql_query($sql_categ);
$sql_tipo = "select * from tipo where id_tipo='".$row['tipo']."'";
$tipo = mysql_query($sql_tipo);
echo "<tr align='center' height='25' >";
echo $td . "><a href='exibe_imoveis.php?pg=". $row['id_imoveis'] ."'><img height='45' border='0' src='fotos/".$row['imovelThumb'] . "' /></a></td>" ;
echo $td . ">" . mysql_result($categ,0,"categoria") . "</td>";
echo $td . "><a href='exibe_imoveis.php?pg=". $row['id_imoveis'] ."'>" . $row['endereco'] . "</a></td>";
echo $td . ">" . mysql_result($tipo,0,"tipo") . "</td>";
echo $td . ">R$" . $row['valor'] . "</td>";
echo "</tr>";
}
?>
</table>
<br />
<?php
if($pagina==""){
$pagina_atual = 1;
}else{
$pagina_atual = $pagina;
}
$sql_select_all = "SELECT * FROM imoveis";
$sql_query_all = mysql_query($sql_select_all);
$total_registros = mysql_num_rows($sql_query_all);
$paginas = ceil($total_registros/$result_pag);
$conta_pag = round($paginas);
if($pagina_atual > $conta_pag){
$pagina_atual = $conta_pag;
}
if($pagina_atual < 1){
$pagina_atual = 1;
}
if($total_registros == "0"){
echo "<center>Nenhum resultado encontrado!</center>".$conta_pag;
}else{
$absolutepage = $pagina_atual;
}
echo '<div class="qtd_pagina">página '.$pagina_atual.' de '.$conta_pag.'</div>';
$prox = $pagina + 1;
$ant = $pagina - 1;
$ultima_pag = ceil($total / $limite);
$penultima = $ultima_pag - 1;
$adjacentes = 2;
echo '<div class="paginacao">';
if ($pagina>1)
{
$paginacao = '<a href="listar_imoveis.php?pagina='.$ant.'&numero='.$info.'&tipo='.$info2.'">anterior</a>';
}
if ($ultima_pag <= 5)
{
for ($i=1; $i< $ultima_pag+1; $i++)
{
if ($i == $pagina)
{
$paginacao .= '<a class="atual" href="listar_imoveis.php?pagina='.$i.'&numero='.$info.'&tipo='.$info2.'">'.$i.'</a>';
} else {
$paginacao .= '<a href="listar_imoveis.php?pagina='.$i.'&numero='.$info.'&tipo='.$info2.'">'.$i.'</a>';
}
}
}
if ($ultima_pag > 5)
{
if ($pagina < 1 + (2 * $adjacentes))
{
for ($i=1; $i< 2 + (2 * $adjacentes); $i++)
{
if ($i == $pagina)
{
$paginacao .= '<a class="atual" href="listar_imoveis.php?pagina='.$i.'&numero='.$info.'&tipo='.$info2.'">'.$i.'</a>';
} else {
$paginacao .= '<a href="listar_imoveis.php?pagina='.$i.'&numero='.$info.'&tipo='.$info2.'">'.$i.'</a>';
}
}
$paginacao .= '...';
$paginacao .= '<a href="listar_imoveis.php?pagina='.$penultima.'&numero='.$info.'&tipo='.$info2.'">'.$penultima.'</a>';
$paginacao .= '<a href="listar_imoveis.php?pagina='.$ultima_pag.'&numero='.$info.'&tipo='.$info2.'">'.$ultima_pag.'</a>';
}
elseif($pagina > (2 * $adjacentes) && $pagina < $ultima_pag - 3)
{
$paginacao .= '<a href="listar_imoveis.php?pagina=1&numero='.$info.'&tipo='.$info2.'">1</a>';
$paginacao .= '<a href="listar_imoveis.php?pagina=1&numero='.$info.'&tipo='.$info2.'">2</a> ... ';
for ($i = $pagina-$adjacentes; $i<= $pagina + $adjacentes; $i++)
{
if ($i == $pagina)
{
$paginacao .= '<a class="atual" href="listar_imoveis.php?pagina='.$i.'&numero='.$info.'&tipo='.$info2.'">'.$i.'</a>';
} else {
$paginacao .= '<a href="listar_imoveis.php?pagina='.$i.'&numero='.$info.'&tipo='.$info2.'">'.$i.'</a>';
}
}
$paginacao .= '...';
$paginacao .= '<a href="listar_imoveis.php?pagina='.$penultima.'&numero='.$info.'&tipo='.$info2.'">'.$penultima.'</a>';
$paginacao .= '<a href="listar_imoveis.php?pag='.$ultima_pag.'&numero='.$info.'&tipo='.$info2.'">'.$ultima_pag.'</a>';
}
else {
$paginacao .= '<a href="listar_imoveis.php?pagina=1&numero='.$info.'&tipo='.$info2.'">1</a>';
$paginacao .= '<a href="listar_imoveis.php?pagina=1&numero='.$info.'&tipo='.$info2.'">2</a> ... ';
for ($i = $ultima_pag - (4 + (2 * adjacentes)); $i <= $ultima_pag; $i++)
{
if ($i == $pagina)
{
$paginacao .= '<a class="atual" href="listar_imoveis.php?pagina='.$i.'&numero='.$info.'&tipo='.$info2.'">'.$i.'</a>';
} else {
$paginacao .= '<a href="listar_imoveis.php?pagina='.$i.'&numero='.$info.'&tipo='.$info2.'">'.$i.'</a>';
}
}
}
}
}
if ($prox <= $ultima_pag && $ultima_pag > 2)
{
$paginacao .= '<a href="listar_imoveis.php?pagina='.$prox.'&numero='.$info.'&tipo='.$info2.'">próxima »</a>';
}
echo $paginacao;
echo '</div>';
?>
o link do site que esta dando erro é esse aqui se quiserem dar uma olhada pra ententer o erro
pessoal modifiquei tudo novamente e agora estou utilizando o paginator pra fazer a paginação dos resultados agora os resultados da busca ele ta funfando belezinha ma como td nunca é mil maravilhas nos links do menu onde eu passava o id por get pra trazer somenete o resultado que eu queria ta dando erro na paginação de Resource Id# quando vou para a proxima página ele nao ta trazendo o resultado da paginação.
Se alguem tiver ideia do que seja me de uma luz por favor.
ta dando erro na paginação de Resource Id#
isso não é um erro do php, é pq você está tentando imprimir (echo/print..) algo que não deveria.
passe por um fetch() antes de imprimir o retorno do mysql_query()
<body>
<div>
<?php @include("includes/topo.php"); ?>
</div>
<div id="page"></div>
<div id="busca"><?php @include ("includes/busca.php"); ?></div>
<div id="content">
<?php
$info = $_GET['numero'];
$info2 = $_GET['tipo'];
$_pagi_sql = "SELECT * FROM imoveis WHERE categoria LIKE '$info' or tipo LIKE '$info2' ORDER BY categoria";
$_pagi_cuantos = 15;
$_pagi_nav_num_enlaces = 10;
include("includes/paginator.inc.php");
?>
<table width="780" cellspacing="0" cellpadding="0" id="mytable">
<tr align="center"><br />
<td width="100" class="spec">Foto</td>
<td width="120" class="spec">Categoria</td>
<td width="320" class="spec">Endereço</td>
<td width="120" class="spec">Tipo Trans.</td>
<td width="120" class="spec">Valor</td>
</tr>
<?php
while ($row = mysql_fetch_assoc($_pagi_result)){
if ($strCor == 1){
$td = "<td class='color1'";
$strCor = 0;
}else{
$td = "<td class='color2'";
$strCor = 1;
}
$sql_categ = "select * from categoria where id_categ='".$row['categoria']."'";
$categ = mysql_query($sql_categ);
$sql_tipo = "select * from tipo where id_tipo='".$row['tipo']."'";
$tipo = mysql_query($sql_tipo);
echo "<tr align='center' height='25' >";
echo $td . "><a href='exibe_imoveis.php?pg=". $row['id_imoveis'] ."'><img height='45' border='0' src='fotos/".$row['imovelThumb'] . "' /></a></td>" ;
echo $td . ">" . mysql_result($categ,0,"categoria") . "</td>";
echo $td . "><a href='exibe_imoveis.php?pg=". $row['id_imoveis'] ."'>" . $row['endereco'] . "</a></td>";
echo $td . ">" . mysql_result($tipo,0,"tipo") . "</td>";
echo $td . ">R$" . $row['valor'] . "</td>";
echo "</tr>";
}
?>
</table>
<?php
echo "<div class=paginacao>".$_pagi_navegacion."</div>";
?>
</div>
<div id="body_bottom"></div>
<div id="footer">
<div id="footer_cont">
<div id="net">
<a href="http://www.netcomunicacao.com.br">Desenvolvido por:<br />
<img src="images/net.png" border="0" alt="Net Comunicação e Design" /></a>
</div>
</div>
</div>
</body>
</html>
[/php]
cara esse ai é o codigo que me mostra os resultados ai tenho o menu que eu coloquei os botoes tipo assim
VENDA url=listar_imoveis.php?tipo=1
RURAIS url=listar_imoveis.php?numero=4
ai eu pego eles com o get la em cima mas na paginação para a proxima pagina que da erro de resource como posso resolver
consegui resolver o problema eu tava passando o nome da variavel com o mesmo nome do campo mudei o nome da variavel tipo= para id= o numero que quero os resultados e do um get nele e boa agora sem erros. Valeu ao pessoal que tentaram me ajudar.
Eu nem li o seu código, o que você tem que entender sobre paginação é o LIMITE na sua query, exemplo:
SELECT * FROM tabela WHERE filtro = 'valor' ORDER BY id DESC LIMIT 0,20
0 - É onde começa a sua paginação.
20 - Limite de resultados que você deseja mostrar.
Então se por acaso você tem 1000 itens para mostrar e o seu limite é 20, você deve criar o numero de páginas dividindo 1000 por 20 que é igual a 50 páginas.
Ai então você usa a url para fazer o filtro na paginação, exemplo:
url : pagina.php?pg=2
Então se você der um echo na sua query, você vai ver da seguinte maneira:
SELECT ... LIMIT 20,20
Assim ele vai listar os produtos da segunda página. E assim por diante, se a página for 3 eu retiro 1 e multiplico por 20, ficando 2 * 20 = 40. Mas porque eu sempre tiro 1 ? Porque na url o certo é mostrar 1,2,3,4,5 ... 20 e assim por diante e se o usuário estiver na primeira página, que seria o valor do paramentro 1, eu retiro 1 deixando o valor 0 e multiplico por 20, assim ele vai ficar com o valor da $var 0, ficando assim:
SELECT ... LIMIT 0,20 - Assim mostrando a primeira página de resultados.
Paginação é super simples de ser feita. Só entender como funciona ^^
Espero ter ajudado, abraços Walker