Baixe o app para aproveitar ainda mais
Prévia do material em texto
João Vieira Centro Atlântico Programação Web com ASP - Active Server Pages Edições Centro Atlântico Portugal/2000 Reservados todos os direitos por Centro Atlântico, Lda. Qualquer reprodução, incluindo fotocópia, só pode ser feita com autorização expressa dos editores da obra. Programação Web com Active Server Pages Colecção: Tecnologias Autor: João Vieira Direcção gráfica: Centro Atlântico Capa: Paulo Buchinho © Centro Atlântico, Lda., 2000 Av. D. Afonso Henriques, 1462 - 4450 Matosinhos Tel. 22 - 938 56 28/9 Fax. 22 - 938 56 30 Rua da Misericórdia, 76 - 1200 Lisboa Tel. 21 - 321 01 95 Fax 21 - 321 01 85 Portugal geral@centroatlantico.pt www.centroatlantico.pt Fotolitos: Centro Atlântico Impressão e acabamento: Rolo & Filhos 1ª edição: Janeiro de 2000 ISBN: 972-8426-21-6 Depósito legal: 146.485/00 Marcas registadas: todos os termos mencionados neste livro conhecidos como sendo marcas registadas de produtos e serviços, foram apropriadamente capitalizados. A utilização de um termo neste livro não deve ser encarada como afectando a validade de alguma marca registada de produto ou serviço. O Editor e os Autores não se responsabilizam por possíveis danos morais ou físicos causados pelas instruções contidas no livro nem por endereços Internet que não correspondam às Home- Pages pretendidas. Dedico este livro aos meus pais, Maria de Jesus S. R. Sousa Vieira, António Tiago Vieira Índice 1. Introdução às Active Server Pages 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 2. Expressões e Operadores 2.1 Os primeiros passos 2.1.1 Exemplo: ‘Olá Portugal’ 28 2.1.2 Exemplo: ‘Olá Portugal’ com variável 28 2.1.3 Exemplo: Cálculo de variáveis 29 2.1.4 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 32 2.3.2 Exemplo: Select Case 33 2.3.3 Exemplo: Contadores ASP embebidos em HMTL 33 2.3.4 Exemplo: HMTL embebido em contadores ASP 34 2.4 Variáveis 35 2.5 Tabela de Operadores 2.5.1 Exemplo: Comparação de variável entre valores 37 2.5.2 Exemplo: Utilização de todos os operadores 38 3. Funçõ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 4. Objectos 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.asa 4.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 utilizador 105 4.5.2 Exemplo: Páginas personalizadas 107 4.6 Formatação de strings 108 5. Bases 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 6. Componentes 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 6 6.4.1 Exemplo: Componente Livro de Visitas 173 7. Exemplos reais 7.1 Introdução 182 7.2 A Rã: Motor de Busca 183 7.3 A Loja: Loja E-Commerce 197 P g t t m t eça gratuitamente o seu be-book Receba gratuitamente, por e-mail, a versão digital (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 e-mail geral@centroatlantico.pt ou por correio para, Centro Atlântico Ap. 413 4760 V. N. Famalicão 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 Autor Escrevi este livro, acima de tudo, para dar algum apoio a todos aqueles que querem iniciar-se neste tema de programação Internet do lado do servidor. Quando comecei a pesquisar estes assuntos, há alguns anos, a realidade era muito diferente para conseguir programar neste tipo de sistemas. Seria necessário um servidor (com certos requisitos), e conhecimentos bastante mais avançados de programação. A definição de páginas dinâmicas na altura, consistia na existência de ficheiros executáveis do lado do servidor que criavam páginas HTML consoante o que o utilizador procurava, e que limitava bastante os tipos de pesquisa. Quando o Perl (para programação de páginas dinâmicas) apareceu, o panorama mudou, e as facilidades deste tipo de programação começavam. Mesmo assim, a Microsoft apareceu com os IDC (Internet Database Connector), que apesar de serem de mais fácil compreensão não eram tão potentes a nível de desenvolvimento. Mais tarde, apareceram as ASP, que deram uma grande (e boa) viragem na programação do lado do servidor. O programador começava a ter uma linguagem potente e flexível onde podia desenvolver o mais variado tipo de serviços e de soluções. Quando comecei a trabalhar nesta linguagem estava-se a fazer a transição do sistema IDC para as ASP. As facilidades das mesmas deram-me hipótese de as poder experimentar onde quer que fosse. Mesmo assim, os recursos a nível de manuais e páginas Internet eram 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 este suporte 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 estes mesmos 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 querem entrar nesta área, e tentar que o caminho para o domínio das ASP seja o menos dificultado possível. Este livro está separado por capí- tulos; cada capítulo está estruturado por uma parte do sistema das ASP, e foi dada uma ordem a estes, para que os temas estivessem ordenados por níveis de dificuldade. No final deixo alguns exem- plos, que sei irão ser muito úteis a todos aqueles que querem algo 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 neste livro, 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 este livro sirva para aquilo que o leitor está à procura, pois quando eu comecei se tivesse tido este manual, metade dos meus problemas tinham sido resolvidos muito mais depressa. Para me ajudar nos temas tenho os problemas que normalmente recebo todas as se- manas de vários pontos do planeta, que me dão uma ideia daquilo que os programadores mais precisam quando começam a trabalhar com esta tecnologia. 1.2 Requisitos para as ASP ‘ASP’ é a abreviatura de Active Server Pages. ASP são páginas dinâmicas para a Internet, que usam uma linguagem de programa- ção ao estilo do VB (Visual Basic). Para quem está familiarizado com o VB não lhe será difícil entender este código, pois as rotinas de scripting de ambos os sistemas são quase idênticas e seguem as mesmas regras. Se além do VB, tiver sólidos conhecimentos de HTML (Hyper Text Marked Language), rapidamente estará prepara- do para programar sobre este sistema a um bom nível depois de dominar 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 principais comandos (chamados Tags) do mesmo. Este sistema foi o segundo adoptado pela Microsoft para a criação de poderosos sites dinâmicos com acesso a bases de dados. O primeiro 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 SQL para acesso às bases de dados. Não era tão flexível, era mais lento de se programar, e tinha certos requisitos de programação algo di- ferentes das ASP. 15CAPÍTULO 1: INTRODUÇÃO ÀS ACTIVE SERVER PAGES 1.3 ASP vs JavaScript/VBScript Muitas pessoas perguntam “…Qual a diferença entre as ASP e o JavaScript? Ou o VBScript? Ou mesmo o tão potente Java?…”. Bem, as diferenças são bastantes, não só falando das ASP, mas també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 Java funcionar também a nível do servidor com servlets) as ASP funcio- nam no servidor. Uma boa maneira de notar esta diferença entre as ASP e o JavaScript/VBScript, é olhando para as instruções de pro- gramação de ambos. Quando estamos no nosso browser e vamos ver o source de um ficheiro com JavaScript ou VBScript, vemos todo o código, e daí vem o problema desse código poder ser usado ile- galmente por outro programador - situação muito usual. Com as ASP, ao tentar aceder ao código, só se vê puro HTML, pois as ASP são tratadas e processadas no servidor de Internet que por sua vez envia a formatação online toda em HTML. O código de JavaScript é facilmente identificado no meio do código HTML, 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, fazendo com 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 que corre no lado do cliente: <SCRIPT LANGUAGE=”VBSCRIPT”> formatcurrency(“10000”) </SCRIPT> Este código formata o valor 10000, para que fique 10.000$00. 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 os browsers o suportam, e a sua programação é dispendiosa, e toma muitos recursos, que a fazem ideal para outros campos. Este foi entã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ção mas também na utilização (interface com o utilizador), onde as ASP e linguagens semelhantes têm vindo a dominar todo o mercado. E se 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 essas mesmas estruturas, para poderem praticar o chamado e-commerce, que veremos também neste manual. 1.4 Instalar o servidor de Internet O servidor de Internet é bastante fácil de instalar e a documentação da Microsoft que vem com o pacote do software é bastante explíci- ta. Mesmo assim vou só indicar alguns pontos para a instalação do software. 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 (de onde vem o IIS 4) e se possível com o Service Pack 4 ou 5 do WindowsNT. Se quiser usar sistemas mais recentes pode também usar o Windows 2000, que vem mais seguro no aspecto dos sites que 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 e alguns objectos novos, que não são bem novos, mas sim melhora- mentos de alguns já usados anteriormente. A nível de performance essa será melhor pois os cabeçalhos de HTTP (a informação que é recolhida pelo browser, enviada pelo servidor) quando possível são enviados 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 as extensões dos ficheiros, podendo colocar código ASP em qualquer lado, pois o novo servidor vai detectar as diferenças. Existirá uma maneira mais prática de redireccionamento de páginas, poderá ser executado 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 e usarem classes, sistema usado por programadores em ambientes de programação orientada por objectos. 17CAPÍTULO 1: INTRODUÇÃO ÀS ACTIVE SERVER PAGES Caso contrário, o PWS para o Windows 98 é uma boa escolha pois pesa menos no computador e será o suficiente para criar as ASP que irá usar futuramente no Windows NT. Eu indicaria então que instalasse tudo o que vem no pacote (PWS ou IIS), as consolas de gestão, o transaction server, os exemplos, o ADO (Access Data Obects), todos os componentes que vierem – em resumo, tudo o que for possível instalar. Perceberá durante a leitura deste manual o porquê desta indicação, e com a sua especialização nesta matéria ao longo da sua vida profissional também o entenderá. O directório onde as páginas vão ficar instaladas pode ser aquele que o programador quiser, mas aconselho vivamente a utilizar o que está por defeito c:\inetpub\wwwroot\, e a partir do interior deste gerir todas as páginas que quiser criar. Não apague os ficheiros que ele criar, principalmente um chamado global.asa, que iremos tratar mais adiante. Depois de todo o sistema instalado tem de activar o serviço de Internet. No PWS basta ir ao Personal Web Server e carregar em Start (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 por defeito é o nome que se deu ao computador, variando por isso de máquina para máquina. No meu caso será jvpc. Assim, quando for preciso aceder ao servidor virtual, poder-se-á fazer no browser atra- vés de http://jvpc/ ; aparecer-lhe-ão informações do PWS, da mesma maneira que se escrevesse no address link do seu browser localhost . 19CAPÍTULO 1: INTRODUÇÃO ÀS ACTIVE SERVER PAGES 1.5 Programar com ficheiros ASP e HTML As extensões dos ficheiros ASP é *.asp, e dos ficheiros HMTL é *.html ou *.htm Conforme a versão do servidor Internet, o programadorpoderá 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 podem encontrar na Internet, ou outros mais profissionais como o InterDev da Microsoft. Acho que cada um deve tentar todos os que puder, para fazer a escolha que esteja mais apropriada à sua maneira de programar. 1.6 Conhecer o HTML (Hyper Text Markup Language) em 12 passos Para se programar as ASP, serão necessários certos requisitos, não só 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 isso descreverei alguns comandos do HTML, que de linguagem de pro- gramação tem muito pouco, visto que se poderia comparar a alguns processadores de texto bastante antigos (quem se lembrar do WordStar sabe ao que me refiro!). Vou então indicar 12 pontos essenciais em relação ao HTML, para que o leitor fique melhor preparado para o que vai ler nos próximos capítulos, onde se misturará HTML com o código ASP. 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 duas Tags - 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>. Nem todas o requerem, mas podemos dizer que cerca de 90% sim. 3. Para enviar conteúdo para o browser de maneira a ser visível pelo 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 É UM TESTE</FONT> </BODY> </HTML> 5. Para simular um parágrafo existe a Tag <P> <HTML> <BODY> <P><FONT FACE=”ARIAL” COLOR=”GREEN” SIZE=”5”>ISTO É UM TESTE</FONT></P> E ISTO JÁ É OUTRO TESTE </BODY> </HTML> 21CAPÍTULO 1: INTRODUÇÃO ÀS ACTIVE SERVER PAGES 6. A mudança de linha é feita com <BR> que funciona como que um Enter no mesmo parágrafo: <HTML> <BODY> <P><FONT FACE=”ARIAL” COLOR=”GREEN” SIZE=”5”>ISTO É UM TESTE</FONT></P> E ISTO<BR> JÁ É<BR> OUTRO TESTE<BR> </BODY> </HTML> 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> 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 cliente tipo 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és de formulários. Podemos usar o método POST ou GET, que serão definidos para o tipo de programação com dados dos utilizadores via 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 link com a Tag <A> </A> <HTML> <BODY> <FORM NAME=”nomedoformulario” METHOD=”POST”> O seu nome:<INPUT NAME=”nome”><BR> O seu telefone:<INPUT NAME=”email”><BR> <INPUT TYPE=”SUBMIT”> </FORM> <A HREF=”outrapagina.html”>Pode seguir por aqui</A> </BODY> </HTML> 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ásicos essenciais do HTML, para compreender parte daquilo que vai ser demonstrado neste manual. A linguagem HMTL é bastante simples e 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ão estiver a perceber o código de HTML volte a consultar este capítulo onde se introduziram as Tags que poderiam causar mais dúvidas. A maioria das outras Tags e opções são quase óbvias aquando da sua tradução para português. 1.7 Sites com recursos de ASP Poderia enumerar muitas dezenas de sites com recursos a nível das ASP, alguns dos quais eu ainda recorro. Mas vou indicar aque- les que julgo valerem mesmo a pena, não apenas pelo conteúdo que têm, mas também pela maneira como apresentam o conteúdo e o organizam: www.activeserverpages.com Este é o site ‘Pai’ das ASP. Terá sido em princípio o primeiro re- lacionado com este assunto. Tem muitos exemplos explica- dos, e vários truques para aquelas dificuldades que vão aparecendo enquanto progra- mamos. É actualizado periodi- camente há muito tempo. CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES28 2.1 Os primeiros passos Para começar irei demonstrar-lhe, em apenas uma linha, como poderá escrever uma frase; depois veremos o mesmo no HTML, com variáveis e acções entre variáveis. Isto ainda antes de definir os objectos, métodos, expressões, funções e regras das ASP. Terei como princípio que o leitor tem conhecimentos de HTML, visto ser a base 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 se pode facilmente verificar, estes são os identificadores de onde co- meça e acaba a ASP que foi construída, pois quando introduzirmos código entre o HTML, teremos de definir onde estão as ASP, e estes indicadores serão determinantes para esse propósito. Response é um objecto das ASP que conta com bastantes métodos. Este e o objecto Request vão ser sem sombra de dúvidas aqueles com que irá trabalhar mais. Encontra uma tabela no capítulo seguinte com os objectos principais e seus métodos de maneira que sempre que necessitar os possa encontrar mais rapidamente consultando a ta- bela. (ficheiro cpt2-1-2.asp) <% pais = “Portugal” response.write”Olá “ & pais %> Este segundo exemplo demonstra uma abordagem diferente mas com o mesmo resultado no browser. Aqui pretendo demonstrar a maneira como se fazem ligações com o símbolo & CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES30 Neste exemplo foi feito aquilo que de mais normal vai ser feito no resto deste manual - usar as variáveis geradas ou não nas ASP e introduzi-las no meio do código HTML. Repare no truque para que a variável fique entre o HTML. Nãofoi necessária a rotina response.write, sendo então introduzido apenas o caracter de igualdade seguido da variável. A plica ‘ é usada para comentar, sempre que quisermos introduzir algum 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 de programação. Julgo que com estes exemplos o leitor ficou a perceber como se estrutura 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, aquilo que une toda a programação, e que são os operadores e as expressões. Vou começar pelas expressões, e deixar uma tabela de operadores para o final deste capítulo (visto que são bastante poucos). Entretanto estes vão sendo usados nos próximos exemplos. (ficheiro cpt2-2-1.asp) <% a= 10 b=100 if a < b then response.write “a é menor que b” else if a > b then response.write “a é maior que b” end if end if %> 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 enviada para o browser, depende dos valores a e b. O IF tem uma estrutura simples: IF (ALGO) THEN (FAZ MAIS ALGO) END IF Ou quando as opções são várias: IF (ALGO) THEN (FAZ ALGO) END IF IF (ALGO2) THEN (FAZ ALGO2) END IF IF (ALGO3) THEN (FAZ ALGO3) END IF Mas se as opções estão em cadeia, e se uma acontecer, as outras tê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 IF END IF Este tipo de expressões dá muito jeito aos programadores, mas quando existem várias opções em cadeia, eu sugiro que se use a expressão CASE; fica melhor organizado, e as confusões dentro do có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 programa tende a ficar confuso. Notará isso se lá voltar ao fim de uns meses para fazer manutenção (muito comum em sites na Internet). 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 de qualquer programador, não sendo por isso algo que precise de uma especial atenção para as tentar perceber. (ficheiro cpt2-3-1.asp) <% a= 4 b=12 if a < b then ‘ comparação entre dois valores for I=0 to a ‘ ciclo FOR response.write “ a(“ & a & ”) é maior que “ & I & “<br>” ‘ o símbolo <br> em HTML simboliza mudança de linha ‘ no mesmo parágrafo next I ‘ final de ciclo FOR else if a>b then I = a While b<I ‘ciclo WHILE Response.write “b(“ & b & ”) é menor que” & I & “<br>” I = I – 1 wend ‘ final de ciclo WHILE end if end if %> Neste caso aproveitei código de um exemplo inteiro, para lhe dar mais 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 e rápida. Por mais tarde que eu volte a mexer no código, fico a sempre perceber o que lá se passa em minutos. 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 uma resposta (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 de contas aquilo que mais vai usar se o destino que pretende dar aos seus conhecimentos de ASP for a programação com bases de da- dos. Introduzindo o valor que se quer dentro de cada célula da tabe- la, é o truque que 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. 35CAPÍTULO 2: EXPRESSÕES E OPERADORES 2.4 Variáveis Nas ASP, as variáveis são também, como no Visual Basic, dinâmi- cas, não sendo por isso necessária a sua inicialização. Seja como for, é ‘má’ programação usar variáveis globais sem controlo sobre as mesmas. Deve-se usar, mas não em excesso, assim como se devem sempre inicializar as mesmas, não só para melhor controlo, mas também para melhor performance. Para que não se ‘desleixe’ com as variáveis, use o código <% Option Explicit %> no início de cada página para que tenha de inicializar sempre as variáveis. Assim, as alocações de memória, para as variáveis dinâmicas, serão feitas com uma melhor estrutura, ficando por esse motivo beneficiado o desempenho das suas páginas. Para inicializar uma variável em ASP basta usar Dim . Para criar- mos a variável ‘xpto’ usamos então <%Dim xpto%> Temos nas ASP, alguns tipos de variáveis a considerar: - variáveis usuais (usadas no momento, e que, como são dinâmicas, podem ser criadas a qualquer altura sem inicializaçã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ão Dim 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 acompanharem toda 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). CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES36 2.5 Operadores Apesar de já terem sido praticamente todos usados neste capítulo, vou então deixar uma pequena tabela dos operadores, para referên- cia. Os operadores de comparação e igualdade são os seguintes: 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 que iremos trabalhar ao longo deste manual. Estes operadores não se- rão usados única e exclusivamente no código de ASP, mas também aquando do uso de declarações de SQL. 37CAPÍTULO 2: EXPRESSÕES E OPERADORES Quando queremos fazer comparações múltiplas podemos então usar AND ou OR, como nos seguintes casos: (ficheiro cpt2-5-1.asp) <% a = 10 b = 20c = “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 para concatenaçã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. 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 neste código, pode recorrer à seguinte imagem, que julgo responder a qualquer 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 o tipo de estatísticas, contas, comparações e cálculos extra os irão requerer. No dia a dia, as empresas precisam de certas situações resolvidas 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 as suas próprias funções, por meio destes operadores de base. CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES40 3.1 Tabela de Funções base das ASP Um dos aspectos que mais se destaca nas ASP são as suas funções, e a facilidade de manuseamento das mesmas. Existem funções que facilitam muito a vida a quem faz a programação de vários sites. A recursividade é um dos pontos fortes quando programamos, 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 exemplos realmente 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 tabela está por ordem alfabética para facilitar a procura de qualquer uma das funções que possa ser necessária. As funções são da versão 2.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úmeros absolutos, 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 de valores dentro de uma mesma variável. São muito usados para simplificar actos muito comuns em programação, a todos os níveis. Um array é constituído por vários valores que estão separados por uma posição. O array variavel(“João”, 3, 1200, “Sol”), tem 4 posições. As posições de um array começam sempre do 0. Para acedermos aos dados que esta tem, basta indicarmos a posição que nos interessa. Ex. variavel(“João”, 3, 1200, “Sol”) Response.write variavel(0) ‘ devolve João Response.write variavel(1) ‘ devolve 3 Response.write variavel(3) ‘ devolve Sol 41CAPÍTULO 3: FUNÇÕES Asc() Devolve o número ASCII de um caracter Ex. variavel1 = Asc(“C”) ‘devolve 67 variavel2 = Asc(“1”) ‘devolve 49 Atn() Serve para calcular o arco-tangente de um valor Ex. Atn(1) ‘ devolve 0,785398163397448 CBool() Retorna True ou False: False se a expressão for falsa, caso contrário True Ex. Cbool(32=32) ‘ devolve True Cbool(10=32) ‘ devolve False CByte() Transforma qualquer valor (do tipo não Byte) para o tipo Byte Ex. CByte(225.1278) ‘ devolve 225 CCur() Idêntico a CByte(), mas neste caso para o tipo de moeda usado. CDate() Converte uma expressão que tende para uma Data, numa Data validada, não sendo necessário usar 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 os valores ASCII para o caracter correspondente Ex. 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 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES42 CreateObject() Cria uma referência a um objecto externo Ex. 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 String Ex. CStr(123) ‘ devolve uma string “123” Date() Devolve a Data corrente no servidor Internet Ex. response.write Date() DateAdd() Esta função serve para o programador obter uma data posterior ou anterior àquela que pretende usar para cálculo. Podemos querer saber qual o dia referente a 20 dias depois da data pretendida, ou 1 mês, ou 2 anos. A expressão usa 3 campos, o primeiro para introduzirmos o campo de data por onde quere- mos calcular a diferença, o segundo campo para o valor numérico dessa diferença, e no final a data de início. O campo do caracter que define o tipo de diferen- ça aceita as seguintes opções: h – horas n – minutos s – segundos yyyy – anos q – quarto anual m – meses do ano y – dias do ano d – dias w – dias da semana ww – semanas do ano Ex. 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 escolhendo um dos campos de comparação explicados em DateAdd() Ex. DateDiff(“d”, Now, “31-Jan-1999”) ‘ devolve a diferença entre a data de hoje e o dia 31 de Janeiro de 1999 43CAPÍTULO 3: FUNÇÕES DatePart() É dada uma certa data e obtemos em que altura do ano acontece usando os valores de campo de DateAdd() 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 data Ex. Day(“31-Set-2000”) ‘ devolve 31 Exp() Devolve a exponencial de um valor Filter() Pesquisa um array, para procura de um valor ou expressão Ex. variavel1(“Internet”,”Sites”,”Hosting”,”Portugal”) Filter(variavel1,”Si”) ‘ devolve Sites Fix() Devolve o inteiro de um qualquer valor FormatCurrency()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 o programador pretende Ex. 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ão Ex. Hour(Now()) ‘ devolve a hora do momento InStr() Devolve a posição de uma string dentro de outra a contar do início Ex. InStr(1,”Hoje é um bom dia para se programar”, “ra”) ‘ devolve 21 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES44 InStrRev() Devolve a posição de uma string dentro de outra a contar do fim Ex. 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 mesma está 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 mesmo o é 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 string Ex. Left(“Vamos programar ASP.”,3) ‘devolve “Vam” Len() Devolve o tamanho de uma string Ex. Len(“Vamos programar ASP.”) ‘ devolve 20 45CAPÍTULO 3: FUNÇÕES Log() Devolve o logaritmo de um dado número LTrim() Devolve uma string sem espaços do lado esquerdo Ex. LTrim(“ Isto é um teste.”) ‘ devolve “Isto é um teste.” Mid() Serve para termos um número dado de caracteres de uma string, a partir de uma dada posição Ex. 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 uma dada data Ex. 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 dado Ex. replace(“yyXiiXppX22fXjX” , ”X” , ”P” ) ‘ devolve “yyPiiPppP22fPjP” RGB() Devolve um valor representativo de uma cor. A expressão é estruturada por RGB(vermelho, verde, azul) Os valores usados vão de 0 a 255 Ex. RGB(22,233,143) ‘ devolve 9431318 Right() Funciona como a função Left() mas a contar da direita Rnd() Retorna um valor aleatório Round() Faz arredondamento a valores numéricos Ex. Round(23,77) ‘ devolve 24 CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES46 Second() Devolve os segundos de uma dada hora Sgn() Devolve o sinal de um valor Ex. Sgn(2) ‘ devolve 1 Sgn(-12) ‘ devolve –1 Sgn(0) ‘ devolve 0 Sin() Devolve o seno de um ângulo indicado Space() Introduz um dado número de espaços numa string Ex. response.write “Teste“ & Space(12) & “Feito…” ‘devolve “Teste Feito…” Split() Divide uma string num array, escolhendo o critério de separação Ex. 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, no que 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 tipo pode ser definido por 0 (comparação entre binários) ou 1 (comparação entre textos) Ex. var1 = “Teste” var2 = “ TesTE” StrComp( var1, var2) ‘ devolve 1 StrComp( var1, var2, 0) ‘ devolve –1 StrComp( var1, var2, 1) ‘ devolve 0 StrReverse() Devolve uma string dada, invertendo-a Ex. StrReverse(“123456”) ‘ devolve “654321” String() Devolve repetidamente um caracter escolhido um número de vezes definido Ex. String(“C”,10) ‘ devolve “CCCCCCCCCC” Tan() Devolve a tangente de um determinado número 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 usar Ex. 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 valor correspondente aos dados da variável a validar. Os números possíveis de resposta são: 0 – Vazio 1 – Null 2 – Integer 3 – Long 4 – Single 5 – Double 6 – Currency 7 – Date 8 – String 9 – Object 10 – Error 11 – Boolean 12 – Variant 13 – Data Access Object (DAO) 17 – Byte 8192 – Array WeekDay() Devolve o dia da semana de uma dada data Ex. WeekDay (“Outubro 10, 1999”) ‘ devolve 1 que representa Domingo WeekDayName()Devolve por extenso o dia da semana de uma dada data Ex. WeekDayName (1) ou WeekDayName(WeekDay (“Outubro 10, 1999”)) ‘ devolvem ambas as expressões domingo Year() Devolve o ano de uma dada data CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES48 Apesar da existência de um número considerável de funções nas ASP estas vingam não pela quantidade das mesmas, mas sim, nos objectos 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ções O 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úmero de dias que faltam até ao ano 2001 a partir de uma dada data. (ficheiro cpt3-2-1.asp) <% Function a2001(data) ‘ início da função If IsDate(data) then ‘ se for uma data for válida ‘ então envia-se a diferença entre datas a2001 = DateDiff(“d”,data,”Janeiro 1, 2001") else ‘ caso contrário ‘ enviamos a data como inválida, em forma de informação a2001 = “Data inválida...” end if ‘ final do if End Function ‘ final da função Response.Write “Hoje é “ & now() & “<br><br>” ‘ escreve a data corrente ‘ escreve-se então o resultado Response.write “Faltam “ & a2001(now()) & “ dias até ao ano 2001.” %> 49CAPÍTULO 3: FUNÇÕES Foram usadas as seguintes funções: IsDate() paranos certificarmos se a dada data tinha realmente 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 foi estabelecido, aquando do campo “d”); Now() dá-nos a data corrente, que inclui as 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 nome da função em qualquer ponto do código. No próximo exemplo pretende-se saber se um e-mail é válido. Desta maneira o programa valida algo que perturba muitos programado- res, para tentarem que o input dos utilizadores seja o mais correcto possível, e os e-mails introduzidos sejam o mais correctos. 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(a@a.c) If Len(email) <= 5 Then Valmail=False else ‘se não existir um @ também não é válido If InStr(1, email, “@”, 1) < 2 Then valmail=False Else ‘ o ponto final é também importante If InStr(1,email, “.”, 1) < 4 Then Valmail=False Else Valmail=True End If End If End If End Function ‘ final da função if valmail(“o_meu_email@algum_email.com”) then Response.Write”O e-mail o_meu_email@algum_email.com é válido.<br>” Else Response.Write”O e-mail o_meu_email@algum_email.com não é válido.<br>” End if if valmail(“tentar@iludir”) then Response.Write “O e-mail tentar@iludir é válido.<br>” Else Response.Write “O e-mail tentar@iludir não é válido.<br>” End if %> Foram usadas as seguintes funções: Len() retorna o tamanho de uma string, para sabermos se tem o tamanho mínimo pretendido para um e-mail normal InStr() muito usado para nos certificarmos da existência do símbolo @ ou de um ponto final, sempre usado antes da extensão do domínio. O leitor tem assim, uma função que lhe valida todos os e-mails que receber como input. 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é que ponto podemos ir com o ciclo FOR. Fig. 3.3 - Resultado do ficheiro cpt3-2-3.asp 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ódigo ASP, que é conhecido como o VBScript do lado do servidor. O IIS interpreta 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 trata de 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 em bases de dados. No exemplo seguinte pode-se perceber o truque de criar gráficos em HTML, que servem para esse mesmo propósito. O código seguinte é bastante explícito nesse ponto. O truque é o de controlar 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> <% Next End Function Dim ardados(3,3) Ardados(0,0) = “Primeiro” ardados(0,1) = 100 ardados(1,0) = “Segundo” ardados(1,1) = 40 ardados(2,0) = “Terceiro” ardados(2,1) = 60 ardados(3,0) = “Quarto” ardados(3,1) = 18 criagrafico() %> 55CAPÍTULO 3: FUNÇÕES que mantém, ou que repete bastante nas várias páginas de um mesmo site. Com os SSI, o programador introduz todas as funções que 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 para aquele tipo de código que sabemos vai ser alterado em várias pági- nas. Dessa maneira, bastará alterar uma vez, para que todas as páginas fiquem actualizadas com o novo código. A maneira de se chamar um ficheiro dentro de um ASP (uso de SSI), tenha ele parte de código HTML, ou de ASP, é <!—#INCLUDE FILE=”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 de um de HTML - um pouco confuso! Vejamos então os seguintes fi- cheiros, criados a partir de tudo aquilo que temos vindo a criar neste capí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 HTML por defeito. Esse ficheiro ficará com uma extensão diferente (*.inc) para se poder diferenciar dos outros. Pode-se criar HMTL e ASP nesse mesmo ficheiro. (ficheiro cpt3-3-1.inc) <div align=”center”> <center> <table border=”0" width=”80%” bgcolor=”#0000FF”> <tr> <td width=”100%”><b><font face=”Arial” color=”#FFFFFF”>A Listagem das minhas Funções:</font></b></td> </tr> </table> </center> </div> <div align=”right”><%=FormatDateTime(Now(),2)%></div><br> Foram usadas as seguintes funções: FormatDateTime() formata a data escolhida, neste caso com um Formato de tipo 2; Now() é usada para que seja formatada a data corrente. 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 if End Function Function valmail(email) If Len(email) <= 5 Then valmail=False else If InStr(1, email, “@”, 1) < 2 Then valmail=False Else If InStr(1,email, “.”, 1) < 4 Then valmail=False else valmail=True End If End If End If End Function Function criacaixa() %><select size=”1" name=”nome”><% For I=0 to UBound(ardados) %> <option><%=ardados(I)%></option> <% Next %></select><% End Function Function criagrafico() For I=0 to UBound(ardados2) %> <table border=”0" width=”100"> <tr><td><font face=”ARIAL” size=”2"><%= ardados2(I,0)%></font></td></tr> <tr><td><table bgcolor=”blue” border=”1" width=”<%=ardados2(I,1)%>”><tr><td></td></tr></table></td></tr></table> <% Next End Function %> CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES58 Como foi visto o ficheiro cpt3-3-2.asp tem todas as funções criadas neste capítulo. Iremos incluí-lo com a potencialidade dos SSI numa outra página que usaremos para demonstrar as funções. Foi altera- do o nome de um dos arrays, para que não existissem conflitos entre ambas as funções. De futuro, as funções recebemos parâ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ódigo estivesse presente no ficheiro, tomando todas as funções como lo- cais. A partir deste momento podemos utilizar o ficheiro e todas as suas 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 ano 2001.<br><br>” if valmail(“o_meu_email@algum_email.com”) then Response.Write “O e-mail o_meu_email@algum_email.com é válido.<br>” Else Response.Write “O e-mail o_meu_email@algum_email.com não é válido.<br>” End if if valmail(“tentar@iludir”) then Response.Write “O e-mail tentar@iludir é válido.<br>” Else Response.Write “O e-mail tentar@iludir não é válido.<br>” End if Dim ardados(3) ‘ inicialização de array Ardados(0) = “Alentejo” ardados(1) = “Minho” ardados(2) = “Algarve” ardados(3) = “Beira-Litoral” %> 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) = 100 ardados2(1,0) = “Segundo” ardados2(1,1) = 40 ardados2(2,0) = “Terceiro” ardados2(2,1) = 60 ardados2(3,0) = “Quarto” ardados2(3,1) = 18 criagrafico() %> O resultado na imagem seguinte é bastante explícito daquilo que se pretendia. Temos todas as funções a funcionar, e podendo funcionar em 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 cada pá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 que mais vai utilizar. CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES62 4.1 Tabela de Objectos Os objectos que as ASP têm por defeito parecem ser poucos, mas os seus métodos são os suficientes para que o leitor consiga alcançar os objectivos pretendidos para o seu site. A maneira de usar os objectos é bastante simples, e intuitiva, funcionando como os objectos das outras linguagens. TABELA DE OBJECTOS DAS ASP Objectos Métodos e suas funções Response · Redirect usado para redireccionarmos o utilizador para outra página. Usado normalmente para controlo de utilizadores e acessos. · Cookies mecanismo para deixar informações do lado do cliente com variada informação (dentro das cookies existem outros métodos para o seu controlo, como veremos depois em pormenor). · Write é esta a maneira para enviar informação para o browser. · CacheControl desta maneira controlamos se a página pode deixar que se faça cache da mesma nos browsers (por defeito não deixa fazer cache). · Charset uma maneira de definirmos o tipo de caracteres a usar. · ContentType para definir o tipo de informação que vai ser passada, usado normalmente para UpLoad onde definimos que queremos passar não só informa- ção usual, mas também binária, originária de ficheiros. 63CAPÍTULO 4: OBJECTOS · Expires uma maneira de definir o tempo que uma página ficará activa e deixará de estar disponível. Neste caso definimos ao fim de quanto tempo expirará. · ExpireAbsolute idêntico ao Expires, com a diferença que se pode controlar, não com o valor que define ao fim de quanto tempo, mas sim com uma data que define a altura em que deixa de estar disponível. · IsClientConnected – desta maneira controla- mos se o cliente ainda está ligado. · Status define o código que está no HTTP header. · AddHeader Ajusta dinamicamente a informação que está no HTTP header. Request · Cookies neste caso será usado para ir buscar os cookies criados com o objecto response. · Querystring desta maneira poderemos obter os valores que vêm da página anterior, depois de submetermos um formulário com o método GET. · Form este método permite-nos obter os dados enviados por um formulário que esteja com o método POST. · ServerVariables usa-se muito este método para identificar os tipos de browsers que o cliente está a usar, os IPs do mesmo, a página de onde o cliente veio, assim como variadas informações sobre o servidor que está a ser usado. CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES64 Server · HTMLEncode o método que formata a informação que o utilizador insere. Esta formatação é muito importante devido a alguns símbolos serem reconhecidos pelo HTML, e por esse motivo o layout pode não ter o aspecto planeado · URLEncode parecido com o HTMLEncode, mas formata a string de maneira a ser válida para usar na linha de address dos browsers. · CreateObject é esta a maneira como iremos aceder a objectos exteriores, assim como componentes criados por nós ou outros. Os componentes de ASP são fi- cheiros de extensão DLL, especiais para os ASPs, possíveis com o VB ou o VC++ (Visual C++). · MapPath é com este método que trabalharemos os nossos ficheiros localmente (no servidor). Session · Timeout as sessões do servidor têm um limite, ao fim do qual toda a informação contida nas sessions desaparecem. Desta maneira poderemos controlar o tempo que as sessões estão activas. · SessionID este é o método que nos dá o nuúmero da sessão do cliente corrente. São uma espécie de impressão digital das sessões. · Abandon força a finalização das sessões. Application A variável global, mas idêntica para todos os utilizadores, ao contrário das sessions que são variáveis do tipo global, mas só para o cliente que está nessa sessão. TextStream · CreateTextFile método de criação de ficheiros de texto. · OpentextFile método de leitura dos ficheiros de texto. 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, usamos response.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 maioria vai ser aprofundada nos próximos capítulos, mas iremos tratar alguns deles ainda neste capítulo, assim como desenvolver exemplos reais de como usufruir ao máximo destes objectos. 4.2 Variáveis globais e de sessão As 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ágina para a outra. Normalmente quando se passa de uma página para outra, as variáveis da primeira página deixam de funcionar numa segunda. A maneira de ultrapassar este obstáculo é usando os ob- jectos Application e Session. Apesar de ambos os objectos serem usados para variáveis globais, cada um tem um objectivo diferente, e um comportamento diferente dentro do contexto da programação de páginas ASP. Para o leitor perceber como ambas funcionam ex- plica-se então como funciona o servidor de Internet que suporta as ASP: 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 HTTP que é feito na máquina onde está instalado e a correr. Desta forma o servidor consegue fazer uma estatística mais pormenorizada, que a grande maioria dos outros não conseguem. A partir do momento que o programador tem acesso a este ID, poderá seguir o rasto (pormenorizado) daquilo que esse utilizador faz, dentro do site. O ID de sessão, que pode aceder-se por session.sessionID, termina e passa a ser outro a partirdo momento que o browser é desligado, ou que passa o tempo limite de uma sessão, que se pode aceder por session.TimeOut . Cada pessoa que está a aceder ao site tem um ID diferente, assim como que cada sessão é diferente, podendo o programador usar as sessões, para passar de variáveis de uma página para outra, visto que a ligação apenas se quebra no desligar do browser, ou no atingir do limite de tempo das sessões. Pode-se ver pelo código seguinte o ID de uma sessão e o tempo limite que está por defeito no servidor. 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 em cookies, browser, headers, etc. Session.SessionID a maneira de saber qual o código da sessão no momento. Session.Timeout devolve o tempo de expiração das sessõ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 tipo de variáveis de uma páginas ASP para outra. Aqui então está um exemplo em que passamos uma string entre duas páginas. Ter em atenção de que estas variáveis ficam acessíveis não só na página que se corre em seguida, mas em todas aquelas que pertencerem a 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 continua activa. 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 da sessão no momento; Session.TimeOut neste ficheiro usámos este objecto com este método, de maneira a alterarmos o tempo limite de uma sessão. A possibilidade de podermos alterar o tempo limite de uma sessão é muito importante, tanto para sites de protecção por password, como para sites mais pesados, onde necessitamos de mais tempo, pois uma página que demore muito tempo a abrir, ou a processar algo bastante pesado, possa demorar mais de 1 minuto, e nessa altura a sessão deveria ter um mínimo de 2 minutos. Aqui também pudemos ver como é possível usar “ “ dentro de uma string, ou então lá criar algo 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 uma a mais por cada uma que lá introduzir. Tal como está no ficheiro, que vimos anteriormente. No ficheiro cpt4-2-2.asp temos então a possibilidade de ver como se altera o objecto que controla o tempo das sessões, e como criar uma sessão nossa, e lá introduzir dados que queiramos estarem acessíveis em uma ou várias páginas. Este ficheiro vai chamar um outro (cpt4-2-3.asp) para que o leitor se aperceba da maneira como foi possível criar uma sessão própria e aceder à mesma, a partir de outras páginas. 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 uma sessão para suportar uma string, o leitor poderá usar para criar um array ou número. As hipóteses são imensas, e a programação a este 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 seguir certas regras. A grande diferença entre Application e Session é que enquanto as variáveis criadas pelo segundo são acedidas apenas pelo utilizador do momento, ou por aquele a quem pertence um SessionID, as va- riáveis Application são acedidas por todos os utilizadores, todos os SessionID. Fica assim um esquema para o leitor perceber melhor como isto funciona. Fig. 4.4 - Funcionamento das variáveis globais Pelo esquema pode-se reparar que para cada utilizador existe uma sessão independente, enquanto a variável de Application é igual para todos. Vemos então um exemplo de como criar e aceder a uma variável de Application. Repare que existem dois métodos Lock e UnLock para que a mesma possa ser alterada. Para aceder à mesma não é ne- cessário usar as regras ditas anteriormente, e visíveis no exemplo seguinte: CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES70 (ficheiro cpt4-2-4.asp) <% Application.Lock Application(“Teste2”) = “Uma variável acessível por todos os utilizadores...” Application.UnLock Response.Write “ Avariável Application(“”Teste2"”) é > “ Response.Write Application(“Teste2”) & “ <“ %> Foram usados os seguintes objectos: Application.Lock serve para trancar a variável aos utilizadores, de maneira a poder ser alterada a variável; Application(“Teste2”) da mesma maneira que se usa as Sessions, pode-se criar uma variável e aceder à mesma; Application.UnLock usado para depois que é alterada a variável, tirando o Lock. Fig. 4.5 - Resultado do ficheiro cpt4-2-4.asp 71CAPÍTULO 4: OBJECTOS 4.3 Interagir com o utilizador Aquilo que realmente faz a diferença entre as páginas estáticas e as páginas dinâmicas é a possibilidade de resposta aos utilizadores em tempo real. Podem-se programar páginas que recebendo um input de um utilizador, estas respondem de acordo com os dados recolhidos, e isso não se pode fazer apenas com HMTL, e outros recursos básicos. Para se recolher dados do utilizador é necessário criar uma estrutu- ra que permite o utilizador inseri-los, de maneira que o programador possa trabalhar com os mesmos. Em primeiro lugar é criado um formulário HTML, que tanto pode estar numa simples página HTML, como numa página ASP. O utilizador pode ter uma página HTML com o formulário que depois de submetido vai buscar um ficheiro ASP, onde o programador pode recolher os dados e trabalhar sobre eles. Ou então o programador numa mesma página ASP controla o input que é feito, e conforme o estado em que o contexto se encon- tra, conforme a acção que é accionada. Mas com os ficheiros de exemplo 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 aos utilizadores, de maneira a poder ser alterada a variável; Application(“Teste2”) da mesma maneira que se usa as Sessions, pode-se criar uma variável e aceder à mesma; Application.UnLock usado para depois que é alterada a variável, tirando o Lock. 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 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ém de dizermos isso, vamos calcular a idade do aluno pela data de nascimento. Desta forma o leitor perceberá mais alguns pontos de desenvolvimento ASP a este nível e poderemos então criar um pequeno curso online que demonstra muito genericamente uma das grandes potencialidades da Internet, a formação online. Continuando então, vamos criar o formulário com as perguntas, e não esquecendo os nomes de cada Tag de input, nomes esses que serã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() e resposta(). Ficamos assim com os 3 pontos definidos. Basta agora criar o código que os vai colocar em produção. Comecemos pelo formulário que vai pedir os dados ao utilizador: 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 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%> CENTRO ATLÂNTICO - PROGRAMAÇÃO WEB COM ACTIVE SERVER PAGES78 Este código é introduzido antes de se usarem os procedimentos pois queremos que as variáveis sejam dadas como variáveis públi- cas dentro deste ficheiro ASP. Desta forma, é mais fácil tratar os dados e escusamos de estar sempre a usar o código Request.Form (“…..”), bastando assim apenas o nome que atribuímos a cada um dos argumentos que são passados. A variável Data fica com uma formatação diferente, pois queremos construir uma data real, para que 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 correspondente if not(IsDate(data)) then session(“erro”) = “* A data está inválida...<br>” else if (not(IsNumeric(media))OR ((media<0)OR(media>20))) then session(“erro”) = “* A média é inválida...<br>” else if not(IsNumeric(rendimento)) then session(“erro”) = “* O rendimento está inválido...<br>” end if end if end if if session(“erro”)<>”” then formulario else resposta end if %> <%End Sub%> Como se viu foram validadas todas as variáveis que o formulário apanhou do utilizador, e validadas conforme aquilo que se pretendia: a data validada como data e o rendimento e média do aluno como números, para que não sejam aceites letras ou outros caracteres idênticos. E no final é chamado o formulario() ou o procedimento resposta(), conforme o que se pretende. No caso de existir algum erro nas variáveis que foram pedidas, o utilizador é enviado nova- mente para o formulário, que mantém os dados anteriores, visto que os está sempre a apanhar com Request.Form(). Caso contrário, e visto que está tudo certo, o utilizador recebe a resposta em relação à sua simulação. Esta resposta é dada a partir do código que vemos a seguir. 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"> , <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%> 81CAPÍTULO 4: OBJECTOS Como podemos ver na imagem anterior, a resposta que se obteve foi negativa, depois de se terem efectuadas as comparações com os requisitos definidos para a atribuição de bolsa ao estudante. Teve-se o cuidado de se criar uma tabela com um texto de resposta por defeito, que só altera as zonas que são correspondentes aos dados que o utilizador introduziu. Neste caso é usado o DateDiff (), para que os alunos com uma idade não válida para as bolsas sejam avisados disso. No caso contrário é enviada a resposta em relação ao apoio por Bolsa de Estudo. Introduziu-se um link para o caso do utilizador querer recomeçar a simulação. Será aqui que tudo recomeçará, tendo em conta que a variável de sessão tem de estar vazia, ou o último erro continuaria a aparecer apesar de ser uma nova simulação. Por isso esta função começa com a sessão de erro a ser limpa, pois para se ter chegado a este ponto era porque as variáveis estavam correctas. Depois desta explicação, podemos ver o código por completo, para percebermos melhor o seu funcionamento. (ficheiro cpt4-3-3.asp) <%Sub resposta()%> <%session(“erro”) = “”%> <div
Compartilhar