Escolar Documentos
Profissional Documentos
Cultura Documentos
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 tabela de Produtos
Vamos dar uma olhada num exemplo de tabela de produtos de exemplo?
Aplicaes Corporativas
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
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
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:-
Ir retornar +-----------+------------+ | idProduto | referencia | +-----------+------------+ | 1 | HP DJ 6940 | | 2 | HP DJ 1460 | +-----------+------------+ 2 rows in set (0.00 sec)
Aplicaes Corporativas
Paginao de Registros usando MYSQL e PHP +-----------+------------+ | idProduto | referencia | +-----------+------------+ | 3 | HP DJ 6980 | | 4 | HP DJ F380 | +-----------+------------+ 2 rows in set (0.00 sec)
+-----------+------------+ | idProduto | referencia | +-----------+------------+ | 5 | HP DJ D4260| | 6 | HP DJ D2460| +-----------+------------+ 2 rows in set (0.00 sec)
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:-
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
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
+-------+ | 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
for ($num=1;$num<=$paginas;$num++) { echo "<a href='home.php?pag=" . $num . "'>" . $num . "</a> "; }
Em nosso exemplo, isto dever gerar o seguinte cdigo HTML:-
Aplicaes Corporativas