Paginação de resultados com php e mysql (Aprenda definitivamente no passo a passo)


Olá pessoal!

Depois de muito tempo sem postar nada relacionado a programação, volto aqui com algo que é bastante requisitado no mundo da programação em php. Como fazer, e – principalmente – entender a lógica da paginação de resultados?

Confesso que tive dificuldades para aprender, até pela falta de bom material explicativo que fosse desde a lógica à prática. Então decidi fazer esse tutorial da forma mais clara e com boa explicação possível, para que aprendam a paginar definitivamente.

Se chegou até aqui, certamente que é porque já sabe o que é uma paginação de resultados, mas caso ainda não saiba, um exemplo fácil é a divisão de páginas que o Google faz quando você faz uma busca. Já imaginou se todos os resultados da pesquisa fossem exibidos em uma única página? Seria um desastre, não é?

♦ PRIMEIRA PARTE

Supondo que iremos rodar a nossa página em localhost (servidor local / seu próprio computador) e  que temos um banco de dados com o nome de loja, faremos uma conexão com o nosso servidor e iremos selecionar o nosso banco de dados desejado no seguinte código:

$conexao = mysql_connect("localhost","usuario","senha"); // Faz a conexão com o servidor local
$banco = mysql_select_db("loja", $conexao); // Seleciona o banco de dados 'loja'

Após termos feito a conexão e a seleção do banco com o qual queremos trabalhar, definiremos uma variável contendo um limite de registros a serem mostrados por página.

$limite = 5; // Define o limite de registros a serem exibidos com o valor cinco

Depois precisamos pegar pela url a página atual (número da página) que será exibida. Faremos isso usando a superglobal $_GET, e a variável ‘pag’ que estará na url.
(exemplo: http://www.meusite.com/pagincao.php?pag=1)
.

// Captura os dados da variável 'pag' vindo da url, onde contém o número da página atual
$pagina = $_GET['pag'];

Caso não exista nenhuma página (valor) vinda pela url, então definiremos o estado inicial da variável $pagina como um.

/* Se a variável $pagina não conter nenhum valor,
então por padrão ela será posta com o valor 1 (primeira página) */
if(!$pagina)
{
    $pagina = 1;
}

Até aqui tudo bem, mas é agora que começa a “complicar” os leigos em paginação. Nessa etapa, definiremos uma variável $inicio, e nela estará uma operação aritmética que irá definir – não a página inicial, como muitos se confundem -, mas, sim, a partir de qual registro do banco de dados irá  ser iniciado.

Veja:

/* Operação matemática que resulta no registro inicial
a ser selecionado no banco de dados baseado na página atual */
$inicio = ($pagina * $limite) - $limite;

Está confuso? Calma, irei explicar melhor rs…

Supondo que temos dez registros no nosso banco de dados, e sendo que o nosso limite de registros por página é cinco, então a partir de qual registro o número de uma página irá iniciar?

Para sabermos, faremos um exemplo com valores reais no lugar da $pagina e do $limite do código mostrado acima para que entenda melhor.
Iniciaremos pela primeira página:

$inicio = (1 * 5) – 5;

Essa operação resulta em zero. Mas, o inicio não deveria ser um? Não, pois vale lembrar que o inicio real dos registros no banco de dados tem o inicio a partir do número zero, e não do um. Então o primeiro registro a ser exibido estará correto! 🙂

E se fosse a página dois?

$inicio = (2 * 5) – 5;

O que resulta em cinco, ou seja, na primeira página será exibido do  registro zero ao registro quatro, e como o zero conta, resulta em cinco números, correto? E na segunda página, será mostrado do registro cinco ao dez. Entendeu? 😉

Eu costumo chamar isso de ponteiro, então o nosso ponteiro irá andar de cinco em cinco registros por página no banco de dados.

Agora, para fazer com que isso comece a funcionar, iremos fazer uma consulta no banco de dados, selecionar os registros que iremos mostrar no nosso site e definir um LIMIT (limite) para a exibição dos registros no mysql. Para isso, iremos usar as nossas variáveis $inicio e $limite.

$query = mysql_query("SELECT id, nome FROM produtos LIMIT $inicio,$limite");

Após ter feito a consulta, chegou a hora de mostrar os registros na página. Faremos isso com a estrutura de repetição while, pois, assim, serão pegos todos os registros que precisamos, ou seja, os primeiros cinco registros.

while($mostrar = mysql_fetch_array($query))
{
    echo $mostrar['campo da tabela que você quer mostrar']."<br/>";
}

Perfeito. Agora podemos mostrar os dados vindo do banco de dados no nosso registro e ver ele funcionando. Basta que – ao testar – você digite no final da url pag= e colocar o número de uma página que você desejar baseado na quantidade de registros que você deve ter, ou seja,  no nosso caso só teremos duas páginas, pois temos apenas dez registros.

♦ SEGUNDA PARTE

Chegamos a segunda e última parte da nossa aplicação. Agora aprenderemos a criar o acesso às páginas, ou seja, faremos com que as páginas sejam mostradas númericamente, e elas estarão lincadas, ou seja, será possível clicar e acessar as páginas seguintes através delas.

Agora, teremos que fazer uma nova consulta no nosso banco, pois a consulta anterior está limitada (LIMIT), e nesse momento precisamos que não tenha limite algum, afinal, iremos saber o total de registros a partir dessa consulta.

O que faremos é pegar o id na nossa tabela e colocá-lo em uma variável de nome $consulta.

$consulta = mysql_query("SELECT id FROM produtos"); // Seleciona o campo id da nossa tabela produtos

Após ter feito a consulta, pegaremos agora o total de registros (você poderá se deparar com o termo ‘linhas’ em outros lugares) com a função mysql_num_rows.

// Captura o número do total de registros no nosso banco a partir da nossa consulta
$total_registros = mysql_num_rows($consulta);

Feito isso, estamos em um ponto crucial para saber como o total de páginas surgirá. A lógica está em saber o total de registros de um determinado campo na nossa tabela – no caso, o campo id – e dividílo pelo limite de registros a serem exibidos.

Vamos a um exemplo prático:

(total de registros / limite de registros)

Se o nosso total de registros for dez, e o nosso limite é cinco registros por página, então qual será o total de páginas? Será duas, pois dez dividido por cinco é dois!

Mas, poderemos nos deparar com um problema! E se o total de registros não for um valor arredondado, e sim um valor decimal? Irei explicar melhor. E se ao invés de dez o nosso total de registros fosse nove e o nosso limite fosse cinco? O Resultado seria quatro vírgula cinco (Decimal), o que resultaria na falta do último registro e página, pois na página anterior não haveria espaço para esse último registro.

Como poderemos fazer com que os registros sejam divididos em páginas em que não falte nenhum registro? A solução está na função CEIL do php. Essa função arredonda para cima valores numéricos. Então ao invés de quatro vírgula cinco, o resultado arredondado seria cinco! 😉

Veja:

/* Define o total de páginas a serem mostradas baseada
na divisão do total de registros pelo limite de registros a serem mostrados */
$total_paginas = Ceil($total_registros / $limite);

E a mágica está feita. O que nos resta agora é mostrar os números das páginas lincadas com a estrutura de repetição FOR.

Caso não saiba como o FOR funciona, a sintaxe dele é: <Início>; <Condição>; <Incremento> ;

  • Início: Será a variável $i com o valor inicial de um, ou seja, a primeira página.
  • Condição: Será a variável $i menor ou igual a variável $total_paginas. Quando a variável $i atingir o número total de páginas, a repetição estará completa e finalizada.
  • Incremento: $i++. Cada vez que $i não tiver atingido o número total de páginas, o incremento de valor um será adicionado nele, até que ele esteja igual ao número total de páginas.

Dentro do escopo (código entre as chaves {  }) do FOR, terá o código a ser executado até que a condição seja satisfeita. Nesse código estará em números as páginas lincadas com código HTML que enviarão pela URL quando forem clicadas, a página que queremos ter acesso através do nome da página mais a variável pag.

Veja:

for($i=1; $i <= $total_paginas; $i++)
{
    echo '<a href="pagincao.php?pag='.$i.'"> '.$i.'</a>';
}

Agora teste e veja se está funcionando tudo corretamente.

Caso queira saber  fazer para que quando uma página seja clicada, ela se transforme em texto para que não seja clicada novamente até que a página seja mudada, também é simples!

O que você terá que fazer é verificar a página atual. Você descobrirá comparando a variável $i com a variável $página.

for($i=1; $i <= $total_paginas; $i++)
{
    if($pagina == $i)
    {
        echo " ".$i." "; // Escreve somente o número da página sem ação alguma
    }
     else
     {
        echo '<a href="pagincao.php?pag='.$i.'"> '.$i.'</a>'; // Escreve o número e o link da página

     }
}

Pronto, está feito!
Caso você também queira saber como fazer os links “primeira página” e “última página”, também é fácil!

A primeira página, basta você colocar antes do FOR, um echo com HTML lincado com a variável pag com o valor um.
E a última página, depois do FOR, um echo com HTML lincado com a variável $total_paginas.

Ficará assim:

echo '<a href="index.php?pag=1">'.'Primeira página'.'</a>';
    for($i=1; $i <= $total_paginas; $i++)
    {
         if($pagina == $i)
         {
             echo " ".$i." ";
         }
         else
         {
             echo '<a href="index.php?pag='.$i.'"> '.$i.'</a>';

         }
    }
echo '<a href="index.php?pag='.$total_paginas.'"> Última página</a>';

Chegamos ao fim do nosso tutorial. Qualquer dúvida, sugestão ou correção será muito bem vinda.
Se funcionou tudo corretamente, parabéns, você já sabe fazer uma paginação de resultados.

Abraços e obrigado por ter lido esse tutorial.

88 comentários em “Paginação de resultados com php e mysql (Aprenda definitivamente no passo a passo)

  1. Cara, adorei esse tutorial. Tava a um tempão tentando aprender limite com paginação por esses tutos da net e não conseguia. Achava mto complicado.

    Mas o teu tá tudo separadinho. Uma beleza!!! ;D

    Valeu mesmo! Me salvou.

    Abraços!

    Curtir

      1. Cara não entendi essa parte:

        while($mostrar = mysql_fetch_array($query))
        {
        echo $mostrar[‘campo da tabela que você quer mostrar’].””;
        }

        Ficaria mais compreensível se você mostra-se pra nós a estrutura do banco de dados.. :p

        Curtir

  2. Muito legal esse tutorial mais imaginando que tenhamos um resultado de 1 ate 5 com eu faço pra dividir o resultado ficando 1 | 2 | 3 e depois que chegar no 3 aparecer 3 | 4 | 5 e nao 1 | 2 | 3 | 4 | 5 porque se tiver 300 resultado ira aparecer de 1 ate 300

    Abraços

    Curtir

    1. Michele, com certeza já conseguiu tua resposta, mas, a sua dúvida pode ser a de outra pessoa… Não achei paginação dessa forma que você pediu e tive que ajustar este código para fazê-la…

      $total_paginas = Ceil($total_registros / $limite);

      $t = $pagina – 5; // vai pegar as 5 paginas anteriores para exibi-las
      $d = $pagina + 5; // vai pegar as 5 paginas seguintes para exibi-las

      for($i=$t; $i <= $d; $i++)
      {
      // echo ' ‘.$i.’‘;
      }

      echo ‘‘.’Primeira página’.’‘;

      for($i=$t; $i 0 and $i <= $total_paginas) // ele vai verificar se as paginas anteriores não são menores que 1 e nem maiores que o total de paginas
      {
      echo ' ‘.$i.’‘; // Escreve o número e o link da página

      }
      }

      echo ‘ Última página‘;

      espero ter ajudado =] ficou um pouco confuso mais funciona ( altere os href)

      Curtir

    2. Segue o código com a limitação da páginação que pode ser adaptado para o código deste artigo. Para quem precisar usar, como eu precisei.

      //paginação
      $total = $total_paginas;// total de páginas

      $max_links = 4;// número máximo de links da paginação: na verdade o total será cinco 4+1=5

      //$pagina = 3; // página corrente

      // calcula quantos links haverá à esquerda e à direita da página corrente
      // usa-se ceil() para assegurar que o número será inteiro
      $links_laterais = ceil($max_links / 2);

      // variáveis para o loop
      $inicio = $pagina – $links_laterais;
      $limite = $pagina + $links_laterais;

      for ($i = $inicio; $i <= $limite; $i++){
      if ($i == $pagina){
      echo " ” . $i . “ “;
      } else {
      if ($i >= 1 && $i <= $total){
      echo " ” . $i . “ “;
      }
      }
      }

      Fonte:
      http://rberaldo.com.br/limitando-o-numero-de-links-em-uma-paginacao/

      Curtir

      1. Segue abaixo uma correção para não exibir página 0, -1 e página maior que o total de registros

        $inicio = $pagina – $linksLaterais;
        $inicio = $inicio > 0 ? $inicio : 1;
        $limite = $pagina == $total_paginas ? $pagina : $pagina + $linksLaterais;

        Curtir

  3. Ficou 10, mas tanbém estou com a mesma dúvida da michele:
    “mas imaginando que tenhamos um resultado de 1 ate 5 com eu faço pra dividir o resultado ficando 1 | 2 | 3 e depois que chegar no 3 aparecer 3 | 4 | 5 e nao 1 | 2 | 3 | 4 | 5 porque se tiver 300 resultado ira aparecer de 1 ate 300”

    Curtir

  4. Dalton, cara parabens pelos artigos e tutoriais, muito bem explicados, e a primeira vez que visito seu site e ja coloquei ele nos meus favoritos.. vlw abraço Rodrigo

    Curtir

  5. Viva, só queria comentar este excelente trabalho que aqui foi postado, segui-me por este exemplo e já tenho a minha listagem a funcionar , magnifico 🙂
    Tive alguns problemas na adaptação mas esta tudo a funcionar.

    Muito obrigado fica bem…

    Curtir

  6. cara muito legal msm, valeu msm, aprendi paginação aqui neste tutorial, mas tem uma coisa
    no linux aprimeira vez que é carregada a páginca, fica com um erro :
    Notice: Undefined index: pag in /opt/lampp/htdocs/paginacao/paginacao.php on line 10

    pq num ta definido a “pag”, tem alguma dica pra isso ?
    e como eu faria pra proxima página e página anterior ?
    descula, sou meio leigo no assunto, comecei estudar php faz mto poko tempo.

    se puder me mandar algo no email eu agradeceria mto…
    limadh@gmail.com
    abraços….

    Curtir

  7. Excelente tutorial!!! Muito bem detalhado. Agora apredi realmente a fazer paginação de resultados, esse foi o tutorial mais completo sobre o assunto que encontrei na net.

    Gostaria de fazer algumas observações:
    -Onde você fala que na segunda página será mostrado do registro cinco ao dez, na verdade é do cinco ao nove para o caso de cinco registro: 5 | 6 | 7 | 8 | 9 entedeu?
    -Onde você fala que se o total de registro fosse nove e quiséssemos cinco registros por páginas o resultado seria 1,8 (9/5=1,8) e não quatro vírgula cinco como foi dito.

    No mais está de parabéns.

    Curtir

  8. Cara, seu tutorial foi top… Eu só tenho uma dúvida, o meu site é de notícias, então, eu gostaria de fazer a ordem inversa, que as últimas postagens aparecessem primeiro… Se puder me ajudar com isso aí, fico muito grato.

    Curtir

    1. Obrigado. Se entendi bem a sua dúvida, o que você precisa fazer é colocar um ORDER BY DESC na sua query. Isso coloca os registros em ordem decrescente.

      $query = mysql_query(“SELECT id, nome FROM produtos ORDER BY id DESC LIMIT $inicio,$limite”);

      Aos demais amigos. Me desculpem por não responder as dúvidas. Tenho estado sem tempo para pesquisar as soluções, então as dúvidas mais simples eu tenho vindo aqui responder.

      Abraços.

      Curtir

  9. Amigo há um problema qualquer relacionado com esse código, no GET.
    Notice: Use of undefined constant pag – assumed ‘lista’ in C:\xampp\htdocs\MicroSitesMakita\Martelo_Makita\bodyprodutos.php on line x

    Curtir

  10. Aff cara… Passe 1 semana pesquisando por este tutorial, para não ter que quebrar a cabeça. Não achei, e resolvi fazer por conta própria. Passei 7 horas programando, e quando terminei, na primeira pesquisa achei isso aqui, IDÊNTICO ao que fiz.

    Curtir

  11. Dalton, fiquei 1 dia inteiro procurando um tutorial bom para eu faze essa paginação, passei por vários sites e nenhum supriu minha necessidade, o seu tutorial sem dúvida é o melhor que já encontrei até agora, Parabens, continue postando conteúdo com qualidade. Sou iniciante no PHP e esse tutorial é Exelente!!

    Grande Abraço

    Curtir

  12. Olá jovem, tutorial show de bola, só que estou tendo problemas referente ao link, pois quando eu clico na ultima pagina, todo os demais deixam de ser link se tornando texto, apenas o p’rimeira pagina” e “ultima pagina” permanece linkados, não me possibilitando navegar entre os numeros dela, oq posso ter feito de errado ??/
    muito obrigado e parabens pelo tuto

    Curtir

  13. Muito bom código. Parabéns!
    Estou precisando de uma ajuda.. se alguém tiver um tempo pra ver o código.. Grato!
    OBS: Esse trecho de códio está sendo utilizado para o desenvolvimento de um Sistema Web para o meu Projeto de estágio.

    Não foi encontrado nenhum resultado em sua busca!

    <?php

    } else {
    echo "Resultado da Pesquisa”;

    pg_fetch_array($sql, 0, PGSQL_BOTH);

    require(‘lista.php’);

    }
    }else {
    ?>
    Preencha um ou mais campos para efetuar a consulta!

    ————————————————-#####——————————————————–
    arquivo lista.php

    Lista fotografia

    Local da Foto:

     

    Assunto:

     

    <?php

    $consulta = pg_query("SELECT cod_foto FROM fotografia"); // Seleciona o campo id da nossa tabela produtos
    $total_registros = pg_num_rows($consulta);
    $total_paginas = ceil($total_registros / $limite);

    for($i=1; $i <= $total_paginas; $i++)
    {
    echo ' ‘.$i.’‘;
    }

    echo ‘‘.’Primeira página’.’‘;
    for($i=1; $i <= $total_paginas; $i++)
    {
    if($pagina == $i)
    {
    echo " ".$i." ";
    }
    else
    {
    echo ' ‘.$i.’‘;
    }
    }
    echo ‘ Última página‘;
    ?>

    Curtir

  14. Cara gostaria de parabeniza-lo, ficou ótimo tutorial, muito bem explicado, sem tentar sub-entender que o leitor já saiba de algumas coisas, é assim que gosto de ler um tutorial e faze-los também, muito obrigado estava quebrand a cabeça aqui já faz uns dias…..

    Curtir

  15. aqui deu o seguinte erro:
    Fatal error: Call to undefined function mysql_fletch_array() in C:\wamp\www\paginacao de registros\index.php on line 15
    ai eu fui verificar qual era a linha 15 e era essa:
    while($mostrar = mysql_fletch_array($query))
    alguem poderia me ajudar?

    Curtir

    1. Na linha um pouco abaixo da linha 15 vai estar mostrando assim:

      echo $mostrar[‘campo da tabela que você quer mostrar’].””;

      vc precisa colocar o campo do banco de dados que vc quer que apareça. =)

      Curtir

  16. Dalton tem como você fazer um tuto sobre como adicionar dois buttons em php?
    tenho uma dúvida sou iniciante em php e me deparei com um probleminha, fiz uma function assim(não sei se está correta):

    observação: essa função não está enviando o $id_produto, eu concatenei errado a variável id_produto?

    desde já agradeço, pesquisei na net e só encontro coisas complicadas obrigado se puder me ajudar fica com Deus

    Curtir

  17. Pow, nunca parei pra comentar nenhum tutorial na Internet.. Mas precisei nesse…
    Tava em dúvidas sobre como proceder, e esse tutorial me ajudou muito ^^
    Show =)

    Curtir

  18. Galera, funcionou quase tudo. Só que quando clico nos links 1, 2, 3 por exemplo. minha url fica como pag=2 ou 3, ok. Mas o conteudo ainda fica o da página 1. Não muda, só exibe os primeiros resultados, os outros não aparecem. Alguem ajuda?

    Curtir


    1. (isset($_GET['pag']))? $pagina = intval($_GET['pag']) : $pagina = 1;
      //verifica se existe, caso nao recebe 1

      $tabela = 'tabelinha';//sua tabela

      $sql = "SELECT COUNT(*) AS COUNT FROM $tabela";
      $sql = $sql['COUNT ']; // faz o laço (while e talz)

      $total = ceil($tot / $limite);//ceil arredonda para cima

      echo 'Paginas : ';
      for ($i = 1; $i <= $total;$i++){
      echo''.$i.'';
      //Imprime Pagina: 1,2,3
      }
      echo '';

      Curtir

  19. Caro Dalton, muito obrigado! Saber explicar é um grande dom e ter a boa vontade de ter o trabalho de elaborar um tutorial desse com todo esse cuidado nas clarezas das informações, com o objetivo de ajudar as pessoas é um dom ainda maior. São qualidades como essas que enobrecem um homem. Hoje brindarei à você, Cara! Valeu!

    Curtir

  20. if(!$pagina)
    {
    $pagina = 1;
    }
    Estava com o mesmo problema só verificar se você colocou o ! antes da variável $pagina. pq se não colocar dar o erro que você comentou.

    Curtir

  21. Cara meus parabéns,
    A principal duvida minha era na Lógica.
    A sua apresentada é clara e objetiva,
    Adaptei seu script para Oracle,segue para alguém que precisar:

    Teremos um pequeno probleminha……
    O Oracle não utiliza ‘LIMIT’.
    Então podemos fazer desta maneira

    $tabela = ”tabelinha; //nome da tabela
    $inicio = 1; //Exemplo
    $limite = 5; //Exemplo
    $sql = “ID, NOME
    FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY NOME ASC) AS row_id_new, A.*
    FROM (select * from $tabela) A
    ) WHERE row_id_new BETWEEN $inicio AND $limite”));

    Curtir

    1. Esqueci de tirar os 2 parentes que estava na minha função, segue novamente:

      $sql = “ID, TO_CHAR(DTNASCIMENTO, ‘dd/mm/yyyy’) DTNASCIMENTO
      FROM (
      SELECT ROW_NUMBER() OVER (ORDER BY ID ASC) AS row_id_new, A.*
      FROM (select * from $tabela) A
      ) WHERE row_id_new BETWEEN $inicio AND $limite”;

      Curtir

  22. Com todo respeito cara ficou fantástico mesmo, olha parabéns vc ajudou muitas pessoas com isso, eu achei incrível, parabéns pela iniciativa, foi o melhor tutu que achei vc entende mesmo! Facilitou muito meu aprendizado… hehehe

    Curtir

    1. da uma olhada nesse arquivo aparece o mesmo erro

      <?php

      $host = "localhost"; //IP do servidor MySQL.

      $user = "root"; //Usuário do MySQL.

      $pass = ""; //Senha correspondente ao usuário do MySQL.

      $db = "cine_7!"; //Nome do Banco de Dados que será utilizado.

      $conn = mysql_connect($host , $user , $pass); //Cria uma conexão com o MySQL

      mysql_select_db($db , $conn); //Seleciona o banco de dados que será trabalhado.

      $busca = "SELECT * FROM c_distribuidora ";

      $total_reg = 3;

      $pagina = $_GET['pagina'];
      if (!isset($pagina))
      {
      $pc = "1";
      echo "nao ";
      }
      else {
      $pc = $pagina;
      }
      $inicio = $pc – 1;
      $inicio = $inicio * $total_reg;
      $limite = mysql_query("$busca LIMIT $inicio,$total_reg");
      $todos = mysql_query("$busca");

      $tr = mysql_num_rows($todos); // verifica o número total de registros
      $tp = $tr / $total_reg; // verifica o número total de páginas

      // vamos criar a visualização
      while ($dados = mysql_fetch_array($limite)) {
      $nome = $dados["nome"];
      echo "Nome: $nome”;
      }

      // agora vamos criar os botões “Anterior e próximo”
      $anterior = $pc -1;
      $proximo = $pc +1;
      if ($pc>=1) {
      echo ” <- Anterior “;
      }
      echo “|”;
      if ($pc<$tp) {
      echo " Próxima ->“;
      }

      ?>

      Curtir

      1. primeiro lugar :
        aqui -> / vamos criar a visualização
        while ($dados = mysql_fetch_array($limite)) {

        use mysql_fetch_assoc no luar de array….

        segundo lugar:

        aqui -> $nome = $dados[“nome”];
        use aspas simple no ‘nome’….

        tenta ai e me diz 😉

        Curtir

  23. Primeiramente gostaria de agradecer o criador do post, me foi muito útil.
    Comecei a ler as respostar do pessoal e notei que muitos estavam comentando sobre a limitação em numero de paginas e tals, sendo assim peguei algumas idéias e aprimorei.

    $links_laterais = 10;

    // variáveis para o loop
    $ini = $pagina – $links_laterais;
    $limite = $pagina + $links_laterais;
    if($pagina > 11){
    echo ‘ 1 ‘; // Escreve o número e o link da página
    echo ‘…’;
    }
    for ($i = $ini; $i = 1 && $i <= $total_paginas){
    echo ' ‘ . $i . ‘‘; // Escreve o número e o link da página
    }
    }
    }
    if($pagina < 177){
    if($pagina < 176){
    echo '…';
    }
    echo ' ‘.$total_paginas.’ ‘; // Escreve o número e o link da página
    }

    Espero ter ajudado, e como fui ajudado com esse post estou publicando minha contribuição!

    abraços.

    Curtir

  24. É exatamente este tipo de tutorial que sinto falta. Sua explanação foi extremamente informativa. Você não só entregou o código, mas o entendimento do que está sendo escrito. A maioria dos tutoriais na internet são redundantes, pois não explicam o que está sendo executado – só há a preocupação de chegar no resultado final.
    Bom, pelo menos eu me interesso em procurar entendimento. Se eu não entender, eu não se de nada; só copio aquilo que foi escrito pelos outros. Agora, tendo entendimento sobre a lógica da programação de uma paginação, posso fazer minha própria paginação de maneira estilizada.
    Por favor, Dalton, se não for pedir muito, gostaria de ler outros tutorias de sua autoria que sejam explicativos de maneira detalhada como este.
    Abraços,

    Rômulo

    Curtir

  25. deu erro no seguinte trecho

    $pagina = $_GET[‘pag’];
    if(!$pagina)
    {
    $pagina = 1;
    }

    quando executo o arquivo paginacao.php
    aparece o erro no navegador
    Notice: Undefined index: pag C:\wamp\www\teste\pagin\paginacao.php on line 19

    ele nao ta aceitando a condicao se existe sim ou nao! e agora?

    Curtir

  26. Muito Bom.

    Tenho uma dúvida e preciso tirar, espero que alguma alma boa possa me ajudar!

    Eu estou implantando um sistema de boleto, onde o layout é gerado qdo executa o $boleto->getOutput() para aparecer em tela. (https://github.com/kriansa/openboleto ou mesmo o boletophp, que funciona do mesmo jeito.)

    Até ai tudo bem e funcionando..

    Agora vem problema, o cliente quer gerar um boleto para todos os clientes, como eu faço para usar o while para requisitar no DB e trazer as informações, usar o layout do boleto ($boleto->getOutput()), gerar a paginação para depois, que é o mais importante, imprimir ?

    Basicamente, preciso de uma rotina que gere uma pagina com todos os boletos, um por página, e imprimir em impressora toda a listagem, página a página para enviar por correios.
    O problema é que essa funcão getoutput() que ferra tudo, porque ele só dá a saída depois que chama ela…

    Alguém pode me ajudar?

    Curtir

  27. Boa Noite, adorei o tutorial… mais tenho duvidas ainda, estou começando agora com essa linguagem e preciso de ajuda.
    Tenho varias Tabelas em meu relatório como criar paginação com varias tabelas ainda nao entendi isso.

    Curtir

  28. Também não estava conseguindo entender a lógica por trás da paginação de resultados usando PHP, você explicou passo a passo , em detalhes, eu sempre me atrapalhava na hora de entender o OFFSET , aquele cálculo padrão. Esse foi o melhor material que encontrei explicando a lógica por trás da paginação, muito obrigado por compartilhar seu conhecimento.

    Curtir

Deixe um comentário