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.
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!
CurtirCurtir
Obrigado Alexandre. Fico feliz pelo seu feedback, e pelo tutorial ter cumprido com a sua função.
Abraços.
CurtirCurtir
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
CurtirCurtir
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
CurtirCurtir
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)
CurtirCurtir
Amigo.. está dando erro esse seu codigo! nessa linha “for($i=$t; $i 0 and $i <= $total_paginas) "
CurtirCurtir
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/
CurtirCurtir
Obrigado…
CurtirCurtir
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;
CurtirCurtir
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”
CurtirCurtir
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
CurtirCurtir
Muito bom sua explicação consegui fazer sem nenhuma dificuldade.
CurtirCurtir
Muito bom, agradeço pela dica.
Fique com Deus.
CurtirCurtir
Obrigado, Vidal. Abraços.
CurtirCurtir
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…
CurtirCurtir
Muito obrigado, Miguel. Fico feliz que o tutorial tenha cumprido com o seu objetivo.
Abraços.
CurtirCurtir
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….
CurtirCurtir
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.
CurtirCurtir
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.
CurtirCurtir
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.
CurtirCurtir
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
CurtirCurtir
Parabens pela iniciativa, 99 % dos tutoriais de paginação na web não explicam detalhado como você explicou ! Sou iniciante em php e entendi tudo ! Parabens e obrigado pelo tutorial.
CurtirCurtir
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.
CurtirCurtir
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
CurtirCurtir
Olá, procurei muito sobre isso, e aqui foi o unico lugar que entendi, mas queria saber, e para gerar uma thumb junto com a foto original? Obrigado.
CurtirCurtir
Muito bom. Organiza tudo em ficheiros e partilha em http://mais-codigo.com 🙂
CurtirCurtir
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
CurtirCurtir
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‘;
?>
CurtirCurtir
“pg_query” substitua por “mysql_query”
“pg_num_rows” substitua por “mysql_num_rows”
CurtirCurtir
“pg_fetch_array” por “mysql_fetch_array”
CurtirCurtir
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…..
CurtirCurtir
man, muito obrigado consegui fazer em minha pagina xD, muito bom, salvou o dia !!!
CurtirCurtir
show de bola, fiquei uma hora pesquisando opcoes e aprendi a fazer lendo por 15 minutos…
Obrigado..
CurtirCurtir
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?
CurtirCurtir
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. =)
CurtirCurtir
Fantástica sua didática. Parabéns! Já coloquei seu site nos favoritos aqui.
CurtirCurtir
Parabéns estava com dúvidas e esse tutorial me ajudou mto. Obrigado
CurtirCurtir
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
CurtirCurtir
da uma estudada sobre Session ou cook, juntando o conhecimento deste tutorial você faz facil facil…
http://php.net/manual/en/function.session-start.php
assim a variavel não se perde 🙂
CurtirCurtir
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 =)
CurtirCurtir
parabéns, esse tutorial é genial, ja estava achando que não iria encontrar alguem que explicasse como faze-lo…..muito bem feito….um abraço
CurtirCurtir
Parabéns, excelente trabalho, indico.
CurtirCurtir
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?
CurtirCurtir
(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 '';
CurtirCurtir
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!
CurtirCurtir
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.
CurtirCurtir
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”));
CurtirCurtir
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”;
CurtirCurtir
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
CurtirCurtir
Muito bom , o post estava a tentar fazer isso desde ontem , com o teu post bem explicadinho não tinha como falhar.. Meus Parabéns
CurtirCurtir
Excelente código, simples, objetivo e bem detalhado. Parabéns!
CurtirCurtir
Funcionou Perfeitamente soh as pessoas deixarem a preguiça de lado e ler passo a passo o que vc explicou obrigadao manoww me salvou 😉
CurtirCurtir
Excelente tutorial. Eu estava precisando de uma explicação simples e eficaz como essa sobre paginação php.
CurtirCurtir
Sei que é um post antigo, mas realmente faltava um tutorial assim, nem em livros de PHP eu achei tão bem explicado, hoje posso dizer que entendo BEM a paginação graças a este artigo.
Obrigado,
Felipe Lima
CurtirCurtir
É verdade, leia o tuto que você vai entender, muito bom mano!!
CurtirCurtir
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 ->“;
}
?>
CurtirCurtir
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 😉
CurtirCurtir
Muito bom. Obrigado!
CurtirCurtir
Cara, muito bom mesmo! Muito bem explicado. Já procurei bastante como faz em outros sites mas nenhum explicava tão detalhadamente esse procedimento! Obrigado por compartilhar!!!
CurtirCurtir
Muito obrigado, faz algum tempo que procuro um tutorial explicando sobre paginação que explica-se tão bem quanto os seu, me ajudou muito!
CurtirCurtir
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.
CurtirCurtir
Ai sim a tabela conter 1000 resultados vai aparecer página 1 2 3 4 5 6 7 8 9 10 até mil?? OHAHUSIAOS
CurtirCurtir
Esse foi o código de paginação mais simples, eficaz e fácil de aprender que vi na internet durante minhas pesquisas. Parabéns!
CurtirCurtir
Muito bem explicado, parabéns 🙂
CurtirCurtir
Muito Obrigado Cara, muito bem explicado!!!
CurtirCurtir
Muitoo obrigado rapaz, bem simples e didatico, fiz minha paginacao tranquilamente…..valeu por compartilhar conosco!
CurtirCurtir
Muito bom o tutorial, mas preciso saber como limitar a quantidade de links da paginação.
Valeu abraço!
CurtirCurtir
Olá muito obrigado pela ajuda deu-me um jeito brutal, obrigado mesmo
CurtirCurtir
Muito obrigado. Ajudo D+
CurtirCurtir
Simplesmente magnífico este tutorial! Muito vem explicado
CurtirCurtir
Parabéns muito bom esse tutorial salvou minha vida, kkk
CurtirCurtir
É 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
CurtirCurtir
Gostei Vlw, mesmo, tava procurando só o calculo da pagina, o resto eu já tinha feito…
CurtirCurtir
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?
CurtirCurtir
Muito legal mesmo e muito bem escrito parabéns Dalton. E me ajudou bastante para poder resolver esse problema de saida paginada de resultados.
CurtirCurtir
filé….. ai é só implementar o outro script do link que o Emaús passou…. e boas….
vlw brigadão mermo
CurtirCurtir
Bom esse código…
CurtirCurtir
Claro, simples e objetivo! Parabéns pela excelente explicação!
CurtirCurtir
Parabens pelo tutorial, como ja foi dito acima, melhor do que 99% dos demais encontrados na net, muito bem explicado com otima didatica, obrigado e parabens !!!
CurtirCurtir
Salvou minha vida. Obrigada!
CurtirCurtir
Muito bom cara! Explicativo e fácil de entender. Justamente o que eu precisava. Parabéns!
CurtirCurtir
Valeu! Excelente tutorial! Parabéns!
CurtirCurtir
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?
CurtirCurtir
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.
CurtirCurtir
Mto bom! Tutorial bem objetivo!
CurtirCurtir
Muito bom seu tutorial, super bem explicado!
CurtirCurtir
Olha já olhei bastante tutorial a respeito de paginação mas nenhum foi igual a esse aqui, quem quiser parabéns pelo site, não pude resistir tive que passar aqui e elogiar este excelente trabalho. 🙂
CurtirCurtir
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.
CurtirCurtir