), apresentando dados pessoais
Saiba Mais DARPA: DARPA é a sigla para Defense Advanced Research Projects Agency , originalmente ARPA - Advanced Research Projects Agency . A agência mudou de nome algumas vezes, porém atualmente é conhecida como DARPA. Barry M. Leiner foi director do Research Institute for Advanced Computer Science. Vinton G. Cerf é vice-presidente e evangelista chefe da Internet da Google. David D. Clark é cientista pesquisador senior no MIT Laboratory for Computer Science. Robert E. Kahn é presidente da Corporation for National Research Initiatives. Leonard Kleinrock é professor titular de Ciência da Computação na Universidade da Califórnia e Fundador da Nomadix. Daniel C. Lynch é fundador da CyberCash Inc. Jon Postel serviu como diretor da divisão de redes de computadores da Universidade do Sul da Califórnia (Instituto de Ciências da Informação). Lawrence G. Roberts é presidente da Caspian Networks. Stephen Wolff está na Cisco Systems, Inc. Prezado(a) estudante, Nesta aula você teve o primeiro contato com a internet, a base de nossa disciplina, pois se trata da programação de páginas para publicação de conteúdo e interação com o usuário na Web, o maior serviço executado sobre a internet. Até aqui a linguagem HTML foi abordada de forma generalista e supercial, apenas para que você saiba como começar a desenvolver páginas para Web, porém na próxima aula, terá acesso completo a esta linguagem de marcação de hipertexto. .
Rede e-Tec Brasil
26
Programação WEB
Aula 2. Linguagem HTML
Objetivos: • interpretar as principais linguagens de marcação; • reconhecer a utilização da linguagem de marcação de hipertextos; • identicar a distribuição dos elementos e conteúdos dentro de um documento a ser publicado na WEB; e • empregar a formatação correta de conteúdos para disponibilização na internet.
Caro(a) estudante, Na aula anterior mostramos como funciona a internet e como começar a desenvolver páginas para a internet. Esta aula traz conceitos mais avançados sobre a linguagem e principalmente como dividir uma página utilizando todas as ferramentas disponíveis para a marcação de textos. Vamos iniciar tratando dos elementos de frases. Continue atento/a e disciplinado/a em seus estudos.
2.1 Elementos de frases Existem elementos que podem ser colocados dentro de frases com o intuito de modicá-las, de acordo com a ideia de apresentação das mesmas no contexto do site. Estes são chamados de elementos de frases ou “ phrase elements”. A tabela 1 apresenta os elementos e a descrição de aplicação de cada um.
Aula 2 - Linguagem HTML
27
Rede e-Tec Brasil
Tabela 1 - Elementos de Frase do HTML Elemento
Descrição
Indica ênfase
EM
Indica ênfase forte
STRONG
Contém uma citação ou uma referência a outras fontes
CITE CODE
Designa um fragmento de um código de computador
SAMP
Designa exemplos de saída de programas, scripts, etc.
ABBR
Indica uma forma abreviada Indica um acrônimo
ACRONYM
Figura 6 - Exemplos de Phrase Elements
Fonte: autor
Você sabe o que é um texto pré-formatado? Leia o texto abaixo e observe as guras para mais compreensão.
2.2 Texto pré-formatado Um texto pré-formatado é aquele que mostra exatamente como está descrito entre as tag’s do elemento. Navegadores, quando manuseando textos pré-formatados, devem: • Deixar espaços em branco intactos • Mostrar o texto com um tipo de letra (fonte) não proporcional (fxed-pitch) • Desabilitar quebra automática de linhas • Não desabilitar processamento bidirecional O elemento HTML utilizado para exibir texto pré-formatado é
e é muito útil quando um desenvolvedor deseja fazer uma página que demonstra códigos, por exemplo. A gura 7 mostra o exemplo de utilização do elemento e a página resultante do código apresentado.
Rede e-Tec Brasil
28
Programação para WEB
Figura 7 - Exemplo da tag
Fonte: autor
Para organizar a listagem de elementos em um site pode-se utilizar listas, tanto ordenadas (com numeração) quanto não ordenadas (sem numeração). Este último caso utiliza símbolos para organizar, e todo o processo está no próximo tópico.
2.3 Listas A linguagem HTML oferece aos desenvolvedores vários mecanismos para especicar listas de informações. Todas as listas precisam conter um ou mais elementos de lista, incluindo: • Informações ordenadas • Informações não-ordenadas • Denições Para criar uma lista ordenada, o elemento deve ser utilizado, conforme exemplo na gura 8.
Figura 8 - Exemplo de lista ordenada Fonte: autor
Aula 2 - Linguagem HTML
29
Rede e-Tec Brasil
Para a criação de uma lista não-ordenada, utiliza-se o elemento . A gura 9 apresenta um exemplo do uso desta tag para criar uma lista, e também apresenta um “aninhamento” com outra lista, criando-se assim “sublistas”, ou seja, uma lista dentro da outra.
Figura 9 - Exemplo de lista não-ordenada e aninhada Fonte: autor
Nota-se que, para ambos os tipos de lista, o elemento usado para indicar cada um dos itens da lista é o .
Não apenas para elementos ordenados e não-ordenados, a ling uagem HTML oferece mecanismos para tratar de denições, formando assim uma lista de denições. Os elementos utilizados são: • DL: inicia uma lista de denições • DT: termo da lista • DD: denição do termo da lista Uma lista de denições completa pode ser observada no exemplo da gura 10.
Figura 10 - Exemplo de lista de denições Fonte: autor
Rede e-Tec Brasil
30
Programação para WEB
Modicações no tipo de elementos que são utilizados para identicar itens em listas não-ordenadas (círculos, quadrados e discos) e também em listas ordenadas (alfabético, romano e numérico) podem ser feitas utilizando estilos. Tais modicações serão abordadas no capítulo sobre CSS Outra forma interessante de organizar os elementos em um site é atr avés da utilização de tabelas.
2.4 Tabelas O modelo de tabelas da linguagem HTML permite aos desenvolvedores organizar dados (textos, textos pré-formatados, imagens, ligações, formulários, campos de formulário e até mesmo outras tabelas) em linhas e colunas de células.
CSS: Cascade Style Sheets
ou simplesmente “estilos”, é uma linguagem de folha de estilo utilizada para descrever a semântica da apresentação (o visual e formatação) de um documento escrito em uma linguagem de marcação
A gura 11 apresenta um exemplo de uma tabela contendo três colunas e duas linhas.
Figura 11 - Tabela com células mescladas
Fonte: autor
A estrutura da tabela apresentada na gura 11, que possui quatro linhas e quatro colunas, foi desenvolvida através dos seguintes comandos: • ...: elemento que delimita a tabela. Este elemento possui alguns atributos que conguram a tabela, como segue:
Aula 2 - Linguagem HTML
31
Rede e-Tec Brasil
– border: este atributo informa a largura da borda da tabela. – summary: atributo que permite ao desenvolvedor informar um texto
que representa o sumário para a tabela, ou seja, seu signicado. Alguns agentes de HTML podem utilizar tal sumário para informações adicionais aos usuários – width: largura da tabela. – cellpadding: espaço (em pixels) entre o conteúdo da célula e a borda – cellspacing: espaço entre as células
• ...: elemento que desenha um título na tabela. Através do exemplo pode-se notar que o título é escrito no topo, antes do início da tabela • ...: elemento que delimita uma linha na tabela • ...: elemento que indica uma célula • ...: tem o mesmo efeito do elemento , porém indica uma célula de título, exibindo o conteúdo centralizado e enfatizado (por padrão) O desenvolvedor sempre deverá seguir a ordem da estrutura acima para se denir uma tabela: células ( ou ) dentro de linhas (). Uma questão interessante que pode ser notada no exemplo da gura 11 é que três células de título estão mescladas, ou seja, duas ocupam duas linhas e uma ocupa duas colunas. Este comportamento é denido através de atributos: •
colspan = “x”: indica que esta célula ocupará o mesmo espaço que “x”
colunas. •
rowspan = “y”: informa à célula que a mesma deverá ocupar o espaço
de “y” linhas. O desenvolvedor pode, ainda, denir alguns agrupamentos tanto para linhas como para colunas, melhorando assim a apresentação e a manipulação perante alguns programas. As seções seguintes apresentam tais tópicos.
Rede e-Tec Brasil
32
Programação para WEB
A parte interessante da WEB é que um conteúdo pode estar ligado a outro de uma forma super fácil: através de âncoras e ligações (links). Um texto, uma imagem ou mesmo um lme pode fazer este papel de ligação, e a próxima seção indica como!
2.5 Links: âncoras e ligações A linguagem HTML foi criada principalmente para atender ao propósito de difundir a WEB que introduziu um novo conceito: documentos interativos e com hipertextos. Esta seção introduz o conceito de link (hiperlink, link WEB, ligação), que é o construtor básico de documentos hipertexto. Um link (ligação) é uma conexão de um recurso WEB para outro. Um link tem dois pontos, chamados de âncoras, e uma direção. Inicia na âncora “fonte” e aponta (termina) na âncora “destino”, a qual pode ser qualquer recurso WEB (imagens, clipes de vídeos, pedaços de som, programas, outro HTML, etc.).
O termo hipertexto foi criado por Theodore Nelson, na década de sessenta, e pode ser definido como um dos paradigmas básicos em que a teia mundial se baseia. Ele é uma espécie de texto multidimensional em que numa página trechos de texto se intercalam com referências a outras páginas.
para conhecer mais sobre hipertexto acesse: http://www. ime.usp.br/~is/abc/abc/ node9.html
O elemento é utilizado para se construir elos de ligação. O exemplo do Quadro 6 apresenta um link para a página do Google. 1 Acessar página do GOOGLE
Quadro 6 - Exemplo de âncora utilizando atag Fonte: autor
A ligação entre a âncora e a página do Google (quadro 6) é feita pelo atributo href (Hiperlink Reference). O usuário verá, na página a ser renderizada pelo navegador, a frase “Acessar página do Google”, normalmente sublinhada. Ao clicar sobre a frase, a página será redirecionada para o site do Google. Existe a possibilidade de apontar onde a página deve abrir. Este procedimento é representado pelo atributo target , que tem um exemplo no quadro 7. 1. Acessar página do GOOGLE
Quadro 7 - Utilização do atributo target em uma âncora com link
Fonte: autor
No exemplo, o atributo target fará com que o arquivo inicial.html abra em um nova janela, ou “em branco”. As possibilidades para o atributo target são:
Aula 2 - Linguagem HTML
33
Rede e-Tec Brasil
• _blank: nova janela • _self: própria janela (atual) • _parent: janela “pai”, ou seja, aquela de onde a página atual foi chamada •
nome_do_frame: quando trabalhando com frames, o usuário poderá
identicar em qual frame o recurso deverá ser aberto. O desenvolvedor pode, ainda, fazer uma referência completa a outra página, identicando qual seção deverá ser acessada. O exemplo do quadro 8 indica tal correspondência. 1.
Denição de Xícara
Quadro 8 - Ligação com outra página e seção utilizando # Fonte: autor
O exemplo indica que, ao clicar em “Denição de Xícara” o usuário será redirecionado ao site www.dicionario.com na seção “ xícara” diretamente, sendo que a página será apresentada em uma nova janela. O atributo title presente no exemplo indica um hint (dica) que aparecerá na tela quando o usuário passar o mouse sobre o link . Não apenas textos podem ser utilizados como referências visuais para ligações. Elementos como guras, divisões e outros objetos visuais podem ser utilizados para servir de referência a hyperlinks. Quão chata seria a internet se tivéssemos apenas textos para expor os conteúdos. É por isso que as imagens são tão importantes para a elaboração de qualquer conteúdo na WEB.
2.6 Inserção de imagens As características multimídia da linguagem HTML permitem aos desenvolvedores a inclusão de imagens, vídeos, applets (programas que são automaticamente baixados e executados na máquina do usuário) e outros documentos HTML nas páginas.
Rede e-Tec Brasil
34
Programação para WEB
Para inserir imagens, o desenvolvedor pode utilizar a tag bem como a tag . O quadro 9 exemplica tal tarefa. 1. 2.
3.
Ministério da Educação
4.
Quadro 9 - Utilização da tag para inserir uma gura Fonte: autor
Porém, a tag é mais utilizada para exercer tal tarefa. Um exemplo é apresentado no quadro 10. 1.
2.
alt="Ministério da Educação"
3. 4. 5. 6.
width="430" height="21" border="0" type="image/gif" />
Quadro 10 - Utilização da tag para inserir uma gura Fonte: autor
Como principais atributos, são apresentados no exemplo: • src: fonte dos dados da imagem, representado por uma URI • alt: texto alternativo. Este texto pode ser utilizado em programas de usu-
ário que imprimem em braile, reproduzem o som da frase ou mesmo substituem imagens por texto. • width e height: largura e altura da imagem (respectivamente) • border: dene a espessura da borda da imagem. A borda geralmente
pode apenas ser vista quando a imagem é utilizada em uma âncora, tendo uma referência a hipertexto (link ) • type: tipo da imagem (gif, jpeg, png, etc.)
O elemento IMG sempre será uma tag vazia, ou seja, sem conteúdo. Outra importante questão em sites é o contato com o visitante em seu site! Para capturar dados, opiniões e ensejos do usuário, utilizam-se formulários.
2.7 Formulários Um formulário HTML é uma seção de um documento que po de conter texto,
Aula 2 - Linguagem HTML
35
Rede e-Tec Brasil
marcações, elementos especiais para entrada de dad os chamados de controles e etiquetas (labels) nestes controles. Usuários geralmente “preenchem” um formulário modicando tais controles (fazendo entrada de textos, selecionando itens de menus, etc.) antes de submetê-los a um programa para processamento. O elemento form inicia a demarcação de um formulário. Entre as tags
Quadro 11 - Exemplo de um formulário em HTML
Fonte: autor
O exemplo apresenta quatro entradas de dados: a) Nome do usuário (tipo texto) b) Senha do usuário (tipo senha) c) Botão para submeter os dados e d) Botão para reiniciar os valores dos campos
Pode-se observar três atributos importantes na declaração do elemento FORM: •
name: este atributo é utilizado para identicar o formulário (frmLogin ,
no exemplo). •
method : método de submissão dos dados à ação. Os dados podem ser
enviados através de GET e POST . Métodos de envio de dados ao servidor serão discutidos na seção de programação para servidor (linguagem PHP) posteriormente. •
Rede e-Tec Brasil
36
action: ação à qual os dados serão submetidos. Normalmente neste atri-
Programação para WEB
buto se indica um arquivo de script escrito em linguagens de processamento de dados em servidores WEB, como PHP, JAVA (JSP e Servlets), Python e outras. Os controles de interação com o usuário permitem a entrada de dados. O elemento INPUT permite a entrada de dados, que é denida pelo tipo informado como parâmetro. O elemento é do tipo “vazio”, ou seja, não possui conteúdo apenas atributos que o caracterizam. Os atributos padrão para os tipos são: •
type: dene o tipo de entrada de dados
•
name: identica a entrada de dados para posterior manipulação
•
value: valor padrão
Os tipos de entradas de dados possíveis são: •
•
text : cria uma entrada do tipo texto de uma linha password : também é uma entrada do tipo texto, porém substitui os
caracteres digitados por um caractere padrão de senha (po r exemplo, asteriscos). Assim, o usuário não pode ver a senha que está sendo digitada. •
checkbox : cria uma “caixa de vericação”. Geralmente esta entrada de
dados é utilizada para uma conrmação do tipo verdadeiro/falso. •
radio: cria uma entrada do tipo “radio”. As entradas de dados do tipo
radio são geralmente utilizadas para uma escolha com exclusão mútua, ou seja, apenas um dos valores pode ser selecionado. •
image: cria um botão para submissão dos dados do formulário, decorado com uma imagem. Neste caso, o atributo src deve ser utilizado para
especicar (através de uma URI) a fonte da imagem. Quando o usuário clicar na imagem, dois parâmetros serão passados ao servidor (juntamente com os dados do formulário). Estes valores, representados por x e y , são valorados pela quantidade de pixels a partir da esquerda da imagem e do topo da imagem, respectivamente, até o valor da posição do mouse. •
reset: cria um botão do tipo “reset”, cuja função é reajustar os valores
Aula 2 - Linguagem HTML
37
Rede e-Tec Brasil
Mesmo que a senha não apareça quando o usuário estiver digitando em campos do tipo password , os dados digitados não são criptografados. Quando enviados ao servidor, podem ser “roubados” ou até mesmo vistos nas URLS , caso não sejam tratados por uma linguagem de script .
URL: Um URL (Uniform
Resource Locator), em português Localizador-Padrão de Recursos, é o endereço de um recurso (arquivos, impressoras, computadores, etc), disponível em uma rede. Uma URL tem a seguinte estrutura: protocolo:// máquina/caminho/recurso
dos controles do formulário aos valores-padrão informado s no momento da criação do formulário (atributo value). •
button: adiciona ao formulário um botão sem função padrão denida.
•
hidden: cria um campo escondido (não é desenhado visualmente).
•
fle:
insere um campo de seleção de arquivo. É criado uma entrada de texto normal com um botão de buscar arquivo à direita.
O quadro 12 apresenta um exemplo de formulário que reúne os tipos apresentados anteriormente. 1. 2. 3. 4.
Cadastro de Usuários
Quadro 12 - Exemplo da utilização de campos com a tag em um formulário Fonte: autor
A gura 12 apresenta a renderização do código do quadro anterior.
Figura 12 - Screenshot de um formulário de cadastro de usuários Fonte: autor
O elemento SELECT é utilizado para criar um menu com opções pré-ajustadas para que o usuário possa escolher uma ou várias dentre múltiplas opções apresentadas. A tag trabalha juntamente com uma (ou várias) tag , onde o desenvolvedor pode indicar quais são as possíveis escolhas.
Rede e-Tec Brasil
38
Programação para WEB
Atributos que podem ser inseridos no elemento SELECT modicam o comportamento do controle e também sua apresentação: •
multiple: quando este atributo é informado, o usuário poderá selecionar
mais do que um elemento •
size: o uso deste atributo permite que o controle seja apresentado ao
usuário com mais de uma opção visível ao mesmo tempo. O quadro 13 mostra um exemplo de codicação, e a gura 13 apresenta a renderização deste código quando interpretado em um navegador. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Escolha sua cor preferida Amarela Azul Branca Cinza Preta Verde Vermelha
Quadro 13 - Exemplo de uma entada de dados com 7 opções Fonte: autor
Figura 13 - Entrada de dados utilizando com múltipla escolha Fonte: autor
As opções também podem ser agrupadas através do uso da tag , permitindo uma melhor visualização de listas com uma grande quantidade de valores. Exemplo do uso pode ser visto no quadro 14 e sua apresentação em um navegador está exemplicada na gura 14.
Aula 2 - Linguagem HTML
39
Rede e-Tec Brasil
Quer comprar o que?
[escolha] Barbie Hot Wheels Notebook Radio Calça Camisa Cueca
Quadro 14- Agrupando e categorizando opções de seleção uti lizando a tag Fonte: autor
Figura 14 - Agrupamento de opções em uma seleção Fonte: autor
Muitas vezes um desenvolvedor precisa criar um espaço maior para entrada de dados, pois textos com mais de uma linha precisam ser inseridos. Para criar uma entrada de texto com múltiplas linhas, o elemento TEXTAREA pode ser utilizado. O quadro 15 apresenta um exemplo. 1. 2. 3. 4.
5. 6.
Quadro 15 - Utilização da tag para permitir entrada de textos de mais de uma linha Fonte: autor<br />
<br />
O código apresenta, no programa interpretador, uma área de texto com 10 linhas e 50 colunas de tamanho (denidos pelos atributos rows e cols<br />
<br />
Rede e-Tec Brasil<br />
<br />
40<br />
<br />
Programação para WEB<br />
<br />
respectivamente), inserindo o texto presente no elemento TEXTAREA como padrão. A gura 15 mostra a apresentação gráca deste exemplo.<br />
<br />
Figura 15 - Elemento TEXTAREA apresentado em navegador Fonte: autor<br />
<br />
Com formulários o usuário pode interagir diretamente com a página, pricipalmente quando esta tem cadastros e recuperação de dados de um banco de dados, assunto para a aula 4 deste caderno.<br />
<br />
Resumo O signicado de cada marcação HTML e seus atributos é praticamente a sua aplicação traduzida para o inglês. Geralmente, se um desenvolvedor conhece os elementos da língua inglesa, poderá deduzir facilmente cada um dos elementos envolvidos no desenvolvimento de um site com HTML. A linguagem foi construída com o propósito de ser fácil e didática, fazendo com que mesmo pessoas que não tenham contato diário com programação pudessem desenvolver seus sites pessoais. Também é textual para ser padrão ao mundo, transportada de uma forma leve entre os servidores globalmente distribuídos pela grande teia: a WWW. A aula tratou sobre HTML, dividindo-se nos tópicos: • A apresentação do histórico da linguagem e sua sintaxe incial mostram que HTML está difundida como um padrão mundial. • A seguir, cada um dos elementos classicados e divididos para a inclusão e modicação de conteúdo demonstrou como qualquer assunto pode ser publicado de forma organizada na WEB. • Para a tabulação de elementos nada melhor do que a utilização de tabelas, onde, através da conguração de cores e bordas, bem como da apresentação de agrupamentos de conteúdos, o usuário pode ter uma<br />
<br />
Aula 2 - Linguagem HTML<br />
<br />
41<br />
<br />
Rede e-Tec Brasil<br />
<br />
visão prossional dos resultados. • A divisão da página em frames não é mais indicada pela maioria dos WEB Designers. Porém, foi mostrada e pode ser utilizada para deixar parte do conteúdo estático, modicando apenas o necessário. • E por m, a apresentação de formulários mostrou como o desenvolvedor pode permitir a interação do usuário com a página, importante principalmente na manipulação de dados. O HTML poderá ter diversas variações, como o xHTML e, quando esta aula foi preparada já existia uma nova versão, como a 5.0. Mesmo assim ainda é a linguagem mais utilizada no mundo para o desenvolvimento de páginas WEB.<br />
<br />
Atividades de aprendizagem 1. Crie uma página, utilizando HTML, para desenvolver cada uma das ativi-<br />
<br />
dades abaixo: a) Utilizando tabelas, apresentar um cronograma de atividades de um ano,<br />
<br />
especicando as atividades a serem desenvolvidas em cada um dos meses. b) Utilizando listas ordenadas, listar os itens a serem comprados em um<br />
<br />
supermercado. c) Utilizando listas não-ordenadas e ligações, desenvolver um bookmark ou<br />
<br />
uma lista de sites favoritos, apresentando 10 sites diferentes, que devem ser abertos em uma nova janela. d) Utilizando formulários, desenvolver entradas de dados que simulem um<br />
<br />
cadastro de usuário com nome, unidade federativa do endereço atual, data de nascimento, sexo, estado civil e endereço de email. O formulário deverá conter um botão para envio e um botão para que os dados sejam retornados ao estado original.<br />
<br />
Rede e-Tec Brasil<br />
<br />
42<br />
<br />
Programação para WEB<br />
<br />
2. Desenvolva o código que renderiza a tabela abaixo:<br />
<br />
Figura 20 – Exemplo para elaboração Fonte: autor<br />
<br />
Caro(a )estudante, Nesta aula você teve a oportunidade de perceber que a linguagem HTML permite ao desenvolvedor dividir a página para que, posteriormente, seja programada de acordo com os elementos descritos no projeto de um sistema voltado para a Web. Porém, desde sua idealização por Tim Berns-Lee em 1990, o HTML não permite uma formatação precisa nas páginas. Assim, folhas de estilo em cascata foram criadas para que um programador e um Web Designer tenham mais recursos para formatar e dar acessibilidade a sites da Web. Na próxima aula o tema será a formatação de elementos HTML. Prepare-se para continuar avançando em seu processo de aprendizagem.<br />
<br />
Aula 2 - Linguagem HTML<br />
<br />
43<br />
<br />
Rede e-Tec Brasil<br />
<br />
Aula 3. Formatação de Elementos HTML Utilizando CSS<br />
<br />
Objetivos: • elaborar a formatação de páginas WEB, escritas em HTML, de forma a personicar seus elementos; e • identicar os conceitos para uma formatação consciente da página.<br />
<br />
Prezado(a) estudante, Você já recebeu informações importantes para desempenhar a função para a qual está se qualicando. No entanto é preciso prosseguir, pois o conteúdo é extenso e agora vamos tratar da formatação de elementos HTML, utilizando o sistema CSS. Apresentaremos os fundamentos da linguagem e os elementos de formatação. Preparado para saber do que se trata o CSS? Como já apontado na aula anterior, o CSS é um mecanismo de folhas de estilos simples que permite ao desenvolvedor e aos usuários nais, anexar estilos e formatações em documentos HTML. Tais formatações podem ser, por exemplo, tipos, cores e espaçamento entre letras de uma fonte. A linguagem CSS pode ser lida e escrita por humanos (não é código binário, é texto).<br />
<br />
Um bom exemplo pode ser visto no site www.csszengarden. com. O site apresenta a “beleza do css”, pois, através da escolha do usuário final, o conteúdo é visto de maneiras totalmente diferentes, às vezes parecendo um site totalmente distinto.<br />
<br />
Uma das características fundamentais do CSS é que trabalha com folhas de estilo em cascata: desenvolvedores podem anexar uma folha de estilos preferida, enquanto que o usuário nal pode ter uma folha de estilo que melhor se ajuste às suas deciências humanas (visuais, auditivas, dentre outras) ou tecnológicas. As próximas seções apresentam a linguagem CSS, sua forma de utilização e os principais elementos que podem ser utilizados para a f ormatação de uma página WEB com instrumentos mais poderosos.<br />
<br />
Aula 3 - Formatação de Elementos HTML Utilizando CSS<br />
<br />
45<br />
<br />
Rede e-Tec Brasil<br />
<br />
3.1 Fundamentos da linguagem A linguagem CSS versão 3.0: • mantém compatibilidade com porções do CSS2 que estão amplamente aceitas e desenvolvidas A sintaxe completa e as novidades sobre a linguagem CSS você pode encontrar no endereço http://www.w3.org/ Style/CSS/, que é o site oficial de estilos em cascata.<br />
<br />
• incorpora todas as erratas publicadas do CSS2 • remove as características do CSS2 que não estão no CSS3, fazendo com que a mudança seja menos brusca • adiciona novos valores de propriedades que se mostraram necessários durante o uso da CSS2 pela comunidade de desenvolvedores. CSS pode formatar tanto HTML quanto XML. Para modicar a forma como o elemento é apresentado, a linguagem segue a sintaxe apresentada no quadro 16. 1.<br />
<br />
elemento.classicação {propriedade: valor;}<br />
<br />
Quadro 16 - Sintaxe da linguagem CSS Fonte: autor<br />
<br />
O elemento a ser formatado pode ser uma tag padrão, identicada ou classicada. A sintaxe do quadro anterior apresenta os seguintes elementos: • elemento: normalmente uma tag • classicação: o desenvolvedor pode categorizar um elemento ou mesmo criar uma categoria para ser utilizada em qualquer elemento • propriedade: o que será formatado (cores, negrito, itálico, tipo de fonte, bordas, etc.) • valor: como a propriedade será valorada. Pode-se aplicar folhas de estilo em cascata em três formas diferentes: • Local: o estilo afetará apenas o elemento onde está inserido. O quadro 17 apresenta, na primeira linha, um parágrafo com o tipo de letra Verda-<br />
<br />
Rede e-Tec Brasil<br />
<br />
46<br />
<br />
Programação para WEB<br />
<br />
na com tamanho 14 pixels e, na segunda linha, um parágrafo com o tipo de letra Times com 20 pixels de tamanho. • Geral: colocado no início de uma página, atuará em todos os elementos da página. O Quadro 18 apresenta um exemplo de sua utilização. • Global: através de um elemento LINK, o desenvolvedor pode indicar um arquivo contendo os códigos de formatação CSS. Assim, um site inteiro pode se basear em uma única folha de estilos, presente em um arquivo. O quadro 19 mostra uma página HTML que utiliza este recurso e o quadro 20 exemplica um típico arquivo de estilos. Este exemplo classica dois tipos de parágrafo (‘verd’ e ‘time’) e os usa na página para demonstração. 1. 2.<br />
<br />
<p style=”font-face: Verdana; font-size: 14px” >Texto do parágrafo</p> <p style=”font-face: Times; font-size: 20px” >Texto do parágrafo</p><br />
<br />
Quadro 17 - Uso de estilos diretamente em tags tags (local) (local) Fonte: autor 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.<br />
<br />
<html> <head> <title>Teste de CSS</title> <style type=”text/css”> p {font-face: Verdana} </style> </head> <body> <p>Fonte com Verdana</p> <p>Esta linha também é com a fonte Verdana</p> <p style=”font-face: Times”>Este é com Times</p> </body> </html><br />
<br />
Quadro 18 - Uso de estilos em apenas uma pági na (geral) e local Fonte: autor 1. 2. 3. /> 4. 5. 6. 7. 8. 9.<br />
<br />
<head> <title>Teste de CSS</title> <link rel="stylesheet" type="text/css" media="all" href="liv.css" </head> <body> <p class=”verd”>Linha em Verdana</p> <p class=”time”>Linha em Times</p> </body> </html><br />
<br />
Quadro 19 - Código HTML utilizando folhas de estilo no modo global tag <link>) t( ag <link>) Fonte: autor 1. 2. 3. 4. 5. 6. 7.<br />
<br />
/* arquivo da folha de estilos */ p.verd { font-family: Verdana; } p.time { font-family: Times; }<br />
<br />
Quadro 20 - Arquivo contendo a folha de estilos “liv.css” Fonte: autor<br />
<br />
Aula 3 - Formatação de Elementos HTML Utilizando CSS<br />
<br />
47<br />
<br />
Rede e-Tec Brasil<br />
<br />
Como a disciplina trata de programação para a WEB, utilizando HTML e PHP, apenas a formatação do HTML será abordada. Assim, algumas convenções serão utilizadas para descrever os comandos utilizados para tal formatação.<br />
<br />
3.2 Valores O quadro 16 apresenta a sintaxe da linguagem CSS, e mostra que sempre deve ser utilizado o par “propriedade: valor”. Os valores que podem ser expressos nas propriedades dependem de cada uma, porém algumas convenções são utilizadas para os tipos. Alguns tipos de valores são do tipo inteiro (denotado como <inteiro>) e outros são do tipo real (denotado como <número>). Números reais e inteiros são especicados apenas pela notação decimal. Um inteiro consiste em um ou mais dígitos de “0” a “9”. Um real pode ser um inteiro, zero ou mais dígitos seguidos por um ponto (.) seguido por um ou mais dígitos. Números inteiros e reais podem ser precedidos por “+” ou “-“ indicando o sinal. Quando tratamos com valores de tamanhos para par a propriedades, existem dois tipos de unidades: relativas e absolutas. Uma unidade relativa de tamanho especica um tamanho relativo à outra propriedade de tamanho. As unidades relativas são: • em: o 'font-size' (tamanho da fonte) da fonte relevante (em questão); • ex: o 'x-height' (x-altura) da fonte relevante • px: pixels, relativa ao dispositivo de visualização • %: porcentagem, relativa ao tamanho padrão do elemento atual. O Erro! Fonte de referência não encontrada . exemplica unidades relatirelativas, onde a identação do texto (deslocamento da primeira linha) será de 36 pixels (linha 3), pois como o tamanho da fonte font e relevante é 12 pixels (linha 2), este será multiplicado por três (03). 1. 2. 3. 4. 5.<br />
<br />
body { font-size: 12px; text-indent: 3em; /* i.e., 36px */ } p { font-size: 120% } /* 120% of 'font-size' *<br />
<br />
Quadro 21 - Utilização de unidades relativas Fonte: autor<br />
<br />
Rede e-Tec Brasil<br />
<br />
48<br />
<br />
Programação para WEB<br />
<br />
O formato de porcentagem é um real imediatamente seguido por um ‘%’. Valores em porcentagem sempre são relativos a outros valores. O valor pode ser de outra propriedade do mesmo elemento, a propriedad e de um elemento antepassado (pai) ou de um contexto. Unidades de tamanhos absolutos (absolute) apenas são úteis quando as propropriedades físicas do meio de saída são conhecidas (um monitor, por exemplo). As unidades absolutas são: • in: polegadas (inches). Uma (01) polegada é igual a 2,54 centímetros • cm: centímetros • mm: milímetros • pt: pontos points 2 .1 é igual a 1/72ma unida (points). O ponto usado pelo CSS 2.1 de de uma polegada. • pc: picas. Uma (01) pica é igual a 12 pontos O uso das unidades absolutas está exemplicado no quadro 22. Nos casos em que o tamanho utilizado não é suportado os programas aproximam os valores o máximo possível. 1. 2. 3. 4. 5.<br />
<br />
h1 h2 h3 h4 h4<br />
<br />
{ { { { {<br />
<br />
margin: 0.5in } line-height: 3cm } word-spacing: 4mm } font-size: 12pt } font-size: 1pc }<br />
<br />
/* /* /* /* /*<br />
<br />
inches */ centimeters */ millimeters */ points */ picas */<br />
<br />
Quadro 22 - Utilização de unidades absolutas Fonte: autor<br />
<br />
Uma cor pode ser uma palavra chave ou um valor numérico dentro da especicação RGB. A lista de palavras-chave de cores é: aqua, black, blue, fuchsia, gray, green, lime, maroon, navy, olive, orange, purple, red, silver, teal, white, e yellow . Estas 17 (dezessete) cores possuem os valores em he-<br />
<br />
xadecimal e sua coloração, respectivamente, ilustrados na gura 16.<br />
<br />
Aula 3 - Formatação de Elementos HTML Utilizando CSS<br />
<br />
49<br />
<br />
Rede e-Tec Brasil<br />
<br />
Figura 16- Lista de cores com palavras-chave e seus valores Fonte: autor<br />
<br />
O modelo de cores RGB (Red Green Blue) é usado em especicações numéricas de cores. O quadro 23 apresenta, nas linhas 1 a 4, quatro formas diferentes de especicar a cor vermelha; as linhas 5 e 6 demon stram a utilização de nomes de cores ao invés de códigos. 1. 2. 3. 4. 5. 6.<br />
<br />
em { em { em { em { body h1 {<br />
<br />
color: #f00 } /* #rgb */ color: #ff0000 } /* #rrggbb */ color: rgb(255,0,0) } color: rgb(100%, 0%, 0%) } {color: black; background: white } color: maroon }<br />
<br />
Quadro 23 - Uso de cores em CSS Fonte: autor<br />
<br />
O comando, portanto, utilizado para se formatar a cor de um elemento é “color ”. Para a conguração de cores de fundo deve-se utilizar o comando “back ground-color ”. Essa conguração de cores será vista nos próximos tópicos . O quadro 16 apresenta, na sintaxe CSS, que o elemento e uma possível classicação são utilizados para informar qual item da página deve ser formatado, ou seja, são regras de correspondência padrão que determinam como os estilos irão ser aplicados aos elementos na árvore do documento. Esses padrões, chamados seletores (selectors), podem variar de simples nomes de elementos para ricos padrões contextuais. Se todas as condições no padrão<br />
<br />
Rede e-Tec Brasil<br />
<br />
50<br />
<br />
Programação para WEB<br />
<br />
informado são verdadeiras para um determinado elemento, o seleto r corresponde ao elemento e aplica a formatação. A tabela 2 apresenta um resumo dos seletores, sua sintaxe e semântica. Tabela 2 - Seletores em CSS, sua sintaxe e semântica Padrão<br />
<br />
Signicado<br />
<br />
*<br />
<br />
Corresponde a qualquer ( any ) elemento<br />
<br />
E<br />
<br />
Corresponde ao elemento E (p.ex., um elemento do tipo E)<br />
<br />
EF<br />
<br />
Corresponde ao elemento F, descendente de E<br />
<br />
E,F<br />
<br />
Corresponde a formatar o elemento E e o elemento F com as mesmas regras Corresponde ao elemento E se E é a f onte da âncora de um hiperlink que ainda não foi visi tado<br />
<br />
E:link E:visited<br />
<br />
Âncora já visitada<br />
<br />
E:active<br />
<br />
Âncora ativa<br />
<br />
E:hover<br />
<br />
Formato da âncora quando o usuário passar o mouse sobre<br />
<br />
E:focus<br />
<br />
Âncora quando a mesma tiver o foco<br />
<br />
E.warning #E<br />
<br />
Em HTML, corresponde ao elemento E classificado como "warning" Seleciona um elemento que tem o atributo id (identificacor) de nome E<br />
<br />
Para usar os seletores dentro de um site, o desenvolvedor pode formatar todos os elementos determinados ou ainda classicar os elementos; também é possível modicar os seletores por descendência, pelos seus identicadores ID e através do atributo class. O quadro 24 apresenta um exemplo. 1. 2. 3. 4. 5. 6. 7.<br />
<br />
// Seletores descendentes h1 { color: red } em { color: red } h1 em { color: blue } div p *[href] { color: green } … <H1>This headline is <EM>very</EM> important</H1><br />
<br />
Quadro 24 - Utilização de seletores simples e aninhados Fonte: autor<br />
<br />
A linha 4 do código coloca em azul todos os elemento s EM que estão dentro de elementos H1, ou seja, são descendentes. Todos os outros EM do documento serão escritos em vermelho. A linha 5 do código faz correspondência a todos os elementos que possuem o atributo HREF ajustado (qualquer valor) que estiverem dentro de um elemento P, que subsequentemente estiverem dentro de um elemento DIV. CSS permite que o desenvolvedor escolha quais elementos sejam classicados e modicados, pois caso não se queira modicar todos os elementos presentes na página, ou mesmo fazer modicações cujos elementos não sigam as ordens de descendência, prescedência e atributos, a classicação<br />
<br />
Aula 3 - Formatação de Elementos HTML Utilizando CSS<br />
<br />
51<br />
<br />
Rede e-Tec Brasil<br />
<br />
de elementos pode ser utilizada. O quadro 25 apresenta um exemplo de classicação. 1. 2. 3. 4.<br />
<br />
5. 6. 7. 8.<br />
<br />
*.pastoral { color: red } /* todos elementos com class~=pastoral */ // Ou apenas .pastoral { color: red } /* todos elementos com class~=pastoral */ // para classicar determinada tag<br />
<br />
H1.pastoral { color: green } /* Elemento H1 com class~=pastoral */ ... <H1>Aqui será vermelho</H1> <H1 class="pastoral">Aqui será bem verde</H1><br />
<br />
Quadro 25 - Classicação de elementos<br />
<br />
Fonte: autor<br />
<br />
O código da linha 1 e a linha 3 tem a mesma função, que é colorir as fontes das tags classicadas como pastoral em vermelho. A linha 5 fará com que apenas os elementos H1 classicados como “pastoral” serão formatados com a cor verde. Outra forma de classicação é através do atributo id que permite ao desenvolvedor atribuir um identicador a uma instância de um elemento na árvore do documento. Um seletor CSS por id contém um caracter “#” imediatamente seguido pelo valor do id, conforme o exemplo presente no quadro 26. 1.<br />
<br />
h1#chapter1 { text-align: center }<br />
<br />
Quadro 26 - Selecionar um elemento através de seu id Fonte: autor<br />
<br />
O exemplo, na linha 01, corresponde a elementos H1 que tenham o atributo id valorado como "chapter1".<br />
<br />
3.3 Elementos de formatação Esta seção apresenta os elementos que são utilizados para formatar os elementos em HTML. Os modicadores de fontes (letras) são: • font-family • font-size • font-weight<br />
<br />
Rede e-Tec Brasil<br />
<br />
52<br />
<br />
Programação para WEB<br />
<br />
• font-style • text-transform • text-decoration O font-family é o comando CSS utilizado para indicar qual a fonte que uma tag ou documento irá mostrar. Em uma aplicação geral de CSS a uma página, a linha de comando terá a sintaxe do exemplo do quadro 27. 1. P { font-family: Trebuchet MS, Arial, Helvetica }<br />
<br />
Quadro 27 - Modicação de fonte de um parágrafo Fonte: autor<br />
<br />
No exemplo tudo o que estiver entre as tag <P> e </P> no do cumento HTML será visualizado em “Trebuchet MS”. A razão de denir mais de uma fonte deve-se ao fato de que nem todos os computadores possuem as mesmas fontes instaladas. No caso, se o computador não possuir a fonte “Trebuchet MS” instalada, automaticamente passará para a segunda opção e mostrará o texto em Arial. Deve-se observar que o nome da fonte especicada na linha de comando do CSS deve ser exatamente igual ao nome da mesma no diretório "fontes" do computador. A fonte "Courier", por exemplo, leva este nome na platafo rma dos computadores Macintosh, mas se chama "Courier New" no Windows. O comando font-size é utilizado para denir o tamanho pelo qual as fontes serão apresentadas na tela. Há três formas básicas para denição de tamanho: 1. tamanhos (pixel, pica, pontos, etc.); 2. palavras-chave: o desenvolvedor pode utilizar keywords para denir tama-<br />
<br />
nhos. As palavras-chave são (apresentadas da menor para maior): i. xx-small ii. x-small iii. small<br />
<br />
Aula 3 - Formatação de Elementos HTML Utilizando CSS<br />
<br />
53<br />
<br />
Rede e-Tec Brasil<br />
<br />
iv. medium v. large vi. x-large vii. xx-large 3. porcentagem<br />
<br />
A grande vantagem da utilização do comando em CSS contra o HTML tradicional é a quantidade de valores, pois através do atributo size do elemento FONT, somente 7 tamanhos são permitidos. O quadro 28 mostra um exemplo utilizando os três modelos. 1. 2. 3.<br />
<br />
P {font-size: 12px;} P.titulo {font-size: xx-large;} P.legenda {font-size: 80%;}<br />
<br />
Quadro 28 - Modicação do tamanho da fonte Fonte: autor<br />
<br />
O font-weight é o comando CSS que controla a propriedade bold (negrito) de um elemento. Um exemplo de sua utilização pode ser visto no quadro 29.<br />
<br />
1.<br />
<br />
H1 { font-weight: bold }<br />
<br />
Quadro 29 - Colocando uma fonte em negrit o Fonte: autor<br />
<br />
No exemplo todas as palavras da página que estiverem contidas nos elementos H1 serão mostradas em negrito. Os valores possíveis para o comando são: • normal: desativa o negrito (útil para elementos que originalmente já deixam as letras em negrito) • numérico de 100 a 900 : 400 é o valor normal de uma fonte sem negrito, sendo que 100 é o valor mínimo e 900 o valor máximo. • bold: ativa o negrito O font-style é o comando CSS que controla a propriedade italic de um elemento, ou seja, se as letras contidas no elemento em questão são impressas<br />
<br />
Rede e-Tec Brasil<br />
<br />
54<br />
<br />
Programação para WEB<br />
<br />
em itálico. O Quadro 30 apresenta o exemplo. 1.<br />
<br />
H1 { font-style: italic }<br />
<br />
Quadro 30 - Ajustando o itálico em uma fonte Fonte: autor<br />
<br />
No exemplo o navegador irá procurar uma versão itálico da fonte para apresentar o texto compreendido no elemento H1. Os valores possíveis para o comando são: • normal: desativa o itálico (útil para elementos que originalmente já deixam as letras em itálico) • italic: ativa o itálico • oblique: em alguns casos de fontes a versão em itálico é chamada de "oblique" (tem o mesmo efeito de itálico) Para controlar o sublinhado das palavras que estão contidas nos elementos HTML, o comando text-decoration é utilizado. Os valores possíveis para o comando são: •<br />
<br />
underline: sublinha as palavras compreendidas dentro do elemento.<br />
<br />
•<br />
<br />
overline: coloca uma linha em cima da palavra.<br />
<br />
•<br />
<br />
line-trought : coloca uma linha sobre o texto.<br />
<br />
•<br />
<br />
blink : sua palavra pisca (não é mais utilizado por questões de visualiza-<br />
<br />
ção). •<br />
<br />
none: tira o sublinhado de uma palavra (inclusive de um link )<br />
<br />
Uma questão interessante no comando text-decoration é que utilizando o atributo none pode-se eliminar o sublinhado de um link . O quadro 31 mostra exemplos da utilização de sublinhados.<br />
<br />
Aula 3 - Formatação de Elementos HTML Utilizando CSS<br />
<br />
55<br />
<br />
Rede e-Tec Brasil<br />
<br />
1. <html> 2. <head> 3. <title>Sublinhados</title> 4. <style type="text/css"> 5. h3 {text-decoration: underline;} 6. .risque {text-decoration: line-through;} 7. .sobre {text-decoration: overline;} 8. a {text-decoration: none;color:blue} 9. </style> 10. </head> 11. <body> 12. <h3>Neologismos</h3> 13. Neologismos interessantes. Devemos escrever <span class="risque">mouse</span> ou <span class="sobre">rato</span> em um texto? Clique <a href="http://www.google.com" rel="nofollow">aqui</a> e conra mais.<br />
<br />
14. 15.<br />
<br />
</body> </html><br />
<br />
Quadro 31 - Utilização de sublinhados em textos Fonte: autor<br />
<br />
A página que é apresentada com o código é mostrada na gura 17. A palavra Neologismo do título de nível 3 está sublinhada, enquanto que a palavra mouse esta “riscada” e a palavra rato contém uma barra sobre. A palavra aqui (em azul) é um link , porém não há sublinhado como o padrão HTML.<br />
<br />
Figura 17 - Screenshot do navegador com o código do quadro 29 Fonte: autor<br />
<br />
A aplicação de formatação em parágrafos, com CSS, tem os seguintes comandos: • line-height • text-align • text-indent • margin-left, margin-top, margin-right, margin-bottom • padding-left, padding-top, padding-right, padding-bottom<br />
<br />
Rede e-Tec Brasil<br />
<br />
56<br />
<br />
Programação para WEB<br />
<br />
• border-color, border-width, border-style O line-height é o comando que controla o espaçamento entre as linhas de um texto (também conhecido pelo termo leading). O espaço é denido pela distância entre a base das linhas de um texto. O quadro 32 apresenta o exemplo de altura de linha. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.<br />
<br />
<html> <head> <title>Altura de linha</title> <style type="text/css"> P.oito {line-height: 8pt;} P.dois {font-size: 12pt;line-height: 2;} P.sessenta {font-size: 10pt;line-height:60%;} </style> </head> <body><br />
<br />
11.<br />
<br />
<p class="oito">"Acima da verdade estão os deuses.<br />
<br />
15.<br />
<br />
<p class="dois">"Acima da verdade estão os deuses.<br />
<br />
19.<br />
<br />
<p class="sessenta">"Acima da verdade estão os deuses.<br />
<br />
12. 13. 14. 16. 17. 18. 20. 21. 22. 23. 24.<br />
<br />
A nossa ciência é uma falhada cópia Da certeza com que eles Sabem que há o Universo"</p> A nossa ciência é uma falhada cópia Da certeza com que eles Sabem que há o Universo"</p><br />
<br />
A nossa ciência é uma falhada cópia Da certeza com que eles Sabem que há o Universo"</p> </body> </html><br />
<br />
Quadro 32 - Formas de ajustar a altur a de linhas em CSS Fonte: autor<br />
<br />
O exemplo apresenta três formatações de altura de linha, nas linhas 5, 6 e 7 do código: • Linha 5: informa que a classicação “oito” de um parágrafo é de oito (8) pontos; • Linha 6: estipula que a classicação “dois” tenha a linha igual a duas (2) vezes o tamanho da fonte. Estipulando o valor em número, a aplicação cliente utilizará o font-size para denir o tamanho, multiplicando o valor do tamanho da fonte pelo número para denir o espaço entre as linhas (No caso, 24 pontos) • Linha 7: congura a altura da linha igual a sessenta por cento (60%) do tamanho da fonte. Estipulando-se o valor por porcentagem, a aplicação cliente utilizará o valor do font-size como referência (no caso 6 pontos) A gura 18 apresenta o código do quadro 31 renderizado em um navegador.<br />
<br />
Aula 3 - Formatação de Elementos HTML Utilizando CSS<br />
<br />
57<br />
<br />
Rede e-Tec Brasil<br />
<br />
Figura 18 - Screenshot do navegador com o código da altura de linhas Fonte: autor<br />
<br />
O text-align é o comando utilizado para o alinhamento de parágrafos em CSS. Só funciona em elementos que denam parágrafos, como P, Hn, BLOCKQUOTE e UL. Os valores que podem ser aplicados são: • left (esquerda) • right (direita) • center (centro) e • justify (justicado). O quadro 33 apresenta um exemplo de seu uso.<br />
<br />
25.<br />
<br />
P.texto { text-align:justify }<br />
<br />
26.<br />
<br />
P.numero { text-align: right}<br />
<br />
Quadro 33 - Alinhamento de textos utilizando CSS<br />
<br />
Fonte: autor<br />
<br />
Sabe-se que na linguagem HTML só é possível acrescentar margens a um texto com a utilização de tabelas. Estilos CSS, por sua vez, permitem que se tenha total controle das margens de um bloco de texto. A gura 07 apresenta, gracamente, as relações entre os elementos que denem espaços em uma página, que são:<br />
<br />
Rede e-Tec Brasil<br />
<br />
58<br />
<br />
Programação para WEB<br />
<br />
• Margem: distância das fronteiras da página até a borda do elemento • Borda : um quadro que pode circundar o elemento. •<br />
<br />
Padding (enchimento) : distância da borda até o conteúdo do elemen-<br />
<br />
to.<br />
<br />
Figura 07 – Esquema que dene a relação entre bordas,margens e paddings (enchimentos) Fonte: autor<br />
<br />
Podem-se denir margens, bordas ou paddings de qualquer elemento do HTML que dena um parágrafo, como P, BLOCKQUOTE, UL, Hn, etc. Para controle da margem dispõe-se dos seguintes comandos: •<br />
<br />
margin-left (margem esquerda)<br />
<br />
•<br />
<br />
margin-right (margem direita)<br />
<br />
•<br />
<br />
margin-top (margem superior)<br />
<br />
•<br />
<br />
margin-bottom (margem inferior)<br />
<br />
Utilizando esses comandos pode-se denir a margem de cada lado do elemento separadamente. As unidades de medida que podem ser utilizadas são as mesmas já discutidas anteriormente (valores, tamanhos e porcentagem). O quadro 34 apresenta um exemplo de uso de margens em um parágrafo que contém apenas uma palavra. A Figura 19 mostra o resultado da renderização deste código em um navegador WEB.<br />
<br />
Aula 3 - Formatação de Elementos HTML Utilizando CSS<br />
<br />
59<br />
<br />
Rede e-Tec Brasil<br />
<br />
Quadro 34 - Uso de margens em parágrafos<br />
<br />
Fonte: autor<br />
<br />
Figura 19 - Dois parágrafos sobrepostos através do controle de margens Fonte: autor<br />
<br />
Observa-se que o segundo parágrafo praticamente sobrepõe o primeiro, caso este devido ao valor negativo informado para o comando margin-top, no segundo parágrafo. Valores negativos para a margem não são a maneira mais indicada para sobrepor elementos. A distância entre o conteúdo e a borda do elemento pode ser congurada através dos comandos: • padding-left (esquerda) • padding-right (direita) • padding-top (superior) • padding-bottom (inferior) Não é possível, entretanto, congurar valores negativos para o padding. A aplicação do padding é semelhante à margem, porém este será mais útil com a utilização da borda. Uma borda pode ser congurada através dos seguintes comandos: •<br />
<br />
border-width: dene a largura da borda. Pode ser valorado como tama-<br />
<br />
nhos, porém três palavras-chave podem denir padrões de largura: – thin (borda na)<br />
<br />
Rede e-Tec Brasil<br />
<br />
60<br />
<br />
Programação para WEB<br />
<br />
– medium (borda média) – thick (borda larga).<br />
<br />
•<br />
<br />
border-color: dene a cor da borda do elemento.<br />
<br />
•<br />
<br />
border-style: dene que espécie de borda será mostrada. Os tipos pos-<br />
<br />
síveis são: – – – – – – – –<br />
<br />
solid: sólida (borda normal) double: sólida dupla dotted: pontilhada dashed: tracejada groove: efeito de moldura ridge: efeito de moldura inset: efeito de botão outset: efeito de botão “apertado”<br />
<br />
O código do quadro 35 mostra o exemplo de dois elementos que utilizam borda e enchimento. Em seguida, a gura 20 apresenta a renderização deste código no navegador. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.<br />
<br />
<head> <title>Relogios Eletronicos</title> <style type="text/css"> div#digitali { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 24px; color: #0000FF; padding: 20px; border: thick groove #0000FF; width: 150px; text-align: center; } div#digitalii { font-family: Geneva, sans-serif; font-size: 24px; color: #FF6600; padding: 0px; width: 150px; border: 4px dashed #FF9933; text-align: center; } </style> </head> <body> <div id="digitali">19:45:22</d iv> <br /> <div id="digitalii">07:45:22</ div> </body> </html><br />
<br />
Quadro 35 - Uso de borda e enchimento em camadas com a tag <div> Fonte: autor<br />
<br />
Aula 3 - Formatação de Elementos HTML Utilizando CSS<br />
<br />
61<br />
<br />
Rede e-Tec Brasil<br />
<br />
Figura 20 - Simulação de relógios na página utilizando bordas Fonte: autor<br />
<br />
As linhas 10 e 20 do código do quadro 35 mostram a conguração da borda dos elementos, porém não divide os comandos em largura (border-width ), tipo (border-style ) e cor (border-color ), pois o comando “border ” aceita que se coloque (na ordem apresentada no exemplo) tais congurações em apenas um comando. Bordas são utilizadas, portanto, para formatar os elementos de acordo com ideias de WEB Design. Basta testar e vericar qual é a borda mais harmoniosa para o seu site.<br />
<br />
3.4 Imagens e conguração de fundo O CSS não possui um comando especíco para se adicionar uma imagem no site como possui o HTML em seu elemento IMG. Estilos admitem que, para que uma imagem seja inserida no site através de seus comandos, esta deve ser o preenchimento de fundo de um elemento. Assim, o estudo da conguração de fundo de elementos mostrará como inserir uma imagem utilizando CSS. Os comandos utilizados para a conguração de fundo de elementos são:<br />
<br />
Rede e-Tec Brasil<br />
<br />
•<br />
<br />
background-color: modica a cor de fundo<br />
<br />
•<br />
<br />
background-image: insere uma imagem como fundo<br />
<br />
•<br />
<br />
background-repeat: congura a repetição da imagem<br />
<br />
•<br />
<br />
background-attachment: congura o scroll da imagem<br />
<br />
•<br />
<br />
background-position: ajusta a posição da imagem<br />
<br />
62<br />
<br />
Programação para WEB<br />
<br />
•<br />
<br />
background: utilizado para inserir mais características em um único co-<br />
<br />
mando. Para modicar a cor de fundo, basta valorar o comando com o código ou nome da cor desejada. Para a inserção de uma imagem, deve-se informar o caminho (através de uma URL) onde se encontra tal imagem, formatando também seu posicionamento, repetição e scroll . Observe o exemplo do quadro 36. 1. 2. 3. 4. 5.<br />
<br />
<html> <head> <title>Fundo</title> <style type="text/css"> #imagem {<br />
<br />
6.<br />
<br />
7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.<br />
<br />
background-attachment: xed;<br />
<br />
} body {<br />
<br />
} .barra {<br />
<br />
background-image: url(imagens/paisagem2.jpg) ; background-repeat: no-repeat; background-position: 0px 0px; height: 190px; width: 331px; background-image: url(imagens/fundo.gif); background-repeat: repeat-x; background-position: 0px 15px; background-color: #006699; color: #FFFFFF; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;<br />
<br />
} </style> </head> <body> <br /><br /><br /> <div class="barra">Paisagem</ div> <div id="imagem"></div> <div class="barra">Foto tirada em 22/12</div> </body> </html><br />
<br />
Quadro 36 - Conguração de fundo dos elementos: imagens e cores Fonte: autor<br />
<br />
É importante ressaltar alguns pontos do exemplo do quadro 36: • Linhas 6 a 11: este código formata o fundo da DIV “imagem” (ID setado como imagem), indicando que a gura de fundo será o arquivo “paisagem2.jpg”, que cará xo (caso houvesse rolagem), não há repetição e seu posicionamento inicia nas coordenadas zero (esquerda) e zero (topo). Também há a formatação do tamanho da camada, que neste caso, ca igual ao tamanho da imagem. • Linhas 14 a16: formata o fundo da página como um todo, fazendo com que a imagem seja repetida apenas no eixo x (horizontal) e iniciando seu posicionamento a zero pixel da esquerda e a quinze (15) pixels do topo.<br />
<br />
Aula 3 - Formatação de Elementos HTML Utilizando CSS<br />
<br />
63<br />
<br />
Rede e-Tec Brasil<br />
<br />
• Linhas 19 a 22: não é utilizada nenhuma imagem para fundo, apenas uma cor (no caso, azul escuro). Existe ainda a formatação da fonte, ajustando a sua família, cor e tamanho. A gura 21 demonstra a visualização das camadas apresentadas em um navegador.<br />
<br />
Figura 21 - Utilização de CSS para inserção de imagens e cores de fundo em camadas Fonte: autor<br />
<br />
Agora ca a cargo do desenvolvedor validar a melhor maneira de se utilizar a linguagem CSS juntamente com HTML dentro de sua página WEB.<br />
<br />
Resumo Nesta aula você pôde observar que a formatação de páginas somente com HTML é possível, porém a utilização de folhas de estilo em cascata trouxe novas perspectivas para desenvolvedores WEB, pois como têm um maior número de atributos para formatação possibilita a criação de páginas mais bonitas e acessíveis. É importante vericar que, na maioria dos casos, é muito mais interessante que se utilize a formatação conhecida como global, pois através de um arquivo externo, o desenvolvedor poderá especicar todas as regras uma única vez, identicando cada uma das tags HTML através de seus atributos ID. Caso seja necessário modicar qualquer atributo do site, basta alterar uma única vez neste arquivo e a alteração será propagada por todas as páginas pertencentes ao site, que utilizem este arquivo para formatação.<br />
<br />
Rede e-Tec Brasil<br />
<br />
64<br />
<br />
Programação para WEB<br />
<br />
Atividades de aprendizagem 1. Crie um arquivo CSS que formate o boletim da unidade 2 de acordo com<br />
<br />
a imagem abaixo:<br />
<br />
a) Família da letra: “Verdana, Geneva, sans-serif;” b) Cor do topo: #003366; c) Cor do título: #6699CC; 2. Crie uma página HTML contendo seu currículo e modique os elementos<br />
<br />
de acordo com os itens abaixo a) Crie um cabeçalho em tabela onde uma das células represente uma foto sua no currículo (utilize a formatação de fundo, não a tag <img>) b) Título de seção: i. Fonte: Arial, negrito, tamanho 14px, branca ii. Parágrafo: alinhado a esquerda, 12 pt antes e 18 pt depois, fundo<br />
<br />
cinza escuro c) Título de sub-seções: i. Fonte: Arial, negrito, tamanho 12px, cinza médio ii. Parágrafo: alinhado a esquerda, 6 pt antes e 9 pt depois<br />
<br />
Aula 3 - Formatação de Elementos HTML Utilizando CSS<br />
<br />
65<br />
<br />
Rede e-Tec Brasil<br />
<br />
d) Links i. Fonte: Arial, negrito, tamanho 12px, laranja, sem sublinhado ii. Parágrafo: depende de onde está inserida (herança) e) Texto normal i. Fonte: Arial, normal, tamanho 11px, cinza escuro ii. Parágrafo: justicado, 3pt antes e depois f) Demais formatações devem estar sempre em CSS 3. Desenvolva uma página que tenha um menu que acesse 5 páginas diferentes e as apresente em um iframe. Formate a página utilizando CSS para<br />
<br />
modicar a maior quantidade de propriedades possíveis, respeitando uma boa visualização. A gura abaixo pode ser tomada como referência para o exercício, porém a sua criatividade deve ser utilizada.<br />
<br />
Prezado(a) estudante, Finalizamos esta aula na qual você pôde constatar que o comércio eletrônico tem um grande diferencial para o comércio que não se baseia em meios eletrônicos: nenhum site está mais perto do que outro, ou seja, estratégias de lojas que podem cobrar mais pois estão no bairro e não no centro não funcionam! Um bom design faz com que seu site seja mais visto, pois as pessoas se sentem confortáveis. Tecnologias como o CSS fazem com que diagramadores e Web designers consigam chegar cada vez mais perto de estruturas como imagens, e, além de bonito, o site pode adquirir características de acessibilidade, tão importantes para pessoas cegas ou surdas, por<br />
<br />
Rede e-Tec Brasil<br />
<br />
66<br />
<br />
Programação para WEB<br />
<br />
exemplo. A próxima aula inicia a abordagem da programação, fazendo com que você comece a experimentar a manipulação de dados através de linguagens de script . Não deixe de realizar todas as atividades de aprendizagem, porém só consulte o guia de soluções após completar cada uma delas.<br />
<br />
Aula 3 - Formatação de Elementos HTML Utilizando CSS<br />
<br />
67<br />
<br />
Rede e-Tec Brasil<br />
<br />
Aula 4. Programação WEB “lado cliente” Objetivos: • distinguir a forma de programação voltada a navegadores WEB; • identicar a sintaxe da programação imperativa com Javascript ; e • reconhecer a necessidade da utilização da linguagem de programação voltada ao lado cliente, durante a programação de páginas dinâmicas na WEB<br />
<br />
Prezado(a) estudante, Vamos iniciar a 4ª aula na qual trataremos sobre programação Web, lado cliente. O conteúdo é tão importante como os demais já abordados e certamente irá contribuir para sua formação. Volte sempre ao texto para uma leitura mais atenta se você cou com alguma dúvida. Não deixe de acessar os sites sugeridos pois eles complementam todas as informações passadas durante a aula. Vamos agora estudar programação Web “lado cliente”. Atualmente, a WEB é um ambiente propício para a disponibilização de q ualquer tipo de conteúdo. Além de páginas informativas, o usuário pode hoje fazer o uso de diversas aplicações e serviços que antigamente só estavam disponíveis em sistemas desktop: controles de estoque, cadastro de clientes, planilhas, editores de texto, ferramentas de autoria, entre outros. Existem dois “tipos” de programação para WEB: cliente e servidor. A programação cliente trabalha com os dados de forma local, ou seja, não precisa haver nenhum tipo de comunicação com um servidor WEB. Já a programação para servidor precisa de um servidor WEB para ser executada, ou seja, os navegadores WEB não conseguem interpretá-la diretamente como é feito<br />
<br />
Aula 4 - Programação WEB “lado cliente”<br />
<br />
69<br />
<br />
Rede e-Tec Brasil<br />
<br />
com a programação cliente. A linguagem cliente a ser abordada é Javascript . Vamos apresentar nesta aula alguns conceitos da linguagem e sua utilização para vericação de dados em formulários, para que estes possam ser manipulados em conjunto com a linguagem PHP . Exemplos de utilização DHTML não serão cobertos, bem como funções avançadas da linguagem. Esta aula tratará com dados sobre a programação do lado cliente: a linguagem Javascript . Vamos iniciar mostrando os fundamentos dessa linguagem.<br />
<br />
4.1 Fundamentos da linguagem A linguagem Javascript transforma páginas estáticas em centros de atratividade e interação com o usuário, levando-o a uma inteligente experiência pelo site. A linguagem geralmente é utilizada quando se quer: • que a página WEB responda ou reaja diretamente com o usuário, traçando uma interação com elementos de formulário (entradas de dados, áreas de texto, botões, botões do tipo rádio e checkboxes, listas de seleção, etc.) e ligações de hipertexto • pré-processar os dados no cliente antes de sua submissão a um servidor • modicar conteúdos e estilos em elementos presentes nas páginas A programação Javascript segue o padrão da linguagem de programação C. É interessante lembrar que Javascript não é Java, ou seja, são linguagens realmente diferentes, com algumas semelhanças na programação devido à origem comum. A programação é feita diretamente no HTML, entre elementos script . O quadro 37 traz o primeiro exemplo de código Javascript . <HTML> <HEAD> <TITLE>Meu primeiro Script</TITLE> </HEAD> <BODY> <H1>Testando o Javscript</H1> <HR> <SCRIPT LANGUAGE="Javascript"> alert("Ola: sou seu navegador!"); </SCRIPT> </BODY> </HTML><br />
<br />
Quadro 37 – Primeiro exemplo em Javascript Fonte: autor<br />
<br />
Rede e-Tec Brasil<br />
<br />
70<br />
<br />
Programação para WEB<br />
<br />
A novidade do código está entre as linhas 8 e 12: • A linha 8 informa ao navegador que, a partir daquele momento, a programação Javascript foi iniciada. • As linhas 9 e 11 colocam o código em comentário. Isso é útil para navegadores que não aceitam Javascript , porém isso é bem antigo. • A linha 10 contém o código. Esta linha, ao ser executada, criará uma janela com a mensagem ‘ Ola: sou seu navegador!’ e um botão de ‘OK’. Esta linha apresenta o comando alert (mensagem) que cria realmente uma caixa de diálogo de alerta. O resultado da execução desta página é mostrado através do screenshot da gura 22.<br />
<br />
Figura 22 - Primeiro script com Javascript: função alert() Fonte: autor<br />
<br />
Algumas considerações quanto à sintaxe da linguagem são importantes: • Uso do ponto-e-vírgula (;): em toda nalização de linha de comandos, menos no início e m de blocos de comando com chaves ({ }); • Case-sensitive: maiúsculas e minúsculas são diferenciadas; • O código fonte Javascript é incluído no próprio arquivo HTML; • É uma linguagem interpretada (também chamada de linguagem de script): isso signica que os comandos Javascript são executados um a um diretamente por um interpretador, sem que haja necessidade de compilação;<br />
<br />
Aula 4 - Programação WEB “lado cliente”<br />
<br />
71<br />
<br />
Rede e-Tec Brasil<br />
<br />
• Programação dirigida por eventos: os scripts geralmente são executados através do disparo de eventos. Cliques de botão, o arrastar de mouse, colocar foco em elementos, entrar e sair de campos, preenchimento, escolha são exemplos de eventos provocados pela interação do usuário com a página. Existem três formas de executar os comandos do Javascript: in line, a partir de funções e através de eventos. A execução em linha (in line) é a forma do exemplo da gura 22. Não existe denição de um bloco nomeado de comandos, apenas o código entre as tags script . Este tipo de execução é feita quando se entra na página, por exemplo, pois a partir do momento que o navegador passa a ler os comandos da página ele os executa. Para que se possa controlar a chamada de blocos de comando, e, mesmo para passar alguns parâmetros ao código, funções são criadas. O quadro 38 traz um exemplo de função. function subtrair(n1,n2) { var resultado; if (n1 > n2) { resultado = n-+n2; } else { resultado = n2-n1; } return resultado; }<br />
<br />
Quadro 38 - Exemplo de utilização de funções em Javascript Fonte: autor<br />
<br />
A função é denida através da palavra chave function , seguida pelo nome da função e seus parâmetros. A passagem de parâmetros é opcional, porém como segue o padrão de criação de blocos da linguagem C, o uso de parênteses é obrigatório. Os comandos que compõem a função deverão sempre ser cercados com chaves ({ ... }). Toda função tem um resultado, mesmo que seja nulo. O resultado da função é ajustado com o comando return, portanto a variável que for indicada logo após o comando será utilizada como valor de retorno da função. A função do exemplo executa uma subtração com ordem denida pelos valores dos parâmetros, e retorna o resultado desta subtração. A terceira forma de execução é através de eventos, que são respostas a<br />
<br />
Rede e-Tec Brasil<br />
<br />
72<br />
<br />
Programação para WEB<br />
<br />
ações de usuário ou temporais dentro de uma página WEB. Na maioria das vezes os comandos Javascript , sejam in-line ou em funções são executados a partir do disparo de eventos. Os eventos são listados na tabela 3. Tabela 3 – Eventos em páginas WEB<br />
<br />
Manipulador de Evento<br />
<br />
Breve descrição de seu uso<br />
<br />
onabort<br />
<br />
Este evento se produz quando um usuário detém a carga de uma imagem, seja porque detém a carga da página ou porque realiza uma ação que a detém, como por exemplo, sair da página.<br />
<br />
onblur<br />
<br />
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.<br />
<br />
onchange<br />
<br />
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<br />
<br />
onclick<br />
<br />
Produz-se quando se clica o botão do mouse sobre um elemento da página, geralmente um botão ou um link.<br />
<br />
ondragdrop<br />
<br />
Produz-se quando um usuário solta algo que havia arrastado sobre a página WEB.<br />
<br />
onerror<br />
<br />
Produz-se quando não se pode carregar um documento ou uma imagem e esta fica quebrada.<br />
<br />
onfocus<br />
<br />
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.<br />
<br />
onkeydown<br />
<br />
Este evento é produzido no instante que um usuário pressiona uma tecla, independentemente que a solt e ou não. É produzido no momento do clique.<br />
<br />
onkeypress<br />
<br />
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.<br />
<br />
onkeyup<br />
<br />
Produz-se quando o usuário deixa de apertar uma tecla. É produzido no momento que se libera a tecla.<br />
<br />
onload<br />
<br />
Este evento se desata quando a página, ou em Javascript 1.1 as imagens, terminaram de se carregar.<br />
<br />
onmousedown<br />
<br />
Produz-se o evento onmousedown quando o usuário clica sobre um elemento da página. onmousedown se produz no momento de clic ar o botão, soltando ou não.<br />
<br />
onmousemove<br />
<br />
Produz-se quando o mouse se move pela página.<br />
<br />
onmouseout<br />
<br />
Desata-se um evento onmuoseout quando a seta do mouse sai da área ocupada por um elemento da página.<br />
<br />
onmouseover<br />
<br />
Este evento desata-se quando a seta do mouse entra na área ocupada por um elemento da página.<br />
<br />
Aula 4 - Programação WEB “lado cliente”<br />
<br />
73<br />
<br />
Rede e-Tec Brasil<br />
<br />
onmouseup<br />
<br />
Este evento se produz no momento que o usuário solta o botão do mouse, que previamente havia clicado.<br />
<br />
onmove<br />
<br />
Evento que se executa quando se move a janela do navegador, ou um frame.<br />
<br />
onresize<br />
<br />
Evento que se produz quando se redimensiona a janela do navegador, ou o frame, no caso de que a página os tenha.<br />
<br />
onreset<br />
<br />
Este evento está associado aos formulários e se desata no momento que um usuário clica no botão de reset de um formulário.<br />
<br />
onselect<br />
<br />
Executa-se quando um usuário realiza uma seleção de um elemento de um formulário.<br />
<br />
onsubmit<br />
<br />
Ocorre quando o visitante aperta sobre o botão de enviar o formulário. Executa-se antes do envio propriamente dito.<br />
<br />
onunload<br />
<br />
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.<br />
<br />
Fonte: Adaptado de ALVAREZ (2005)<br />
<br />
O quadro 39 apresenta um exemplo que cobre os três tipos de execução em Javascript . <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Funções JS</title> <script language="Javascript"> var titulo = '<h3>Exemplo de funções</h3>'; function subtrair(n1,n2) { var resultado; if (n1 > n2) { resultado = n1-n2; } else { resultado = n2-n1; } return resultado; } </script> </head> <body> <script language="Javascript"> document.write(titulo); </script> Número 01: <input type="text" size="5" id="num1" /> Número 02: <input type="text" size="5" id="num2" /> <br /> <input type="button" onClick="alert(subtrair(num1.value,num2.value));" value="subtrair" /> </body> </html><br />
<br />
Quadro 39 - Exemplo de utilização de códigos Javascript ativados em linha, por função e por eventos Fonte: autor<br />
<br />
Características importantes podem ser destacadas no código do quadro anterior: • A linha 7 apresenta a execução in line, pois não está dentro de nenhuma<br />
<br />
Rede e-Tec Brasil<br />
<br />
74<br />
<br />
Programação para WEB<br />
<br />
função e será executada assim que a página for carregada. O mesmo acontece com o código da linha 22. • Das linhas 9 a 17 a função de subtração foi inserida, para que possa ser utilizada nesta página HTML. • A linha 27 faz a chamada da função de subtração, indicando que será disparada assim que a entrada de dados do tipo bo tão receber um clique do mouse. O atributo onClick dene o controle deste evento, sendo que seu conteúdo é justamente a chamada de uma função que exibirá numa caixa de diálogo o resultado da função de subtração. Note-se que os parâmetros passados para a função são os valores das duas entradas de dados anteriores, num1 e num2, referenciados pelo atributo value. Deixando de lado qualquer validade da função (pois deveria se ter no mínimo uma vericação se os dois parâmetros são realmente números), o código representa as formas de invocação de códigos Javascript . A gura 23 apresenta um screenshot do resultado.<br />
<br />
Figura 23 - Exemplo de execução da fu nção de subtração Fonte: autor<br />
<br />
Como o comando utilizado para criar a janela foi o alert , o símbolo que aparece ao lado da mensagem na é um símbolo de alerta. Observe os diferentes tipos de dados que podem ser utilizados de acordo com a necessidade.<br />
<br />
4.2 Tipos de dados O Javascript traz diversas funções para manipulação de dados diretamente. Aglumas destas funções serão apresentadas para que se possa trabalhar com a validação destes dados dentro de formulários WEB.<br />
<br />
Aula 4 - Programação WEB “lado cliente”<br />
<br />
75<br />
<br />
Rede e-Tec Brasil<br />
<br />
A tabela 4 traz um resumo dos tipos de dados que podem ser utilizados em Javascript . Tabela 4 - Tipos de dados em Javascript Tipo de Dados<br />
<br />
Semântica<br />
<br />
Numérico<br />
<br />
Todos os números do tipo numérico, independentemente da precisão que tenham ou se são números reais ou inteiros. Os números inteiros são números que não têm vírgula (p.ex 224). Os números reais são números fracionários (p.ex. 123.45), que também se pode escrever em notação científica, por exemplo, 2.482e12<br />
<br />
Lógico<br />
<br />
Tipo de dado utilizado para armazenar-se valores lógicos, ou seja, verdadeiro ou falso. Os valores possíveis são true para verdadeiro e false para falso<br />
<br />
Cadeia de caracteres<br />
<br />
É utilizada para se armazenar caracteres alfa-numéricos, geralmente conhecidos como strings. A linguagem Javascript só tem um tipo de dado para salvar texto que comporta qualquer número de caracteres. Os textos se escrevem entre aspas, duplas ou s imples.<br />
<br />
Para um acesso completo a todos os elementos de uma página HTML, a linguagem Javascript apresenta os pseudo-objetos.<br />
<br />
4.3 Pseudo-objetos Além dos tipos básicos, o Javascript possui alguns pseudo-objetos que tratam com tipos de dados especiais, e podem ser manipulados de diferentes maneiras. Esta seção apresenta alguns destes pseudo-objetos e procedimentos para manipulá-los. Tabela 5 - Pseudo-objeto Array Objeto Propriedades Métodos<br />
<br />
Rede e-Tec Brasil<br />
<br />
76<br />
<br />
Array: constrói e manipula uma cadeia de caracteres<br />
<br />
length<br />
<br />
Ajusta ou retorna o número de elementos de um Array<br />
<br />
concat()<br />
<br />
Une duas ou mais matrizes e retorna uma cópia das matrizes unidas<br />
<br />
join()<br />
<br />
Junta todos os elementos de uma matriz em uma cadeia de caracteres<br />
<br />
pop()<br />
<br />
Remove o último elemento de uma matriz e o retorna<br />
<br />
push()<br />
<br />
Adiciona um elemento à matriz (última posição) e retorna o novo tamanho da matriz<br />
<br />
reverse()<br />
<br />
Inverte os elementos em uma matriz<br />
<br />
shift()<br />
<br />
Remove o primeiro elemento de uma matriz e o retorna<br />
<br />
slice()<br />
<br />
Seleciona uma parte de uma matriz, retornando esta parte<br />
<br />
sort()<br />
<br />
Organiza os elementos de uma matriz<br />
<br />
Programação para WEB<br />
<br />
splice()<br />
<br />
Adiciona ou remove elementos de um matriz<br />
<br />
toString()<br />
<br />
Converte uma matriz em uma string e devolve seu conteúdo<br />
<br />
unshift()<br />
<br />
Adiciona novos elementos ao início da matriz e devolve o novo tamanho<br />
<br />
valueOf()<br />
<br />
Retorna o valor primitivo de uma matriz.<br />
<br />
O quadro 40 apresenta um exemplo de utilização de matrizes. var frutas = ["Banana", "Laranja", "Maçã", "Manga"];<br />
<br />
document.write("Retiro "+frutas.pop() + "<br />"); document.write(frutas + "<br />");<br />
<br />
document.write("Novo tamanho: "+frutas.push("Limão") + ",<br />
<br />
inserindo<br />"); document.write(frutas + "<br />"); frutas.length = 6; document.write("Com o tamanho igual a 6: "+frutas);<br />
<br />
Quadro 40 - Exemplo de utilização de Array Fonte: autor<br />
<br />
O screenshot da execução do exemplo é mostrado na gura 24.<br />
<br />
Figura 24 - Exemplo de execução de funções em matrizes (Array) Fonte: autor<br />
<br />
1. código executa, na linha: 2. A criação da matriz com 4 elementos 3. Retira o último elemento e escreve na tela 4. Escreve a matriz resultante 5. Insere mais uma fruta e mostra o novo tamanho 6. Mostra a matriz completa, com mais um elemento 7. Muda o tamanho da matriz para 6 elementos 8. A matriz é impressa, sendo que os dois últimos elementos estão em branco<br />
<br />
Aula 4 - Programação WEB “lado cliente”<br />
<br />
77<br />
<br />
Rede e-Tec Brasil<br />
<br />
Tabela 6 – Pseudo-objeto Date Objeto<br />
<br />
Date: objeto que representa data e hora<br />
<br />
getDate()<br />
<br />
Retorna o dia do mês da data informada.<br />
<br />
getDay()<br />
<br />
Retorna um número que representa o dia da semana<br />
<br />
getFullYear() getHours() getMilliseconds()<br />
<br />
Métodos<br />
<br />
Retorna o ano com quatro dígitos Retorna a hora (0-23) Retorna os milissegundos (0-999)<br />
<br />
getMinutes()<br />
<br />
Retorna os minutos (0-59)<br />
<br />
getMonth()<br />
<br />
Retorna o mês (0-11)<br />
<br />
getSeconds()<br />
<br />
Retorna os segundos (0-59)<br />
<br />
getTime()<br />
<br />
Retorna o número de milissegundos desde a meia- noite do dia 01/01/1970<br />
<br />
toDateString()<br />
<br />
Converte a porção de data informada em uma cadeia de caracteres visível<br />
<br />
toLocaleDateString()<br />
<br />
Retorna um texto com a data formatada no modo local. Ex.: segunda-feira, 22 de Fevereiro de 2010<br />
<br />
O código do quadro 41 - Uso do Date apresenta uma implementação que verica se uma data é válida ou não. <script language="Javascript"> var dia = "31"; var mes = "02"; var ano = "2010"; var aData = new Date(ano,mes-1,dia); if ((aData.getDate() == dia) && (aData.getMonth() == mes-1) && (aData.getFullYear() == ano)) { alert("Data válida"); } else { alert("Data inválida"); } </script><br />
<br />
Quadro 41 - Uso do Date Fonte: autor<br />
<br />
O código: • Cria três variáveis, dia, mês e ano para a representação de cada elemento na data, valorando-os durante a criação. • Na linha 5 é criada uma instância da classe Date(), passando como parâmetros as variáveis criadas anteriormente. Note que a ordem a ser p assada é primeiro o ano, depois o mês e por último o dia. Outro fator importante é que deve-se sempre tirar uma unidade do mês, já que a função considera que Janeiro é o mês zero (0).<br />
<br />
Rede e-Tec Brasil<br />
<br />
78<br />
<br />
Programação para WEB<br />
<br />
• A linha 6 faz a comparação dos dados da variável criada com os dados informados anteriormente. Caso a data informada (como parâmetro) durante a criação do objeto estiver errada, os dados resultantes serão diferentes. No exemplo, a data informada foi “31/02/2010”, ou seja, a data está inválida. O objeto criado estará valorado em “03/03/2010”. Sendo assim, o dia e o mês estarão diferentes dos originais, fazendo com que a função exiba uma caixa de diálogo “Data Inválida”. Este código não está inserido como uma função, portanto não pode ser reutilizado. Para transformá-lo, basta inserir a sintaxe para função e colocar as variáveis que representam cada um dos elementos da dada como parâmetros, por exemplo. Tabela 7- Pseudo-objeto String Objeto<br />
<br />
String: manipula e cria uma cadeia de caracteres.<br />
<br />
Length<br />
<br />
Ajusta ou retorna o tamanho de uma cadeia de caracteres<br />
<br />
charAt()<br />
<br />
Retorna o caractere na posição especificada como parâmetro<br />
<br />
concat()<br />
<br />
Une duas ou mais strings, e retorna uma cópia das strings unidas<br />
<br />
indexOf()<br />
<br />
Retorna a posição da primeira ocorrência encontrada do caractere informado, dentro da string<br />
<br />
lastIndexOf()<br />
<br />
Retorna o último índice do caractere encontrado dentro de uma string<br />
<br />
slice()<br />
<br />
Extrai uma parte de uma string e retorna uma nova string<br />
<br />
split()<br />
<br />
Divide uma string em uma matriz de substrings<br />
<br />
substr()<br />
<br />
Extrai os caracteres de uma string, inciando em uma posição específica, indo até a quantidade de caracteres especificada<br />
<br />
substring()<br />
<br />
Extrai os caracteres de uma string, entre dois índices especificados<br />
<br />
toLowerCase()<br />
<br />
Converte uma string para minúsculas<br />
<br />
toUpperCase()<br />
<br />
Converte uma string para maiúsculas<br />
<br />
Propriedades<br />
<br />
Métodos<br />
<br />
valueOf()<br />
<br />
Retorna o valor primitivo de uma string<br />
<br />
O código do quadro 42 programa a manipulação de algumas cadeias de caracteres.<br />
<br />
Aula 4 - Programação WEB “lado cliente”<br />
<br />
79<br />
<br />
Rede e-Tec Brasil<br />
<br />
var str1 = "Universidade Tecnológica Federal "; var str2 = "do Paraná"; document.write(str1.concat(str2) + "<br />"); var str3 = str2.substring(3); document.write(str3 + "<br />"); var data = "22/05/1978"; var dtCompleta = data.split("/"); document.write(dtCompleta[0]+" do mês "+dtCompleta[1]+" de "+dtCompleta[2]);<br />
<br />
Quadro 42 - Exemplo de uso do pseudo-objeto String Fonte: autor<br />
<br />
O código executa os seguintes passos e manipulação em strings: • nas linhas 1 e 2 gera duas variáveis e as valora • na linha 3 escreve, no documento, a primeira e a segunda cadeias de caracteres concatenadas • na linha 5 escreve, no documento, uma terceira string criada a partir do quarto caractere (caractere número 3) da segunda string • a linha 6 cria uma string com uma data, sendo que esta é transformada em uma matriz com três posições na linha 7, através do comando split . Note que o parâmetro do comando é a barra (“/”), justamente o elemento que separa o dia, o mês e o ano na data • a linha 8, por m, imprime a data por extenso, mostrando primeiramente o dia, que está na primeira posição da matriz criada, o mês da segunda posição e o ano extraído da terceira posição da matriz (posições 0, 1 e 2 respectivamente) A gura 25 apresenta o resultado da execução, em um navegador, do código de manipulação de strings apresentado.<br />
<br />
Figura 25 - Exemplo de execução de f unções com cadeias de caracteres (Strings) Fonte: autor<br />
<br />
Rede e-Tec Brasil<br />
<br />
80<br />
<br />
Programação para WEB<br />
<br />
Outros tipos de dados de manipulação existem no Javascript , porém não serão abordados nesta aula. Fique atento agora para a descrição dos operadores.<br />
<br />
4.4 Operadores Esta seção descreve os operadores que podem ser utilizados na linguagem Javascript . As tabelas a seguir descrevem os operadores. Tabela 06 – Operadores Aritméticos Operador<br />
<br />
Descrição<br />
<br />
Exemplo<br />
<br />
Resultado<br />
<br />
+<br />
<br />
Adição<br />
<br />
x=y+2<br />
<br />
x=7<br />
<br />
-<br />
<br />
Subtração<br />
<br />
x=y-2<br />
<br />
x=3<br />
<br />
*<br />
<br />
Multiplicação<br />
<br />
x=y*2<br />
<br />
x=10<br />
<br />
/<br />
<br />
Divisão<br />
<br />
x=y/2<br />
<br />
x=2.5<br />
<br />
%<br />
<br />
Módulo (resto da divisão)<br />
<br />
x=y%2<br />
<br />
x=1<br />
<br />
++<br />
<br />
Incremento<br />
<br />
x=++y<br />
<br />
x=6<br />
<br />
-Decremento Adaptado de http://www.w3schools.com<br />
<br />
x=--y<br />
<br />
x=4<br />
<br />
O operador de adição (“+”) em cadeias de caracteres (strings) tem a função de concatenação. É importante lembrar tal característica, pois algumas exeperiências podem resultar em horas de trabalho perdido, caso o usuário esteja tentando somar algumas strings. Observe o código do quadro abaixo. x = “5” + 5;<br />
<br />
O resultdo de “x” depois da execução do código será o valor 55, e não 10 como seria esperado em uma soma. Tabela 07 – Operadores de Atribuição Operador<br />
<br />
Descrição<br />
<br />
Exemplo<br />
<br />
Resultado<br />
<br />
=<br />
<br />
x=y<br />
<br />
+=<br />
<br />
x+=y<br />
<br />
x=x+y<br />
<br />
x=15<br />
<br />
-=<br />
<br />
x-=y<br />
<br />
x=x-y<br />
<br />
x=5<br />
<br />
*=<br />
<br />
x*=y<br />
<br />
x=x*y<br />
<br />
x=50<br />
<br />
/=<br />
<br />
x/=y<br />
<br />
x=x/y<br />
<br />
x=2<br />
<br />
%=<br />
<br />
x%=y<br />
<br />
x=x%y<br />
<br />
x=0<br />
<br />
x=5<br />
<br />
Fonte: Adaptado de W3SCHOOLS (2011)<br />
<br />
Aula 4 - Programação WEB “lado cliente”<br />
<br />
81<br />
<br />
Rede e-Tec Brasil<br />
<br />
Tabela 08 – Operadores de Comparação Operador<br />
<br />
Descrição<br />
<br />
Exemplo<br />
<br />
==<br />
<br />
é igual a<br />
<br />
x==8 é falso<br />
<br />
===<br />
<br />
É exatamente igual a (valor e tipo)<br />
<br />
x===5 é verdadeiro x==="5" é falso<br />
<br />
!=<br />
<br />
É diferente<br />
<br />
x!=8 é verdadeiro<br />
<br />
><br />
<br />
É maior a<br />
<br />
x>8 é falso<br />
<br />
<<br />
<br />
É menor a<br />
<br />
x<8 é verdadeiro<br />
<br />
>=<br />
<br />
É maior ou igual a<br />
<br />
x>=8 é falso<br />
<br />
<=<br />
<br />
É menos ou igual a<br />
<br />
x<=8 é verdadeiro<br />
<br />
Fonte: Adaptado de W3SCHOOLS (2011)<br />
<br />
Lembre-se sempre da diferença entre os operadores de at ribuição e de comparação. Geralmente, se estiver acostumado com uma linguagem de programação como o pascal, você usará apenas um sinal de igual (‘=’) para fazer uma comparação, resultando sempre numa execução errônea de seu código. Tabela 09 – Operadores lógicos Operador<br />
<br />
Descrição<br />
<br />
Exemplo<br />
<br />
&&<br />
<br />
And<br />
<br />
(x < 10 && y > 1) é verdadeiro<br />
<br />
||<br />
<br />
Or<br />
<br />
(x==5 || y==5) é falso<br />
<br />
! Fonte: Adaptado de W3SCHOOLS (2011)<br />
<br />
Not<br />
<br />
!(x==y) é verdadeiro<br />
<br />
Para que você possa realizar uma manipulação dos dados em Javascript , vários comandos são disponibilizados. Se você já está familiarizado com a linguagem C, vai conhecer e saber utilizar todos!<br />
<br />
4.5 Comandos Os sub-tópicos abaixo apresentam alguns comandos da linguagem Javascript .<br />
<br />
4.5.1 Comandos condicionais Quando se escreve algum código, frequentemente o desenvolvedor quer executar diferentes ações dependendo de decisões tomadas a partir de de-<br />
<br />
Rede e-Tec Brasil<br />
<br />
82<br />
<br />
Programação para WEB<br />
<br />
terminadas condições quanto aos valores de variáveis. Comandos condicionais tratam disso na codicação. A tabela 10 apresenta os comandos condicionais e alguns exemplos. Comando Sintaxe<br />
<br />
if – Executa determinado código baseado em condições. 1. 2.<br />
<br />
if (condição1){ código executado caso a condição1 seja verdadeira<br />
<br />
3.<br />
<br />
} else if (condition2) {<br />
<br />
4.<br />
<br />
código executado caso a condição2 seja verdadeira<br />
<br />
5. } else { 6. código executado caso nenhum das anteriores seja verdadeira 7. } Exemplo<br />
<br />
1.<br />
<br />
<script type="text/Javascript"><br />
<br />
2.<br />
<br />
//Escreve uma saudação de bom dia quando<br />
<br />
3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.<br />
<br />
//a hora for menor do que 10 var d = new Date(); var time = d.getHours(); if (time < 12) { document.write("<b>Bom dia!</b>"); } else if (time < 18) { document.write("<b>Boa tarde!</b>"); } else { document.write("<b>Boa noite!</b>"); } </script><br />
<br />
Explicação No caso do código, se a hora for menor do que 12, será escrito ‘Bom dia!’ na página; se a hora for maior<br />
<br />
do que 12 e menor que 18, será escrito ‘Boa tarde!’ na página e, em último caso, o código imprime ‘Boa noite!’ na página.<br />
<br />
Comando<br />
<br />
Sintaxe<br />
<br />
switch – Escolhe um, dentre vários blocos, para execução de código<br />
<br />
1. switch (escolha){ 2. case 1: 3. executa o bloco 1 4. break; 5. case 2: 6. executa o bloco 2 7. break; 8. default: 9. executa caso nenhum dos anteriores seja executado 10. }<br />
<br />
Aula 4 - Programação WEB “lado cliente”<br />
<br />
83<br />
<br />
Rede e-Tec Brasil<br />
<br />
Exemplo<br />
<br />
1. <script type="text/Javascript"> 2. //A página exibirá as aulas do dia baseado no dia da semana. 3. //Domingo=0, Segunda=1, Terça=2, etc... 4. 5. var data = new Date(); 6. diaSemana = data.getDay(); 7. switch (diaSemana){ 8. case 1: 9. document.write("Segunda- feira: Inglês e Matemática"); 10. break; 11. case 2: 12. document.write("Terça-feir a: História e Matemática"); 13. break; 14. case 3: 15. document.write("Quarta- feira: Geograa e Educação Física");<br />
<br />
16. break; 17. case 4: 18. document.write("Quinta-fei ra: Língua Portuguesa e Química"); 19. break; 20. case 5: 21. document.write("Sexta-feir a: Física e Química"); 22. break; 23. default: 24. document.write("Sem aulas... aproveite e veja se tem tarefa!"); 25. } 26. </script><br />
<br />
Explicação<br />
<br />
Rede e-Tec Brasil<br />
<br />
84<br />
<br />
A partir da data do sistema, adquirida na linha 5, o código extrai o dia da semana e inicia a comparação. De segunda (1) a sexta (5), blocos de código foram criados para imprimir as matérias que o aluno terá neste dia da semana. Caso seja sábado ou domingo, nenhum dos casos (case) será executado, e o código do bloco padrão ( default ) será executado. Observe a presença do comando break em cada um dos blocos, indicando que, depois da execução do comando pretendido em cada caso, haverá a saída do c omando condicional.<br />
<br />
Programação para WEB<br />
<br />
4.5.2 Comandos para criar laços de repetição Dois comandos são utilizados para que se crie laços de repetição em códigos Javascript . A tabela 11 apresenta estes dois comandos. Tabela 11 – Laços de Repetição em Javascript for – comando utilizado para criar laços de repetição ( loop) quando se sabe a<br />
<br />
Comando<br />
<br />
quantidade de repetições necessárias 1. for (var = valorInicial;var <= valorFinal;var = var+incremento){ 2. código a ser executado 3. }<br />
<br />
Sintaxe<br />
<br />
1. 2. 3. 4. 5. 6. 7.<br />
<br />
Exemplo<br />
<br />
O código das linhas 4 e 5 executará 6 vezes, de 0 a 5 inclusive. A cada execução o código escreverá na página a frase ‘O número é x’, sendo que x muda a cada execução (0 a 5).<br />
<br />
Explicação<br />
<br />
Comando<br />
<br />
Sintaxe<br />
<br />
Exemplo<br />
<br />
Explicação<br />
<br />
<script type="text/Javascript"> var i=0; for (i = 0;i <= 5;i++){ document.write("O número é " + i); document.write("<br />"); } </script><br />
<br />
<br />
<br />
while – O comando while executa o código contido no bloco enquanto a condi-<br />
<br />
ção informada for verdadeira. 1. 2. 3.<br />
<br />
while (var <= valorFinal){ código a ser executado }<br />
<br />
1. 2. 3. 4. 5. 6. 7. 8.<br />
<br />
<script type="text/Javascript"> var i=0; while (i <= 5) { document.write("O número é " + i); document.write("<br />"); i++; } </script><br />
<br />
O resultado gerado por este código é igual ao do exemplo anterior, porém a forma de comparação é diferente. Porém, no comando while, o desenvolvedor pode utilizar outras comparações, como o conteúdo de uma cadeia de caracteres ou com o valor de uma variável lógica.<br />
<br />
Para que hajam decisões diferentes das que apenas estão nas condições dos laços de repetição, dois comandos podem ser utilizados: •<br />
<br />
continue: este comando interrompe a exeução de uma iteração do laço<br />
<br />
de repetição e vai para o próximo valor esperado<br />
<br />
Aula 4 - Programação WEB “lado cliente”<br />
<br />
85<br />
<br />
Rede e-Tec Brasil<br />
<br />
break : este comando interrompe a execução do laço de repetição, en-<br />
<br />
•<br />
<br />
cerrando-o. O exemplo do quadro a seguir demonstra o uso destes dois comandos. <script type="text/Javascript"> var i=0; for (i=0;i<=100;i++){ if (i == 11) break; if (i%2 != 0) continue; document.write("Número " + i); document.write("<br />"); } </script><br />
<br />
Quadro 43 Fonte: autor<br />
<br />
No exemplo do quadro anterior, a linha 4 faz com que o código se encerre, assim que o número for igual a 11. Já a linha 6 indica que apenas os números pares serão impressos, pois caso o resto da divisão do número por dois (2) seja diferente de zero (0), o código passará a executar a próxima iteração. Como manipular os dados que são fornecidos pelo usuário? Como validar o que ele escreveu?<br />
<br />
4.6 Javascript com formulários Abordaremos, principalmente, a interação da linguagem Javascript com formulários WEB. Esta seção mostrará um exemplo de validação de um formulário de login que, antes de vericar o usuário cadastrado e a senha, validará o CPF e o e-mail digitado pelo usuário.<br />
<br />
Rede e-Tec Brasil<br />
<br />
86<br />
<br />
Programação para WEB<br />
<br />
<script language="Javascript"> function verifForm(formulario){ var cpf = formulario.edtCPF.value; var email = formulario.edtEmail.value; var senha = formulario.edtSenha.value; //vericação de CPF<br />
<br />
if (cpf.length > 0) { var nonNumbers = /\D/; if (cpf.length < 11){ window.alert("São necessários 11 dígitos para vericação<br />
<br />
do CPF!"); return false; } if (nonNumbers.test(cpf)) { window.alert("A vericação de CPF suporta apenas<br />
<br />
números!"); return false; } if (cpf == "00000000000" || cpf == "11111111111" || cpf == "22222222222" || cpf == "33333333333" || cpf == "44444444444" || cpf == "55555555555" || cpf == "66666666666" || cpf == "77777777777" || cpf == "88888888888" || cpf == "99999999999"){ window.alert("Número do CPF inválido!"); return false; } var a = []; var b = new Number; var c = 11; for (i=0; i<11; i++){ a[i] = cpf.charAt(i); if (i < 9) b += (a[i] * --c); } var x = b % 11; if (x < 2) { a[9] = 0; } else { a[9] = 11-x;} b = 0; c = 11; for (y=0; y<10; y++) b += (a[y] * c--); if ((x = b % 11) < 2) { a[10] = 0; } else { a[10] = 11-x; } if ((cpf.charAt(9) != a[9]) || (cpf.charAt(10) != a[10])){ window.alert("Dígito vericador com problema!");<br />
<br />
return false; } } // vericação de email<br />
<br />
var expressao = RegExp(/^[A-Za-z0-9_\-\ .]+@[A-Za-z0-9_\-\.]{2,}.[ A-Zaz0-9]{2,}(\.[A-Za-z0-9])?/); if ((email == "") || !(expressao.test(email))) { alert("Email inválido ou em branco!"); return false; } // vericação de senha<br />
<br />
if (senha.length == 0){ alert("Por favor, informe a senha"); return false; } } </script> </head> <body> <p> </p> <form name="frmLogin" method="post" action="#" onSubmit="return verifForm(this);"><br />
<br />
Aula 4 - Programação WEB “lado cliente”<br />
<br />
87<br />
<br />
Rede e-Tec Brasil<br />
<br />
<table width="271" border="0" cellspacing="0" cellpadding="6"> <tr> <th colspan="2" class="titulo">Login</th> </tr> <tr> <td colspan="2" class="aviso">Informe o email ou o CPF e a senha para acessar o sistema</td> </tr> <tr> <td width="92" class="lblTexto">CPF</td> <td width="155" class="aviso"> <input name="edtCPF" type="text" class="entTexto" id="edtCPF"> apenas números</td> </tr> <tr> <td class="lblTexto">Email</ td> <td><input name="edtEmail" type="text" class="entTexto" id="edtEmail"></td> </tr> <tr> <td class="lblTexto">Senha</ td> <td><input name="edtSenha" type="password" class="entTexto" id="edtSenha"></ td> </tr> <tr> <td colspan="2" class="aviso"><input name="Entrar" type="submit" class="botao" id="Entrar" value="Entrar"></td> </tr> </table> </form> </body><br />
<br />
Quadro 44 Fonte: autor<br />
<br />
O código do quadro anterior apresenta um formulário com três entradas de dados: CPF, e-mail e senha. A linha 62 contém um evento que chama a função de validação do formulário assim que os dados forem submetidos, ou seja, quando houver o pressionamento do botão ‘Entrar’. A função chamada recebe como parâmetro a palavra reservada this, que contém o endereço da instância do formulário atual. Geralmente este parâmetro é utilizado para deixar mais segura a captura dos dados de um formulário, o que acontece nas linhas 4, 5 e 6. Tal função verica o CPF da linha 9 a 41, o email da linha 44 a 48 e a senha da linha 51 a 55. Em cada vericação, em caso de negativas, o comando return false aparece, indicando que a função será encerrada neste ponto e retornará “falso” para o formulário, impedindo que este sofra a ação indicada (normalmente o envio ao servidor para o processamento dos dados). A linha 44 traz um comando novo: RegExp. Este comando cria uma expressão regular, que é utilizada para fazer testes em cadeias de caracteres. O padrão utilizado serve para a vericação de e-mail. Os principais pontos são:<br />
<br />
Rede e-Tec Brasil<br />
<br />
88<br />
<br />
Programação para WEB<br />
<br />
• ^[A-Za-z0-9_\-\.]+@: signica que a primeira parte do e-mail (antes da arroba) deve ter, ao menos uma ocorrência, de algum caracter de A à Z maiúsculo e minúsculo ou números, hífen, ponto ou underline. • [A-Za-z0-9_\-\.]{2,}.: igual a primeira parte, indica a presença destes caracteres, porém a cadeia {2,} signica que devem aparecer pelo menos duas destas antes do ponto (.). • A última sequência que está entre os parênteses, seguida pelo ponto de interrogação (?), indica que esta é opcional, pois alguns e-mails não precisam ter a última indicação de país, podendo apenas parar na indicação de tipo de serviço.<br />
<br />
Resumo Nesta aula demonstramos que a linguagem Javascript é uma ferramenta poderosa na internet atual. Esta trabalha junto com CSS para formar o DHTML (Dynamic HTML), implementa muitos frameworks (dentre eles o AJAX) e permite uma rápida vericação dos dados (pois não há a necessidade de passar os dados ao servidor). A utilização dela em sites pessoais e comerciais permite que o usuário torne a navegabilidade muito mais precisa e amigável. Existe uma ressalva que são os códigos maliciosos. Muitos desenvolvedores usam o Javascript para escrever trechos de código que podem tornar os dados do computador vulneráveis a ações de pessoas mal-intencionadas. Os navegadores atuais já se protegem destes ataques restringindo a execução do Javascript , porém isso faz com que o trabalho se torne mais moroso quanto à aceitação de uma boa página.<br />
<br />
Atividades de aprendizagem 1. Construa um programa que, ao usuário deixar um campo de texto, seja<br />
<br />
mostrado o conteúdo deste campo em uma caixa de diálogo na página (caixa de alerta padrão) 2. A partir de um formulário de dados, que contenha as informações neces-<br />
<br />
sárias para as vericações, conra: a) Se o nome do usuário foi informado<br />
<br />
Aula 4 - Programação WEB “lado cliente”<br />
<br />
89<br />
<br />
Rede e-Tec Brasil<br />
<br />
b) Se tem idade para fazer a carteira de motorista c) Se o seu voto é facultativo, obrigatório ou não pode votar d) Qual a sua idade atual (obtida a partir de cálculo com sua data de nasci-<br />
<br />
mento) e) Em que dia da semana ele nasceu 3. Construa um script que faça uma saudação ao usuário, assim que entrar<br />
<br />
em uma página, indicando se: i. manhã (0h as 11h59): Bom dia ii. tarde (12h as 18h59): Boa tarde iii. noite (19h as 23h59): Boa noite Observações: i. indique o que vai usar para fazer a chamada da função de vericação ii. tanto campos de formulários HTML quanto o comando prompt pode ser utilizado Caro(a) estudante, A linguagem Javascript disponibiliza ao desenvolvedor uma vasta gama de possibilidades para melhorar a interatividade com o usuário. Nesta aula vimos como deixar uma página Web dinâmica, porém somente no lado cliente de uma conexão cliente/servidor. A próxima aula apresentará a linguagem PHP – Hipertext Preprocessor, que é uma linguagem de programação scripting como javascript , porém trabalha no lado servidor de uma conexão, permitindo acesso ao banco de dados e maior segurança na execução de determinadas funções importantes para uma aplicação Web. Ainda há muito para aprender. Continue disciplinado(a) em seus estudos.<br />
<br />
Rede e-Tec Brasil<br />
<br />
90<br />
<br />
Programação para WEB<br />
<br />
Aula 5. Programação para WEB “lado servidor” Objetivos: • demonstrar as formas de instalação de uma linguagem de programação WEB para servidor; • reconhecer a importância da programação para ambiente internet; • identicar os principais comandos para produzir uma página dinâmica; • empregar as formas de vericação de dados de forma local e sua interação com o cliente, para que haja menos tráfego na rede; e • perceber a necessidade da integração de todos os elementos apresentados nas aulas anteriores para a construção de uma página completa.<br />
<br />
Caro(a) estudante, Esta é a penúltima aula da nossa disciplina e tratará da programação para o lado servidor com PHP. Com este conteúdo mais uma etapa da sua qualicação será vencida. Não desanime em seus estudos. Começaremos apresentando os fundamentos da linguagem.<br />
<br />
5.1 Fundamentos da linguagem A linguagem PHP foi concebida durante o outono de 1994 por Rasmus Lerdorf. As primeiras versões não foram disponibilizadas, tendo sido utilizadas em sua página pessoal, apenas para que ele pudesse ter informações sobre as visitas que estavam sendo feitas. A primeira versão utilizada por outras pessoas foi disponibilizada em 1995, e cou conhecida como Personal Home<br />
<br />
Aula 5 - Programação para WEB “lado servidor”<br />
<br />
91<br />
<br />
Rede e-Tec Brasil<br />
<br />
Page Tools (ferramentas para página pessoal). Form Interpreter é uma nomenclatura que veio de outro pacote escrito por Rasmus que interpretava dados de formulários HTML (Form Interpreter ).<br />
<br />
mSQL (ou mini SQL) é um SGBD<br />
<br />
(Sistema Gerenciador de Banco de Dados) leve, criado pela empresa Hughes Technologies Pty Ltd. A primeira versão foi disponibilizada em 1994 e sua filosofia baseia-se numa boa performance e eficiente uso de memória. Para usá-lo tanto comercialmente como nãocomercialmente o software deve ser comprado.<br />
<br />
Estima-se que em 1996 PHP/FI estava sendo usado por cerca de 15.000 sites pelo mundo, e em meados de 1997 esse número subiu para mais de 50.000 .<br />
<br />
Common Gateway Interface<br />
<br />
é o método usado para permitir a interação entre o servidor WWW e outros programas executados no sistema).<br />
<br />
No nal de 1995 o interpretador foi reescrito, e ganhou o nome de PHP/F . Ele combinou os scripts do pacote Personal Home Page Tools com o FI e adicionou suporte a mSQL , nascendo assim o PHP/FI, versão que cresceu muito pois as pessoas passaram a contribuir com o projeto. Nessa época houve uma mudança no desenvolvimento do PHP. Ele deixou de ser um projeto de Rasmus com contribuições de outras pessoas para ter uma equipe de desenvolvimento mais organizada. O interpretador foi reescrito por Zeev Suraski e Andi Gutmans, e esse novo interpretador foi a base para a versão três (03) da linguagem, que atualmente encontra-se na versão 5. Basicamente, qualquer coisa que pode ser feita por algum programa CGI pode ser feita também com PHP, como coletar dados de um formulário, gerar páginas dinamicamente ou enviar e receber cookies. Algumas características do PHP o tornam bastante vantajoso. Veja abaixo quais são elas.<br />
<br />
5.2 Características do PHP Uma das grandes vantagens do PHP é que ele é gratuito. O arquivo de instalação pode ser obtido gratuitamente no site http://www.php.net . Outra característica importante do PHP é que, além de ser gratuito, é um software com código-fonte aberto. O código-fonte do PHP assim como sua documentação detalhada também estão disponíveis no site ocial. Uma característica que o deixa muito funcional e fácil de trabalhar é que ele é embutido no HTML. Uma página que contém programação PHP normalmente possui extensão .php (isso depende da conguração do seu servidor WEB). Sempre que o servidor WEB receber solicitações de páginas que possuem essa extensão, ele saberá que essa página possui linhas de programação. Porém, o HTML e o PHP estão misturados. O PHP é executado no servidor. Quando uma página PHP é acessada por meio de um navegador, todo o código PHP é executado no servidor, e os resultados são enviados para o cliente. Portanto, o navegador exibe a página já processada, sem consumir recursos do computador local (cliente). As linhas de programação PHP não podem ser vistas por ninguém, já que elas<br />
<br />
Rede e-Tec Brasil<br />
<br />
92<br />
<br />
Programação para WEB<br />
<br />
são executadas no próprio servidor, e o que retorna é apenas o resultado do código executado.<br />
<br />
5.3 Programação O código PHP é embutido no HTML. Assim, as funcionalidades a serem desenvolvidas pelo programador devem estar dentro de um arquivo que contém HTML e os comandos da linguagem PHP. A sintaxe para a inserção pode ser vista no quadro 2. <html> <head> <title>Teste</title> </head> <body> <br> <? echo "TESTE"; ?> </body> </html><br />
<br />
Quadro 02 – PHP embutido no HTML Fonte: autor<br />
<br />
O código do quadro 2 apresenta uma página HTML simples, porém entre as linhas 7 e 9 se encontra o código PHP. Portanto, todo código PHP deve estar contido entre as tags <? ... ?> (O servidor WEB apenas interpretará o código PHP que estiver entre os delimitadores <? ?>). A linha 8 apresenta o comando que apresentará na página a palavra TESTE. Para que as tags <? ... ?> funcionem no servidor, é necessário congurar, dentro do arquivo php.ini, a diretiva short_open_tag = On. Caso contrário, utilize <?php ... ? A sintaxe de seus comandos é semelhante à linguagem C. Em PHP os comandos devem ser limitados por ponto-e-vírgula, blocos de comandos e funções são delimitados por { e }, e as variáveis declaradas devem ser precedidas de $, conforme o exemplo do quadro 03. <? $ano = 1978; echo $ano; ?><br />
<br />
Quadro 03 – Sintaxe do PHP Fonte: autor<br />
<br />
A impressão de valores nas páginas PHP pode seguir vários critérios. Os valores literais são valores estáticos que podem ser direcionados direto pela saída<br />
<br />
Aula 5 - Programação para WEB “lado servidor”<br />
<br />
93<br />
<br />
Rede e-Tec Brasil<br />
<br />
do PHP. Os tipos de valores literais são: • Numéricos: geralmente utilizados em qualquer linguagem de programação para o cálculo de fórmulas matemáticas. Podem pertencer à base decimal (10), octal (base 8) e hexadecimal (base 16). • Alfanuméricos: são textos, ou seja cadeias de caracteres que devem ser delimitadas com caracteres especícos para esse propósito. Esses caracteres delimitadores podem ser: – aspas simples : 'texto' – aspas duplas : "texto" – aspas invertidas: `texto`<br />
<br />
Os textos delimitados por aspas duplas podem receber caracteres de controle - diferentemente dos delimitados por aspas simples - que podem servir para impressão de caracteres que são reservados da linguagem ou para formatação do texto (quadro 4). echo "custo total R\$ 4,00"; Quadro 03 – Impressão de caracteres especiais Fonte: autor<br />
<br />
O caractere de barra invertida (\) antes do sinal de cifrão ($) do exemplo se faz necessário, uma vez que o cifrão é um caractere reservado à linguagem PHP para declaração de variáveis. Com aspas invertidas o PHP executa comandos do sistema operacional e, caso haja um retorno, devolve à página PHP (exemplo no quadro 05). echo `ls –l`; Quadro 05 – Impressão do resultado de comandos do Sistema Operacional Fonte: autor<br />
<br />
O comando serve, no Linux, para listar o conteúdo do diretório atual. Assim, a página exibirá uma relação com todos os recursos que estiverem na máquina onde está o servidor. A seguir, apresentamos os tipos de dados da linguagem PHP.<br />
<br />
Rede e-Tec Brasil<br />
<br />
94<br />
<br />
Programação para WEB<br />
<br />
5.4 Tipos de dados O PHP é uma linguagem fracamente tipada, porém o desenvolvedor pode utilizar a tipicação, se assim for seu estilo de programação. As variáveis devem ser inicializadas antes de utilizadas em qualquer expressão. A linguagem PHP possui alguns tipos de dados que podem ser usados para inicializar variáveis, são eles: • Numéricos (inteiro e real); • String: textos delimitados por aspas simples ou duplas, e podem também conter caracteres de controle; • Array: chamado também de mapeamentos ou vetor indexado, são variáveis que podem conter mais de um dado. O tipo array é um dicionário onde os índices são as chaves de acesso, sendo que tais índices podem ser valores de qualquer tipo e não somente inteiros; • Objeto; • Booleano: PHP não possui um tipo booleano, mas é capaz de avaliar expressões e retornar os valores true ou false, através do tipo inteiro: é usado o valor 0 (zero) para representar o estado false, e qualquer valor diferente de zero (geralmente 1) para representar o estado true. Os quadros 8, 9 e 10 apresentam exemplo de conteúdos que podem ser utilizados para valorar variáveis denidas nos tipos de dados apresentados. $inteiro = 10; $real = 10.001; $nd = 10.0e-2; // 100 em notação decimal<br />
<br />
Quadro 08 - Tipo de dados numérico Fonte: autor<br />
<br />
$instituicao = "Universidade Tecnológica Federal do Paraná" $sigla = 'UTFPR';<br />
<br />
Quadro 09 - Tipo de dados string<br />
<br />
Fonte: autor<br />
<br />
Aula 5 - Programação para WEB “lado servidor”<br />
<br />
95<br />
<br />
Rede e-Tec Brasil<br />
<br />
$a[1] = 10; $a[2] = 20; $a = array(10,20); $a = array(0 => 10, 1 => 20); $cor[1] = "vermelho"; $cor[2] = "verde"; $cor[3] = "azul"; $cor["teste"] = 1; $cor = array(1 => "vermelho, 2 => "verde, 3 => "azul", "teste => 1);<br />
<br />
Quadro 10 - Tipo de dados Array Fonte: autor<br />
<br />
As linhas 3 e 4 do código do quadro 10 são equivalentes, ou seja, para denir o Array “a” pode ser utilizada uma ou outra linha de código, assim como a linha 9 é equivalente às linhas 5, 6, 7 e 8, ou seja, qualquer uma destas formas pode ser utilizada para valorar um Array. Como o tipo Array aceita vários valores, o PHP dispõe de um comando para realizar atribuições múltiplas para facilitar o uso de vetores e matrizes. Listas são utilizadas em atribuições múltiplas. list($x, $y, $z) = array("ah", "beh", "ceh"); $arr = array(1=>"um",3=>"tres","a"=>"letraA",2=>"dois”); list($a,$b,$c,$d) = $arr; Quadro 11 – Uso de listas para delegação de múltiplos valores Fonte: autor<br />
<br />
O exemplo do quadro 11 apresenta a declaração de quatro variáveis através dos valores de arrays. Cada variável da lista possui um índice inteiro e ordinal, iniciando com zero, que serve para determinar qual valor será atribuído. No quadro 11 tem-se $x com índice 0, $y com índice 1, $z com índice 2, sendo que, depois da execução da linha um, as três variáveis estarão valoradas em “ah”, “beh” e “ceh” respectivamente. A linha 2 cria um array com quatro elementos, que é utilizado na linha 3 para valorar as variáveis $a, $b, $c e $d. Após a execução do código, as variáveis terão os seguintes valores: • $a == null • $b == "um" • $c == "dois" • $d == "tres" Observa-se que à variável $a não foi atribuído valor, pois no array não existe<br />
<br />
Rede e-Tec Brasil<br />
<br />
96<br />
<br />
Programação para WEB<br />
<br />
elemento com índice 0 (zero). Outro detalhe importante é que o valor "tres" foi atribuído à variável $d, e não a $b, pois seu índice é 3, o mesmo que $d na lista. Por m, tem-se que o valor "letraA" não foi atribuído a elemento algum da lista pois seu índice não é inteiro. Quais são os operadores disponíveis em PHP?<br />
<br />
5.5 Operadores Os operadores em PHP estão dividos em: • Aritméticos • Lógicos • De Atribuição • De Comparação Os operadores aritméticos são usados para executar operações aritméticas com operandos os quais podem ser variáveis, constantes ou literais. A tabela 1 apresenta os operadores aritméticos. Tabela 1 - Operadores Aritméticos Operador<br />
<br />
Operação<br />
<br />
Exemplo<br />
<br />
+<br />
<br />
Soma<br />
<br />
$a +1<br />
<br />
-<br />
<br />
Subtração<br />
<br />
$b -$c<br />
<br />
*<br />
<br />
Multiplicação<br />
<br />
3 * $c<br />
<br />
/<br />
<br />
Divisão<br />
<br />
$a / $b<br />
<br />
%<br />
<br />
Módulo (resto da divisão)<br />
<br />
$a % 2<br />
<br />
Os operadores lógicos retornam valores booleanos (verdadeiro ou falso) e são muito utilizados em decisões. A tabela 2 apresenta os operadores lógicos. Tabela 2 - Operadores Booleanos Operador<br />
<br />
Exemplo<br />
<br />
Descrição<br />
<br />
&&<br />
<br />
$a && $b<br />
<br />
Verdadeiro se a e b forem verdadeiros<br />
<br />
||<br />
<br />
$a || $b<br />
<br />
Verdadeiro se a ou b forem verdadeiros<br />
<br />
!<br />
<br />
!$a<br />
<br />
Verdadeiro se a for falso<br />
<br />
Aula 5 - Programação para WEB “lado servidor”<br />
<br />
97<br />
<br />
Rede e-Tec Brasil<br />
<br />
É importante ressaltar que, se o valor de uma variável numérica é zero ela é considerada falsa quando usada em operações lógicas. Se uma variável string é vazia ela é também considerada falsa . Às vezes se faz necessário atribuir valores a determinadas variáveis. Nesse caso pose-se fazer o uso de operadores de atribuição. Tabela 3 - Operadores de Atribuição Operador<br />
<br />
Exemplo<br />
<br />
Descrição<br />
<br />
=<br />
<br />
$a = $b<br />
<br />
Joga o valor de b em a<br />
<br />
+=<br />
<br />
$a += $b<br />
<br />
Soma a com b e atribui o valor em a<br />
<br />
-=<br />
<br />
$a -= $b<br />
<br />
Subtrai b de a e atribui o valor em a<br />
<br />
Os operadores de comparação podem ser usados para comparar o conteúdo de variáveis com o conteúdo de outras variáveis ou literais. Tabela 4 - Operadores de Comparação Operador<br />
<br />
Exemplo<br />
<br />
Descrição<br />
<br />
==<br />
<br />
$a == $b<br />
<br />
Verdadeiro se a igual a b<br />
<br />
!=<br />
<br />
$a != $b<br />
<br />
Verdadeiro se a diferente de b<br />
<br />
<<br />
<br />
$a < $b<br />
<br />
Verdadeiro se a menor que b<br />
<br />
<=<br />
<br />
$a <= $b<br />
<br />
Verdadeiro se a menor ou igual a b<br />
<br />
><br />
<br />
$a > $b<br />
<br />
Verdadeiro se a maior b<br />
<br />
>=<br />
<br />
$a >= $b<br />
<br />
Verdadeiro se a maior ou igual a b<br />
<br />
O PHP traz, ainda, uma forma muito interessante de se designar valores em comparações. O operador condicional é um operador de seleção ternário. O quadro 14 apresenta um exemplo. //(expressao1)?(expressao2):( expressao3) $fator = ($numero > 0)?1:-1; Quadro 14 – Sintaxe do operador condi cional Fonte: autor<br />
<br />
No código do quadro 14, o interpretador PHP avalia a primeira expressão. Se ela for verdadeira, a expressão retorna o valor de expressão2. Senão, retorna o valor de expressão3. Na linha dois (2), a variável $fator irá receber 1 caso o número seja maior do que zero e receberá -1 caso o número seja menor do que zero. Apresentaremos a seguir alguns comandos básicos para a manipulação de dados na linguagem PHP.<br />
<br />
Rede e-Tec Brasil<br />
<br />
98<br />
<br />
Programação para WEB<br />
<br />
5.6 Comandos O conteúdo deste tópico pode ser complementado com as informações que você encontrará no site que estamos recomendando.<br />
<br />
Para uma referência completa e atualizada da linguagem, acesse http://www.php.net<br />
<br />
O comando IF faz parte da categoria de comandos condicionais. Geralmente, dentro dos programas se faz necessário a tomada de decisões sobre o uxo que o programa deve seguir. Essas decisões são tomadas baseadas no teste de condições. O quadro 15 apresenta um exemplo desta aplicação. if(condição){<br />
<br />
bloco_de_comandos_1; } else { bloco_de_comandos_2; } Quadro 15 - Comando IF Fonte: autor<br />
<br />
No exemplo do quadro 15, se condição é verdadeira então bloco_de_comandos_1 é executado, caso contrário bloco_de_comandos_2 será executado. Outras formas de escrever o comando condicional também são aceitas em PHP. Às vezes se faz necessário o teste de diversas condições em um mesmo momento no programa e, baseado no teste dessas condições você pode executar diversos comandos. O exemplo do quadro 17 apresenta este conceito. 1. if(condição1){<br />
<br />
2.<br />
<br />
bloco_de_comandos_1;<br />
<br />
3. }elseif(condição2){<br />
<br />
4.<br />
<br />
bloco_de_comandos_2;<br />
<br />
5. }elseif(condição3){<br />
<br />
6.<br />
<br />
bloco_de_comandos_3;<br />
<br />
7. } Quadro 17 - Testes de várias condições como o comando IF Fonte: autor<br />
<br />
É importante lembrar que, no comando if é possível usar uma innidade de cláusulas elseif mas apenas uma cláusula else .<br />
<br />
Aula 5 - Programação para WEB “lado servidor”<br />
<br />
99<br />
<br />
Rede e-Tec Brasil<br />
<br />
O comando switch atua de maneira semelhante a uma série de comandos if na mesma expressão. É útil no caso de haver a necessidade da comparação de uma variável com diversos valores, e executar um código diferente a cada valor. Para que não se tenha um número muito grande de comandos if identados, deve-se usar o comando switch. Um exemplo que compara o comando if e switch do comando pode ser visto no quadro 18. if ($i == 0) print "i é igual a zero"; elseif ($i == 1) print "i é igual a um"; elseif ($i == 2) print "i é igual a dois"; // é a mesma coisa que switch ($i) { case 0: print "i é igual a zero"; <br />
<br />
break; case 1: print "i é igual a um";<br />
<br />
<br />
<br />
break; case 2: print "i é igual a dois";<br />
<br />
<br />
<br />
break;<br />
<br />
}<br />
<br />
Quadro 18 – Comparação entre if e switch Fonte: autor<br />
<br />
O comando switch testa linha a linha os casos encontrados, e a partir do momento que encontra um valor igual ao da variável testada, passa a executar todos os comandos seguintes, mesmo os que fazem parte de outro teste, até o m do bloco. O comando break quebra o uxo e faz com que o código seja executado da maneira desejada. Sempre que houver a necessidade de que um determinado número de instruções sejam executadas em uma determinada quantidade de vezes (até que uma certa condição se torne verdadeira) se faz necessário o uso de uma estrutura de controle de uxo denominada laço.<br />
<br />
Rede e-Tec Brasil<br />
<br />
100<br />
<br />
Programação para WEB<br />
<br />
O comando for deve ser utilizado quando se zer necessário a execução de um bloco de comandos. O comando for é utilizado para busca de valores em vetores (arrays), assim como no acesso a resultados de pesquisas.<br />
<br />
for(comando de inicialização;condição do laco;comando do laco){<br />
<br />
<br />
<br />
bloco_de_comandos;<br />
<br />
}<br />
<br />
Quadro 19 – Sintaxe do comando for Fonte: autor<br />
<br />
A sintaxe do comando for pode ser observada no quadro 19. A forma geral dos parâmetros para uso no comando for é: • Comando de inicialização: parâmetro que garante que uma determinada condição, necessária para o laço, ocorra; • Condição do laço: condição que pode interromper o laço, pois esta deve ser verdadeira para que o laço continue.<br />
<br />
for(;;){ print(“Alo mundo”); }<br />
<br />
Quadro 21 – Sintaxe do comando for<br />
<br />
Fonte: autor<br />
<br />
• Comando do laço: executado enquanto que a condição do laço é verdadeira (normalmente é utilizado para incrementar a variável de controle). O código do quadro 21 criará um loop innito, pois não possui condição de parada. Já o código do quadro 22, em seus exemplos, possui: • Linha 3: enquanto a variável $i for menor ou igual à quantidade de valores no vetor $a a linguagem executará a linha 4. • Linha 6: enquanto a variável $i for menor do que a quantidade de valores no vetor, menos um elemento, as linhas de 7 a 11 serão executadas. • Linha 15: mesma condição da linha 3.<br />
<br />
Aula 5 - Programação para WEB “lado servidor”<br />
<br />
101<br />
<br />
Rede e-Tec Brasil<br />
<br />
$a = array(5, 3, 7, 1, 2); echo "<h2>Array Original</h2>"; for($i=0;$i<=count($a);$i++){ echo " ".$a[$i]; } for($i=0;$i<count($a)-1;$i++){ if($a[$i] > $a[$i+1]){ $tmp = $a[$i+1]; $a[$i+1] = $a[$i]; $a[$i] = $tmp; <br />
<br />
$i=-1; }<br />
<br />
} echo "<h2>Array Ordenado</h2>"; for($i=0;$i<=count($a);$i++){ echo " ".$a[$i]; }<br />
<br />
Quadro 22 – Ordenação de arrays com for Fonte: autor<br />
<br />
5.6.1 Comandos while e do...while Outros dois comandos podem ser utilizados para a construção de laços de repetição. Os comandos WHILE e DO...WHILE podem ser utilizados quando há a necessidade da execução de algum bloco de comandos baseado na while(expressão){<br />
<br />
<br />
<br />
bloco_de_comados;<br />
<br />
} Quadro 23 – Sintaxe do comando while Fonte: autor<br />
<br />
avaliação de uma determinada expressão lógica. A sintaxe do comando é apresentada no quadro 23. Enquanto a expressão for verdadeira, o bloco de comandos é executado. É importante lembrar que, se a expressão não for verdadeira antes do início, nenhuma execução do bloco será feita. Se o desenvolvedor quiser que o bloco de comandos seja executado pelo menos uma vez, então o comando<br />
<br />
Rede e-Tec Brasil<br />
<br />
102<br />
<br />
Programação para WEB<br />
<br />
do { bloco_de_comandos; } while(expressão);<br />
<br />
Quadro 24 – Sintaxe do comando do...while Fonte: autor<br />
<br />
do...while deve ser utilizado. O quadro 24 apresenta sua sintaxe. $i = 1; while ($i <=10) print $i++; // $i = 0; do { print ++$i; } while ($i < 10)<br />
<br />
Quadro 25 – Exemplos de utilização de while e do...while Fonte: autor<br />
<br />
O exemplo do quadro 25 apresenta dois laços, um utilizando while e o outro do..while para executar a mesma operação (imprimir números de 1 a 10, inclusive). Caso a variável $i seja valorada, nos dois casos, em 11, a linha 6 ainda será executada, porém no primeiro caso, nada será feito.<br />
<br />
5.6.2 Os comandos CONTINUE, BREAK Através de continue e break o desenvolvedor pode ter um maior controle dos laços. Através do comando continue o programador pode fazer com que o uxo normal do laço seja quebrado e a expressão lógica do laço (no caso dos comandos while e do..while) ou a condição do laço (no caso do comando for) sejam reavaliados. Já com o comando break o laço é abor tado imediatamente. for( $i=0; $i<=100; $i++ ){ if ( $i % 2 != 0 ){ continue; } echo $i; }<br />
<br />
Quadro 26 – Uso do continue Fonte: autor<br />
<br />
Aula 5 - Programação para WEB “lado servidor”<br />
<br />
103<br />
<br />
Rede e-Tec Brasil<br />
<br />
No caso do exemplo do quadro 26 somente os números pares serão impressos, pois toda vez que a expressão $i % 2 != 0 for verdadeira (resto da divisão por dois for diferente de zero), a condição do laço será testada novamente. $i = 10; do{ echo $i; break; } while( $i<=100 ); Quadro 27 - Exemplo do comando BREAK.<br />
<br />
Fonte: autor<br />
<br />
O código do exemplo contido no quadro 27 faz com que apenas o número 10 seja impresso. É importante lembrar que os comandos continue e break devem ser usados somente dentro de laços. PHP como qualquer linguagem funcional faz uso de funções para a denição de blocos de código, e também disponibiliza funções prontas para que o desenvolvedor possa construir sistemas de forma mais fácil.<br />
<br />
5.7 Funções Na informática, mais especicamente no contexto da programação, uma sub-rotina (função, procedimento ou subprograma) consiste em uma porção (bloco) de código que resolve um problema especíco, parte de um problema maior (a aplicação nal). A sintaxe básica para denir uma função está demonstrada no quadro 28. function nome_da_função([arg1,<br />
<br />
arg2, arg3]) { Comandos; ... ; [return <valor de retorno>]; } Quadro 28 – Sintaxe básica de uma função Fonte: autor<br />
<br />
Qualquer código PHP válido pode estar contido no interior de uma função. Como a checagem de tipos em PHP é dinâmica, o tipo de retorno não deve ser declarado, sendo necessário que o programador esteja atento para que a função retorne o tipo desejado.<br />
<br />
Rede e-Tec Brasil<br />
<br />
104<br />
<br />
Programação para WEB<br />
<br />
Toda função pode opcionalmente retornar um valor, ou simplesmente executar os comandos e não retornar valor algum. Não é possível que uma função retorne mais de um valor, mas é permitido fazer com que uma função retorne um valor composto, como listas ou Arrays. Argumentos podem ser passados junto com a chamada de uma função. Estes devem ser declarados logo após o nome da função, entre parênteses, e tornam-se variáveis pertencentes ao escopo local da função. O quadro 29 apresenta uma função com argumentos. function imprime($texto){ echo $texto; } imprime("UTFPR"); Quadro 29 – Função que imprime um texto Fonte: autor<br />
<br />
No exemplo do quadro 29, a função foi declarada na linha 1 com o nome imprime, sendo que $texto é a variável que representa o único argumento da função. A linha 2 é a funcionalidade do código que simplesmente imprimirá o conteúdo do argumento. A linha 4 é um exemplo de chamada da função, que, neste caso, está passando o texto “UTFPR” para a função imprime. Normalmente, a passagem de parâmetros em PHP é feita por valor, ou seja, se o conteúdo da variável for alterado, essa alteração não afeta a variável original. No exemplo 29, caso o desenvolvedor queira modicar o valor de texto, nenhuma mudança ocorrerá depois da execução da função pois a passagem de parâmetros foi executada por valor. Caso o desenvolvedor queira que uma mudança no valor de um parâmetro seja propagado para toda a aplicação depois da execução de uma função, este deve fazer uma passagem de valores por referência. Existem duas maneiras de fazer com que uma função tenha parâmetros passados por referência: indicando isso na declaração da função (fazendo com que a passagem de parâmetros sempre seja assim), e na própria chamada da função. Nos dois casos utiliza-se o modicador "&". O quadro 30 apresenta um exemplo de tal procedimento.<br />
<br />
Aula 5 - Programação para WEB “lado servidor”<br />
<br />
105<br />
<br />
Rede e-Tec Brasil<br />
<br />
function soma10(&$n1, $n2) { $n1 += 10; $n2 += 10; } $x = $y = 1; soma10($x, $y); soma10($x, &$y); Quadro 30 – Exemplo de função com passagem de parâmetros por referência Fonte: autor<br />
<br />
No exemplo 30, após o processamento da função pela chamada da linha 8, o valor de $x será 11 e o valor de $y continuará 1, pois somente o primeiro parâmetro foi declarado como referência; já na linha 9, tanto o valor de $x quanto $y serão alterados para 11, pois a referência ao segundo parâmetro foi feita na própria chamada da função. Caso o desenvolvedor queira deixar parâmetros com valor padrão (default ), na declaração de cada parâmetro este deve ser valorado, co nforme exemplo no quadro 31. function teste($texto = "testando") { echo $texto; } teste(); teste("outro teste"); Quadro 31 – Função com parâmetro default Fonte: autor<br />
<br />
A função de exemplo do quadro 31 coloca o valor “testando” como padrão para o parâmetro $texto. Assim, a chamada da função na linha 5 imprimirá “testando” na tela, e a chamada da função na linha 6 imprimirá “outro teste”. É importante lembrar que, quando a função tem mais de um parâmetro, o que tem valor default deve ser declarado por último. Trabalhando com variáveis, é importante notar que o escopo de uma variável em PHP dene a porção do programa onde ela pode ser utilizada. Na maioria dos casos todas as variáveis têm escopo global, porém, em funções denidas pelo usuário, um escopo local é criado. Uma variável de escopo global não pode ser utilizada no interior de uma função sem que haja uma declaração.<br />
<br />
Rede e-Tec Brasil<br />
<br />
106<br />
<br />
Programação para WEB<br />
<br />
$nome = "Fabiana"; $sobrenome = “Silva”; $email = “fs@casadochapeu.br”; function cliente() { global $sobrenome; echo $nome.” “.$sobrenome; echo $GLOBALS["email"]; } cliente(); Quadro 30 – Uso de variáveis globais em funções<br />
<br />
Fonte: autor<br />
<br />
O quadro 31 declara três variáveis ($nome, $sobrenome e $email), todas globais. Para seu uso dentro da função cliente(), é necessário informar ao PHP que estas variáveis são globais, portanto: • A linha 5 dene que $sobrenome é global, portanto estará disponível com seu valor informado fora da função; • A linha 6 imprime as variáveis $nome e $sobrenome concatenadas, porém apenas o conteúdo de $sobrenome (no caso “Silva”) aparecerá na tela; • A linha 7 imprime o conteúdo da variável global $email, pois utiliza um Array pré-denido pelo PHP cujo nome é $GLOBALS É imprescindível que o desenvolvedor atente para tais situações, pois comprovadamente muitos erros de programação (“porque não imprime”) estão presentes quando não se há atenção a declarações globais e locais. Além das funções que podem ser desenvolvidas pelo usuário, algumas funções estão disponíveis no PHP para manipulação de conteúdos de variáveis. A tabela 03 apresenta tais funções.<br />
<br />
Aula 5 - Programação para WEB “lado servidor”<br />
<br />
107<br />
<br />
Rede e-Tec Brasil<br />
<br />
Tabela 03 – Funções padrão do PHP HTML<br />
<br />
string htmlspecialchars(string str);<br />
<br />
htmlspecialchars()<br />
<br />
Retorna a string fornecida, substituindo os s eguintes caracteres: & para '&', " para '"', < para '<', > para ‘>' string htmlentities(string str);<br />
<br />
htmlentities()<br />
<br />
Funciona de maneira semelhante ao comando anterior, mas de maneira mais completa, pois converte todos os caracteres da string que possuem uma representação especial em html, como por exemplo: º para 'º', ª para 'ª', á para 'á', ç para ‘ç' string nl2br(string str);<br />
<br />
nl2br()<br />
<br />
Retorna a string fornecida substituindo todas as quebras de linha ("\n") por quebras de linhas em html ("<br>"). Por exemplo echo nl2br("Cisco\nXits\n"); imprime Cisco<br>Xits<br> array get_meta_tags(string arquivo);<br />
<br />
get_meta_tags()<br />
<br />
Abre um arquivo HTML e percorre o cabeçalho em busca de "meta" tags, retornando em um Array todos os valores encontrados. Caso uma página tenha o código ( teste.html): 1. <head> 2. <meta name="author" content="jose"> 3.<br />
<br />
<meta name="tags" content="documentação HTML"><br />
<br />
4.<br />
<br />
</head><!-- busca encerra aqui --> A execução da função get_meta_tags("teste.html") ; retorna o array: array("author"=>"jose","tags"=>"php3 documentation");<br />
<br />
string strip_tags(string str);<br />
<br />
strip_tags()<br />
<br />
Retorna a string fornecida, retirando todas as tags HTML e/ou PHP encontradas. Exemplo: strip_tags('<a href="nome.php" rel="nofollow">Nomes</a><br>'); Retorna a string "Nomes". string urlencode(string str);<br />
<br />
urlencode()<br />
<br />
Retorna a string fornecida convertida para o f ormato urlencode. Esta função é útil para passar variáveis para uma próxima página, pois muitas vezes o usuário digita espaços que não são aceitos em URLs string urldecode(string str);<br />
<br />
urldecode()<br />
<br />
Funciona de maneira inversa a urlencode, desta vez decodificando a string fornecida do formato urlencode para texto normal STRING join<br />
<br />
string join(string separador, array partes);<br />
<br />
Retorna uma string contendo todos os elementos do Array fornecido, separados pela string também fornecida. Exemplo: 1. $pedacos = array("a", "casa número", 13, "é azul"); 2. $junto = join(" ",$pedacos); A variável $junto passa a conter a s tring: “a casa número 13 é azul” split<br />
<br />
array split(string padrao, string str, int [limite]);<br />
<br />
Retorna um Array contendo partes da string fornecida separadas pelo caractere fornecido, podendo limitar o número de elementos do array. Exemplo: 1. $nasceu = "11/14/1975"; 2. $nasceu_separado = split("/",$data); A variável $nasceu_separado receba o valor: array(11,14,1975);<br />
<br />
Rede e-Tec Brasil<br />
<br />
108<br />
<br />
Programação para WEB<br />
<br />
int similar_text(string str1, string str2, double [porcentagem]);<br />
<br />
similar_text<br />
<br />
Compara duas strings de parâmetro e retorna o número de caracteres coincidentes. Para que o desenvolvedor possa informar o valor percentual de igualdade entre as st rings, opcionalmente pode ser fornecida uma variável, passada por referência. Maiúsculas e minúsculas são tratadas como diferentes (case sensitive ). Exemplo: $num = similar_text("teste", "testando",&$porc); Depois da execução, $num é 4 e $porc == 61.538461538462 int strcasecmp(string str1, string str2);<br />
<br />
strcasecmp<br />
<br />
Compara as duas strings e retorna 0 (zero) se forem iguais, um valor maior que zero se str1 > s tr2, e um valor menor que zero se str1 < str2. Esta função é case ins ensitive, ou seja, maiúsculas e minúsculas são tratadas como iguais. int strcasecmp(string str1, string str2);<br />
<br />
strcmp<br />
<br />
Funciona de maneira semelhante à função strcasecmp, com a diferença que esta é case sensitive, ou seja, maiúsculas e minúsculas são tratadas como diferentes. string strstr(string str1, string str2);<br />
<br />
strstr<br />
<br />
Procura a primeira ocorrência de str2 em str1. Se não encontrar, retorna uma string vazia, e se encontrar retorna todos os caracteres de str1 a partir desse ponto. Exemplo: strstr("Telefone celular", "cel"); // retorna "Celular" Esta função é case sensitive, ou seja, diferencia maiúsc ulas e minúsculas. Para não haver diferenciação, o desenvolvedor deve usar a função stristr . int strpos(string str1, string str2, int [offset] );<br />
<br />
strpos<br />
<br />
Retorna a posição da primeira ocorrência de str2 em str1, ou zero se não houver. O parâmetro opcional offset determina a partir de qual caractere de str1 será efetuada a busca. Para retornar o valor da última ocorrência, o usuário deve utilizar strpos. Alteração de STRINGS<br />
<br />
string chop(string str);<br />
<br />
chop<br />
<br />
Retira espaços e linhas em branco do final da string fornecida. Exemplo: chop(" Teste \n \n "); // retorna " Teste" string trim(string str);<br />
<br />
trim<br />
<br />
Retira espaços e linhas em branco do iníci o e do final da string f ornecida. Para retirar apenas do final da string, o usuário deve utilizar ltrim string strrev(string str);<br />
<br />
strrev<br />
<br />
Retorna a string fornecida invertida. Exemplo: strrev("Silva"); // retorna "avliS" string strtolower(string str);<br />
<br />
strtolower<br />
<br />
Retorna a string fornecida com todas as letras minúsculas. string strtoupper(string str);<br />
<br />
strtoupper<br />
<br />
Retorna a string fornecida com todas as letras maiúsculas. string ucfirst(string str);<br />
<br />
ucfirst<br />
<br />
Retorna a string fornecida com o primeiro caractere convertido para letra maiúscula. Exemplo: ucrst("teste de funcao"); // retorna "Teste de funcao"<br />
<br />
Para ter um retorno com todas as palavras com letra inicial maiúcula, o desenvolvedor deve usar ucwords string str_replace(string str1, string str2, string str3);<br />
<br />
str_replace<br />
<br />
Altera todas as ocorrências de str1 em str3 pela string str2. Diversos echo()<br />
<br />
echo(string arg1, string [argn]... );<br />
<br />
Imprime os argumentos fornecidos.<br />
<br />
Aula 5 - Programação para WEB “lado servidor”<br />
<br />
109<br />
<br />
Rede e-Tec Brasil<br />
<br />
bool isset ( mixed var [, mixed var [, ...]])<br />
<br />
isset()<br />
<br />
Determina quando uma variável está ajustada ( set ). Retorna verdadeiro se a variável var existe, ou falso caso contrário. print(string arg);<br />
<br />
print()<br />
<br />
Imprime o argumento fornecido. Banco de Dados mysql_connect()<br />
<br />
resource mysql_connect([string server [, string username [, string password [, bool new_link]]]])<br />
<br />
Abre uma conexão com um banco de dados My SQL. A função retorna um link para o banco de dados em MySQL ou falso caso não haja conexão com o banco. Exemplo: 1. <?php 2. $link = mysql_connect("localhos t", "mysql_user", "mysql_password") 3.<br />
<br />
or die("Falha na conexão");<br />
<br />
4. print ("Conectado"); 5. mysql_close($link); 6. ?><br />
<br />
O código die presente na linha 2 f az com que a aplicação seja encerrada neste ponto, escrevendo na página “Falha na conexão”. mysql_select_db()<br />
<br />
bool mysql_select_db ( stri ng database_name [, resource link_identifier])<br />
<br />
Seleciona um banco de dados MySQL. Retorna TRUE em caso de sucesso ou FALSE em falhas. O primeiro parâmetro indica o nome do banco de dados e o segundo o recurso (que geralmente é o retorno do comando mysql_connect, o qual possui o link com o servidor) mysql_query()<br />
<br />
resource mysql_query ( string query [, resource link_ identifier [, int result_mode]])<br />
<br />
O comando envia uma consulta ao banco de dados ativo no servidor que está associado ao identificador de link (parâmetro link_identifer ). Se o link não for especificado, o último link cr iado é utilizado. Somente para os comandos SQL SELECT, SHOW, EXPLAIN ou DESCRIBE que o comando retorna um identificador de recurso ou falso caso a consulta não seja executada corretamente. Para outros comandos SQL, o comando retorna true caso bem sucedido e false em caso de falhas. mysql_num_rows()<br />
<br />
int mysql_num_rows ( resource result)<br />
<br />
O comando retorna o número de tuplas (linhas) em um conjunto de resultados. Este comando somente é válido para declarações SQL do tipo SELECT. O parâmetro utilizado geralmente é o resultado de um comando mysql_query mysql_affected_rows()<br />
<br />
int mysql_affected_rows ( [resource link_identifier])<br />
<br />
Tal instrução ao banco de dados retorna o número de tuplas (linhas) afetadas por declarações SQL do tipo INSERT, UPDATE ou DELETE, associadas com um identificador de link de conexão. Caso a última execução tenha sido uma instrução DELETE sem uma cláusula WHERE, todos os registros serão apagados, porém a função retornará zero. Exemplo: 1. <?php 2. mysql_pconnect("localhost", "mysql_user", "mysql_password") or die ("Impossível conectar"); 3. mysql_query("UPDATE mytable SET used=1 WHERE id < 10"); 4. printf ("%d registros atualizados", mysql_affected_rows()); 5. ?> mysql_result()<br />
<br />
mixed mysql_result ( resource result, int row [, mixed field])<br />
<br />
Retorna o conteúdo de uma célula de um conjunto de resultados MySQL. O campo de argumento pode ser o índice ou nome, ou ainda o nome da tabela ponto nome do campo (tabela.campo). Se o nome da coluna foi apelidado (“SELECT nomecompleto as nome from...”), o desenvolvedor deverá usar o apelido ao invés do nome do campo. O primeiro parâmetro é o link da c onexão, o segundo é a linha do conjunto de resultado e o terceiro é o nome do campo.<br />
<br />
Rede e-Tec Brasil<br />
<br />
110<br />
<br />
Programação para WEB<br />
<br />
array mysql_fetch_row ( resource result)<br />
<br />
mysql_fetch_row()<br />
<br />
Retorna um Array que corresponde à linha buscada, ou false caso não haja nenhuma linha. O comando busca uma linha de dados no resultado associado com um identificador de resultado especificado. A linha é retornada como um Array, onde cada resultado é armazenado em um índice, iniciando em zero (0). bool mysql_close ( [resource link_identifier])<br />
<br />
mysql_close()<br />
<br />
É utilizado para fechar a conexão com o banco de dados. O parâmetro é o link de conexão. Sessões session_start()<br />
<br />
bool session_start ( void)<br />
<br />
O comando cria uma sessão (ou continua a sessão atual baseada no identificador que pode ser passado por uma variável GET ou mesmo um cookie). Se for necessário nomear uma sessão, o comando session_name() deve ser utilizado logo antes da chamada do comando. Esta função sempre retorna verdadeiro. session_register()<br />
<br />
bool session_register ( mixed name [, mixed ...])<br />
<br />
Este comando aceita um número variável de argumentos, cada qual pode ser ou uma string que contém o nome da variável ou um Array consistindo de nomes de variáveis ou outros Arrays. Para cada nome, o comando registra a variável global com o nome que tem na sess ão corrente. Exemplo: 1. $barney = "A big purple dinosaur."; 1. session_register("barney"); 2. 3. $HTTP_SESSION_VARS["zim"] = "An invader from another planet."; 4. 5. # the auto-global $_SESSION array was introduced in PHP 4.1.0 6. $_SESSION["spongebob"] = "He's got square pants."; session_register<br />
<br />
bool session_register ( mixed name [, mixed ...])<br />
<br />
Função que registra uma variável, informada no parâmetro name, na sessão. Esta função foi preterida (DEPRECATED) a partir da versão 5 do PHP, e a partir da versão 6 não será mais utilizada. Ela é substituída pela adição direta no Array que r epresenta, globalmente, a sessão. Exemplo: 1. $_SESSION["usuario"] = $user_ent No exemplo, a variável $user_ent será registrada como usuário na sessão.<br />
<br />
Duas funções em particular devem ter uma atenção maior, pois aparentemente executam o mesmo processo dentro de um sistema PHP: echo e print . Alguns itens que podem ser comparados: • Velocidade: echo é um pouco mais rápida que print • Expressão: print se comporta como uma função, pois retorna verdadeiro caso a impressão tenha tido sucesso. • Parâmetros: echo pode imprimir vários parâmetros separados por vírgula, enquanto que print pode apenas imprimir um parâmetro.<br />
<br />
Resumo A programação de sites dinâmicos na WEB avançou muito nos últimos anos. As linguagens para o desenvolvimento no lado servidor têm constantemente apresentado novas versões ao mercado e principalmente o uso de fra-<br />
<br />
Aula 5 - Programação para WEB “lado servidor”<br />
<br />
111<br />
<br />
Rede e-Tec Brasil<br />
<br />
meworks vem otimizando a disponibilização de novos conteúdos.<br />
<br />
Esta aula teve, como objetivo, lançar uma primeira visão da programação voltada a servidores para WEB, e sabe-se que ainda há muito o que avançar e apresentar quanto às formas de se valorizar páginas realmente bem feitas.<br />
<br />
Atividades de aprendizagem 1. Utilizando PHP, crie códigos para: a) Imprimir o valor de duas variáveis do tipo texto. b) Imprimir as duas variáveis de texto concatenadas. c) Verique se uma data informada pelo usuário é válida 2. Implemente uma calculadora com 5 operações básicas (+,-,*,/,% - resto da divisão), usando radio buttons e duas entradas de dados. 3. Desenvolva um programa em PHP que, a partir de um número informado<br />
<br />
pelo usuário, retorne uma tabela com a taboada deste número. Prezado(a) estudante, É certo que desde o advento da WEB e sua popularização, muitas empresas e autônomos têm investido no desenvolvimento de sistemas que podem ser acessados de qualquer parte do mundo. A linguagem PHP, demonstrada nesta aula, é uma das linguagens mais utilizadas para programação Web no mundo inteiro! A próxima aula apresenta o desenvolvimento de um site completo, explicando passo a passo desde a montagem das telas, dos cadastros e da construção do banco de dados. É a aula que vai agregar todos os processos já aprendidos neste módulo. .<br />
<br />
Rede e-Tec Brasil<br />
<br />
112<br />
<br />
Programação para WEB<br />
<br />
Aula 6. Programação para WEB “lado servidor” – estudo experimental Objetivos: • reconhecer o uso da linguagem PHP na prática; • identicar o banco de dados MySQL como ferramenta de armazenamento de dados prática e leve para WEB como PHP; e • utilizar as práticas ágeis de programação para WEB<br />
<br />
Caro(a) estudante, Esta é a última aula da disciplina. Agora é “mão na massa”. Esta aula demonstra a construção de um site de ponta a ponta, utilizando todos os recursos aprendidos nas 5 aulas anteriores de Programação para Web. Você vai perceber que poderá construir facilmente uma aplicação para o cadastro de pessoas, e ainda, com o conhecimento adquirido, poderá melhorar o exemplo aqui descrito. Instale já as ferramentas e comece o desenvolvimento de um novo mundo na internet! Com o intuito de demonstrar a linguagem PHP na prática, utilizando funções e bancos de dados, esta aula apresenta um estudo de caso de cadastro de clientes, utilizando banco de dados MySQL. A aplicação é simples, apresentando o cadastro do cliente (CRUD), vericação de clientes cadastrados, login para acesso e área administrativa. Para a construção do aplicativo vários programas podem ser utilizados. Diversas empresas e grupos de estudo têm lançado implementações cada vez melhores e mais completas para se trabalhar com PHP, Apache e MySQL em conjunto. Como agora vamos armazenar os dados, precisamos conhecer comandos para acesso e controle de informações de um banco de dados.<br />
<br />
Aula 6 - Programação para WEB “lado servidor” – estudo experimental<br />
<br />
113<br />
<br />
Para os exemplos deste caderno foi utilizado o suíte WAMP, que pode ser encontrado no site http://www.wampserver. com/<br />
<br />
Rede e-Tec Brasil<br />
<br />
6.1 Funções especícas para controle de banco de dados e sessões Para se trabalhar com PHP utilizando banco de dados, os desenvolvedores podem utilizar funções nativas para acesso a tais bancos. Esta aula traz demonstrações de como utilizar o banco de dados MySQL. Para armazenar valores de variáveis com a nalidade de construir aplicações que necessitem de login e até mesmo para desenvolver aplicações de comércio eletrônico que precisam de um carrinho de compras, nor malmente se faz a utilização de sessões. Assim, a tabela 8 apresenta as funções que podem ser utilizadas tanto para acesso a banco de dados quanto para utilização de sessões. Tabela 8 - Funções para banco de dados MySQL e sessões com PHP Banco de Dados mysql_connect()<br />
<br />
resource mysql_connect([string server [, string username [, string password [, bool new_link]]]])<br />
<br />
Abre uma conexão com um banco de dados My SQL. A função retorna um link para o banco de dados em MySQL ou falso caso não haja conexão com o banco. Exemplo: 8. <?php 9. $link = mysql_connect("localhost", "mysql_user", "mysql_password") 10.<br />
<br />
11. 12. 13.<br />
<br />
or die("Falha na conexão");<br />
<br />
print ("Conectado"); mysql_close($link);<br />
<br />
?> O código die presente na linha 2 f az com que a aplicação seja encerrada neste ponto, escrevendo na página “Falha na conexão”.<br />
<br />
mysql_select_db()<br />
<br />
bool mysql_select_db ( str ing database_name [, resource link_identifier])<br />
<br />
Seleciona um banco de dados MySQL. Retorna TRUE em caso de sucesso ou FALSE em falhas. O primeiro parâmetro indica o nome do banco de dados e o segundo o recurso (que geralmente é o retorno do comando mysql_connect , o qual possui o link com o servidor). mysql_query()<br />
<br />
resource mysql_query ( string query [, resource link_ identifier [, int result_mode]])<br />
<br />
O comando envia uma consulta ao banco de dados ativo no servidor que está associado ao identificador de link (parâmetro link_identifer ). Se o link não for especificado, o último link cr iado é utilizado. Somente para os comandos SQL SELECT, SHOW, EXPLAIN ou DESCRIBE que o comando retorna um identificador de recurso ou falso caso a consulta não seja executada corretamente. Para outros comandos SQL, o comando retorna true caso bem sucedido e false em caso de falhas. mysql_num_rows()<br />
<br />
int mysql_num_rows ( resource result)<br />
<br />
O comando retorna o número de tuplas (linhas) em um conjunto de resultados. Este comando somente é válido para declarações SQL do tipo SELECT. O parâmetro utilizado geralmente é o resultado de um comando mysql_query <br />
<br />
Rede e-Tec Brasil<br />
<br />
114<br />
<br />
Programação para WEB<br />
<br />
mysql_affected_rows()<br />
<br />
int mysql_affected_rows ( [resource link_identifier])<br />
<br />
Tal instrução ao banco de dados retorna o número de tuplas (linhas) afetadas por declarações SQL do tipo INSERT, UPDATE ou DELETE associadas com um identificador de link de conexão. Caso a última execução tenha sido uma instrução DELETE sem uma cláusula WHERE, todos os registros serão apagados, porém a função retornará zero. Exemplo: 14. <?php 15. mysql_pconnect("localhos t", "mysql_user", "mysql_password") or die ("Impossível conectar"); 16. mysql_query("UPDATE mytable SET used=1 WHERE id < 10"); 17. printf ("%d registros atualizados", mysql_affected_rows()); 18. ?> mysql_result()<br />
<br />
mixed mysql_result ( resource result, int row [, mixed field])<br />
<br />
Retorna o conteúdo de uma célula de um conjunto de resultados MySQL. O campo de argumento pode ser o índice ou nome, ou ainda o nome da tabela ponto nome do campo (tabela.campo). Se o nome da coluna foi apelidado (“SELECT nomecompleto as nome from...”), o desenvolvedor deverá usar o apelido ao invés do nome do campo. O primeiro parâmetro é o link da conexão, o segundo é a linha do conjunto de resultado e o terceiro é o nome do campo. array mysql_fetch_row ( resource result)<br />
<br />
mysql_fetch_row()<br />
<br />
Retorna um Array que corresponde à linha buscada, ou false caso não haja nenhuma linha. O comando busca uma linha de dados no resultado associado com um identificador de resultado especificado. A linha é retornada como um Array, onde cada resultado é armazenado em um índice, iniciando em zero (0). bool mysql_close ( [resource link_identifier])<br />
<br />
mysql_close()<br />
<br />
É utilizado para fechar a conexão com o banco de dados. O parâmetro é o link de conexão. Sessões session_start()<br />
<br />
bool session_start ( void)<br />
<br />
O comando cria uma sessão (ou continua a sessão atual baseada no identificador que pode ser passado por uma variável GET ou mesmo um cookie). Se for necessário nomear uma sessão, o comando session_name() deve ser utilizado logo antes da chamada do comando. Esta função sempre retorna verdadeiro. session_register()<br />
<br />
bool session_register ( mixed name [, mixed ...])<br />
<br />
Este comando aceita um número variável de argumentos, cada qual pode ser ou uma string que contém o nome da variável ou um Array consist indo de nomes de variáveis ou outros Arrays. Para cada nome, o comando registra a variável global com o nome que tem na sess ão corrente. Exemplo: 19. $barney = "A big purple dinosaur."; 20. session_register("barney"); 21. 22. $HTTP_SESSION_VARS["zim"] = "An invader from another planet."; 23. 24. # the auto-global $_SESSION array was introduced in PHP 4.1.0 25. $_SESSION["spongebob"] = "He's got square pants."; session_register<br />
<br />
bool session_register ( mixed name [, mixed ...])<br />
<br />
Função que registra uma variável, informada no parâmetro name, na sessão. Esta função foi preterida (DEPRECATED) a partir da versão 5 do PHP, e a partir da versão 6 não será mais utilizada. Ela é substituída pela adição direta no Array que r epresenta, globalmente, a sessão. Exemplo: 6. $_SESSION["usuario"] = $user_ent No exemplo, a variável $user_ent será registrada como usuário na sessão.<br />
<br />
Aula 6 - Programação para WEB “lado servidor” – estudo experimental<br />
<br />
115<br />
<br />
Caso o desenvolvedor utilize outro banco de dados pode-se pesquisar em www.php.net os comandos necessários para controlar outros SGBDs.<br />
<br />
Rede e-Tec Brasil<br />
<br />
Observe a seguir como pode ser construído um banco de dados. Você já sabe criar um banco de dados? No próximo tópico vamos mostrar a estrutura do banco de dados utilizado no exemplo e também como você pode construir o seu.<br />
<br />
6.2 Criação do banco de dados A criação do banco de dados em MySQL será efetuada através de comandos. O usuário poderá escolher qualquer interface para efetuar a construção das tabelas. A tabela 06 apresenta a estrutura das tabelas a serem construídas no banco de dados. Tabela 6 – Estrutura das tabelas no Banco de Dados Tabela de Clientes<br />
<br />
tb_clientes<br />
<br />
id_user<br />
<br />
Número auto – incremento (chave primária)<br />
<br />
inclusao_user<br />
<br />
Data e horário do cadastro do cliente<br />
<br />
user<br />
<br />
apelido do cliente<br />
<br />
senha<br />
<br />
senha do cliente<br />
<br />
nome_user<br />
<br />
Nome completo<br />
<br />
end_user<br />
<br />
Endereço<br />
<br />
bairro_user<br />
<br />
Bairro<br />
<br />
email_user<br />
<br />
Email<br />
<br />
tel_user<br />
<br />
Telefone<br />
<br />
cidade_user<br />
<br />
Cidade<br />
<br />
estado_user<br />
<br />
Código do Estado<br />
<br />
Tabela de Estados<br />
<br />
tb_estados<br />
<br />
id_estado<br />
<br />
Número auto – incremento (chave primária)<br />
<br />
estado<br />
<br />
Nome do Estado<br />
<br />
uf<br />
<br />
Sigla do Estado<br />
<br />
Tabela de Usuários<br />
<br />
tb_user<br />
<br />
id_user<br />
<br />
Número auto – incremento (chave primária)<br />
<br />
apelido<br />
<br />
Apelido do usuário com acesso ao sistema<br />
<br />
senha<br />
<br />
Senha do usuário que vai ter acesso ao sistema<br />
<br />
Para a criação das tabelas, deve-se anteriormente fazer a criação do banco de dados. O comando para a criação está no quadro 32. CREATE DATABASE loja;<br />
<br />
Quadro 32 – Criação do banco de dados Fonte: autor<br />
<br />
Rede e-Tec Brasil<br />
<br />
116<br />
<br />
Programação para WEB<br />
<br />
As tabelas podem ser criadas através dos códigos do quadro 33. CREATE TABLE tb_clientes( id_user int auto_increment primary key, inclusao_user datetime, nome_user varchar(80), end_user varchar(80), bairro_user varchar(40), email_user varchar(90), tel_user varchar(25), cidade_user varchar(80), estado_user int ); CREATE TABLE tb_estados( id_estado int auto_increment primary key, estado varchar(60), uf char(3) ); CREATE TABLE tb_user( id_user int auto_increment primary key, apelido varchar(60), senha varchar(20) );<br />
<br />
Quadro 33 – SQL para a criação de tabelas Fonte: autor<br />
<br />
Executando este comando dentro do editor de SQL do PHPMyAdmin o usuário fará a criação das três tabelas do banco de dados. Para que não seja necessário efetuar o cadastro manual de todos os estados e suas siglas, pode-se incluir todos através de comandos SQL. O quadro 34 apresenta este código (comando SQL: INSERT INTO).<br />
<br />
Aula 6 - Programação para WEB “lado servidor” – estudo experimental<br />
<br />
117<br />
<br />
Rede e-Tec Brasil<br />
<br />
INSERT INSERT INSERT INSERT INSERT INSERT INSERT al’); INSERT INSERT<br />
<br />
INTO INTO INTO INTO INTO INTO INTO<br />
<br />
tb_estados(uf,estado) tb_estados(uf,estado) tb_estados(uf,estado) tb_estados(uf,estado) tb_estados(uf,estado) tb_estados(uf,estado) tb_estados(uf,estado)<br />
<br />
VALUES(‘AC’,’Acre’); VALUES(‘AL’,’Alagoas’); VALUES(‘AP’,’Amapá’); VALUES(‘AM’,’Amazonas’); VALUES(‘BA’,’Bahia’); VALUES(‘CE’,’Ceará’); VALUES(‘DF’,’Distrito Feder-<br />
<br />
INTO tb_estados(uf,estado) VALUES(‘ES’,’Espírito Santo’); INTO tb_estados(uf,estado) VALUES(‘GO’,’Goiás’);<br />
<br />
INSERT INTO tb_estados(uf,estado) VALUES(‘MA’,’Maranhão’);<br />
<br />
INSERT INTO INSERT INTO Sul’); INSERT INTO INSERT INTO INSERT INTO INSERT INTO INSERT INTO INSERT INTO INSERT INTO Norte’); INSERT INTO Sul’); INSERT INTO INSERT INTO INSERT INTO INSERT INTO<br />
<br />
tb_estados(uf,estado) VALUES(‘MT’,’Mato Grosso’); tb_estados(uf,estado) VALUES(‘MS’,’Mato Grosso do tb_estados(uf,estado) tb_estados(uf,estado) tb_estados(uf,estado) tb_estados(uf,estado) tb_estados(uf,estado) tb_estados(uf,estado) tb_estados(uf,estado)<br />
<br />
VALUES(‘MG’,’Minas Gerais’); VALUES(‘PA’,’Pará’); VALUES(‘PB’,’Paraíba’); VALUES(‘PR’,’Paraná’); VALUES(‘PE’,’Pernambuco’); VALUES(‘PI’,’Piauí’); VALUES(‘RN’,’Rio Grande do<br />
<br />
tb_estados(uf,estado) VALUES(‘RS’,’Rio Grande do tb_estados(uf,estado) tb_estados(uf,estado) tb_estados(uf,estado) tb_estados(uf,estado)<br />
<br />
VALUES(‘RJ’,’Rio de Janeiro’); VALUES(‘RO’,’Rondônia’); VALUES(‘RR’,’Roraima’); VALUES(‘SC’,’Santa Catarina’);<br />
<br />
INSERT INTO tb_estados(uf,estado) VALUES(‘SP’,’São Paulo’);<br />
<br />
INSERT INTO tb_estados(uf,estado) VALUES(‘SE’,’Sergipe’); INSERT INTO tb_estados(uf,estado) VALUES(‘TO’,’Tocantins’);<br />
<br />
Quadro 34 – Inserção de todos os estados da federação. Fonte: autor<br />
<br />
6.3 Código de conexão com o banco de dados O sistema deste caso de uso tem como base dos dados o MySQL. Assim, as funções utilizadas serão as nativas ao banco de dados MySQL. O PHP possui várias funções nativas para acesso a banco de dados. Caso o sistema gerenciador de bancos de dados não esteja homologado na versão da linguagem que o desenvolvedor estiver utilizando, este pode fazer uso das funcionalidades do ODBC. O código arquivo utilizado para conexão com o banco de dad os está contido no quadro 35.<br />
<br />
Rede e-Tec Brasil<br />
<br />
118<br />
<br />
Programação para WEB<br />
<br />
<? $dbname="loja"; $usuario="root"; $senha="utfpr"; if(!($id = mysql_connect(“localhost”,$usuario,$senha))) { echo "<p class=\”erro\”>Não foi possível estabelecer uma conexão<br />
<br />
com o banco de dados.</p>"; exit; } if(!($con=mysql_select_db($dbname,$id))) { echo " <p class=\”erro\">Nome de usuário e senha inválidos para acesso ao banco de dados.</p>"; exit; } ?><br />
<br />
Quadro 35– Código para conexão com o banco de dados (arquivo conectar.php) Fonte: autor<br />
<br />
O código utilizado para conexão (quadro 35) possui as seguintes características: • Linhas 2, 3 e 4: denidas as variáveis para acesso ao banco $dbname, $usuario, $senha que signicam o nome do banco de dados, usuário e senha para acesso ao banco. • Linha 06: através do comando mysql_connect, informando a URL para o servidor (neste caso a própria máquina), nome de usuário e senha, o PHP fará uma conexão com o banco de dados. Caso haja algum erro, o comando retornará falso e uma mensagem de erro será impressa na tela. • Linha 10: caso a conexão seja bem sucedida, haverá a tentativa de selecionar o banco de dados “loja”. Nota-se que, como parâmetros do comando mysql_select_db, são passadas informações do nome do banco de dados e a variável que representa a conexão, $id. Este arquivo será utilizado toda vez que uma conexão com o banco de dados for necessária. Isoladamente não possui serventia alguma, porém deve ser utilizado em conjunto com outros scripts de acesso ao banco de dados. As informações serão sobre pág. E como zemos as páginas da aplicação? Como posso controlar tudo isso?<br />
<br />
Aula 6 - Programação para WEB “lado servidor” – estudo experimental<br />
<br />
119<br />
<br />
Rede e-Tec Brasil<br />
<br />
6.4 Páginas da WEB App A área administrativa é a área responsável por fazer o controle dos clientes cadastrados. Inclusão, alteração, consulta e exclusão (CRUD) de qualquer cliente poderão ser efetuados por esta interface. Haverá a utilização de sessões em PHP, pois há a necessidade de restringir o acesso a esta área. Esta parte conterá dois arquivos: index.php e sessao.php sendo estes a página inicial do sistema e o arquivo para vericação da sessão, respectivamente. <? include "conectar.php"; if(isset($apelido_login) && isset($senha_login)) { $sql = mysql_query("SELECT * FROM tb_user WHERE apelido='$apelido_login' AND senha='$senha_ login'",$con) or die("ERRO no comando SQL :".mysql_error()); if (mysql_num_rows($sql) > 0) { $id_loja = mysql_result($sql,0,"id_ user"); $apelido_loja = mysql_result($sql,0,"ap elido"); $senha_loja = mysql_result($sql,0,"senh a"); // dados da sessão<br />
<br />
<br />
<br />
session_start("loja"); $_SESSION["id_loja"] = $id_loja; $_SESSION["apelido_loja"] = $apelido_loja; $_SESSION["senha_loja"] = $senha_loja; header("Location:opcoes.php");<br />
<br />
<br />
<br />
} } ?> <html> <head> <title>Loja VEND.e.TUDO</title> </head> <body> <form name="frmLogin" method="post" action="<?= $PHP_SELF;?>"> <table width="40%" border="0" cellspacing="0" cellpadding="0"> <tr> <td colspan="2">Identicação< /td><br />
<br />
<br />
<br />
</tr> <tr> <td width="33%" height="25">Apelido:</td> <td width="67%" height="25"><input type="text" name="apelido_login"></<br />
<br />
td> <br />
<br />
</tr> <tr> <td width="33%" height="25">Senha:</td> <td width="67%" height="25"><input type="password" name="senha_login"></td> </tr> <tr> <td colspan="2"><input type="submit" name="entrar" value="Entrar >>"></td> </tr> </table> </form> </body> </html><br />
<br />
Quadro 36 – Código da página inicial (arquivo index.php) Fonte: autor<br />
<br />
Rede e-Tec Brasil<br />
<br />
120<br />
<br />
Programação para WEB<br />
<br />
O código do quadro 36: • Faz a inclusão do arquivo conectar.php através do comando include (linha 2). Como esta página inicial precisa de uma conexão com o banco de dados, através deste comando todo o código PHP do arquivo externo é executado e suas variáveis globais cam disponíveis. • Na linha 03 há a vericação quanto à digitação de apelido e senha do usuário. Na primeira vez que a página for acessada, tais valores não existirão pois as variáveis ainda não foram ajustadas, assim o comando isset() é utilizado. Depois que o usuário preencher os dois valores e submeter os dados, estas variáveis estarão valoradas e a vericação de usuário cadastrado poderá ser feita. • A linha 04 apresenta o código que faz a busca, no banco de dados, usuários que tenham o mesmo apelido e senha informados pelo cliente. O resultado desta consulta cará armazenado na variável $sql. • Através da comparação da quantidade de linhas retornadas da consulta (linha 7), o sistema saberá se o usuário está realmente cadastrado e sua senha correta. Em caso positivo, o script fará a geração de uma sessão com este usuário (linhas 8 a 15) através dos dados recuperados do banco de dados. • O código da linha 16 cria um novo cabeçalho HTTP para a página. Neste caso especíco haverá o redirecionamento do navegador para a página menu.php. O restante do código cria um formulário HTML para que o usuário possa fazer a entrada dos dados de login. A linha 23 do código apresenta, no atributo action do elemento FORM (que cria o formulário), uma variável pré-denida do PHP: $PHP_SELF. A variável $PHP_SELF só será encontrada pelo processador PHP caso a opção register_globals estiver ativada no arquivo php.ini. Caso contrário, o usuário deve utilizar $_SERVER[“$PHP_SELF”] .Esta variável retorna a URL da página atual, ou seja, ao submeter os dados a própria página será chamada para o processamento dos dados. A gura 01 apresenta o arquivo index.php renderizado no navegador.<br />
<br />
Aula 6 - Programação para WEB “lado servidor” – estudo experimental<br />
<br />
121<br />
<br />
Rede e-Tec Brasil<br />
<br />
Figura 01 – Formulário para login (índex.php)<br />
<br />
Fonte: autor<br />
<br />
Como o sistema é restrito, ou seja, apenas usuários logados com permissão de acesso, é necessário vericar em cada página se um usuário fez o acesso pela página de login. Para saber se ele fez o acesso e foi devidamente identicado, basta vericar a sessão: caso as variáveis $id_loja, $apelido_loja e $senha_loja estiverem registradas na sessão o usuário está logado. O código do quadro 37 apresenta o arquivo sessao.php. <? session_start("loja"); if(!(isset($_SESSION["id_loja"]) AND isset($_SESSION["apelido_loja"]) AND isset($_SESSION["senha_loja"]))) { echo "<p class=\"info\">Essa é uma área restrita</p>"; exit; } ?><br />
<br />
Quadro 37 – Código para vericar usuário logado (sessao.php) Fonte: autor<br />
<br />
Na linha 02 (quadro 37) o sistema inicializa a sessão “loja” e, posteriormente, há a vericação dos parâmetros. Caso algum deles não esteja registrado (pois a função ‘E lógico’ foi utilizada), o PHP exibe na tela uma mensagem de erro e encerra o aplicativo. Este código será incluído nas outras páginas através da função include(). O usuário precisa de um pequeno menu para escolher se quer Cadastrar Clientes ou Gerenciar Clientes. Assim, uma tela com duas opções pode ser criada. Exemplos no quadro 38 e na gura 02.<br />
<br />
Rede e-Tec Brasil<br />
<br />
122<br />
<br />
Programação para WEB<br />
<br />
<body> <table id="Table_01" width="263" border="0" cellpadding="0" cellspacing="0"> <tr> <td colspan="3"> <img id="menu_01" src="images/menu_01.gif" width="263" height="68" alt="" /> </td> </tr> <tr> <td rowspan="3"> <img id="menu_02" src="images/menu_02.gif" width="59" height="74" alt="" /> </td> <td> <a href="cadclientes.php" target="centro" rel="nofollow"> <img id="menu_03" src="images/menu_03.gif" width="174" height="32" border="0" alt="" /> </a> </td> <td rowspan="3"> <img id="menu_04" src="images/menu_04.gif" width="30" height="74" alt="" /> </td> </tr> <tr> <td> <a href="gerclientes.php" target="centro" rel="nofollow"> <img id="menu_05" src="images/menu_05.gif" width="174" height="34" border="0" alt="" /> </a> </td> </tr> </table> <iframe width="80%" height="400" name="centro" frameborder="0"></iframe> </body><br />
<br />
Quadro 38 – Código do menu.php<br />
<br />
Fonte: autor<br />
<br />
O código do quadro 38 apresenta um menu gerado a partir de uma ferramenta de autoria, somente para exemplicar que tais ferramentas também podem ser utilizadas para construir páginas. Note que os links estão sendo direcionados para um frame inteligente (IFRAME) que está localizado logo abaixo do menu. A diferença é que todos os links serão abertos neste espaço da página, ou seja, não precisaremos de uma nova janela.<br />
<br />
Figura 02 – Menu (menu.php) Fonte: autor<br />
<br />
O arquivo de cadastro de clientes (cadclientes.php) é descrito no quadro 39.<br />
<br />
Aula 6 - Programação para WEB “lado servidor” – estudo experimental<br />
<br />
123<br />
<br />
Rede e-Tec Brasil<br />
<br />
<? include "conectar.php"; include "ver_sessao.php"; include "funcoes.php"; ?> <html> <head> <title>Cadastro de clientes</title> <link href="loja.css" rel="stylesheet" type="text/css"> </head> <body> <h3>Cadastro de Clientes</h3> <div class="info">Todos os dados são obrigatórios</div> <? if(isset($acao) && $acao == 'cadastrar') cadastrar($acao); if(isset($acao) && $acao == 'entrar') { $sql_estados = mysql_query("SELECT * FROM tb_estados ORDER BY estado") or die("ERRO no comando SQL:".mysql_error()); ?> <form name="frm_clientes" method="post" action="<?echo $PHP_SELF;?>?acao=cadastrar"> <table width="80%" border="0" cellspacing="0" cellpadding="0" align="center"> <tr> <td width="24%" height="25" class="lblCampo">Nome:</td > <td height="25" width="76%"><input type="text" name="nome_user" size="35"></td> </tr> <tr> <td width="24%" height="25" class="lblCampo">Endere&cc edil;o:</td> <td height="25" width="76%"><input type="text" name="end_user" size="30"></td> </tr> <tr> <td width="24%" height="25" class="lblCampo">Bairro:</ td> <td height="25" width="76%"><input type="text" name="bairro_user" size="30"></td> </tr> <tr> <td width="24%" height="25" class="lblCampo">Email:</t d> <td height="25" width="76%"><input type="text" name="email_user" size="35"></td> </tr> <tr> <td width="24%" height="25" class="lblCampo">Telefone: </td> <td height="25" width="76%"><input type="text" name="tel_user" size="20"></td> </tr> <tr> <td width="24%" height="25" class="lblCampo">Cidade:</ td> <td height="25" width="76%"><input type="text" name="cidade_user" size="35"></td> </tr> <tr> <td width="24%" height="25" class="lblCampo">Estado:</ td> <td height="25" width="76%"> <select name="estado_user"> <option value="0">[selecione]</op tion> <? while($array = mysql_fetch_array($sql_e stados)) { ?> <option value="<?= $array['Id_estado'];?>" ><?= $array['estado'];?></opti on> <? } ?> </select> </td> </tr> <tr> <td height="25" colspan="2" class="fundo"><input type="submit" name="cadastrar" value="Cadastrar cliente"></td> </tr> </table> </form> <? } ?> </body> </html><br />
<br />
Quadro 39 – Código para inclu são de clientes no Banco de Dados (cadclientes.php) Fonte: autor<br />
<br />
Rede e-Tec Brasil<br />
<br />
124<br />
<br />
Programação para WEB<br />
<br />
O código tem características já vistas e algumas características de código especícas para o cadastro: • As linhas 2, 3 e 4 fazem a importação dos arquivos necessários para a conexão no banco de dados, para a vericação de sessão, ou seja, vericar se o usuário está logado permitindo assim o acesso à página e para que se tenha acesso à função de cadastro. Como tanto o cadastro quanto a alteração têm códigos de vericação de erros iguais, uma função chamada cadastrar($oque) foi criada, e seu código pode ser vericado no quadro 40. • As linhas 15 e 16 vericam qual ação que o PHP deverá tomar identicada através do parâmetro “acao". Caso o parâmetro seja: – cadastrar, a função de cadastro será chamada para efetuar a inclusão<br />
<br />
dos dados no banco de dados; – entrar, os dados da tabela que representa os estados serão carregados na variável $sql_estados para posterior geração do SELECT que seleciona o estado. O formulário para cadastro será impresso. Da linha 50 até a linha 54, é utilizado um código para gerar a entrada de dados para estado, onde as opções serão a chave primária Id_estado e o valor a ser mostrado será o nome do estado.<br />
<br />
Caso todos os dados forem informados, o cadastro será efetuado com sucesso no banco de dados. A função que faz o cadastro e alteração de clientes pode ser vista no quadro 40.<br />
<br />
Aula 6 - Programação para WEB “lado servidor” – estudo experimental<br />
<br />
125<br />
<br />
Rede e-Tec Brasil<br />
<br />
<?php function cadastrar($oque){ global $id_cliente; global $nome_user; global $end_user; global $bairro_user; global $email_user; global $tel_user; global $cidade_user; global $estado_user; $erros = ""; $html_erros = ""; if($nome_user == '') { $erros++; $html_erros = $html_erros."<br>Nome"; } if($end_user == '') { $erros++; $html_erros = $html_erros."<br>Endere&c cedil;o"; } if($bairro_user == '') { $erros++; $html_erros = $html_erros."<br>Bairro"; } if($email_user == '') { $erros++; $html_erros = $html_erros."<br>Email"; } if($tel_user == '') { $erros++; $html_erros = $html_erros."<br>Telefone "; } if($cidade_user == '') { $erros++; $html_erros = $html_erros."<br>Cidade"; } if($estado_user == 0) { $erros++; $html_erros = $html_erros."<br>Estado"; } if($erros == 0) { if ($oque == 'cadastrar') { $sql = mysql_query("INSERT INTO tb_clientes (inclusao_user,nome_user,end_user,bairro_ user,email_user, tel_user,cidade_user,estado_user) VALUES(now(),'$nome_user','$end_user','$bairro_user', '$email_user','$tel_user','$cidade_user','$estado_user')") or die("Erro no comando SQL:".mysql_error()); echo "<div align=center class=\"ok\">$oque Cliente cadastrado com Sucesso!!</ div>"; } elseif ($oque == 'alterar') { $sql = mysql_query("UPDATE tb_clientes SET nome_user='$nome_user' nome_user='$nome_user',end_user='$end_user', ,end_user='$end_user', bairro_user='$bairro_user',email_user='$email_user',tel_user='$tel_user', cidade_user='$cidade_user ',estado_user='$estado_use r' WHERE id_user='$id_cliente'") or die("Erro no comando SQL:".mysql_error()); echo "<div class=info>Dados do cliente $nome_user alterados com Sucesso!!</div>"; echo "<div class=info><a href='gerclientes.php?a cao=entrar' rel="nofollow">[Voltar]</a>"; } } else { echo "<div align=center class=\"erro\">ATEN&Cced il;ÃO: <b>$erros</b> erro(s) no cadastro</div>"; echo "<div align=center class=\"erro\">$html_e class=\"erro\">$html_erros<div/>"; rros<div/>"; } } ?><br />
<br />
Quadro 40 – Função de cadastro (arquivo funcoes.php) Fonte: autor<br />
<br />
Rede e-Tec Brasil<br />
<br />
126<br />
<br />
Programação para WEB<br />
<br />
No código do quadro 40, a função de cadastro tem as seguintes características: • Da linha 3 até a linha 10 a função informa que as variáveis de cadastro são globais (para que as variáveis do cadastro possam ser utilizadas dentro da função). • Entre a linha 11 e 40 há a vericação quanto ao preenchimento dos dados. Duas variáveis declaradas como $erros e $html_erros contém as informações da quantidade de erros e a informação infor mação do erro que deve ser repassada ao usuário, respectivamente. Assim, toda vez que um erro é encontrado, a quantidade de erros é incrementada e o texto do erro é informado. • Na linha 41 há a vericação da quantidade de erros. Caso a quantidade seja: – Igual a zero (0), os dados serão inseridos ou alterados no banco de<br />
<br />
dados (dependendo do parâmetro informado). – Diferente de zero (0) o usuário receberá uma mensagem de erro com a quantidade de erros e onde o erro está presente (qual variável não foi informada)<br />
<br />
O gerenciamento de clientes, que contém as funções de busca e alteração dos dados, é feita através do código do arquivo gerclientes.php, exibido no quadro 41, e o código renderizado no navegador na gura 03.<br />
<br />
Aula 6 - Programação para WEB “lado servidor” – estudo experimental<br />
<br />
127<br />
<br />
Rede e-Tec Brasil<br />
<br />
<? include "conectar.php"; //Conecta com a nosso banco de dados MySQL include "ver_sessao.php"; //Verica se a sessão está ativa<br />
<br />
?> <html> <head> <title>Pesquisa de clientes</title> <link href="loja.css" rel="stylesheet" type="text/css"> </head> <body> <? $sql_cliente = "SELECT id_user,date_format(inclusao_user,'%d/%m/%Y - %H:%i') as inclusao_user, nome_user,cidade_user,uf FROM tb_clientes,tb_estados WHERE tb_estados.id_estado = tb_clientes.estado_user"; if(isset($pesquisar) && $pesquisar == 'sim') { if (isset($pesq)) $sql_cliente = $sql_cliente." AND nome_user LIKE '%$pesq%'"; $sql_cliente = $sql_cliente." ORDER BY inclusao_user"; $sql_cliente = mysql_query($sql_cliente) or die("Erro no SQL: ".mysql_error()); } ?> <h3>Gerenciamento de Clientes</h3> <form name="frmPesq" method="post" action="<?= $PHP_SELF?>"> <table width="50%" border="0" cellspacing="1" cellpadding="0" align="center"> <tr class="fundo_titulo" > <td colspan="2">Pesquisa</td> </tr> <tr> <td width="45%" class="lblCampo">Nome a ser procurado:</td> <td width="55%"> <input type="text" name="pesq" size="25"> <input type="submit" name="btpesq" value="Pesquisar"> <input type="hidden" name="pesquisar" value="sim"> </td> </tr> </table> </form> <br> <? if(mysql_num_rows($sql_cliente) > 0) {?> <table width="60%" border="0" cellspacing="1" cellpadding="0" align="center"> <tr class="fundo_titulo" > <td colspan="5">Clientes cadastrados</td> </tr> <tr class="fundo_titulo2"> <th width="19%">Data de inclusão</th> <th width="33%">Cliente</th> <th width="23%">Cidade/UF</th> <th width="13%">Alterar</th> <th width="12%">Excluir</th> </tr> <? while($array_cliente = mysql_fetch_array($sql_cliente)) {?> <tr class="fundo_lista"> <td width="19%" height="25"> <?= $array_cliente['inclusao_user'];?> </td> <td width="33%" height="25"> <?= $array_cliente['nome_user'];?> </td> <td width="23%" height="25"> <?= $array_cliente['cidade_user'];?>/<?= $array_cliente['uf'];?> </td> <td width="13%" height="25"> [<a href='altclientes.php?id_cliente=<?= $array_cliente['id_ user'];? rel="nofollow">&acao=entrar'>Alterar</a>] </td> <td width="12%" height="25"> [<a href='excluirclientes.php?id_clie nte=<?= $array_cliente['id_ user'];? rel="nofollow">'>Excluir</a>] </td> </tr> <?}?> </table> <? } else { echo "<div class=\"info\">Nenhum cliente foi encontrado</div>"; }?> <div class="info"><a href='menu.php' rel="nofollow">[ Voltar para o menu de opções ]</ a><div> </body> </html><br />
<br />
Quadro 41 – Código para a p ágina de gerenciamento de Clientes (gerclientes.php) Fonte: autor<br />
<br />
Rede e-Tec Brasil<br />
<br />
128<br />
<br />
Programação para WEB<br />
<br />
Para efetuar um correto gerenciamento de clientes, o código contém: • As linhas 2 e 3 fazem a importação dos arquivos de conexão com o banco e vericação de usuário logado. • Da linha 12 a 17, o código fará a consulta aos clientes cadastrados no banco de dados, caso a opção pesquisar tenha sido enviada. A linha 14 faz uma alteração na busca somente se o usuário informou um nome a ser pesquisado, incluindo a palavra na pesquisa com WHERE. A cláusula SQL também utiliza, na linha 12, uma função nativa chamada date_format(), que retorna a data do banco de dados formatada conforme os parâmetros informados (no caso dia/mês/ano – hora:minuto). • Da linha 19 a 34 é construído o formulário para pesquisa. • Da linha 37 a 66 o código gera uma listagem dos clientes cadastrados, através do resultado da pesquisa efetuada no início do código. A linha 58 gera um link para que o cliente possa acessar a página de alteração de clientes, informando como parâmetro o identicador único do usuário; na linha 60 o link gerado é para referenciar a página de exclusão do cliente. • Ao nal, na linha 67, o código gera um link para que o usuário possa voltar ao Menu de Opções do sistema.<br />
<br />
Figura 03 – Gerenciamento de Clientes (gerclientes.php) Fonte: autor<br />
<br />
A página de alteração e exclusão do cliente necessita que se passe, por parâmetro, o identicador único para que possa ser localizado no banco de dados, e a ação seja tomada. No quadro 41 está contido o código para o arquivo de alteração do cliente.<br />
<br />
Aula 6 - Programação para WEB “lado servidor” – estudo experimental<br />
<br />
129<br />
<br />
Rede e-Tec Brasil<br />
<br />
<? include "conectar.php"; include "ver_sessao.php"; include "funcoes.php" ?> <html> <head> <title>Alteração de Dados do Cliente</title><br />
<br />
</head> <body> <h3>Alteração de dados de Cliente</h3> <? if (isset($acao) && $acao == 'alterar') cadastrar($acao); if (isset($acao) && $acao == 'entrar') { $sql_cliente = mysql_query("SELECT * FROM tb_clientes WHERE id_user='$id_cliente'") or die("ERRO no comando SQL:".mysql_error()); $array_cliente = mysql_fetch_array($sql_cliente); $sql_estados = mysql_query("SELECT * FROM tb_estados ORDER BY estado") or die("ERRO no comando SQL:".mysql_error()); ?> <form name="frm_clientes" method="post" action="<?echo $PHP_ SELF;?>?acao=alterar"> <table width="80%" border="0" cellspacing="0" cellpadding="0" align="center"> <tr> <td width="24%" height="25" class="lblCampo">Nome:</td> <td height="25" width="76%"><input type="text" name="nome_user" size="35" value="<?= $array_cliente['nome_user'];?>"></td> </tr> <tr> <td width="24%" height="25" class="lblCampo">Endereço:</t d> <td height="25" width="76%"><input type="text" name="end_user" size="30" value="<?= $array_cliente['end_user'];?>"></td> </tr> <tr> <td width="24%" height="25" class="lblCampo">Bairro:</td> <td height="25" width="76%"><input type="text" name="bairro_user" size="30" value="<?= $array_cliente['bairro_user'];?>"></td> </tr> <tr> <td width="24%" height="25" class="lblCampo">Email:</td> <td height="25" width="76%"><input type="text" name="email_user" size="35" value="<?= $array_cliente['email_user'];?>"></td> </tr> <tr> <td width="24%" height="25" class="lblCampo">Telefone:</td> <td height="25" width="76%"><input type="text" name="tel_user" size="20" value="<?= $array_cliente['tel_user'];?>"></td> </tr> <tr> <td width="24%" height="25" class="lblCampo">Cidade:</td> <td height="25" width="76%"><input type="text" name="cidade_user" size="35" value="<?= $array_cliente['cidade_user'];?>"></td> </tr> <tr> <td width="24%" height="25" class="lblCampo">Estado:</td> <td height="25" width="76%"> <select name="estado_user"> <option value="0">[selecione]</option> <? while($array = mysql_fetch_array($sql_estados)) { $estado_cliente = $array_cliente['estado_user']; $cod_estado = $array['Id_estado']; $estado = $array['estado']; if($estado_cliente == $cod_estado) echo "<option value='$estado_cliente' selected>$estado</option>"; else echo "<option value='$cod_estado'>$estado</option>"; }?> </select></font></td> </tr> <tr> <td height="25" colspan="2"> <div align="center"> <input type="submit" name="alterar" value="Alterar dados >>"><br />
<br />
Rede e-Tec Brasil<br />
<br />
130<br />
<br />
Programação para WEB<br />
<br />
<input type="hidden" name="id_cliente" value="<?echo $array_ cliente['id_user'];?>"> </div></td> </tr> </table> </form> <? } ?> </body> </html><br />
<br />
Quadro 42 – Código para alteração de clientes no Banco de Dados (altclientes.php) Fonte: autor<br />
<br />
O código para alteração dos dados é praticamente igual ao do cadastro. Algumas diferenças podem ser pontuadas: • A linha 13 verica a ação a ser tomada e chama a função cadastrar, com a opção de alteração. • Na linha 14 o código verica se a ação for entrar. Em caso positivo, o cliente identicado é procurado no banco de dados, um vetor com os dados do cliente é preenchido e outro vetor é preenchido com todos os estados cadastrados. • O formulário é praticamente o mesmo, porém os valores dos campos são informados para que o usuário possa alterar os valores existentes. Estes valores são obtidos através do vetor $array_cliente populado anteriormente. • O código passa, ainda, um campo escondido (denido na linha 68) que é a identicação do cliente, para que o código da função de alteração saiba qual cliente deve ser alterado. Depois de modicar as informações preenchidas, o cliente clica em alterar e os dados (caso todos estiverem preenchidos) são alterados no banco de dados, identicado pela chave primária. A última parte do código é a exclusão do cliente selecionado. Através da página de gerenciamento, o usuário pressiona “Excluir” e a página com o código de exclusão é chamada, concatenada à URL o código do cliente a ser excluído. O código para a página de exclusão está no quadro 43.<br />
<br />
Aula 6 - Programação para WEB “lado servidor” – estudo experimental<br />
<br />
131<br />
<br />
Rede e-Tec Brasil<br />
<br />
<html> <head> <title>Exclusão de Clientes</title><br />
<br />
<link href="loja.css" rel="stylesheet" type="text/css"> </head> <body> <? include "conectar.php"; include "ver_sessao.php"; $sql_del = mysql_query("delete from tb_clientes where id_user='$id_cliente'") or die("<div class=\"erro\">erro no sql: ".mysql_error()."</div> "); echo "<div class=\"ok\">cliente excluído com sucesso!</div>"; echo "<div class=info><a href='gerclientes.php?acao=entrar' rel="nofollow">[voltar]</a>"; ?> </body> </html><br />
<br />
Quadro 43 – Código para exclusão do cliente (excluircliente.php) Fonte: autor<br />
<br />
O código do quadro 43 apresenta: • Nas linhas 8 e 9 o PHP irá incluir o código de conexão e de vericação de cliente logado • A linha 10 cria a consulta SQL que fará a exclusão do cliente indicado pela variável $id_cliente (que é passada através da URL durante o processo de gerenciamento do cliente). • Caso haja erro, o sistema encerra a sua execução e identica o erro. Em caso contrário, é exibida uma frase de sucesso e o usuário poderá retornar à listagem pressionando o link “[Voltar] O acesso a banco de dados pode ser feito de várias formas. O estudo de caso apresentado mostra os principais itens de uma área administrativa de sites dinâmicos, aplicando o conceito de sessões para fazer o controle de acesso e consultas SQL para o retorno de dados e a sua alteração no MySQL. Maiores informações sobre o controle do PHP com Bancos de Dados pode ser obtida através do acesso às referências bibliográcas.<br />
<br />
Resumo Esta aula complementou o conteúdo das aulas anteriores para a construção de um site. A programação para WEB é algo que está crescendo a cada dia. Mais frameworks e novas formas para facilitar o desenho de páginas estão surgindo. A rede mundial de computadores mudou a forma da população mundial pensar e, portanto, a cabeça dos desenvolvedores também tomou um novo<br />
<br />
Rede e-Tec Brasil<br />
<br />
132<br />
<br />
Programação para WEB<br />
<br />
rumo na programação cliente-servidor. O desenvolvimento voltado a banco de dados é imprescindível atualmente. Utilizando uma aplicação como WAMP, você tem acesso facilitado a um banco de dados muito utilizado no mundo inteiro: o MySQL. A conguração de todo o ambiente é facilitada, e a exportação para o servidor, onde cará hospedado o site, é praticamente transparente, pois o conjunto de pastas, arquivos e conguração pode ser utilizado da mesma forma. Construir um controle de clientes on-line é importante, pois o gerenciamento remoto destes dados evita a duplicidade. Usar ícones e cores, ajustando suas características via CSS, faz com que a aplicação que dinâmica e permita uma rápida e fácil manutenção. Observe também que, no exemplo, foi desenvolvida uma área visando a segurança, onde o usuário deve informar senhas para acesso. As linguagens PHP e Javascript , quando trabalhadas em conjunto, formam um poderoso time de aliados aos desenvolvedores, pois passando por aprimoramentos em várias versões, tornaram-se o principal alvo de comércios eletrônicos espalhados pelo mundo, tanto na forma de frameworks como o Zope tanto em sua forma pura, podendo ser congurada e rodada tanto em Windows como Linux. Verdade seja dita: a programação WEB não cairá de moda tão facilmente e, portanto, é uma grande área para aperfeiçoamento e investimento.<br />
<br />
Atividades de aprendizagem 1. Faça uma pesquisa em alguns frameworks para a linguagem PHP. Cite e descreva aqui dois destes frameworks. 2. Explique o que cada um dos comandos abaixo “faz” em PHP a) mysql_connect([string $server [,string $username[, string $password]]] ) b) explode(string $delimiter , string $string [, int $limit ]) c) strtoupper(string $string) d) session_start()<br />
<br />
Aula 6 - Programação para WEB “lado servidor” – estudo experimental<br />
<br />
133<br />
<br />
Rede e-Tec Brasil<br />
<br />
Prezado(a) estudante. Você nalizou a última aula da disciplina. Não deixe de realizar as aitividades de aprendizagem que são um complemento dela.Leias nossas Palavras nais e depois conra seu grau de acrto nas atividades efetuadas. Não desista de continuar seu processo de aprendizagem pois ele nunca termina.<br />
<br />
Rede e-Tec Brasil<br />
<br />
134<br />
<br />
Programação para WEB<br />
<br />
Palavras nais Você chegou ao m desta disciplina e acredito que deu um passo relevante para sua formação prossional. No entanto é importante que você continue estudando, pesquisando e buscando atualizar-se , pois esta área está em constante mudança e é preciso estar sempre em dia para continuar inserido no competitivo mercado de trabalho atual. Prever o futuro da programação é algo complicado, porém pode se ter (quase) certeza que a maioria dos aplicativos terão características distribuídas, executará na Web ou em serviços muito parecidos, e envolverá uma gama muito grande de dispositivos (geladeiras, aparelhos de televisão e carros). Outra grande lição que temos é que os programas terão que ser atrativos, com uma interface bem distribuída, limpa e acessível a qualquer pessoa, independentemente de sua idade. O conteúdo desta disciplina tratou do processo básico da construção de um Web Site, iniciando pela criação da Internet, passando pelas linguagens de marcação e por linguagens de formatação de conteúdo, até chegar à programação lado cliente e lado servidor. Porém, durante a construção de um Web Site, não se pode pensar apenas nas questões técnicas, mas algumas perguntas são relevantes: • Quais são os requisitos do cliente? Precisamos saber se o aplicativo para Web que está sendo construído supre as necessidades de seus usuários, e também se há uma relevância no seu desenvolvimento. • Onde este sistema será hospedado? É importante ter ciência da velocidade de processamento, qual o volume de transferência de dados disponível, quanto espaço em disco estará disponível e se o sistema estará seguro. A dependência destes quatro fatores pode ser crucial no momento do planejamento e do desenvolvimento desta aplicação. • Qual o comportamento da interface do sistema em diferentes dispositivos e diferentes tamanhos de telas? Muitas vezes esquecemos que, atualmente, o acesso à Web está presente em telefones celulares, aparelhos de televisão, geladeiras, dispositivos GPS para carros e muitos outros aparelhos, que possuem telas muito diferentes entre si. Muitas perguntas ainda podem ser feitas, mas é importante que haja sempre<br />
<br />
135<br />
<br />
Rede e-Tec Brasil<br />
<br />
uma evolução na forma de se programar sistemas. Não foi aqui abordado, mas é muito importante que você inicie um estudo sobre os frameworks de programação para Web. A linguagem PHP aqui mostrada oferece inúmeras possibilidades, tanto no acesso a dados, na formatação de conteúdo, em termos de segurança no acesso e também na construção de códigos limpos. Enm, muitas possibilidades estão disponíveis na grande rede de informação que cerca o mundo. Prossiga em seu processo de aprendizagem. Um grande abraço!<br />
<br />
Rede e-Tec Brasil<br />
<br />
136<br />
<br />
Programação para WEB<br />
<br />
Guia de Soluções Atividades - Aula 1 1. Cite e comente cinco das principais características da internet.<br />
<br />
• Hipertexto: a navegação entre as páginas da internet ocorre através de ligações (links), que permitem que se possa ir de uma página a outra (página dentro de página - texto dentro de texto). • Multimídia: Várias formas de se postar conteúdo. Vídeos, fotos, sons, textos completos, etc. • Interatividade: possibilidade de interação com usuários através de formulários. • Globalização: como é uma rede do tipo WAN - Wide Area Network, abrange uma grande parte do planeta (se não todo). • Rede de redes: diversas redes isoladas interagem em uma única e grande rede, através de protocolos. 2. O acesso à internet, principalmente à WEB, é feito através de navegadores<br />
<br />
(browsers). Enumere os principais navegadores atuais e suas diferenças tanto na usabilidade como nos recursos disponíveis a usuários e também para desenvolvedores • Microsoft Internet Explorer (Agosto de 1995): Windows Internet Explorer, também conhecido pelas abreviações IE, MSIE ou WinIE, é um navegador de internet de licença proprietária. É considerado o navegador mais popular no mercado apesar de ser o mais atrasado em termos de tecnologia e a queda signicativa no número de usuários. Desde o lançamento da versão 7 do navegador, o nome ocial foi então alterado de "Microsoft Internet Explorer" para "Windows Internet Explorer", por causa da integração com a linha Windows Live. O Internet Explorer foi sendo, ao longo dos anos, apontado como um software com numerosas falhas de segurança.[7] [8] [9] [10] Programas maliciosos ou oportunistas exploravam brechas para roubar informações pessoais.<br />
<br />
137<br />
<br />
Rede e-Tec Brasil<br />
<br />
• Mozilla Firefox (Novembro de 2004): Mozilla Firefox é um navegador livre e multi-plataforma desenvolvido pela Mozilla Foundation (em português: Fundação Mozilla) com ajuda de centenas de colaboradores (cerca de 40% do código do programa foi totalmente escrito por voluntários). Possui grande compatibilidade com CSS3 e HTML5. A maior vantagem sobre outros navegadores é a quantidade de plug-ins externos que podem ser instalados (cerca de 17.000 complementos disponíveis em julho de 2012 ultrapassando a marca de 3 bilhões de downloads). A arquitetura de programação do Firefox é baseada em extensões. Tal característica é apontada por alguns como um dos aspectos que supostamente tornariam o navegador seguro. Através de extensões, os usuários podem agregar novas funções, como gestos do mouse, bloqueio de publicidade, ferramentas de vericação e ampliação de imagens, po r exemplo. O Mozilla Firefox funciona em vários sistemas operacionais. • Google Chrome (Setembro de 2008): O Google Chrome é um navegador desenvolvido pelo Google e compilado com base em componentes de código aberto como o motor de renderização, o WebKit, da Apple Inc. e sua estrutura de desenvolvimento de aplicações (Framework). Atualmente é o navegador mais rápido e leve do mercado e possui uma interface bastante limpa. Utiliza tecnologia webkit tornando-o o navegador mais compatível com o CSS3 e HTML5. O navegador está disponível em mais de 51 idiomas para as plataformas Windows, Mac OS X, Android, Ubuntu, Debian, Fedora e OpenSuSE. O Chrome envia detalhes de seu uso para a Google através de mecanismos de rastreamento, mas alguns desses mecanismos podem ser desativados pelo usuário. Atualmente, o Chrome é o navegador mais utilizado no mundo, com 32,43% dos usuários contra 32,12% do Internet Explorer e 25,55% do Mozilla Firefox, segundo a StatCounter. • Safari (Janeiro de 2003): O Safari é um navegador desenvolvido pela Apple Inc. e incluído como o navegador padrão a partir do sistema operacional Mac OS X v10.3 (Panther). Apresenta uma interface simples, característica dos produtos da Apple. Suas funções são básicas: abas, bloqueador de pop-ups, baixador de arquivos, leitor de notícias RSS, modo privado que evita o monitoramento da navegação por terceiros, etc. Tem o motor de renderização (layout engine) WebKit — um software que interpreta os códigos HTML e posiciona os elementos da página — sendo que o KHTML do Konqueror, navegador para KDE, foi usado como base. É extremamente compatível com o CSS3 e HTML5. Logo no lan çamento,<br />
<br />
Rede e-Tec Brasil<br />
<br />
138<br />
<br />
Programação para WEB<br />
<br />
foram realizados pela Apple alguns testes acerca da velocidade do navegador. Foi constatado que o Safari carrega páginas até 3 (três) vezes mais rapidamente que o Mozilla Firefox 2 e até 5,5 vezes mais que o Opera 9, e executa o JavaScript até 4,5 vezes mais rapidamente que o Mozilla Firefox 2 e até 5 vezes mais que o Opera 9. • Opera (Dezembro de 1996): Opera é um navegador da web e uma suíte de internet desenvolvido pela companhia Opera Software. O navegador permite tarefas comuns de internet como exibir sites, mandar e receber mensagens de e-mail, gerir contatos, bate-papo online de Iinternet Relay Chat (IRC), "baixar" arquivos via BitTorrent e ler feeds. Ele é oferecido gratuitamente para computadores pessoais e celulares. É tido como "o concorrente mais antigo do Internet Explorer" e, apesar de ser o menos utilizado no mercado, ele consegue ser muito superior que o seu mais antigo rival. O Opera funciona em uma variedade de sistemas de computadores pessoais, incluindo Microsoft Windows, Mac OS X, GNU/Linux, FreeBSD e o Solaris. É o único navegador do mercado que po ssui comandos por voz: foi desenvolvido com o compromisso de acessibilidade ao computador para os usuários que têm visão ou mobilidade reduzida.<br />
<br />
3. Desenvolva uma página HTML que tenha (utilize título s para dividir os ele-<br />
<br />
mentos do texto e apresentá-los) dois elementos em bloco de representação para conteúdo (<DIV>), apresentando dados pessoais<br />
<br />
139<br />
<br />
Rede e-Tec Brasil<br />
<br />
1.<br />
<br />
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.<br />
<br />
w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2. <html xmlns="http://www.w3.org /1999/xhtml"> 3. <head> 4. <meta http-equiv="Content-Type " content="text/html; charset=utf-8" /> 5. <title>Exercícios</title> 6. </head> 7. <body> 8. <div id="sessao1"> 9. <h3>Dados pessoais</h3> 10. <ul> 11. <li>Nome: Fernando</li> 12. <li>Data de nascimento: 22 de maio de 1978</li> 13. <li>E-mail: fernando@utfpr.edu.br</ li> 14. </ul> 15. </div> 16. <div id="sessao2"> 17.<br />
<br />
<h3>Dados prossionais</h3><br />
<br />
18. 19. 20. 21. 22. 23. 24. 25.<br />
<br />
<div id="subsessao21"> <ul> <li>Empresa: Universidade Tecnológica Federal do Paraná</li> <li>Endereço: Av. Brasil, 4232 - 85884-000 - Medianeira/PR</li> </ul> </div> <div id="subsessao22"> <ul><br />
<br />
26.<br />
<br />
<li>Disciplina: DS53B - Linguagens de Estruturação e Apresentação de<br />
<br />
Conteúdos</li> 27. <li>Disciplina: DS55A - Multímidia para Web</li> 28. <li>Disciplina: DS56B - Projeto de Sistemas para WEB</li> 29. </ul> 30. </div> 31. </div> 32. </body> 33.<br />
<br />
</html><br />
<br />
Atividades - Aula 2 Exercício 1a 1.<br />
<br />
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.<br />
<br />
w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2. <html xmlns="http://www.w3.org /1999/xhtml"> 3. <head> 4. <meta http-equiv="Content-Type " content="text/html; charset=utf-8" /> 5. <title>Cronograma Anual</title> 6. <style type="text/css"> 7. </style> 8. </head> 9. 10. <body> 11. <table width="700" border="1" cellspacing="0" cellpadding="10" bordercolor="gray"> 12. <tr> 13. <th colspan="9" bgcolor="#666666">Crono grama de Atividades 2012</th> 14. </tr> 15. <tr> 16. <th bgcolor="#999999">Atividade</th> 17. <th width="12%" colspan="2" bgcolor="#999999">Janeir o</th> 18. <th width="12%" bgcolor="#999999">Fever eiro</th> 19. <th width="12%" bgcolor="#999999">Março </th> 20. <th width="12%" colspan="2" bgcolor="#999999">Abril< /th> 21. <th width="12%" bgcolor="#999999">Maio< /th><br />
<br />
Rede e-Tec Brasil<br />
<br />
140<br />
<br />
Programação para WEB<br />
<br />
22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63.<br />
<br />
64. 65. 66. 67. 68. 69. 70. 71. 72. 73.<br />
<br />
<th width="12%" bgcolor="#999999">Junho </th> </tr> <tr> <td>Férias</td> <td colspan="2" bgcolor="#009999"> ;</td> <td> </td> <td> </td> <td colspan="2"> </td> <td> </td> <td> </td> </tr> <tr> <td>Pesquisa em Livros</td> <td> </td> <td bgcolor="#009999"> </ td> <td bgcolor="#009999"> </ td> <td bgcolor="#009999"> </ td> <td colspan="2"> </td> <td> </td> <td> </td> </tr> <tr> <td>Desenvolvimento do projeto</td> <td colspan="2"> </td> <td> </td> <td bgcolor="#009999"> </ td> <td colspan="2" bgcolor="#009999"> ;</td> <td bgcolor="#009999"> </ td> <td> </td> </tr> <tr> <td>Testes</td> <td colspan="2"> </td> <td> </td> <td> </td> <td> </td> <td bgcolor="#009999"> </ td> <td bgcolor="#009999"> </ td> <td bgcolor="#009999"> </ td> </tr> <tr> <td>Documentação</td><br />
<br />
<td colspan="2"> </td> <td> </td> <td bgcolor="#009999"> </ td> <td colspan="2" bgcolor="#009999"> ;</td> <td bgcolor="#009999"> </ td> <td bgcolor="#009999"> </ td> </tr> </table> </body> </html><br />
<br />
141<br />
<br />
Rede e-Tec Brasil<br />
<br />
Exercício 1b 1.<br />
<br />
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"<br />
<br />
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2. <html xmlns="http://www.w3.org/1 999/xhtml"> 3. <head> 4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5. <title>Compras - Lista para o Supermercado</title> 6. </head> 7. <body> 8. <p>Litsa de Compras - Supermercado </p> 9. <ul> 10. <li>Frios 11. <ul> 12. <li>Queijo</li> 13. <li>Presunto</li> 14. </ul> 15. </li> 16.<br />
<br />
17.<br />
<br />
<ul><br />
<br />
18.<br />
<br />
<li>Pão Francês</li><br />
<br />
19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.<br />
<br />
<li>Bolo de Cenoura</li> <li>Bolacha doce</li> </ul> </li> <li>Açougue <ul> <li>Carne moída</li> <li>Acém</li> </ul> </li> <li>Material de Limpeza <ul> <li>Detergente</li><br />
<br />
32.<br />
<br />
<li>Sabão em Pó</li><br />
<br />
33. 34. 35. 36. 37. 38.<br />
<br />
<li>Cera líquida</li> <li>Amaciante</li> </ul> </li> <li>Frutaria <ul><br />
<br />
39.<br />
<br />
40. 41. 42. 43. 44. 45. 46. 47.<br />
<br />
Rede e-Tec Brasil<br />
<br />
<li>Panicadora<br />
<br />
142<br />
<br />
<li>Maçã</li><br />
<br />
<li>Banana</li> <li>Melancia</li> <li>Morango</li> </ul> </li> </ul> </body> </html><br />
<br />
Programação para WEB<br />
<br />
Exercício 1c 1.<br />
<br />
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://<br />
<br />
www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2. <html xmlns="http://www.w3.org /1999/xhtml"> 3. <head> 4. <meta http-equiv="Content-Type " content="text/html; charset=utf-8" /> 5. <title>Bookmark</title> 6. </head> 7. <body> 8. <h1>Bookmarks - Lista de Sites Úteis</h1> 9. <ul> 10. <li><a href="https://www.google. com.br/" target="_blank" rel="nofollow">Google</a> </li> 11. <li><a href="http://www.youtube. com/" target="_blank" rel="nofollow">Youtube</ a></li> 12. <li><a href="http://ead.utfpr.ed u.br/" target="_blank" rel="nofollow">EaD UTFPR</a></ li> 13. <li><a href="https://www.faceboo k.com/" target="_blank" rel="nofollow">Faceboo k</a></ li> 14. <li><a href="https://twitter.com /" target="_blank" rel="nofollow">Twitter </a></li> 15. <li><a href="http://br.linkedin. com/" target="_blank" rel="nofollow">Linked.in </a></li> 16. <li><a href="http://www.w3c.org/ " target="_blank" rel="nofollow">W3C</a>< /li> 17. <li><a href="https://www.interne tsociety.org/" target="_blank" rel="nofollow">Internet Society</a></li> 18. <li><a href="http://www.doodle.c om" target="_blank" rel="nofollow">Doodle</a></li> 19. <li><a href="https://pt.surveymo nkey.com/" target="_blank" rel="nofollow">Survey Monkey</a></li> 20. </ul> 21. </body> 22. </html><br />
<br />
Exercício 1d 1.<br />
<br />
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://<br />
<br />
www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2. <html xmlns="http://www.w3.org /1999/xhtml"> 3. <head> 4. <meta http-equiv="Content-Type " content="text/html; charset=utf-8" /> 5. <title>Formulário</title> 6. </head> 7. <body> 8. <p>Formulário</p> 9. <form id="frmCadastro" name="frmCadastro" method="post" action=""> 10. <p> 11. <label for="edtNome">Nome</lab el> 12. <input type="text" name="edtNome" id="edtNome" /> 13. </p> 14. <p> 15. <label for="edtUF">UF</label> 16. <select name="edtUF" id="edtUF"> 17. <option value="AC">AC</option> 18. <option value="AM">AM</option> 19. <option value="AP">AP</option> 20. <option value="BA">BA</option> 21. <option value="CE">CE</option> 22. <option value="DF">DF</option> 23. <option value="ES">ES</option> 24. <option value="GO">GO</option> 25. <option value="MA">MA</option> 26. <option value="MG">MG</option> 27. <option value="MS">MS</option> 28. <option value="MT">MT</option> 29. <option value="PA">PA</option> 30. <option value="PB">PB</option> 31. <option value="PE">PE</option> 32. <option value="PI">PI</option><br />
<br />
143<br />
<br />
Rede e-Tec Brasil<br />
<br />
33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59.<br />
<br />
<option value="PR">PR</option> <option value="RJ">RJ</option> <option value="RN">RN</option> <option value="RO">RO</option> <option value="RR">RR</option> <option value="RS">RS</option> <option value="SC">SC</option> <option value="SC">SE</option> <option value="SP">SP</option> <option value="TO">TO</option> </select> </p> <p> <label for="edtDtNasc">Data de Nascimento</label> <input type="text" name="edtDtNasc" id="edtDtNasc" /> </p> <p>Sexo <input type="radio" name="radio" id="edtSexo" value="F" /> Feminino <input type="radio" name="radio" id="edtSexo" value="M" /> Masculino </p> </form> <p> </p> <p> </p> </body> </html><br />
<br />
Exercício 2 1.<br />
<br />
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://<br />
<br />
www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2. <html xmlns="http://www.w3.org /1999/xhtml"> 3. <head> 4. <meta http-equiv="Content-Type " content="text/html; charset=utf-8" /> 5. <title>Boletim Escolar</title> 6. </head> 7. <body> 8. <table width="500" border="1" cellspacing="0" cellpadding="10" bordercolor="#000"> 9. <tr class="titulo1"> 10. <th>Boletim Escolar</th> 11. <th colspan="6">Aluno<br /> 12. Fernando Schutz</th> 13. <th><p>Ano<br /> 14. 2010</p></th> 15. </tr> 16. <tr class="titulo2"> 17. <td bgcolor="#999999">Discipli nas</td> 18. <td bgcolor="#999999">N1</td> 19. <td bgcolor="#999999">F1</td> 20. <td bgcolor="#999999">N2</td> 21. <td bgcolor="#999999">F2</td> 22. <td bgcolor="#999999">NF</td> 23. <td bgcolor="#999999">MF</td> 24. <td bgcolor="#999999">Resultad o</td> 25. </tr> 26. <tr> 27. <td>Matemática</td> 28. <td>10,0</td> 29. <td>0</td> 30. <td>8,0</td> 31. <td>2</td> 32. <td>2</td> 33. <td>9,0</td><br />
<br />
Rede e-Tec Brasil<br />
<br />
144<br />
<br />
Programação para WEB<br />
<br />
34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47.<br />
<br />
48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68.<br />
<br />
<td>Aprovado</td> </tr> <tr> <td>História</td> <td>7,0</td> <td>1</td> <td>7,6</td> <td>4</td> <td>5</td> <td>7,3</td> <td>Aprovado</td> </tr> <tr> <td>Geograa</td><br />
<br />
<td>8,0</td> <td>1</td> <td>6,0</td> <td>10</td> <td>11</td> <td>7,0</td> <td>Aprovado</td> </tr> <tr> <td>Língua Portuguesa</td> <td>9,0</td> <td>0</td> <td>7,6</td> <td>2</td> <td>2</td> <td>8.3</td> <td>Aprovado</td> </tr> </table> </body> </html><br />
<br />
Atividades - Aula 3 Exercício 1<br />
<br />
1.<br />
<br />
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://<br />
<br />
www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2. <html xmlns="http://www.w3.org /1999/xhtml"> 3. <head> 4. <meta http-equiv="Content-Type " content="text/html; charset=utf-8" /> 5. <title>Boletim Escolar</title> 6. <style type="text/css"> 7. .titulo1 { 8. font-family: Verdana, Geneva, sans-serif; 9. font-size: 12px; 10. font-weight: bold; 11. color: #FFF; 12. background-color: #036; 13. } 14. .titulo2 { 15. font-family: Verdana, Geneva, sans-serif; 16. font-size: 10px; 17. font-weight: bold; 18. color: #000; 19. background-color: #39C;<br />
<br />
145<br />
<br />
Rede e-Tec Brasil<br />
<br />
20. text-align: center; 21. } 22. .disciplinas { 23. font-family: Verdana, Geneva, sans-serif; 24. font-size: 10px; 25. } 26. .notas_faltas { 27. font-family: Verdana, Geneva, sans-serif; 28. font-size: 10px; 29. text-align: right; 30. } 31. .resultados { 32. font-family: Verdana, Geneva, sans-serif; 33. font-size: 10px; 34. color: #093; 35. } 36. </style> 37. </head> 38. 39. <body> 40. <table width="500" border="1" cellspacing="0" cellpadding="10" bordercolor="#036"> 41. <tr class="titulo1"> 42. <th>Boletim Escolar</th> 43. <th colspan="6">Aluno<br /> 44. Fernando Schutz</th> 45. <th><p>Ano<br /> 46. 2010</p></th> 47. </tr> 48. <tr class="titulo2"> 49. <td>Disciplinas</td> 50. <td>N1</td> 51. <td>F1</td> 52. <td>N2</td> 53. <td>F2</td> 54. <td>NF</td> 55. <td>MF</td> 56. <td>Resultado</td> 57. </tr> 58. <tr> 59. <td class="disciplinas">Matemá tica</td> 60. <td class="notas_faltas">10,0< /td> 61. <td class="notas_faltas">0</td > 62. <td class="notas_faltas">8,0</ td> 63. <td class="notas_faltas">2</td > 64. <td class="notas_faltas">2</td > 65. <td class="notas_faltas">9,0</ td> 66. <td class="resultados">Aprovad o</td> 67. </tr> 68. <tr> 69. <td class="disciplinas">Histór ia</td> 70. <td class="notas_faltas">7,0</ td> 71. <td class="notas_faltas">1</td > 72. <td class="notas_faltas">7,6</ td> 73. <td class="notas_faltas">4</td > 74. <td class="notas_faltas">5</td > 75. <td class="notas_faltas">7,3</ td> 76. <td class="resultados">Aprovad o</td> 77. </tr> 78. <tr><br />
<br />
Rede e-Tec Brasil<br />
<br />
79.<br />
<br />
<td class="disciplinas">Geogra a</td><br />
<br />
80. 81. 82. 83. 84. 85. 86.<br />
<br />
<td <td <td <td <td <td <td<br />
<br />
146<br />
<br />
class="notas_faltas">8,0</ td> class="notas_faltas">1</td > class="notas_faltas">6,0</ td> class="notas_faltas">10</t d> class="notas_faltas">11</t d> class="notas_faltas">7,0</ td> class="resultados">Aprovad o</td><br />
<br />
Programação para WEB<br />
<br />
87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100.<br />
<br />
</tr> <tr> <td class="disciplinas">Língua Portuguesa</td> <td class="notas_faltas">9,0</ td> <td class="notas_faltas">0</td > <td class="notas_faltas">7,6</ td> <td class="notas_faltas">2</td > <td class="notas_faltas">2</td > <td class="notas_faltas">8.3</ td> <td class="resultados">Aprovad o</td> </tr> </table> </body> </html><br />
<br />
Exercício 2 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47.<br />
<br />
<html> <head> <meta http-equiv="Content-Typ e" content="text/html; charset=utf-8" /> <title>Curriculo</title> <style type="text/css"> .foto { background-attachment: scroll; background-image: url(foto_jolie.png); background-repeat: no-repeat; height: 200px; width: 150px; } body { font-family: Tahoma, Geneva, sans-serif; font-size: 10px; } .nome { font-weight: bold; font-size: 36px; } .nome p { font-size: 14px; color: #999; } .tit_secao { font-family: Arial, Helvetica, sans-serif; font-size: 14px; font-weight: bold; color: #FFF; background-color: #666; padding-top: 12pt; padding-bottom: 18pt; } .tit_subsecao { font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-weight: bold; color: #FFF; background-color: #AAA; padding-top: 6pt; padding-bottom: 9pt; } .texto { font-family: Arial, Helvetica, sans-serif; font-size: 11px; color: #333; text-align: justify;<br />
<br />
147<br />
<br />
Rede e-Tec Brasil<br />
<br />
48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72.<br />
<br />
} a { font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-weight: bold; color: #F90; text-decoration: none;<br />
<br />
} </style> </head> <body> <table width="700" border="0" cellspacing="0" cellpadding="10"> <tr> <td height="187" class="foto"> </td> <td class="nome">Angelina Jolie <p>angelina.jolie@gmail.com<br> 34 anos</p></td> </tr> <tr class="tit_secao"> <td>Dados pessoais</td> <td> </td> </tr> <tr> <td> </td> <td class="texto"><strong>Ang elina Jolie</strong> (Los Angeles, 4 de Junho de 1975) é uma atriz de cinema e de televisão estadunidense, vencedora de um <a href="http://oscar.go.com/" target="_blank" rel="nofollow">Oscar</a>, dois <a href="http://www.sagawards.org" target="_blank" rel="nofollow">Screen Actors Guild Awards</ a>, e três Prêmios <a href="http://www.goldenglobes.org" target="_blank" rel="nofollow">Globos de Ouro</a>. Jolie promove causas humanitárias, e é conhecida por seu trabalho com refugiados como embaixadora da Alto Comissariado das Nações Unidas para os Refugiados (ACNUR).</td> 73. </tr> 74. <tr class="tit_secao"> 75. <td>Prêmios</td> 76. <td> </td> 77. </tr> 78. <tr class="tit_subsecao"> 79. <td>Oscar</td> 80. <td> </td> 81. </tr> 82. <tr> 83. <td> </td> 84. <td class="texto">2000 - Vencedora - Melhor atriz (coadjuvante/ secundária), por Girl, Interrupted.<br> 85. 2009 - Indicada como melhor atriz, por Changeling.</td> 86. </tr> 87. <tr class="tit_subsecao"> 88. <td>Globo de Ouro</td> 89. <td> </td> 90. </tr> 91. <tr> 92. <td> </td> 93. <td class="texto">1998 - Vencedora - Melhor atriz (coadjuvante/ secundária) em lme/série para televisão, por George Wallace;<br> 94. 1999 - Vencedora - Melhor atriz em lme para televisão, por<br />
<br />
Gia<br> 95. 2000 - Vencedora - Melhor atriz (coadjuvante/secundária), por Girl, Interrupted;<br> 96. 2008 - indicada como melhor atriz de drama, por A Mighty Heart<br> 97. 2009 - Indicada como melhor atriz de drama, por Changeling<br> 98. 2011 - Indicada como melhor atriz comédia/musical, por The Tourist</ td> 99. </tr> 100. <tr class="tit_secao"> 101. <td>Filhos</td> 102. <td> </td> 103. </tr><br />
<br />
Rede e-Tec Brasil<br />
<br />
148<br />
<br />
Programação para WEB<br />
<br />
104. 105. 106.<br />
<br />
<tr> <td> </td> <td class="texto"><p>Angelina tem 6 lhos com Brad Pitt, sendo três<br />
<br />
adotivos e três biológicos.</p> 107. <ul> 108. <li> Maddox Chivan Jolie-Pitt - (Kendal, Camboja, 5 de Agosto de 2001), adotado no Camboja em 10 de Março de 2002.</li> 109. <li> Pax Thien Jolie-Pitt - (Ho Chi Minh, Vietname, 29 de Novembro de 2003), adotado no Vitename dia 15 de Março de 2007. Pax foi abandonado em um hospital local por sua mãe biológica, Pham Quang Sang.</li><br />
<br />
110. <li> Zahara Marley Jolie-Pitt - (Awassa, Etiópia, 8 de Janeiro de 2005), adotada na Etiópia dia 6 de julho de 2005.</li> 111. <li> Shiloh Nouvel Jolie-Pitt - (Swakopmund, Namíbia, 27 de Maio de 2006), primeira lha biológica do casal Angelina Jolie e Brad Pitt.</li><br />
<br />
112.<br />
<br />
<li> Os gêmeos Knox Léon Jolie-Pitt e Vivienne Marcheline Jolie-<br />
<br />
Pitt (Nice, França, 12 de julho de 2008) lhos biológicos de Angelina Jolie e<br />
<br />
Brad Pitt.</li> 113. </ul></td> 114. </tr> 115. </table> 116. </body> 117. </html><br />
<br />
Exercício 3 1.<br />
<br />
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://<br />
<br />
www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2. <html xmlns="http://www.w3.org /1999/xhtml"> 3. <head> 4. <meta http-equiv="Content-Type " content="text/html; charset=utf-8" /> 5. <title>Menus com iFrame</title> 6. <style type="text/css"> 7. .opc_menu { 8. background-color: #900; 9. text-align: center; 10. } 11. .opc_menu a { 12. font-family: Tahoma, Geneva, sans-serif; 13. font-size: 10px; 14. font-weight: bold; 15. color: #FFF; 16. text-decoration: none; 17. line-height: 30px; 18. } 19. .footer { 20. font-family: Tahoma, Geneva, sans-serif; 21. font-weight: bold; 22. font-size: 11px; 23. color: #FFF; 24. text-align: center; 25. } 26. </style> 27. </head> 28. <body> 29. <table width="800" border="0" cellspacing="0" cellpadding="0"> 30. <tr> 31. <td><table width="100%" border="5" cellspacing="5" cellpadding="0" bordercolor="#FFFFFF"> 32. <tr> 33. <td class="opc_menu"><a href="http://ead.utfpr.e du.br" target="frmConteudo" rel="nofollow">EAD UTFPR</a></td> 34. <td class="opc_menu"><a href="http://www.youtube .com" target="frmConteudo" rel="nofollow">Youtube</a></td> 35. <td class="opc_menu"><a href="http://www.utfpr.e du.br" target="frmConteudo" rel="nofollow">UTFPR</a></td> 36. <td class="opc_menu"><a href="http://www.ufmt.br "<br / rel="nofollow">
<br />
149<br />
<br />
Rede e-Tec Brasil<br />
<br />
target="frmConteudo">UFMT</a></td> 37. <td class="opc_menu"><a href="http://www.w3c.org" target="frmConteudo" rel="nofollow">W3C</a></td> 38. </tr> 39. </table></td> 40. </tr> 41. <tr> 42. <td bgcolor="#FF6666"> 43. <p> </p> 44. <p align="center"> 45. <iframe frameborder="0" width="90%" height="400" src="http:// ead.utfpr.edu.br" name="frmConteudo"></iframe> 46. </p> 47. <p> </p> 48. </td> 49. </tr> 50. <tr> 51. <td height="30" bgcolor="#CC3333" class="footer">Clique nos itens do menu para abrir as páginas no centro</td> 52. </tr> 53. </table> 54. </body> 55. </html><br />
<br />
Atividades - Aula 4 Exercício 1 1. <html> 2. <head> 3. <title>Mostra nome</title> 4. </head> 5. <body> 6. <form id="form1" name="form1" method="post" action=""> 7. <label for="edtNome">Nome</label> 8. <input type="text" name="edtNome" id="edtNome" onblur="window. alert(this.value);" /> 9. </form> 10. </body> 11.<br />
<br />
</html><br />
<br />
Exercício 2 1. 2. 3.<br />
<br />
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><br />
<br />
4.<br />
<br />
<title>Vericações</title><br />
<br />
5.<br />
<br />
<script language="javascript"><br />
<br />
6.<br />
<br />
function vericar(formulario){<br />
<br />
7. 8.<br />
<br />
var msg = ""; // vericar se o nome foi informado<br />
<br />
9.<br />
<br />
Rede e-Tec Brasil<br />
<br />
if (formulario.edtNome.value == "") {<br />
<br />
10.<br />
<br />
alert("Nome não informado");<br />
<br />
11. 12. 13. 14. 15. 16.<br />
<br />
return false; } // idade atual var data = formulario.edtDtNasc.va lue.split("/"); var data_nasci = new Date(data[2],(data[1]-1),d ata[0]);<br />
<br />
150<br />
<br />
Programação para WEB<br />
<br />
17. var data_atual = new Date(); 18. var idade = (data_atual.getFullYear() - data_nasci.getFullYear()); 19. 20. // idade para CNH 21. if (idade >= 18) { 22. msg = " - Tem idade para requerer C.N.H.\n"; 23. } else { 24.<br />
<br />
25. 26. 27. 28. 29. 30. 31. 32. 33. 34.<br />
<br />
msg = " - Não tem idade para requerer C.N.H.\n";<br />
<br />
} // idade para votar if (idade >= 16) { if (idade >= 18 && idade <= 60) { msg += " - Voto obrigatório\n"; } else { msg += " - Voto facultativo\n"; } } else {<br />
<br />
35.<br />
<br />
36. 37. 38. 39. 40. 41. 42. break; 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66.<br />
<br />
67. 68. 69. 70.<br />
<br />
msg += " - Não tem idade para votar\n";<br />
<br />
} // dia da semana em que nasceu var dia_semana = data_nasci.getDay(); switch(dia_semana) { case 0: msg += " - Nasceu num domingo"; break; case 1: msg += " - Nasceu numa segunda-feira"; case case case case case<br />
<br />
2: 3: 4: 5: 6:<br />
<br />
msg msg msg msg msg<br />
<br />
+= += += += +=<br />
<br />
" " " " "<br />
<br />
-<br />
<br />
Nasceu Nasceu Nasceu Nasceu Nasceu<br />
<br />
numa terça-feira"; break; numa quarta-feira"; break; numa quinta-feira"; break; numa sexta-feira"; break; num sábado"; break;<br />
<br />
} msg = formulario.edtNome.valu e+" ("+idade+" anos):\n"+msg; alert(msg); } </script> </head> <body> <form id="frmVerifs" name="frmVerifs" method="get" action=""> <p> <label for="edtNome">Nome</lab el><br /> <input type="text" name="edtNome" id="edtNome" /> </p> <p> <label for="edtDtNasc">Data Nascimento</label><br /> <input type="text" name="edtDtNasc" id="edtDtNasc" /> </p> <p><button onclick="vericar(this.for m);">Vericar</button><br />
<br />
</p> </form> </body> </html><br />
<br />
151<br />
<br />
Rede e-Tec Brasil<br />
<br />
Exercício 3 1. 2. 3.<br />
<br />
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><br />
<br />
4.<br />
<br />
<title>Vericações</title><br />
<br />
5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.<br />
<br />
<script language="javascript"> function saudacao(){ var msg = ""; var data_atual = new Date(); if (data_atual.getHours() < 12) { msg = "Bom dia"; } else { if (data_atual.getHours() < 19) { msg = "Boa tarde"; } else { msg = "Boa noite"; } } alert(msg); } </script> </head> <body onLoad="saudacao();"><br />
<br />
24.<br />
<br />
25. 26.<br />
<br />
<h1>Página de vericação de momento</h1><br />
<br />
</body> </html><br />
<br />
Atividades - Aula 5 Exercício 1a 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.<br />
<br />
<html> <head> <title>Calculadora</title> </head> <body> <?php $nome = "Fernando Schutz"; $email = "fernando@utfpr.edu.br"; echo $nome; echo "<br />"; echo $email; ?> </body> </html><br />
<br />
Exercício 1b 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.<br />
<br />
Rede e-Tec Brasil<br />
<br />
<html> <head> <title>Calculadora</title> </head> <body> <?php $nome = "Fernando Schutz"; $email = "fernando@utfpr.edu.br"; echo $nome."<br />".$email; ?> </body> </html><br />
<br />
152<br />
<br />
Programação para WEB<br />
<br />
Exercício 1c 1. 2. 3. 4. 5. 6. 7.<br />
<br />
<html xmlns="http://www.w3.org /1999/xhtml" lang="pt-br"> <head> <title>Valida Data</title> </head> <body> <h1>Validador de Data</h1> <hr><br />
<br />
8.<br />
<br />
<eldset><br />
<br />
9. 10. 11. 12. 13. 14.<br />
<br />
<legend><p>Informe a data</p></legend> <form method="post" action="#"> Data: <input type="text" name="data" size="10" /> <input type="submit" name="validar" value="Validar" /> </form><br />
<br />
15.<br />
<br />
</eldset><br />
<br />
16. 17. 18. 19. 20. 21. 22. 23. usando 24. 25. 26. 27. 28.<br />
<br />
<?php if(isset($_POST['data'])){ $data = $_POST['data']; ValidaData($data); } function ValidaData($dat){ $data = explode("/","$dat"); // fatia a string $dat em pedados, / como referência $d = $data[0]; $m = $data[1]; $y = $data[2]; $res = checkdate($m,$d,$y); if ($res == 1){<br />
<br />
29.<br />
<br />
echo "<eldset><p>data ok!</p></eldset>";<br />
<br />
30.<br />
<br />
} else {<br />
<br />
31.<br />
<br />
32. 33. 34. 35. 36.<br />
<br />
echo "<eldset><p>data invalida!</p></eldset>";<br />
<br />
} } ?> </body> </html><br />
<br />
Exercício 2 Arquivo aula5_02_form.php (principal) 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.<br />
<br />
<html> <head> <title>Calculadora</title> </head> <body> <form name="formulario" method="post" action="cap5_02_calc.ph p"> <label>Numero 1:</label> <input type="text" name="n1"/> <input type="radio" name="operacao" value="Multiplicao" checked><br />
<br />
Multiplicação 11.<br />
<br />
<input type="radio" name="operacao" value="Divisao"> Divisão<br />
<br />
12.<br />
<br />
<input type="radio" name="operacao" value="Soma"> Soma<br />
<br />
13.<br />
<br />
<input type="radio" name="operacao" value="Subtracao"> Subtração<br />
<br />
14. 15. 16. 17. 18. 19.<br />
<br />
<label>Numero 2:</label> <input type="text" name="n2"/> <input type="submit" value="Calcular"> <?php if(isset($_GET["resultado"])){<br />
<br />
153<br />
<br />
Rede e-Tec Brasil<br />
<br />
20. if ($_GET["resultado"] != "") echo '<h3><label>Resultado:</l abel>'.$_GET["resultado"].'</h3>'; 21. } 22. ?> 23. </body> 24. </html><br />
<br />
Arquivo aula 5_02_calc.php (principal) 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.<br />
<br />
<?php $n1 = $_POST['n1']; $n2 = $_POST['n2']; $operacao = $_POST['operacao']; function calcular(){ global $n1; global $n2; global $operacao; if ($n1 == "" || $n2 == "") return ""; switch($operacao){ case 'Multiplicacao': $resultado = $n1 * $n2; break; case 'Divisao': $resultado = $n1 / $n2; break; case 'Soma': $resultado = $n1 + $n2; break; case 'Subtracao': $resultado = $n1 - $n2; break; } return($resultado); } header('Location:index.php ?resultado='. calcular()); ?><br />
<br />
Exercício 3 1. 2. 3. 4. 5. 6. 7. 8.<br />
<br />
<html> <head> <title>Taboada</title> <link rel="stylesheet" type="text/css" href="index.css"> </head> <body> <h1>Calculadora de tabuada</h1> <hr /><br />
<br />
9.<br />
<br />
<eldset><br />
<br />
10. <legend><p>Caulculadora</p></legend> 11. <form name="formulario" method="get" action="#"> 12. <p> 13. <label>Numero:</label> 14. <input type="text" name="numero"/> 15. <input type="submit" value="Calcular"> 16. </p> 17. </form > 18. <?php 19. if(isset($_GET["numero"])) 20. if ($_GET["numero"] != "") calcula(); 21. 22. function calcula(){ 23. echo "<table cellspacing = 0 border = 1 rules = none>"; 24. echo "<tr class = linha><td colspan = 5 > Tabuada do " . $_ GET["numero"] . "</td></tr>"; 25. for($i=1; $i<=10; $i++){ 26. $resultado = $_GET["numero"] * $i ; 27. echo "<tr ";<br />
<br />
Rede e-Tec Brasil<br />
<br />
154<br />
<br />
Programação para WEB<br />
<br />
28. 29. 30.<br />
<br />
if (($i % 2) == 0) echo "class = linha"; echo ">"; echo "<td>". $i . "</td>";<br />
<br />
31.<br />
<br />
echo "<td>X</td>";<br />
<br />
32. 33. 34. 35. 36. 37. 38. 39.<br />
<br />
echo echo echo echo<br />
<br />
"<td>".$_GET["numero"]. "</td>"; "<td>=</td>"; "<td>". $resultado . "</td>"; "</tr>";<br />
<br />
} echo "</table>"; } ?><br />
<br />
40.<br />
<br />
</eldset><br />
<br />
41. 42. 43.<br />
<br />
<hr /> </body> </html><br />
<br />
Atividades - Aula 6 Exercício 1<br />
<br />
O CodeIgniter é um framework de desenvolvimento de aplicações em PHP. Seu objetivo, por meio de um abrangente conjunto de bibliotecas voltadas às tarefas mais comuns, de uma interface e uma estrutura lógica simples para acesso àquelas bibliotecas, é possibilitar que o usuário desenvolva projetos mais rapidamente do que se estivesse codicando do zero. O CodeIgniter permite que se mantenha o foco em um projeto, minimizando a quantidade de código necessário para uma dada tarefa. (fonte: Site ocial) O Doctrine é um framework de Mapeamento Objeto-Relacional (ou ORM) para PHP. O ORM é uma técnica de desenvolvimento utilizada para reduzir a impedância da programação orientada aos objetos utilizando bancos de dados relacionais. As tabelas do banco de dados são representadas através de classes e os registros de cada tabela são representados como instâncias das classes correspondentes. Uma característica fundamental é que não é necessária a utilização de SQL, pois pode-se realizar qualquer operação de CRUD sem escrever nenhuma query. (fonte: site ocial do Doctrine) O Symfony é um framework para aplicações web em PHP5, que implementa o padrão MVC, tornando possível a criação de aplicações PHP em três camadas. Permite que os desenvolvedores façam um trabalho eciente sobre os aspectos mais complexos de uma tarefa, e o uso de Boas Práticas garante a estabilidade de manutenção e atualização das aplicações. Em última análise um framework torna a programação mais fácil, uma vez que transforma<br />
<br />
155<br />
<br />
Rede e-Tec Brasil<br />
<br />
um pacote de complexas operações em simples armações. Um framework racionaliza o desenvolvimento de muitos padrões empregados para um determinado m, acrescenta estrutura ao código, levando o programador a escrever melhor, mais legível e um código mais sustentável. (fonte: site ocial) O Zend Framework foi desenvolvido com o objetivo de simplicar o desenvolvimento web enquanto promove as melhores práticas na comunidade de desenvolvedores PHP. A arquitetura "use-a-vontade" permite que os desenvolvedores reutilizem componentes em suas aplicações sem requerer outros componentes (além das dependências mínimas). O framewor fornece componentes para os padrões de projeto MVC e Table Gateway que são usados na maioria das aplicações Zend Framework; fornece ainda componentes individuais para requisitos comuns no desenvolvimento de aplicações web, incluindo autenticação e autorização via listas de controle de acesso (ACL), conguração de aplicações, data caching, ltragem/validação de dados fornecidos pelo usuário para segurança e integridade de dados, internacionalização, interfaces para funcionalidades AJAX, composição/entrega de email, indexação e consulta no formato de busca Lucene, e todas as Google Data APIs com muitos outros web services populares. (fonte: site ocial) Exercício 02 a) Cria uma conexão com um banco de dados MySql, através da especica-<br />
<br />
ção de servidor, nome de usuário e senha. b) Divide uma string em um array, utilizando $delimiter como delimitador<br />
<br />
desta string para separar os elementos do array. c) Transformar o conjunto de caracteres informados em $string para maiús-<br />
<br />
culo (caixa alta). d) Inicia uma sessão de memória para o armazenamento de dados que per-<br />
<br />
maneçam ativos numa sessão Web.<br />
<br />
Rede e-Tec Brasil<br />
<br />
156<br />
<br />
Programação para WEB<br />
<br />
Referências ALVAREZ, Miguel Angel. Os manipuladores de eventos em Javascript. Programação em Javascript II. Criar 2005 . Disponível em:< http://www.criarweb.com/artigos/394. php.> Acesso em: 10 ag.2011. COULOURIS, George F.; DOLLIMORE, Jean; KINDBERG, Tim (Autor). Sistemas distribuídos: conceitos e projeto . 4. ed. Porto Alegre, RS: Bookman, 2007. viii, 784p. ISBN 978-85-60031-49-8. LEINER, Barry M. et al. Brief History of the Internet. Internet Society . Disponível em:< http://www.internetsociety.org/internet/internet-51/history-internet/brief-historyinternet. > Acesso em: 07 jul.2011. JAVA SCRIPTTUTORIAL. Learn to Create Website. Disponível em:< http://www. w3schools.com> Acesso em: 10 nov.2011.<br />
<br />
157<br />
<br />
Rede e-Tec Brasil<br />
<br />
Obras Consultadas Apache Labs. The Innovation Laboratories of the Apache Software Foundation. Disponível em: < http://labs.apache.org/.> Acesso em: 11 nov. 2011. CHANDLER, David M.; KIRKNER, Bill; MINATEL, Jim. Como montar o seu site na world wide WEB. Rio de Janeiro: Campus, 1996. HAHN, Harley; STOUT, Rick (Autor). The internet: complete reference . Berkeley: Osborne, 1994. MORIMOTO, Carlos E. Redes: Guia Prático . GDH Press e Sul Editores. São Paulo: 2008. Disponivel em: < http://www.gdhpress.com.br/redes> Acesso em: 20 nov.2010 PEREIRA, Aisa. Aprenda Internet Sozinho Agora. Disponível em :<http://www.aisa.com.br/ index1.html> Acesso em: 10 nov.2010. VALENTE, José Armando; ALMEIDA, Maria E. B. de; PRADO, Maria Elisabette B. Brito; FREIRE, Fernanda Maria Pereira; FAZENDA, Ivani Catarina Arantes; VALLIN, Celso (Autor). Educação a distância via internet . São Paulo: Avercamp, 2003.<br />
<br />
Rede e-Tec Brasil<br />
<br />
158<br />
<br />
Programação para WEB<br />
<br />
Currículo do Professor-autor Fernando Schütz possui graduação em Informá-<br />
<br />
tica pela Universidade Estadual do Oeste do Paraná (2000) e mestrado em Ciências da Computação pela Universidade Federal de Santa Catarina (2003). Atualmente é professor de ensino Básico, Técnico e Tecnológico da Universidade Tecnológica Federal do Paraná - Campus de Medianeira, e está lotado no Núcleo de Ciência da Computação. Tem experiência na área de Informática, com ênfase em Técnicas da Computação, atuando principalmente nos seguintes temas: Rich Internet Applications, Web Design, Engenharia de Software para Web, Frameworks e Integração Web e Dispositivos Móveis. Na área de Empreendedorismo Tecnológico atua no setor de desenvolvimento de projetos, utilizando técnicas computacionais. http://lattes.cnpq.br/8912470216819864<br />
<br />
159<br />
<br />
Rede e-Tec Brasil<br />
<br />
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="report" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<form role="form" method="post" action="https://idoc.tips/report/caderno-ling-web-pdf-free" style="border: none;">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title">Report "Caderno Ling Web"</h4>
</div>
<div class="modal-body">
<div class="form-group">
<label>Your name</label>
<input type="text" name="name" required="required" class="form-control" />
</div>
<div class="form-group">
<label>Email</label>
<input type="email" name="email" required="required" class="form-control" />
</div>
<div class="form-group">
<label>Reason</label>
<select name="reason" required="required" class="form-control">
<option value="">-Select Reason-</option>
<option value="pornographic" selected="selected">Pornographic</option>
<option value="defamatory">Defamatory</option>
<option value="illegal">Illegal/Unlawful</option>
<option value="spam">Spam</option>
<option value="others">Other Terms Of Service Violation</option>
<option value="copyright">File a copyright complaint</option>
</select>
</div>
<div class="form-group">
<label>Description</label>
<textarea name="description" required="required" rows="3" class="form-control" style="border: 1px solid #cccccc;">