Jump to content


Photo

Paginação


  • Faça o login para participar
36 replies to this topic

#1 Cristiano Galdino

Cristiano Galdino

    Dark Defender

  • Administradores
  • 3738 posts
  • Sexo:Masculino
  • Localidade:Brasília, DF

Posted 15/12/2003, 04:09

Bom, agora são 03:52 e não tenho o que fazer, então vou fazer um script de paginação pra algumas dúvidas que eu vi...

Primeiro vamos fazer um arquivo de configuração em que vai estar armazenado os dado primordiais do script:

config.php

<?
$host = "localhost";
$user = "root";
$pass = "";
$db = "banco_de_dado";

$reg_p_pag = "10";
$link_p_pag = "5";

$connection = @mysql_connect($host, $user, $pass) or die("Unable to connect to database!");
@mysql_select_db($db, $connection) or die("Unable to select database!");
?>

Esse será o arquivo que tem as configurações básicas de conexão ao banco de dados.

Uma parte muito importante é a que tem a variavel $reg_p_pag = "10"; ela define que teremos 10 registros por página e a $link_p_pag = "5"; define que teremos 5 links por página.

Bom, vamos criar uma tabela no banco de dados com o nome teste e com os campos id e texto.

Pra ser mais prático criei um arquivo de instação pra os priguiçosos...

instalar.php

<?
include("config.php");

$query = "CREATE TABLE teste";
$query .= "(id int(10) unsigned NOT NULL auto_increment,";
$query .= "texto text NOT NULL, PRIMARY KEY  (id))";

mysql_query($query);

?>

Esse arquivo vai criar a tabela e os campos automaticamente. O campo ID é auto increment, ou seja, vai fazer uma numeração crescence.

Agora que já criamos a tabela vamos inserir vários cadastro na nossa tabela pra poder ter uma paginação com várias páginas (já que é um exemplo, tem que mostrar como funciona).

Eu criei uma paginazinha que insere um cadastro na tabela e depois atualiza para enviar outro cadastro e por aí vai.
insert.php

<script>
window.onload = function teste()
{
location.href = location.href;
}
</script>
<?
include("config.php");
$query = "INSERT INTO teste (texto) VALUES ('Texto sobre algo')";
mysql_query($query);
?>

Abre esse arquivo no servidor e deixa ele aberto por +-1 minuto que insere um bom nº de cadastros.

Agora chegamos onde eu queria! A página que vai realmente trabalhar! Vou tentar fazê-la o mais detalhado possível.

Primeiro vamos ver como seria a lógica.

Primeiro nós temos que saber quantos cadastros temos no banco de dados, conheço duas formas de fazer isso.
Uma forma é fazer uma consulta que resulte em todos os registros da tabela usando a função mysql_num_rows(). Imagina só se temos 10.000 registros e o usuário quer visualizar a página 10! Fica meu incabível vc selecionar os 10.000 registros e depois fitrar pra mostrar somente de 101 a 110 (caso sejam 10 registros por página).

Nesse exemplo acima a busca pelos resultados seria assim:

$query = mysql_query("SELECT * FROM teste;");
$registros = mysql_num_rows($query);

Mas uma busca dessa leva todos os resultados pra a memória do servidor, mesmo que não seja um nº grande pode fazer uma diferença na sua performance.

O jeito mais cabível é assim:

$query = mysql_query("SELECT count(*) FROM teste;");
$registros = mysql_result($query,0);

Ok! Já temos o nº de registros.

Lembra-se do arquivo de configuração? Pois é! Nele temos a especificação de $reg_p_pag = "10"; ele será muito usado, por exemplo agora, que temos que saber o nº total de página que teremos.

$num_total_paginas = ($registros%$reg_p_pag==0)?$registros/$reg_p_pag:floor($registros/$reg_p_pag)+1;

Esse código acima é o seguinte, ele pega o Nº de registros e divide pelo Nº de regitros por página se o resultado for iqual a 0 o Nº de páginas será o Nº de registros dividido pelo Nº de registros por página, se o resultado da divisão for diferende de 0 o Nº de páginas será floor($registros/$reg_p_pag)+1.

A função floor() retorna o nº inteiro da divisão arredondado pra baixo e no final colocamos + 1 que soma 1 ao resultado.

Ótimo!!! Conseguimos um Nº inteiro como resultado de páginas.

Agora como selecionar os registros certos da página requerida pelo usuário? Simples, usando LIMIT na sua seleção.

SELECT * FROM teste ORDER BY id LIMIT 11, 10

Entendeu como funciona o LIMIT? No exemplo acima ele vai selecionar todos os campos da tabela TESTE ordenados pelo ID começando pelo registro 11 e vai selecionar os 10 próximos.

Agora vamos saber qual vai ser o início do LIMIT.

$inicio = ($reg_por_pag*$pag)-$reg_por_pag;

Essa variavel $pag será passada pelo URL no método GET, caso ela não exista o valor dela será 1.

if (!$pag)
$pag = "1";

Pronto, já temos o Inicio e o Tanto que temos que selecionar. Na query pra selecionar os registros vamos fazer assim:

$query = "SELECT * FROM teste ORDER BY id LIMIT $inicio, $reg_por_pag";
$result = @mysql_query($query);

while ($row = mysql_fetch_assoc($result))
{
$id = $row['id'];
$texto = $row['texto'];

echo $id;
echo " - ";
echo $texto;
echo "<br>";
}

Agora vamos aos links...

$anterior = $pag-1;
if ($anterior<1)
echo "Anterior - ";
else
echo "<a href=\"{$_SERVER['PHP_SELF']}?pag=$anterior\">Anterior</a> - ";

Essa é a parte em que vai imprimir o link pra página anterior, veja que existe um IF, a tradução de IF é SE, então o código seria:

SE ($anterior maior que 1)
escreva "Anterior -"
CASO CONTRARIO
ecreva ...

A váriavel anterior vai ser a página atual - 1.

for($i=1; $i<$pag; $i++)
if($i>=$pag-$links_p_pag)
echo "<a href=\"{$_SERVER['PHP_SELF']}?pag=$i\">$i</a> - ";

Aqui vamos escrever os links anteriores a página atual, caso existam.

echo "<b>$pag</b>";

for($i=$pag+1; $i<=$num_total_paginas; $i++)
if($i<=$pag+$links_por_pag)
echo " - <a href=\"{$_SERVER['PHP_SELF']}?pag=$i\">$i</a>";

E aqui vamos escrever a página atual e os links posteriores caso existam.

$proxima = $pag+1;
if ($proxima>$num_total_paginas)
echo " - Próxima";
else
echo " - <a href=\"{$_SERVER['PHP_SELF']}?pag=$proxima\">Próxima</a>";

E por último vamos escrever um link pra a próxima página, caso exista.

O código dessa página seria assim:

paginacao.php

<html>
<head>
  <title>Paginação</title>

<style type="text/css">
body { font-family: Verdana; font-size: 12px; }
a { font-family: Verdana; font-size: 12px; color: #000000; text-decoration: none; }
a:hover { color: #FE5400; text-decoration: none; }
</style>

</head>
<body>

<?
include("config.php");

$link_p_pag = 5;
$reg_p_pag = 9;
$pag = $_GET['pag'];

$busca = mysql_query("SELECT count(*) FROM teste;");
$registros = mysql_result($busca,0);

echo "Número de registros: ";
echo $registros;
echo "<br>";

$num_total_paginas = ($registros%$reg_p_pag==0)?$registros/$reg_p_pag:floor($registros/$reg_p_pag)+1;

echo "Número de páginas: ";
echo $num_total_paginas;
echo "<br>";

echo "Links por página: ";
echo $link_p_pag;
echo "<br>";

echo "Registros por páginas: ";
echo $reg_p_pag;
echo "<br>";
echo "<hr>";

if ($pag>$num_total_paginas)
echo "Error<br><br>";
else

if (!$pag)
$pag = 1;

$inicio = ($reg_p_pag*$pag)-$reg_p_pag;
echo "Inicia em: $inicio<br><br>";

$query = "SELECT * FROM teste ORDER BY id LIMIT $inicio, $reg_p_pag";
$result = @mysql_query($query);

while ($row = mysql_fetch_assoc($result))
{
  $id = $row['id'];
  $texto = $row['texto'];

  echo $id;
  echo " - ";
  echo $texto;
  echo "<br>";
}

echo "<hr><br>";

$anterior = $pag-1;
if ($anterior<1)
echo "Anterior - ";
else
echo "<a href=\"{$_SERVER['PHP_SELF']}?pag=$anterior\">Anterior</a> - ";

for($i=1; $i<$pag; $i++)
if($i>=$pag-$link_p_pag)
echo "<a href=\"{$_SERVER['PHP_SELF']}?pag=$i\">$i</a> - ";

echo "<b>$pag</b>";

for($i=$pag+1; $i<=$num_total_paginas; $i++)
if($i<=$pag+$link_p_pag)
echo " - <a href=\"{$_SERVER['PHP_SELF']}?pag=$i\">$i</a>";

$proxima = $pag+1;
if ($proxima>$num_total_paginas)
echo " - Próxima";
else
echo " - <a href=\"{$_SERVER['PHP_SELF']}?pag=$proxima\">Próxima</a>";

?>

</body>
</html>


Me desculpem mais comecei a cansar, afinal to a uma hora tentando fazer esse tutorial e começou a dar dores no pulso.

Vou colocar ele em anexo funcionando, caso queiram ajuda podem postar...

Correções serão bem vindas caso necessárias.
-------
Cristiano G.
Cristiano Galdino
- http://cristiano.galdino.net/

“Since 2003”


#2 Alex Hiroshi

Alex Hiroshi

    Super Veterano

  • Ex-Admins
  • 4923 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 15/12/2003, 10:03

bom tuto cara (y).. acho q se eu tivesse lido isso antes, eu iria aprender melhor uahuea...
mais tipo....
eu uso um outro.. mais tudo bem...

minha duvida....eu uso Query String no meu site...
ai eu abro a parte onde eu coloquei a paginacao... ate ai tudo bem.. ta pegando normal...
masss... quando eu vou mudar a pagina, tipo pra proxima ou anterior...
ele volta normal.. mais ele abre so a pagina onde esta a paginacao.. nao abre o restante do site... deu pra entender? ele abre so a pagina que esta a paginacao...
eu keria q quando eu mudasse a pagina ((proximo, anterior)) ele mudasse só o conteudo do site, que seria a parte onde esta a paginacao, nao q mudasse tudo e ficasse so a paginacao :( :wacko:

o q eu uso eh assim o link..
<a href='?pagina=$proximo'>[ Próxima ]</a>

Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Ex-Administrador

#3 GamesX

GamesX

    Banido por SPAM

  • Banidos
  • Pip
  • 59 posts
  • Sexo:Não informado

Posted 15/12/2003, 10:35

"então vou fazer um script de paginação pra algumas dúvidas que eu vi... "

q isso ?!

#4 Balala

Balala

    What you want for yourself?

  • Ex-Admins
  • 3357 posts
  • Sexo:Não informado
  • Localidade:Jaraguá do Sul - SC
  • Interesses:http://forum.wmonline.com.br/index.php?showtopic=5792

Posted 15/12/2003, 12:39

"então vou fazer um script de paginação pra algumas dúvidas que eu vi... "

q isso ?!

Pessoas que tinham dúvidas sobre páginação e fez esse tutorial para tentar ajuda-las (y)
Balala - Admin Geral Webfórum - Retired
Twitter
Stop Spreading Lies!
Posted Image

#5 GamesX

GamesX

    Banido por SPAM

  • Banidos
  • Pip
  • 59 posts
  • Sexo:Não informado

Posted 15/12/2003, 12:44

"então vou fazer um script de paginação pra algumas dúvidas que eu vi... "

q isso ?!

Pessoas que tinham dúvidas sobre páginação e fez esse tutorial para tentar ajuda-las (y)

mas oq é páginação ?

#6 Rafael :)

Rafael :)

    Aprendendo e ensinando PHP.

  • Usuários
  • 549 posts
  • Sexo:Não informado
  • Localidade:São Paulo
  • Interesses:Aprender PHP!

Posted 15/12/2003, 23:46

"então vou fazer um script de paginação pra algumas dúvidas que eu vi... "

q isso ?!

Pessoas que tinham dúvidas sobre páginação e fez esse tutorial para tentar ajuda-las (y)

mas oq é páginação ?

tU ESTÁ ATRASSADO EM MEU AMIGO!!!!!
Mas é assim mesmo, creio que vc é igual eu, iniciante...

Bom,,,
Paginação é acoisa melhor do Mundo(na minha opnião)
Uma paginação organiza o que vc tem em uma determinada tabela do seu Banco de dados...
A Paginação pega todo o conteúdo da tabela e divide por páginas(exemplo: temos 100 registro na tabela, poderemos divir entaum 10 para cada pagina)...

Quando vc vê isso num site:

<< Anterior 1 2 3 4 5 6 Próxima >> pode ter quase certeza que isso é uma paginação!

Entedeu meu amigo!?
Espero que sim

Abraços
Thau
Jesus:

Justiça
Esperança
Saúde
União
Salvação

Deus é fiel...

#7 Cristiano Galdino

Cristiano Galdino

    Dark Defender

  • Administradores
  • 3738 posts
  • Sexo:Masculino
  • Localidade:Brasília, DF

Posted 15/12/2003, 23:46

GamesX, vamos lá, o que é uma página? Não me fale que é uma folha de palpel já que estamos na internet... :)

Essa paginação pega registros em um banco de dados mySQL e ordena eles por páginas.

Imagina se uma pessoa tem 10.000 registros e quer mostra-los... Se mostrasse todos de uma única vez isso com certeza iria sobrecarregar o servidor e a página nunca abriria.

Então é melhor mostrar um nº razoavel de registros e uma página que mostres os próximos registros.

Conseguiu entender?
Cristiano Galdino
- http://cristiano.galdino.net/

“Since 2003”


#8 GamesX

GamesX

    Banido por SPAM

  • Banidos
  • Pip
  • 59 posts
  • Sexo:Não informado

Posted 16/12/2003, 08:38

cara... q style ^^ mas é xxxxxx fazer ?! eu vi o codigo q o cara posto e parece q nao tem mt segredo :D

#9 Cristiano Galdino

Cristiano Galdino

    Dark Defender

  • Administradores
  • 3738 posts
  • Sexo:Masculino
  • Localidade:Brasília, DF

Posted 16/12/2003, 13:16

Da uma lida no que ta escrito e ve se vc consegue entender... Caso contrario poste suas duvidas.
Cristiano Galdino
- http://cristiano.galdino.net/

“Since 2003”


#10 Goku Jr

Goku Jr

    Nilson

  • Usuários
  • 3757 posts
  • Sexo:Masculino

Posted 16/01/2004, 11:26

e ai Cristiano blz ?

tipo eu peguei seu Script de Paginação e fui dar uma pequena testada.. bom Funciona + naum do jeito que tem que funcionar

tipo se eu tenho 50 Registros, quero mostrar apenas 5 por Pagina e quero que mostre 3 por link, mostra na primeira pagina os 3 links + se o carinha cricar na proxima pagina aumenta essa quantidade de links por pagina, e quanto + o carinha vai clicandu no proximo vai aumentandu... bom ate que faltandu 3 ou 2 numero para chegar no total de registros..a quantidade de links por pagina começa a diminuir !!!

bm vou tentar dar uma pequena arrumada.. se alguem ou vc mesmo Cristiano ja arrumou.. Coloca aê !!!

bom flw (y) !!!
-----------------------------------------------------------------------
PALMEIRAS - Primeiro campeão do mundo em 1951

#11 eye

eye

    Novato no fórum

  • Usuários
  • 6 posts
  • Sexo:Não informado

Posted 20/01/2004, 00:30

Belo tutorial cristiano, vo da uma olhada aki nele, prepare pra responde rminhas dúvidas!!!

#12 Cristiano Galdino

Cristiano Galdino

    Dark Defender

  • Administradores
  • 3738 posts
  • Sexo:Masculino
  • Localidade:Brasília, DF

Posted 20/01/2004, 01:45

Bom Goku, se vc definir 3 links por página ele irá mostrar os três anteriores e os três posteriores da página atual.
Cristiano Galdino
- http://cristiano.galdino.net/

“Since 2003”


#13 K-19

K-19

    Normal

  • Usuários
  • 91 posts
  • Sexo:Não informado
  • Localidade:Viseu
  • Interesses:bues deles

Posted 13/03/2004, 21:03

tenho um guestbook, quero fazer a paginaçao, as mensagens sao exibidas na page principal pelo comando <? include "guest.txt"; ?>
como é que poderei fazer a paginaçao para o meu guestbook, help me please...

Edição feita por: K-19, 17/03/2004, 10:40.

www.Scripts.kom.pt - My WebPage

#14 Deyvidy Mateus

Deyvidy Mateus

    .."Ainda chego lá"..

  • Usuários
  • 108 posts
  • Sexo:Masculino
  • Localidade:Leopoldina/MG
  • Interesses:Banco de dados, Criação de Websites, Delphi, photoshop e Corel Dral.

Posted 17/03/2004, 11:29

bom tuto cara (y).. acho q se eu tivesse lido isso antes, eu iria aprender melhor uahuea...
mais tipo....
eu uso um outro.. mais tudo bem...

minha duvida....eu uso Query String no meu site...
ai eu abro a parte onde eu coloquei a paginacao... ate ai tudo bem.. ta pegando normal...
masss... quando eu vou mudar a pagina, tipo pra proxima ou anterior...
ele volta normal.. mais ele abre so a pagina onde esta a paginacao.. nao abre o restante do site... deu pra entender? ele abre so a pagina que esta a paginacao...
eu keria q quando eu mudasse a pagina ((proximo, anterior)) ele mudasse só o conteudo do site, que seria a parte onde esta a paginacao, nao q mudasse tudo e ficasse so a paginacao :( :wacko:

o q eu uso eh assim o link..

<a href='?pagina=$proximo'>[ Próxima ]</a>

Alex... eu tb já errei nisso que você tá errando...
pensa comigo... se vc ta usando query string no site...


se sua pagina inicial estiver rodando
<a href='http://www.seusite.como.br/index.php</a>
você terá q colocar a query string
<a href='http://www.seusite.com.brindex.php?NOMEDASECAO=NOMEDOARQUIVO&pagina=$proximo</a>

mas cuidadoo!!!
Se vc usa NOMEDASECAO=NOMEDOARQUIVO&EXT=EXTENSAO você terá q colocá no hyperlink para puxar o arquivo!!!!
grato..
Deyvidy...
ae qualquer duvida..
me e-maill!
deyvidy@bol.com.br ou icq 106139197
Venda de um Sistema Boletim Online
Múltiplas áreas:
ÁREA DA MANUTENÇÃO
ÁREA DO PROFESSOR
ÁREA DO ALUNO


MSN: deyvidy20@hotmail.com

#15 luiz000

luiz000

    Expert

  • Banidos
  • PipPipPipPipPipPip
  • 530 posts
  • Sexo:Não informado

Posted 18/03/2004, 15:46

tenho um guestbook, quero fazer a paginaçao, as mensagens sao exibidas na page principal pelo comando <? include "guest.txt"; ?>
como é que poderei fazer a paginaçao para o meu guestbook, help me please...

sinto muito amigo mas isso seria impossivel.....
veja bem, esse tuto seria para bancos de dados MySQL, já que os seus dados estao em um arquivo .txt, nao teria jeito de fazer com este tutoriall!!!
na verdade eu nem sei se existe paginacao com arquivos .txt :huh:




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq