11

Click here to load reader

Aula 12 Relatório - Tabelas

Embed Size (px)

Citation preview

Page 1: Aula 12   Relatório - Tabelas

Programação Web

Fatec IpirangaAnálise e Desenvolvimento de Sistemas

Aula 12 – Customização de relatórios – parte I (Tabelas)

Dalton [email protected]

São Paulo, Novembro, 2011

Page 2: Aula 12   Relatório - Tabelas

Bibliotecas de Apoio - PEAR

Há um conjunto de bibliotecas chamado PEAR (PHP extension and application repository) que são muito úteis na extensão das funcionalidades nativas do PHP;

O repositório é disponível online: http://pear.php.net/

São mais de 550 pacotes representando funcionalidades em mais de 37 áreas diferentes;

Normalmente, esse conjunto de bibliotecas já vem instalado com o XAMPP, no diretório \php\PEAR...

Page 3: Aula 12   Relatório - Tabelas

Criando uma tabela simples

<?php // Inclui a biblioteca de tratamento de tabelas require_once "HTML/Table.php";

// monta os dados no vetor $dados = array( '0' => array("12309","45633","2010-12-19 01:13:42","$22.04","$5.67","$27.71"), '1' => array("12310","942","2010-12-19 01:15:12","$11.50","$3.40","$14.90"), '2' => array("12311","7879","2010-12-19 01:15:22","$95.99","$15.00","$110.99"), '3' => array("12312","55521","2010-12-19 01:30:45","$10.75","$3.00","$13.75") );

// Cria um vetor com os atributos da tabela $atributos = array('border' => '1'); // Cria o objeto tabela $tabela = new HTML_Table($atributos);

// configura os cabeçalhos $tabela->setHeaderContents(0, 0, "Pedido"); $tabela->setHeaderContents(0, 1, "Cliente"); $tabela->setHeaderContents(0, 2, "Data do pedido"); $tabela->setHeaderContents(0, 3, "Sub Total"); $tabela->setHeaderContents(0, 4, "Custo de envio"); $tabela->setHeaderContents(0, 5, "Custo total");

// Itera pelo vetor de dados para produzir as linhas da tabela for($linhanum = 0; $linhanum < count($dados); $linhanum++) { for($colnum = 0; $colnum < 6; $colnum++) { $tabela->setCellContents($linhanum+1, $colnum, $dados[$linhanum][$colnum]); } }

// exibe os dados na tela echo $tabela->toHTML();?>

Page 4: Aula 12   Relatório - Tabelas

Melhorando a visibilidade dos resultados

// Itera pelo vetor de dados para produzir as linhas da tabela for($linhanum = 0; $linhanum < count($dados); $linhanum++) { for($colnum = 0; $colnum < 6; $colnum++) { $tabela->setCellContents($linhanum+1, $colnum, $dados[$linhanum][$colnum]); } } $tabela->altRowAttributes(1,"bgcolor=#CCC99");

// exibe os dados na tela echo $tabela->toHTML();

Obs.: tutorial de outras opções sobre como usar a biblioteca Tablehttp://dev.obliquid.com/docs/pear_table.html

Page 5: Aula 12   Relatório - Tabelas

Trabalhando com banco de dados

CREATE TABLE `usuarios`.`pessoas` (`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,`nome` VARCHAR( 30 ) NOT NULL) ;

Criamos o banco de dados usuarios e a tabela pessoas abaixo para apoiaros próximos passos que veremos...

Page 6: Aula 12   Relatório - Tabelas

Tabela simples a partir do banco<?php

require_once "HTML/Table.php";

$mysqli = new mysqli("localhost", "root", "", "usuarios");

$attributes = array('border' => '1');

$table = new HTML_Table($attributes);

$table->setHeaderContents(0, 0, "ID"); $table->setHeaderContents(0, 1, "Pessoas");

$query = "SELECT id AS `Numero de chamada`, nome AS `Nome completo` FROM pessoas ORDER BY id"; $stmt = $mysqli->prepare($query); $stmt->execute(); $stmt->bind_result($ID, $nomeID);

$rownum = 1; while ($stmt->fetch()) {

$table->setCellContents($rownum, 0, $ID); $table->setCellContents($rownum, 1, $nomeID);

$rownum++; } echo $table->toHTML(); $mysqli->close();?>

Page 7: Aula 12   Relatório - Tabelas

Ordenando o relatório pelas

colunas

<?php require_once "HTML/Table.php";

$mysqli = new mysqli("localhost", "root", "", "usuarios");

$attributes = array('border' => '1');

$table = new HTML_Table($attributes);

// Montando os cabeçalhos das colunas linkáveis utilizando o método GET do HTTP! $IDcoluna = "<a href='".$_SERVER['PHP_SELF']."?campo=id'>ID</a>"; $nomeIDcoluna = "<a href='".$_SERVER['PHP_SELF']."?campo=nome'>Pessoas</a>"; $table->setHeaderContents(0, 0, $IDcoluna); $table->setHeaderContents(0, 1, $nomeIDcoluna);

// selecionando o campo de indexação conforme o retorno do método GET $campo = (isset($_GET['campo'])) ? $_GET['campo'] : "id";

$query = "SELECT id AS `Numero de chamada`, nome AS `Nome completo` FROM pessoas ORDER BY ".$campo." ASC";

$stmt = $mysqli->prepare($query); $stmt->execute(); $stmt->bind_result($ID,$nomeID);

$rownum = 1; while ($stmt->fetch()) {

$table->setCellContents($rownum, 0, $ID); $table->setCellContents($rownum, 1, $nomeID);

$rownum++; } echo $table->toHTML(); $mysqli->close();?>

Page 8: Aula 12   Relatório - Tabelas

Criando relatórios paginados

O MySQL possui uma cláusula LIMIT, que permite extrairmos dados limitados por um valor de linha inicial e o número de linhas a partir desse valor que deve ser extraído.

Exemplo:

SELECT nome FROM pessoas ORDER BY nome ASC LIMIT 0,2;

recupera apenas as duas primeiras linhas.

Para utilizarmos na criação de relatórios, precisamos determinar 3 variáveis:

– Número de linhas por página;

– Faixa de linhas a extrair do banco;

– Número de linhas totais de resultado.

Page 9: Aula 12   Relatório - Tabelas

Criando relatórios paginados - (i)

<?php require_once "HTML/Table.php";

$mysqli = new mysqli("localhost", "root", "Dm%512p", "usuarios"); $tamanhodapagina=2;

$registroinicial = (int) $_GET['registroinicial']; $registroinicial = (isset($_GET['registroinicial'])) ? $registroinicial : 0;

$attributes = array('border' => '1');

$table = new HTML_Table($attributes);

// Montando os cabeçalhos das colunas linkáveis utilizando o método GET do HTTP! $IDcoluna = "<a href='".$_SERVER['PHP_SELF']."?campo=id'>ID</a>"; $nomeIDcoluna = "<a href='".$_SERVER['PHP_SELF']."?campo=nome'>Pessoas</a>"; $table->setHeaderContents(0, 0, $IDcoluna); $table->setHeaderContents(0, 1, $nomeIDcoluna);

// selecionando o campo de indexação conforme o retorno do método GET $campo = (isset($_GET['campo'])) ? $_GET['campo'] : "id";

Page 10: Aula 12   Relatório - Tabelas

Criando relatórios paginados - (ii)

// seleciona o número total de registros na tabela $resultado = $mysqli->query("SELECT count(id) AS id FROM pessoas"); list($totalregistros)=$resultado->fetch_row();

$query = "SELECT id AS `Numero de chamada`, nome AS `Nome completo` FROM pessoas ORDER BY ".$campo." ASC LIMIT ".$registroinicial.",".$tamanhodapagina; $stmt = $mysqli->prepare($query); $stmt->execute(); $stmt->bind_result($ID,$nomeID);

$rownum = 1; while ($stmt->fetch()) {

$table->setCellContents($rownum, 0, $ID); $table->setCellContents($rownum, 1, $nomeID);

$rownum++; } echo $table->toHTML();

Page 11: Aula 12   Relatório - Tabelas

Criando relatórios paginados - (iii)

// cria o link de anterior if ($registroinicial > 0) { $prev = $registroinicial - $tamanhodapagina; $url = $_SERVER['PHP_SELF']."?registroinicial=$prev"; printf("<a href='%s'> Pagina anterior </a>",$url); }

// cria o link posterior if ($totalregistros > ($registroinicial + $tamanhodapagina)) { $next = $registroinicial+$tamanhodapagina; $url = $_SERVER['PHP_SELF']."?registroinicial=$next"; printf("<a href='%s'> Pagina posterior </a>",$url); }

$mysqli->close();?>