desenvolvimento de aplicações php

11

Upload: grupo-lidel

Post on 25-Jul-2016

222 views

Category:

Documents


1 download

DESCRIPTION

A linguagem PHP é uma tecnologia open source que permite criar conteúdos dinâmicos para a Web. Esta obra não pretende ser um guia exaustivo sobre funções, operações e bibliotecas disponíveis em PHP, mas antes uma obra com um cariz eminentemente prático, que aborda a linguagem PHP sobre esse ponto de vista. O seu principal objetivo é transmitir ao leitor as técnicas e os métodos essenciais para que facilmente compreenda esta linguagem. Este livro constitui-se como uma ferramenta útil para aprender ou consolidar conhecimentos no desenvolvimento de aplicações, recorrendo a diversos exemplos práticos, tais como: Registo, Autenticação e Gestão de Utilizadores; Calendário Online; Gráficos Dinâmicos; Loja Virtual; Álbum de Fotos, etc. No final é apresentado um capítulo que engloba todos os conhecimentos adquiridos ao longo da obra e que tem por base o desenvolvimento de um site de uma livraria online.

TRANSCRIPT

Page 1: Desenvolvimento de Aplicações PHP
Page 2: Desenvolvimento de Aplicações PHP

3

Iniciando o PHP e o MySQL

  FCA – Editora de Informática    

  45 

Tome‐se como exemplo a base de dados de uma livraria, que contém informações sobre os livros disponíveis, autores e vendas, em que o elemento central desta base de dados serão os próprios livros.  

Neste caso, podiam ser utilizadas três tabelas, com a estrutura que a Figura 3.3 mostra. 

 

Tabelas da base de dados livrariaFIGURA 3.3 –   

Quando  se criam  tabelas em bases de dados, é  fundamental que haja um campo que identifique  inequivocamente  cada  um  dos  registos.  Por  exemplo,  no  caso  de  uma livraria, poderia utilizar‐se o ISBN1 como número identificativo de cada livro mas, para o caso  dos  autores,  teria  de  se  utilizar  um  outro  código,  que  pode  ser  atribuído  pelo próprio sistema informático, aquando do registo de um novo autor. Isto é feito inserindo um novo campo de  identificação, que aumenta de 1 em 1, de cada vez que é feito um novo registo, seja livro, autor ou venda.  

A este novo campo dá‐se o nome de chave primária, uma vez que é esta “chave” que identifica o registo da tabela.  

Os outros campos da tabela podem funcionar como chaves estrangeiras, uma vez que podem assumir‐se como chave primária noutra tabela diferente. Nalguns programas, é assumido automaticamente o primeiro campo da tabela como sendo a chave primária; noutros,  aparece  identificado  o  campo  com  o  símbolo  de  uma  chave.  Entre  a  chave primária e a chave estrangeira pode ser estabelecida uma relação.  

A relação entre a chave primária e a chave estrangeira é muito  importante para quem trabalha em bases de dados, pois permite obter os valores de uma determinada tabela de forma quase automática, através da relação estabelecida entre ambas. 

1 ISBN é a sigla de International Standard Book Number – número que identifica cada livro de forma única, sendo utilizado em livros e publicações não periódicas.

Page 3: Desenvolvimento de Aplicações PHP

5

Desenvolvimento de Aplicações em PHP

    FCA – Editora de Informática 

112   

 

5.3.3. Funções de data e hora

Em  linguagem  PHP,  existem  funções  que  permitem  trabalhar  com  datas,  sendo  de grande utilidade quando se pretende construir um calendário. As funções que permitem trabalhar com datas e horas são várias, entre as quais se destacam: 

date()– Permite formatar uma data ou hora;  getdate()– Retorna a informação sobre uma data ou hora;  checkdate()– Permite obter informação sobre a data ou hora;  time()– Devolve o timestamp em utilização;  mktime()– Permite obter um timestamp para uma data ou hora específica. 

A função date() pode incluir diferentes argumentos que mostrarão a data ou hora num determinado formato. Os argumentos desta função no que diz respeito a datas podem corresponder a informação sobre dias, meses, anos ou datas completas, mas todos eles são devolvidos em inglês, pelo que é necessário converter para português.  

A função date() é utilizada quando se pretende trabalhar com datas (Tabela 5.2). 

Argumento  Resultado 

D Devolve o mês do ano, em formato de texto 

d Devolve o dia do mês, com dois dígitos (por exemplo, 02 ou 31) 

N Devolve cada dia em formato numérico  (ISO‐8601), sendo o número “1” a segunda‐feira 

n Devolve  cada mês  em  formato numérico,  sem  zeros  (por exemplo, janeiro = 1; dezembro = 12) 

y Devolve o ano com apenas dois dígitos (por exemplo, 98 ou 12) 

Y Devolve o ano com quatro dígitos  (por exemplo, 1998 ou 2012) 

F Devolve  o  mês  por  extenso  (por  exemplo,  January, February) 

TABELA 5.2 –Argumentos da função date()para datas  

No caso em que se pretende obter o nome dos meses ou dias por extenso, e como o resultado  é  devolvido  em  inglês,  é  necessário  criar  uma  instrução  que  os  faça corresponder aos respetivos nomes dos meses/dias em português, o que é conseguido através  de  um  switch/case.  Esta  situação  será  objeto  de  tratamento  ao  longo  da criação do calendário e será aplicada sempre que se revele necessário. 

Page 4: Desenvolvimento de Aplicações PHP

5

Desenvolvimento de Aplicações em PHP

    FCA – Editora de Informática 

134   

 

5.5. Utilização de Javascript no calendário online

A  linguagem  Javascript  é  de  grande  aplicabilidade  em  páginas  Web  pois  permite executar operações do lado do cliente. Por exemplo, quando se pretende verificar se um formulário foi totalmente preenchido, não é necessário executar uma operação do lado do  servidor, uma  vez  que  o  formulário  está  do  lado  do  cliente  e  pode  ser  verificado antes  do  processamento.  Outro  exemplo  ocorre  quando  se  pretende  inserir  uma hiperligação que volte à página que foi visualizada anteriormente, o que pode ser feito recorrendo à instrução javascript:history.back();. 

5.5.1. Janela de aviso

Um  exemplo  de  utilização  de  Javascript  em  páginas  Web  poderia  ser  dado  com  a utilização  de  uma  janela  de  aviso  para  o  utilizador.  As  janelas  de  aviso  podem  ser incluídas sempre que se pretenda avisar o utilizador de algo que ocorre na aplicação e, no caso do calendário, estas irão aparecer quando o utilizador, por engano, colocar uma hora de início do evento que seja superior à hora de fim do evento.  

Para que  surja uma  janela de aviso,  recorre‐se à  instrução alert(), onde  se  inclui o alerta que se pretenda dar ao utilizador: 

<script>

alert('A hora de fim não pode ser inferior à hora de início! Clique para continuar...');

window.location.href='calendario.php';

</script>

Desta forma, o utilizador é avisado sobre o problema em causa (Figura 5.9). 

 

Janela de aviso com JavascriptFIGURA 5.9 –   

Page 5: Desenvolvimento de Aplicações PHP

6

Fórum para a comunidade

  FCA – Editora de Informática    

  165 

O código que se segue  funciona por pequenos “blocos” que têm objetivos específicos. Para ser mais fácil a sua compreensão, resumem‐se de seguida as diferentes tarefas que estes terão de desempenhar: 

Tarefa 1: procurar tópicos associados ao  fórum e ordená‐los por data – O código referente  a  esta  tarefa  tem  como  objetivo  aceder  à  base  de  dados,  procurar  os tópicos associados ao fórum identificado em id_forum e ordenar todos os registos obtidos.  Caso  não  sejam  encontrados  tópicos,  o  utilizador  é  informado  desta situação; 

Tarefa 2: calcular o número de mensagens já colocadas e associadas a cada tópico – Nesta tarefa irão ser pesquisadas as mensagens associadas a cada tópico, através da chave id_topico, cujo valor será utilizado no cruzamento das tabelas topicos e mensagens; 

Tarefa  3:  elaborar  a  tabela  que  apresenta  os  tópicos  com  título,  número  de mensagens, autor e data da criação do tópico – O código referente a esta tarefa irá apresentar  uma  tabela  na  qual  o  utilizador  pode  visualizar  título,  número  de mensagens, autor do  tópico e data da  criação do  tópico,  sendo a data  convertida para o formato português; 

Tarefa 4: se o utilizador é administrador, colocar hiperligação que permite eliminar o  tópico  –  Esta  hiperligação  solicita  o  ficheiro  “apagar_topico.php”,  que  se encontra na pasta administrador, passando por URL a  indicação do  tópico que deve ser eliminado (id_topico). 

A primeira tarefa é realizada pelo seguinte script: 

// procurar tópicos associados ao fórum selecionado

$sql_topicos = "SELECT MAX(data_topico) AS ultima_data, topicos.*, utilizadores.* FROM topicos, utilizadores WHERE topicos.id_utilizador = utilizadores.id_utilizador AND topicos.id_forum = " . $id_forum . " GROUP BY topicos.id_topico ORDER BY ultima_data DESC;";

// realizar consulta

$consulta_topicos = mysql_query($sql_topicos);

$resultado_topicos = mysql_num_rows($consulta_topicos);

A  instrução MAX(data_topico) permite que seja obtida a data mais recente do total dos  tópicos  registados,  à  qual  se  atribui  a  designação  ultima_data,  o  que  permite fazer  a  ordenação  da  data mais  recente  para  a  data mais  antiga,  utilizando  depois  a instrução ORDER BY ultima_data DESC. 

 

Page 6: Desenvolvimento de Aplicações PHP

6

Fórum para a comunidade

  FCA – Editora de Informática    

  181 

6.5. Administração do fórum

No caso de um  fórum, existem  funções específicas que apenas estão disponíveis para administradores. Entre estas funções, incluem‐se: iniciar ou eliminar categorias, fóruns, tópicos ou mensagens, bem como gerir os utilizadores. 

6.5.1. Menu de administração

O  acesso  ao menu  de  administração  é  feito  com  base  na  hiperligação  presente  no cabeçalho, disponível apenas para administradores, tal como foi explicado. Ao clicar‐se nessa  hiperligação,  é  solicitado  o  ficheiro  “menu_admin.php”  que  apresenta  uma tabela com um conjunto de opções que irão permitir executar diferentes tarefas: 

Criar ou eliminar categorias;  Criar fóruns;  Validar utilizadores ou torná‐los inativos;  Ver lista de utilizadores. 

O aspeto deste menu é o que vemos representado na Figura 6.12. 

 

Menu de administraçãoFIGURA 6.12 –   

O  script  do  ficheiro  “menu_admin.php”  é  aquele  que  permite  construir  esta página, sendo  realizado  sobretudo  em  linguagem  HTML  e  constituído  por  uma  tabela  que apresenta diferentes hiperligações, que solicitam os respetivos ficheiros. Os únicos casos em que é utilizada a  linguagem PHP  são a  solicitação da  ligação à base de dados e a inclusão do cabeçalho: 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Page 7: Desenvolvimento de Aplicações PHP

7

Mailing list

  FCA – Editora de Informática    

  205 

7.3.3. CAPTCHA

Para evitar o registo de utilizadores em massa, pode utilizar‐se um sistema que obrigue o utilizador a  inserir um código que é gerado aleatoriamente quando um determinado utilizador  pretende  realizar  um  registo.  Este  sistema  pode  ser  aplicado  em  inúmeras situações, como aquelas que foram vistas no capítulo anterior (por exemplo, no registo de utilizadores ou envio de mensagens para o fórum), designando‐se por CAPTCHA. 

A  sigla  CAPTCHA  é  o  acrónimo  para  Completely  Automated  Public  Turing  test  to  tell Computers  and  Humans  Apart,  referindo‐se  a  um  teste  que  pode  ser  realizado  para determinar  se  um  dado  utilizador  é  humano  ou  não,  baseado  no  “Teste  de  Turing”, proposto por Alan Turing na década de 1950. 

Apesar de poder parecer um pouco estranho, existe a possibilidade de haver  registos feitos  continuamente  por  outros  computadores,  de  forma  automática,  pelo  que  o objetivo do CAPTCHA é precisamente prevenir o registo automático e posterior envio de spam, a partir de contas criadas sem intervenção humana. No caso de uma mailing list, esta  situação  torna‐se  especialmente  relevante,  pois  poderia  haver  a  tentativa  de registo  de  utilizadores  de  forma  automática,  com  vista  a  produzir  um  ataque informático. 

Numa  explicação  muito  simplista,  podia  afirmar‐se  que  este  sistema  se  baseia  na comparação entre uma informação que é mostrada ao utilizador e a respetiva replicação dessa informação, por parte do utilizador. 

A informação, que é gerada aleatoriamente quando o script é executado, pode ser uma pergunta  comum,  a  soma  de  dois  números  (em  que  o  utilizador  tem  de  colocar  o resultado),  a  cor  da  imagem mostrada  ou  ainda  um  texto  que  o  utilizador  tem  de replicar.  De  seguida,  ambos  os  códigos  são  comparados  e,  caso  coincidam,  o  script continua a ser executado; caso contrário, é gerado um novo exemplo e o utilizador tem de efetuar nova tentativa de acesso. Atualmente, é possível gerar códigos que apareçam ondulados ou distorcidos, com vista a dificultar ainda mais o acesso  indevido, uma vez que alguns programas já conseguiam decifrar a resposta que era necessário inserir. 

NotaAquando da codificação da chave gerada, pode ser utilizado o algoritmo do tipo SHA1  em  vez  do  algoritmo  MD5.  Tal  como  explicado  no  Capítulo  4,  a  chave gerada também é diferente. 

A título de exemplo, cria‐se o ficheiro “captcha.php”, que vai conter o script que dará origem ao procedimento de verificação do registo feito por um utilizador humano. Este irá  gerar  um  código  aleatório,  baseado  na  função  RAND(),  o  qual  será  codificado utilizando o algoritmo SHA1.  

Page 8: Desenvolvimento de Aplicações PHP

7

Desenvolvimento de Aplicações em PHP

    FCA – Editora de Informática 

216   

 

7.5.1. Funcionamento da paginação de resultados

Se  é  verdade que o  crescente número de  registos  traduz um  crescente  interesse nas novidades que podem ser recebidas através de uma newsletter, também é verdade que será quase inevitável que a base de dados aumente exponencialmente de tamanho. 

Uma  vez  que  há  um  número  cada  vez  maior  de  registos  de  endereços  de  correio eletrónico  que  poderia  ser  apresentado,  torna‐se  necessário  “limitar”  o  número  de registos  que  cada  página  apresenta,  para  que  a  gestão  e  mesmo  a  visualização  se tornem confortáveis para o administrador. 

Quando se pretende paginar um elevado número de registos de uma base de dados, é necessário calcular o número total de registos na base de dados, fixar o total de registos que  vão  ser mostrados por página e depois  “dividir” o número de  registos por  várias páginas, mantendo‐as  sempre  com  o mesmo  aspeto  gráfico,  além  de  ser  necessário percorrer  os  registos  por  blocos  que  vão  sendo  exibidos  em  função  do  número  de página selecionado. 

As operações referidas são realizadas por etapas, uma vez que o cálculo do número total de  registos  está  ligado  a  operações  relacionadas  com  a  base  de  dados,  enquanto  a visualização dos resultados por página está relacionada com a tabela que os apresenta. Essas etapas são  realizadas em sequência e, com vista a ser mais  fácil compreender o sistema de paginação que vai ser desenvolvido, apresenta‐se de seguida um resumo das mesmas: 

1) Verificar o número de página inicial (por predefinição, deve ser a página 1). 2) Percorrer a base de dados, obtendo um número definido de registos de cada vez 3) Apresentar os registos obtido. 4) Adicionar uma página ao valor da página inicial e repetir novamente os passos 2 e 3. 5) Mostrar hiperligações para as páginas  seguintes e anteriores, à medida que estas 

vão sendo apresentadas. 

Para verificar o número de página atual, pode utilizar‐se a variável $_GET['pagina '], que vai confirmar se já existe um número de página (caso não seja a página inicial). No caso de  ser a primeira página que está a  ser exibida por  solicitação de outro  ficheiro, esta variável está vazia, pelo que lhe é atribuído o valor “1”; nas seguintes, este valor é alterado em função da página que se está a visualizar. 

Quanto  ao  segundo  passo,  define‐se  o  total  de  registos  a  serem  obtidos  através  da aplicação  da  instrução  LIMIT()  na  consulta  SQL,  o  que  permite  informar  a  base  de dados sobre o número de registos que queremos que esta devolva. Esta instrução tem a sintaxe LIMIT (A, B), em que a letra A diz respeito ao primeiro registo onde deve ser iniciada a contagem e a letra B se refere ao total de registos mostrados de cada vez.  

Page 9: Desenvolvimento de Aplicações PHP

8

Gráficos e relatórios

  FCA – Editora de Informática    

  247 

8.3. Desenhos com PHP

A  linguagem PHP permite a obtenção de  figuras simples  (por exemplo, quadrados) ou mesmo  a  construção  de  gráficos  do  mesmo  género  dos  que  são  apresentados  nas comuns folhas de cálculo.  

Contudo, o termo “gráfico” não se limita apenas a gráficos, mas sim a todo um conjunto de  figuras  (desenhos)  que  se  podem  produzir,  uma  vez  que  as mesmas  bibliotecas  e classes  podem  até  ser  utilizadas  para  produzirem  códigos  de  barras.  No  entanto,  e apenas por uma questão de coerência, designar‐se‐á por “desenhos” todos os comuns desenhos,  como  quadrados,  círculos,  circunferências  ou  retângulos,  enquanto  a designação  “gráficos”  será  atribuída  a  todos  os  gráficos  idênticos  aos  obtidos  num programa de folha de cálculo.  

NotaConforme o browser utilizado, a  localização dos desenhos/gráficos construídos com  a  biblioteca  Graphics Draw  pode  variar,  tendo‐se  detetado  que podiam  aparecer  localizados  à  esquerda  sobre  um  fundo  branco  (Internet Explorer) ou no centro da página sobre um fundo negro (Mozilla Firefox). 

8.3.1. Biblioteca Graphics Draw – instalação

Para  se poderem  construir desenhos ou  gráficos em  linguagem PHP, é necessário  ter instalada  uma  biblioteca  de  funções  que  dá  pelo  nome  de  Graphics Draw,  cuja confirmação de  instalação é necessária antes de  se  iniciar o desenvolvimento de uma aplicação que dela necessite.  

Se  esta  biblioteca  estiver  presente  e  a  funcionar  corretamente,  poderá  experimentar executar o seguinte script, que permitirá visualizar no monitor um pequeno  retângulo verde: 

<?php

header("Content-type: image/jpeg");

$imagem = imageCreate (300, 100);

$cor_imagem = imageColorAllocate ($imagem, 40, 170, 40);

imageJPEG ($imagem);

imageDestroy ($imagem);

?>

Page 10: Desenvolvimento de Aplicações PHP

8

Desenvolvimento de Aplicações em PHP

    FCA – Editora de Informática 

274   

 

A Figura 8.14 mostra o resultado deste código de barras que é gerado dinamicamente, em função do texto inserido na penúltima instrução: 

$Barcode->draw($myPicture,"Código de barras a funcionar!",50,50,$Settings);

Código de barras produzido com a classe pChart FIGURA 8.14 – 

Caso se pretenda, em vez de se inserir um texto estático, pode fazer‐se a ligação à base de dados e obter valores que podem gerar códigos de barras, por exemplo, em função do número de  série de um  artigo ou do  tipo de produto,  tal  como  acontece  com os códigos de barras que se encontram em produtos alimentares.  

Uma  vez  que  a  classe  utiliza  a  normalização  EAN128  ou  EAN39,  os  códigos  gerados podem  ser  lidos  por  qualquer  leitor  comum  de  códigos  de  barras.  A  classe  pChart apenas  disponibiliza  este  tipo  de  normalização,  pese  embora  também  pudessem  ser gerados gráficos do tipo QRCode. 

8.5. Criação de gráficos dinâmicos com bases de dados

Para criar um gráfico dinâmico, pode utilizar‐se qualquer uma das classes referidas até aqui, mas o facto de se poder utilizar a classe pChart torna muito mais simples e eficaz a criação dos gráficos, pelo que se irá desenvolver todo o trabalho utilizando esta classe. 

Os  scripts que  foram desenvolvidos para  a  criação de  gráficos estáticos poderiam  ser adaptados e utilizados para a criação dos gráficos dinâmicos com bases de dados, uma vez  que  a  principal  diferença  entre  este  tipo  de  gráficos  e  os  apresentados  antes (estáticos) está relacionada com a forma como é criado o array para serem exibidos os valores no gráfico. 

Page 11: Desenvolvimento de Aplicações PHP

10

Desenvolvimento de Aplicações em PHP

    FCA – Editora de Informática 

384   

 

10.6. Upload de ficheiros

As  operações  de  envio  de  ficheiros  de  imagem  para  o  álbum  apenas  podem  ser realizadas por utilizadores registados, embora todos os que acedam à aplicação possam ver as imagens que já se encontram disponíveis. O envio de ficheiros de imagem obriga à criação de vários scripts, tal como foi exemplificado no Capítulo 9. 

10.6.1. Selecionar ficheiros para upload

O envio de ficheiros de imagem (ou outro tipo) assenta num formulário que disponibiliza um  campo de procura desses  ficheiros e, de  seguida,  solicita um  script que verifica o estado do ficheiro e o copia para uma pasta do servidor, registando, simultaneamente, diversos itens na base de dados, como a identificação do utilizador ou a categoria a que pertence.  

Poderia desenvolver‐se o formulário que se apresenta na Figura 10.10. 

 

Formulário para envio de imagensFIGURA 10.10 –   

No  caso  do  álbum  de  fotos,  cria‐se  o  ficheiro  “envio_imagem.php”,  no  qual  se encontra um script que elabora o formulário apresentado na figura e que permite inserir dados; este formulário tem de conter a  indicação de que vai ser submetido um tipo de dados  diferente  do  tipo  texto,  utilizando‐se  para  o  efeito  a  expressão enctype=”multipart/form-data”.  

Esta  informação permite que os dados  sejam  reconhecidos como  formato de dados e não como texto, mas é também necessário especificar (no campo de submissão) que a hiperligação que aparece diz respeito a um ficheiro, o que é feito através da expressão <input name="…" type="file"/>.