Linguagem de Programacao III Completo
Linguagem de Programacao III Completo
Linguagem de Programacao III Completo
Palhoa
UnisulVirtual
2011
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
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 Schauffer
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
(Coord. PUIP, PUIC, PIBIC)
Ps-Graduao
Clarissa Carneiro Mussi (Coord.)
Biblioteca
Soraya Arruda Waltrick (Coord.)
Paula Sanhudo da Silva
Renan Felipe Cascaes
Rodrigo Martins da Silva
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
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 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
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
Gerncia de Marketing
Gerncia de Produo
Design instrucional
Flavia Lumi Matuzawa
Palhoa
UnisulVirtual
2011
741.6
L63
Inclui bibliografia.
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
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.
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.
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.
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
13
14
Atividades obrigatrias
15
UNIDADE 1
Aspectos do desenvolvimento
de aplicaes Web
Objetivos de aprendizagem
Ao final do estudo desta unidade, importante que voc:
!
Sees de estudo
Seo 1
O ambiente
Seo 2
Seo 3
Caractersticas
Seo 4
Integrao de linguagens
Seo 5
Tecnologias
18
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
19
20
Unidade 1
21
22
Unidade 1
23
Unidade 1
Protocolos TCP/IP um
conjunto de protocolos
de comunicao entre
computadores em rede.
25
Browser
(Usurio)
Servidor Web
Servidor Web
Browser
(Usurio)
26
Unidade 1
27
Unidade 1
29
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.
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
31
32
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
33
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
Unidade 1
35
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
37
Figura 1.11 - Simulao do movimento dos olhos ao ler uma pgina Web.
Fonte: Elaborada pelo autor (2010).
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
39
40
Unidade 1
41
42
Unidade 1
43
44
Unidade 1
45
46
Unidade 1
47
listas no ordenadas;
listas descritivas.
48
<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
49
<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
51
52
Unidade 1
53
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
<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
55
56
<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
57
<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
Unidade 1
59
60
Unidade 1
61
"
62
"
"
"
"
"
"
"
"
"
63
<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
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
65
<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
</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
67
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
Unidade 1
69
70
<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
71
72
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
73
<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
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
75
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.
76
1 Linguagem Server-side
( )
PostgreSQL
2 Linguagem Client-side
( )
HTML
( )
Oracle
( )
SQLite
( )
Javascript
( )
Microsoft Silverlight
( )
PHP
( )
MySQL
( )
ASP
( )
DB2
( )
.NET
( )
CGI
( )
Perl
( )
Java
( )
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
UNIDADE 2
JavaScript
Objetivos de aprendizagem
Ao final do estudo desta unidade, importante que voc:
!
Sees de estudo
Seo 1
JavaScript aplicado
Seo 2
Tipos de dados
Seo 3
Elementos de linguagem
Seo 4
Scripts JS
80
81
Ateno!
Nunca utilize mtodos em objetos que no o
contenham, caso contrrio causar erro no script.
82
<html>
<head>
<title>Teste</title>
<script language=javascript type=text/javascript src=tetse.js>
</script>
</head>
<body>
...
</body>
</html>
Unidade 2
83
84
// 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
85
86
Unidade 2
87
23
2e10
3.98733
8990.09889
0.0999898
88
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
89
90
91
92
Unidade 2
93
94
Unidade 2
95
96
Descrio
charAt(ndice)
charCodeAt(ndice)
indexOf(string_
busca, ndice_
opcional)
lastIndexOf(string_
busca, ndice_
opcional)
Unidade 2
97
Mtodo
Descrio
split(string_separador,
limite_opcional)
substring(incio, fim)
toLowerCase()
toUpperCase()
98
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: );
document.write(pos + <br>);
} else{
document.write(a palavra cervejinha no foi encontrada!);
}
</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
99
<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>
var str=Ol Pessoal do JavaScript!;
document.write(str.toLowerCase());
document.write(<br>);
document.write(str.toUpperCase());
</script>
</body>
</html>
Fonte: JavaScript e HTML Dinmico (2007).
100
Descrio
getDate()
getDay()
getMonth()
getFullYear()
getYear()
getHours()
getMinutes()
getSeconds()
getMilliseconds()
getTime()
getTimezoneOffset()
getUTCDate()
getUTCDay()
getUTCMonth()
getUTCFullYear()
Unidade 2
101
102
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)
Mtodo
Descrio
setUTCFullYear(ano)
setUTCHour(horas)
setUTCMinutes(minutos)
setUTCSeconds(segundos)
setUTCMilliseconds(milisegu
ndos)
toGMTString()
toLocaleString()
toUTCString()
Unidade 2
103
104
document.write(<br><br>);
var data2 = new Date(1069411529550);
document.write(A data2 : +data2.toLocaleString());
</script>
<h3>Estabelecer o ano para uma data</h3>
<script type=text/javascript>
var d = new Date();
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>
var d = new Date();
var dia = d.getDay();
var mes = d.getMonth();
var ano = d.getFullYear();
// Para obtermos o nome do dia criamos um Array em que domingo
ocupa a
// posio 0, segunda ocupa a posio 1, ...
var nomesDias=new Array(Domingo,Segunda-feira,Terafeira,Quartafeira,Quinta-feira,Sexta-feira,Sbado);
var nomesMeses=new Array(Janeiro,Fevereiro,Maro,Abril,Maio,J
unho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro);
var s=Hoje +nomesDias[dia]+, +d.getDate();
s+= de +nomesMeses[mes]+ de +ano;
document.write(s);
</script>
</body>
</html>
Fonte: JavaScript e HTML Dinmico (2007).
Unidade 2
105
106
Unidade 2
107
108
Unidade 2
109
110
Descrio
length
Mtodo
Descrio
join()
reverse()
sort()
Unidade 2
111
<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
</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>
Unidade 2
113
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
<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
115
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) {
if(campo[0].checked) alert(Levar um gurada-chuva);
else alert(Deve estar quente!);
}
116
</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
117
118
Unidade 2
119
120
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
121
O resultado no browser :
122
Unidade 2
123
function validarFormulario(campo){
textoCampo = campo.value;
textoCampo = validarEntero(textoCampo);
campo.value = textoCampo;
}
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
<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
125
126
Unidade 2
127
128
i++;
}
do {
document.write(Intruo do..while executada vale: +i+, condio
NO atendida<br>);
i++
} while (i<8)
</script>
</body>
</html>
Unidade 2
129
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>
Unidade 2
131
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
Unidade 2
133
134
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
135
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
Unidade 2
137
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
Unidade 2
139
(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
</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
141
142
Unidade 2
143
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;
//acrescenta do separador de milhar
if (len > 2) {
aux2 = ;
for (j = 0, i = len - 3; i >= 0; i--) {
if (j == 3) {
aux2 += SeparadorMilesimo;
j = 0;
}
aux2 += aux.charAt(i);
j++;
}
objTextBox.value = ;
len2 = aux2.length;
for (i = len2 - 1; i >= 0; i--)
objTextBox.value += aux2.charAt(i);
//acrescenta smbolo do decimal nos dois ltimos caracteres
objTextBox.value += SeparadorDecimal + aux.substr(len - 2, len);
}
return false;
}
</script>
<body>
Exemplo de utilizao:
<form>
144
Valor R$:
<input type=text name=valor onKeyPress=return(MascaraMoeda(t
his,.,,,event)) style=text-align:right;>
</form>
</body>
</html>
Unidade 2
145
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
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
147
UNIDADE 3
PHP
Objetivos de aprendizagem
Ao final do estudo desta unidade, importante que voc:
!
Sees de estudo
Seo 1
Viso geral
Seo 2
Variveis e constantes
Seo 3
Operadores
Seo 4
Estruturas de controle
Seo 5
150
Unidade 3
151
152
<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
153
?>
<table width=40% border=1>
<tr>
<th scope=col>Itens</th>
154
<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
155
156
/*
Autor: Jos da Silva
Modificado para melhorar o desempenho em 01 de maro
*/
<?php
$var = Bob;
$Var = Joe;
Unidade 3
157
a. Tipo de dados
As variveis so classificadas pelos tipos de dados que elas podem
armazenar. Os tipos mais comuns so:
!
158
Unidade 3
159
$posicao[1]=primiero valor;
$posicao[3]=segundo valor;
foreach ($posicao as $indice => $valor)
echo Indice: $indice; Valor: $valor<br />\n;
160
161
162
Unidade 3
163
164
teste dadoas;
?>
</body>
</html>
O browser mostrar:
Unidade 3
165
</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
Unidade 3
167
O resultado ser:
168
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
169
?>
</body>
</html>
O browser interpreta:
170
<body>
<?php
$teste=banana;
echo Literal completa;
echo <br>;
echo Interpreta a varivel $teste.;
echo <br>;
O browser mostrar:
Unidade 3
171
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
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
173
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
<?php
echo date(d/m/Y H:i:s, mktime(13, 32, 12, 12, 32, 1997));
?>
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
175
<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
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
177
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
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
179
$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
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
$a >= $b
181
<body>
<?php
$a=3;
$b=3;
</body>
</html>
182
O resultado:
183
Nome
Efeito
++$a
Pr-incremento
$a++
Ps-incremento
--$a
Pr-decremento
$a--
Ps-decremento
184
$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
185
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
Unidade 3
187
<?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
Unidade 3
189
echo dois;
break;
case 3 :
echo trs;
break;
case 4 :
echo quatro;
break;
default :
echo padro;
break;
}
?>
190
<?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;
?>
191
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
Argumento default.
Unidade 3
193
$argumento1=10;
$argumento2=Segundo;
$argumento3[0]=Banana;
$argumento3[1]=Ma;
194
$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
195
196
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
197
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
<?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)) {
// caso exita vamos adicionar
if (!$handle = fopen($filename, a)) {
echo No foi possvel abrir o arquivo ($filename);
exit;
}
} else {
// caso no exista vamos cri-lo
if (!$handle = fopen($filename, w+)) {
echo No foi possvel abrir o arquivo ($filename);
exit;
}
}
// Escreve $conteudo no nosso arquivo aberto.
if (fwrite($handle, $conteudo) === FALSE) {
echo No foi possvel escrever no arquivo ($filename);
exit;
}
echo Sucesso: Escrito ($conteudo) no arquivo ($filename);
fclose($handle);
?>
Unidade 3
199
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;
// feof verifica se chegou a fim do arquivo
while (!feof($arquivo)) {
$leitura = fgets($arquivo);
echo Linha .$contador++.: $leitura<br>;
}
fclose($arquivo);
} else {
echo No foi possvel abrir o arquivo;
}
?>
200
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
201
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
UNIDADE 4
Sees de estudo
Seo 1
Banco de dados
Seo 2
Seo 3
Seo 4
API do PHP
Seo 5
Seo 6
Sesses e cookies
204
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
205
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
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
207
208
Unidade 4
209
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
Unidade 4
211
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
213
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
214
latin7_bin
latin7_estonian_cs
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
215
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
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
217
218
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
219
220
Unidade 4
221
222
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
223
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
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
225
Unidade 4
227
228
229
"
"
230
"
"
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
231
232
Unidade 4
233
nom_autor
Fulano de Tal
Outro Autor
234
Unidade 4
235
cod_livro
nom_livro
nom_autor
MySQL
Fulano de Tal
PHP
Fulano de Tal
236
<?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
237
238
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
239
mysql_select_db(prg3,$con);
240
<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
241
</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
}
?>
</table>
</body>
</html>
243
244
<?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
245
<?php
/* continuando com o comando include
*/
include(variaveis.bd);
246
<?php
/* continuando com o comando include
*/
include(variaveis.bd);
?>
<!-Montamos a tabela em HTML para montar o relatrio
-->
Unidade 4
247
248
Unidade 4
249
Unidade 4
251
<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) {
// o lao ser executado enquanto existir registros
while ($relacao = mysql_fetch_array($result)) {
// construo em PHP para manipular o CSS
if ($fundo==white) {
$fundo=silver;
} else {
$fundo=white;
}
// construido a linha dos resultados da consulta
?>
<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
} } else {
// caso no seja encontrado registros esta linha montada
?>
<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
253
254
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
255
<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
(...)
<?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);
(...)
257
258
Unidade 4
259
260
Unidade 4
261
262
Unidade 4
263
264
Unidade 4
265
if (form.nom.value.length<4) {
alert(O nome do Livro deve conter no mnimo 4 caracteres!);
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;
}
$result= mysql_query(update livros set nom_livro=.$_POST[nom].,
cod_autor=.$_POST[cod_autor]. where cod_livro=.$_POST[cod]) or
die (Erro ao cadastrar livro);
?>
<script language=javascript type=text/javascript charset=utf-8>
alert (Registro alterado com sucesso! Cdigo gerado: <?=$_
POST[cod]?>);
266
</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
//consulta para montar as informaes de relacionamento
Unidade 4
267
268
Unidade 4
269
270
Unidade 4
271
<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
</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
// caso no encontre informaes, mostra uma mensagem
if (@$_POST[pesquisar]!=) echo No foram encontrado registros
na pesquisa.;
else echo ;
?>
</td>
</tr>
<?php
}
?>
</table>
<p><a href=menu.html>Voltar</a></p>
</body>
</html>
Unidade 4
273
274
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
275
276
</form>
<p><a href=leituracookie.php>Ler Cookie</a><br>
<a href=apagarcookie.php>Apagar Cookie </a></p>
</body>
</html>
Unidade 4
277
<body>
<p>Lendo o cookie</p>
<p>
<?php
// verifica a existencia do cookie
if (@$_COOKIE[primeirocookie]!=) {
//escreve o valor do cookie
echo Leitura Cookie: . $_COOKIE[primeirocookie];
} else {
echo No foi encontrado Cookie;
}
?>
</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
<?php
// passando o valor de vazio e atrasando uma hora da hora atual
setcookie(primeirocookie, , time() - 3600);
?>
<!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
279
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
<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
281
if (@$_SESSION[primeirasessao]!=) {
//escreve o valor do cookie
echo Leitura Sessão: . $_SESSION[primeirasessao];
} else {
echo No foi encontrada Sessão;
}
?>
</p>
<p><a href=gravarsessao.php>Criar Sessão</a><br>
<a href=apagarsessao.php>Apagar Sessão </a></p>
</body>
</html>
<?php
session_start();
// destruindo todas as variveis de sesso do ID atual
session_destroy();
?>
<!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
<p>Sessão Apagada</p>
<p><a href=gravarsessao.php>Criar Sessão</a></p>
</body>
</html>
Unidade 4
283
<?php
// inicia a sesso
session_start();
// verifica se o formulrio foi enviado
if ((@$_POST[login]!=) && (@$_POST[senha]!=)) {
// carrega informaes de banco
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>);
// realiza a busca na tabela. A funo md5 realiza a criptografia da
informao
$result= mysql_query(select login from usuario where login=.$_
POST[login]. and senha=.md5($_POST[senha]).);
if (@mysql_num_rows($result)==1) {
// registra a sesso
$_SESSION[login]=$_POST[login];
header(Location: menu.php);
} else {
$msg=Login ou Senha não conferem!!;
}
}
?>
<!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
<body>
<h1>Login no Sistema </h1>
<hr>
<?php
if (@$msg!=) {
echo <h1 style=\color:#F00\>$msg</h1>\n;
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
285
</table>
</form>
</body>
</html>
286
Unidade 4
287
<?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
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
289
UNIDADE 5
Sees de estudo
Seo 1
Seo 2
Seo 3
XML-Schema
Seo 4
RSS
292
Unidade 5
293
Posio Inicial
Tamanho
CPF
11
NOME
12
30
ENDEREO
41
50
295
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
297
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
299
*/
$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
$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
301
<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
Unidade 5
303
304
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:
Para cada tag XML, criado um objeto.
Os blocos de tags que contenham diversas sub-tag podem ser
acessada como vetor, indicando o nmero da ocorrncia de cada um.
Cada atributo da tag pode ser acessado pelo nome como um vetor.
*/
echo <p>Sala .($i+1).: $nome_sala<br>;
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];
</HTML>
Unidade 5
305
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
Unidade 5
307
</Joaquim>
<Pedro>
<saudao>
At mais tarde, Maria.
</saudao>
</Pedro>
</pessoas>
308
Unidade 5
309
310
Unidade 5
311
312
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
313
<?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
ID
IDREF ou
IDREFS
ENTITY ou
ENTITIES
NMTOKEN ou
NMTOKEN
Atributos
Enumerados =
Unidade 5
315
#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
<?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
317
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
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:
!
319
"
"
"
"
320
"
"
"
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
321
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
323
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
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
325
326
Unidade 5
327
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
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
329
330
Unidade 5
331
<?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
<?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
333
334
</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
335
</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
/* 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.
Unidade 5
337
RDF
Para saber mais sobre RDF
pesquise em www.w3.org/RDF
338
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
339
340
<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
341
Logotipo
<?php
/**
* For demonstration purposes, the data is defined here.
* In a real scenario it should be loaded from a database.
*/
$channel = array(title
342
=> http://www.broculos.net,
=> Exemplo 1,
=> http://www.example.com/example1.html,
pubDate
2008)))
, array(title
=> Exemplo 2,
=> http://www.example.com/example2.html,
pubDate
2008)))
);
$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
343
$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
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
345
UNIDADE 6
Sees de estudo
Seo 1
O que o AJAX
Seo 2
Seo 3
Seo 4
Framework
348
XHTML;
JavaScript;
CSS;
DOM;
XML.
Unidade 6
349
350
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
351
352
url = cidade.php?estado=+estado ;
// envia a url para o AJAX pelo mtodo GET
ajax.open (GET , url , true ) ;
// executa o AJAX
ajax.send (null) ;
}
} else {
// limpa a combo de cidades
limparCombo(cidade);
}
}
function escreveCidades () {
// verifica a preparao do AJAX, 4 est pronto
if ( ajax.readyState == 4) {
// status do AJAX
if ( ajax.status == 200) {
// o AJAX retorna em forma de texto.
// a funo interpreta o retorno para montar a combo
acrescentaOption(cidade,ajax.responseText);
}
}
}
function acrescentaOption(combo, texto) {
// quebra o texto em um vetor
var option=texto.split(^);
// identifica o elemento no formulrio neste exemplo uma caixa
de seleo
var elemento=document.getElementById(combo);
var valores = new Array();
Unidade 6
353
<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
<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>
Unidade 6
355
356
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.
357
358
Unidade 6
359
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
Unidade 6
361
<p>
<div id=pagina>
</div>
</p>
</body>
</html>
362
tipoDados=tipo;
ajax.onreadystatechange = escreveDados ;
url = url+?+codigo ;
ajax.open (GET , url , true ) ;
ajax.send (null) ;
}
} else {
// limpa a combo de cidades
if (tipo==cidade)
limparCombo(cidade);
}
}
Unidade 6
363
function escreveDados() {
if ( ajax.readyState == 4) {
if ( ajax.status == 200) {
if (tipoDados==cidade)
acrescentaOption(cidade,ajax.responseText);
}
}
}
364
Unidade 6
365
<?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
Unidade 6
367
368
// 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
$codigo = @$_GET[codigo]!=? $_GET[codigo] : 0;
// converte para o encode correto e a funo addslashes prepara as
informaes para cadastrar em um banco de dados
$nome = addslashes(mb_convert_encoding(@$_GET[nome],iso8859-1,utf-8));
$cidade = @$_GET[cidade];
Unidade 6
369
}
// monta uma consulta de retorno na tela
$result= mysql_query(SELECT p.id_pessoa, p.nm_pessoa, c.nm_cidade,
c.id_uf FROM pessoa p, cidade c WHERE p.id_cidade=c.id_cidade);
370
Unidade 6
371
<?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
?>
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
373
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
Unidade 6
375
-->
<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
}
</script>
</body>
</htm>
Unidade 6
377
function handleHttpResponse()
{
if (xmlhttp.readyState == 4)
{
if(xmlhttp.status==200)
{
//Insere no elemento a pgina postada
elemento.innerHTML = xmlhttp.responseText;
} else {
//Insere no elemento o texto atribudo
elemento.innerHMTL = Pgina no encontrada!;
}
}
}
//Funo que envia o formulrio
378
return;
} else {
//Insere no elemento o texto atribudo
elemento.innerHTML = Carregando...;
}
//Abre a pgina que receber os campos do formulrio
xmlhttp.open(POST, url, true);
xmlhttp.onreadystatechange = handleHttpResponse;
//altera os cabealhos da pgina de resposta
xmlhttp.setRequestHeader(Content-type, application/x-www-formurlencoded);
xmlhttp.setRequestHeader(Content-length, 2);
//Envia o formulrio com dados da varivel campos (passado por
parmetro)
xmlhttp.send(campos);
}
<?php
//Determina o tipo da codificao da pgina
header(content-type: text/html; charset=iso-8859-1);
//Extrai os dados do formulrio
extract($_POST);
//Verifica se algum nome foi digitado
$nome = ($txtNome != ) ? $txtNome : desconhecido;
//Verifica se algum email foi digitado
$email = ($txtEmail != ) ? $txtEmail : desconhecido;
Unidade 6
379
380
<html>
<head>
<autor>Alexandre Vieira</autor>
<site>http://www.codigofonte.net/dicas/php/170_busca-dinamicautilizando-ajax</site>
<title>BUSCA DINÂMICA</title>
<meta http-equiv=Content-Type content=text/html;
charset=iso-8859-1>
<script src=script.js></script>
<script>
function pesquisa(valor)
{
//FUNO QUE MONTA A URL E CHAMA A FUNO AJAX
campos = valor=+encodeURI(valor);
Unidade 6
381
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
</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 = new 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) {
req = new ActiveXObject(Microsoft.XMLHTTP);
Unidade 6
383
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) {
// apenas se o servidor retornar OK
if (req.status ==200) {
// procura pela div id=pagina e insere o conteudo
// retornado nela, como texto HTML
document.getElementById(pagina).innerHTML = req.responseText;
} else {
alert(Houve um problema ao obter os dados: + req.statusText);
}
}
}
Fonte: <www.codigofonte.net/dicas/php/170_busca-dinamica-utilizando-ajax>.
384
<?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
385
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
Unidade 6
387
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
<?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
389
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
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
391
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
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
393
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.
398
(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
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) {
// funo para validar se um nmero valido
if (numero.length == 0) {
return false;
} else {
// verifica se todos os caracteres so nmeros
for (i = 0; i < numero.length; i++)
if (!((numero.charAt(i) >= 0) && (numero.charAt(i) <=
9)))
return false;
}
return true;
}
function validar(form) {
//Variveis de mensagem de erro padro e controle de erro
var erro=ATENO\n\n;
var msgerro=false;
402
if (form.txt_nome.value==) {
erro+=O Campo Nome obrigatrio\n;
msgerro=true;
}
if (form.txt_nomemae.value==){
erro+=O Campo Nome da Me obrigatrio\n;
msgerro=true;
}
var idade=form.txt_idade.value;
if (validanumero(idade)){
// testa para verificar se a idade est contida no intervalo correto
if ((parseInt(idade)<10) || (parseInt(idade)>120)) {
erro+=O Campo Idade deve conter uma idade entre 10 e
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==) {
erro+=O Campo E-mail obrigatrio\n;
msgerro=true;
} else {
// verifica se existe um caractere @ e no se encontra na primeira
posio
// verifica se existe um caractere entre o @ e o .
// verifica se o . no o ltimo caractere
if ((email.indexOf(@)<0) || (email.indexOf(.)<=(email.
indexOf(@)+1)) || ((email.indexOf(.)+1)>=email.length)) {
403
404
<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
function inserir(texto) {
//converte as quebras de linhas para a tag <br> do HTML
while (texto.indexOf(\n)>=0)
texto=texto.replace(\n,<br />);
//escreve do elemento que contm o Id div_result
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
</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
408
}
// Verifica se o formulrio foi enviado
if (@$_POST[btn_enviar]==) erro(1);
else {
// varivel de controle
$controle=false;
if ($_POST[txt_nome]==) {
$validacampos=O campo nome deve ser preenchido<br />\n;
$controle=true;
}
if ($_POST[txt_endereco]==) {
$validacampos.=O campo endereo deve ser preenchido<br
/>\n;
$controle=true;
}
if ($_POST[txt_nomemae]==) {
$validacampos.=O campo nome da me deve ser preenchido<br
/>\n;
$controle=true;
}
if ($_POST[txt_idade]==) {
$validacampos.=O campo idade deve ser preenchido<br />\n;
$controle=true;
} else {
if (intval($_POST[txt_idade])<3) {
$validacampos.=A idade deve ser maior que dois
anos<br />\n;
$controle=true;
}
409
}
if ($_POST[txt_email]==) {
$validacampos.=O campo e-mail deve ser preenchido<br />\n;
$controle=true;
} else {
/*
strpos verifica a posio que um caractere aparece em uma string
strripos verifica a ltima posio que um caractere aparece
*/
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 {
?>
<table align=left cellpadding=2 cellspacing=0 border=1>
<tr>
<td>Nome</td>
<td><?=$_POST[txt_nome]?></td>
</tr>
<tr>
<td>Endereo</td>
<td><?=$_POST[txt_endereco]?></td>
</tr>
<tr>
410
<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
<body>
<?php
function erro($tipo, $msg=Sem informao){
switch ($tipo) {
case 1:
echo <h1>Formulrio no enviado!</h1>;
break;
case 2:
echo <h1>Erro nos valores do formulrio!</h1>;
echo $msg;
break;
}
echo <a href=\exercicio1.php\>Retornar ao formulrio;
}
// Verifica se o formulrio foi enviado
if (@$_POST[btn_enviar]==) erro(1);
else {
// varivel de controle
$controle=false;
if ($_POST[txt_nome]==) {
$validacampos=O campo nome deve ser preenchido<br />\n;
$controle=true;
}
if ($_POST[txt_endereco]==) {
$validacampos.=O campo endereo deve ser preenchido<br
/>\n;
$controle=true;
}
if ($_POST[txt_nomemae]==) {
412
413
else {
?>
<table align=center cellpadding=2 cellspacing=0 border=1>
<tr>
<td>Nome</td>
<td><?=$_POST[txt_nome]?></td>
</tr>
<tr>
<td>Endereo</td>
<td><?=$_POST[txt_endereco]?></td>
</tr>
<tr>
<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
$arq=arquivo.txt;
$fp=fopen($arq,w+);
if ($fp) {
fwrite($fp,Nome:.$_POST[txt_nome].\n);
414
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>;
} else echo <h4>Erro ao gerar o arquivo</h4>;
}
}
?>
</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]!=) {
// verifica se o arquivo existe
if (file_exists($_GET[arq])) {
$fp=fopen($_GET[arq],r);
if ($fp) {
415
Unidade 4
1.
<<< estrutura de arquivos >>>
416
/* 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
/* 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; }
418
419
?>
<div class=mensagem sucesso>
Livro cadastrado com sucesso.
</div>
<?php
else:
?>
<div class=mensagem erro>
Erro ao cadastrar livro.
</div>
<?php
endif;
else:
?>
<div class=mensagem erro>
É necessário preencher
todos os campos para cadastrar o livro.
</div>
<?php
endif;
endif;
?>
<form name=cadastro id=cadastro method=post>
<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
<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>
<html dir=ltr xml:lang=pt-br lang=pt-br xmlns=http://www.
w3.org/1999/xhtml>
<head>
<meta http-equiv=Content-Type content=text/
html;charset=ISO-8859-1/>
<title>Consulta de Livros</title>
<link href=./css/estilo.css type=text/css rel=stylesheet />
</head>
<body>
<?php
//inclui o meni de navegao
include(menu.php);
?>
<h1>Consulta de Livros</h1>
<?php
if(!empty($_POST)):
421
$nome = strtolower($_POST[nome]);
$queryConsulta = mysql_query(SELECT * FROM livro
WHERE lower(nome) LIKE %.$nome.%);
$registros = mysql_num_rows($queryConsulta);
if( ($registros >= 1) && $nome != ):
?>
<div class=mensagem sucesso>
<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
while($livro = mysql_fetch_
assoc($queryConsulta)):
?>
<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
<td><?php echo
$livro[autor]; ?></td>
<td><?php echo
$livro[editora]; ?></td>
<td><?php echo
$livro[paginas]; ?></td>
</tr>
<?php
endwhile;
?>
</tbody>
</table>
<?php
else:
?>
<div class=mensagem erro>
Nenhum livro encontrado.
</div>
<?php
endif;
endif;
?>
<form name=consulta id=consulta method=post>
<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
424
<?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
$livros = mysql_query(SELECT * FROM livro);
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><?php echo $livro[autor];
?></td>
<td><?php echo $livro[editora];
?></td>
<td><?php echo $livro[paginas];
?></td>
</tr>
425
<?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>
<html dir=ltr xml:lang=pt-br lang=pt-br xmlns=http://www.
w3.org/1999/xhtml>
<head>
<meta http-equiv=Content-Type content=text/
html;charset=ISO-8859-1/>
<title>Detalhes do Livro</title>
<link href=./css/estilo.css type=text/css rel=stylesheet />
</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
<table>
<tbody>
<tr>
<th>Código</th>
<td><?php echo $livro[codigo];
?></td>
</tr>
<tr>
<th>Nome</th>
<td><?php echo $livro[nome];
?></td>
</tr>
<tr>
<th>Autor</th>
<td><?php echo $livro[autor];
?></td>
</tr>
<tr>
<th>Editora</th>
<td><?php echo $livro[editora];
?></td>
</tr>
<tr>
<th>Páginas</th>
<td><?php echo $livro[paginas];
?></td>
</tr>
</tbody>
</table>
<?php
else:
?>
427
428
/* 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
/* 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>
<html dir=ltr xml:lang=pt-br lang=pt-br xmlns=http://www.
w3.org/1999/xhtml>
<head>
<meta http-equiv=Content-Type content=text/
html;charset=ISO-8859-1/>
<title>Cadastro de Usuários</title>
<link href=./css/estilo.css type=text/css rel=stylesheet />
</head>
<body>
430
<?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).));
if(mysql_num_rows($usuarios) >= 1):
?>
<div class=mensagem erro>
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.)))):
?>
<div class=mensagem sucesso>
Usuário cadastrado com
sucesso.
</div>
<?php
else:
?>
<div class=mensagem erro>
431
432
433
434
?>
<div class=mensagem erro>
Nenhum usuário encontrado.
</div>
<?php
endif;
endif;
?>
<form name=consulta id=consulta method=post>
<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>
<link href=./css/estilo.css type=text/css rel=stylesheet />
</head>
<body>
435
<?php
// Se estiver logado inclui o menu
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>
<html dir=ltr xml:lang=pt-br lang=pt-br xmlns=http://www.
w3.org/1999/xhtml>
<head>
<meta http-equiv=Content-Type content=text/
html;charset=ISO-8859-1/>
<title>Lista de Usuários</title>
<link href=./css/estilo.css type=text/css rel=stylesheet />
</head>
<body>
<?php
include(menu.php);
?>
<h1>Lista de Usuários</h1>
<table>
<thead>
<tr>
436
<th>Código</th>
<th>Nome</th>
<th>Login</th>
</tr>
</thead>
<tbody>
<?php
$usuarios = mysql_query(SELECT * FROM
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><?php echo $usuario[login];
?></td>
</tr>
<?php
endwhile;
?>
</tbody>
</table>
</body>
</html>
437
438
?>
<div class=mensagem sucesso>
Autenticado com sucesso. <br />
<a href=./index.php>Clique
aqui</a> para continuar.
</div>
<?php
else:
?>
<div class=mensagem erro>
Login/Senha incorretos.
</div>
<?php
endif;
else:
?>
<div class=mensagem erro>
É necessário preencher
todos os campos.
</div>
<?php
endif;
endif;
?>
<form name=cadastro id=cadastro method=post>
<label for=login>Login:</label>
<input type=text name=login id=login tabindex=1
/>
<label for=senha>Senha:</label>
<input type=password name=senha id=senha
tabindex=2 />
439
440
441
</tr>
<tr>
<th>Nome</th>
<td><?php echo
$usuario[nome]; ?></td>
</tr>
<tr>
<th>Login</th>
<td><?php echo $usuario[login];
?></td>
</tr>
</tbody>
</table>
<?php
else:
?>
<div class=mensagem erro>
Usuário não encontrado.
</div>
<?php
endif;
?>
</body>
</html>
<<< arquivo verificacao.php >>>
442
<?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);
// caso ocorra erro interrompe a construo da pgina
die();
endif;
?>
Unidade 5
1. Questo aberta.
Unidade 6
1.
Script para criar para criar o banco de dados
443
/* 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
/* 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
446
}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
448
449
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
// 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>
<link href=./css/estilo.css type=text/css rel=stylesheet />
</head>
<body>
<?php
include(menu.php);
451
?>
</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>
<li><a tabindex=5 href=lista.php title=Lista>Lista</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>
<html dir=ltr xml:lang=pt-br lang=pt-br xmlns=http://www.
w3.org/1999/xhtml>
<head>
<meta http-equiv=Content-Type content=text/
html;charset=ISO-8859-1/>
<title>Cadastro de Pessoas</title>
<link href=./css/estilo.css type=text/css rel=stylesheet />
</head>
<body>
<?php
include(menu.php);
?>
<h1>Cadastro de Pessoas</h1>
452
<?php
if(!empty($_POST)):
if(!empty($_POST[nome])):
$nome = $_POST[nome];
$pessoas = mysql_query(SELECT * FROM pessoa
WHERE UPPER(nome) = .strtoupper($nome).);
if(mysql_num_rows($pessoas) >= 1):
?>
<div class=mensagem erro>
Já existe uma pessoa com
este nome cadastrada.
</div>
<?php
elseif(mysql_query(INSERT INTO pessoa VALUES
(NULL, .$nome., SYSDATE()))):
?>
<div class=mensagem sucesso>
Pessoa Cadastrada com sucesso.
</div>
<?php
else:
?>
<div class=mensagem erro>
Erro ao cadastrar pessoa.
</div>
<?php
endif;
else:
?>
<div class=mensagem erro>
Você precisa digitar um nome para
cadastrar a pessoa.
453
</div>
<?php
endif;
endif;
?>
<form name=cadastro id=cadastro method=post>
<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>
<html dir=ltr xml:lang=pt-br lang=pt-br xmlns=http://www.
w3.org/1999/xhtml>
<head>
<meta http-equiv=Content-Type content=text/
html;charset=UTF-8/>
<title>Consulta de Pessoas</title>
<link href=./css/estilo.css type=text/css rel=stylesheet />
454
function preenche(nome) {
document.getElementById(sugestoes).style.
display=none;
document.getElementById(pessoa).style.
display=none;
document.getElementById(nome).value = nome;
}
function exibePessoa(nome)
document.getElementById(sugestoes).style.
display=none;
nome = document.getElementById(nome).value;
ajaxGet(pessoa.php?nome=+nome, document.
getElementById(pessoa), true);
document.getElementById(pessoa).style.
display=block;
return false;
}
</script>
</head>
<body>
<?php
include(menu.php);
455
?>
<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>
<html dir=ltr xml:lang=pt-br lang=pt-br xmlns=http://www.
w3.org/1999/xhtml>
<head>
<meta http-equiv=Content-Type content=text/
html;charset=ISO-8859-1/>
<title>Lista de Pessoas</title>
<link href=./css/estilo.css type=text/css rel=stylesheet />
456
</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
$pessoas = mysql_query(SELECT * FROM
pessoa);
while($pessoa = mysql_fetch_assoc($pessoas)):
?>
<tr>
<td><?php echo
$pessoa[codigo]; ?></td>
<td><?php echo $pessoa[nome];
?></td>
<td><?php echo
$pessoa[cadastro]; ?></td>
</tr>
<?php
endwhile;
?>
</tbody>
457
</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 class=mensagem erro>
Nenhuma pessoa encontrada.
</div>
<?php
elseif(mysql_num_rows($pessoas) == 1):
$pessoa = mysql_fetch_assoc($pessoas);
?>
<h1><?php echo $pessoa[nome]; ?></h1>
<table>
<thead>
<tr>
<th>Código</th>
<th>Nome</th>
<th>Data de Cadastro</th>
</tr>
</thead>
<tbody>
<tr>
458
459
460
Biblioteca Virtual
Veja a seguir os servios oferecidos pela Biblioteca Virtual aos
alunos a distncia:
!
Emprstimo de livros
www. unisul.br/emprestimos