Professional Documents
Culture Documents
02/02/11
16:53
Palhoa
UnisulVirtual
2011
linguagem_de_programacao_III.indb 1
04/02/11 11:14
Crditos
Universidade do Sul de Santa Catarina Campus UnisulVirtual Educao Superior a Distncia
Avenida dos Lagos, 41 Cidade Universitria Pedra Branca | Palhoa SC | 88137-900 | Fone/fax: (48) 3279-1242 e 3279-1271 | E-mail: cursovirtual@unisul.br | Site: www.unisul.br/unisulvirtual
Reitor Unisul
Ailton Nazareno Soares
Vice-Reitor
Sebastio Salsio Heerdt
Chefe de Gabinete da
Reitoria
Willian Mximo
Pr-Reitora Acadmica
Miriam de Ftima Bora Rosa
Pr-Reitor de Administrao
Fabian Martins de Castro
Pr-Reitor de Ensino
Mauri Luiz Heerdt
Campus Universitrio de
Tubaro
Diretora
Milene Pacheco Kindermann
Campus Universitrio da
Grande Florianpolis
Diretor
Hrcules Nunes de Arajo
Campus Universitrio
UnisulVirtual
Diretora
Jucimara Roesler
Equipe UnisulVirtual
Diretora Adjunta
Patrcia Alberton
linguagem_de_programacao_III.indb 2
Priscila da Silva
Rodrigo Battistotti Pimpo
(Secretria de Ensino)
(Secretria Acadmica)
Gerncia Administrativa e
Financeira
Renato Andr Luz (Gerente)
Naiara Jeremias da Rocha
Valmir Vencio Incio
Financeiro Acadmico
Marlene Schauer
Rafael Back
Vilmar Isaurino Vidal
Elaborao de Projeto e
Reconhecimento de Curso
Diane Dal Mago
Vanderlei Brasil
Extenso
Maria Cristina Veit (Coord.)
Pesquisa
Daniela E. M. Will
Ps-Graduao
Clarissa Carneiro Mussi (Coord.)
Biblioteca
Soraya Arruda Waltrick (Coord.)
Paula Sanhudo da Silva
Renan Felipe Cascaes
Rodrigo Martins da Silva
Gerncia de Desenho
e Desenvolvimento de
Materiais Didticos
Mrcia Loch (Gerente)
Acessibilidade
Vanessa de Andrade Manoel (Coord.)
Bruna de Souza Rachadel
Letcia Regiane Da Silva Tobal
Avaliao da aprendizagem
Lis Air Fogolari (coord.)
Gabriella Arajo Souza Esteves
Desenho Educacional
Carmen Maria Cipriani Pandini
(Coord. Ps)
Gerncia de Logstica
Andrei Rodrigues
Logstica de Encontros Presenciais
Graciele Marins Lindenmayr (Coord.)
Ana Paula de Andrade
Cristilaine Santana Medeiros
Daiana Cristina Bortolotti
Edesio Medeiros Martins Filho
Fabiana Pereira
Fernando Oliveira Santos
Fernando Steimbach
Marcelo Jair Ramos
Capacitao e Assessoria ao
Docente
Enzo de Oliveira Moreira (Coord.)
Adriana Silveira
Alexandre Wagner da Rocha
Cludia Behr Valente
Elaine Cristiane Surian
Juliana Cardoso Esmeraldino
Simone Perroni da Silva Zigunovas
Logstica de Materiais
Carlos Eduardo D. da Silva (Coord.)
Abrao do Nascimento Germano
Fylippy Margino dos Santos
Guilherme Lentz
Pablo Farela da Silveira
Rubens Amorim
Monitoria e Suporte
Enzo de Oliveira Moreira (Coord.)
Anderson da Silveira
Anglica Cristina Gollo
Bruno Augusto Zunino
Claudia Noemi Nascimento
Dbora Cristina Silveira
Gerncia de Produo
Gerncia de Marketing
04/02/11 11:14
Design instrucional
Flavia Lumi Matuzawa
Palhoa
UnisulVirtual
2011
linguagem_de_programacao_III.indb 3
04/02/11 11:14
741.6
L63
Inclui bibliografia.
linguagem_de_programacao_III.indb 4
04/02/11 11:14
Sumrio
Apresentao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Palavras do professor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9
Plano de estudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
UNIDADE 1 - Aspectos do desenvolvimento de aplicaes Web. . . . . . . . . 17
UNIDADE 2 - JavaScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
UNIDADE 3 - PHP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
UNIDADE 4 - Sistemas Web com banco de dados (PHP + MYSQL). . . . . . 203
UNIDADE 5 - Extensible Markup Language (XML). . . . . . . . . . . . . . . . . . . . . . 291
UNIDADE 6 - Asynchronous Javascript and XML (AJAX). . . . . . . . . . . . . . . . 347
Para concluir o estudo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
Referncias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
Sobre o professor conteudista. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
Respostas e comentrios das
atividades de autoavaliao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
Biblioteca Virtual. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461
linguagem_de_programacao_III.indb 5
04/02/11 11:14
linguagem_de_programacao_III.indb 6
04/02/11 11:14
Apresentao
Este livro didtico corresponde disciplina Linguagens de
Programao III.
O material foi elaborado visando a uma aprendizagem
autnoma e aborda contedos especialmente selecionados e
relacionados sua rea de formao. Ao adotar uma linguagem
didtica e dialgica, objetivamos facilitar seu estudo a
distncia, proporcionando condies favorveis s mltiplas
interaes e a um aprendizado contextualizado e eficaz.
Lembre-se que sua caminhada, nesta disciplina, ser
acompanhada e monitorada constantemente pelo Sistema
Tutorial da UnisulVirtual, por isso a distncia fica
caracterizada somente na modalidade de ensino que voc
optou para sua formao, pois, na relao de aprendizagem,
professores e instituio estaro sempre conectados com voc.
Ento, sempre que sentir necessidade, entre em contato,
pois voc tem disposio diversas ferramentas e canais de
acesso, como: telefone, e-mail e o Espao Unisul Virtual
de Aprendizagem, que o canal mais recomendado,
pois tudo o que for enviado e recebido fica registrado
para seu maior controle e sua comodidade. Nossa equipe
tcnica e pedaggica ter o maior prazer em atend-lo,
pois sua aprendizagem o nosso principal objetivo.
linguagem_de_programacao_III.indb 7
04/02/11 11:14
linguagem_de_programacao_III.indb 8
04/02/11 11:14
Palavras do professor
Caro desbravador do conhecimento,
O mundo tecnolgico imenso permanecendo em constante
expanso e evoluo. Por essa razo, o conhecimento e as
tcnicas de desenvolvimento de software seguem essa linha.
Linguagens nascem, envelhecem, algumas morrem outras
reestruturam-se e com novas tcnicas so reutilizadas. Assim
o aprendizado se torna constante, de tal forma que fora
o desenvolvedor a sempre procurar atualizar-se. A tcnica
permanece, mas a forma de escrita se altera.
A linguagem de programao nada mais que um dialeto
para que a mquina possa entender quais so as ordens que
ns damos. Assim como na vida real, uma ma uma ma
em qualquer lngua falada pelos homens. A programao no
diferente, j que uma varivel sempre ser uma varivel. A
forma de escrever o comando pode e deve se alterar, mas o
conceito o mesmo.
O desenvolvimento Web possui uma caracterstica
maravilhosa que nos leva sempre a utilizar diversas tcnicas e
linguagens para alcanar o melhor resultado. Nesta disciplina,
voc ver a ponta do iceberg. Voc ser tentado a desbravar
esse universo da programao Web. Desvendar seus segredos
submersos ser algo inesquecvel e onde voc poder construir
uma slida carreira em tecnologia.
Bom estudo!
Professor Edson O. Lessa Jr.
linguagem_de_programacao_III.indb 9
04/02/11 11:14
linguagem_de_programacao_III.indb 10
04/02/11 11:14
Plano de estudo
O plano de estudos visa a orient-lo no desenvolvimento da
disciplina. Ele possui elementos que o ajudaro a conhecer o
contexto da disciplina e a organizar o seu tempo de estudos.
O processo de ensino e aprendizagem na UnisulVirtual leva
em conta instrumentos que se articulam e se complementam,
portanto, a construo de competncias se d sobre a
articulao de metodologias e por meio das diversas formas de
ao/mediao.
So elementos desse processo:
O livro didtico.
Ementa
Pginas dinmicas. Conceitos de pginas do lado servidor e
cliente. Recursos do Active Server Page (ASP). Comandos
bsicos SQL. Introduo a PHP. Configurao de servidores
Web. Enquetes, frum, mecanismo de busca. Filtro e
totalizao de dados. Formulrios. Desenvolvimento de
aplicaes. Implementao de sites dinmicos e seus respectivos
testes, avaliao e manuteno.
linguagem_de_programacao_III.indb 11
04/02/11 11:14
Objetivos
Geral:
O desenvolvimento para Web requer uma ampla gama de
conhecimentos em ferramentas necessrias para aperfeioar o
resultado. Assim, podemos estudar tcnicas de desenvolvimento
para Web utilizando diversas ferramentas para alcanar o melhor
resultado possvel.
Especficos:
Carga Horria
A carga horria total da disciplina 120 horas/aula.
Contedo programtico/objetivos
Veja, a seguir, as unidades que compem o livro didtico desta
disciplina e os seus respectivos objetivos. Estes se referem aos
resultados que voc dever alcanar ao final de uma etapa de
estudo. Os objetivos de cada unidade definem o conjunto de
12
linguagem_de_programacao_III.indb 12
04/02/11 11:14
13
linguagem_de_programacao_III.indb 13
04/02/11 11:14
14
linguagem_de_programacao_III.indb 14
04/02/11 11:14
Atividades obrigatrias
15
linguagem_de_programacao_III.indb 15
04/02/11 11:14
linguagem_de_programacao_III.indb 16
04/02/11 11:14
unidade 1
Aspectos do desenvolvimento
de aplicaes Web
Objetivos de aprendizagem
Ao final do estudo desta unidade, importante que voc:
Sees de estudo
linguagem_de_programacao_III.indb 17
Seo 1
O ambiente
Seo 2
Seo 3
Caractersticas
Seo 4
Integrao de linguagens
Seo 5
Tecnologias
04/02/11 11:14
18
linguagem_de_programacao_III.indb 18
04/02/11 11:14
Seo 1 O ambiente
Todo o desenvolvimento Web realizado no ambiente da
internet, inclusive as aplicaes que so construdas para
serem utilizadas em redes privadas. Todas so regidas sobre as
vantagens e desvantagens que a internet proporciona.
A internet, nada mais que um grande conjunto de redes de
computadores interligadas pelo mundo inteiro, basicamente,
um conjunto de documentos. Ela foi criada por um grupo de
cientistas do CERN (European Laboratory for Particle Physics), na
Sua, com o intuito de facilitar a comunicao interna e externa.
Inicialmente, essa rede integrada continha dados os quais cada
equipamento deveria interpret-los individualmente. Ou seja,
no existia uma ferramenta que transformasse os dados em
informao padronizada. O primeiro a realizar essa tarefa foi o
Mosaic (primeiro navegador de grande aceitao no mercado).
O objetivo inicial era centralizar, em uma nica ferramenta, as
vrias tarefas necessrias para se obter as informaes disponveis
pela internet de forma integrada e visando conectividade
independentemente do tipo de mquina a ser utilizada. Para
manter essa multicompatibilidade, foi utilizado um conjunto
de protocolos e servios em comum, permitindo assim que
os usurios a ela conectados pudessem usufruir os servios de
informao de alcance mundial.
O HTML (Hyper Text Markup Language) a linguagem padro
da internet interpretada pelos browsers. Ela igualmente foi criada
pelo CERN tendo como seu principal responsvel Tim BernersLee. A motivao de Tim foi encontrar mais praticidade na
hora de escrever suas pginas. O HTML proporcionou algumas
vantagens, entre elas:
Unidade 1
linguagem_de_programacao_III.indb 19
19
04/02/11 11:14
20
linguagem_de_programacao_III.indb 20
04/02/11 11:14
Unidade 1
linguagem_de_programacao_III.indb 21
21
04/02/11 11:14
22
linguagem_de_programacao_III.indb 22
04/02/11 11:14
Unidade 1
linguagem_de_programacao_III.indb 23
23
04/02/11 11:14
linguagem_de_programacao_III.indb 24
04/02/11 11:14
Unidade 1
linguagem_de_programacao_III.indb 25
Protocolos TCP/IP um
conjunto de protocolos
de comunicao entre
computadores em rede.
25
04/02/11 11:14
Browser
(Usurio)
Servidor Web
Servidor Web
Browser
(Usurio)
26
linguagem_de_programacao_III.indb 26
04/02/11 11:14
Unidade 1
linguagem_de_programacao_III.indb 27
27
04/02/11 11:14
linguagem_de_programacao_III.indb 28
04/02/11 11:14
Unidade 1
linguagem_de_programacao_III.indb 29
29
04/02/11 11:14
a) Ubiquidade
A ubiquidade nada mais que a caracterstica de acessar a
aplicao de diversos locais para diversos dispositivos. Portanto,
para ter essa caracterstica comprovada, a aplicao Web necessita
estar disponvel rede. Entenda que, quando mencionado o
acesso rede, trata-se de rede domstica, corporativa ou mundial.
Hoje, com uso de dispositivos menores para acessar a rede,
possvel criar vises especficas para um determinado tipo de
dispositivo sem trocar a aplicao.
linguagem_de_programacao_III.indb 30
04/02/11 11:14
d) Equipes multidisciplinares
Os projetos Web so concebidos, normalmente, por profissionais
com conhecimentos abrangentes. Um projeto pequeno
desenvolvido por um nico profissional acaba por forar este
a aprimorar seus conhecimentos em design, banco de dados,
linguagem server-side e em linguagem client-side.
Assim, as aplicaes para Web formam profissionais com vises
abrangentes sobre a soluo em que est se pretendendo alcanar.
Ateno!
Essa ltima caracterstica pode se tornar um ponto
fraco, pois muitos profissionais acabam por manter
o foco em uma generalizao tamanha que lhes
acaba faltando, algumas vezes, conhecimentos mais
aprimorados sobre uma tecnologia.
Unidade 1
linguagem_de_programacao_III.indb 31
31
04/02/11 11:14
32
linguagem_de_programacao_III.indb 32
04/02/11 11:14
a) Linguagens Client-Sides
Client-sides caracterizam as linguagens que so interpretadas
pelo browser. Normalmente no fazem parte da regra de negcio
composta pelo projeto e possuem uma aplicabilidade de interao
imediata.
Linguagens client-sides so mais teis no realce do
aspecto visual da aplicao ou quando precisamos
de processos simples e rpidos sendo executados na
interface, como a validao dos dados digitados pelo
usurio.
CSS
HTML
XHTML
Javascript
AJAX
Microsoft Silverlight
Unidade 1
linguagem_de_programacao_III.indb 33
33
04/02/11 11:14
b) Linguagens Server-Sides
Este tipo de linguagem mantm em seu escopo as regras de
negcio da aplicao. Pelo fato de as linguagens Server-sides
serem executadas no servidor, todo o processamento da aplicao
recai sobre ela. Nessa camada se fazem as chamadas a banco de
dados e a arquivos de comunicao.
As linguagens server-sides j proveem mecanismos para
a implementao da parte lgica da aplicao, como os
algoritmos que executam os processos da camada de
negcio ou recursos auxiliares, como acesso a banco
de dados.
PHP
ASP
.NET
CGI, Perl
Python, Django
Smalltalk Seaside
ColdFusion
Lotus Domino
Websphere
linguagem_de_programacao_III.indb 34
04/02/11 11:14
Unidade 1
linguagem_de_programacao_III.indb 35
35
04/02/11 11:14
Seo 3 Usabilidade
J foi mencionado aqui sobre usabilidade, como ela vem
ganhando espao e cada vez mais utilizada em aplicaes Web.
Mas, afinal, o que a usabilidade?
Usabilidade uma caracterstica daquilo que utilizvel, funcional.
tornar bvio o bvio, tendo em conta as necessidades do utilizador e
o contexto em que este est inserido. Podemos relacionar usabilidade
com os seguintes verbos: simplificar, rentabilizar, otimizar, facilitar,
melhorar, acelerar. Mais usabilidade sinnimo de maior flexibilidade e
de maior interao com os usurios.
36
linguagem_de_programacao_III.indb 36
04/02/11 11:14
linguagem_de_programacao_III.indb 37
37
04/02/11 11:14
Figura 1.11 - Simulao do movimento dos olhos ao ler uma pgina Web.
Fonte: Elaborada pelo autor (2010).
linguagem_de_programacao_III.indb 38
04/02/11 11:14
Seo 4 HTML
HTML a linguagem padro de todos os browsers. Portanto,
fundamental que voc conhea e entenda muito bem esta
linguagem.
Os comandos HTML so representados no texto por meio de tags.
O browser interpreta como tags todos os elementos HTML vlidos
que estejam entre os sinais menor que (<) e maior que (>). Sua
sintaxe bsica :
<tag>Descrio</tag>
Unidade 1
linguagem_de_programacao_III.indb 39
39
04/02/11 11:14
linguagem_de_programacao_III.indb 40
04/02/11 11:14
Unidade 1
linguagem_de_programacao_III.indb 41
41
04/02/11 11:14
42
linguagem_de_programacao_III.indb 42
04/02/11 11:14
Unidade 1
linguagem_de_programacao_III.indb 43
43
04/02/11 11:14
44
linguagem_de_programacao_III.indb 44
04/02/11 11:14
Unidade 1
linguagem_de_programacao_III.indb 45
45
04/02/11 11:14
46
linguagem_de_programacao_III.indb 46
04/02/11 11:14
Unidade 1
linguagem_de_programacao_III.indb 47
47
04/02/11 11:14
listas no ordenadas;
listas descritivas.
48
linguagem_de_programacao_III.indb 48
04/02/11 11:14
<html>
<head>
<title>Teste de Lista no Ordenada</title>
</head>
<body>
<ul type=circle>
<li>Tpico 2</li>
<li>Tpico 3</li>
<li>Tpico 4</li>
</ul>
<ul type=disc>
<li>Tpico 2</li>
<li>Tpico 3</li>
<li>Tpico 4</li>
</ul>
<ul type=square>
<li>Tpico 2</li>
<li>Tpico 3</li>
<li>Tpico 4</li>
</ul>
</body>
</html>
Unidade 1
linguagem_de_programacao_III.indb 49
49
04/02/11 11:14
<ol type=A>
<li>Tpico 2</li><li>Tpico 3</li>
<li>Tpico 4</li>
</ol>
<ol type=i start=2>
<li>Tpico 2</li>
<li>Tpico 3</li>
<li>Tpico 4</li>
</ol>
<ol type=I>
<li>Tpico 2</li>
<li>Tpico 3</li>
<li>Tpico 4</li>
</ol>
</body>
</html>
50
linguagem_de_programacao_III.indb 50
04/02/11 11:14
linguagem_de_programacao_III.indb 51
51
04/02/11 11:14
52
linguagem_de_programacao_III.indb 52
04/02/11 11:14
Unidade 1
linguagem_de_programacao_III.indb 53
53
04/02/11 11:14
Atalhos teis:
ALT + ENTER insere outra linha dentro de uma clula (quando
ENTER no funciona na ltima clula de uma tabela).
CTRL + ENTER insere uma linha abaixo.
CTRL + ALT + E, R insere uma coluna esquerda ou direita.
Alm disso, tente fazer experincias com DEL, BACKSPACE, HOME, END
e ENTER em vrios pontos da tabela. Verifique os Atalhos do Teclado no
Office Online para descobrir outras funes de tabela que podem ser
executadas em um teclado.
</pre>
</body>
</html>
54
linguagem_de_programacao_III.indb 54
04/02/11 11:14
<html>
<head>
<title>Exemplo de Tabela</title>
</head>
<table>
<tr>
<td>Linha 1 Célula 1</td>
<td>Linha 1 Célula 2</td>
<td>Linha 1 Célula 3</td>
<td>Linha 1 Célula 4</td>
</tr>
<tr>
<td>Linha 2 Célula 1</td>
<td>Linha 2 Célula 2</td>
<td>Linha 2 Célula 3</td>
<td>Linha 2 Célula 4</td>
</tr>
<tr>
<td>Linha 3 Célula 1</td>
<td>Linha 3 Célula 2</td>
<td>Linha 3 Célula 3</td>
<td>Linha 3 Célula 4</td>
</tr>
</table>
<body>
</body>
</html>
Unidade 1
linguagem_de_programacao_III.indb 55
55
04/02/11 11:14
56
linguagem_de_programacao_III.indb 56
04/02/11 11:14
<html>
<head>
<meta http-equiv=Content-Type content=text/html; charset=utf-8>
<title>Atributos de clulas</title>
</head>
<body>
<table width=400 border=1>
<tr>
<td>Linha 1 Célula 1</td>
<td valign=bottom>Linha 1 Célula 2</td>
<td bgcolor=#FF0000>Linha 1 Célula 3</td>
<td>Linha 1 Célula 4</td>
</tr>
<tr>
<td valign=bottom>Linha 2 Célula 1</td>
<td valign=middle nowrap>Linha 2 Célula 2</td>
<td>Linha 2 Célula 3</td>
<td align=center>Linha 2 Célula 4</td>
</tr>
<tr>
<td width=20 height=20>Linha 3 Célula 1</td>
<td valign=top>Linha 3 Célula 2</td>
<td align=right>Linha 3 Célula 3</td>
<td>Linha 3 Célula 4</td>
</tr>
</table>
</body>
</html>
Unidade 1
linguagem_de_programacao_III.indb 57
57
04/02/11 11:14
<html>
<head>
<title>Tabela com atributos</title>
</head>
<body>
<table border=1 cellpadding=2 cellspacing=1 width=70%
height=50%>
<tr>
<td>Linha 1 Célula 1</td>
<td>Linha 1 Célula 2</td>
<td>Linha 1 Célula 3</td>
<td>Linha 1 Célula 4</td>
</tr>
<tr>
<td>Linha 2 Célula 1</td>
<td>Linha 2 Célula 2</td>
<td>Linha 2 Célula 3</td>
<td>Linha 2 Célula 4</td>
</tr>
<tr>
<td>Linha 3 Célula 1</td>
<td>Linha 3 Célula 2</td>
<td>Linha 3 Célula 3</td>
<td>Linha 3 Célula 4</td>
</tr>
</table>
</body>
</html>
J no browser fica:
58
linguagem_de_programacao_III.indb 58
04/02/11 11:14
Unidade 1
linguagem_de_programacao_III.indb 59
59
04/02/11 11:14
60
linguagem_de_programacao_III.indb 60
04/02/11 11:14
Unidade 1
linguagem_de_programacao_III.indb 61
61
04/02/11 11:14
62
linguagem_de_programacao_III.indb 62
04/02/11 11:14
linguagem_de_programacao_III.indb 63
63
04/02/11 11:14
<html>
<head>
<title>Teste formulário</title>
</head>
<body>
<form action=processa.asp method=POST>
<table>
<tr>
<th align=left Valign=top>Caixa de texto comum:</th>
<td><input type=text name=txtTexto size=20
maxlength=25></td>
</tr>
<tr>
<th>Texto protegido por senha:</th>
<td><input type=password name=pwsSenha size=6
maxlength=6></td>
</tr>
<tr>
<th>Botões de Radio:</th>
<td> Qual o seu time?
<input type=radio name=radOpcao value=F
checked=true>Flamengo
<input type=radio name=radOpcao value=V>Vasco</td>
</tr>
<tr>
<th>Checkboxes:</th>
<td> Que softwares você cohece?
<input type=checkbox name=word value=Sim> Word
<input type=checkbox name=excel value=Sim> Excel
64
linguagem_de_programacao_III.indb 64
04/02/11 11:14
O browser fica:
b) Elemento select
O elemento select trata-se de uma lista de itens que podem ser
selecionados pelo usurio. Esta seleo pode se dar de forma nica
ou mltipla, dependendo dos atributos que o elemento possa ter.
Unidade 1
linguagem_de_programacao_III.indb 65
65
04/02/11 11:14
<html>
<head>
<title>Teste formulrio select</title>
</head>
<body>
<form method=get name=formulario action=processa.asp>
<table>
<tr>
<th>Quais as linguagens voc j viu?</th>
<td><select name=linguagens size=5 multiple>
<option>CSS</option>
<option selected>HTML</option>
<option>XHTML</option>
<option>Javascript</option>
<option>Flash Action Script</option>
<option>Microsoft Silverlight</option>
<option>PHP</option>
<option>ASP</option>
<option>.NET</option>
<option>CGI, Perl</option>
<option>Java, J2EE, WebObjects</option>
<option>Python, Django</option>
<option>Ruby, Ruby on Rails</option>
<option>Smalltalk Seaside</option>
<option>ColdFusion</option>
66
linguagem_de_programacao_III.indb 66
04/02/11 11:14
</select>
</tr>
<tr>
<th>Qual seu estado civil</th>
<td><select name=estadoCivil>
<option>Casado</option>
<option selected>Solteiro</option>
<option>Divorciado</option>
<option>Vivo</option>
</select></td>
</tr>
</table>
</form>
</body>
</html>
Unidade 1
linguagem_de_programacao_III.indb 67
67
04/02/11 11:14
a) Elemento textarea
Trata-se de uma caixa de texto para serem digitadas vrias linhas
de dados. Este tipo de elemento utilizado quando o usurio
necessita digitar um grande volume de informao. Normalmente
com vrias linhas de texto. Os principais atributos so:
<html>
<head>
<title>Formulário TextArea</title>
<meta http-equiv=Content-Type content=text/html;
charset=iso-8859-1>
</head>
<body>
<table>
<tr>
<th>Digite seu comentário</th>
<td><textarea name=comentario rows=10 cols=30>Pode digitar
aqui!</textarea></td>
</tr>
<tr>
<td><input type=submit name=enviar value=Enviar></td>
<td><input type=reset name=limpar value=Limpar></td>
</tr>
</table>
</body>
</html>
68
linguagem_de_programacao_III.indb 68
04/02/11 11:14
Unidade 1
linguagem_de_programacao_III.indb 69
69
04/02/11 11:14
70
linguagem_de_programacao_III.indb 70
04/02/11 11:14
<html xmlns=http://www.w3.org/1999/xhtml>
<head>
<meta http-equiv=Content-Type content=text/html;
charset=iso-8859-1 />
<title>Mtodo Get</title>
</head>
<body>
<form action=Dadosget.asp method=get name=form1>
<table>
<tr>
<th>Marca :</th>
<td><input name=marca type=text id=marca value=/></td>
</tr>
<tr>
<th> Modelo:</th>
<td><input name=modelo type=text id=modelo value=/></
td>
</tr>
<tr>
<th> Combustvel :</th>
<td><input name=combustivel type=text id=combustivel
value=/></td>
</tr>
<tr>
<th> Cor :</th>
<td><input name=cor type=text id=cor value=/></td>
</tr>
<tr>
<th> Ano : </th>
<td><input name=ano type=text id=ano value= size=4 /></
td>
</tr>
<tr>
<td><input name=enviar type=submit id=enviar value=enviar
/></td>
<td><input name=limpar type=reset id=limpar value=limpar
/></td>
</tr>
</table>
</form>
</body>
</html>
Unidade 1
linguagem_de_programacao_III.indb 71
71
04/02/11 11:14
72
linguagem_de_programacao_III.indb 72
04/02/11 11:14
Ateno!
Por usar a url como meio de comunicao, existe um
limite de caracteres a serem enviados. A url aceita 255
caracteres no total. Quando voc for usar o mtodo
GET, voc tem de levar em considerao o endereo da
pgina e as variveis que voc est transmitindo.
b) Mtodo POST
O segundo mtodo de transmisso de informaes para
o servidor do HTML o POST. Este mtodo realiza o
encapsulamento dos elementos do formulrio diretamente no
corpo da pgina. Isso significa que toda a informao contida no
formulrio enviada como se fizesse parte do HTML esttico da
pgina.
Ateno: este mtodo no pode ser escrito via url.
A forma de se acessar ele utilizando o elemento form
com o atributo method=POST.
Unidade 1
linguagem_de_programacao_III.indb 73
73
04/02/11 11:14
<html xmlns=http://www.w3.org/1999/xhtml>
<head>
<meta http-equiv=Content-Type content=text/html;
charset=iso-8859-1 />
<title>Processamento dados Post</title>
</head>
<body>
<h2> Dados do Automvel: </h2>
<% Response.Write Marca : &Request.Form(marca) %><br>
<% Response.Write Modelo : &Request.Form(modelo) %><br>
<% Response.Write Combustvel: &Request.Form(combustivel)
%><br>
<% Response.Write Cor
: &Request.Form(cor) %><br>
<% Response.Write Ano
: &Request.Form(ano) %><br>
</body>
</html>
74
linguagem_de_programacao_III.indb 74
04/02/11 11:14
Ateno!
Todo o browser possui um tempo de espera da
resposta do servidor. Quando um processamento no
servidor for muito demorado, o browser interpretar
que a conexo com o servidor no existe mais e no
receber resposta. Assim sua aplicao ir gerar um
erro pelo simples fato de estar com um processamento
muito elevado.
Sntese
Durante esta unidade voc viu como possvel identificar
uma aplicao Web e como ela trabalha conceitualmente.
Voc estudou sobre a importncia do HTML e como utilizar
formulrios e seus atributos.
Percebeu que, apesar de o HTML ser uma linguagem simples,
possui diversas opes que apresentam variaes significativas.
Para finalizar, voc viu ainda que existem diversas linguagens
disponveis para o seu aprendizado, mas todas compartilham dos
mesmos conceitos aqui vistos.
Unidade 1
linguagem_de_programacao_III.indb 75
75
04/02/11 11:14
Atividades de autoavaliao
Ao final de cada unidade, voc ser provocado a realizar atividades de
autoavaliao. O gabarito est disponvel no final do livro-didtico. Mas se
esforce para resolver as atividades sem ajuda do gabarito, pois assim voc
estar estimulando a sua aprendizagem.
1) Voc viu diversas utilidades para as aplicaes Web. Cite e comente
duas vantagens e duas desvantagens de uma aplicao Webtop.
( )
PostgreSQL
2 Linguagem Client-side
( )
HTML
( )
Oracle
( )
SQLite
( )
Javascript
( )
Microsoft Silverlight
( )
PHP
( )
MySQL
( )
ASP
( )
DB2
( )
.NET
( )
CGI
( )
Perl
( )
Java
76
linguagem_de_programacao_III.indb 76
04/02/11 11:14
( )
CSS
( )
Python
( )
( )
Ruby
( )
Firebird
( )
ColdFusion
( )
Websphere
( )
Flash
Saiba mais
Se voc desejar, aprofunde os contedos estudados nesta unidade
ao consultar as seguintes referncias:
W3Schools. W3Schools Online Web Tutorials, 2010.
Disponvel em: <www.w3schools.com/>. Acesso em: 01 mar.
2010.
W3C. World Wide Web Consortium, 2010. Disponvel em:
<www.w3.org/>. Acesso em: 2 mar. 2010.
77
linguagem_de_programacao_III.indb 77
04/02/11 11:14
linguagem_de_programacao_III.indb 78
04/02/11 11:14
unidade 2
JavaScript
Objetivos de aprendizagem
Ao final do estudo desta unidade, importante que voc:
Sees de estudo
linguagem_de_programacao_III.indb 79
Seo 1
JavaScript aplicado
Seo 2
Tipos de dados
Seo 3
Elementos de linguagem
Seo 4
Scripts JS
04/02/11 11:14
linguagem_de_programacao_III.indb 80
04/02/11 11:14
linguagem_de_programacao_III.indb 81
81
04/02/11 11:14
Ateno!
Nunca utilize mtodos em objetos que no o
contenham, caso contrrio causar erro no script.
82
linguagem_de_programacao_III.indb 82
04/02/11 11:14
<html>
<head>
<title>Teste</title>
<script language=javascript type=text/javascript src=tetse.js>
</script>
</head>
<body>
...
</body>
</html>
linguagem_de_programacao_III.indb 83
83
04/02/11 11:14
84
linguagem_de_programacao_III.indb 84
04/02/11 11:14
// Comentrio de linha
/* Comentrio de bloco, mas apenas utilizando uma linha */
/*
Comentrio de bloco utilizando vrias linhas. Qualquer comando escrito
dentro do bloco ignorado pelo interpretador. Inclusive o comando de
abertura de bloco /* ou ainda o comentrio de linha //
Todas as informaes so ignoradas.
*/
Unidade 2
linguagem_de_programacao_III.indb 85
85
04/02/11 11:14
86
linguagem_de_programacao_III.indb 86
04/02/11 11:14
linguagem_de_programacao_III.indb 87
87
04/02/11 11:14
23
2e10
3.98733
8990.09889
0.0999898
88
linguagem_de_programacao_III.indb 88
04/02/11 11:14
a) Variveis
As variveis no JavaSscript podem ser de dois tipos: variveis
globais e variveis locais. Ambas podem suportar quaisquer
tipos de valores. Porm, o que diferencia o escopo e a forma de
declarao da varivel.
A varivel local para ser declarada deve ser antec edida pela
palavra reservada var. Essa declarao pode ser feita a qualquer
Unidade 2
linguagem_de_programacao_III.indb 89
89
04/02/11 11:14
90
linguagem_de_programacao_III.indb 90
04/02/11 11:14
linguagem_de_programacao_III.indb 91
91
04/02/11 11:14
92
linguagem_de_programacao_III.indb 92
04/02/11 11:14
Unidade 2
linguagem_de_programacao_III.indb 93
93
04/02/11 11:14
94
linguagem_de_programacao_III.indb 94
04/02/11 11:14
Unidade 2
linguagem_de_programacao_III.indb 95
95
04/02/11 11:14
96
linguagem_de_programacao_III.indb 96
04/02/11 11:14
Descrio
charAt(ndice)
charCodeAt(ndice)
indexOf(string_
busca, ndice_
opcional)
lastIndexOf(string_
busca, ndice_
opcional)
Unidade 2
linguagem_de_programacao_III.indb 97
97
04/02/11 11:14
Mtodo
Descrio
split(string_separador,
limite_opcional)
substring(incio, fim)
toLowerCase()
toUpperCase()
98
linguagem_de_programacao_III.indb 98
04/02/11 11:14
document.write(str.length+ caracteres);
</script>
<h3>Mtodo IndexOf</h3>
<h6>Este exemplo verifica se uma string (varivel de texto)
contm uma determinada palavra. Se a palavra for
encontrada ser indicada a posio em que foi localizado o seu
primeiro caractere.<br />
<b>Nota:</b> A posio do primeiro caractere da string 0, no 1. </
h6>
<script type=text/javascript>
var str=No h nada melhor que uma cervejinha gelada na sexta
noite.;
var pos=str.indexOf(cervejinha );
if (pos>=0) {
document.write(a palavra cervejinha foi encontrada na
posio: );
} else{
document.write(pos + <br>);
</script>
<h3>Mtodo Match</h3>
<h6>Este exemplo verifica se uma palavra (que neste
caso gelada) est contida na string. Se estiver
ela ser devolvida.</h6>
<script type=text/javascript>
var str=No h nada melhor que uma cervejinha gelada na sexta
noite.;
document.write(str.match(gelada));
</script>
<h3> Mtodo substring</h3>
Unidade 2
linguagem_de_programacao_III.indb 99
99
04/02/11 11:14
<script type=text/javascript>
var str=No h nada melhor que uma cervejinha gelada na sexta
noite.;
document.write(str.substring(27,31) = +str.substring(27,31));
document.write(<br>);
document.write(str.substring(27,36)=+str.substring(27,36));
</script>
<h3>Converte para Maiuscula e Minscula</h3>
<script type=text/javascript>
document.write(str.toLowerCase());
document.write(<br>);
document.write(str.toUpperCase());
</script>
</body>
</html>
Fonte: JavaScript e HTML Dinmico (2007).
100
linguagem_de_programacao_III.indb 100
04/02/11 11:14
Descrio
getDate()
getDay()
getMonth()
getFullYear()
getYear()
getHours()
getMinutes()
getSeconds()
getMilliseconds()
getTime()
getTimezoneOffset()
getUTCDate()
getUTCDay()
getUTCMonth()
getUTCFullYear()
Unidade 2
linguagem_de_programacao_III.indb 101
101
04/02/11 11:14
Mtodo
Descrio
getUTCHours()
getUTCMinutes()
getUTCSeconds()
getUTCMilliseconds()
setDate(dia_ms)
setFullYear(ano)
setHours(horas)
setMilliseconds(milisegundos)
setMinutes(minutos)
setMonth(ms)
setSeconds(segundos)
setTime(data_numrica)
setYear(ano)
setUTCDate(dia_ms)
setUTCDay(dia_semana)
setUTCMonth(ms)
102
linguagem_de_programacao_III.indb 102
04/02/11 11:14
Mtodo
Descrio
setUTCFullYear(ano)
setUTCHour(horas)
setUTCMinutes(minutos)
setUTCSeconds(segundos)
setUTCMilliseconds(milisegu
ndos)
toGMTString()
toLocaleString()
toUTCString()
Unidade 2
linguagem_de_programacao_III.indb 103
103
04/02/11 11:14
</script>
<h3>Obter a hora marcada pelo relgio do seu computador</h3>
<script type=text/javascript>
document.write(d.getHours()+ horas );
document.write(d.getMinutes()+ minutos );
document.write(d.getSeconds()+ segundos);
</script>
<h3>Criar uma data com um valor predefinido</h3>
<script type=text/javascript>
104
linguagem_de_programacao_III.indb 104
04/02/11 11:14
document.write(<br><br>);
</script>
<h3>Estabelecer o ano para uma data</h3>
<script type=text/javascript>
d.setFullYear(1998);
document.write(d.toLocaleString());
</script>
<h3>Escrever a data completa com os nomes do dia e do ms</h3>
<script type=text/javascript>
document.write(s);
</script>
</body>
</html>
Fonte: JavaScript e HTML Dinmico (2007).
Unidade 2
linguagem_de_programacao_III.indb 105
105
04/02/11 11:14
106
linguagem_de_programacao_III.indb 106
04/02/11 11:14
Unidade 2
linguagem_de_programacao_III.indb 107
107
04/02/11 11:14
108
linguagem_de_programacao_III.indb 108
04/02/11 11:14
Unidade 2
linguagem_de_programacao_III.indb 109
109
04/02/11 11:14
110
linguagem_de_programacao_III.indb 110
04/02/11 11:14
Descrio
length
Mtodo
Descrio
join()
reverse()
sort()
Unidade 2
linguagem_de_programacao_III.indb 111
111
04/02/11 11:14
<tr>
<th colspan=2>Ordenar Strings</th>
<th colspan=2>Ordenar Nmero</th>
<tr>
<td width=140><b>Ordem normal</b></td>
<td><b>Ordem alfabtica</b></td>
<td width=140><b>Ordem normal</b></td>
<td><b>Ordem alfabtica</b></td>
</tr>
<td>
<script type=text/javascript>
for (var i=0; i<6; i++)
document.write(fruta[i] + <br>)
</script>
</td>
<td>
<script type=text/javascript>
// Agora ordenamos o Array por ordem alfabtica invocando o
// mtodo sort()
fruta.sort()
for (var i=0; i<6; i++)
document.write(fruta[i] + <br>)
</script>
</td>
<td>
<script type=text/javascript>
<!-for (var i=0; i<6; i++)
document.write(numeros[i] + <br>)
// -->
112
linguagem_de_programacao_III.indb 112
04/02/11 11:14
</script>
</td>
<td>
<script type=text/javascript>
<!-// Agora ordenamos o Array por ordem alfabtica invocando o
//mtodo sort()
numeros.sort()
for (var i=0; i<6; i++)
document.write(numeros[i] + <br>)
// -->
</script>
</td>
</tr>
</table>
</body>
</html>
linguagem_de_programacao_III.indb 113
113
04/02/11 11:14
b. Operadores
Os operadores so instrues utilizadas em expresses para
valid-las ou calcul-las. H dois tipos de operadores: lgicos
e aritmticos. Os operadores lgicos so aqueles destinados
a realizar comparaes entre expresses. Normalmente essas
comparaes esto associadas aos laos de condicionais e os de
repetio. Os operadores mais usados so:
Tabela 3 Operadores lgicos.
Operador
Descrio
&& ou AND
|| ou OR
OU
! ou NOT
NO
>
Maior que
<
Menor que
>=
Maior ou igual
<=
Menor ou igual
Atribuio
==
Igualdade
===
!=
Diferente
114
linguagem_de_programacao_III.indb 114
04/02/11 11:14
<html>
<head>
<title>Teste</title>
<script language=javascript type=text/javascript>
var exemplo1= A;
if (exemplo1==A) {
alert(A condio verdadeira);
} else {
alert(A condio falsa);
}
</script>
</head>
<body>
...
</body>
</html>
Descrio
Adio
Subtrao
Multiplicao
Diviso
Resto da diviso
Unidade 2
linguagem_de_programacao_III.indb 115
115
04/02/11 11:14
c. Lao de deciso
O lao de deciso no JavaScript representado pela instruo if.
Essa instruo permite executar um bloco de cdigo apenas se for
verdadeira uma determinada condio. Caso a condio no seja
verdadeira, esse bloco de cdigo no ser executado, podendo ser
ou no executado outro cdigo alternativo, que ser especificado
por meio da instruo else.
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>
<html xmlns=http://www.w3.org/1999/xhtml>
<head>
<meta http-equiv=Content-Type content=text/html; charset=utf-8
/>
<title>Exemplo de lao de deciso</title>
</head>
<body>
<script type=text/javascript language=javascript>
function verifica(campo) {
116
linguagem_de_programacao_III.indb 116
04/02/11 11:14
</script>
<form name=form id=form>
Est chovendo?
<p>
<label>
<input type=radio name=chuva value=s id=chuva_0
onchange=verifica(document.form.chuva)/>
Sim</label>
<br />
<label>
<input type=radio name=chuva value=n id=chuva_1
onchange=verifica(document.form.chuva)/>
<br />
</p>
<input type=button name=consultar value=Consultar
onclick=verifica(document.form.chuva)/>
</form>
</body>
</html>
Unidade 2
linguagem_de_programacao_III.indb 117
117
04/02/11 11:14
118
linguagem_de_programacao_III.indb 118
04/02/11 11:14
switch (campocor) {
case azul:
break;
case vermelho:
break;
case verde:
break;
case amarelo:
break;
default :
break;
}
</script>
<body>
<form name=form action= method=get>
Unidade 2
linguagem_de_programacao_III.indb 119
119
04/02/11 11:14
120
linguagem_de_programacao_III.indb 120
04/02/11 11:14
d. Laos de repetio
Os laos de repetio caracterizam-se por repetir um bloco
de instruo um nmero finito de vezes. O bloco utiliza o
delimitador de funo {} para definir o escopo do trabalho.
Caso este seja omitido, a primeira linha seguinte instruo ser
a nica dentro do lao.
Um dos laos mais utilizados o lao for. Esse lao caracterizase por utilizar um contador numrico para limitar o nmero de
iteraes. Ainda possui um conjunto de trs expresses contidas
entre parntesis, separadas pelo caractere ponto e vrgula e pelo
cdigo a executar em cada um dos laos.
A primeira das expresses do lao for declara a varivel para
utilizar como ndice inicializando-a. A segunda expresso declara
uma condio que deve ser testada sempre que se inicia uma nova
iterao. Se essa condio resultar em false, o lao ir parar e o cdigo
definido abaixo no voltar a ser executado. A terceira expresso
serve para atualizar o valor do ndice no final de cada ciclo.
Unidade 2
linguagem_de_programacao_III.indb 121
121
04/02/11 11:14
O resultado no browser :
122
linguagem_de_programacao_III.indb 122
04/02/11 11:14
valor = parseInt(valor);
Unidade 2
linguagem_de_programacao_III.indb 123
123
04/02/11 11:14
function validarFormulario(campo){
textoCampo = campo.value;
textoCampo = validarEntero(textoCampo);
campo.value = textoCampo;
var resultado=0;
resultado=resultado+(inteiro*repeticoes);
result.value=resultado;
}
</script>
<body>
<form method=post name=form1>
Digite um nmero inteiro
<input type=text name=inteiro value= onkeyup=validarFormular
io(this) style=text-align:right;/>
<br />
Escolha o nmero de repeties voc deseja
<select name=repeticoes onchange=repete(this,document.form1.
inteiro,document.form1.resultado)>
<option value= selected> </option>
<option value=1>UM</option>
<option value=2>DOIS</option>
124
linguagem_de_programacao_III.indb 124
04/02/11 11:14
<option value=3>TRS</option>
</select>
<br />
Resultado da operao acumulada de (Repetio * Inteiro)<br>
<input type= text name=resultado value= style=text-align:right;
readonly=true />
</form>
</body>
</html>
Unidade 2
linguagem_de_programacao_III.indb 125
125
04/02/11 11:14
i++;
}
</script>
</body>
</html>
126
linguagem_de_programacao_III.indb 126
04/02/11 11:14
Unidade 2
linguagem_de_programacao_III.indb 127
127
04/02/11 11:14
i++;
}
i = 0;
do {
document.write(Intruo do..while executada contador vale: +i+,
condio atendida<br>);
i++
} while (i<8)
document.write(Quando a condio no atendida<br>Os laos so
executados novamente neste exemplo.<br>);
document.write(Porm a varivel no zerada, vejamos como se
comporta<br><br>);
// Condio NO atendida
while (i<8) {
document.write(Intruo while executada +i+ vez, condio NO
atendida<br>);
128
linguagem_de_programacao_III.indb 128
04/02/11 11:14
i++;
}
do {
document.write(Intruo do..while executada vale: +i+, condio
NO atendida<br>);
i++
} while (i<8)
</script>
</body>
</html>
Unidade 2
linguagem_de_programacao_III.indb 129
129
04/02/11 11:14
e. Funes
Uma funo um bloco de cdigo que necessita ser chamado
para executar uma determinada operao. Em JavaScript, esse
artifcio amplamente utilizado, j que a maior utilizao dessa
linguagem a interao com o usurio.
As funes possuem uma declarao de nome e uma delimitao
de bloco por meio do caractere {}. O bloco pode conter uma
infinidade de instrues para execuo de seu cdigo. O retorno
de informaes opcional e deve ser feito pela instruo return.
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>
<html xmlns=http://www.w3.org/1999/xhtml>
<head>
<meta http-equiv=Content-Type content=text/html; charset=utf-8
/>
<title>Exemplo de Funo sem argumento</title>
</head>
<script type=text/javascript language=javascript>
function testefuncao() {
return A funo foi chamada;
}
</script>
<body>
<h1>Vejamos um teste de funo sem argumento!</h1>
<script type=text/javascript language=javascript>
document.write(testefuncao());
</script>
</body>
</html>
linguagem_de_programacao_III.indb 130
04/02/11 11:14
Unidade 2
linguagem_de_programacao_III.indb 131
131
04/02/11 11:14
function autosoma(valor) {
var soma=0;
do {
soma += valor;
valor--;
} while (valor>0)
return soma;
}
function atribuircampo(campovalor, camporetorno) {
camporetorno.value = autosoma(parseInt(campovalor.value));
}
</script>
<body>
<h1>Funo com argumento fixo</h1>
<form name=form method=get>
Digite um nmero:
<input type=text name=txt_valor id=txt_valor value=
align=right />
<input type=button name=btn_calcular value=Calcular
onclick=atribuircampo(document.form.txt_valor , document.form.
txt_resultado)/><br /><br />
Resultado: <input type=text name=txt_resultado id=txt_
resultado value= readonly=readonly />
</form>
</body>
</html>
132
linguagem_de_programacao_III.indb 132
04/02/11 11:14
Unidade 2
linguagem_de_programacao_III.indb 133
133
04/02/11 11:14
linguagem_de_programacao_III.indb 134
04/02/11 11:14
e. Eventos
Como em outras linguagens, o Javascript possui manipulao
de eventos. Esses eventos so as aes e as reaes que executam
um determinado procedimento. Os eventos so quaisquer aes
iniciadas pelo usurio (clicar em determinada rea da pgina, por
exemplo) e normalmente so utilizados para realizar as chamadas
das funes Javascript.
A utilizao do evento feita como um atributo de uma tag
HTML. A sintaxe feita da seguinte forma:
<tag Evento=chamada javascript>
Unidade 2
linguagem_de_programacao_III.indb 135
135
04/02/11 11:14
MANIPULADOR
DESCRIO
Blur
onBlur
Change
onChange
Click
onClick
Focus
onFocus
Load
onLoad
Unload
onUnload
MouseOver
onMouseOver
Select
onSelect
Submit
onSubmit
MouseDown
onMouseDown
MouseMove
onMouseMove
MouseOut
onMouseOut
MouseUp
onMouseUp
KeyDown
onKeyDown
KeyPress
onKeyPress
KeyUp
onKeyUp
136
linguagem_de_programacao_III.indb 136
04/02/11 11:14
Unidade 2
linguagem_de_programacao_III.indb 137
137
04/02/11 11:14
Seo 4 Scripts JS
Nesta seo, vamos utilizar o JS na prtica, realizando algumas
validaes de campos. Assim, poderemos ver como utilizar o JS
na sua principal funo.
Voc j viu um exemplo para validar um campo somente
numrico. Podemos comear ento acrescentando uma mscara
para um campo de valores, como um campo de fone:
<html>
<head>
<meta http-equiv=Content-Type content=text/html; charset=utf-8
/>
<title>Mascara de fone</title>
<script language=javascript type=text/javascript>
function mascarafone(objeto) {
var aux;
aux = ( + objeto.value.substr(0,2) + );
aux += objeto.value.substr(2,4)+- + objeto.value.substr(6,4);
objeto.value = aux;
</script>
</head>
<body>
<form name=form1>
<input type=text onblur=mascarafone(this);>
</form>
</body>
</html>
138
linguagem_de_programacao_III.indb 138
04/02/11 11:14
var resp=
if ((elementos[i].getAttribute(type)==text)&&
(elementos[i].getAttribute(obrigatorio)==S) &&
Unidade 2
linguagem_de_programacao_III.indb 139
139
04/02/11 11:14
(elementos[i].value==)) {
//style o objeto referente aos estilos CSS, neste caso
estamos trocando a cor de fundo
elementos[i].style.backgroundColor = #ffffcc;
resp+=O campo +elementos[i].getAttribute(descr) +
obrigatorio.\n;
if (resp!=) {
alert(resp);
return false;
return true;
}
</script>
</head>
<body>
<!-- usar o return na chamada deste evento significa que se retornar false
o browser entende que houve algum problema e no continuar. Se for
true, no h problema algum em continuar.-->
<form id=form1 name=form1 method=post action=www.google.
com.br onsubmit=return valida(this);>
<p>Nome:
<label>
<input type=text name=nome id=nome obrigatorio=S
descr=O nome deve ser preenchido />
</label>
</p>
<p>Apelido:
<label>
<input type=text name=apelido id=apelido />
</label>
140
linguagem_de_programacao_III.indb 140
04/02/11 11:14
</p>
<p> Ano de nascimento
<input name=ano type=text id=ano maxlength=4
obrigatorio=S descr=Ano deve ter especificamente 4 caracteres />
</p>
<p>
<label>
<input type=submit name=button id=button value=Enviar />
</label>
</p>
</form>
</body>
</html>
Unidade 2
linguagem_de_programacao_III.indb 141
141
04/02/11 11:14
142
linguagem_de_programacao_III.indb 142
04/02/11 11:14
//charAt o mtodo que retornar um caractere da posio
indicada. Lembrando que o nmero da posio contado da esquerda
para direita e inicia com 0.
//esta parte do cdigo responsvel pela separao do inteiro e
do decimal
if ((objTextBox.value.charAt(i) != 0) && (objTextBox.value.charAt(i) !=
SeparadorDecimal)) break;
}
aux = ;
for(; i < len; i++) {
if (strCheck.indexOf(objTextBox.value.charAt(i))!=-1) aux +=
objTextBox.value.charAt(i);
Unidade 2
linguagem_de_programacao_III.indb 143
143
04/02/11 11:14
len = aux.length;
//este bloco adiciona zeros para os primeiros nmeros decimais
digitados
if (len == 0) objTextBox.value = ;
if (len == 1) objTextBox.value = 0+ SeparadorDecimal + 0 + aux;
if (len == 2) objTextBox.value = 0+ SeparadorDecimal + aux;
}
return false;
}
</script>
<body>
Exemplo de utilizao:
<form>
144
linguagem_de_programacao_III.indb 144
04/02/11 11:14
Valor R$:
<input type=text name=valor onKeyPress=return(MascaraMoeda(t
his,.,,,event)) style=text-align:right;>
</form>
</body>
</html>
Unidade 2
linguagem_de_programacao_III.indb 145
145
04/02/11 11:14
Sntese
O JavaScript uma linguagem orientada a objetos, porm
possui recursos limitados que so predefinidos pela prpria
linguagem. O JavaScript procura transformar todo o contedo
HTML em objeto, para assim simplificar a sua manipulao.
Toda a estrutura de variveis segue essa linha de objetos, porm
a construo da aplicao com essa linguagem feita utilizando
a forma estruturada. Esse mtodo simplifica a construo e o
entendimento. As variveis podem ser do tipo string (caractere),
date (data), array (cadeia de variveis), int (inteiro) ou boolean
(lgico). Cada qual herda os mtodos e a propriedade respectiva
de seus objetos. As funes so amplamente utilizadas por causa
de a linguagem ser utilizada para interagir com o usurio. Os
eventos existentes proporcionam um leque razovel de opes
para interagir com as aes dos usurios.
Atividades de autoavaliao
Ao final de cada unidade, voc ser desafiado a realizar atividades de
autoavaliao. O gabarito est disponvel no final do livro-didtico.
Esforce-se para resolver as atividades sem ajuda do gabarito, pois assim
voc estar estimulando a sua aprendizagem.
1. Faa um script para validar um formulrio que contenha nome,
endereo, nome da me, idade e e-mail. Os campos obrigatrios
so nome, nome da me, idade e e-mail. Valide a idade para aceitar
somente inteiros positivos e entre 10 e 120 anos. O e-mail deve ser
validado de tal forma que deve conter o caractere @ e pelo menos um
ponto aps o @. Publique sua resposta na ferramenta Exposio do
EVA.
2. Crie um formulrio que contenha um elemento textarea. Voc deve
utilizar esse elemento para inserir informaes em uma tag div por
meio do JavaScript. Publique o script na ferramenta exposio do EVA.
146
linguagem_de_programacao_III.indb 146
04/02/11 11:14
Saiba mais
Se voc desejar, aprofunde os contedos estudados nesta unidade
ao consultar as seguintes referncias:
Cdigo Fonte, 2010. Disponvel em <http://codigofonte.uol.com.
br/artigos/javascript-dhtml>. Acesso em: 01 mar. 2010.
Truquese Dicas: Tutoriais de Javascript, 2010. Disponvel em
<www.truquesedicas.com/tutoriais/javascript>. Acesso em: 2 mar.
2010.
jsfromhell.com JavaScript Repository, 2010. Disponvel em:
<http://jsfromhell.com/>. Acesso em: 15 mar. 2010.
Unidade 2
linguagem_de_programacao_III.indb 147
147
04/02/11 11:14
linguagem_de_programacao_III.indb 148
04/02/11 11:14
unidade 3
PHP
Objetivos de aprendizagem
Ao final do estudo desta unidade, importante que voc:
Sees de estudo
linguagem_de_programacao_III.indb 149
Seo 1
Viso geral
Seo 2
Variveis e constantes
Seo 3
Operadores
Seo 4
Estruturas de controle
Seo 5
04/02/11 11:14
150
linguagem_de_programacao_III.indb 150
04/02/11 11:14
Unidade 3
linguagem_de_programacao_III.indb 151
151
04/02/11 11:14
152
linguagem_de_programacao_III.indb 152
04/02/11 11:14
<td>
<input name=txtmouse type=text id=txtmouse value=
maxlength=3/>
</td>
</tr>
<tr>
<td><label for=txtteclado> Teclado</label></td>
<td><input name=txtteclado type=text id=txtteclado value=
maxlength=3 /></td>
</tr>
<tr>
<td><label for=txtfone> Fone </label></td>
<td><input name=txtfone type=text id=txtfone value=
maxlength=3 /></td>
</tr>
</table> <p>
<input type=submit name=sbtenviar id=sbtenviar
value=Enviar />
<input type=reset name=sbtlimpar id=sbtlimpar
value=Limpar />
</p>
</form>
</body>
</html>
Unidade 3
linguagem_de_programacao_III.indb 153
153
04/02/11 11:14
154
linguagem_de_programacao_III.indb 154
04/02/11 11:14
<th scope=col>Quantidade</th>
</tr>
<tr>
<th scope=row>Mouse</th>
<td><?php echo @$_POST[txtmouse];?></td>
</tr>
<tr>
<th scope=row>Teclado</th>
<td><?=@$_POST[txtteclado]?></td>
</tr>
<tr>
<th scope=row>Fone</th>
<td><?=@$_POST[txtfone]?></td>
</tr>
</table>
<?php
} else {
?>
<h1> ERRO INFORMAES NO VALIDADAS!</h1>
<?php
}
?>
<a href=javascript:window.history.back(-1);>Voltar</a>
</body>
</html>
Unidade 3
linguagem_de_programacao_III.indb 155
155
04/02/11 11:14
156
linguagem_de_programacao_III.indb 156
04/02/11 11:14
/*
Autor: Jos da Silva
Modificado para melhorar o desempenho em 01 de maro
*/
Unidade 3
linguagem_de_programacao_III.indb 157
157
04/02/11 11:14
a. Tipo de dados
As variveis so classificadas pelos tipos de dados que elas podem
armazenar. Os tipos mais comuns so:
158
linguagem_de_programacao_III.indb 158
04/02/11 11:14
Unidade 3
linguagem_de_programacao_III.indb 159
159
04/02/11 11:14
echo <ul>;
if (is_array($tipos))
else
echo <li>.$valor.</li>\n;
echo <li>.$tipos.</li>\n;
echo </ul>;
$posicao[1]=primiero valor;
$posicao[3]=segundo valor;
foreach ($posicao as $indice => $valor)
160
linguagem_de_programacao_III.indb 160
04/02/11 11:14
linguagem_de_programacao_III.indb 161
161
04/02/11 11:14
162
linguagem_de_programacao_III.indb 162
04/02/11 11:14
Unidade 3
linguagem_de_programacao_III.indb 163
163
04/02/11 11:14
teste dadoas;
164
linguagem_de_programacao_III.indb 164
04/02/11 11:14
?>
</body>
</html>
O browser mostrar:
Unidade 3
linguagem_de_programacao_III.indb 165
165
04/02/11 11:14
</head>
<body>
<?php
$var = 76;
echo $var.<br />;
$var = (float) $var;
echo $var.<br />;
$var = 74.234;
echo $var.<br />;
$var = (int) $var;
echo $var.<br />;
?>
</body>
</html>
O resultado do exemplo :
166
linguagem_de_programacao_III.indb 166
04/02/11 11:14
Unidade 3
linguagem_de_programacao_III.indb 167
167
04/02/11 11:14
O resultado ser:
168
linguagem_de_programacao_III.indb 168
04/02/11 11:14
b. Literais
Podemos abrir um espao para explicar o uso das literais. As
literais so string brutas, ou seja, no sofrem alterao. Elas esto
contidas basicamente entre aspas ou apstrofo. Porm, o PHP
interpreta um pouco diferente dependendo do tipo de smbolo
usado.
Vejamos a literal com apstrofo: ela fora o interpretador do PHP
a ler quase todos os caracteres como literal. A exceo o uso
da contra barra antecedendo o apstrofo, assim ele interpreta o
prprio apstrofo:
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>
<html xmlns=http://www.w3.org/1999/xhtml>
<head>
<meta http-equiv=Content-Type content=text/html; charset=utf-8
/>
<title>Literal com apstrofo</title>
</head>
<body>
<?php
$teste=banana;
echo Literal completa;
echo <br>;
echo Interpreta a varivel $teste.;
echo <br>;
Unidade 3
linguagem_de_programacao_III.indb 169
169
04/02/11 11:14
?>
</body>
</html>
O browser interpreta:
170
linguagem_de_programacao_III.indb 170
04/02/11 11:14
<body>
<?php
$teste=banana;
echo Literal completa;
echo <br>;
echo Interpreta a varivel $teste.;
echo <br>;
O browser mostrar:
Unidade 3
linguagem_de_programacao_III.indb 171
171
04/02/11 11:14
c. Variveis predefinidas
O PHP possui uma grande gama de variveis predefinidas para
qualquer script que ele execute. Elas auxiliam para a recuperao
de informaes importantes como de formulrio, transferncia de
arquivo, cookies, entre outros.
As variveis predefinidas mais utilizadas so:
$_GET: recupera informaes do formulrio HTML.
$_POST: recupera informaes do formulrio HTML.
$_FILE: utilizada quando existe um upload de
arquivos, assim o PHP pode acessar todas as informaes
pertinentes a este arquivo.
$_SESSION: utilizada para registrar e recuperar
variveis de sesso.
$_COOKIE: possui todas as informaes registradas em
cookie. Assim, possvel recuperar suas informaes.
As variveis $_GET, $_POST, $_FILE e $_SESSION ficam
disponveis enquanto a sesso permanecer ativa. A varivel $_
COOKIE independe da sesso.
Cookies so arquivos que contm informaes trocadas
entre o browser e o servidor Web. A principal funo
manter a persistncia das sees do protocolo HTTP.
Os cookies possuem um tempo de vida, no so
permanentes. Eles so muito utilizados para manter um
perfil do usurio a uma determinada pgina. Eles so
vulnerveis, mas no representam risco de segurana
ou privacidade ao usurio.
172
linguagem_de_programacao_III.indb 172
04/02/11 11:14
d. Escopo de variveis
O PHP tem por definio que o escopo a abrangncia em que
a varivel pode ser acessada em um script. O escopo pode ser
definido em trs nveis bsicos no PHP, so eles:
<?php
$var1=0;
Funcao teste() {
Global $var1;
(...)
}
?>
Unidade 3
linguagem_de_programacao_III.indb 173
173
04/02/11 11:14
e. Constantes
As constantes so elementos de programao que no sofrem
variao durante o software. Elas so usadas para manter
informaes padres como configuraes e elementos que no
sofrem variao. No PHP as constantes podem ser representadas
pela funo define e teramos:
define(SIMBOLOMOEDA,R);
define(DTINSTALACAO,2009-05-01);
define(COEFICIENTE,3.8);
e. Data
O PHP no possui um tipo de dados que seja data. Na realidade,
uma data no PHP uma string. Porm, existem funes
especficas que auxiliam no tratamento das datas.
A funo date formata uma data e hora local conforme os
parmetros utilizados.
<?
echo date(d/m/Y);
?>
174
linguagem_de_programacao_III.indb 174
04/02/11 11:14
<?php
echo date(d/m/Y H:i:s, mktime(13, 32, 12, 12, 32, 1997));
?>
Voc pode encontrar outras funes de datas no
endereo <http://www.php.net/manual/pt_BR/ref.
datetime.php>.
Seo 3 Operadores
Operadores so smbolos responsveis pelas manipulaes de
valores e variveis nas linguagens. J vimos alguns operadores em
alguns exemplos. Muitos j so de conhecimento comum. Alguns
operadores podem aceitar um, dois ou trs argumentos, porm o
mais comum utilizar operador que aceitam dois operadores.
a. Operadores de caractere
possvel utilizar o operador de concatenao para unir strings
e formar um resultado de forma que se estabelea um padro
semelhante ao da adio de nmeros. Observe:
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>
<html xmlns=http://www.w3.org/1999/xhtml>
<head>
<meta http-equiv=Content-Type content=text/html; charset=utf-8
/>
<title>Operador de Caracter</title>
</head>
Unidade 3
linguagem_de_programacao_III.indb 175
175
04/02/11 11:14
<body>
<?php
$parte1=Universidade do ;
$parte2=Sul de ;
$resultado=$parte1.$parte2.Santa Catarina;
echo $resultado;
?>
</body>
</tml>
O resultado ser:
b. Operadores aritmticos
Os operadores aritmticos esto na categoria dos operadores
bsicos das linguagens de programao. Eles so simplesmente os
operadores responsveis pelas manipulaes matemticas.
176
linguagem_de_programacao_III.indb 176
04/02/11 11:14
Nome
Exemplo
Adio
$a + $b
Subtrao
$a - $b
Multiplicao
$a * $b
Diviso
$a / $b
%
Mdulo
Fonte: PHP e MySQL desenvolvimento Web.
$a % $b
Unidade 3
linguagem_de_programacao_III.indb 177
177
04/02/11 11:14
O resultado ser:
c. Operadores de atribuio
O operador de atribuio bsico representado pelo smbolo de
= e sempre deve ser referido como configurado ou definido
como. Em outras palavras, a varivel $a definida como
nove. Essa definio deve ser feita para no confundir com os
operadores de comparao.
178
linguagem_de_programacao_III.indb 178
04/02/11 11:14
Utilizao
Equivalente a
+=
$a += $b
$a = $a + $b
-=
$a -= $b
$a = $a - $b
*=
$a *= $b
$a = $a * $b
/=
$a /= $b
$a = $a / $b
%=
$a %= $b
$a = $a % $b
.=
$a .= $b
$a = $a . $b
<body>
<?php
$a = 3;
$a += 5; // configura $a para 8, como se dissssemos: $a = $a + 5;
echo $a;
echo <br>;
Unidade 3
linguagem_de_programacao_III.indb 179
179
04/02/11 11:14
$b = Bom ;
$b .= Dia!; // configura $b para Bom Dia!, como em $b = $b . Dia!;
echo $b;
echo <br>;
$a=23;
$b=3;
$a += $b;
echo Adio: $a<br>;
$a -= $b;
echo Subtrao: $a<br>;
$a *= $b;
echo Multiplicao: $a<br>;
$a /= $b;
echo Diviso: $a<br>;
$a %= $b;
echo Mdulo ou resto: $a<br>;
?>
</body>
</html>
180
linguagem_de_programacao_III.indb 180
04/02/11 11:14
O resultado:
d. Operadores de comparao
Como o prprio nome j diz, esses operadores tem a finalidade
de comparar valores. Os elementos que utilizam esses operadores
retornam um valor lgico (verdadeiro ou falso):
Tabela 6 Operadores de comparao.
Operador
Nome
Exemplo
==
Igual a
$a == $b
===
Idntico
$a === $b
!=
No igual
$a != $b
<>
No igual
$a <> $b
<
Menor que
$a < $b
>
Maior que
$a > $b
<=
$a <= $b
>=
Maior que ou igual a
Fonte: PHP e MySQL desenvolvimento Web.
Unidade 3
linguagem_de_programacao_III.indb 181
$a >= $b
181
04/02/11 11:14
<body>
<?php
$a=3;
$b=3;
</body>
</html>
182
linguagem_de_programacao_III.indb 182
04/02/11 11:14
O resultado:
linguagem_de_programacao_III.indb 183
183
04/02/11 11:14
Nome
Efeito
++$a
Pr-incremento
$a++
Ps-incremento
--$a
Pr-decremento
$a--
Ps-decremento
184
linguagem_de_programacao_III.indb 184
04/02/11 11:14
$a++;
echo A varivel \$a vale finalmente: $a<br>;
$b=56;
echo A varivel \$b vale inicialmente: $b<br>;
--$b;
echo A varivel \$b vale agora: $b<br>;
$b--;
echo A varivel \$b vale finalmente: $b<br>;
?>
</body>
</html>
Resultando em:
Unidade 3
linguagem_de_programacao_III.indb 185
185
04/02/11 11:14
f. Operadores lgicos
Os operadores lgicos tm a finalidade de combinar expresses
de operadores lgicos. Desta forma, possibilita que vrias
combinaes sejam feitas dentro da mesma estrutura.
Tabela 8 Operadores lgicos.
Operador
Nome
Utilizao
Resultado
NO
!$b
&&
$a && $b
Retorna verdadeiro se $a e
$b forem verdadeiros; caso
contrrio falso
||
OU
$a || $b
Retorna verdadeiro se $a ou $b
ou ambos forem verdadeiros
AND
$a and $b
OR
OU
$a or $b
186
linguagem_de_programacao_III.indb 186
04/02/11 11:14
Unidade 3
linguagem_de_programacao_III.indb 187
187
04/02/11 11:14
<?php
$a=23;
if ($a>=18) {
echo Idade: $a;
echo <BR>;
echo maior de idade<BR>;
if ($a<21)
echo Voc no maior de 21 anos<BR>;
else
echo Voc maior de 21 anos<BR>;
echo Fim do processo;
} else {
echo Idade: $a;
echo <BR>;
echo menor de idade;
}
?>
188
linguagem_de_programacao_III.indb 188
04/02/11 11:14
case 1 :
echo um;
break;
case 2 :
Unidade 3
linguagem_de_programacao_III.indb 189
189
04/02/11 11:14
echo dois;
break;
case 3 :
echo trs;
break;
case 4 :
echo quatro;
break;
default :
echo padro;
break;
}
?>
190
linguagem_de_programacao_III.indb 190
04/02/11 11:14
<?php
echo exemplo 1 <br>\n;
$i = 1;
while ($i <= 10) {
echo ++$i.\n<br>\n;
}
echo <br>exemplo 2 <br>;
$i = 1;
while ($i <= 10):
echo $i.\n<br>\n;
$i++;
endwhile;
?>
linguagem_de_programacao_III.indb 191
191
04/02/11 11:14
f. Funes
Funes so trechos de cdigos destinados a executar uma tarefa
especfica. Qualquer cdigo PHP pode ser escrito dentro de
funes. Lembre-se que a varivel de retorno no necessita ser
declarada. Porm, recomendado que voc documente qual valor
e tipo est sendo retornado em uma funo.
Qualquer funo possui a capacidade de retornar um valor,
porm no obrigatrio. Uma funo pode existir apenas para
executar determinados cdigos e no interagir com o restante do
programa. O PHP aceita que somente uma varivel ou constante
seja retornada por uma funo. Mas a varivel poder ser um
array.
192
linguagem_de_programacao_III.indb 192
04/02/11 11:14
Argumento default.
}
function retorno() {
Unidade 3
linguagem_de_programacao_III.indb 193
193
04/02/11 11:14
for ($i=0;$i<count($vetor);$i++)
$var1 += 5;
}
function argumentoreferencia (&$var1,$var2) {
$var1 += 5;
}
simples();
echo <br />;
echo retorno();
echo <br />;
echo <strong>Argumentos por cpia</strong><br />;
$argumento1=10;
$argumento2=Segundo;
$argumento3[0]=Banana;
$argumento3[1]=Ma;
194
linguagem_de_programacao_III.indb 194
04/02/11 11:14
$argumento3[2]=Morango;
$argumento3[3]=Melo;
$argumento1=45;
$argumento2=Dois;
echo Os valores dos argumentos antes de encaminhar a funo so:
$argumento1, $argumento2<br />;
argumentoreferencia ($argumento1,$argumento2);
echo Aps a funo ser executada apenas a varivel por referncia ter
seu valor alterado: $argumento1, $argumento2<br />;
echo <br />;
Unidade 3
linguagem_de_programacao_III.indb 195
195
04/02/11 11:14
196
linguagem_de_programacao_III.indb 196
04/02/11 11:14
Fopen
A funo fopen responsvel por abrir um URL. Ou seja,
informando um endereo o PHP tentar encontrar qual o
protocolo resolver a URL. Assim como interpreta que a abertura
de um arquivo fsico uma forma de protocolo.
A sintaxe dessa funo :
fopen(url,mode)
Unidade 3
linguagem_de_programacao_III.indb 197
197
04/02/11 11:14
mode
Descrio
r+
w+
a+
x+
Fwhite
A funo fwrite responsvel em escrever no arquivo aberto.
Essa uma das principais funes dentro da categoria de
manipulao de arquivos. Com ela podemos imprimir todas as
informaes necessrias dentro um arquivo especificado.
198
linguagem_de_programacao_III.indb 198
04/02/11 11:14
<?php
$filename = teste.txt;
$conteudo = Acrescentar isso ao arquivo\n;
// Primeiro vamos ter certeza de que o arquivo existe e pode ser alterado
if (is_writable($filename)) {
} else {
}
// Escreve $conteudo no nosso arquivo aberto.
if (fwrite($handle, $conteudo) === FALSE) {
exit;
}
echo Sucesso: Escrito ($conteudo) no arquivo ($filename);
fclose($handle);
?>
Unidade 3
linguagem_de_programacao_III.indb 199
199
04/02/11 11:14
Fgets
O fgets a funo de leitura de uma linha. Ou seja, com ela
lemos uma linha inteira e acrescentamos a uma varivel. Uma
vez na varivel podemos interpretar e manipular a informao
conforme a necessidade.
<?php
//para este exemplo necessrio que o arquivo arquivodeentrada.txt
exista no mesmo diretrio que o script est salvo
if ($arquivo = @fopen(arquivodeentrada.txt, r)) {
$contador=1;
} else {
}
?>
200
linguagem_de_programacao_III.indb 200
04/02/11 11:14
Sntese
Neste captulo voc ser apresentado linguagem serve-side
PHP. O PHP uma linguagem simples de ser desenvolvida
em funo da sua estrutura. Tanto possvel utilizar tcnicas
avanadas como orientao a objetos quanto simplificar o
desenvolvimento utilizando uma programao estruturada.
Como era de se esperar, o interpretador extremamente
dinmico. No necessrio se preocupar com declaraes de
variveis. O PHP se encarrega de interpretar o tipo de dados
a ser trabalhado. J quanto aos vetores, possui um leque de
opes que supre praticamente quaisquer necessidades que nos
deparemos.
Ainda oferece a possibilidade de trabalhar com arquivos de uma
forma simples. Os arquivos so muito utilizados como relatrios
e comunicao de dados de uma forma off-line, ou seja, a
comunicao no se d em tempo real.
Atividades de autoavaliao
Ao final de cada unidade, voc ser provocado a realizar atividades de
autoavaliao. O gabarito est disponvel no final do livro-didtico. Mas se
esforce para resolver as atividades sem ajuda do gabarito, pois assim voc
estar estimulando a sua aprendizagem.
1. Faa um script para validar um formulrio utilizando a linguagem PHP. O
formulrio deve conter nome, endereo, nome da me, idade e e-mail.
Faa uma pgina de resposta para que o PHP leia e escreva na pgina
o resultado do formulrio. A idade deve ser superior a dois anos e o
e-mail deve ser validado.
Unidade 3
linguagem_de_programacao_III.indb 201
201
04/02/11 11:14
Saiba mais
Se voc desejar, aprofunde os contedos estudados nesta unidade
ao consultar as seguintes referncias:
Manual PHP, 2010. Disponvel em <http://br2.php.net/manual/
pt_BR/index.php>. Acesso em: 5 abr. 2010.
PHP Brasil, 2010. Disponvel em <www.phpbrasil.com>. Acesso
em: 5 abr. 2010.
Truquese Dicas Tutoriais de Javascript, 2010. Disponvel em
<www.truquesedicas.com/tutoriais/php/index.htm>. Acesso em:
2 mar. 2010.
202
linguagem_de_programacao_III.indb 202
04/02/11 11:14
unidade 4
Sees de estudo
linguagem_de_programacao_III.indb 203
Seo 1
Banco de dados
Seo 2
Seo 3
Seo 4
API do PHP
Seo 5
Seo 6
Sesses e cookies
04/02/11 11:14
204
linguagem_de_programacao_III.indb 204
04/02/11 11:14
Modelo relacional
O modelo relacional ainda o principal modelo utilizado hoje
em dia, mesmo tendo sido criado na dcada de 1970. Como j
foi comentado, o sistema gerenciador de banco de dados utiliza o
armazenamento de dados em tabelas que possuem relaes entre si.
Assim, a ideia do modelo relacional que os dados correlatos
devem estar contidos na mesma tabela e utilizamos
relacionamentos entre tabelas para agruparmos dados menos
correlatos.
Considere este exemplo: um cadastro de clientes deve-se
ter as informaes pessoais de cada cliente, porm,
nesta mesma tabela, acrescentar as informaes de
endereo torna-se redundante. Por causa disso, criamos
uma segunda tabela com os endereos comuns (rua,
CEP, bairro, cidade, estado). Na tabela cliente, apenas
informamos a referncia do endereo, e no todo ele.
Unidade 4
linguagem_de_programacao_III.indb 205
205
04/02/11 11:14
MySQL
O MySQL um banco de dados SQL multiusurio e multithreading (executa eventos em paralelo).
Normalmente os sistemas que utilizam o MySQL no possuem
um grande volume de informaes. Ele acaba sendo utilizado em
todo o seu potencial para aplicaes com baixo a mdio volume
de dados.
O MySQL utilizado em diversos sistemas e tem como
caractersticas marcantes estabilidade e agilidade nas operaes.
Hoje, possui controle de transao, suporte a procedure, entre
outras funcionalidades, e utiliza como base o modelo relacional
de gerenciamento de dados e sua linguagem padro o SQL.
Ainda mantm uma caracterstica que o tornou popular:
facilidade de gerenciamento.
O MySQL possui algumas particularidades que facilitam
o desenvolvimento de aplicaes. Perceba que, alm das
informaes comuns do SQL, como NOT NULL ou
PRIMARY KEY, ao final do comando existem algumas
206
linguagem_de_programacao_III.indb 206
04/02/11 11:14
Storage engines
Storage engine refere-se ao tipo de armazenamento que o banco
de dados utilizar. No so todos os banco de dados que podem
alterar o tipo de armazenamento conforme a necessidade. O
MySQL permite voc alterar esse tipo de armazenamento para
cada tabela criada. Portanto, podemos escolher qual a melhor
forma de armazenamento para cada aplicao a ser desenvolvida.
Voc pode estar se questionando: para que mudar o
tipo de armazenamento? Simplesmente para adequar
a realidade do problema.
Unidade 4
linguagem_de_programacao_III.indb 207
207
04/02/11 11:14
208
linguagem_de_programacao_III.indb 208
04/02/11 11:14
Unidade 4
linguagem_de_programacao_III.indb 209
209
04/02/11 11:14
InnoDB
O InnoDB foi desenvolvido para obter o mximo de performance
ao processar grande volume de dados e usado na produo de
vrios sites com banco de dados grandes e que necessitam de alto
desempenho.
Este storage prov o MySQL com um mecanismo de
armazenamento seguro com transaes com commit, rollback e
recuperao em caso de falhas. O InnoDB faz bloqueio a nvel
de registro e tambm fornece uma leitura sem bloqueio em
SELECT em um estilo consistente com Oracle. Esses recursos
aumentam a performance e a concorrncia de multiusurios.
InnoDB o primeiro gerenciador de armazenamento no MySQL
que suporta restries FOREIGN KEY.
Tecnicamente, InnoDB um banco de dados completo colocado
sob o MySQL. InnoDB tem sua prpria rea de buffer para
armazenar dados e ndices na memria principal. InnoDB
armazena suas tabelas e seus ndices em uma tablespace, o qual
pode consistir de vrios arquivos. Isso diferente, por exemplo,
de tabelas MyISAM, em que cada tabela armazenada como
um arquivo separado. Tabelas InnoDB podem ser de qualquer
tamanho, mesmo em sistemas operacionais em que o sistema de
arquivo limitado a 2 GB.
MyISAM
As tabelas MyISAM possuem algumas caractersticas que podem
auxiliar na soluo do problema. Voc pode compactar tabelas
MyISAM para utilizar menos espao. Voc pode INSERIR
novas linhas em uma tabela que no tenha blocos livres no meio
210
linguagem_de_programacao_III.indb 210
04/02/11 11:14
Unidade 4
linguagem_de_programacao_III.indb 211
211
04/02/11 11:14
linguagem_de_programacao_III.indb 212
04/02/11 11:14
Descrio
big5_bin
binary
Binrio
cp1250 (Windows Central European)
cp1250_bin
cp1250_croatian_ci
cp1250_czech_cs
cp1250_general_ci
cp1250_polish_ci
Unidade 4
linguagem_de_programacao_III.indb 213
213
04/02/11 11:14
Collation
Descrio
cp852 (DOS Central European)
cp852_bin
cp852_general_ci
cp866_bin
Russo, Binrio
cp866_general_ci
latin1_bin
latin1_danish_ci
latin1_general_ci
latin1_general_cs
latin1_german1_ci
latin1_german2_ci
latin1_spanish_ci
latin1_swedish_ci
latin2_bin
latin2_croatian_ci
latin2_czech_cs
latin2_general_ci
latin2_hungarian_ci
latin5_bin
Turco, Binrio
latin5_turkish_ci
latin7_estonian_cs
214
linguagem_de_programacao_III.indb 214
04/02/11 11:14
Collation
Descrio
latin7_general_ci
latin7_general_cs
macce_bin
macce_general_ci
macroman_bin
macroman_general_
ci
sjis_bin
Japons, Binrio
sjis_japanese_ci
swe7_bin
Suco, Binrio
swe7_swedish_ci
utf8_bin
utf8_czech_ci
utf8_danish_ci
utf8_esperanto_ci
utf8_estonian_ci
utf8_general_ci
utf8_hungarian_ci
utf8_icelandic_ci
utf8_latvian_ci
utf8_lithuanian_ci
utf8_persian_ci
utf8_polish_ci
utf8_roman_ci
Unidade 4
linguagem_de_programacao_III.indb 215
215
04/02/11 11:14
Collation
Descrio
utf8_romanian_ci
utf8_slovak_ci
utf8_slovenian_ci
utf8_spanish2_ci
utf8_spanish_ci
utf8_swedish_ci
utf8_turkish_ci
utf8_unicode_ci
Fonte: <http://www.mysql.com>.
Criando usurio
Um fator importante para o desenvolvimento Web a segurana
dos seus dados. Vale a pena ressaltar que, por causa da arquitetura
da Web, o sistema fica mais exposto a pessoas mal intencionadas.
Por isso, uma ateno segurana empregada fundamental.
O MySQL usa o comando Grant para criar e conceder privilgios
para os usurios. Esse procedimento importante para que
possamos aumentar a segurana da aplicao. O MySQL no
valida somente o login e a senha, mas tambm o endereo
de onde se est conectando. Assim, mesmo que algum mal
intencionado descubra o login e a senha, ele somente poder
utilizar pelo servidor que ela est configurada. Para ser mais
claro, vamos observar o registro de login do usurio do MySQL.
A sintaxe completa do comando :
216
linguagem_de_programacao_III.indb 216
04/02/11 11:14
1. Nvel global
Neste nvel, os privilgios so aplicados a todos os bancos de
dados de um servidor. Podem ser concedidos com o comando
GRANT ALL ON *.* e revogados com o comando REVOKE
ALL ON *.*.
Unidade 4
linguagem_de_programacao_III.indb 217
217
04/02/11 11:14
218
linguagem_de_programacao_III.indb 218
04/02/11 11:14
Privilgios
Descrio
ALL [PRIVILEGES]
ALTER
CREATE
DELETE
DROP
EXECUTE
FILE
INDEX
INSERT
LOCK TABLES
PROCESS
REFERENCES
Para o futuro.
RELOAD
REPLICATION CLIENT
REPLICATION SLAVE
SELECT
SHOW DATABASES
SHUTDOWN
SUPER
UPDATE
USAGE
GRANT OPTION
Unidade 4
linguagem_de_programacao_III.indb 219
219
04/02/11 11:14
linguagem_de_programacao_III.indb 220
04/02/11 11:14
Unidade 4
linguagem_de_programacao_III.indb 221
221
04/02/11 11:14
222
linguagem_de_programacao_III.indb 222
04/02/11 11:14
ou
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] nome_tabela [(]LIKE
nome_antigo_tabela[)];
definio_create:
nome_coluna tipo [NOT NULL | NULL] [DEFAULT valor_padro] [AUTO_
INCREMENT]
[[PRIMARY] KEY] [COMMENT string] [definio_referncia]
| [CONSTRAINT [symbol]] PRIMARY KEY (index_col_name,...)
| KEY [nome_indice] (index_nome_coluna,...)
| INDEX [nome_indice] (index_nome_coluna,...)
| [CONSTRAINT [symbol]] UNIQUE [INDEX] [index_name] (index_col_
name,...)
| FULLTEXT [INDEX] [nome_indice] (index_nome_coluna,...)
| [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_
name,...)
[definio_referncia]
| CHECK (expr)
Unidade 4
linguagem_de_programacao_III.indb 223
223
04/02/11 11:14
tipo:
TINYINT[(tamanho)] [UNSIGNED] [ZEROFILL]
| SMALLINT[(tamanho)] [UNSIGNED] [ZEROFILL]
| MEDIUMINT[(tamanho)] [UNSIGNED] [ZEROFILL]
| INT[(tamanho)] [UNSIGNED] [ZEROFILL]
| INTEGER[(tamanho)] [UNSIGNED] [ZEROFILL]
| BIGINT[(tamanho)] [UNSIGNED] [ZEROFILL]
| REAL[(tamanho,decimais)] [UNSIGNED] [ZEROFILL]
| DOUBLE[(tamanho,decimais)] [UNSIGNED] [ZEROFILL]
| FLOAT[(tamanho,decimais)] [UNSIGNED] [ZEROFILL]
| DECIMAL(tamanho,decimais) [UNSIGNED] [ZEROFILL]
| NUMERIC(tamanho,decimais) [UNSIGNED] [ZEROFILL]
| CHAR(tamanho) [BINARY | ASCII | UNICODE]
| VARCHAR(tamanho) [BINARY]
| DATE
| TIME
| TIMESTAMP
| DATETIME
| TINYBLOB
| BLOB
| MEDIUMBLOB
| LONGBLOB
| TINYTEXT
| TEXT
| MEDIUMTEXT
| LONGTEXT
| ENUM(value1,value2,value3,...)
| SET(value1,value2,value3,...)
index_nome_coluna:
224
linguagem_de_programacao_III.indb 224
04/02/11 11:14
definio_referncia:
REFERENCES nome_tabela [(index_nome_coluna,...)]
[MATCH FULL | MATCH PARTIAL]
[ON DELETE opo_referncia]
[ON UPDATE opo_referncia]
opo_referncia:
RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT
opes_tabela:
table_option [table_option] ...
opes_tabela:
ENGINE = {BDB | HEAP | ISAM | InnoDB | MERGE | MRG_MYISAM | MYISAM }
| AUTO_INCREMENT = #
| AVG_ROW_LENGTH = #
| CHECKSUM = {0 | 1}
| COMMENT = string
| MAX_ROWS = #
| MIN_ROWS = #
| PACK_KEYS = {0 | 1 | DEFAULT}
| PASSWORD = string
| DELAY_KEY_WRITE = {0 | 1}
| ROW_FORMAT = { DEFAULT | DYNAMIC | FIXED | COMPRESSED }
| RAID_TYPE = { 1 | STRIPED | RAID0 } RAID_CHUNKS=# RAID_CHUNKSIZE=#
| UNION = (table_name,[table_name...])
| INSERT_METHOD = { NO | FIRST | LAST }
| DATA DIRECTORY = caminho absluto para o diretrio
| INDEX DIRECTORY = caminho absluto para o diretrio
| DEFAULT CHARACTER SET character_set_name [COLLATE collation_name]
Unidade 4
linguagem_de_programacao_III.indb 225
225
04/02/11 11:14
linguagem_de_programacao_III.indb 226
04/02/11 11:14
linguagem_de_programacao_III.indb 227
227
04/02/11 11:14
linguagem_de_programacao_III.indb 228
04/02/11 11:14
linguagem_de_programacao_III.indb 229
229
04/02/11 11:14
230
linguagem_de_programacao_III.indb 230
04/02/11 11:14
Primary Key
PRIMARY KEY uma chave nica (KEY) onde todas as
colunas-chave devem ser definidas como NOT NULL. Se elas
no forem explicitamente declaradas como NOT NULL, isso
ser feito implicitamente e sem aviso. No MySQL, a chave
chamada PRIMARY. Uma tabela pode ter apenas uma
PRIMARY KEY. Se voc no tiver uma PRIMARY KEY
e alguma aplicao perguntar pela PRIMARY KEY em sua
tabela, o MySQL retornar primeira chave UNIQUE, que no
possui nenhuma coluna NULL, como a PRIMARY KEY.
Uma PRIMARY KEY pode ser um ndice multicoluna. Porm,
voc no pode criar um ndice multicoluna usando o atributo
de chave PRIMARY KEY em uma especificao de coluna.
Fazendo assim apenas colunas simples podero ser marcadas
como primrias. Voc deve utilizar uma clusula PRIMARY
KEY(index_nome_coluna, ...) separada.
Unidade 4
linguagem_de_programacao_III.indb 231
231
04/02/11 11:14
linguagem_de_programacao_III.indb 232
04/02/11 11:14
linguagem_de_programacao_III.indb 233
233
04/02/11 11:14
nom_autor
Fulano de Tal
Outro Autor
234
linguagem_de_programacao_III.indb 234
04/02/11 11:14
Unidade 4
linguagem_de_programacao_III.indb 235
235
04/02/11 11:14
cod_livro
nom_livro
nom_autor
MySQL
Fulano de Tal
PHP
Fulano de Tal
236
linguagem_de_programacao_III.indb 236
04/02/11 11:14
<?php
$con = mysql_connect($host, $user, $pass);
mysql_select_db($dbnome);
$query = select * from tabela;
$qry = mysql_query($query, $con);
While ( $row = mysql_fetch_assoc($qry) {
echo $row[primeiroNome];
echo $row[segundoNome];
}
mysql_free_result($qry);
mysql_close($con);
?>
Unidade 4
linguagem_de_programacao_III.indb 237
237
04/02/11 11:14
238
linguagem_de_programacao_III.indb 238
04/02/11 11:14
Conexo
O PHP possui conexes nativas com diversos bancos de dados.
O MySQL foi uma das primeiras API a ser desenvolvida. Desta
forma, no necessita de uma configurao para acessar o banco.
Basta que o endereo do servidor do banco de dados tenha
permisso para conexo.
O comando para realizar esse procedimento o mysql_connect.
mysql_connect(servidor,login,senha);
Unidade 4
linguagem_de_programacao_III.indb 239
239
04/02/11 11:14
mysql_select_db(prg3,$con);
240
linguagem_de_programacao_III.indb 240
04/02/11 11:14
<html>
<head>
<title>Relao de Livrarias</title>
</head>
<body>
<h1><strong>Relao de Livrarias</strong></h1>
<?php
// a conexo com o servidor bando de dados realizada
$link = mysql_connect(localhost,web,123);
// o banco de dados selecionado
mysql_select_db(prg3);
?>
<!-Montamos a tabela em HTML para montar o relatrio
-->
<table border=1 cellspacing=0 cellpadding=0 style=bordercollapse:collapse;border:none>
<tr>
<td width=81 valign=top style=border-top:solid black 1.0pt;
border-left:none;border-bottom:solid black 1.0pt;border-right:none;
padding:0cm 5.4pt 0cm 5.4pt>
<b>Cdigo</b>
</td>
<td width=579 valign=top style=border-top:solid black 1.0pt;
border-left:none;border-bottom:solid black 1.0pt;border-right:none;
padding:0cm 5.4pt 0cm 5.4pt>
<b>Nome</b>
Unidade 4
linguagem_de_programacao_III.indb 241
241
04/02/11 11:14
</td>
</tr>
<?php
// controle utilizado no HTML 4.0 para alternar a cor da tabela do HTML
$fundo=white;
/*
este lao de repetio executado enquanto existirem registros a serem
recuperados
a funo mysql_fetch_array retona os registro do banco e atriibui um
vetor de resultado
*/
while ($relacao = mysql_fetch_array($result)) {
if ($fundo==white) {
$fundo=silver;
} else {
$fundo=white;
?>
<tr>
<td width=81 valign=middle style=border:none; borderbottom:solid black 1.0pt; background:<?=$fundo?>; padding:0cm 5.4pt
0cm 5.4pt>
<!-- vetor de resposta da relao
-->
<b><?=$relacao[cod_livraria]; ?></b>
</td>
<td width=579 valign=top style=border:none; border-bottom:solid
black 1.0pt; background:<?=$fundo?>;padding:0cm 5.4pt 0cm 5.4pt>
<?=$relacao[nom_livraria]; ?>
</td>
</tr>
<?php
242
linguagem_de_programacao_III.indb 242
04/02/11 11:14
}
?>
</table>
</body>
</html>
linguagem_de_programacao_III.indb 243
243
04/02/11 11:14
244
linguagem_de_programacao_III.indb 244
04/02/11 11:14
<?php
/* O comando include no est sendo utilizado, neste momento est
sendo usada a atribuio direta de variveis. Mas, neste caso, voltamos
ao problema inicial das variveis de segurana estarem abertas na
pgina.
*/
$user=web;
$pass=123;
$serv=localhost;
$bd=prg3;
// a conexo com o servidor bando de dados realizada
$link = mysql_connect($serv, $user, $pass);
// o banco de dados selecionado
mysql_select_db($bd);
// a consulta montada e encaminhada ao servidor
$result= mysql_query(select cod_livraria, nom_livraria from livrarias);
?>
Tratamento de erros
Vamos continuar com o mesmo exemplo e increment-lo um
pouco mais, acrescentando um tratamento de erros de alguns
nveis como mensagem personalizada e o prprio erro do banco
de dados.
Unidade 4
linguagem_de_programacao_III.indb 245
245
04/02/11 11:14
<?php
/* continuando com o comando include
*/
include(variaveis.bd);
246
linguagem_de_programacao_III.indb 246
04/02/11 11:14
} else {
?>
<!-Montamos a tabela em HTML para montar o relatrio
-->
Unidade 4
linguagem_de_programacao_III.indb 247
247
04/02/11 11:14
<b>Código</b>
</td>
<b>Nome</b>
</td>
</tr>
<?php
// controle utilizado no HTML 4.0 para alternar a cor da tabela do HTML
$fundo=white;
while ($relacao = mysql_fetch_array($result)) {
if ($fundo==white) {
$fundo=silver;
} else {
$fundo=white;
}
?>
<tr>
<td width=81 valign=middle style=border:none; borderbottom:solid black 1.0pt; background:<?=$fundo?>; padding:0cm 5.4pt
0cm 5.4pt>
<!-- vetor de resposta da relao
-->
<b><?=$relacao[cod_livraria]; ?></b>
</td>
248
linguagem_de_programacao_III.indb 248
04/02/11 11:14
<?=$relacao[nom_livraria]; ?>
</td>
</tr>
<?php
}
?>
</table>
<?php
}
?>
linguagem_de_programacao_III.indb 249
249
04/02/11 11:14
linguagem_de_programacao_III.indb 250
04/02/11 11:14
Unidade 4
linguagem_de_programacao_III.indb 251
251
04/02/11 11:14
<th scope=col>Nome</th>
<th colspan=2 scope=col>Opções</th>
</tr>
<?php
// lembre-se que voc pode mesclar as TAGs entre HTML e o PHP
// Teste para verificar se relacionou ao menos um registro na consulta
// O @ utilizado para inibir qualquer mensagem erro.
if (@mysql_num_rows($result)>=1) {
if ($fundo==white) {
$fundo=silver;
} else {
$fundo=white;
?>
<tr style=background:<?=$fundo?>;>
<td><?=$relacao[cod_autor]; ?></td>
<td><?=$relacao[nom_autor]; ?></td>
<!-- nestes dois links enviado o cdigo do registro
assim as pginas que os links esto apontando podero identificar qual
registro deve ser manipulado
-->
<td><a href=altautor.php?cod=<?=$relacao[cod_autor]?>>Alterar</
a></td>
<td><a href=excautor.php?cod=<?=$relacao[cod_
autor]?>>Excluir</a></td>
</tr>
<?php
252
linguagem_de_programacao_III.indb 252
04/02/11 11:14
} } else {
?>
<tr style=background:silver;>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<?php
}
?>
</table>
<p><a href=menu.html>Voltar</a></p>
<p> </p>
<p> </p>
</body>
</html>
Unidade 4
linguagem_de_programacao_III.indb 253
253
04/02/11 11:14
if (form.nom.value.length<4) {
// retorna falso para o formulrio inibindo o seu envio para o
servidor. O comando return encerra a funo
return false;
return true;
}
</script>
</head>
<body>
<?php
// verificao se o formulrio foi submetido, ou seja, enviado ao servidor
if (@$_POST[salvar]!=) {
// include com as variveis do banco de dados
254
linguagem_de_programacao_III.indb 254
04/02/11 11:14
include(variaveis.bd);
$link = mysql_connect($serv, $user, $pass) or die(Erro na conexo com o
banco de dados);
mysql_select_db($bd) or die (Erro na seleo do banco de dados.
mysql_errno($link) . : . mysql_error($link). \n<br>);
// a inserso de dados montada e encaminhada ao servidor
$result= mysql_query(insert into autores (nom_autor) values (.$_
POST[nom].)) or die (Erro ao cadastrar autor);
?>
<script language=javascript type=text/javascript charset=utf-8>
// interao do PHP com o JavaScript
alert (Registro inserido com sucesso! Cdigo gerado: <?=mysql_insert_
id()?>);
</script>
<?php
}
?>
<h1>Cadastrar Autor</h1>
<hr>
<!-o atributo onSubmit=return valida_form(this); est chamando uma
funo JavaScript.
Alm disso, o comando return fora que o formulrio s seja enviado se a
funo retornar verdadeiro (true)
-->
<form action= method=post enctype=multipart/form-data
name=frmcad target=_self onSubmit=return valida_form(this);>
<table width=40% border=1>
<tr>
<td width=28%><label for=nom>Nome</label></td>
<td width=72%><input type=text name=nom id=nom
value=></td>
</tr>
Unidade 4
linguagem_de_programacao_III.indb 255
255
04/02/11 11:14
<tr>
<td colspan=2 align=center>
<input type=submit name=salvar id=Cadastrar
value=Cadastrar>
<input type=reset name=Limpar id=Limpar value=Limpar>
</td>
</tr>
</table>
<p><a href=listautor.php>Voltar</a></p>
</form>
</body>
</html>
256
linguagem_de_programacao_III.indb 256
04/02/11 11:14
(...)
<?php
// verificao se o formulrio foi submetido, ou seja, enviado ao servidor
if ((@$_POST[salvar]!=) && (strlen(@$_POST[nom])>3)) {
// include com as variveis do banco de dados
include(variaveis.bd);
$link = mysql_connect($serv, $user, $pass) or die(Erro na conexo com
o banco de dados);
(...)
linguagem_de_programacao_III.indb 257
257
04/02/11 11:14
258
linguagem_de_programacao_III.indb 258
04/02/11 11:14
if (form.nom.value.length<4) {
return false;
return true;
}
</script>
</head>
<body>
<?php
// include com as variveis do banco de dados
include(variaveis.bd);
// include com as variveis do banco de dados
$link = mysql_connect($serv, $user, $pass) or die(Erro na conexo com o
banco de dados);
mysql_select_db($bd) or die (Erro na seleo do banco de dados.
mysql_errno($link) . : . mysql_error($link). \n<br>);
// Validao de dados e mtodo
if ((@$_POST[cod]!=) && (strlen(@$_POST[nom])>3) && (@$_
POST[cod]==@$_GET[cod])){
/*
comando de alterao de dados
Unidade 4
linguagem_de_programacao_III.indb 259
259
04/02/11 11:14
$relacao = mysql_fetch_array($result);
}
?>
<h1>Alterar Autor</h1>
<hr>
<form action= method=post enctype=multipart/form-data
name=frmcad target=_self onSubmit=return valida_form(this);>
<table width=40% border=1>
<tr>
<td><label for=cod>Código</label></td>
<td>
<!--o atributo readonly deixa o campo somente leitura
o atributo value carrega um valor padro para o campo-->
260
linguagem_de_programacao_III.indb 260
04/02/11 11:14
Unidade 4
linguagem_de_programacao_III.indb 261
261
04/02/11 11:14
262
linguagem_de_programacao_III.indb 262
04/02/11 11:14
return true;
return false;
}
</script>
</head>
<body>
<?php
// include com as variveis do banco de dados
include(variaveis.bd);
$link = mysql_connect($serv, $user, $pass) or die(Erro na conexo com o
banco de dados);
mysql_select_db($bd) or die (Erro na seleo do banco de dados.
mysql_errno($link) . : . mysql_error($link). \n<br>);
if ((@$_POST[cod]!=) && (@$_POST[cod]==@$_GET[cod])){
// query para excluir as informaes
$result= mysql_query(delete from autores where cod_autor=.$_
POST[cod]) or die (Erro ao cadastrar autor);
?>
<script language=javascript type=text/javascript charset=utf-8>
Unidade 4
linguagem_de_programacao_III.indb 263
263
04/02/11 11:14
$relacao = mysql_fetch_array($result);
}
?>
<h1>Alterar Autor</h1>
<hr>
<form action= method=post enctype=multipart/form-data
name=frmcad target=_self onSubmit=return valida_form(this);>
<table width=40% border=1>
<tr>
<td>Código</td>
<td>
<!--campo oculto para segurana das informao-->
<input type=hidden name=cod id=cod
value=<?=@$relacao[cod_autor]; ?>>
<?=@$relacao[cod_autor]; ?></td>
</tr>
<tr>
<td width=28%>Nome</td>
<td width=72%><?=@$relacao[nom_autor]; ?></td>
</tr>
<tr>
<td colspan=2 align=center>
264
linguagem_de_programacao_III.indb 264
04/02/11 11:14
Unidade 4
linguagem_de_programacao_III.indb 265
265
04/02/11 11:14
if (form.nom.value.length<4) {
return false;
return true;
}
</script>
</head>
<body>
<?php
// include com as variveis do banco de dados
include(variaveis.bd);
$link = mysql_connect($serv, $user, $pass) or die(Erro na conexo com o
banco de dados);
mysql_select_db($bd) or die (Erro na seleo do banco de dados.
mysql_errno($link) . : . mysql_error($link). \n<br>);
// valida as informaes encaminhadas
if ((@$_POST[cod]!=) && (strlen(@$_POST[nom])>3) && (@$_
POST[cod]==@$_GET[cod]) && (@$_POST[cod_autor]!=)) {
// adequao das informaes em branco para nulo
if (@$_POST[cod_autor]!=) {
$cod_autor=$_POST[cod_autor];
} else {
$cod_autor=NULL;
}
266
linguagem_de_programacao_III.indb 266
04/02/11 11:14
</script>
<?php
}
if (@$_GET[cod]!=) {
$result= mysql_query(select cod_livro, nom_livro, cod_autor from
livros where cod_livro=.$_GET[cod]);
$relacao = mysql_fetch_array($result);
}
?>
<h1>Alterar Livro</h1>
<hr>
<form action= method=post enctype=multipart/form-data
name=frmcad target=_self onSubmit=return valida_form(this);>
<table width=40% border=1>
<tr>
<td width=28%><label for=cod>Código</label></td>
<td width=72%><input type=text name=cod id=cod
value=<?=$relacao[cod_livro]?> readonly=true></td>
</tr>
<tr>
<td width=28%><label for=nom>Nome</label></td>
<td width=72%><input type=text name=nom id=nom
value=<?=$relacao[nom_livro]; ?>></td>
</tr>
<tr>
<td width=28%><label for=cod_autor>Autor</label></td>
<td width=72%>
<select name=cod_autor>
<option value=>-----------------</option>
<?php
Unidade 4
linguagem_de_programacao_III.indb 267
267
04/02/11 11:14
if ($relacao_autores[cod_autor]==$relacao[cod_autor]) {
} else {
$select=selected;
$select=;
?>
<option value=<?=$relacao_autores[cod_autor]?>
<?=$select?>><?=$relacao_autores[nom_autor]; ?></option>
<?php
?>
</select>
</td>
</tr>
<tr>
<td colspan=2 align=center>
268
linguagem_de_programacao_III.indb 268
04/02/11 11:14
Unidade 4
linguagem_de_programacao_III.indb 269
269
04/02/11 11:14
return false;
return true;
}
</script>
</head>
<body>
<?php
if (@$_POST[pesquisar]!=) {
include(variaveis.bd);
$link = mysql_connect($serv, $user, $pass) or die(Erro na conexo com o
banco de dados);
mysql_select_db($bd) or die (Erro na seleo do banco de dados.
mysql_errno($link) . : . mysql_error($link). \n<br>);
// esta varivel tem a funo de montar o filtro da consulta
$pesquisa=;
if (@$_POST[nom_livro]!=) {
270
linguagem_de_programacao_III.indb 270
04/02/11 11:14
Unidade 4
linguagem_de_programacao_III.indb 271
271
04/02/11 11:14
<tr>
<td colspan=2 align=center>
<input type=submit name=pesquisar id=pesquisar
value=Pesquisar>
<input type=reset name=Limpar id=Limpar value=Limpar>
</td>
</tr>
</table>
</form>
<hr>
<table width=54% height=82 border=1>
<tr>
<th scope=col>Código Livro</th>
<th scope=col>Nome Livro</th>
<th scope=col>Código Autor</th>
<th scope=col>Nome Autor</th>
</tr>
<?php
//
if (@mysql_num_rows($result)>=1) {
$fundo=white;
while ($relacao = mysql_fetch_array($result)) {
if ($fundo==white) {
$fundo=silver;
} else {
$fundo=white;
}
?>
<tr style=background:<?=$fundo?>;>
<td><label title=Alterar os dados deste livro><a href=altlivros.
php?cod=<?=$relacao[cod_livro]; ?>><?=$relacao[cod_livro]; ?>
272
linguagem_de_programacao_III.indb 272
04/02/11 11:14
</a></label></td>
<td><?=$relacao[nom_livro]; ?></td>
<td><label title=Alterar os dados deste Autor><a href=altautor.
php?cod=<?=$relacao[cod_autor]; ?>><?=$relacao[cod_autor]; ?>
</a></label></td>
<td><?=$relacao[nom_autor]; ?></td>
</tr>
<?php
} } else {
?>
<tr style=background:silver;>
<td colspan=4>
<?php
?>
</td>
</tr>
<?php
}
?>
</table>
<p><a href=menu.html>Voltar</a></p>
</body>
</html>
Unidade 4
linguagem_de_programacao_III.indb 273
273
04/02/11 11:14
274
linguagem_de_programacao_III.indb 274
04/02/11 11:14
Cookie
Cookie um arquivo texto que contm uma pequena parte de
informaes que os programas armazenam. O cookie basicamente
possui nome, valor, tempo de vida, caminho no servidor,
domnio, protocolo de segurana.
Unidade 4
linguagem_de_programacao_III.indb 275
275
04/02/11 11:14
276
linguagem_de_programacao_III.indb 276
04/02/11 11:14
</form>
<p><a href=leituracookie.php>Ler Cookie</a><br>
<a href=apagarcookie.php>Apagar Cookie </a></p>
</body>
</html>
Unidade 4
linguagem_de_programacao_III.indb 277
277
04/02/11 11:15
<body>
<p>Lendo o cookie</p>
<p>
<?php
// verifica a existencia do cookie
if (@$_COOKIE[primeirocookie]!=) {
} else {
?>
</p>
<p><a href=gravarcookie.php>Criar Cookie</a><br>
<a href=apagarcookie.php>Apagar Cookie </a></p>
</body>
</html>
Veja que dentro de uma hora, toda vez que voc carregar essa
pgina, retornar sempre o mesmo valor, a no ser que voc altere
o valor do cookie.
278
linguagem_de_programacao_III.indb 278
04/02/11 11:15
<?php
?>
<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN
http://www.w3.org/TR/html4/loose.dtd>
<html lang=pt-br>
<head>
<meta http-equiv=Content-Type content=text/html;
charset=iso-8859-1>
<title>Apagar Cookie</title>
</head>
<body>
<p>Cookie Apagado</p>
<p><a href=gravarcookie.php>Criar Cookie</a></p>
</body>
</html>
Unidade 4
linguagem_de_programacao_III.indb 279
279
04/02/11 11:15
Sesso
As sesses em PHP possuem alguns passos simples de serem
utilizados:
1. Iniciar uma sesso.
2. Registrar variveis de sesso.
3. Utilizar essas variveis.
4. Remover registros de variveis e destruir a sesso.
Esses passos no precisam estar todos em uma mesma pgina,
mas devem estar dentro da sua aplicao. Vamos ento montar
um exemplo em que montaremos uma sesso semelhante aos
exemplos do cookie.
<?php
//iniciar a sesso
session_start();
if (@$_POST[nome]!=) {
//criao da varivel
$_SESSION[primeirasessao]=$_POST[nome];
}
?>
<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN
http://www.w3.org/TR/html4/loose.dtd>
<html lang=pt-br>
<head>
<meta http-equiv=Content-Type content=text/html;
charset=iso-8859-1>
<title>Grava Sessão</title>
</head>
<body>
<form name=form1 method=post action=>
280
linguagem_de_programacao_III.indb 280
04/02/11 11:15
<label>Nome
<input type=text name=nome id=nome>
</label>
<br> <input type=submit name=enviar value=Enviar>
</form>
<p><a href=leiturasessao.php>Ler Sessão</a><br>
<a href=apagarsessao.php>Apagar Sessão </a></p>
</body>
</html>
Unidade 4
linguagem_de_programacao_III.indb 281
281
04/02/11 11:15
if (@$_SESSION[primeirasessao]!=) {
} else {
?>
</p>
<p><a href=gravarsessao.php>Criar Sessão</a><br>
<a href=apagarsessao.php>Apagar Sessão </a></p>
</body>
</html>
session_start();
?>
<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN
http://www.w3.org/TR/html4/loose.dtd>
<html lang=pt-br>
<head>
<meta http-equiv=Content-Type content=text/html;
charset=iso-8859-1>
<title>Apagar Sessão</title>
</head>
<body>
282
linguagem_de_programacao_III.indb 282
04/02/11 11:15
<p>Sessão Apagada</p>
<p><a href=gravarsessao.php>Criar Sessão</a></p>
</body>
</html>
Unidade 4
linguagem_de_programacao_III.indb 283
283
04/02/11 11:15
<?php
// inicia a sesso
session_start();
// verifica se o formulrio foi enviado
if ((@$_POST[login]!=) && (@$_POST[senha]!=)) {
include(variaveis.bd);
if (@mysql_num_rows($result)==1) {
// registra a sesso
$_SESSION[login]=$_POST[login];
header(Location: menu.php);
} else {
}
?>
<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN
http://www.w3.org/TR/html4/loose.dtd>
<html lang=pt-br>
<head>
<meta http-equiv=Content-Type content=text/html;
charset=iso-8859-1>
<title>Login</title>
</head>
284
linguagem_de_programacao_III.indb 284
04/02/11 11:15
<body>
<h1>Login no Sistema </h1>
<hr>
<?php
if (@$msg!=) {
echo <hr>;
}
?>
<form name=form1 method=post action=>
<table width=40% border=1>
<tr>
<td>Login</td>
<td><label>
<input type=text name=login id=login>
</label></td>
</tr>
<tr>
<td>Senha</td>
<td><label>
<input type=password name=senha id=senha>
</label></td>
</tr>
<tr>
<td colspan=2 align=center><label>
<input type=submit name=enviar id=enviar
value=Enviar>
<input type=reset name=limpar id=limpar value=Limpar>
</label></td>
</tr>
Unidade 4
linguagem_de_programacao_III.indb 285
285
04/02/11 11:15
</table>
</form>
</body>
</html>
286
linguagem_de_programacao_III.indb 286
04/02/11 11:15
Unidade 4
linguagem_de_programacao_III.indb 287
287
04/02/11 11:15
<?php
// Inicia a sesso
session_start();
// Exclui os dados de login
unset($_SESSION[login]);
// Elimina a sesso
session_destroy();
// Enviando o usurio pra pgina de login
header(Location: erro.php?msg=Logout efetuado com sucesso!);
?>
Sntese
Nesta unidade voc pde acompanhar o desenvolvimento de um
sistema completo, acessando um banco de dados, manipulando
informaes e ainda com um certo grau de segurana. Voc
aprendeu sobre MySQL e suas excentricidades e por que ele
amplamente utilizado em desenvolvimento Web. Viu ainda
que com a utilizao de uma boa soluo pode simplificar o
desenvolvimento do sistema.
Aprendeu como o controle de sesso fundamental para
que possamos manter a segurana da aplicao e abre novos
horizontes para uma customizao da prpria aplicao para
cada usurio, j que sendo possvel identific-lo torna-se possvel
criar possibilidades onde possa tornar a aplicao mais amigvel
conforme o usurio.
288
linguagem_de_programacao_III.indb 288
04/02/11 11:15
Atividades de autoavaliao
1. Desenvolva um cadastro de livros utilizando o MySQL e o PHP. Este
cadastro deve conter uma tabela de livros contendo os seguintes
campos:
Cdigo
Nome
Autor
Editora
Nmero de pginas
Ainda deve conter uma pgina de listagem geral deste cadastro e uma
pgina com uma busca por nome. Estas pginas devem ser navegveis
entre si, ou seja, construa um menu de navegao entre as pginas.
2. Monte uma pgina de login (login e senha) para acessar uma aplicao
fictcia. Esta pgina de login deve verificar no banco de dados se o
usurio est cadastrado ou no. Caso esteja, registre uma sesso para
o usurio e permita que ele cadastre outros usurios. Caso no esteja,
no permitir o acesso a pgina de cadastro por meio da sesso (no
registrando a sesso).
Saiba mais
Se voc desejar, aprofunde os contedos estudados nesta unidade
ao consultar as seguintes referncias:
Manual PHP, 2010. Disponvel em: <http://br2.php.net/manual/
pt_BR/index.php>. Acessao em: 5 abr. 2010.
PHP Brasil, 2010. Disponvel em: < www.phpbrasil.com>.
Acesso em: 5 abr. 2010.
T r u q u e s e D i c a s Tutoriais de Javascript, 2010.
Disponvel em: <www.truquesedicas.com/tutoriais/php/index.
htm>. Acesso em: 2 mar. 2010.
Manual do MySQL, 2010. Disponvel em: <http://dev.mysql.
com/doc/refman/5.1/en/index.html>. Acesso em: 5 abr. 2010.
Unidade 4
linguagem_de_programacao_III.indb 289
289
04/02/11 11:15
linguagem_de_programacao_III.indb 290
04/02/11 11:15
unidade 5
Sees de estudo
linguagem_de_programacao_III.indb 291
Seo 1
Seo 2
Seo 3
XML-Schema
Seo 4
RSS
04/02/11 11:15
linguagem_de_programacao_III.indb 292
04/02/11 11:15
Unidade 5
linguagem_de_programacao_III.indb 293
293
04/02/11 11:15
Posio Inicial
Tamanho
CPF
11
NOME
12
30
ENDEREO
41
50
linguagem_de_programacao_III.indb 294
04/02/11 11:15
linguagem_de_programacao_III.indb 295
295
04/02/11 11:15
linguagem_de_programacao_III.indb 296
04/02/11 11:15
d) instrues de processamento;
e) sesses marcadas;
f) declaraes de tipos de documento.
a. Elementos
Os elementos so as tags mais comuns na forma de marcao.
Eles so delimitados pelos sinais de menor e maior (< e >), a
maioria dos elementos identificam a natureza do contedo que
a envolvem. Alguns elementos podem ser vazios, como visto
anteriormente; neste caso eles no tm contedo. O elemento no
sendo vazio inicia-se com uma marca de incio, <elemento>, e
termina com uma marca de trmino, </elemento>.
Atributos
Os atributos so associados aos elementos. Eles possuem valores
e so localizados na abertura do elemento. Por exemplo:
<input type=text>
b. Referncias a entidades
Alguns caracteres so reservados para identificar o incio de uma
marcao. O sinal de menor, < , por exemplo, identifica o incio
de uma marca de incio ou trmino desta. Para inserir esses
caracteres em seu documento como contedo, deve haver uma
alternativa para represent-los. Em XML, entidades so usadas
para representar esses caracteres especiais.
As entidades devem ter um nico nome. Para ser utilizada, a
entidade deve simplesmente ser referenciada pelo nome. As
Unidade 5
linguagem_de_programacao_III.indb 297
297
04/02/11 11:15
c. Comentrios
Os comentrios so idnticos aos utilizados no HTML. Iniciamse com <!-- e terminam com -->. Os comentrios podem conter
qualquer caractere, a nica exceo se refere literal --.
possvel colocar comentrios entre marcas em qualquer lugar do
XML. Comentrios no fazem parte de um contedo textual
de um documento XML. Um processador XML no necessita
reconhecer esse bloco na aplicao.
Sesses CDATA
Apesar de ser possvel converter diversos tipos de caracteres
para uma entidade, existem casos que esse processo pode se
tornar complexo. Para que possamos escrever diversos tipos
de caracteres sem nos preocupar em converter os elementos,
utilizamos as sesses CDTAT. Em um documento, uma
sesso CDATA instrui o analisador para ignorar a maioria
dos caracteres de marcao. Vamos levar em considerao uma
instruo PHP dentro de um XML. Ele pode conter caracteres
que o analisador XML normalmente reconheceria como
elementos, assim teremos a seguinte forma:
298
linguagem_de_programacao_III.indb 298
04/02/11 11:15
linguagem_de_programacao_III.indb 299
299
04/02/11 11:15
*/
$teste= array(array(1A,Zehh,10),
array(1A,Tatiana,9),
array(1B,Joo,3),
array(1B,Bruna,5),
array(1B,Bianca,8));
// Vetor simbolizando a leitura de uma fonte de dados
$arquivo=fopen(arquivoteste.xml,w+);
// fopen a funo que abre/cria um arquivo; ou uma url
// w+ Abre para leitura e escrita; coloca o ponteiro do arquivo no comeo
do arquivo e reduz o comprimento do arquivo para zero. Se o arquivo
no existir, tenta cri-lo.
// Para saber mais sobre esta funo pode acessar http://www.php.net/
manual/pt_BR/function.fopen.php
$xml=<?xml version=\1.0\ encoding=\ISO-8859-1\?>\n;
$xml.=<escola>\n;
// $xml uma varivel onde est sendo armazenado informaes de
texto, neste caso o que ser escrito no arquivo
$sala=0;
$controle=false;
// varivel de controle para este caso trabalhando com vetor
for ($i=0; $i<count($teste);$i++) {
if ($sala!=$teste[$i][0]) {
$sala=$teste[$i][0];
$controle=true;
if ($i!=0) {
$xml.=</salas>\n;
}
} else {
$controle=false;
}
if ($controle==true) {
300
linguagem_de_programacao_III.indb 300
04/02/11 11:15
$xml.=<salas nome=\$sala\>\n;
$controle=false;
}
$xml.=<aluno>
<nome><![CDATA[.$teste[$i][1].]]></nome>
<nota valor=\.$teste[$i][2].\ />
</aluno>\n;
}
$xml.=</salas>
</escola>;
fwrite($arquivo, $xml);
// escreve no arquivo designado o contedo de uma varivel o texto
fclose($arquivo);
// fecha o arquivo
echo arquivo gerado!!<br>;
//*/
?>
Unidade 5
linguagem_de_programacao_III.indb 301
301
04/02/11 11:15
<HTML>
<HEAD>
<TITLE>Documento PHP</TITLE>
<meta http-equiv=Content-Type content=text/html; charset=utf-8>
<BODY>
<?php
$teste= array(array(1A,Zehh,10),
array(1A,Tatiana,9),
array(1B,Joo,3),
array(1B,Bruna,5),
array(1B,Bianca,8));
$xml = new DOMDocument(1.0, ISO-8859-1); // cria o cabealho do
XML
$xml->preserveWhiteSpace = false; //ignora todos os espaos em brancos
$xml->formatOutput = true; //gera o cdigo formatado
$root = $xml->createElement(escola); //cria o primeira tag (raiz)
$sala=0;
// varivel de controle para este caso trabalhando com vetor
for ($i=0; $i<count($teste);$i++) {
// Fora o agrupamento das salas
if ($teste[$i][0]!=$sala) {
$salasXML = $xml->createElement(salas);
$salaXML_no=$root->appendChild($salasXML);
$sala=$teste[$i][0];
}
// cria os elementos do xml aluno, nome e nota
$alunoXML = $xml->createElement(aluno);
// o elemento ou tag nome ter o nome do aluno como texto
$nomeXML = $xml->createElement(nome);
// cria uma sesso CDATA que permite caracteres especiais
$cdataNome = $xml->createCDATASection($teste[$i][1]);
302
linguagem_de_programacao_III.indb 302
04/02/11 11:15
$nomeXML_no->appendChild($cdataNome);
// acrescenta a tag nota como filha da tag aluno
$notaXML_no=$alunoXML_no->appendChild($notaXML);
// adiciona o atributo valor para a tag nota
$notaXML_no->setAttribute(valor,$teste[$i][2]);
/*
IMPORTANTE
Unidade 5
linguagem_de_programacao_III.indb 303
303
04/02/11 11:15
$nome_sala = $xml->salas[$i][nome];
/*
304
linguagem_de_programacao_III.indb 304
04/02/11 11:15
IMPORTANTE
Para usar esta classe, necessrio conhecer o arquivo xml que est
retornando.
Vou explicar aqui no colocando a conceituao de orientao a
objetos, mas explicando de forma simples e em linguagem usual.
As regras so as seguintes:
Cada atributo da tag pode ser acessado pelo nome como um vetor.
*/
for ($j=0;$j<count($xml->salas[$i]->aluno);$j++) {
$nome_aluno_da_sala = $xml->salas[$i]->aluno[$j]->nome;
$nota_aluno_da_sala = $xml->salas[$i]->aluno[$j]->nota[valor];
echo Nome do aluno <b>.($j+1).</b> sala <b>$nome_sala</b>:
<em><strong>$nome_aluno_da_sala</strong></em><br>;
echo Nota do aluno <b>.($j+1).</b> da sala <b>$nome_sala</
b>: <em><strong>$nota_aluno_da_sala</strong></em><br><br>;
echo </p>;
}
?>
<a href=javascript:back();>Voltar para a gerao do xml</a>
</body>
</HTML>
Unidade 5
linguagem_de_programacao_III.indb 305
305
04/02/11 11:15
Namespaces
O Namespace em XML foi desenvolvido com o intuito de resolver
o problema de conflitos de elementos. Em funo do XML
permitir a criao de qualquer nome de tag para os documentos,
pode ocorrer de diferentes usurios em diferentes contextos
criarem tags com os mesmos nomes. O Namespace permite
realizar uma declarao o contexto utilizado sobre uma tag.
Poderamos utilizar o XML para registrar o valor de um livro da
seguinte forma.
<?xml version=1.0 encoding=utf-8?>
<livro>
<titulo>XML uma viso do futuro!</titulo>
<valor moeda=REAL>50,00</valor>
</livro>
Em outro contexto, agora possvel representar os dados do autor.
<?xml version=1.0 encoding=utf-8?>
<autor>
<titulo>Sr</titulo>
<nome>Joaquim da Silva</nome>
</autor>
306
linguagem_de_programacao_III.indb 306
04/02/11 11:15
Diga
<saudao>
Ol querida
</saudao>
, Maria.
Unidade 5
linguagem_de_programacao_III.indb 307
307
04/02/11 11:15
</Joaquim>
<Pedro>
<saudao>
</pessoas>
308
linguagem_de_programacao_III.indb 308
04/02/11 11:15
linguagem_de_programacao_III.indb 309
309
04/02/11 11:15
310
linguagem_de_programacao_III.indb 310
04/02/11 11:15
Unidade 5
linguagem_de_programacao_III.indb 311
311
04/02/11 11:15
linguagem_de_programacao_III.indb 312
04/02/11 11:15
Declaraes de Atributos
Como no podia ser diferente, a declarao de atributos uma
parte fundamental do DTD. A declarao de atributo especifica
uma lista de atributos para um determinado elemento usando a
declarao pela palavra reservada ATTLIST. O elemento pode
ter qualquer nmero de atributos.
Unidade 5
linguagem_de_programacao_III.indb 313
313
04/02/11 11:15
<?xml version=1.0?>
<!DOCTYPE email [
<!ELEMENT email (para,de,assunto,contedo)>
<!ATTLIST email tipo CDATA #REQUIRED>
<!ELEMENT para (#PCDATA)>
<!ELEMENT de (#PCDATA)>
<!ELEMENT assunto (#PCDATA)>
<!ELEMENT contedo (#PCDATA)>
]>
<email tipo=html>
<para>Maria</para>
<de>Joo</de>
<assunto>Jantar</assunto>
<contedo>O que h para o jantar?</contedo>
</email>
314
linguagem_de_programacao_III.indb 314
04/02/11 11:15
ID
IDREF ou
IDREFS
ENTITY ou
ENTITIES
NMTOKEN ou
NMTOKEN
Atributos
Enumerados =
Unidade 5
linguagem_de_programacao_III.indb 315
315
04/02/11 11:15
#REQUIRED
#IMPLIED
#FIXED
valor
Declaraes de Entidades
Declaraes de entidades permitem associar um nome ou uma
definio a uma sigla ou outro cdigo de identificao. Essa
identificao livre e pode conter quaisquer caracteres que no
infrinjam os marcadores do XML. Os principais tipos utilizados
so: entidades internas e entidades externas.
Entidades Internas
Entidades internas so as declaraes realizadas dentro do
prprio documento. Essas declaraes tm o escopo limitado
para o documento no sendo compartilhadas por outros.
316
linguagem_de_programacao_III.indb 316
04/02/11 11:15
<?xml version=1.0?>
<!DOCTYPE email [
<!ELEMENT email (para,de,assunto,contedo)>
<!ATTLIST email tipo (html | text) html>
<!ELEMENT para (#PCDATA)>
<!ELEMENT de (#PCDATA)>
<!ELEMENT assunto (#PCDATA)>
<!ELEMENT contedo (#PCDATA)>
<!ENTITY UNISUL Universidade do Sul de Santa Catarina>
]>
<email tipo=text>
<para>Maria</para>
<de>Joo</de>
<assunto>Jantar</assunto>
<contedo>Vou enviar um e-mail para a &UNISUL;
</contedo>
</email>
Unidade 5
linguagem_de_programacao_III.indb 317
317
04/02/11 11:15
Entidades externas
Entidades externas so as associaes de definies externas ao
documento atual. Permitem o documento XML referenciar o
contedo de um outro arquivo. Se elas contm texto, o contedo
do arquivo externo inserido no ponto de referncia e analisado
como parte do documento referente. Dados binrios no so
analisados e podem somente ser referenciados em um atributo;
eles so usados para referenciar figuras e outro contedo no
XML no documento.
Esse tipo de entidade possvel inserir seu contedo ao
documento atual. Assim, podemos anexar vrios documentos
para que o seu contedo possa relacionar com o restante do
documento.
<?xml version=1.0?>
<!DOCTYPE email [
<!ELEMENT email (para,de,assunto,contedo)>
<!ATTLIST email tipo (html | text) html>
<!ELEMENT para (#PCDATA)>
<!ELEMENT de (#PCDATA)>
<!ELEMENT assunto (#PCDATA)>
<!ELEMENT contedo (#PCDATA)>
<!ENTITY UNISUL Universidade do Sul de Santa Catarina>
<!ENTITY inserirTexto SYSTEM testeInserir.xml>
]>
<email tipo=text>
<para>Maria</para>
<de>Joo</de>
<assunto>Jantar</assunto>
<contedo>Vou enviar um e-mail para a > &UNISUL;
&inserirTexto;
</contedo>
</email>
318
linguagem_de_programacao_III.indb 318
04/02/11 11:15
Seo 3 XML-Schema
O XML-Schema, tambm conhecido como XSD (XML Schema
Definition), uma maneira mais eficiente de descrever a estrutura
e o contedo de um documento XML. O propsito de um
XML-Schema definir os blocos de construo permitidos em
um documento XML, como um DTD.
O XML-Schema semelhante a uma DTD, ambas definem a
estrutura do XML. Originalmente o XML utilizou das DTDs
como forma de definio de sua estrutura. Com os avanos em
sua utilizao, percebeu-se que as DTDs eram imensamente
limitadas, no permitindo diversos pontos, como:
linguagem_de_programacao_III.indb 319
319
04/02/11 11:15
320
linguagem_de_programacao_III.indb 320
04/02/11 11:15
validar os dados;
Princpios do XSD
J vimos que o namespace usado para identificar unicamente o
nome dos elementos. Basicamente consiste em nomear todos os
elementos de um XML com um mesmo prefixo. Para identificar
onde termina o prefixo e onde comea o nome propriamente dito,
usa-se o caractere : (dois pontos).
Por definio, os elementos XML-Schema comeam com o
prefixo xs. Desta forma, no h problemas em identificar
elementos do XML-Schema e os elementos do XML caso eles
tenham a mesma tag.
Visando a um melhor entendimento, vamos utilizar um exemplo
de e-mail. Vamos comprar a definio com a DTD e o XSD.
<?xml version=1.0?>
<!DOCTYPE email [
<!ELEMENT email (para,de,assunto,contedo)>
<!ELEMENT para (#PCDATA)>
<!ELEMENT de (#PCDATA)>
Unidade 5
linguagem_de_programacao_III.indb 321
321
04/02/11 11:15
linguagem_de_programacao_III.indb 322
04/02/11 11:15
Elementos simples
Elementos simples no podem conter outros elementos ou
atributos. O seu contedo somente no formato de caractere,
porm possvel alterar o tipo de caractere contido nesse
elemento. O XML-Schema possui a flexibilidade do XML onde
voc pode construir seus prprios tipos. Ele j possui alguns
predefinidos (integer, float, date, etc) que nos facilitam na
construo.
xs:string
xs:decimal
xs:integer
xs:boolean
xs:date
xs:time
Elemento
<xs:element name=nome
type=xs:string/>
<xs:element name=paginas
type=xs:integer/>
<xs:element name=datavencimento
type=xs:date/>
Unidade 5
linguagem_de_programacao_III.indb 323
323
04/02/11 11:15
Atributos
O XSD define que os atributos so elementos simples e somente
elementos complexos podem ter atributos. Mesmo assim, a
definio do atributo diferente da definio de um elemento.
Para definir um elemento em XSD, utilizamos xs:element, mas
para definir um atributo usamos o elemento xs:attribute.
Ao definir um atributo, podemos declarar como ele sendo
obrigatrio ou opcional. Ainda, como vimos nos elementos
simples, podemos definir um valor default ou fixed, como vemos a
seguir.
<xs:attribute name=linguagem type=xs:string use=optional/>
<xs:attribute name= linguagem type=xs:string use=required/>
324
linguagem_de_programacao_III.indb 324
04/02/11 11:15
Facetas de restrio
A restrio do contedo no se restringe aos tipos predefinidos.
O XSD nos permite construir tipos de dados por meio de
restries. Para isso, necessrio utilizar um subconjunto do tipo
de dados original, ou seja, preciso limitar o domnio de valores
possveis. Isso realizado por meio das facetas de restrio.
As facetas so muito teis principalmente para os atributos.
Frequentemente eles s podem assumir alguns valores
predefinidos. Um exemplo clssico o atributo sexo, onde
criamos um conjunto finito e pequeno de valores que o atributo
sexo pode suportar.
O tipo de dados sexo uma string de um caractere que s aceita
os valores M e F respectivamente masculino e feminino.
Esse tipo de dados poder ser construdo por meio do elemento
enumeration:
<?xml version=1.0 encoding=utf-8?>
<xs:simpleType name=sexo>
<xs:restriction base=xsd:string>
<xs:enumeration value=M/>
<xs:enumeration value=F/>
</xs:restriction>
</xs:simpleType>
Unidade 5
linguagem_de_programacao_III.indb 325
325
04/02/11 11:15
326
linguagem_de_programacao_III.indb 326
04/02/11 11:15
linguagem_de_programacao_III.indb 327
327
04/02/11 11:15
Elementos complexos
O elemento complexo composto por outros elementos, porm
esses elementos podem conter apenas texto simples. Para isso, o
elemento deve possuir um ou mais atributos. Por essa definio,
at mesmo elementos que no contenham informao textual
(elementos vazios) podem ser considerados complexos. Desde que
esses elementos vazios possuam pelo menos um atributo.
Elemento complexo todo o elemento que contenha
outros elementos e/ou atributos.
328
linguagem_de_programacao_III.indb 328
04/02/11 11:15
J o XSD ficaria:
<?xml version=1.0>
<xs:element name=contato type=tContato/>
<xs:complexType name=tContato>
<xs:sequence>
<xs:element name=nome type=xs:string/>
<xs:element name=endereco type=xs:string/>
<xs:element name=cep type=xs:positiveInteger/>
</xs:sequence>
</xs:complexType>
Unidade 5
linguagem_de_programacao_III.indb 329
329
04/02/11 11:15
330
linguagem_de_programacao_III.indb 330
04/02/11 11:15
Unidade 5
linguagem_de_programacao_III.indb 331
331
04/02/11 11:15
<?xml version=1.0?>
<xs:element name=contrato type=tContrato/>
<xs:complexType name=tContrato mixed=true>
<xs:sequence>
<xs:element name=nrContrato type=xs:positiveInteger/>
<xs:element name=nome type=xs:string/>
<xs:element name=empresa type=xs:string/>
<xs:element name=data type=xs:date/>
</xs:sequence>
</xs:complexType>
332
linguagem_de_programacao_III.indb 332
04/02/11 11:15
<?xml version=1.0?>
<catalogo>
<livro>
<isbn>8504006115</isbn>
<autor>George Orwell</autor>
<titulo>1984</titulo>
<paginas>302</paginas>
</livro>
<livro>
<isbn>8588639173</isbn>
<autor>Ramez Elmasri</autor>
<autor>Shamkant Navathe</autor>
<titulo>Sistemas de Bancos de Dados</titulo>
<paginas>744</paginas>
<editora>744</editora>
</livro>
</catalogo>
Unidade 5
linguagem_de_programacao_III.indb 333
333
04/02/11 11:15
334
linguagem_de_programacao_III.indb 334
04/02/11 11:15
</xs:element>
<!-- Define que o elemento autor obrigatrio, mas pode
aparecer N vezes -->
<xs:element name=autor type=xs:string minOccurs=1
maxOccurs=unbounded/>
<!-- O valor-padro para minOccurs e maxOccurs 1 quando
no forem definidos -->
<xs:element name=titulo type=xs:string/>
<xs:element name=paginas type=xs:integer/>
<!-- Elemento editora no obrigatrio -->
<xs:element name=editora type=xs:string
minOccurs=0/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Unidade 5
linguagem_de_programacao_III.indb 335
335
04/02/11 11:15
</head>
<body>
<?php
/**
* Ao tentar validar um arquivo XML, se algum erro
* for encontrado a libxml ir gerar Warnings, o que
* no creio que seja o mais interessante para ns.
* Para evitar que isso acontea, voc pode determinar
* que ir obter os erros por sua prpria conta. Lembre-se
* que esta funo abaixo deve ser chamada antes de
* instanciar qualquer objeto da classe DomDocument!
*/
libxml_use_internal_errors(true);
/* Cria um novo objeto da classe DomDocument */
$objDom = new DomDocument();
/* Carrega o arquivo XML */
$objDom->load(catalogo.xml);
/* Tenta validar os dados utilizando o arquivo XSD */
if (!$objDom->schemaValidate(catalogo.xsd)) {
/**
* Se no foi possvel validar, voc pode capturar
* todos os erros em um array
*/
$arrayAllErrors = libxml_get_errors();
/**
* Cada elemento do array $arrayAllErrors
* ser um objeto do tipo LibXmlError
*/
print_r($arrayAllErrors);
} else {
336
linguagem_de_programacao_III.indb 336
04/02/11 11:15
/* XML validado! */
echo XML obedece às regras definidas no arquivo XSD!;
}
?>
</body>
</html>
Seo 4 RSS
Hoje em dia comum buscar informaes em tempo real. O
envio dessas informaes por e-mail acabou se tornando muito
ruim, uma vez que, alm das informaes que necessitamos,
recebemos uma avalanche de contedos sem qualquer interesse.
Para resolver esse dilema, desenvolve-se um dialeto para XML
chamado de Rich Site Summary, o RSS.
RSS um recurso desenvolvido em XML que permite
aos responsveis por sites e blogs divulgarem
notcias ou novidades destes. Para isso, o link e o
resumo daquela notcia, ou a notcia na ntegra, so
armazenados em um arquivo XML. Esse arquivo
conhecido como feed, feed RSS.
linguagem_de_programacao_III.indb 337
337
04/02/11 11:15
RDF
Para saber mais sobre RDF
pesquise em www.w3.org/RDF
338
linguagem_de_programacao_III.indb 338
04/02/11 11:15
O que Atom
Ao contrrio de RSS, Atom no uma sigla, um formato
para divulgao de notcias. H quem diga que esse projeto
, inicialmente, uma proposta de unificao do RSS 1.0 e
do RSS 2.0. O Atom tambm baseado em XML, mas seu
desenvolvimento tido como mais sofisticado. O grupo que nele
trabalha tem at o apoio de grandes corporaes, como o Google.
O padro
O RSS baseado no XML, nada melhor do que explicar o
funcionamento do RSS por meio de seu cdigo-fonte. Para servir
de exemplo, usaremos o cdigo a seguir. Note que ele contm
campos bsicos, o que significa que feeds RSS disponveis na
internet podem contar com mais detalhes:
<?xml version=1.0 encoding=ISO-8859-1 ?>
<rss version=0.91>
<channel>
<title>Folha.com - Em cima da hora - Principal</title>
<link>http://redir.folha.com.br/redir/online/emcimadahora/rss091/*http://
www1.folha.uol.com.br/emcimadahora/</link>
<description>Primeiro jornal em tempo real em lngua portuguesa</
description>
<language>pt-br</language>
<copyright>Copyright Folha Online. Todos os direitos reservados.</
copyright>
<docs>http://redir.folha.com.br/redir/online/emcimadahora/
rss091/*http://www1.folha.uol.com.br/folha/conheca/arquivo_e_
copyright.shtml</docs>
<webMaster>webmaster@folha.com.br (Webmaster Folha Online)</
webMaster>
<image>
Unidade 5
linguagem_de_programacao_III.indb 339
339
04/02/11 11:15
340
linguagem_de_programacao_III.indb 340
04/02/11 11:15
<link>http://redir.folha.com.br/redir/online/emcimadahora/rss091/*http://
www1.folha.uol.com.br/ilustrada/763294-novela-alfredo-descobre-quejoca-matou-o-senador-em-ribeirao-do-tempo.shtml</link>
<description>
<i>A programao est sujeita a alterao devido edio dos
captulos e de responsabilidade da emissora</i>
<b>Ribeiro do Tempo (Record, 22h)</b>
Eleonora pede para Arminda represent-la no velrio do senador.
Lincon pede para Ellen encontr-lo na Folha da Corredeira. Slvio diz
a Guilherme que Zuleide ligou para dizer que ele estava na praa com
Tio. Guilherme fala para o pai que Tio/Diana no tem nada demais.
Trs mulheres choram muito diante do caixo do senador. Beatriz fica
irritada e pergunta a Nicolau quem so as mulheres. Lincon conta a Ellen
que uma mensagem foi enviada da Secretaria de Segurana do Estado,
ameaando o senador de morte.
<a href="http://redir.folha.com.br/redir/online/emcimadahora/
rss091/*http://www1.folha.uol.com.br/ilustrada/763294-novelaalfredo-descobre-que-joca-matou-o-senador-em-ribeirao-do-tempo.
shtml">Leia mais</a> (12/07/2010 - 00h08)</description>
</item>
</channel>
</rss>
Unidade 5
linguagem_de_programacao_III.indb 341
341
04/02/11 11:15
Logotipo
342
linguagem_de_programacao_III.indb 342
04/02/11 11:15
PHP.,
=> http://www.broculos.net,
=> Exemplo 1,
=> http://www.example.com/example1.html,
pubDate
, array(title
=> Exemplo 2,
=> http://www.example.com/example2.html,
pubDate
);
$output = <?xml version=\1.0\ encoding=\ISO-8859-1\? . >;
$output .= <rss version=\2.0\>;
$output .= <channel>;
$output .= <title> . $channel[title] . </title>;
$output .= <description> . $channel[description] . </description>;
$output .= <link> . $channel[link] . </link>;
$output .= <copyright> . $channel[copyright] . </copyright>;
foreach ($items as $item) {
$output .= <item>;
$output .= <title> . $item[title] . </title>;
$output .= <description> . $item[description] . </description>;
$output .= <link> . $item[link] . </link>;
$output .= <pubDate> . $item[pubDate] . </pubDate>;
$output .= </item>;
}
Unidade 5
linguagem_de_programacao_III.indb 343
343
04/02/11 11:15
$output .= </channel>;
$output .= </rss>;
header(Content-Type: application/rss+xml; charset=ISO-8859-1);
echo $output;
?>
Sntese
Voc viu nesta unidade o quanto o XML flexvel e se adqua a
diversas funcionalidades no qual necessitamos. Ainda verificou
com ocorre uma definio de tipo de documento assim como seus
elementos e suas caractersticas. Verificamos que, apesar de essas
definies serem teis, acabam por ser um tanto limitadas. Para
acompanhar o desenvolvimento do prprio XML, necessitamos
de uma definio mais apurada, o XSD.
Por fim, voc viu uma grande utilidade do XML que se refere
comunicao com diversos browser e aplicativos para sintetizar
informaes.
Atividades de autoavaliao
Ao final de cada unidade, voc ser provocado a realizar atividades de
autoavaliao. O gabarito est disponvel no final do livro-didtico, mas
se esforce para resolver as atividades sem ajuda do gabarito, pois assim
voc estar estimulando a sua aprendizagem.
1) Pesquise ao menos trs tecnologias onde o XML est sendo utilizado.
Sintetize as principais caractersticas da funcionalidade e publique no
Frum da ferramenta de aprendizado virtual.
344
linguagem_de_programacao_III.indb 344
04/02/11 11:15
Saiba mais
Se voc desejar, aprofunde os contedos estudados nesta unidade
ao consultar as seguintes referncias:
W3Schools. W3Schools Online Web Tutorials, 2010.
Disponvel em: <www.w3schools.com/>. Acesso em: 01 mar.
2010.
W3C. World Wide Web Consortium, 2010. Disponvel em:
<www.w3.org/>. Acesso em: 2 mar. 2010.
Dicas-l, 2010. Disponvel em <www.dicas-l.com.br//>. Acesso
em: 16 maio 2010.
iMasters, 2010. Disponvel em < http://imasters.uol.com.br//>.
Acesso em: 16 maio 2010.
Plugmasters, 2010. Disponvel em: <www.plugmasters.com.br>.
Acesso em: 15 maio 2010.
Unidade 5
linguagem_de_programacao_III.indb 345
345
04/02/11 11:15
linguagem_de_programacao_III.indb 346
04/02/11 11:15
unidade 6
Sees de estudo
linguagem_de_programacao_III.indb 347
Seo 1
O que o AJAX
Seo 2
Seo 3
Seo 4
Framework
04/02/11 11:15
348
linguagem_de_programacao_III.indb 348
04/02/11 11:15
XHTML;
JavaScript;
CSS;
DOM;
XML.
Unidade 6
linguagem_de_programacao_III.indb 349
349
04/02/11 11:15
350
linguagem_de_programacao_III.indb 350
04/02/11 11:15
Aplicabilidade do AJAX
Existem diversos tipos de situaes em que o uso do AJAX
amplamente utilizado. Algumas situaes so mais perceptveis,
como: validao de formulrios, atualizao de enquetes e de
carrinhos de compras (e-commerce), conversao on-line (chats),
entre outras que priorizam a atualizao de informaes em
tempo real.
Outro exemplo bastante comum so os sites de relacionamento.
Muitos utilizam plenamente o AJAX para melhorar
a interao com os usurios. Um dos mais populares
sites conhecidos a rede social Orkut pertencente
ao Google e utiliza bastante esse recurso quanto
classificao de amigos. O Twitter, outra rede social,
utiliza o AJAX para verificar se existem novos tweets
para o usurio.
Unidade 6
linguagem_de_programacao_III.indb 351
351
04/02/11 11:15
if (estado!=) {
// chamada da funo
ajax = ajaxInit();
if (ajax) {
// realiza a leitura do retorno do AJAX
ajax.onreadystatechange = escreveCidades ;
// url onde se encontra o cdigo do servidor
352
linguagem_de_programacao_III.indb 352
04/02/11 11:15
url = cidade.php?estado=+estado ;
// executa o AJAX
ajax.send (null) ;
}
} else {
limparCombo(cidade);
function escreveCidades () {
if ( ajax.readyState == 4) {
// status do AJAX
if ( ajax.status == 200) {
acrescentaOption(cidade,ajax.responseText);
}
}
var option=texto.split(^);
// identifica o elemento no formulrio neste exemplo uma caixa
de seleo
var elemento=document.getElementById(combo);
Unidade 6
linguagem_de_programacao_III.indb 353
353
04/02/11 11:15
elemento.length=0;
// acrescenta um contedo
elemento.length++;
// divide o valor retornado do AJAX em um vetor
valores = option[i].split(|);
// acrescenta um contedo
function limparCombo(combo) {
// recupera o elemento
var elemento=document.getElementById(combo);
elemento.length=0;
// acrescenta um contedo
}
</script>
<form name=selecioneCidade>
<label for=estadoaccesskey=e>
<u>E</u>stado:
</label>
<select name=estado id=estado onChange=selecionaCidade(this.
options[this.selectedIndex].value)>
<option value= selected=selected>------</option>
354
linguagem_de_programacao_III.indb 354
04/02/11 11:15
<option value=pr>PR</option>
<option value=sp>SP</option>
</select>
<br/>
<label for=cidade accesskey=c><u>C</u>idade :</ l abe l>
<select name=cidade id=cidade>
</select>
</form>
</body>
</html>
// chamada do objeto
xmlhttp = new XMLHttpRequest ( ) ;
} catch (ee) {
try {
} catch (e) {
try {
Unidade 6
linguagem_de_programacao_III.indb 355
355
04/02/11 11:15
// caso no de suporte
xmlhttp = false ;
}
}
}
return xmlhttp ;
356
linguagem_de_programacao_III.indb 356
04/02/11 11:15
if ( $estado==sp ) {
//acrescenta informaes para a varivel $cidade
$cidades .= 5|Mogi^ ;
$cidades .= 6|Palmeiras^ ;
$cidades .= 7|Santos ;
}
// escreve a varivel
echo $cidades ;
?>
Mesmo com essa simplicidade de cdigo deve sempre
existir alguns cuidados. A acentuao sempre um
problema. Procure utilizar codificao mais apropriada
para o navegador.
linguagem_de_programacao_III.indb 357
357
04/02/11 11:15
358
linguagem_de_programacao_III.indb 358
04/02/11 11:15
// varivel global
var tipoDados=;
Unidade 6
linguagem_de_programacao_III.indb 359
359
04/02/11 11:15
background-color: #FFF;
color: #000;
font-weight: normal;
}
-->
</style>
<link href=teste.css rel=stylesheet type=text/css />
</head>
<body>
<h1>Cadastro de Pessoas</h1>
<hr />
<form name=frmpessoa method=post enctype=multipart/
form-data onsubmit=validarcampos(this); return false;
onreset=limparstyles();>
<table width=40% border=1>
<tr>
<td scope=col><label for=codigo>Cdigo</label></td>
<td scope=col><input name=codigo type=text class=normal
id=codigo value= readonly=readonly /></td>
</tr>
<tr>
<td><label for=nome>Nome</label></td>
<td>
<input type=text name=nome id=nome value=
obrigatorio=sim descr=Nome class=normal/>
</td>
</tr>
<tr>
<td><label for=uf>UF Residencia</label></td>
<td>
360
linguagem_de_programacao_III.indb 360
04/02/11 11:15
<option value=>-------------</option>
<option value=SP>SP</option>
<option value=PR>PR</option>
<option value=SC>SC</option>
<option value=RS>RS</option>
</select>
</td>
</tr>
<tr>
<td><label for=cidade>Cidade Residencia</label></td>
<td>
<select name=cidade class=normal id=cidade obrigatorio=sim
descr=Cidade Residencia
>
<option value=>-------------</option>
</select>
</td>
</tr>
<tr>
<td colspan=2 align=center>
<input type=submit name=salvar value=Salvar />
<input type=reset name=limpar value=Limpar />
<br />
<input type=button value=Listar name=listar
onclick=carregarDados (, salvarDados.php, salvar)/></td>
</tr>
</table>
</form>
<hr />
Unidade 6
linguagem_de_programacao_III.indb 361
361
04/02/11 11:15
<p>
<div id=pagina>
</div>
</p>
</body>
</html>
// varivel auxiliar
var aux=codigo.split(=);
// testa o contedo
if (aux[1]!=) {
// chamada da funo
ajax = ajaxInit();
if (ajax) {
362
linguagem_de_programacao_III.indb 362
04/02/11 11:15
tipoDados=tipo;
ajax.onreadystatechange = escreveDados ;
url = url+?+codigo ;
ajax.send (null) ;
}
} else {
if (tipo==cidade)
limparCombo(cidade);
}
}
Unidade 6
linguagem_de_programacao_III.indb 363
363
04/02/11 11:15
function escreveDados() {
if ( ajax.readyState == 4) {
if ( ajax.status == 200) {
if (tipoDados==cidade)
acrescentaOption(cidade,ajax.responseText);
}
}
}
if (objSel.options[i].value==valor) {
// seleciona o item
objSel.selectedIndex = i;
break;
}
}
364
linguagem_de_programacao_III.indb 364
04/02/11 11:15
var option=texto.split(^);
var elemento=document.getElementById(combo);
elemento.length=0;
elemento.length++;
// quebra em um novo vetor para montar os valores da combobox
valores = option[i].split(|);
// acrescenta o novo element na combobox
// limpa a combobox
function limparCombo(combo) {
var elemento=document.getElementById(combo);
elemento.length=0;
Unidade 6
linguagem_de_programacao_III.indb 365
365
04/02/11 11:15
<?php
$estado = $_GET[estado];
$cidades = ;
// inclui os parmetros para conectar no banco de dados
include(variaveis.bd);
// conecta do banco
$link = mysql_connect($serv, $user, $pass) or die(Erro na conexo com o
banco de dados);
// vamos selecionar o banco de dados errado o que resultar em um erro
mysql_select_db(prg3);
// a consulta montada e encaminhada ao servidor
$result= mysql_query(SELECT c.id_cidade, c.nm_cidade FROM cidade c
WHERE c.id_uf=.$estado.);
//lista o resultado do banco de dados
$cidades=|-------------;
while ($lista_cidades=mysql_fetch_array($result)) {
$cidades.=^.$lista_cidades[id_cidade].|.mb_convert_
encoding($lista_cidades[nm_cidade],utf-8, iso-8859-1);
}
// encerra a conexo
mysql_close();
echo $cidades ;
?>
366
linguagem_de_programacao_III.indb 366
04/02/11 11:15
function validarcampos(form) {
var elementos=form.elements;
var resp=;
var enviarcampos=;
if (((elementos[i].type==text) || (elementos[i].type==hidden)
|| (elementos[i].type==select-one)) && (elementos[i].getAttribute(
obrigatorio)==sim) && (document.getElementById(elementos[i].
getAttribute(id)).value==)) {
elementos[i].style.backgroundColor= #FF9;
elementos[i].style.color= #F00;
elementos[i].style.fontWeight= bold;
resp+=O campo +elementos[i].getAttribute(descr) +
obrigatorio.\n;
} else {
if ((elementos[i].getAttribute(type)!=submit) &&
(elementos[i].getAttribute(type)!=reset) && (elementos[i].getAttribute
(type)!=button)) {
elementos[i].style.backgroundColor= #FFF;
elementos[i].style.color= #000;
elementos[i].style.fontWeight= normal;
Unidade 6
linguagem_de_programacao_III.indb 367
367
04/02/11 11:15
if ((elementos[i].getAttribute(type)!=submit) && (elementos[i].
getAttribute(type)!=reset) && (elementos[i].getAttribute(type)!=but
ton)) {
if (enviarcampos==) enviarcampos=elementos[i].getAttribute(
name)+=+document.getElementById(elementos[i].getAttribute(id)).
value;
else enviarcampos+=&+elementos[i].getAttribute(name)+=
+document.getElementById(elementos[i].getAttribute(id)).value;
enviarcampos
if (resp!=) {
alert(resp);
return false;
} else {
form.reset();
return false;
368
linguagem_de_programacao_III.indb 368
04/02/11 11:15
// conecta do banco
$link = mysql_connect($serv, $user, $pass) or die(Erro na conexo com o
banco de dados);
// vamos selecionar o banco de dados errado o que resultar em um erro
mysql_select_db(prg3);
// realiza uma validao nos dados
if ((@$_GET[nome]!=) && (@$_GET[cidade]!=)) {
// feita uma validao ternria, o qual verifica um dado e acrescenta
um valor a uma varivel
$cidade = @$_GET[cidade];
// o mysql permite a funo replace (deleta e insere a mesma
informao) quando no existe insere, se existe altera
Unidade 6
linguagem_de_programacao_III.indb 369
369
04/02/11 11:15
$retorno.=<tr>\n;
$retorno.=<td>.$pessoas[id_pessoa].</td>\n;
$retorno.=<td>.mb_convert_encoding($pessoas[nm_
pessoa],utf-8, iso-8859-1).</td>\n;
$retorno.=<td>.mb_convert_encoding($pessoas[nm_
cidade],utf-8, iso-8859-1).</td>\n;
$retorno.=<td>.$pessoas[id_uf].</td>\n;
$retorno.=</tr>\n;
}
// encerra a conexo
mysql_close();
$retorno.=</table>;
echo $retorno;
?>
370
linguagem_de_programacao_III.indb 370
04/02/11 11:15
document.getElementById(pagina).innerHTML =
}
}
}
Unidade 6
linguagem_de_programacao_III.indb 371
371
04/02/11 11:15
<?php
$codigo = $_GET[codigo];
$pessoa = ;
// inclui os parmetros para conectar no banco de dados
include(variaveis.bd);
// conecta do banco
$link = mysql_connect($serv, $user, $pass) or die(Erro na conexo com o
banco de dados);
// vamos selecionar o banco de dados errado o que resultar em um erro
mysql_select_db(prg3);
372
linguagem_de_programacao_III.indb 372
?>
04/02/11 11:15
document.getElementById(pagina).innerHTML =
}
}
}
function carregarPessoa(retorno) {
// monta um vetor para o tipo de dados de combobox e texto
var tipos=retorno.split(~);
// separa em vetor os dados de texto
var vl_campos=tipos[0].split($);
// atribui os dados para cada campo de formulrio
document.frmpessoa.codigo.value=vl_campos[0];
Unidade 6
linguagem_de_programacao_III.indb 373
373
04/02/11 11:15
document.frmpessoa.nome.value=vl_campos[1];
// seleciona o estado cadastrado para a pessoa
selecionaCombo(document.frmpessoa.uf,vl_campos[3]);
// acrescenta as cidades do estado selecionado
acrescentaOption(cidade,tipos[1]);
//seleciona a cidade cadastrada para a pessoa
selecionaCombo(document.frmpessoa.cidade,vl_campos[2]);
}
374
linguagem_de_programacao_III.indb 374
04/02/11 11:15
Unidade 6
linguagem_de_programacao_III.indb 375
375
04/02/11 11:15
-->
<form action= method=post onSubmit=setarCampos(this);
enviarForm(processar.php, campos, divResultado); return false;>
<tr>
<td>Nome</td>
<td>
<input name=txtNome id=txtNome type=text>
</td>
</tr>
<tr>
<td>Email</td>
<td>
<input name=txtEmail id=txtEmail type=text>
</td>
</tr>
<tr>
<td> </td>
<td>
<input type=submit value=Enviar> <input type=reset
value=Limpar>
</td>
</tr>
</form>
</table>
<div id=divResultado/>
<script>
//Cria a funo com os campos para envio via parmetro
function setarCampos() {
// recusros sendo atribuidos
campos = txtNome=+encodeURI(document.
getElementById(txtNome).value).toUpperCase()+&txtEmail=+encodeU
RI(document.getElementById(txtEmail).value);
376
linguagem_de_programacao_III.indb 376
04/02/11 11:15
}
</script>
</body>
</htm>
if (navegador.indexOf(msie) != -1) {
var controle = (navegador.indexOf(msie 5) != -1) ? Microsoft.
XMLHTTP : Msxml2.XMLHTTP;
//Operador ternrio que adiciona o objeto padro do seu
navegador (caso for o IE) varivel controle
try {
//Inicia o objeto no IE
} catch (e) { }
} else {
Unidade 6
linguagem_de_programacao_III.indb 377
377
04/02/11 11:15
function handleHttpResponse()
{
if (xmlhttp.readyState == 4)
if(xmlhttp.status==200)
elemento.innerHTML = xmlhttp.responseText;
} else {
}
//Funo que envia o formulrio
elemento = document.getElementById(destino);
objetoXML();
if (!xmlhttp) {
elemento.innerHTML = Impossvel iniciar o objeto
XMLHttpRequest.;
378
linguagem_de_programacao_III.indb 378
04/02/11 11:15
return;
} else {
elemento.innerHTML = Carregando...;
xmlhttp.onreadystatechange = handleHttpResponse;
xmlhttp.setRequestHeader(Content-type, application/x-www-formurlencoded);
xmlhttp.setRequestHeader(Content-length, 2);
xmlhttp.send(campos);
Unidade 6
linguagem_de_programacao_III.indb 379
379
04/02/11 11:15
380
linguagem_de_programacao_III.indb 380
04/02/11 11:15
Unidade 6
linguagem_de_programacao_III.indb 381
381
04/02/11 11:15
url=busca_nome.php;
ajax(url,campos);
}
</script>
</head>
<body>
<table width=657 border=0 bgcolor=#f7f7f7>
<tr>
<td align=center bgcolor=#CCCCCC>
<strong>
<font color=#FF0000 size=1 face=Verdana, Arial, Helvetica, sansserif>
<-BUSCA DINMICAMICA ->
</font>
</strong>
</td>
</tr>
<tr>
<td>
<font size=1 face=Verdana, Arial, Helvetica, sansserif><strong>DIGITE AQUI O NOME DA PESSOA</strong></font>:
<!-- NOTE QUE A CADA TECLA PRESSIONADA CHAMADA A
FUNO PESQUISA PASSANDO O QUE O USURIO TEM DIGITADO AT O
MOMENTO -->
<input type=text name=nome onKeyPress=pesquisa(this.value)>
</td>
</tr>
<tr>
<td>
<!-- AQUI SER APRESENTADO O RESULTADO DA BUSCA DINMICA,
OU SEJA, OS NOMES -->
<div id=pagina>
382
linguagem_de_programacao_III.indb 382
04/02/11 11:15
</div>
</td>
</tr>
</table>
</body>
</html>
Fonte: <www.codigofonte.net/dicas/php/170_busca-dinamica-utilizando-ajax>.
Veja que no foi necessrio montar a tag form. Essa omisso foi
proposital para que voc possa perceber que o AJAX gerencia
o tipo de mtodo a ser enviado para o servidor. Agora, basta
montar o arquivo script.js:
// JavaScript Document
// FUNO RESPONSVEL DE CONECTAR A UMA PGINA EXTERNA, NO
NOSSO CASO A BUSCA_NOME.PHP
// E RETORNAR OS RESULTADOS
function ajax(url,campos) {
req = null;
// Procura por um objeto nativo (Mozilla/Safari)
if (window.XMLHttpRequest) {
req.open(POST,url,true);
req.onreadystatechange = processReqChange;
req.setRequestHeader(Content-type, application/x-www-formurlencoded);
req.setRequestHeader(Content-length, 2);
req.send(campos);
// Procura por uma verso ActiveX (IE)
} else if (window.ActiveXObject) {
linguagem_de_programacao_III.indb 383
383
04/02/11 11:15
if (req) {
req.open(POST,url,true);
req.onreadystatechange = processReqChange;
req.setRequestHeader(Content-type, application/x-www-formurlencoded);
req.setRequestHeader(Content-length, 2);
//Envia o formulrio com dados da varivel campos (passado por
parmetro)
req.send(campos);
}
function processReqChange() {
// apenas quando o estado for completado
if (req.readyState == 4) {
if (req.status ==200) {
document.getElementById(pagina).innerHTML = req.responseText;
} else {
}
}
}
Fonte: <www.codigofonte.net/dicas/php/170_busca-dinamica-utilizando-ajax>.
linguagem_de_programacao_III.indb 384
04/02/11 11:15
<?php
if(!empty($_POST[valor])) {
// O CAMPO VALOR CONTER O QUE O USUARIO DIGITOU AT O
MOMENTO..
// CONECTA AO BANCO COLOCA PARAMENTROS IP,USUARIO,SENHA
$conexao=mysql_connect(localhost,web,123);
if($linhas>0){
//EXECUTA UM LOOP PARA MOSTRAR OS NOMES DAS PESSOAS
// VALE LEMBRAR QUE TODOS ESSES RESULTADOS SERO MOSTRADOS
DENTRO DA PGINA INDEX.PHP
// DENTRO DO DIV PAGINA
echo <ul>\n;
while($pegar=mysql_fetch_array($resultado))
echo <li>$pegar[nm_pessoa]</li>\n;
}
echo </ul>\n;
}
?>
Fonte: <www.codigofonte.net/dicas/php/170_busca-dinamica-utilizando-ajax>.
Unidade 6
linguagem_de_programacao_III.indb 385
385
04/02/11 11:15
Upload de arquivos
Apesar das vantagens, o AJAX sofre com a sua prpria
tecnologia. Voc deve se lembrar que o AJAX no encaminha
informaes ao servidor por meio da postagem de formulrio.
Em vez disso, ele cria uma camada de comunicao com o
servidor.
Essa caracterstica possui um custo e, dependendo da aplicao,
pode ser muito alto. A funcionalidade de enviar arquivos para o
servidor feita por meio da postagem do HTML. Isso significa
que o browser decodifica o arquivo para o HTML poder
encaminhar a postagem. O HTML processa o arquivo para o
servidor.
O AJAX no possui uma postagem. Ento como proceder nessa
situao? Atualmente no possui uma soluo para o AJAX
realizar o upload de arquivos. Em contrapartida, existem diversas
solues que simulam essa atividade pelo AJAX, uma delas a
utilizao de iFrames. Essa utilizao pode acarretar riscos j que
no so todos os browsers que tratam o iFrame de forma concisa.
Veja o seguinte exemplo de sua utilizao.
386
linguagem_de_programacao_III.indb 386
04/02/11 11:15
Unidade 6
linguagem_de_programacao_III.indb 387
387
04/02/11 11:15
32. <body>
33. <div id="container">
34.
<div id="header"><div id="header_left"></div>
35.
<div id="header_main">Max's AJAX File Uploader</
div><div id="header_right"></div></div>
36.
<div id="content">
37.
<form action="upload.php" method="post"
enctype="multipart/form-data" target="upload_target"
onsubmit="startUpload();" >
38.
<p id="f1_upload_process">Loading...<br/><img
src="loader.gif" /><br/></p>
39.
<p id="f1_upload_form" align="center"><br/>
40.
<label>File:
41.
<input name="myfile" type="file" size="30" />
42.
</label>
43.
<label>
44.
<input type="submit" name="submitBtn"
class="sbtn" value="Upload" />
45.
</label>
46.
</p>
47.
48.
<iframe id="upload_target" name="upload_target"
src="#" style="width:0;height:0;border:0px solid #fff;"></iframe>
49.
</form>
50.
</div>
51.
<div id="footer"><a href="http://www.ajaxf1.com"
target="_blank">Powered by AJAX F1</a></div>
52.
</div>
53. </body>
54. </html>
Fonte: <www.ajaxf1.com>.
388
linguagem_de_programacao_III.indb 388
04/02/11 11:15
<?php
// Edit upload location here
$destination_path = getcwd().DIRECTORY_SEPARATOR;
$result = 0;
sleep(1);
?>
<script language=javascript type=text/javascript>window.top.
window.stopUpload(<?php echo $result; ?>);</script>
Fonte: <www.ajaxf1.com>.
Seo 4 Bibliotecas
O desenvolvimento de softwares traado por diversos tipos
de ferramentas que facilitam e enriquecem o trabalho. Os
frameworks tanto podem ser softwares que criam programas com
uma maior facilidade como scripts contendo diversos recursos.
Quando um framework no cria um programa, mas
possibilita a utilizao de solues com o intuito de agilizar o
desenvolvimento, recebem o nome de bibliotecas.
Unidade 6
linguagem_de_programacao_III.indb 389
389
04/02/11 11:15
Dojo
A biblioteca Dojo possui uma distribuio gratuita e foi
desenvolvida em JavaScript. O Dojo possui a proposta de reduzir
o tratamento de solicitaes assncronas a uma nica chamada
de funo, alm de oferecer diversas funcionalidades DOM para
diversos navegadores.
DOM uma sigla de Modelo de Objetos de Documentos. Esse
modelo uma especificao do consrcio W3C que independe
da plataforma e linguagem. A especificao define os objetos
que podem alterar dinamicamente sua estrutura, o contedo e os
estilos dos documentos eletrnicos. O DOM oferece um padro
para acessar os elementos do documento trabalhando com eles
separadamente.
Por se tratar de uma biblioteca, a sua utilizao extremamente
simples. No necessria uma instalao. Necessita apenas de
uma chamada por meio de uma tag script e em seguida invocar as
funes.
O Dojo possui uma documentao prpria em que
voc pode estar estudando sobre como utilizar as
funcionalidades. A pgina oficial dessa ferramenta
<www.dojotoolkit.org>.
390
linguagem_de_programacao_III.indb 390
04/02/11 11:15
Sarissa
Sarissa uma biblioteca direcionada para a manipulao do
XML em JavaScript. Possui suporte a componentes ActiveX
MSXML do Internet Explorer, Mozilla, Opera, Konqueror e
Safari.
O Sarissa utiliza o padro Adapter para criar um objeto
XMLHttpRequest baseado em JavaScript para os navegadores
que no possui esse objeto nativo. Desta forma, ele padroniza os
chamados realizando as devidas adaptaes. Portanto, o cdigo a
seguir dever funcionar para todos os browsers.
var xhr = new XMLHttpRequest();
xhr.opendir(GET,dados.xml);
xhr.onreadystatechange = function {
if (xhr.readyState == 4) {
alert(xhr.responseXML);
}
}
Prototype
Esta biblioteca tambm escrita em JavaScript, porm possui
seu foco nas funcionalidades desta linguagem com o intuito de
suportar uma programao orientada a objetos. Apesar de sua
leitura ser muito dificultosa, a sua utilizao simples e direta.
O Prototype por muitas vezes considerado como uma biblioteca
geral para desenvolver bibliotecas. Os desenvolvedores AJAX
tm uma probabilidade maior de utilizarem alguma biblioteca
com base na Prototype. Essa caracterstica descende de ela ser
construda com base na programao orientao objeto. Assim,
todos os recursos dessa metodologia so herdados pela biblioteca.
Essa caracterstica permite uma customizao mais natural e
dinmica.
Unidade 6
linguagem_de_programacao_III.indb 391
391
04/02/11 11:15
Sntese
Nesta unidade voc viu uma tecnologia muito til no
desempenho de aplicaes Web. O AJAX um conjunto de
aplicaes destinado em promover uma agilidade s pginas
Web semelhante a uma aplicao desktop. Vimos como o AJAX
complexo e, em contrapartida, possui um cdigo enxuto com
pouca codificao, alm de sua limitao no upload de arquivos
e o quanto os frameworks facilitam o nosso trabalho como
desenvolvedores.
392
linguagem_de_programacao_III.indb 392
04/02/11 11:15
Atividades de autoavaliao
Ao final de cada unidade, voc ser provocado a realizar atividades de
autoavaliao. O gabarito est disponvel no final do livro-didtico, mas
se esforce para resolver as atividades sem ajuda do gabarito, pois assim
voc estar estimulando a sua aprendizagem.
1) Desenvolva uma aplicao utilizando o AJAX e um banco de dados.
Poder construir um cadastro de pessoas, onde, ao digitar parcialmente
o nome o usurio, tenha a opo de selecionar o nome e carregar as
informaes para a tela.
Saiba mais
Se voc desejar, aprofunde os contedos estudados nesta unidade
ao consultar as seguintes referncias:
W3Schools. W3Schools Online Web Tutorials, 2010.
Disponvel em: <www.w3schools.com>. Acesso em: 01 mar.
2010.
W3C. World Wide Web Consortium, 2010. Disponvel em:
<www.w3.org>. Acesso em: 2 mar. 2010.
AJAX F1, 2010. Disponvel em: <www.ajaxf1.com>. Acesso em:
20 maio 2010.
iMasters, 2010. Disponvel em: <http://imasters.uol.com.br>.
Acesso em: 16 maio 2010.
CodigoFonte.net, 2010. Disponvel em: <www.codigofonte.
net>. Acesso em: 15 jul. 2010.
Unidade 6
linguagem_de_programacao_III.indb 393
393
04/02/11 11:15
linguagem_de_programacao_III.indb 394
04/02/11 11:15
linguagem_de_programacao_III.indb 395
04/02/11 11:15
linguagem_de_programacao_III.indb 396
04/02/11 11:15
Referncias
BEZERRA, Eduardo. Princpios de anlise e projeto de sistemas
com UML. 2. ed. Rio de Janeiro: Campus, 2007.
BOOCH, Grady; RUMBAUGH, James; JACOBSON, Ivar. UML, guia
do usurio. Rio de Janeiro : Elsevier, 2000.
GUEDES, Gilleanes T. A. UML: Uma Abordagem Prtica. So
Paulo: Novatec, 2004.
FOWLER, Martin. UML essencial : um breve guia para a
linguagem-padro de modelagem de objetos. 3.ed.. Porto
Alegre, RS : Bookman, 2005.
DICIONRIO ELETRNICO MICHAELIS. Moderno dicionrio da
lngua portuguesa. So Paulo: Melhoramentos, 2009. Disponvel
em: <http://michaelis.uol.com.br/moderno/portugues/index.
php?lingua=portugues-portugues&palavra=intera%E7%E3o>.
Acesso em: 05/10/2010.
OMG. Introduction to Unified Modeling Language. Disponvel
em: <http://www.omg.org/gettingstarted/what_is_uml.htm>.
Acessado em 08-mar-2010.
OMG-About. About the Object Management Group. Disponvel
em: < http://www.omg.org/gettingstarted/gettingstartedindex.
htm>. Acessado em 10-out-2010.
SPARXSYSTEMS. UML 2 Tutorial. Disponvel em: < http://www.
sparxsystems.com/resources/uml2_tutorial/>. Acessado em
10-out-2010.
WAZLAWICK, Raul Sidnei. Anlise e projeto de sistemas
de informao orientados a objetos. 1. ed. Rio de Janeiro:
Elsevier, 2004.
Manual PHP, 2010. Disponvel em: http://br2.php.net/manual/
pt_BR/index.php//> Acessado em 05 abril 2010.
PHP Brasil, 2010. Disponvel em: <http://www.phpbrasil.com/>.
Acessado em 05 abril 2010.
T r u q u e s e D i c a s - Tutoriais de Javascript, 2010.
Disponvel em: < http://www.truquesedicas.com/tutoriais/php/
index.htm>. Acessado em 02 mar 2010.
linguagem_de_programacao_III.indb 397
04/02/11 11:15
398
linguagem_de_programacao_III.indb 398
04/02/11 11:15
linguagem_de_programacao_III.indb 399
04/02/11 11:15
linguagem_de_programacao_III.indb 400
04/02/11 11:15
linguagem_de_programacao_III.indb 401
(1)
(2)
(2)
(2)
( 1)
(1)
(2)
(2)
(2)
(2)
(2)
(2)
(2)
(2)
(1)
(2)
(1)
(1)
(1)
(1)
(1)
(2)
PostgreSQL
HTML
Oracle
SQLite
Javascript
Microsoft Silverlight
PHP
MySQL
ASP
DB2
.NET
CGI
Perl
Java
CSS
Python
Microsoft SQL Server
Ruby
Firebird
ColdFusion
Websphere
Flash
04/02/11 11:15
Unidade 2
1.
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>
<html xmlns=http://www.w3.org/1999/xhtml>
<head>
<meta http-equiv=Content-Type content=text/html; charset=utf-8 />
<title>Exercicio Um</title>
</head>
<script language=javascript type=text/javascript>
function validanumero(numero) {
if (numero.length == 0) {
return false;
} else {
9)))
return true;
return false;
}
function validar(form) {
var erro=ATENO\n\n;
var msgerro=false;
402
linguagem_de_programacao_III.indb 402
04/02/11 11:15
if (form.txt_nome.value==) {
msgerro=true;
if (form.txt_nomemae.value==){
msgerro=true;
var idade=form.txt_idade.value;
if (validanumero(idade)){
if ((parseInt(idade)<10) || (parseInt(idade)>120)) {
120 anos\n;
msgerro=true;
} else {
erro+=O Campo Idade deve conter somente nmeros
inteiros\n;
msgerro=true;
var email=form.txt_email.value;
if (email==) {
msgerro=true;
} else {
// verifica se existe um caractere @ e no se encontra na primeira
posio
if ((email.indexOf(@)<0) || (email.indexOf(.)<=(email.
indexOf(@)+1)) || ((email.indexOf(.)+1)>=email.length)) {
403
linguagem_de_programacao_III.indb 403
04/02/11 11:15
msgerro=true;
if (msgerro) {
alert(erro);
return false;
return true;
}
</script>
<body>
<h1>Cadastro</h1>
<p>
<form name=cadpessoa id=cadpessoa method=post action=
onsubmit=return validar(this);>
<table width=338>
<tr>
<td width=163><label for=txt_nome>Nome:</label></td>
<td width=163><input type=text name=txt_nome id=txt_
nome value= /></td>
</tr>
<tr>
<td>Endereo</td>
<td><input type=text name=txt_endereco id=txt_endereco
value= /></td>
</tr>
<tr>
<td><label for=txt_nomemae>Nome da Me</label></td>
<td><input type=text name=txt_nomemae id=txt_nomemae
value= /></td>
</tr>
404
linguagem_de_programacao_III.indb 404
04/02/11 11:15
<tr>
<td><label for=txt_idade>Idade</label></td>
<td><input type=text name=txt_idade id=txt_idade value=
/></td>
</tr>
<tr>
<td><label for=txt_email>E-mail</label></td>
<td><input type=text name=txt_email id=txt_email value=
/></td>
</tr>
<tr>
<td align=center><input type=submit name=btn_validar
value=Validar /></td>
<td align=center><input type=reset name=btn_limpar
value=Limpar /></td>
</tr>
</table>
</form>
</p>
</body>
</html>
2.
405
linguagem_de_programacao_III.indb 405
04/02/11 11:15
function inserir(texto) {
while (texto.indexOf(\n)>=0)
texto=texto.replace(\n,<br />);
document.getElementById(div_result).innerHTML=texto;
}
</script>
<body>
<form name=forminsert id=forminsert>
<label for=txa_insert>Insira o texto abaixo:</label><br />
<textarea name=txa_insert id=txa_insert cols=50 rows=10
onkeyup=inserir(this.value);></textarea>
<br />
O Resultado:<br />
<div id=div_result style=color:#009>
</div>
</form>
</body>
</html>
Unidade 3
1.
<<<arquivo exercicio1.php >>>
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>
<html xmlns=http://www.w3.org/1999/xhtml>
<head>
<meta http-equiv=Content-Type content=text/html; charset=utf-8 />
<title>Exerccio 1 envio Form</title>
406
linguagem_de_programacao_III.indb 406
04/02/11 11:15
</head>
<body>
<form name=formulario target=_self action=recebeform.php
method=post>
<table align=left cellpadding=0 cellspacing=0 border=1>
<tr>
<td>Nome</td>
<td><input type=text name=txt_nome id=txt_nome value=
/></td>
</tr>
<tr>
<td>Endereo</td>
<td><input type=text name=txt_endereco id=txt_endereco
value= /></td>
</tr>
<tr>
<td>Nome da me</td>
<td><input type=text name=txt_nomemae id=txt_nomemae
value= /></td>
</tr>
<tr>
<td>Idade</td>
<td><input type=text name=txt_idade id=txt_idade value=
/></td>
</tr>
<tr>
<td>E-mail</td>
<td><input type=text name=txt_email id=txt_email value=
/></td>
</tr>
<tr>
407
linguagem_de_programacao_III.indb 407
04/02/11 11:15
switch ($tipo) {
case 1:
break;
case 2:
echo $msg;
break;
408
linguagem_de_programacao_III.indb 408
04/02/11 11:15
}
// Verifica se o formulrio foi enviado
if (@$_POST[btn_enviar]==) erro(1);
else {
// varivel de controle
$controle=false;
if ($_POST[txt_nome]==) {
$controle=true;
if ($_POST[txt_endereco]==) {
/>\n;
$controle=true;
if ($_POST[txt_nomemae]==) {
/>\n;
$controle=true;
if ($_POST[txt_idade]==) {
$controle=true;
} else {
if (intval($_POST[txt_idade])<3) {
$validacampos.=A idade deve ser maior que dois
anos<br />\n;
$controle=true;
409
linguagem_de_programacao_III.indb 409
04/02/11 11:15
if ($_POST[txt_email]==) {
$controle=true;
} else {
/*
*/
if (((strpos($_POST[txt_email],@)===false) &&
(strpos($_POST[txt_email],.)===false)) || (strripos($_POST[txt_
email],.)<strpos($_POST[txt_email],@))) {
$validacampos.=O campo e-mail deve conter um e-mail
vlido<br />;
$controle=true;
if ($controle==true)
erro(2,$validacampos);
else {
?>
410
linguagem_de_programacao_III.indb 410
04/02/11 11:15
<td>Nome da me</td>
<td><?=$_POST[txt_nomemae]?></td>
</tr>
<tr>
<td>Idade</td>
<td><?=$_POST[txt_idade]?></td>
</tr>
<tr>
<td>E-mail</td>
<td><?=$_POST[txt_email]?></td>
</tr>
</table>
<?php
}
?>
</body>
</html>
2.
<<< arquivo recebeform.php >>>
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>
<html xmlns=http://www.w3.org/1999/xhtml>
<head>
<meta http-equiv=Content-Type content=text/html; charset=utf-8 />
<title>Recebe Formulrio</title>
</head>
411
linguagem_de_programacao_III.indb 411
04/02/11 11:15
<body>
<?php
function erro($tipo, $msg=Sem informao){
switch ($tipo) {
case 1:
break;
case 2:
echo $msg;
break;
}
// Verifica se o formulrio foi enviado
if (@$_POST[btn_enviar]==) erro(1);
else {
// varivel de controle
$controle=false;
if ($_POST[txt_nome]==) {
$controle=true;
if ($_POST[txt_endereco]==) {
/>\n;
$controle=true;
if ($_POST[txt_nomemae]==) {
412
linguagem_de_programacao_III.indb 412
04/02/11 11:15
/>\n;
$controle=true;
if ($_POST[txt_idade]==) {
$controle=true;
} else {
if (intval($_POST[txt_idade])<3) {
$validacampos.=A idade deve ser maior que dois
anos<br />\n;
$controle=true;
if ($_POST[txt_email]==) {
$controle=true;
} else {
/*
*/
if (((strpos($_POST[txt_email],@)===false) &&
(strpos($_POST[txt_email],.)===false)) || (strripos($_POST[txt_
email],.)<strpos($_POST[txt_email],@))) {
$validacampos.=O campo e-mail deve conter um e-mail
vlido<br />;
$controle=true;
if ($controle==true)
erro(2,$validacampos);
413
linguagem_de_programacao_III.indb 413
04/02/11 11:15
else {
?>
<?php
$arq=arquivo.txt;
$fp=fopen($arq,w+);
if ($fp) {
fwrite($fp,Nome:.$_POST[txt_nome].\n);
414
linguagem_de_programacao_III.indb 414
04/02/11 11:15
fwrite($fp,Endereo:.$_POST[txt_endereco].\n);
fwrite($fp,Nome da me:.$_POST[txt_nomemae].\n);
fwrite($fp,Idade:.$_POST[txt_idade].\n);
fwrite($fp,E-mail:.$_POST[txt_email].\n);
fclose($fp);
echo <p><a href=\learquivo.php?arq=.$arq.\>Ler arquivo
Texto Gerado</a></p>;
}
?>
</body>
</html>
<<< arquivo learquivo.php >>>
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>
<html xmlns=http://www.w3.org/1999/xhtml>
<head>
<meta http-equiv=Content-Type content=text/html; charset=utf-8 />
<title>L arquivo</title>
</head>
<body>
<?php
if (@$_GET[arq]!=) {
if (file_exists($_GET[arq])) {
$fp=fopen($_GET[arq],r);
if ($fp) {
415
linguagem_de_programacao_III.indb 415
04/02/11 11:15
border=1>;
linha a linha
while (!feof($fp)) {
$conteudo=fgets($fp);
caractere :
$dados=explode(:, $conteudo);
if ($dados[0]==) continue;
echo <tr><td>.$dados[0].</td>;
echo <td>.$dados[1].</td></tr>;
}
}
?>
</body>
</html>
Unidade 4
1.
<<< estrutura de arquivos >>>
416
linguagem_de_programacao_III.indb 416
04/02/11 11:15
/* Tags */
html { background:#F4F4F4; text-align:center; }
body { font-size:10pt; font-family:Trebuchet MS; width:400px;
background:#FFFFFF; margin:0 auto; text-align:left; padding:10px; }
a { text-decoration:none; color:#336699; }
a:hover { text-decoration:underline; }
/* Mensagens */
.mensagem { margin-bottom:10px; padding:10px; }
417
linguagem_de_programacao_III.indb 417
04/02/11 11:15
/* Formulario */
form { text-align:left; display:table; width:100%; clear:both; }
label, input { display:block; padding:5px;}
input#nome, input#autor, input#editora { width:390px; }
input#consultar, input#cadastrar { float:right; }
/* Menu */
#menu { border-bottom:1px dashed #CCC; padding-bottom:5px; }
#menu li { display:inline; width:100px; padding:10px; }
/* Tabelas */
table { border-collapse:collapse; width:100%; border:1px solid #B4D1DC;
border-bottom:3px solid #B4D1DC; }
table tr { background:#FFF; }
table th { background:#B4D1DC; border-bottom:3px solid #777; }
table td, table th { padding:5px; text-align:center; border:1px solid #ccc; }
http://w3c.globo.com/TR/xhtml1/DTD/xhtml1-strict.dtd>
<head>
418
linguagem_de_programacao_III.indb 418
04/02/11 11:15
<meta http-equiv=Content-Type content=text/
html;charset=ISO-8859-1/>
<title>Cadastro de Livros</title>
</head>
<body>
<?php
include(menu.php);
?>
<h1>Cadastro de Livros</h1>
<?php
if(!empty($_POST)):
// valida os campos
if( (!empty($_POST[nome])) && (!empty($_POST[autor]))
&& (!empty($_POST[editora])) && (!empty($_POST[paginas])) ):
$nome = $_POST[nome];
$autor = $_POST[autor];
$editora = $_POST[editora];
$paginas = $_POST[paginas];
$livros = mysql_query(SELECT * FROM livro
WHERE lower(nome) = .strtolower($nome).);
?>
este nome cadastrado.
</div>
<?php
elseif(mysql_query(INSERT INTO livro VALUES
(NULL, .$nome., .$autor., .$editora., .$paginas.))):
419
linguagem_de_programacao_III.indb 419
04/02/11 11:15
?>
</div>
<?php
else:
?>
</div>
<?php
endif;
else:
?>
É necessário preencher
todos os campos para cadastrar o livro.
</div>
<?php
endif;
endif;
?>
<label for=nome>Nome:</label>
<input type=text name=nome id=nome
tabindex=1 />
<label for=autor>Autor:</label>
<input type=text name=autor id=autor
tabindex=2 />
<label for=editora>Editora:</label>
<input type=text name=editora id=editora
tabindex=3 />
420
linguagem_de_programacao_III.indb 420
04/02/11 11:15
<label for=paginas>Páginas:</label>
<input type=text name=paginas id=paginas
tabindex=4 />
<input type=submit name=cadastrar id=cadastrar
value=Cadastrar tabindex=5 />
</form>
</body>
</html>
<<< arquivo consulta.php >>>
<?php
//inclui a conexo
include(./cfg/config.php);
?>
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Strict//EN
http://w3c.globo.com/TR/xhtml1/DTD/xhtml1-strict.dtd>
<head>
<meta http-equiv=Content-Type content=text/
html;charset=ISO-8859-1/>
<title>Consulta de Livros</title>
</head>
<body>
<?php
include(menu.php);
?>
<h1>Consulta de Livros</h1>
<?php
if(!empty($_POST)):
421
linguagem_de_programacao_III.indb 421
04/02/11 11:15
$nome = strtolower($_POST[nome]);
$queryConsulta = mysql_query(SELECT * FROM livro
WHERE lower(nome) LIKE %.$nome.%);
$registros = mysql_num_rows($queryConsulta);
?>
<strong><?php echo $registros; ?></
strong> livro(s) encontrado(s).
</div>
<table>
<thead>
<tr>
<th>Código</th>
<th>Nome</th>
<th>Autor</th>
<th>Editora</th>
<th>Páginas</th>
</tr>
</thead>
<tbody>
<?php
assoc($queryConsulta)):
while($livro = mysql_fetch_
?>
<tr>
<td><a href=./
livro.php?id=<?php echo $livro[codigo]; ?>><?php echo $livro[codigo];
?></a></td>
<td><a href=./
livro.php?id=<?php echo $livro[codigo]; ?>><?php echo $livro[nome];
?></a></td>
422
linguagem_de_programacao_III.indb 422
04/02/11 11:15
$livro[autor]; ?></td>
<td><?php echo
$livro[editora]; ?></td>
<td><?php echo
$livro[paginas]; ?></td>
<td><?php echo
</tr>
<?php
endwhile;
?>
</tbody>
</table>
<?php
else:
?>
</div>
<?php
endif;
endif;
?>
<label for=nome>Nome:</label>
<input tabindex=1 type=text id=nome
name=nome />
<input tabindex=2 id=consultar name=consultar
type=submit value=Consultar />
</form>
</body>
</html>
423
linguagem_de_programacao_III.indb 423
04/02/11 11:15
<head>
<title>Livros</title>
</head>
<body>
<?php
include(menu.php);
?>
</body>
</html>
<<< arquivo lista.php >>>
<?php
include(./cfg/config.php);
?>
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Strict//EN
http://w3c.globo.com/TR/xhtml1/DTD/xhtml1-strict.dtd>
<head>
<meta http-equiv=Content-Type content=text/
html;charset=ISO-8859-1/>
<title>Lista de Livros</title>
</head>
<body>
424
linguagem_de_programacao_III.indb 424
04/02/11 11:15
<?php
include(menu.php);
?>
<h1>Lista de Livros</h1>
<table>
<thead>
<tr>
<th>Código</th>
<th>Nome</th>
<th>Autor</th>
<th>Editora</th>
<th>Páginas</th>
</tr>
</thead>
<tbody>
<?php
while($livro = mysql_fetch_assoc($livros)):
?>
<tr>
<td><a href=./livro.
php?id=<?php echo $livro[codigo]; ?>><?php echo $livro[codigo]; ?></
a></td>
<td><a href=./livro.
php?id=<?php echo $livro[codigo]; ?>><?php echo $livro[nome]; ?></
a></td>
?></td>
?></td>
?></td>
</tr>
425
linguagem_de_programacao_III.indb 425
04/02/11 11:15
<?php
endwhile;
?>
</tbody>
</table>
</body>
</html>
<<< arquivo livro.php >>>
<?php
include(./cfg/config.php);
?>
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Strict//EN
http://w3c.globo.com/TR/xhtml1/DTD/xhtml1-strict.dtd>
<head>
<meta http-equiv=Content-Type content=text/
html;charset=ISO-8859-1/>
<title>Detalhes do Livro</title>
</head>
<body>
<?php
include(menu.php);
$id = $_GET[id];
$queryLivro = mysql_query(SELECT * FROM livro WHERE codigo
= .$id);
if(mysql_num_rows($queryLivro) == 1):
$livro = mysql_fetch_assoc($queryLivro);
?>
<h1>Detalhes do Livro</h1>
426
linguagem_de_programacao_III.indb 426
04/02/11 11:15
<table>
<tbody>
<tr>
<th>Código</th>
?></td>
</tr>
<tr>
<th>Nome</th>
?></td>
</tr>
<tr>
<th>Autor</th>
?></td>
</tr>
<tr>
<th>Editora</th>
?></td>
</tr>
<tr>
<th>Páginas</th>
?></td>
</tbody>
</table>
<?php
</tr>
else:
?>
427
linguagem_de_programacao_III.indb 427
04/02/11 11:15
</div>
<?php
endif;
?>
</body>
</html>
<<< arquivo menu.php >>>
<ul id=menu>
<li><a tabindex=51 href=cadastro.php title=Cadastro>Cadastro</
a></li>
<li><a tabindex=52 href=consulta.php title=Consulta>Consulta</
a></li>
</ul>
2.
<<<estrutura de arquivos>>>
428
linguagem_de_programacao_III.indb 428
04/02/11 11:15
/* Tags */
html { background:#F4F4F4; text-align:center; }
body { font-size:10pt; font-family:Trebuchet MS; width:400px;
background:#FFFFFF; margin:0 auto; text-align:left; padding:10px; }
a { text-decoration:none; color:#336699; }
a:hover { text-decoration:underline; }
/* Mensagens */
.mensagem { margin-bottom:10px; padding:10px; }
.erro { background:#FFFFE0; border:1px solid #E6DB55; color:#333333; }
.sucesso { border:1px solid #568F0F; color:#333; background:#DFF1C0;}
/* Formulario */
form { text-align:left; display:table; width:100%; clear:both; }
label, input { display:block; padding:5px;}
429
linguagem_de_programacao_III.indb 429
04/02/11 11:15
/* Menu */
#menu { border-bottom:1px dashed #CCC; padding-bottom:5px; }
#menu li { display:inline; width:100px; padding:10px; }
/* Tabelas */
table { border-collapse:collapse; width:100%; border:1px solid #B4D1DC;
border-bottom:3px solid #B4D1DC; }
table tr { background:#FFF; }
table th { background:#B4D1DC; border-bottom:3px solid #777; }
table td, table th { padding:5px; text-align:center; border:1px solid #ccc; }
<<< arquivo cadastro.php >>>
<?php
//verifica se o usurio est logado
include(./verificacao.php);
//inclui a conexo com o banco de dados
include(./cfg/config.php);
?>
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Strict//EN
http://w3c.globo.com/TR/xhtml1/DTD/xhtml1-strict.dtd>
<head>
<meta http-equiv=Content-Type content=text/
html;charset=ISO-8859-1/>
<title>Cadastro de Usuários</title>
</head>
<body>
430
linguagem_de_programacao_III.indb 430
04/02/11 11:15
<?php
include(menu.php);
?>
<h1>Cadastro de Usuários</h1>
<?php
if(!empty($_POST)):
if( (!empty($_POST[nome])) && (!empty($_POST[login]))
&& (!empty($_POST[senha])) ):
$nome = $_POST[nome];
$login = $_POST[login];
$senha = $_POST[senha];
$usuarios = mysql_query(SELECT * FROM
usuario WHERE (lower(nome) = .strtolower($nome).) OR (lower(login) =
.strtolower($login).));
?>
Já existe uma
usuário com este nome ou login cadastrado.
</div>
<?php
elseif(mysql_query(INSERT INTO usuario VALUES
(NULL, .$nome., .$login., MD5(.$senha.)))):
?>
sucesso.
</div>
<?php
else:
?>
431
linguagem_de_programacao_III.indb 431
04/02/11 11:15
</div>
<?php
endif;
else:
?>
É necessário preencher
todos os campos para cadastrar o usuário.
</div>
<?php
endif;
endif;
?>
<label for=nome>Nome:</label>
<input type=text name=nome id=nome
tabindex=1 />
<label for=login>Login:</label>
<input type=text name=login id=login
tabindex=2 />
<label for=senha>Senha:</label>
<input type=password name=senha id=senha
tabindex=3 />
<input type=submit name=cadastrar id=cadastrar
value=Cadastrar tabindex=4 />
</form>
</body>
</html>
432
linguagem_de_programacao_III.indb 432
04/02/11 11:15
http://w3c.globo.com/TR/xhtml1/DTD/xhtml1-strict.dtd>
<head>
<meta http-equiv=Content-Type content=text/
html;charset=ISO-8859-1/>
<title>Consulta de Usuários</title>
</head>
<body>
<?php
include(menu.php);
?>
<h1>Consulta de Usuários</h1>
<?php
if(!empty($_POST)):
$nome = strtolower($_POST[nome]);
$queryConsulta = mysql_query(SELECT * FROM usuario
WHERE lower(nome) LIKE %.$nome.%);
$registros = mysql_num_rows($queryConsulta);
?>
433
linguagem_de_programacao_III.indb 433
04/02/11 11:15
<strong><?php echo $registros; ?></
strong> usuário(s) encontrado(s).
</div>
<table>
<thead>
<tr>
<th>Código</th>
<th>Nome</th>
<th>Login</th>
</tr>
</thead>
<tbody>
<?php
assoc($queryConsulta)):
while($usuario = mysql_fetch_
?>
<tr>
<td><a href=./
usuario.php?id=<?php echo $usuario[codigo]; ?>><?php echo
$usuario[codigo]; ?></a></td>
<td><a href=./
usuario.php?id=<?php echo $usuario[codigo]; ?>><?php echo
$usuario[nome]; ?></a></td>
$usuario[login]; ?></td>
</tr>
<?php
endwhile;
?>
</tbody>
</table>
<?php
<td><?php echo
else:
434
linguagem_de_programacao_III.indb 434
04/02/11 11:15
?>
</div>
<?php
endif;
endif;
?>
<label for=nome>Nome:</label>
<input tabindex=1 type=text id=nome
name=nome />
<input tabindex=2 id=consultar name=consultar
type=submit value=Consultar />
</form>
</body>
</html>
<<< arquivo index.php >>>
<?php
// Verifica se esta logado
include(verificacao.php);
?>
<html dir=ltr xml:lang=pt-br lang=pt-br xmlns=http://www.
w3.org/1999/xhtml>
<head>
<title>Usuários</title>
</head>
<body>
435
linguagem_de_programacao_III.indb 435
04/02/11 11:15
<?php
include(menu.php);
?>
</body>
</html>
<<< arquivo lista.php >>>
<?php
include(./verificacao.php);
include(./cfg/config.php);
?>
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Strict//EN
http://w3c.globo.com/TR/xhtml1/DTD/xhtml1-strict.dtd>
<head>
<meta http-equiv=Content-Type content=text/
html;charset=ISO-8859-1/>
<title>Lista de Usuários</title>
</head>
<body>
<?php
include(menu.php);
?>
<h1>Lista de Usuários</h1>
<table>
<thead>
<tr>
436
linguagem_de_programacao_III.indb 436
04/02/11 11:15
<th>Código</th>
<th>Nome</th>
<th>Login</th>
</tr>
</thead>
<tbody>
<?php
usuario);
while($usuario = mysql_fetch_assoc($usuarios)):
?>
<tr>
<td><a href=./usuario.
php?id=<?php echo $usuario[codigo]; ?>><?php echo
$usuario[codigo]; ?></a></td>
<td><a href=./usuario.
php?id=<?php echo $usuario[codigo]; ?>><?php echo $usuario[nome];
?></a></td>
?></td>
</tr>
<?php
endwhile;
?>
</tbody>
</table>
</body>
</html>
437
linguagem_de_programacao_III.indb 437
04/02/11 11:15
http://w3c.globo.com/TR/xhtml1/DTD/xhtml1-strict.dtd>
<head>
<meta http-equiv=Content-Type content=text/
html;charset=ISO-8859-1/>
<title>Área Restrita</title>
</head>
<body>
<h1>Área Restrita</h1>
<?php
if(!empty($_POST)):
):
$login = $_POST[login];
$senha = $_POST[senha];
$queryUsuario = mysql_query(SELECT * FROM
usuario WHERE login = .$login. AND senha = MD5(.$senha.));
if(mysql_num_rows($queryUsuario) == 1):
$usuario = mysql_fetch_
assoc($queryUsuario);
$usuario[nome];
$_SESSION[administracao][usuario] =
438
linguagem_de_programacao_III.indb 438
04/02/11 11:15
?>
aqui</a> para continuar.
<a href=./index.php>Clique
</div>
<?php
else:
?>
</div>
<?php
Login/Senha incorretos.
endif;
else:
?>
todos os campos.
</div>
<?php
endif;
endif;
?>
<label for=login>Login:</label>
/>
<label for=senha>Senha:</label>
<input type=password name=senha id=senha
tabindex=2 />
439
linguagem_de_programacao_III.indb 439
04/02/11 11:15
<input type=submit name=entrar id=entrar
value=Entrar tabindex=3 />
</form>
</body>
</html>
<<< arquivo logout.php >>>
<?php
//inicia a sesso
session_start();
//destroi a varivel
unset($_SESSION[administracao]);
//redireciona para o login
header(Location: ./login.php);
?>
</ul>
440
linguagem_de_programacao_III.indb 440
04/02/11 11:15
http://w3c.globo.com/TR/xhtml1/DTD/xhtml1-strict.dtd>
<head>
<meta http-equiv=Content-Type content=text/
html;charset=ISO-8859-1/>
<title>Detalhes do Usuário</title>
</head>
<body>
<?php
include(menu.php);
$id = $_GET[id];
$queryUsuario = mysql_query(SELECT * FROM usuario WHERE
codigo = .$id);
if(mysql_num_rows($queryUsuario) == 1):
$usuario = mysql_fetch_assoc($queryUsuario);
?>
<h1>Detalhes do Usuário</h1>
<table>
<tbody>
<tr>
<th>Código</th>
$usuario[codigo]; ?></td>
<td><?php echo
441
linguagem_de_programacao_III.indb 441
04/02/11 11:15
</tr>
<tr>
<th>Nome</th>
$usuario[nome]; ?></td>
<td><?php echo
</tr>
<tr>
<th>Login</th>
?></td>
</tbody>
</table>
<?php
</tr>
else:
?>
</div>
<?php
endif;
?>
</body>
</html>
<<< arquivo verificacao.php >>>
442
linguagem_de_programacao_III.indb 442
04/02/11 11:15
<?php
//inicia a sesso
session_start();
//verifica se uma varivel foi registrada
if(!isset($_SESSION[administracao])):
// caso no esteja redireciona para a pgina de login
header(Location: ./login.php);
die();
endif;
?>
Unidade 5
1. Questo aberta.
Unidade 6
1.
Script para criar para criar o banco de dados
443
linguagem_de_programacao_III.indb 443
04/02/11 11:15
/* Tudo */
* { margin:0; padding:0; }
/* Tags */
html { background:#F4F4F4; text-align:center; }
body { font-size:10pt; font-family:Trebuchet MS; width:400px;
background:#FFFFFF; margin:0 auto; text-align:left; padding:10px; }
a { text-decoration:none; color:#336699; }
a:hover { text-decoration:underline; }
/* Mensagens */
.mensagem { margin-bottom:10px; padding:10px; }
.erro { background:#FFFFE0; border:1px solid #E6DB55; color:#333333; }
.sucesso { border:1px solid #568F0F; color:#333; background:#DFF1C0;}
/* Formulario */
form { text-align:left; display:table; width:100%; clear:both; }
label, input { display:block; padding:5px;}
input#nome { width:390px; }
input#consultar, input#cadastrar { float:right; }
/* Menu */
444
linguagem_de_programacao_III.indb 444
04/02/11 11:15
/* Tabelas */
table { border-collapse:collapse; width:100%; border:1px solid #B4D1DC;
border-bottom:3px solid #B4D1DC; }
table tr { background:#FFF; }
table th { background:#B4D1DC; border-bottom:3px solid #777; }
table td, table th { padding:5px; text-align:center; border:1px solid #ccc; }
/* Sugestoes */
#sugestoes { max-height:300px; overflow:scroll; text-align:left; margintop:-35px; z-index:1000; width:250px; background:#E7F3FF; border:1px
solid #DDD; display:none; }
#sugestoes ul li { list-style-type:none; line-height:25px; height:25px; }
#sugestoes ul li a { padding-left:10px; line-height:25px; height:25px;
width:250px; }
#sugestoes ul li:hover, #sugestoes ul li a:hover { background:#DDD;
color:#777; }
Script em JavaScript com o nome de micox.js dentro do diretrio js.
function ajaxGet(url,elemento_retorno,exibe_carregando){
/******
* ajaxGet - Coloca o retorno de uma url em um elemento qualquer
* Use vontade, mas coloque meu nome nos crditos. Dvidas, me
mande um email.
* A funo grande, coloque-a em um arquivo .js separado.
* Verso: 1.2 - 20/04/2006
* Autor: Micox - Niron J.C.G - micoxjcg@yahoo.com.br - elmicox.
blogspot.com
* Parametros:
* url: string; elemento_retorno: object||string; exibe_carregando:boolean
445
linguagem_de_programacao_III.indb 445
04/02/11 11:15
446
linguagem_de_programacao_III.indb 446
04/02/11 11:15
}else{
if(exibe_carregando){put(Falha no carregamento. +
httpStatus(ajax1.status));}
}
ajax1 = null
}else if(exibe_carregando){//para mudar o status de cada carregando
put(Carregando ... )
}
}
function put(valor){ //coloca o valor na variavel/elemento de retorno
if((typeof(elemento_retorno)).toLowerCase()==string){ //se for o
nome da string
if(valor!=Falha no carregamento){
eval(elemento_retorno + = unescape( + escape(valor) + ))
}
}else if(elemento_retorno.tagName.toLowerCase()==input){
valor = escape(valor).replace(/\%0D\%0A/g,)
elemento_retorno.value = unescape(valor);
}else if(elemento_retorno.tagName.toLowerCase()==select){
select_innerHTML(elemento_retorno,valor)
}else if(elemento_retorno.tagName){
elemento_retorno.innerHTML = valor;
//alert(elemento_retorno.innerHTML)
}
}
function pegaAjax(){ //instancia um novo xmlhttprequest
//baseado na getXMLHttpObj que possui muitas cpias na net e eu
nao sei quem o autor original
if(typeof(XMLHttpRequest)!=undefined){return new
XMLHttpRequest();}
var axO=[Microsoft.XMLHTTP,Msxml2.XMLHTTP,Msxml2.
XMLHTTP.6.0,Msxml2.XMLHTTP.4.0,Msxml2.XMLHTTP.3.0];
447
linguagem_de_programacao_III.indb 447
04/02/11 11:15
448
linguagem_de_programacao_III.indb 448
04/02/11 11:15
449
linguagem_de_programacao_III.indb 449
04/02/11 11:15
opt.value = selTemp.childNodes[i].getAttribute(value)
opt.text = selTemp.childNodes[i].innerHTML
if(document.all){ //IEca
objeto.add(opt)
}else{
objeto.appendChild(opt)
}
}
}
document.body.removeChild(selTemp)
selTemp = null
}
function extraiScript(texto){
//Maravilhosa funo feita pelo SkyWalker.TO do imasters/forum
//http://forum.imasters.com.br/index.php?showtopic=165277&
// inicializa o inicio ><
var ini = 0;
// loop enquanto achar um script
while (ini!=-1){
// procura uma tag de script
ini = texto.indexOf(<script, ini);
// se encontrar
if (ini >=0){
// define o incio para depois do fechamento dessa tag
ini = texto.indexOf(>, ini) + 1;
// procura o final do script
var fim = texto.indexOf(</script>, ini);
// extrai apenas o script
codigo = texto.substring(ini,fim);
450
linguagem_de_programacao_III.indb 450
04/02/11 11:15
// executa o script
//eval(codigo);
/**********************
* Alterado por Micox - micoxjcg@yahoo.com.br
* Alterei pois com o eval no executava funes.
***********************/
novo = document.createElement(script)
novo.text = codigo;
document.body.appendChild(novo);
}
}
Fonte: <www.elmicox.blogspot.com>.
Scripts PHP
Arquivo de configurao config.php no diretrio cfg.
<?php
mysql_connect(localhost, root, );
mysql_select_db(exe_lessa);
?>
Arquivo index.php no diretrio padro.
<html dir=ltr xml:lang=pt-br lang=pt-br xmlns=http://www.
w3.org/1999/xhtml>
<head>
<title>Pessoas</title>
</head>
<body>
<?php
include(menu.php);
451
linguagem_de_programacao_III.indb 451
04/02/11 11:15
?>
</body>
</html>
Arquivo menu.php no diretrio padro.
<ul id=menu>
<li><a tabindex=3 href=cadastro.php title=Cadastro>Cadastro</
a></li>
<li><a tabindex=4 href=consulta.php title=Consulta>Consulta</
a></li>
</ul>
Arquivo cadastro.php no diretrio padro.
<?php
include(./cfg/config.php);
?>
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Strict//EN
http://w3c.globo.com/TR/xhtml1/DTD/xhtml1-strict.dtd>
<head>
<meta http-equiv=Content-Type content=text/
html;charset=ISO-8859-1/>
<title>Cadastro de Pessoas</title>
</head>
<body>
<?php
include(menu.php);
?>
<h1>Cadastro de Pessoas</h1>
452
linguagem_de_programacao_III.indb 452
04/02/11 11:15
<?php
if(!empty($_POST)):
if(!empty($_POST[nome])):
$nome = $_POST[nome];
$pessoas = mysql_query(SELECT * FROM pessoa
WHERE UPPER(nome) = .strtoupper($nome).);
?>
este nome cadastrada.
</div>
<?php
elseif(mysql_query(INSERT INTO pessoa VALUES
(NULL, .$nome., SYSDATE()))):
?>
</div>
<?php
else:
?>
</div>
<?php
endif;
else:
?>
cadastrar a pessoa.
453
linguagem_de_programacao_III.indb 453
04/02/11 11:15
</div>
<?php
endif;
endif;
?>
<label for=nome>Nome:</label>
<input type=text name=nome id=nome
tabindex=1 />
<input type=submit name=cadastrar id=cadastrar
value=Cadastrar tabindex=2 />
</form>
</body>
</html>
Arquivo consulta.php no diretrio padro.
<?php
session_start();
echo $_SESSION[teste];
unset($_SESSION[teste]);
include(./cfg/config.php);
?>
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Strict//EN
http://w3c.globo.com/TR/xhtml1/DTD/xhtml1-strict.dtd>
<head>
<meta http-equiv=Content-Type content=text/
html;charset=UTF-8/>
<title>Consulta de Pessoas</title>
454
linguagem_de_programacao_III.indb 454
04/02/11 11:15
<script type=text/javascript>
function exibeSugestoes() {
display=none;
document.getElementById(pessoa).style.
nome = document.getElementById(nome).value;
ajaxGet(sugestoes.php?nome=+nome,
document.getElementById(sugestoes), true);
display=block;
document.getElementById(sugestoes).style.
function preenche(nome) {
display=none;
document.getElementById(sugestoes).style.
display=none;
document.getElementById(pessoa).style.
document.getElementById(nome).value = nome;
}
function exibePessoa(nome)
display=none;
document.getElementById(sugestoes).style.
nome = document.getElementById(nome).value;
ajaxGet(pessoa.php?nome=+nome, document.
getElementById(pessoa), true);
display=block;
document.getElementById(pessoa).style.
return false;
</script>
</head>
<body>
<?php
include(menu.php);
455
linguagem_de_programacao_III.indb 455
04/02/11 11:15
?>
<h1>Consulta de Pessoas</h1>
<form name=consulta id=consulta
onSubmit=javascript:return exibePessoa();>
<label for=nome>Nome:</label>
<input tabindex=1 type=text onkeyup=javascript:ex
ibeSugestoes(); name=nome<?php echo rand(1,10000); ?> id=nome
/>
<input tabindex=2 id=consultar name=consultar
type=submit value=Consultar />
</form>
<div id=sugestoes>
</div>
<div id=pessoa>
</div>
</body>
</html>
Arquivo lista.php no diretrio padro.
<?php
include(./cfg/config.php);
?>
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Strict//EN
http://w3c.globo.com/TR/xhtml1/DTD/xhtml1-strict.dtd>
<head>
<meta http-equiv=Content-Type content=text/
html;charset=ISO-8859-1/>
<title>Lista de Pessoas</title>
456
linguagem_de_programacao_III.indb 456
04/02/11 11:15
</head>
<body>
<?php
include(menu.php);
?>
<h1>Lista de Pessoas</h1>
<table>
<thead>
<tr>
<th>Código</th>
<th>Nome</th>
<th>Data de Cadastro</th>
</tr>
</thead>
<tbody>
<?php
pessoa);
while($pessoa = mysql_fetch_assoc($pessoas)):
?>
<tr>
$pessoa[codigo]; ?></td>
<td><?php echo
?></td>
$pessoa[cadastro]; ?></td>
<td><?php echo
</tr>
<?php
endwhile;
?>
</tbody>
457
linguagem_de_programacao_III.indb 457
04/02/11 11:15
</table>
</body>
</html>
Arquivo pessoa.php no diretrio padro.
<?php
header(Content-Type: text/html; charset=ISO-8859-1,true);
include(./cfg/config.php);
$nome = $_GET[nome];
$pessoas = mysql_query(SELECT * FROM pessoa WHERE nome LIKE
%.$nome.%);
if(mysql_num_rows($pessoas) == 0):
?>
</div>
<?php
elseif(mysql_num_rows($pessoas) == 1):
$pessoa = mysql_fetch_assoc($pessoas);
?>
<table>
<thead>
<tr>
<th>Código</th>
<th>Nome</th>
<th>Data de Cadastro</th>
</tr>
</thead>
<tbody>
<tr>
458
linguagem_de_programacao_III.indb 458
04/02/11 11:15
</tr>
</tbody>
</table>
<?php
else:
?>
Foram encontradas várias pessoas. Por favor, refine sua
busca.
</div>
<?php
endif;
?>
?>
<ul>
<?php
while($nome = mysql_fetch_assoc($nomes)):
?>
459
linguagem_de_programacao_III.indb 459
04/02/11 11:15
<li><a href=#pessoa-<?php echo $nome[codigo];?>
onclick=javascript:preenche(<?php echo $nome[nome];?>);><?php
echo $nome[nome];?></a></li>
<?php
endwhile;
?>
</ul>
<?php
else:
?>
<?php
endif;
?>
460
linguagem_de_programacao_III.indb 460
04/02/11 11:15
Biblioteca Virtual
Veja a seguir os servios oferecidos pela Biblioteca Virtual aos
alunos a distncia:
Emprstimo de livros
www. unisul.br/emprestimos
linguagem_de_programacao_III.indb 461
04/02/11 11:15
linguagem_de_programacao_III.indb 462
04/02/11 11:15
linguagens_de_programacao_III.pdf
02/02/11
16:53