Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de...

225
Centro Atlântico Programação Web com ASP - Active Server Pages

Transcript of Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de...

Page 1: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

Centro Atlântico

Programação Web com

ASP - Active Server Pages

Page 2: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro
Page 3: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

João VieiraCentro Atlântico

Programação Web comASP - Active Server Pages

Edições Centro AtlânticoPortugal/2000

Page 4: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

Reservados todos os direitos por Centro Atlântico, Lda.Qualquer reprodução, incluindo fotocópia, só pode ser feitacom autorização expressa dos editores da obra.

Programação Web com Active Server PagesColecção: TecnologiasAutor: João VieiraDirecção gráfica: Centro AtlânticoCapa: Paulo Buchinho

© Centro Atlântico, Lda., 2000Av. D. Afonso Henriques, 1462 - 4450 MatosinhosTel. 22 - 938 56 28/9 Fax. 22 - 938 56 30Rua da Misericórdia, 76 - 1200 LisboaTel. 21 - 321 01 95 Fax 21 - 321 01 [email protected]

Fotolitos: Centro AtlânticoImpressão e acabamento: Rolo & Filhos1ª edição: Janeiro de 2000

ISBN: 972-8426-21-6Depósito legal: 146.485/00

Marcas registadas: todos os termos mencionados neste livro conhecidos como sendo marcasregistadas de produtos e serviços, foram apropriadamente capitalizados. A utilização de umtermo neste livro não deve ser encarada como afectando a validade de alguma marca registadade produto ou serviço.O Editor e os Autores não se responsabilizam por possíveis danos morais ou físicos causadospelas instruções contidas no livro nem por endereços Internet que não correspondam às Home-Pages pretendidas.

Page 5: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

Dedico este livro aos meus pais,

Maria de Jesus S. R. Sousa Vieira,António Tiago Vieira

Page 6: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro
Page 7: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

Índice1. Introdução às Active Server Pages

1.1 Do Autor 121.2 Requisitos para as ASP 131.3 ASP vs. JavaScript / VBScript 151.4 Instalar o servidor de Internet 161.5 Programar com ficheiros ASP e HTML 191.6 Conhecer o HTML (Hyper Text Markup Language) em 12 passos 191.7 Sites com recursos de ASP 23

2. Expressões e Operadores2.1 Os primeiros passos

2.1.1 Exemplo: ‘Olá Portugal’ 282.1.2 Exemplo: ‘Olá Portugal’ com variável 282.1.3 Exemplo: Cálculo de variáveis 292.1.4 Exemplo: Código ASP embebido em HMTL 29

2.2 IF, THEN, ELSE, END IF…2.2.1 Exemplo: Comparação entre variáveis 30

2.3 FOR, WHILE, CASE…2.3.1 Exemplo: Comparação de variáveis com ciclos 322.3.2 Exemplo: Select Case 332.3.3 Exemplo: Contadores ASP embebidos em HMTL 332.3.4 Exemplo: HMTL embebido em contadores ASP 34

2.4 Variáveis 35

2.5 Tabela de Operadores2.5.1 Exemplo: Comparação de variável entre valores 37

2.5.2 Exemplo: Utilização de todos os operadores 38

Centro Atlântico
Versão individual licenciada para: Nuno Gonçalves
Page 8: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

3. Funções3.1 Tabela de funções base das ASP 40

3.2 As nossas funções3.2.1 Exemplo: Nº dias até o ano 2001 483.2.2 Exemplo: Validar o e-mail 503.2.3 Exemplo: Criar uma ComboBox a partir de um array 523.2.4 Exemplo: Criar um gráfico em HTML a partir de um array 53

3.3 Uso de SSI (Server Side Includes) com as nossas funções3.3.1 Exemplo: Uso de um ficheiro externo com SSI 563.3.2 Exemplo: Ficheiro com todas as funções 57

3.3.3 Exemplo: ASP que usa o ficheiro com todas as funções 58

4. Objectos4.1 Tabela de Objectos 62

4.2 Variáveis globais e de sessão 65

4.3 Interagir com o utilizador4.3.1 Exemplo: Responder ao utilizador com os dados recolhidos 724.3.2 Exemplo: Validar formulário 734.3.3 Exemplo: Curso online 814.3.4 Exemplo: Protecção de páginas com password 88

4.4 Ficheiro global.asa4.4.1 Exemplo: Quantos utilizadores estão a visitar a página 1004.4.2 Exemplo: Chat em Browser 102

4.5 Cookies, dados do utilizador e do servidor4.5.1 Exemplo: Recolher dados do utilizador 1054.5.2 Exemplo: Páginas personalizadas 107

4.6 Formatação de strings 108

Page 9: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

5. Bases de dados5.1 Bases de Dados / SQL 114

5.2 Construir uma base de dados em Microsoft Access 117

5.3 Conexão à base de dados 122

5.4 Inserir, apagar e actualizar dados em bases de dados5.4.1 Exemplo: Inserir dados 1275.4.2 Exemplo: Eliminar dados 135

5.4.3 Exemplo: Actualizar dados 137

5.5 Apresentação de dados5.5.1 Exemplo: Listar dados em tabela 1425.5.2 Exemplo: Listar dados com imagens 1445.5.3 Exemplo: Listar dados a pedido 146

5.6 Exemplos com bases de dados5.6.1 Exemplo: Livro de Visitas 148

5.6.2 Exemplo: Sondagens de opinião 152

6. Componentes6.1 Introdução aos Componentes 156

6.2 Tratamento de ficheiros de texto com o TextStream6.2.1 Exemplo: História sem fim 1596.2.2 Exemplo: Contador de acessos 163

6.3 Componentes de e-mail6.3.1 Exemplo: Envio de e-mail com attachment 164

6.4 Criar componentes em Visual Basic 66.4.1 Exemplo: Componente Livro de Visitas 173

7. Exemplos reais7.1 Introdução 1827.2 A Rã: Motor de Busca 1837.3 A Loja: Loja E-Commerce 197

Page 10: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

Rece

Re

PPPPPeça gratuitamente o seu eça gratuitamente o seu eça gratuitamente o seu eça gratuitamente o seu eça gratuitamente o seu e-booke-booke-booke-booke-book

Receba gratuitamente, por e-mail, a versãodigital (e-book) deste livro, para poder utilizar

todos os programas sem ter que os re-escrever.Para tal, envie a cópia da factura deste livro

para o Centro Atlântico, para o [email protected] ou por correio para,

Centro AtlânticoAp. 413

4760 V. N. Famalicão

Page 11: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

11Introduçãoàs Active ServerPages

1.1 Do Autor 12

1.2 Requisitos para as ASP 13

1.3 ASP vs. JavaScript / VBScript 15

1.4 Instalar o servidor de Internet 16

1.5 Programar com ficheiros ASP e HTML 19

1.6 Conhecer o HTML (Hyper Text Markup

Language) em 12 passos 19

1.7 Sites com recursos de ASP 23

Page 12: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES12

Versão digital, individual, licenciada em Fev/2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'

1.1 Do AutorEscrevi este livro, acima de tudo, para dar algum apoio a todosaqueles que querem iniciar-se neste tema de programação Internetdo lado do servidor. Quando comecei a pesquisar estes assuntos,há alguns anos, a realidade era muito diferente para conseguirprogramar neste tipo de sistemas. Seria necessário um servidor (comcertos requisitos), e conhecimentos bastante mais avançados deprogramação. A definição de páginas dinâmicas na altura, consistiana existência de ficheiros executáveis do lado do servidor que criavampáginas HTML consoante o que o utilizador procurava, e que limitavabastante os tipos de pesquisa. Quando o Perl (para programaçãode páginas dinâmicas) apareceu, o panorama mudou, e as facilidadesdeste tipo de programação começavam. Mesmo assim, a Microsoftapareceu com os IDC (Internet Database Connector), que apesarde serem de mais fácil compreensão não eram tão potentes a nívelde desenvolvimento.

Mais tarde, apareceram as ASP, que deram uma grande (e boa)viragem na programação do lado do servidor. O programadorcomeçava a ter uma linguagem potente e flexível onde podiadesenvolver o mais variado tipo de serviços e de soluções.

Quando comecei a trabalhar nesta linguagem estava-se a fazer atransição do sistema IDC para as ASP. As facilidades das mesmasderam-me hipótese de as poder experimentar onde quer que fosse.Mesmo assim, os recursos a nível de manuais e páginas Interneteram poucos, e tive bastantes dificuldades em me desenvolver nes-ta área. Apesar de tudo, dois sites deram-me uma grande ajuda(www.swynk.com e www.4guysfromrolla.com), pois muitos progra-madores já lá deixavam os seus artigos, código e ideias. Com estesuporte on-line e alguma ajuda de programadores de todo o mundo,comecei a desenvolver páginas, e tudo foi correndo normalmente.Quando me senti preparado comecei a escrever artigos para estesmesmos sites, para apoiar aqueles que iriam ter as mesmas dificul-dades que eu tive.

Com este livro quero fazer o mesmo, apoiar todos os que querementrar nesta área, e tentar que o caminho para o domínio das ASPseja o menos dificultado possível. Este livro está separado por capí-tulos; cada capítulo está estruturado por uma parte do sistema dasASP, e foi dada uma ordem a estes, para que os temas estivessemordenados por níveis de dificuldade. No final deixo alguns exem-plos, que sei irão ser muito úteis a todos aqueles que querem algo

Page 13: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

13CAPÍTULO 1: INTRODUÇÃO ÀS ACTIVE SERVER PAGES

mais que tópicos e artigos. Estes exemplos para os iniciados neces-sitam de uma compreensão de todos os temas abordados nestelivro, mas os programadores mais avançados podem ir directamen-te para os exemplos, e recorrer ao manual para entenderem ou re-verem alguns aspectos da programação com ASP. Espero que estelivro sirva para aquilo que o leitor está à procura, pois quando eucomecei se tivesse tido este manual, metade dos meus problemastinham sido resolvidos muito mais depressa. Para me ajudar nostemas tenho os problemas que normalmente recebo todas as se-manas de vários pontos do planeta, que me dão uma ideia daquiloque os programadores mais precisam quando começam a trabalharcom esta tecnologia.

1.2 Requisitos para as ASP‘ASP’ é a abreviatura de Active Server Pages. ASP são páginasdinâmicas para a Internet, que usam uma linguagem de programa-ção ao estilo do VB (Visual Basic). Para quem está familiarizadocom o VB não lhe será difícil entender este código, pois as rotinasde scripting de ambos os sistemas são quase idênticas e seguemas mesmas regras. Se além do VB, tiver sólidos conhecimentos deHTML (Hyper Text Marked Language), rapidamente estará prepara-do para programar sobre este sistema a um bom nível depois dedominar os tópicos deste manual. Mesmo que não domine o HTML,poderá ler o capítulo 1.6 onde estão indicados alguns dos principaiscomandos (chamados Tags) do mesmo.

Este sistema foi o segundo adoptado pela Microsoft para a criaçãode poderosos sites dinâmicos com acesso a bases de dados. Oprimeiro sistema foi o de IDC que usava um sistema de dois fichei-ros, um com o código HTML (HTX) que continha rotinas de chama-da de ficheiros IDC, que por sua vez tinham as declarações de SQLpara acesso às bases de dados. Não era tão flexível, era mais lentode se programar, e tinha certos requisitos de programação algo di-ferentes das ASP.

Page 14: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES14

Versão digital, individual, licenciada em Fev/2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'

Fig. 1.1 - Esquema geral do funcionamento das ASP

Não existem requisitos em relação aos browsers a usar para acederaos sites criados em ASP, pois todo o código é interpretado peloservidor de Internet, e aquilo que chega ao utilizador final é puroHTML gerado pelas ASP. Com a experiência, e futuros testes, vaientender todos estes aspectos que tenho vindo a mencionar.

A nível de hardware, o programador tanto pode ter o seu computa-dor pessoal em casa para trabalhar nos exemplos deste livro, comotrabalhar directamente no próprio servidor online. O importante éque a partir do momento que disponibilize a sua página online, opteem vez do PWS (Personal Web Server), pelo IIS (Internet InformationServer), pois este é mais seguro, mais potente, e suporta melhormúltiplos sites, além de que para controlar os acessos, configurar econtrolar o seu servidor de Internet necessita mesmo do IIS (porisso indicado para situações a nível profissional). Todo o código queé criado em PWS funciona em IIS, quando não são usados compo-nentes externos (DLL); a partir desse momento é necessário insta-lar os mesmos na máquina para onde se está a exportar o código.

De outra forma, basta o leitor copiar os ficheiros que criou para umou outro sistema, que o mesmo aceita e interpreta da mesma ma-neira. Claro que tem de ter em atenção outros aspectos como alocalização das bases de dados, as suas conexões, e componentesextra (tudo isto visto nos próximos capítulos).

Page 15: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

15CAPÍTULO 1: INTRODUÇÃO ÀS ACTIVE SERVER PAGES

1.3 ASP vs JavaScript/VBScriptMuitas pessoas perguntam “…Qual a diferença entre as ASP e oJavaScript? Ou o VBScript? Ou mesmo o tão potente Java?…”.

Bem, as diferenças são bastantes, não só falando das ASP, mastambém de outras linguagens parecidas, como o Perl, PHP ou mes-mo o Cold Fusion. Enquanto o JavaScript e o VBScript e o Java,funcionam do lado do cliente (apesar de haver hipótese do Javafuncionar também a nível do servidor com servlets) as ASP funcio-nam no servidor. Uma boa maneira de notar esta diferença entre asASP e o JavaScript/VBScript, é olhando para as instruções de pro-gramação de ambos. Quando estamos no nosso browser e vamosver o source de um ficheiro com JavaScript ou VBScript, vemos todoo código, e daí vem o problema desse código poder ser usado ile-galmente por outro programador - situação muito usual. Com asASP, ao tentar aceder ao código, só se vê puro HTML, pois as ASPsão tratadas e processadas no servidor de Internet que por sua vezenvia a formatação online toda em HTML.

O código de JavaScript é facilmente identificado no meio do códigoHTML, sendo a sua estrutura a seguinte:

<SCRIPT LANGUAGE=”JAVASCRIPT”>{ history.go(-1);}</SCRIPT>

Este exemplo está a simular o botão de recuo do browser, fazendocom que seja recuada uma página. Normalmente este código é usa-do na seguinte situação (pelo menos aquela em que o uso mais):

<a href=”javascript : history-go(-1)”>Voltar Atrás</a>

O VBScript é no final de contas o código base das ASP, mas quecorre no lado do cliente:

<SCRIPT LANGUAGE=”VBSCRIPT”> formatcurrency(“10000”)</SCRIPT>

Este código formata o valor 10000, para que fique 10.000$00.

Page 16: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES16

Versão digital, individual, licenciada em Fev/2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'

Com o Java o problema é diferente, é muito pesado, nem todos osbrowsers o suportam, e a sua programação é dispendiosa, e tomamuitos recursos, que a fazem ideal para outros campos. Este foientão posto de parte por todos aqueles que querem sites com rápi-do acesso a bases de dados, e flexíveis, não só na programaçãomas também na utilização (interface com o utilizador), onde as ASPe linguagens semelhantes têm vindo a dominar todo o mercado. Ese formos a ter em conta o que é aceder a bases de dados online,poderemos ver que todos os serviços online têm de aceder a essasmesmas estruturas, para poderem praticar o chamado e-commerce,que veremos também neste manual.

1.4 Instalar o servidor de InternetO servidor de Internet é bastante fácil de instalar e a documentaçãoda Microsoft que vem com o pacote do software é bastante explíci-ta. Mesmo assim vou só indicar alguns pontos para a instalação dosoftware.

Se está a pensar em instalar um servidor de Internet para ter pági-nas online, a opção certa é o WindowsNT com o Option Pack 4 (deonde vem o IIS 4) e se possível com o Service Pack 4 ou 5 doWindowsNT. Se quiser usar sistemas mais recentes pode tambémusar o Windows 2000, que vem mais seguro no aspecto dos sitesque fiquem sob sua alçada e trás já o IIS 5.

As grandes diferenças no IIS 5 serão no aspecto do uso de código ealguns objectos novos, que não são bem novos, mas sim melhora-mentos de alguns já usados anteriormente. A nível de performanceessa será melhor pois os cabeçalhos de HTTP (a informação que érecolhida pelo browser, enviada pelo servidor) quando possível sãoenviados comprimidos, permitindo uma redução de tamanho de in-formação. Terá alguns wizards para instalação de sites, e um gran-de avanço é que o programador não terá de se preocupar com asextensões dos ficheiros, podendo colocar código ASP em qualquerlado, pois o novo servidor vai detectar as diferenças. Existirá umamaneira mais prática de redireccionamento de páginas, poderá serexecutado código dinamicamente (do tipo o utilizador ter uma pági-na online para testar scripts no momento), melhor controlo de com-ponentes, e o mais importante de todos, a hipótese de se criarem eusarem classes, sistema usado por programadores em ambientesde programação orientada por objectos.

Page 17: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

17CAPÍTULO 1: INTRODUÇÃO ÀS ACTIVE SERVER PAGES

Caso contrário, o PWS para o Windows 98 é uma boa escolha poispesa menos no computador e será o suficiente para criar as ASPque irá usar futuramente no Windows NT. Eu indicaria então queinstalasse tudo o que vem no pacote (PWS ou IIS), as consolas degestão, o transaction server, os exemplos, o ADO (Access DataObects), todos os componentes que vierem – em resumo, tudo oque for possível instalar. Perceberá durante a leitura deste manual oporquê desta indicação, e com a sua especialização nesta matériaao longo da sua vida profissional também o entenderá.

O directório onde as páginas vão ficar instaladas pode ser aqueleque o programador quiser, mas aconselho vivamente a utilizar oque está por defeito c:\inetpub\wwwroot\, e a partir do interior destegerir todas as páginas que quiser criar. Não apague os ficheiros queele criar, principalmente um chamado global.asa, que iremos tratarmais adiante.Depois de todo o sistema instalado tem de activar o serviço deInternet. No PWS basta ir ao Personal Web Server e carregar emStart (normalmente ele já está por defeito). No IIS 4 terá de ir àManagement Console e escolher Default Web Site da lista do lado esquer-do, carregando depois no botão de run.

Fig. 1.2 - Aspecto da consola do PWS

Como se pode verificar na figura 1.2, o servidor virtual criado pordefeito é o nome que se deu ao computador, variando por isso demáquina para máquina. No meu caso será jvpc. Assim, quando forpreciso aceder ao servidor virtual, poder-se-á fazer no browser atra-vés de http://jvpc/ ; aparecer-lhe-ão informações do PWS, da mesmamaneira que se escrevesse no address link do seu browser localhost.

Page 18: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES18

Versão digital, individual, licenciada em Fev/2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'

Fig. 1.3 - Página principal do servidorInternet PWS, depois de instalado

Mas para os exemplos deste livro eu criei um directório semi-virtualpara trabalhar os meus ficheiros. Para tal segui os seguintes pas-sos:

1. Criar um directório dentro de c:\inetpub\wwwroot\(ex. c:\inetpub\wwwroot\livro\)

2. Entrar na consola do PWS3. Parar os serviços, clicando em Stop4. Clicar no icon da lista da esquerda que tem o nome de

Advanced5. Carregar em Add para se acrescentar novo directório

semi-virtual6. Em Directory Fazer browse até ao directório criado

na linha 1.7. Em Alias escrever o nome a usar logo a seguir

de http://nomepc/ (ex. livro)8. Carregar em OK9. Na lista do lado esquerdo, carregar em Main10. Reiniciar os serviços de Internet, carregar em Start11. Fica então instalado o primeiro servidor virtual Internet

no seu PC (ex. http://pcnome/livro/)

Não se esqueça de que os ficheiros de ASP só funcionam dentro dodirectório que é criado para esse destino, e configurado por defeitoou por si. Mas tudo isto está acessível nos manuais do software.Irei então começar a demonstrar o aspecto do código HTML.

Page 19: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

19CAPÍTULO 1: INTRODUÇÃO ÀS ACTIVE SERVER PAGES

1.5 Programar com ficheirosASP e HTML

As extensões dos ficheiros ASP é *.asp, e dos ficheiros HMTL é *.htmlou *.htm

Conforme a versão do servidor Internet, o programador poderá defi-nir quais as extensões a usar e para que tipo de ficheiro. Poderá atépersonalizar os ficheiros ASP, fazendo com que passem a ser *.xyz

Como estes tipos de ficheiros não são compilados e sim interpreta-dos (os *.asp no servidor e os *.html no browser), o programador esta-rá a programar sobre ficheiros de texto, mas com as extensões refe-ridas. Normalmente são usados editores Freeware, que se podemencontrar na Internet, ou outros mais profissionais como o InterDevda Microsoft. Acho que cada um deve tentar todos os que puder,para fazer a escolha que esteja mais apropriada à sua maneira deprogramar.

1.6 Conhecer o HTML (HyperText Markup Language) em12 passos

Para se programar as ASP, serão necessários certos requisitos, nãosó a nível de hardware como de conhecimento a nível de programa-ção. Falo do HTML, que é necessário como base para um bom en-tendimento de tudo aquilo que é descrito neste manual. Para issodescreverei alguns comandos do HTML, que de linguagem de pro-gramação tem muito pouco, visto que se poderia comparar a algunsprocessadores de texto bastante antigos (quem se lembrar doWordStar sabe ao que me refiro!).

Vou então indicar 12 pontos essenciais em relação ao HTML, paraque o leitor fique melhor preparado para o que vai ler nos próximoscapítulos, onde se misturará HTML com o código ASP.

Page 20: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES20

Versão digital, individual, licenciada em Fev/2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'

1. O código HTML que aparece no browser fica sempre entre duasTags - Tags são os comandos que estão entre os símbolos <>

<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>. Nemtodas o requerem, mas podemos dizer que cerca de 90% sim.

3. Para enviar conteúdo para o browser de maneira a ser visívelpelo utilizador, basta escrever:

<HTML><BODY>

ISTO É UM TESTE</BODY></HTML>

4. Para mudar-se os parâmetros dos textos escritos é usada a Tag<FONT>, onde poderá mudar o tamanho das letras, a cor e atémesmo o tipo de letra:

<HTML><BODY>

<FONT FACE=”ARIAL” COLOR=”GREEN” SIZE=”5”>ISTO É UMTESTE</FONT>

</BODY></HTML>

5. Para simular um parágrafo existe a Tag <P>

<HTML><BODY>

<P><FONT FACE=”ARIAL” COLOR=”GREEN” SIZE=”5”>ISTO É UMTESTE</FONT></P>E ISTO JÁ É OUTRO TESTE

</BODY></HTML>

Page 21: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

21CAPÍTULO 1: INTRODUÇÃO ÀS ACTIVE SERVER PAGES

6. A mudança de linha é feita com <BR> que funciona como queum Enter no mesmo parágrafo:

<HTML><BODY>

<P><FONT FACE=”ARIAL” COLOR=”GREEN” SIZE=”5”>ISTO É UMTESTE</FONT></P>E ISTO<BR> JÁ É<BR> OUTRO TESTE<BR>

</BODY></HTML>

7. Para se criar tabelas usamos <TABLE></TABLE>, onde <TR></TR>simbolizam as linhas, e <TD></TD> as colunas dessa mesma li-nha:

<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>

8. Quando queremos introduzir comentários ao código usamos<!— —>. Dá muito jeito quando o código HTML é muito extenso,comentando assim o que está criado em vários pontos do script:

<HTML><BODY>

<!—ISTO QUE AQUI ESTÁ ESCRITO NÃO APARECE NO BROWSER—>ISTO SIM, JÁ APARECE NO BROWSER

</BODY></HTML>

Page 22: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES22

Versão digital, individual, licenciada em Fev/2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'

9. Quando é necessário um script, para funcionar do lado do clientetipo JavaScript ou VBScript usa-se a Tag <Script Language=”….”></Script>

<HTML><BODY>

<!—ISTO QUE AQUI ESTÁ ESCRITO NÃO APARECE NO BROWSER—>ISTO SIM, JÁ APARECE NO BROWSER<SCRIPT LANGUAGE=”JAVASCRIPT”>………….</SCRIPT>

</BODY></HTML>

10.Uma das maneiras de recebermos dados do utilizador é atravésde formulários. Podemos usar o método POST ou GET, que serãodefinidos para o tipo de programação com dados dos utilizadoresvia ASPs. Estes são estruturados da seguinte maneira:

<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 linkcom 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>

Page 23: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

23CAPÍTULO 1: INTRODUÇÃO ÀS ACTIVE SERVER PAGES

12. Para mostrar uma imagem no browser use a Tag <IMG>

<HTML><BODY>

<IMG SRC=”nomedaimagem.gif”></BODY></HTML>

Ficam assim demonstrados os passos que julgo serem os básicosessenciais do HTML, para compreender parte daquilo que vai serdemonstrado neste manual. A linguagem HMTL é bastante simplese limitada. Uma boa observação a outros sites pode fazer maravi-lhas aos seus conhecimentos de HMTL ;-)

Quando estiver no capítulo dos exemplos deste manual, e se nãoestiver a perceber o código de HTML volte a consultar este capítuloonde se introduziram as Tags que poderiam causar mais dúvidas. Amaioria das outras Tags e opções são quase óbvias aquando dasua tradução para português.

1.7 Sites com recursos de ASPPoderia enumerar muitas dezenas de sites com recursos a níveldas ASP, alguns dos quais eu ainda recorro. Mas vou indicar aque-les que julgo valerem mesmo a pena, não apenas pelo conteúdoque têm, mas também pela maneira como apresentam o conteúdoe o organizam:

www.activeserverpages.comEste é 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 paraaquelas dificuldades que vãoaparecendo enquanto progra-mamos. É actualizado periodi-camente há muito tempo.

Page 24: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES24

Versão digital, individual, licenciada em Fev/2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'

www.15seconds.comEste é também daqueles quetodos os que estão dentro doassunto conhecem. Tem mui-tos artigos, de vários tipos, eum motor de busca que vaipesquisar vários sites de ASP.

www.swynk.comEste site, no início, era dosmelhores, tinha muita informa-ção e muito bem estruturada.Está vocacionado para tudo oque tiver a haver com WindowsNT, e devido ao IIS4 tambémtem muito bons artigos de ASP.Tenho uma coluna minha lá,onde poderá recolher algumasideias de ASP.Este site cresceu muito, e mui-to depressa, por isso julgo sera causa dos atrasos na suaactualização.

www.4guysfromrolla.comIndiscutivelmente um site a nãoperder. Foi também graças aeste site que consegui alcan-çar os objectivos, nas empre-sas onde trabalhei com ASP.Tem muita informação, artigose código. Se por lá passar vainotar que tenho lá alguns arti-gos.

Page 25: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

25CAPÍTULO 1: INTRODUÇÃO ÀS ACTIVE SERVER PAGES

www.asphole.comÉ um grupo de sites, que sededicam às ASP, tem tambémmuitos recursos, apesar de es-tarem a ser ultrapassados porsites mais recentes como oAspin.

www.aspin.comEste site é bastante recente ejá 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.comEste é daqueles sites quequando começar a programarASPs com alguma assiduida-de irá com certeza visitar. Elesobrigam 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 emmais lado nenhum.

Page 26: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro
Page 27: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

22Expressões eOperadores

2.1 Os primeiros passos2.1.1 Exemplo: ‘Olá Portugal’ 282.1.2 Exemplo: ‘Olá Portugal’ com variável 282.1.3 Exemplo: Cálculo de variáveis 292.1.4 Exemplo: Código ASP embebido

em HMTL 29

2.2 IF, THEN, ELSE, END IF…2.2.1 Exemplo: Comparação entre variáveis 30

2.3 FOR, WHILE, CASE…2.3.1 Exemplo: Comparação de variáveis

com ciclos 322.3.2 Exemplo: Select Case 332.3.3 Exemplo: Contadores ASP

embebidos em HMTL 332.3.4 Exemplo: HMTL embebido em

contadores ASP 34

2.4 Variáveis 35

2.5 Tabela de Operadores2.5.1 Exemplo: Comparação de variável

entre valores 372.5.2 Exemplo: Utilização de todos

os operadores 38

Page 28: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES28

2.1 Os primeiros passosPara começar irei demonstrar-lhe, em apenas uma linha, comopoderá escrever uma frase; depois veremos o mesmo no HTML,com variáveis e acções entre variáveis. Isto ainda antes de definir osobjectos, métodos, expressões, funções e regras das ASP. Tereicomo princípio que o leitor tem conhecimentos de HTML, visto ser abase de toda esta programação (programação Internet).

(ficheiro cpt2-1-1.asp)<%response.write”Olá Portugal”%>

Vemos aqui algo que nos salta à vista e que são os <% %>. Como sepode facilmente verificar, estes são os identificadores de onde co-meça e acaba a ASP que foi construída, pois quando introduzirmoscódigo entre o HTML, teremos de definir onde estão as ASP, e estesindicadores serão determinantes para esse propósito. Response éum objecto das ASP que conta com bastantes métodos. Este e oobjecto Request vão ser sem sombra de dúvidas aqueles com queirá trabalhar mais. Encontra uma tabela no capítulo seguinte com osobjectos principais e seus métodos de maneira que sempre quenecessitar os possa encontrar mais rapidamente consultando a ta-bela.

(ficheiro cpt2-1-2.asp)

<%pais = “Portugal”response.write”Olá “ & pais%>

Este segundo exemplo demonstra uma abordagem diferente mascom o mesmo resultado no browser. Aqui pretendo demonstrar amaneira como se fazem ligações com o símbolo &

Page 29: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

29CAPÍTULO 2: EXPRESSÕES E OPERADORES

Fig 2.1 - Resultado dos ficheiroscpt1-4-1.asp e cpt1-4-2.asp

Se quisermos usar variáveis numéricas, e calcular algo com elas,temos então o exemplo seguinte:

(ficheiro cpt2-1-3.asp)

<%a = 10b = 2response.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 umamaneira em que o é obrigado a fazer (com Explicit) mas só se as-sim o definir. Outro ponto bastante agradável é de que não necessitade marcadores para definir o final de cada linha. Por exemplo, ema=10. Não é necessário ponto e vírgula ou outro qualquer marcadorpara terminar uma linha de código.

(ficheiro cpt2-1-4.asp)

<% ‘iniciar a variávelcptvar=”passear”%><HTML><BODY><FONT SIZE=”6” >Eu hoje fui <%=cptvar%>, para o Alentejo…</FONT></BODY></HTML>

Page 30: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES30

Neste exemplo foi feito aquilo que de mais normal vai ser feito noresto deste manual - usar as variáveis geradas ou não nas ASP eintroduzi-las no meio do código HTML. Repare no truque para que avariável fique entre o HTML. Não foi necessária a rotinaresponse.write, sendo então introduzido apenas o caracter deigualdade seguido da variável.

A plica ‘ é usada para comentar, sempre que quisermos introduziralgum comentário ao código. Neste livro vamos usá-la com frequên-cia para dar explicações adicionais de algumas situações a nível deprogramação.

Julgo que com estes exemplos o leitor ficou a perceber como seestrutura de um modo geral a programação em ASP.

2.2 IF, THEN, ELSE, END IF…Vamos então iniciar alguma programação básica e essencial, aquiloque une toda a programação, e que são os operadores e asexpressões. Vou começar pelas expressões, e deixar uma tabelade operadores para o final deste capítulo (visto que são bastantepoucos). Entretanto estes vão sendo usados nos próximos exemplos.

(ficheiro cpt2-2-1.asp)

<%a= 10b=100if a < b then response.write “a é menor que b” else if a > b then response.write “a é maior que b” end ifend if%>

Page 31: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

31CAPÍTULO 2: EXPRESSÕES E OPERADORES

A expressão IF, foi aqui usada para que em conjunto com o operador< , fizessem uma comparação. A mensagem que vai ser enviadapara o browser, depende dos valores a e b. O IF tem uma estruturasimples:

IF (ALGO) THEN (FAZ MAIS ALGO)END IF

Ou quando as opções são várias:

IF (ALGO) THEN (FAZ ALGO)END IFIF (ALGO2) THEN (FAZ ALGO2)END IFIF (ALGO3) THEN (FAZ ALGO3)END IF

Mas se as opções estão em cadeia, e se uma acontecer, as outrastêm de ficar anuladas. Teremos de usar a expressão ELSE:

IF (ALGO) THEN (FAZ ALGO) ELSE IF (ALGO2) THEN (FAZ ALGO2) ELSE IF (ALGO3) THEN (FAZ ALGO3) END IF END IFEND IF

Este tipo de expressões dá muito jeito aos programadores, masquando existem várias opções em cadeia, eu sugiro que se use aexpressão CASE; fica melhor organizado, e as confusões dentro docódigo são bastante menores. Estas pequenas ‘regras’ que vou es-crevendo neste manual, não são propriamente para serem segui-das religiosamente. Se calhar o leitor nem vai ter muitos problemas,mas quando o código começa a ficar muito extenso, o programatende a ficar confuso. Notará isso se lá voltar ao fim de uns mesespara fazer manutenção (muito comum em sites na Internet).

Page 32: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES32

2.3 FOR, WHILE, CASE…As expressões de repetição, usadas pelas ASP, são conhecidas dequalquer programador, não sendo por isso algo que precise de umaespecial atenção para as tentar perceber.

(ficheiro cpt2-3-1.asp)

<%a= 4b=12if 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 FORelse 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 ifend if%>

Neste caso aproveitei código de um exemplo inteiro, para lhe darmais umas linhas com este ciclo WHILE. Inicialmente faz-se a pri-meira comparação, que se repetirá enquanto a mesma for válida.Neste caso enquanto b for menor que I, o ciclo (loop) vai sendo con-cretizado.

A minha expressão de repetição favorita, é a CASE, muito flexível erápida. Por mais tarde que eu volte a mexer no código, fico a sempreperceber o que lá se passa em minutos.

Page 33: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

33CAPÍTULO 2: EXPRESSÕES E OPERADORES

(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%>

Neste case a comparação é feita por hipóteses em função de umaresposta (variável resposta), tendo-se atenção à mesma, iremos fa-zer uma comparação com as hipóteses possíveis (1, 2, 3 e 4 são asúnicas possíveis) e executar a declaração correspondente (se acer-tou ou se não acertou).

(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 decontas aquilo que mais vai usar se o destino que pretende dar aosseus 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 origina, 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.

Page 34: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES34

Fig. 2.2 - Resultado do ficheiro cpt2-3-3.asp

(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 quenão fosse preciso repetir a mesma 8 vezes. Este é já um pensa-mento a seguir pelo programador de ASP - tentar evitar escrevermuitas linhas de código, e sim optimizar ao máximo todas as fun-ções que vier a criar.

Fig. 2.3 - Resultado do ficheiro cpt2-3-4.asp

Page 35: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

35CAPÍTULO 2: EXPRESSÕES E OPERADORES

2.4 VariáveisNas 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 comofor, é ‘má’ programação usar variáveis globais sem controlo sobreas mesmas. Deve-se usar, mas não em excesso, assim como sedevem 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 cadapágina para que tenha de inicializar sempre as variáveis. Assim, asalocações de memória, para as variáveis dinâmicas, serão feitascom uma melhor estrutura, ficando por esse motivo beneficiado odesempenho 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%>

Temos nas ASP, alguns tipos de variáveis a considerar:

- variáveis usuais (usadas no momento, e que, como sãodinâmicas, podem ser criadas a qualquer altura seminicialização das mesmas; podemos incluir os arrays neste gru-po, que podem ser passados para as variáveis de sessão).Normalmente quando as inicializamos usamos a expressãoDim variável

- variáveis Application (usadas como globais no site pois to-dos os utilizadores têm acesso à mesma);

- variáveis de sessão/Session (usadas para acompanharemtoda uma sessão de acesso por parte de um utilizador, mas sóacessíveis por este, e não por todos como as de Application).

Page 36: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES36

2.5 OperadoresApesar 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:

TIPO DE OPERADOR DESCRIÇÃO

= Igualar a…· if a = b· c = d

< Menor do que…· if a < b· while c < x

> Maior do que…· if a > b· while c > x

<= Menor ou igual do que…· if a <= b· while c <= x

>= Maior ou igual do que…· if a >= b· while c >= x

<> Diferente de…· if a <> b· while c <> x

Estes são os operadores principais das ASP, e será com estes queiremos trabalhar ao longo deste manual. Estes operadores não se-rão usados única e exclusivamente no código de ASP, mas tambémaquando do uso de declarações de SQL.

Page 37: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

37CAPÍTULO 2: EXPRESSÕES E OPERADORES

Quando queremos fazer comparações múltiplas podemos então usarAND ou OR, como nos seguintes casos:

(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%>

Nos operadores aritméticos temos então uma outra tabela:

TIPO DE OPERADOR DESCRIÇÃO

^ Usado para expoente,(Para o caso de 26, temos nas ASP , (2^6))

* Multiplicador,(2*5)

/ Divisão para retornar valor singular…(a / b)

\ Divisão inteira…(a \ b)

+ Soma…( a + b )Este valor também funciona paraconcatenação tal como o símbolo &

- Diferença…( a – b )

MOD Resto da divisão…( a MOD b )

Podemos então demonstrar todos os operadores aritméticos da ta-bela anterior, num ficheiro de ASP.

Page 38: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES38

(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 nestecódigo, pode recorrer à seguinte imagem, que julgo responder aqualquer dúvida com que possa ter ficado.

Fig. 2.4 - Resultado do ficheiro cpt2-5-2.asp

Estes operadores são muito importantes na medida em que todo otipo de estatísticas, contas, comparações e cálculos extra os irãorequerer. No dia a dia, as empresas precisam de certas situaçõesresolvidas que por vezes não têm solução nas funções pré-defini-das das ASP, e nessa altura terá de ser o leitor a desenvolver assuas próprias funções, por meio destes operadores de base.

Page 39: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

33Funções

3.1 Tabela de funções base das ASP 40

3.2 As nossas funções

3.2.1 Exemplo: Nº dias até o ano 2001 48

3.2.2 Exemplo: Validar o e-mail 50

3.2.3 Exemplo: Criar uma ComboBox

a partir de um array 52

3.2.4 Exemplo: Criar um gráfico em HTML

a partir de um array 53

3.3 Uso de SSI (Server Side Includes)

com as nossas funções

3.3.1 Exemplo: Uso de um ficheiro

externo com SSI 56

3.3.2 Exemplo: Ficheiro com todas

as funções 57

3.3.3 Exemplo: ASP que usa o ficheiro

com todas as funções 58

Page 40: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES40

3.1 Tabela de Funções base das ASPUm dos aspectos que mais se destaca nas ASP são as suasfunções, e a facilidade de manuseamento das mesmas. Existemfunções que facilitam muito a vida a quem faz a programação devários sites. A recursividade é um dos pontos fortes quandoprogramamos, e as funções ajudam nesse aspecto.

A tabela seguinte, tal como a tabela de objectos que existe no próxi-mo capítulo, vão de encontro a tudo aquilo que este manual se refe-re - a programação de potentes sites interactivos e dinâmicos. Seráa partir deste capítulo que o leitor se irá confrontar com exemplosrealmente essenciais para a programação do dia a dia de sites pro-fissionais. Espero que estas tabelas vão de encontro às necessida-des do leitor, que quer procurar rapidamente aquela função ou ob-jecto que necessita no momento em que está a programar. A tabelaestá por ordem alfabética para facilitar a procura de qualquer umadas funções que possa ser necessária. As funções são da versão2.00 das ASP, pertencente ao VBScript V4.

TABELA DE FUNÇÕES DAS ASP

Função Descrição

Abs() Esta função serve para devolver númerosabsolutos, sejam eles de que tipo forem.Ex. variavel = Abs(23.34) ‘ devolve 23.34

variavel = Abs(-23.34) ‘ devolve 23.34

Array() Os arrays servem para definirmos listas devalores dentro de uma mesma variável. São muitousados para simplificar actos muito comuns emprogramação, a todos os níveis. Um array éconstituído por vários valores que estãoseparados por uma posição. O arrayvariavel(“João”, 3, 1200, “Sol”), tem 4 posições. Asposições de um array começam sempre do 0.Para acedermos aos dados que esta tem, bastaindicarmos a posição que nos interessa.Ex. variavel(“João”, 3, 1200, “Sol”)

Response.write variavel(0) ‘ devolve JoãoResponse.write variavel(1) ‘ devolve 3Response.write variavel(3) ‘ devolve Sol

Page 41: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

41CAPÍTULO 3: FUNÇÕES

Asc() Devolve o número ASCII de um caracterEx. variavel1 = Asc(“C”) ‘devolve 67variavel2 = Asc(“1”) ‘devolve 49

Atn() Serve para calcular o arco-tangente de um valorEx. Atn(1) ‘ devolve 0,785398163397448

CBool() Retorna True ou False: False se a expressão forfalsa, caso contrário TrueEx. Cbool(32=32) ‘ devolve True

Cbool(10=32) ‘ devolve False

CByte() Transforma qualquer valor (do tipo não Byte) parao tipo ByteEx. CByte(225.1278) ‘ devolve 225

CCur() Idêntico a CByte(), mas neste caso parao tipo de moeda usado.

CDate() Converte uma expressão que tende para umaData, numa Data validada, não sendo necessáriousar IsDate()Ex. variavel1 = Cdate(“Dezembro 1, 1990”)

‘ a variável1 fica com uma data válida

CDbl() Converte um valor (do tipo não Double)para o tipo Double

Chr() Ao contrário da função Asc(), esta converte osvalores ASCII para o caracter correspondenteEx. Chr(67) ‘devolve C

Chr(49) ‘ devolve 1

CInt() Converte um valor (do tipo não Intenger)para o tipo Integer

CLng() Converte um valor (do tipo não Long)para o tipo Long

Cos() Devolve o coseno de um ângulo

Page 42: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES42

CreateObject() Cria uma referência a um objecto externoEx.Set Objecto=Server.CreateObject(“Projecto.Objecto”)

Csng() Converte um valor (do tipo não Single)para o tipo Single

CStr() Converte um valor (do tipo não String)para o tipo StringEx. CStr(123) ‘ devolve uma string “123”

Date() Devolve a Data corrente no servidor InternetEx. response.write Date()

DateAdd() Esta função serve para o programador obter umadata posterior ou anterior àquela que pretendeusar para cálculo.Podemos querer saber qual o dia referente a 20dias depois da data pretendida, ou 1 mês, ou 2anos.A expressão usa 3 campos, o primeiro paraintroduzirmos o campo de data por onde quere-mos calcular a diferença, o segundo campo parao valor numérico dessa diferença, e no final a datade início.O campo do caracter que define o tipo de diferen-ça aceita as seguintes opções:h – horasn – minutoss – segundosyyyy – anosq – quarto anualm – meses do anoy – dias do anod – diasw – dias da semanaww – semanas do anoEx. DateAdd(“m”, 1, “31-Jan-2000”) ‘ devolve 29-Fev-2000 DateAdd(“d”, 1, “31-Jan-2000”) ‘ devolve 1-Fev-2000

DateDiff() Devolve a diferença entre duas datas escolhendoum dos campos de comparação explicados emDateAdd()Ex. DateDiff(“d”, Now, “31-Jan-1999”)

‘ devolve a diferença entre a data de hoje e o dia 31 de Janeiro de 1999

Page 43: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

43CAPÍTULO 3: FUNÇÕES

DatePart() É dada uma certa data e obtemos em que alturado ano acontece usando os valores de campo deDateAdd()Ex. DatePart(“q”, “31-Set-2000”) ‘ devolve o quarto do ano em que a data se aplica

DateSerial() Devolve uma data para especificados ano,mês e dia

DateValue() Devolve uma data válida daquela que é pedida

Day() Devolve o dia do mês de uma dataEx. Day(“31-Set-2000”) ‘ devolve 31

Exp() Devolve a exponencial de um valor

Filter() Pesquisa um array, para procura de umvalor ou expressãoEx. variavel1(“Internet”,”Sites”,”Hosting”,”Portugal”) Filter(variavel1,”Si”) ‘ devolve Sites

Fix() Devolve o inteiro de um qualquer valorFormatCurrency()Transforma um valor normal numérico

para valor monetário.Ex. FormatCurrency(32420) ‘ devolve 32.420$00

FormatDateTime()Funciona como FormatCurrency()mas para datas

FormatNumber() Formata um número da maneira que nos convém

FormatPercent()Devolve uma percentagem do universo que oprogramador pretendeEx. FormatPercent(23/230) ‘ devolve 10,00%

GetObject() Devolve a referência a um objecto

Hex() Transforma um valor para resultado hexadecimal

Hour() Devolve a hora de uma expressãoEx. Hour(Now()) ‘ devolve a hora do momento

InStr() Devolve a posição de uma string dentrode outra a contar do inícioEx. InStr(1,”Hoje é um bom dia para seprogramar”, “ra”) ‘ devolve 21

Page 44: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES44

InStrRev() Devolve a posição de uma string dentrode outra a contar do fimEx. InStr(1,”Hoje é um bom dia para

se programar”, “ma”,35,0) ‘ devolve 33

IsArray() Devolve True ou False em relação a uma variável,validando-a no caso de ser ou não um array

IsDate() Devolve True ou False em relação a uma string,validando-a no caso de esta ser do tipo Date ou não

IsEmpty() Valida uma variável, para ver se a mesmaestá ou não vazia

IsNull() Valida uma variável para ver se a mesmaé Null ou não

IsNumeric() Valida uma string/valor para ver se o mesmo énumérico ou não

IsObject() Valida um Objecto, certificando-se se o mesmoo é ou não

Join() Junta todas as variáveis dentro de um array,criando uma só.Ex. variavel(0) = “Hoje ”

variavel(0) = “está ”variavel(0) = “bom ”variavel(0) = “tempo.”variavel2 = Join(variavel)

‘a variavel2 ficará igual a “Hoje está bom tempo.”

LBound() Devolve o menor valor da dimensão de um array

LCase() Devolve uma string em ‘lower case’Ex. LCase(“Estamos em Setembro.”)

‘ devolve “estamos em setembro.”Left() Devolve um certo número de caracteres a contar

do lado esquerdo da stringEx. Left(“Vamos programar ASP.”,3)

‘devolve “Vam”

Len() Devolve o tamanho de uma stringEx. Len(“Vamos programar ASP.”)

‘ devolve 20

Page 45: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

45CAPÍTULO 3: FUNÇÕES

Log() Devolve o logaritmo de um dado número

LTrim() Devolve uma string sem espaços do lado esquerdoEx. LTrim(“ Isto é um teste.”)

‘ devolve “Isto é um teste.”

Mid() Serve para termos um número dado decaracteres de uma string, a partir de uma dadaposiçãoEx. Mid(“Vamos programar ASP.”, 7, 9 )

‘ devolve “programar”

Minute() Devolve o minuto de uma data/hora

Month() Devolve o valor correspondente ao mês de umadada dataEx. Month(date())

‘ devolve o valor do mês em que estiver a testar o código

MonthDate() Devolve o nome do mês (por extensão)Ex. MonthDate(10) ‘ devolve “Outubro”

Now() Devolve a data e hora corrente

Oct() Devolve o valor octal de um dado número

Replace() Altera certo caracter/string por outro dadoEx. replace(“yyXiiXppX22fXjX” , ”X” , ”P” )

‘ devolve “yyPiiPppP22fPjP”

RGB() Devolve um valor representativo de uma cor. Aexpressão é estruturada por RGB(vermelho,verde, azul)Os valores usados vão de 0 a 255Ex. RGB(22,233,143)

‘ devolve 9431318

Right() Funciona como a função Left() mas acontar da direita

Rnd() Retorna um valor aleatório

Round() Faz arredondamento a valores numéricosEx. Round(23,77) ‘ devolve 24

Page 46: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES46

Second() Devolve os segundos de uma dada hora

Sgn() Devolve o sinal de um valorEx. Sgn(2) ‘ devolve 1

Sgn(-12) ‘ devolve –1Sgn(0) ‘ devolve 0

Sin() Devolve o seno de um ângulo indicado

Space() Introduz um dado número de espaços numa stringEx. response.write “Teste“ & Space(12) & “Feito…” ‘devolve “Teste Feito…”

Split() Divide uma string num array, escolhendo o critériode separaçãoEx. resultado = Split(“IstoKéKmaisKumKteste.”, “K”, -1, 1) ‘ devolve ; ‘ resultado(0) = “Isto” ‘ resultado(1) = “é” ‘ resultado(2) = “mais” ‘ resultado(3) = “um” ‘ resultado(4) = “teste.”

Sqr() Devolve a raiz quadrada de um valor

StrComp() Compara duas strings, devolvendo um valor, noque respeita se são iguais ou não.A estrutura desta função é StrComp(var1,var2,tipo)Var1 e var2 são duas strings à escolha, o tipopode ser definido por 0 (comparação entrebinários) ou 1 (comparação entre textos)Ex. var1 = “Teste”

var2 = “ TesTE”StrComp( var1, var2) ‘ devolve 1StrComp( var1, var2, 0) ‘ devolve –1StrComp( var1, var2, 1) ‘ devolve 0

StrReverse() Devolve uma string dada, invertendo-aEx. StrReverse(“123456”) ‘ devolve “654321”

String() Devolve repetidamente um caracter escolhidoum número de vezes definidoEx. String(“C”,10) ‘ devolve “CCCCCCCCCC”

Tan() Devolve a tangente de um determinado número

Page 47: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

47CAPÍTULO 3: FUNÇÕES

Time() Devolve a hora do sistema

TimeSerial() Devolve uma hora para hora,minuto e segundos especificados

TimeValue() Devolve uma hora válida daquela que é pedida

TypeName() Devolve o tipo de variável que estamos a usarEx. TypeName(“ASP”) ‘ devolve “String”

TypeName(12.40) ‘ devolve “Double”.TypeName(NullVar) ‘ devolve “Null”TypeName(ArrayVar) ‘ devolve “Variant()”.TypeName(6) ‘ devolve “Integer”

UBound() Devolve o maior valor da dimensão de um array

Ucase() Devolve uma string em ‘upper case’Ex. LCase(“Estamos em Setembro.”)

‘ devolve “ESTAMOS EM SETEMBRO.”

VarType() Parecido com TypeName(), mas devolve um valorcorrespondente aos dados da variável a validar.Os números possíveis de resposta são:

0 – Vazio 1 – Null2 – Integer 3 – Long4 – Single 5 – Double6 – Currency 7 – Date8 – String 9 – Object10 – Error 11 – Boolean12 – Variant 13 – Data Access Object

(DAO)17 – Byte 8192 – Array

WeekDay() Devolve o dia da semana de uma dada dataEx. WeekDay (“Outubro 10, 1999”)

‘ devolve 1 que representa Domingo

WeekDayName()Devolve por extenso o dia da semana de umadada dataEx. WeekDayName (1)

ouWeekDayName(WeekDay (“Outubro 10, 1999”))‘ devolvem ambas as expressões domingo

Year() Devolve o ano de uma dada data

Page 48: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES48

Apesar da existência de um número considerável de funções nasASP estas vingam não pela quantidade das mesmas, mas sim, nosobjectos que existem. Com os objectos que as ASP disponibilizam,o leitor poderá criar potentes funções próprias, ou componentes pa-ra estas em Visual Basic.Este assuntos serão abordados noutros capítulos, mas que não te-rão nexo se o leitor não conhecer o funcionamento de procedimen-tos e funções em ASP, ou até mesmo o uso de ficheiros externos.Neste capítulo ainda não irá aprender como interagir com o utilizador,mas sim tratar de todo o tipo de dados e/ou variáveis que lhe pode-rão aparecer.

3.2 As nossas FunçõesO leitor tem acesso a todas as funções disponíveis pelas ASP 2.00,e a partir de agora pode definir as suas próprias funções. Não es-quecer que as ASP 3.00 vêm com o Windows 2000 e o seu IIS5,como indicado no primeiro capítulo. Nos próximos casos as fun-ções que vão ser criadas serão para situações que por vezes apa-recem na programação de sites Internet.Neste primeiro exemplo criou-se uma função que devolve o númerode 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 ‘ caso contrário ‘ enviamos a data como inválida, em forma de informação a2001 = “Data inválida...” end if ‘ final do ifEnd Function ‘ final da função

Response.Write “Hoje é “ & now() & “<br><br>” ‘ escreve a datacorrente‘ escreve-se então o resultadoResponse.write “Faltam “ & a2001(now()) & “ dias até ao ano 2001.”%>

Page 49: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

49CAPÍTULO 3: FUNÇÕES

Foram usadas as seguintes funções:

IsDate() para nos certificarmos se a dada data tinharealmente um formato válido de data;

DateDiff() que retorna o número de dias até ao ano 2001(o número de dias pois é isso que foiestabelecido, aquando do campo “d”);

Now() dá-nos a data corrente, que incluias horas.

Como se viu, as funções têm uma estrutura própria:

Function nome_da_funcao(variavel1, variavel2, variaveln)…….Nome_da_funcao = resposta

End Function

Fig. 3.1 - Resultado do ficheiro cpt3-2-1.asp

A maneira de chamar uma função é simples, basta o uso do nomeda função em qualquer ponto do código.

No próximo exemplo pretende-se saber se um e-mail é válido. Destamaneira o programa valida algo que perturba muitos programado-res, para tentarem que o input dos utilizadores seja o mais correctopossível, e os e-mails introduzidos sejam o mais correctos.

Page 50: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES50

(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([email protected]) 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 IfEnd 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 ifif 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%>

Foram usadas as seguintes funções:Len() retorna o tamanho de uma string, para

sabermos se tem o tamanho mínimopretendido para um e-mail normal

InStr() muito usado para nos certificarmos daexistência do símbolo @ ou de um pontofinal, sempre usado antes da extensãodo domínio.

O leitor tem assim, uma função que lhe valida todos os e-mails quereceber como input.

Page 51: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

51CAPÍTULO 3: FUNÇÕES

Fig. 3.2 - Resultado do ficheiro cpt3-2-2.asp

Como se pode ver mais nitidamente na figura, os e-mails que foramusados para testar foram validados correctamente, pelo menos den-tro das regras que foram pré-definidas. O leitor pode alterar as re-gras para a validação do e-mail. Outro ponto que por vezes nos tocaé referente à criação dinâmica de ComboBox. Estas caixas, usadasem formulários do HTML, têm um aspecto conhecido por todos osprogramadores: carrega-se num botão que faz aparecer uma listacom várias opções. Neste exemplo será criada uma função paracriar essa caixa (ComboBox) a partir de um array. No capítulo debases de dados, esta mesma função é alterada para se poder criarcom dados retirados de uma base de dados real.

Neste momento é criada uma ComboBox. O código HTML é sim-ples de se perceber. Em relação ao ciclo FOR, este vai-se repetindoenquanto não chegar ao limite do tamanho do Array com a funçãoUbound().

Page 52: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES52

(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

Dim ardados(3) ‘ inicialização de array

Ardados(0) = “Alentejo”Ardados(1) = “Minho”Ardados(2) = “Algarve”Ardados(3) = “Beira-Litoral”

%><form>Viajar Para ? <%=criacaixa()%></form>

Foram usadas as seguintes funções:UBound() retorna o tamanho de um array, necessário

neste caso para sabermos até queponto podemos ir com o ciclo FOR.

Fig. 3.3 - Resultado do ficheiro cpt3-2-3.asp

Page 53: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

53CAPÍTULO 3: FUNÇÕES

Como se pode ver, foi usada a linha <%@ Language=”VBScript” %>que serve para o programador ter acesso mais facilitado ao códigoASP, que é conhecido como o VBScript do lado do servidor. O IISinterpreta código, e acaba por percorrer todas as linhas, quer te-nham ASP ou não, se indicarmos no ínicio do ficheiro de que se tratade um ficheiro com VBScript, a sua performance será melhorada,mas não é essencial o uso desta linha no ínicio do código.Algo também muito comum são os gráficos correspondentes a opi-niões, ou outros, para transmitir informação a partir dos dados embases de dados. No exemplo seguinte pode-se perceber o truque decriar gráficos em HTML, que servem para esse mesmo propósito. Ocódigo seguinte é bastante explícito nesse ponto. O truque é o decontrolar o tamanho das células das tabelas de HTML com os valo-res indicados pelo programa, que os pode aceder de qualquer lado,mas neste exemplo indicados array a array.

(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> <% NextEnd Function

Dim ardados(3,3)

Ardados(0,0) = “Primeiro”ardados(0,1) = 100ardados(1,0) = “Segundo”ardados(1,1) = 40ardados(2,0) = “Terceiro”ardados(2,1) = 60ardados(3,0) = “Quarto”ardados(3,1) = 18

criagrafico()

%>

Page 54: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES54

Os gráficos foram criados de uma maneira mais ‘primária’ por as-sim dizer, pois existe a hipótese de se utilizar componentes comer-ciais que criam ficheiros de extensão GIF em tempo real com todoo tipo de gráficos que se podem encontrar, por exemplo, no MicrosoftExcel. Desta maneira, os gráficos são de barras e muito mais rápi-dos a processar.

Fig. 3.4 - Resultado do ficheiro cpt3-2-4.asp

Como se pode ver pela imagem, o gráfico é coerente, e as barraspercebem-se bastante bem. O programador pode controlar melhoro tamanho do gráfico, pode usar imagens ou mesmo outras cores.A imagem que podemos ver é o resultado do gráfico no InternetExplorer (IE). No Netscape o resultado é algo diferente, mas issotem a haver com a maneira como esse traduz o código HTML emrelação às tabelas. Mas no resultado percebe-se sempre o mesmo,por isso não existem problemas em usar este tipo de código paragerar gráficos de barras.

3.3 Uso de SSI (Server Side Includes)com as nossas funções

Os SSI, vão ser certamente algo que o leitor vai usar bastante, poisalém de poder separar o código HTML em vários ficheiros, e estruturara página principal da maneira que lhe convém (dinamicamente), podeter algo como que uma biblioteca de funções própria. Digamos queo programador tem várias funções que usa normalmente nos sites

Page 55: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

55CAPÍTULO 3: FUNÇÕES

que mantém, ou que repete bastante nas várias páginas de ummesmo site. Com os SSI, o programador introduz todas as funçõesque quer num ficheiro, que por sua vez é chamado no início do códi-go ASP. A partir daí todas as funções desse ficheiro estão acessí-veis na programação dessa página ASP. Devemos usar os SSI paraaquele tipo de código que sabemos vai ser alterado em várias pági-nas. Dessa maneira, bastará alterar uma vez, para que todas aspáginas fiquem actualizadas com o novo código.

A maneira de se chamar um ficheiro dentro de um ASP (uso deSSI), tenha ele parte de código HTML, ou de ASP, é <!—#INCLUDEFILE=”ficheiro.inc”—> . Este código é introduzido no código HTML,e não no de ASP. Mas tem de estar num ficheiro de ASP e não no deum de HTML - um pouco confuso! Vejamos então os seguintes fi-cheiros, criados a partir de tudo aquilo que temos vindo a criar nestecapítulo, e recorrendo ao uso de SSI (chamada de ficheiros exterio-res para complementar a programação).

Vamos então criar um ficheiro que tem o nosso topo de página HTMLpor defeito. Esse ficheiro ficará com uma extensão diferente (*.inc)para se poder diferenciar dos outros. Pode-se criar HMTL e ASPnesse 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>

Foram usadas as seguintes funções:

FormatDateTime() formata a data escolhida, neste casocom um Formato de tipo 2;

Now() é usada para que seja formatada adata corrente.

Page 56: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES56

Depois de criado um ficheiro para os topos de todas as páginasASP, criamos um ficheiro como exemplo para usar esse outro. Éum ficheiro simples, que serve apenas para demonstrar aspotencialidades do uso de SSI.

(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>

Fig. 3.5 - Resultado do ficheiro cpt3-3-1.asp

Para perceber melhor a grande vantagem das SSI vamos criar umficheiro ASP com todas as funções que foram criadas neste capítu-lo, e usá-las todas na mesma página, sem termos de ter todo ocódigo das funções na ASP que programamos.

Page 57: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

57CAPÍTULO 3: FUNÇÕES

(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 ifEnd 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 End If End IfEnd 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> <% NextEnd Function%>

Page 58: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES58

Como foi visto o ficheiro cpt3-3-2.asp tem todas as funções criadasneste capítulo. Iremos incluí-lo com a potencialidade dos SSI numaoutra página que usaremos para demonstrar as funções. Foi altera-do o nome de um dos arrays, para que não existissem conflitosentre ambas as funções. De futuro, as funções recebem osparâmetros, para não nos preocuparmos com este tipo de situa-ções. Vemos então no exemplo a seguir, introduzido através de SSI,o ficheiro cpt-3-3-2.asp . Para as ASP é como se todo aquele códigoestivesse presente no ficheiro, tomando todas as funções como lo-cais. A partir deste momento podemos utilizar o ficheiro e todas assuas funções.

(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 ano2001.<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 ifif 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

Dim ardados(3) ‘ inicialização de array

Ardados(0) = “Alentejo”ardados(1) = “Minho”ardados(2) = “Algarve”ardados(3) = “Beira-Litoral”

%>

Page 59: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

59CAPÍTULO 3: FUNÇÕES

<br><br><form id=form1 name=form1>Viajar Para? <%=criacaixa()%></form><br><%

Dim ardados2(3,3)

Ardados2(0,0) = “Primeiro”ardados2(0,1) = 100ardados2(1,0) = “Segundo”ardados2(1,1) = 40ardados2(2,0) = “Terceiro”ardados2(2,1) = 60ardados2(3,0) = “Quarto”ardados2(3,1) = 18

criagrafico()

%>

O resultado na imagem seguinte é bastante explícito daquilo que sepretendia. Temos todas as funções a funcionar, e podendo funcionarem todos os ficheiros ASP que o programador tiver para o seu site,com apenas a inserção de uma linha de código no topo de cadapágina ASP.

Fig. 3.6 - Resultado do ficheiro cpt3-3-3.asp

Agora o leitor poderá estender toda a sua programação num só fi-cheiro, pelo menos as funções que acha virem a ser aquelas quemais vai utilizar.

Page 60: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro
Page 61: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

44Objectos

4.1 Tabela de Objectos 62

4.2 Variáveis globais e de sessão 65

4.3 Interagir com o utilizador

4.3.1 Exemplo: Responder ao utilizador

com os dados recolhidos 72

4.3.2 Exemplo: Validar formulário 73

4.3.3 Exemplo: Curso online 81

4.3.4 Exemplo: Protecção de páginas

com password 88

4.4 Ficheiro global.asa4.4.1 Exemplo: Quantos utilizadores estão

a visitar a página 100

4.4.2 Exemplo: Chat em Browser 102

4.5 Cookies, dados do utilizador e do servidor

4.5.1 Exemplo: Recolher dados do utilizador105

4.5.2 Exemplo: Páginas personalizadas 107

4.6 Formatação de strings 108

Page 62: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES62

4.1 Tabela de ObjectosOs objectos que as ASP têm por defeito parecem ser poucos, masos seus métodos são os suficientes para que o leitor consigaalcançar os objectivos pretendidos para o seu site. A maneira deusar os objectos é bastante simples, e intuitiva, funcionando comoos objectos das outras linguagens.

TABELA DE OBJECTOS DAS ASP

Objectos Métodos e suas funções

Response · Redirectusado para redireccionarmos o utilizador paraoutra página. Usado normalmente para controlode utilizadores e acessos.

· Cookiesmecanismo para deixar informações do lado docliente com variada informação (dentro dascookies existem outros métodos para o seucontrolo, como veremos depois em pormenor).

· Writeé esta a maneira para enviar informação para obrowser.

· CacheControldesta maneira controlamos se a página podedeixar que se faça cache da mesma nosbrowsers (por defeito não deixa fazer cache).

· Charsetuma maneira de definirmos o tipo de caracteresa usar.

· ContentTypepara definir o tipo de informação que vai serpassada, usado normalmente para UpLoad ondedefinimos que queremos passar não só informa-ção usual, mas também binária, originária deficheiros.

Page 63: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

63CAPÍTULO 4: OBJECTOS

· Expiresuma maneira de definir o tempo que uma páginaficará activa e deixará de estar disponível. Nestecaso definimos ao fim de quanto tempo expirará.

· ExpireAbsoluteidêntico ao Expires, com a diferença que se podecontrolar, não com o valor que define ao fim dequanto tempo, mas sim com uma data quedefine a altura em que deixa de estar disponível.

· IsClientConnected – desta maneira controla-mos se o cliente ainda está ligado.

· Statusdefine o código que está no HTTP header.

· AddHeaderAjusta dinamicamente a informação que está noHTTP header.

Request · Cookiesneste caso será usado para ir buscar os cookiescriados com o objecto response.

· Querystringdesta maneira poderemos obter os valores que vêmda página anterior, depois de submetermos umformulário com o método GET.

· Formeste método permite-nos obter os dados enviadospor um formulário que esteja com o método POST.

· ServerVariablesusa-se muito este método para identificar os tiposde browsers que o cliente está a usar, os IPs domesmo, a página de onde o cliente veio, assimcomo variadas informações sobre o servidor queestá a ser usado.

Page 64: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES64

Server · HTMLEncodeo método que formata a informação que o utilizadorinsere. Esta formatação é muito importante devidoa alguns símbolos serem reconhecidos pelo HTML,e por esse motivo o layout pode não ter o aspectoplaneado

· URLEncodeparecido com o HTMLEncode, mas formata a stringde maneira a ser válida para usar na linha deaddress dos browsers.

· CreateObjecté esta a maneira como iremos aceder a objectosexteriores, assim como componentes criados pornó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 nossosficheiros localmente (no servidor).

Session · Timeoutas sessões do servidor têm um limite, ao fim doqual toda a informação contida nas sessionsdesaparecem. Desta maneira poderemoscontrolar o tempo que as sessões estão activas.

· SessionIDeste é o método que nos dá o nuúmero da sessãodo cliente corrente. São uma espécie deimpressão digital das sessões.

· Abandonforça a finalização das sessões.

Application A variável global, mas idêntica para todos osutilizadores, ao contrário das sessions que sãovariáveis do tipo global, mas só para o cliente queestá nessa sessão.

TextStream · CreateTextFilemétodo de criação de ficheiros de texto.· OpentextFilemétodo de leitura dos ficheiros de texto.

Page 65: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

65CAPÍTULO 4: OBJECTOS

A estrutura de um objecto e seu método é do tipo objecto.método,logo, para criar-mos, por exemplo, um cookie, usamosresponse.cookies, e para obter o valor introduzido na cookie, usare-mos então request.cookies.Depois de se ver esta tabela, muitas questões ficam no ar, em rela-ção a vários métodos que aqui descrevemos. A sua grande maioriavai ser aprofundada nos próximos capítulos, mas iremos tratar algunsdeles ainda neste capítulo, assim como desenvolver exemplos reaisde como usufruir ao máximo destes objectos.

4.2 Variáveis globais e de sessãoAs variáveis globais/sessão, serão uma das hipóteses que o pro-gramador terá para poder passar dados de base de uma páginapara a outra. Normalmente quando se passa de uma página paraoutra, as variáveis da primeira página deixam de funcionar numasegunda. A maneira de ultrapassar este obstáculo é usando os ob-jectos Application e Session. Apesar de ambos os objectos seremusados para variáveis globais, cada um tem um objectivo diferente,e um comportamento diferente dentro do contexto da programaçãode páginas ASP. Para o leitor perceber como ambas funcionam ex-plica-se então como funciona o servidor de Internet que suporta asASP:

O servidor Internet faz um controlo de acessos às páginas que con-tém sob sua alçada, e por isso cria um ID para cada acesso HTTPque é feito na máquina onde está instalado e a correr. Desta forma oservidor consegue fazer uma estatística mais pormenorizada, que agrande maioria dos outros não conseguem. A partir do momentoque o programador tem acesso a este ID, poderá seguir o rasto(pormenorizado) daquilo que esse utilizador faz, dentro do site. O IDde sessão, que pode aceder-se por session.sessionID, termina epassa a ser outro a partir do momento que o browser é desligado, ouque passa o tempo limite de uma sessão, que se pode aceder porsession.TimeOut . Cada pessoa que está a aceder ao site tem umID diferente, assim como que cada sessão é diferente, podendo oprogramador usar as sessões, para passar de variáveis de umapágina para outra, visto que a ligação apenas se quebra no desligardo browser, ou no atingir do limite de tempo das sessões. Pode-sever pelo código seguinte o ID de uma sessão e o tempo limite queestá por defeito no servidor.

Page 66: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES66

(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.”%>

Foram usadas os seguintes objectos:

Response.Write objecto usado para escrita, tanto emcookies, browser, headers, etc.

Session.SessionID a maneira de saber qual o código dasessão no momento.

Session.Timeout devolve o tempo de expiração dassessões, definido no momento.

Fig. 4.1 - Resultado do ficheiro cpt4-2-1.asp

Podemos então usar o objecto Session para passarmos todo o tipode variáveis de uma páginas ASP para outra. Aqui então está umexemplo em que passamos uma string entre duas páginas. Ter ematenção de que estas variáveis ficam acessíveis não só na páginaque se corre em seguida, mas em todas aquelas que pertencerema esse site. Por isso se para chegar-mos a um ficheiro C começan-do em A, tenhamos de passar por B, a sessão criada em A continuaactiva.

Page 67: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

67CAPÍTULO 4: OBJECTOS

(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>

Foram usadas os seguintes objectos:

Session(“Teste”) a maneira de saber qual o código dasessão no momento;

Session.TimeOut neste ficheiro usámos este objectocom este método, de maneira aalterarmos o tempo limite de umasessão.

A possibilidade de podermos alterar o tempo limite de uma sessão émuito importante, tanto para sites de protecção por password, comopara sites mais pesados, onde necessitamos de mais tempo, poisuma página que demore muito tempo a abrir, ou a processar algobastante pesado, possa demorar mais de 1 minuto, e nessa altura asessão deveria ter um mínimo de 2 minutos. Aqui também pudemosver como é possível usar “ “ dentro de uma string, ou então lá criaralgo com os mesmos. Visto que as “ “ são usadas para conter strings,e outro tipo de dados, o programador para as usar terá de criar umaa mais por cada uma que lá introduzir. Tal como está no ficheiro, quevimos anteriormente.

No ficheiro cpt4-2-2.asp temos então a possibilidade de ver comose altera o objecto que controla o tempo das sessões, e como criaruma sessão nossa, e lá introduzir dados que queiramos estaremacessíveis em uma ou várias páginas.

Este ficheiro vai chamar um outro (cpt4-2-3.asp) para que o leitor seaperceba da maneira como foi possível criar uma sessão própria eaceder à mesma, a partir de outras páginas.

Page 68: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES68

(ficheiro cpt4-2-3.asp)

Podemos ver que a variável de sessão trazida da página anterior é<strong><font face=”ARIAL” color=”RED” size=3><%=Session(“Teste”)%></font></strong>

Aqui nada de novo a não ser a maneira como foi acedida a sessãocriada 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 omínimo uso destas variáveis, para que não atrapalhem a performancedo servidor Web. Não aconselho que isto seja levado à risca, masse estiver de posse de um servidor que tem uma média de 10.000acessos diários, aí a recomendação da Microsoft deve ser levadamais a sério. Caso contrário, e por experiência própria, não existemmotivos de preocupação se usar este tipo de variáveis em excesso.

Fig. 4.2 - Resultado do ficheiro cpt4-2-2.asp

Fig. 4.3 - Resultado do ficheiro cpt4-2-3.asp

Page 69: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

69CAPÍTULO 4: OBJECTOS

As imagens são bem elucidativas em relação ao uso de uma ses-são criada pelo programador. Da mesma maneira que criada umasessão para suportar uma string, o leitor poderá usar para criar umarray ou número. As hipóteses são imensas, e a programação aeste nível é bastante facilitada com este objecto.

Outro objecto que é usado para tratar de variáveis globais éApplication, que é criado e acessível tal como se faz com as ses-sões, com a particularidade que para o alterarmos tem-se de seguircertas regras.

A grande diferença entre Application e Session é que enquanto asvariáveis criadas pelo segundo são acedidas apenas pelo utilizadordo momento, ou por aquele a quem pertence um SessionID, as va-riáveis Application são acedidas por todos os utilizadores, todos osSessionID. Fica assim um esquema para o leitor perceber melhorcomo isto funciona.

Fig. 4.4 - Funcionamento das variáveis globais

Pelo esquema pode-se reparar que para cada utilizador existe umasessão independente, enquanto a variável de Application é igual paratodos.Vemos então um exemplo de como criar e aceder a uma variável deApplication. Repare que existem dois métodos Lock e UnLock paraque a mesma possa ser alterada. Para aceder à mesma não é ne-cessário usar as regras ditas anteriormente, e visíveis no exemploseguinte:

Page 70: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES70

(ficheiro cpt4-2-4.asp)

<%Application.LockApplication(“Teste2”) = “Uma variável acessível por todos os utilizadores...”Application.UnLockResponse.Write “ Avariável Application(“”Teste2"”) é > “Response.Write Application(“Teste2”) & “ <“%>

Foram usados os seguintes objectos:

Application.Lock serve para trancar a variável aosutilizadores, de maneira a poder seralterada a variável;

Application(“Teste2”) da mesma maneira que se usa asSessions, pode-se criar umavariável e aceder à mesma;

Application.UnLock usado para depois que é alterada avariável, tirando o Lock.

Fig. 4.5 - Resultado do ficheiro cpt4-2-4.asp

Page 71: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

71CAPÍTULO 4: OBJECTOS

4.3 Interagir com o utilizadorAquilo que realmente faz a diferença entre as páginas estáticas e aspáginas dinâmicas é a possibilidade de resposta aos utilizadoresem tempo real. Podem-se programar páginas que recebendo uminput de um utilizador, estas respondem de acordo com os dadosrecolhidos, e isso não se pode fazer apenas com HMTL, e outrosrecursos básicos.

Para se recolher dados do utilizador é necessário criar uma estrutu-ra que permite o utilizador inseri-los, de maneira que o programadorpossa trabalhar com os mesmos. Em primeiro lugar é criado umformulário HTML, que tanto pode estar numa simples página HTML,como numa página ASP. O utilizador pode ter uma página HTMLcom o formulário que depois de submetido vai buscar um ficheiroASP, onde o programador pode recolher os dados e trabalhar sobreeles. Ou então o programador numa mesma página ASP controla oinput que é feito, e conforme o estado em que o contexto se encon-tra, conforme a acção que é accionada. Mas com os ficheiros deexemplo seguintes, o leitor vai perceber as diferenças.

(ficheiro cpt4-3-1.html)

<form action=”cpt4-3-1.asp” method=”POST”>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”></form>

Foram usadas as seguintes Tags:

Application.Lock serve para trancar a variável aosutilizadores, de maneira a poder seralterada a variável;

Application(“Teste2”) da mesma maneira que se usa asSessions, pode-se criar umavariável e aceder à mesma;

Application.UnLock usado para depois que é alterada avariável, tirando o Lock.

Page 72: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES72

(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> !

Foram usados os seguintes objectos e funções:Request.Form(...) mecanismo para ir buscar os dados

que vinham do formulário anterioronde estava o método POST.

Fig. 4.6 - Resultado do ficheiro cpt4-3-1.html

Nesta primeira imagem vemos o formulário em que o utilizador vaiintroduzir os seus dados, e temos a imagem que mostra os dadosque o mesmo disponibilizou.

Fig. 4.7 - Resultado do ficheiro cpt4-3-1.asp

Page 73: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

73CAPÍTULO 4: OBJECTOS

(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%>

Usando um só ficheiro ASP simulamos os dois ficheiros anteriores,num só, poupando ‘burocracia’ algorítmica.

Fig. 4.8 - Resultado inicial do ficheiro cpt4-3-2.asp

Page 74: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES74

Fig. 4.9 - Resultado final do ficheiro cpt4-3-2.asp

Como se pode ver por estas duas últimas imagens, o resultado é omesmo, com a grande diferença que neste segundo exemplo usa-mos sempre o mesmo ficheiro. Isto pode ser bom para poupançade recursos, mas para sites com muitos acessos pode dar os seusproblemas, visto que com muitos acessos deve-se ‘separar o malpelas aldeias’, e ter vários ficheiros ASP a tratar dos dados.

Já foi visto como criar um formulário, como obter os dados aí cria-dos, como os mostrar no browser, mas, falta ainda, tratar os dadose validá-los de forma aos mesmos preencherem os requisitos quepretendemos para uma qualquer aplicação. Digamos que temos umsite que serve para simular uma atribuição de bolsa de estudo. Pre-tendemos o nome do aluno, a data de nascimento, a média do últi-mo ano e o rendimento mensal dos pais. Vamos criar uma fórmula(de forma alguma a usada na realidade), onde todos os alunos on-line podem ficar a saber se vale a pena candidatarem-se ou não.Vamos então dizer ao aluno que tem hipótese ao candidatar-se numdos seguintes casos:

- rendimento mensal dos pais menor ou igual a 80.000$00 e média maior que 11 valores;

Page 75: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

75CAPÍTULO 4: OBJECTOS

- rendimento mensal entre 80.000$00 e 100.000$00 e média maior que 13 valores;

- rendimento mensal entre 100.000$00 e 160.000$00 e média maior que 16;

- média maior que 18;

- o aluno não pode ter menos de 10 anos e mais de 28.

Não vamos aprofundar muito com questões das quantidades envol-vidas, mas vamos então pedir os dados necessários para que pos-samos dizer se tem hipótese ou não no caso de se candidatar. Alémde dizermos isso, vamos calcular a idade do aluno pela data denascimento. Desta forma o leitor perceberá mais alguns pontos dedesenvolvimento ASP a este nível e poderemos então criar umpequeno curso online que demonstra muito genericamente uma dasgrandes potencialidades da Internet, a formação online.

Continuando então, vamos criar o formulário com as perguntas, enão esquecendo os nomes de cada Tag de input, nomes esses queserão os identificadores no uso do objecto request.

Vamos por partes, neste caso vamos estudar a estrutura a desen-volver. Separemos por partes o que vai ser feito:

- Formulário de pedido de dados do aluno;

- Validação dos dados do aluno;

- Apresentação do resultado.

Estas 3 fases distintas podem ser feitas em 3 procedimentos dife-rentes. Criaremos um procedimento formulario(), dados_validar() eresposta(). Ficamos assim com os 3 pontos definidos. Basta agoracriar o código que os vai colocar em produção.

Comecemos pelo formulário que vai pedir os dados ao utilizador:

Page 76: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES76

<%Sub formulario()%><p align=”center”><I><b><font size=”4" color=”#800000">Simulador de Bolsas deEstudo</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%>

Page 77: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

77CAPÍTULO 4: OBJECTOS

Fig. 4.10 - Resultado do formulário do ficheiro cpt4-3-3.asp

Como o leitor deve ter reparado foram introduzidos como variáveispor defeito alguns Request.Form (), isto porque não queremos queo utilizador perca os dados por cada vez que faça um erro ou quequeira voltar atrás, na sua simulação. Desta forma garantimos queos dados estão sempre nos sítios certos. No caso de se recomeçaruma simulação, por defeito os Headers dos ficheiros HTML ficamem branco à espera de novo Submit do formulário. A variávelsession(“erro”) serve para mostrar uma mensagem de aviso emrelação aos dados que foram introduzidos incorrectamente, que ten-tamos manter cada vez que tudo estiver validado e correcto, paraque quando se recomece o formulário ainda lá esteja essa mesmamensagem.

Assim, com este código, ficamos com um formulário que além dereceber input do utilizador, envia os dados para uma nova fase, queé a fase de validação.Para validar-mos estes dados precisamos de os receber, e paraisso foi usado no código inicial o seguinte código:

nome = Request.Form(“nome”)data = Request.Form(“dia”) & “-” & Request.Form(“mes”) & “-19” &

Request.Form(“ano”)media = Request.Form(“media”)rendimento = Request.Form(“rendimento”)

Page 78: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES78

Este código é introduzido antes de se usarem os procedimentospois queremos que as variáveis sejam dadas como variáveis públi-cas dentro deste ficheiro ASP. Desta forma, é mais fácil tratar osdados e escusamos de estar sempre a usar o código Request.Form(“…..”), bastando assim apenas o nome que atribuímos a cada umdos argumentos que são passados. A variável Data fica com umaformatação diferente, pois queremos construir uma data real, paraque no uso da função IsDate() disponhamos à partida de algo se-melhante para validação.

<%Sub dados_validar()%><%session(“erro”) = “”‘ se não for data a variável de sessão fica com o erro correspondenteif 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 ifend ifif session(“erro”)<>”” then formulario else respostaend if%><%End Sub%>

Como se viu foram validadas todas as variáveis que o formulárioapanhou do utilizador, e validadas conforme aquilo que se pretendia:a data validada como data e o rendimento e média do aluno comonúmeros, para que não sejam aceites letras ou outros caracteresidênticos. E no final é chamado o formulario() ou o procedimentoresposta(), conforme o que se pretende. No caso de existir algumerro nas variáveis que foram pedidas, o utilizador é enviado nova-mente para o formulário, que mantém os dados anteriores, visto queos está sempre a apanhar com Request.Form(). Caso contrário, evisto que está tudo certo, o utilizador recebe a resposta em relaçãoà sua simulação. Esta resposta é dada a partir do código que vemosa seguir.

Page 79: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

79CAPÍTULO 4: OBJECTOS

<%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"> ,&nbsp;<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 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 é 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%>

Page 80: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES80

Fig. 4.11 - Resultado de validação do ficheiro cpt4-3-3.asp

Na imagem anterior, obteve-se uma resposta do formulário em rela-ção à média que o utilizador introduziu, que não sendo válida, pedepara que seja corrigida. Este tipo de correcção é feito também paraoutras variáveis, e o procedimento em si é o mesmo, mas commensagens de erro diferentes, correspondendo a cada uma das si-tuações de validação.

Fig. 4.12 - Resultado de resposta do ficheiro cpt4-3-3.asp

Page 81: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

81CAPÍTULO 4: OBJECTOS

Como podemos ver na imagem anterior, a resposta que se obtevefoi negativa, depois de se terem efectuadas as comparações comos requisitos definidos para a atribuição de bolsa ao estudante.Teve-se o cuidado de se criar uma tabela com um texto de respostapor defeito, que só altera as zonas que são correspondentes aosdados que o utilizador introduziu. Neste caso é usado o DateDiff (),para que os alunos com uma idade não válida para as bolsas sejamavisados disso. No caso contrário é enviada a resposta em relaçãoao apoio por Bolsa de Estudo.

Introduziu-se um link para o caso do utilizador querer recomeçar asimulação. Será aqui que tudo recomeçará, tendo em conta que avariável de sessão tem de estar vazia, ou o último erro continuaria aaparecer apesar de ser uma nova simulação. Por isso esta funçãocomeça com a sessão de erro a ser limpa, pois para se ter chegadoa este ponto era porque as variáveis estavam correctas.Depois desta explicação, podemos ver o código por completo, parapercebermos melhor o seu funcionamento.

(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"> ,&nbsp;<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

Page 82: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES82

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 deestudo.<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 ifend if

Page 83: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

83CAPÍTULO 4: OBJECTOS

if session(“erro”)<>”” then formulario else respostaend if%><%End Sub%>

<%Sub formulario()%><p align=”center”><i><b><font size=”4" color=”#800000">Simulador deBolsas 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%>

Page 84: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES84

<% 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%>

Foram usados os seguintes objectos e funções:

Session () usado neste caso para que tenhamos umavariável que guarde o tipo de erro que foiachado nos dados introduzidos peloutilizador;

DateDiff () DateDiff (), assim como está explicado natabela de funções, serve para devolver umadiferença entre duas datas, tanto em dias,anos, minutos, …. Neste caso usamos paradevolver os anos entre o dia de hoje, e a datade nascimento introduzida pelo utilizador.Esta variável é depois usada para sabermosse o mesmo reúne condições para poderreceber resposta da aplicação;

IsDate () O IsDate, devolve True ou False, conformea data indicada seja ou não uma data válida;

IsNumeric () Como o IsDate, este também é booleano, eindica se a variável é numérica ou não;

Request.Form () Esta é a maneira de o programa aceder aosdados submetidos pelo último formulário.

No seguinte exemplo é criado um curso online, bastante simples,de resposta múltipla. Este exemplo é importante, pois, caso o leitoro compreenda terá uma boa noção das potencialidades das variá-veis de sessão, e passagem de parâmetros entre vários procedi-mentos.

Necessitamos claro, de perguntas, respectivas respostas, valida-ção das respostas, e uma apresentação do resultado depois do tes-te.

Page 85: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

85CAPÍTULO 4: OBJECTOS

Definimos então alguns procedimentos:- Procedimentos de perguntas (onde teremos um formulário de per-gunta e respostas, que neste exemplo são 5, devido a serem 5 per-guntas);- Um procedimento, para enviar o total do teste, e respectiva men-sagem de aprovação ou reprovação.

Todos os procedimentos de perguntas terão então o aspecto do có-digo da seguinte tabela, mas com a diferença de que cada um temas suas perguntas e respostas, parte essa que terá de ser alterada.

<%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 &gt; <i>1 / 5<br> <br> </i></font></b> <FORM name=”pergunta1" action=”cpt4-3-4.asp” method=”POST”> <p> <font face=”Arial”>Qual o 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>

Page 86: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES86

</table> </center> </div> <p align=”center”><input type=”submit” value=”Responder”

name=”submeter”></p> </FORM>&nbsp; </td> </tr> </table> </center></div><%End Sub%>

Podemos ver por este exemplo que o código usado é praticamenteHTML puro, com a excepção do uso de uma variável de sessão queserve para podermos controlar em que pergunta vai o teste, de ma-neira que o utilizador seja enviado para a pergunta seguinte, e nofinal para o resultado do teste.

Fig. 4.13 - Pergunta do ficheiro cpt4-3-4.asp

Como se pode ver este é um teste de ASP. O leitor pode fazer testesde tudo o que quiser, e com o uso de bases de dados (a ver empróximo capítulo), pode criar vários tipos de testes usando apenasum procedimento para todos eles.Será então num outro procedimento, depois de todas as perguntasterem sido respondidas, que todas as variáveis serão limpas, demaneira a que se possa responder a um novo teste, ou tentar novasorte. Nesta fase, será feita uma validação de todas as respostas eincrementada uma variável com o total de valores do teste - alteradaconsoante a qualidade das respostas dadas.

Page 87: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

87CAPÍTULO 4: OBJECTOS

<%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%>

Como se pode observar, todas as variáveis de sessão devolvem asrespostas, que conforme estejam certas ou não irão serdeterminantes no desenvolvimento da variável local total, para a notafinal do teste online.Observando todo o código, teremos então uma noção mais real da-quilo que se pretende, pois com as primeiras linhas de código sepode perceber como todos os procedimentos são geridos.

Fig. 4.14

Page 88: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES88

(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 &gt; <i>1 / 5<br> <br> </i></font></b> <FORM name=”pergunta1" action=”cpt4-3-4.asp” method=”POST”> <p> <font face=”Arial”>Qual o 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>&nbsp; </td> </tr> </table> </center></div><%End Sub%>

Page 89: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

89CAPÍTULO 4: OBJECTOS

<%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 &gt; <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>&nbsp; </td> </tr> </table> </center></div><%End Sub%>

Page 90: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES90

<%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 &gt; <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%”><font face=”Arial”>Internet Information Server</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>&nbsp; </td> </tr> </table> </center></div><%End Sub%>

Page 91: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

91CAPÍTULO 4: OBJECTOS

<%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 &gt; <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>&nbsp; </td> </tr> </table> </center></div><%End Sub%>

Page 92: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES92

<%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 &gt; <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>&nbsp; </td> </tr> </table> </center></div><%End Sub%>

Page 93: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

93CAPÍTULO 4: OBJECTOS

<%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”) = “”session(“npergunta”) = 0%>

<%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%>

Page 94: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES94

Foram usados os seguintes objectos e funções:Session () muito usado neste exemplo, este objecto

tem tanto o número da última pergunta, paraque possamos direccionar o utilizador paraa pergunta seguinte, como as respostas dasrespectivas perguntas;

Request.Form () Tal como noutros exemplos, recebe osvalores que foram enviados por formulário.

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 queestes têm de activação. Parece algo que requer alguma programa-ção mais avançada, mas será o exemplo onde terá de ser escritoum mínimo de código de programação. Tudo o que o leitor tem decriar é um ficheiro, formulário onde o utilizador irá introduzir o login ea password, a mensagem de erro, e o envio para a página principaldo site protegido, que por sua vez, só pode ser acedido depois dologin e password serem validados.

Vamos então dividir o ficheiro de entrada e validação de dados em 3partes: a primeira parte será aquela em que serão pedidos os dadospor intermédio de um formulário, a segunda parte será a zona ondeaparecerá uma mensagem de erro, no caso de os dados estaremerrados, e a terceira a zona onde se controla qual dos procedimentosé executado.

Vamos então ter de receber dados, que vamos introduzir em variá-veis de sessão, de maneira a que possamos ter os dados activosdurante o tempo que definirmos em Session.TimeOut Quandoreiniciamos a página e esses dados estiverem incorrectos, envia-mos o utilizador para uma mensagem de erro, caso contrário, seráencaminhado para a primeira página protegida. As páginas protegi-das deverão então ter apenas 3 linhas de código, de maneira a com-pararmos o login e password que estão em variáveis de sessão.

(ficheiro cpt4-3-5.asp)<%Sub formulario%><FORM action=”cpt4-3-5.asp?todo=in” method=”POST”><div align=”center”> <center> <table border=”1" width=”250" bgcolor=”#FFCCFF”> <tr> <td width=”100%”> <center><font size=”4">Controlo de Acessos</font></center> </center> <div align=”center”>

Page 95: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

95CAPÍTULO 4: OBJECTOS

<table border=”0" width=”96%”> <tr> <td width=”50%”> <p align=”right”><font face=”Arial”>Login:</font></td> <center><center> <td width=”50%”><input type=”text” name=”login” size=”8"></td> </tr> </center></center> <tr> <td width=”50%”> <p align=”right”><font face=”Arial”>Password:</font></td> <center><center> <td width=”50%”><input type=”password” name=”password”

size=”8"></td> </tr> </table><br><input type=”submit” name=”submete”

value=”Submeter”><br> </center> </div> </td> </tr> </table> </center></div></FORM><%End Sub%><%Sub erro%><center><br><br><br><font face=”ARIAL” color=”RED” size=”6">ERRO, login e password errados...</font><br><br><a href=”cpt4-3-5.asp”>tente de novo</a></center><%End Sub%><%session.Timeout = 4 ‘ o tempo que as sessões vão estar activassession(“login”) = Request.Form(“login”) ‘ vamos buscar os últimos dados de loginsession(“password”) = Request.Form(“password”) ‘ e de passwordif Request.Querystring(“todo”) = “” then ‘ se o argumento estiver todo limpovamos ao formulário formulario else ‘ senão vamos ver o que têm as sessões no momento if ((session(“login”)<>”xpto” and session(“password”)<>”123") ANDRequest.Querystring(“todo”)=”in”) then erro ‘ neste caso o login e password não são validados else Response.Redirect(“cpt4-3-5test.asp”) ‘aqui o utilizador é

validado positivamente end ifend if%>

Page 96: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES96

Foram usados os seguintes objectos e funções:Session () terá as variáveis que simbolizam o login e

password. Estas serão comparadas noinício de cada página protegida, de maneiraa assegurar se o utilizador está validado ounão;

Session.Timeout () neste exemplo este método é usadopara definirmos o tempo em que as sessõesestão activas, ou seja, os minutos em queas sessões estão activas, depois dainactividade ocorrente no site.

Agora que vimos o código que recebe e valida a entrada de umutilizador vamos ver uma normal página ASP, que está protegida, aqual só é possível ao utilizador aceder, se validada a sua entrada noformulário. No início de todas as páginas ASP que queremos prote-gidas, fazemos uma comparação das variáveis de sessão de ma-neira a sabermos se estas são válidas ou não.

(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 vindo a esta página...</font></center>

Como ficou demonstrado, é simples a maneira de se poder protegerpáginas de um site. Além deste caso, o utilizador pode fazer umaconexão a uma base de dados, e usar apenas uma variável de ses-são que diz sim ou não, conforme seja validada ou não depois deinquirida a base de dados.

4.4 Ficheiro Global.asaMuitos programadores de ASP têm um certo receio de mexer nesteficheiro, ou até mesmo de programar usando o mesmo. Não há queter receio em mexer neste ficheiro, que acima de tudo é umatecnologia importante para certas soluções online, e que é uma dasarmas das ASP em relação a outras linguagens semelhantes. Quan-do entramos num site em servidor IIS existem 4 fases distintas quevou identificar de maneira a poder continuar com o meu raciocínio:

Page 97: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

97CAPÍTULO 4: OBJECTOS

1. o primeiro utilizador entra e o servidor fica alerta;2. o utilizador começa uma nova sessão, e essas sessõesque ele cria são as que utilizamos para variáveis globais, epara definir o tempo de acção das mesmas.3. o utilizador sai do site e a sua sessão acaba;4. o último utilizador do site sai e o servidor Internet deixa de estar alerta.

Depois de vistas estas 4 fases, posso agora demonstrar esta expli-cação do ponto de vista prático.

O ficheiro Global.Asa, é algo como que o controlador dos acessosao site que o programador criou, ou estiver a desenvolver. Este fi-cheiro tem apenas 4 funções distintas: a primeira é aquela que éactivada quando o site fica activo; a segunda é activada por cadavez que entra um utilizador; a terceira é activada por cada vez quesai um utilizador do site, e a quarta é activada quando o site deixa deter utilizadores. Desta maneira, podemos criar código dentro de cadauma destas zonas para nosso benefício. Por exemplo, o leitor querque seja introduzido num ficheiro de texto o endereço IP de cadautilizador que entra no site. Basta escrever dentro da segunda funçãodo ficheiro Global.Asa o código que cria essa linha no ficheiro decontrolo, para ter a certeza que cada acesso é registado. Ou sequisermos saber quanto tempo cada utilizador passa em média nosite, basta criarmos um registo de tempo de entrada na segundafunção, e um na terceira função, e mais tarde fazermos DateDiff()para sabermos a média que cada utilizador gasta no nosso site.O esquema de um ficheiro Global.Asa é o seguinte:

<SCRIPT LANGUAGE=”VBScript” RUNAT=”Server”>Sub Application_OnStartEnd Sub

Sub Session_OnStartEnd Sub

Sub Session_OnEndEnd Sub

Sub Application_OnEndEnd Sub

</SCRIPT>

Page 98: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES98

Como podemos ver tem apenas 4 procedimentos que são percorri-dos em determinadas situações.Este ficheiro tem de estar localizado no directório principal do site,usando o esquema que temos vindo a seguir ficará emc:\inetpub\wwwroot\livro\

Fig. 4.15 - Como deve estar configurado o nossodirectório virtual, onde queremos ter o site

Fig. 4.16 - Directório onde o ficheiroglobal.asa tem de ficar em função do

site virtual da imagem anterior

Page 99: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

99CAPÍTULO 4: OBJECTOS

Agora para testarmos a potencialidade deste ficheiro vamos saberquantos utilizadores estão neste momento no nosso site. Para issobasta criarmos uma variável que se incrementa no procedimentoSession_OnStart(), e que se decrementa no Session_OnEnd(). Destamaneira se estiverem 4 utilizadores ao mesmo tempo no site a vari-ável será 4. Se um deles sair passará a ser 3 pois houve uma ses-são que acabou. Da mesma maneira, por cada utilizador que entreno site essa mesma variável irá ser incrementada. Passando dateoria à prática vamos então editar o nosso ficheiro Global.Asa, quesuportará o controlo dos acessos ao site.

(ficheiro global.asa)

<SCRIPT LANGUAGE=”VBScript” RUNAT=”Server”>Sub Application_OnStart Session.Timeout = 3

Application.Lock Application(“utilizadores”) = 0 Application.UnLockEnd Sub

Sub Session_OnStartApplication.LockApplication(“utilizadores”) = Application(“utilizadores”) + 1Application.UnLock

End Sub

Sub Session_OnEnd Application.Lock

Application(“utilizadores”) = Application(“utilizadores”) - 1Application.UnLock

End Sub

Sub Application_OnEndEnd Sub</SCRIPT>

Foram usados os seguintes objectos e funções:

Session.Timeout () onde se define o tempo que vaidurar cada sessão. Se o utilizadorficar inactivo durante um certoperíodo de tempo (em minutos), afunção Session.OnEnd() activa-se eprocessa uma saída do site. Aqui va–mos definir esse tempo em minutos;

Page 100: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES100

Application.Lock () é o método usado para trancar avariável, de maneira que possa seralterada sem intervenções externas.Um meio de protecção dos dadosque estão lá incluídos;

Application (“utilizadores”) desta maneira obtemos umavariável global, onde todos osutilizadores têm acesso, de maneiraque todos podem aceder aos dadosrelativos ao número de utilizadoresdo site em questão;

Application.UnLock () neste método destranca-se avariável depois da mesma ter sidoalterada.

Depois de termos este ficheiro no local certo e com o código acimadescrito, está na hora de acedermos à variável de maneira a saber-mos quantos utilizadores estão online. Para isso basta apenas umalinha de código ASP, dentro do HTML que o leitor achar apropriadopara a apresentação deste valor.

(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>

Foram usados os seguintes objectos e funções:Application () aqui usado para podermos escrever

no browser o número de utilizadores queestão a navegar no nosso site.

Fig. 4.17 - Imagem do ficheiro cpt4-3-6.asp

Page 101: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

101CAPÍTULO 4: OBJECTOS

Como podemos ver nesta imagem, existem 4 utilizadores no site. Oleitor pode obter este valor abrindo várias janelas no browser e entrarneste mesmo site virtual.Esta é uma das formas de usar o global.asa para nosso benefício.Outra maneira é tentar criar um chat para os utilizadores do site. Otruque está em criarmos várias variáveis do tipo Application() e iractualizando cada uma delas conforme a introdução de informaçãopor parte dos utilizadores. Ao entrar uma nova linha de texto actuali-zam-se as variáveis, igualando a mais recente à imediatamente an-terior e assim consecutivamente. O ficheiro global.asa vai entrar aquinovamente - será onde as variáveis vão ser inicializadas.Neste exemplo teremos três ficheiros: um para controlar os frames,pois para este exemplo teremos de usar dois ficheiros em simultâ-neo, outro onde se mostram as frases, com um auto-refresh de 8segundos, e outro ainda para o formulário de introdução de mensa-gens.

(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>

Os frames são uma técnica para se conseguir no mesmo ecrãvisualizar várias páginas em simultâneo. Usam-se muito em sitesmuito complexos, e quando se pretende dar uma sensação de tele-visão com vários botões para mudar de canal (neste caso para mudarde local no site).Nos frames, primeiro criamos a linha que define a espessura dasmargens que separam as páginas, assim como os espaços, e ta-manho de apresentação de cada uma das páginas.

<frameset FRAMEBORDER=”0" BORDER=”false” framespacing=”0"rows=”90,60">

Vamos então configurar cada uma das páginas que vão ser criadaspara colocar o chat em funcionamento dentro do esquema de frames.

<FRAME SRC=”cpt4-3-7top.asp” SCROLLING=”no”><FRAME SRC=”cpt4-3-7.asp” SCROLLING=”no”>

Page 102: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES102

E acabamos por finalizar o código HTML para a criação das frames.A partir daqui vamos criar os ficheiros ASP que vão trabalhar comas variáveis que guardam os textos do chat. O primeiro será aqueleque introduz a informação introduzida pelo utilizador para as variá-veis globais, que vão aparecer em todas as diferentes sessões, per-mitindo que todos os utilizadores vejam o que todos introduzem nochat.

(ficheiro cpt4-3-7.asp)

<body bgcolor=”BLACK”><%If not Request.Form(“mensagem”)=”” THENAPPLICATION.LOCKApplication(“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.UNLOCKEND 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>

Page 103: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

103CAPÍTULO 4: OBJECTOS

Foram usados os seguintes objectos e funções:

Application (“ linha…n…”) variáveis que guardam todasas mensagens que vão sendodeixadas. Cada vez que uma nova éintroduzida, todas se vão igualandode maneira a andar uma casa paracima.

Precisamos agora de um ficheiro que mostra os dados no ecrã(browser). Será então o próximo ficheiro que vai tratar dessa função,de reparar na Meta Tag usada (pelo HTML), para refrescar a páginapor cada número de segundos escolhido pelo programador (nestecaso, 8 segundos).

(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>

O resultado é aquele que podemos ver na seguinte imagem. A intro-dução no formulário do anterior Nick usado serve para facilitar autilização pois o utilizador, em princípio, estará sempre a usar omesmo Nick.

Page 104: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES104

Fig. 4.18 - Imagem geral do chat

O ficheiro global.asa oferece aos programadores um vasto conjuntode possibilidades. No caso do número de utilizadores em simultâ-neo, o programa pode além de os contabilizar, guardar o valor numficheiro de texto ou numa base de dados, assim como todos os da-dos das máquinas dos mesmos. As opções são várias, cabendo aoprogramador conhecer o funcionamento deste ficheiro, e usufruir aomáximo das suas potencialidades.

4.5 Cookies, dados do Utilizadore do servidor

É muito vulgar as empresas quererem controlar os acessos aosseus sites, nomeadamente terem acesso ao IP das pessoas que osvisitam, os sites de onde vêm, e até o tempo gasto nas páginas.Normalmente a melhor maneira de recolher dados do lado do clienteé usando JavaScript, mas esta tecnologia está sempre dependenteda capacidade de interpretação dos browsers. As ASP têm uma al-ternativa para recolher este tipo de dados (apesar de não se conse-guir todos os que se conseguem com JavaScript), que se usammuito nestas ocasiões. Essas alternativas ASP além de recolheremdados do lado do cliente, também disponibilizam dados do compu-

Page 105: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

105CAPÍTULO 4: OBJECTOS

tador que está a suportar a página, podendo o webmaster de um sitecriar uma página protegida para conhecer os dados da sua máqui-na. Estas informações são dadas como variáveis especiais do ser-vidor, e para acedermos a elas usamos o objecto ServerVariables().Necessitamos então de saber que tipo de variáveis de servidorexistem para podermos tirar partido das mesmas. Para obtermostodas as que podemos obter basta corrermos o seguinte código ASP.

(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>

Foram usados os seguintes objectos e funções:

For Each / Next () Usamos esta expressão parapercorrermos todos os eventospossíveis com o objectoServerVariables;

Request.ServerVariables () devolve o conteúdo da informaçãoque pretendemos tanto do servidorcomo do cliente.Podemos pedir uma informação porRequest.ServerVariables(“HTTP_COOKIE”)ou Request.ServerVariables(13).

Fig.4.19 - Resultado parcial do ficheiro cpt4-3-8.asp

Page 106: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES106

Este tipo de variáveis vão permitir ultrapassar muitas lacunas a nívelde programação de páginas dinâmicas. Da mesma maneira quenos servimos destas variáveis para usarmos as potencialidades doJavaScript, usamos também o método Cookies para podermos usaros mesmos em ASP.

As variáveis de sessão resolvem muitos problemas na programa-ção, mas o uso de cookies nunca deixa de ser uma realidade. Elessão muito usados para adaptação de sites conforme o tipo deutilizador. Os cookies são ficheiros criados no lado do utilizador paraguardarem variáveis que o programa necessite de ter de cada má-quina que visite o site. Vamos ver como as cookies funcionam, deuma maneira que o leitor poderá ficar com muitas ideias em relaçãoa soluções válidas para os sites que vai criar. Temos o exemplo dealguns sites portugueses que dão a hipótese ao utilizador de confi-gurar os dados que aparecem na página inicial. Isto não seria possívelsem o recurso a cookies, e o exemplo que vou demonstrar vai serusado para algo parecido. Pretende-se uma página onde o utilizadorconfigura alguns aspectos da mesma, e por cada vez que a for visi-tar essa configuração pessoal está activa. Isto tudo porque um fi-cheiro foi criado no computador do utilizador, com variáveis lá incor-poradas criadas pela ASP, aquando das configurações do próprioutilizador.

(ficheiro cpt4-3-9.asp)

olá, não é indiscrição mas será que está a usar<br>uma máquina com as seguintes configurações:<br><%=Request.ServerVariables(“HTTP_USER_AGENT”)%><br>Já agora, o seu IP não será<%=Request.ServerVariables(“REMOTE_ADDR”)%> ?<br><br>Obrigado pelas informações...

Pelo código anterior julgo que fica clara a maneira como se usam eacedem à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 setratassem criando-se uma estrutura OCOOKIE que detém váriasvariáveis. A este ‘array’ de cookies vai-se acrescentar uma validade,que é definida em dias, usando-se (DATE + número de dias) para aactivar.

Page 107: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

107CAPÍTULO 4: OBJECTOS

(ficheiro cpt4-3-10.asp)

<%if Request.Form(“alterar”)<>”” then Response.Cookies (“OCOOKIE”)(“Titulo”) = Request.Form(“nome”)

‘criar um cookie Response.Cookies (“OCOOKIE”)(“CorFundo”) = Request.form(“cor”) Response.Cookies (“OCOOKIE”).Expires = DATE + 10

‘definir o tempo de activação em diasend if%><body bgcolor=”<%= Request.Cookies (“OCOOKIE”)(“CorFundo”)%>”>Olá<font FACE=”ARIAL” color=”BROWN” size=”5"><%= Request.Cookies(“OCOOKIE”)(“Titulo”)%></font> ...<p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><div align=”center”> <center> <table border=”3" width=”350"> <tr> <td width=”100%”> <form method=”POST”> <p>O seu nome: <input type=”text” name=”nome” size=”20"></p> <p>Cor de fundo: <select size=”1" name=”cor”> <option selected value=”WHITE”>Branco</option> <option value=”BLUE”>Azul</option> <option value=”RED”>Vermelho</option> <option value=”GREEN”>Verde</option> </select></p> <p align=”center”><input type=”submit” value=”alterar”

name=”alterar”></p> </form> <p>&nbsp;</td> </tr> </table> </center></div>

Foram usados os seguintes objectos e funções:

Response.Cookies (“OCOOKIE”) terá as variáveis quesimbolizam o login e password. Estas serãocomparadas no início de cada páginaprotegida, de maneira a assegurar se outilizador está validado ou não;

Page 108: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES108

Response.Cookies (“OCOOKIE”)(“……”) neste exemploeste método é usado para definirmos nomesde cookies em "2º grau" - podemos tervárias variáveis associadas a um mesmocookie;

Response.Cookies (“OCOOKIE”).Expires Com o métodoExpires pode-se definir quando é que ocookie deixa de estar activo.

Fig. 4.20 - Resultado parcial do ficheiro cpt4-3-10.asp

As cookies têm alguns inconvenientes, pois qualquer utilizador maisexperiente pode acedê-las e apagar aquilo que foi criado. Por isso,não se recomenda muito o uso das mesmas para sites críticos.Consideram-se sites críticos aqueles que movimentam dados demuita importância, e que têm uma acção determinante para osutilizadores e para a própria empresa proprietária do site.

4.6 Formatação de stringsQuando temos uma string é normal querermos alterá-la, pois o for-mato com que nos chega pode não ser o apropriado para os nossosfins. Temos então nessa altura que alterar (formatar) essa string de

Page 109: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

109CAPÍTULO 4: OBJECTOS

maneira a ficar no formato que mais nos convém. Existem váriostipos de formato. Vamos identificar alguns e depois experimentarcom uma página onde todos estão a funcionar. Podemos entãoformatar strings, números e datas:

formatDateTime(“12-01-1995 12:12:00”,1)Obtém-se assim uma data por extenso, onde até se inclui o dia dasemana. É uma formatação útil para quando queremos uma maiordescrição de uma data, para apresentar cálculos, ou apenas parapáginas que suportam calendários feitos em ASP.

Response.Write formatCurrency(“12312321”)Podemos formatar um qualquer número para a nossa moeda. Oresultado 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, ouquando temos um gráfico, como por exemplo, de uma dada vota-ção. Somam-se todos os votos, separam-se os que são referentesa um assunto, e usamos esta função para sabermos a que percen-tagem pertence esse assunto no universo.

Server.HTMLEncode(“Hoje é dia de praia, <font color=’RED’ size=’4'>tu vais</font> ?”)Já alguns sites tiveram problemas nos seus dados, como Livros deVisitas, e fóruns, devido às Tags de HTML, pois se os dados doutilizador não forem controlados este pode alterar o funcionamentodo site, com dados abusivos, e não aceites. Para que não seja pos-sível ao utilizador escrever Tags de HMTL a funcionar no site, usa-mos este método.

Server.URLEncode(http://www.joaovieira.com/)Esta função não é muito usada, mas sempre que for preciso formataruma 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 estemétodo para se obter a string certa para esse efeito

Depois de revistos alguns tipos de formatação, vamos então escre-ver o nosso ficheiro exemplo, para vermos tudo a funcionar. É sem-pre a melhor maneira de perceber - experimentar, alterar valores oualterar algum código.

Page 110: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES110

(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>”

str2 = “12-01-1995 12:12:00” Response.Write str2 & “ <strong>(não formatada)</strong><br>” Response.Write formatDateTime(str2,3) & “ (formatada com opção 3 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>”

str6 = “Hoje é dia de praia, <font color=’RED’ size=’4'> tu vais</font> ?” Response.Write str6 & “ <strong>(não formatada)</strong><br>” Response.Write Server.HTMLEncode(str6) & “ (formatada com

Server.HTMLEncode)<br><br>”

str7 = “http://www.joaovieira.com/” Response.Write str7 & “ <strong>(não formatada)</strong><br>” Response.Write Server.URLEncode(str7) & “ (formatada com

Server.URLEncode)<br><br>”

Foram usados os seguintes objectos e funções:FormatDateTime () Servimo-nos desta função para

formatar uma string que continhauma data/hora;

FormatNumber () formatou-se um número com certascasas decimais definidas na própriafunção;

FormatPercent () obteve-se um valor que fez apercentagem de um númerosolitário em relação à soma de umgrupo de números;

Page 111: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

111CAPÍTULO 4: OBJECTOS

Server.HTMLEncode () formatou-se assim todo ocódigo HTML;

Server.URLEncode () obteve-se uma string válidade se usar num qualquer link de umqualquer browser….??????

Fig. 4.21 - Resultado parcial do ficheiro cpt4-3-11.asp

E assim fica arrumado mais um capítulo. Vimos que qualquer tipode formatação pode ser da maior importância, pois os problemas devalidação, e não só, assim o exigem. Poderíamos ter quase um livrosó para formatação de strings, números, datas etc. Porque por ve-zes só queremos os minutos, ou só os segundos, ou as horas esegundos, e depois calcular o maior, etc. Mas julgo que aqui ficamas bases para o leitor se poder desenvolver neste assunto com maiorliberdade e criatividade.

Page 112: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro
Page 113: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

55Bases de dados

5.1 Bases de Dados / SQL 114

5.2 Construir uma base de dados

em Microsoft Access 117

5.3 Conexão à base de dados 122

5.4 Inserir, apagar e actualizar dados

em bases de dados

5.4.1 Exemplo: Inserir dados 127

5.4.2 Exemplo: Eliminar dados 135

5.4.3 Exemplo: Actualizar dados 137

5.5 Apresentação de dados

5.5.1 Exemplo: Listar dados em tabela 142

5.5.2 Exemplo: Listar dados com imagens 144

5.5.3 Exemplo: Listar dados a pedido 146

5.6 Exemplos com bases de dados

5.6.1 Exemplo: Livro de Visitas 148

5.6.2 Exemplo: Sondagens de opinião 152

Page 114: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES114

5.1 Bases de dadosAs bases de dados (BD) foram como que o grande impulsionadorda procura das ASP e outras linguagens relacionadas para a pro-gramação Internet. A grande vantagem destas linguagens é a hipó-tese de se aceder a bases de dados, e, por conseguinte, disponibilizarinformação dinâmica online. Desta maneira pode-se vender online,ter revistas com informação online, abrir Bancos, Seguradoras, eoutros tipos de empreendimentos online. Não vamos propriamentever como se abre o maior negócio do século (deixo isso para o lei-tor), mas poderemos ver como se processam algumas partes des-ses sistemas, e como solucionar certos problemas. O livro de visi-tas, muito procurado, pois todos gostamos de ter um no nosso site,é um exemplo de como podemos disponibilizar um serviço interactivoonline sem precisar de muita manutenção. Um e-zine, jornal online,é mais um exemplo de como se podem criar pequenas comunida-des dedicadas a um certo assunto.

Os sistemas de gestão de bases de dados (SGBD ou DBMS) autilizar com as ASP podem ser diversos. Tudo o que precisa é de teros drivers (ficheiros para configuração do Windows, com softwareexterno) necessários para se ligar via ODBC (sistema que faz umaponte entre bases de dados independentemente dos sistemasoperativos das mesmas). Os exemplos que vão ser demonstradosneste livro são feitos em MSAccess, visto ser indiscutivelmente abase de dados mais acessível para Windows (para Linux teríamosoutras soluções também muito utilizadas). De referir que via ODBCé indiferente a base de dados em relação ao código de programação,visto que será usado puro código SQL para qualquer tipo deintervenção nos dados. O ODBC é o sistema (que encontramos nocontrol panel) para criarmos uma ligação com qualquer tipo de BDsuportado pelo servidor (ou pelo menos referente aos drivers queestiverem instalados).Uma base de dados é constituída por tabelas, algumas delas ligadasentre si. Podemos, por exemplo, ter uma tabela de contactospessoais para guardar um código identificador, nome, telefone e e-mail.Ficaria qualquer coisa do tipo:

TABELA: CONTACTOS

ID Nome Telefone EMail

Page 115: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

115CAPÍTULO 5: BASES DE DADOS

Mas só isto não chega. Precisamos de saber que tipo de campos éque vamos usar, e para isso teremos uma tabela onde definimosalém do tipo, o tamanho disponível para os dados:

TABELA: CONTACTOSID as numberNome as varchar(50)Telefone as varchar(14)EMail as varchar(22)

Ficou assim criada uma tabela possível de ser usada numa base dedados. Vamos então demonstrar esta mesma tabela mas com dadosjá introduzidos depois de ter sido criada.

TABELA: CONTACTOS

ID as number Nome as varchar(50) Telefone as varchar(14) EMail as varchar(22)

1 João 219886675 [email protected] Carlos 324444332 [email protected] Rui 234343444 [email protected] Pedro 332442433 [email protected]

Pode-se ver então mais facilmente como se processa (teoricamente)a criação de uma tabela em base de dados, e como ela comporta osdados que lhe são fornecidos.

Agora, a maneira como estes dados são introduzidos, e comopodemos aceder aos mesmos, já requer uma linguagem própria debases de dados. O SQL (Structured Query Language), criada noinício dos anos 70 pela IBM, é desde então usada como standardem todas as bases de dados relacionais até hoje criadas.

O SQL é a linguagem padrão para a definição, actualização epesquisa de bases de dados. Qualquer linguagem de terceira ouquarta geração que trabalhe com bases de dados decerto queembebe expressões de SQL, quer estejemos a falar de ambientesde bases de dados MSAccess, Informix, SQLServer ou Oracle.O SQL contém poucos comandos, o que faz que com algumaexperiência se possam fazer maravilhas.O sistema é simples: as ASP usam uma conexão ODBC, que porsua vez está ligada a uma qualquer base de dados. As ASP usam oADO (ActiveX Data Objects) para que com uma conexão à base dedados possamos usufruir de várias hipóteses de como programar

Page 116: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES116

com as mesmas.A estrutura base do SQL é a seguinte:

SELECT [ DISTINCT | ALL] coluna1, coluna2, … FROM tabela WHERE (situação) GROUP BY HAVING UNION | INTERSECT (usar para mais de um SELECT) ORDER BY (ordenar por coluna)

Neste caso apenas obtemos dados, e não alteramos os dados jáexistentes. Para isso é necessário outro tipo de expressões. Porexemplo, para inserir,

INSERT INTO tabela (coluna1, coluna2, …) VALUES (‘dados1’, ‘dados2’, …)

Para apagar os dados de uma tabela basta,

DELETE FROM tabela

Ou então se apenas pretendermos eliminar um único registo (linha),

DELETE FROM tabela WHERE coluna1 = ‘dados1’

Podemos também actualizar dados, e nesse caso escreveríamos,

UPDATE FROM tabela SET coluna1 = ‘novo_dado1’ WHERE coluna2 = ‘dado2’

No caso da tabela anteriormente descrita, se o programador quisersaber os dados de todas as pessoas que começam com a letra J,basta escrever a seguinte expressão SQL:

SELECT * FROM CONTACTOS WHERE nome like ‘J%’

As plicas ‘ são usadas sempre que se compara uma string. Paravalores numéricos tal já não é preciso. As datas por vezesnecessitam de #data# , como nas bases de dados da Microsoft.

Page 117: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

117CAPÍTULO 5: BASES DE DADOS

No caso de se querer introduzir um novo registo já será necessárioum manuseamento diferente dos dados; usaremos então o comandoINSERT - outro comando standard do SQL.

INSERT INTO CONTACTOS (ID, nome, Telefone, E-Mail) VALUES (5, ‘Ricardo’, ‘288889999’, ‘[email protected]’)

A nossa tabela passará então a ter a seguinte estrutura:

TABELA: CONTACTOS

ID as number Nome as varchar(50) Telefone as varchar(14) EMail as varchar(22)

1 João 219886675 [email protected] Carlos 324444332 [email protected] Rui 234343444 [email protected] Pedro 332442433 [email protected] Ricardo 288889999 [email protected]

Podemos, para nos ajudar, contar com os seguintes operadoresválidos no SQL:

OPERADOR DESCRIÇÃO

= Para igualar > Maior que… < Menor que… <= Menor ou igual >= Maior ou igual <> Diferente

5.2 Construir uma base de dadosem MSAccess

Depois daquilo que foi visto inicialmente neste capítulo, e olhandopara o que vai ser feito, o leitor pode pensar que quase não vale apena conhecer mais das expressões de SQL. É um engano, poismais cedo ou mais tarde se o leitor não conhecer o essencial destasexpressões, o trabalho com as novas linguagens Internet decorrerámuito mais lento e menos vantajoso.

Page 118: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES118

Foi adoptado para este livro a base de dados Microsoft Access, poisé a mais acessível de todas, mas é indiferente aquando de umaconexã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 umexemplo perceptível, para se usar nos exemplos de introdução aouso de bases de dados com ASP.

A estrutura da primeira tabela da base de dados é a seguinte :

TABELA: CONTACTOSID Auto-numberNome Text (50)Idade Number (Integer)Telefone Text (22)Email Text (32) / nullData Date / Time

A partir daqui temos a primeira análise feita. Basta agora traduziristo para a base de dados MSAccess. Em Email temos null, poisqueremos que este campo possa aceitar valores nulos.Em primeiro lugar iniciamos o programa de base de dados. O ecrãterá as opções para criarmos um novo ficheiro, ou usarmos um jáexistente. Vamos escolher a opção para iniciarmos um novo ficheiro.

Fig. 5.1 - Escolha da criação de um novoficheiro para base de dados em MSAccess

Page 119: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

119CAPÍTULO 5: BASES DE DADOS

Depois de iniciarmos a opção anterior, fica então a opção de esco-lhermos o local onde vai ficar o ficheiro, e qual o nome a dar aomesmo. Neste livro o ficheiro vai-se chamar livro.mdb

Fig.5.2 - Local onde fica o ficheiro e seu nome

A zona de trabalho do MSAccess aparece, e deparamo-nos comuma pequena consola vazia, onde a opção mais visível será NEW(dentro da zona de Tables, como ilustra a seguinte figura).

Fig.5.3 - Aspecto da consola demanutenção e criação da base de dados

Page 120: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES120

Carregamos em NEW, e vamos escolher a opção Design View comomaneira esquemática da criação da tabela que pretendemos para abase de dados.

Fig. 5.4 - Escolha de esquema paraa criação da tabela CONTACTOS

Criamos então a estrutura pretendida neste exercício, da tabelaCONTACTOS. O esquema a criar é como o que está na figura. Nãohá muito a explicar no funcionamento do MSAccess neste campo,mas qualquer manual, ou site sobre este tipo de base de dados ex-plica o que for necessário. Não esquecer de definir o campo EMAILa permitir aceitar valores nulos, pois nem todas as pessoas têm e-mail. Para isto basta na parte debaixo do esquema de criação databela, e no tab General, um YES no campo que diz Allow Zero Length.Se o leitor não quiser ter problemas na programação, e para estarmais à vontade, pode repetir este passo para todos os campos(excepto na chave primária, como é óbvio).

Fig. 5.5 - Esquema da tabela CONTACTOS no MSAccess

Page 121: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

121CAPÍTULO 5: BASES DE DADOS

Ao sair depois da criação do esquema da BD, será pedido o nomeda tabela. Neste livro o nome adoptado para esta será o de CON-TACTOS. Para melhor percepção dos exemplos que iremos apre-sentar, será melhor o leitor iniciado nas ASP, criar os ficheiros etabelas de acordo com este manual.

Fig. 5.6 - Escolha do nome a dar à tabela CONTACTOS

Depois fica então acessível na consola do MSAccess a tabela quefoi então criada. Ficamos assim com uma base de dados já algoestruturada.

Fig. 5.7 - Tabela CONTACTOS acessívelno MSAccess depois de criada

Normalmente, nas bases de dados empresariais, as tabelas sãocriadas com comandos do tipo CREATE TABLE que só por si dariapara mais um capítulo, por isso também a adopção do MSAccess,que cria toda a estrutura depois de termos feito apenas alguns es-quemas a nível visual.

Page 122: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES122

Fica assim criada a primeira tabela da base de dados que nos vaiacompanhar no resto deste livro.

5.3 Conexão à base de dadosNormalmente a conexão às bases de dados pelas ASP é feito peloADO, que por sua vez usa uma conexão ODBC. Esta conexão éfeita sem se saber se a base de dados é MSAccess ou não. O queinteressa é que a mesma seja feita com sucesso. Vai-se criar a co-nexão via ODBC, mas vai ser exemplificado também uma maneirade se conectar à BD MSAccess sem ser necessário o uso do ODBC,ligação essa mais conhecida internacionalmente por DSNLessConnection (visto que para o uso de ODBC a conexão processa-secom DSN=…).

Para ser feita esta conexão temos de saber onde temos o ficheiro daBD, e o nome que achamos ser o mais fácil, ou acessível para usodentro da programação ASP. Neste manual vai ser livrodsn

Primeiro o leitor vai ao Control Panel (Painel de Controlo) que podeser acedido a partir do Start (Iniciar), como demonstra a figura se-guinte.

Fig. 5.8 - Atalho para a zona ondese encontra o controlo de ODBC

Depois de aí entrar, escolha o ícone ODBC, entrando na sua conso-la…

Page 123: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

123CAPÍTULO 5: BASES DE DADOS

Fig. 5.9 - Escolha do ícone que simbolizaa entrada para a zona de controlo ODBC

Escolha nos Tabs superiores a opção System DSN, podendo ver asligações que já estão criadas. O mais normal é o leitor não ternenhuma, mas isso não é problema pois o que interessa é que aquelaque deseja criar fique lá disponível.

Fig. 5.10 - Zona onde se vai criar o identificadorda conexão ODBC para o uso da BD em ASP

Page 124: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES124

O leitor carrega em ADD, para inicializar o processo de criação daconexão.

Fig. 5.11 - Escolha do tipo de BD, para conexão

Na imagem anterior o leitor poderia escolher em vez do MSAccessoutras BD, como por exemplo, Oracle, SQL Server, Informix ou mes-mo um ficheiro de Excel. Neste exemplo vamos escolher o MSAccess,mas caso a opção fosse outra seria nesta altura que deveria tomaressa decisão, e depois ir criar a ligação com base num ficheiro dife-rente do MSAccess. A chamada que vai ser feita das ASP com queriesvai aceder a tabelas e colunas, independentemente da base de dadosem questão. No entanto, para utilização de funções especiais nãoconformes a norma ANSI do SQL, temos que ter consciência que talpode não ser compatível com outras bases de dados. Por exemplo,no Oracle, pode-se usar to_char () e to_date (), mas não funcionamnoutras bases de dados.

Fig. 5.12 - Zona de criação da conexão à BD

Page 125: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

125CAPÍTULO 5: BASES DE DADOS

Dentro da zona de criação da conexão, o programador vai ter deseguir 2 passos importantes e nem por isso (ter em atenção a figuraanterior) muito complexos.

1 – Criar um nome para aceder à conexão, neste caso livrodsn2 – Carregar no botão SELECT e escolher o ficheiro da base de dados, neste caso livro.mdb

Fig. 5.13 - Imagem da consola depois de criada a conexão

Depois destes passos, se aparecer livrodsn como na imagem ante-rior, a conexão está feita, e o leitor pode preparar-se para programarem ASP com acesso à BD.

A maneira mais usual de se conectar à BD é por via do DSN, onde seindica neste caso o nome da conexão que foi criado ‘livrodsn‘.O primeiro passo será criar um objecto de conexão à BD,

Set Conn = Server.CreateObject(“ADODB.Connection”)

Depois deste passo vamos usar o método open, próprio do objectoque foi criado,

Conn.open “DSN=livrodsn;”

Desta maneira acabámos de fazer uma conexão à BD. Tudo o queagora é preciso é de uma maneira de podermos trabalhar os dadosreferentes à BD que está nessa conexão. Vamos então usar oRecordSet, mais um tipo de objectos, mas desta maneira, para ocontrolo de dados.

Page 126: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES126

Podemos então criar um objecto RecordSet com o seguinte código,

Set rs = Server.CreateObject(“ADODB.Recordset”)

Depois das fases anteriores, tudo o que tem de fazer para controlara BD é criar uma declaração de SQL e accionar a mesma, isto daseguinte maneira,

SQLStmt = “SELECT … FROM …” rs.Open SQLstmt,Conn,1,2

Desta maneira o leitor já fez uma procura na BD, apesar de nãofazer uma saída para o browser, mas isso será visto nas próximaslinhas.

A estrutura completa para uma conexão à BD, e fazer uma alteraçãoou uma procura na mesma ficará da seguinte forma,

Set Conn = Server.CreateObject(“ADODB.Connection”) Conn.open “DSN=livrodsn;” Set rs = Server.CreateObject(“ADODB.Recordset”) SQLStmt = “SELECT … FROM ….. ORDER BY ….. DESC” rs.Open SQLstmt,Conn,1,2

A declaração de SQL é apenas um exemplo e não funciona comoestá. Vamos ver exemplos válidos já a seguir. Ou se possuir conhe-cimentos de SQL pode tentar aquilo que quiser (lembrar que nestemomento a BD está ainda vazia).

Outra maneira de nos conectarmos à BD é introduzindo o tipo de BDna extensão da conexão e o local onde está a mesma,

conn = “DRIVER={Microsoft Access Driver (*.mdb)};”conn = conn & “DBQ=” & Server.Mappath(“./livro.mdb”) & “;”

Set rs = Server.CreateObject(“ADODB.Recordset”)SQLStmt = “Select * FROM contactos”rs.Open SQLStmt, conn, 2, 1

Neste caso a BD está no mesmo directório e por isso na variávelDBQ não foi preciso indicar a morada onde a mesma está.Ficam assim vistas duas maneiras de nos conectarmos à BD. Nor-

Page 127: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

127CAPÍTULO 5: BASES DE DADOS

malmente os sites de aluguer de espaço fazem-se pagar por cadaconexão que é feita por DSN, fazendo com que a maioria dos progra-madores opte por fazer uma conexão directa como no segundo casoagora visto. O leitor irá optar por aquela que mais lhe convém, desdeque não se esqueça que se mais tarde for mudada a BD pode ter dealterar o código em todos os ficheiros, o que com a ligação via DSNjá não seria preciso.

5.4 Inserir, apagar e actualizar dadosem base de dados

Vamos então começar por ver como podemos inserir dados na BD,e aproveitaremos para fazer inserções de duas maneiras diferen-tes.Na primeira forçamos no código a inserção dos dados, como pode-mos ver no exemplo seguinte:

(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’,

[email protected]’, now())” rs.Open SQLstmt,Conn,1,2 Response.Write “Introduzido com sucesso...”

Foram usados os seguintes objectos/métodos:Server.CreateObject(“ADODB.Connection”) a maneira com

que criamos o objecto de conexão à BD;Server.CreateObject(“ADODB.Recordset”) criação do

recordset que nos permitirá trabalhar com aBD;

conn.Open ”DSN=…” serviu para abrir a BD com aconexão via DSN, referente à BD emquestão;

Rs.Open,…,1,2 o 1 representa o tipo de cursor (pode ser0 – Forward Only, 1 – KeySet, 2 – Dynamic,3 – Static) , o 2 representa o tipo de Lock daBD (1 – Read-Only, 2 – Pessimistic,3 – Optimistic, 4 – Batch Optimistic).

Page 128: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES128

Podemos também criar um ficheiro ASP onde temos um formuláriopara introdução de dados por parte do utilizador, que depois é valida-do e introduzido na BD.

Iremos então criar alguns procedimentos para a execução deste fi-cheiro de introdução de dados via formulário.

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%>

Assim fica criado o procedimento formulario_introducao, que é ointerface de introdução de dados para o utilizador. De reparar que foiintroduzido o Request.Form(“…”), para que cada vez que se tenhade repetir a introdução de dados devido a um campo ser inválido, outilizador não tenha de introduzir tudo de novo.

O argumento para sabermos o que se vai seguir é fazer (o argumen-to que vem da linha de comando do link quando se chama a páginapagina.asp?fazer=...), como podemos ver neste caso ficaráfazer=introduzir, que ao iniciarmos a página validaremos para saber oque vai ser executado, para mostrar o formulário ou receber e enviaros dados introduzidos.

Depois da introdução dos dados, verificamos que os recebemos eque queremos introduzir na BD, mas para isso temos de os validarprimeiro, pois certos campos têm de ter um certo número de carac-teres, assim como o campo idade tem de ser numérico.

Page 129: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

129CAPÍTULO 5: BASES DE DADOS

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_dadosEnd Sub

Ao introduzirmos dados incorrectos este procedimento vai devolveruma mensagem de erro

Fig. 5.14 - Aspecto do formulário do ficheiro cpt5-4-2.asp,com um campo em que se tentam introduzir dados inválidos

Page 130: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES130

Fig. 5.15 - Erro de validação do campoidade do ficheiro cpt5-4-2.asp

Depois de tudo validado o utilizador poderá repetir novamente, devi-do à inclusão de um link que dá essa hipótese.

Fig. 5.16 - Mensagem de confirmação deintrodução de dados do ficheiro cpt5-4-2.asp

Page 131: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

131CAPÍTULO 5: BASES DE DADOS

Depois da validação, corremos o procedimento introducao_dadosque é onde estará o código de conexão e declaração SQL, neces-sários para actuar na BD.

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

Depois da introdução dos dados, fica a nossa página completa. Note--se que toda a introdução de dados é feita via SQL, para que nofuturo não tenha problemas de portar o código para algum sistemadiferente. Usamos o Exit Sub, para que não corra logo a seguir àintrodução dos dados, sendo nosso objectivo mostrar o texto de erroe pedir novos dados puxando o formulário novamente.

O resultado final da nossa página é então o seguinte:

(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>”

Page 132: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES132

Response.Write “<a href=’cpt5-4-2.asp’>introduzir novo contacto</a></center>”

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_dadosEnd 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”

Page 133: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

133CAPÍTULO 5: BASES DE DADOS

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_introducaoend if%>

O código,

if request.querystring(“fazer”) = “introduzir” then validar_dados else formulario_introducaoend if

serve para sabermos qual a acção a prosseguir, pois no nosso for-mulário criamos o argumento fazer, para podermos controlar semostramos o formulário ou se vamos actuar na BD, com dados jáintroduzidos.

Agora, podemos deparar com uma situação em que o utilizador querapagar um contacto. Nesta altura é necessário disponibilizar umalista de contactos existentes, de maneira ao utilizador escolher aqueleque quer apagar. Uma das maneiras possíveis (e a que vamos usar),é a de criar uma ComboBox com todos os nomes, e um botão deapagar junto da mesma.

Primeiro precisamos de um procedimento onde temos o formulárioque inclui a tal ComboBox e o botão para apagar.

Page 134: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES134

<%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.MoveNextWendrs.close%></SELECT>&nbsp;&nbsp;&nbsp;<INPUT type=”submit” value=”Apagar”></FORM><%End Sub%>

Verificar que na ComboBox a tag ‘VALUE’ recebe o número do ID docontacto, número esse que será a referência futura na declaraçãode SQL, de forma a sabermos qual o contacto a eliminar.

Fig. 5.17 - Aspecto do formulário do ficheiro cpt5-4-3.asp

Page 135: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

135CAPÍTULO 5: BASES DE DADOS

No procedimento para apagar, tudo o que se tem a fazer é receber onúmero (identificador) do contacto que pretende apagar, introduziresse valor na declaração de SQL, e executar a mesma. O contactofica então apagado, é devolvida uma mensagem ao utilizador quediz que o processo foi executado com sucesso. Introduziu-se tam-bém um link para o caso de haver necessidade de se apagar maisalgum contacto.

<%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%>

Fig. 5.18 - Aspecto da resposta do ficheirocpt5-4-3.asp, depois do comando apagar

Page 136: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES136

O ficheiro com todo o código fica então com a seguinte estrutura:

(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.MoveNextWendrs.close%></SELECT>&nbsp;&nbsp;&nbsp;<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 formularioend if%>

Page 137: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

137CAPÍTULO 5: BASES DE DADOS

Ao criar e apagar dados em bases de dados, o utilizador começa aolongo do tempo a necessitar de fazer actualizações nos contactos,como o e-mail e o número de telefone. É por isso que aparece agorao próximo ficheiro para actualizar dados já existentes. A fórmula vaiser um pouco a mesma que foi vista. Vamos então ter a ComboBox,só que nesta escolhemos o contacto, depois serão devolvidos osdados desse, preparados para actualização.

Foi usado um procedimento que já tinha sido criado aquando dainserção de novos contactos – referimo-nos à validação da informa-ção. Vamos também usar o formulário de apresentação e recepçãodos dados, criado anteriormente, ficando por fazer apenas o códigode inicialização, e os procedimentos de alteração dos dados.

O esquema aqui vai mudar, na medida em que é necessário guar-dar a variável que representa a identificação da linha da tabela aalterar (o identificador é a chave da tabela). Isto porque será feitauma escolha num formulário. De seguida passamos para a zonaonde o utilizador poderá alterar os dados do identificador escolhidoanteriormente, e no final faz-se uma execução da alteração feita nafase anterior, com uma declaração de UPDATE de SQL.

<%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%>

Page 138: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES138

Repare-se que a maneira de obtermos o valor que vem na respostada execução do SQL é com rs.Fields(“..”), ou seja,recordset.Fields(“nome_do_campo”). Mais tarde o leitor terá de lidarcom estes dados um a um, pois a resposta de uma declaração podeser múltipla.Desta maneira, os dados foram introduzidos nos campos certos noformulário, e o utilizador terá a hipótese de os alterar. A seguir, de-pois da submissão desses novos dados, é preciso validar os mes-mos, e se tudo estiver correcto, introduzi-los na BD, como no proce-dimento seguinte:

<%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%>

Toda a estrutura fica então completa, da seguinte maneira:

(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%>

Page 139: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

139CAPÍTULO 5: BASES DE DADOS

<OPTION VALUE=”<%= rs.Fields(“ID”) %>”><%= rs.Fields(“nome”)%></OPTION><%rs.MoveNextWendrs.close%></SELECT>&nbsp;&nbsp;&nbsp;<INPUT type=”submit” value=”Alterar”></FORM><%End Sub%>

<%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%>

<%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

Page 140: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES140

o número de caracteres, ou tem menos de 6.</font></center>” Alterar exit sub else if len(Request.Form(“email”))>32 then %>center><font color=’RED’>O email excedeu o número de

caracteres.</font></center><% alterar exit sub end if end if end if end if executar_alterarEnd Sub%>

<%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%>

<%

if len(session(“contacto”)) = 0 and len(Request.Form(“contacto”))<>0 then session(“contacto”) = Request.Form(“contacto”)end if

Page 141: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

141CAPÍTULO 5: BASES DE DADOS

select case request.querystring(“fazer”) case “alterar” alterar case “executar” validar_dados case else formulario_principalend select%>

O código,

if len(session(“contacto”)) = 0 and len(Request.Form(“contacto”))<>0 then session(“contacto”) = Request.Form(“contacto”)end if

é usado para que o identificador do contacto seja guardado e estejadisponível durante as páginas, pois é com ele que podemos locali-zar, nas declarações de SQL, se o tamanho do mesmo é vazio, e oretorno do formulário estiver preenchido. Vamos então preencher avariável de sessão contacto, com o identificador que vem do formu-lário.

Para controlarmos qual dos procedimentos a executar, além de de-terminarmos a variável argumento fazer, temos que depois buscar ovalor que esta detém, e correr o procedimento que se identifica comesse comando, com o seguinte código:

select case request.querystring(“fazer”) case “alterar” alterar case “executar” validar_dados case else formulario_principalend select

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, apagare actualizar dados em BD parece ser por vezes difícil mas isso sóse pode dizer depois de conhecidos os objectivos. Por vezes parase actualizar uma tabela é preciso percorrer outras, e o programaterá de abrir vários recordsets e por vezes várias conexões, o queserá mais trabalhoso, e pedirá um esforço intelectual maior.

Page 142: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES142

5.5 Apresentação de dadosPodemos apresentar os dados de várias maneiras mas normalmentesão usadas as tabelas de HMTL (tratadas no primeiro capítulo destemanual) para chegarmos a esse objectivo.Além da conexão à BD, necessitaremos então de executar declara-ções de SQL, como já foi feito. A diferença aqui é que vamos ter depercorrer uma a uma e colocar os dados nos locais que nos con-vém.O método movenext, que funciona com o objecto recordset, é opasso a seguir por cada vez que queremos percorrer a resposta danossas declaração de SQL.

(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(“telefone”)%></td> <td bgcolor=”#<%=cor%>” ><%=Rs.Fields(“email”)%></td> </tr> <%rs.MoveNext if cor=”99CCFF” then cor=”9999FF” else cor=”99CCFF” end if wend%></table>

Page 143: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

143CAPÍTULO 5: BASES DE DADOS

Foram usados os seguintes objectos e funções:

Rs.Fields() a maneira com que podemos aceder aosdados dentro dos campos que pretendemos;

Rs.Movenext () usamos este método para podermosmovimentar o cursor que anda pela base dedados.

O resultado é aquele que se pode ver na imagem seguinte - umaestrutura apresentável, que pode servir de Report para muitos tiposde dados. Repare no truque da mudança de cor por linha, para faci-litar a pesquisa dos dados.

Fig. 5.19 - Aspecto da resposta do ficheiro cpt5-5-1.asp

O código,

if cor=”99CCFF” then cor=”9999FF” else cor=”99CCFF”end if

é então o pequeno truque para que possamos alternar as cores daslinhas. Iniciamos a variável cor com um valor, e, dentro do loop, va-mos validar a mesma, de maneira que ela troque pela cor oposta.

Page 144: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES144

Agora digamos que queremos criar uma tabela dinâmica, que vaifazer uso de imagens. Neste caso para aqueles que têm e para osque não têm e-mail. Digamos que para cada pessoa que tem e-mailaparece uma imagem que, carregando na mesma, permite o enviode e-mail para essa pessoa.Para isso temos de validar o campo que devolve o e-mail, ver seesse 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(“telefone”)%></td> </tr> <%rs.MoveNext if cor=”99CCFF” then cor=”9999FF” else cor=”99CCFF” end if wend%></table>

Page 145: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

145CAPÍTULO 5: BASES DE DADOS

Foram usados os seguintes objectos e funções:

Len () aqui usado para testar o tamanho do e-mail.Se for menor que um é porque é inexistente,e nesse caso não se mostra a imagem querepresenta um envelope e respectivo linkpara envio de e-mail;

<a href=”mailto:<%=Rs.Fields(“email”) %>”> destamaneira introduzimos o e-mail que édevolvido pela BD, e usando o comandomailto: ele passa a usar esse link, comoenvio de e-mail para o endereço definido.

Como se pode verificar foi aproveitado o código do ficheiro cpt5-5-1.asp. Para este caso bastou-nos alterar a ordem de apresentaçãodos dados, e validar o campo de e-mail.

Fig. 5.20 - Aspecto da resposta do ficheiro cpt5-5-2.asp

Algo que é muito usado nas páginas Internet é a pesquisa nas basesde dados da existência de um dado utilizador, e é esse exemplo quevamos apresentar de seguida.

Page 146: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES146(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(“telefone”)%></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%>

Page 147: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

147CAPÍTULO 5: BASES DE DADOS

O resultado deste exercício pode ser visto nas imagens seguintes,onde vamos experimentar o código com a introdução de jo que porsua vez vai listar todas as ocorrências do mesmo.

Fig. 5.21 - Aspecto do formulário do ficheiro cpt5-5-3.asp

Fig. 5.22 - Aspecto da resposta do ficheiro cpt5-5-3.asp,depois da procura de todas as ocorrências com jo

Ficam assim demonstrados alguns exemplos para disponibilizar osdados na Internet usando as ASP. Muitas podem ser as formas decombinar as ASP com o código HTML, mas isso já pertence ao de-senvolvimento profissional das aplicações que irá desenvolver de-pois de ler este manual.

Page 148: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES148

5.6 Exemplos com bases de dadosUm dos exemplos mais utilizados que recorrem às bases de dadossão os famosos livro de visitas, que além de serem simples dedesenvolver, servem depois para serem aproveitados noutrasaplicações para a Internet com as ASP.Para começar vamos criar uma tabela na nossa BD; a mesma queusámos para os contactos, com os campos básicos para um livrode visitas.

TABELA LIVRO_VISITASID_livro as autonumberData_assinatura as Date/TimeNome as Text (30)Email as Text (30)Texto as Memo

Agora que já temos a BD actualizada com a tabela livro_visitaspodemos iniciar a construção do esquema para o livro de visitas.O livro de visitas não é mais que uma tabela, como as que já vimos,com dados, mas com uma apresentação diferente. Além dessaapresentação dos dados temos também um formulário de introduçãode dados. Um truque, se assim se pode chamar, introduzido nesteexemplo, é o de refrescar a página depois de ser submetido oformulário, para que o argumento não fique no link de caminho dobrowser. O problema de o argumento ficar no link é que ao fazerrefresh na página, os dados são introduzidos novamente, mas sechamar a página novamente sem argumento esse problema ficaresolvido. Mas para nos apercebermos disto vamos ver o códigofonte desta página ASP que é um livro de visitas.

(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

Page 149: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

149CAPÍTULO 5: BASES DE DADOS

if (len(texto)<15) then passa = 0 end if If Len(email) > 0 and Len(email) < 5 Then

Passa = 0Else If InStr(1, email, “@”, 1) < 2 Then

Passa = 0 Else

If InStr(1,email, “.”, 1) < 4 ThenPassa = 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 ifEnd Sub

Set Conn = Server.CreateObject(“ADODB.Connection”) Conn.open “DSN=livrodsn;” Set rs = Server.CreateObject(“ADODB.Recordset”) SQLStmt = “SELECT * FROM livro_visitas ORDER BY data_assinatura

DESC” rs.Open SQLstmt,Conn,1,2 if Request.QueryString(“fazer”)=”introduzir” then introduzir end if %><p>&nbsp;</p><div align=”center”> <table border=”0" width=”580" cellpadding=”4" cellspacing=”2"><% while not rs.EOF%> <tr><td bgcolor=”#C6C6C6"> <p align=”left”>Assinatura de <a href=”mailto:

<%=rs.Fields(“email”)%>”> <%=rs.Fields(“nome”)%></a></p> <center> <p align=”center”><%=rs.Fields(“texto”)%></p>

Page 150: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES150

<p align=”center”>&nbsp;</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>

Foram usados os seguintes objectos e funções:

Len () esta função serve aqui para podermosmedir o tamanho das strings que sãoenviadas do formulário. Assim poderemosver se estão vazias, ou se estão dentro dosrequisitos mínimos, impostos peloprograma;

Left () devolve os n caracteres da esquerda de umadeterminada string. Digamos que temos umcampo que não pode ter mais de 30caracteres na BD e assim nós forçamosesse limite;

Replace () foi aqui usado por causa das plicas ‘ , queao serem usadas nas declarações de SQLdão erro, pois o próprio SQL usa asmesmas para limitação de código;

Response.Redirect () o truque que aqui foi feito comeste objecto e método, era de maneira a queo argumento ?fazer=introduzir não ficasse nalinha do URL no browser, pois no casodo utilizador fazer refrescamento do sitecom este argumento, a BD passava a teroutro registo igual ao que já tinha sido feito.

Page 151: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

151CAPÍTULO 5: BASES DE DADOS

Fig. 5.23 - Aspecto da resposta doficheiro cpt5-6-1.asp - O Livro de Visitas

E assim fica o Livro de Visitas concluído. O leitor nesta altura teráconcerteza menos dificuldades em assimilar tudo aquilo que vaisendo feito no código, por isso não nos preocupamos com grandesexplicações nestes exemplos finais.

Algo que muitas empresas cada vez mais anseiam em ter nos seussites são as sondagens de opinião - uma maneira de conheceremas tendências, que em muito pode ajudar no diálogo com oconsumidor. Vamos então ver os conceitos básicos para criar umasondagem de opinião, e deixar o utilizador saber qual está a ser atendência. A estrutura vai ser bastante simples:

Temos um pequeno formulário com duas hipóteses, onde vamosusar radiobuttons, muito usados no HTML. Estes botões vão ter nesteexemplo duas hipóteses, Sim ou Não, e vai ser aí que a nossasondagem se vai centrar. Temos então a pergunta e as possíveisrespostas. Temos de ter uma nova tabela na base de dados que vaiter de ser actualizada por cada vez que alguém escolher uma dashipóteses.

Vamos então começar por construir a tabela que não vai ter mais detrês campos.

Page 152: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES152

TABELA SONDAGEMID_sondagem as autonumberResposta as Text (5)Valor as number

Vamos então fazer um formulário que recebe o input do utilizador, edepois vamos processar o mesmo actualizando a base de dadosconsoante a resposta.

(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>

Page 153: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

153CAPÍTULO 5: BASES DE DADOS

<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>

Como se pode notar nestes exemplos, a inicialização da conexão àbase de dados é sempre feita no início do código (sabendo que osprocedimentos e funções só actuam se chamados).

Fig. 5.24 - Aspecto da resposta doficheiro cpt5-6-2.asp - a Sondagem

Page 154: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES154

Como se pode ver pela imagem, a apresentação é clara e o conteú-do o essencial. O leitor pode utilizar os dados que são recolhidos daBD para criar gráficos, ou outras formas de apresentação. A tabelafoi criada de maneira a que possa ter todo o tipo de sondagens,independentemente do número de respostas possíveis. Depois destecapítulo existe ainda mais uma matéria para enriquecer os seus pro-gramas com ASP que é a criação e uso de componentes, que va-mos ver já nas próximas páginas.

Page 155: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

66Componentes

6.1 Introdução aos Componentes 156

6.2 Tratamento de ficheiros de texto

com o TextStream

6.2.1 Exemplo: História sem fim 159

6.2.2 Exemplo: Contador de acessos 163

6.3 Componentes de e-mail

6.3.1 Exemplo: Envio de e-mail

com attachment 164

6.4 Criar componentes em Visual Basic 66.4.1 Exemplo: Componente Livro

de Visitas 173

Page 156: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES156

6.1 Introdução aos Componentes

Os componentes das ASP são ficheiros ActiveX que servem paramelhorar o desempenho das páginas ASP, visto que são rápidos epermitem o desenvolvimento de funções reutilizáveis (que destamaneira podem ficar acessíveis para outras páginas). Se explorar-mos bem o funcionamento das ASP vemos que os componentessão uma constante nesta linguagem, pois ao usarmos o Responseou mesmo o Request estamos já a usar componentes internos dalinguagem ASP. Desta maneira podemos muito facilmente invocaros métodos e objectos que precisamos para construir as nossaspáginas dinâmicas.

Mas por vezes podemos querer aceder a certas funções que nãosão possíveis com as ASP. Para isso podemos aceder a outras comoo Visual Basic (por exemplo), criando um componente nesta lingua-gem.

Neste capítulo vai-se então demonstrar como se podem programarcomponentes ASP em Visual Basic 6, para posterior uso nas nos-sas páginas ASP.

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 seusserviços, podem salvaguardar o seu código desta maneira.Existem alguns componentes que vêm com as ASP, assim como oCDO (componente de e-mail) que vem com o IIS, o TextStream,que é próprio das ASP, e muitos outros que podem ser encontradosna Internet. A sua grande maioria é comercial, ou seja, terá de pagarpara os poder utilizar nos seus servidores. Mas muitos outros sãográtis, e um dos locais onde pode tentar encontrá-los é em http://www.aspfree.com ou http://www.15seconds.com . Estes sites têmlistagens dos componentes disponíveis, ordenados por temas, e portipo de disponibilidade (Free, Trial, Comercial, Demo, etc.).

Durante este capítulo o leitor vai aprender a instalar componentesexteriores, desde encontrá-los na Internet, fazer o seu download e aseguir instalá-los, sendo explicado também como instalar o seu pró-prio componente, criado em Visual Basic.

Depois de ter lido este livro, e ultrapassadas todas as dúvidas, oleitor estará então preparado para programar as ASP a alto nível,bastando apenas alguma prática adicional.

Page 157: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

157CAPÍTULO 6: COMPONENTES

6.2 Tratamento de ficheiros detexto com o TextStream

Este objecto do componente FileSystemObject não necessita deinstalação pois vem já com o PWS ou IIS. Tudo o que tem de fazer échamar o objecto do mesmo, e utilizá-lo. Este componente servepara o leitor usar ficheiros de texto. Algo que pode ser útil quando omesmo quer guardar informação de rápido acesso, ou mesmo criarpáginas HMTL no momento, do tipo dar a hipótese aos utilizadoresde criarem uma página sua em função de um template do site. Des-ta forma toda a página pode ser gerada com este componente eficar disponível no momento, e num nível mais alto, ser enviada porattach via e-mail para o utilizador. Além destas funções o leitor podetambém fazer procura de ficheiros, e movê-los no servidor.As tabelas abaixo servem para ter uma noção daquilo que se podefazer com este objecto, e quais as propriedades e métodos para tal.

TABELA DE MÉTODOS DO TEXTSTREAM

Método Tipo Descrição

Read Input Este método vai ler os caracteres um a um.

ReadLine Input Como o nome indica, desta forma lê-seuma linha inteira.

ReadAll Input Lê-se toda a informação que está noficheiro.

Write Output Escreve toda a informação quequisermos introduzir, não mudando delinha, sendo a informação seguinteescrita logo a seguir a esta.

WriteLine Output Escreve a informação enviada,mudando de seguida de linha.

WriteBlankLines Output Introduz uma linha vazia.

Skip Input Salta um número específico decaracteres.

SkipLine Input Muda de linha.

Page 158: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES158

TABELA DE PROPRIEDADES DO TEXTSTREAM

Propriedade Descrição

AtEndOfLine Maneira de o leitor saber se chegou ao fim da linha.

Line Devolve o número da linha onde vamos.

Column Devolve o número de caracteres que forampercorridos desde o início da linha.

AtEndOfStream Desta maneira o leitor vai saber se já chegou aofim do ficheiro.

Uma maneira fácil de perceber o seu processo é o de escrever e leras linhas de texto do ficheiro criado. Vamos então criar uma páginaASP, que faz uma emulação de um jogo que é uma história em quecada pessoa vai acrescentando um parágrafo. No final a história atépode ter nexo, ou pode mesmo ser a maior confusão. Mas isto serveapenas para o leitor ter a percepção de como são usados estesficheiros, e como este componente funciona.Primeiro de tudo vamos fazer uns ficheiros de teste, para nos aper-cebermos daquilo que vamos usar.

Para abrir uma conexão para escrita e leitura de um ficheiro vamosusar procedimentos diferentes.

Para escrevermos num ficheiro vamos usar a estrutura,

Set ObjectoFicheiro = CreateObject(“Scripting.fileSystemObject”)Set EscreveTexto = ObjectoFicheiro.CreateTextFile(Server.MapPath(“ficheiro.txt”),True)

Para lermos a informação lá escrita é usada a estrutura,

Set ObjectoFicheiro = CreateObject(“Scripting.fileSystemObject”)Set LerTexto = ObjectoFicheiro.OpenTextFile

(Server.MapPath(“ficheiro.txt”),1)

Page 159: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

159CAPÍTULO 6: COMPONENTES

Desta maneira podemos então criar linhas de texto e lê-las logo aseguir.

(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: A linha lida é: <b>” & LerTexto.Readline & “</b>” Set LerTexto = nothing%>

Foram usados os seguintes objectos/métodos:

CreateObject(“Scripting.FileSystemObject”) conexão aocomponente. Desta forma ficamos com umobjecto criado com a imagem do mesmo;

CreateTextFile () forma com que se define a criação de umficheiro 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.

Podemos então visualizar o resultado obtido pelo nosso exemplo,em que na mesma ASP criamos um ficheiro de texto, com umalinha, e logo a seguir vamos buscar essa mesma linha e escrevê-lano browser.

Page 160: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES160

Fig. 6.1 - Resultado do ficheiro cpt6-2-1.asp

E desta maneira vamos então criar a ASP da história que nuncaacaba. A estrutura é um pouco básica, mas que necessita de expli-cação prévia. Passamos então à sua estruturação:

1. Formulário para input do utilizador;2. Procedimento de escrita de nova linha para a história;3. Procedimento de leitura de texto;4. Procedimento para saber se já existe ficheiro.

O facto de procurarmos se já existe um ficheiro de história deve-seao facto de que o FileSytem devolve erro se não encontrar o ficheiro.Desta forma criamos um por cada vez que ele não existir.

A maneira de sabermos se o ficheiro existe é de usar o próprio com-ponente e usar um método chamado FileExists. Assim, poderemosentão construir todo o código.

Page 161: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

161CAPÍTULO 6: COMPONENTES

(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 “&nbsp;&nbsp;| “ & 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

Page 162: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES162

If Request.Form(“submeter”) = “Acrescentar” then escrita_de_linha end if procura_ficheiro leitura_de_ficheiro formulario%>

Foram usados os seguintes objectos/métodos:

ProcuraFicheiro.FileExists() este comando devolve Trueou False consoante exista o ficheiroque procuramos ou não;

len() Foi aqui usado para termos acerteza que a linha enviada peloutilizador não está vazia, e nessecaso não é inserida uma linha embranco no ficheiro;

LerTexto.AtEndOfStream Este código, e no contexto emque foi inserido (no loop), vaipercorrer linha a linha,possibilitando-nos escrever cadalinha da história, na formatação quequisermos. Se fosse lido todo oficheiro de uma vez poderiamos terproblemas de performance nofuturo.

Fig. 6.2 - Resultado do ficheirocpt6-2-2.asp - a história que nunca acaba

Page 163: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

163CAPÍTULO 6: COMPONENTES

O resultado da história nunca é igual de site para site. Cada utilizadorchega e escreve uma nova linha, e pode alterar a mesma de acordocom a sua vontade.Outra forma de usarmos este útil componente é na contagem dosacessos a um site. Para isso basta-nos criar um ficheiro ASP quepode ser incluído em qualquer lado, contando assim os acessos aonosso site. O esquema é muito simples. Temos o ficheiro com umvalor, tiramos o valor, incrementamos-lhe um valor, e voltamos a láintroduzir, mas neste caso sempre a criar o ficheiro gravando o novopor cima do antigo.Tudo aquilo que vai ser usado foi já visto no exemplo anterior; só ouso do objecto é que vai ser um pouco diferente, o resultado é entãoo do ficheiro cpt6-2-3.asp

(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>”%>

Neste caso já tínhamos de ter criado um ficheiro de texto (contador.txt)com o valor em que queríamos inicializar a contagem, neste caso,zero. Por cada entrada no site o valor é incrementado, podendo oleitor testar, fazendo múltiplos refrescamentos da página.

Fig. 6.3 - Resultado do ficheiro cpt6-2-3.asp

Page 164: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES164

Muitas outras funcionalidades se podem dar a este componente.Por vezes o simples envio de informação via Internet entre sites dis-tintos necessita deste tipo de tratamento - ficheiros de informaçãoque são trocados, e normalmente sempre em formato ASCII.

6.3 Componentes de e-mailEste tipo de componentes (e-mail) são muito importantes na cons-trução de sites dinâmicos. É uma das maneiras de fazer chegarinformação ao utilizador num nível mais pessoal. Normalmente ne-cessitamos de preencher o campo de e-mail noutros sites, pois dis-so depende a recepção de uma password, ou de um ficheiro quenão é possível fazer download pois tem de ser pedido aos seus res-ponsáveis. Com estes componentes o leitor pode fazer algo seme-lhante. Vários componentes estão disponíveis na Internet, assimcomo o ASPEmail (www.aspemail.com) ou o Jmail que são grátis equalquer pessoa os pode usar.

Ficam então todos os passos para termos acesso ao componenteJmail, que existe há alguns anos e funcionou sempre na perfeição.Para fazer download deste componente tem de se dirigir a http://tech.dimac.net, e procurar o ficheiro w3Jmail.Depois do download, a instalação é simples, pois trata-se de umficheiro executável, e não de um DLL solto. Neste site existem tam-bém exemplos de código em que se usa o Jmail. Cabe ao leitorexplorar estes pontos mais a fundo. Seja como for são aqui demons-trados dois exemplos válidos do uso deste componente.

(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 = “[email protected]” ‘ 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 “[email protected]” ‘ endereço para onde

queremos enviar o e-mail Corpo = “Texto que vai 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%>

Page 165: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

165CAPÍTULO 6: COMPONENTES

Foram usados os seguintes objectos/métodos :Server.CreateObject(“JMail.SMTPMail”) Cria-se assim a

conexão ao componente de e-mail;JMail.ServerAddress () Desta forma vamos definir o

servidor de e-mail a usar;JMail.Sender () Define-se aqui qual o e-mail da

pessoa que o envia;JMail.Subject () Aqui indicamos o título da

mensagem;JMail.AddRecipient () Escrevemos aqui para quem vamos

enviar o e-mail;JMail.Body () Aqui fica a construção do corpo da

mensagem;Jmail.Priority () Aqui definimos a prioridade do e-mail:

1-mínimo, 2-médio, 3-máximo;JMail.Execute () Só depois deste comando é que o

e-mail é enviado. Primeiro são asconfigurações e depois é que éexecutada a função geral.

Este exemplo tratava apenas do envio de um e-mail, sem nenhumpropósito especial. Agora imaginemos que o leitor quer ter no seusite um ficheiro com anedotas e, para que os outros possam teracesso, têm de indicar o e-mail para que as mesmas lhes sejamenviadas. Entra então assim o conceito do próximo exemplo: Temosum campo de um formulário onde os utilizadores vão introduzir oseu e-mail, de maneira a poderem receber um documento que con-tém as anedotas que eles querem ter acesso.

(ficheiro cpt6-3-2.asp)<%Sub enviar_piada()

Set Jmail = Server.CreateObject(“JMail.SMTPMail”)Jmail.ServerAddress = “mail.servidor.pt”Jmail.Sender = “[email protected]”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 = corpoJmail.AddAttachment “d:/piadas.doc”Jmail.Priority = 2Jmail.Execute%>

Page 166: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES166

<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 Subif Request.Form(“submeter”) = “Quero Receber” then enviar_piada else formularioend if%>

Foram usados os seguintes objectos/métodos:

JMail.AddAttachment () A maneira com queacrescentamos um ficheiro aonosso e-mail (via attachment).

Ficamos assim com mais conhecimentos sobre como se podemapurar as páginas dinâmicas. As utilizações possíveis para os com-ponentes de e-mail são imensas. Numa delas, o leitor pode criaruma newsletter, onde todos os utilizadores estão em BD, e quandosai uma nova notícia uma página ASP pode-se encarregar de a enviarpara todos os registados em BD. O envio de passwords para quemas perdeu é também uma das muitas funcionalidades dadas a estetipo de componentes. Assim como a confirmação de assinaturas eserviços que deste componente precisem para terem alguma funci-onalidade. Até mesmo o exemplo das anedotas pode ser usado paracriar uma listagem (em BD), de todos os e-mails que as solicitaram,podendo mais tarde ser útil para a divulgação de novas, fazendocom que o tráfego do site aumente por cada novidade que apareça.

Page 167: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

167CAPÍTULO 6: COMPONENTES

6.4 Criar componentes emVisual Basic 6

Para criarmos o componente previsto necessitamos apenas de al-gum conhecimento de Visual Basic (VB). O Visual Basic é uma dasbases das ASP e como as duas linguagens são derivadas de VBScriptnão vão existir muitos problemas. Até mesmo o leitor que já se sen-te confortável na programação com ASP, e que nunca usou VB, nãovai ter muitas dificuldades em aperceber-se daquilo que vai ser feito.O exemplo que vai ser criado não é nada de muito difícil, é algo aliásbastante simples, que serve apenas para ver como se devem criarcomponentes, instalá-los e usá-los. Vamos então criar um exemploque usa o código já usado do Livro de Visitas, e que neste caso ficadentro de um componente DLL para ASP. Outra particularidade des-te exemplo é que vamos dar hipótese à pessoa que o estiver a usarde poder fazer algumas alterações.

Vamos então, antes de mais, inicializar o Visual Basic (este exem-plo usa o Visual Basic 6).

Ao aparecer a escolha do tipo de projecto optamos por ActiveX DLL.

Fig.6.4 - Escolha do tipo de projecto

Page 168: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES168

Vamos então definir as propriedades do projecto que iniciámos. Paraisso vamos ao menu do VB e escolhemos Project > Properties.

Fig. 6.5 - Abrir Propriedades do projecto

A partir daqui aparece uma consola de configuração como a da pró-xima figura.

Fig. 6.6 - Consola de propriedades do projecto

Page 169: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

169CAPÍTULO 6: COMPONENTES

Ao estarmos na consola de propriedades do projecto mudamos onome do projecto para LivroASP. Claro que o leitor pode criar o pro-jecto com o nome que mais lhe convenha. Depois disto carregamosem OK e vamos então mudar o nome da nossa classe, que é criadapor defeito aquando da iniciação do ActiveX DLL project, paralivrovisitas (visto ser este o nosso objectivo).

Fig. 6.7 - Alterar o nome da nossaclasse para livrovisitas

Mas é necessária haver uma interacção entre ASPs e a DLL quevamos criar, pois as mesmas só interagem com DLLs específicas.Temos então de ir buscar uma referência para o VB saber que estáa compilar para o propósito que temos em vista.

Fig. 6.8 - Entrar na consola de referências

Page 170: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES170

Depois de entrarmos na consola de referências vamos então esco-lher duas referências: Microsoft Active Server Pages Object Library(tem de se escolher sempre independentemente do tipo de projectopara ASP) e Microsoft ActiveX Data Objects 2.1 Library (escolhe-mos para este caso pois vamos usar bases de dados, caso contrá-rio seria desnecessário).

Fig. 6.9 - Referências necessárias para este projecto

Depois de escolhidas as referências, e de termos seguido as pas-sagens já referidas, vamos então começar a criar as primeiras li-nhas de código VB para o nosso componente.

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ávelpor pessoas estranhas ao código do componente. Digamos que outilizador tem de ter a hipótese de usar um ficheiro com o nome quequiser para usar o componente, a cor das caixas onde estão asmensagens, e a cor das letras do site, e das caixas.

Desta maneira o utilizador do componente tem hipótese de configu-rar os dados à sua vontade.

No VB precisamos de configurar certos objectos que nas ASP te-mos como certos, para que os precisamos de inicializar no VB -falamos de Response, Request, Session etc.

Para isso temos de inicializar todas as chamadas dos objectos dasASP, e para isso temos o seguinte código,

Page 171: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

171CAPÍTULO 6: COMPONENTES

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

Podemos então reconhecer a conexão à BD e definição do Recordsetque vamos usar para aceder à BD. De resto são as inicializaçõesdas variáveis que vão compensar os objectos das ASP.Para definirmos os procedimentos que são acessíveis do exteriorbasta definirmos se são Public ou Private.

Public Sub NomeDoProcedimento()End Sub

Private Sub NomeDoProcedimento()End Sub

Existem dois procedimentos base nos componentes de ASP, quefuncionam algo como os procedimentos do ficheiro Global.Asa, eque são os seguintes:

Public Sub OnStartPage(psc As ScriptingContext)End Sub

Public Sub OnEndPage()End Sub

Deve ter reparado no tipo psc. Este serve para entrarmos no scriptingda linguagem ASP, que no fundo é um sistema de texto corrido, parainterpretação.

Os procedimentos que vamos usar são os seguintes:Public Sub CorLetras(cor As String)Vai ser usado para introduzir a cor das letras numa variável de ses-são, variável essa que será posteriormente usada;

Public Sub ficheiro(ficheiro As String)Aqui introduzimos numa variável de sessão o nome do ficheiro quesuporta o livro de visitas. Vai influenciar no redireccionamente e noAction do formulário HTML;

Page 172: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES172

Public Sub CorLetrasCaixas(cor As String)Aqui o utilizador definirá a cor das letras das mensagens deixadasno livro de visitas;

Public Sub CorCaixas(cor As String)Procedimento para definir a cor das caixas que suportam as men-sagens;

Public Sub OnStartPage(psc As ScriptingContext)Procedimento base que suporta tudo aquilo que deve ser inicializadoantes de se começar a correr o código;

Public Sub inicio()Procedimento que terá as primeiras linhas de código, que antes es-tavam fora dos procedimentos do livro de visitas;

Private Sub Introduzir()Este é o procedimento que já usávamos antes no livro de visitas,aqui com algumas alterações pois temos de escrever o código todocom Response.Write e no VB com mresponse.write;

Public Sub OnEndPage()Este é o procedimento base que define tudo o que é feito quando seacaba de usar o DLL. Neste caso limpamos todos os objectos queforam criados para simular os usados nas ASP

Vamos então ver parte do que é feito no procedimento OnStartPage ():

Set msc = psc ‘chamamos o objecto de scripting inicializado Set mapplication = msc.Application ‘ definimos como usar as variáveis

Application Set mrequest = msc.Request ‘ definimos como usufruir do request

E o resto funciona no mesmo esquema, como o leitor pode ver aseguir:

Set mresponse = msc.Response Set mserver = msc.Server Set msession = msc.Session

Nesta perspectiva quando o leitor quiser criar uma variável de ses-são chamada Ficheiro com um texto ficheiro.asp faz,

msession(“Ficheiro”) = “ficheiro.asp”

Page 173: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

173CAPÍTULO 6: COMPONENTES

Se quisermos ter um valor inserido por um formulário com o nomeemail fazemos,

Mrequest.form(“email”)

E assim para todos as outras emulações criadas para os objectos.O leitor depois saberá qual o melhor uso a dar a cada uma. Tudo oresto poderá ser código base do VB, que será de onde se poderátirar maior partido.

Vamos então ver o ficheiro livrovisitas.cls - a classe que foi criadano VB para suportar o nosso livro de visitas.

(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”) = corEnd Sub

Public Sub ficheiro(ficheiro As String) msession(“Ficheiro”) = ficheiroEnd Sub

Public Sub CorLetrasCaixas(cor As String) msession(“CorLetrasCaixas”) = corEnd SubPublic Sub CorCaixas(cor As String) msession(“CorCaixas”) = corEnd Sub

Public Sub OnStartPage(psc As ScriptingContext) Set msc = psc Set mapplication = msc.Application Set mrequest = msc.Request Set mresponse = msc.Response Set mserver = msc.Server Set msession = msc.Session

Page 174: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES174

Set Conn = mserver.CreateObject(“ADODB.Connection”) Conn.Open “DSN=livrodsn;” Set RS = mserver.CreateObject(“ADODB.Recordset”)End Sub

Public Sub inicio() If mrequest.QueryString(“fazer”) = “introduzir” Then Introduzir End If mresponse.Write “<p>&nbsp;</p><div align=’center’>” mresponse.Write “<table border=’0' width=’580' cellpadding=’4'

cellspacing=’2'>” SQLstmt = “SELECT * FROM livro_visitas ORDER BY data_assinatura

DESC” RS.Open SQLstmt, Conn, 1, 2 While Not RS.EOF mresponse.Write “<tr><td bgcolor=’” & msession(“CorCaixas”) & “‘>” mresponse.Write “<p align=’left’><font color=’” &

msession(“CorLetrasCaixas”) & “‘>” mresponse.Write “Assinatura de <a href=’mailto:” & RS.Fields(“email”)

& “‘>” & RS.Fields(“nome”) mresponse.Write “</a></font></p>” mresponse.Write “<center>” mresponse.Write “<p align=’center’><font color=’” &

msession(“CorLetrasCaixas”) & “‘>” mresponse.Write RS.Fields(“texto”) & “</font></p>” mresponse.Write “<p align=’center’>&nbsp;</td>” mresponse.Write “</center>” mresponse.Write “</td></tr>” RS.MoveNext Wend mresponse.Write “<tr><td>” mresponse.Write “<form action=’” & msession(“Ficheiro”) &

“?fazer=introduzir’ method=’POST’>” mresponse.Write “<font color=’” & msession(“CorLetras”) & “‘>Indique o

seu nome: </font>” mresponse.Write ”<INPUT TYPE=’TEXT’ NAME=’nome’ size=’22'

maxlength=’30'><br>” mresponse.Write “<font color=’” & msession(“CorLetras”) & “‘>o seu e-

mail: </font>” mresponse.Write”<INPUT TYPE=’TEXT’ NAME=’email’ size=’22'

maxlength=’30'><br>” mresponse.Write “<font color=’” & msession(“CorLetras”) & “‘>a

mensagem que quer deixar:</font><br>” mresponse.Write “<TEXTAREA name=’texto’ cols=’33' rows=’7'>

Page 175: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

175CAPÍTULO 6: COMPONENTES

</TEXTAREA><br>” mresponse.Write “<input type=’submit’ value=’Assinar o Livro’>” mresponse.Write “</form>” mresponse.Write “</td></tr></table></div>”End Sub

Private Sub Introduzir() passa = 1 nome = Left(mrequest.Form(“nome”), 30) nome = Replace(nome, “‘“, “”) email = Left(mrequest.Form(“email”), 30) email = Replace(email, “‘“, “”) texto = mrequest.Form(“texto”) texto = Replace(texto, “‘“, “”) If (Len(nome) < 2) Then passa = 0 End If 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 mresponse.Redirect (msession(“Ficheiro”)) Else mresponse.Write “<font color=’red’>os dados que tentou introduzir não

foram válidos.</font>” End IfEnd Sub

Page 176: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES176

Public Sub OnEndPage() Set msc = Nothing Set mapplication = Nothing Set mrequest = Nothing Set mresponse = Nothing Set mserver = Nothing Set msession = NothingEnd 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.

Para testarmos este código necessitamos de fazer Run do mesmo,e logo de seguida ir a um ASP que busca este componente. No VB6existe essa vantagem - não necessitamos de instalar o componentepara o testar; basta carregar em RUN no VB, ir ao browser e abrir apágina que chama o componente. Neste caso é uma página com aseguinte estrutura:

(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%>

Como se pode ver define-se todos os dados possíveis do compo-nente, busca-se o componente através de Serve.CreateObject ondea estrutura é,

Server.CreateObject(“NomeProjecto.NomeClasse”)

Depois o uso é básico e de fácil compreensão.

Page 177: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

177CAPÍTULO 6: COMPONENTES

Fig. 6.10 - Aspecto do livro de visitas depoisde correr o código no VB e aberta a página ASP

Não esquecer que a partir do momento que o leitor carregar emStop, o componente deixa de funcionar na ASP. Se vir que o mesmoestá finalizado, chega a hora de o compilar, criar um verdadeiro fi-cheiro DLL, e instalá-lo no servidor onde o quer ter a funcionar.Para compilar o componente basta seguir os seguintes passos:

1. Ir a File > Make…

Fig. 6.11 - Fazer a compilação do projecto

Page 178: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES178

2. Escolher o nome a dar ao componente (ficheiro DLL)

Fig. 6.12 - Escolher o nome do ficheiro

3. O directório do componente fica então,

Fig. 6.13 - Directório onde está o componente criado

Page 179: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

179CAPÍTULO 6: COMPONENTES

4. Instalação do componente, depois de escolhido o directório onde o guardar (lembrar que o componente LivroASP.DLL pode ser usado separado. Pode copiar esse ficheiro para outro servidor e usá-lo então). O directório escolhido para ter os componentes foi D:\InetPub\WWWRoot\Componentes\LivroASP.DLL

Fig. 6.14 - Directório onde foi colocadoo componente para entrar em produção

Depois de introduzido o componente no directório escolhido paraprodução, vamos, dentro desse mesmo directório, correr a seguintelinha de comando em,

Start > RunD:\InetPub\WWWRoot\Componentes\regsvr32 LivroASP.DLL

Fig. 6.15 - Instalar o componente

Page 180: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES180

Depois de correr a linha descrita é devolvida uma mensagem desucesso, depois da qual temos o nosso componente acessível nonosso servidor.

Fig. 6.16 - Resposta de instalaçãocom sucesso do componente

O ficheiro regsvr32 costuma estar em C:\Windows\System. Casocontrário faça um Find, pois este está por defeito instalado noWindows.Está agora disponível este componente para qualquer site que quei-ra instalar no seu servidor. Se quiser pode disponizá-lo para outrosservidores, bastando levá-lo e instalá-lo lá.

De lembrar que este tipo de componentes por vezes necessita deoutros, e neste caso os ficheiros base (RunTime) do VB, tais como:

Microsoft Visual Basic 5 Runtime Msvbvm50.exe Microsoft Visual Basic 6 Runtime Vbrun60.exe

Disponíveis em http://www.vb-web-directory.com/microsof/ms_dload.shtml ou no site da Microsoft.

Se o seu componente não funcionar noutro servidor, faça uma insta-lação dos componentes (RunTime) indicados acima. No Windows98 não tem problemas com esta situação, seja como for fica assimentão o aviso. Estes ficheiros encontram-se também ou na máqui-na que tem o VB instalado, ou em sites de programação na Internet.Podem estar disponíveis como ficheiros executáveis, ou como com-ponentes soltos, que se instalam da mesma maneira que o compo-nente que criámos neste capítulo.

Page 181: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

77Exemplos reais

7.1 Introdução 182

7.2 A Rã: Motor de Busca 183

7.3 A Loja: Loja E-Commerce 197

Page 182: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES182

Versão digital, individual, licenciada em Jan/Fev do ano 2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'

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 doisexemplos que decerto incluem respostas para muitos problemasque lhe são familiares.

O esquema de ambos é muito parecido, ao ponto de serem usadosficheiros idênticos em ambas as aplicações. Estes exemplos têmmuito em comum, tais como, ficheiros, funções, métodos de buscade dados e muito mais. Mas o mais importante é que ambos usamapenas um ficheiro ASP e os outros são de apoio para a construçãodo primeiro, que é 80% dinâmico. Teremos 3 zonas desse ficheiro, otopo, o fundo e o centro. O centro é a zona mais dinâmica, ondevamos escolher consoante a resposta do nosso Querystring ouformulário, os dados a mostrar no browser.

O esquema é então sempre o seguinte:

Fig. 7.1 - Esquema dos exemplos deste capítulo

Page 183: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

183CAPÍTULO 7: EXEMPLOS REAIS

Pelo esquema vimos que existem ficheiros que estão incluídos naASP, isso graças ao facto de usarmos o sistema SSI (já visto nestemanual), de maneira a usarmos o comando <!—#INCLUDEFILE=”ficheiro.inc”—> .

Desta maneira estamos livres para usar o primeiro ficheiro dinami-camente. Um exemplo de como fazer esse uso é com o argumentoque vem com o link no browser. Digamos que temos duas hipóteses:se o argumento ‘fazer’ for sim, apresentamos o ficheiro com códigoHTML a representar ‘certo’ (pode não ser um ficheiro HTML, pode terfunções ASP), se for ‘não’, apresentamos o ficheiro ‘errado’.Vejamos então:

No browser temos o link http://pc/livro/default.asp?fazer=simTeremos no código ASP o seguinte:

fazer = request.querystring(“fazer”)<%if fazer=”sim” then%> <!—#INCLUDE FILE=”certo.inc”—><%else%> <!—#INCLUDE FILE=”errado.inc”—><%end if%>

E desta maneira manipulamos a apresentação, no browser, dosdados com um só ficheiro ASP. Claro que se estiver a programarum site com muitos acessos esta não será a maneira mais indicada,mas se não contar com mais de mil acessos diários pode estardescansado. Seja como for, estes exemplos servem para lhe dar aconhecer alguns truques usados por profissionais na programaçãode sites. Claro que nada disto é uma invenção de última hora, osmesmos recursos são usados por muitos mas de maneira diferente.

7.2 A Rã – Motor de BuscaEste é sem sombra de dúvidas daqueles exemplos que muitos que-rem estudar e perceber como se podem ultrapassar alguns proble-mas. Não é nenhum exemplo para sites ‘Industriais’, mas por aqui oleitor ficará com as ideias arrumadas e com os conhecimentos su-ficientes para criar algo mais avançado do que este exemplo. O es-quema de uso de ficheiros foi explicado no início deste capítulo, ago-ra precisamos é de ver como estruturar a base de dados e definir

Page 184: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES184

Versão digital, individual, licenciada em Jan/Fev do ano 2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'

quais as funções que vamos precisar em função dos procedimen-tos que o site deverá ter. Podemos então desde logo identificar algu-mas etapas, mas para não ficar muito confuso vamos começar pe-las bases de dados, e logo de seguida esquematizar o esquema deficheiros que vão ser usados. Não é demais lembrar que neste capí-tulo não é prioridade explicar o que se faz em cada linha (apesar demuitos pontos serem explicados) mas sim, apresentar uma solu-ção, e demonstrar como torná-la consistente na prática.

Iremos ter então apenas uma tabela para guardar os dados queacharmos 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.

Ficando o nosso ficheiro em MSAccess (o usado deste o início domanual) com o seguinte aspecto na consola de Design.

Fig. 7.2 - A BD do motor de busca - uma única tabela

Page 185: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

185CAPÍTULO 7: EXEMPLOS REAIS

O esquema é então o seguinte:

TABELA: MOTORBUSCAid_motor Auto-number; o identificador do linkurl Text (250); o link da página registadatitulo Text (80); o título da páginadescricao Memo; uma breve descrição do que trata o sitedata 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 omotor de busca a funcionar, e podemos desde já fazer uma lista depontos com a seguinte estrutura:

1 – Aspecto da página inicial;2 – Formulário de procura de dados;3 – Formulário de registo de site;4 – Apresentação de dados;5 – Resultado de procura de sites;6 – Aspecto gráfico.

Como vamos usar uma só ASP para suportar todas as tarefas dosite, vamos implementar o que foi visto na lista em vários ficheiros*.inc (pode ter outra extensão) e usá-los quando achamos necessário,dentro da estratégia do site. Fica então assim o esquema seguintepara se ter uma noção do que vai acontecer, e onde aparecem osficheiros de que falamos:

Fig. 7.3 - Esquema de ficheiros do motor de busca

Page 186: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES186

Versão digital, individual, licenciada em Jan/Fev do ano 2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'

Ficamos assim com uma ideia dos ficheiros que vão ser usados equais as hierarquias envolvidas nos mesmos. Vamos então descre-ver o que cada ficheiro tem:

Imagens,

C:\Inetpub\wwwroot\livro\motordebusca\imagens\Topo.jpgficheiro que representa a imagem de topo do site, incluído nocódigo HMTL do ficheiro topo.inc

C:\Inetpub\wwwroot\livro\motordebusca\imagens\Bprocurar.gifficheiro que representa o botão que se carrega para pesquisarmosno motor, usado no ficheiro procura.inc

C:\Inetpub\wwwroot\livro\motordebusca\imagens\Bregistar.gifcomo o nome indica é o botão para registarmos os sites quequeiram figurar na BD do motor de busca; é chamado no ficheiroregistar.inc

Ficheiros da página,

C:\Inetpub\wwwroot\livro\motordebusca\Default.aspficheiro que recebe os argumentos dos formulários ou da linha decomando do browser, e consoante o recebido consoante o ficheiroque é demonstrado na zona central da página;

C:\Inetpub\wwwroot\livro\loja\motordebusca\Funcoes.aspaqui existe uma função que é usada em mais que um ficheiro, cujafunção é validar as plicas usadas nas strings, para que quandousarmos a BD não apareçam erros, visto que as mesmas sãousadas pela própria BD;

C:\Inetpub\wwwroot\livro\motordebusca\includes\Fundo.incficheiro com o desenho do fundo do site (estático a 100%);

C:\Inetpub\wwwroot\livro\motordebusca\includes\Inicial.incesquema inicial, se não existirem argumentos no link, será esteficheiro a aparecer;

C:\Inetpub\wwwroot\livro\motordebusca\includes\Listagem.incdepois de submetida a string de procura, aparecem todos os sitesrelacionados, e é este ficheiro que o vai fazer;

Page 187: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

187CAPÍTULO 7: EXEMPLOS REAIS

C:\Inetpub\wwwroot\livro\motordebusca\includes\Procura.incé simplesmente o formulário onde o utilizador vai inserir a string deprocura;

C:\Inetpub\wwwroot\livro\motordebusca\includes\Registar.inceste vai ser o ficheiro que tem o formulário de registo de todos ossites que querem estar indexados no nosso motor de busca;

C:\Inetpub\wwwroot\livro\motordebusca\includes\Topo.incHTML com o desenho do topo do site (também como o fundo, 100%estático);

C:\Inetpub\wwwroot\livro\livro.mdbficheiro de base de dados onde figura a tabela de dados queusamos neste exemplo.

A estrutura de directórios pode ser alterada pelo leitor desde quetodo o ambiente o acompanhe. Pretendo por ambiente referir-me àconfiguração do servidor de Internet, à conexão à BD, às referênciasa páginas, etc.

Agora podemos ir ver o código de todos os ficheiros e falar da funçãode cada procedimento dentro dos mesmos, se esses existirem.

(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áginainicial</a>&nbsp;&nbsp;&nbsp;<a href=”default.asp?fazer=registar”>registar site

</a>&nbsp;&nbsp;&nbsp;</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”—>

Page 188: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES188

Versão digital, individual, licenciada em Jan/Fev do ano 2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'

<% 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>&nbsp;</p><!—#INCLUDE FILE=”includes/fundo.inc”—>

O resultado do exemplo anterior está representado na figura seguin-te. Reparar que neste exemplo o argumento fazer não existe, e porisso os ficheiros introduzidos no meio do código são os correspon-dentes em Case Else.

Fig. 7.4 - Aspecto geral da página principal

Page 189: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

189CAPÍTULO 7: EXEMPLOS REAIS

(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 SQLFunction 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%>

O ficheiro funcoes.asp é como que uma biblioteca que recorremosque tem funções generalistas. Nestes exemplos só o usei para umafunção, mas o leitor poderá usar para vários tipos de funções.Depois de fazermos #INCLUDE de um destes ficheiros, todas asfunções e procedimentos aí existentes são usados como se ao códigodo ficheiro inicial pertencessem.

(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>

Figura. 7.5 - Imagem do topo do site

Page 190: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES190

Versão digital, individual, licenciada em Jan/Fev do ano 2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'

(ficheiro fundo.inc)<div align=”center”><table width=”600"><tr bgcolor=”#8AC491"><td>&nbsp;</td></tr><tr><td><center><font size=”2" face=”ARIAL”>(1999) Portugal, todos os direitosreservados<br>para IE4+ & NN4+</font></center></td></tr></table></div></BODY></HTML>

O ficheiro inicial representa tudo aquilo que aparece na primeira páginaaquando da chamada do site. Além de incluirmos o formulário depesquisa pertencente ao ficheiro procura.inc, introduzimos tambéminicial.inc, que é o que demonstra os últimos links registados no nossosite.

(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á-lopor 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 adicionadosforam:</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)

Page 191: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

191CAPÍTULO 7: EXEMPLOS REAIS

‘ usa-se a função left para controlarmos o número de caracteres dadescrição

‘ que queremos ver no site response.write “<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>” voltas=voltas+1 ‘ incrementamos as voltas para controlo do número de

links a ver rs.movenext ‘ movemos o cursor da Base de Dados para a próxima

posição wend rs.close ‘ fechamos o RecordSet%>

(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”>&nbsp;<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>

Fig. 7.6 - Tabela de procura

Page 192: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES192

Versão digital, individual, licenciada em Jan/Fev do ano 2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'

(ficheiro listagem.inc)<!—#INCLUDE FILE=”funcoes.asp”—><br><font face=”Verdana”color=”blue”>Resultado daprocura__________________________________________</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 Conn = Server.CreateObject(“ADODB.Connection”) Conn.open “DSN=livrodsn;” Set rs = Server.CreateObject(“ADODB.Recordset”) SQLStmt = SQLStmt & “ ORDER 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>&nbsp;</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>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</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%>

Page 193: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

193CAPÍTULO 7: EXEMPLOS REAIS

Com as listagens recebemos a string de procura e fazemos umapesquisa com base na mesma. Se introduzirmos ‘Internet’, obtemosum resultado como o da imagem seguinte.

Fig. 7.7 - Resultado da procura feita porInternet nos sites existentes em BD

(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 ifEnd Function

‘ no procedimento seguinte é posto o formulário de registo no browser parapreenchimentoSub formulario_registo()%>

Page 194: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES194

Versão digital, individual, licenciada em Jan/Fev do ano 2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'

<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”>&nbsp;<b>Insira o URL do site que querregistar</b></font><br><input type=”text” name=”urlsite” value=”http://” size=”52"><br><font face=”ARIAL” color=”white”>&nbsp;<b>título do site</b></font><input type=”text” name=”titulo” size=”30"><br><font face=”ARIAL” color=”white”>&nbsp;<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

‘ o procedimento seguinte introduz os dados do registoSub introduzir_registo() ‘ vamos buscar os dados introduzidos no formulário urlsite = request.form(“urlsite”) ‘ dados do formulário no campo urlsite titulo = request.form(“titulo”) ‘ dados do formulário no campo título descricao = request.form(“descricao”) ‘ dados do formulário no campo

descricaoOK=1 ‘ esta variável vai controlar se aparecem erros

‘ com o valor 1, sabemos que não existem erros ‘ nos dados introduzidos em formulário

if InStr(1, urlsite, “http://”, 1)<>1 then ‘ verificamos se existe http:// na string do url OK = 0 ‘ se introduzirmos 0 é porque já existe um erro

‘ sempre que OK ficar a zero descrevemos o erro encontrado Response.write “&nbsp;<font color=’red’> - o link para o site não é

válido</font>” Else

‘ vamos também certificar-nos do tamanho das strings ‘ pois estas têm de ter os requisitos que quisermos e em

conformidade com a BD if (len(urlsite)<12 or len(urlsite)>250)then OK = 0 response.write “&nbsp;<font color=’red’> - o link para o site não é

válido</font>” end ifend if

Page 195: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

195CAPÍTULO 7: EXEMPLOS REAIS

if Len(titulo)<4 or len(titulo)>80 then OK = 0 response.write “&nbsp;<font color=’red’>”

response.write “ - o título dado para o site não é válido</font>”end ifif Len(descricao)<12 or len(descricao)>400 then OK = 0 response.write “&nbsp;<font color=’red’>”

response.write “ - a descrição do site não é válido</font>”end ifif (procura_repetido(urlsite)) = 1 then OK = 0 Response.write “&nbsp;<font color=’red’>”

Response.write “ - o site que introduziu já foi registadoanteriormente</font>”

end if

if OK=1 then ‘ se OK=1 então não houve erros, vamos introduzir os dadosem 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 ifEnd 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%>

Page 196: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES196

Versão digital, individual, licenciada em Jan/Fev do ano 2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'

Fig. 7.8 - Formulário de registo de site

No caso de um dos campos que vem do formulário não ter ainformação correcta, além de não ser introduzido, são mostradasmensagens de erro tal como se vê na figura seguinte pois o url nãoé válido.

Fig. 7.9 - Erro dado devido ao URL não ser válido

Depois de uma correcta introdução de dados obtemos umamensagem de aprovação.

Fig. 7.10 - Resposta depois do registo efectuado

Page 197: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

197CAPÍTULO 7: EXEMPLOS REAIS

7.3 A Loja: Loja E-CommerceEste exemplo terá uma estrutura mais complexa devido ao volumede dados que estarão envolvidos, mas a nível profissional é umaestrutura muito simples que em nada vai complicar a vida àquelesque vivem da programação com bases de dados.

A BD terá então de ter uma tabela em que guardaremos a informa-ção de todos os produtos, outra para a informação das encomen-das recebidas, e claro a última que guarda a informação dos produ-tos que pertencem a cada uma das encomendas. Não vamos jáfalar da maneira como organizar isso tudo a nível de programação,mas é necessário o leitor saber o que vai ser usado neste exemplo.O uso de ficheiros é idêntico ao do exemplo do motor de busca. Sótemos que estruturar a base de dados e definir as funções que va-mos precisar em função das nossas necessidades.

Podemos ver que vamos precisar de ter produtos em BD, e temosde os ter registados. O nome das imagens referentes a cada produ-to é lv seguido do identificador do mesmo - quando o programadorfizer o interface de administração do lado do servidor terá de ter emconta este aspecto.

O esquema da base de dados é então:

TABELA: PRODUTOS

Id_produtos Auto-number; identificador interno da BD decada produto

Titulo Text (80); título do livroAutor Text (60); nome do autor (es) do livroN_Paginas Number; número de páginas do livroIsbn Text (25); numero de fábrica do livro, algo

como os códigos de barrasPreco Number; o preço de venda ao público do livroMes_edicao Number; o mês em que o livro foi editadoAno_edicao Number; o ano em que saiu o livrointroducao Memo; uma introdução ao livro

Page 198: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES198

Versão digital, individual, licenciada em Jan/Fev do ano 2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'

TABELA: ENCOMENDAS

Id_encomenda Auto-number; identificador da encomendaData Date/Time; data em que a encomenda foi

realizadaNome Text (50); nome do compradorMorada Text (180); morada do compradorCP Text (9); código postal do compradorLocalidade Text (40); localidadeTelefone Text (10); telefone de contacto do clienteEmail Text (40); o e-mail do clienteTotal_valor Number; valor total a pagarNumero_visa Text (16); número do cartão de crédito do

clienteNome_visa Text (20); nome do portador do cartão de

crédito que vai pagar a encomendaData_visa Text (5); data de validade do cartão de

crédito

O valor do total da compra é usado nesta tabela para que fiqueregistado o preço a pagar e não ser precisa uma pesquisa aosprodutos por cada vez que se queira saber o total final.

TABELA: PROD_ENCOMENDAS

Id_prod_encomendas Auto-number; identificador dosprodutos encomendados referentes a cadaencomenda

Id_encomenda Number; identificador da encomenda natabela encomendas

Id_produto Number; identificador dos produtosreferenciados na tabela produtos

Quantidade Number; quantidade do produtoencomendada

Preco Number; preço a que foi comprado oproduto

Page 199: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

199CAPÍTULO 7: EXEMPLOS REAIS

Fig. 7.11 - A relação das tabelas da BD da nossa loja

Vamos então indicar quais os aspectos principais deste site:

1 – Aspecto da Página inicial;2 – Formulário de procura de produtos;3 – Apresentação de resultados da procura;4 – Carrinho de compras - criação e actualização;5 – Saída e pagamento;6 – Aspecto gráfico.

Neste site também vamos usar uma só ASP (como no motor debusca) para suportar todas as tarefas do site. Vamos implementarentão mais uma lista de vários ficheiros *.inc (não esquecer quepodem ter outra extensão) e usá-los quando acharmos necessário,dentro do contexto do site. O esquema de ficheiros deste site é entãoo seguinte:

Page 200: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES200

Versão digital, individual, licenciada em Jan/Fev do ano 2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'

Fig. 7.12 - Esquema de ficheiros da loja

Vamos então descrever qual a participação que cada ficheiro temneste site:

Imagens,

Topo.jpgficheiro que representa a imagem de topo do site; incluído no códigoHMTL do ficheiro topo.inc, tal como no motor de busca, claro quecom a particularidade de ser uma imagem diferente;

Bprocurar.gifficheiro 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.gifficheiro que representa o botão que se carrega para finalizarmosuma compra online; usado no ficheiro pagar.inc

Page 201: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

201CAPÍTULO 7: EXEMPLOS REAIS

Bpagar.gifficheiro que representa o botão que se carrega para passarmos àfase de finalização de pagamento de uma nova encomenda; usadono ficheiro carrinho.inc

Carrinho.gifcomo se pode prever é o desenho do carrinho de compras, quedepois 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 noficheiro topo.inc

Pagar.giffaz a chamada da zona onde se vãoi introduzir os dados pessoaispara finalização da compra; é chamado no ficheiro topo.inc

Ficheiros da página,

C:\Inetpub\wwwroot\livro\loja\Default.aspficheiro que recebe os argumentos dos formulários ou do campo deendereço do browser, e consoante o recebido consoante o ficheiroque é demonstrado na zona central da página;

C:\Inetpub\wwwroot\livro\loja\loja\Funcoes.aspaqui existe uma função que é usada em mais que um ficheiro, quetal e qual a do motor de busca é usada para validar as plicas usadasnas 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.incficheiro com o desenho do fundo do site (estático a 100%);

C:\Inetpub\wwwroot\livro\loja\includes\Inicial.incesquema inicial. Se não existirem argumentos no link, será este fi-cheiro a aparecer;

C:\Inetpub\wwwroot\livro\motordebusca\includes\Listagem.incdepois de submetida a string de procura, aparecem todos os sitesrelacionados, e é este ficheiro que o vai fazer;

Page 202: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES202

Versão digital, individual, licenciada em Jan/Fev do ano 2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'

C:\Inetpub\wwwroot\livro\loja\includes\Topo.incHTML com o desenho do topo do site (também como o fundo, 100%estático);

C:\Inetpub\wwwroot\livro\loja\includes\Pagar.inclocal onde são feitos os pagamentos, aquilo a que podemos chamarde ‘check-out‘;

C:\Inetpub\wwwroot\livro\livro.mdbficheiro de base de dados onde figura a tabela de dados que usa-mos neste exemplo.

A estrutura de directórios foi a usada para o exemplo anterior, mas oleitor pode fazer alterações na sua estrutura desde que todo oambiente o acompanhe. Entendo por ambiente a configuração doservidor de Internet, a conexão à BD, as referências a páginas, etc.

Agora podemos ver o código de todos os ficheiros e falar da funçãode cada procedimento dentro dos mesmos, se esses existirem.

O resultado do ficheiro global.asa a seguir tem também tudo aquiloque foi introduzido durante este manual, mas está em negrito aquiloque foi criado exclusivamente para a loja.O truque está em criar um array, que ficará dentro de uma sessão,e desta maneira toda a informação do carrinho de compras estarádefinida para cada sessão (sempre diferentes e sem possibilidadede confusão).Cada vez que for introduzido um produto será verificado o array paraver se o mesmo já existe, e se existir acrescentamos mais umaunidade. No caso de se querer introduzir a quantidade, será feitauma alteração.Terá de ser feito sempre um redimensionamento do array para omesmo funcionar na perfeição, mas isso já vai ser visto.

(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”)=””

Page 203: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

203CAPÍTULO 7: EXEMPLOS REAIS

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_OnStartApplication.LockApplication(“utilizadores”) = Application(“utilizadores”) + 1Application.UnLock‘DADOS PARA A LOJADim produtos_id(0), produtos_quantidade(0)produtos_id(0) = 0 ‘ array de produtos no carrinho de comprasprodutos_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(“matriz_produtos”) = produtos_idsession(“matriz_quantidade”) = produtos_quantidade‘FORAM DADOS PARA A LOJA

End Sub

Sub Session_OnEnd Application.Lock

Application(“utilizadores”) = Application(“utilizadores”) – 1Application.UnLock

End Sub

Sub Application_OnEndEnd Sub

</SCRIPT>

Page 204: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES204

Versão digital, individual, licenciada em Jan/Fev do ano 2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'

(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>&nbsp;</p><!—#INCLUDE FILE=”includes/fundo.inc”—>

Fig. 7.13 - Aspecto da página inicial da Loja

Page 205: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

205CAPÍTULO 7: EXEMPLOS REAIS

A seguinte função é idêntica à do motor de busca. É uma funçãopara que não obtenhamos erro nas declarações de SQL

(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_tempEnd 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>&nbsp;&nbsp;&nbsp;</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>&nbsp;&nbsp;&nbsp;</td><td valign=”top”><font size=”2" face=”Verdana”>

<a href=”default.asp?fazer=pagar”>

Page 206: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES206

Versão digital, individual, licenciada em Jan/Fev do ano 2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'

<img border=”0" alt=”Pagar e sair da loja” src=”imagens/pagar.jpg”></a>&nbsp;&nbsp;&nbsp;</td>

<td valign=”top” align=”right”><input type=”text” name=”textoprocura”value=”<%=request.form(“textoprocura”)%>” size=”12"><br><% ‘ a declaração em ASP anterior é para garantirmos que aparece ‘ na caixa de procura a última string‘ queremos também manter a última escolha e por isso‘ vamos comparar os dados deixados pelo formulário anterior‘ garantindo que os RADIO BUTTONS estejam correctos if request.form(“tipoprocura”)= “autor” then autor=”checked” ‘ assim escreveremos checked else if request.form(“tipoprocura”)= “titulo” then titulo=”checked” else autor=”checked” end if end if%><input type=”radio” <%=autor%> value=”autor” name=”tipoprocura”>autor<input type=”radio” <%=titulo%> name=”tipoprocura” value=”titulo”>titulo</td><td valign=”top”><input type=”image” border=”0" src=”imagens/bprocurar.jpg”></td></tr></table></FORM></center></td></tr></table></div>

Fig. 7.14 - Aspecto do ficheiro topo.inc em separado

Page 207: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

207CAPÍTULO 7: EXEMPLOS REAIS

Ao acedermos sempre aos dados anteriores (submetidos peloformulário), garantimos que nunca perdemos os dados enviados, eassim deixamos o utilizador saber qual foi a última string de procuraque fez, e de que tipo (autor ou título). Para isso basta que os cam-pos estejam sempre iguais à informação que os mesmos enviaramna última inserção.

(ficheiro fundo.inc)<div align=”center”><table width=”600"><tr bgcolor=”#409AC9"><td>&nbsp;</td></tr><tr><td><center><font size=”2" face=”ARIAL”>(1999) Portugal, todos os direitosreservados<br>para IE4+ & NN4+</font></center></td></tr></table></div></BODY></HTML>

No ficheiro seguinte iremos então mostrar o último produto disponívelpois se todos os dias aparecer algo de novo será uma boa maneirade o promover.

(ficheiro inicial.inc)<br><br><p><b><font size=”2" face=”Verdana”>Use esta loja online, para procurare comprar o livro que tanto procura.Não se esqueça de que este serviço é gratuito, por isso pode divulgar portodos 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>”

Page 208: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES208

Versão digital, individual, licenciada em Jan/Fev do ano 2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'

response.write rs.fields(“titulo”) & “</b></font><br>” response.write “<font size=’2' face=’Verdana’>escrito por <b>” response.write rs.fields(“autor”) &”</b></font></p>” response.write “<table><tr><td valign=’top’>” response.write “<img border=’0’src=’imagens/produtos/lv” response.write rs.fields(“id_produto”)&”.gif’>” ‘ da maneira anterior iremos imprimir a imagem no ecrã ‘ recorrendo ao identificador da mesma, visto o formato adoptado ‘ para os nomes das imagens ser ‘ sempre o mesmo lv(numero identificador).gif response.write “<br><center><small><b>” ‘ vamos formatar o nosso número para a moeda local (do servidor) response.write formatcurrency(rs.fields(“preco”)) response.write “</b></small></center>” response.write “</font></td><td valign=’top’><font face=’arial’ size=’2'>” response.write left(rs.fields(“introducao”),400) & “...</font><p>” response.write “[&nbsp;

<a href=’default.asp?fazer=carrinho&como=adicionar&qual=” response.write rs.fields(“id_produto”)&”’>”

‘ o argumento qual vai ficar com o identificador do produto‘ mais tarde usado para introduzir no carrinho de compras

response.write “<font size=’2' face=’Verdana’>adicionar ao carrinho</a></font>&nbsp;]</p>”

response.write “</td></tr></table>” rs.close%>

(ficheiro listagem.inc)<!—#INCLUDE FILE=”funcoes.asp”—><br><font face=”Verdana”color=”blue”>Resultado daprocura__________________________________________</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

Page 209: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

209CAPÍTULO 7: EXEMPLOS REAIS

‘ e isso porque o VALUE do formulário tem os valores iguais ‘ aos nomes dos campos da base de dados rs.Open SQLstmt,Conn,1,2 if rs.eof then response.write “<p>&nbsp;</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>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p>” end if conta = 0 ‘ esta variável vai ser utilizada para que as imagens

‘ e disposição dos dados dos produtos alternem de linha em‘ linha. Mais ou menos como o método usado para a mudança de cor‘ por cada linha da tabela

while NOT rs.EOFresponse.write “<p><font size=’3' face=’ARIAL’><b>”response.write rs.fields(“titulo”) & “</b></font><br>”response.write “<font size=’2' face=’Verdana’>escrito por <b>”response.write rs.fields(“autor”)

response.write “</b><small><i>&nbsp;(ISBN:”&rs.fields(“isbn”)&”)”response.write “</i></small></font></p>”response.write “<table><tr>”

if conta = 0 then response.write “<td valign=’top’><img width=’93' heigth=’103' “

response.write “border=’0’src=’imagens/produtos/lv” response.write rs.fields(“id_produto”)&”.gif’>”

response.write “<br><center><small><b>” response.write formatcurrency(rs.fields(“preco”))

response.write “</b></small></center>” response.write “</td><td valign=’top’>” response.write “<font face=’arial’ size=’2'>” response.write left(rs.fields(“introducao”),400) response.write “...<br><b>(&nbsp;edição de “

response.write rs.fields(“mes_edicao”)&”/”&rs.fields(“ano_edicao”) response.write ”&nbsp;)</b></font>”

response.write “&nbsp;&nbsp;<small>livro com“ response.write rs.fields(“n_paginas”) &” páginas.</small><p>”

response.write “[&nbsp;<a ref=’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>&nbsp;]</p>”

conta = 1 ‘ a partir daqui a próxima disposição será diferente else

response.write “<td valign=’top’><font face=’arial’ size=’2'>”

Page 210: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES210

Versão digital, individual, licenciada em Jan/Fev do ano 2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'

response.write left(rs.fields(“introducao”),400)response.write “...<br><b>(&nbsp;edição de

“&rs.fields(“mes_edicao”)&”/” response.write rs.fields(“ano_edicao”)&”&nbsp;)</b></font>”

response.write “&nbsp;&nbsp;<small>livro com “& rs.fields(“n_paginas”)

response.write “ páginas.</small><p>” response.write “[&nbsp;

<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>&nbsp;]</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%>

Fig. 7.15 - Aspecto do site depois de umaprocura por ‘Internet’ em títulos

Page 211: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

211CAPÍTULO 7: EXEMPLOS REAIS

(ficheiro carrinho.inc)<% ‘ este procedimento faz com que vejamos os dados que estão emcarrinho Sub ver_carrinho() Produtos_info = session(“matriz_produtos”) ‘ vamos buscar os dados

dos produtos Quantidade_info = session(“matriz_quantidade”) ‘ e respectivas

quantidadesprodutos_num = ubound(produtos_info) ‘ tirar o número de produtos

em carrinhoif produtos_num <1 then ‘ se forem menos de 1 então está vazio

response.write “<p>&nbsp</p><p>&nbsp</p><p><center>” response.write “<font size=’4' color=’red’>o carrinho ainda está

vazio..</font>” response.write “</center></p><p>&nbsp</p><p>&nbsp</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 encomendatotal_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”

Page 212: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES212

Versão digital, individual, licenciada em Jan/Fev do ano 2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'

SQLStmt = SQLStmt & “ WHERE id_produto = “ & produtos_info(I) rs.Open SQLstmt,Conn,1,2

response.write “<tr><td width=’40'><center>”response.write “<input type=’text’ name=’quant”&i&”’ “response.write “ value=’” & quantidade_info(i) & “‘ size=2

maxlength=2>”response.write “</center></td>”response.write “<td><font face=’arial’ size=’1'>”response.write rs.fields(“isbn”)response.write “</font></td>”response.write “<td><font face=’arial’ size=’2'><b>”response.write left(rs.fields(“titulo”), 34)response.write “</b></font></td>”response.write “<td><font face=’arial’ size=’2'>”response.write formatCurrency(rs.fields(“preco”))response.write “</font></td>”response.write “<td>”valor = (rs.fields(“preco”) * quantidade_info(i) )response.write formatCurrency(valor)response.write “</td></tr>”

‘ aqui vamos actualizando o valor total do preçototal_preco = total_preco + (rs.fields(“preco”)

* quantidade_info(i) )total_produtos = total_produtos + quantidade_info(I)

rs.closenextresponse.write “</table>”

response.write “<p><table width=’460' border=’1' “ response.write “ bordercolor=’#409AC9' cellspacing=’1'><tr>” response.write “<td bgcolor=’#409AC9'>” response.write “<font color=’white’ face=’Verdana’ size=’2'>Despesas

com “ response.write “transportes</font><br>” response.write “<small>(600$00 por encomenda e mais 200$00 “ response.write “por cada livro )</small>” response.write “</td>” response.write “<td>” session(“valor_d”) = (600+ (200*total_produtos)) ‘ esta sessão vai ‘ guardar o valor total por despesas em transportes na variável de

sessão valor_d response.write formatCurrency(session(“valor_d”)) response.write “</td></tr><tr>” response.write “<td bgcolor=’#409AC9'>” response.write “<font color=’white’ face=’Verdana’ size=’2'>TOTAL

</font><br>” response.write “<small>(transportes + livros)</small>”

Page 213: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

213CAPÍTULO 7: EXEMPLOS REAIS

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

‘ a seguir vamos criar o procedimento que faz os cálculos,‘ como quando queremos 10 unidades de um produto e carregamos em recalcularSub calcula() Produtos_info = session(“matriz_produtos”) ‘ vamos buscar os produtos em carrinho Quantidade_info = session(“matriz_quantidade”) ‘ buscar as respectivas quantidades Produtos_num = ubound(produtos_info) Passou = 0 ‘ para controlar se apareceu uma quantidade igual a 0 i = 1 ‘ vamos inicializar I a 1 para percorrermos todo o array while i <= produtos_num if passou=0 then form = request.form(“quant”&i) ‘ vamos buscar o próximo valor do formulário else ‘ se a quantidade foi igual a 0 então adiantamo-nos uma casa

mais que o usual ‘ pois a posição do momento será igual à próxima form = request.form(“quant”&I+1) end if if int(request.form(“quant”&i))<>0 then ‘ se o valor do formulário for

diferente de 0nova_quantidade = int(form) ‘ vamos aceder à nova quantidadequantidade_info(i) = nova_quantidade ‘ introduzi-la no array else if (i < produtos_num) then

‘ se ainda não chegámos ao fim incrementamos a quantidadequantidade_info(i) = quantidade_info(i+1)for j=i to (produtos_num-1) quantidade_info(j) = quantidade_info(j+1)

produtos_info(j) = produtos_info(j+1)

Page 214: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES214

Versão digital, individual, licenciada em Jan/Fev do ano 2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'

nextpassou = 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_infoEnd Sub

‘ este procedimento adiciona um produto ao carrinho de comprasSub adicionar(qual) Produtos_info = session(“matriz_produtos”) Quantidade_info = session(“matriz_quantidade”) Produtos_num = ubound(produtos_info) Temporario = 0 ‘ esta variável temporária vai guardar os valores anteriores if produtos_num>0 then ‘ se existirem mais de 0 produtos for I=1 to produtos_num ‘ vamos percorrê-los if produtos_info(i) = qual then ‘ se acharmos o produto temporario = I exit for end if next end if if temporario = 0 then ‘ se não for achado nenhum produto temporario = produtos_num + 1 ‘ vamos incrementar uma posição no array ‘ esse incremento é respondido com um redimensionamento do array redim Preserve produtos_info(temporario) redim Preserve quantidade_info(temporario) ‘vamso buscar o identificador do produto a acrescentar produtos_info(temporario) = qual quantidade_info(temporario) = 1 ‘ o mesmo vai-se inicializar com o

valor 1 else ‘ senão vamos acrescentar uma unidade ao produto que já

existe em array quantidade_info(temporario) = quantidade_info(temporario) + 1 end if session(“matriz_produtos”) = produtos_info session(“matriz_quantidade”) = quantidade_infoEnd Sub

Page 215: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

215CAPÍTULO 7: EXEMPLOS REAIS

‘ o procedimento seguinte escreve um link para se voltar à página anteriorSub voltar() Response.write “<p><a href=’javascript:history.go(-1)’>” Response.write “<font face=’arial’ size=’2'><b>continuar a comprar</b> </font></a></p>”End Sub

Set Conn = Server.CreateObject(“ADODB.Connection”) Conn.open “DSN=livrodsn;” Set rs = Server.CreateObject(“ADODB.Recordset”)

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%>

Fig. 7.16 - O carrinho de comprasdepois de algumas escolhas

Page 216: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES216

Versão digital, individual, licenciada em Jan/Fev do ano 2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'

Fig. 7.17 - O carrinho de compras depoisde ser feita uma actualização nas quantidades

(ficheiro pagar.inc)<%‘ este procedimento vai introduzir o formulário que pede os dados pessoais‘ do cliente, para que o pagamento total seja efectuadoSub 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>&nbsp</p><p>&nbsp</p><p><center>” response.write “<font size=’4' color=’red’>o carrinho ainda está

vazio..</font>” response.write “</center></p><p>&nbsp</p><p>&nbsp</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:&nbsp;<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>

Page 217: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

217CAPÍTULO 7: EXEMPLOS REAIS

<td></td></tr><tr><td width=’150'><font face=’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'>&nbsp;(MM/AA)</td></tr></table></td></tr></table><p><input type=’image’ border=’0' src=’imagens/bfinalizar.jpg’></p></form></div>

<%End Sub

‘ esta função vai validar os dados introduzidos pelo utilizadorFunction validar() OK = 1 if len(request.form(“nome”)& “<br>”)<6 or len(request.form(“nome”)&

“<br>”)>50 then response.write “<font face=’arial’ color=’red’>&nbsp;&nbsp; “ response.write “o nome está inválido</font><br>” OK = 0

Page 218: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES218

Versão digital, individual, licenciada em Jan/Fev do ano 2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'

end if if len(request.form(“morada”))<10 or len(request.form(“morada”))>180then response.write “<font face=’arial’ color=’red’>&nbsp;&nbsp;” 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’>&nbsp;&nbsp; “ 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”))>40then

response.write “<font face=’arial’ color=’red’>&nbsp;&nbsp;” 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’>&nbsp;&nbsp;” 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’>&nbsp;&nbsp;” 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”))>20then response.write “<font face=’arial’ color=’red’>&nbsp;&nbsp; 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’>&nbsp;&nbsp;” response.write “ A data do Visa não está correcta</font><br>” OK = 0 End if Validar=OKEnd Function‘ depois de tudo validado é executado o seguinte procedimentoSub efectuar() SQLStmt = “INSERT INTO ENCOMENDAS (data, nome, morada, cp, “ SQLStmt = SQLSmt & “localidade, telefone,”

Page 219: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

219CAPÍTULO 7: EXEMPLOS REAIS

SQLStmt = SQLStmt & “ email, total_valor, numero_visa, nome_visa,data_visa)” SQLStmt = SQLStmt & “ VALUES( ‘“&now()&”’,

‘“&request.form(“nome”)&”’,” SQLStmt = SQLStmt &

“‘“&request.form(“morada”)&”’,’”&request.form(“cp”)&”’,” SQLStmt = SQLStmt &

“‘“&request.form(“localidade”)&”’,’”&request.form(“telefone”)&”’,” SQLStmt = SQLStmt & “‘“&request.form(“email”)&”’, “&session(“valor_t”)&” ,” SQLStmt = SQLStmt & “‘“&request.form(“numero_visa”) SQLStmt = SQLStmt & “‘,’”&request.form(“nome_visa”)&”’,” SQLStmt = SQLStmt & “‘“&request.form(“data_visa”)&”’ )” rs.Open SQLstmt,Conn,1,2 SQLStmt = “Select id_encomenda from encomendas” rs.Open SQLstmt,Conn,1,2 rs.movelast ‘ depois de introduzido vamos buscar o identificador do mesmo ultima_encomenda = rs.fields(“id_encomenda”) rs.close produtos_info = session(“matriz_produtos”) quantidade_info = session(“matriz_quantidade”)

produtos_num = ubound(produtos_info)num_produtos = 0total_preco = 0total_produtos = 0for i=1 to produtos_num

‘ vamos buscar por cada produto o seu preço SQLStmt = “SELECT preco FROM produtos”

SQLStmt = SQLStmt & “ WHERE id_produto = “ & produtos_info(i)

rs.Open SQLstmt,Conn,1,2valor = (rs.fields(“preco”) * quantidade_info(i) )rs.closeSQLStmt = “INSERT INTO prod_encomendas (id_encomenda, “

SQLStmt = SQLStmt & id_produto, quantidade, preco)VALUES”

SQLStmt = SQLStmt &“(“&ultima_encomenda&”,”&produtos_info(i)&”,”

SQLStmt = SQLStmt & quantidade_info(i)&”,”&valor&”)”rs.Open SQLstmt,Conn,1,2

nextresponse.write “<p>&nbsp</p><p><br><br><font face=’Verdana’

color=’blue’>” response.write “A sua encomenda foi processada...</font></p>” response.write “<p>&nbsp</p><p>&nbsp</p><p>&nbsp</p>” session.Abandon ‘ vamos abandonar a sessão depois de ser feita a

compra

Page 220: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES220

Versão digital, individual, licenciada em Jan/Fev do ano 2000, pelo Centro Atlântico, da versão 1.0 do livro 'Programação Web com ASP'

‘ começando assim uma sessão novaEnd Sub Set Conn = Server.CreateObject(“ADODB.Connection”) Conn.open “DSN=livrodsn;” Set rs = Server.CreateObject(“ADODB.Recordset”) como = Request.QueryString(“como”) ‘ vamos buscar o argumento Select Case como Case “efectuar” ‘ neste caso é efectuada a compra if (validar()=1) then ‘ se os dados ficarem validados efectua-se a

compra efectuar() else formulario() ‘ senão, é mostrado novamente o formulário end if Case Else Formulario() ‘ sempre que não há argumento é mostrado o formulário End Select%>

A imagem seguinte demonstra como somos abordados ao entrarna zona de pagamento.

Fig. 7.18 - Introdução de dados para finalizar compra

Page 221: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

221CAPÍTULO 7: EXEMPLOS REAIS

No caso do número do cartão de crédito não estar válido é mostradoum erro (o mesmo acontece com a maioria dos dados a introduzir)

Fig. 7.19 - Verificação do número do cartão de crédito

Se a compra for bem sucedida recebemos a mensagem da ima-gem seguinte.

Fig. 7.20 - Confirmação de compra bem sucedida

Page 222: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

Agradecimentos:

Queria agradecer a todos aqueles que ajudaram na minha formação epercurso profissional, onde estão incluídos: Manuel Pacheco Vieira, JoséFernando Silva, Pedro Tiago Pereira e Carlos Dias.

No estrangeiro tive o apoio de duas pessoas que me apoiaram nos meusartigos e acreditaram nas minhas capacidades, são eles Scott Mitchell(www.4guysfromrolla.com) e Stephen Wynkoop (www.swynk.com).

Agradeço também às centenas de pessoas que me enviam mensagens para oe-mail todos os meses, a pedir esclarecimentos técnicos ou a agradecer pelocódigo que tenho disponível no meu site (www.joaovieira.com).

A nível pessoal agradeço então às peças fundamentais na minha vida, os meuspais, avós, Tânia Penedo e à dupla Jujinha & Ritinha.

Page 223: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

Colecção O Melhor da Internet

Colecção Sociedade da InformaçãoOs temas de fundo da Sociedade da

Informação apresentados pelos maioresespecialistas nacionais

Os melhores sites nacionais e internacionaisda Internet organizados por profissão

ou área de interesse

Colecção TecnologiasTodas as tecnologias de destaque da

Internet tratadas pela equipe de técnicosdo Centro Atlântico

Colecção Direito das Novas TecnologiasA nova economia, dependente das tecnologias

da informação, traz consigo novos desafios eameaças.

Quais as respostas dos nossos Juristas, tribunais,compêndios e legislação?

Colecção DesafiosO que nos reservam os tempos que se aproximamem que as novas tecnologias invertem muitas das

certezas adquiridas

Colecção SoluçõesSoluções práticas para resolver novasquestões levantadas pelas tecnologias

da sociedade da informação

Page 224: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro

Para encomendar qualquer título do Centro Atlântico queira preencher estaPara encomendar qualquer título do Centro Atlântico queira preencher estaPara encomendar qualquer título do Centro Atlântico queira preencher estaPara encomendar qualquer título do Centro Atlântico queira preencher estaPara encomendar qualquer título do Centro Atlântico queira preencher estafolha de encomenda e enviá-la por fax ou correio com o seu pagamento.folha de encomenda e enviá-la por fax ou correio com o seu pagamento.folha de encomenda e enviá-la por fax ou correio com o seu pagamento.folha de encomenda e enviá-la por fax ou correio com o seu pagamento.folha de encomenda e enviá-la por fax ou correio com o seu pagamento.

Colecção O Melhor da InternetO Melhor da Internet para o Direito _____ * 950$ = _______O Melhor da Internet para Informáticos _____ * 950$ = _______O Melhor da Internet para Engenheiros _____ * 950$ = _______O Melhor da Internet para o Marketing _____ * 950$ = _______O M.Internet p/ Gestores e Empresários _____ * 950$ = _______

Colecção Sociedade da InformaçãoCrónicas da InforFobia _____ * 1.800$ = ______Homo Conexus _____ * 1.950$ = ______* Ano 2000 e Informática _____ * 1.950$ = ______

Colecção Tecnologias* Guia do Internet Explorer versão 4 _____ * 2.950$ = ______* Guia do Internet Explorer versão 5 _____ * 2.950$ = ______* Guia do Netscape Communicator v 4 _____ * 2.950$ = ______Agentes Inteligentes _____ * 2.950$ = ______TOP 100 Internet 1999 _____ * 2.450$ = ______

Colecção Direito das Novas TecnologiasDireito da Informática nos tribunais .pt _____ * 2.450$ = ______

Colecção DesafiosVertigem - Tendências para o Séc. XXI _____ * 4.950$ = ______O Futuro da Internet _____ * 2.950$ = ______

Colecção SoluçõesO Vírus do ano 2000 _____ * 1.600$ = ______O Guia do Telemóvel: 99 sugestões _____ * 1.250$ = ______

* Inclui CD-ROM TOTAL = ________

Sem Despesas de envioAs 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 emstock e pediremos confirmação no futuro para envio dos títulos em falta.

Centro Atlântico - Av. D. Afonso Henriques, 1462 - 4450 MatosinhosFax. 21 - 321 01 85 ou 22 - 938 56 30

TítuloTítuloTítuloTítuloTítulo Quant.Quant.Quant.Quant.Quant. Preço TPreço TPreço TPreço TPreço Totalotalotalotalotal ww

w.centroatlantico.pt/titulos

Page 225: Programacao Web com Active Server Pages - METALRIO · 2008. 11. 17. · 4.2 Variáveis globais e de sessão 65 4.3 Interagir com o utilizador ... licenciada em Fev/2000, pelo Centro