Vous êtes sur la page 1sur 8

Paginao de Registros usando MYSQL e PHP

Introduo
O objetivo deste artigo mostrar como voc pode efetuar uma paginao de registros. A paginao de registros prev a exibio de um nmero de registros numa pgina e a opo de se selecionar uma determinada pgina.

A Galeria de Produtos / Home Page


Vamos supor que nossa pgina de produtos mostre seis (6) produtos de cada vez. Na primeira vez que o usurio executar esta pgina, sero exibidos os primeiros seis produtos conforme a ordem do comando SQL. Abaixo da pgina, iremos mostrar uma barra de navegao, que permitir ao usurio selecionar qual pgina de produtos a ser exibida. Caso o usurio selecione a segunda pgina, ele estar visualizando os produtos de nmero 7 a 12, conforme a ordem de visualizao de produtos.

A tabela de Produtos
Vamos dar uma olhada num exemplo de tabela de produtos de exemplo?

Aplicaes Corporativas

Prof. Carlos Majer

Paginao de Registros usando MYSQL e PHP 1 Campo idProduto Tipo int(3) PO ? NO Observaes Chave Primria Auto Incrementvel Utilizado como cdigo interno do produto. Exemplo: 1 Utilizado como um segundo cdigo do Produto e digitado/informado pelo usurio. Exemplo: HPDJ01640 Nome rpido do produto. Geralmente, utilizado na tela principal do site (Galeria de Produtos). Exemplo: HP DESKJET 1640 Descrio mais detalhada do produto. Este campo geralmente utilizado para uma melhor descrio/detalhamento do produto ou servio. Texto (opcional) que representa a Especificao Tcnica do Produto/Servio. Preo normal do produto. Exemplo: 312.85 (O ponto deve ser usado como separador decimal) Preo promocional do produto. Exemplo: 290.50 (O ponto deve ser usado como separador decimal) Este campo um flag/marca que pode ser utilizado para se definir se o produto deve ser exibido na Home Page/Galeria de Produtos. Ele pode ser usado da seguinte forma:1) Quando estiver com o valor 0, o produto no est em promoo e desta forma o preo normal deve ser exibido. 2) Quando estiver com o valor 1, o produto est em promoo e o preo Promocional deve ser exibido. 9 10 11 fotoP1 fotoG1 mostraVitrine varchar(50) varchar(50) char NO NO SIM O desenvolvedor deve trabalhar este campo na hora de desenvolver o comando/string SQL. Foto Pequena do Produto. O que deve ser inserido aqui apenas o novo do arquivo. Exemplo: HP1640PEQ.JPG. Eu sugiro que as imagens sejam inseridas num diretrio. Exemplo: IMGS Foto Grande do Produto. Idem acima. Este campo um flag/marca que pode ser utilizado para se definir se o produto deve ser exibido na Home Page/Galeria de Produtos. Ele pode ser usado da seguinte forma:1) Quando estiver com o valor 0, o produto no deve ser exibido. 2) Quando estiver com o valor 1, o produto deve ser exibido. 12 categoria char SIM O desenvolvedor deve trabalhar este campo na hora de desenvolver o comando/string SQL. Este campo um texto simples, que determina a categoria do produto. Exemplo:IMPRESSORAS

2 3 4 5 6 7 8

referencia titulo descricao especificacao preco precoPromocao emPromocao

varchar(15) varchar(30) text text float float char

SIM SIM SIM NO SIM SIM SIM

Bom, uma vez que vocs tenham criado uma tabela com esta estrutura (que igual estrutura que usamos na ltima aula), vocs podem inserir alguns registros para fazer os testes posteriores.
Aplicaes Corporativas Prof. Carlos Majer

Paginao de Registros usando MYSQL e PHP Nesta tabela no irei exibir as seguintes colunas (mas voc precisa inserir dados nas mesmas):descrio e especificao pois dependem de textos a serem digitados (fique a vontade para criar estes textos). categoria, uma vez que dos exemplos abaixo, irei mostrar apenas produtos da categoria IMPRESSORAS. mostraVitrine: Como s irei inserir registros que devero ser exibidos na galeria de produtos, este campo dever estar com 1. Vamos imaginar que voc inseriu os seguintes registros:Registro idProduto referencia Titulo preco precoPromocao emPromocao fotoP1 1. 1 'HP DJ 6940 'HP DJ 6940 520 0 '0' 'HPDJ6940.jpg' 2. 2 HPDJ1460 HP DJ 1460 0 428 1 HPDJ1460.jpg 3. 3 'HP DJ 6980' 'HP DJ 6980' 472 385.20 1 'HPDJ6980.jpg' 4. 4 'HPDJF380' 'HP DJ F380' 0 590 1 'HPDJF380.jpg' 5. 5 'HPDJD4260' 'HP DJ D4260' 410.85 0 'HPDJD4260.jpg' 6. 6 'HPDJD2460' 'HP DJ D2460' 497 0 0 'HPDJD2460.JPG' Lembre-se de que contedos do tipo string/texto devem estar delimitados por aspas simples ou duplas fotoG1 'HPDJ6940_Grande.jpg' HPDJ1460_Grande.jpg' 'HPDJ6980_Grande.jpg' 'HPDJF380_Grande.jpg' 'HPDJD4260_Grande.jpg' 'HPDJD2460_Grande.jpg'

Nossa paginao
Para efeitos de simulao com base neste conjunto reduzido de registros, vamos definir que em nossa pgina so exibidos dois produtos por vez. Como temos seis registros, teremos trs pginas. Exemplo:-

A consulta SQL
Quem recupera os registros do banco de dados a linguagem PHP atravs da funo mysql_query, passando como parmetro uma consulta SQL. Para testes no MYSQL, vamos montar uma consulta SQL que venha apenas as colunas idProduto e referencia.:mysql>SELECT idProduto, referencia FROM produtos;

Aplicaes Corporativas

Prof. Carlos Majer

Paginao de Registros usando MYSQL e PHP Ir retornar:idProduto 1 2 3 4 5 6 referencia 'HP DJ 6940 HP DJ 1460 'HP DJ 6980' 'HP DJ F380' 'HP DJ D4260' 'HP DJ D2460'

S que o que desejamos mostrar 2 registros por pgina. Sendo assim, iremos utilizar o parmetro LIMIT, que permite limitar o nmero de registros a serem retornados e funciona da seguinte forma:LIMIT <inicio>, <quantidade>, onde <inicio> um nmero e significa a partir de qual linha/registro se deseja retornar a consulta. Note que o primeiro registro o nmero 0 (zero). <quantidade> significa a quantidade de registros a serem retornados. Com estas informaes j conseguimos desenvolver as consultas SQL para recuperar as trs pginas (cada uma com 2 registros/linhas) de nossos produtos:-

Pgina 1:mysql>SELECT idProduto, referencia FROM produtos LIMIT 0,2;

Ir retornar +-----------+------------+ | idProduto | referencia | +-----------+------------+ | 1 | HP DJ 6940 | | 2 | HP DJ 1460 | +-----------+------------+ 2 rows in set (0.00 sec)

Pgina 2:mysql>SELECT idProduto, referencia FROM produtos LIMIT 2,2;

Aplicaes Corporativas

Prof. Carlos Majer

Paginao de Registros usando MYSQL e PHP +-----------+------------+ | idProduto | referencia | +-----------+------------+ | 3 | HP DJ 6980 | | 4 | HP DJ F380 | +-----------+------------+ 2 rows in set (0.00 sec)

Pgina 3:mysql>SELECT idProduto, referencia FROM produtos LIMIT 4,2;

+-----------+------------+ | idProduto | referencia | +-----------+------------+ | 5 | HP DJ D4260| | 6 | HP DJ D2460| +-----------+------------+ 2 rows in set (0.00 sec)

Ajustando o programa PHP para exibir os produtos de uma determinada pgina


Vamos definir que o programa que mostra a pgina de produtos se chama home.php. Para efeitos de testes, vamos supor que se a pgina for chamada sem nenhum parmetro do tipo GET, a primeira pgina dever ser mostrada. Caso a pgina seja chamada com o parmetro GET pag, ento a pgina informada dever ser exibida. Exemplos:-

Chamada da pgina sem parmetro GET


No exemplo abaixo, o usurio est carregando a pgina que ir montar a home e que dever exibir os produtos a partir da primeira pgina.

Neste caso, como no veio nenhuma informao de pgina, devemos entender que a primeira pgina dever ser exibida.
Aplicaes Corporativas Prof. Carlos Majer

Paginao de Registros usando MYSQL e PHP Para isto, fazemos uma checagem no PHP para confirmar se a pgina solicitada foi enviada ou no, da seguinte forma (neste exemplo, usarei o mtodo GET):IF ( ! isset($_GET[pag])) $pagina = 1; ELSE $pagina = $_GET[pag];

Caso seja enviado o nmero da pgina a ser exibida, recuperamos este nmero na segunda parte da checagem:-

IF ( ! isset($_GET[pag])) $pagina = 1; ELSE $pagina = $_GET[pag];

O importante que a varivel $pagina ir conter a informao da pgina que desejamos exibir. Pata utilizarmos o atributo LIMIT do comando SQL necessrio informar o registro inicial. Isto quer dizer que precisamos calcular qual este registro, conforme a pgina desejada. Como a primeira pgina comea sempre no registro zero, montei a frmula bsica abaixo, que subtrai a pgina em um e multiplica o resultado pelo nmero de registros que cada pgina tem (em nosso exemplo 2), para chegarmos no registro inicial desejado. Vejamos:-

$registroInicial = ($pagina 1) * 2;

Pgina Desejada 1. 2. 3.

Linha Inicial 0 2 4

Produtos 1e2 3e4 5e6

($registroInicial 1) * 2 (1 1) * 2 (0) * 2 0 (2 1) * 2 (1) * 2 2 (3 1) * 2 (2) * 2 4


Prof. Carlos Majer

Aplicaes Corporativas

Paginao de Registros usando MYSQL e PHP Com isto feito, podemos montar nossa consulta SQL, da seguinte forma:$cmdSQL = SELECT idProduto, referencia FROM produtos LIMIT . $registroInicial . , 2 ; O comando ficar assim:($registroInicial 1) * 2 (1 1) * 2 (0) * 2 0 (2 1) * 2 (1) * 2 2 (3 1) * 2 (2) * 2 4 $cmdSQL SELECT idProduto, referencia FROM produtos LIMIT 0 , 2 SELECT idProduto, referencia FROM produtos LIMIT 2 , 2 SELECT idProduto, referencia FROM produtos LIMIT 4 , 2 Observaes Retorna os 2 primeiros produtos da tabela Retorna os produtos 3 e 4 Retorna os produtos 5 e 6

Determinando o nmero de pginas na barra de navegao


Bom, ento j sabemos como montar os comandos/consultas SQL para recuperar certo nmero de registros/linhas. A prxima pergunta :- E se no souber quantos registros existem? Como fao para saber? Podemos usar o count do SQL para identificar o nmero de registros. Vamos l?

mysql>SELECT count(idProduto) as total FROM produtos;

+-------+ | total | +-------+ | 6 | +-------+ 1 row in set (0.00 sec) Neste exemplo, estou contando o nmero de registros/linhas da tabela produtos e colocando esta contagem numa coluna/varivel que estou chamando de total.Voc pode utilizar este tipo de comando SQL para identificar o nmero total de registros/linhas numa tabela. Se voc dividir este nmero (total) pelo nmero de produtos que deseja por pgina (2), voc identifica o nmero de pginas de seu site, conforme sua tabela de produtos. Em nossa tabela, temos um total de seis produtos, e desejamos mostrar dois produtos por pgina, o que significa que teremos trs pginas de produtos:PGINAS = TOTAL DE REGISTROS / REGISTROS POR PGINA PAGINAS = TOTAL / 2 PAGINAS = 6 / 2 PAGINAS = 3

Aplicaes Corporativas

Prof. Carlos Majer

Paginao de Registros usando MYSQL e PHP

Montando a barra de navegao


Agora que voc j sabe calcular o nmero de pginas, o que voc precisa fazer um loop de 1 at PAGINAS, mostrar o nmero resultante (em nosso caso: 1, 2 e 3) e colocar um link neste nmero.

for ($num=1;$num<=$paginas;$num++) { echo "<a href='home.php?pag=" . $num . "'>" . $num . "</a> &nbsp;"; }
Em nosso exemplo, isto dever gerar o seguinte cdigo HTML:-

<a href='home.php?pag=1'>1 </a> <a href=home.php?pag=2'>2 </a> <a href='home.php?pag=3'>3 </a>


Ou seja, agora temos nossa barra de paginao funcionando.

Aplicaes Corporativas

Prof. Carlos Majer

Vous aimerez peut-être aussi