Class G_Paginacao{ /* Baseado no código do Calvin http://phpbrasil.com/scripts/script.php/id/581 Colocado em uma classe por Fabio Issamu Oshiro 13/8/2006 */ var $registros_por_pagina; var $pagina,$paginaKey; var $query; var $currentPage; var $link_de_navegacao; function G_Paginacao(){ $this->registros_por_pagina = 10; // auto explicativo $this->currentPage="?"; $this->paginaKey="pagina"; } function SetPaginacao($query){ $this->pagina = empty($_GET[$this->paginaKey])? 1 : $_GET[$this->paginaKey]; // qual página estamos visualizando? $pagina_anterior = $this->pagina - 1; $pagina_posterior = $this->pagina + 1; $registro_inicio = ($this->registros_por_pagina * $this->pagina) - $this->registros_por_pagina; /* Vamos calcular a página anterior e posterior que estamos Em seguida devemos calcular qual o ponto nos registros retornados na QUERY, acima, atualmente devemos RECOMEÇAR a ler. */ $resultado = mysql_query($query); $total_de_registros = mysql_num_rows($resultado); /* Descobrir qual o número total de registros que a busca QUERY retorna */ if ($total_de_registros <= $this->registros_por_pagina) { $total_de_paginas = 1; }elseif (($total_de_registros % $this->registros_por_pagina) == 0) { $total_de_paginas = ($total_de_registros / $this->registros_por_pagina); }else{ $total_de_paginas = ($total_de_registros / $this->registros_por_pagina) + 1; } /* Neste pedaço se faz o cálculo de número de páginas que será preciso dividir o resultado */ $total_de_paginas = (int) $total_de_paginas; /* Caso o número seja quebrado, transformar em número inteiro */ if (($this->pagina > $total_de_paginas) || ($this->pagina < 0)) { echo 'número da página inválido'; exit; } $query = $query . " LIMIT $registro_inicio, $this->registros_por_pagina"; /* Aqui se faz a mágica de limitar os resultados que vc deseja para a página ser do registro X até Y Caso tenha prestado atenção no código, perceberá que o segredo da paginação de resultados se limita ao uso do recurso LIMIT do MySQL para limitar a busca para os registros que vc quer mostrar na página. Explicação sobre como funciona esse pequena parte do SQL. A QUERY: SELECT * FROM tabela_qualquer WHERE idnome='$idnome' vai retornar o seguinte resultado resultado | idnome | nome | coluna1 | coluna2 0 1 manuel xxx yyy 1 2 joaquim xxx yyy 3 3 tereza xxx yyy 4 4 luiz xxx yyy 5 5 francisco xxx yyy A linha resultado 0 é a primeira linha dos resultados encontrados. A numeração é a partir de ZERO e não 1 como se pensaria. Se vc quizesse apenas os registros de joaquim a luiza vc faria esta query SELECT * FROM tabela_usuarios LIMIT 1,3 O que significa LIMIT 1,3? Indica que vc quer 3 registros a partir da linha 1 da busca. */ $resultado = mysql_query($query); ?> /* * Seção para criar link de navegação entre as páginas * Vai aparecer como aqueles link do tipo * * Anterior 1 2 [3] 4 5 Próximo */ $this->link_de_navegacao = ''; if ($total_de_paginas>1){ /* link "anterior" */ if($pagina_anterior) { $this->link_de_navegacao .= " Anterior "; }else{ $this->link_de_navegacao .= " Anterior "; } for($i = 1; $i <= $total_de_paginas; $i++) { if($i != $this->pagina) { /* link individual para as outras páginas */ $this->link_de_navegacao .= " $i "; }else{ $this->link_de_navegacao .= " $i "; } } /* link "proximo" */ if($this->pagina != $total_de_paginas) { $this->link_de_navegacao .= "Próximo"; } } return $resultado; } } ?> Modo de Usar: $objPaginacao=new G_Paginacao; //caso você queira alterar o número de páginas exibidas //$objPaginacao->registros_por_pagina=4; //caso você tenha que usar outro nome no QueryString Ex: nomedasuapagina.php?paginacao2=2 //$objPaginacao->paginaKey="paginacao2"; $objPaginacao->currentPage="nomedasuapagina.php"; $result = $objPaginacao->SetPaginacao("Select * From Tbl_alguma where alguma_coisa='algo' order by sua_ordem"); $num=mysql_numrows($result); if ($num==0){ echo "