Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Pestana74

[Resolvido] Erro na paginação PHP

Recommended Posts

Amigos, estou com umproblema de paginação.. Consigo listar todos os registros, separar por página e etc...

Só que clicando em avançar ou nos numeros da pagina ex: 1,2,3... é listado apenas o registro da primeira página.

 

O seja a pagina não muda sempre fica mostrando a primeira pagina.. O que pode ser?

 

Segue cópia do script:

 

 

     	<?

if($page > 1){

$anterior = $page -1;

$url = "?pg=$pg&acao=$acao&page=$anterior";

echo "<li><a href='$url' class='pag_nav'><span><span>Anterior<span/></span></a></li>";

} else {

echo "<li><a href='#' class='current_page'><span><span>Anterior</span></span></a></li>";

}

?>

                 <? 

for($i=1; $i<$page; $i++)

if($i>=$page-5)

echo "<li><a href='?pg=$pg&acao=$acao&page=$i'><span><span>$i</span></span></a><li>";

echo "<a href='#' class='current_page'><span><span>$page</span></span></a></li> ";





for($i=$page+1; $i<=$tp; $i++)

if($i<=$page+5)

echo " <li> <a href='?pg=$pg&acao=$acao&page=$i'>$i</a></li>";



?>

                 <?

if($tp > $page){

$proxima = $page +1;

$url = "?pg=$pg&acao=$acao&page=$proxima";



echo "<li><a href='$url' class='pag_nav'><span><span>Próxima </span></span></a></li>";

} else {

echo "<li><a href='#' class='current_page'><span><span>Próxima </span></span></a></li>";

}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

mostre agora o trecho em que você monta a string sql.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mostre agora o trecho em que você monta a string sql.

 


<?

// inicio da acao LISTAR

//if($acao == "listar"){



$form2 = "FORMLISTA";



if(!empty($id_finalidade))

$whx1 = "AND id_finalidade = '$id_finalidade'";



	if(!empty($id_tipo))

	$whx2 = "AND id_tipo = '$id_tipo'";



		if(!empty($id_cidade))

		$whx3 = "AND id_cidade = '$id_cidade'";



			if(!empty($codigo))

			$whx4 = "AND referencia = '$codigo'";



$busca = "SELECT * FROM tb_imoveis WHERE status!='' $whx1 $whx2 $whx3 $whx4";

//echo $busca;



$total_reg = "3";



if(!$page){

$page = "1";

}else{
       $page = $_GET['page'];


}



$inicio = $page-1;

$inicio = $inicio*$total_reg;



$limite = mysql_query("$busca LIMIT $inicio,$total_reg");

$todos = mysql_query("$busca");



$tr = mysql_num_rows($todos);

//$tr = count($op); 

//echo $tr;



$tp = ceil($tr / $total_reg);



?>


Compartilhar este post


Link para o post
Compartilhar em outros sites

Seus calculos(offset e total de páginas) parecem corretos. Uma boa dia para debugar paginação é ficar imprimindo a consulta SQL nas páginas, assim você pode ter uma melhor idéia do que está acontecendo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já tentei de tudo que estava no meu conhecimento mas não consegui o resultado. Ela lista todas as paginas ex: 1.2.3.4.5 mas posso clicar em qualquer uma que sou levado para a primeira página... O que será que está errado? Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa parte está estranha...

if(!$page){

$page = "1";

}else{
       $page = $_GET['page'];


}

 

Acho que seria melhor:

$page = 1;
if(isset($_GET['page']) and $_GET['page'] <= $tp) { // $tp é onde está o total e páginas, né?
    $page = $_GET['page'];
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa parte está estranha...

if(!$page){

$page = "1";

}else{
       $page = $_GET['page'];


}

 

Acho que seria melhor:

$page = 1;
if(isset($_GET['page']) and $_GET['page'] <= $tp) { // $tp é onde está o total e páginas, né?
    $page = $_GET['page'];
}

 

 

Então mudei como sugeriu e não houve efeito continua mostrando em todas as páginas a pagina 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

E essa parte aqui:

 

$limite = mysql_query("$busca LIMIT $inicio,$total_reg");

$todos = mysql_query("$busca");

 

Você tinha que fazer query com a variável $limite, não?

Compartilhar este post


Link para o post
Compartilhar em outros sites

E essa parte aqui:

 

$limite = mysql_query("$busca LIMIT $inicio,$total_reg");

$todos = mysql_query("$busca");

 

Você tinha que fazer query com a variável $limite, não?

 

Não foi feito? não entendi?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ué... pelo que eu entendi do seu código você não está executando o "LIMIT $inicio,$total_reg"

 

Coloque assim pra ver:

$todos = mysql_query($limite);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ué... pelo que eu entendi do seu código você não está executando o "LIMIT $inicio,$total_reg"

 

Coloque assim pra ver:

$todos = mysql_query($limite);

 

 

Colocando assim tive erro e some a paginação.

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá um echo nesse query aí.

 

echo $limite;

 

 

me manda o resultado

 

verifique se o query é executado diretamente no mysql (usando o phpmyadmin por exemplo)

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá um echo nesse query aí.

 

echo $limite;

 

 

me manda o resultado

 

verifique se o query é executado diretamente no mysql (usando o phpmyadmin por exemplo)

 

 

Alterando para:

echo $limite = mysql_query("$busca LIMIT $inicio,$total_reg");

$todos = mysql_query($limite);

 

Dá o seguinte erro:

Resource id #29

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource

 

 

 

Isso acontece apenas no acesso adm do site. no front do site tambem tem paginação e está funcionando normal...

 

dá um echo nesse query aí.

 

echo $limite;

 

 

me manda o resultado

 

verifique se o query é executado diretamente no mysql (usando o phpmyadmin por exemplo)

 

 

Alterando para:

echo $limite = mysql_query("$busca LIMIT $inicio,$total_reg");

$todos = mysql_query($limite);

 

Dá o seguinte erro:

Resource id #29

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource

 

 

 

Isso acontece apenas no acesso adm do site. no front do site tambem tem paginação e está funcionando normal...

 

 

Além do erro acima some a paginação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigos, novamente explicando o meu problema..

A paginação lista a quantidade de páginas, mas au clicar em qualquer página e mostrado apenas a pagina 1

 

Ou seja tem lá: 1,2,3,4,5 (clico na 2 mostra a 1... clico na 4 mostra a 1 e assim por diante)

 

 

Alguem pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal resolvido pelo mangakah.. Muito obrigado Mangakah pela atenção e experiência no assunto!

 

$busca = "SELECT * FROM tb_imoveis WHERE status != '' $whx1 $whx2 $whx3 $whx4";




//echo $busca;



$registrosPorPagina = "3";


/*
Alterei aqui
*/

$page = 1;


if(isset($_GET['page'])
and $_GET['page'] > 1) {
$page = $_GET['page'];
}



/*
É preciso antes fazer a contagem dos registros no banco de dados ou não será é validar a página -- impedir que seja requisitada uma página maior que o total de páginas
*/
$contarRegistros	= "SELECT COUNT(*) AS total_registros FROM tb_imoveis";
$contarRegistros	= mysql_query($contarRegistros) or die('Contagem de registros falhou');
$contarRegistros	= mysql_fetch_array($contarRegistros, MYSQL_ASSOC);
$totalRegistros		= $contarRegistros['total_registros'];

$totalPaginas = ceil($totalRegistros / $registrosPorPagina);

$inicio = ($page-1) * $registrosPorPagina;

/**
Alterei aqui

*/
$busca .= " LIMIT $inicio,$registrosPorPagina";

// DEBUG
//echo "<h1>DEBUG</h1>";
//echo "<br />Página atual     = " . $page;
//echo "<br />Total registros  = " . $totalRegistros;
//echo "<br />Total páginas    = " . $totalPaginas;
//echo "<br />Consuta SQL      = " . $busca;
//echo "<hr />";

$limite = mysql_query("$busca");
$todos = mysql_query("$busca");







?>

 

 

 

 

 

/**
Navegação de Págians
*/

// Link para a primeira página - adicionei

// Link "Página anterior"
if($page > 1) {
$anterior = ($page - 1);

if($anterior > 1) { // LINK PARA A PRIMEIRA PÁGINA -- ADICIONEI
	$primeira = 1;
	echo "<li><a href='?pg=$pg&acao=$acao&page=$primeira' class='pag_nav'><span><span>Primeira<span/></span></a></li>";
}

$url = "?pg=$pg&acao=$acao&page=$anterior";

echo "<li><a href='$url' class='pag_nav'><span><span>Anterior<span/></span></a></li>";
}




// Lista de páginas -- Tive que refazer essa parte
for($i=1; $i <= $totalPaginas; $i++) {
if($i == $page) { // verifica se é a página atual
	echo "<li>$i</li>";
} else { // se não for gera um link
echo "<li><a href=\"?pg=$pg&acao=$acao&page=$i\">$i</a></li>";
}
}





// Próxima página
if($page < $totalPaginas){
$proxima = ($page + 1);



$url = "?pg=$pg&acao=$acao&page=$proxima";
echo "<li><a href='$url' class='pag_nav'><span><span>Próxima </span></span></a></li>";

if($proxima < $totalPaginas) { // LINK PARA A ULTIMA PÁGINA -- ADICIONEI
	$ultima = $totalPaginas;
	echo "<li><a href='?pg=$pg&acao=$acao&page=$ultima' class='pag_nav'><span><span>Ultima<span/></span></a></li>";
}


}









?>

 

RESOLVIDO E TESTADO TUDO OK!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.