Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Aula 12 Relatório - Tabelas

1,166 views

Published on

  • Be the first to comment

  • Be the first to like this

Aula 12 Relatório - Tabelas

  1. 1. Programação Web Fatec Ipiranga Análise e Desenvolvimento de Sistemas Aula 12 – Customização de relatórios – parte I (Tabelas) Dalton Martins dmartins@gmail.comSão Paulo, Novembro, 2011
  2. 2. Bibliotecas de Apoio - PEARHá 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 phpPEAR...
  3. 3. <?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); Criando uma // configura os cabeçalhos $tabela->setHeaderContents(0, 0, "Pedido"); tabela simples $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();?>
  4. 4. 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
  5. 5. Trabalhando com banco de dadosCriamos o banco de dados usuarios e a tabela pessoas abaixo para apoiaros próximos passos que veremos... CREATE TABLE `usuarios`.`pessoas` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `nome` VARCHAR( 30 ) NOT NULL );
  6. 6. 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();?>
  7. 7. <?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); Ordenando o } $rownum++; relatório pelas?> echo $table->toHTML(); $mysqli->close(); colunas
  8. 8. Criando relatórios paginadosO 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.
  9. 9. 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";
  10. 10. 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` FROMpessoas 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();
  11. 11. 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();?>

×