Escolar Documentos
Profissional Documentos
Cultura Documentos
Ediçõe
s CentroAtlântico
Portugal/2000
Reservados todos os direitos por Centro Atlântico, Lda.
Qualquer reprodução, incluindo fotocópia, só pode ser feita
com autorização expressa dos editores da obra.
www.centroatlantico.pt
ISBN: 972-8426-21-6
Depósito legal: 146.485/00
Marcas registadas: todos os termos mencionados neste livro conhecidos como sendo marcas
registadas de produtos e serviços, foram apropriadamente capitalizados. A utilização de um
termo neste livro não deve ser encarada como afectando a validade de alguma marca registada
de produto ou serviço.
O Editor e os Autores não se responsabilizam por possíveis danos morais ou físicos causados
pelas instruções contidas no livro nem por endereços Internet que não correspondam às Home-
Pages pretendidas.
Dedico este livro aos meus pais,
2. 2E.1xpre ssõ
Os prim
es es O
eiros passo
peradores
2.1.1Exemplo: ‘OláPortugal’ 28
2.1.2Exemplo: ‘OláPortugal’comvariável 28
2.1.3Exemplo: Cálculodevariáveis 29
2.1.4 Exemplo: CódigoASP embebidoemHMTL 29
2.4 Variáveis 35
2.5 Tabela de O
peradores
2.5.1E
xemplo: Comparaçã o de variável en
tre valores 37
2.5.2Exemplo: Utiliz
açãodetodosos operadores 38
3.Fu
nçõe
s
3.1 TabeladefunçõesbasedasASP 40
4. Objectos
4.1 Tabela
dO
ebjectos 62
4.2 Variáveisglobaisedesessão 65
4.4 Fich
eiro global.a
sa
4.4.1
Exemplo: Quantos utilizadores estão a visi
tar a página 100
5.3 Conexão
à
base
de
dados 122
5.4 Inserir, ap
agar e actualizardados embases de dados
5.4.1Exemplo: Inserirdados 127
5.4.2Exemplo: Eliminardados 135
5.4.3Exemplo: Actualizardados 137
6.Com
pon
ent
es
6.1 IntroduçãoaosComponentes 156
7.Exem
plos reais
7.1 Introdução 182
7.2 A RãM:otod
rB
eusca 183
7.3 ALojaL:ojaE-Commerce 197
Rece
Re
1.1 Do Autor
Escrevi este livro, acima de tudo, para dar algum apoio a todos
aqueles que querem iniciar-se neste tema de programação Internet
do lado do servidor. Quando comecei a pesquisar estes assuntos,
há alguns anos, a realidade era muito diferente para conseguir
programar neste tipo de sistemas. Seria necessário um servidor (com
certos requisitos), e conhecimentos bastante mais avançados de
programação. A definição de páginas dinâmicas na altura, consistia
na existência de ficheiros executáveis do lado do servidor que criavam
páginas HTML consoante o que o utilizadorprocurava, e que limitava
bastante os tipos de pesquisa. Quando o Perl (para programação
de páginas dinâmicas) apareceu, o panorama mudou, e as facilidades
deste tipo de programação começavam. Mesmo assim, a Microsoft
apareceu com os IDC (Internet Database Connector), que apesar
de serem de mais fácil compreensão não eram tão potentes a nível
de desenvolvimento.
Com este livro quero fazer o mesmo, apoiar todos os que querem
entrar nesta área, e tentar que o caminho para o domínio das ASP
seja o menos dificultado possível. Este livro está separado por capí-
tulos; cada capítulo está estruturado por uma parte do sistema das
ASP, e foi dada uma ordem a estes, para que os temas estivessem
ordenados por níveis de dificuldade. No final deixo alguns exem-
plos, que sei irão ser muito úteis a todos aqueles que querem algo
Versão digital, individual, licenciada em Fev/2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'
CAPÍTULO 1: INTRODUÇÃO ÀS A CTIVE SERVER PAGES 13
Versão digital, individual, licenciada em Fev/2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'
CAPÍTULO 1: INTRODUÇÃO ÀS A CTIVE SERVER PAGES 15
<SCRIPT LANGUAGE=”JAVASCRIPT”>
{
history.go(-1);
}
</SCRIPT>
<SCRIPT LANGUAGE=”VBSCRIPT”>
formatcurrency(“10000”)
</SCRIPT>
Versão digital, individual, licenciada em Fev/2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'
CAPÍTULO 1: INTRODUÇÃO ÀS A CTIVE SERVER PAGES 19
<HTML>
<BODY>
…………….
</BODY>
</HTML>
2. Como deve ter reparado, todas as Tags que come çam com
<NOMEDATAG>têm de acabar com uma barra </NOMEDATAG>. Nem
todas o requerem, mas podemos dizer que cerca de 90% sim.
<HTML>
<BODY>
ISTO É UM TESTE
</BODY>
</HTML>
<HTML>
<BODY>
<FONT FACE=”ARIAL” COLOR=”GREEN” SIZE=”5”>ISTO É UM
TESTE</FONT>
</BODY>
</HTML>
<HTML>
<BODY>
<P><FONT FACE=”ARIAL” COLOR=”GREEN” SIZE=”5”>ISTO É UM
TESTE</FONT></P>
E ISTO JÁ É OUTRO TESTE
</BODY>
</HTML>
Versão digital, individual, licenciada em Fev/2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'
CAPÍTULO 1: INTRODUÇÃO ÀS A CTIVE SERVER PAGES 21
<HTML>
<BODY>
<P><FONT FACE=”ARIAL” COLOR=”GREEN” SIZE=”5”>ISTO É UM
TESTE</FONT></P>
E ISTO<BR> JÁ É<BR> OUTRO TESTE<BR>
</BODY>
</HTML>
<HTML>
<BODY>
<TABLE BORDER=”1”>
<TR>
<TD>ESTA É A PRIMEIRA LINHA, PRIMEIRA COLUNA</TD>
<TD> ESTA É A PRIMEIRA LINHA, SEGUNDA COLUNA </TD>
</TR>
<TR>
<TD> ESTA É A SEGUNDA LINHA, PRIMEIRA COLUNA </TD>
<TD> ESTA É A SEGUNDA LINHA, SEGUNDA COLUNA </TD>
</TR>
</TABLE>
</BODY>
</HTML>
<HTML>
<BODY>
<!—ISTO QUE AQUI ESTÁ ESCRITO NÃO APARECE NO BROWSER—>
ISTO SIM, JÁ APARECE NO BROWSER
</BODY>
</HTML>
22 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
<HTML>
<BODY>
<!—ISTO QUE AQUI ESTÁ ESCRITO NÃO APARECE NO BROWSER—>
ISTO SIM, JÁ APARECE NO BROWSER
<SCRIPT LANGUAGE=”JAVASCRIPT”>
………….
</SCRIPT>
</BODY>
</HTML>
<HTML>
<BODY>
<FORM NAME=”nomedoformulario” METHOD=”POST”>
O seu nome:<INPUT NAME=”nome”><BR>
O seu telefone:<INPUT NAME=”email”><BR>
<INPUT TYPE=”SUBMIT”>
</FORM>
</BODY>
</HTML>
11.Para ter um texto que vai ter a outra p ágina, tem de fazer o link
com a Tag <A> </A>
<HTML>
<BODY>
<FORM NAME=”nomedoformulario” METHOD=”POST”>
O seu nome:<INPUT NAME=”nome”><BR>
O seu telefone:<INPUT NAME=”email”><BR>
<INPUT TYPE=”SUBMIT”>
</FORM>
<A HREF=”outrapagina.html”>Pode seguir por aqui</A>
</BODY>
</HTML>
Versão digital, individual, licenciada em Fev/2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'
CAPÍTULO 1: INTRODUÇÃO ÀS A CTIVE SERVER PAGES 23
<HTML>
<BODY>
<IMG SRC=”nomedaimagem.gif”>
</BODY>
</HTML>
www.activeserverpages.com
Este é o site ‘Pai’ das ASP. Terá
sido em princípio o primeiro re-
lacionado com este assunto.
Tem muitos exemplos explica-
dos, e v á rios truques para
aquelas dificuldades que v ão
aparecendo enquanto progra-
mamos. É actualizado periodi-
camente há muito tempo.
24 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
www.15seconds.com
Este é também daqueles que
todos os que estão dentro do
assunto conhecem. Tem mui-
tos artigos, de vários tipos, e
um motor de busca que vai
pesquisar vários sites de ASP.
www.swynk.com
Este site , no in ício, era dos
melhores, tinha muita informa-
ção e muito bem estruturada.
Está vocacionado para tudo o
que tiver a haver com Windows
NT, e devido ao IIS4 também
tem muito bons artigos de ASP.
Tenho uma coluna minha l á,
onde poderá recolher algumas
ideias de ASP.
Este site cresceu muito, e mui-
to depressa, por isso julgo ser
a causa dos atrasos na sua
actualização.
www.4guysfromrolla.com
Indiscutivelmente umsite a não
perder. Foi também graças a
este site que consegui alcan-
çar os objectivos, nas empre-
sas onde trabalhei com ASP.
Tem muita informação, artigos
e c ódigo. Se por lá passar vai
notar que tenho lá alguns arti-
gos.
Versão digital, individual, licenciada em Fev/2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'
CAPÍTULO 1: INTRODUÇÃO ÀS A CTIVE SERVER PAGES 25
www.asphole.com
É um grupo de sites, que se
dedicam às ASP, tem também
muitos recursos, apesar de es-
tarem a ser ultrapassados por
sites mais recentes como o
Aspin.
www.aspin.com
Este site é bastante recente e
já cheguei a visitá-lo quase to-
dos os dias. Está muito bem or-
ganizado e tem bastantes te-
mas por onde pode pesquisar.
www.asptoday.com
Este é daqueles sites que
quando começar a programar
ASPs com alguma assiduida-
de irá com certeza visitar. Eles
obrigam os seus autores a es-
creverem os artigos em exclu-
sividade, sendo por isso da-
queles sites onde os artigos lá
publicados n ão são lidos em
mais lado nenhum.
Expressões e
Operadores 2
2.1 Os primeiros passos
2.1.1Exemplo: ‘OláPortugal’ 28
2.1.2 Exemplo: ‘Olá Portugal’ com variável 28
2.1.3 Exemplo: Cálculo de variáveis 29
2.1.4 Ex emplo: Código A SP e mbebido
eHmMTL 29
2V.4ariáveis 35
(ficheiro cpt2-1-1.asp)
<%response.write”Olá Portugal”%>
Vemos aqui algo que nos salta à vista e que são os <% %> . Como se
pode facilmente verificar, estes são os identificadores de onde co-
meça e acaba a ASP que foi constru ída, pois quando introduzirmos
código entre o HTML, teremos de definir onde estão as ASP, e estes
indicadores serão determinantes para esse propósito. Response é
um objecto das ASP que conta com bastantes m étodos. Este e o
objecto Request vão ser sem sombra de dúvidas aqueles com que
irá trabalhar mais. Encontra uma tabela no capítulo seguinte com os
objectos principais e seus métodos de maneira que sempre que
necessitar os possa encontrar mais rapidamente consultando a ta-
bela.
(ficheiro cpt2-1-2.asp)
<%
pais = “Portugal”
response.write”Olá “ & pais
%>
(ficheiro cpt2-1-3.asp)
<%
a = 10
b=2
response.write a * b
%>
Como já deve ter verificado, este tipo de linguagem usa vari áveis
(também elas dinâmicas) que não necessitam de inicialização, po-
dendo ser criadas em qualquer momento. Apesar de haver uma
maneira em que o é obrigado a fazer (com Explicit) mas só se as-
sim o definir. Outro ponto bastante agradável é de que não necessita
de marcadores para definir o final de cada linha. Por exemplo, em
a=10. Não é necessário ponto e vírgula ou outro qualquer marcador
para terminar uma linha de código.
(ficheiro cpt2-1-4.asp)
<% ‘iniciar a variável
cptvar=”passear”%>
<HTML>
<BODY>
<FONT SIZE=”6” >Eu hoje fui <%=cptvar%>, para o Alentejo…</FONT>
</BODY>
</HTML>
30 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
Neste exemplo foi feito aquilo que de mais normal vai ser feito no
resto deste manual - usar as variáveis geradas ou não nas ASP e
introduzi-las no meio do código HTML. Repare no truque para que a
vari á vel fique entre o HTML. N ã o foi necess á ria a rotina
response.write , sendo ent ão introduzido apenas o caracter de
igualdade seguido da variável.
(ficheiro cpt2-2-1.asp)
<%
a= 10
b=100
if a < b then
response.write “a é menor que b”
else
if a > b then
response.write “a é maior que b”
end if
end if
%>
CAPÍTULO 2: EXPRESSÕES E OPERADORES 31
A expressão IF, foi aqui usada para que em conjunto com o operador
< , fizessem uma comparação. A mensagem que vai ser enviada
para o browser, depende dos valores a e b. O IF tem uma estrutura
simples:
IF (ALGO) THEN
(FAZ M
AIS ALGO)
END IF
IF (ALGO) THEN
(FAZALGO)
END IF
IF (ALGO2) THEN
(FAZALGO2)
END IF
IF (ALGO3) THEN
(FAZALGO3)
END IF
IF (ALGO) THEN
(FAZALGO)
ELSE
IF (ALGO2)THEN
(FAZALGO2)
ELSE
IF (ALGO3)THEN
(FAZALGO3)
ENDIF
ENDIF
END IF
(ficheiro cpt2-3-1.asp)
<%
a= 4
b=12
if a < b then ‘ comparação entre dois valores
for I=0 to a ‘ ciclo FOR
response.write “ a(“ & a & ”) é maior que “ & I & “<br>”
‘ o símbolo <br> em HTML simboliza mudança de linha
‘ no mesmo parágrafo
next I ‘ final de ciclo FOR
else
if a>b then
I=a
While b<I ‘ciclo WHILE
Response.write “b(“ & b & ”) é menor que” & I & “<br>”
I=I–1
wend ‘ final de ciclo WHILE
end if
end if
%>
(ficheiro cpt2-3-2.asp)
<%
resposta = 4
Select case resposta
case “1” response.write “ Não é ” & resposta
case “2” response.write “ Não é ” & resposta
case “3” response.write “Acertou é ” & resposta
case “4” response.write “ Não é ” & resposta
case else response.write”Desconhecido….”
end select
%>
(ficheiro cpt2-3-3.asp)
<CENTER><TABLE BORDER=”1”>
<% contador = 1
while contador<6%>
<TR>
<TD BGCOLOR=”RED””>
<FONT COLOR=”WHITE”><%=contador%></FONT></TD>
<TD><%=(contador-1)%></TD>
<TD><%=(contador+1)%></TD>
<TD><%=(contador*100)%></TD>
</TR>
<%
contador = contador + 1
wend
%>
</TABLE></CENTER>
Neste caso, fui usar novamente o WHILE, mas com o intuito do lei-
tor perceber a potencialidade de trabalhar com tabelas - no final de
contas aquilo que mais vai usar se o destino que pretende dar aos
seus conhecimentos de ASP for a programação com bases de da-
dos. Introduzindo o valor que se quer dentro de cada célula da tabe-
la, é o truque que srcina, as grandes tabelas dos sites de comércio-
electrónico. Além de texto, pode introduzir um novo esquema de ta-
belas e/ou imagens.
34 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
(ficheiro cpt2-3-4.asp)
<% contador = 1
while contador<8
%><FONT face=”ARIAL” size=”<%=contador%>”>TESTE</FONT><BR>
<%contador=contador + 1
wend
%>
Neste caso, foi-se alterar uma opção das Tags de HTML, para que
não fosse preciso repetir a mesma 8 vezes. Este é já um pensa-
mento a seguir pelo programador de ASP - tentar evitar escrever
muitas linhas de código, e sim optimizar ao m áximo todas as fun-
ções que vier a criar.
2.4 Variáveis
Nas ASP, as variáveis são também, como no Visual Basic, dinâmi-
cas, não sendo por isso necessária a sua inicialização. Seja como
for, é ‘má’ programação usar variáveis globais sem controlo sobre
as mesmas. Deve-se usar, mas não em excesso, assim como se
devem sempre inicializar as mesmas, não só para melhor controlo,
mas também para melhor performance. Para que não se ‘desleixe’
com as variáveis, use o código <% Option Explicit %> no início de cada
página para que tenha de inicializar sempre as variáveis. Assim, as
alocações de memória, para as variáveis dinâmicas, serão feitas
com uma melhor estrutura, ficando por esse motivo beneficiado o
desempenho das suas páginas.
Para inicializar uma variável em ASP basta usar Dim . Para criar-
mos a variável ‘xpto’ usamos então <%Dim xpto%>
2.5 Operadores
Apesar de já terem sido praticamente todos usados neste capítulo,
vou então deixar uma pequena tabela dos operadores, para referên-
cia.
Os operadores de comparação e igualdade são os seguintes:
Estes são os operadores principais das ASP, e será com estes que
iremos trabalhar ao longo deste manual. Estes operadores não se-
rão usados única e exclusivamente no código de ASP, mas também
aquando do uso de declarações de SQL.
CAPÍTULO 2: EXPRESSÕES E OPERADORES 37
(ficheiro cpt2-5-1.asp)
<% a = 10
b = 20
c = “Teste”
If a > 9 AND a <=20 then
Response.write “ (a) está entre 9 e 20 <br>“
End if
%>
* Multiplicador,
(2*5)
\ Divisão inteira…
(a \ b)
+ Soma …
(a+b)
Este valor também funciona para
concatenação tal como o símbolo &
- Diferença…
(a–b)
(ficheiro cpt2-5-2.asp)
<%
a=2
b=8
c = 10
st1 =”Desta maneira”
st2 = “ também podemos concatenar strings.”
Response.Write “a = 2<br>”
Response.Write “b = 8<br>”
Response.Write “c = 10<br>”
Response.write “st1 = ‘Desta maneira’<br>”
Response.write “st2 = ‘ também podemos concatenar strings.’<br>”
Response.Write “<br><br>”
Response.Write “- b^a -> “ & b^a & “<br>”
Response.Write “- a*b -> “ & a*b & “<br>”
Response.Write “- c/a -> “ & c/a & “<br>”
Response.Write “- a\b -> “ & a\b & “<br>”
Response.Write “- a-b -> “ & a-b & “<br>”
Response.Write “- a+b -> “ & a+b & “<br>”
Response.Write “- c MOD a -> “ & c MOD a & “<br>”
Response.Write “- st1 + st2 -> “ & st1+st2 & “<br>”
%>
E para se perceber um pouco melhor o que está a acontecer neste
código, pode recorrer à seguinte imagem, que julgo responder a
qualquer dúvida com que possa ter ficado.
Função Descrição
ções que
recem na vprograma
ão ser criadas
ção deserão para
sites situações que por vezes apa-
Internet.
Neste primeiro exemplo criou-se uma função que devolve o número
de dias que faltam até ao ano 2001 a partir de uma dada data.
(ficheiro cpt3-2-1.asp)
<%
Function a2001(data) ‘ início da função
If IsDate(data) then ‘ se for uma data for válida
‘ então envia-se a diferença entre datas
a2001 = DateDiff(“d”,data,”Janeiro 1, 2001")
else‘ enviamos
‘ caso contrário
a data como inválida, em forma de informação
a2001 = “Data inválida...”
end if ‘ final do if
End Function ‘ final da função
(ficheiro cpt3-2-2.asp)
<%
Function valmail(email) ‘ início da função
‘ se o tamanho do e-mail for menor que 5 dificilmente será válido(a@a.c)
If Len(email) <= 5 Then
Valmail=False else
‘se não existir um @ também não é válido
If InStr(1, email, “@”, 1) < 2 Then
valmail=False
Else
‘ o ponto final é também importante
If InStr(1,email, “.”, 1) < 4 Then
Valmail=False
Else
Valmail=True
End If
End If
End If
End Function ‘ final da função
if valmail(“o_meu_email@algum_email.com”) then
Response.Write”O e-mail o_meu_email@algum_email.com é
válido.<br>”
Else
Response.Write”O e-mail o_meu_email@algum_email.com não é
válido.<br>”
End if
if valmail(“tentar@iludir”) then
Response.Write “O e-mail tentar@iludir é válido.<br>”
Else
Response.Write “O e-mail tentar@iludir não é válido.<br>”
End if
%>
O leitor tem assim, uma fun ção que lhe valida todos os e-mails que
receber como input.
CAPÍTULO 3: FUNÇÕES 51
(ficheiro cpt3-2-3.asp)
<%@ Language=”VBScript” %>
<%
Function criacaixa()
%><select size=”1" name=”nome”><%
For I=0 to UBound(ardados)
%>
<option><%=ardados(I)%></option>
<%
Next
%></select><%
End Function
Ardados(0) = “Alentejo”
Ardados(1) = “Minho”
Ardados(2) = “Algarve”
Ardados(3) = “Beira-Litoral”
%>
<form>
Viajar Para ? <%=criacaixa()%>
</form>
(ficheiro cpt3-2-4.asp)
<%@ Language=”VBScript” %>
<%
Function criagrafico()
For I=0 to Ubound(ardados)
%>
<table border=”0" width=”100">
<tr><td><font face=”ARIAL” size=”2">
<%= ardados(I,0)%></font></td></tr>
<tr><td><table bgcolor=”blue” border=”1" width=”<%=ardados(I,1)%>”>
<tr><td>
</td></tr></table>
</td></tr></table>
<%
Next
End Function
Dim ardados(3,3)
Ardados(0,0) = “Primeiro”
ardados(0,1) = 100
ardados(1,0) = “Segundo”
ardados(1,1) = 40
ardados(2,0) = “Terceiro”
ardados(2,1) = 60
ardados(3,0) = “Quarto”
ardados(3,1) = 18
criagrafico()
%>
54 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
Vamos então criar um ficheiro que tem o nosso topo de página HTML
por defeito. Esse ficheiro ficará com uma extensão diferente (*.inc)
para se poder diferenciar dos outros. Pode-se criar HMTL e ASP
nesse mesmo ficheiro.
(ficheiro cpt3-3-1.inc)
<div align=”center”>
<center>
<table border=”0" width=”80%” bgcolor=”#0000FF”>
<tr>
<td width=”100%”><b><font face=”Arial” color=”#FFFFFF”>A
Listagem das minhas Funções:</font></b></td>
</tr>
</table>
</center>
</div>
<div align=”right”><%=FormatDateTime(Now(),2)%></div><br>
(ficheiro cpt3-3-1.asp)
<!—#INCLUDE FILE=”cpt3-3-1.inc”—>
<p>
Aqui poder-se-á escrever qualquer código HTML,<br>
ou até mesmo de ASP.
</p>
(ficheiro cpt3-3-2.asp)
<%@ Language=”VBScript” %>
<%
Function a2001(data)
if IsDate(data) then
a2001 = DateDiff(“d”,data,”Janeiro 1, 2001")
else
a2001 = “Data inválida...”
end if
End Function
Function valmail(email)
If Len(email) <= 5 Then
valmail=False
else
If InStr(1, email, “@”, 1) < 2 Then
valmail=False
Else
If InStr(1,email, “.”, 1) < 4 Then
valmail=False
else
valmail=True
End If
EndIf If
End
End Function
Function criacaixa()
%><select size=”1" name=”nome”><%
For I=0 to UBound(ardados)
%>
<option><%=ardados(I)%></option>
<%
Next
%></select><%
End Function
Function criagrafico()
For I=0 to UBound(ardados2)
%>
<table border=”0" width=”100">
<tr><td><font face=”ARIAL” size=”2"><%= ardados2(I,0)%></font></td></tr>
<tr><td><table bgcolor=”blue” border=”1"
width=”<%=ardados2(I,1)%>”><tr><td></td></tr></table></td></tr></table>
<%
Next
End Function
%>
58 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
(ficheiro cpt3-3-3.asp)
<!—#INCLUDE FILE=”cpt3-3-2.asp”—>
<!—#INCLUDE FILE=”cpt3-3-1.inc”—>
<p>
Iremos agora ver todos as funções do capítulo a funcionar,<br>
e não precisamos de as ter neste ficheiro.<br>
Desta maneira temo-las em todos os ASP que quisermos sem termos de<br>
escrever o código todo de novo, ou de passar o tempo<br>
no Copy & Paste...</p><br>
<%Response.Write “Hoje é “ & now() & “<br>”
Response.write “Faltam “ & a2001(now()) & “ dias até ao ano
2001.<br><br>”
if valmail(“o_meu_email@algum_email.com”) then
Response.Write “O e-mail o_meu_email@algum_email.com é
válido.<br>”
Else
Response.Write “O e-mail o_meu_email@algum_email.com não é
válido.<br>”
End if
if valmail(“tentar@iludir”) then
Response.Write “O e-mail tentar@iludir é válido.<br>”
Else
Response.Write “O e-mail tentar@iludir não é válido.<br>”
End if
Ardados(0) = “Alentejo”
ardados(1) = “Minho”
ardados(2) = “Algarve”
ardados(3) = “Beira-Litoral”
%>
CAPÍTULO 3: FUNÇÕES 59
Dim ardados2(3,3)
Ardados2(0,0) = “Primeiro”
ardados2(0,1) = 100
ardados2(1,0) = “Segundo”
ardados2(1,1) = 40
ardados2(2,0) = “Terceiro”
ardados2(2,1) = 60
ardados2(3,0) = “Quarto”
ardados2(3,1) = 18
criagrafico()
%>
Response · Redirect
usado para redireccionarmos o utilizador para
outra página. Usado normalmente para controlo
de utilizadores e acessos.
· Cookies
mecanismo para deixar informações do lado do
cliente com variada informação (dentro das
cookies existem outros métodos para o seu
controlo, como veremos depois em pormenor).
· Write
é esta a maneira para enviar informação para o
browser.
· CacheControl
desta maneira controlamos se a página pode
deixar que se faça cache da mesma nos
browsers (por defeito não deixa fazer cache).
· Charset
uma maneira de definirmos o tipo de caracteres
a usar.
· ContentType
para definir o tipo de informação que vai ser
passada, usado normalmente para UpLoad onde
definimos que queremos passar não só informa-
ção usual, mas também binária, srcin ária de
ficheiros.
CAPÍTULO 4: OBJECTOS 63
· Expires
uma maneira de definir o tempo que uma página
ficará activa e deixará de estar disponível. Neste
caso definimos ao fim de quanto tempo expirará.
· ExpireAbsolute
idêntico ao Expires, com a diferença que se pode
controlar, não com o valor que define ao fim de
quanto tempo, mas sim com uma data que
define a altura em que deixa de estar disponível.
· Status
define o código que está no HTTP header.
· AddHeader
Ajusta dinamicamente a informação que está no
HTTP header.
Request · Cookies
neste caso será usado para ir buscar os cookies
criados com o objecto response.
· Querystring
desta maneira poderemos obter os valores que vêm
da página anterior, depois de submetermos um
formulário com o método GET.
· Form
este método permite-nos obter os dados enviados
por um formulário que esteja com o método POST.
· ServerVariables
usa-se muito este método para identificar os tipos
de browsers que o cliente está a usar, os IPs do
mesmo, a página de onde o cliente veio, assim
como variadas informações sobre o servidor que
está a ser usado.
64 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
Server · HTMLEncode
o método que formata a informação que o utilizador
insere. Esta formatação é muito importante devido
a alguns símbolos serem reconhecidos pelo HTML,
e por esse motivo o layout pode não ter o aspecto
planeado
· URLEncode
parecido com o HTMLEncode, mas formata astring
de maneira a ser v álida para usar na linha de
address dos browsers.
· CreateObject
é esta a maneira como iremos aceder a objectos
exteriores, assim como componentes criados por
nós ou outros. Os componentes de ASP s ão fi-
cheiros de extensão DLL, especiais para os ASPs,
possíveis com o VB ou o VC++ (Visual C++).
· MapPath
é com este método que trabalharemos os nossos
ficheiros localmente (no servidor).
Session · Timeout
as sessões do servidor têm um limite, ao fim do
qual toda a informação contida nas sessions
desaparecem. Desta maneira poderemos
controlar o tempo que as sessões estão activas.
· SessionID
este é o método que nos dá o nuúmero da sessão
do cliente corrente. São uma espécie de
impressão digital das sessões.
· Abandon
força a finalização das sessões.
(ficheiro cpt4-2-1.asp)
<%
Response.Write “O numero desta sessão é “ & session.SessionID
Response.Write “<br>O tempo de validade de uma sessão é de “
Response.write session.Timeout & “ minutos.”
%>
(ficheiro cpt4-2-2.asp)
<%
Response.Write “<br>O tempo de validade de uma sessão é de “ &
session.Timeout & “ minutos.”
session.Timeout = 10
Response.Write “<br> Depois de alterado passou a “ & session.Timeout
session(“Teste”) = “Isto é um teste”
Response.Write “<br>Entretanto foi criada uma variável de sessão
Session(“”Teste””),”
Response.Write “que contém a string ‘“ & session(“Teste”) & “‘ .”
%>
<br><br><a href=”cpt4-2-3.asp”>carregue aqui para passar à próxima
página</a>
(ficheiro cpt4-2-3.asp)
Aqui nada de novo a não ser a maneira como foi acedida a sessão
criada no ficheiro anterior. Não parece nada de especial mas de cer-
teza que vai usar muitas vezes nas suas páginas ASP. Nos seminári-
os da Microsoft, os seus apresentadores aconselham sempre o
mínimo uso destas variáveis, para que não atrapalhem a performance
do servidor Web. Não aconselho que isto seja levado à risca, mas
se estiver de posse de um servidor que tem uma m édia de 10.000
acessos diários, aí a recomendação da Microsoft deve ser levada
mais a sério. Caso contrário, e por experiência própria, não existem
motivos de preocupação se usar este tipo de variáveis em excesso.
Pelo esquema pode-se reparar que para cada utilizador existe uma
sessão independente, enquanto a variável de Application é igual para
todos.
Vemos então um exemplo de como criar e aceder a uma variável de
Application. Repare que existem dois métodos Lock e UnLock para
que a mesma possa ser alterada. Para aceder à mesma não é ne-
cessário usar as regras ditas anteriormente, e visíveis no exemplo
seguinte:
70 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
(ficheiro cpt4-2-4.asp)
<%
Application.Lock
Application(“Teste2”) = “Uma variável acessível por todos os utilizadores...”
Application.UnLock
Response.Write “ Avariável Application(“”Teste2"”) é > “
Response.Write Application(“Teste2”) & “ <“
%>
(ficheiro cpt4-3-1.html)
(ficheiro cpt4-3-1.asp)
O utilizador <strong>
<%=Request.Form(“nome”)%></strong>,
tem <strong><%=Request.Form(“idade”)%></strong> anos<br>
e está acessível pelo número de telefone
<strong><%=Request.Form(“telefone”)%></strong> !
(ficheiro cpt4-3-2.asp)
<%Sub usar_dados()%>
O utilizador <strong><%=Request.Form(“nome”)%></strong>,
tem <strong><%=Request.Form(“idade”)%></strong> anos<br>
e está acessível pelo número de telefone
<strong><%=Request.Form(“telefone”)%></strong> !
<%End Sub%>
<%Sub formulario()%>
<form action=”cpt4-3-2.asp” method=”POST” id=form1 name=form1>
Nome: <input type=”text” name=”nome” size=”20"><br>
Idade: <input type=”text” name=”idade” size=”2" Maxlength=”2"><br>
Telefone: <input type=”text” name=”telefone” size=”12"
Maxlength=”14"><br>
<input type=”submit” value=”Enviar” name=”submeter”>
</form>
<%End Sub%>
<%
if Request.Form(“submeter”)=”” then
formulario
else
usar_dados
end if
%>
- Apresentação do resultado.
<%Sub formulario()%>
<p align=”center”><I><b>
<font size=”4" color=”#800000">Simulador de Bolsas de
Estudo</font></b></I>
<br>
<div align=”center”>
<center>
<FORM name=”bolsa” method=”POST”>
<table border=”0" width=”400" bgcolor=”#CED299"><tr>
<td width=”100%” align=”left”>
<strong>
<font size=”2" face=”ARIAL” color=”RED”>
<%=session(“erro”)%></font></strong>
<font face=”Arial”><b>Nome: </b></font>
<input type=”text” name=”nome” size=”44"
value=”<%=Request.Form(“nome”)%>” maxlength=”50">
<font face=”Arial”><b><br>Data de Nascimento:</b></font>
<input type=”text” name=”dia” size=”2" value=”<%=Request.Form(“dia”)%>”
maxlength=”2">-
<input type=”text” name=”mes” maxlength=”2"
value=”<%=Request.Form(“mes”)%>” size=”2">- 19
<input type=”text” name=”ano” size=”2" maxlength=”2"
value=”<%=Request.Form(“ano”)%>”><b>
<font face=”Arial”><br>Média do último ano:</font></b>
<input type=”text” name=”media” value=”<%=Request.Form(“media”)%>”
size=”2" maxlength=”2">valores<b>
<font face=”Arial”><br>Rendimento mensal dos pais:</font></b>
<input type=”text” name=”rendimento”
value=”<%=Request.Form(“rendimento”)%>” maxlength=”7" size=”7">$00
<p align=”center”><input type=”submit” value=”Simular”
name=”submeter”><br></p>
</td>
</tr></table>
</FORM>
</center>
</div>
<%End Sub%>
CAPÍTULO 4: OBJECTOS 77
nome = Request.Form(“nome”)
data = Request.Form(“dia”) & “-” & Request.Form(“mes”) & “-19” &
Request.Form(“ano”)
media = Request.Form(“media”)
rendimento = Request.Form(“rendimento”)
78 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
<%Sub dados_validar()%>
<%
session(“erro”) = “”
‘ se não for data a variável de sessão fica com o erro correspondente
if not(IsDate(data)) then
session(“erro”) = “* A data está inválida...<br>”
else
if (not(IsNumeric(media))OR ((media<0)OR(media>20))) then
session(“erro”) = “* A média é inválida...<br>”
else
if not(IsNumeric(rendimento)) then
session(“erro”) = “* O rendimento está inválido...<br>”
end if
end if
end if
if session(“erro”)<>”” then
formulario
else
resposta
end if
%>
<%End Sub%>
<%Sub resposta()%>
<%session(“erro”) = “”%>
<div align=”center”>
<center>
<table border=”0" width=”400" bgcolor=”#CED299">
<tr><td width=”100%” align=”left”>
<%idade = DateDiff(“yyyy”, data, Now)
if (idade>10 and idade<28) then%>
O Aluno</font>
<p align=”center”><b><font color=”#800000" face=”Arial” size=”3"><br>
<font face=”Arial” size=”4" color=”#FF0000"><%=nome%></font>
<font color=”#800000" face=”Arial” size=”3"> , <br>com ademédia
</font>
<font face=”Arial” size=”4" color=”#FF0000"><%=media%></font>
<font color=”#800000" face=”Arial” size=”3">valores<br>nascido em
</font>
<font face=”Arial” size=”4" color=”#FF0000"><%=data%></font>
<font color=”#800000" face=”Arial” size=”3"><br></font>
<font face=”Arial” size=”4" color=”#FF0000">
<% if ((rendimento<=80000)AND(media>11)) then
mensagem = “ tem “
else
if ((rendimento>80000 AND rendimento<100000) AND
(media>13)) then
mensagem = “ tem “
else
if ((rendimento>=100000 AND rendimento<160000) AND
(media>16)) then
mensagem = “ tem “
else
if (media>18) then
mensagem = “ tem “
else
mensagem = “ não tem “
end if
end if
end if
end if
Response.Write mensagem%>
<font color=”#800000" face=”Arial” size=”3">direito<br>à bolsa de
</font>
estudo.<br></font></b></p><br>
<%
else%>
<br><center><strong><font face=’ARIAL’ color=’red’ size=’3'>
Não é possivel concorrer à bolsa de estudo<br> com <%=idade%>
anos.</font></strong></center><br>
<%end if%>
</td></tr></table>
<br><br><a href=”cpt4-3-3.asp”>repetir a simulação</a>
</center>
</div>
<%End Sub%>
80 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
(ficheiro cpt4-3-3.asp)
<%Sub resposta()%>
<%session(“erro”) = “”%>
<div align=”center”>
<center>
<table border=”0" width=”400" bgcolor=”#CED299">
<tr><td width=”100%” align=”left”>
<%idade = DateDiff(“yyyy”, data, Now)
if (idade>10 and idade<28) then%>
<p align=”center”><b><font color=”#800000" face=”Arial” size=”3"><br>
O Aluno</font>
<font face=”Arial” size=”4" color=”#FF0000"><%=nome%></font>
<font color=”#800000" face=”Arial” size=”3"> , <br>com a média de </font>
<font face=”Arial” size=”4" color=”#FF0000"><%=media%></font>
<font color=”#800000" face=”Arial” size=”3">valores< br>nascido em </font>
<font face=”Arial” size=”4" color=”#FF0000"><%=data%></font>
<font color=”#800000" face=”Arial” size=”3"><br></font>
<font face=”Arial” size=”4" color=”#FF0000">
<% if ((rendimento<=80000)AND(media>11)) then
mensagem = “ tem “
else
if ((rendimento>80000 AND
82 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
rendimento<100000)AND(media>13)) then
mensagem = “ tem “
else
if ((rendimento>=100000 AND
rendimento<160000)AND(media>16)) then
mensagem = “ tem “
else
if (media>18) then
mensagem = “ tem “
else
mensagem = “ não tem “
end if
end if
end if
end if
Response.Write mensagem%>
</font>
<font color=”#800000" face=”Arial” size=”3">direito<br>à bolsa de
estudo.<br></font></b></p><br>
<%
else%>
<br><center><strong><font face=’ARIAL’ color=’red’ size=’3'>
Não é possível concorrer à bolsa de estudo<br> com <%=idade%>
anos.</font></strong></center><br>
<%end if%>
</td></tr></table>
<br><br><a href=”cpt4-3-3.asp”>repetir a simulação</a>
</center>
</div>
<%End Sub%>
<%Sub dados_validar()%>
<%
session(“erro”) = “”
if not(IsDate(data)) then
session(“erro”) = “* A data está inválida...<br>”
else
if (not(IsNumeric(media))OR ((media<0)OR(media>20))) then
session(“erro”) = “* A média é inválida...<br>”
else
if not(IsNumeric(rendimento)) then
session(“erro”) = “* O rendimento está inválido...<br>”
end if
end if
end if
CAPÍTULO 4: OBJECTOS 83
if session(“erro”)<>”” then
formulario
else
resposta
end if
%>
<%End Sub%>
<%Sub formulario()%>
<p align=”center”><i><b><font size=”4" color=”#800000">Simulador de
Bolsas de Estudo</font></b></i>
<br>
<div align=”center”>
<center>
<FORM name=”bolsa” method=”POST”>
<table border=”0" width=”400" bgcolor=”#CED299"><tr>
<td width=”100%” align=”left”>
<strong><font size=”2" face=”ARIAL” color=”RED”><%=session(“erro”)%>
</font></strong>
<font face=”Arial”><b>Nome: </b></font>
<input type=”text” name=”nome” size=”44"
value=”<%=Request.Form(“nome”)%>” maxlength=”50">
<font face=”Arial”><b><br>Data de Nascimento:</b></font>
<input type=”text” name=”dia” size=”2" value=”<%=Request.Form(“dia”)%>”
maxlength=”2">-
<input type=”text” name=”mes” maxlength=”2"
value=”<%=Request.Form(“mes”)%>” size=”2">- 19
<input type=”text” name=”ano” size=”2" maxlength=”2"
value=”<%=Request.Form(“ano”)%>”><b>
<font face=”Arial”><br>Média do último ano:</font></b>
<input type=”text” name=”media” value=”<%=Request.Form(“media”)%>”
size=”2" maxlength=”2">valores<b>
<font face=”Arial”><br>Rendimento mensal dos pais:</font></b>
<input type=”text” name=”rendimento”
value=”<%=Request.Form(“rendimento”)%>” maxlength=”7" size=”7">$00
<p align=”center”><input type=”submit” value=”Simular”
name=”submeter”><br></p>
</td>
</tr></table>
</FORM>
</center>
</div>
<%End Sub%>
84 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
<%
nome = Request.Form(“nome”)
data = Request.Form(“dia”) & “-” & Request.Form(“mes”) & “-19” &
Request.Form(“ano”)
media = Request.Form(“media”)
rendimento = Request.Form(“rendimento”)
if (Request.Form(“submeter”)=””) then
formulario
else
dados_validar
end if
%>
<%Sub Pergunta1()%>
<%session(“npergunta”)=1%>
<div align=”center”>
<center>
<table border=”0" width=”500" bgcolor=”#B8CFCF”>
<tr>
<td width=”100%”><b><font face=”Arial”>Pergunta > <i>1 / 5<br>
<br>
</i></font></b>
<FORM name=”pergunta1" action=”cpt4-3-4.asp” method=”POST”>
<p>
<font face=”Arial”>Qualo código para escrever no browser?</font></p>
<div align=”center”>
<center>
<table border=”0" width=”300">
<tr>
<td width=”7%” align=”right”><input type=”radio” value=”resposta1"
name=”pergunta1"></td>
<td width=”93%”><font face=”Arial”>Request.Write ()</font></td>
</tr>
<tr>
<td width=”7%” align=”right”><input type=”radio” value=”resposta2"
name=”pergunta1"></td>
<td width=”93%”><font face=”Arial”>Session(“escrever”)</font></td>
</tr>
<tr>
<td width=”7%” align=”right”><input type=”radio” value=”resposta3"
name=”pergunta1"></td>
<td width=”93%”><font face=”Arial”>Response.Write ()</font></td>
</tr>
<tr>
<td width=”7%” align=”right”><input type=”radio” value=”resposta4"
checked name=”pergunta1"></td>
<td width=”93%”><font face=”Arial”>Não sei</font></td>
</tr>
86 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
</table>
</center>
</div>
<p align=”center”><input type=”submit” value=”Responder”
name=”submeter”></p>
</FORM>
</td>
</tr>
</table>
</center>
</div>
<%End Sub%>
Como se pode ver este é um teste de ASP. O leitor pode fazer testes
de tudo o que quiser, e com o uso de bases de dados (a ver em
próximo capítulo), pode criar vários tipos de testes usando apenas
um procedimento para todos eles.
Será então num outro procedimento, depois de todas as perguntas
terem sido respondidas, que todas as variáveis serão limpas, de
maneira a que se possa responder a um novo teste, ou tentar nova
sorte. Nesta fase, será feita uma validação de todas as respostas e
incrementada uma variável com o total de valores do teste - alterada
consoante a qualidade das respostas dadas.
CAPÍTULO 4: OBJECTOS 87
Fig. 4.14
88 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
(ficheiro cpt4-3-4.asp)
<%Sub Pergunta1()%>
<%session(“npergunta”)=1%>
<div align=”center”>
<center>
<table border=”0" width=”500" bgcolor=”#B8CFCF”>
<tr>
<td width=”100%”><b><font face=”Arial”>Pergunta > <i>1 / 5<br>
<br>
</i></font></b>
<FORM name=”pergunta1" action=”cpt4-3-4.asp” method=”POST”>
<p>
<font face=”Arial”>Qualo código para escrever no browser?</font></p>
<div align=”center”>
<center>
<table border=”0" width=”300">
<tr>
<td width=”7%” align=”right”><input type=”radio” value=”resposta1"
name=”pergunta1"></td>
<td width=”93%”><font face=”Arial”>Request.Write ()</font></td>
</tr>
<tr>
<td width=”7%” align=”right”><input type=”radio” value=”resposta2"
name=”pergunta1"></td>
<td width=”93%”><font face=”Arial”>Session(“escrever”)</font></td>
</tr>
<tr>
<td width=”7%” align=”right”><input type=”radio” value=”resposta3"
name=”pergunta1"></td>
<td width=”93%”><font face=”Arial”>Response.Write ()</font></td>
</tr>
<tr>
<td width=”7%” align=”right”><input type=”radio” value=”resposta4"
checked name=”pergunta1"></td>
<td width=”93%”><font face=”Arial”>Não sei</font></td>
</tr>
</table>
</center>
</div>
<p align=”center”><input type=”submit” value=”Responder”
name=”submeter”></p>
</FORM>
</td>
</tr>
</table>
</center>
</div>
<%End Sub%>
CAPÍTULO 4: OBJECTOS 89
<%Sub Pergunta2()%>
<%session(“pergunta1”) = Request.Form(“pergunta1”)
session(“npergunta”)=2%>
<div align=”center”>
<center>
<table border=”0" width=”500" bgcolor=”#B8CFCF”>
<tr>
<td width=”100%”><b><font face=”Arial”>Pergunta > <i>2 / 5<br>
<br>
</i></font></b>
<FORM name=”pergunta2" action=”cpt4-3-4.asp” method=”POST”>
<p>
<font face=”Arial”>Como se cria uma variável global, acessível
por<br>todos os utilizadores?</font></p>
<div align=”center”>
<center>
<table border=”0" width=”300">
<tr>
<td width=”7%” align=”right”><input type=”radio” value=”resposta1"
name=”pergunta2"></td>
<td width=”93%”><font face=”Arial”>Session ()</font></td>
</tr>
<tr>
<td width=”7%” align=”right”><input type=”radio” value=”resposta2"
name=”pergunta2"></td>
<td width=”93%”><font face=”Arial”>Application ()</font></td>
</tr>
<tr>
<td width=”7%” align=”right”><input type=”radio” value=”resposta3"
name=”pergunta2"></td>
<td width=”93%”><font face=”Arial”>x = 1</font></td>
</tr>
<tr>
<td width=”7%” align=”right”><input type=”radio” value=”resposta4"
checked name=”pergunta2"></td>
<td width=”93%”><font face=”Arial”>Não sei</font></td>
</tr>
</table>
</center>
</div>
<p align=”center”><input type=”submit” value=”Responder”
name=”submeter”></p>
</FORM>
</td>
</tr>
</table>
</center>
</div>
<%End Sub%>
90 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
<%Sub Pergunta3()%>
<%session(“pergunta2”) = Request.Form(“pergunta2”)
session(“npergunta”)=3%>
<div align=”center”>
<center>
<table border=”0" width=”500" bgcolor=”#B8CFCF”>
<tr>
<td width=”100%”><b><font face=”Arial”>Pergunta > <i>3 / 5<br>
<br>
</i></font></b>
<FORM name=”pergunta3" action=”cpt4-3-4.asp” method=”POST”>
<p>
<font face=”Arial”>Qual o servidor Internet para as ASP que é
<br>usado no Windows NT?</font></p>
<div align=”center”>
<center>
<table border=”0" width=”300">
<tr>
<td width=”7%” align=”right”><input type=”radio” value=”resposta1"
name=”pergunta3"></td>
<td width=”93%”><font face=”Arial”>Personal Wide Server</font></td>
</tr>
<tr>
<td width=”7%” align=”right”><input type=”radio” value=”resposta2"
name=”pergunta3"></td>
<td width=”93%”><font face=”Arial”>Apache</font></td>
</tr>
<tr>
<td width=”7%” align=”right”><input type=”radio” value=”resposta3"
name=”pergunta3"></td>
<td width=”93%”><fontface=”Arial”>I
nternetInformationServer</font></td>
</tr>
<tr>
<td width=”7%” align=”right”><input type=”radio” value=”resposta4"
checked name=”pergunta3"></td>
<td width=”93%”><font face=”Arial”>Não sei</font></td>
</tr>
</table>
</center>
</div>
<p align=”center”><input type=”submit” value=”Responder”
name=”submeter”></p>
</FORM>
</td>
</tr>
</table>
</center>
</div>
<%End Sub%>
CAPÍTULO 4: OBJECTOS 91
<%Sub Pergunta4()%>
<%session(“pergunta3”) = Request.Form(“pergunta3”)
session(“npergunta”)=4%>
<div align=”center”>
<center>
<table border=”0" width=”500" bgcolor=”#B8CFCF”>
<tr>
<td width=”100%”><b><font face=”Arial”>Pergunta > <i>4 / 5<br>
<br>
</i></font></b>
<FORM name=”pergunta4" action=”cpt4-3-4.asp” method=”POST”>
<p>
<font face=”Arial”>Qual a função que devolve uma diferença entre
duas datas?</font></p>
<div align=”center”>
<center>
<table border=”0" width=”300">
<tr>
<td width=”7%” align=”right”><input type=”radio” value=”resposta1"
name=”pergunta4"></td>
<td width=”93%”><font face=”Arial”>DateDiff ()</font></td>
</tr>
<tr>
<td width=”7%” align=”right”><input type=”radio” value=”resposta2"
name=”pergunta4"></td>
<td width=”93%”><font face=”Arial”>IsDate ()</font></td>
</tr>
<tr>
<td width=”7%” align=”right”><input type=”radio” value=”resposta3"
name=”pergunta4"></td>
<td width=”93%”><font face=”Arial”>Date ()</font></td>
</tr>
<tr>
<td width=”7%” align=”right”><input type=”radio” value=”resposta4"
checked name=”pergunta4"></td>
<td width=”93%”><font face=”Arial”>Não sei</font></td>
</tr>
</table>
</center>
</div>
<p align=”center”><input type=”submit” value=”Responder”
name=”submeter”></p>
</FORM>
</td>
</tr>
</table>
</center>
</div>
<%End Sub%>
92 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
<%Sub Pergunta5()%>
<%session(“pergunta4”) = Request.Form(“pergunta4”)
session(“npergunta”)=5%>
<div align=”center”>
<center>
<table border=”0" width=”500" bgcolor=”#B8CFCF”>
<tr>
<td width=”100%”><b><font face=”Arial”>Pergunta > <i>5 / 5<br>
<br>
</i></font></b>
<FORM name=”pergunta5" action=”cpt4-3-4.asp” method=”POST”>
<p>
<font face=”Arial”>Como chama em ASP um procedimento chamado ‘
procedimento1’?</font></p>
<div align=”center”>
<center>
<table border=”0" width=”300">
<tr>
<td width=”7%” align=”right”><input type=”radio” value=”resposta1"
name=”pergunta5"></td>
<td width=”93%”><font face=”Arial”>get procedimento1</font></td>
</tr>
<tr>
<td width=”7%” align=”right”><input type=”radio” value=”resposta2"
name=”pergunta5"></td>
<td width=”93%”><font face=”Arial”>run procedimento1</font></td>
</tr>
<tr>
<td width=”7%” align=”right”><input type=”radio” value=”resposta3"
name=”pergunta5"></td>
<td width=”93%”><font face=”Arial”>procedimento1</font></td>
</tr>
<tr>
<td width=”7%” align=”right”><input type=”radio” value=”resposta4"
checked name=”pergunta5"></td>
<td width=”93%”><font face=”Arial”>Não sei</font></td>
</tr>
</table>
</center>
</div>
<p align=”center”><input type=”submit” value=”Responder”
name=”submeter”></p>
</FORM>
</td>
</tr>
</table>
</center>
</div>
<%End Sub%>
CAPÍTULO 4: OBJECTOS 93
<%Sub total_respostas()%>
<%session(“pergunta5”) = Request.Form(“pergunta5”)
total = 0
if session(“pergunta1”) = “resposta3” then total = total + 4
if session(“pergunta2”) = “resposta2” then total = total + 6
if session(“pergunta3”) = “resposta3” then total = total + 3
if session(“pergunta4”) = “resposta1” then total = total + 2
if session(“pergunta5”) = “resposta3” then total = total + 5
Response.Write “<center><strong>Teve “ & total & “ valores neste
teste...<strong><br><br>”
if total < 10 then
Response.Write “<strong><font size=’4' color=’RED’>REPROVADO</
font></strong>”
Else
if (total > 10 AND total <= 11) then
Response.Write “<strong><font size=’4' color=’BLUE’>APROVADO à
tangente...</font></strong>”
Else
if (total >= 12 AND total < 17) then
Response.Write “<strong><font size=’4' color=’BLUE’>APROVADO
</font></strong>”
Else
if (total >= 18 AND total<=20) then
Response.Write”<strong><font size=’4' color=’BLUE’>APROVADO
com distinção!</font></strong>”
end if
end if
end if
end if
%>
<br><br><center><a href=”cpt4-3-4.asp”>recomeçar</a></center>
<%session(“pergunta1”) = “”
session(“pergunta2”) = “”
session(“pergunta3”) = “”
session(“pergunta4”) = “”
session(“pergunta5”) = “”0%>
session(“npergunta”)
<%End Sub%>
<%
Select case session(“npergunta”)
case 1 Pergunta2
case 2 Pergunta3
case 3 Pergunta4
case 4 Pergunta5
case 5 total_respostas
case else Pergunta1
end select
%>
94 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
Para acabar esta parte do capítulo, vamos ver como podemos pro-
teger as nossas páginas ASP, de maneira a só serem acedidas de-
pois de introdução de login e password, e controlando o tempo que
estes têm de activação. Parece algo que requer alguma programa-
ção mais avançada, mas será o exemplo onde terá de ser escrito
um m ínimo de código de programação. Tudo o que o leitor tem de
criar é um ficheiro, formulário onde o utilizador irá introduzir o login e
a password, a mensagem de erro, e o envio para a página principal
do site protegido, que por sua vez, só pode ser acedido depois do
login e password serem validados.
(ficheiro cpt4-3-5test.asp)
<%if ( session ( “login” ) <> “xpto” and session( “password” )<> “123” ) then
Response.Redirect(“cpt4-3-5erro.asp”)
end if%>
<center><br><br><br>
<font face=”ARIAL” color=”BLUE” size=”6">Bem vindoa esta página...</font>
</center>
Sub Session_OnStart
End Sub
Sub Session_OnEnd
End Sub
Sub Application_OnEnd
End Sub
</SCRIPT>
98 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
(ficheiro global.asa)
<SCRIPT LANGUAGE=”VBScript” RUNAT=”Server”>
Sub Application_OnStart
Session.Timeout = 3
Application.Lock
Application(“utilizadores”) = 0
Application.UnLock
End Sub
Sub Session_OnStart
Application.Lock
Application(“utilizadores”) = Application(“utilizadores”) + 1
Application.UnLock
End Sub
Sub Session_OnEnd
Application.Lock
Application(“utilizadores”) = Application(“utilizadores”) - 1
Application.UnLock
End Sub
Sub Application_OnEnd
End Sub
</SCRIPT>
(ficheiro cpt4-3-6.asp)
<font face=”ARIAL” size=”3">Existem neste momento</font>
<font face=”ARIAL” color=”red”
size=”5"><%=Application(“utilizadores”)%></font>
<font face=”ARIAL” size=”3"> utilizadores...</font><br>
(ficheiro cpt4-3-7.html)
<HTML>
<HEAD><TITLE>Chat</TITLE></HEAD>
<frameset FRAMEBORDER=”0" BORDER=”false” framespacing=”0"
rows=”90,60">
<FRAME SRC=”cpt4-3-7top.asp” SCROLLING=”no”>
<FRAME SRC=”cpt4-3-7.asp” SCROLLING=”no”>
</FRAMESET>
</HTML>
Vamos então configurar cada uma das páginas que vão ser criadas
para colocar o chat em funcionamento dentro do esquema deframes.
(ficheiro cpt4-3-7.asp)
<body bgcolor=”BLACK”>
<%
If not Request.Form(“mensagem”)=”” THEN
APPLICATION.LOCK
Application(“linha18”) = Application(“linha17”)
Application(“linha17”) = Application(“linha16”)
Application(“linha16”) = Application(“linha15”)
Application(“linha15”) = Application(“linha14”)
Application(“linha14”) = Application(“linha13”)
Application(“linha13”) = Application(“linha12”)
Application(“linha12”) = Application(“linha11”)
Application(“linha11”) = Application(“linha10”)
Application(“linha10”) = Application(“linha9”)
Application(“linha9”) = Application(“linha8”)
Application(“linha8”) = Application(“linha7”)
Application(“linha7”) = Application(“linha6”)
Application(“linha6”) = Application(“linha5”)
Application(“linha5”) = Application(“linha4”)
Application(“linha4”) = Application(“linha3”)
Application(“linha3”) = Application(“linha2”)
Application(“linha2”) = Application(“linha1”)
Application(“linha1”) = “<B>” & Request.Form(“nick”) & “:</B> “ &
Request.Form(“mensagem”)
APPLICATION.UNLOCK
END IF
%>
<FORM NAME=”chat” ACTION=”cpt4-3-7.asp” METHOD=”post” >
<font size=”3" color=”white”>Nick: </font>
<INPUT NAME=”nick” SIZE=10 maxlength=”14"
value=”<%=Request.Form(“Nick”)%>”><br>
<font size=”3" color=”white”>Mensagem: </font>
<INPUT NAME=”mensagem” SIZE=30 maxlength=”72"><br>
<INPUT TYPE=”submit” value=”Introduzir”>
</FORM>
</body>
CAPÍTULO 4: OBJECTOS 103
(ficheiro cpt4-3-7top.asp)
<HTML>
<HEAD>
<META HTTP-EQUIV=”REFRESH” CONTENT=”8;cpt4-3-7top.asp”>
</HEAD>
<%=Application(“linha18”)%><BR>
<%=Application(“linha17”)%><BR>
<%=Application(“linha16”)%><BR>
<%=Application(“linha15”)%><BR>
<%=Application(“linha14”)%><BR>
<%=Application(“linha13”)%><BR>
<%=Application(“linha12”)%><BR>
<%=Application(“linha11”)%><BR>
<%=Application(“linha10”)%><BR>
<%=Application(“linha9”)%><BR>
<%=Application(“linha8”)%><BR>
<%=Application(“linha7”)%><BR>
<%=Application(“linha6”)%><BR>
<%=Application(“linha5”)%><BR>
<%=Application(“linha4”)%><BR>
<%=Application(“linha3”)%><BR>
<%=Application(“linha2”)%><BR>
<%=Application(“linha1”)%><BR>
</HTML>
(ficheiro cpt4-3-8.asp)
<TABLE border=”1" bordercolor=”black” cellspacing=”0">
<TR><TD><B>Variáveis</B></TD>
<TD><B>Conteudo</B></TD></TR>
<%For Each nome In Request.ServerVariables%>
<TR><TD><%=nome%></TD>
<TD><%=Request.ServerVariables(nome)%>
</TD></TR>
<%Next %>
</TABLE>
(ficheiro cpt4-3-9.asp)
Pelo código anterior julgo que fica clara a maneira como se usa m e
acedem às variáveis do servidor…
Os cookies têm alguns métodos que vão ser explorados neste exem-
plo. Os cookies aqui criados foram feitos como se de objectos se
tratassem criando-se uma estrutura OCOOKIE que detém várias
variáveis. A este ‘array’ de cookies vai-se acrescentar uma validade,
que é definida em dias, usando-se (DATE + número de dias) para a
activar.
CAPÍTULO 4: OBJECTOS 107
(ficheiro cpt4-3-10.asp)
formatDateTime(“12-01-1995 12:12:00”,1)
Obtém-se assim uma data por extenso, onde até se inclui o dia da
semana. É uma formatação útil para quando queremos uma maior
descrição de uma data, para apresentar cálculos, ou apenas para
páginas que suportam calendários feitos em ASP.
Response.Write formatCurrency(“12312321”)
Podemos formatar um qualquer número para a nossa moeda. O
resultado do número em questão será então em escudos.
Response.Write FormatNumber(“4231,22345553”,5)
Quando precisamos de obter um número e temos de definir as ca-
sas decimais, podemos usar esta função para essa mesma tarefa.
FormatPercent(15/67)
Esta função é muito útil quando fazemos estatísticas num site, ou
quando temos um gráfico, como por exemplo, de uma dada vota-
ção. Somam-se todos os votos, separam-se os que s ão referentes
a um assunto, e usamos esta função para sabermos a que percen-
tagem pertence esse assunto no universo.
Server.URLEncode(http://www.joaovieira.com/)
Esta função não é muito usada, mas sempre que for preciso formatar
uma string, de maneira a ela servir como refer ência para outro site,
que tem espaços no link ou outra formatação estranha, usa-se este
método para se obter a string certa para esse efeito
(ficheiro cpt4-3-11.asp)
str1 = “12-01-1995 12:12:00”
Response.Write str1 & “ <strong>(não formatada)</strong><br>”
Response.Write formatDateTime(str1,1) & “ (formatada com opção 1 de
FormatDateTime)<br><br>”
str3 = “12312321”
Response.Write str3 & “ <strong>(não formatada)</strong><br>”
Response.Write formatCurrency(str3) & “ (formatada)<br><br>”
str4 = “4231,22345553”
Response.Write str4 & “ <strong>(não formatada)</strong><br>”
Response.Write FormatNumber(str4,5) & “ (formatada com formatNumber
para 5 casas decimais)<br><br>”
str5 = “15/67”
Response.Write str5 & “ <strong>(não formatada)</strong><br>”
Response.Write FormatPercent(15/67) & “ (formatada com Format
Percent)<br><br>”
str7 = “http://www.joaovieira.com/”
Response.Write str7 & “ <strong>(não formatada)</strong><br>”
Response
.Write Server.UR
LEncode(str7) &
“ (formatadacom
Server.URLEncode)<br><br>”
TABELA: CONTACTOS
TABELA: CONTACTOS
ID as number
Nome as varchar(50)
Telefone as varchar(14)
EMail as varchar(22)
Ficou assim criada uma tabela possível de ser usada numa base de
dados. Vamos então demonstrar esta mesma tabela mas com dados
já introduzidos depois de ter sido criada.
TABELA: CONTACTOS
1 Jo ão 219886675 Joao@joao.pt
2 Carlos 324444332 Carlos@carlos.pt
3 Rui 234343444 Rui@rui.pt
4 Pedro 332442433 Pedro@pedro.pt
com as mesmas.
A estrutura base do SQL é a seguinte:
TABELA: CONTACTOS
1 Jo ão 219886675 Joao@joao.pt
2 Carlos 324444332 Carlos@carlos.pt
3 Rui 234343444 Rui@rui.pt
4 Pedro 332442433 Pedro@pedro.pt
5 Ricardo 288889999 Ricardo@ricardo.pt
Foi adoptado para este livro a base de dados Microsoft Access, pois
é a mais acessível de todas, mas é indiferente aquando de uma
conexão via ODBC.
A ideia é criar uma base de dados para contactos. O propósito não é
propriamente a vantagem comercial, ou t écnica, mas sim um
exemplo perceptível, para se usar nos exemplos de introdução ao
uso de bases de dados com ASP.
TABELA: CONTACTOS
ID Auto-number
Nome Text (50)
Idade Number(Integer)
Telefone Text (22)
Email Text(32) / null
Data Date/Time
Fica assim criada a primeira tabela da base de dados que nos vai
acompanhar no resto deste livro.
Para ser feita esta conexão temos de saber onde temos o ficheiro da
BD, e o nome que achamos ser o mais fácil, ou acessível para uso
dentro da programação ASP. Neste manual vai ser livrodsn
ão
Fig. 5.13 - Imagem da consola depois de criada a conex
Conn.open “DSN=livrodsn;”
Set rs = Server.CreateObject(“ADODB.Recordset”)
Depois das fases anteriores, tudo o que tem de fazer para controlar
a BD é criar uma declaração de SQL e accionar a mesma, isto da
seguinte maneira,
Set rs = Server.CreateObject(“ADODB.Recordset”)
SQLStmt = “Select * FROM contactos”
rs.Open SQLStmt, conn, 2, 1
(ficheiro cpt5-4-1.asp)
Set Conn = Server.CreateObject(“ADODB.Connection”)
Conn.open “DSN=livrodsn;”
Set rs = Server.CreateObject(“ADODB.Recordset”)
SQLStmt = “INSERT INTO contactos (nome, idade, telefone,email, data) “
SQLStmt = SQLStmt & “VALUES(‘Bernardo Miguel’, 12, ‘33242443’,
‘bernardo@bernardo.pt’, now())”
rs.Open SQLstmt,Conn,1,2
Response
.Write “Introduzi
do comsucesso
...”
Sub formulario_introducao%>
<div align=”center”>
<table bordercolor=”black” border=”1" cellpadding=”5" cellspacing=”0">
<tr><td>
<form action=”cpt5-4-2.asp?fazer=introduzir” method=”POST”>
Nome: <input type=”text” name=”nome”
value=”<%=Request.Form(“nome”)%>” size=”30"><br>
Idade: <input type=”text” name=”idade”
value=”<%=Request.Form(“idade”)%>” size=”3"><br>
Telefone: <input type=”text” name=”telefone”
value=”<%=Request.Form(“telefone”)%>” size=”12"><br>
E-Mail: <input type=”text” name=”email”
value=”<%=Request.Form(“email”)%>” size=”22"><br>
<center><input type=”submit” value=”Introduzir”></center>
</form>
</td></tr></table></div>
<%End Sub%>
Sub validar_dados()
if len(Request.Form(“nome”))>50 or len(Request.Form(“nome”))<3 then
Response.Write “<center><font color=’RED’>O nome não pode
exceder os 50 caracteres, ou ter menos de 3.</font></center>”
formulario_introducao
exit sub
else
if (len(Request.Form(“idade”))>3 or (not
isnumeric(Request.Form(“idade”)))) then
Response.Write “<center><font color=’RED’>A idade não é
válida...</font></center>”
formulario_introducao
exit sub
else
if len(Request.Form(“telefone”))>22 or
len(Request.Form(“telefone”))<6 then
Response.Write “<center><font color=’RED’>O telefone excedeu
o número de caracteres, ou tem menos de 6.</font></center>”
formulario_introducao
exit sub
else
if len(Request.Form(“email”))>32 then
Response.Write “<center><font color=’RED’>O email
excedeu o número de caracteres.</font></center>”
formulario_introducao
exit sub
end if
end if
end if
end if
introducao_dados
End Sub
ário do ficheirocpt5-4-2.asp
Fig. 5.14 - Aspecto do formul ,
com um campo em que se tentam introduzir dadosálidos
inv
130 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
Sub introducao_dados()
Set Conn = Server.CreateObject(“ADODB.Connection”)
Conn.open “DSN=livrodsn;”
Set rs = Server.CreateObject(“ADODB.Recordset”)
SQLStmt = “INSERT INTO contactos (nome, idade, telefone, email, data) “
SQLStmt = SQLStmt & “VALUES(‘“&Request.Form(“nome”)&”’,”
SQLStmt = SQLStmt & “ “&Request.Form(“idade”)&”,”
SQLStmt = SQLStmt & “ ‘“&Request.Form(“telefone”)&”’, “
SQLStmt = SQLStmt & “‘“&Request.Form(“email”)&”’, “
SQLStmt = SQLStmt & “now())”
rs.Open SQLstmt,Conn,1,2
Response.Write “<br><br><center>Acabou de ser introduzido um novo
contacto.<br><br>”
Response.Write “<a href=’cpt5-4-2.asp’>introduzir novo contacto</a>
</center>”
End Sub
(ficheiro cpt5-4-2.asp)
<%
Sub introducao_dados()
Set Conn = Server.CreateObject(“ADODB.Connection”)
Conn.open “DSN=livrodsn;”
Set rs = Server.CreateObject(“ADODB.Recordset”)
SQLStmt = “INSERT INTO contactos (nome, idade, telefone, email, data) “
SQLStmt = SQLStmt & “VALUES(‘“&Request.Form(“nome”)&”’,”
SQLStmt = SQLStmt & “ “&Request.Form(“idade”)&”,”
SQLStmt = SQLStmt & “ ‘“&Request.Form(“telefone”)&”’, “
SQLStmt = SQLStmt & “‘“&Request.Form(“email”)&”’, “
SQLStmt = SQLStmt & “now())”
rs.Open SQLstmt,Conn,1,2
Response.Write “<br><br><center>Acabou de ser introduzido um novo
contacto.<br><br>”
132 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
Sub validar_dados()
if len(Request.Form(“nome”))>50 or len(Request.Form(“nome”))<3 then
Response.Write “<center><font color=’RED’>O nome não pode
exceder os 50 caracteres, ou ter menos de 3.</font></center>”
formulario_introducao
exit sub
else
if (len(Request.Form(“idade”))>3 or (not
isnumeric(Request.Form(“idade”)))) then
Response.Write “<center><font color=’RED’>A idade não é
válida...</font></center>”
formulario_introducao
exit sub
else
if len(Request.Form(“telefone”))>22 or
len(Request.Form(“telefone”))<6 then
Response.Write “<center><font color=’RED’>O telefone excedeu
o número de caracteres, ou tem menos de 6.</font></center>”
formulario_introducao
exit sub
else
if len(Request.Form(“email”))>32 then
Response.Write “<center><font color=’RED’>O email
excedeu o número de caracteres.</font></center>”
formulario_introducao
exit sub
end if
end if
end if
end if
introducao_dados
End Sub
Sub formulario_introducao%>
<div align=”center”>
<table bordercolor=”black” border=”1" cellpadding=”5" cellspacing=”0">
<tr><td>
<form action=”cpt5-4-2.asp?fazer=introduzir” method=”POST”>
Nome: <input type=”text” name=”nome”
value=”<%=Request.Form(“nome”)%>” size=”30"><br>
Idade: <input type=”text” name=”idade”
CAPÍTULO 5: BASES DE DADOS 133
value=”<%=Request.Form(“idade”)%>” size=”3"><br>
Telefone: <input type=”text” name=”telefone”
value=”<%=Request.Form(“telefone”)%>” size=”12"><br>
E-Mail: <input type=”text” name=”email”
value=”<%=Request.Form(“email”)%>” size=”22"><br>
<center><input type=”submit” value=”Introduzir”></center>
</form>
</td></tr></table></div>
<%End Sub%>
<%
if request.querystring(“fazer”) = “introduzir” then
validar_dados
else
formulario_introducao
end if
%>
O c ódigo,
<%Sub formulario()
Set Conn = Server.CreateObject(“ADODB.Connection”)
Conn.open “DSN=livrodsn;”
Set rs = Server.CreateObject(“ADODB.Recordset”)
SQLStmt = “SELECT * FROM contactos”
rs.Open SQLstmt,Conn,1,2
%>
<FORM ACTION=”cpt5-4-3.asp?fazer=apagar” METHOD=”POST”>
<font face=”ARIAL” size=”2">contactos na base de dados</font><br>
<SELECT NAME=”contacto”>
<OPTION selected> — escolha — </OPTION>
<%While Not rs.EOF
%>
<OPTION VALUE=”<%= rs.Fields(“ID”) %>”><%= rs.Fields(“nome”)%>
</OPTION>
<%rs.MoveNext
Wend
rs.close%>
</SELECT>
<INPUT type=”submit” value=”Apagar”>
</FORM>
<%End Sub%>
ário do ficheirocpt5-4-3.asp
Fig. 5.17 - Aspecto do formul
CAPÍTULO 5: BASES DE DADOS 135
<%Sub apagar_contacto%>
<%
Set Conn = Server.CreateObject(“ADODB.Connection”)
Conn.open “DSN=livrodsn;”
Set rs = Server.CreateObject(“ADODB.Recordset”)
SQLStmt = “DELETE FROM contactos WHERE ID = “ &
Request.Form(“contacto”)
rs.Open SQLstmt,Conn,1,2
%>
<strong><font face=”ARIAL” size=”3">O contacto escolhido foi apagado...
</font></strong><br>
<br><br><a href=”cpt5-4-3.asp”>continuar a apagar</a>
<%End Sub%>
(ficheiro cpt5-4-3.asp)
<%Sub formulario()
Set Conn = Server.CreateObject(“ADODB.Connection”)
Conn.open “DSN=livrodsn;”
Set rs = Server.CreateObject(“ADODB.Recordset”)
SQLStmt = “SELECT * FROM contactos”
rs.Open SQLstmt,Conn,1,2
%>
<FORM ACTION=”cpt5-4-3.asp?fazer=apagar” METHOD=”POST”>
<font face=”ARIAL” size=”2">contactos na base de dados</font><br>
<SELECT NAME=”contacto”>
<OPTION selected> — escolha — </OPTION>
<%While Not rs.EOF
%>
<OPTION VALUE=”<%= rs.Fields(“ID”) %>”><%= rs.Fields(“nome”)%>
</OPTION>
<%rs.MoveNext
Wend
rs.close%>
</SELECT>
<INPUT type=”submit” value=”Apagar”>
</FORM>
<%End Sub%>
<%Sub apagar_contacto%>
<%
Set Conn = Server.CreateObject(“ADODB.Connection”)
Conn.open “DSN=livrodsn;”
Set rs = Server.CreateObject(“ADODB.Recordset”)
SQLStmt = “DELETE FROM contactos WHERE ID = “ &
Request.Form(“contacto”)
rs.Open SQLstmt,Conn,1,2
%>
<strong><font face=”ARIAL” size=”3">O contacto escolhido foi apagado...
</font></strong><br>
<br><br><a href=”cpt5-4-3.asp”>continuar a apagar</a>
<%End Sub%>
<%
if Request.querystring(“fazer”)=”apagar” then
apagar_contacto
else
formulario
end if
%>
CAPÍTULO 5: BASES DE DADOS 137
<%Sub alterar()
Set Conn = Server.CreateObject(“ADODB.Connection”)
Conn.open “DSN=livrodsn;”
Set rs = Server.CreateObject(“ADODB.Recordset”)
SQLStmt = “SELECT * FROM contactos WHERE ID=” &
session(“contacto”)
rs.Open SQLstmt,Conn,1,2%>
<div align=”center”>
<table bordercolor=”black” border=”1" cellpadding=”5" cellspacing=”0">
<tr><td>
<form action=”cpt5-4-4.asp?fazer=executar” method=”POST”>
Nome : <input type=”text” name=”nome” value=”<%=rs.Fields(“nome”)%>”
size=”30"><br>
Idade : <input type=”text” name=”idade” value=”<%=rs.Fields(“idade”)%>”
size=”3"><br>
Telefone: <input type=”text” name=”telefone”
value=”<%=rs.Fields(“telefone”)%>” size=”12"><br>
E-Mail: <input type=”text” name=”email” value=”<%=rs.Fields(“email”)%>”
size=”22"><br>
<center><input type=”submit” value=”Submeter Alteração”></center>
</form>
</td></tr></table></div>
<%End Sub%>
138 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
<%Sub executar_alterar%>
<%
Set Conn = Server.CreateObject(“ADODB.Connection”)
Conn.open “DSN=livrodsn;”
Set rs = Server.CreateObject(“ADODB.Recordset”)
SQLStmt = “UPDATE contactos SET “
SQLStmt = SQLStmt & “ nome = ‘“&Request.Form(“nome”)&”’, “
SQLStmt = SQLStmt & “idade = “&Request.Form(“idade”)&”,”
SQLStmt = SQLStmt & “ telefone = ‘“&Request.Form(“telefone”)&”’, “
SQLStmt = SQLStmt & “email = ‘“&Request.Form(“email”)&”’”
SQLStmt = SQLStmt & “ WHERE ID = “ & session(“contacto”)
rs.Open SQLstmt,Conn,1,2
%>
<strong><font face=”ARIAL” size=”3">O contacto escolhido foi alterado...
</font></strong><br>
<br><br><a href=”cpt5-4-4.asp”>continuar a alterar</a>
<%End Sub%>
(ficheiro cpt5-4-4.asp)
<%Sub formulario_principal()
Set Conn = Server.CreateObject(“ADODB.Connection”)
Conn.open “DSN=livrodsn;”
Set rs = Server.CreateObject(“ADODB.Recordset”)
SQLStmt = “SELECT * FROM contactos”
rs.Open SQLstmt,Conn,1,2%>
<FORM ACTION=”cpt5-4-4.asp?fazer=alterar” METHOD=”POST”>
<font face=”ARIAL” size=”2">contactos na base de dados</font><br>
<SELECT NAME=”contacto”>
<OPTION selected> — escolha — </OPTION>
<%While Not rs.EOF%>
CAPÍTULO 5: BASES DE DADOS 139
<%Sub validar_dados()
if len(Request.Form(“nome”))>50 or len(Request.Form(“nome”))<3 then
Response.Write “<center><font color=’RED’>O nome não pode
exceder os 50 caracteres, ou ter menos de 3.</font></center>”
Alterar
exit sub
else
if (len(Request.Form(“idade”))>3 or (not
isnumeric(Request.Form(“idade”)))) then
Response.Write “<center><font color=’RED’>A idade não é
válida.</font></center>”
Alterar
exit sub
else
if len(Request.Form(“telefone”))>22 or
len(Request.Form(“telefone”))<6 then
Response.Write “<center><font color=’RED’>O telefone excedeu
140 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
<%Sub alterar()
Set Conn = Server.CreateObject(“ADODB.Connection”)
Conn.open “DSN=livrodsn;”
Set rs = Server.CreateObject(“ADODB.Recordset”)
SQLStmt = “SELECT * FROM contactos WHERE ID=” &
session(“contacto”)
rs.Open SQLstmt,Conn,1,2%>
<div align=”center”>
<table bordercolor=”black” border=”1" cellpadding=”5" cellspacing=”0">
<tr><td>
<form action=”cpt5-4-4.asp?fazer=executar” method=”POST”>
Nome : <input type=”text” name=”nome” value=”<%=rs.Fields(“nome”)%>”
size=”30"><br>
Idade : <input type=”text” name=”idade” value=”<%=rs.Fields(“idade”)%>”
size=”3"><br>
Telefone : <input type=”text” name=”telefone”
value=”<%=rs.Fields(“telefone”)%>” size=”12"><br>
E-Mail : <input type=”text” name=”email” value=”<%=rs.Fields(“email”)%>”
size=”22"><br>
<center><input type=”submit” value=”Submeter Alteração”></center>
</form>
</td></tr></table></div>
<%End Sub%>
<%
O c ódigo,
Ficam então assim descritas as três situações que o leitor vai en-
contrar quando começar a trabalhar com as ASP: Introduzir, apagar
e actualizar dados em BD parece ser por vezes difícil mas isso só
se pode dizer depois de conhecidos os objectivos. Por vezes para
se actualizar uma tabela é preciso percorrer outras, e o programa
terá de abrir vários recordsets e por vezes várias conexões, o que
será mais trabalhoso, e pedirá um esforço intelectual maior.
142 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
(ficheiro cpt5-5-1.asp)
<%
Set Conn = Server.CreateObject(“ADODB.Connection”)
Conn.open “DSN=livrodsn;”
Set rs = Server.CreateObject(“ADODB.Recordset”)
SQLStmt = “SELECT * FROM contactos”
rs.Open SQLstmt,Conn,1,2
%>
<table border=”0" width=”580" cellpadding=”4" cellspacing=”0">
<tr>
<td width=”170"><b>Nome</b></td>
<td width=”50" align=”right”><b>Idade</b></td>
<td width=”” align=”right”><b>Telefone</b></td>
<td width=””><b>E-Mail</b></td>
</tr>
<% cor=”99CCFF”
while not rs.EOF%>
<tr>
<td bgcolor=”#<%=cor%>”><%=Rs.Fields(“nome”)%></td>
<td bgcolor=”#<%=cor%>” align=”right”><%=Rs.Fields(“idade”)%></td>
<td bgcolor=”#<%=cor%>”
align=”right”><%=Rs.Fields(“telef one”)%></td>
<td bgcolor=”#<%=cor%>” ><%=Rs.Fields(“email”)%></td>
</tr>
<%rs.MoveNext
if cor=”99CCFF” then
cor=”9999FF”
else
cor=”99CCFF”
end if
wend
%></table>
CAPÍTULO 5: BASES DE DADOS 143
O c ódigo,
if cor=”99CCFF” then
cor=”9999FF”
else
cor=”99CCFF”
end if
Agora digamos que queremos criar uma tabela dinâmica, que vai
fazer uso de imagens. Neste caso para aqueles que têm e para os
que não têm e-mail. Digamos que para cada pessoa que tem e-mail
aparece uma imagem que, carregando na mesma, permite o envio
de e-mail para essa pessoa.
Para isso temos de validar o campo que devolve o e-mail, ver se
esse não está vazio, e nesse caso mostrar ou não a imagem refe-
rente a um envelope.
(ficheiro cpt5-5-2.asp)
<%
Set Conn = Server.CreateObject(“ADODB.Connection”)
Conn.open “DSN=livrodsn;”
Set rs = Server.CreateObject(“ADODB.Recordset”)
SQLStmt = “SELECT * FROM contactos”
rs.Open SQLstmt,Conn,1,2
%>
<table border=”0" width=”580" cellpadding=”4" cellspacing=”0">
<tr>
<td width=”32" align=”right”><font size=”1"><b>e-mail</b></font></td>
<td width=”170"><b>Nome</b></td>
<td width=”50" align=”right”><b>Idade</b></td>
<td width=”” align=”right”><b>Telefone</b></td>
</tr>
<% cor=”99CCFF”
while not rs.EOF%>
<tr>
<td align=”right”><%
if len(Rs.Fields(“email”))>1 then
Response.write “<a href=’mailto:”&Rs.Fields(“email”)&”’>”
Response.Write “<img border=’0' src=’carta.jpg’></a>”
end if
%></td>
<td bgcolor=”#<%=cor%>”><%=Rs.Fields(“nome”)%></td>
<td bgcolor=”#<%=cor%>” align=”right”><%=Rs.Fields(“idade”)%></td>
<td bgcolor=”#<%=cor%>”
align=”right”><%=Rs.Fields(“telef one”)%></td>
</tr>
<%rs.MoveNext
if cor=”99CCFF” then
cor=”9999FF”
else
cor=”99CCFF”
end if
wend
%></table>
CAPÍTULO 5: BASES DE DADOS 145
Algo que é muito usado nas páginas Internet é a pesquisa nas bases
de dados da existência de um dado utilizador, e é esse exemplo que
vamos apresentar de seguida.
146 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
(ficheiro cpt5-5-3.asp )
<%Sub Listagem()
Set Conn = Server.CreateObject(“ADODB.Connection”)
Conn.open “DSN=livrodsn;”
Set rs = Server.CreateObject(“ADODB.Recordset”)
SQLStmt = “SELECT * FROM contactos WHERE nome like ‘%” &
Request.Form(“nome”) & “%’”
rs.Open SQLstmt,Conn,1,2
%>
<table border=”0" width=”580" cellpadding=”4" cellspacing=”0">
<tr>
<td width=”32" align=”right”><font size=”1"><b>e-mail</b></font></td>
<td width=”170"><b>Nome</b></td>
<td width=”50" align=”right”><b>Idade</b></td>
<td width=”” align=”right”><b>Telefone</b></td>
</tr>
<% cor=”99CCFF”
while not rs.EOF%>
<tr>
<td align=”right”><%
if len(Rs.Fields(“email”))>1 then
Response.write “<a href=’mailto:”&Rs.Fields(“email”)&”’>”
Response.Write “<img border=’0' src=’carta.jpg’></a>”
End if
%></td>
<td bgcolor=”#<%=cor%>”><%=Rs.Fields(“nome”)%></td>
<td bgcolor=”#<%=cor%>” align=”right”><%=Rs.Fields(“idade”)%></td>
<td bgcolor=”#<%=cor%>”
align=”right”><%=Rs.Fields(“telef one”)%></td>
</tr>
<%rs.MoveNext
if cor=”99CCFF” then
cor=”9999FF”
else
cor=”99CCFF”
end if
wend
%></table>
<br><a href=”cpt5-5-3.asp”>fazer nova procura</a>
<%End Sub%>
<%Sub formulario_procura%>
<form action=”cpt5-5-3.asp?fazer=procura” method=”POST”>
String para Procura : <input type=”text” name=”nome” size=”22">
<input type=”submit” value=”Procurar”>
</form>
<%End Sub%>
<%select case request.querystring(“fazer”)
case “procura” listagem
case else formulario_procura
end select%>
CAPÍTULO 5: BASES DE DADOS 147
ário do ficheirocpt5-5-3.asp
Fig. 5.21 - Aspecto do formul
TABELA LIVRO_VISITAS
ID_livro as autonumber
Data_assinatura as Date/Time
Nome as Text (30)
Email as Text (30)
Texto as Memo
(ficheiro cpt5-6-1.asp)
<%
Sub Introduzir()
passa = 1
nome = left(Request.Form(“nome”),30)
nome = Replace(nome, “‘“, “”)
email = left(Request.Form(“email”),30)
email = Replace(email, “‘“, “”)
texto = Request.Form(“texto”)
texto = Replace(texto, “‘“, “”)
if (len(nome)<2) then
passa = 0
end if
CAPÍTULO 5: BASES DE DADOS 149
if (len(texto)<15) then
passa = 0
end if
If Len(email) > 0 and Len(email) < 5 Then
Passa = 0
Else
If InStr(1, email, “@”, 1) < 2 Then
Passa = 0
Else
If InStr(1,email, “.”, 1) < 4 Then
Passa = 0
End If
End If
End If
if passa=1 then
rs.Close
SQLStmt = “INSERT INTO livro_visitas (data_assinatura, nome, email,
texto) VALUES(“
SQLStmt = SQLStmt & “‘“ & now() & “‘, ‘“
SQLStmt = SQLStmt & nome & “‘, ‘“ & email & “‘, ‘“ & texto & “‘)”
rs.Open SQLstmt,Conn,1,2
Response.Redirect(“cpt5-6-1.asp”)
Else
Response.Write “<font color=’red’>os dados que tentou introduzir não
foram válidos.</font>”
end if
End Sub
<p align=”center”> </td>
</center>
</td></tr>
<%rs.MoveNext
wend
%>
<tr><td>
<form action=”cpt5-6-1.asp?fazer=introduzir” method=”POST”>
Indique o seu nome : <INPUT TYPE=”TEXT” NAME=”nome” size=”22"
maxlength=”30"><br>
o seu e-mail : <INPUT TYPE=”TEXT” NAME=”email” size=”22"
maxlength=”30"><br>
a mensagem que quer deixar :<br>
<TEXTAREA name=”texto” cols=”33" rows=”7"></TEXTAREA><br>
<input type=”submit” value=”Assinar o Livro”>
</form>
</td></tr></table></div>
E assim fica o Livro de Visitas conclu ído. O leitor nesta altura terá
concerteza menos dificuldades em assimilar tudo aquilo que vai
sendo feito no código, por isso não nos preocupamos com grandes
explicações nestes exemplos finais.
Algo que muitas empresas cada vez mais anseiam em ter nos seus
sites s ão as sondagens de opinião - uma maneira de conhecerem
as tend ê ncias, que em muito pode ajudar no di á logo com o
consumidor. Vamos então ver os conceitos básicos para criar uma
sondagem de opinião, e deixar o utilizador saber qual est á a ser a
tendência. A estrutura vai ser bastante simples:
Vamos então começar por construir a tabela que n ão vai ter mais de
três campos.
152 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
TABELA SONDAGEM
ID_sondagem as autonumber
Resposta as Text (5)
Valor as number
(ficheiro cpt5-6-2.asp)
<%
Sub Introduzir()
SQLStmt = “UPDATE sondagem SET valor = valor+1 WHERE
resposta =’” & Request.Form(“sondagem”) &”’”
Rs.Open SQLstmt,Conn,1,2
Response.Redirect(“cpt5-6-2.asp”)
End Sub
Set Conn = Server.CreateObject(“ADODB.Connection”)
Conn.open “DSN=livrodsn;”
Set rs = Server.CreateObject(“ADODB.Recordset”)
if Request.QueryString(“fazer”)=”introduzir” then
introduzir
end if
%>
<div align=”center”>
<table border=”0" width=”400">
<tr>
<td width=”100%”>
<p align=”center”><font size=”3" face=”Arial”><b>Acha que este livro
o ajudou?</b></font> </p>
<div align=”center”>
<table border=”0" width=”100">
<tr>
<td width=”26">
<form action=”cpt5-6-2.asp?fazer=introduzir” method=”POST”>
<p align=”right”><font size=”3" face=”Arial”><input type=”radio”
value=”Sim” name=”sondagem”></font></td>
<center>
<td width=”60"><font size=”3" face=”Arial”>Sim</font></td>
</tr>
</center>
<tr>
<td width=”26">
<p align=”right”><font size=”3" face=”Arial”><input type=”radio”
value=”Não” name=”sondagem”></font></td>
CAPÍTULO 5: BASES DE DADOS 153
<center>
<td width=”60"><font size=”3" face=”Arial”>Não</font></td>
</tr>
</table>
<input type=”submit” value=”Votar”></form>
<font size=”3" face=”Arial”>
<b>Resultados até ao momento :</b><br>
<%SQLStmt = “SELECT * FROM sondagem”
rs.Open SQLstmt,Conn,1,2
while not rs.EOF
Response.Write rs.Fields(“valor”) & “ respostas com “
Response.Write rs.Fields(“resposta”) & “<br>”
rs.MoveNext
wend
rs.Close
%>
</font>
</center>
</div>
<center>
</center>
</td>
</tr>
<center>
</table>
</center>
</div>
Mas por vezes podemos querer aceder a certas funções que não
são possíveis com as ASP. Para isso podemos aceder a outras como
o Visual Basic (por exemplo), criando um componente nesta lingua-
gem.
Com o tempo, o leitor vai cada vez mais usar este tipo de programa-
ção, pois facilita a mesma, e para aqueles que vendem os seus
serviços, podem salvaguardar o seu código desta maneira.
Existem alguns componentes que vêm com as ASP, assim como o
CDO (componente de e-mail) que vem com o IIS, o TextStream,
que é próprio das ASP, e muitos outros que podem ser encontrados
na Internet. A sua grande maioria é comercial, ou seja, terá de pagar
para os poder utilizar nos seus servidores. Mas muitos outros são
grátis, e um dos locais onde pode tentar encontrá-los é em http://
www.aspfree.com ou http://www.15seconds.com . Estes sites têm
listagens dos componentes disponíveis, ordenados por temas, e por
tipo de disponibilidade (Free, Trial, Comercial, Demo, etc.).
linha,
escritasendo
logo aa seguir
informaação seguinte
esta.
W r i teL i n e Output Escreve a informação enviada,
mudando de seguida de linha.
WriteBlankLines Output Introduz uma linha vazia.
P r o p r i ed a d e Descriçã o
(ficheiro cpt6-2-1.asp)
<%
Response.Write “processo : Vai ser criada uma linha de texto.<br><br>”
Set ObjectoFicheiro = CreateObject(“Scripting.fileSystemObject”)
Set EscreveTexto = ObjectoFicheiro.CreateTextFile
(Server.MapPath(“ficheiro.txt”),True)
EscreveTexto.WriteLine(“Este linha está no ficheiro de texto...”)
EscreveTexto.Close
Response.Write “processo: Escreveu uma linha de texto.<br><br>”
Response.Write “processo: Vai ler linha de texto.<br><br>”
Set LerTexto = ObjectoFicheiro.OpenTextFile
(Server.MapPath(“ficheiro.txt”),1)
Response.Write “processo: Alinha lidaé: <b>” & LerTexto.Readline & “</b>”
Set LerTexto = nothing
%>
CreateObject(“Scripting.FileSystemObject”) conexão ao
componente. Desta forma ficamos com um
objecto criado com a imagem do mesmo;
CreateTextFile () forma com que se define a criação de um
ficheiro de texto;
EscreveTexto.WriteLine () Escrita de uma linha de texto,
com mudança de linha;
EscreveTexto.Close Fechar o objecto de escrita de texto;
OpenTextFile () Abrir o ficheiro de texto para leitura;
LerTexto.Readline () Ler uma linha do ficheiro de texto;
LerTexto = nothing Limpar o objecto de leitura de texto.
(ficheiro cpt6-2-2.asp)
<%
Sub procura_ficheiro()
Set ProcuraFicheiro =
Server.CreateObject(“Scripting.fileSystemObject”)
If Not ProcuraFicheiro.FileExists(Server.MapPath(“historia.txt”)) then
Set ObjectoFicheiro = CreateObject(“Scripting.fileSystemObject”)
Set EscreveTexto = ObjectoFicheiro.CreateTextFile
(Server.MapPath(“historia.txt”),True)
EscreveTexto.WriteLine(“ERA UMA VEZ............”)
EscreveTexto.Close
end if
End Sub
Sub escrita_de_linha()
Set ObjectoFicheiro = CreateObject(“Scripting.fileSystemObject”)
Set EscreveTexto = ObjectoFicheiro.OpenTextFile
(Server.MapPath(“historia.txt”),8,True)
If len(Request.Form(“linha”))>1 then
EscreveTexto.WriteLine(Request.Form(“linha”))
end if
EscreveTexto.Close
End Sub
Sub leitura_de_ficheiro()
Set ObjectoFicheiro = CreateObject(“Scripting.fileSystemObject”)
Set LerTexto = ObjectoFicheiro.OpenTextFile
(Server.MapPath(“historia.txt”))
While NOT LerTexto.AtEndOfStream
Response.Write “ | “ & LerTexto.ReadLine & “<br>”
Wend
Set LerTexto = nothing
End Sub
Sub formulario()
%>
<br><br><p><FORM action=”cpt6-2-2.asp” method=”POST”>
Novo Parágrafo: <input type=”text” name=”linha” size=”60"
MaxLength=”140"><br>
<input type=”submit” name=”submeter” Value=”Acrescentar”>
</FORM>
</p>
<%
End Sub
162 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
(ficheiro cpt6-2-3.asp )
<%
Set ObjectoFicheiro = CreateObject(“Scripting.fileSystemObject”)
Set LerTexto = ObjectoFicheiro.OpenTextFile
(Server.MapPath(“contador.txt”),1)
Valor = LerTexto.ReadLine
Set LerTexto = nothing
Set EscreveTexto = ObjectoFicheiro.CreateTextFile
(Server.MapPath(“contador.txt”),True)
EscreveTexto.WriteLine(valor+1)
EscreveTexto.Close
Response.Write “Houveram “ & (valor+1) & “ acessos...<br>”
%>
(ficheiro cpt6-3-1.asp)
<%
Set Jmail = Server.CreateObject(“JMail.SMTPMail”)
JMail.ServerAddress = “mail.servidor.pt” ‘ aqui fica o servidor de e-mail
JMail.Sender = “remetente@servidor.pt” ‘ aqui fica o endereço de quem
envia o e-mail
JMail.Subject = “Titulo do E-Mail” ‘ aqui fica o titulo do e-mail / subject
JMail.AddRecipient “receptor@servidor.pt” ‘ endereço para onde
queremos enviar o e-mail
Corpo = “Texto quevai no e-mail...“ & Chr(13) &chr(12) & Chr(13) &chr(12)
corpo = corpo & Chr(13) & chr(12) & “Obrigado”
JMail.Body = corpo ‘ envio do corpo da mensagem
Jmail.Priority = 3 ‘ implementar prioridade 1-mínima 3-máxima
JMail.Execute
%>
CAPÍTULO 6: COMPONENTES 165
(ficheiro cpt6-3-2.asp )
<%
Sub enviar_piada()
Set Jmail = Server.CreateObject(“JMail.SMTPMail”)
Jmail.ServerAddress = “mail.servidor.pt”
Jmail.Sender = “seuemail@seuservidor.pt”
Jmail.Subject = “Aqui estão as piadas”
Jmail.AddRecipient request.form(“email”)
Corpo = “Aqui estão as piadas.doc em attachment. “ & Chr(13) & chr(12)
& Chr(13) & chr(12)
Corpo = corpo & Chr(13) & chr(12) & “Obrigado”
Jmail.Body = corpo
Jmail.AddAttachment “d:/piadas.doc”
Jmail.Priority = 2
Jmail.Execute
%>
166 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
<br><br><br>
<p align=”center”><font face=”Arial”><b>Obrigado...</font><br>
<small>receberá um e-mail meu dentro de momentos</small>
</p>
<%
End Sub
Sub formulario()
%>
<form action=”cpt6-3-2.asp” method=”POST”>
Introduza o e-mail onde quer<br> receber as piadas: <input type=”text”
name=”email”><br>
<input type=”submit” name=”submeter” value=”Quero Receber”>
</form>
<%
End Sub
if Request.Form(“submeter”) = “Quero Receber” then
enviar_piada
else
formulario
end if
%>
Antes de tudo vamos criar uma tabela de dados que julgamos se-
rem válidos para dar hipótese do Livro de Visitas ser configurável
por pessoas estranhas ao código do componente. Digamos que o
utilizador tem de ter a hip ótese de usar um ficheiro com o nome que
quiser para usar o componente, a cor das caixas onde estão as
mensagens, e a cor das letras do site, e das caixas.
msession(“Ficheiro”) = “ficheiro.asp”
CAPÍTULO 6: COMPONENTES 173
Mrequest.form(“email”)
(ficheiro livrovisitas.cls)
Private msc As ScriptingContext
Private mapplication As Application
Private mrequest As Request
Private mresponse As Response
Private mserver As Server
Private msession As Session
Private Conn As Connection
Private RS As Recordset
Public Sub CorLetras(cor As String)
msession(“CorLetras”) = cor
End Sub
</TEXTAREA><br>”
mresponse.Write “<input type=’submit’ value=’Assinar o Livro’>”
mresponse.Write “</form>”
mresponse.Write “</td></tr></table></div>”
End Sub
Ficamos assim com o ficheiro que irá gerir todo o processo do com-
ponente. Tudo se passa como se fosse um ASP excepto as chama-
das dos objectos base das ASP.
(ficheiro cpt6-4-1.asp)
<%
Set lv = Server.CreateObject(“LivroASP.livrovisitas”)
Lv.Ficheiro(“cpt6-4-1.asp”)
lv.CorLetras(“Green”)
lv.CorLetrasCaixas(“#F60000”)
lv.CorCaixas(“#C6C6FF”)
lv.inicio
%>
Server.CreateObject(“NomeProjecto.NomeClasse”)
7.2 A RãM
: otodr e
Busca 18 3
7.3ALoja:LojaE-Commerce 1 97
182 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
7.1 Introdução
Este capítulo foi introduzido neste manual, n ão para mais uma expli-
cação detalhada linha a linha, mas para inspirar o leitor a desenvol-
vimentos mais complexos com as ASP. Vamos apresentar dois
exemplos que decerto incluem respostas para muitos problemas
que lhe são familiares.
O esquema de ambos é muito parecido, ao ponto de serem usados
ficheiros idênticos em ambas as aplicações. Estes exemplos têm
muito em comum, tais como, ficheiros, fun ções, métodos de busca
de dados e muito mais. Mas o mais importante é que ambos usam
apenas um ficheiro ASP e os outros são de apoio para a construção
do primeiro, que é 80% dinâmico. Teremos 3 zonas desse ficheiro, o
topo, o fundo e o centro. O centro é a zona mais dinâmica, onde
vamos escolher consoante a resposta do nosso Querystring ou
formulário, os dados a mostrar no browser.
Versão digi
tal, individual,icenciada
l em Jan
/Fev do ano 2000
, pelo Centro Atlânti
co, da versão 1.0 do
ivrol 'Programaçãoeb
WcomASP'
CAPÍTULO 7: EXEMPLOS REAIS 183
fazer = request.querystring(“fazer”)
<%if fazer=”sim” then%>
<!—#INCLUDE FILE=”certo.inc”—>
<%else%>
<!—#INCLUDE
<%end if%> FILE=”errado.inc”—>
Iremos ter então apenas uma tabela para guardar os dados que
acharmos necessários (claro que o leitor poderá criar uma BD dife-
rente, esta serve apenas de orientação inicial).
Achou-se que para este exemplo a data, o título do site, uma descri-
ção e a morada do próprio seriam suficientes.
Versão digi
tal, individual,icenciada
l em Jan
/Fev do ano 2000
, pelo Centro Atlânti
co, da versão 1.0 do
ivrol 'Programaçãoeb
WcomASP'
CAPÍTULO 7: EXEMPLOS REAIS 185
TABELA: MOTORBUSCA
id_motor Auto-number; o i dentificador do link
url Text(250);o link da página registada
titulo Text(80);ot ítulo da página
descricao Memo; uma breve descri ção do que trata o site
data Date/Time; data em que foi inserido o link no
motor de busca
Podemos então começar a pensar no que vai ser preciso para por o
motor de busca a funcionar, e podemos desde já fazer uma lista de
pontos com a seguinte estrutura:
Ficamos assim com uma ideia dos ficheiros que vão ser usados e
quais as hierarquias envolvidas nos mesmos. Vamos então descre-
ver o que cada ficheiro tem:
Imagens,
C:\Inetpub\wwwroot\livro\motordebusca\imagens\Topo.jpg
ficheiro que representa a imagem de topo do site, incluído no
código HMTL do ficheiro topo.inc
C:\Inetpub\wwwroot\livro\motordebusca\imagens\Bprocurar.gif
ficheiro que representa o botão que se carrega para pesquisarmos
no motor, usado no ficheiro procura.inc
C:\Inetpub\wwwroot\livro\motordebusca\imagens\Bregistar.gif
como o nome indica é o botão para registarmos os sites que
queiram figurar na BD do motor de busca; é chamado no ficheiro
registar.inc
Ficheiros da página,
C:\Inetpub\wwwroot\livro\motordebusca\Default.asp
ficheiro que recebe os argumentos dos formulários ou da linha de
comando do browser, e consoante o recebido consoante o ficheiro
que é demonstrado na zona central da página;
C:\Inetpub\wwwroot\livro\loja\motordebusca\Funcoes.asp
aqui existe uma função que é usada em mais que um ficheiro, cuja
função é validar as plicas usadas nas strings, para que quando
usarmos a BD não apareçam erros, visto que as mesmas são
usadas pela própria BD;
C:\Inetpub\wwwroot\livro\motordebusca\includes\Fundo.inc
ficheiro com o desenho do fundo do site (estático a 100%);
C:\Inetpub\wwwroot\livro\motordebusca\includes\Inicial.inc
esquema inicial, se não existirem argumentos no link, será este
ficheiro a aparecer;
C:\Inetpub\wwwroot\livro\motordebusca\includes\Listagem.inc
depois de submetida a string de procura, aparecem todos os sites
relacionados, e é este ficheiro que o vai fazer;
Versão digi
tal, individual,icenciada
l em Jan
/Fev do ano 2000
, pelo Centro Atlânti
co, da versão 1.0 do
ivrol 'Programaçãoeb
WcomASP'
CAPÍTULO 7: EXEMPLOS REAIS 187
C:\Inetpub\wwwroot\livro\motordebusca\includes\Procura.inc
é simplesmente o formulário onde o utilizador vai inserir a string de
procura;
C:\Inetpub\wwwroot\livro\motordebusca\includes\Registar.inc
este vai ser o ficheiro que tem o formulário de registo de todos os
sites que querem estar indexados no nosso motor de busca;
C:\Inetpub\wwwroot\livro\motordebusca\includes\Topo.inc
HTML com o desenho do topo dosite (também como o fundo, 100%
estático);
C:\Inetpub\wwwroot\livro\livro.mdb
ficheiro de base de dados onde figura a tabela de dados que
usamos neste exemplo.
(ficheiro default.asp)
<!—#INCLUDE FILE=”includes/topo.inc”—>
<div align=”center”>
<table width=”600"><tr>
<td align=”top” width=”600">
<center><font size=”2" face=”Verdana”><a href=”default.asp”>página
inicial</a>
<a href=”default.asp?fazer=registar”>registar site
</a> </font></center>
<%
fazer = Request.QueryString(“fazer”) ‘ vamos buscar o argumento fazer
Select Case fazer ‘ vamos então chamar o ficheiro consoante o
argumento
Case “procura” ‘ se o argumento for procura foi submetida uma busca
‘ e se foi submetida uma busca vamos mostrar o formulário de busca
‘ e incluir a listagem de sites identificados com essa procura
%>
<!—#INCLUDE FILE=”includes/procura.inc”—>
<!—#INCLUDE FILE=”includes/listagem.inc”—>
188 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
<%
Case “registar” ‘ se o argumento for este é porque vai haver um novo
registo
%>
<!—#INCLUDE FILE=”includes/registar.inc”—>
<%
Case Else ‘ se não existir argumento introduzimos a página inicial
%>
<!—#INCLUDE FILE=”includes/procura.inc”—>
<!—#INCLUDE FILE=”includes/inicial.inc”—>
<%
End Select
%>
</td>
</tr></table></div>
<p> </p>
<!—#INCLUDE FILE=”includes/fundo.inc”—>
(ficheiro funcoes.asp)
<%
‘ esta função serve exclusivamente para acrescentar uma plica
‘ por cada uma que existir nas strings a usar em declarações de SQL
Function tira_plicas(texto)
Texto = trim(texto) ‘ desta maneira tiramos os espaços em branco ao
‘ início e fim da string
texto_temp = “” ‘ esta é uma string temporária onde vamos construir
‘ uma string que não tem uma plica sozinha
For i=1 to len(texto) ‘ loop para percorrer a string
if Mid(texto,i,1)=”’” then ‘se achar plica acrescenta mais uma
texto_temp=texto_temp & “‘’”
else
texto_temp=texto_temp & Mid(texto,i,1)
end if
Next
Tira_plicas = texto_temp ‘ ao fazermos esta igualdade estamos
‘ a devolver o resultado desta função ( função corrente = valor )
End Function
%>
(ficheiro topo.inc)
<HMTL>
<HEADER>
<TITLE>A Rã - o novo motor de busca com ASP</TITLE>
</HEADER>
<BODY>
<div align=”center”><table width=”600">
<tr><td>
<img src=”imagens/topo.jpg”>
</td></tr>
</table></div>
(ficheiro fundo.inc)
<div align=”center”><table width=”600">
<tr bgcolor=”#8AC491"><td>
</td></tr>
<tr><td>
<center><font size=”2" face=”ARIAL”>(1999) Portugal, todos os direitos
reservados<br>para IE4+ & NN4+</font></center>
</td></tr>
</table></div>
</BODY>
</HTML>
imeira página
O ficheiro inicial representa tudo aquilo que aparece na pr
aquando da chamada do site. Além de incluirmos o formulário de
pesquisa pertencente ao ficheiro procura.inc, introduzimos também
inicial.inc, que é o que demonstra osúltimos links registados no nosso
site.
(ficheiro inicial.inc)
<br><br>
<p><font size=”2" face=”Verdana”>Use este motor de busca, para adicio-
nar os seus links ou procurar a página que tanto procura.
Não se esqueça de que este serviço é gratuito, por isso pode divulgá-lo
por todos os seus amigos.<br>
Agradeço a sua visita e espero que goste...
</font></p>
<br><font face=”Verdana” color=”blue”>Os últimos links adicionados
foram:</font><br><br>
<%
Set Conn = Server.CreateObject(“ADODB.Connection”)
Conn.open “DSN=livrodsn;”
Set rs = Server.CreateObject(“ADODB.Recordset”)
SQLStmt = “SELECT url, titulo, data, descricao “
SQLStmt = SQLStmt & “FROM motorbusca ORDER BY data DESC”
rs.Open SQLstmt,Conn,1,2
voltas=0 ‘ variável para controlamros o número de registos a mostrar
‘ na primeira página, ou, página inicial
‘ enquanto não forem demonstrados os últimos 5 links o loop executa-se
while NOT rs.EOF and voltas<5
response.write “<p><font size=’2' face=’ARIAL’>”
response.write “> <b><font size=’3'><a href=’”
response.write rs.fields(“url”) & “‘ target=’_blank’>”
response.write rs.fields(“titulo”) & “</a></font></b><br>”
response.write left(rs.fields(“descricao”),400)
Versão digi
tal, individual,icenciada
l em Jan
/Fev do ano 2000
, pelo Centro Atlânti
co, da versão 1.0 do
ivrol 'Programaçãoeb
WcomASP'
CAPÍTULO 7: EXEMPLOS REAIS 191
(ficheiro procura.inc )
<br><div align=”center”>
<table border=”1" cellspacing=”0" cellpadding=”2" width=”400"
bordercolor=”black”><tr bgcolor=”#8AC491"><td>
<FORM action=”default.asp?fazer=procura” method=”POST”>
<font face=”ARIAL” color=”white”> <b>insira a string de procura
</b></font><br>
<input type=”text” name=”textoprocura”
value=”<%=request.form(“textoprocura”)%>” size=”40">
<input type=”image” border=”0" src=”imagens/bprocurar.gif”>
</FORM>
</td></tr></table></div>
(ficheiro listagem.inc )
<!—#INCLUDE FILE=”funcoes.asp”—><br><font face=”Verdana”
color=”blue”>
Resultado da
procura__________________________________________
</font><br><br>
<%
‘ usamos aqui então a função que está em funcoes.asp para
tirar as plicas
‘ da string que vem do formulário de procura
stringprocura = tira_plicas(request.form(“textoprocura”))
‘ depois da plica retirada fazemos então a declaração de SQL
para procurarmos
‘ a mesma no campo descricao
SQLStmt = “SELECT url, titulo, data, descricao FROM
motorbusca “
SQLStmt = SQLStmt & “ WHERE descricao LIKE
‘%”&stringprocura&”%’”
Set rs = Server.CreateObject(
SQLStmt = SQLStmt & “ ORDER“ADODB.Recordset
BY data DESC ””)
rs.Open SQLstmt,Conn,1,2
if rs.eof then ‘ se chegarmos ao final da BD então nada existe
response.write “<p> </p>”
response.write “<br><br><font face=’Verdana’ size=’2'
color=’blue’><b>”
response.write “Não foram encontrados registos...</b>
</font><br>”
response.write“<p> </p><p> </p><p> </p> ”
end if
while NOT rs.EOF ‘ seja como for, se existir, vamos mostrar
response.write “<p><font size=’2' face=’ARIAL’>”
response.write “> <b><font size=’3'><a href=’” & rs.fields(“url”)
response.write “‘ target=’_blank’>” & rs.fields(“titulo”) & “</a>
</font></b><br> ”
response.write left(rs.fields( “descricao”),400)
response.write “<br><small>submetido em “ & rs.fields(“data”)
response.write “ com o URL <a href=’” & rs.fields(“url”) & “‘
target=’_blank’>”
response.write rs.fields( “url”) & “</a></small><br>”
response.write “</font></p>”
rs.movenext
wend
rs.close
Versão digi
%>
tal, individual,icenciada
l em Jan
/Fev do ano 2000
, pelo Centro Atlânti
co, da versão 1.0 do
ivrol 'Programaçãoeb
WcomASP'
CAPÍTULO 7: EXEMPLOS REAIS 193
(ficheiro registar.inc)
<%
‘ esta primeira função vai ver se o site que queremos registar já existe
Function procura_repetido( link )
SQLStmt = “SELECT url FROM MOTORBUSCA WHERE
url = ‘“&link&”’”
rs.Open SQLstmt,Conn,1,2
if rs.eof then ‘ se não existir esse link
rs.close
procura_repetido = 0 ‘ a função devolve o número 0
else ‘ caso contrário
rs.close
procura_repetido = 1 ‘ a função acha e devolve 1
end if
End Function
<br><br>
<div align=”center”>
<table border=”1" cellspacing=”0" cellpadding=”2" width=”400"
bordercolor=”black”><tr bgcolor=”#8AC491"><td>
<FORM action=”default.asp?fazer=registar&como=fazer” method=”POST”>
<font face=”ARIAL” color=”white”> <b>Insira o URL do site que quer
registar</b></font><br>
<input type=”text” name=”urlsite” value=”http://” size=”52"><br>
<font face=”ARIAL” color=”white”> <b>título do site</b></font>
<input type=”text” name=”titulo” size=”30"><br>
<font face=”ARIAL” color=”white”> <b>breve descrição
</b></font>
<br><textarea name=”descricao” cols=44 rows=3></textarea><br><br>
<center><input type=”image” border=”0" src=”imagens/bregistar.gif”>
</center>
</FORM>
</td></tr></table></div>
<%End Sub
Versão digi
tal, individual,icenciada
l em Jan
/Fev do ano 2000
, pelo Centro Atlânti
co, da versão 1.0 do
ivrol 'Programaçãoeb
WcomASP'
CAPÍTULO 7: EXEMPLOS REAIS 195
if OK=1 then ‘ se OK=1 então não houve erros, vamos introduzir os dados
em BD
SQLStmt = “INSERT INTO MOTORBUSCA (url, titulo, descricao, data)
VALUES”
SQLStmt = SQLStmt & “(‘“&urlsite&”’, ‘“&titulo&”’,”
SQLStmt = SQLStmt & “ ‘“&descricao&”’, ‘“&now()&”’)”
rs.Open SQLstmt,Conn,1,2
response.write “<p><br><br><font face=’Verdana’ color=’blue’>”
response.write“O site “ & request.form(“urlsite”)& “ foi registado...</font></p>”
else ‘ no caso de haverem erros, voltamos a introduzir o formulário para
preencher
formulario_registo()
end if
End Sub%>
<%
Set Conn = Server.CreateObject(“ADODB.Connection”)
Conn.open “DSN=livrodsn;”
Set rs = Server.CreateObject(“ADODB.Recordset”)
‘ o nosso argumento é como, e se for fazer vamos introduzir um registo
If request.querystring(“como”)=”fazer” then
Introduzir_registo()
Else ‘ se não for introduzir vamos pedir os dados mostrando o formulário
Formulario_registo()
end if
%>
196 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
Versão digi
tal, individual,icenciada
l em Jan
/Fev do ano 2000
, pelo Centro Atlânti
co, da versão 1.0 do
ivrol 'Programaçãoeb
WcomASP'
CAPÍTULO 7: EXEMPLOS REAIS 197
TABELA: PRODUTOS
TABELA: ENCOMENDAS
TABELA: PROD_ENCOMENDAS
Versão digi
tal, individual,icenciada
l em Jan
/Fev do ano 2000
, pelo Centro Atlânti
co, da versão 1.0 do
ivrol 'Programaçãoeb
WcomASP'
CAPÍTULO 7: EXEMPLOS REAIS 199
Imagens,
Topo.jpg
ficheiro que representa a imagem de topo do site; incluído no código
HMTL do ficheiro topo.inc, tal como no motor de busca, claro que
com a particularidade de ser uma imagem diferente;
Bprocurar.gif
ficheiro que representa o botão que se carrega para fazermos pro-
cura de um livro; é usado no ficheiro topo.inc
Brecalcular.gif
é o botão que refaz os cálculos no nosso carrinho de compras de-
pois de introduzido novo produto, ou de termos alterada alguma quan-
tidade; é chamado no ficheiro carrinhor.inc
Bfinalizar.gif
ficheiro que representa o botão que se carrega para finalizarmos
uma compra online; usado no ficheiro pagar.inc
Versão digi
tal, individual,icenciada
l em Jan
/Fev do ano 2000
, pelo Centro Atlânti
co, da versão 1.0 do
ivrol 'Programaçãoeb
WcomASP'
CAPÍTULO 7: EXEMPLOS REAIS 201
Bpagar.gif
ficheiro que representa o botão que se carrega para passarmos à
fase de finalização de pagamento de uma nova encomenda; usado
no ficheiro carrinho.inc
Carrinho.gif
como se pode prever é o desenho do carrinho de compras, que
depois de carregado faz-nos aceder à zona de produtos já escolhi-
dos; é chamado no ficheiro topo.inc
Casa.gif
é o ficheiro que nos encaminha para a página inicial; é chamado no
ficheiro topo.inc
Pagar.gif
faz a chamada da zona onde se vãoi introduzir os dados pessoais
para finalização da compra; é chamado no ficheiro topo.inc
Ficheiros da página,
C:\Inetpub\wwwroot\livro\loja\Default.asp
ficheiro que recebe os argumentos dos formulários ou do campo de
endereço do browser, e consoante o recebido consoante o ficheiro
que é demonstrado na zona central da página;
C:\Inetpub\wwwroot\livro\loja\loja\Funcoes.asp
aqui existe uma função que é usada em mais que um ficheiro, que
tal e qual a do motor de busca é usada para validar as plicas usadas
nas strings, para que quando usarmos a BD não apareçam erros,
visto que as mesmas são usadas pela própria BD. Este código é
idêntico ao do motor de busca;
C:\Inetpub\wwwroot\livro\loja\includes\Fundo.inc
ficheiro com o desenho do fundo do site (estático a 100%);
C:\Inetpub\wwwroot\livro\loja\includes\Inicial.inc
esquema inicial. Se não existirem argumentos no link, será este fi-
cheiro a aparecer;
C:\Inetpub\wwwroot\livro\motordebusca\includes\Listagem.inc
depois de submetida a string de procura, aparecem todos os sites
relacionados, e é este ficheiro que o vai fazer;
202 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
C:\Inetpub\wwwroot\livro\loja\includes\Topo.inc
HTML com o desenho do topo do site (também como o fundo, 100%
estático);
C:\Inetpub\wwwroot\livro\loja\includes\Pagar.inc
local onde são feitos os pagamentos, aquilo a que podemos chamar
de ‘check-out‘;
C:\Inetpub\wwwroot\livro\livro.mdb
ficheiro de base de dados onde figura a tabela de dados que usa-
mos neste exemplo.
(ficheiro global.asa)
<SCRIPT LANGUAGE=”VBScript” RUNAT=”Server”>
Sub Application_OnStart
Session.Timeout = 3
Application.Lock
Application(“utilizadores”) = 0
Application.UnLock
Application(“linha1”)=””
Application(“linha2”)=””
Versão digi
tal, individual,icenciada
l em Jan
/Fev do ano 2000
, pelo Centro Atlânti
co, da versão 1.0 do
ivrol 'Programaçãoeb
WcomASP'
CAPÍTULO 7: EXEMPLOS REAIS 203
Application(“linha3”)=””
Application(“linha4”)=””
Application(“linha5”)=””
Application(“linha6”)=””
Application(“linha7”)=””
Application(“linha8”)=””
Application(“linha9”)=””
Application(“linha10”)=””
Application(“linha11”)=””
Application(“linha12”)=””
Application(“linha13”)=””
Application(“linha14”)=””
Application(“linha15”)=””
Application(“linha16”)=””
Application(“linha17”)=””
Application(“linha18”)=””
End Sub
Sub Session_OnStart
Application.Lock
Application(“utilizadores”) = Application(“utilizadores”) + 1
Application.UnLock
‘DADOS PARA A LOJA
Dim prod utos _id(0), prod uto s_quantid ade(0)
produtos_id(0) = 0 ‘ array de produtos no carrinho de compras
produtos_quantidade(0) = 0 ‘ array com as respectivas quantidades
‘ vamos então introduzir esta informação para as sessões
‘ desta maneira cada sessão terá o seu carrinho e não
‘ existirão confusões entre clientes. São inicializados vazios
session(“m atriz_produtos”) = pr odutos_id
sessi on(“matriz_quanti dade”) = prod utos _quantidade
‘FORAM DADOS PARA A LOJA
End Sub
Sub Session_OnEnd
Application.Lock
Application(“utilizadores”) = Application(“utilizadores”) – 1
Application.UnLock
End Sub
Sub Application_OnEnd
End Sub
</SCRIPT>
204 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
(ficheiro default.asp)
<!—#INCLUDE FILE=”includes/topo.inc”—>
<div align=”center”>
<table width=”600"><tr>
<td align=”top” width=”600">
<%
‘ o sistema de busca dos argumentos é idêntico ao do motor de busca
fazer = Request.QueryString(“fazer”)
Select Case fazer
Case “carrinho” ‘ se for escolhido o carrinho vamos mostrar o carrinho
%>
<!—#INCLUDE FILE=”includes/carrinho.inc”—>
<% Case “pagar” ‘ neste caso o utilizador vai pagar o escolhido %>
<!—#INCLUDE FILE=”includes/pagar.inc”—>
<%
Case “procura” ‘ se houver procura vai-se mostrar a listagem de
resultados
%>
<!—#INCLUDE FILE=”includes/listagem.inc”—>
<%
Case Else ‘ se o argumento não existir mostramos a página inicial
%>
<!—#INCLUDE FILE=”includes/inicial.inc”—>
<%
End Select
%>
</td>
</tr></table></div>
<p> </p>
<!—#INCLUDE FILE=”includes/fundo.inc”—>
Versão digi
tal, individual,icenciada
l em Jan
/Fev do ano 2000
, pelo Centro Atlânti
co, da versão 1.0 do
ivrol 'Programaçãoeb
WcomASP'
CAPÍTULO 7: EXEMPLOS REAIS 205
(ficheiro funcoes.asp)
<%
Function tira_plicas(texto)
texto = trim(texto)
texto_temp = “”
For i=1 to len(texto)
if Mid(texto,i,1)=”’” then
texto_temp=texto_temp & “‘’”
else
texto_temp=texto_temp & Mid(texto,i,1)
end if
Next
tira_plicas = texto_temp
End Function
%>
(ficheiro topo.inc)
<HMTL>
<HEADER>
<TITLE>A Loja - a nova loja on-line feita com ASP</TITLE>
</HEADER>
<BODY>
<div align=”center”><table width=”600">
<tr><td>
<img src=”imagens/topo.jpg”>
</td></tr>
<tr><td>
<center>
<FORM action=”default.asp?fazer=procura” method=”POST”>
<table width=”400" cellpadding=”0" cellspacing=”0" border=”0"><tr>
<td valign=”top”>
<font size=”2" face=”Verdana”><a href=”default.asp”>
<img border=”0" alt=”Voltar à página inicial” src=”imagens/casa.jpg”>
</a> </td>
<td valign=”top”><font size=”2" face=”Verdana”>
<a href=”default.asp?fazer=carrinho”>
<img border=”0" alt=”Ver carrinho de compras”
src=”imagens/carrinho.jpg”></a> </td>
<td valign=”top”><font size=”2" face=”Verdana”>
<a href=”default.asp?fazer=pagar”>
206 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
Versão digi
tal, individual,icenciada
l em Jan
/Fev do ano 2000
, pelo Centro Atlânti
co, da versão 1.0 do
ivrol 'Programaçãoeb
WcomASP'
CAPÍTULO 7: EXEMPLOS REAIS 207
(ficheiro fundo.inc)
(ficheiro inicial.inc)
<br><br>
<p><b><font size=”2" face=”Verdana”>Use esta loja online, para procurar
e comprar o livro que tanto procura.
Não se esqueça de que este serviço é gratuito, por isso pode divulgar por
todos os seus amigos.<br>
Agradeço a sua visita e espero que goste...
</font></b></p>
<br><font face=”Verdana” color=”blue”>A mais recente novidade:
</font><br><br>
<%
Set Conn = Server.CreateObject(“ADODB.Connection”)
Conn.open “DSN=livrodsn;”
Set rs = Server.CreateObject(“ADODB.Recordset”)
SQLStmt = “SELECT id_produto, titulo, introducao, autor, preco “
SQLStmt = SQLStmt & “FROM produtos ORDER BY id_produto ASC”
rs.Open SQLstmt,Conn,1,2 ‘ foi executada a procura
rs.movelast ‘ vamos mover o cursor para a última posição
response.write “<p><font size=’3' face=’ARIAL’><b>”
208 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
(ficheiro listagem.inc)
<!—#INCLUDE FILE=”funcoes.asp”—><br><font face=”Verdana”
color=”blue”>
Resultado da
procura__________________________________________
</font><br><br>
<% Set Conn = Server.CreateObject(“ADODB.Connection”)
Conn.open “DSN=livrodsn;”
Set rs = Server.CreateObject(“ADODB.Recordset”)
stringprocura = tira_plicas(request.form(“textoprocura”))
SQLStmt = “SELECT id_produto, titulo, introducao, autor, isbn,” SQLStmt
= SQLStmt & “ mes_edicao, ano_edicao, n_paginas, preco FROM
produtos “
SQLStmt = SQLStmt & “ WHERE “ & request.form(“tipoprocura”)
SQLStmt = SQLStmt & “ LIKE ‘%” & stringprocura & “%’” ‘ da maneira
feita anteriormente é facultado pelo formulário de procura
‘ não só a string, mas o campo da BD que vai ser pesquisado
Versão digi
tal, individual,icenciada
l em Jan
/Fev do ano 2000
, pelo Centro Atlânti
co, da versão 1.0 do
ivrol 'Programaçãoeb
WcomASP'
CAPÍTULO 7: EXEMPLOS REAIS 209
response.write left(rs.fields(“introducao”),400)
response.write “...<br><b>( edição de
“&rs.fields(“mes_edicao”)&”/”
response.write rs.fields(“ano_edicao”)&” )</b></font>”
response.write “ <small>livro com “
& rs.fields(“n_paginas”)
response.write “ páginas.</small><p>”
response.write “[
<a href=’default.asp?fazer=carrinho&como=adicionar&qual=”
response.write rs.fields(“id_produto”)&”’>”
response.write “<font size=’2' face=’Verdana’>adicionar ao”
response.write “carrinho</a></font> ]</p>”
response.write “</td><td valign=’top’>”
response.write “<img width=’93' heigth=’103' border=’0' ”
response.write
“src=’imagens/produtos/lv”&rs.fields(“id_produto”)&”.gif’>”
response.write “<br><center><small><b>”
& formatcurrency(rs.fields(“preco”))
response.write “</b></small></center>”
conta = 0
end if
response.write “</td></tr></table>”
rs.movenext ‘ move-se para os dados seguintes
wend
rs.close
%>
Versão digi
tal, individual,icenciada
l em Jan
/Fev do ano 2000
, pelo Centro Atlânti
co, da versão 1.0 do
ivrol 'Programaçãoeb
WcomASP'
CAPÍTULO 7: EXEMPLOS REAIS 211
(ficheiro carrinho.inc)
<% ‘ este procedimento faz com que vejamos os dados que estão em
carrinho
Sub ver_carrinho()
Produtos_info = session(“matriz_produtos”) ‘ vamos buscar os dados
dos produtos
Quantidade_info = session(“matriz_quantidade”) ‘ e respectivas
quantidades
produtos_num = ubound(produtos_info) ‘ tirar o número de produtos
em carrinho
if produtos_num <1 then ‘ se forem menos de 1 então está vazio
response.write “<p> </p><p> </p><p><center>”
response.write “<font size=’4' color=’red’>o carrinho ainda está
vazio..</font>”
response.write “</center></p><p> </p><p> </p>”
exit sub ‘ saimos forçosamente do procedimento
end if
num_produtos = 0
‘ vamos construir a tabela
response.write “<div align=’center’>”
response.write “<table width=’600' border=’1' ”
response.write “ bordercolor=’#409AC9' cellspacing=’0'><tr>”
response.write “<td width=’20'>”
response.write “Qt.”
response.write “</td>”
response.write “<td>”
response.write “ISBN”
response.write “</td>”
response.write “<td>”
response.write “Titulo da Obra”
response.write “</td>”
response.write “<td>”
response.write “Preço”
response.write “</td>”
response.write “<td>”
response.write “Total”
response.write “</td></tr>”
response.write “<form action=’default.asp?fazer=carrinho&”
response.write “como=calcula’ method=’POST’>”
total_preco = 0 ‘ variável que vai calcular o preço total da encomenda
total_produtos = 0 ‘ vai calcular o número total de produtos
‘ não podemos usar o produtos_num pois este diz quantos
‘ produtos diferentes e não quantos produtos (quantidade)
for i=1 to produtos_num
SQLStmt = “SELECT id_produto, isbn, titulo, preco FROM produtos”
212 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
response.write “</td>”
response.write “<td>”
‘ guardar na sessão valor_t, o valor total a pagar pelo cliente
session(“valor_t”) = session(“valor_d”) + total_preco
response.write formatCurrency( session(“valor_t”) )
response.write “</td>”
response.write “</tr></table></p>”
response.write “<p><input type=’image’ border=’0' src=’imagens/
brecalcular.jpg’>”
response.write “<a href=’default.asp?fazer=pagar’>”
response.write “<img border=’0' src=’imagens/bpagar.jpg’></a>”
response.write “</p></form></div>”
End Sub
produtos_info(j) = produtos_info(j+1)
214 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES
next
passou = 1
end If
‘ como vai ser alterado o tamanho do array o mesmo tem de usar redim
‘ para ser redimencionado
redim Preserve produtos_info(produtos_num-1)
redim Preserve quantidade_info(produtos_num-1)
produtos_num = ubound(produtos_info)
end if
i =i +1
wend
‘ no final actualizamos as sessões
session(“matriz_produtos”) = produtos_info
session(“matriz_quantidade”) = quantidade_info
End Sub
como = Request.QueryString(“como”)
Select Case como
Case “adicionar”
voltar()
adicionar(request.querystring(“qual”))
ver_carrinho()
Case “calcula”
calcula()
ver_carrinho()
Case Else
ver_carrinho()
End Select
%>
(ficheiro pagar.inc)
<%
‘ este procedimento vai introduzir o formulário que pede os dados pessoais
‘ do cliente, para que o pagamento total seja efectuado
Sub formulario()
‘ Vamos buscar os dados para vermos se existem produtos no carrinho
produtos_info = session(“matriz_produtos”)
produtos_num = ubound(produtos_info)
if produtos_num <1 then ‘ se não existirem produtos não se poderá
‘efectuar nenhum tipo de pagamento
response.write “<p> </p><p> </p><p><center>”
response.write “<font size=’4' color=’red’>o carrinho ainda está
vazio..</font>”
response.write “</center></p><p> </p><p> </p>”
exit sub
end if
%>
<div align=’center’>
<form action=’default.asp?fazer=pagar&como=efectuar’
method=’POST’>
<input type=’hidden’ name=’total_valor’
value=’<%=session(“valor_t”)%>’>
<font face=’ARIAL’ size=’3'>Total a Pagar: <b>
<%=formatCurrency( session(“valor_t”))%> </b></font></p>
<table width=’500' border=’1' bordercolor=’#409AC9'
cellspacing=’0'><tr><td><table>
<tr><td bgcolor=’#409AC9'><font face=’arial’ color=’white’
size=’2'><b>Dados Pessoais </b></font></td>
Versão digi
tal, individual,icenciada
l em Jan
/Fev do ano 2000
, pelo Centro Atlânti
co, da versão 1.0 do
ivrol 'Programaçãoeb
WcomASP'
CAPÍTULO 7: EXEMPLOS REAIS 217
<td></td></tr>
<tr><td width=’150'><fontface=’arial’ size=’2'><b>Nome:</b></font></td>
<td><input type=’text’ name=’nome’
value=’<%=request.form(“nome”)%>’ size=’40'></td></tr>
<tr><td><font face=’arial’ size=’2'><b>Morada: </b></font></td>
<td><TEXTAREA name=’morada’ cols=’38'
rows=’2'><%=request.form(“morada”)%></TEXTAREA></td></tr>
<tr><td><font face=’arial’ size=’2'><b>Código Postal: </b></font></td>
<td><input type=’text’ name=’cp’ value=’<%=request.form(“cp”)%>’
size=’20'></td></tr>
<tr><td><font face=’arial’ size=’2'><b>Localidade: </b></font></td>
<td><input type=’text’ name=’localidade’
value=’<%=request.form(“localidade”)%>’ size=’38'></td></tr>
<tr><td><font face=’arial’ size=’2'><b>Telefone: </b></font></td>
<td><input type=’text’ name=’telefone’
value=’<%=request.form(“telefone”)%>’ size=’10'></td></tr>
<tr><td><font face=’arial’ size=’2'><b>E-Mail: </b></font></td>
<td><input type=’text’ name=’email’
value=’<%=request.form(“email”)%>’ size=’30'></td></tr>
<tr><td bgcolor=’#409AC9'><font face=’arial’ color=’white’
size=’2'><b>Dados do Cartão VISA </b></font></td>
<td></td></tr>
<tr><td><font face=’arial’ size=’2'><b>Nome em Visa: </b></font></td>
<td><input type=’text’ name=’nome_visa’
value=’<%=request.form(“nome_visa”)%>’ size=’26'></td></tr>
<tr><td><font face=’arial’ size=’2'><b>Numero em Visa: </b></font></td>
<td><input type=’text’ name=’numero_visa’
value=’<%=request.form(“numero_visa”)%>’ size=’18'></td></tr>
<tr><td><font face=’arial’ size=’2'><b>Validade do Visa: </b></font></td>
<td><input type=’text’ name=’data_visa’
value=’<%=request.form(“data_visa”)%>’ size=’5'> (MM/AA)
</td></tr>
</table></td></tr></table>
<p><input type=’image’ border=’0' src=’imagens/bfinalizar.jpg’>
</p></form></div>
<%End Sub
end if
if len(request.form(“morada”))<10 or len(request.form(“morada”))>180
then
response.write “<font face=’arial’ color=’red’> ”
response.write “ a morada não é válida</font><br>”
OK = 0
End if
if len(request.form(“cp”))<4 or len(request.form(“cp”))>9 then
response.write “<font face=’arial’ color=’red’> “
response.write “o Código Postal não é válido</font><br>”
OK = 0
end if
if len(request.form(“localidade”))<3 or len(request.form(“localidade”))>40
then
response.write “<font face=’arial’ color=’red’> ”
response.write “ a Localidade não é válida</font><br>”
OK = 0
end if
if len(request.form(“telefone”))<9 or len(request.form(“telefone”))>10 then
response.write “<font face=’arial’ color=’red’> ”
response.write “ o Telefone não é válido</font><br>”
OK = 0
end if
if len(request.form(“numero_visa”))<>16 then
response.write “<font face=’arial’ color=’red’> ”
response.write “ o número do Visa está incorrecto</font><br>”
OK = 0
End if
if len(request.form(“nome_visa”))<3 or len(request.form(“nome_visa”))>20
then
response.write “<font face=’arial’ color=’red’> o nome do
utilizador do Visa não foi aceite</font><br>”
OK = 0
End if
if len(request.form(“data_visa”))<>5 then
response.write “<font face=’arial’ color=’red’> ”
response.write “ A data do Visa não está correcta</font><br>”
OK = 0
End if
Validar=OK
End Function
‘ depois de tudo validado é executado o seguinte procedimento
Sub efectuar()
SQLStmt = “INSERT INTO ENCOMENDAS (data, nome, morada, cp, “
SQLStmt = SQLSmt & “localidade, telefone,”
Versão digi
tal, individual,icenciada
l em Jan
/Fev do ano 2000
, pelo Centro Atlânti
co, da versão 1.0 do
ivrol 'Programaçãoeb
WcomASP'
CAPÍTULO 7: EXEMPLOS REAIS 219
Versão digi
tal, individual,icenciada
l em Jan
/Fev do ano 2000
, pelo Centro Atlânti
co, da versão 1.0 do
ivrol 'Programaçãoeb
WcomASP'
CAPÍTULO 7: EXEMPLOS REAIS 221
C
O ol
s ecçã
temasodeSocieda
fundo de daInfor
da Sociedad emação
da
Inf orma ção apresentados p elo s ma io res
especiali sta s na ciona is
Colecçã
o Tecnologias
Tod as as tecnol og ia s de desta que da
Int ernet tr ata das pela equip e de t é
cni cos
do Centro Atlâ ntico
Colecçã
o Direito da
s Novas Tecnologias
A nova ec onomia , depend ente da s tecnolog ias
da informa ção, traz consig o novos desaf ios e
amea ças.
Q uai s as respostas do s nossos Jurista s, trib una is,
compêndios e legislação?
Colecçã
o Desafios
O que no s reservam os temp os que se ap roxima m
em que as novas tecnolog ia s invertem muitas da s
certezas ad quirid as
Colecçã
o Sol
uçõe
s
Soluções práticas para resolver novas
questões levan ta da s pelas tecnolo gi as
da socied ade da informação
Para
Pa ra encom
encom endar qualquer
qualqu ert tít
ítulo do Cent ro A t lânt ico q ueira preencher est a
f olha de encom enda e e nv iá-la por f ax ou c orreio com o seu pagament o.
* Inclui CD-ROM
TOTAL = ________
Sem Despesas de envio
As encomendas directas ao Centro Atl ântico não pagam custos de portes.
SIM, desejo receber os títulos que assinalei sem qualquer despesa de envio.
• Junto envio cheque/Vale nº ____________ à ordem do Centro Atlântico
• Prefiro que debitem no meu cartão de crédito emitido em nome de
_______________________________
Número do cartão de crédito _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Validade _ _ / _ _
Nome ___________________________________________
Morada ____ _______ _______ ____ _______ ____ _______ ___
CP ________ Localidade ______________________
Tel ________________ Fax ____________________
Caso alguns dos títulos não estejam disponíveis enviaremos os que existirem em
stock e pediremos confirmação no futuro para envio dos títulos em falta.
Centro Atlântico - Av. D. Afonso Henriques, 1462 - 4450 Matosinhos
Fax. 21 - 321 01 85 ou 22 - 938 56 30