Login: Senha: Registrar-se - Esqueci minha senha
.: Menu
Home
Artigos
Sign. dos Sonhos
Papel de Parede
Ilusões de Ótica
.: Bancos
Emoticons e Gifs
Ícones
Logos
.: Serviços
Mural de Recados
Usuários Online
Bloco de Notas
Formmail
Meu IP
.: Geradores
Gerador de Senhas
Barra de Rolagem
Recomende
Pop-up
Inverter Link
.: Canais
Apostilas
Arte/Cultura
Blog
Busca
Celular
Downloads
E-mail Grátis
Emoticons
Esportes
Filmes
Flogs
Fontes
GTA Mods
Host Grátis
Humor
Infantil
Informática
Jogos
Jogos Online
Linux
Músicas
Notícias
Offline
Redirecionadores
Sites Parceiros
Webdesigners
Webmasters
.: Na Faixa
Sobre
Contato
Recomende-nos
Termos de uso

Paginação de resultados

Enviado em 13/02/2007 - 11:14
Fonte: A A A A

Matéria retirada de http://www.vivaolinux.com.br

1.Introdução

Uma das dúvidas mais freqüentes entre os programadores web que conheço é "como faço uma paginação de registros que capturo do meu banco de dados?". Muito bem, já que é uma pergunta freqüente, nada mais justo que escrever um artigo sobre a mesma.

Neste artigo utilizarei o exemplo prático que nos exibirá a lista dos 20 usuários de maior pontuação do site. Nosso script será escrito na linguagem PHP e terá como base de dados uma tabela do MySQL.

O script terá as seguintes características:
-configuração do número de registros exibidos por página
-painel de navegação entre as páginas
-dados capturados a partir de uma tabela do MySQL.

2.Criação da tabela e da fonte de dados

Neste exemplo vamos partir do princípio que você possui uma conta com acesso ao banco de dados meusite, previamente criado pelo pessoal que dá suporte ao MySQL em sua empresa. Nossos dados fictícios serão os seguintes:

servidor MySQL: mysql.vivaolinux.com.br
base de dados: meusite
nome de usuário: fabio
senha: oi_feio

Criação da tabela usuários

Para tornar a explicação da lógica mais simples, nossa tabela de usuários possuirá somente dois campos, o nome do usuário e sua quantidade de pontos. Sendo assim, execute a seguinte cláusula SQL em seu cliente MySQL:

CREATE TABLE usuarios (
nome varchar(50) NOT NULL PRIMARY KEY,
pontos INT DEFAULT 0
);

Insira alguns registros na tabela para podermos executar os testes. Eis alguns inserts que podem servir para nosso exemplo (estes foram os 20 usuários de melhor pontuação do site Viva o Linux na época em que o artigo foi escrito):

INSERT INTO usuarios (nome,pontos) VALUES ("Douglas Vigliazzi", 9160);
INSERT INTO usuarios (nome,pontos) VALUES ("Lauro Gatz", 9040);
INSERT INTO usuarios (nome,pontos) VALUES ("Eduardo Assis", 5270);
INSERT INTO usuarios (nome,pontos) VALUES ("William da Rocha Lima", 5200);
INSERT INTO usuarios (nome,pontos) VALUES ("MARCOLINO Alexandre de Jesus", 5190);
INSERT INTO usuarios (nome,pontos) VALUES ("Fábio Berbert de Paula", 4970);
INSERT INTO usuarios (nome,pontos) VALUES ("Rodrigo Pace de Barros", 4290);
INSERT INTO usuarios (nome,pontos) VALUES ("Mauricio de Brito Maciel", 4110);
INSERT INTO usuarios (nome,pontos) VALUES ("Wanderson Berbert", 4100);
INSERT INTO usuarios (nome,pontos) VALUES ("Felipe Gubert", 3750);
INSERT INTO usuarios (nome,pontos) VALUES ("Renato Michnik de Carvalho", 2760);
INSERT INTO usuarios (nome,pontos) VALUES ("Lucas Martinez", 2520);
INSERT INTO usuarios (nome,pontos) VALUES ("Ricardo Landim", 2250);
INSERT INTO usuarios (nome,pontos) VALUES ("Fábio Campos Coelho", 1670);
INSERT INTO usuarios (nome,pontos) VALUES ("Apocalipse", 1620);
INSERT INTO usuarios (nome,pontos) VALUES ("Blackcatdbflush", 1310);
INSERT INTO usuarios (nome,pontos) VALUES ("Caio Filipini", 1230);
INSERT INTO usuarios (nome,pontos) VALUES ("Jorge Luiz Olimpia", 1140);
INSERT INTO usuarios (nome,pontos) VALUES ("Anderson", 970);
INSERT INTO usuarios (nome,pontos) VALUES ("Fernando Pereira", 900);

3.Mãos a obra, hora de racionar

Nosso script de paginação e navegação pelos registros possuirá a seguinte lógica seqüencial:
-conecte-se ao banco de dados
-defina o número de registros exibidos por página
-descubra o número da página que será exibida
-construa uma cláusula SQL "SELECT" que nos retorne somente os registros desejados
-exiba os registros na tela
-construa e exiba um painel de navegabilidade entre as páginas

Ufa !!! Veremos que o script não será tão complexo como aparenta. Vamos ao código ?!

<?
// bloco 1 - conecte-se ao banco de dados
$con = mysql_pconnect('mysql.vivaolinux.com.br','fabio','oi_feio'); // host, usuário, senha
mysql_select_db('meusite'); // banco de dados


// bloco 2 - defina o número de registros exibidos por página
$num_por_pagina = 6;

// bloco 3 - descubra o número da página que será exibida
// se o numero da página não for informado, definir como 1
if (!$pagina) {
$pagina = 1;
}


// bloco 4 - construa uma cláusula SQL "SELECT" que nos retorne somente os registros desejados
// definir o número do primeiro registro da página. Faça a continha na calculadora que você entenderá minha fórmula.
$primeiro_registro = ($pagina*$num_por_pagina) - $num_por_pagina;

// consulta apenas os registros da página em questão utilizando como auxílio a definição LIMIT. Ordene os registros pela quantidade de pontos, começando do maior para o menor DESC.
$consulta = "SELECT nome, pontos FROM usuarios ORDER BY pontos DESC LIMIT $primeiro_registro, $num_por_pagina";
// executar query
$res = mysql_query($consulta,$con);


// bloco 5 - exiba os registros na tela
echo "<ul>"; while (list($nome, $pontos) = mysql_fetch_array($res)) {
echo "<li> $nome - $pontos";
}
echo "</ul>";


// bloco 6 - construa e exiba um painel de navegabilidade entre as páginas
$consulta = "SELECT COUNT(*) FROM usuarios";
list($total_usuarios) = mysql_fetch_array(mysql_query($consulta,$con));

$total_paginas = $total_usuarios/$num_por_pagina;

$prev = $pagina - 1;
$next = $pagina + 1;
// se página maior que 1 (um), então temos link para a página anterior
if ($pagina > 1) {
$prev_link = "<a href=\"$PHP_SELF?pagina=$prev\">Anterior</a>";
} else { // senão não há link para a página anterior
$prev_link = "Anterior";
}

// se número total de páginas for maior que a página corrente, então temos link para a próxima página
if ($total_paginas > $pagina) {
$next_link = "<a href=\"$PHP_SELF?pagina=$next\">Próxima";
} else { // senão não há link para a próxima página
$next_link = "Próxima";
}

// vamos arredondar para o alto o número de páginas que serão necessárias para exibir todos os registros. Por exemplo, se temos 20 registros e mostramos 6 por página, nossa variável $total_paginas será igual a 20/6, que resultará em 3.33. Para exibir os 2 registros restantes dos 18 mostrados nas primeiras 3 páginas (0.33), será necessária a quarta página. Logo, sempre devemos arredondar uma fração de número real para um inteiro de cima e isto é feito com a função ceil().
$total_paginas = ceil($total_paginas);
$painel = "";
for ($x=1; $x<=$total_paginas; $x++) {
if ($x==$pagina) { // se estivermos na página corrente, não exibir o link para visualização desta página
$painel .= " [$x] ";
} else {
$painel .= " <a href=\"$PHP_SELF?pagina=$x\">[$x]</a>";
}
}


// exibir painel na tela
echo "$prev_link | $painel | $next_link";
?>


Se você deseja fazer o download do código do script acima, acesse o seguinte endereço:

http://www.vivaolinux.com.br/publico/paginacao.txt

Enfim, acho que agora podemos evitar aquelas páginas de exibição de dados com intermináveis barras de rolagem que mais parecem presente de Grego né ?!?

Atenciosamente,
Fábio Berbert de Paula

Enviado por: brunohcs

Postado em: PHP

Esse artigo foi visualizado 1424 vezes

Compartilhe este artigo
facebook del.icio.us rec6 digg
Recomende este artigo a um amigo


Voltar
>> Comentários
 
Related Posts Plugin for WordPress, Blogger...
Comentar
Buscar Artigos:
.: Mods de GTA
GTA SA, VC, IV
SA - Carros
IV - Carros
Mods
GTA IV
SA - Mods Cleo
.: Saúde
Calculadora de IMC
Peso Ideal
Artigos de Saúde
.: Jogos Online
Ação
Aventura
Cassino
Classicos
Colorir
Corrida
Educativos
Esporte
Estrategia
Infantil
Luta
Meninas
Nave
Tiro
Outros
Adulto
Top Jogos
.: Parceiros
Mural de Recados Grátis
Papel de Parede
Show Moto
Web Visual
.: Nossos Números
Artigos: 931
Categorias: 51
Comentarios: 1863
Usuarios: 26710
Blocos de Nota: 87
Canais: 169

website monitoring service
eXTReMe Tracker
Na Faixa.net - Todos os direitos reservados. 12/2003 - 11/2024
Leia nossos Termos de Uso - Política de Privacidade
Desenvolvido por Web Visual
Crie seu Site - Papel de Parede Grátis - Show Moto - Mural de Recados Grátis - Dicas10