Buscar

Fundamentos de Prog - Desenvolvimento de aplicações UAB - para WEB

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 82 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 82 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 82 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

EDUCAÇÃO A DISTÂNCIA
PONTA GROSSA / PARANÁ
2019
LICENCIATURA EM
André Caruso
DESENVOLVIMENTO DE APLICAÇÕES PARA WEB
ComputaçãoComputação
UEPG
UNIVERSIDADE ESTADUAL DE PONTA GROSSA
Núcleo de Tecnologia e Educação Aberta e a Distância - NUTEAD
Av. Gal. Carlos Cavalcanti, 4748 - CEP 84030-900 - Ponta Grossa - PR
Tel.: (42) 3220-3163
www.nutead.org
2019
Pró-Reitoria de Assuntos Administrativos
Michel Jorge Samaha - Pró-Reitor
Pró-Reitoria de Graduação
Lígia de Paula Couto - Pró-Reitor
Núcleo de Tecnologia e Educação Aberta e a Distância
Carlos Willians Jaques Morais - Coordenador Geral
Kelly Cristina Ducatti da Silva - Coordenadora Pedagógica
Coordenadora de Convênios NUTEAD
Assessora Pedagógica NUTEAD 
Cristiane Aparecida Woytichoski 
Sistema Universidade Aberta do Brasil
Carlos Willians Jaques Morais - Coordenador Geral
Kelly Cristina Ducatti da Silva - Coordenadora Adjunta
Marcelo Ferrasa - Coordenador de Curso
Projeto Gráfico
Eloise Guenther
Colaboradores de Publicação
Denise Galdino - Revisão
Eloise Guenther - Diagramação 
Todos direitos reservados ao Ministério da Educação
Sistema Universidade Aberta do Brasil
Direitos autorais cedidos pela IF SUL-RIO 
GRANDENSE para uso na Graduação 
em Computação UEPG/UAB, disciplina 
Fundamentos de Programação WEB.
CRÉDITOS
Universidade Estadual de Ponta Grossa
Miguel Sanches Neto
Reitor
Everson Augusto Krum
Vice - Reitor
Os materiais produzidos para os cursos ofertados pelo NUTEAD/UEPG para o Sistema Universidade Aberta 
do Brasil - UAB são licenciados nos termos da Licença Creative Commons - Atribuição - Não Comercial- 
Compartilhada, podendo a obra ser remixada, adaptada e servir para criação de obras derivadas, desde que 
com fins não comerciais, que seja atribuído crédito ao autor e que as obras derivadas sejam licenciadas sob 
a mesma licença.
APRESENTAÇÃO INSTITUCIONAL
A Universidade Estadual de Ponta Grossa é uma instituição de ensino 
superior estadual, democrática, pública e gratuita, que tem por missão 
responder aos desafios contemporâneos, articulando o global com o local, 
a qualidade científica e tecnológica com a qualidade social e cumprindo, 
assim, o seu compromisso com a produção e difusão do conhecimento, 
com a educação dos cidadãos e com o progresso da coletividade. 
No contexto do ensino superior brasileiro, a UEPG se destaca tanto 
nas atividades de ensino, como na pesquisa e na extensão. Seus cursos 
de graduação presenciais primam pela qualidade, como comprovam os 
resultados do ENADE, exame nacional que avalia o desempenho dos 
acadêmicos e a situa entre as melhores instituições do país. 
A trajetória de sucesso, iniciada há mais de 40 anos, permitiu que 
a UEPG se aventurasse também na educação a distância, modalidade 
implantada na instituição no ano de 2000 e que, crescendo rapidamente, 
vem conquistando uma posição de destaque no cenário nacional. 
Atualmente, a UEPG é parceira do MEC/CAPES/FNDE na execução 
dos programas de Pró-Licenciatura e do Sistema Universidade Aberta do 
Brasil e atua em 40 polos de apoio presencial, ofertando, diversos cursos 
de graduação, extensão e pós-graduação a distância nos estados do 
Paraná, Santa Cantarina e São Paulo. 
Desse modo, a UEPG se coloca numa posição de vanguarda, 
assumindo uma proposta educacional democratizante e qualitativamente 
diferenciada e se afirmando definitivamente no domínio e disseminação 
das tecnologias da informação e da comunicação.
Os nossos cursos e programas a distância apresentam a mesma 
carga horária e o mesmo currículo dos cursos presenciais, mas se utilizam 
de metodologias, mídias e materiais próprios da EaD que, além de serem 
mais flexíveis e facilitarem o aprendizado, permitem constante interação 
entre alunos, tutores, professores e coordenação.
Esperamos que você aproveite todos os recursos que oferecemos 
para promover a sua aprendizagem e que tenha muito sucesso no curso 
que está realizando.
A Coordenação 
INSTITUTO FEDERAL SUL-RIO-GRANDENSE
UNIVERSIDADE ABERTA DO BRASIL
MÓDULO 3
André Caruso
DESENVOLVIMENTO DE
APLICAÇÕES PARA WEB
Ministério da
Educação
CURSO DE TECNOLOGIA EM SISTEMAS PARA INTERNET
Modalidade a Distância
 
UNIVERSIDADE ABERTA DO BRASIL
INSTITUTO FEDERAL SUL-RIO-GRANDENSE - CAMPUS PELOTAS
CURSO DE TECNOLOGIA EM SISTEMAS PARA INTERNET
Modalidade a Distância
PRESIDÊNCIA DA REPÚBLICA
Dilma Rousseff
PRESIDENTE DA REPÚBLICA FEDERATIVA DO BRASIL
MINISTÉRIO DA EDUCAÇÃO
Fernando Haddad
MINISTRO DO ESTADO DA EDUCAÇÃO
Luiz Cláudio Costa 
SECRETÁRIO DE EDUCAÇÃO SUPERIOR - SESU
Eliezer Moreira Pacheco
SECRETÁRIO DA EDUCAÇÃO PROFISSIONAL E TECNOLÓGICA
Luís Fernando Massonetto 
SECRETÁRIO DA EDUCAÇÃO A DISTÂNCIA – SEED
Jorge Almeida Guimarães
PRESIDENTE DA COORDENAÇÃO DE APERFEIÇOAMENTO DE PESSOAL DE 
NÍVEL SUPERIOR - CAPES 
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E 
TECNOLOGIA SUL-RIO-GRANDENSE [IFSUL]
Antônio Carlos Barum Brod
REITOR
Daniel Espírito Santo Garcia
PRÓ-REITOR DE ADMINISTRAÇÃO E DE PLANEJAMENTO
Janete Otte
PRÓ-REITORA DE DESENVOLVIMENTO INSTITUCIONAL
Odeli Zanchet
PRÓ-REITOR DE ENSINO
Lúcio Almeida Hecktheuer
PRÓ-REITOR DE PESQUISA, INOVAÇÃO E PÓS-GRADUAÇÃO
Renato Louzada Meireles
PRÓ-REITOR DE EXTENSÃO
IF SUL-RIO-GRANDENSE
CAMPUS PELOTAS
José Carlos Pereira Nogueira
DIRETOR-GERAL DO CAMPUS PELOTAS
Clóris Maria Freire Dorow 
DIRETORA DE ENSINO
João Róger de Souza Sastre 
DIRETOR DE ADMINISTRAÇÃO E PLANEJAMENTO
Rafael Blank Leitzke 
DIRETOR DE PESQUISA E EXTENSÃO
Roger Luiz Albernaz de Araújo 
CHEFE DO DEPARTAMENTO DE ENSINO SUPERIOR
IF SUL-RIO-GRANDENSE
DEPARTAMENTO DE EDUCAÇÃO A DISTÂNCIA
Luis Otoni Meireles Ribeiro
CHEFE DO DEPARTAMENTO DE EDUCAÇÃO A DISTÂNCIA
Daniel Grill Lacerda
COORDENADOR DA UNIVERSIDADE ABERTA DO BRASIL – UAB/IFSUL
Marla Cristina da Silva Sopeña
COORDENADORA ADJUNTA DA UNIVERSIDADE ABERTA DO BRASIL – UAB/IFSUL
Cinara Ourique do Nascimento
COORDENADORA DA ESCOLA TÉCNICA ABERTA DO BRASIL – E-TEC/IFSUL
Ricardo Lemos Sainz
COORDENADOR ADJUNTO DA ESCOLA TÉCNICA ABERTA DO BRASIL – E-TEC/IFSUL
IF SUL-RIO-GRANDENSE
UNIVERSIDADE ABERTA DO BRASIL
Daniel Grill Lacerda
COORDENADOR DA UNIVERSIDADE ABERTA DO BRASIL – UAB/IFSUL
Marla Cristina da Silva Sopeña
COORDENADORA ADJUNTA DA UNIVERSIDADE ABERTA DO BRASIL – UAB/ IFSUL
Mauro Hallal dos Anjos
GESTOR DE PRODUÇÃO DE MATERIAL DIDÁTICO
CURSO DE TECNOLOGIA EM SISTEMAS PARA INTERNET 
Modalidade a Distância
Daniel Grill Lacerda
COORDENADOR DO CURSO SUPERIOR DE TECNOLOGIA EM SISTEMAS PARA INTERNET – 
TSIAD
Beatriz Helena Zanotta Nunes
SUPERVISORA PEDAGÓGICA
Suzana Grala Tust
REVISORA LINGUÍSTICA
Vera Maria Machado Damé
COORDENADORA DE TUTORIA DO TSIAD
UNIVERSIDADE ABERTA DO BRASIL
INSTITUTO FEDERAL SUL-RIO-GRANDENSE - CAMPUS PELOTAS
CURSO DE TECNOLOGIA EM SISTEMAS PARA INTERNET
Modalidade a Distância
 
EQUIPE DE PRODUÇÃO DE MATERIAL DIDÁTICO – UAB/IFSUL
Lisiane Corrêa Gomes Silveira
GESTORA DA EQUIPE DE DESIGN 
Alessandro Cruz Wrague
Aline de Almeida Tessmer
Andressa Silva Nasiloski
Denise Zarnottz Knaback
Felipe Rommel
Helena Guimarães de Faria
Helena Rodrigues dos Santos
Igor da Silva Amaral
Lucas Quaresma Lopes
Luisa Mendes Machado
Marco Lucas dos Anjos
Morgana Ávila dos Santos
Taís Lopes Barbosa
Talita Mesquita Barbosa
EQUIPE DE DESIGN
Catiúcia Klug Schneider
GESTORA DE PRODUÇÃO DE VÍDEO
Gladimir Pinto da Silva 
PRODUTOR DE ÁUDIO E VÍDEO
Jeferson de Oliveira Oliveira
AUXILIAR DE EDIÇÃO DE VÍDEO E PROGRAMADOR EM FLASH
João Eliézer Ribeiro Schaun
GESTOR DO AMBIENTE VIRTUAL DE APRENDIZAGEM
Giovani Portelinha Maia
GESTOR DE MANUTENÇÃO E SISTEMA DA INFORMAÇÃO
Acauan Merseburger Picanço
Anderson Weige Dias
Bruna Gonçalves Ribeiro
Carlo Camani Schneider
Diego Barcellos Rocha
Efrain Becker Bartz
Francine Neuschrank
Gabriel Duarte
Mateus Lorenzato Braga
Neimar Mendes Lima
Paula Cruz Guttier
Piter Oliveira Vergara
Vinícius Maciel
EQUIPE DE PROGRAMAÇÃO PARA WEB
1
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nden
se
Desenvolvimento de Aplicações para WEB | Unidade A
 “A orientação a objetos, também conhecida como Programação Orientada a Objetos (POO) ou 
ainda em inglês Object-Oriented Programming (OOP) é um paradigma de análise, projeto e pro-
gramação de sistemas de software baseado na composição e interação entre diversas unidades de 
software chamadas de objetos.” 
“Na programação orientada a objetos, implementa-se um conjunto de classes que definem os 
objetos presentes no sistema de software. Cada classe determina o comportamento (definido nos 
métodos) e estados possíveis (atributos) de seus objetos, assim como o relacionamento com outros 
objetos.”
Disponível em: http://pt.wikipedia.org/wiki/Orienta%C3%A7%C3%A3o_a_objetos
1. Classes e objetos
Uma classe nada mais é do que uma espécie de tipo de dados definido pelo usuário. Ela é o molde com o qual 
faremos novos objetos (instâncias desta classe).
A grande diferença entre uma classe e um tipo definido pelo usuário tradicional, é que na POO uma classe além 
do modelo de dados a serem armazenados, conterá a descrição das funcionalidades que podem ser realizadas 
pelos objetos da classe. Em outras palavras a classe é um tipo de dados que já vem com algumas funções em-
butidas!
Imagine agora uma classe chamada calculadora. Ela poderia conter dados sobre os operandos (do tipo Real) e o 
do resultado (também do tipo Real). Seus métodos (funcionalidades) poderiam ser: 
Atributos (dados da classe) Métodos (funções da classe)
$primeiroOperando
$segundoOperando
$resultado
lerPrimeiroOperando($x);
lerSegundoOperando($y);
soma();
subtrai();
divide();
multiplica();
pegaResultado();
 
2. Criando nossa primeira classe
Toda definição de classe começa com a palavra-chave class, seguido por um nome da classe, que pode ser qual-
quer nome que não seja uma palavra reservada no PHP, seguido por um par de chaves, que contém a definição 
dos atributos e métodos da classe. 
1 <?php
Uma breve introdUção à 
Programação orientada a 
objetos
AUnidade
2
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade A
2 class°Calculadora
3 {
4 °°°//...implementação da classe
5 }
6 ?>
Normalmente uma classe terá um método especial chamado de construtor que é a função que será executada 
sempre que um novo objeto desta classe for instanciado. O construtor é usado para inicializar os atributos (vari-
áveis internas que conterão os dados do objeto).
Em PHP (5.x em diante) o construtor é definido com a seguinte sintaxe:
1 <?php
2 function°__construct() {
3 echo°“Este é o construtor da minha classe!\n”;
4 }
5 ?>
Assim, teríamos como primeiro exemplo de código fonte usando POO:
1 <?php
2 class Calculadora 
3 {
4 °°°function°__construct()°{
5 echo°“Este é o construtor da minha classe!\n”;
6 }
7 }
8 ?>
E é claro para que possamos ver o funcionamento, precisaremos instanciar a classe (linha 8):
1 <?php 
2 class Calculadora 
3 {
4 function __construct() {
5 echo “Este é o construtor da minha classe!\n”;
6 }
3
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade A
7 }
8 $calc = new Calculadora ( );
9 ?>
Arquivo: u1_oop_calculadora1.php
O resultado será:
3. mais sobre atributos e métodos de uma classe
No exemplo anterior, nossa classe é instanciada em um objeto chamado $calc utilizando a palavra reservada 
new(), na linha 8.
Como você pode notar, nossa classe não nos permite instanciar objetos lá muito úteis, uma vez que tudo que a 
classe Calculadora() modela é um método construtor que escreve uma mensagem na tela.
Para adicionarmos alguma utilidade a nossa classe, precisaremos que ela modele os atributos (dados) e métodos 
(funções).
1 <?php 
2 {
3 public $primeiroOperando;
4 public $segundoOperando;
5 public $resultado;
6 functon __construct( ) {
7 //aqui podem ser feitas inicializações no objeto 
8 $this->primeiroOperando =0;
9 $this->segundoOperando =0;
10 
4
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade A
11 } 
12 //método que lê o primeiro operando
13 public function lePrimeiroOperando($p){
14 $this->primeiroOperando = $p;
15 
16 }
17 //método que lê o segundo operando
18 public function leSegundoOperando($p){
19 $this->segundoOperando = $p;
20 
21 }
22 //método que realiza soma
23 public function soma( ){
24 $this->resultado =$this->primeiroOperando + $this->segundoOperando;
25 }
26 //método que pega o resultado 
27 public function pegaResultado( ) {
28 return($this->resultado);
29 }
30 }//fim da definição da classe
31 //programa principal
32 $calc = new Calculadora(); 
33 $calc->lePrimeiro0perando(2);
34 $calc->leSegundo0perando(3); 
35 $calc->soma();
36 echo ($calc->pegaResultado());
37 ?>
Arquivo: u1_oop_calculadora2.php
5
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade A
No exemplo acima, da linha 3 à linha 5 adicionamos três atributos:
$primeiroOperando• 
$segundoOperando• 
$resultado• 
 Na linha 7, note que o construtor apenas inicializa os atributos com zero (isso não é estritamente necessário em 
PHP):
Nas linhas 8 e 9, temos uma novidade: a “pseudo variável” $this, que é uma variável reservada do PHP.
No exemplo usamos $this para sinalizar ao PHP que nos referimos aos atributos definidos na classe (linhas 4 a 
6).
Nossa classe agora implementa quatro métodos: lePrimeiroOperando(), leSegundoOperando(), soma() e pega-
Resultado(). 
3.1 os métodos lePrimeirooperando() e lesegundooperando()
Esses dois métodos apenas copiam o parâmetro que recebem para os respectivos atributos da classe.
A vantagem de fazer é o fato de que podemos “blindar” nossa classe para que ela não aceite receber valores que 
provocariam erro. Veremos isso mais adiante.
3.2 o método soma()
Este método pega os valores dos atributos $primeiroOperando e $segundoOperando, soma e guarda o resultado 
da soma em $resultado.
3.3 o método retornaresultado()
Este método retorna valor de $resultado.
o programa principal
No exemplo, o programa principal é composto apenas pelas linhas:
32: instanciação de um novo objeto do tipo Calculadora;• 
33: chamada ao método lePrimeiroOperando, passando o valor 2 como parâmetro;• 
34: chamada ao método SegundoOperando, passando o valor 3 como parâmetro;• 
35: chamada ao método soma();• 
36: imprime na tela o retorno do método retornaResultado().• 
4. visibilidade
A POO nos dará maior controle sobre o que programamos, pois permite que separemos melhor os dados do 
escopo interno de cada classe com os dados do programa principal.
Para isso podemos usar algumas palavras reservadas de “visibilidade”, que permitem que os atributos e métodos 
de nossas classes possam ser vistos e executados por outras classes ou não.
As palavras reservadas que definem os níveis de visibilidade são:
Palavra Define que com o atributo/método:
Public
pode ser acessado por qualquer classe e pelo 
programa principal diretamente.
6
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade A
Protected
pode ser acessado apenas de dentro da classe e por 
suas herdeiras (o conceito de herança será abordado 
mais profundamente em disciplina subsequente 
deste curso).
Private
pode ser pode ser acessado apenas de dentro da 
classe.
Vamos alterar o exemplo anterior para testar os modificadores de visibilidade:
31 //programa principal
32 $calc = new Calculadora();
33 $calc->lePrimeiroOperando(2);34 $calc->leSegundoOperando (3);
35 $calc->soma();
36 echo ($calc->primeiroOperando);
37 echo (“<br/>”);
38 echo ($calc->segundoOperando);
39 echo (“<br/>”);
40 echo ($calc->resultado);
41 ?>
Aqui apenas adicionamos modificamos a linha 36 e adicionamos as demais até a 41.
 O resultado da execução será:
 
Isso mostra que $primeiroOperando, $segundoOperando e $resultado apesar de serem atributos da classe Cal-
culadora, são acessíveis de fora da classe no programa principal, pois foram definidos com o modificador public 
(linhas 4 a 6).
Agora iremos alterar o código, mudando o modificador public de $primeiroOperando para private.
7
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade A
O resultado será:
 Note que agora $primeiroOperando não pode ser acessado pelo programa principal diretamente, pois foi defi-
nido como private (privativo da classe), resultando dessa forma em um erro.
O programa fonte alterado com estas modificações está no arquivo: u1_oop_calculadora4.php .
5. resumo rápido sobre ooP
Na OOP, lidamos com classes e objetos. Classes são tipos de dados compostos que contêm os moldes para definirmos • 
um objeto;
Um objeto nada mais que uma espécie de “super variável” capaz de conter outras variáveis (atributos) e também • 
funções (métodos);
Um objeto é criado (instanciado) a partir de uma classe com a palavra reservada new();• 
Uma classe define atributos (variáveis/dados) e métodos (funções) de um objeto;• 
Para definirmos uma nova classe usamos a palavra reservada class;• 
Normalmente uma classe deve ter um método especial que é chamado construtor e que será automaticamente execu-• 
tado no momento em que criamos (instanciamos) um novo objeto dessa classe;
Para definirmos o construtor de uma classe, devemos usar o identificador reservado __construct()• 
Para referenciarmos os atributos de nosso objeto, podemos usar o identificador reservado $this, seguido do sinal -> ;• 
Os modificadores de visibilidade são: public, protected e private;• 
Devemos evitar o uso de public sempre que possível, restringindo o acesso a atributos e métodos apenas às classes • 
que realmente devem enxergá-los.
6. exercícios
Implemente o método multiplica();1. 
Implemente o método subtrai();2. 
Implemente o método divide(). Cuide para que em caso do $segundoOperando ser igual a Zero, o método retorne o 3. 
valor 1. Caso contrário, o método deve retornar 0.
8
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade A
Nesta sessão, vamos conhecer um pouco mais a respeito das novas tendências no que diz respeito à evolução da 
interatividade que faz as páginas web comportarem-se de forma mais parecida com os aplicativos desktop (para 
Windows por exemplo). 
1. Web 2.0
“Web 2.0 é um termo criado em 2004 pela empresa estadunidense O’Reilly Media[1] para desig-
nar uma segunda geração de comunidades e serviços baseados na plataforma Web, como wikis, 
aplicações baseadas em folksonomia e redes sociais. Embora o termo tenha uma conotação de 
uma nova versão para a Web, ele não se refere à atualização nas suas especificações técnicas, mas 
a uma mudança na forma como ela é encarada por usuários e desenvolvedores.
A Web 2.0 propõe uma experiência de uso semelhante à de aplicativos para desktop, frequente-
mente fazendo uso de uma combinação de tecnologias surgidas no final da década de 1990, que 
incluem Web services APIs (1998), AJAX (1998), Web syndication (1997), entre outras. Estas tec-
nologias aumentaram a velocidade e a facilidade de uso de aplicativos Web, sendo responsáveis 
por um aumento significativo no conteúdo (colaborativo ou meramente expositivo) existente na 
Internet.”
Disponível em: http://pt.wikipedia.org/wiki/Web_2.0. Acesso em: 21 abr. 2009 
1.1 Programando “a La” Web 2.0
Em termos de interface e de experiência do usuário, os aplicativos Web 2.0 devem ter interface e tempo de 
resposta que deem ao usuário a impressão de que está usando um aplicativo desktop tradicional (um editor de 
textos online deveria comportar-se de forma similar ao Word, por exemplo).
O nome Web 2.0 refere-se à filosofia de implementação e uso dos web sites, e não à uma nova tecnologia pro-
priamente dita, tendo sido usadas soluções baseadas nas tecnologias já existentes para a melhoria da interface 
dos aplicativos. Dentre essas soluções, destacamos o AJAX (Asynchronous Javascript And XML) que é uma me-
todologia de trabalho (e não uma nova linguagem para computadores) que se baseia em Javascript, CSS e XML 
para criar um conjunto de ferramentas que permitem que a experiência do usuário em um aplicativo web seja 
muito parecida com o uso de um aplicativo desktop tradicional.
1.2 o objeto XmLHttprequest
“XMLHttpRequest é um objeto Javascript que torna possível a comunicação assíncrona com o ser-
vidor, sem a necessidade de recarregar a página por completo.”
Disponível em: http://pt.wikipedia.org/wiki/XMLHttpRequest. Acesso em 21 abr. 2009
Através do objeto Javascript XMLHttpRequest é possível enviarmos dados por GET ou POST para o servidor Web 
e receber uma resposta a ser exibida na página web sem que esta precise ser recarregada no navegador. 
A
Web 2.0
Unidade
9
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade A
1.3 Um pouco mais sobre ajaX
O termo AJAX foi criado por GARRETT (2005) para abreviar “Asynchronous JavaScript + XML” .
Segundo REIS (2005), comparando as aplicações Desktop com as aplicações Web, constata-se que as Desktop 
dão ao utilizador uma maior riqueza de utilização e melhores tempos de resposta que as aplicações Web tradi-
cionais. 
A mesma simplicidade que fez proliferar as páginas Web criou um abismo entre a experiência de utilização que 
se consegue oferecer numa aplicação Desktop e uma página Web standard. No entanto essa distância está cada 
vez mais curta com a chegada de novas tecnologias e novas técnicas, entre elas o AJAX.
Segundo GARRET (2005):
‘O AJAX não é uma tecnologia. São na realidade várias tecnologias, cada uma pro-
gredindo de forma independente, e que se juntaram de forma a poder explorar formas de 
melhorar a interação com os utilizadores em aplicações Web.”
Assim podemos dizer que AJAX é apenas um estilo de design de aplicações, que junta todas as características 
dos Web Browsers atuais de forma a produzir aplicações que se assemelham menos a Web e mais a Desktop. 
O AJAX utiliza as seguintes tecnologias: 
Apresentação baseada em padrões, utilizando XHTML e CSS;1. 
Interação e apresentação dinâmica utilizando o Documento Object Model (DOM);2. 
Formato padrão para troca e manipulação de dados – XML;3. 
Comunicação assíncrona com o servidor utilizando XMLHttpRequest;4. 
Utiliza Javascript que interliga todas estas tecnologias.5. 
1.4 modelo clássico de aplicações Web X aplicações com ajaX
Observe que enquanto no site www.gmail.com o usuário navega, cria emails, anexa arquivos não há recarga total 
da página. Já no site g1.globo.com cada notícia que for aberta provocará a recarga de todo o portal (menus, links 
etc).
1.5 Usando o Framework XajaX
Uma maneira fácil de adentrarmos o mundo do Ajax é utilizarmos o Framework XAJAX que facilitará muito nossa 
primeira jornada nos domínios da Web 2.0.
Vale lembrar que este framework é open source e pode ser usado e modificado livremente, desde que observa-
dos os termos de sua licença GPL.
10
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade A
1.5.1 Obtendo o e instalando o XAJAX
O XAJAX pode ser baixado no site do projeto:http://xajaxproject.org/en/download/
Observe que existem três versões disponíveis: compiled, minimal e standard. Para efeito de estudo, iremos 
utilizar a versão standard que contém exemplos de uso além das bibliotecas padrão do XAJAX. Veja a Figura 2. 
O arquivo compactado em formato ZIP tem apenas 236Kb e deve ser descompactado em uma pasta dentro do 
nosso projeto de trabalho desta forma:
 
 No caso da Figura 2, pasta xajax foi criada no caminho: C:\apache2triad\htdocs\web2\xajax , em que a pasta 
web2 será a raiz de nosso projeto. 
1.5.2 Um primeiro exemplo em XAJAX
Para começarmos, vamos criar um arquivo de teste chamado exemplo01.php (na pasta raiz do projeto).
Para fins de organização de nosso projeto, também na pasta raiz, criaremos um arquivo chamado funções.php 
que conterá as funções que utilizaremos em nosso teste.
11
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade A
Veja Figura 3. Nosso projeto ficará da seguinte forma:
 
1.5.2.1 O arquivo exemplo01.php
1 <?php
2 //bibliotecas XAJAX
3 require “./xajax/xajax_core/xajax.inc.php”;
4 //funcoes definidas pelo usuário
5 require “funcoes.php”;
6 ?>
7 <head>
8 <meta http-eguiv=”Content-Type” content=”text/html; charset=UTF-8” />
9 <titlex/title> 
10 <?php
11 //gera os javascripts necessários para o funcionamento do XÃJÃX 
12 //printJavascript recebe como parâmetro o caminho da bliblioteca XA-
JAX 
13 $ajax->printJavascript(‘./xajax/’);
14 ?>
15 </head>
16 <body>
17 <form method=”post” action=””>
18 <table cellspacing=”0” cellpadding=”4”>
12
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade A
19 <thead>
20 </thead>
21 <tbody>
22 <tr>
23 <td colspan=”2”><label id=”lbmensagem”></labelx></td>
24 </tr>
25 <tr>
26 <td>nome</td> 
27 <td>
28 <input name=”nome” type=”text” id=”nome” size=”50” maxlength=”100” 
onBlur=”xajax_valida(this.value) ;”></td> 
29 </tr>
30 <tr> 
31 <td>fone</td> 
32 <td>
33 <input name=”fone” type=”text” id=”fone” size=”20” maxlength=”100”></
td>
34 </tr>
35 <tr> 
36 <tdvalign=”top”>&nbsp;</td>
37 <td><input type=”submit” name=”btenviar” id=”btenviar” value=”Enviar”></
td> 
38 </tr>
39 </tbody> 
40 </table>
41 </form> 
42 </body>
13
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade A
Vamos analisar as linhas mais importantes do nosso programa exemplo01.php:
Linha Fonte O que faz?
3
require “./xajax/xajax_core/
xajax.inc.php”;
Requer a inclusão o arquivo 
fonte xajax.inc.php (que contém 
as bibliotecas necessárias para 
utilizarmos o XAJAX
5
require “funcoes.php”; Requer a inclusão o arquivo fonte 
funcoes.php (que contém as 
funções definadas pelo usuário)
8
<meta http-equiv=”Content-
Type” content=”text/html; 
charset=UTF-8” />
Define que a codificação a 
ser utilizada na página será 
UTF-8. Veremos mais sobre isso 
posteriormente.
13
$ajax->printJavascript(‘./xajax/’); Cria os scripts necessários para 
que o XAJAX funcione. Para esta 
linha funcionar a inclusão da linha 
3 obrigatoriamente tem de ter 
sido feita antes.
23
<td colspan=”2”><label 
id=”lbmensagem”></label></td>
Aqui definimos uma marcação 
HTML <label> que nada mais é do 
que um lugar onde colocaremos 
o texto da mensagem de erro/
sucesso.
28
<input name=”nome” 
type=”text” id=”nome” size=”50” 
maxlength=”100” onBlur=”xajax_
valida(this.value);”></td>
Caixa de texto onde deverá ser 
digitado o nome. Note que foi 
configurado o envento Javascript 
“onBlur”, ou seja, quando o 
usuário sair do campo será 
disparada a chamada à função 
xajax_valida(), passando como 
parâmetro o valor do próprio 
campo nome (this.value).
1.5.2.2 Arquivo funcoes.php
1 <?php
2 $ajax = new xajax();
3 
4 // Registra as funções no javascript 
5 $ajax->registerFunction(“valida”);
6 
7 //FUNÇÕES JAVASCRIPT REGISTRADAS PELO XAJAX
8 function valida($valor}{
14
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade A
9 $res=””;
10 $valor = trim($valor);
11 
12 $objResponse = new xajaxResponse(‘UTF-8’);
13 
14 if (strlen($valor) <3) {
15 $res = “Por favor, preencha o campo Nome.”;
16 }
17 else {
18 $res = “nome OK”; 
19 }
20 
21 $res = utf8_encoder($res);
22 $objResponse->assign(‘lbmensagem’, ‘innerHTHL’, $res);
23
24 
25 // Atribui a variável $res ao label resultado
26 
27 
28 // Retorna a resposta de XML gerada pelo
29 // objeto do xajaxResponse 
30 return $objResponse;
31 }
32 
33 // Manda o ajax processar os pedidos acima
34 $ajax->processReguest();
35 ?>
15
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade A
Vamos analisar as linhas mais importantes do nosso programa funcoes.php:
Linha Fonte O que faz?
2
$ajax = new xajax(); Cria o objeto XAJAX que será 
usado na linha 13 do programa 
exemplo01.php (vide tabela 
anterior)
5
$ajax->registerFunction(“valida”); Registra (para que possa ser 
usada) a função valida(), definida 
na linha 8 deste mesmo programa.
8
function valida($valor){ Início da definição da função 
valida(). Esta função será chamada 
via Javascript na linha 28 do 
programa anterior.
12
$objResponse = new 
xajaxResponse(‘UTF-8’);
Cria um objeto de resposta XAJAX. 
Na prática toda função XAJAX 
deve criar um. Não vamos nos 
preocupar muito com detalhes 
agora. 
De 14 a 19
if (strlen($valor) <3) {
 $res = “Por favor, 
preencha o campo Nome.”;
}
else {
 $res = “nome OK”;
}
Lógica da função. Se o 
comprimento (strlen) de $valor 
(que é o parâmetro de entrada 
da função) for menor do que 3, a 
variável $res recebe a mensagem 
“Por favor, preencha o campo 
Nome.”. Caso contrário a variável 
$res = “nome OK”;
21
$res = utf8_encode($res); Como a variável $res pode conter 
caracteres especiais (acentos) 
devemos codificá-la com utf8_
encode(), a fim de evitarmos dores 
de cabeça com a acentuação mais 
tarde.
22
$objResponse-
>assign(‘lbmensagem’, 
‘innerHTML’, $res);
Esta linha coloca no label de 
ID=”lbmensagem” (linha 23 do 
programa anterior) o conteúdo 
de $res. Na prática é esta linha 
que fará com que a mensagem de 
erro/sucesso apareça na tela!
31 } Fim da função valida()
34 $ajax->processRequest(); Realiza o processamento Ajax.
16
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade A
Agora que conhecemos os princípios básicos do uso do método de programação AJAX, através do Framework 
XAJAX, vamos utilizar o método xajax.getFormValues() para processarmos um formulário de maneira assíncrona, 
isto é, sem recarregar a página.
1. o arquivo exemplo02.php
1 <?php
2 //bibliotecas XAJAX
3 require “./xajax/xaiax_core/xajax.inc.php”;
4 //funções definidas peio usuário
5 require “funcoes2.php”;
6 
7 ?>
8 <head>
9 <meta http-eguiv=”Content-Type” content=”text/html; charset=UTF-8” />
10 <titlex/title>
11 <?php
12 //gera os javascripts necessários para o funcionamento do XAJAX
13 //printJavascript recebe como parâmetro o caminho da bliblioteca XA-
JAX 
14 $ajax->printJavascript(‘ ./xajax/’);
15 ?>
16 </head>
17 <body>
18 <form id=”forml”>
19 <table cellspacing=”0” cellpadding=”4”>
UnidadeA
ProCessando FormULÁrios
Unidade
17
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações paraWEB | Unidade A
20 <thead>
21 </thead>
22 <tbody>
23 <tr>
24 <td>Valor 1 </td>
25 <td>
26 <input name=”vl”type=”text” id=”vl” size=”2” maxlength=”3”></td>
27 </tr>
28 <tr>
29 <td>Valor 2</td>
30 <td>
31 <input name=”v2” type=”text” id=”v2” size=”2” maxlength=”3”> </td>
32 </tr>
33 <tr>
34 <td colsplan=”2” >Resultado: <label id=”lbresultado”</label></td>
35 </tr>
36 <tr> 
37 <td valign=”top”&nbsp;</td>
38 <td><input typ e=”button” name=”btsoma” id=”btsoma” value=”Somar” 
onC1ick=”xajax_processaForm(xajax.ge tFormValues(‘fo rml’));”></td> 
39 </tr> 
40 </tbody> 
41 </table>
42 </form> 
43 </body>
 
18
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade A
1.1 vamos analisar as linhas mais importantes do nosso programa exem-
plo02.php:
linha Fonte O que faz?
3 require “./xajax/xajax_core/xajax.inc.
php”;
Requer a inclusão o arquivo fonte xajax.inc.
php (que contém as bibliotecas necessárias 
para utilizarmos o XAJAX
5 require “funcoes2.php”; Requer a inclusão o arquivo fonte funcoes2.
php (que contém as funções definadas pelo 
usuário)
9 <meta http-equiv=”Content-Type” 
content=”text/html; charset=UTF-8” />
Define que a codificação a ser utilizada na 
página será UTF-8. Veremos mais sobre isso 
posteriormente.
14 $ajax->printJavascript(‘./xajax/’); Cria os scripts necessários para que o XAJAX 
funcione. Para esta linha funcionar a inclusão 
da linha 3 obrigatoriamente tem de ter sido 
feita antes.
34 <td colspan=”2”>Resultado: <label 
id=”lbresultado”></label></td>
Aqui definimos uma marcação HTML <label> 
onde colocaremos o valor do resultado (soma).
38 <input type=”button” name=”btsoma” 
id=”btsoma” value=”Somar” 
onClick=”xajax_processaForm(xajax.
getFormValues(‘form1’));”>
Este é o botão (do tipo Button, não submit) 
que fará a submissão assíncrona do formulário.
2. o arquivo funcoes2.php
1 <?php
2 $ajax = new xajax();
3 // Registra as funções no javascript
4 $ajax->registerFunction(“processaForm”);
5 //FUNÇÕES JAVASCRIPT REGISTRADAS PELO XAJAX
6 function processaForm($vetForm){
7 //aqui pegamos os valores que vem em $vetForm
8 //que é um vetor associativo contendo os
9 $valorl = $vetForm[‘v1’];
10 $valor2 = $vetForm[‘v2’];
11 $res=$valorl + $valor2;
12 $objResponse = new xajaxResponse(‘UTF-8’);
13 $res = utf8_encode($res)
19
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade A
14 $objResponse->assign(‘lbresultado’, ‘innerHTML’, $res);
15 // Retorna a resposta de XML gerada pelo
16 // objeto do xajaxResponse
17 return $objResponse;
18 }
19 // Manda o ajax processar os pedidos acima
20 $ajax->processRequest();
21 ?>
O código fonte dos arquivos anteriores pode ser encontrado no arquivo unidade1_web2_parte2.zip
1
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade B
Caro(a) aluno(a), qualquer página web que se preze precisará ter um mínimo de interatividade com o usuário/
internauta. Por exemplo:
Guardar email e dados do usuário para enviar um newsletter;• 
Reconhecer e saudar o internauta quando ele volta a visitar nosso site;• 
Coletar dados de acesso para estatísticas de gerenciamento do site;• 
Permitir cadastro de seções e notícias (em caso de um portal) por um gerente de conteúdo (através de um sistema de • 
gerenciamento com senha).
Todos os serviços exemplificados acima (e provavelmente todos os outros que você puder imaginar) dependerão 
de uma grande quantidade de dados que devem ser armazenados e resgatados de forma fácil e rápida pelo sis-
tema do site. Para isso precisaremos de um banco de dados.
1 Manipulando o BD via funções (PHP até versão 
4.x) versus Conexão via PDO (PHP 5+)
1.1 Visão geral 
O PHP é uma linguagem que trabalha com o conceito de conexões de dados, ou seja, de posse de um endereço 
de servidor de dados, nome de usuário, senha e porta de conexão (opcional) um programa PHP pode requisitar 
uma conexão com o Banco de Dados. Através dessa conexão, poderemos realizar uma série de operações como 
inserir, consultar e apagar registros de uma ou mais tabelas.
Com uma conexão desse tipo os arquivos (.php) de nosso website não precisam estar obrigatoriamente no 
mesmo servidor que o banco de dados. Na verdade esse servidor pode estar instalado na mesma ou em outra 
máquina, esteja ela em outra sala, em outra cidade e por que não em outro país? Essa é a beleza da arquitetura 
cliente-servidor. 
Para que isso funcione corretamente será necessário que o banco de dados esteja com suas permissões de aces-
so configuradas corretamente e que tenhamos o endereço do servidor de dados, nome de usuário e senha de 
conexão (obviamente também será necessária uma conexão de rede razoavelmente rápida).
B
ACESSO AO BD VIA 
FUNÇÕES PADRÃO
UNIDADE
2
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade B
A maneira tradicional para manipulação de um banco de dados via PHP é o uso do conjunto de funções nativas 
do PHP para acesso a bancos de dados. Nas versões do PHP até a 5.x essa era a única maneira nativa para aces-
sarmos o banco de dados.
Seu funcionamento consiste em criarmos uma variável de conexão (que é que uma espécie de ponteiro que 
aponta para o banco) através de uma função específica para tal fim. 
Note que, nos exemplos a seguir, usaremos a tabela clientes (vista em LPW), cujo script de criação está no arqui-
vo: clientes_script.sql.
3
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade B
O PHP nos oferece várias formas de acessarmos um banco de dados. Vamos primeiramente estudar a forma mais 
simples e também mais difundida, que é a utilização das funções nativas, ou padrão, desta linguagem. 
Essas funções são bastante intuitivas e permitem que acessemos a maioria dos bancos de dados mais comuns 
como MySQL e PostgreSQL.
1. Fazendo consultas ao banco com as funções pa-
drão de acesso a dados do PHP
1.1 Conectando com um banco de dados PostgreSQL:
<?php // fonte em : u2_funcoes_conectando.php
$conexao = pg_connect(‘host=localhost dbname=bdexemplo user=root 
password=zxcvbnm,.’ ) or die (“Não foi possível conectar ao Banco de da-
dos.”);
?> 
No exemplo acima, a função pg_connect do PHP irá criar a variável $conexao que será um ponteiro para o banco 
de dados com o nome de bdexemplo, localizado em localhost, identificando o usuário como root e com a senha 
zxcvbnm,.. Caso algo saia errado, a função die() será acionada, encerrando o programa e mostrando a mensa-
gem “Não foi possível conectar ao Banco de dados.”
1.2 Retornando uma tupla
Agora que já sabemos como criar uma conexão com o banco de dados, vamos realizar uma consulta simples 
(observe com atenção os comentários no código):
<?php // fonte em : u2_funcoes_consultando01.php
//conecta ao banco
$conexao = pg_connect(‘host=localhost dbname=bdexemplo user=root 
password=zxcvbnm,.’ ) or die (“Não foi possível conectar ao Banco de da-
dos.”);
B
CONECtANDO, CONSULtANDO, 
INSERINDO, ALtERANDO,
 ExCLUINDO
UNIDADE
4
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade B
//executa uma consulta no banco
$resultado = pg_query($conexao,’SELECT * FROM clientes’);
//guarda em $dados (que será um vetor associativo) a primeira tupla retor-
nada
$dados = pg_fetch_assoc($resultado);
//print_r é função útil para testes que permite imprimir o vetortodo de 
uma vez!
print_r($dados);
?>
A saída na tela é dada pela função print_r e será:
5
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade B
1.3 Retornando todas as tuplas
Também é possível guardar na variável $dados todas as tuplas retornadas pela consulta. Para isso usamos a fun-
ção pg_fetch_all() no lugar de pg_fetch_assoc().
Assim, no código do exemplo anterior, trocamos:
$dados = pg_fetch_assoc($resultado); 
Por:
$dados = pg_fetch_all($resultado); 
A saída na tela dada pela função print_r($dados) será:
Veja o código completo no arquivo: u2_funcoes_consultando02.php
No exemplo acima, $dados é um vetor de vetores, ou seja, cada elemento seu é um outro vetor (associativo) que 
representa uma tupla (ou registro). Os índices de cada vetor associativo correspondem aos campos no banco de 
dados e o seu conteúdo corresponde ao dado gravado no campo correspondente.
1.4 Fazendo inserções no banco com as funções padrão do PHP para acesso 
a dados.
<?php // fonte em : u2_funcoes_inserindo01.php
//aqui criamos as variáveis que representam os campos a serem gravados
//obviamente em condições normais (este é apenas um teste), estas variáveis 
viriam de um 
//formulário por $_GET ou $_POST !
$codigo = “103”;
6
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade B
$nome = “Maria da Silva”;
$cep = “99999-999”;
//conecta ao banco
$conexao = pg_connect(‘host=localhost dbname=bdexemplo user=root 
password=zxcvbnm,.’ ) or die (“Não foi possível conectar ao Banco de da-
dos.”);
//executa uma consulta de inserção no banco
pg_query($conexao,”INSERT INTO clientes (codigo,nome,cep) VALUES 
($codigo,’$nome’,’$cep’)”) or die (“Erro inserindo dados”);
//guarda em $erro a mensagem de erro (se houver), caso contrario $erro re-
ceberá false
$erro = pg_last_error(); 
if ($erro != false)
 echo $erro;
else
 echo “Registro incluído com sucesso!”;
?>
Atenção
 Se você executar o exemplo acima mais de uma vez será apresentada a mensagem:
ERROR: duplicate key violates unique constraint “PRIMARYKEY”
Isso ocorrerá devido ao campo código ser chave primária, ou seja, só pode haver uma tupla com código=103.
1.5 Fazendo exclusões no banco com as funções padrão do PHP para acesso 
a dados.
<?php //fonte em: u2_funcoes_excluindo01.php
include “inicializacoes.php”; //arquivo de configuração geral
//aqui definimos a variável do código a ser deletado
7
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade B
//obviamente em condições normais, esta variável viria de um formulário 
por $_GET ou $_POST !
$codigo = “103”;
//conecta ao banco
$conexao = pg_connect(‘host=localhost dbname=bdexemplo user=root 
password=zxcvbnm,.’ ) or die (“Não foi possível conectar ao Banco de da-
dos.”);
//executa uma consulta de exclusão no banco
//primeiramente vamos verificar se o código informado existe
$resultado = pg_query($conexao,”SELECT * FROM clientes where 
codigo=’$codigo’”);
//agora testamos quantas tuplas foram retornadas 
//pela função pg_num_rows (se o valor for zero é porque o código não exis-
te!)
$numero = pg_num_rows($resultado);
if ($numero != 0){
 pg_query($conexao,”DELETE FROM clientes where codigo=’$codigo’”);
 echo “Registro excluído com sucesso!”;
}
else {
 echo “o código $codigo não existe!”;
>
1.6 Referência rápida das funções utilizadas.
Função (parâmetros) Para que serve Exemplo
pg_connect(‘string de con-
exão’);
Retorna para uma variável um 
ponteiro para o banco de dados 
definido em ‘string de conexao’.
$conexao = pg_
connect(‘host=localhost 
dbname=bdexemplo user=root 
password=zxcvbnm,.’);
8
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade B
pg_query($conexao,’QUERY 
SQL’);
Realiza a consulta definida em 
‘QUERY SQL’ no banco de dados 
e retorna para uma variável o 
resultado da consulta.
$resultado = pg_
query($conexao,’SELECT * FROM 
clientes’);
pg_fetch_assoc($var_resul-
tado);
Retorna a 1ª tupla da variável 
de resultado como um vetor 
associativo.
$dados = pg_fetch_
assoc($resultado);
pg_fetch_all($var_resul-
tado); 
Retorna todas as tuplas da variável 
de resultado como um vetor de 
vetores associativos (onde cada 
um deles é uma tupla).
$dados = pg_fetch_all($resultado); 
pg_last_error(); 
Retorna a última mensagem de 
erro gerada pelo banco de dados 
PostgreSQL. Se não houve erro 
retorna FALSE.
$erro = pg_last_error(); 
pg_num_rows($var_resul-
tado);
Retorna o número de tuplas 
contidas na variável de resultado. 
Se a consulta não encontrou 
nenhuma tupla, pg_num_rows 
retornará 0 (ZERO).
$numero = pg_num_
rows($resultado);
9
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade B
2. Atividades
 Usando as funções padrão de acesso a dados do PHP, crie o programa que:1. 
Insira um registro da tabela Clientes (ver LPW). a) 
Altere um registro da tabela Clientes (ver LPW). b) 
Exclua um registro da tabela Clientes (ver LPW). c) 
3. A classe PDO para acesso a bancos de dados
As funções tradicionais de bancos de dados do PHP trazem uma série de problemas e inconvenientes:
Cada banco de dados (PostgreSQL, MySQL etc.) tem um conjunto diferente de funções e parâmetros, o que d) 
obrigará o pobre programador a reescrever todo código de acesso ao banco de dados se, por alguma razão, for 
necessário trocar a tecnologia do banco;
A versão 6 do PHP que substituirá a versão 5, não terá suporte nativo às funções de acesso a dados tradicionais e) 
por default, o que amarrará o seu programa (e o cliente que pagou por ele) indefinidamente a uma versão da 
linguagem que fatalmente se tornará obsoleta e mais cedo ou mais tarde você terá que reescrever todo código 
de acesso ao banco de dados;
Enquanto com as funções tradicionais você precisa se preocupar em tratar aspas na hora de inserir dados em f) 
uma tabela a fim de prevenir ataques por SQL injection1 , a classe PDO do PHP 5 e 6 fará isso por você;
O desempenho das funções de acesso ao banco de dados nativas das versões 3, 4 e 5 do PHP é em geral pior g) 
do que a alternativa a elas (que veremos a seguir).
PDO (PHP Data Objects) é uma classe
2
 que padroniza todas as funções de acesso a banco de dados para todos 
os bancos de dados (PostgreSQL, MySQL, Firebird....)
Quando você instancia (cria) um objeto PDO, você deve informar além do servidor (host), usuário e senha, qual 
banco de dados será acessado, dizendo o nome do driver que o PDO deverá utilizar.
Na prática, você diz para o PDO qual banco deverá ser acessado. O PDO vai “se virar” para fazer as conexões e 
operações necessárias e particulares a cada banco, escondendo a complexidade do programador e deixando que 
ele precise se preocupar apenas com a lógica do seu programa.
3.1 Configurando a classe PDO no Apache Triad
O Apache Triad não vem “de fábrica” com o acesso PDO ao PostgreSQL habilitado. 
Felizmente é simples ativar estes módulos através do Painel de Controle do Apache Triad (Apache2TriadCP). 
3.2.Conectando a um banco de dados via PDO
<?
$banco = new PDO(‘pgsql:host=localhost;dbname=nome_do_banco’, 
‘username’,’password’);
?>
No exemplo acima (para facilitar seu entendimento, observe a correspondência de cores) a variável $banco é 
1 Técnica usada por hackers para invasão de websites. Veja mais em: http://imasters.uol.com.br/artigo/5179/sql_injec-
tion_no_php_o_que_e_e_como_se_proteger
2 Classe é um conceito de programação Orientada a Objetos. Ver unidade A.
10
S
is
te
m
a 
U
ni
ve
rs
id
ad
eA
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade B
um objeto do tipo PDO e irá acessar o banco de dados nome_do_banco que é do tipo pgsql (PostgreSQL) e está 
localizado no servidor localhost, usando o usuário username e a senha password.
E se você precisar criar uma conexão com um banco de dados MySql1? Nada mais simples :
<?
$banco = new PDO(‘mysql:host=localhost;dbname=nome_do_banco’, 
‘username’,’password’);
?>
Note que a única mudança foi o nome do driver (mysql ao invés de pgsql) que especifica qual banco será aces-
sado!
3.3 Fazendo consultas ao banco via PDO
3.3.1 Retornando uma tupla
Agora que já sabemos como criar uma conexão PDO a um banco de dados, vamos realizar uma consulta simples 
(observe com atenção os comentários no código):
1 <pre>
2 <?php
3 //conecta ao banco
4 $banco = new PD0(‘pgsql:host=localhost;dbname=bdexemplo’, 
‘root’,’zxcvbnm,.’);
5 
6 //executa uma consulta no banco
7 //como PDO é orientado a objetos, quando queremos chamar um método 
(função) devemos usar a “seta” (->).
8 $resultado = $banco->query(‘SELECT * FROM clientes’);
9 
10 //guarda em $dados (que será um vetor) a primeira tupla retornada 
11 $dados = $resultado->fetch();
12 
13 //print_r é uma função muito útil para testes e permite imprimir um 
vetor todo de uma vez!
1 Nesse caso será necessário ter o driver PDO – MySQL habilitado previamente, da mesma maneira que você habilitou o 
driver do Postgres, porém adicionando o texto extension=php_pdo_mysql.dll ao arquivo de configuração do PHP.
11
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade B
14 print_r($dados);
15 ?>
Arquivo fonte: ub/ub_retornando_tupla.php
Note que no exemplo acima o método fetch é usado para retornar a primeira tupla (linha) da variável $resultado 
para a variável $dados.
A saída na tela é dada pela função print_r e será:
3.3.2 Retornando várias tuplas
Também é possível guardar na variável (vetor) $dados todos as tuplas retornadas pela consulta. Para isso usamos 
o método fetchAll() no lugar de fetch().
Assim:
$dados = $resultado->fetch();
Será trocado por:
$dados = $resultado->fetchAll();
A saída na tela é dada pela função print_r($dados) e será:
 
 
12
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade B
No exemplo acima, $dados é um vetor de vetores. Cada elemento seu é um vetor associativo que representa 
uma tupla (ou registro). Os índices de cada vetor associativo correspondem aos campos no banco de dados e o 
seu conteúdo corresponde ao dado gravado no campo correspondente.
 3.4 Fazendo uma inserção
Uma vez entendido o procedimento de conexão e consulta, visto anteriormente, nada mais fácil que realizar as 
demais operações no banco de dados.
1 <pre>
2 <?php
3 //conecta ao banco
4 $banco = new PD0(‘pgsql:host=localhost;dbname=bdexemplo’, 
‘root’,’zxcvbnm,.’);
5 
6 //executa uma consulta no banco
7 //como PDO é orientado a objetos, quando queremos chamar um método 
(função) devemos usar a “seta” (->).
8 $resultado = $banco->query(“INSERT INTO clientes (codigo,nome,cep) 
VALUES (105,’Maria da Silva’,’99910-000’)”);
9 
10 //em caso de ocorrer um erro $banco->errorInfo() vai retornar um vetor 
associativo com informações sobre o que ocorreu
11 if (!$resultado) {
12 print_r($banco->errorInfo());
13 }
14 else {
15 //caso contrário da uma mensagem de sucesso.
16 echo “Registro inserido com sucesso!”; 
17 }
18 
19 ?>
Arquivo fonte: ub/ub_fazendo_insercao.php
13
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade B
Neste exemplo, se a chave for duplicada o banco não aceitará a inserção. Para podermos ter certeza se tudo saiu 
como esperávamos, usamos o método ->errorInfo( ) que retorna um vetor associativo com os dados do último 
erro (se ocorrer erro, $resultado na linha 11 receberá false).
Para conferir se a inserção foi feita, podemos executar o programa ub_retornando_todas_tuplas.php novamen-
te.
3.5 Alterando
Agora digamos que queremos alterar o nome da cliente “Maria da Silva” para “Maria da Silva Santos”. Para isso 
iremos realizar uma consulta SQL de update no banco. 
Na prática a única diferença do exemplo da inserção está no SQL em si, na linha 8, o resto do programa é igual 
ao da inserção!
1 <pre>
2 <?php
3 //conecta ao banco
4 $banco = new PD0(‘pgsql:host=localhost;dbname=bdexemplo’, 
‘root’,’zxcvbnm,.’);
5 
6 //executa uma consulta no banco
7 //como PDO é orientado a objetos, quando queremos chamar um método 
(função) devemos usar a “seta” (->).
8 $resultado = $banco->query(“UPDATE clientes SET nome=’Maria da Silva 
Santos’ where codigo=105”);
9 
10 //em caso de ocorrer um erro $banco->errorInfo() vai retornar um vetor 
associativo com informações sobre o que ocorreu
11 if (!$resultado) {
14
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade B
12 print_r($banco->errorInfo());
13 }
14 else {
15 //caso contrário da uma mensagem de sucesso.
16 echo “Registro alterado com sucesso!”; 
17 }
18 
19 ?>
Arquivo fonte: ub/ub_fazendo_alteracao.php
3.6 Excluindo
Para fazermos uma exclusão, deveremos escolher um campo pelo qual iremos procurar uma tupla para deletar. 
No presente exemplo utilizaremos um “where codigo=”, localizando e excluindo o cliente pelo seu código (chave 
primária).
1 <pre>
2 <?php
3 //conecta ao banco
4 $banco = new PD0(‘pgsql:host=localhost;dbname=bdexemplo’, 
‘root’,’zxcvbnm,.’);
5 
6 //executa uma consulta no banco
7 //como PDO é orientado a objetos, quando queremos chamar um método 
(função) devemos usar a “seta” (->).
8 $resultado = $banco->query(“DELETE from clientes WHERE codigo=100”);
9 
10 //$resultado->rowCount retorna quantas tuplas foram afetadas na última 
consulta
11 if (!$resultado)->rowCount () == 0) {
12 echo “Registro não encontrado!”; 
13 }
14 else {
15
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade B
15 //caso contrário da uma mensagem de sucesso.
16 echo “Registro deletado com sucesso!”; 
17 }
18 
19 ?>
Arquivo fonte: ub/ub_fazendo_exclusao.php
Na linha 8, realizamos nossa consulta como nos exemplos anteriores. Note que $resultado receberá um objeto 
que, entre outras coisas, contém um método chamado ->rowCount( ) que permite sabermos quantas tuplas 
foram atingidas pela nossa query (consulta).
Como no caso só pode haver 1 registro com o codigo=100, na linha 11 testamos quantas tuplas foram afetadas. 
Se rowCount() for zero, é sinal de que não conseguimos deletar (provavelmente porque o código não existe). 
Por outro lado, se o banco conseguir encontrar e deletar o registro, o valor de rowCount( ) será 1, ou seja, um 
registro foi encontrado e deletado. Nesse caso damos uma mensagem de sucesso (linha 16).
16
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade B
Uma grande vantagem de utilizar um banco de dados é a possibilidade de se utilizar a integridade referencial.
Integridade referencial é a capacidade que o banco de dados tem de impedir que sejam quebradas as relações 
existentes entre as diversas entidades (tabelas). Por exemplo: se uma determinada venda está associada a um 
cliente, o banco não devepermitir que ele seja excluído, pois isso deixaria a venda ligada a um código de cliente 
inexistente, gerando uma inconsistência.
Para nós, programadores PHP, integridade referencial facilita muito a codificação de programas, pois podemos 
deixar que o próprio banco de dados verifique se um dado pode ou não ser excluído, restando-nos apenas veri-
ficar se a operação foi ou não bem sucedida e dando uma mensagem para o usuário.
 Agora observe o script de criação da tabela vendas (arquivo fonte: vendas.sql)1: 
1 CREATE TABLE vendas
2 (
3 codigo serial NOT NULL,
4 data date,
5 cliente integer NOT NULL,
6 CONSTRAINT keycod PRIMARY KEY (codigo),
7 CONSTRAINT keycli FOREIGN KEY (cliente)
8 REFERENCES clientes (codigo) MATCH SIMPLE
9 ON UPDATE NO ACTION ON DELETE NO ACTION
1 A ser rodado via PgAdmin para criação da tabela.
B
UtILIZANDO INtEGRIDADE 
REFERENCIAL
UNIDADE
17
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade B
10 )
11 WITHOUT OIDS;
 Veja que linha 7 é criada uma restrição (constraint) do tipo chave estrangeira (FOREIGN KEY), a qual referencia 
o campo código da tabela clientes.
Na prática isso quer dizer que agora clientes relacionados a uma venda não poderão ser deletados sem antes a 
venda ser deletada. 
1 <pre>
2 <?php>
3 //conecta ao banco
4 $banco = new PD0(‘pgsql:host=localhost;dbname=bdexemplo’, 
‘root’,’zxcvbnm,.’);
5 
6 //executa uma consulta no banco
7 //como PDO é orientado a objetos, quando queremos chamar um método 
(função) devemos usar a “seta” (->).
8 $resultado = $banco->query(“DELETE from clientes WHERE codigo=100”);
9 
10 //em caso de ocorrer um erro $banco->errorInfo() vai retornar um vetor 
associativo com informações sobre o que ocorreu
11 if (!$resultado) {
12 print_r($banco->errorInfo());
13 }
14 else {
15 //caso contrário da uma mensagem de sucesso.
16 echo “Registro inserido com sucesso!”;
17 } 
18 ?>
 Arquivo fonte: ub_fazendo_exclusao_integridade.php
Mensagem retornada no exemplo acima (caso o cliente de código=100 estiver relacionado a uma venda). 
18
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade B
 Array
(
 [0] => 23503
 [1] => 7
 [2] => ERROR: update os delete on “clientes” violates foreign key cons-
traint “keycli” on “vendas”
DETAIL: Key (codigo)=(100) is still referenced fron table “vendas”.
Atividades
1. Usando PDO, crie o programa que:
1.1 inclua um registro na tabela Clientes (ver LPW). 
1.2 altere um registro da tabela Clientes (ver LPW). 
1.3 exclua um registro da tabela Clientes (ver LPW). 
1
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade C
Até o presente momento, sempre que desejávamos passar valores de uma página para outra, precisávamos 
utilizar os métodos GET ou POST. Nesta unidade, veremos uma forma de criar variáveis que são mantidas na 
memória do navegador, mesmo que o usuário navegue para outra página através de um link ou mesmo submeta 
um formulário. 
O que são sessões e para que elas servem?
Uma sessão é um vetor associativo1 especial que não perde seu conteúdo mesmo que o usuário navegue para 
outra(s) página(s). Esse vetor somente será apagado, se o programa PHP chamar a função comando apropriada 
(session_destroy) ou então se o usuário fechar (encerrar) o navegador.
Esse vetor associativo de que falamos terá obrigatoriamente o nome $_SESSION[] e é bom notar que seu identi-
ficador (nome do vetor) deve ser escrito em maiúsculas.
As utilidades óbvias de uma sessão são:
Manter um carrinho de compras na memória enquanto um cliente navega;• 
Manter o usuário logado no website enquanto navega.• 
Criando uma nova sessão
Para criar uma nova sessão, basta chamar a função session_start() no ínicio do programa.
Exemplo:
1 <?php
2 session_start(); 
3 print_r($_SESSION);
4 ?>
Programa uc01.php
A saída do programa será:
Array ( )
Indicando que foi criado um vetor, por enquanto, vazio.
Acessando uma sessão
Agora que já criamos o vetor de sessão, podemos acessá-lo normalmente. É importante lembrar que, mesmo 
já estando criada, a sessão deverá ser habilitada para uso através da função session_start() em todas as páginas 
que desejarmos usá-la.
Vamos ver um exemplo na prática. Primeiramente vamos criar a sessão e colocar dentro do item ‘nome’ o valor 
1 Vetor onde o índice de cada elemento é um texto (string)
C
SESSÕES E REGISTROS 
DE VARIÁVEIS
UNIDADE
2
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade C
‘Universidade Aberta do Brasil’:
1 <?php
2 session_start();
3 $_SESSION[‘nome’] = ‘Universidade Aberta do Brasil<br>’;
4 ?>
5 <a href=”uc03.php”>Ir para a segunda página </a>
Programa uc02.php
Quando o usuário clicar no link na linha 5 do programa anterior, ele será levado para outra página (uc03.php) 
que exibirá o conteúdo de $_SESSION[‘nome’], provando que o valor não é perdido quando o usuário navega. O 
código da segunda página vem a seguir:
1 <?php
2 session_start();
3 echo ($_SESSION[’nome’]);
4 ?>
5 <a href=”uc02.php”>Voltar</a>
Programa uc03.php
Veja a saída:
3
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade C
Destruindo uma sessão
Para destruir uma sessão, via código PHP, devemos utilizar a função session_destroy(). Para fazer um teste, cha-
me o programa uc02.php para criar a sessão e em seguida mude a URL para que seja chamado o programa uc04.
php (cujo fonte está a seguir):
1 <?php
2 session_start();
3 session_destroy();
4 ?>
5 <a href=”uc03.php”>Ir para uc03.php </a>
Programa uc04.php
Após executado uc04.php, a sessão não existirá mais. Para conferir, clique no link “Ir para uc03.php”. A saída 
deverá mostrar apenas o link “voltar”:
A sessão foi destruída e a prova está na mensagem que sumiu:
O texto “Universidade Aberta do Brasil” sumiu, pois a sessão foi destruída!
Sessões: Resumo
Uma sessão é um vetor associativo;• 
O nome do vetor da sessão é $_SESSION;• 
Podemos guardar quantos valores quisermos numa sessão;• 
Para inicializar e utilizar o vetor $_SESSION, é necessário chamar a função session_start() no ínicio do programa• 
Para destruir a sessão, devemos chamar a função session_destroy();• 
4
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade C
Até aqui, sempre que o usuário fechava o navegador, todos os dados (mesmo os de uma sessão) eram perdidos. 
Existe uma forma de mantermos os dados que quisermos, mesmo após o encerramento do navegador. Ela é 
chamada de cookie e constitui na criação de um pequeno arquivo de texto, contendo os dados que desejamos 
manter e recuperar numa próxima visita ao site.
A criação e controle dos cookies são feitos pelo navegador, cabendo ao programador apenas solicitar sua criação, 
alteração ou consulta.
Segundo Wikipedia:
“Cookie é um grupo de dados trocados entre o navegador e o servidor de páginas, colocado 
num arquivo (ficheiro) de texto criado no computador do utilizador. A sua função principal é a de 
manter a persistência de sessões HTTP. A utilização e implementação de cookies foi um adendo ao 
HTTP e muito debatida na altura em que surgiu o conceito, introduzido pela Netscape, devido às 
consequências de guardar informações confidenciais num computador - já que por vezes pode não 
ser devidamente seguro, como o uso costumeiro emterminais públicos.
Um exemplo é aquele cookie que um site cria para que você não precise digitar sua senha nova-
mente quando for ao site outra vez. Outros sites podem utilizá-los para guardar as preferências do 
usuário, por exemplo, quando o sítio lhe permite escolher uma cor de fundo para suas páginas.
Funcionamento:
Quando o servidor deseja activar um cookie no cliente, envia uma linha no cabeçalho HTTP inicia-
da por Set-Cookie: ...
A partir desse momento, consoante às opções especificadas pelo cookie, o cliente irá enviar no seu 
cabeçalho HTTP dos pedidos uma linha contendo os cookies relevantes, iniciada por Cookie: ....
Entre os parâmetros dos cookies estão: o tempo de vida (a data para o cookie “expirar a validade”) 
e o domínio, ou grupo de páginas a que o cookie se aplica. Por exemplo, é possível fazer com que 
um cookie seja aplicado apenas a endereços iniciados por http://pt.wikipedia.org/wiki/ de maneira 
que esse mesmo cookie já não se aplique para http://pt.wikipedia.org/skins/, por exemplo.”
Disponível em:< http://pt.wikipedia.org/wiki/Cookie > Acesso em: 20 maio 2009.
Vantagens e desvantagens de usar cookies
Vantagens
Um cookie pode durar indefinidamente, dependendo de seu tempo de expiração, que é uma espécie prazo de valida-• 
de. Uma vez ultrapassado esse tempo de expiração, o cookie será apagado automaticamente;
Uma aplicação com cookies pode reconhecer o usuário quando ele retorna ao site mesmo muito tempo depois (desde • 
que o cookie não tenha expirado e que o usuário não o tenha deletado).
C
COOKIES
UNIDADE
5
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade C
Desvantagens
Cookies podem ser um problema de segurança potencial, se a aplicação que os armazena for mal programada, assim • 
como usá-los para guardar dados sensíveis como senhas (o que jamais deve ser feito);
Alguns navegadores permitem que o usuário os configure para não aceitar cookies. Embora isso possa aumentar a • 
segurança do usuário, também irá impedir que o site baseado em cookies funcione corretamente com o navegador 
desse usuário;
Em máquinas públicas, como em laboratórios de informática, lanhouses e cybercafés há o risco de aplicações mal • 
intencionadas pré-instaladas nas máquinas vasculhem e capturem dados importantes de cookies.
Algumas empresas de ética questionável usam cookies para rastrear o usuário enquanto ele navega por diversos sites. • 
Essa prática é condenada por organismos que defendem o anonimato e a privacidade na Internet, como a EFF (Eletro-
nic Frontier Fundation - http://www.eff.org/)
Criando um cookie
Veja um exemplo de como criar um cookie no navegador do usuário:
1 <?php
2 //Unidade C - Trabalhando com Cookies
3 $teste = setcookie(“teste”,”UAB”, time()+3600);
4 if ($teste == true)
5 echo “cookie criado com sucesso!”;
6 else
7 echo “cookie não pode ser criado.”;
8 ?>
Programa uc_cookies01.php
Vamos comentar o programa anterior linha a linha:
Na linha 3, criamos o cookie com a função setcookie()a) 
O parâmetro 1 é o nome (identificador) do cookie• 
O parâmetro 2 é o valor que será armazenado no cookie• 
O parâmetro 3 é a hora de expiração (hora atual + 1 hora neste exemplo)• 
A variável de retorno ($teste) receberá true se o cookie for criado corretamente e false caso contrário• 
Da linha 4 em diante, fazemos um teste para saber se o cookie foi criado com sucesso (o que deverá ocorrer b) 
normalmente, a não ser que o usuário tenha configurado seu navegador para bloquear a criação de cookies).
6
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade C
Testando e depurando programas com cookies
Alguns navegadores mais “democráticos “permitem que manipulemos os cookies armazenados individualmen-
te. No caso do Mozilla Firefox é bem fácil obter esse acesso, bastando clicar no menu:
Ferramentas > Opções 
E em seguida da aba “Privacidade”:
 
Na tela acima, devemos então clicar no link “excluir cookies em particular”, o que nos remeterá para seguinte 
tela:
 
7
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade C
Note na tela abaixo que, digitando uma parte do nome do cookie que desejamos localizar, o Firefox irá filtrar os 
cookies que batem esse critério 
Uma vez feita essa filtragem, podemos clicar no botão “Excluir cookie” e apagar o cookie que estiver seleciona-
do.
Essa ferramenta do Firefox é muito útil quando depuramos programas que utilizam cookies e por essa razão (e 
por muitas outras) o Mozilla Firefox é o melhor amigo do programador Web!
Lendo dados de um cookie
Agora que já sabemos como criar nossos cookies, será preciso poder ler o conteúdo dos cookies já existentes. Em 
PHP essa tarefa é muito fácil, e tudo que precisamos é acessar o vetor especial $_COOKIE, que conterá todos os 
cookies relativos à URL do nosso site (esse controle é feito automaticamente pelo navegador quando este grava 
o cookie).
Vejamos um exemplo:
1 <?php
2 //Unidade C - Trabalhando com Cookies
3 echo (“0 cookie ‘teste’ tem valor = ‘” . $_
C00KIE[‘teste’].“’”); 
4 ?>
Programa uc_cookies02.php
Toda a mágica está na única linha deste programa (3) e fará que o valor de $_COOKIE[‘teste’] seja exibido (caso 
você não tenha rodado uc_cookies01.php anteriormente, este cookie estará em branco).
8
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade C
Apagando um cookie
Para remover um cookie da máquina do usuário podemos sobrescrevê-lo com um cookie de mesmo nome e data 
de expiração vencida.
4 <?php
2 //Unidade C - Trabalhando com Cookies
3 setcookie(“teste”,””,time() - 3600);
4 ?>
Programa uc_cookies03.php
Veja que agora estamos sobrescrevendo o cookie ‘teste’ com um cookie cuja data de expiração é configurada 
para uma hora atrás (a partir da atual).
Após rodar o programa acima, se você experimentar procurar novamente nosso cookie “teste” utilizando o pai-
nel de cookies do Firefox, verá que ele não será mais exibido:
 
1
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade D
Nesta unidade, vamos aprender como manipular arquivos e diretórios (pastas) do sistema operacional através 
do PHP. Trata-se de uma técnica avançada que pode ser muito útil quando precisamos ter maior controle sobre 
os arquivos do site, sem precisar recorrer a ferramentas externas ao nosso programa em PHP.
Navegando (trocando) o diretório atual
Descobrindo qual o diretório atual
A primeira coisa que precisamos ter em mente é que, por motivos de segurança, normalmente, o servidor Web 
não permitirá que se navegue em diretórios abaixo de um certo nível, que normalmente é o nosso diretório 
home ou www.
Podemos descobrir qual o diretório atual usando a função getcwd():
1 <?php
2 echo getcwd();
3 ?>
Programa ud_dir01.php
O programa acima irá retornar algo como: 
“C:\Users\andy\Documents\cefet\uab\unidades\UD\fontes” (esse caminho irá variar dependendo das configu-
rações do servidor apache e do sistema operacional no qual o PHP está rodando).
Trocando de diretório
Agora que sabemos qual o diretório atual, vamos trocá-lo. Para isso devemos usar a função chdir():
1 <?php
2 chdir(“..”);
3 echo getcwd();
4 ?>
Programa ud_dir02.php
D
NAVEGANDO, LISTANDO
 E CRIANDO DIRETÓRIOS
UNIDADE
2
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade D
No exemplo anterior, pedimos ao PHP que“suba” um diretório, indo para o diretório pai do até então diretório 
atual. A saída deste programa será algo parecido com:
Note que getcw() retornou um diretório acima do que foi retornado na execução do programa ud_arquivos01.
php
Note que o PHP não manterá o diretório atual após o término do programa, assim ele voltará a ser o mesmo 
onde o programa está rodando, no caso: 
“C:\Users\andy\Documents\cefet\uab\unidades\UD\fontes”
Vamos agora considerar a seguinte árvore de diretórios:
Nosso próximo programa chama-se ud_dir03.php e será executado a partir do caminho: 
“C:\Users\andy\Documents\cefet\uab\unidades\UD\fontes”
 (ou equivalente em sua máquina).
A idéia deste exemplo é permitir que o usuário navegue pelas pastas através de uma caixa de texto onde poderá 
digitar o caminho desejado. Se o caminho for inválido, o programa irá dar uma mensagem de erro do tipo: “Ca-
minho inválido”.
1 <?php 
2 $caminho = getcwd();
3 $acao = $_POST[‘acao’];
4 if ($acao == “OK”){
3
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade D
5 $caminho = stripslashes($_POST[‘caminho’]);
6 
7 $teste = chdir($caminho);
8 if ($teste == true)
9 echo “Novo caminho: $caminho”;
10 else
11 echo “Caminho inválido: $caminho”;
12 }
13 
14 ?>
15 <form method=”POST”>
16 <input type=”text” size=”100” name=”caminho” value=”<?=$caminho?>”>
17 <input type=”submit” value=”OK” name=”acao”>
18 </form>
Programa ud_dir03.php
Experimente rodar o programa acima e navegar pelas pastas do sistema.
Vamos entender o programa linha a linha:
Linha 2: a variável $caminho recebe o diretório atual;• 
Linha 3: testa se o botão ação foi acionado;• 
Linha 4: guarda em $caminho o valor do campo caminho do formulário, filtrando as contra barras (\) com a • 
função striplashes()1 ;
Linha 5: se $caminho for um caminho válido a variável $teste recebe true e o diretório atual será mudado para • 
$caminho. Caso contrário, $teste recebe false;
Linha 6 a 10: o programa irá decidir qual mensagem exibir dependendo do valor de $teste.• 
 
Listando o diretório atual
Uma vez que já sabemos como percorrer os diretórios do sistema, vamos agora listar o diretório atual, mostran-
do quais arquivos e diretórios que existem dentro dele.
1 <?php
2 $dir = “pastas”;
1 Quando um formulário é submetido, normalmente o PHP irá colocar uma contra barra (\) na frente de caracteres 
especiais como aspas duplas, aspas simples e outras contra barras. Esse comportamento depende das configurações do 
servidor PHP.
4
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade D
3 $handle = opendir($dir);
4 if ($handle != false) {
5 echo “$dir <hr>”;
6 while (false !== ($file = readdir($handle))) {
7 echo “$file <br>\n”;
8 }
9 closedir($handle);
10 }
11 else
12 echo “diretório inválido: $dir”;
13 ?>
Programa ud_dir04.php
Vamos entender este programa linha a linha. É bem simples acredite!
Linha 3: opendir() retorna para $handle um apontador para o diretório definido em $dir. Caso $dir seja um • 
diretório inexistente ou inválido, $handle receberá false;
Linha 6: while irá se repetir enquanto a função $readdir() retornar valores para $file• 2 que não forem false;
Linha 7: irá imprimir o nome de cada entrada do diretório seguido de um <br>;• 
Linha 9: fecha o apontador de diretório ($handle);• 
Experimentos:
Mude o valor de $dir para “pastas/pasta1”;a) 
Mude o valor de $dir para “pastas/pasta2”;b) 
Mude o valor de $dir para “pastas/pasta4”;c) 
O que aconteceu em cada um dos testes?
Criando um diretório
Uma vez que já sabemos navegar pela árvore de diretórios do sistema operacional via PHP, vamos aprender 
como criar novos diretórios.
2 Note o sinal “!==”. Ele serve para que o PHP possa diferenciar o valor booleano false de um arquivo ou diretório chama-
do “false”!
5
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade D
1 <?php
2 $teste = mkdir(“pastas/pasta4”);
3 if ($teste == true)
4 echo “Diretório criado com sucesso!”;
5 else
6 echo “Erro criando diretório”;
7 ?> 
Programa ud_dir05.php
O programa acima é bem simples e dispensa grandes comentários. A única coisa a salientar é que mkdir() retor-
na false não consiga criar o novo diretório. Há ainda um segundo parâmetro que é o modo de acesso (leitura, 
escrita e execução) em sistemas UNIX. Esse parâmetro não tem efeito em sistemas Windows e é demonstrado 
a seguir:
1 <?php
2 $teste = mkdir(“pastas/pasta5”,0777);
3 if ($teste == true)
4 echo “Diretório criado com sucesso!”;
5 else
6 echo “Erro criando diretório”;
7 ?> 
Programa ud_dir05b.php
Este parâmetro não tem efeito no Windows.
Removendo um diretório
Para encerrarmos nossa manipulação de diretórios, falta apenas uma maneira para deletá-los. Esta funcionali-
dade é dada pela função rmdir():
1 <?php
2 $teste = rmdir(“pastas/pasta4”);
3 if ($teste == true)
4 echo “Diretório removido com sucesso!”;
5 else
6 echo “Erro criando diretório”;
6
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade D
7 ?> 
Programa ud_dir06.php
Esta função funciona de forma análoga à função que cria os diretórios, vista anteriormente. Se rmdir() não con-
seguir remover o diretório especificado, ela retornará false.
7
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade D
Abrindo um arquivo
Antes de ler ou escrever em um arquivo, é preciso fazer a sua abertura. A função fopen() faz a abertura de um 
arquivo e retorna um ponteiro de arquivo em uma variável.
Exemplo:
$pta = fopen (“caminho/nome_do_arquivo”, “modo_de_abertura”) or die (“erro 
lendo arquivo”) ;
No exemplo acima, incluímos o comando or die(), que serve para fornecer uma mensagem de erro personalizada 
caso algo saia errado na abertura do arquivo.
fopen() recebe dois parâmetros:
Caminho (se o arquivo estiver no mesmo diretório não precisamos colocá-lo aqui) e nome do arquivo a ser aberto;1. 
Modo de abertura (leitura, gravação ou ambos)2. 
A seguir uma tabela de referência sobre os modos de abertura de arquivos:
‘r’ 
 Abrir somente para leitura; coloca o ponteiro de 
arquivo no começo do arquivo.
‘r+’ 
- Abrir para leitura e gravação; colocar o ponteiro de 
arquivo no começo do arquivo.
‘w’ 
Abrir somente para gravação; colocar o ponteiro de 
arquivo no começo do arquivo e truncar o arquivo 
para tamanho zero. Se o arquivo não existir, tentar 
cria-lo.
‘w+’
 Abrir para leitura e escrita; colocar o ponteiro de 
arquivo no início do arquivo e truncar o arquivo para 
tamanho zero. Se o arquivo não existir, tentar cria-
lo.
‘a’ 
- Abrir o arquivo somente para escrita; colocar o 
ponteiro de arquivo no fim do arquivo. Se o arquivo 
não existe, tentar criá-lo.
a+’
 Abrir o arquivo para leitura e gravação; colocar o 
ponteiro no fim do arquivo. Se o arquivo não existe, 
tentar criá-lo.
Descobrindo o tamanho de um arquivo
Podemos descobrir o tamanho em bytes de um arquivo através da função filesize().
Exemplo:
$tamanho = filesize (“caminho/nome_do_arquivo”);
D
TRAbALhANDO COm ARqUIVOS
UNIDADE
8
S
is
te
m
a 
U
ni
ve
rs
id
ad
e 
A
be
rta
 d
o 
B
ra
si
l -
 U
A
B
 |
 I
F 
S
ul
-r
io
-g
ra
nd
en
se
Desenvolvimento de Aplicações para WEB | Unidade D
Lendo um arquivo 
Lendo todo o conteúdo de um arquivo
Podemos ler um arquivo passando quantos bytes desejamos ler de cada vez. Para ler um arquivo inteiro de uma 
só vez, podemos

Continue navegando