Notas de Aula – v2.0 Janeiro de 2012
Transcrição
Notas de Aula – v2.0 Janeiro de 2012
FUNDAÇÃO DE APOIO À ESCOLA TÉCNICA DO ESTADO DO RIO DE JANEIRO - FAETEC Nome da Disciplina Período Carga Horária PROGRAMAÇÃO PARA A WEB – PWEB 3º 6 aulas/semana Notas de Aula – v2.0 Janeiro de 2012 Professor M. França [email protected] http://www.franca.pro.br/prof FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 1 Esta página foi deixada propositadamente em branco. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 2 O Autor Marcelo França é técnico em Processamento de Dados, tecnólogo em Processamento de Dados, analista de sistemas pós-graduado pela PUC-Rio, bacharel em Administração de Sistemas de Informação, licenciado em Informática pelo Instituto Superior de Educação do Rio de Janeiro – ISERJ, mestre em Informática pela Universidade Federal do Estado do Rio de Janeiro – UNIRIO, aluno do MBA em gerenciamento de projetos da Fundação Getúlio Vargas, certificado MCAD pela Microsoft, certificado SCJA pela Sun, certificado RAD Associate pela IBM, certificado OCJP 6 (SCJP) pela Oracle, professor de Informática da FAETEC e da Faculdade de Informática Lemos de Castro, e especialista de sistemas da IBM Brasil. Estuda Informática desde 1990 e trabalha com Informática desde 1994. Dedicatória Dedico este trabalho a todos os meus alunos e ex-alunos. Desejo a todos vocês muito sucesso profissional. Que seus objetivos sejam alcançados e que vocês sempre perseverem, mantendo o foco! Agradecimentos Agradeço a Deus pela iluminação e por ter sido tão feliz na escolha desta profissão. Obrigado, Senhor! FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 3 Esta página foi deixada propositadamente em branco. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 4 Índice Índice ............................................................................................................................ 5 Aula 1 – Internet ............................................................................................................. 7 Introdução à Internet ................................................................................................... 7 Visão Geral de Aplicações Web ..................................................................................... 10 Exercícios: ................................................................................................................ 13 Aula 2 – Revisão de HTML (1 de 2) .................................................................................. 15 Tags ......................................................................................................................... 15 HTML ........................................................................................................................ 15 XHTML ...................................................................................................................... 16 Imagens ................................................................................................................... 16 Links ........................................................................................................................ 17 CSS .......................................................................................................................... 20 Aula 3 – Revisão de HTML (2 de 2) .................................................................................. 23 XHTML 1.0 ................................................................................................................ 23 Tabelas ..................................................................................................................... 23 Tableless ................................................................................................................... 25 Formulários ............................................................................................................... 28 Aula 4 – Programação Orientada a Objetos ....................................................................... 33 Programação Orientada a Objetos ................................................................................ 33 Diagrama de Classes da UML ....................................................................................... 34 Exercícios .................................................................................................................. 35 Aula 5 – Javascript (1 de 5) ............................................................................................ 39 Introdução ao JavaScript: ........................................................................................... 39 Variáveis ................................................................................................................... 41 Constantes ................................................................................................................ 43 Tipos de Dados .......................................................................................................... 44 Strings - Manipulação de Strings. ................................................................................. 45 Aula 6 – Javascript (2 de 5) ............................................................................................ 53 Matrizes .................................................................................................................... 53 Funções de Conversão ................................................................................................ 54 Operadores ............................................................................................................... 55 Funções .................................................................................................................... 55 Estruturas de Controle e Laços ..................................................................................... 56 Caixas de Diálogo (Alert, Prompt e Confirm) .................................................................. 59 Aula 7 – Javascript (3 de 5) ............................................................................................ 61 Objetos Browser (DOM) .............................................................................................. 61 Window..................................................................................................................... 61 Exercício ................................................................................................................... 63 Document ................................................................................................................. 64 FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 5 History ...................................................................................................................... 66 Location .................................................................................................................... 66 Diferença entre “name” e “id” ...................................................................................... 68 Aula 8 – Javascript (4 de 5) ............................................................................................ 71 Date ......................................................................................................................... 71 Eventos .................................................................................................................... 74 Imagens ................................................................................................................... 76 Exercício Resolvido ..................................................................................................... 78 Aula 9 – Javascript (5 de 5) ............................................................................................ 79 Formulários e Validação .............................................................................................. 79 Aula 10 – PHP (1 de 3) ................................................................................................... 85 1 Introdução.............................................................................................................. 85 2 Exemplo de Script ................................................................................................... 85 3 Configuração (php.ini) ............................................................................................. 87 4 Sintaxe Básica ........................................................................................................ 88 Aula 11 – PHP (2 de 3) ................................................................................................... 91 5 Variáveis ................................................................................................................ 91 6 Tipos de dados ........................................................................................................ 91 7 Constantes ............................................................................................................. 92 8 Expressões ............................................................................................................. 93 9 Operadores ............................................................................................................. 93 Aula 12 – PHP (3 de 3) ................................................................................................... 97 10 Estruturas de Controle ........................................................................................... 97 11 Funções ................................................................................................................ 99 15 Inclusão de Arquivos ............................................................................................. 100 Aula 13 – PHP (aula extra) ............................................................................................ 103 16 Cookies ............................................................................................................... 103 17 Parâmetros (Query String) ..................................................................................... 104 18 Formulários.......................................................................................................... 104 Bibliografia/Créditos ..................................................................................................... 106 Apêndice A – Questionário de Avaliação do Curso ............................................................. 108 Apêndice B – Referências .............................................................................................. 110 JavaScript Objects Reference ...................................................................................... 110 Browser Objects Reference ......................................................................................... 113 HTML DOM Objects Reference ..................................................................................... 116 FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 6 Aula 1 – Internet Introdução à Internet Apresentação da Internet: rede mundial de computadores. A Internet é um conglomerado de redes em escala mundial, composta de milhões de computadores interligados pelo Protocolo de Internet (IP), que permite o acesso a informações e todo tipo de transferência de dados. A Internet é a principal das novas tecnologias de informação e comunicação. De acordo com dados de março de 2007, a Internet é usada por 16,9% da população mundial (em torno de 1,1 bilhão de pessoas). Observações: • Brasil: 27% possuem banda larga; • Por que usa-se o termo “web” (teia)? • MODEM mesmo? (“modem digital”) • Problema com o esgotamento do número de IPs disponíveis (IPv6); • Como surgiu a Internet? (militar acadêmico comercial) • Facebook: No início de 2011, o Facebook possui 500.000.000 de usuários ativos. Aproximadamente 1 em cada 13 pessoas no planeta. Metade deles está logada em qualquer dia. 48% dos usuários entre 18 e 34 anos checam o Facebook assim que acordam. 28% checam o Facebook de seus smartphones antes de sair da cama. Pessoas com mais de 35 anos agora representam mais de 30% de toda a base de usuários. Internet como plataforma (ubiqüidade/redes Wi-Max) As redes WiMAX funcionam de maneira semelhante à das redes Bluetooth. As transmissões de dados podem chegar aos 1Gbps a uma distância de até 50Km (radial), com estudos científicos para se chegar a 10Gbps. O funcionamento é parecido com o do Bluetooth e o Wi-Fi (no ponto de vista de ser transmissão e recepção de ondas de rádio), usado para comunicação entre pequenos dispositivos de uso pessoal, como PDAs, telefones celulares (telemóveis) de nova geração, computadores portáteis, mas também é utilizado para a comunicação de periféricos, como impressoras, scanners, etc. O WiMAX opera na faixa ISM (Industrial, Scientific, Medical) centrada em 2,45 GHz, que era formalmente reservada para alguns grupos de usuários profissionais. Nos Estados Unidos, a faixa ISM varia de 2400 a 2483,5 MHz. Na maioria da Europa, a mesma banda também está disponível. No Japão, a faixa varia de 2400 a 2500 MHz. VPN – Virtual Private Network Rede Privada Virtual é uma rede de comunicações privada normalmente utilizada por uma empresa ou um conjunto de empresas e/ou instituições, construída “em cima” de uma rede de comunicações pública (como por exemplo, a Internet). O tráfego de dados é levado pela rede pública utilizando protocolos padrão, não necessariamente seguros. VPNs seguras usam protocolos de criptografia por tunelamento que fornecem a confidencialidade, autenticação e integridade necessárias para garantir a privacidade das comunicações FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 7 requeridas. Quando adequadamente implementados, estes protocolos podem assegurar comunicações seguras através de redes inseguras. Deve ser notado que a escolha, implementação e uso destes protocolos não é algo trivial, e várias soluções de VPN inseguras são distribuídas no mercado. Adverte-se os usuários para que investiguem com cuidado os produtos que fornecem VPNs. Por si só, o rótulo VPN é apenas uma ferramenta de marketing. Protocolos Internet (HTTP, FTP, SMTP, HTTPS, POP, IMAP) O modelo TCP/IP de encapsulamento busca fornecer abstração aos protocolos e serviços para diferentes camadas de uma pilha de estruturas de dados (ou simplesmente pilha). No caso do TCP/IP, a pilha possui cinco camadas: As camadas mais próximas do topo estão logicamente mais perto do usuário, enquanto aquelas mais abaixo estão logicamente mais perto da transmissão física do dado. Cada camada tem um protocolo de camada acima e um protocolo de camada abaixo (exceto as camadas da ponta, obviamente) que podem usar serviços de camadas anteriores ou fornecer um serviço, respectivamente. Enxergar as camadas como fornecedores ou consumidores de serviço é um método de abstração para isolar protocolos de camadas acima dos pequenos detalhes de transmitir bits através, digamos, de ethernet, e a detecção de colisão enquanto as camadas abaixo evitam ter de conhecer os detalhes de todas as aplicações e seus protocolos. Essa abstração também permite que camadas de cima forneçam serviços que as camadas de baixo não podem fornecer. Por exemplo, o IP é projetado para não ser confiável e é um protocolo best effort delivery. Isso significa que toda a camada de transporte deve indicar se irá ou não fornecer confiabilidade e em qual nível. O TCP (Transmission Control Protocol - Protocolo de Controle de Transmissão), é um protocolo orientado a conexões confiável que permite a entrega sem erros de um fluxo de bytes. O UDP fornece integridade de dados (via um checksum) mas não fornece entrega garantida; já o TCP fornece tanto integridade dos dados quanto garantia de entrega (retransmitindo até que o destinatário receba o pacote). A Camada de Aplicação A camada de aplicação é a camada que a maioria dos programas de rede usa de forma a se comunicar através de uma rede com outros programas. Processos que rodam nessa camada são específicos da aplicação; o dado é passado do programa de rede, no formato usado internamente por essa aplicação, e é codificado dentro do padrão de um protocolo. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 8 Alguns programas específicos são levados em conta nessa camada. Eles provêem serviços que suportam diretamente aplicações do usuário. Esses programas e seus correspondentes protocolos incluem o HTTP (navegação na World Wide Web), FTP (transporte de arquivos), SMTP (envio de email), SSH (login remoto seguro), DNS (pesquisas nome <-> IP) e muitos outros. Uma vez que o dado de uma aplicação foi codificado dentro de um padrão de um protocolo da camada de aplicação ele será passado para a próxima camada da pilha IP. Na camada de transporte, aplicações irão em sua maioria fazer uso de TCP ou UDP, e aplicações servidoras são frequentemente associadas com um número de porta. Portas para aplicações servidores são oficialmente alocadas pela IANA (Internet Assigned Numbers Authority) mas desenvolvedores de novos protocolos hoje em dia freqüentemente escolhem os números de portas por eles mesmos. Uma vez que é raro ter mais que alguns poucos programas servidores no mesmo sistema, problemas com conflito de portas são raros. Aplicações também geralmente permitem que o usuário especifique números de portas arbitrários através de parâmetros em tempo de execução. Aplicações cliente conectando para fora geralmente usam um número de porta aleatório determinado pelo sistema operacional. O pacote relacionado à camada de aplicação é chamado Mensagem. Intranet: uso privado de tecnologias “Internet” Uma intranet é uma rede de computadores privada que utiliza a suite de protocolos da Internet. Consequentemente, todos os conceitos da última aplicam-se também numa intranet, como, por exemplo, o paradigma de cliente-servidor. Resumidamente, o conceito de intranet pode ser interpretado como "uma versão privada da Internet", ou uma mini-Internet confinada a uma organização. O termo foi utilizado pela primeira vez a 19 de Abril de 1995, num artigo da autoria técnica de Stephen Lawton, na Digital News & Reviews. Extranet: acesso externo a uma Intranet, (ou) ligação de duas Intranets. “Rede entre parceiros.” A Extranet de uma empresa é a porção de sua rede de computadores que faz uso da Internet para partilhar com segurança parte do seu sistema de informação. Tomado o termo em seu sentido mais amplo, o conceito confunde-se com Intranet. Uma Extranet também pode ser vista como uma parte da empresa que é estendida a usuários externos ("rede extra-empresa"), tais como representantes e clientes. Outro uso comum do termo Extranet ocorre na designação da "parte privada" de um site, onde somente "usuários registrados" podem navegar, previamente autenticados por sua senha (login). FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 9 Visão Geral de Aplicações Web Arquitetura Cliente/Servidor (desenho); GET (querystring) POST (formulário) Modelo em Camadas: Modelo em três camadas, derivado do modelo 'n' camadas, recebe esta denominação quando um sistema cliente-servidor é desenvolvido retirando-se a camada de negócio do lado do cliente. O desenvolvimento é mais demorado no início comparando-se com o modelo em duas camadas pois é necessário dar suporte a uma maior quantidade de plataformas e ambientes diferentes. Em contrapartida, o retorno vem em forma de respostas mais rápidas nas requisições, excelente performance tanto em sistemas que rodam na Internet ou em intranet e mais controle no crescimento do sistema. Arquitetura MVC: Model-view-controller (MVC) é um modelo de desenvolvimento de Software, atualmente considerado uma "arquitetura padrão" utilizada na Engenharia de Software. O modelo isola a "lógica" (A lógica da aplicação) da interface do usuário (Inserir e exibir dados), permitindo desenvolver, editar e testar separadamente cada parte. Este modelo arquitetural é muito usado em aplicações Web. Componentes: O modelo (model) é usado para definir e gerenciar o domínio da informação e notificar observadores sobre mudanças nos dados. Ele é uma representação detalhada da informação que a aplicação opera. A lógica de negócio adiciona valor semântico aos dados, e quando há mudança de estado o modelo notifica seus observadores. Por exemplo, aluno, professor e turma fazem parte do domínio de um sistema acadêmico. Operações como calcular a média final do aluno ou o índice de faltas da turma fazem parte da lógica de domínio. A forma como o dado é armazenado ou acessado não é de interesse do MVC, assume-se que é de responsabilidade do modelo. É a camada de persistência. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 10 A visão (view) apresenta o modelo num formato adequado ao utilizador, na saída de dados, e diferentes visões podem existir para um mesmo modelo, para diferentes propósitos. Baseada no reuso dos outros componentes. O controlador (controller) recebe a entrada de dados e inicia a resposta ao utilizador ao invocar objetos do modelo, e por fim uma visão baseada na entrada. Ele também é responsável pela validação e filtragem da entrada de dados. Exemplo: um servlet Java. Um caso prático é uma aplicação web em que a visão é um documento HTML (ou derivado) gerado pela aplicação. O controlador recebe uma entrada GET ou POST após um estímulo do utilizador e decide como processá-la, invocando objetos do domínio para tratar a lógica de negócio, e por fim invocando uma visão para apresentar a saída. Thin Client O cliente pode ser “magro”, pois o “peso” do processamento reside no servidor web. A comunicação se dá por http REQUEST (requisição) e http RESPONSE (resposta). Browsers Ou navegadores (Microsoft IE, Opera/Smartphones, Firefox/Mozilla, Google Chrome); Servers Ou servidores Web (Microsoft IIS, Apache/Unix/Linux, Tomcat, IBM WAS); Páginas Estáticas x Páginas Dinâmicas Código que gera páginas dinamicamente; Um código que gera código (HTML/XHTML) Páginas dinâmicas: .php, .jsp, .aspx Páginas estáticas: .html, htm Protocolo http: Request (Requisição): Normalmente de 2 tipos: GET (links/querystring); POST (formulários). Response (Resposta). Obs.: Existem outros métodos como o PUT (upload) e o DELETE. Linguagem HTML: HyperText Markup Language; Linguagem de “marcação” – TAGs. Versão 4 é a última versão “em produção”. O XHTML se baseou nesta versão. Versão 5, em testes, deve incluir recurso para competir com o Adobe Flash (descontinuado) e com o Microsoft Silverlight. HTML5 (Hypertext Markup Language, versão 5) é uma linguagem para estruturação e apresentação de conteúdo para a World Wide Web e é uma tecnologia chave da Internet originalmente FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 11 proposto por Opera Software.[1] É a quinta versão da linguagem HTML. Esta nova versão traz consigo importantes mudanças quanto ao papel do HTML no mundo da Web, através de novas funcionalidades como semântica e acessibilidade. Com novos recursos, antes só possíveis por meio de outras tecnologias. Sua essência tem sido melhorar a linguagem com o suporte para as mais recentes multimídias, enquanto a mantém facilmente legível por seres humanos e consistentemente compreendida por computadores e outros dispositivos (navegadores, parsers, etc). O HTML5 será o novo padrão para HTML, XHTML, e HTML DOM. Atualmente, está em fase de esboço, porém diversos navegadores já implementam algumas de suas funcionalidades. XHTML XML + HTML Um HTML mais rígido, mais sintaticamente correto; Recomendado pelo W3C. O XHTML, ou eXtensible Hypertext Markup Language, é uma reformulação da linguagem de marcação HTML, baseada em XML. Combina as tags de marcação HTML com regras da XML. Este processo de padronização tem em vista a exibição de páginas Web em diversos dispositivos (televisão, palm, celular, etc). Sua intenção é melhorar a acessibilidade. XHTML1: A mais recente Recomendação XHTML da W3C é o XHTML 1.1: Module-based XHTML, que é uma reformulação do XHTML 1.0 Strict, com pequenas modificações, usando alguns módulos de um conjunto definido em Modularização de XHTML,[2] uma Recomendação W3C que cria uma modularização de frames, um padrão de módulos, e várias outras definições. Todas as ferramentas depreciadas de HTML, como elementos presencionais e framesets, e até mesmo os atributos lang e o atributo de âncoras name, que ainda eram permitidos no XHTML 1.0 Strict, foram removidos desta versão. A apresentação é controlada puramente pelas Folhas de Estilo em Cascata (CSS). Esta versão também permite suporte à marcação rubi, necessária para línguas do Extremo Oriente (especialmente CJK). DHTML Uso em conjunto das tecnologias: (X)HTML; + Javascript; + CSS; e DOM (Document Object Model). Dynamic HTML, ou DHTML, não é uma linguagem mas sim a união das tecnologias HTML, javascript e uma linguagem de apresentação, como folhas de estilo CSS aliada a um Modelo de Objeto de Documentos, para permitir que uma página Web seja modificada dinamicamente na própria máquina cliente, sem necessidade de novos acessos ao servidor web. Atualmente há pelo menos três grandes grupos trabalhando no DHTML: o W3C, que é o responsável pelas versões oficiais da HTML, a Netscape, e a Microsoft. Em relação à especificação oficial, a Netscape e a Microsoft incluíram vários recursos extras que ajudaram ainda mais o DHTML. Sendo assim, esses DHTMLs vão algo além da capacidade de alterar as propriedades das marcações tags HTML dinamicamente. O DHTML da Microsoft, por exemplo, permite que se adicionem efeitos como sombra e néon a imagens dentro de um documento HTML. Outro recurso conhecido como Fontes Dinâmicas (Dynamic Fonts), da Netscape, permite que fontes sejam transmitidas pelo servidor junto com o documento HTML, possibilitando, a qualquer browser que implemente esse recurso, mostrar os caracteres exatamente como planejou o autor do documento. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 12 Resumindo, DHTML é um conjunto de ingredientes que proporcionam um controle sem precedentes sobre a apresentação do conteúdo de páginas da Web, além de possibilitar a inclusão de componentes multimédia, como animações, diretamente no código HTML, sem a necessidade de plugins. Toda a curiosidade em torno do HTML Dinâmico se justifica então, já que o mesmo estabelece novos patamares de interação e movimento na internet a um baixo custo - medido em velocidade, abrangência e flexibilidade, por exemplo, melhor do que em moeda corrente. Exercícios: Responda (Pesquise) 1. O que é Internet? 2. O que é World Wide Web? 3. O que é um browser? 4. O que é um Web Server? 5. Qual a diferença entre um http GET e um http POST? 6. O que é HTML? 7. Relacione Internet, Intranet e Extranet. 8. O que é Hipertexto? 9. O que é um Hiperlink? 10. O que é uma URL? 11. Qual a relação entre DNS e um endereço IP? 12. Explique o conceito de Web 2.0. 13. O que é e-mail? 14. Qual é considerado o serviço mais popular da Internet? 15. Qual a diferença entre WWW e Internet? 16. O que é VNC? 17. O que é Groupware? Dê exemplos. 18. O que é chat? Dê exemplo de um software. 19. O que é um wiki? Dê exemplo de um site. 20. O que é um arquivo/protocolo Torrent? 21. Orkut, Facebook e Twitter são exemplos de que? 22. O que é DHTML? 23. O que é AJAX? 24. Explique a técnica QueryString. Qual é o seu “problema”? 25. O que é Cloud Computing (SaaS)? 26. Explique o conceito de Sessão (Web). 27. O que são e para que servem os Cookies? FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 13 Esta página foi deixada propositadamente em branco. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 14 Aula 2 – Revisão de HTML (1 de 2) Tags Tags de início e fim. <html> </html> cabeçalho <head></head> meta (tag informativa) <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> título <title> </title> corpo <body> </body> HTML Exemplo/Exercício Usando o Bloco de Notas e o navegador para testar o código escrito: <html> <head> <title>Head First Lounge</title> </head> <body> <h1>Welcome to the Head First Lounge</h1> <img src="drinks.gif"> <p> Join us any evening for refreshing elixirs, conversation and maybe a game or two of <em>Dance Dance Revolution</em>. Wireless access is always provided; BYOWS (Bring your own web server). </p> <h2>Directions</h2> <p> You'll find us right in the center of downtown Webville. Come join us! </p> </body> </html> No Bloco de Notas: Arquivo/Salvar, alterando a opção “Tipo” para Todos os arquivos (*.*), senão o Bloco de Notas pode adicionar automaticamente a extensão “.txt”. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 15 XHTML Exemplo/Exercício <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="pt-br"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Título do Documento</title> </head> <body> <!-- ... Corpo do Documento ... --> <p>Corpo do Documento</p> </body> </html> Note as diferenças entre o HTML e o XHTML: Neste últimos, as tags sempre devem ser escritas em minúsculas, sempre fechadas! Imagens Tag <img /> Browsers handle <img > elements a little differently than other elements. Take an element like an <h1> or a <p>. When the browser sees these tags in a page, all it needs to do is display them. Pretty simple. But, when a browser sees an <img> element something very different happens: the browser has to retrieve the image before it can be displayed in a page. The best way to understand this is to look at an example. Let's take a quick look back at the elixirs page from the Head First Lounge, which has four <img> elements: Observação: • “./” diretório atual, ou seja, onde a página (arquivo) reside. • “../” volta/sobe 1 nível Exercício/Exemplo <html> <head><title>Head First Lounge Elixirs</title></head> <body> <h1>Our Elixirs</h1><h2>Green Tea Cooler</h2> <p> <img src="../images/green.jpg"> Chock full of vitamins and minerals, this elixir combines the healthful benefits of green tea with a twist of chamomile blossoms and ginger root. </p><h2>Raspberry Ice Concentration</h2> FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 16 <p> <img src="../images/lightblue.jpg"> Combining raspberry juice with lemon grass, citrus peel and rosehips, this icy drink will make your mind feel clear and crisp. </p><h2>Blueberry Bliss Elixir</h2> <p> <img src="../images/blue.jpg"> Blueberries and cherry essence mixed into a base of elderflower herb tea will put you in a relaxed state of bliss in no time. </p>We've got four images in this HTML. <h2>Cranberry Antioxidant Blast</h2> <p> <img src="../images/red.jpg"> Wake up to the flavors of cranberry and hibiscus in this vitamin C rich elixir. </p> <p> <a href="../lounge.html">Back to the Lounge</a> </p> </body> </html> Tipos de Imagem “Atualmente” os navegadores aceitam três formatos de figuras: GIF, JPEG e PNG, que podem ser incluídas nas páginas através do elemento <img />. Este elemento possui o atributo “alt”, que deve ser utilizado para fornecer um texto alternativo (acessibilidade) quando a imagem não puder ser visualizada, já o atributo “src” deve ser utilizado para indicar a localização da figura. Por exemplo: <img src=”../papagaio.jpg” alt=”charge do papagaio” /> Links Introdução As ligações hipertexto (ou hiperlinks) são figuras ou trechos de textos que, quando clicados, ou acionados, redirecionam o navegador ou leitor XHML a outro documento, ou a outro ponto do documento atual. Neste contexto, há o conceito de página de origem, na qual existe a ligação, e a página destino, para a qual a ligação aponta. Em XHTML existem as ligações absolutas, normalmente utilizadas para documentos em outros servidores, e as ligações relativas, utilizadas para referenciar páginas que estão hospedadas no mesmo servidor que a página de origem. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 17 Elemento <a> </a> O elemento <a> </a> é utilizado para criar as ligações nos documentos, que são feitas através do uso do atributo “href”, cujo valor é o endereço de destino da ligação: <a href=”endereço de destino”> texto da ligação </a> Uma ligação relativa pode se parecer com: <a href=”../aulas-ambiente-internet.html”> Notas de aulas </a> E uma ligação absoluta: <a href=”http://www.franca.pro.br/filc/aulas.xhtml”> Notas de aulas </a> Onde: “http://” é o nome do protocolo utilizado, que poderia ser substituído por “ftp://” ou “mailto:” dependendo da necessidade – este último usado para envio de e-mail. Outro atributo que pode ser utilizado pelo elemento <a> é o “name”, utilizado na criação de ancoras dentro do mesmo documento. <a name=”nome”> Texto da ancora </a> Para referenciar um ancora no mesmo documento pode usar: <a href=”#ancora”> Texto da ligação </a> Para referenciar um ancora em outro documento: <a href=”endereço do documento#ancora”> Texto da ligação </a> Uma opção ao atributo name, mas que só funciona nos navegadores mais recentes é o atributo “id” presente na maioria dos elementos do XHTML, por exemplo: <h6 id=”ambiente_internet”> Ambiente Internet </h6> Para definir uma ligação no mesmo documento para este elemento poderíamos utilizar: <a href=”ambiente_internet”> Material das aulas <a> Exercício XHTML <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>XHTML Exemplo 09</title> </head> <body> <h1> Exemplo de uso de Ligações Hipertexto </h1> <p> Menu :</p> <p> [-] <a href="#uteis">Links Úteis</a></p> <p> [-] <a href="#busca">Sites de Busca</a></p> <p> [-] <a href="#ref">Referencias</a></p> FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 18 <p> <a name="uteis">Links Úteis :</a> </p> <p> | <a href="http://www.yahoo.com.br">http://www.ig.com.br</a> | <a href="http://www.bol.com.br">http://www.bol.com.br</a> | <a href="http://www.gmail.com">http://www.gmail.com</a> | <a href="http://www.hotmail.com">http://www.hotmail.com</a> | </p> <p> <a name="busca">Sites de Busca :</a> </p> <p> | <a href="http://www.google.com.br">http://www.google.com.br</a> | <a href="http://www.yahoo.com.br">http://www.yahoo.com.br</a> | <a href="http://www.altavista.com.br">http://www.altavista.com.br</a> | <a href="http://www.cade.com.br">http://www.cade.com.br</a> |</p> <p> <a name="ref">Referencias :</a> </p> <p> | <a href="http://www.openoffice.org.br/saite/">Open Office</a> | <a href="http://www.debian.org/">Debian Linux</a> | <a href="http://www.suse.com"> SuSe Linux</a> | </p> </body> </html> FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 19 CSS Introdução – Estilo “Inline” CSS é uma recomendação do W3C para facilitar a manutenção de sites. Inline: Inline styles are when you just insert the type of style you want inside another tag, using the style attribute. This is usually the least useful way to use CSS. <p style="width:100%; color:#660099; text-align:right; background-color:#ffcc00;" > is the style for this example. </p> Tag <style> Styles can also be placed in the document using the <style> tag. The <style> tag is usually placed in the head section of the document, where it will apply to the whole document. When using styles that are not inline styles. A style is defined for a particular tag or for a named class. The syntax for creating a style for an HTML tag is to write tag { styles } . Note that you do not need " marks around the styles when written this way. It is a good idea to put <!-- and --> comment tags in between the <style> and </style> tags, just to make sure that their contents aren't accidentally displayed in the page. Exemplo: <html> <head> <title> Basic styling! </title> <style> <!-p { color:#009900; font-family:"comic sans ms",sans-serif; } h1 { color:#660000; font-size:12pt; } --> </style> </head> <body> <h1> Hello World!</h1> <p>I am a very basic page.</p> Use your back button to get out of here. </body> </html> FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 20 Classes CSS Styles can also be applied to classes. A class is just a name you make up for your style. To specify the style for a class, just write the class name with a . in front of it and then define your style as you would have done for an html tag. To use your class, just put class="whatever_your_class_is" in your opening tag. <div> & <span> Don't have an appropriate tag to put the style in? Two special tags were introduced to take care of just this. Use <div> when the area you want to apply the style to has other tags inside it and is a selfcontained unit of anywhere from a paragraph to most of a page. Use <span> when the area you want to apply the style to is only part of a paragraph, perhaps a single word. Exemplo: <html> <head> <title> Basic styling! </title> <style> <!-.green { color:#009900; text-decoration:underline; } .red { color:#660000; font-size:12pt; } p { color:#000099; } --> </style> </head> <body> <h1 class="green"> Hello World!</h1> <p class="red">I am a very basic page.</p> <p>Use your back button to get out of here.</p> </body> </html> Estilos Externos Styles can also be set in an external style sheet which is linked to the page with a <link> tag. For example the style sheet for this site is included like this: <link rel="stylesheet" type="text/css" href="class.css" /> The advantage of doing this is that the same style sheet can be used in every page on your site. Your entire site can be updated by changing just this one file. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 21 You can also include different styles for different devices in the same xhtml page. Just add the attribute media=type_of_media. Where type of media is something like screen, print, aural, etc. See HtmlHelp for a list of media types and more on span, div, and adding styles. Inside an external css file you just list your selectors and their specifications like you would between <style> tags, but You do not put <style> tags inside an external style sheet. Cascading How order matters: The term "Cascading" is used because styles "cascade" or are inherited. If more than one style can apply to something on the page, then the one that is closest to it is what is applied. There may be some parts of a previous style that aren't contradicted by the current style, these are also supposed to apply. For example: If the attributes in an inline style change the font size to 20pt, but don't say anything about font type, then whatever font type is specified earlier in the document for this tag still applies. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 22 Aula 3 – Revisão de HTML (2 de 2) XHTML 1.0 Tipos São três os tipos de DOCTYPE para XHTML: • STRICT; • TRANSITIONAL; • FRAMESET. Strict: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML; 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> Esta é a mais rígida das declarações. Os documentos XHTML no modo Strict não admitem qualquer item de formatação dentro dos elementos e nem elementos em desuso "deprecated" segundo as recomendações do W3C. São indicados para uso com folhas de estilo em cascata, com marcação totalmente independente da apresentação; Transitional: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML; 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> Esta declaração permite uma maior flexibilidade e é indicada para documentos que ainda utilizem elementos em desuso ("deprecated"), regras de apresentação embutidas em tags e também para documentos destinados a exibição em browsers sem suporte para CSS. Não admite qualquer tipo de marcação para frames; Frameset <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML; 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> Esta declaração permite tudo da declaração transational e mais os elementos especificos para frames. Tabelas Introdução O elemento “<table> </table>” é o responsável pela manutenção das tabelas nesta linguagem. Na construção de uma tabela podemos utilizar os elementos da tabela ao lado para definir suas partes. Uma célula pode se estender por mais de uma coluna. Para isto, deve ser utilizado o atributo “colspan” seguido do número de colunas que a célula deve se expandir. Caso a célula tenha de ocupar mais de uma linha o atributo a ser utilizado é o “rowspan”, ambos devem ser inseridos dentro de uma declaração <td> </td>. Exemplo (Vai ocupar 3 colunas): <td colspan=3>Vendas de Automóveis no Varejo por Fabricante</td> FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 23 Exemplo/Exercício <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>XHTML Exemplo 13</title> </head> <body> <h1> Exemplo de uso de Tabelas </h1> <br /> <table align=center width=90% border=2 cellspacing=5 cellpadding=5 bgcolor=#BBFFBB> <caption align=bottom>Exemplo 2: Uma tabela mais elaborada <tr> <th colspan=4 bgcolor=aqua>Vendas de Automóveis no Varejo por Modelo <tr bgcolor=#FFCCC8> <th>Fabricante <th align=left nowrap>Marca (incluindo todos os modelos e categorias) <th align=right>1995 <th align=right>1996 <tr> <th valign=top rowspan=2 bgcolor=yellow>Fiat <td>Tempra <td align=right>12.345 <td align=right>15.670 <tr> <td>Uno <td align=right>101.275 <td align=right>105.692 <tr> <th valign=top bgcolor=lime>Ford FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 24 <td>Fiesta <td align=right>54.888 <td align=right>63.505 <tr> <th valign=top rowspan=3 bgcolor=silver>General Motors <td>Corsa <td align=right>84.163 <td align=right>85.115 <tr> <td>Monza <td align=right>24.732 <td align=right>19.781 <tr> <td>Vectra <td align=right>14.334 <td align=right>15.128 <tr> <th valign=top rowspan=2 bgcolor=red>Volkswagem <td>Gol <td align=right>122.300 <td align=right>129.782 <tr> <td>Parati <td align=right>22.343 <td align=right>19.942 </table> </body> </html> Resultado: Qual o problema/erro do código acima? Tableless Introdução Tableless é uma forma de desenvolvimento de sites que não utiliza tabelas para disposição de conteúdo na página (recomendada pela W3C), pois defende que os códigos HTML deveriam ser usados para o propósito que foram criados, sendo que tabelas foram criadas para exibir dados tabulares. Para a disposição da página o recomendado seria usar CSS. Para layout: div + CSS. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 25 Para desenvolver um site usando tabelas muitas ferramentas e desenvolvedores abusam de recursos como criar tabelas com células possuindo elementos com Gifs com um único pixel transparente apenas para manter a célula visível e forçar o layout da página ficar visualmente elegante, porém o código torna-se totalmente incoerente se comparado com o conteúdo do site. A W3C também não desaprova o uso de tabelas, desde que elas sejam utilizadas para tabular dados e não para formatar layout. Muitos navegadores travam ou exibem incorretamente formatações usando tabelas. Vantagens Adotar este padrão de desenvolvimento também facilita a separação da camada de apresentação (XHTML) da aplicação para o arquivo de estilo (CSS). Diminuição de Banda. Os navegadores modernos cacheam arquivos css e javascripts (performance), se a maneira que o site será visualizado é guardado em um css (padrão tableless) então o arquivo será cacheado após o primeiro acesso e todos os acessos seguintes não carregarão este arquivo, carregarão apenas o conteúdo (texto) do site. Quando se usa tabela, a apresentação das tabelas (tags como tr e td,gifs vazios, atributos como cellspacing e border) são carregados todas as vezes que o usuário acesar o site.[3] Manutenção. Estando o estilo separado do arquivo html, facilita quando o desenvolvedor deseja mudar algo relacionado ao conteúdo, pois o conteúdo do site deixa de ficar oculto dentro de tabelas e subtabelas para estarem dentro de divs (caixas de conteúdo) que não trazem nenhuma informação de aparência. Caso ele deseje alterar o estilo, basta ir no arquivo CSS e não precisará procurá-lo entre códigos e conteúdos que não tem relação com a aparência e apresentação do site. Observação: Excelente site - http://tableless.com.br/artigos/tutorial/?cont=1 Exemplo: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <title>Layout com 3 colunas em tableless</title> </head> <style> body { text-align:center; } p { margin:0 0 10px 0; } #box { margin:0 auto 0 auto; width:770px; } FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 26 Strict//EN" #coluna_esquerda, #coluna_direita { width:98px; } #coluna_esquerda, #coluna_direita, #coluna_principal { float:left; text-align:left; border:1px solid black; padding:10px; } #coluna_esquerda { background:#cccccc; } #coluna_direita { background:#fedc67; } #coluna_principal { width:488px; margin:0 10px 0 10px; } </style> <body> <div id="box"> <div id="coluna_esquerda"><b>coluna da esquerda</b></div> <div id="coluna_principal"><p><b>coluna principal</b></p><p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam eget ligula eu lectus lobortis condimentum. Aliquam nonummy auctor massa. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla at risus. Quisque purus magna, auctor et, sagittis ac, posuere eu, lectus. Nam mattis, felis ut adipiscing.</p></div> <div id="coluna_direita"><b>coluna da direita</b></div> </div> <script> objeto_esquerda = document.getElementById('coluna_esquerda'); objeto_principal = document.getElementById('coluna_principal'); objeto_direita = document.getElementById('coluna_direita'); altura_principal = parseInt(objeto_principal.offsetHeight) - 22 + 'px'; objeto_esquerda.style.height = objeto_direita.style.height altura_principal; </script> </body> </html> FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 27 = Resultado: Formulários Introdução Um dos conceitos mais importantes em XHTML, os formulários são utilizados para o envio de informações ao servidor, ou para a interação do usuário com a página através do uso de JavaScripts. Os dados do formulário serão tratados somente quando ocorrer sua submissão, que pode ser realizada através do botão de “submit”. Os valores inseridos nos formulários são retornados em pares, onde a primeira parte é o nome (id) do elemento e a segunda é o valor atribuído, sendo que eles são separados uns dos outros pelo sinal “=”; Os dados podem ser submetidos através de dois métodos GET (QueryString) e POST. No método GET os dados serão anexados à URL e enviados ao servidor, já o método POST envia os dados junto com as demais informações contidas no cabeçalho do HTTP. Ao contrário do POST que pode manipula qualquer quantidade de informações, o GET fica limitado pelo tamanho máximo permitido para uma URL, além disto, o GET é menos seguro, mas seu uso permite o reenvio de um formulário sem que o mesmo seja re-digitado. Para a construção dos formulários devemos fazer uso do elemento “<form> </form>”. Para armazenar as informações fornecidas pelo usuário podemos fazer uso do elemento “<input />”. Tags Form e Input From http://www.w3schools.com (Copyright Refsnes Data) HTML <form> Tag Example A simple HTML form with two input fields and one submit button: <form action="form_action.asp" method="get"> First name: <input type="text" name="fname" /><br /> Last name: <input type="text" name="lname" /><br /> <input type="submit" value="Submit" /> </form> Definition and Usage The <form> tag is used to create an HTML form for user input. A form can contain input elements like text fields, checkboxes, radio-buttons, submit buttons and more. A form can also contain select menus, textarea, fieldset, legend, and label elements. Forms are used to pass data to a server. Browser Support The <form> tag is supported in all major browsers. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 28 Differences Between HTML and XHTML In XHTML, the name attribute of the <form> tag is deprecated, and will be removed. Use the id attribute instead. Tips and Notes Note: The form element is a block-level element, and creates a line break before and after itself. Required Attributes DTD indicates in which HTML 4.01/XHTML 1.0 DTD the attribute is allowed. S=Strict, T=Transitional, and F=Frameset. Optional Attributes Standard Attributes The <form> tag supports the following standard attributes: FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 29 Event Attributes The <form> tag supports the following event attributes: HTML <input> Tag Example A simple HTML form with two input fields and one submit button: <form action="form_action.asp" method="get"> First name: <input type="text" name="fname" /><br /> Last name: <input type="text" name="lname" /><br /> <input type="submit" value="Submit" /> </form> Definition and Usage The <input> tag is used to select user information. An input field can vary in many ways, depending on the type attribute. An input field can be a text field, a checkbox, a password field, a radio button, a button, and more. Browser Support The <input> tag is supported in all major browsers. Differences Between HTML and XHTML In HTML, the <input> tag has no end tag. In XHTML, the <input> tag must be properly closed, like this <input />. Tips and Notes Tip: Use the <label> tag to define labels for input elements. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 30 Optional Attributes DTD indicates in which HTML 4.01/XHTML 1.0 DTD the attribute is allowed. S=Strict, T=Transitional, and F=Frameset. Standard Attributes The <input> tag supports the following standard attributes: FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 31 Exemplo/Exercício <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>XHTML Exemplo 16</title> </head> <body> <br /><br /> <h1> Exemplo de uso de formulários: </h1> <form action="http://www.franca.pro.br" method="post" name="form01"> Nome......: <input type="text" id="nome" name="nome" /><br /><br /> Endereço: <input type="text" id="endereco" name="endereco" readonly="true" /> <br /><br /> E-mail....: <input type="text" id="mail" name="mail" /><br /><br /> Telefone.: <input type="text" id="tel" name="tel" /><br /><br /> Senha.....: <input type="password" name="senha" id="senha" /><br /><br /> Curriculo: <input type="file" id="cv" name="cv" /> <br /><br /> Idade .....: <input type="radio" name="idade" id="idade" value="maior" /> Maior de Idade | <input type="radio" name="idade" id="idade" value="menor"/> Menor de Idade <br /><br /> Sistema Operacional: <input type="checkbox" name="so" id="so" value="linux" /> Linux | <input type="checkbox" name="so" id="so" value="bsd" /> BSD | <input type="checkbox" name="so" id="so" value="aix" /> AIX | <input type="checkbox" name="so" id="so" value="solaris" /> Solaris | <input type="checkbox" name="so" id="so" value="macos" /> MacOS | <input type="checkbox" name="so" id="so" value="outro" /> Outro <br /><br /> Estado Civil : <select name="civil" id="civil"> <option> Casado </option> <option> Solteiro </option> </select> <br /><br /> <input type="submit" name="enviar" id="enviar" value="Enviar" /> <input type="reset" name="cancelar" id="cancelar" value="Cancelar" /> <input type="button" name="validar" id="validar" value="Validar" /> <input type="image" name="validar2" id="validar2" src="alinux.jpg" /> </form> </body> </html> FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 32 Aula 4 – Programação Orientada a Objetos Programação Orientada a Objetos Introdução POO é um paradigma, forma de se pensar para resolver um problema. A Orientação a Objetos foca no reuso. E uma linguagem ser OO não significa que ela não seja estruturada (sequência, seleção, repetição). Exemplo Ler 2 números e exibir sua soma (Programação Estruturada vs. OO). Programação Estruturada (Como?) PROGRAMA SOMA VARIÁVEIS N1, N2: REAL INÍCIO ESCREVA “ENTRE COM DOIS NÚMEROS:” LEIA N1, N2 ESCREVA “A SOMA É:”, N1+N2 FIM LOC = 8 Programação OO (Com o quê?) CLASSE CALCULADORA ATRIBUTOS N1, N2: REAL MÉTODOS INFORMAR_N1(N: REAL) N1 N FIM-INFORMAR_N1 INFORMAR_N2(N: REAL) N2 N FIM-INFORMAR_N2 RETORNAR_SOMA(): REAL RETORNO (N1+N2) FIM-RETORNAR_SOMA FIM-CLASSE FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 33 PROGRAMA SOMA VARIÁVEIS C: CALCULADORA N: REAL INÍCIO C NOVO CALCULADORA ESCREVA “ENTRE COM DOIS NÚMEROS:” LEIA N C.INFORMAR_N1(N) LEIA N C.INFORMAR_N2(N) ESCREVA “A SOMA É:”, C.RETORNAR_SOMA() FIM LOC=27 Só se justifica pelo reuso e facilidade de manutenção. Conceitos: Classes e Objetos Classes possuem um estado (state) e um comportamento (behavior). O estado são Atributos ou Propriedades; O comportamento são Métodos ou Operações; A convensão JavaBeans diz que, para cada atributo, teremos dois métodos acessores: get e set (ou is). Obs.: The methods that change a property’s value are called setter methods, and the methods that retrieve a property’s value are called getter methods. Diagrama de Classes da UML Escopo ou visibilidade: + publico, qualquer classe pode acessar - privado, somente a própria classe # protegido (protected), somente a própria classe ou classes filhas ~ pacote (friend), somente classes no mesmo pacote, além da própria classe podem acessar Exemplo: Calculadora - N1: Real - N2: Real + InformarN1 (N: Real) + InformarN2 (N: Real) + RetornarSoma(): Real Observação: Em Java, protected = package + kids. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 34 Princípios OO: Abstração (só o que for relevante); Encapsulamento (Information Hiding); segurança, simplicidade, coesão. Herança (atributos + métodos); A herança tem que ser natural (is-a). Polimorfismo (só métodos); Programação Orientada a Eventos versus POO Uma linguagem pode ser OO e não ser OE (Pascal), bem como pode ser OE (Visual Basic 6, Javascript) e não suportar totalmente a OO. Linguagens Orientadas a Objetos: • • • • • Pascal Java Linguagens .NET (VB.NET, C#.NET) C++ PHP Obs.: Palavra-chave static em Java: atributos e métodos estáticos (da classe), não pertencem às instâncias, mas são compartilhados. Exercícios Responda: 1. 2. 3. 4. 5. Relacione os termos “classe”, “objeto” e “instância”. Defina os princípios/conceitos do paradigma OO. Defina a estrutura de uma classe. Qual a diferença entre programação orientada a eventos e programação orientada a objetos? Defina a classe Java Pessoa com os atributos nome e idade, e seus respectivos métodos getters e setters. 6. Faça um programa que instancie duas Pessoas: João e Maria. O programa deve exibir os dados de ambos os objetos. Marque a melhor resposta: Questão 1) Prova: FCC - 2011 - NOSSA CAIXA DESENVOLVIMENTO - Analista de Sistemas Na programação orientada a objetos, subprogramas (ou subrotinas) são encapsuladas nos próprios objetos e passam a designar-se a) b) c) d) e) atributo. herança. instância. método. encapsulamento. Questão 2) 1. Crie uma classe Java para representar uma lâmpada. A lâmpada pode ser ligada e desligada. Implemente um método main() no qual você vai: criar um objeto do tipo lâmpada, ligar a lâmpada, imprimir na tela o estado atual da lâmpada, desligar a lâmpada, e imprimir novamente o seu estado. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 35 Resposta: 1. public class Lampada { 2. private boolean estado; //ligado ou não 3. 4. public Lampada(){ 5. //a lampada comeca desligada 6. this.estado = false; 7. } 8. 9. //metodo que seta o estado da lampada 10. public void setEstado(boolean estado){ 11. this.estado = estado; 12. } 13. 14. //metodo que retorna o estado atual da lampada 15. public boolean getEstado(){ 16. return this.estado; 17. } 18. } 1. public class Main { 2. public static void main(String[] args){ 3. //cria o objeto lampada 4. Lampada minhaLampada = new Lampada(); 5. 6. //ligar a lampada 7. minhaLampada.setEstado(true); 8. System.out.println("A lampada esta ligada."); 9. 10. //desliga a lampada 11. minhaLampada.setEstado(false); 12. System.out.println("A lampada esta desligada."); 13. } 14. } Questão 3) Em relação aos princípios da orientação a objetos, a separação dos aspectos externos de um objeto, acessíveis por outros, dos detalhes internos da implementação que ficam ocultos dos demais, é uma característica conhecida por (A) Polimorfismo. (B) Compartilhamento. (C) Encapsulamento. (D) Herança. (E) Classes. Questão 4) Prova: FCC - 2011 - NOSSA CAIXA DESENVOLVIMENTO - Analista de Sistemas Na orientação a objetos, é um recurso que serve para inicializar os atributos e é executado automaticamente sempre que um novo objeto é criado: a) b) c) d) e) método. polimorfismo. interface. classe. construtor. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 36 Questão 5) Prova: FCC - 2011 - NOSSA CAIXA DESENVOLVIMENTO - Analista de Sistemas Um detalhe importante que deve ser especificado para os atributos e operações das classes é a visibilidade. Desta forma, os símbolos: + (sinal de mais), # (sinal de número), - (sinal de menos) e ~ (til) correspondem respectivamente a: a) b) c) d) e) público, pacote, privado e protegido. público, protegido, privado e pacote. privado, protegido, público e pacote. privado, pacote, público e protegido. pacote, protegido, privado e público. Questão 6) Prova: UFG - 2010 - UFG - Analista de TI - Desenvolvimento de Sistemas O mecanismo de separação de aspectos internos e externos de um objeto que visa a impedir o acesso direto ao estado de um objeto e disponibilizar externamente apenas os métodos que alteram este estado, chama-se a) b) c) d) abstração. encapsulamento. herança. proteção de código. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 37 Esta página foi deixada propositadamente em branco. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 38 Aula 5 – Javascript (1 de 5) Introdução ao JavaScript: Definição Javascript é uma linguagem de programação utilizada para criar pequenos programas encarregados de realizar ações dentro do âmbito de uma página web. Com Javascript podemos criar efeitos especiais nas páginas e definir interatividades com o usuário. O navegador do cliente é o encarregado de interpretar as instruções Javascript e executá-las para realizar estes efeitos e interatividades, de modo que o maior recurso, e talvez o único, com que conta esta linguagem é o próprio navegador. Netscape, depois de fazer seus navegadores compatíveis com os applets, começou a desenvolver uma linguagem de programação ao que chamou LiveScript que permitisse criar pequenos programas nas páginas e que fosse muito mais simples de utilizar que Java. De modo que o primeiro Javascript se chamou LiveScript, mas não durou muito esse nome, pois antes de lançar a primeira versão do produto se forjou uma aliança com Sun Microsystems (hoje Oracle), criadora do Java, para desenvolver em conjunto essa nova linguagem. A aliança fez com que Javascript (sintaxe Java like) se desenhara como um irmão pequeno do Java, somente útil dentro das páginas web e muito mais fácil de utilizar, de modo que qualquer pessoa, sem conhecimentos de programação pudesse aprofundar-se na linguagem e utilizá-la. Ademais, para programar Javascript não é necessário um kit de desenvolvimento, nem compilar os scripts, nem realizá-los em ficheiros externos ao código HTML, como ocorreria com os applets. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 39 Netscape 2.0 foi o primeiro navegador que entendia Javascript e seu rastro foi seguido pelos navegadores da companhia Microsoft a partir da versão 3.0. Que fique claro que Javascript não tem nada a ver com Java, salvo em suas origens. Atualmente são produtos totalmente distintos e não guardam entre si mais relação que a sintaxe idêntica e pouco mais. Algumas diferenças entre estas duas linguagens são as seguintes: Compilador. Para programar em Java necessitamos um Kit de desenvolvimento e um compilador. Entretanto, Javascript não é uma linguagem que necessite que seus programas se compilem, senão que estes se interpretem por parte do navegador quando este lê a página. Orientado a objetos. Java é uma linguagem de programação orientada a objetos. (Mais tarde veremos que quer dizer orientado a objetos, para quem ainda não sabe) Javascript não é orientado a objetos, isto quer dizer que poderemos programar sem necessidade de criar classes, tal como se realiza nas linguagens de programação estruturada como C ou Pascal. Propósito. Java é muito mais potente que Javascript, isto é devido a que Java é uma linguagem de propósito geral, com o que se podem fazer aplicações do mais variado, entretanto, com Javascript somente podemos escrever programas para que se executem em páginas web. Estruturas fortes. Java é uma linguagem de programação fortemente tipada, isto quer dizer que ao declarar uma variável teremos que indicar seu tipo e não poderá mudar de um tipo a outro automaticamente. Por sua parte, Javascript não tem esta característica, e podemos colocar em uma variável a informação que desejarmos, independentemente do tipo desta. Ademais, poderemos mudar o tipo de informação de uma variável quando quisermos. Outras características. Como vemos Java é muito mais complexo, mas também, mais potente, robusto e seguro. Tem mais funcionalidades que Javascript e as diferenças que os separam são o suficientemente importantes como para distinguí-los facilmente. Javascript (Resumo) “LP” cliente para páginas Web. Usada para criação de efeitos especiais (inicialmente). Interação com o usuário (eventos). O navegador executa o código. Histórico: Netscape/Livescript, Aliança com Sun/Javascript, Sintaxe Java-like (case sensitive)/ponto-e-vírgula. Javascript não é Java. Diferenças: Compilador/kit, OO, propósito, robustez, tipagem forte. Estrutura Básica The HTML <script> tag inserts a Javascript in a HTML page: <html> <head> <title></title> <script type=”text/javascript”> </script> </head> <body> <script type=”text/javascript”> </script> </body> </html> FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 40 Você também pode vincular um arquivo .js externo. <script src='arquivo.js' type='text/javascript'></script> Variáveis Introdução Uma variável é um espaço em memória onde se armazena um dado, um espaço onde podemos salvar qualquer tipo de informação que necessitemos para realizar as ações de nossos programas. Por exemplo, se nosso programa realiza somas, será muito normal guardarmos em variáveis as distintas parcelas que participam na operação e o resultado da soma. O efeito seria algo parecido a isto. parcela1 = 23 parcela2 = 33 soma = parcela1 + parcela2 Neste exemplo temos três variáveis, parcela1, parcela2 e soma, onde guardamos o resultado. Vemos que seu uso para nós é como se tivéssemos um apartado onde salvar um dado e que se pode acessá-los colocando somente seu nome. Os nomes das variáveis devem ser construídos com caracteres alfanuméricos e o caractere sublinhado (_). A parte disso, há uma série de regras adicionais para construir nomes para variáveis. A mais importante é que tem de começar por um caractere alfabético ou sublinhado. Não podemos utilizar caracteres raros como o signo +, um espaço ou um $. Nomes admitidos para as variáveis poderiam ser: Idade PaísDeNascimento _nome Obs.: Em Java, podemos começar com letra, “_” (underscore) ou “$”, mas no Javascript não podemos usar “$”. Também há que evitar utilizar nomes reservados como variáveis, por exemplo não poderemos usar no nome da variável “palavras” como return ou for, que já veremos que são utilizadas para estruturas da própria linguagem. Vejamos agora alguns nomes de variáveis que não são permitidos: 12meses seu nome return pe%pe Lembre-se que: Variable names are case sensitive (y and Y are two different variables). Variable names must begin with a letter or the underscore character. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 41 Declaração de variáveis Boa prática, porém não obrigatória. Declarar variáveis consiste em definir e de passo informar ao sistema de que se vai utilizar uma variável. É um costume habitual nas linguagens de programação definir as variáveis que serão utilizadas nos programas e para isso, seguem-se algumas regras restritas. Porém, javascript ultrapassa muitas regras por ser uma linguagem mais livre na hora de programar e um dos casos no qual outorga um pouco de liberdade é na hora de declarar as variáveis, já que não estamos obrigados a fazê-lo, ao contrário do que acontece na maioria das linguagens de programação. De qualquer forma, é aconselhável declarar as variáveis, além de um bom costume e para isso Javascript conta com a palavra var. Como é lógico, utiliza-se essa palavra para definir a variável antes de utilizá-la. var operando1 var operando2 var x; var carname; Ou var x = 5; var carname = “Volvo”; Também pode-se atribuir um valor à variável quando se está declarando var operando1 = 23 var operando2 = 33 Também se permite declarar várias variáveis na mesma linha, sempre que se separem por vírgulas. var operando1, operando2 Escopo das Variáveis Variáveis globais Como dissemos, as variáveis globais são as que estão declaradas no âmbito mais amplo possível, que em Javascript é uma página web. Para declarar uma variável global à página simplesmente faremos em um script, com a palavra var. Fora de uma função ou sem usar a palavra-chave var. <script> var variávelGlobal </script> Variáveis locais (bloco) Também poderemos declarar variáveis em lugares mais dimensionados, como por exemplo, uma função. A estas variáveis chamaremos de locais. Quando se declarem variáveis locais somente FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 42 poderemos acessá-las dentro do lugar aonde tenham sido declaradas, ou seja, se havíamos declarado em uma função somente poderemos acessá-la quando estivermos nessa função. As variáveis podem ser locais em uma função, mas também podem ser locais a outros âmbitos, como por exemplo, um loop. Em geral, são âmbitos locais qualquer lugar dimensionado por chaves. <script> function minhaFuncao() { var variavelLocal } </script> Exemplo <script> var numero = 2 function minhaFuncao (){ var numero = 19 document.write(numero) //imprime 19 } document.write(numero) //imprime 2 </script> Diferenças entre utilizar var ou não Como dissemos, em Javascript temos liberdade para declarar ou não as variáveis com a palavra var, mas os efeitos que conseguiremos em cada caso serão distintos. Na verdade, quando utilizamos var, estamos fazendo com que a variável que estamos declarando seja local ao âmbito onde se declara. Por outro lado, se não utilizarmos a palavra var para declarar uma variável esta será global a toda a página, seja qual for o âmbito no qual tenha sido declarada. Constantes Introdução Constantes do programador; Boa prática, manutenção. Palavra-chave “final” em Java. As constantes, têm a mesma função das variáveis, porém um valore de uma constante não pode ser alterado, apenas isso que diferencia-a de uma variável. Para se declarar constantes usa-se : const MAXIMO=10; Exemplos: média mínima, aulas por semana, etc.. Nota: Você não pode declarar uma constante dentro do escopo de uma função, e também não pode declarar uma constante com o nome de uma variável. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 43 Tendo isso em mente veja os códigos abaixo que resultarão em erro: //ISTO IRÁ CAUSAR UM ERRO! function f{}; const f = 5; //ISTO IRÁ CAUSAR UM ERRO TAMBÉM ! function f{ const g=5; var g; } ATENÇÂO: você só poderá usar constantes no JavaScript 1.5, pois isso é uma inovação desta versão do JavaScript. Caso tente usar o comando const para declarar uma constante usando JavaScript 1.4 e anteriores, ocorrerá uma mensagem de erro de sintaxe. Tipos de Dados Introdução Em uma variável podemos introduzir vários tipos de informação, por exemplo, texto, números inteiros ou reais, etc. A estas distintas classes de informação conhecemos como tipos de dados. Cada um tem características e usos distintos, vejamos quais são os tipos de dados de Javascript. Números (inteiro ou real) Para começar temos o tipo numérico, para salvar números como 9 ou 23.6 String (Classe) O tipo cadeia de caractere salva um texto. Sempre que escrevemos uma cadeia de caracteres devemos utilizar as aspas ("). Boleanos Também contamos com o tipo boleano, que salva uma informação que pode valer como sim (true) ou não (false). Por último seria relevante assinalar aqui que nossas variáveis podem conter coisas mais complicadas, como poderia ser um objeto, uma função, ou vazio (null) mas já o vermos mais adiante. Na verdade nossas variáveis não estão forçadas a salvar um tipo de dados em concreto e portanto, não especificamos nenhum tipo de dados para uma variável quando a estamos declarando. Podemos introduzir qualquer informação em uma variável de qualquer tipo, inclusive podemos ir mudando o conteúdo de uma variável de um tipo a outro sem nenhum problema. Vamos ver isto com um exemplo. var nome_cidade = "Salvador" var revisado = true nome_cidade = 32 revisado = "no" FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 44 Strings - Manipulação de Strings. Tabela com todos os caracteres de escape o o o o o o o o Quebra de linha: \n Aspas simples: \' Aspas dupla: \" Tabulador: \t Enter: \r Avance de página: \f Retroceder espaço: \b Contra-barra: \\ replace (method) variável.replace (<o que busco>, <pelo que quero substituir>) Observação: no Java, substitui todas as ocorrências, não apenas a 1ª (javascript). substring (substr) Esta é uma função de manipulação de strings, e serve para que você possa obter um trecho ou uma pequena parte de uma grande string, isto sendo informado por intervalos de números, os quais você pode contar os caracteres. Exemplo: <Script> var frase = “Alface é bom para saúde”; var parte = frase.substring(0,2); document.write(parte); </Script> Como podemos ver a função substring arrancou uma parte da minha frase, esse é o objetivo desta função, como vimos onde eu tinha “Alface é bom para saúde” eu fiquei apenas com a palavra Al. Isso aconteceu porque eu mandei que o Script começasse a contar à partir do zero, ou seja, contar à partir da primeira string encontrada (da esquerda para a direita), e terminar quando chegar o total da conta em 2 caracteres. Exemplo: “Boa noite, galera!” Intervalos [5, 10[ = {5, 6, 7, 8, 9} Não entendeu? Vamos para mais uma explicação como outro exemplo. <Script> var frase = “Alface é bom para saúde”; var parte = frase.substring(1,2); document.write(parte); //retornará L </Script> Agora, depois de testarmos este Script, vimos que foi retornado apenas o caracter “l”(L) , pois agora mandamos o Script começar a contar depois que ele visse o primeiro caracter (da esquerda para a direita), e terminar sua contagem, assim que visse o segundo caracter. Acho que agora deu para entender e ter uma noção básica desta função. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 45 length (método) Função: Retorna o número de caracteres que um string têm. Sintaxe: string.length; Exemplo: <script Language=”JavaScript” Type=”text/javaScript”> aString = “Izaias”; document.write (aString.length); //exibe 6, pois o nome contém 6 caracteres </script> Exemplo: Associando Eventos (rotinas) a Botões de Formulário No primeiro passo, vamos criar um formulário com apenas um botão <HTML> <HEAD> <TITLE> Botão de teste </TITLE> </HEAD> <BODY> <FORM> <INPUT type="button" name="botao" value="teste"> </FORM> </BODY> </HTML> Associe um evento ao formulário. O evento onclick é associado à função. Dê um nome ao formulário "meuform". <FORM name="meuform"> <INPUT type="button" name="botao" value="teste" onclick="iteste()"> Insira a função no cabeçalho do documento. Esta função irá reescrever o código HTML do documento utilizando o método write(). <SCRIPT type="text/javascript"> function iteste() { document.write("<h1>Oi<h1><p>Após o <i>clique</i>, o documento foi reescrito.<br> O título também!") document.title="Novo teste" } </SCRIPT> FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 46 charAt Função: Retorna o caracter da posição especificada. Sintaxe: string.charAt(numero_da_posicao); Exemplo: <script Language="JavaScript" Type="text/javaScript"> aString = "Lisboa"; document.write ( aString.charAt(4) ); //retornará 'o' </script> indexOf Função: Retorna a posição do primeiro caracter encontrado em uma string. -1 se não encontrar. Sintaxe: string.indexOf(“parte_da_string”); Exemplo: <script Language=”JavaScript” Type=”text/javaScript”> aString = “Izaias”; document.write (aString.indexOf(“z”)); //retornará 1, pois I = 0 e z = 1, ou seja, começa do zero </script> Exemplo 2: <script Language=”JavaScript” Type=”text/JavaScript”> aString = “Izaias”; document.write (aString.indexOf(“x”)); //retornará -1 pois x não existe no nome Izaias </script> Exemplo 3: <script Language=”JavaScript” Type=”text/JavaScript”> aString = “Izaias”; document.write (aString.indexOf(“a”)); //retornará 2, pois I=0, z=1, e a=2, //e o primeiro ‘a’ encontrado será o 2º caracter //encontrado iniciando pelo zero... </script> lastIndexOf Função: Quase igual ao indexOf, porém com o objetivo de trazer a posição do último caracter encontrado, e não do primeiro assim como no indexOf. Sintaxe: string.lastIndexOf(“parte_da_string”); toUpperCase Função: Retorna a string convertida em maiúsculas. Sintaxe: string.toUpperCase(); FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 47 Exemplo: <script language=”JavaScript” Type=”Text/JavaScript”> minhaString= “Izaias”; document.write ( minhaString.toUpperCase()); </script> toLowerCase Função: Retorna a string convertida em minúsculas. Sintaxe: string.toLoewrCase(); Exemplo: <script language=”JavaScript” Type=”Text/JavaScript”> minhaString= “Izaias”; document.write ( minhaString.toLowerCase()); </script> Exercício 1 <html> <!-- Marquee na Barra de Status --> <head> <script language=”JavaScript” type=”text/javascript”> function mostrar() { status = tx; tx1 = tx.charAt(0); tx2 = tx.substring(1, tx.length); tx = tx2 + tx1; setTimeout (“mostrar()”, 100); } </script> </head> <body> <script language=”JavaScript” type=”text/javascript”> tx = “mensagem na barra de status”; mostrar(); </script> </body> </html> FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 48 Exercício 2 Faça um script para ler 3 notas (função Prompt) e passar como parâmetros para uma função calcular a média. A média é devolvida para ser exibida fora da função. Observação: O método prompt() No mesmo estilo do que o método alert(), Javascript dispõe de uma outra caixa de diálogo, no caso presente é chamada caixa de convite, que é composto por um campo que contém uma entrada a completar pelo utilizador. Esta entrada contém um valor por defeito. A sintaxe é: prompt("texto da caixa de convite","valor por defeito"); Ao clicar no OK, o método reenvia o valor escrito pelo utilizador ou a resposta proposta por defeito. Se utilizador clica em Cancel, o valor nulo é então reenviado. Prompt() é porvez utilizado para incrementar dados fornecidos pelo utilizador. Exercício 3 <script language="JavaScript"> exemplo = "JavaScript" document.write("Texto escrito com o método big -> "+ exemplo.big() +"<br>") document.write("Texto escrito com o método bold -> "+ exemplo.bold() +"<br>") document.write("Texto escrito com o método blink -> "+ exemplo.blink() +"<br>") document.write("Texto escrito com o método italics -> "+ exemplo.italics() +"<br>") document.write("Texto escrito com o método small -> "+ exemplo.small() +"<br>") document.write("Texto +"<br>") escrito com o método strike -> "+ exemplo.strike() document.write("Texto escrito com o método sup -> "+ exemplo.sup() +"<br>") document.write("Texto escrito com o método sub -> "+ exemplo.sub() +"<br>") document.write("Texto escrito exemplo.toLowerCase() +"<br>") com o método toLowerCase -> "+ document.write("Texto escrito exemplo.toUpperCase() +"<br>") com o método toUpperCase -> "+ document.write("<br> Conteúdo da variável exemplo: "+ exemplo) document.write("<br>Conteúdo exemplo.substring(0,4)) de exemplo.substring(0,4): "+ document.write("<br> Conteúdo de exemplo.substring(4): "+ exemplo.substring(4)) document.write("<br> exemplo.substring(4,2)) Conteúdo de exemplo.substring(4,2) : "+ document.write("<br> exemplo.substring(4,6)) Conteúdo de exemplo.substring(4,6) : "+ </script> FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 49 Resumo: JavaScript String Object The String object is used to manipulate a stored piece of text. String objects are created with new String(). Syntax var txt = new String("string"); or more simply: var txt = "string"; String Object Properties Property constructor length prototype Description Returns the function that created the String object's prototype Returns the length of a string *(NO JAVA É MÉTODO) Allows you to add properties and methods to an object String Object Methods Method charAt() charCodeAt() concat() fromCharCode() indexOf() lastIndexOf() match() Description Returns the character at the specified index Returns the Unicode of the character at the specified index Joins two or more strings, and returns a copy of the joined strings Converts Unicode values to characters Returns the position of the first found occurrence of a specified value in a string Returns the position of the last found occurrence of a specified value in a string Searches for a match between a regular expression and a string, and returns the matches Searches for a match between a substring (or regular expression) and a string, and replaces the replace() matched substring with a new substring *(NO JAVA, SUBSTITUI TODAS AS OCORRÊNCIAS) Searches for a match between a regular expression and a string, and returns the position of the search() match slice() Extracts a part of a string and returns a new string Splits a string into an array of substrings split() Extracts the characters from a string, beginning at a specified start position, and through the substr() specified number of character Extracts the characters from a string, between two specified indices substring() Converts a string to lowercase letters toLowerCase() Converts a string to uppercase letters toUpperCase() valueOf() Returns the primitive value of a String object String HTML Wrapper Methods The HTML wrapper methods return the string wrapped inside the appropriate HTML tag. Method anchor() big() blink() bold() fixed() fontcolor() fontsize() italics() link() small() strike() sub() sup() Description Creates an anchor Displays a string using a big font Displays a blinking string Displays a string in bold Displays a string using a fixed-pitch font Displays a string using a specified color Displays a string using a specified size Displays a string in italic Displays a string as a hyperlink Displays a string using a small font Displays a string with a strikethrough Displays a string as subscript text Displays a string as superscript text FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 50 Desafio: Construir uma rotina (função) que receba 2 strings e performe um “ReplaceAll”. Observação: “maçã,pera,caju”.split(“,”)[1] Exercício (quadro): <script type=”text/javascript”> var nome=“França”; document.write(nome.length); ______ document.write(nome.substring(0,3)); ______ document.write(nome.charAt(1)); ______ document.write(nome.indexOf(“a”)); ______ document.write(nome.lastIndexOf(“a”)); ______ document.write(nome.toLowerCase());______ document.write(nome.toUpperCase());______ document.write(nome.concat(“Prof.”)); ______ document.write(nome); ______ document.write(nome.replace(“a”, “o”)); ______ var vetor=”maça,pera,caju”; vetor=vetor.split(“,”); document.write(vetor[1]); ______ </script> FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 51 Esta página foi deixada propositadamente em branco. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 52 Aula 6 – Javascript (2 de 5) Matrizes Introdução The Array object is used to store multiple values in a single variable. Matrizes (ou arrays) são variáveis que contêm vários elementos em seu interior. A declaração de uma matriz é feita utilizando ou elementos delimitados por colchetes “[]” ou pelo objeto Array(). Exemplo: var frutas = ["laranja", "banana", "pera"]; var nomes = new Array("Sérgio", "Eduardo", "Rodrigues"); var nomes = new Array(10); var valores = [1.34, 10, 50, 13e2]; Os elementos individuais são acessados colocando-se a posição do elemento entre colchetes após o nome da matriz. Lembre sempre que as matrizes iniciam pelo elemento zero (0). Por exemplo, para acessar o primeiro elemento da matriz valores, escreveríamos valores[0]. Podemos tanto ler quanto alterar elementos da matriz. Podem-se utilizar elementos vazios na declaração de uma matriz, por exemplo: var frutas = ["laranja","banana",,"pera",,,"abacaxi"]; O resultado seria: * frutas[0] = "laranja" * frutas[1] = "banana" * frutas[2] = undefined * frutas[3] = "pera" * frutas[4] = undefined * frutas[5] = undefined * frutas[6] = "abacaxi" You don’t need to tell Javascript how many items to size the Array for. Javascript will automatically increase the size of the Array as needed, as you add items into the Array. var meuArray = []; length é um atributo especial (is NOT read-only) que possui a quantidade de elementos da matriz. Não é uma função; ou seja, tentar utilizar frutas.length() causará um erro. A maneira correta de usar o atributo é frutas.length, sem os parênteses. * Multi-Dimensional Arrays * Arrays are passed by Reference * Arrays are assigned by reference var newArray = myArray[] newArray[1] = ‘changed’; FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 53 Funções de Conversão Introdução Diferente da maioria das linguagens o Javascript define as variáveis dinamicamente, portanto ao atribuir uma variável ele escolhe o tipo conforme o valor passado para a variável, não sendo necessário especificar o mesmo. var numero = 1; var texto = "M. França"; var valor = 123.45; var ativo= true; var nascimento = new Date(1969,1,4) Nome Tipo numero numérica inteira texto string valor numérica com ponto flutuante ativo booleana nascimento objeto date 1 Esta forma de tratar variáveis tem o curioso nome, em inglês, de "duck typing" . Convertendo Uma variável pode ser atribuída para outro tipo, ou utilizando uma função de conversão ou então fazendo operações aritméticas. Como por exemplo, quando atribuímos ao numero o valor 1, ele se encontra no tipo numérico inteiro, se o dividirmos por 2 ele irá para o tipo numérico ponto flutuante: numero = 1; // inteiro 1 numero = numero / 2; // Vai para flutuante 0.5 numero = " " + numero; // ele é convertido para string (somado à outra string) numero = parseFloat(numero); // Ele irá resultar no número 0.5 numero = parseInt(numero); // Vai para o inteiro 0 1 In computer programming with object-oriented programming languages, duck typing is a style of dynamic typing in which an object's current set of methods and properties determines the valid semantics, rather than its inheritance from a particular class or implementation of a specific interface. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 54 Operadores Aritiméticos +, -, *, /, %(módulo), ++, -Exemplo: x=5; y=x++; z=++y; ? x, y, z ? -5%-2 Lógicos !, &&, || Relacionais !=, ==, >, <, >=, <= Funções isNaN(valor) Identifica se o valor não é um numero eval() Converte uma string para um valor inteiro ou ponto flutuante. Esta função, avalia o valor de uma expressão, por exemplo: val = eval("1+2*3-4/2"); //atribui a variável o valor 5 eval(“2+2+2a+22”); parseInt() Converte uma string para um inteiro, retornando o primeiro inteiro encontrado na string da esquerda para a direita. val = parseInt("12b13"); // variável recebe 12 parseFloat() Semelhante à função parseInt(), porém esta busca por uma string com um ponto flutuante. toString() Converte o objeto para sua representação em uma string. typeof Esta função, que pode ser considerada um operador, retorna o tipo do objeto que opera. Os valores retornados são strings que podem ser: "undefined", "object", "function", "number", "Boolean", ou "string". O exemplo: typeof 10 // retorna a string "number". FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 55 Exercício <script language=“javascript” type=“text/javascript”> var notas=[5, 6, 7, 8, 5]; for (i=0; i<notas.length; i++){ document.write(“nota: ”); document.write(notas[i]); document.write(“<br />”); } for (i in notas){ document.write(“e ” + i + “<hr />”; document.write(“e ” + notas[i] + “<hr />”; } </script> Estruturas de Controle e Laços If if(valor==3){ document.write("Valor é três!"); } else { document.write(Valor não é três!); } Switch switch(dia){ case 1: document.write("Domingo<br>"); break; case 2: document.write("Segunda<br>"); break; default: document.write("Nao está entre os dois primeiros da semana!<br>"); } FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 56 While var i=0; while(i<3){ document.write("Esta é a "+i+"<sup>a</sup>iteração.<br />"); i++; } Do - While Este exemplo mostra os dias da semana! ;) dias = new Array("Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Quinta", "Sexta", "Sábado"); var dia = 0; do { document.write(days[dias[dia] + "é o " + eval(dia+1) + "<sup>o</sup> da semana.<br>"); } while(dia < 7); Exercício var x = 0; var y = 10; do { y--; ++x; } while (x<5); document.write(x); document.write(y); For O exemplo seguinte determina a posição do dia na semana. dias = "Sábado"); new Array("Domingo", "Segunda", "Terça", "Quarta", var dia="Quarta"; var posicao; for(i=0;i<dias.length;i++){ if(dia == dias[i]){ posicao = i+1; } } document.write(dia+" é o dia "+posicao+" na semana<br />"); FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 57 Exercício for (i=0; i<10; i++){ if(i==1) continue; if(i==3) break; document.write(i); } // continue Break Salta fora de um If, Do-While, For, ou de um Switch. Continue "Pula" os comandos que estão abaixo de si nas mesmas estruturas que o break. Exercício Javascript 1 Quais os valores finais das variáveis “x”, “y” e “z” no código abaixo: x = 5; y = x++; z = ++y; Exercício Javascript 2 [Marinha - Técnico em PD - 2005] Observe a rotina abaixo: <script type="text/javascript"> i = 0 t = 0 do { i++ t=t+i+i } while (i <= 5) i = 0 while (i <= 5) { i++ t=t+i+i } document.write(t) </script> Que valor será apresentado no BROWSER, após a execução da rotina listada acima? a) 80 b) 81 c) 82 d) 83 e) 84 FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 58 Caixas de Diálogo (Alert, Prompt e Confirm) alert(mensagem) Mostra uma caixa de alerta ( Janelinha com o botão OK ) com a string "mensagem". Útil para depurar o script. Exemplo: alert("Vai catar coquinho!!!"); alert("A variável tosca está¡ com o valor"+tosca+"<br />"); confirm(mensagem) Mostra uma caixa de diálogo com os botões "OK" e "Cancelar" e com a string "mensagem". Retorna true se clicado em "OK" ou false se em "Cancelar". Exemplo: if(confirm("Posso apagar todos os seus dados?")){ document.write("Deletando..."); } else { document.write("Cancelado!"); } prompt(mensagem, respostapadrao) Mostra uma caixa de diálogo, um campo de texto, e os botões "OK" e "Cancelar". Retorna a string digitada no campo de texto ou NULL se cancelado. Exemplo: nome=prompt("Digite seu nome, por favor:","Fulano"); if(!nome){ alert("Bem-vindo, anônimo!"); } else { alert("Bem-vindo, caro "+nome); } Exercício <script language="Javascript"> for( i = 2004; i >= 1977; i-- ) document.write( i, '<br>' ); alert(i); </script> var squares = 81; //no head incr(++squares); function incr(squares){ document.write(squares); squares += 10; // = squares + 10 } FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 59 Esta página foi deixada propositadamente em branco. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 60 Aula 7 – Javascript (3 de 5) Objetos Browser (DOM) Introdução Retirado de: http://www.juliobattisti.com.br/tutoriais/keniareis/jsbasico011.asp DOM = Document Object Model. Modelo de objetos do browser, que pode ser utilizado/manipulado por uma linguagem script como o Javascript. Trabalhando com Objetos Browser Uma vantagem que o JavaScript tem até mesmo em relção a linguagens mais sofisticadas como Java é que os scripts podem manipular o navegador da web. Seu script pode carregar uma nova página no navegador, trabalhar com partes da janela e do documento do navegador e até abrir novas janelas. A fim de trabalhar com o navegador e os documentos, o JavaScript utiliza uma variedade de objetos browser. Cada Objeto browser representa parte de uma pagina web. Por exemplo , uma janela , um documento ou uma imagem. Os objetos browser, que permitem trabalhar com partes da página da Web. Os objetos browser estão organizados em uma hieraquia de objetos pai e filho. Quando referencia um objeto, você utiliza o nome do objeto pai seguido pelo nome ou nomes do objeto filho, separados por pontos. Por exemplo, O JavaScript armazena objetos para representar imagens em documento como filhos do objeto document. Como no exemplo abaixo: Exemplo: window.document.imagem01 O exemplo acima se refere ao objeto imagem01, um filho do objeto document, que é filho do objeto window. Window Introdução O objeto window está na parte superior da hierarquia de objeto browser. O diagrama abaixo mostra a hierarquia do objeto e uma variável de seus objetos. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 61 Esse diagrama inclui somente os objetos básicos de um navegador que serão abordados a seguir. Uma variedade de outros objetos também entra na hierarquia e será discutidos ao longo dos tutoriais. Utilizando objetos window. Na parte superior da hierarquia de objeto browser está o objeto window, que representa uma janela de navegador. Você já utilizou alguns métodos e propriedades do objeto window, como por exemplo: Você utilizou a propriedade window.status para alterar o conteúdo da linha de status do navegador. Observação: Window é opcional, e depende do browser. Você utilizou os métodos window.alert, window.confirm e window.prompt para exibirem caixa de diálogos de mensagem para o usuário. Pode haver vários objetos window por vez, cada um representando uma janela de navegador aberta. Os frames são também representados por objetos window. Janelas – Métodos Vamos ver agora os distintos métodos que tem o objeto window. Muitos destes métodos terão que ser vistos separadamente porque são muito úteis e ainda não o utilizamos, agora vamos lista-los e já veremos alguns exemplos. alert(texto) Apresenta uma janela de alerta onde se pode ler o texto que recebe por parâmetro. back() Ir uma página atrás no histórico de páginas visitadas. Funciona como o botão de voltar da barra de ferramentas. (Javascript 1.2) blur() Tirar o foco da janela atual. (Javascript 1.1) close() Fecha a janela. (Javascript 1.1) confirm(texto) Mostra uma janela de confirmação e permite aceitar ou rejeitar. find() Mostra uma janelinha de busca. (Javascript 1.2 para Netscape) focus() Coloca o foco da aplicação na janela. (Javascript 1.1) forward() Ir uma página adiante no histórico de páginas visitadas. Como se clicássemos o botão de adiante do navegador. (Javascript 1.2) home() Ir à página de início o explorador que tenha configurado. (Javascript 1.2) open() Abre uma janela secundária do navegador. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 62 print() Como se clicássemos o botão de imprimir do navegador. (Javascript 1.2) prompt(pergunta,inicio_da_resposta) Mostra uma caixa de diálogo para pedir um dado. Devolve o dado que se escreveu. setInterval() Define um script para que seja executado indefinidamente em cada intervalo de tempo. (Javascript 1.2) setTimeout(sentença,segundos) Define um script para que seja executado uma vez depois de um tempo de espera determinado. stop() Como clicar o botão de stop da janela do navegador. (Javascript 1.2) Para ilustrar um pouco melhor o funcionamento de algum destes métodos, criamos uma página web que os utiliza. O código da página mostra-se a seguir e também podemos ver a página em funcionamento. Exercício Código HTML <form> <input type="button" value="Janela de busca (Somente Netscape)" onClick="window.find()"> <br> <br> <input type="button" value="Mover a janela 10 direita,10 abaixo" onClick="moveBy(10, 10)"> <br> <br> <input type="button" value="Mover a janela ao ponto (100,10)" onClick="moveTo(100, 10)"> <br> <br> <input type="button" value="Imprimir esta página" onClick="print()"> <br> <br> <input type="button" value="Aumentar a janela 10 largura,10 comprimento" onClick="resizeBy(10, 10)"> <br> <br> <input type="button" value="Fixar o tamanho da janela em 400 onClick="resizeTo(400, 200)"> <br> <br> <input type="button" value="Scroll acima de tudo" onClick="scroll(0,0)"> <br> <br> <input type="button" value="Scroll acima 10 pixels" onClick="scrollBy(0,-10)"> </form> FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 63 x 200" Document Trabalhando com documentos da Web O objeto document representa um documento ou página da Web. Os documentos da web são exibidos dentro das janelas do navegador, então não deve supreende-lo aprender que o objeto document é filho do objeto window. Como o objeto window sempre representa a janela atual ou seja aquela que contém o script, você pode utilizar a window.document para referenciar o documento atual. Lembre-se que você já utilizou o método document.write para exibir texto dentro de um documento na Web.Os exemplos nos tutoriais anteriores utilizaram somente uma única janela e documento. Se múltiplas janelas ou frames estiverem em utilização, talvez haja vários objetos window, cada um com seu próprio objeto document. Para utilizar um desses objetos document, você utiliza o nome da janela e o nome do documento. Exemplo: var d = window.document; d.write(“<h1>” + d.title + “</h1>”); Obtendo informações sobre o documento Várias propriedades do objeto document incluem informações sobre o documento atual em geral. Por exemplo: A propriedade URL especifica o URL do documento. Esse é um campo de texto simples. Você não pode alterar essa propriedade. Por isso se você precisar enviar o usuário para uma localização diferente, o ideal é utiliza o objeto window.location, que vai ser especificado mais adiante. A propriedade title lista o titulo da página atual, definido pela tag HTML<TITLE>. A propriedade referrer é o URL da página que o usuario esta visualizando antes da pagina atual, normalmente, a página com um link para a página atual. A propriedade lastModified é a ultima data em que o documento foi modificado. Essa data é enviada ao servidor junto com a página. O exemplo abaixo mostra um script de um document de HTML que exibe a data da sua última modificação. Exercício <HTML> <HEAD> <TITLE>Teste do Document</TITLE></HEAD> <BODY> Esta pagina foi modificada em: <SCRIPT> document.write(document. lastModified); </SCRIPT> <BR></body> </HTML> Isso pode dizer ao usuario quando a página foi alterada pela ultima vez. Se utilizar JavaScript, você não tem de se lembrar de atualizar a data toda vez que modificar a página. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 64 Nota: Você talvez ache que a propriedade document.lasModified não funciona em suas páginas da Web. A data é recebida do servidor da Web e alguns servidores não mantêm data de modificações corretamente. Escrevendo Texto em um Documento Os métodos do objeto document mais simples são também aqueles que você utilizará mais freqüentemente. De fato, você já os utilizou. Os métodos document.write imprime texto como parte da página de HTML em uma janela de documento. Essa instrução é utilizada sempre que você precisar incluir saída em uma página da Web. Uma instrução alternativa, document.writeln, também imprime texto, mas também inclui um caracter de nova linha (/n) no final. Isso é útil quando você quer que seu texto seja a utima coisa da linha. Nota: Lembre-se de que o caractere de nova linha é ignorado pelo HTML, exceto dentro do contêiner <PRE>. Você precisará utilizar a tag<BR> se quiser uma quebra de linha real. Você pode utilizar esses métodos somente dentro do corpo da página da Web, de modo que eles serão executados quando a página carregar. O método document.write pode ser utilizado somente dentro de uma tag <SCRIPT> no corpo de um documento HTML. Você também pode utiliza-lo em uma função, contanto que você inclua uma chamada para a função dentro do corpo do documento. Utilizando links e âncoras Outro filho do objeto document é o objeto link. Podem haver múltiplos objetos link em um documento, mas cada um inclui informações diferentes sobre um link para outra localização ou âncora. Nota: As âncoras são lugares identificados em um documento de HTML para quais se podem pular diretamente. Você as define com uma tag como esta : < A NAME=”index1”>. Você então se vincular a eles: < A HREF=”#index1”>. Pode-se acessar objeto link como o array links. Cada membro do array é um dos objetos link na pagina atual. Uma propriedade do array, document.links.length, indica o numero de links na página. Cada objeto link tem uma lista de propriedades que define o URL. Você pode referi-se a uma propriedade indicando o numero do link e o nome da propriedade. Por exemplo, a seguinte instrução atribui o URL inteiro do primeiro link à variável link1: link1=document.links[0].href; Os objetos anchor são também filhos do objeto document. Cada objeto anchor representa uma âncora no documento atual, uma localização particular para a qual se pode pular diretamente. Como nos links,você pode acessar âncoras com um array: ânchors. Cada elemento desse array é um objeto anchor. A propriedade document.anchors.length fornece o numero de elementos no array anchors. Exercício: Listar todos os links de uma página ao clicar em um botão. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 65 History Acessando o histórico da Janela O objeto history é outra propriedade do objeto window. Esse objeto armazena as informações sobre os URLs que foram visitados antes e depôs do atual e inclui métodos para ir para as localizações anteriores ou próximas. O objeto history tem algumas propriedades: history.length: monitora o comprimento da lista de histórico em outras palavras, o numero de localizações diferentes que o usuário visitou. history.next: é o valor da próxima entrada na lista de histórico, o URL ao qual o usuário será enviado se ele pressionar o botão Forward do navegador. Como o botão Forward somente funciona quando você já utilizou o botão Back, nem sempre pode haver um valor para a propriedade history.next. history.previous: é a entrada anterior do histórico, o URL ao qual o usuários será enviado se ele utilizar o navegador de botão Back. Você também pode tratar o objeto history como array. Cada entrada contém um dos URLs na lista de histórico, com history[0] sendo a entrada atual. Por ultimo, mas não menos importantes, o objeto history tem três métodos: history.go: abre um URL da lista de histórico. Para utilizar esse método, especifique um numero positivo ou negativo entre parênteses. Por exemplo , history.go(-2) é equivalente a pressionar o botão Back duas vezes. history.back:carrega o URL anterior a lista de histórico, o equivalente a pressionar o bota Back. history.forward: carrega o próximo URL na lista de histórico, se disponível. Isso é equivalente a pressionar o botão Forward. Nota: Os métodos history.back e history. Forward não funcionam corretamente em algumas versões do Netscape Navigotor. Por essa razão, é melhor utilizar history.go(-1) e history.go(1). Location Trabalhando com objeto location Este objeto armazena as informações sobre o URL atual armazenado na janela. Por exemplo, a seguinte instrução carrega um URL na janela atual: window.location.href=“http://www.franca.pro.br”; A propriedade href utilizada nessa instrução contém o URL inteiro da localização atual da janela. Você também pode acessar partes do URL com varias propriedades do objeto location por exemplo : location.protocol é a parte de protocolo do URL. O objeto location tem dois métodos: location.reload: Recarrega o documento atual [F5]. location.replace: Substitui a localização atual por uma nova. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 66 Criando os botões Back e Forward Exercício: Uma utilização comum para os métodos back e forward do objeto history é adicionar seus próprios botões Back e Forward a um documento na Web. Isso aprimora a interface com o usuário de suas paginas. Como um exemplo do uso do objeto history, você agora criara um script que exibe os botões Back e Forward e utiliza esses métodos para o navegador. Você utilizará imagens gráficas para os botões Back e Forward. Abaixo esta a parte do script que tratará o botão Back: <A HREF=”javascript:history.go(-1);”> <IMG BORDER=0 SRC= “left.gif”> </A> Isso utiliza um URL javascript: para executar um commando quando o usuario dá cliques em um link. Nesse caso, o link é a imagem da seta esquerda. O script para o botão Forward é quase idêntico: <A HREF=”javascript:history.go(1);”> <IMG BORDER=0 SRC= “right.gif”> </A> Com os scripts dos botões em mãos, agora precisamos contruir o restante de um documento HTML. O exemplo abaixo mostra o documento completo de HTML e a Figura 1.0 mostra como o Internet Explorer exibe seu documento. Depois de você carregar esse documento em um navegador, visite outras URL e certifique se os botões estão funcionando. <html> <head><title> Testando os botões</title></head> <body> <h1> Botões Back e Forward</h1> <h1> Esta página é um teste para os botões Back e Forward. Depois carregar esse documento , visite outras URL e certifique se os botões estão funcionando. </h1> <HR> <A HREF=”javascript:history.go(-1);”> <IMG BORDER=0 SRC= left.jpg> </A> <A HREF=”javascript:history.go(1);”> <IMG BORDER=0 SRC= right.jpg> </A> <HR> </BODY> <HTML> FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 67 Depois de carregada, seu exemplo deve ficar parecido com a figura abaixo. Nota: Esse script é uma exemplo de quanto o JavaScript pode fazer com muito pouco. Note que não foram utilizadas as tags< Script>, mas apenas dois comando do JavaScript. Exercício: <html> <head> <title>Conteúdo da Caixa</title> <script language=“Javascript” type=“text/javascript”> function exibeConteudo(){ window.alert(window.document.form1.txtNome.value); } </script></head> <body> <h1>Testando DOM</h1> <h2>Através do Javascript</h2> <form name=“form1”> Nome: <input type=“text” name=“txtNome” /> <input type=“button” value=“Exibir” onClick=“exibeConteudo();” /> </form> <p>By Testando…</p> </body> </html> Diferença entre “name” e “id” Introdução The definitive "guide" (the W3C HTML 4.01 spec) is here: <URL:http://www.w3.org/TR/html4/> You may want to also look at xhtml, but for now HTML 4.01 is it. To speed your resolution of name/id, the full list of attributes and the elements they apply to is here: <URL:http://www.w3.org/TR/html4/index/attributes.html> Now my understanding is that: When Netscape created JavaScript, they used "name" to identify elements. MS built IE to copy Netscape, so also supported "name". FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 68 However, the HTML spec decided to use id to identify elements but keep name for backwards compatibility. Name still applies to form elements and lots of others (e.g. name is mandatory on PARAM elements). MS seem to hate ever removing functionality, so they continue to support name as if it was ID. Now you're really confused, right? Many programmers put the same name and ID on form elements. This isn't required, but may be helpful if you intend to reference the element using both the forms.elements collection and getElementById. e.g. <form name="aForm" ... > <input name="aa" id="aa" ... > Can be referenced using the name as: document.forms['aForm'].elements['aa'] or the id as: document.getElementById('aa') You can put the same name on a number of form elements to create a collection - e.g. radio buttons - but use with care. The only reason to give any element an id is if you intend to reference if in some way, otherwise it is unnecessary. The name of form elements is included in the data sent when the form is submitted, the id isn't. If you use document.getElementById('blah') in IE, it will match <... name="blah"> as well as <... id="blah">. Other browsers will only match id. So the bottom line is: Form elements must have a name if you want them to be submitted (put a name on all of them unless you are certain you want to do otherwise - e.g. buttons) Some element *must* have a name. Use id only if you need to refer to an element (usually using getElementById). If an element needs both an ID and a name, it's probably convenient to make them the same. Keep names and ids of different elements unique (mandatory for IDs). In addidion to that, ID's are used by CSS when containing a style declared with an id selector (#): The id selector is different from the class selector(.). While a class selector may apply to SEVERAL elements on a page, an id selector always applies to only ONE element. An ID attribute must be unique within the document. The style rule below will match a p element that has the id value "para1": p#para1 { text-align: center; color: red } The XHTML spec says: "Note that in XHTML 1.0, the name attribute of these elements is formally deprecated, and will be removed in a subsequent version of XHTML." <http://www.w3.org/TR/xhtml1/#h-4.10> Use 'id'. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 69 Esta página foi deixada propositadamente em branco. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 70 Aula 8 – Javascript (4 de 5) Date Introdução Sobre este objeto recai todo o trabalho com datas em Javascript, como obter uma data, o dia, a hora e outras coisas. Para trabalhar com datas necessitamos instanciar um objeto da classe Date e com ele já podemos realizar as operações que necessitamos. Um objeto da classe Date pode ser criado de duas maneiras distintas. Por um lado podemos criar o objeto com o dia e hora atuais e por outro podemos cria-lo com um dia e hora distintos aos atuais. Isto depende dos parâmetros que passemos ao construir os objetos. Para criar um objeto fecha com o dia e hora atuais, colocamos os parênteses vazios ao chamar ao construtor da classe Date. minhaDataAtual = new Date() Para criar um objeto data com um dia e hora diferentes dos atuais temos que indicar entre parênteses o momento para iniciar o objeto. Existem várias maneiras de expressar um dia e hora válida, por isso podemos construir uma data nos guiando por vários esquemas. Estes são dois deles, suficientes para criar todo tipo de datas e horas. minhaData = new Date(ano,mês,dia,hora,minutos,segundos) minhaData = new Date(ano,mês,dia) Os valores que deve receber o construtor são sempre numéricos. Um detalhe, o mês começa por 0, ou seja, janeiro é o mês 0. Se não indicamos a hora, o objeto data se cria com hora 00:00:00. Métodos Os objetos da classe Date não têm propriedades, mas possuem diversos métodos. getDate() * Devolve o dia do mês. getDay() Devolve o dia da semana. getHours() Retorna a hora. getMinutes() Devolve os minutos. getMonth() * Devolve o mês (atenção ao mês que começa por 0). getSeconds() Devolve os segundos. getTime() Devolve os segundos transcorridos entre o dia 1 de janeiro de 1970 e a data correspondente ao objeto ao que se passa a mensagem. getYear() FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 71 Retorna o ano, ao que se restou 1900. Por exemplo, para o 1995 retorna 95, para o 2005 retorna 105. Este método está obsoleto em Netscape a partir da versão 1.3 de Javascript e agora se utiliza getFullYear(). getFullYear() * Retorna o ano com todos os dígitos. Usar este método para estar certos de que funcionará todo bem em datas posteriores ao ano 2000. setDate() * Atualiza o dia do mês. setHours() Atualiza a hora. setMinutes() Muda os minutos. setMonth() * Muda o mês (atenção ao mês que começa por 0). setSeconds() Muda os segundos. setTime() Atualiza a data completa. Recebe um número de segundos desde 1 de janeiro de 1970. setYear() Muda o ano recebe um número, ao que lhe soma 1900 antes de coloca-lo como ano da data. Por exemplo, se recebe 95 colocará o ano 1995. Este método está obsoleto a partir de Javascript 1.3 em Netscape. Agora se utiliza setFullYear(), indicando o ano com todos os dígitos. setFullYear() * Muda o ano da data ao número que recebe por parâmetro. O número se indica completo ex: 2005 ou 1995. Utilizar este método para estar certo de que tudo funciona para datas posteriores a 2000. Como foi possível apreciar, há algum método obsoleto por questões relativas ao ano 2000: setYear() e getYear(). Estes métodos se comportam bem na Internet Explorer e não nos dará nenhum problema utiliza-los. Entretanto, não funcionarão corretamente em Netscape, portanto é interessante utilizarmos em seu lugar os métodos getFullYear() e setFullYear(), que funcionam bem em Netscape e Internet Explorer. Neste exemplo vamos criar duas datas, uma com o instante atual e outra com data do passado. Em seguida, imprimiremos as duas e extrairemos seu ano para imprimi-lo também. Logo, atualizaremos o ano de uma das datas e voltaremos a escrevê-la com um formato mais legível. Exercício <html><head><title>Exercício de Data</title></head><body> <script type=“text/javascript”> //nestas linhas criamos as datas minhaDataAtual = new Date(); minhaDataPassada = new Date(1998,4,23); FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 72 //nestas linhas imprimimos as datas. document.write (minhaDataAtual); document.write ("<br />"); document.write (minhaDataPassada); //extraímos o ano das duas datas anoAtual = minhaDataAtual.getFullYear() anoPassado = minhaDataPassada.getFullYear() //Escrevemos em ano na página document.write("<br>O ano atual é: " + anoAtual) document.write("<br>O ano passado é: " + anoPassado) //mudamos o ano na data atual minhaDataAtual.setFullYear(2005) //extraímos o dia, mês e ano dia = minhaDataAtual.getDate() mes = parseInt(minhaDataAtual.getMonth()) + 1 ano = minhaDataAtual.getFullYear() //escrevemos a data em um formato legível document.write ("<br>") document.write (dia + "/" + mes + "/" + ano) </script></body></html> Há que destacar um detalhe antes de terminar, é que o número do mês pode começar desde 0. Pelo menos no Netscape com o qual realizamos as provas começava o mês em 0. Por esta razão somamos um ao mês que devolve o método getMonth. Existem mais detalhes para destacar, pois é que no Netscape o método getFullYear() devolve os anos transcorridos desde 1900, com o qual ao obter o ano de uma data de, por exemplo, 2005, indica que é o ano 105. Para obter o ano completo temos a nossa disposição o método getFullYear() que devolveria 2005 da mesma forma que em Netscape e Internet Explorer. Muita atenção no trabalho com datas em distintas plataformas, visto que poderia ser problemático o fato de oferecerem distintas saídas aos métodos de manejo de datas, dependendo sempre da marca e versão de nosso navegador. Desafio Como criar uma função que calcule a diferença entre duas datas? Como criar uma função que receba uma data de nascimento e retorne true caso a pessoa seja maior de idade. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 73 Eventos Introdução Os eventos são a maneira que temos em Javascript de controlar as ações dos visitantes e definir um comportamento da página quando se produzam. Quando um usuário visita uma página web e interage com ela se produzem os eventos e com Javascript podemos definir o que queremos que ocorra quando se produzam. Com Javascript podemos definir o que acontece quando se produz um evento como poderia ser que um usuário clique sobre um botão, edite um campo de texto ou abandone a página. O manejo de eventos é o cavalo de batalha para fazer páginas interativas, porque com eles podemos responder às ações dos usuários. Até agora neste manual podemos ver muitos exemplos de manejo de um dos eventos de Javascript, o evento onclick, que se produz ao clicar um elemento da página. Até agora aplicamos sempre o evento a um botão, mas poderíamos aplica-lo a outros elementos da página. Como se define um evento Para definir as ações que queremos realizar ao produzir um evento utilizamos os manipuladores de eventos. Existem muitos tipos de manipuladores de eventos, para muitos tipos de ações do usuário. O manipulador de eventos (event handler) se coloca na tag HTML do elemento da página que queremos que responda às ações do usuário, através de um atributo identificador do evento. Por exemplo, temos o manipulador de eventos onclick, que serve para descrever ações que queremos que se executem quando se clique. Se quisermos que ao clicar sobre um botão aconteça alguma coisa, escrevemos o manipulador onclick na tag <input type=button> desse botão. Algo parecido a isto. <input type=button value="clica-me" onclick="sentencas_javascript..."> Coloca-se um atributo novo na tag que tem o mesmo nome que o evento, neste caso onclick. O atributo se iguala às sentenças Javascript que queremos que se executem ao se produzir o evento. Exemplo <html> <head> <script type="text/javascript"> function displayDate() { document.getElementById("demo").innerHTML=Date(); } </script> </head> <body> <h1>My First Web Page</h1> <p id="demo"></p> <button type="button" onclick="displayDate()">Display Date</button> </body> </html> FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 74 Principais Eventos By using JavaScript, we have the ability to create dynamic web pages. Events are actions that can be detected by JavaScript. Every element on a web page has certain events which can trigger a JavaScript. For example, we can use the onClick event of a button element to indicate that a function will run when a user clicks on the button. We define the events in the HTML tags. Examples of events: • • • • • • Note: A mouse click A web page or an image loading Mousing over a hot spot on the web page Selecting an input field in an HTML form Submitting an HTML form A keystroke Events are normally used in combination with functions, and the function will not be executed before the event occurs! Nos manipuladores de eventos tem que se especificar a hierarquia inteira de objetos do navegador, começando sempre pelo objeto window. Isto é necessário porque existe algum browser antigo que não subentende o objeto window quando se escrevem sentenças Javascript vinculadas a manipuladores de eventos. Agora vamos ver uma lista de alguns manipuladores de eventos que existem disponíveis em Javascript, oferecendo uma pequena descrição de cada um. onblur * Desata-se um evento onblur quando um elemento perde o foco da aplicação. O foco da aplicação é o lugar onde está situado o cursor, por exemplo, pode estar situado sobre um campo de texto, uma página, um botão ou qualquer outro elemento. onchange * Desata-se este evento quando muda o estado de um elemento de formulário, às vezes não se produz até que o usuário retire o foco da aplicação do elemento. Javascript 1.0 onclick * Produz-se quando se clica o botão do mouse sobre um elemento da página, geralmente um botão ou um link. onfocus * O evento onfocus é o contrário de onblur. Produz-se quando um elemento da página ou a janela ganham o foco da aplicação. onkeydown Este evento é produzido no instante que um usuário pressiona uma tecla, independentemente que a solte ou não. É produzido no momento do clique. onkeypress Ocorre um evento onkeypress quando o usuário deixa uma tecla clicada por um tempo determinado. Antes deste evento se produz um onkeydown no momento que se clica a tecla.. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 75 onkeyup Produz-se quando o usuário deixa de apertar uma tecla. É produzido no momento que se libera a tecla. onload * Este evento se desata quando a página, ou em Javascript 1.1 as imagens, terminaram de se carregar. onmouseover * Este evento desata-se quando a seta do mouse entra na área ocupada por um elemento da página. onselect * Executa-se quando um usuário realiza uma seleção de um elemento de um formulário. Javascript 1.0. Executa um código JavaScript quando o usuário seleciona um texto em uma caixa. Usado para Text, Textarea, na forma onSelect="algumaCoisa", onde "algumaCoisa" é uma função ou código de JavaScript. onsubmit * Ocorre quando o visitante aperta sobre o botão de enviar o formulário. Executa-se antes do envio propriamente dito. onunload * Ao abandonar uma página, seja porque se clique em um link que nos leva a outra página ou porque se fecha a janela do navegador, se executa o evento onunload. Imagens Introdução Inicialmente não aparecem na página e transferir seus arquivos previamente em background, para que estejam disponíveis na memória na hora da substituição. Com esses recursos, pode-se incrementar a página com recursos dinâmicos, como ícones que mudam de aparência quando ocorre um evento, animações e banners. As imagens utilizadas em JavaScript podem ser carregadas de duas formas: através do HTML e através de instruções JavaScript. As imagens estáticas, fornecidas pela página HTML através do descritor <img>, atributo src, são representadas como objetos da página (document), acessíveis através da sua propriedade images: um vetor que contém referências para todas as imagens do documento. As imagens dinâmicas, que não são fornecidas pelo HTML, podem ser criadas como objetos JavaScript dentro de qualquer bloco <SCRIPT> ou atributo HTML de eventos usando o operador ‘new’ e o construtor Image(). Neste capítulo, conheceremos as duas formas de manipular imagens em JavaScript, e como utilizá-las para criar páginas dinâmicas eficientes. Classe Image Tanto uma imagem visível em uma página HTML como uma imagem carregada na memória, porém invisível, podem ser representadas em JavaScript por um objeto do tipo Image.. Para criar uma referência para uma imagem que não existe na página, é preciso usar new: FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 76 figura5 = new Image(50, 100); onde os números passsados como parâmetros (opcionais) correspondem respectivamente à largura e altura da imagem na página em pixels. Pode-se também usar: figura6 = new Image() que calculará o tamanho da imagem quando ela for carregada. Depois que um objeto do tipo Image é criado, e suas dimensões definidas, seu tamanho não pode mais ser alterado. Todas as imagens passadas para a referência figura5 abaixo serão redimensionadas para 50x100 pixels: figura5.src = "square.gif"; // square.gif agora tem 50x100 pixels A propriedade src tem a mesma função do atributo SRC do descritor HTML <IMG>: indicar a URL do arquivo-fonte da imagem. Toda página que possui o descritor HTML <IMG> já possui um objeto Image que pode ser manipulado através da sua propriedade document.images (do tipo Array). Para criar uma nova imagem no documento, é preciso usar HTML e o descritor <IMG>, cuja sintaxe geral está mostrada abaixo: <img src="url do arquivo-fonte da imagem" NAME="nome_do_objeto" ALT="texto alternativo (descrição da imagem)" LOWSRC="URL de arquivo-fonte de baixa-resolução" HEIGHT="altura em pixels" WIDTH="largura em pixels" HSPACE="margens externas laterais em pixels" VSPACE="margens externas verticais em pixels" BORDER="largura da borda de contorno em pixels " ALIGN="left" ou "right" ou "top" ou "middle" ou "bottom" ou "texttop" ou "absmiddle" ou "absbottom" ou "baseline" ISMAP <!-- é imagem mapeada do lado do servidor --> USEMAP="#mapa" <!-- é imagem mapeada por ‘mapa’ no cliente --> ONABORT="Código JavaScript" ONERROR="Código JavaScript" ONLOAD="Código JavaScript" > Todos os atributos, com exceção de SRC, são optionais. Para manipular uma imagem do HTML em JavaScript, é preciso usar o vetor images que contém referências para cada uma das imagens do documento, na ordem em que elas aparecem no código HTML: prima = document.images[0]; // primeira imagem da página atual nona = document.images[8]; // nona imagem da página atual Assim como formulários e frames, que são acessíveis através de vetores ou nomes, as imagens podem receber um nome, para tornar o seu acesso mais fácil. O atributo HTML opcional NAME, se presente, pode ser usado pelo JavaScript para fazer referência à imagem, em vez de usar o vetor images. É uma boa idéia, pois torna o código mais legível e independente da ordem e número de imagens na página. Por exemplo, a imagem: <img src="tapir.gif" name="anta" width=380 height=200> pode ser referenciada do JavaScript da forma: prima = document.anta; FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 77 Exemplo: id=“simp” // ou document.getElementById(“simp”); Exercício Resolvido Escreva o Código Crie um icone ativo (link em torno de uma imagem) em uma página HTML que muda de cor quando o mouse passa sobre ele. Utilize duas imagens. A primeira, dullbart.gif, mais apagada, deve estar presente na página quando ela for carregada; a outra brightbart.gif, deve substituir a primeira quando o mouse estiver sobre ela (evento ONMOUSEOVER do link <A>). A primeira imagem deverá voltar a ocupar a sua posição quando o mouse deixar a imagem (evento ONMOUSEOUT do link <A>). Há um esqueleto disponível em bart.html. A substituição deve ser imediata. As duas imagens devem estar carregadas na memória antes de haver qualquer substituição. Solução A listagem a seguir apresenta uma possível solução ao problema proposto (está no arquivo bartsol.html). <html> <head> <title>Imagens</title> <script> apagado = new Image(); aceso = new Image(); apagado.src = "dullbart.gif"; aceso.src = "brightbart.gif"; function apaga() { document.images[0].src = apagado.src; } function acende() { document.images[0].src = aceso.src; } </script> </head><body> <a href="" onmouseover="acende()" onmouseout="apaga()"> <img src="dullbart.gif" width=43 height=58 border=0> </a> </body> </html> FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 78 Aula 9 – Javascript (5 de 5) Formulários e Validação Validação de formulário A validação de formulários é um dos usos mais comuns na programação Javascript. A validação de dados por meio da programação Javascript é muito fácil e rápida por que a verificação é feita no browser, sem necessitar ir até o servidor para transmitir dados. A validação é feita para não haver inconsistência de dados quando forem enviados para a base de dados. Uma checagem no servidor seria necessária no caso do Javascript estar desligado ou se, de alguma maneira, alguém tentar driblar a validação de forma maliciosa ou por engano. Para a maioria das pessoas a validação Javascript consegue economizar muito tempo. A validação no cliente é feita para poupar tempo (round trip). A revalidação no servidor é feita para termos garantia de consistência nos dados. Para podermos trabalhar com a validação de formulário, foi criado um formulário padrão para podermos testar. A figura abaixo será o nosso exemplo: Com uma noção de onde pretendemos chegar vamos construir o nosso formulário baseado na imagem acima. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 79 Exemplo <form name="cadastro" action="teste.php" method="post" onSubmit="return validaForm()"> <table width="40%" border="1" cellpadding="5" bordercolor="#000000"> <tr> <td>nome:</td> <td><input name="nome" type="text"></td> </tr> <tr> <td>user:</td> <td><input name="user" type="text"></td> </tr> <tr> <td>senha:</td> <td><input name="senha" type="password"></td> </tr> <tr> <td>email:</td> <td><input name="email" type="text"> ([email protected])</td> </tr> <tr> <td>telefone:</td> <td><input name="telefone" type="text"></td> </tr> <tr> <td>Data de nascimento:</td> <td><input name="nasce" type="text"> (dd/mm/yyyy)</td> </tr> <tr> <td>Sexo :</td> <td> <input name="sexo[]" type="radio" value="masculino" id="sexo"> Masculino <input name="sexo[]" type="radio" value="feminino" id="sexo"> Feminino </td> </tr> <tr> <td colspan="2"> <div align="right"> <input name="enviar" type="submit" value="enviar"> </div> </td> </tr> </table> </form> FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 80 cellspacing="0" O codigo HTML é uma estrutura de tabela com um formulário, tudo bem simples. Basta apenas prestar atenção para os nomes das caixas de entradas e dos botões radio bos para não ter problemas na hora da programação. No formulário acima, o evento onSubmit chama a função validaForm que será responsável pela validação dos dados do formulário. Se os dados estiverem corretos retornará true e o formulário será enviado. Caso contrário uma mensagem será mostrada determinando o local do erro. Com o formulário criado agora vamos partir para o desenvolvimento do código. Neste formulário será feita a checagem de seis caixas de entrada de dados e de um radio box. Para validação das as caixas de entradas é feita uma verifição se foi digitado algum valor. Para o campo e-mail a verificação é mais elaborada para saber se é um endereço de email válido. Para o campo telefone, só são aceito números. Para o campo Data de nascimento é verificado se a data esta correta com o padrão estabelecido. Para o campo Sexo é verificao se algum valor foi selecionado. Exemplo 1 function validaForm(){ 2 d = document.cadastro; 3 //validar nome 4 if (d.nome.value == ""){ 5 alert("O campo " + d.nome.name + " deve ser preenchido!"); 6 d.nome.focus(); 7 return false; 8 } 9 //validar user 10 if (d.user.value == ""){ 11 alert("O campo " + d.user.name + " deve ser preenchido!"); 12 d.user.focus(); 13 return false; 14 } 15 //validar senha 16 if (d.senha.value == ""){ 17 alert("O campo " + d.senha.name + " deve ser preenchido!"); 18 d.senha.focus(); 19 return false; 20 } 21 //validar email 22 if (d.email.value == ""){ 23 alert("O campo " + d.email.name + " deve ser preenchido!"); 24 d.email.focus(); 25 return false; 26 } 27 //validar email(verificao de endereco eletrônico) 28 parte1 = d.email.value.indexOf("@"); 29 parte2 = d.email.value.indexOf("."); 30 parte3 = d.email.value.length; 31 if (!(parte1 >= 3 && parte2 >= 6 && parte3 >= 9)) { 32 alert ("O campo " + d.email.name + " deve ser conter um endereco eletronico!"); 33 d.email.focus(); 34 return false; 35 } 36 //validar telefone 37 if (d.telefone.value == ""){ 38 alert ("O campo " + d.telefone.name + " deve ser preenchido!"); 39 d.telefone.focus(); 40 return false; 41 } FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 81 42 //validar telefone(verificacao se contem apenas numeros) 43 if (isNaN(d.telefone.value)){ 44 alert ("O campo " + d.telefone.name + " deve conter apenas numeros!"); 45 d.telefone.focus(); 46 return false; 47 } 48 //validar data de nascimento 49 erro=0; 50 hoje = new Date(); 51 anoAtual = hoje.getFullYear(); 52 barras = d.nasce.value.split("/"); 53 if (barras.length == 3){ 54 dia = barras[0]; 55 mes = barras[1]; 56 ano = barras[2]; 57 resultado = (!isNaN(dia) && (dia > 0) && (dia < 32)) && (!isNaN(mes) && (mes > 0) && (mes < 13)) && (!isNaN(ano) && (ano.length == 4) && (ano <= anoAtual && ano >= 1900)); 58 if (!resultado) { 59 alert("Formato de data invalido!"); 60 d.nasce.focus(); 61 return false; 62 } 63 } else { 64 alert("Formato de data invalido!"); 65 d.nasce.focus(); 66 return false; 67 } 68 //validar sexo 69 if (!d.sexo[0].checked && !d.sexo[1].checked) { 70 alert("Escolha o sexo!") 71 return false; 72 } 73 return true; 74 } Linha 1 – Declaração da função responsável pela validação dos dados do formulário. Linha 2 – Declaração de uma variável para economizar tempo e prováveis erros de digitação. Linha 4 – Verificação se foi digitado algum valor para o campo nome. Se retornar falso é enviado uma mensagem de erro e a caixa de entrada recebe o foco para se feita a correção. Linha 10 – Verificação se foi digitado algum valor para o campo user. Se retornar falso é enviado uma mensagem de erro e a caixa de entrada recebe o foco para se feita a correção. Linha 16 – Verificação se foi digitado algum valor para o campo senha. Se retornar falso é enviado uma mensagem de erro e a caixa de entrada recebe o foco para se feita a correção. Linha 22 – Verificação se foi digitado algum valor para o campo email. Se retornar falso é enviado uma mensagem de erro e a caixa de entrada recebe o foco para se feita a correção. Linha 28 – Declaração de uma variável que armazenara a posição do caractere “@” na caixa de entrada email. Linha 29 – Declaração de uma variável que armazenara a posição do caractere “.” na caixa de entrada email. Linha 30 – Declaração de uma variável que armazenara a quantidade de caracteres digitados na caixa de entrada email. Linha 31 – Estrutura condicional para verificação se o caractere “@” está no mínimo depois de três letras, o caractere “.” está no mínimo depois de seis e se foi digitado no mínimo 9 letras. Se FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 82 retornar falso, é enviado uma mensagem de erro e a caixa de entrada recebe o foco para se feita a correção. Linha 37 - Verificação se foi digitado algum valor para o campo telefone. Se retornar falso é enviado uma mensagem de erro e a caixa de entrada recebe o foco para se feita a correção. Linha 43 - Verificação se o valor digitado no campo telefone possui apenas números. Se retornar falso é enviado uma mensagem de erro e a caixa de entrada recebe o foco para se feita a correção. Linha 50 – Declaração de uma variável que armazena uma nova Data. Linha 51 - Declaração de uma variável que armazena o valor do ano no formato completo com 4 caracteres. Linha 52 – Declaração de uma variável que separa o valor da caixa de entrada referente a data de nascimento e coloca em uma matriz, a “/” é utilizada para separar os valores entre elas, é suposto ter 3 valores referente a dia, mês e ano respectivamente. Linha 53 - Estrutura condicional para verificação se tem 3 valores para a matriz criada. Se retornar falso é enviado uma mensagem de erro e a caixa de entrada recebe o foco para se feita a correção. Linha 54 - Declaração de uma variável que recebe o primeiro valor da matriz, valor esse referente ao dia. Linha 55 - Declaração de uma variável que recebe o segundo valor da matriz, valor esse referente ao mês. Linha 56 - Declaração de uma variável que recebe o terceiro valor da matriz, valor esse referente ao ano completo com 4 caracteres. Linha 57 - Declaração de uma variável que faz a verificação das variáveis criadas anteriormente referente a dia, mês e ano, é feita uma checagem se os valores são números e se estão no padrão estabelecido. Linha 58 - Estrutura condicional para checagem se o resultado da verificação dos dados digitados. Se retornar falso é é enviado uma mensagem de erro e a caixa de entrada recebe o foco para se feita a correção. Linha 69 - Verificação se foi selecionado algum valor referente ao sexo. Se retornar falso é enviado uma mensagem de erro e a caixa de entrada recebe o foco para se feita a correção. Linha 73 – Se todos os valores foram digitados corretamente a função vai retornar true e o formulário será enviado. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 83 Esta página foi deixada propositadamente em branco. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 84 Aula 10 – PHP (1 de 3) 1 Introdução PHP PHP (Personal Home Page) é uma sigla recursiva que significa PHP HyperText Preprocessor. O PHP é uma linguagem de código-fonte aberto, muito utilizada na Internet e especialmente criada para o desenvolvimento de aplicativos Web. Note como isso é diferente de scripts CGI escritos em outras linguagens como Perl ou C --- ao invés de escrever um programa com um monte de comandos para imprimir HTML, você escreve um arquivo HTML com algum código inserido para fazer alguma coisa (nesse caso, imprimir um pouco de texto). O código PHP é delimitado por tags iniciais e finais que lhe permitem pular pra dentro e pra fora do “modo PHP”. A melhor coisa em usar PHP está no fato de ele ser extremamente simples para um iniciante, mas oferece muitos recursos para o programador profissional. Para testar scripts PHP é necessário um servidor com suporte a esta tecnologia. Normalmente, o mais utilizado é o Apache. O banco de dados mais utilizado com os scripts PHP é o MySQL. Um exemplo de pacote pronto para execução de um ambiente Apache + PHP + MySQL é o EasyPHP (http://www.easyphp.org). Qualquer editor de textos pode ser usado para escrever os scripts PHP (ex. bloco de notas/Komodo ou a ferramenta free MPS PHP Designer em http://www.mpsoftware.dk). As páginas PHP devem ser salvas no diretório (D:\Minhas Páginas) raiz do servidor. Para testes locais com o EasyPHP, essa pasta é c:\Arquivos de programas\EasyPHP\www. Para acessar a página, deve-se abrir o browser Internet Explorer e digitar-se o nome do domínio (http://127.0.0.1 ou localhost) e o nome da página com extensão .php. Quando o EasyPHP está sendo executado, aparece um ícone com uma letra “e” ao lado do relógio do Windows. Observação: *LAMP = Linux, Apache, MySql e PHP. 2 Exemplo de Script Introdução Para criar o primeiro exemplo, digite o seguinte código-fonte no seu editor e salve com o nome de teste.php dentro do diretório raiz do servidor. Exemplo (usar Firefox) <html> <head> <title>Teste PHP</title> </head> <body> <?php echo "<p>Alô Mundo</p>"; ?> </body> </html> Figura 1 – Primeiro script No browser, digite o endereço http://127.0.0.1/teste.php e veja o resultado. Veja também o código fonte da página (Exibir _ Código fonte). É interessante notar que os comandos PHP não aparecem porque o servidor interpreta todos os scripts antes de enviar a página para o browser. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 85 Observação: Para acessar o mySql pelo php temos que programar para acessar via aluno/aluno no ip do servidor do banco de dados (10.0.0.3). O que PHP pode fazer ? O PHP é focado para ser uma linguagem de script do lado do servidor, portanto, você pode fazer qualquer coisa que outro programa CGI pode fazer, como: coletar dados de formulários, gerar páginas com conteúdo dinâmico ou enviar e receber cookies. Mas o PHP pode fazer muito mais. Esses são os maiores campos onde os scripts PHP podem se utilizados: • Script no lado do servidor (server-side). Este é o mais tradicional e principal campo de atuação do PHP. Você precisa de três coisas para seu trabalho. O interpretador do PHP (como CGI ou módulo), um servidor web e um browser. Basta rodar o servidor web conectado a um PHP instalado. Você pode acessar os resultados de seu programa PHP com um browser, visualizando a página PHP através do servidor web. • Script de linha de comando. Você pode fazer um script PHP funcionar sem um servidor web ou browser. A única coisa necessária é o interpretador. Esse tipo de uso é ideal para script executados usando o cron ou o Agendador de Tarefas (no Windows). Esses scripts podem ser usados também para rotinas de processamento de texto. • Escrevendo aplicações GUI no lado do cliente (client-side). O PHP não é (provavelmente) a melhor linguagem para produção de aplicações com interfaces em janelas, mas o PHP faz isso muito bem, e se você deseja usar alguns recursos avançados do PHP em aplicações no lado do cliente poderá utilizar o PHP-GTK para escrever esses programas. E programas escritos desta forma ainda serão independentes de plataforma. O PHP-GTK é uma extensão do PHP, não disponível na distribuição oficial. Se você está interessado no PHP-GTK, visite o site http://gtk.php.net. O PHP pode ser utilizado na maioria dos sistemas operacionais, incluindo Linux, várias variantes Unix (incluindo HP-UX, Solaris e OpenBSD), Microsoft Windows, Mac OS X, RISC OS, e provavelmente outros. O PHP também é suportado pela maioria dos servidores web atuais, incluindo Apache, Microsoft Internet Information Server, Personal Web Server, Netscape and iPlanet Servers, Oreilly Website Pro Server, Caudium, Xitami, OmniHTTPd, e muitos outros. O PHP pode ser configurado como módulo para a maioria dos servidores, e para os outros como um CGI comum. Com o PHP, portanto, você tem a liberdade para escolher o sistema operacional e o servidor web. Do mesmo modo, você pode escolher entre utilizar programação estrutural ou programação orientada a objeto, ou ainda uma mistura deles. Mesmo não desenvolvendo nenhum recurso padrão de OOP (Object Oriented Programming, Programação Orientada a Objetos) na versão atual do PHP, muitas bibliotecas de código e grandes aplicações (incluindo a biblioteca PEAR) foram escritos somente utilizando OOP. Com PHP você não está limitado a gerar somente HTML. As habilidades do PHP incluem geração de imagens, arquivos PDF e animações Flash (utilizando libswf ou Ming) criados dinamicamente. Você pode facilmente criar qualquer padrão texto, como XHTML e outros arquivos XML. O PHP pode gerar esses padrões e os salvar no sistema de arquivos, em vez de imprimi-los, formando um cache dinâmico de suas informações no lado do servidor. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 86 Talvez a mais forte e mais significativa característica do PHP é seu suporte a uma ampla variedade de banco de dados. Escrever uma página que consulte um banco de dados é incrivelmente simples. Os seguintes bancos de dados são atualmente suportados: Adabas D Ingres Oracle (OCI7 and OCI8) dBase InterBase Ovrimos Empress FrontBase PostgreSQL FilePro (read-only) mSQL Solid Hyperwave Direct MS-SQL Sybase IBM DB2 MySQL Velocis Informix ODBC Unix dbm Adicionalmente, o PHP suporta ODBC (Open Database Connection, ou Padrão Aberto de Conexão com Bancos de Dados), permitindo que você utilize qualquer outro banco de dados que suporte esse padrão mundial. O PHP também tem suporte para comunicação com outros serviços utilizando protocolos como LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (em Windows) e incontáveis outros. Você pode abrir sockets de rede e interagir diretamente com qualquer protocolo. O PHP também suporta o intercâmbio de dados complexos WDDX, utilizado em virtualmente todas as linguagens de programação para web. Falando de comunicação, o PHP implementa a instanciação de objetos Java e os utiliza transparentemente como objetos PHP. Você ainda pode usar sua extensão CORBA para acessar objetos remotos. O PHP é extremamente útil em recursos de processamento de texto, do POSIX Estendido ou expressões regulares Perl até como interpretador para documentos XML. Para acessar e processar documentos XML, são suportados os padrões SAX e DOM. Você ainda pode usar nossa extensão XSLT para transformar documentos XML. Utilizando o PHP no campo do e-commerce, você poderá usar as funções específicas para Cybescash, CyberMUT, Verysign Payflow Pro e CCVS, práticos sistemas de pagamento online. Por último mas longe de terminar, temos também outras extensões interessantes: funções para o search engine mnoGoSearch, funções para Gateway IRC, vários utilitários de compressão (gzip, bz2), calendário e conversões de datas, tradução, etc. 3 Configuração (php.ini) As configurações do PHP ficam armazenadas em um arquivo denominado php.ini e que é carregado cada vez que o servidor é iniciado. No Windows, ele fica na pasta c:\Windows. Exemplo: [PHP] ;;;;;;;;;;; ; WARNING ; ;;;;;;;;;;; ; This is the default settings file for new PHP installations. ; By default, PHP installs itself with a configuration suitable for ; development purposes, and *NOT* for production purposes. ; For several security-oriented considerations that should be taken ; before going online with your site, please consult php.inirecommended ; and http://php.net/manual/en/security.php. ;;;;;;;;;;;;;;;;;;; ; About this file ; FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 87 ;;;;;;;;;;;;;;;;;;; ; This file controls many aspects of PHP's behavior. In order for PHP to ; read it, it must be named 'php.ini'. PHP looks for it in the current ; working directory, in the path designated by the environment variable ; PHPRC, and in the path that was defined in compile time (in that order). ; Under Windows, the compile-time path is the Windows directory. The ; path in which the php.ini file is looked for can be overridden using ; the -c argument in command line mode. ; ; The syntax of the file is extremely simple. Whitespace and Lines ; beginning with a semicolon are silently ignored (as you probably guessed). ; Section headers (e.g. [Foo]) are also silently ignored, even though ; they might mean something in the future. Figura 2 – Trecho de exemplo do php.ini Através de modificações neste arquivo é possível alterar várias opções no comportamento do PHP. Todas as linhas iniciadas por ponto-e-vírgula são comentários. 4 Sintaxe Básica Tags especiais indicam ao PHP onde estão os blocos de código. A tag de abertura é formada por um sinal de “menor que” (<), um sinal de interrogação (?) e a sigla php. A tag de fechamento é formada por um ponto interrogação (?) e sinal de “maior que” (>). Ex: <?php ... ?> Exercício Digite o código da figura 1 e salve no diretório raiz do servidor Apache. Veja o resultado da página através de seu carregamento no browser. O sinal de ponto-e-vírgula (;) indica o final de um comando (ver figura 1). A próxima figura mostra outro exemplo. <html> <head> <title>Teste PHP</title> </head> <body> <?php $a = 10; $b = 15; $c = $a + $b; echo "$a mais $b é igual a $c"; ?> </body> </html> Figura 3 – Exemplo de código FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 88 Os comentários de mais de uma linha no PHP são obtidos através de /* e */. Os comentários de apenas uma linha são obtidos através de //. <html> <head> <title>Teste PHP</title> </head> <body> <?php /* O código abaixo soma duas variáveis e exibe o valor encontrado */ $a = 10; $b = 15; $c = $a + $b; echo "$a mais $b é igual a $c"; ?> </body> </html> Figura 4 – Exemplo de código com comentários de mais de uma linha Os comentários não aparecem no browser. <html> <head> <title>Teste PHP</title> </head> <body> <?php $a = 10; //A variável $a recebe o valor 10 $b = 15; //A variável $b recebe o valor 15 //A variável $c recebe o valor da soma $c = $a + $b; //O resultado obtido é exibido echo "$a mais $b é igual a $c"; ?> </body> </html> Figura 5 - Exemplo de código com comentários de uma linha Palavras-chave do PHP and do for include require true break else foreach list return var case elseif function new static virtual class extends global not switch xor continue false if or this while default Exercício <? # Páginas Dinâmicas com PHP e MySQL # Exercício 1 - Meu primeiro script em PHP ?> <html> <head> <title>IME-USP, Verão 2007, PHP e MySQL - Meu primeiro script em PHP</title> </head> <body text="#660099" link="#3399CC" alink="#FF6600" vlink="#66CC00"> <? # como imprimir? print "<p>Olá mundo!</p>"; # operações aritméticas $a = 2; $b = 3; $soma = $a + $b; FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 89 $diferença = $a - $b; $produto = $a * $b; $divisão = $a / $b; $resto = $a % $b; # tipos de impressão print "<p>Os números $a e $b possuem soma $soma, diferença $diferença, produto $produto e a divisão dá $divisão com resto $resto.</p>"; # variáveis podem ser impressas somente dentro de aspas duplas print '<p>Os números $a e $b são primos?</p>'; # variáveis não podem ser impressas em aspas simples print '<p>Os números '.$a.' e '.$b.' são primos?</p>'; #para concatenar strings usamos o operador . ?> </body> </html> obs.: tanto faz áspas ou apóstrofo FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 90 Aula 11 – PHP (2 de 3) 5 Variáveis Variáveis armazenam valores. Pode-se referir a variáveis para obter seu valor ou para alterar seu conteúdo. No PHP elas são representadas por um cifrão ($) mais o nome da variável. Os nomes de variáveis válidos são iniciados por letras ou por um subscrito ( _ ). Existe diferenciação entre nomes de variáveis maiúsculas e minúsculas. Ex: $a, $_A, $_a <html> <head> <title>Teste PHP</title> </head> <body> <?php $a = 10; $A = 20; echo "O valor de 'a' é $a e o de 'A' é $A"; ?> </body> </html> Figura 6 – Exemplo de código com variáveis minúscula e maiúscula Quando a variável é declarada dentro de uma função, ela só estará disponível para o código desta função. O código a seguir gera um erro devido a essa característica. <html> <head> <title>Teste PHP</title> </head> <body> <?php function soma($a) { $b = $a + 5; } soma(10); echo "o valor de 'b' é $b"; ?> </body> </html> Figura 7 – Declaração de variável dentro de função Para evitar este tipo de problema, deve-se definir a variável como global. O código a seguir resolve o problema do código anterior. Compare os resultados dos dois scripts. <html> <head> <title>Teste PHP</title> </head> <body> <?php function soma($a) { global $b; $b = $a + 5; } soma(10); echo "o valor de 'b' é $b"; ?> </body> </html> Figura 8 – Declaração de variável global 6 Tipos de dados O PHP suporta vários tipos de dados: • Inteiro – Números inteiros (isto é, números sem ponto decimal) FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 91 • • • • • • • • Números de dupla precisão – Números reais (isto é, números que contêm um ponto decimal) String – Texto entre aspas simples (´ ´) ou duplas (“ “) Booleanos – armazenam valores verdadeiros ou falsos, usados em testes de condições Array – Grupo de elementos do mesmo tipo Objeto – Grupo de atributos e métodos Recurso – Uma origem de dados externa Nulo – Nenhum valor As variáveis do tipo matriz ou array permitem o armazenamento de diversos elementos referenciados por uma mesma referência. <html> <head> <title>Teste PHP</title> </head> <body> <?php $frutas = array( 1 => "Laranja", 2 => "Maçã", 3 => "Uva"); echo "<li> $frutas[1]<br>"; echo "<li> $frutas[2]<br>"; echo "<li> $frutas[3]<br>"; ?> </body> </html> Figura 13 – Código com matriz 7 Constantes Constantes são identificadores para valores simples. O seu conteúdo não muda durante a execução do código. Elas são criadas com a função define e, por convenção, são escritas com letras maiúsculas e não usam o cifrão no início. <html> <head> <title>Teste PHP</title> </head> <body> <?php define("CONSTANTE", "Alô mundo."); echo CONSTANTE; ?> </body> </html> Figura 14 – Código com constante O PHP implementa algumas constantes, a maioria são matemáticas. O código seguinte demonstra o uso da constante M_PI. <html> <head> <title>Teste PHP</title> </head> <body> <?php function calculaAreaCirculo($raio) { return M_PI * pow($raio, 2); } $meuRaio = 5; $area = calculaAreaCirculo($meuRaio); echo "<b>Raio</b> = $meuRaio<br>"; echo "<b>Área</b> = $area"; ?> </body> </html> Figura 15 – Código com a constante M_PI FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 92 8 Expressões Tudo que tem um valor pode ser considerado uma expressão. O código a seguir demonstra na prática. <html> <head> <title>Teste PHP</title> </head> <body> <?php $b = ($a = 5); echo "O valor de 'b' é $b"; ?> </body> </html> Figura 16 – Código com uso de expressão <html> <head> <title>Teste PHP</title> </head> <body> <?php $b = $a = 5; echo "O valor de 'b' é $b"; ?> </body> </html> Figura 17 – Variação do código anterior Expressões de comparação retornam valores booleanos, sendo vazio representando verdadeiro e um representando falso. As expressões de comparação são usadas em declarações condicionais para determinar se um bloco de código será executado ou não. <html> <head> <title>Teste PHP</title> </head> <body> <?php $valor = (5 < 10); echo "O valor da expressão '5 > 10' é $valor"; ?> </body> </html> Figura 18 – Código com expressão de comparação 9 Operadores São usados para efetuarem operações sobre as variáveis e constantes. Os operadores são: + soma - subtração * multiplicação / divisão ^ exponenciação % módulo, resto da divisão ++ acrescenta um a uma variável -- subtrai um de uma variável += soma um valor a uma variável e lhe atribui o resultado <html> <head><title>Teste PHP</title></head> <body> <?php $x = 2; echo($x + 2); echo "<br>"; $x = 2; echo(5 - $x); echo "<br>"; $x = 4; FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 93 echo($x * 5); echo "<br>"; $x = 15; echo($x / 5); echo "<br>"; $x = 10; echo($x % 8); echo "<br>"; $x = 5; $x++; echo($x); echo "<br>"; $x = 5; $x--; echo($x); echo "<br>"; $x = 8; echo($x); echo "<br>"; $x = 8; $x = $x + 10; echo($x); echo "<br>"; $x = 8; $x += 10; echo($x); ?> </body> </html> Figura 19 – Código com diversas operações matemáticas Há também os operadores de comparação. Uma comparação sempre gera um dos dois valores possíveis: vazio, que corresponde a falso, e 1, que corresponde a verdadeiro. = = é igual a ! = não é igual a > é maior que < é menor que >= é maior ou igual a <= é menor ou igual a Operadores lógicos and ou && - operador lógico “e”, apenas retornando verdadeiro quando as duas condições envolvidas no teste forem verdadeiras or ou | | operador lógico “ou”, retornando verdadeiro quando uma ou as duas condições envolvidas no teste forem verdadeiras ! operador lógico “não”, invertendo o resultado de um teste xor – operador lógico “ou exclusivo” que determina se uma de duas condições é verdadeira mas não ambas. Se ambas forem verdadeiras, o teste final será falso Exercício [MPU 2010] <?php $Publico = "Uniao"; $Uniao = "Prova"; $Ministerio = "Publico"; $a="Ministerio"; print $a; print $$a; print $$$a; ?> FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 94 Com relação ao código anterior, escrito em PHP, julgue os itens subsequentes. a) O código na linha 6 produzirá a apresentação na tela do computador, da palavra Ministerio, que será, no momento da apresentação, o conteúdo da >> variável $a. (C ou E?) b) Nas linhas 7 e 8, existem erros de sintaxe, pois os nomes das variáveis em PHP admitem somente um único símbolo $. (C ou E?) c) O código na linha 8 produzirá a apresentação, na tela do computador, da palavra Uniao, pois esse será, no momento da apresentação, o conteúdo da variável $$$a. (C ou E?) FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 95 Esta página foi deixada propositadamente em branco. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 96 Aula 12 – PHP (3 de 3) 10 Estruturas de Controle No PHP, as estruturas de controle são formadas por declarações condicionais e de looping: if – executa uma ação se uma condição for atendida. O bloco de comandos a ser executado deve ser escrito entre chaves; else – pode-se colocar um conjunto de comandos alternativos caso o teste do if seja negativo. A declaração else deve vir logo após o bloco de código relacionado ao if (ver figura 24). O comando if também pode ser usado após a declaração else (figura 25). <html> <head> <title>Teste PHP</title> </head> <body> <?php $x = 20; if ($x > 10) { echo("O valor da variável é maior que 10."); } ?> </body> </html> Figura 22 – Código com declaração condicional if verdadeiro <html> <head> <title>Teste PHP</title> </head> <body> <?php $x = 5; if ($x > 10) { echo("O valor da variável é maior que 10."); } ?> </body> </html> Figura 23 – Código com declaração condicional if falso <html> <head> <title>Teste PHP</title> </head> <body> <?php $x = 5; if ($x > 10) { echo("O valor da variável é maior que 10."); } else { echo("O valor da variável é menor que 10."); } ?> </body> </html> Figura 24 – Código com declaração condicional if e else <html> <head> <title>Teste PHP</title> </head> <body> <?php $cor = "branco"; if ($cor == "vermelho") { echo("A variável contém o valor 'vermelho'."); } FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 97 else if { echo("A } else if { echo("A } else { echo("O } ?> </body> </html> ($cor == "azul") variável contém o valor 'azul'."); ($cor == "amarelo") variável contém o valor 'amarelo'."); valor da variável não foi identificado."); Figura 25 – Código com declaração condicional if e else if switch / case – forma de testar uma dentre várias possibilidades. A declaração default executa caso nenhuma das opções for verdadeira (figura 26). A declaração break faz com que o restante do código não seja executado caso o teste seja verdadeiro. <html> <head> <title>Teste PHP</title> </head> <body> <?php $d = getdate(); switch ($d['wday']) { case 5: echo("Finalmente Sexta"); break; case 6: echo("Super Sábado"); break; case 0: echo("Domingo Sonolento"); break; default: echo("Estou esperando pelo fim da semana"); } ?> </body> </html> Figura 26 – Código com declaração condicional switch e case for – estrutura de looping que executa um bloco de código quantas vezes for indicado em uma variável. Deve-se definir a variável que será testada no looping, uma condição de teste e o incremento (ou decremento) da variável de controle. <html> <head> <title>Teste PHP</title> </head> <body> <?php for ($i = 1; $i < 10; $i++) { echo("Linha $i <br>"); } ?> </body> </html> Figura 27 – Código com looping definido pelo comando if while – estrutura de looping que não necessita de um número determinado de iterações. Ele é executado enquanto uma condição for verdadeira. <html> <head> <title>Teste PHP</title> </head> <body> <?php $i = 1; FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 98 while ($i < 10000) { echo($i); $i *= 2; echo(" vezes 2 é igual a $i <br>"); } ?> </body> </html> Figura 28 – Código com declaração condicional while do-while– outra forma de looping que executa um bloco de código, testa uma condição e repete novamente o bloco de código (ou não). <html> <head> <title>Teste PHP</title> </head> <body> <?php $i = 1; do { echo ("Linha $i <br>"); $i++; } while ($i < 10) ?> </body> </html> Figura 29 - Código com declaração condicional do-while 11 Funções Uma função é um bloco de código reutilizável que é executado devido a um evento ou pela chamada de outra função. Deve-se usar a declaração function para criar uma função. Os parâmetros usados pela função são declarados entre parênteses. Os comandos a serem executados pela função devem estar entre chaves (figura 30). A declaração return retorna um valor quando a função é chamada. Esta declaração não é necessária se a função não retorna nenhum valor. Para se chamar uma função, deve-se escrever seu nome e indicar os parâmetros entre parênteses. <html> <head><title>Teste PHP</title></head> <body> <?php function soma($valor1, $valor2) { $resultado = $valor1 + $valor2; return ($resultado); } $x = soma(7, 8); echo($x); ?> </body> </html> Figura 30 – Exemplo de uma função <html> <head> <title>Teste PHP</title> </head> <body> <?php function escreveTexto() { echo("Já sei criar funções!"); } escreveTexto(); ?> </body> </html> FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 99 Figura 31 – Segundo exemplo de declaração de função 15 Inclusão de Arquivos O comando include permite a inclusão de outros arquivos php dentro do script que está sendo executado. Pode-se criar uma função que imprime a data atual e pode-se reusá-lo sem precisar reescrever o código cada vez que for necessário. No exemplo a seguir, pode-se chamar o primeiro script de cabecalho.php e o próximo script o inclui através do comando include. <html> <head> <title>Teste PHP</title> </head> <body> <?php $meses = array(1 => "Janeiro", 2 => "Fevereiro", 3 => "Março", 4 => "Abril", 5 => "Maio", 6 => "Junho", 7 => "Julho", 8 => "Agosto", 9 => "Setembro", 10 => "Outubro", 11 => "Novembro", 12 => "Dezembro"); $hoje = getdate(); $dia = $hoje["mday"]; $mes = $hoje["mon"]; $nomeMes = $meses[$mes]; $ano = $hoje["year"]; echo "Olá. Hoje é dia $dia de $nomeMes de $ano." ?> </body> </html> Figura 38 – Script que é salvo com o nome de cabecalho.php <html> <head> <title>Página PHP</title> </head> <body> <?php include("cabecalho.php"); ?> </body> </html> Figura 39 – Código com inclusão de arquivo externo chamado cabecalho.php Exercícios Editar e salvar com o nome de Exe01.php: <HTML><!-- EXERCÍCIO 01 - PHP --> <HEAD><TITLE>Exercício 01</TITLE></HEAD> <BODY BGCOLOR="blue" TEXT="white"> <?php //Estou utilizando esta linha para comentário echo "<H1><CENTER>Testando PHP com HTML<P></H1>"; echo "Estou usando PHP !!!<HR>"; ?> <SCRIPT LANGUAGE=php> //Outra forma de utilizar o PHP echo "<H3>Aluno1 - Aluno2</h3>"; echo "<FONT FACE='arial' SIZE='4' COLOR='yellow'>Colégio Singular</FONT>"; </SCRIPT> FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 100 </CENTER></BODY></HTML> FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 101 Esta página foi deixada propositadamente em branco. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 102 Aula 13 – PHP (aula extra) 16 Cookies Cookies são formas de armazenar informações a respeito de uma sessão dentro do disco rígido do usuário cliente. O comando setcookie armazena um cookie com as informações que se desejam recuperar em seguida. Quando não for declarado um tempo de vida, o cookie se auto-destrói quando a sessão é encerrada (quando o browser for fechado). <?php if (isset($HTTP_POST_VARS['usuario'])) { $user = $HTTP_POST_VARS['usuario']; setcookie("usuario", $user); $mensagem = "Usuário $user conectado.<p>"; } else { $mensagem = "Digite o seu nome de usuário<p>"; } ?> <html> <head> <title>Teste PHP</title> </head> <body> <? echo $mensagem; ?> <form method="post" action="teste.php"> Nome de Usuário: <input type="text" name="usuario"> <br> <input type="submit" value="Enviar"> </form> </body> </html> Figura 40 – Código que cria um cookie com o nome do usuário <html> <head> <title>Página PHP</title> </head> <body> <?php $user = $_COOKIE["usuario"]; echo "O usuário $user está conectado."; ?> </body> </html> Figura 41 – Código que recupera os dados do cookie criado anteriormente O código a seguir demonstra o uso de um cookie com “tempo de vida” definido em 3600 segundos, isto é, uma hora. Após uma hora decorrida de sua criação, ele é removido. <?php if (isset($_POST['usuario'])) { $user = $_POST['usuario']; setcookie("usuario", $user, time() + 3600); // Expira em uma hora $mensagem = "Usuário $user conectado.<p>"; } else { $mensagem = "Digite o seu nome de usuário<p>"; } ?> <html><head><title>Teste PHP</title></head> <body> <? echo $mensagem; ?> <form method="post" action="teste.php"> Nome de Usuário: <input type="text" name="usuario"> <br><input type="submit" value="Enviar"> </form></body></html> Figura 42 – Código que cria um cookie com o nome do usuário que dura uma hora FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 103 17 Parâmetros (Query String) O uso de parâmetros facilita a programação porque permite a passagem de dados entre o browser e o script ou entre scripts. A passagem de parâmetros entre o browser e o script é feita dentro da URL, por exemplo e é manipulada pela função $_GET. Nesse exemplo a seguir, cada um dos links envia um valor diferente para a página que é aberta (teste.php). Para enviar um parâmetro, a sintaxe inclui um sinal de interrogação, o nome da variável, um sinal de igual e o valor da variável. <html> <head> <title>Página PHP</title> </head> <body> <?php if (isset($_GET["valor"])) { $valor = $_GET["valor"]; echo "Você clicou no link $valor <p>"; } else { echo "Clique em um dos links abaixo:<p>"; } ?> <a href="teste.php?valor=1">link 1</a><br> <a href="teste.php?valor=2">link 2</a><br> <a href="teste.php?valor=3">link 3</a><br> <a href="teste.php?valor=4">link 4</a><br> <a href="teste.php?valor=5">link 5</a><br> </body> </html> Figura 43 – Código com passagem de parâmetro Caso exista necessidade de se passar mais de um parâmetro, deve-se separá-los através de “e comercial” (&), conforme figura 44. <html> <head> <title>Página PHP</title> </head> <body> <?php if (isset($_GET["nome"]) && isset($_GET["sobrenome"])) { $nome = $_GET["nome"]; $sobrenome = $_GET["sobrenome"]; echo "O nome selecionado foi $nome $sobrenome<p>"; } else { echo "Selecione um nome<p>"; } ?> <a href="teste.php?nome=Pedro&sobrenome=Silva">Pedro Silva</a><br> <a href="teste.php?nome=Maria&sobrenome=Santos">Maria Santos</a><br> </body> </html> Figura 44 – Código com passagem de mais de um parâmetro 18 Formulários Os valores enviados através de um formulário podem ser recuperados pela variável predefinida $_POST. Através dela é possível obter os dados que foram enviados através do método POST do HTML, bastando indicar o nome do campo do formulário. No comando action do formulário, deve-se indicar a página PHP que irá receber os valores. O mesmo documento pode conter o código e o formulário (figura 45). <html> <head> FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 104 <title>Página PHP</title> </head> <body> <?php if (isset($_POST["pnome"]) && isset($_POST["snome"])) { $pnome = $_POST["pnome"]; $snome = $_POST["snome"]; echo "Olá $pnome $snome.<p>"; } else { echo "Digite o seu nome.<p>"; } ?> <form method="post" action="teste.php"> Primeiro Nome: <input type="text" name="pnome"> <br> Sobrenome: <input type="text" name="snome"> <br><br> <input type="submit" value="Enviar"> </form> </body> </html> Figura 45 – Código com formulário enviando dados através do método POST Se for usado o método GET, os dados podem ser visualizados na URL do browser. Para recuperar estes dados, deve-se usar a variável pré-definida $_GET. Executar os códigos das figuras 45 e 46 e analisar o comportamento do browser. <html> <head> <title>Página PHP</title> </head> <body> <?php if (isset($_GET["pnome"]) && isset($_GET["snome"])) { $pnome = $_GET["pnome"]; $snome = $_GET["snome"]; echo "Olá $pnome $snome.<p>"; } else { echo "Digite o seu nome.<p>"; } ?> <form method="get" action="teste.php"> Primeiro Nome: <input type="text" name="pnome"> <br> Sobrenome: <input type="text" name="snome"> <br><br> <input type="submit" value="Enviar"> </form></body> </html> Figura 46 – Código com formulário enviando dados através do método GET Esta página foi deixada propositadamente em branco. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 105 Bibliografia/Créditos • Apostila de PHP do Prof. Cristiano Cachapuz e Lima • Wikipédia, a enciclopédia livre. • Apostila de XHTML - Prof. Luís Gonçalves • Apostila de CSS - Prof. Luís Gonçalves • Apostila de Javascript - Prof. Luís Gonçalves • JavaScript – Aplicações Interativas para a Web - ADRIANO GOMES LIMA • http://www.maujor.com/tutorial/xhtml.php • Head First HTML with CSS & XHTML [ILLUSTRATED] (Paperback) • Head First JavaScript [ILLUSTRATED] (Paperback) • http://www.criarweb.com/artigos/204.php • http://www.dimap.ufrn.br/~jair/webdesign/exerciciosjavascript.html • http://www.maujor.com/tutorial/formac-a.php • http://cursophp.thiagorodrigo.com.br • http://www.singularsantoandre.com.br/portal/epd/ar/professores/gallao • http://imasters.uol.com.br/artigo/2114/javascript/validacao_de_formulario/ FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 106 Esta página foi deixada propositadamente em branco. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 107 Apêndice A – Questionário de Avaliação do Curso FAETEC – Rio de Janeiro Professor M. França Disciplina: Aluno: __________ _______________________________________________ Data: ________ Período/Turma: ________ Observação: Solicite ao professor o endereço para preenchimento eletrônico. Atenção: Procure dar respostas completas, evitando monossílabos: “sim”, “não”, “é”, “fui” etc.. E não se esqueça de perguntar ao professor sobre o 0,5 ponto relativo ao preenchimento deste. 1) O curso: O curso Técnico em Informática da Escola Técnica Estadual República possui um bom nível? As matérias são atuais e relevantes? Ele proporciona um ambiente para que alunos interessados possam adquirir conhecimentos aplicáveis profissionalmente? 2) A disciplina: A disciplina em questão (PWEB) possui um conteúdo atual? O programa foi totalmente coberto? A carga horária semanal foi suficiente para explanação e resolução de exercícios? As aulas práticas (se for o caso) foram suficientes e em condições adequadas (máquinas)? 3) O professor: O professor possuía domínio da disciplina (conhecimento)? Ele explica bem (didático)? Ele é cordial e atencioso para com os alunos? Ele estava sempre disposto a explicar novamente algum conceito mal compreendido? Existe algum ponto positivo e/ou negativo no professor? 4) O aluno: Você freqüenta as aulas assiduamente? Você faz os exercícios/estuda em casa? Você presta atenção na explicação do professor? Você se considera um aluno agitado/disperso? Você conseguiu aprender os principais conceitos da disciplina? Você tentou tirar suas dúvidas com o professor? 5) Livre: Que sugestões, ou críticas, você gostaria de fornecer para a melhoria do processo? 6) Nota: Dê uma nota para a disciplina (PWEB), de 0 (muito insatisfeito) a 10 (muito satisfeito): ______ Muito obrigado. Desejo a todos muito sucesso profissional e boas férias; Sem radicalismos! “Teu coração é livre. Tenha coragem para segui-lo!” Brave Heart FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 108 Esta página foi deixada propositadamente em branco. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 109 Apêndice B – Referências JavaScript Objects Reference • Array object o The Array object is used to store multiple values in a single variable. Array Object Properties Property Description constructor Returns the function that created the Array object's prototype length Sets or returns the number of elements in an array prototype Allows you to add properties and methods to an object Array Object Methods Method Description concat() Joins two or more arrays, and returns a copy of the joined arrays join() Joins all elements of an array into a string pop() Removes the last element of an array, and returns that element push() Adds new elements to the end of an array, and returns the new length reverse() Reverses the order of the elements in an array shift() Removes the first element of an array, and returns that element slice() Selects a part of an array, and returns the new array sort() Sorts the elements of an array splice() Adds/Removes elements from an array toString() Converts an array to a string, and returns the result unshift() valueOf() • • Adds new elements to the beginning of an array, and returns the new length Returns the primitive value of an array Boolean object Date object o The Date object is used to work with dates and times. o Date objects are created with new Date(). o There are four ways of instantiating a date: var d = new Date(); var d = new Date(milliseconds); var d = new Date(dateString); var d = new Date(year, month, day, hours, minutes, seconds, milliseconds); Date Object Properties Property Description constructor Returns the function that created the Date object's prototype prototype Allows you to add properties and methods to an object FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 110 Date Object Methods Method Description getDate() Returns the day of the month (from 1-31) getDay() Returns the day of the week (from 0-6) getFullYear() Returns the year (four digits) getHours() Returns the hour (from 0-23) getMilliseconds() Returns the milliseconds (from 0-999) getMinutes() Returns the minutes (from 0-59) getMonth() Returns the month (from 0-11) getSeconds() Returns the seconds (from 0-59) getTime() Returns the number of milliseconds since midnight Jan 1, 1970 getTimezoneOffset() Returns the time difference between GMT and local time, in minutes getUTCDate() Returns the day of the month, according to universal time (from 1-31) getUTCDay() Returns the day of the week, according to universal time (from 0-6) getUTCFullYear() Returns the year, according to universal time (four digits) getUTCHours() Returns the hour, according to universal time (from 0-23) getUTCMilliseconds() Returns the milliseconds, according to universal time (from 0-999) getUTCMinutes() Returns the minutes, according to universal time (from 0-59) getUTCMonth() Returns the month, according to universal time (from 0-11) getUTCSeconds() Returns the seconds, according to universal time (from 0-59) getYear() Deprecated. Use the getFullYear() method instead parse() Parses a date string and returns the number of milliseconds since midnight of January 1, 1970 setDate() Sets the day of the month (from 1-31) setFullYear() Sets the year (four digits) setHours() Sets the hour (from 0-23) setMilliseconds() Sets the milliseconds (from 0-999) setMinutes() Set the minutes (from 0-59) setMonth() Sets the month (from 0-11) setSeconds() Sets the seconds (from 0-59) setTime() Sets a date and time by adding or subtracting a specified number of milliseconds to/from midnight January 1, 1970 setUTCDate() Sets the day of the month, according to universal time (from 1-31) setUTCFullYear() Sets the year, according to universal time (four digits) setUTCHours() Sets the hour, according to universal time (from 0-23) setUTCMilliseconds() Sets the milliseconds, according to universal time (from 0-999) setUTCMinutes() Set the minutes, according to universal time (from 0-59) setUTCMonth() Sets the month, according to universal time (from 0-11) FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 111 setUTCSeconds() Set the seconds, according to universal time (from 0-59) setYear() Deprecated. Use the setFullYear() method instead toDateString() Converts the date portion of a Date object into a readable string toGMTString() Deprecated. Use the toUTCString() method instead Returns the date portion of a Date object as a string, using locale toLocaleDateString() conventions toLocaleTimeString() Returns the time portion of a Date object as a string, using locale conventions toLocaleString() Converts a Date object to a string, using locale conventions toString() Converts a Date object to a string toTimeString() Converts the time portion of a Date object to a string toUTCString() Converts a Date object to a string, according to universal time Returns the number of milliseconds in a date string since midnight of UTC() January 1, 1970, according to universal time valueOf() • • • Returns the primitive value of a Date object Math object Number object String object o The String object is used to manipulate a stored piece of text. o String objects are created with new String(). var txt = new String(string); or more simply: var txt = string; String Object Properties Property Description constructor Returns the function that created the String object's prototype length Returns the length of a string prototype Allows you to add properties and methods to an object String Object Methods Method Description charAt() Returns the character at the specified index charCodeAt() Returns the Unicode of the character at the specified index concat() Joins two or more strings, and returns a copy of the joined strings fromCharCode() Converts Unicode values to characters indexOf() lastIndexOf() match() Returns the position of the first found occurrence of a specified value in a string Returns the position of the last found occurrence of a specified value in a string Searches for a match between a regular expression and a string, and FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 112 returns the matches replace() search() Searches for a match between a substring (or regular expression) and a string, and replaces the matched substring with a new substring Searches for a match between a regular expression and a string, and returns the position of the match slice() Extracts a part of a string and returns a new string split() Splits a string into an array of substrings substr() Extracts the characters from a string, beginning at a specified start position, and through the specified number of character substring() Extracts the characters from a string, between two specified indices toLowerCase() Converts a string to lowercase letters toUpperCase() Converts a string to uppercase letters valueOf() Returns the primitive value of a String object String HTML Wrapper Methods The HTML wrapper methods return the string wrapped inside the appropriate HTML tag. Method Description anchor() Creates an anchor big() Displays a string using a big font blink() Displays a blinking string bold() Displays a string in bold fixed() Displays a string using a fixed-pitch font fontcolor() Displays a string using a specified color fontsize() Displays a string using a specified size italics() Displays a string in italic link() Displays a string as a hyperlink small() Displays a string using a small font strike() Displays a string with a strikethrough sub() Displays a string as subscript text sup() Displays a string as superscript text • • RegExp object Global properties and functions Browser Objects Reference • Window object o The window object represents an open window in a browser. o If a document contain frames (<frame> or <iframe> tags), the browser creates one window object for the HTML document, and one additional window object for each frame. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 113 Note: There is no public standard that applies to the Window object, but all major browsers support it. Window Object Properties Property Description Returns a Boolean value indicating whether a window has been closed or closed not defaultStatus Sets or returns the default text in the statusbar of a window document Returns the Document object for the window (See Document object) frames Returns an array of all the frames (including iframes) in the current window history Returns the History object for the window (See History object) innerHeight Sets or returns the the inner height of a window's content area innerWidth Sets or returns the the inner width of a window's content area length Returns the number of frames (including iframes) in a window location Returns the Location object for the window (See Location object) name Sets or returns the name of a window navigator Returns the Navigator object for the window (See Navigator object) opener Returns a reference to the window that created the window outerHeight Sets or returns the outer height of a window, including toolbars/scrollbars outerWidth Sets or returns the outer width of a window, including toolbars/scrollbars pageXOffset pageYOffset Returns the pixels the current document has been scrolled (horizontally) from the upper left corner of the window Returns the pixels the current document has been scrolled (vertically) from the upper left corner of the window parent Returns the parent window of the current window screen Returns the Screen object for the window (See Screen object) screenLeft Returns the x coordinate of the window relative to the screen screenTop Returns the y coordinate of the window relative to the screen screenX Returns the x coordinate of the window relative to the screen screenY Returns the y coordinate of the window relative to the screen self Returns the current window status Sets the text in the statusbar of a window top Returns the topmost browser window Window Object Methods Method Description alert() Displays an alert box with a message and an OK button blur() Removes focus from the current window clearInterval() Clears a timer set with setInterval() FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 114 clearTimeout() Clears a timer set with setTimeout() close() Closes the current window confirm() Displays a dialog box with a message and an OK and a Cancel button createPopup() Creates a pop-up window focus() Sets focus to the current window moveBy() Moves a window relative to its current position moveTo() Moves a window to the specified position open() Opens a new browser window print() Prints the content of the current window prompt() Displays a dialog box that prompts the visitor for input resizeBy() Resizes the window by the specified pixels resizeTo() Resizes the window to the specified width and height scroll() scrollBy() Scrolls the content by the specified number of pixels scrollTo() Scrolls the content to the specified coordinates setInterval() setTimeout() • Calls a function or evaluates an expression at specified intervals (in milliseconds) Calls a function or evaluates an expression after a specified number of milliseconds Navigator object o The navigator object contains information about the browser. Note: There is no public standard that applies to the navigator object, but all major browsers support it. Navigator Object Properties Property Description appCodeName Returns the code name of the browser appName Returns the name of the browser appVersion Returns the version information of the browser cookieEnabled Determines whether cookies are enabled in the browser platform Returns for which platform the browser is compiled userAgent Returns the user-agent header sent by the browser to the server Navigator Object Methods Method Description javaEnabled() Specifies whether or not the browser has Java enabled taintEnabled() Specifies whether or not the browser has data tainting enabled • • Screen object History object FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 115 o o The history object contains the URLs visited by the user (within a browser window). The history object is part of the window object and is accessed through the window.history property. Note: There is no public standard that applies to the history object, but all major browsers support it. History Object Properties Property Description length Returns the number of URLs in the history list History Object Methods Method Description back() Loads the previous URL in the history list forward() Loads the next URL in the history list go() Loads a specific URL from the history list • Location object o The location object contains information about the current URL. o The location object is part of the window object and is accessed through the window.location property. Note: There is no public standard that applies to the location object, but all major browsers support it. Location Object Properties Property Description hash Returns the anchor portion of a URL host Returns the hostname and port of a URL hostname Returns the hostname of a URL href Returns the entire URL pathname Returns the path name of a URL port Returns the port number the server uses for a URL protocol Returns the protocol of a URL search Returns the query portion of a URL Location Object Methods Method Description assign() Loads a new document reload() Reloads the current document replace() Replaces the current document with a new one HTML DOM Objects Reference • Document object o Each HTML document loaded into a browser window becomes a Document object. o The Document object provides access to all HTML elements in a page, from within a script. Tip: The Document object is also part of the Window object, and can be accessed through the window.document property. FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 116 Document Object Collections W3C: W3C Standard. Collection Description anchors[] Returns an array of all the anchors in the document forms[] Returns an array of all the forms in the document images[] Returns an array of all the images in the document links[] Returns an array of all the links in the document 3C es es es es Document Object Properties Property Description cookie Returns all name/value pairs of cookies in the document documentMode domain 3C es Returns the mode used by the browser to render the document o Returns the domain name of the server that loaded the document es lastModified Returns the date and time the document was last modified readyState Returns the (loading) status of the document referrer o o Returns the URL of the document that loaded the current document es title Sets or returns the title of the document URL Returns the full URL of the document es es Document Object Methods Method close() getElementById() Description Closes the 3C output stream previously opened document.open() Accesses the first element with the specified id FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 117 with es es getElementsByName() Accesses all elements with a specified name getElementsByTagName() Accesses all elements with a specified tagname Opens open() output stream to collect the es output from document.write() or document.writeln() write() Writes HTML expressions or JavaScript code to a document es es Same as write(), but adds a newline character after each writeln() • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • an es statement Event object HTMLElement object Anchor object Area object Base object Body object Button object Form object Frame/IFrame object Frameset object Image object Input Button object Input Checkbox object Input File object Input Hidden object Input Password object Input Radio object Input Reset object Input Submit object Input Text object Link object Meta object Object object Option object Select object Style object Table object TableCell object TableRow object Textarea object Referência: http://www.w3schools.com/jsref/default.asp FAETEC 2012 - Notas de Aula de PWEB – Prof. M. França – Página: 118 es