SlideShare uma empresa Scribd logo
PHP + MySQL: master-detail + navegação
Carlos Santos
LabMM 4 - NTC - DeCA - UA
Aula PHP+MySQL 02, 03-05-2012
visualizar dados de várias tabelas

Quando queremos visualizar dados que estão distribuídos por duas
tabelas ligadas entre si, podemos:
  • criar um query baseado num JOIN que permita obter todos os dados;
  • criar vários recordsets de acordo com a informação necessária



A solução adequada depende da situação em que se aplica
base para exemplos
listar os mariachis

$query = "SELECT idMariachi, nome FROM Mariachi";
$rsMari = mysql_query($query , $connection);

while ($row_rsMari = mysql_fetch_assoc($rsMari)){
  echo $row_rsMari[“nome"];
}
listar os mariachis com família

$query = "SELECT Mariachi.idMariachi, Mariachi.nome,
Familia.nomeFamilia FROM Mariachi INNER JOIN Familia ON
Mariachi.Familia_idFamilia = Familia.idFamilia";
$rsMari = mysql_query($query , $connection);

while ($row_rsMari = mysql_fetch_assoc($rsMari)){
  echo $row_rsMari[“nome"].” - “.
                      $row_rsMari[“nomeFamilia].”<br/>”;
}
listar os mariachis com família (not so good)

$query = "SELECT idMariachi, nome, Familia_idFamilia FROM
Mariachi";
$rsMari = mysql_query($query , $connection);

while ($row_rsMari = mysql_fetch_assoc($rsMari)){
  $qFami = "SELECT nomeFamilia FROM Familia WHERE
           idFamilia = ".$row_rsMari[“Familia_idFamilia”];
  $rsFami = mysql_query($qFami , $connection);

    $row_rsFami = mysql_fetch_assoc($rsFami);

    echo $row_rsMari[“nome"].” - “.
                        $row_rsFami[“nomeFamilia].”<br/>”;
}
observações

uma página pode ter muitos recordsets

os valores obtidos num recordset podem ser utilizados para filtrar
resultados a obter noutro recordset

soluções com múltiplos acessos há BD são, normalmente, mais lentas

no entanto, existem circunstâncias em que a quantidade de informação
resultante de um INNER JOIN pode justificar a opção por múltiplos
queries!
master - detail

nesta estrutrura de informação temos:

  • uma página inicial que lista vários tópicos de um modo genérico;
  • uma página de detalhe que permite ver os detalhes do tópico escolhido na
    página master


que informação é necessário transferir entre as páginas?


                               querystring: id_item
               master           .../page.php?a=5
                                                         detail
                                                       detalhes do item
                item1                                 escolhido na página
                                                            master
                item2
                item3                                       voltar
exemplo: master-detail

master: listar todas as famílias

detail: listar os mariachis dessa família
exemplo: master > familias.php

$qFami = "SELECT * FROM Familia";
$rsFami = mysql_query($qFami , $connection);

while ($row_rsFami = mysql_fetch_assoc($rsFami)){
  $line = ‘<p><a href=”mariachisFamilia.php?id=’.
          $row_rsFami[“idFamilia”].
          ’”>’.
          $row_rsFami[“nomeFamilia"].
          ‘</a></p>’;

    echo $line;
}

os URLs na página serão, por exemplo: “mariachisFamilia.php?id=3”
exemplo: detail > mariachisFamilia.php

$idValue = intval($_GET['id']);
$qMari = "SELECT * FROM Mariachi
          WHERE Familia_idFamilia = ".$idValue;
$rsMari = mysql_query($qMari , $connection);

while ($row_rsMari = mysql_fetch_assoc($rsMari)){
  $line = ‘<p>$row_rsMari[“nome”]</p>’;

    echo $line;
}



Como mostrar nesta página o nome da família?
exemplo: master-detail (parte 2)

master: listar todas as famílias

detail: listar os mariachis dessa família
         e incluir o número de relacionamentos com chicas
exemplo: master-detail (parte 2)

soluções a discutir:

  • um query único baseado num INNER JOIN entre Mariachis e
    Mariachi_has_chica com operação de COUNT e filtragem pelo Mariachi?
  • um query para o nome do Mariachi e um query para contar o número de
    registos do Mariachi em Mariachi_has_Chica?
exemplo: master-detail (parte 2)

problema com query único, típico destas situações:

  • se um Mariachi não tiver uma ocorrência em Mariachi_has_Chica o
    resultado será um recordset vazio! Porquê?
  • não será possível mostrar os dados da informação pessoal do Mariachi



neste cenário, a solução a adotar deve ser a segunda!

ou ainda melhor... uma solução com OUTER JOIN

TPC -> implementar esta solução :)
exemplo: master-detail (parte 2)

por zonas condicionais entende-se partes do código que devem ser
processadas quando um recordset está ou não vazio

por exemplo:

  • se o mariachi nunca teve relacionamentos apresentar uma mensagem
    “este mariachi não é um bom exemplo!”
  • nos outros casos mostrar os relacionamentos


como implementar este tipo de condição?
  • if ($rsName) ...
navegação e paginação

imagina que uma família pode ter centenas de mariachis!

  • faz sentido mostrar numa página uma listagem com um número ilimitado
    de itens?



navegação - permite navegar nos itens, tipicamente:

  • previous - next (page 3 of 6)



paginação - mais complexa e permite navegar diretamente para uma
página, tipicamente

  • 1 ... 5 6 7 8 9 ... 20
navegação

o que é necessário saber

  • número total de registos
  • número de itens por página
  • número da página atual
  • registos para mostrar na página atual
navegação - número total de registos

recordset com query de COUNT de registos da tabela
navegação - número de itens por página

é um valor definido por nós e pode simplesmente ser guardado numa
variável

se o utilizador tiver a possibilidade de alterar então podemos necessitar
de uma cookie ou um parâmetro adicional na querystring
navegação - número da página atual

passado na querystring!

  • next -> lê página atual e soma 1
  • previous -> lê página atual e subtrai 1
  • chama novamente a página com o novo id da página a visualizar
  • é necessário ter em atenção as condições para não permitir clicar nas
    opções quando não existem mais páginas para trás ou para a frente
  • se não há valor da página deve assumir-se que é a primeira que deve ser
    mostrada
  • verificar valores que podem ser introduzidos manualmente no URL
navegação - registos para mostrar na página atual

NUNCA fazer uma query a pedir sempre todos os registos!

na query do pedido deve ser especificado o LIMIT (length e offset)

  • SELECT .... LIMIT offset, length
  • length é o valor do número de itens por página
  • offset é calculado com base na página atual e o número de itens por
    página
desafio

criar uma função genérica que adicione, em qualquer cenário, uma barra
de navegação!
  • navigation_bar(nrTotalItens, nrItensPerPage,
    pageNumber)



NOTA: a função não é responsável por mostrar os registos na página! Essa
lógica é da página e não da função.

DICA: para construir o URL ver chaves da super-variável _SERVER

Mais conteúdo relacionado

Mais procurados

Menu dinâmico com kendoUI
Menu dinâmico com kendoUIMenu dinâmico com kendoUI
Menu dinâmico com kendoUI
Douglas Lira
 
LabMM4 (T16 - 12/13) - PHP + MySQL
LabMM4 (T16 - 12/13) - PHP + MySQLLabMM4 (T16 - 12/13) - PHP + MySQL
LabMM4 (T16 - 12/13) - PHP + MySQL
Carlos Santos
 
NotORM
NotORMNotORM
NotORM
Tiago Davi
 
PHP e PostgreSQL: Um é pouco, dois é bom, três é demais
PHP e PostgreSQL: Um é pouco, dois é bom, três é demaisPHP e PostgreSQL: Um é pouco, dois é bom, três é demais
PHP e PostgreSQL: Um é pouco, dois é bom, três é demais
Fabrízio Mello
 
Criando controle de acesso com php e my sql
Criando controle de acesso com php e my sqlCriando controle de acesso com php e my sql
Criando controle de acesso com php e my sql
Paulo Damas
 
PHP Básico - Parte 3
PHP Básico - Parte 3PHP Básico - Parte 3
PHP Básico - Parte 3
Marcus Camargo
 
JasperReports
JasperReportsJasperReports
JasperReports
Vitor Mattos
 
PHPubSP Object Calisthenics aplicado ao PHP
PHPubSP Object Calisthenics aplicado ao PHPPHPubSP Object Calisthenics aplicado ao PHP
PHPubSP Object Calisthenics aplicado ao PHP
Guilherme Blanco
 
Palestra de PDO
Palestra de PDOPalestra de PDO
Palestra de PDO
Almir Mendes
 
Phpex2
Phpex2Phpex2
Aula 8 php
Aula 8 phpAula 8 php
Aula 8 php
sergio_henrique
 

Mais procurados (11)

Menu dinâmico com kendoUI
Menu dinâmico com kendoUIMenu dinâmico com kendoUI
Menu dinâmico com kendoUI
 
LabMM4 (T16 - 12/13) - PHP + MySQL
LabMM4 (T16 - 12/13) - PHP + MySQLLabMM4 (T16 - 12/13) - PHP + MySQL
LabMM4 (T16 - 12/13) - PHP + MySQL
 
NotORM
NotORMNotORM
NotORM
 
PHP e PostgreSQL: Um é pouco, dois é bom, três é demais
PHP e PostgreSQL: Um é pouco, dois é bom, três é demaisPHP e PostgreSQL: Um é pouco, dois é bom, três é demais
PHP e PostgreSQL: Um é pouco, dois é bom, três é demais
 
Criando controle de acesso com php e my sql
Criando controle de acesso com php e my sqlCriando controle de acesso com php e my sql
Criando controle de acesso com php e my sql
 
PHP Básico - Parte 3
PHP Básico - Parte 3PHP Básico - Parte 3
PHP Básico - Parte 3
 
JasperReports
JasperReportsJasperReports
JasperReports
 
PHPubSP Object Calisthenics aplicado ao PHP
PHPubSP Object Calisthenics aplicado ao PHPPHPubSP Object Calisthenics aplicado ao PHP
PHPubSP Object Calisthenics aplicado ao PHP
 
Palestra de PDO
Palestra de PDOPalestra de PDO
Palestra de PDO
 
Phpex2
Phpex2Phpex2
Phpex2
 
Aula 8 php
Aula 8 phpAula 8 php
Aula 8 php
 

Destaque

04 LabMM4 - Bases de dados
04 LabMM4 - Bases de dados04 LabMM4 - Bases de dados
04 LabMM4 - Bases de dados
Carlos Santos
 
LabMM4 (T02 - 12/13) - Bases de dados
LabMM4 (T02 - 12/13) - Bases de dadosLabMM4 (T02 - 12/13) - Bases de dados
LabMM4 (T02 - 12/13) - Bases de dados
Carlos Santos
 
03 LabMM4 - Bases de dados
03 LabMM4 - Bases de dados03 LabMM4 - Bases de dados
03 LabMM4 - Bases de dados
Carlos Santos
 
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveis
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveisLabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveis
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveis
Carlos Santos
 
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHPLabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
Carlos Santos
 
06 LabMM4 - Bases de dados
06 LabMM4 - Bases de dados06 LabMM4 - Bases de dados
06 LabMM4 - Bases de dados
Carlos Santos
 
Banco II - PostgreSQL - Funções
Banco II - PostgreSQL - FunçõesBanco II - PostgreSQL - Funções
Banco II - PostgreSQL - Funções
Gustavo Sávio
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
Daniel Arndt Alves
 

Destaque (8)

04 LabMM4 - Bases de dados
04 LabMM4 - Bases de dados04 LabMM4 - Bases de dados
04 LabMM4 - Bases de dados
 
LabMM4 (T02 - 12/13) - Bases de dados
LabMM4 (T02 - 12/13) - Bases de dadosLabMM4 (T02 - 12/13) - Bases de dados
LabMM4 (T02 - 12/13) - Bases de dados
 
03 LabMM4 - Bases de dados
03 LabMM4 - Bases de dados03 LabMM4 - Bases de dados
03 LabMM4 - Bases de dados
 
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveis
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveisLabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveis
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveis
 
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHPLabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
 
06 LabMM4 - Bases de dados
06 LabMM4 - Bases de dados06 LabMM4 - Bases de dados
06 LabMM4 - Bases de dados
 
Banco II - PostgreSQL - Funções
Banco II - PostgreSQL - FunçõesBanco II - PostgreSQL - Funções
Banco II - PostgreSQL - Funções
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 

Semelhante a Aula 02 PHP+MySQL - LabMM4

PHP MySQL Aula 03
PHP MySQL Aula 03PHP MySQL Aula 03
PHP MySQL Aula 03
Carlos Santos
 
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Dsi   015 - poo e php - conexão com bancos de dados usando pdoDsi   015 - poo e php - conexão com bancos de dados usando pdo
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Jorge Luís Gregório
 
Grails
GrailsGrails
Grails parte 1 - introdução
Grails   parte 1 - introduçãoGrails   parte 1 - introdução
Grails parte 1 - introdução
Josino Rodrigues
 
Php Math and arrays
Php Math and arraysPhp Math and arrays
Php Math and arrays
Cristiano Rafael Steffens
 
Aula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação WebAula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação Web
Dalton Martins
 
Jj08 otimizacao
Jj08 otimizacaoJj08 otimizacao
Jj08 otimizacao
Helder da Rocha
 
MySQL - Workshop Buscapé
MySQL - Workshop BuscapéMySQL - Workshop Buscapé
MySQL - Workshop Buscapé
Wagner Bonfiglio
 
MySQL - Wagner Bonfiglio - Navegg
MySQL - Wagner Bonfiglio - NaveggMySQL - Wagner Bonfiglio - Navegg
MySQL - Wagner Bonfiglio - Navegg
Felipe Guimarães
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
Ari Stopassola Junior
 
Introdução ao Hive
Introdução ao HiveIntrodução ao Hive
Introdução ao Hive
Rafael Sanches
 
Mude seu jeito de pensar com MongoDB
Mude seu jeito de pensar com MongoDBMude seu jeito de pensar com MongoDB
Mude seu jeito de pensar com MongoDB
Douglas Lira
 
PHP Day - PHP para iniciantes
PHP Day - PHP para iniciantesPHP Day - PHP para iniciantes
PHP Day - PHP para iniciantes
Almir Mendes
 
PHP MySQL Aula 07
PHP MySQL Aula 07PHP MySQL Aula 07
PHP MySQL Aula 07
Carlos Santos
 
LINQ - Language Integrated Query
LINQ - Language Integrated QueryLINQ - Language Integrated Query
LINQ - Language Integrated Query
Dalton Valadares
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valor
Kinn Julião
 
Hive vs impala vs spark - tuning
Hive vs impala vs spark - tuningHive vs impala vs spark - tuning
Hive vs impala vs spark - tuning
Tiago Simões
 
Aula 02 - Curso PHP e MySQL
Aula 02 - Curso PHP e MySQLAula 02 - Curso PHP e MySQL
Aula 02 - Curso PHP e MySQL
B&R Consultoria Empresarial
 
Desevolvimento Web Client-side - HTML
Desevolvimento Web Client-side - HTMLDesevolvimento Web Client-side - HTML
Desevolvimento Web Client-side - HTML
Guilherme
 
Aula 9 php (banco de dados)
Aula 9   php (banco de dados)Aula 9   php (banco de dados)
Aula 9 php (banco de dados)
andreluizlc
 

Semelhante a Aula 02 PHP+MySQL - LabMM4 (20)

PHP MySQL Aula 03
PHP MySQL Aula 03PHP MySQL Aula 03
PHP MySQL Aula 03
 
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Dsi   015 - poo e php - conexão com bancos de dados usando pdoDsi   015 - poo e php - conexão com bancos de dados usando pdo
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
 
Grails
GrailsGrails
Grails
 
Grails parte 1 - introdução
Grails   parte 1 - introduçãoGrails   parte 1 - introdução
Grails parte 1 - introdução
 
Php Math and arrays
Php Math and arraysPhp Math and arrays
Php Math and arrays
 
Aula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação WebAula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação Web
 
Jj08 otimizacao
Jj08 otimizacaoJj08 otimizacao
Jj08 otimizacao
 
MySQL - Workshop Buscapé
MySQL - Workshop BuscapéMySQL - Workshop Buscapé
MySQL - Workshop Buscapé
 
MySQL - Wagner Bonfiglio - Navegg
MySQL - Wagner Bonfiglio - NaveggMySQL - Wagner Bonfiglio - Navegg
MySQL - Wagner Bonfiglio - Navegg
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Introdução ao Hive
Introdução ao HiveIntrodução ao Hive
Introdução ao Hive
 
Mude seu jeito de pensar com MongoDB
Mude seu jeito de pensar com MongoDBMude seu jeito de pensar com MongoDB
Mude seu jeito de pensar com MongoDB
 
PHP Day - PHP para iniciantes
PHP Day - PHP para iniciantesPHP Day - PHP para iniciantes
PHP Day - PHP para iniciantes
 
PHP MySQL Aula 07
PHP MySQL Aula 07PHP MySQL Aula 07
PHP MySQL Aula 07
 
LINQ - Language Integrated Query
LINQ - Language Integrated QueryLINQ - Language Integrated Query
LINQ - Language Integrated Query
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valor
 
Hive vs impala vs spark - tuning
Hive vs impala vs spark - tuningHive vs impala vs spark - tuning
Hive vs impala vs spark - tuning
 
Aula 02 - Curso PHP e MySQL
Aula 02 - Curso PHP e MySQLAula 02 - Curso PHP e MySQL
Aula 02 - Curso PHP e MySQL
 
Desevolvimento Web Client-side - HTML
Desevolvimento Web Client-side - HTMLDesevolvimento Web Client-side - HTML
Desevolvimento Web Client-side - HTML
 
Aula 9 php (banco de dados)
Aula 9   php (banco de dados)Aula 9   php (banco de dados)
Aula 9 php (banco de dados)
 

Mais de Carlos Santos

Is AI the Spice of our future?
Is AI the Spice of our future?Is AI the Spice of our future?
Is AI the Spice of our future?
Carlos Santos
 
Mentoria entre pares de estudantes para estudantes
Mentoria entre pares de estudantes para estudantesMentoria entre pares de estudantes para estudantes
Mentoria entre pares de estudantes para estudantes
Carlos Santos
 
1º Encontro Científico TCEdu
1º Encontro Científico TCEdu1º Encontro Científico TCEdu
1º Encontro Científico TCEdu
Carlos Santos
 
Tecnologias da Comunicação em Educação 2018: Aula inicial
Tecnologias da Comunicação em Educação 2018: Aula inicialTecnologias da Comunicação em Educação 2018: Aula inicial
Tecnologias da Comunicação em Educação 2018: Aula inicial
Carlos Santos
 
AVILA Crew - Uma experiência de tutoria (com jogos) de alunos para alunos
AVILA Crew - Uma experiência de tutoria (com jogos) de alunos para alunosAVILA Crew - Uma experiência de tutoria (com jogos) de alunos para alunos
AVILA Crew - Uma experiência de tutoria (com jogos) de alunos para alunos
Carlos Santos
 
AVILA Crew – Uma experiência de tutoria de alunos para alunos
AVILA Crew – Uma experiência de tutoria de alunos para alunosAVILA Crew – Uma experiência de tutoria de alunos para alunos
AVILA Crew – Uma experiência de tutoria de alunos para alunos
Carlos Santos
 
chmod 777 education
chmod 777 educationchmod 777 education
chmod 777 education
Carlos Santos
 
Mestrado em Comunicação Multimédia da Universidade de Aveiro - Sessão de acol...
Mestrado em Comunicação Multimédia da Universidade de Aveiro - Sessão de acol...Mestrado em Comunicação Multimédia da Universidade de Aveiro - Sessão de acol...
Mestrado em Comunicação Multimédia da Universidade de Aveiro - Sessão de acol...
Carlos Santos
 
Tecnologias da Comunicação em Educação: trabalho prático
Tecnologias da Comunicação em Educação: trabalho práticoTecnologias da Comunicação em Educação: trabalho prático
Tecnologias da Comunicação em Educação: trabalho prático
Carlos Santos
 
Sessão de acolhimento do MCMM da Universidade de Aveiro (2016/2017)
Sessão de acolhimento do MCMM da Universidade de Aveiro (2016/2017)Sessão de acolhimento do MCMM da Universidade de Aveiro (2016/2017)
Sessão de acolhimento do MCMM da Universidade de Aveiro (2016/2017)
Carlos Santos
 
chmod 777 education
chmod 777 educationchmod 777 education
chmod 777 education
Carlos Santos
 
SAPO Campus towards a
 Smart Learning Environment
SAPO Campus towards a
 Smart Learning EnvironmentSAPO Campus towards a
 Smart Learning Environment
SAPO Campus towards a
 Smart Learning Environment
Carlos Santos
 
Repensar a tecnologia em contexto educativo: o caso do SAPO Campus
Repensar a tecnologia em contexto educativo: o caso do SAPO CampusRepensar a tecnologia em contexto educativo: o caso do SAPO Campus
Repensar a tecnologia em contexto educativo: o caso do SAPO Campus
Carlos Santos
 
A technological approach to Open and Social Learning: 
the SAPO Campus project
A technological approach to Open and Social Learning: 
the SAPO Campus projectA technological approach to Open and Social Learning: 
the SAPO Campus project
A technological approach to Open and Social Learning: 
the SAPO Campus project
Carlos Santos
 
SAPO Campus: Gamification em contexto educativo
SAPO Campus: Gamification em contexto educativoSAPO Campus: Gamification em contexto educativo
SAPO Campus: Gamification em contexto educativo
Carlos Santos
 
Repensar a tecnologia em contextos educativos: o SAPO Campus no DeCA
Repensar a tecnologia em contextos educativos: o SAPO Campus no DeCARepensar a tecnologia em contextos educativos: o SAPO Campus no DeCA
Repensar a tecnologia em contextos educativos: o SAPO Campus no DeCA
Carlos Santos
 
T20_LM3: APIs e Scoreoid
T20_LM3: APIs e ScoreoidT20_LM3: APIs e Scoreoid
T20_LM3: APIs e Scoreoid
Carlos Santos
 
T19_LM3: Projeto final e documentação de planificação
T19_LM3: Projeto final e documentação de planificaçãoT19_LM3: Projeto final e documentação de planificação
T19_LM3: Projeto final e documentação de planificação
Carlos Santos
 
T18_LM3: Ajax
T18_LM3: AjaxT18_LM3: Ajax
T18_LM3: Ajax
Carlos Santos
 
T17_LM3: Erros/Debug (2013-2014)
T17_LM3: Erros/Debug (2013-2014)T17_LM3: Erros/Debug (2013-2014)
T17_LM3: Erros/Debug (2013-2014)
Carlos Santos
 

Mais de Carlos Santos (20)

Is AI the Spice of our future?
Is AI the Spice of our future?Is AI the Spice of our future?
Is AI the Spice of our future?
 
Mentoria entre pares de estudantes para estudantes
Mentoria entre pares de estudantes para estudantesMentoria entre pares de estudantes para estudantes
Mentoria entre pares de estudantes para estudantes
 
1º Encontro Científico TCEdu
1º Encontro Científico TCEdu1º Encontro Científico TCEdu
1º Encontro Científico TCEdu
 
Tecnologias da Comunicação em Educação 2018: Aula inicial
Tecnologias da Comunicação em Educação 2018: Aula inicialTecnologias da Comunicação em Educação 2018: Aula inicial
Tecnologias da Comunicação em Educação 2018: Aula inicial
 
AVILA Crew - Uma experiência de tutoria (com jogos) de alunos para alunos
AVILA Crew - Uma experiência de tutoria (com jogos) de alunos para alunosAVILA Crew - Uma experiência de tutoria (com jogos) de alunos para alunos
AVILA Crew - Uma experiência de tutoria (com jogos) de alunos para alunos
 
AVILA Crew – Uma experiência de tutoria de alunos para alunos
AVILA Crew – Uma experiência de tutoria de alunos para alunosAVILA Crew – Uma experiência de tutoria de alunos para alunos
AVILA Crew – Uma experiência de tutoria de alunos para alunos
 
chmod 777 education
chmod 777 educationchmod 777 education
chmod 777 education
 
Mestrado em Comunicação Multimédia da Universidade de Aveiro - Sessão de acol...
Mestrado em Comunicação Multimédia da Universidade de Aveiro - Sessão de acol...Mestrado em Comunicação Multimédia da Universidade de Aveiro - Sessão de acol...
Mestrado em Comunicação Multimédia da Universidade de Aveiro - Sessão de acol...
 
Tecnologias da Comunicação em Educação: trabalho prático
Tecnologias da Comunicação em Educação: trabalho práticoTecnologias da Comunicação em Educação: trabalho prático
Tecnologias da Comunicação em Educação: trabalho prático
 
Sessão de acolhimento do MCMM da Universidade de Aveiro (2016/2017)
Sessão de acolhimento do MCMM da Universidade de Aveiro (2016/2017)Sessão de acolhimento do MCMM da Universidade de Aveiro (2016/2017)
Sessão de acolhimento do MCMM da Universidade de Aveiro (2016/2017)
 
chmod 777 education
chmod 777 educationchmod 777 education
chmod 777 education
 
SAPO Campus towards a
 Smart Learning Environment
SAPO Campus towards a
 Smart Learning EnvironmentSAPO Campus towards a
 Smart Learning Environment
SAPO Campus towards a
 Smart Learning Environment
 
Repensar a tecnologia em contexto educativo: o caso do SAPO Campus
Repensar a tecnologia em contexto educativo: o caso do SAPO CampusRepensar a tecnologia em contexto educativo: o caso do SAPO Campus
Repensar a tecnologia em contexto educativo: o caso do SAPO Campus
 
A technological approach to Open and Social Learning: 
the SAPO Campus project
A technological approach to Open and Social Learning: 
the SAPO Campus projectA technological approach to Open and Social Learning: 
the SAPO Campus project
A technological approach to Open and Social Learning: 
the SAPO Campus project
 
SAPO Campus: Gamification em contexto educativo
SAPO Campus: Gamification em contexto educativoSAPO Campus: Gamification em contexto educativo
SAPO Campus: Gamification em contexto educativo
 
Repensar a tecnologia em contextos educativos: o SAPO Campus no DeCA
Repensar a tecnologia em contextos educativos: o SAPO Campus no DeCARepensar a tecnologia em contextos educativos: o SAPO Campus no DeCA
Repensar a tecnologia em contextos educativos: o SAPO Campus no DeCA
 
T20_LM3: APIs e Scoreoid
T20_LM3: APIs e ScoreoidT20_LM3: APIs e Scoreoid
T20_LM3: APIs e Scoreoid
 
T19_LM3: Projeto final e documentação de planificação
T19_LM3: Projeto final e documentação de planificaçãoT19_LM3: Projeto final e documentação de planificação
T19_LM3: Projeto final e documentação de planificação
 
T18_LM3: Ajax
T18_LM3: AjaxT18_LM3: Ajax
T18_LM3: Ajax
 
T17_LM3: Erros/Debug (2013-2014)
T17_LM3: Erros/Debug (2013-2014)T17_LM3: Erros/Debug (2013-2014)
T17_LM3: Erros/Debug (2013-2014)
 

Último

Redação e Leitura_7º ano_58_Produção de cordel .pptx
Redação e Leitura_7º ano_58_Produção de cordel .pptxRedação e Leitura_7º ano_58_Produção de cordel .pptx
Redação e Leitura_7º ano_58_Produção de cordel .pptx
DECIOMAURINARAMOS
 
Educação trabalho HQ em sala de aula uma excelente ideia
Educação  trabalho HQ em sala de aula uma excelente  ideiaEducação  trabalho HQ em sala de aula uma excelente  ideia
Educação trabalho HQ em sala de aula uma excelente ideia
joseanesouza36
 
PP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptx
PP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptxPP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptx
PP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptx
LuizHenriquedeAlmeid6
 
Atividade letra da música - Espalhe Amor, Anavitória.
Atividade letra da música - Espalhe  Amor, Anavitória.Atividade letra da música - Espalhe  Amor, Anavitória.
Atividade letra da música - Espalhe Amor, Anavitória.
Mary Alvarenga
 
A QUESTÃO ANTROPOLÓGICA: O QUE SOMOS OU QUEM SOMOS.pdf
A QUESTÃO ANTROPOLÓGICA: O QUE SOMOS OU QUEM SOMOS.pdfA QUESTÃO ANTROPOLÓGICA: O QUE SOMOS OU QUEM SOMOS.pdf
A QUESTÃO ANTROPOLÓGICA: O QUE SOMOS OU QUEM SOMOS.pdf
AurelianoFerreirades2
 
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdfUFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
Manuais Formação
 
Famílias Que Contribuíram Para O Crescimento Do Assaré
Famílias Que Contribuíram Para O Crescimento Do AssaréFamílias Que Contribuíram Para O Crescimento Do Assaré
Famílias Que Contribuíram Para O Crescimento Do Assaré
profesfrancleite
 
Atividade de reforço de matemática 2º ano
Atividade de reforço de matemática 2º anoAtividade de reforço de matemática 2º ano
Atividade de reforço de matemática 2º ano
fernandacosta37763
 
000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf
000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf
000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf
YeniferGarcia36
 
D20 - Descritores SAEB de Língua Portuguesa
D20 - Descritores SAEB de Língua PortuguesaD20 - Descritores SAEB de Língua Portuguesa
D20 - Descritores SAEB de Língua Portuguesa
eaiprofpolly
 
Fernão Lopes. pptx
Fernão Lopes.                       pptxFernão Lopes.                       pptx
Fernão Lopes. pptx
TomasSousa7
 
- TEMPLATE DA PRATICA - Psicomotricidade.pptx
- TEMPLATE DA PRATICA - Psicomotricidade.pptx- TEMPLATE DA PRATICA - Psicomotricidade.pptx
- TEMPLATE DA PRATICA - Psicomotricidade.pptx
LucianaCristina58
 
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdfCRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
soaresdesouzaamanda8
 
Estrutura Pedagógica - Laboratório de Educação a Distância.ppt
Estrutura Pedagógica - Laboratório de Educação a Distância.pptEstrutura Pedagógica - Laboratório de Educação a Distância.ppt
Estrutura Pedagógica - Laboratório de Educação a Distância.ppt
livrosjovert
 
livro ciclo da agua educação infantil.pdf
livro ciclo da agua educação infantil.pdflivro ciclo da agua educação infantil.pdf
livro ciclo da agua educação infantil.pdf
cmeioctaciliabetesch
 
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdfUFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
Manuais Formação
 
1ª LEI DE OHN, CARACTERISTICAS IMPORTANTES.
1ª LEI DE OHN, CARACTERISTICAS IMPORTANTES.1ª LEI DE OHN, CARACTERISTICAS IMPORTANTES.
1ª LEI DE OHN, CARACTERISTICAS IMPORTANTES.
LeticiaRochaCupaiol
 
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptxAula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
edivirgesribeiro1
 
Introdução à Sociologia: caça-palavras na escola
Introdução à Sociologia: caça-palavras na escolaIntrodução à Sociologia: caça-palavras na escola
Introdução à Sociologia: caça-palavras na escola
Professor Belinaso
 
Vogais Ilustrados para alfabetização infantil
Vogais Ilustrados para alfabetização infantilVogais Ilustrados para alfabetização infantil
Vogais Ilustrados para alfabetização infantil
mamaeieby
 

Último (20)

Redação e Leitura_7º ano_58_Produção de cordel .pptx
Redação e Leitura_7º ano_58_Produção de cordel .pptxRedação e Leitura_7º ano_58_Produção de cordel .pptx
Redação e Leitura_7º ano_58_Produção de cordel .pptx
 
Educação trabalho HQ em sala de aula uma excelente ideia
Educação  trabalho HQ em sala de aula uma excelente  ideiaEducação  trabalho HQ em sala de aula uma excelente  ideia
Educação trabalho HQ em sala de aula uma excelente ideia
 
PP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptx
PP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptxPP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptx
PP Slides Lição 11, Betel, Ordenança para exercer a fé, 2Tr24.pptx
 
Atividade letra da música - Espalhe Amor, Anavitória.
Atividade letra da música - Espalhe  Amor, Anavitória.Atividade letra da música - Espalhe  Amor, Anavitória.
Atividade letra da música - Espalhe Amor, Anavitória.
 
A QUESTÃO ANTROPOLÓGICA: O QUE SOMOS OU QUEM SOMOS.pdf
A QUESTÃO ANTROPOLÓGICA: O QUE SOMOS OU QUEM SOMOS.pdfA QUESTÃO ANTROPOLÓGICA: O QUE SOMOS OU QUEM SOMOS.pdf
A QUESTÃO ANTROPOLÓGICA: O QUE SOMOS OU QUEM SOMOS.pdf
 
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdfUFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
UFCD_10145_Enquadramento do setor farmacêutico_indice.pdf
 
Famílias Que Contribuíram Para O Crescimento Do Assaré
Famílias Que Contribuíram Para O Crescimento Do AssaréFamílias Que Contribuíram Para O Crescimento Do Assaré
Famílias Que Contribuíram Para O Crescimento Do Assaré
 
Atividade de reforço de matemática 2º ano
Atividade de reforço de matemática 2º anoAtividade de reforço de matemática 2º ano
Atividade de reforço de matemática 2º ano
 
000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf
000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf
000. Para rezar o terço - Junho - mês do Sagrado Coração de Jesús.pdf
 
D20 - Descritores SAEB de Língua Portuguesa
D20 - Descritores SAEB de Língua PortuguesaD20 - Descritores SAEB de Língua Portuguesa
D20 - Descritores SAEB de Língua Portuguesa
 
Fernão Lopes. pptx
Fernão Lopes.                       pptxFernão Lopes.                       pptx
Fernão Lopes. pptx
 
- TEMPLATE DA PRATICA - Psicomotricidade.pptx
- TEMPLATE DA PRATICA - Psicomotricidade.pptx- TEMPLATE DA PRATICA - Psicomotricidade.pptx
- TEMPLATE DA PRATICA - Psicomotricidade.pptx
 
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdfCRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
CRONOGRAMA - PSC 2° ETAPA 2024.pptx (1).pdf
 
Estrutura Pedagógica - Laboratório de Educação a Distância.ppt
Estrutura Pedagógica - Laboratório de Educação a Distância.pptEstrutura Pedagógica - Laboratório de Educação a Distância.ppt
Estrutura Pedagógica - Laboratório de Educação a Distância.ppt
 
livro ciclo da agua educação infantil.pdf
livro ciclo da agua educação infantil.pdflivro ciclo da agua educação infantil.pdf
livro ciclo da agua educação infantil.pdf
 
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdfUFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
UFCD_3546_Prevenção e primeiros socorros_geriatria.pdf
 
1ª LEI DE OHN, CARACTERISTICAS IMPORTANTES.
1ª LEI DE OHN, CARACTERISTICAS IMPORTANTES.1ª LEI DE OHN, CARACTERISTICAS IMPORTANTES.
1ª LEI DE OHN, CARACTERISTICAS IMPORTANTES.
 
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptxAula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
Aula história , caracteristicas e esteriótipos em relação a DANÇA DE SALAO.pptx
 
Introdução à Sociologia: caça-palavras na escola
Introdução à Sociologia: caça-palavras na escolaIntrodução à Sociologia: caça-palavras na escola
Introdução à Sociologia: caça-palavras na escola
 
Vogais Ilustrados para alfabetização infantil
Vogais Ilustrados para alfabetização infantilVogais Ilustrados para alfabetização infantil
Vogais Ilustrados para alfabetização infantil
 

Aula 02 PHP+MySQL - LabMM4

  • 1. PHP + MySQL: master-detail + navegação Carlos Santos LabMM 4 - NTC - DeCA - UA Aula PHP+MySQL 02, 03-05-2012
  • 2. visualizar dados de várias tabelas Quando queremos visualizar dados que estão distribuídos por duas tabelas ligadas entre si, podemos: • criar um query baseado num JOIN que permita obter todos os dados; • criar vários recordsets de acordo com a informação necessária A solução adequada depende da situação em que se aplica
  • 4. listar os mariachis $query = "SELECT idMariachi, nome FROM Mariachi"; $rsMari = mysql_query($query , $connection); while ($row_rsMari = mysql_fetch_assoc($rsMari)){ echo $row_rsMari[“nome"]; }
  • 5. listar os mariachis com família $query = "SELECT Mariachi.idMariachi, Mariachi.nome, Familia.nomeFamilia FROM Mariachi INNER JOIN Familia ON Mariachi.Familia_idFamilia = Familia.idFamilia"; $rsMari = mysql_query($query , $connection); while ($row_rsMari = mysql_fetch_assoc($rsMari)){ echo $row_rsMari[“nome"].” - “. $row_rsMari[“nomeFamilia].”<br/>”; }
  • 6. listar os mariachis com família (not so good) $query = "SELECT idMariachi, nome, Familia_idFamilia FROM Mariachi"; $rsMari = mysql_query($query , $connection); while ($row_rsMari = mysql_fetch_assoc($rsMari)){ $qFami = "SELECT nomeFamilia FROM Familia WHERE idFamilia = ".$row_rsMari[“Familia_idFamilia”]; $rsFami = mysql_query($qFami , $connection); $row_rsFami = mysql_fetch_assoc($rsFami); echo $row_rsMari[“nome"].” - “. $row_rsFami[“nomeFamilia].”<br/>”; }
  • 7. observações uma página pode ter muitos recordsets os valores obtidos num recordset podem ser utilizados para filtrar resultados a obter noutro recordset soluções com múltiplos acessos há BD são, normalmente, mais lentas no entanto, existem circunstâncias em que a quantidade de informação resultante de um INNER JOIN pode justificar a opção por múltiplos queries!
  • 8. master - detail nesta estrutrura de informação temos: • uma página inicial que lista vários tópicos de um modo genérico; • uma página de detalhe que permite ver os detalhes do tópico escolhido na página master que informação é necessário transferir entre as páginas? querystring: id_item master .../page.php?a=5 detail detalhes do item item1 escolhido na página master item2 item3 voltar
  • 9. exemplo: master-detail master: listar todas as famílias detail: listar os mariachis dessa família
  • 10. exemplo: master > familias.php $qFami = "SELECT * FROM Familia"; $rsFami = mysql_query($qFami , $connection); while ($row_rsFami = mysql_fetch_assoc($rsFami)){ $line = ‘<p><a href=”mariachisFamilia.php?id=’. $row_rsFami[“idFamilia”]. ’”>’. $row_rsFami[“nomeFamilia"]. ‘</a></p>’; echo $line; } os URLs na página serão, por exemplo: “mariachisFamilia.php?id=3”
  • 11. exemplo: detail > mariachisFamilia.php $idValue = intval($_GET['id']); $qMari = "SELECT * FROM Mariachi WHERE Familia_idFamilia = ".$idValue; $rsMari = mysql_query($qMari , $connection); while ($row_rsMari = mysql_fetch_assoc($rsMari)){ $line = ‘<p>$row_rsMari[“nome”]</p>’; echo $line; } Como mostrar nesta página o nome da família?
  • 12. exemplo: master-detail (parte 2) master: listar todas as famílias detail: listar os mariachis dessa família e incluir o número de relacionamentos com chicas
  • 13. exemplo: master-detail (parte 2) soluções a discutir: • um query único baseado num INNER JOIN entre Mariachis e Mariachi_has_chica com operação de COUNT e filtragem pelo Mariachi? • um query para o nome do Mariachi e um query para contar o número de registos do Mariachi em Mariachi_has_Chica?
  • 14. exemplo: master-detail (parte 2) problema com query único, típico destas situações: • se um Mariachi não tiver uma ocorrência em Mariachi_has_Chica o resultado será um recordset vazio! Porquê? • não será possível mostrar os dados da informação pessoal do Mariachi neste cenário, a solução a adotar deve ser a segunda! ou ainda melhor... uma solução com OUTER JOIN TPC -> implementar esta solução :)
  • 15. exemplo: master-detail (parte 2) por zonas condicionais entende-se partes do código que devem ser processadas quando um recordset está ou não vazio por exemplo: • se o mariachi nunca teve relacionamentos apresentar uma mensagem “este mariachi não é um bom exemplo!” • nos outros casos mostrar os relacionamentos como implementar este tipo de condição? • if ($rsName) ...
  • 16. navegação e paginação imagina que uma família pode ter centenas de mariachis! • faz sentido mostrar numa página uma listagem com um número ilimitado de itens? navegação - permite navegar nos itens, tipicamente: • previous - next (page 3 of 6) paginação - mais complexa e permite navegar diretamente para uma página, tipicamente • 1 ... 5 6 7 8 9 ... 20
  • 17. navegação o que é necessário saber • número total de registos • número de itens por página • número da página atual • registos para mostrar na página atual
  • 18. navegação - número total de registos recordset com query de COUNT de registos da tabela
  • 19. navegação - número de itens por página é um valor definido por nós e pode simplesmente ser guardado numa variável se o utilizador tiver a possibilidade de alterar então podemos necessitar de uma cookie ou um parâmetro adicional na querystring
  • 20. navegação - número da página atual passado na querystring! • next -> lê página atual e soma 1 • previous -> lê página atual e subtrai 1 • chama novamente a página com o novo id da página a visualizar • é necessário ter em atenção as condições para não permitir clicar nas opções quando não existem mais páginas para trás ou para a frente • se não há valor da página deve assumir-se que é a primeira que deve ser mostrada • verificar valores que podem ser introduzidos manualmente no URL
  • 21. navegação - registos para mostrar na página atual NUNCA fazer uma query a pedir sempre todos os registos! na query do pedido deve ser especificado o LIMIT (length e offset) • SELECT .... LIMIT offset, length • length é o valor do número de itens por página • offset é calculado com base na página atual e o número de itens por página
  • 22. desafio criar uma função genérica que adicione, em qualquer cenário, uma barra de navegação! • navigation_bar(nrTotalItens, nrItensPerPage, pageNumber) NOTA: a função não é responsável por mostrar os registos na página! Essa lógica é da página e não da função. DICA: para construir o URL ver chaves da super-variável _SERVER