Escolar Documentos
Profissional Documentos
Cultura Documentos
MÓDULO 2
MÓDULO 3
DEFINIÇÃO
MÓDULO 4
O ambiente Web e seu modelo Cliente X Servidor, interfaces com design responsivo
(abordagem mobile first) e adaptativo, tecnologias do lado cliente (HTML, CSS, páginas Reconhecer as tecnologias do lado servidor
estáticas com Javascript) e do lado servidor (páginas dinâmicas com PHP, acesso a banco de
dados).
INTRODUÇÃO
PROPÓSITO O chamado modelo Cliente x Servidor, com origem na Computação, é uma estrutura de
aplicação distribuída, em que temos tarefas partilhadas e executadas entre as duas
camadas:
Compreender a composição do Ambiente Web e seus componentes dos lados cliente e de um lado, a origem das requisições e solicitações de recursos ou
serviços – o lado cliente –
servidor, assim como as tecnologias inerentes a cada componente, é essencial para a e, do outro, processos sendo executados a fim de prover tais
recursos ou serviços – o lado
formação do profissional de desenvolvimento de sistemas na Web. servidor. Atualmente, tal modelo é amplamente utilizado,
sendo base do Ambiente Web e de
suas aplicações, como veremos ao longo deste tema.
OBJETIVOS
O ponto de partida para entendermos a arquitetura do modelo Cliente x Servidor é tomarmos
como exemplo a rede interna de computadores de uma empresa, em que temos máquinas
exercendo a função de servidores − provendo serviços como armazenamento de arquivos ou
dados, impressão, e-mail etc. − e máquinas exercendo a função de clientes − consumindo
os
recursos fornecidos pelos servidores. Essa arquitetura pode ser vista na Figura 1.
MÓDULO 1
Neste modelo, temos as camadas Cliente e Servidor, sendo função da primeira tratar a
lógica
COMO É COMPOSTO O MODELO CLIENTE X do negócio e fazer a interface com o usuário, enquanto a segunda é responsável
por tratar os
Modelo de 3 camadas.
Modelo de 2 camadas.
MODELO DE 4 CAMADAS
MODELO DE 3 CAMADAS O grande avanço obtido neste modelo foi tirar da máquina cliente a responsabilidade pela
interface com o usuário, passando a centralizá-la em um único ponto, normalmente em um
servidor Web. Com isso, no lugar de aplicações instaladas em cada máquina cliente
passamos
Este modelo foi criado para resolver alguns problemas do modelo anterior, entre eles a
a ter os clientes acessando aplicações hospedadas em servidores Web a partir de
necessidade de reinstalação/atualização da aplicação nos clientes a cada mudança de
regra
navegadores. Neste modelo, a divisão de responsabilidades ficou dessa forma:
ou lógica. Logo, este modelo incluiu uma camada a mais, chamada de aplicação. Com
isso, as
responsabilidades de cada camada ficaram assim divididas:
CAMADA DE APRESENTAÇÃO
Ainda representada pela aplicação instalada na máquina cliente. Era
responsável pela interface
com o usuário e passou a acessar o servidor de
Aplicação, perdendo o acesso direto ao
servidor de dados.
CAMADA DE APLICAÇÃO
Representada por um servidor responsável pela lógica e regras de negócio,
assim como pelo
controle de acesso ao servidor de dados.
CAMADA DE DADOS
Representada por um servidor responsável pelo armazenamento dos dados.
Modelo de 4 camadas.
CLIENTE
O AMBIENTE WEB
Como vimos, inicialmente as aplicações ficavam hospedadas dentro de uma
rede interna, onde
estavam tanto os clientes quanto os servidores. Posteriormente, elas
migraram para a internet,
surgindo então o Ambiente Web, cuja base é justamente prover
aos clientes, usuários, o
acesso a várias aplicações a partir de diversos dispositivos, como navegadores em desktops e
smartphones ou a partir de aplicações
mobile.
CLIENTE
Utiliza um navegador ou aplicativo e consome serviços hospedados em um
servidor Web.
SERVIDOR WEB
Cuja estrutura pode comportar tanto as camadas citadas anteriormente numa
única máquina
quanto em diversas máquinas, sendo essa distribuição
indistinguível para o cliente.
Figura 2 –
Comunicação no Ambiente Web. Fonte: Paixão, 2020.
A comunicação, neste ambiente, é feita sobre a internet, com o uso dos seus protocolos de
comunicação, sendo o principal protocolo o HTTP (HyperText Transfer Protocol) − que é um
protocolo para transferência de hipertexto. Na Figura 2, podemos ver um exemplo de
comunicação no Ambiente Web.
EXEMPLO
SOLICITAÇÃO E RESPOSTA
O processo de comunicação no Ambiente Web é conhecido como Solicitação (Request) e Por Blackboard | Fonte: Shutterstock
Resposta (Response). Normalmente, a solicitação é iniciada pelo cliente, mas é possível que
também o servidor
a inicie, como em serviços PUSH – serviços que disparam
notificações/mensagens para os
clientes que fizeram opção por recebê-las.
VERIFICANDO O APRENDIZADO
2. Nós vimos que o modelo Cliente x Servidor é a base do Ambiente Web. Assinale a
opção correta que descreve o Ambiente Web:
2. NÓS VIMOS QUE O MODELO CLIENTE X SERVIDOR É A BASE DO
AMBIENTE WEB. ASSINALE A OPÇÃO CORRETA QUE DESCREVE O A alternativa "A " está correta.
AMBIENTE WEB:
Conforme visto na seção O Ambiente Web, o ambiente web tem como base o modelo Cliente
A) O Ambiente Web é composto por diversos clientes e diversos servidores. Neste cenário, os
x Servidor e a evolução de seu Modelo de Camadas. Faz uso, portanto, de um modelo de N
clientes utilizam a internet e fazem requisições a diferentes servidores, localizados em
camadas, onde a lógica da aplicação e os dados são distribuídos em um ou mais servidores e
diferentes partes do mundo. Os servidores então processam a requisição e devolvem a
a interface para acesso a estes servidores fica a cargo do cliente.
informação requisitada ou executam o serviço solicitado pelo cliente.
D) O Ambiente Web é caracterizado, sobretudo, pela transparência, diferentemente do que era A INTERFACE DO LADO CLIENTE
visto inicialmente no modelo Cliente x Servidor. Com isso, um cliente sempre terá controle total
sobre o processo de comunicação por trás da requisição. Ele terá ciência, por exemplo, de O conceito de interface está ligado à área de Interação Humano-Computador (IHC), que pode
onde se encontra o servidor ou servidores encarregados de receber e processar a sua ser resumida como o estudo da interação entre pessoas e computadores. Nesse contexto, a
requisição. Isso permite, por exemplo, que ele cancele a requisição a qualquer momento, caso interface, muitas vezes chamada de interface do utilizador, é quem provê a interação
entre o
o servidor encarregado de processá-la fique muito distante de onde ele se encontra. ser humano e o computador. No início da utilização dos computadores, tal
interação era
realizada através de linha de comando e, posteriormente, também através de
interfaces
gráficas (Graphical User Interface (GUI). ) . Segundo Morais (2014), no início, a interação foi,
GABARITO de certa forma, primária, deixando um
pouco de lado o ser humano, por não existir um estudo
aprofundado desses aspectos.
1. Em relação à responsabilidade de realizar as requisições no modelo Cliente x
Servidor, assinale a alternativa correta:
Sobre essa variedade nas características dos dispositivos utilizados como interface para
O conceito de design responsivo teve sua origem no Projeto Arquitetônico Responsivo. Tal
projeto prega que uma sala ou um espaço deve se ajustar automaticamente ao número e fluxo
de pessoas dentro dele. Para tanto, é utilizada uma combinação de robótica e tecnologia,
como: sensores de movimento; sistemas de controle climático com ajuste de temperatura e
iluminação; juntamente com materiais – estruturas que dobram, flexionam e expandem.
Da mesma forma que no Projeto Arquitetônico Responsivo, arquitetos não refazem uma sala
ou um espaço de acordo com o número, fluxo e as características de seus ocupantes, no
Ambiente
Web não devemos ter que precisar construir uma versão de uma mesma página de
acordo com
as características dos seus visitantes. Isso traria ainda outros custos, como
identificar uma enorme combinação de tamanhos de tela e tecnologia, entre outros
fatores,
para criar uma mesma quantidade de páginas correspondentes.
DESIGN RESPONSIVO
Segundo Knight (2011), o design responsivo é a abordagem que sugere que
o design e o
desenvolvimento devam responder ao comportamento e ao ambiente do usuário
com base no
LAYOUTS FLUIDOS
Para entender o conceito de layout fluido, é necessário entender primeiro o que seria o
seu LAYOUT FLUIDO
oposto, ou seja, o layout fixo. Já os layouts fluidos fazem uso de unidades
flexíveis – no lugar de definir as dimensões com o
uso de
quantidades fixas são utilizados valores flexíveis. Isso permite,
por exemplo, que no
lugar de definir que o cabeçalho de uma página
tenha 1366 pixels de largura, possamos definir
que ele ocupe 90% do
tamanho da tela do dispositivo que o visualiza. Daí o conceito de
fluido,
ou seja, de adaptabilidade ao campo de visão conforme
dimensões do dispositivo que visualiza
a página.
PIXEL
autor/shutterstock Um pixel é o menor ponto que forma uma imagem digital, sendo que um conjunto de
pixels com várias cores formam a imagem inteira.
LAYOUT FIXO
adaptam às
alterações no tamanho do campo de visão dos dispositivos que os
visualiza. EM
Unidade de medida tipográfica, estando relacionada à letra “M”. O tamanho
base dessa
unidade equivale à largura da letra “M” em maiúscula.
REM
Enquanto o EM está relacionado ao tamanho do elemento de contexto (ou seja,
definimos o
valor EM de um elemento tomando como base o seu elemento pai),
no REM definimos que o
elemento de contexto, o elemento pai, será sempre a tag HTML <body>. Daí a letra “R” nessa DISPOSITIVOS DIVERSOS. COM O SEU USO PODEMOS, POR
unidade, que faz referência à raiz (root). EXEMPLO, DEFINIR
QUE DETERMINADO ESTILO DE UM OU
MAIS ELEMENTOS SEJA APLICADO APENAS A DISPOSITIVOS
CUJA LARGURA MÁXIMA DE TELA SEJA IGUAL OU MENOR
SAIBA MAIS QUE 600PX.
A Figura 4 mostra um fragmento de código onde uma Media Query é
utilizada para impedir
Além das unidades, fixas e flexíveis já mencionadas, há
ainda outras disponíveis. A listagem
que um menu lateral (o elemento HTML cuja classe equivale a
“menu_lateral”) seja exibido
completa pode ser acessada através do site
do W3C – CSS Units.
caso a largura da tela do dispositivo seja menor que 360
pixels.
MEDIA QUERY
ATENÇÃO
DESIGN ADAPTATIVO
Um site é planejado e construído com a definição de seis layouts
predefinidos, onde são
previstos pontos de quebra para que a página se
adapte às seis diferentes dimensões
utilizadas.
Por fatmawati achmad zaenuri | Fonte: Shutterstock
A) A interface tem como objetivo proporcionar uma comunicação mais natural entre usuário e 2. Em relação ao design responsivo, assinale qual opção corresponde à melhor ação a
B) Interface é o meio pelo qual interagimos com um software, com uma aplicação, permitindo o A alternativa "A " está correta.
C) É o nome dado à parte de um sistema com a qual o usuário mantém contato ao usá-lo. Como visto anteriormente, para aplicar o Design Responsivo devemos fazer uso de uma
D) A interface é a disciplina responsável pelo layout no desenvolvimento de software. Um dos combinação de técnicas a fim de garantir que uma página corresponda às preferências e
seus princípios é garantir a criação de telas mais bonitas, que chamem a atenção de quem características dos seus usuários com base no tamanho da tela, plataforma e orientação dos
DE CONTEÚDO
Como nome sugere, têm o papel de marcar o conteúdo pelo seu tipo.
Por Lars Poyansky | Fonte: Shutterstock
SEMÂNTICO
Em linhas gerais, a HTML é uma linguagem de marcação simples, composta por elementos,
Relacionado ao tipo de conteúdo e à criação de seções para agrupá-lo de
acordo com sua
chamados tags, que são relacionados a textos e
outros conteúdos a fim de lhes dar
função no documento. Para melhor entender esse conceito, veja
a Figura 6.
significado. Por exemplo: Podemos marcar um texto
como sendo um parágrafo, uma lista ou
uma tabela. É possível, ainda, inserir vídeos e
imagens. Além disso, também utilizamos essa
marcação para definir a estrutura de um
documento de forma lógica: menu de navegação,
cabeçalho, rodapé etc. As tags podem ser agrupadas em tipos:
AS TAGS HTML
A anatomia de uma tag é composta pela tag de abertura, pela tag de fechamento e pelo
conteúdo – no exemplo anterior, o texto. Com essa combinação temos, ainda, a definição Figura 6:
Tags estruturais básicas de uma página Web.
Fonte: Paixão, 2020.
DE CONTEÚDO
Como nome sugere, têm o papel de marcar o conteúdo pelo seu tipo.
SEMÂNTICO
Relacionado ao tipo de conteúdo e à criação de seções para agrupá-lo de
acordo com sua
função no documento. Para melhor entender esse conceito, veja
a Figura 6.
Conheça, agora, as diferenças entre uma
estrutura em HTML e em folhas de estilo neste vídeo.
SAIBA MAIS
HTML 5
Uma listagem completa de tags e atributos (usados para
adicionar características a uma tag)
pode ser encontrada no site do W3C.
A versão mais recente da HTML é a 5, que trouxe algumas importantes evoluções em relação
às anteriores. Entre tais novidades destacam-se:
Possibilidade de armazenamento de dados no lado
cliente.
Por ODSERG | Fonte: Shutterstock
Otimização nas operações off-line.
Por howcolour | Fonte: Shutterstock
Melhorias de conectividade.
Por Melody Smart | Fonte: Shutterstock
Por Palau | Fonte: Shutterstock
SINTAXE
CSS A sintaxe da CSS consiste em uma declaração onde são definidos o(s) elemento(s) e o(s)
estilo(s) que desejamos aplicar a ele(s) ou, em outras palavras:
O VALOR
Novo parâmetro a ser aplicado à característica do elemento.
EXEMPLO
Para alterar a cor da fonte de um texto inserido em um
parágrafo, poderíamos utilizar uma das
variações apresentadas na Figura 7: SELETORES CSS
A CSS permite uma série de combinações para a aplicação de estilos. Pode-se usar
aplicações
simples, como as vistas até aqui, nas quais apenas um elemento foi
selecionado, ou
combinações mais complexas, em que vários elementos podem ser agrupados
a fim de
receberem um mesmo estilo.
Figura 7 –
Exemplo de aplicação de CSS. Fonte: Paixão, 2020.
No exemplo anterior, vimos duas formas para definir o estilo de uma tag de parágrafo. No
primeiro, o elemento ao qual o estilo foi aplicado foi definido com a utilização de seu
atributo ID. BOAS PRÁTICAS RELACIONADAS À CSS
A respeito dos seletores, propriedades existentes e mais detalhes sobre a
CSS é recomendado
ler o Guia de Referência do próprio W3C. É boa prática e fortemente recomendado utilizar a forma Externa para incluir CSS em uma
página Web. Entre outras vantagens, como uma melhor organização do código, separando o
HTML do Estilo, devemos ter em mente que um mesmo arquivo CSS pode ser usado em várias
páginas de um site.
COMO INSERIR O CSS NA PÁGINA WEB
INLINE
Os estilos, neste caso, são aplicados com a utilização do atributo “style”
seguido de uma ou
mais propriedades/valores.
INTERNO
Os estilos são definidos com a utilização da tag
<style>, dentro da tag <head> no documento.
EXTERNO
Essa é a forma preferencial de inserir estilos. Nela, é utilizado
um arquivo externo, com
extensão “.css”, contendo apenas estilos. Para
vincular esse arquivo externo ao documento é
utilizada a tag
<link> dentro da tag <head>.
formas Inline e
Interna, precisaríamos replicar um mesmo código em todas as páginas. Imagine linguagem de programação que, assim como
o CSS, é interpretada pelo Navegador. Entre
agora ter que fazer alguma alteração ou inclusão, tal operação precisaria ser
repetida inúmeras suas principais características, destaca-se
o fato de ser multiparadigma (orientação a objetos,
protótipos, funcional etc.).
vezes. Em contrapartida, se usarmos um arquivo externo e o
linkarmos em todas as páginas,
precisaremos trabalhar apenas em um único código,
tornando-o muito mais fácil de ser mantido
e ainda diminuindo consideravelmente
nosso trabalho.
Uma nova funcionalidade tem ganhado bastante espaço ultimamente no que diz respeito à
CSS: os pré-processadores, como Sass, Less, Stylus
etc.
PRÉ-PROCESSADORES
SINTAXE
O Javascript é, ao mesmo, amigável, mas também completo e poderoso. Embora criado para
ser leve, uma vez que é interpretado nativamente pelos navegadores, trata-se de uma
JAVASCRIPT
linguagem de programação completa e, como já mencionado, multiparadigma. Logo, seus
O JSON (JavaScript Object Notation) é um formato para
troca de dados no Ambiente Web.
códigos podem ser tanto estruturados quanto orientados a objetos. Além disso, permitem
que
Logo, é importante fazer menção a ele quando falamos das
tecnologias do lado cliente, uma
bibliotecas, como Jquery, Prototype
etc. sejam criadas a partir de seu core, estendendo assim
vez que tal formato está entre os mais utilizados no
intercâmbio de dados com o lado servidor e
a sua funcionalidade. Vejamos algumas características dessa linguagem:
entre diferentes sistemas, independentemente da
linguagem utilizada nos mesmos. Embora
relacionado ao Javascript, como o próprio nome
diz, não é um formato exclusivo dessa
linguagem e pode ser usado mesmo em sistemas onde
esta não esteja presente.
JQUERY
Jquery é uma biblioteca Javascript rápida, pequena e rica em recursos que simplifica
processos como a manipulação de documentos HTML, eventos, animação, além do
AJAX
(JQuery).
PROTOTYPE
provê extensões ao ambiente de script do navegador, fornecendo APIs para manipulação Por IYIKON | Fonte: Shutterstock
do
DOM e AJAX (PrototypeJs).
EXEMPLO
JSON
Figura 8 – Como
inserir Javascript em páginas Web. Fonte: Paixão,
2020.
Assim como foi dito em relação à CSS, deve-se dar preferência à
utilização de arquivos
A primeira parte da Figura 8 mostra o fragmento de uma
página HTML onde há um botão e um externos para a incorporação de Javascript.
evento – onclick – que, ao ser
disparado (no click do botão), chama a função
Outra boa prática consiste em incorporar arquivos externos de
Javascript ao final da página,
“funcaoJavascript”,
declarada no corpo do HTML, logo após a tag <button>. Tal
função exibe
após o fechamento da tag
<body>. Com isso, temos ganho de desempenho, uma vez que o
um alerta na tela. A segunda parte da Figura
mostra a declaração do Javascript dentro da tag
carregamento da página HTML é feito de cima para baixo.
Logo, quanto mais código, CSS ou
<head>. Este código faz uso de um evento, o de carregamento da janela
do navegador, para
Javascript, existir no topo da
página, dentro da tag <head>, mais demorado será o
exibir uma alerta de boas-vindas. Por fim, na última
parte da Figura vemos a declaração para a
carregamento da página em si.
incorporação de um
arquivo externo JS, assim como o código do arquivo.
faz uso do Javascript no lado servidor.
NODE.JS
É um interpretador de JavaScript assíncrono com código aberto orientado a eventos,
focado em migrar a programação do Javascript do cliente (frontend) para os servidores.
VERIFICANDO O APRENDIZADO
A) O HTML cuida do conteúdo, o CSS, do layout/apresentação e o Javascript, do CSS e o Javascript foram desenvolvidas. A utilização em conjunto destas tecnologias, que se
comportamento/interação. Com isso, ao não misturarmos as funções − embora seja possível −, complementam, traz inúmeros benefícios, desde a otimização na criação das páginas ao
obtemos vários benefícios, como o de separação de interesses e consequente facilidade para resultado final.
manter o código, uma vez que podemos ter diferentes pessoas trabalhando ao mesmo tempo
em diferentes partes do site.
B) O HTML é a base, a principal tecnologia do lado cliente. Apenas utilizando HTML é possível
criar uma página rica em conteúdo – já que as tags servem justamente para isso −, layout – já
MÓDULO 4
que tudo fica dividido na estrutura semântica do HTML − e interatividade, já que elementos
como o Formulário existem justamente para isso. Reconhecer as tecnologias do
lado servidor
D) Entre as três tecnologias do lado cliente, CSS é a mais dispensável e menos importante, já
que é possível cuidar de todo o layout e apresentação fazendo uso apenas de HTML. PHP, PÁGINAS DINÂMICAS E
ACESSO A
DADOS
GABARITO
1. Ao desenvolvermos uma página Web devemos nos preocupar não somente com o
resultado final, mas também em utilizarmos corretamente cada uma das tecnologias.
PHP
Neste contexto, assinale a opção correta quanto às boas práticas a serem seguidas:
Uma das principais funções das linguagens de programação Server Side é permitir o acesso
a
A alternativa "A " está correta. informações armazenadas em Bancos de Dados. Uma vez que apenas utilizando HTML e
Javascript isto não é possível, faz-se necessária a utilização de uma linguagem no lado
servidor. Entre as diversas linguagens disponíveis no lado servidor estão o Java, o
Python, o
Como frisado nas seções de Boas Práticas, o Ambiente Web está em constante evolução. Tal
ASP, o .NET e o PHP – que conheceremos um pouco mais ao longo deste tópico.
fator, somado aos princípios básicos como semântica e separação de responsabilidades
definem o que são as boas práticas quanto às tecnologias Client Side.
COMO O PHP FUNCIONA
O PHP é uma linguagem interpretada, ou seja, ela precisa “rodar” sobre um servidor Web.
Com
isso, todo o código gerado é interpretado pelo servidor, convertido em formato HTML
e então
exibido no navegador.
ETAPA 01
ETAPA 02
ETAPA 03
Por Casimiro PT | Fonte: Shutterstock
ETAPA 04
Nginx, entre outros. e $email, que recebem dois valores enviados de um formulário HTML, através do método
POST. Daí a utilização
do array superglobal $_POST – cujos índices ‘nome’ e ‘email’
correspondem ao
atributo ‘name’ dos campos input do formulário. A seguir, é utilizada a
função
“echo” para a impressão de uma frase e do conteúdo das
variáveis recebidas. Repare ainda na
ANATOMIA DE UM SCRIPT PHP utilização, mais uma vez, de uma tag
html, a <br/>, em meio a código PHP.
Um script PHP é composto por código delimitado pelas tags <?php e ?>. A última, de
fechamento, não é obrigatória. Devido à sua simplicidade, um mesmo script PHP pode conter
tanto código estruturado
quanto orientado a objetos. Pode até conter código de marcação
HTML. Neste último caso,
o código próprio do PHP deverá ficar entre as tags de abertura e
fechamento. A
Figura 9 mostra dois exemplos de código, um apenas em PHP e outro
mesclado com HTML. Ao analisarmos os códigos, inicialmente é importante notar que ambos
possuem a extensão
“.php”. Outras extensões possíveis, mas atualmente em desuso, são
“.php3”, “.php4”,
“.phtml”.
Figura 9 –
Exemplos de Código PHP. Fonte: Paixão, 2020.
Assim como fizemos com o Javascript, veremos a seguir um resumo sobre a sintaxe do PHP: O PHP permite a inclusão de um script dentro de outro script. Isso é muito útil,
sobretudo se
pensarmos no paradigma de orientação a objetos, em que temos, em um
programa, diversas
VARIÁVEIS
classes, codificadas em diferentes scripts. Logo, sempre que
precisarmos fazer uso de uma
As variáveis em PHP são criadas com a utilização do símbolo de cifrão ($).
Além disso, PHP é dessas classes, de seus métodos ou atributos, basta
incluí-la no script desejado. Para incluir
case
sensitive. Logo, tomando como exemplo as
variáveis mostradas na Figura 9, $nome e um script em outro o PHP disponibiliza algumas funções:
$email, ambas são diferentes das
variáveis $Nome e $Email.
Include
TIPOS DE DADOS
Require
O PHP é uma linguagem fracamente tipada. Logo, embora possua suporte para
isto, não é
Include once
necessário definir o tipo de uma variável em sua declaração.
Require_once
Os tipos de dados disponíveis em PHP são: Booleanos, inteiros, números de
ponto flutuante,
strings, arrays, interáveis (iterables), objetos, recursos,
NULL e call-backs.
OPERADORES CONDICIONAIS
ACESSO AO SISTEMA DE ARQUIVOS
O PHP tem suporte às condicionais if, else, if e else ternários, if else e
switch.
LAÇOS DE REPETIÇÃO Através do PHP é possível ter acesso ao sistema de arquivos do servidor Web. Com isso é
possível, por exemplo, manipular arquivos e diretórios, desde a simples listagem à
inclusão ou
Estão disponíveis os laços: For, foreach, while e do-while.
exclusão de dados.
FUNÇÕES E MÉTODOS
O PHP possui uma grande quantidade de funções e métodos nativos.
CASE SENSITIVE
Sensível a letras maiúsculas e minúsculas. Ou seja, faz diferença quando utilizamos uma
e
outra − conforme o exemplo fornecido, onde as letras “e” e “E” estão em minúsculo e
maiúsculo, respectivamente, em cada nomeação.
Se fôssemos implementar em uma página Web tudo o que estudamos até aqui, teríamos uma A combinação das tecnologias do lado cliente com as tecnologias do lado servidor produzem
página HTML básica, com um pouco de interação no próprio navegador, graças ao
Javascript, as páginas dinâmicas. Nelas, é possível receber as informações provenientes do cliente,
e também com um pouco de estilo, este devido ao CSS. processá-las, guardá-las, recuperá-las e utilizá-las sempre que desejarmos. E não é só
isso:
Além disso, já sabemos que é possível enviar dados do HTML para o PHP através de um Podemos guardar todo o conteúdo do nosso blog no banco de dados. Com isso,
teríamos
formulário. Mas e agora? Qual o próximo nível? O que fazer a seguir? A resposta para
essas apenas uma página PHP que recuperaria nosso conteúdo no banco e o exibiria no
navegador.
Páginas
Páginas dinâmicas
estáticas
PÁGINAS DINÂMICAS
Manualmente, Automaticamente através de
Inclusão/Alteração/Exclusão
direto no código scripts no lado servidor, como
Para prosseguirmos, é importante definirmos o que são páginas dinâmicas. A melhor de conteúdo
HTML PHP
forma
de fazer isso, porém, é definindo o que seria o seu antônimo, ou seja, as páginas
estáticas. HTML + Javascript + CSS, sem conexão com uma linguagem de programação,
formam
o que podemos chamar de páginas estáticas. Embora seja até possível termos Armazenamento do Na própria
Em um banco de dados
um site
inteiro composto por páginas estáticas, isso seria muito trabalhoso e também conteúdo página HTML
nada usual.
Tabela 2 –
Comparativo entre páginas estáticas e dinâmicas. Fonte: Paixão, 2020.
Atenção! Para visualização completa da tabela utilize a rolagem horizontal
A PARTIR DO JAVASCRIPT
O Javascript possui, essencialmente, duas formas para se comunicar com linguagens do lado
Servidor: Através das APIs (Application Programming Interface) XMLHttpRequest e Fetch API.
A primeira é amplamente utilizada, sendo a forma mais comum de realizar esta comunicação.
É normalmente associada a uma técnica de desenvolvimento Web chamada AJAX. Já a
segunda é mais recente e oferece algumas melhorias, embora não seja suportada por todos os
navegadores.
Por Tommy Lee Walker | Fonte: Shutterstock A comunicação em ambas consiste em, através de algum evento no navegador – que
normalmente é originada em uma ação disparada pelo usuário −, enviar uma requisição ao
Se, por um lado, o SGBD é responsável por montar a estrutura do banco de dados − entre
lado servidor, como recuperar algum dado, por exemplo, tratar o seu retorno e o exibir na tela.
outras funções −, por outro lado, para recuperarmos uma informação guardada em um banco
Isso tudo sem que seja necessário recarregar toda a página.
de dados e exibi-la em uma página Web, é necessário utilizar uma linguagem do lado
servidor,
como o PHP. Em outras palavras, não é possível acessar o banco de dados
utilizando apenas
HTML ou mesmo Javascript. Sempre será necessária a utilização de uma
linguagem server
side para o acesso aos dados.
VERIFICANDO O APRENDIZADO
D) O PHP é altamente adaptável à HTML. Logo, assim como a HTML, um script PHP é
1. O PHP é uma linguagem de script, altamente adaptável à HTML e que lhe possibilita
interatividade e dinâmica. Assinale a alternativa correta quanto a esta afirmação:
Leia o livro Interação humano-computador, escrito por Simone Diniz Junqueira Barboza
e Bruno Santana da Silva, da editora Elsevier.
Visite o tópico "CSS Units" no site do W3C e conheça a lista completa das unidades de
medidas da CSS. Conforme mencionado, a CSS possui uma série de unidades de
medidas para expressar tamanho, sendo esse associado a propriedades como “width”,
AVALIAÇÃO DO TEMA:
“margin”, entre outros. Estão disponíveis unidades de tamanho absoluto, como
centímetros, milímetros, pixels etc. e também unidades de tamanho relativo, como “em”,
“ex”, entre outros.
REFERÊNCIAS Assim como a maioria das tecnologias, a CSS possui um guia de referência oficial. Como
esse guia é mantido pelo W3C, entre no site para acessá-lo e conhecer a sua
especificação e todos os detalhes a ela relacionados.
BENYON, D. Interação Humano-Computador. São Paulo: Pearson Prentice Hall, 2011.
KNIGHT, K. Responsive Web Design: What It Is And How To Use It. In: Smashing Magazine.
Responsive Design.
CONTEUDISTA
MOZILLA. MDN Web Docs: CSS Preprocessor.
PAIXÃO, A. Notas de Aula sobre Ambiente Web Cliente x Servidor e as Tecnologias do Alexandre de Oliveira Paixão
professor Alexandre Paixão. Disponível sob licença Creative Commons BR Atribuição – CC
CURRÍCULO LATTES
BY, 2020.
EXPLORE+
OBJETIVOS
MÓDULO 1
MÓDULO 2
DEFINIÇÃO MÓDULO 3
Apresentação dos conceitos de HTML, linguagem de marcação e estrutura básica de páginas Demonstrar as tags complementares às tags básicas em uma página
Web
Web.
MÓDULO 4
PROPÓSITO
Aplicar um formulário em uma página Web
INTRODUÇÃO
PREPARAÇÃO
O objetivo principal de uma linguagem de marcação de hypertexto,
e mais especificamente da
HTML – que será usada como linguagem padrão e alvo de nosso
estudo –, é o de estruturar o
Ler sobre o conceito básico de HTML.
conteúdo de um documento. Este conteúdo
pode ser composto de textos, figuras, tabelas
Ter instalado no computador um navegador web/browser e um editor de texto que dê suporte
à
etc.
marcação HTML. No Sistema Operacional Windows é indicado o Notepad++. No Linux, o Nano
Editor.
Estrutura, por sua vez, pode ser
definida como a organização dos elementos de conteúdo. de 1996 passou a ser mantida pelo World Wide Web
Consortium (W3C), além de ter
Para realizar
essa função, a HTML faz uso de um sistema hierárquico de elementos
chamados ganhado também o
status de norma internacional (ISO/IEC) em 2000.
de tags.
MÓDULO 1
O PRINCÍPIO DA HTML
Por whiteMocca/Shutterstock
A especificação da HTML foi formada a partir da junção de dois padrões: o
SGML e o HyTime.
O primeiro, SGML (Standard Generalized Markup
Language), é, na verdade, um padrão ISO
que especifica as regras para a criação de
linguagens de marcação que sejam independentes
de plataforma. A EVOLUÇÃO DA HTML: VERSÕES
Já o HyTime (Hypermedia/Time-Based Structuring Language)
é um padrão desenvolvido pela
Ao longo dos anos, a HTML tem passado por uma série de aperfeiçoamentos. Tal processo é
ISO com o objetivo de possibilitar que
hiperdocumentos hipermídia pudessem ser descritos em
liderado pelo W3C.
Desde a sua criação, a HTML teve várias versões: HTML, HTML 2.0, HTML
função de sua estrutura e conteúdo
e, consequentemente, utilizados por quaisquer sistemas
3.2, HTML 4.01,
XHTML, HTML 5, HTML 5.1 e HTML 5.2.
conformantes (Newcomb et al,
1991).
Veja na tabela a seguir o histórico de versões da HTML:
Inicialmente, a especificação da HTML e sua evolução foram mantidas pelo IETF (Internet
Engineering Task Force), desde sua primeira publicação formal, em 1993. Entretanto, a
partir
Ano Versão Histórico
1991 HTML Tim Berners-Lee cria a HTML
TIPOS DE DOCUMENTO
O ponto inicial da estrutura de uma página Web é o tipo de documento a ser utilizado.
1995 HTML 2 Grupo de Trabalho HTML define a HTML 2.0
Inicialmente, a HTML continha apenas tags para marcações
simples, uma vez que ainda não
existia um
dispositivo com interface gráfica onde pudesse ser exibida.
1999 HTML 4.01 W3C publica a Recomendação HTML 4.01 MARCAÇÃO SIMPLES
Marcação simples, nesse contexto, diz respeito ao tipos de tags HTML nas
versões
2000 XHTML W3C publica a Recomendação XHTML 1.0 iniciais.
2016
W3C candidata a Recomendação HTML 5.1
Com isso, as primeiras tags eram relacionadas a elementos como títulos,
parágrafos, quebras
HTML 5.1
2017 W3C publica a Recomendação HTML 5.1 2ª edição de linha etc. Entretanto, com a sua rápida expansão
e sobretudo pelo lançamento do primeiro
navegador, o Mosaic, surgiu a
necessidade de criação de novas tags, para marcações mais
complexas.
2017 HTML 5.2 W3C publica a Recomendação HTML5.2 Tal necessidade se tornou contínua, tendo como principais pilares estes
eventos já
mencionados: a rápida expansão da Web e a construção de novos
navegadores.
Tabela 1:
Histórico de versões da HTML O fato de que cada navegador implementava seus próprios padrões,
incluindo tags que só
podiam ser interpretadas por eles mesmos, tornou
necessária a adoção de padrões. Por isso, o
Atenção! Para visualização completa da tabela utilize a rolagem horizontal
W3C criou o DTD – Definição
de Tipos de Documentos (do inglês Document Type Definition),
que é uma
lista de elementos, atributos e requisitos relacionados a uma
determinada
linguagem ou variação da linguagem.
COMENTÁRIO
FRAMESET
Tag obsoleta da HTML4 usada para combinar múltiplos frames e exibi-los como
numa única
RENDERIZADAS página.
Acesso à DTD: Public – logo, a DTD a que se refere está disponível para uso de forma
pública;
Portanto, o DOCTYPE:
STRICT A partir da HTML5, quando a HTML deixou de ser baseada na SGML, a declaração do
DOCTYPE
foi simplificada, como visto a seguir:
<!doctype html>
<head>
diferenças. <body>
</body>
</html>
RAIZ
Por iinspiration/Shutterstock
OUTRA CARACTERÍSTICA IMPORTANTE SOBRE
AS
TAGS, QUE
ABORDAREMOS DE MANEIRA MAIS
APROFUNDADA A SEGUIR, É QUE UMA TAG DEVE
ESTRUTURA DE UMA PÁGINA WEB – SER ABERTA E
FECHADA.
ELEMENTOS OBRIGATÓRIOS
A declaração <html> é a abertura, e o seu fechamento se dá com
a declaração </html>. Com
Como visto anteriormente, a estruturação de uma página Web tem início na definição do isso, observando a figura 1, é
possível perceber que as demais tags estão contidas dentro da
DocType a ser utilizado. Em seguida, é necessário inserir um conjunto de tags que, em tag raiz,
<html>.
conjunto com o DocType, formam a sua estrutura básica. Tal estrutura é demonstrada na
figura
1:
<script> É responsável pela inclusão e/ou definição de scripts relacionados ao
COMENTÁRIO documento.
CABEÇALHO CORPO
A tag <head> é chamada de cabeçalho do documento. Fazendo analogia ao corpo humano, Logo abaixo do cabeçalho deve ser inserida a tag <body>. Esta é responsável pela
devemos vê-la como a cabeça, uma vez que esta contém as tags que serão usadas para estruturação do documento, sobretudo de seu conteúdo e também apresentação – embora
RODAPÉ
A área final da página, onde normalmente são dispostos links, avisos de
direitos autorais,
informações complementares sobre o proprietário do site
etc.
CABEÇALHO
Uma área inicial, logo na parte superior da página. Normalmente vemos um
título, uma
logomarca ou algo do tipo.
BARRA DE NAVEGAÇÃO
Esta área pode ser tanto horizontal quanto vertical – e, em alguns casos, os
dois. Contém os
links para navegação pelas seções/páginas do site.
CONTEÚDO
O conteúdo principal da página, que pode ser dividido em subseções. VAMOS PRATICAR?
BARRA LATERAL
Agora que vimos um pouco de teoria sobre a estrutura de uma
página Web, chegou a hora de B) <html><body><header> e <footer>
praticar. Assista ao vídeo a seguir:
C) <DocType><html><head> e <body>
GABARITO
A) O DocType não é importante e nem obrigatório. Portanto, sequer precisa ser declarado.
Conforme visto na Figura 1, a estrutura considerada obrigatória, para a correta renderização de
Sendo assim, o que de fato importa são as tags utilizadas no documento.
uma página Web nos navegadores, é composta pelas tags <DocType><html><head> e
B) A especificação W3C (contendo as tags suportadas, entre outros padrões) para cada versão <body>.
de HTML perde sua importância a partir do lançamento de uma nova versão.
C) A combinação entre a definição de um DocType e a utilização das tags suportadas por ele
permite a correta renderização de uma páginas Web.
D) Nunca será possível renderizar uma página Web que contenha tags definidas como
MÓDULO 2
obsoletas pelo W3C.
A) <html> e <body>
Aprendemos que a HTML é uma linguagem de marcação que faz uso de tags para estruturar o
seu conteúdo. Mas o que são tags? Como visto nos exemplos do módulo anterior, tags são OUTRO PONTO IMPORTANTE É A FORMA COMO
UMA
palavras, escritas entre os caracteres de menor “<” e maior “>” e que servem para
informar ao TAG É
ESCRITA, ENTRE OS SINAIS DE MENOR E
navegador a estrutura e o significado do conteúdo inserido em uma página
Web.
MAIOR. ALÉM DISSO, ELA DEVE,
OBRIGATORIAMENTE,
SER
FECHADA. PARA ISSO,
REPETIMOS A DECLARAÇÃO DA TAG E UTILIZAMOS
UMA BARRA “/” ANTES
DO
SEU NOME.
EXEMPLO
Tags textuais
EXEMPLO São responsáveis por organizar o conteúdo da página, ou seja, textos, mídias e links, por
exemplo. Algumas das principais tags textuais, inclusive vistas anteriormente, são:
<p>, <h1>
Vamos a um exemplo: ... <h6>, <img> e <a>. Essas tags e suas funções
serão descritas a seguir, quando tratarmos
das tags semânticas.
<img src=”imagem.jpg” alt=”minha imagem” />
Tags semânticas
Esta tag é utilizada para a inserção de imagens no
documento. Temos dois exemplos de
atributos em sua declaração: src e alt, que
são nomes de atributo; e “imagem.jpg” e “minha A partir da HTML5 foram inseridas tags com a função semântica de organizar a estrutura de
Há uma enorme variedade de atributos, assim como de relacionamentos entre eles e as tags.
Ao longo dos próximos módulos, veremos alguns dos principais, lembrando que o site do W3C
contém a lista completa de atributos e combinações.
Por ora, cabe ainda destacar dois atributos de extrema importância no desenvolvimento
Web:
ID
Utilizado para definir um identificador, que deve ser único, para uma tag em
um documento.
CLASS
Usado para definir uma classe à qual uma ou mais tags pertencem. Com base
nesses dois
tipos de identificação, é possível, por exemplo, fazer
referência a um ou mais atributos para
Fonte:Shutterstock
Figura 2 –
Tags estruturais básicas de uma página Web <h4>
tag <h1>, no
subtítulo seguinte, <h2>, e assim por diante. Além
disso,
<h5>
uma página poderá conter várias <h1>,
<h2>... <h6>. A exceção aqui fica
Ao analisar a Figura 2, é possível perceber que existem tags específicas para cada seção
do
<h6> por conta da tag
<h1>, uma vez que é recomendado utilizar apenas uma
conteúdo. Essa é uma característica importante da HTML, chamada de
semântica.
numa
mesma página.
Logo, semântica, neste contexto, pode ser considerada como a correta utilização de uma
tag
HTML de acordo com o seu conteúdo ou finalidade.
Isso cria uma organização no documento que facilita tanto para você, que o escreveu,
quanto
É semelhante à <div>. Entretanto, enquanto a <div>
é um elemento não
para outras pessoas que venham a editar o mesmo documento. Além disso, muitos
dispositivos
<span> semântico no bloco (quando usada,
quebra o conteúdo em uma seção),
fazem uso dessa marcação para uma correta interpretação do conteúdo ali
contido.
a <span> é
embutida (não quebra o conteúdo, apenas o agrupa).
A seguir, veremos outras tags e suas respectivas funções:
Inclui um bloco de conteúdo que deve ser usado quando se deseja inserir
<article> <br /> Usada para inserir uma quebra de linha.
um artigo, como um post de um blog, por exemplo.
Tabela 3: Lista de
tags estruturais, textuais e semânticas.
<h1>
Usada para inserir títulos ao longo da página. É uma boa
prática que
Atenção! Para visualização completa da tabela utilize a rolagem horizontal
<h2>
cada seção ou cada bloco de texto seja
precedido por um título. Trata-se
<h3>
de uma tag hierárquica,
logo, no título mais importante deve ser usada a
<i>: aplica o efeito de itálico em um texto;
É interessante notar que as duas produzem o mesmo efeito visual (que <b> e
<i>,
respectivamente) em um texto, ou seja, marcá-lo como negrito e/ou
itálico. Entretanto, há uma
diferença importante entre elas, que vai
além da visualização do texto no navegador pela
maioria dos
usuários.
TAGS OBSOLETAS
TAGS DE FORMATAÇÃO <STRONG> E <EM> VS
<B> E
<I> A cada nova versão da HTML, novas tags são criadas, assim como antigas são
descontinuadas. Estas, chamadas de obsoletas, embora ainda possam ter suporte em boa
parte dos navegadores, devem ser evitadas.
A última versão HTML ainda dá suporte a algumas tags direcionadas à formatação visual de
conteúdo. Embora possam ser substituídas por CSS, quatro delas merecem atenção especial:
Em primeiro lugar, porque provavelmente foram substituídas por novas tags, com
melhor
semântica.
<b>: aplica o efeito de negrito em um texto;
Em segundo lugar, pelo risco de desconfigurarem o conteúdo da página, uma vez que os
<strong>: aplica o efeito de negrito em um texto e o marca como importante;
browsers podem deixar de suportá-las a qualquer momento.
A tabela 4 lista algumas tags obsoletas:
A) São nomes, rótulos, que servem para informar ao browser como uma página deve ser
renderizada.
Tag Função
B) As tags são marcações que, embora possuam a mesma forma de serem declaradas,
contêm instruções específicas de acordo com o seu nome.
<applet> Identifica a inclusão de um applet Java.
C) São elementos que têm a responsabilidade de organizar e identificar o conteúdo de uma
página Web.
D) As tags são textos simples inseridos entre o sinal de < e >, e podem tanto ser usadas a
<center> Centraliza horizontalmente o conteúdo de um bloco.
partir das especificações W3C ou serem criadas/inventadas por cada pessoa ao construir um
documento HTML.
Tabela 4: Exemplos
de tags obsoletas. C) A criação de novas tags com teor semântico na HTML5, como <header> e <footer>, teve
como finalidade apenas dar um novo nome à tags já existentes e amplamente utilizadas, já que
Atenção! Para visualização completa da tabela utilize a rolagem horizontal
a maioria das páginas Web possuía um cabeçalho e um rodapé.
Atualmente consideradas obsoletas, as tags <center> e <font> ainda são usadas
em muitas
D) Um código HTML não pode ser dito semântico caso não faço uso de todas as tags definidas
páginas HTML. Ambas se enquadram no conceito, já mencionado, de que não é
função da
HTML cuidar da apresentação. Logo, as duas foram substituídas por propriedades
CSS. na HTML5.
GABARITO
VERIFICANDO O APRENDIZADO 1. Marque a alternativa incorreta e que não pode ser usada para definir o que são as
tags:.
MÓDULO 3
Ordenadas <ol> <li> --
Demonstrar as tags
complementares às tags básicas
Tabela 5: Tags
utilizadas para a representação de listas
LISTAS
Atenção! Para visualização completa da tabela utilize a rolagem horizontal
</ol>
<dd> Descrição do terceiro elemento </dd>
</dl>
Resultado:
Resultado:
Primeiro Item da lista
Primeiro Item da lista não ordenada
Descrição do primeiro elemento
Segundo Item da lista
Segundo Item da lista não ordenada
Descrição do segundo elemento
Terceiro Item da lista
Terceiro Item da lista não ordenada
Descrição do terceiro elemento
Figura 3 – Tags e
representação visual das listas no navegador
LISTA NÃO ORDENADA
<ul>
(O BULLET
–
PEQUENO CÍRCULO PRETO), NO CASO
Resultado:
DA SEGUNDA, PODEM SER ALTERADOS COM A
Primeiro Item da lista não ordenada UTILIZAÇÃO DE
CSS.
<dl>
Quando precisamos lidar com dados tabulares em uma página web utilizamos tabelas. As
<dd> Descrição do segundo elemento </dd>
tabelas usadas nesse documento são exemplos do tipo de dado e também da apresentação
obtida ao utilizarmos tais elementos na HTML. de
estruturação.
Tabela 6: O
elemento Tabela e suas tags
AS TABELAS E A SEMÂNTICA
Também representa colunas e é usada para exibir o título de uma coluna,
possuindo, neste sentido, função semântica. Assim como a tag <td>,
deve
<th> Podemos dizer que as tabelas foram, desde a criação do código HTML, o elemento mais
estar contida em uma tag de linha. Este elemento apresenta estilos
utilizado fora de sua função semântica. Isto se deve ao fato de que a estrutura básica
de uma
próprios, sendo renderizado de forma diferente das colunas comuns.
página HTML lembra muito a estrutura de uma tabela: cabeçalho, rodapé, seções
(linhas) etc.
Logo, foi prática comum ao longo de muitos anos a codificação de páginas
web completas
Armazena o cabeçalho da tabela, sendo composto por linhas e colunas. fazendo-se uso de tabelas. Além de ir de contra a semântica, tal uso traz
consigo outros
<thead> Este
elemento, a exemplo do que vimos anteriormente, tem função problemas, como o peso das páginas e a redução da acessibilidade, entre
outros.
semântica em
termos de estruturação de conteúdo.
um exemplo completo;
VAMOS PRATICAR?
Assista ao vídeo a seguir:
Fonte:Shutterstock
Figura 4
– Demonstração de aplicação no editor.
APLICAÇÃO
Como vimos, um documento HTML pode conter tanto tabelas simples quanto mais complexas.
Tendo como base o arquivo HTML usado nos módulos anteriores e o conteúdo visto
CONTROLE DO CONTEÚDO (VÍDEO OU ÁUDIO)
INCORPORADO PELO NAVEGADOR, ALÉM DE
DEFINIREM
ALGUNS COMPORTAMENTOS, COMO O
AUTOPLAY E O LOOP, QUE SÃO AUTOEXPLICATIVOS.
Os três atributos aqui descritos são apenas uma prévia, uma vez que há alguns outros
disponíveis. Outros componentes importantes, contidos na especificação do HTML5, são os
eventos que permitem o controle de mídia embutida com a utilização de Javascript. São os
chamados “Media Events”.
Por TippaPatt/Shutterstock
TEORIA DA PRÁTICA
Ao final deste módulo, vamos inserir novas tags em nosso arquivo HTML. Inclua ao menos
MÍDIAS: VÍDEO E ÁUDIO uma tag de vídeo e uma de áudio. Além disso, experimente inserir e remover os controles
mencionados, sempre salvando e comparando os resultados no navegador.
O suporte à multimídia na HTML vem melhorando ao longo dos anos e versões.
Com o
<!doctype html>
<audio>.
<meta charset=”utf-8”>
Como visto, os atributos também têm suma importância ao fazermos uso das tags de vídeo e
</body>
áudio. No exemplo acima, temos, inicialmente, o atributo “src” – que informa o endereço,
</html>
VERIFICANDO O APRENDIZADO
OS ATRIBUTOS “CONTROLS”, “AUTOPLAY” E
“LOOP”, QUE SÃO ESPECÍFICOS PARA ESTE TIPO DE
MÍDIA EM QUESTÃO, FORNECEM SUPORTE AO
D) As tags HTML colspan e rowspan, quando inseridas dentro das tags e , permitem modificar
1. QUAL FRAGMENTO DE CÓDIGO HTML, ENTRE AS OPÇÕES ABAIXO,
a organização das linhas e colunas da tabela, mesclando o seu conteúdo.
DEVE SER UTILIZADO PARA REPRESENTAR A LISTA APRESENTADA NA
FIGURA ABAIXO:
GABARITO
CAPÍTULO I 1. Qual fragmento de código HTML, entre as opções abaixo, deve ser utilizado para
representar a lista apresentada na figura abaixo:
PRIMEIRA SEÇÃO
Capítulo I
SEGUNDA SEÇÃO
Primeira Seção
TERCEIRA SEÇÃO
Segunda Seção
CAPÍTULO II
Terceira Seção
CAPÍTULO III
Capítulo II
B) <ul><li><ol><li></li><li></li><li></li></ol></li><li></li><li></li></ul>
A alternativa "A " está correta.
C) <ul><li><ul><li></li><li></li><li></li></ul></li><li></li><li></li></ul>
D) <ol><li><ul><li></li><li></li><li></li></ul></li><li></li><li></li></ol>
Os elementos de listas no HTML são bastante flexíveis, além de abrangentes, permitindo a
estruturação das mais variadas combinações, incluindo listas aninhadas. Logo, é possível
incluir uma lista aninhada − um elemento “filho” de um item de outra lista.
2. AS LINHAS E COLUNAS DE UMA TABELA HTML PODEM SER
2. As linhas e colunas de uma tabela HTML podem ser modificadas (mescladas) para
MODIFICADAS (MESCLADAS) PARA PERMITIR UMA ORGANIZAÇÃO NÃO
permitir uma organização não uniforme. Assinale a opção verdadeira:
UNIFORME. ASSINALE A OPÇÃO VERDADEIRA:
A alternativa "B " está correta.
A) Para modificar a organização de uma tabela basta inserir novas tabelas aninhadas.
B) Os atributos colspan e rowspan são utilizados para modificar a organização de colunas e Os atributos têm papel importante dentro da HTML. Combinados às tags, eles informam como
linhas em uma tabela. elas devem se comportar.
C) A organização de linhas e colunas de uma tabela pode ser modificada com a utilização de
tags HTML como as listas, por exemplo.
MÓDULO 4
FORMULÁRIOS: COMPOSIÇÃO E
VALIDAÇÃO
Tudo o que vimos até esse ponto nos permitiu criar um documento HTML estruturado contendo
Este elemento é um dos mais utilizados para prover interação entre usuários e uma página
Web ou até mesmo um aplicativo mobile.
EXEMPLO A exemplo do que vimos com as tabelas, o formulário é composto por uma tag principal, um
container, e várias tags “filhas”.
Tag Função
Usado para definir um título, uma legenda, que descreva para que serve
label
cada campo do formulário.
Figura 6: Formulário
HTML – Elementos e atributos
Tabela 7:
Estrutura básica de tags do elemento formulário É fácil identificar para o que serve cada campo do formulário anterior ao
lermos o conteúdo da
tag <label>. Além disso, a tag <fieldset>
cria seções dentro do formulário, ajudando a separar
Atenção! Para visualização completa da tabela utilize a rolagem horizontal
os campos no
código e a visualizar a página no navegador.
Isso fica ainda mais claro quando vinculamos ao <fieldset> a tag <legend>.
Como vimos, é necessária uma atenção especial aos atributos quando tratamos de
formulários.
CONHECENDO MELHOR OS ELEMENTOS E
Para melhor visualização e entendimento, todos os atributos contidos no código mencionado
ATRIBUTOS DO FORMULÁRIO são descritos na tabela 8:
Na figura 6 temos o fragmento HTML correspondente a um formulário. Nela é possível ver as Tag Atributo Função do atributo
tags mencionadas anteriormente, assim como algumas tipificações nos campos e novos
atributos. Falaremos sobre ambos a seguir:
Define a URL (endereço) para a qual os dados do
<form> action
formulário serão
enviados.
RESET
Este atributo também pode ser utilizado na tag <input>.
Associada à tag <button>, dispara o evento que limpa os valores do
formulário.
Ele define
o valor do campo.
No caso da <option>, os
seus valores possíveis são previamente
definidos quando BUTTON
<option> value
a página é codificada. Já na <input>, embora
também
Uma tag <input> pode ser do tipo “button” – exercendo, assim, a mesma
função da tag
possa ser previamente definido, normalmente é o usuário
<button>.
quem
define o seu valor.
Ao longo de vários anos, havia apenas esses tipos disponíveis na HTML. Com isso, algumas
necessidades − fossem de inserção de tipos de dados específicos, fossem de validação de
Tabela 8:
Formulário HTML – Tags básicas e seus atributos valores, conforme veremos mais adiante − não podiam ser supridas apenas com a utilização
Atenção! Para visualização completa da tabela utilize a rolagem horizontal de tags, sendo necessário combinar códigos Javascript e CSS. Por exemplo: um campo para
seleção de data.
Além disso, novos tipos de dados, com características específicas, ganharam importância
ao
longo dos anos. Podemos citar, como exemplo, o e-mail. Embora seja um campo de texto,
ele
O ATRIBUTO “TYPE” possui um padrão de composição próprio, como o uso de @, entre outras
características.
Este atributo, dada a sua importância, precisa ser visto de forma aprofundada. Como já
dito,
além de definir o tipo do campo, ele também determina como este se comporta. No
código
apresentado na tabela é utilizado apenas o tipo “text”, que, no caso da tag
<input>, NOVOS ATRIBUTOS E TIPOS
corresponde ao seu valor padrão.
Alguns outros tipos comuns são: Pensando nas deficiências citadas anteriormente, e como é comum na evolução da HTML, a
HTML5 definiu novos tipos de entrada e também novos atributos relacionados a
formulários.
PASSWORD
Entre eles, podemos destacar:
Mascara o texto com asteriscos.
Atributos ser usado em conjunto com o
atributo
pattern.
Tipos
VALIDAÇÃO DE FORMULÁRIOS
Tipo Função Comentário
Para explicarmos a criação de um formulário HTML, apresentamos tags e atributos que nos
permitem montar um formulário já funcional, pronto para ser preenchido e submetido.
tel Inserir números de telefone. Para uma melhor usabilidade, deve
Entretanto, há um outro aspecto relacionado a esses elementos que precisa ser discutido:
A
validação de dados.
Por stoatphoto/Shutterstock
PENSANDO EM QUEM VAI PREENCHER O
FORMULÁRIO.
Verifica se o dado inserido em um campo é consistente com o seu tipo e/ou padrão
(pattern).
EXEMPLO
Como exemplo para a primeira validação, podemos citar
novamente o elemento input do tipo
“e-mail”.
Logo, declarar uma tag input com o type “e-mail” faz com
que, naturalmente, seja validado o
seu conteúdo.
Algo semelhante acontece com a utilização do atributo pattern, sendo que, neste caso, é
você
quem define o que um campo precisa conter para ser considerado válido. Por exemplo:
determinar o formato desejado para um campo que receba um número de telefone.
Você pode definir que ele contenha o DDD, com dois caracteres numéricos, seguido por dois
conjuntos de números – um contendo 5 e outro contendo 3 ou 4 caracteres – o que geraria
este código: pattern=“[0 − 9]2 [0-9]{5}-[0-9]{3,4}$”.
Além da validação pelo tipo de dado, há também a validação de campos obrigatórios. Logo,
quando precisamos que determinado campo não fique em branco, usamos o atributo
“required”. VAMOS PRATICAR?
Assista ao vídeo a seguir:
ATENÇÃO
VERIFICANDO O APRENDIZADO
partir de ações do usuário, dados sejam enviados/informações sejam cadastradas ou
1. SOBRE A COMPOSIÇÃO E O COMPORTAMENTO DO FORMULÁRIO
comportamentos e conteúdo da própria página sejam modificados – como acontece, por
HTML É INCORRETO AFIRMAR QUE:
exemplo, quando filtramos o resultado de uma pesquisa de produtos em um site de e-
commerce. Embora existam diferentes tipos de campos de formulários, permitindo a inserção
A) É formado por um ou mais elementos que permitem ao usuário interagir com a página,
padronizada de diferentes tipos de dados, é prática recomendada validar os seus dados antes
selecionando opções, inserindo textos etc.
de serem enviados/submetidos.
B) O formulário HTML, por ser um elemento de interação, na maioria das vezes envia os dados
2. Sobre a validação de formulários na HTML5, assinale a afirmativa verdadeira:
nele contidos para um servidor Web, responsável por receber e tratar os dados.
A alternativa "B " está correta.
C) Apenas os formulários validados podem ser enviados/submetidos.
D) Possui atributos que definem o endereço/URL para onde os dados serão enviados e o
método como serão enviados. Uma das grandes novidades da HTML5 foi implementar, nativamente, a validação de dados em
um formulário − tarefa que, nas versões anteriores, só era possível no lado cliente, com a
utilização de Javascript.
A) A HTML5 é tão flexível que permite ao usuário, o visitante de uma página, decidir quando CONCLUSÃO
ele deseja ou não que o formulário que está preenchendo seja validado.
C) A partir da HTML5, para facilitar o trabalho do desenvolvedor, novas tags foram criadas para
CONSIDERAÇÕES FINAIS
que a validação aconteça apenas no lado servidor.
Neste tema, foram apresentados os conceitos de linguagens de marcação, mais
D) Como a validação de formulários na HTML5 é habilitada por padrão, automaticamente todos
especificamente da HTML. Ao longo dos tópicos, além dos conceitos e de sua história,
os campos do formulário serão marcados como obrigatórios e, portanto, deverão ser
conhecemos a sua estrutura e os elementos que a compõem, como tags e atributos. Para
preenchidos.
melhor fixação de cada conteúdo, utilizamos exercícios práticos.
GABARITO
Os formulários são compostos por tags que permitem a entrada e seleção de dados. Tal
funcionalidade concede a este elemento a característica de interatividade, possibilitando que, a
AVALIAÇÃO DO TEMA:
REFERÊNCIAS
FREEMAN, E.; ROBSON, E. Use a Cabeça! Programação em HTML5:
desenvolvendo
aplicativos para web com Javacript. Rio de Janeiro: Alta Books, 2014.
DEFINIÇÃO
EXPLORE+
Conceito de Folhas de estilo/CSS. Recursos disponíveis nas Folhas de estilo/CSS. Conceito de
Recomendação do texto: Estrutura de documentos e sites − MDN. Box Model em uma
página web. Aplicação de CSS a Boxes em uma página web. Conceito de
seletores CSS. Conceito de pseudoclasses
e pseudo-elementos. Aplicação de estilos CSS
Para conhecer as referências das tags HTML, leia: HTML Element Reference − utilizando pseudoclasses e pseudo-elementos. Propriedades CSS de
posicionamento. Conceito
W3Schools. de frameworks CSS. Apresentação de frameworks CSS.
PROPÓSITO
CONTEUDISTA
Compreender o que são Folhas de estilo – CSS e como podem ser utilizadas para cuidar da
Alexandre de Oliveira Paixão
apresentação, layout e estilo de páginas HTML.
CURRÍCULO LATTES
PREPARAÇÃO
Para aplicação dos exemplos, será necessário um editor de texto com suporte à marcação No ambiente Web, a HTML é a linguagem responsável pela estrutura do conteúdo de uma
HTML. No sistema
operacional Windows, é indicado o Notepad++; no Linux, o Nano Editor. página. Embora seja capaz
também de organizar o conteúdo visualmente, é função da CSS
cuidar desse aspecto e de tudo relacionado ao
estilo e layout da página.
Com a CSS, é possível, por exemplo, alterar a forma e posicionamento dos elementos, as
MÓDULO 1
MÓDULO 1
Identificar os fundamentos da CSS
Identificar os fundamentos da CSS
Reconhecer os recursos de cores, texto, fontes e webfontes da CSS3 A CSS, ou Folhas de Estilo em Cascata (Cascading Style Sheets), é uma linguagem de estilo
que fornece total
controle sobre a apresentação de um documento escrito em HTML. Com ela,
é possível, por exemplo, alterar a
forma e posicionamento dos elementos, as cores, tipos e
tamanhos de fontes e muito mais.
MÓDULO 3
A CSS permite a aplicação seletiva de estilos a elementos em uma página HTML. Isso significa
dizer que um ou
mais estilos podem ser aplicados em um documento inteiro ou mesmo em
Identificar os conceitos de Box Model, pseudoclasses, pseudo-elementos e posicionamento
apenas parte dele. Além disso, um mesmo
tipo de elemento pode ter, ao longo do documento,
diferentes estilos.
MÓDULO 4
INTRODUÇÃO
A CSS, ou Folhas de Estilo em Cascata (Cascading Style Sheets), é uma linguagem de estilo
que fornece total
controle sobre a apresentação de um documento escrito em HTML.
SINTAXE DA CSS
Para aplicar um estilo CSS a um elemento específico, é necessário identificá-lo e apontar qual
O conjunto de estilos aplicados a um seletor é envolvido por chaves “{“ e “}”.
de suas
propriedades queremos alterar e qual valor queremos atribuir-lhe. Essas três
Vamos ver a seguir um exemplo de duas propriedades dadas à tag <p> e o resultado dessas
informações definem a sintaxe da
CSS, conforme pode ser visto no exemplo a seguir.
declarações no navegador.
Tendo o exemplo anterior como base, podemos perceber que, para aplicarmos um estilo SELETORES
utilizando CSS, são necessários:
Vimos nos exemplos anteriores um estilo sendo declarado em uma tag HTML <p>. Nós nos
O seletor: nesse caso, a tag HTML <p>; referimos a essa tag como
sendo o seletor ao qual o estilo foi aplicado. Há muitos outros
seletores disponíveis além daqueles
correspondentes às tags HTML, conforme veremos a
Ao menos uma propriedade: a cor de fundo (background-color);
seguir.
Essa declaração de estilo faria com que todas as tags <p> do documento apresentassem a cor SELETORES CLASS E ID
azul ao fundo. O
exemplo utilizou apenas uma declaração (propriedade + valor), mas é
possível inserir em conjunto várias
outras. O seletor de classe é definido a partir da declaração do atributo “class” em um elemento HTML.
A propriedade e seu valor devem ser separados por dois pontos “:”; Importante frisar que, embora um elemento possa ter mais de uma classe, terá somente um
identificador.
Uma declaração deve ser separada da declaração subsequente com a utilização do ponto-e-
Em termos de nomenclatura para a definição do nome da classe ou do identificador, não existe
uma regra a
ser seguida. Procure utilizar nomes que façam sentido, que tenham relação com a
função do elemento na
página e que, de fato, ajude a identificá-lo ou classificá-lo.
vírgula “;”;
Logo abaixo, podemos ver um exemplo de sintaxe correspondente à declaração desses dois “class” pode ser aplicada a um ou
vários elementos.
atributos na HTML e
na CSS.
Embora o navegador não faça uma verificação se um mesmo “id” foi utilizado em diferentes
Na primeira parte da imagem, é apresentado um fragmento de código HTML. Repare que uma elementos, tal método
pode trazer alguns problemas de estilização e comportamento, uma vez
mesma classe, a
“texto vermelho”, foi atribuída à tag <h1> e a uma das tags <p>. Com isso, que esse seletor também é bastante usado
pelo Javascript. Frente a isso, adote a boa prática
vemos que uma classe
pode ser atribuída a mais de um elemento. Agora note a sintaxe para de definir identificadores únicos.
atribuição de múltiplas classes a um
elemento na segunda tag <p>, à qual foram atribuídas as
classes “texto_descricao” e
“texto_vermelho”.
Em relação ao código CSS, veja que o seletor de ID é representado por uma “#” e o de class SELETORES DE ATRIBUTO
por um “.”,
seguidos de seus nomes. Além disso, foram apresentadas duas formas de sintaxe
que produzirão o mesmo efeito.
A diferença entre elas é que, na segunda, o nome da tag à Esses seletores utilizam nomes de atributos dentro de colchetes, sendo possível combiná-los
qual a identificação ou classe foi atribuída
precede o respectivo sinal. com valores.
Abaixo são mostrados alguns dos seletores de atributo disponíveis:
É possível declarar estilos utilizando a relação entre os elementos. A tabela a seguir mostra os
principais
seletores baseados em relacionamento.
Fonte: Elaborado pelo autor no Notepad++.
Figura 3: Sintaxe de declaração de seletores de classe e identificação.
Seletor Seleção
Embora não exista um padrão ou preferência quanto a utilizar o seletor “id” ou “class”, é
H1 > P Qualquer elemento P que seja filho de um elemento H1.
importante frisar
novamente que um “id” deve ser aplicado a apenas um elemento, enquanto a
sempre dar preferência às primeiras. A seguir são apresentadas
algumas das propriedades
Qualquer elemento P que seja o próximo irmão de um elemento H1 (ou mais comuns da CSS.
H1 + P
seja, o próximo filho de um mesmo pai).
Propriedade Função
Atenção! Para visualização
completa da tabela utilize a rolagem horizontal
Font-family,
Há uma série de propriedades para estilizar o conteúdo textual de um
Font-size,
elemento no que diz respeito à fonte, como a família de fontes, seu
Font-weight,
tamanho, peso (mais clara ou mais escura - negrito) etc.
Fonte: Elaborado pelo autor. etc.
PROPRIEDADES
List-style,
Existem inúmeras propriedades CSS, desde as definidas pela sua especificação, ditas List-style- Há algumas propriedades para estilizar as listas HTML.
propriedades padrão, até
as proprietárias, que funcionam apenas em alguns navegadores. A image, etc.
fim de garantir uma maior compatibilidade,
assim como otimizar o desenvolvimento, deve-se
Margin Controla a distância em função da margem de um elemento para
outro.
INTEGRANDO A CSS À HTML
Há três formas usuais de aplicar estilos em um documento HTML fazendo uso de CSS: Inline,
Interna e Externa.
Além dessas, a HTML5 permite ainda a aplicação em Escopo. Vamos
Padding Controla a distância entre as bordas e o conteúdo de um elemento.
conhecer um pouco mais de cada uma delas?
sobreposição de elementos.
Fonte: Unsplash
null
A declaração Inline faz uso do atributo “style” procedido por declarações separadas por ponto-
e-vírgula
“;”. Esse atributo pode ser usado em qualquer tag HTML.
CSS INTERNA
Também chamada de CSS Incorporada, é declarada na seção <head> do documento HTML.
null
A declaração Inline faz uso do atributo “style” procedido por declarações separadas por ponto-
e-vírgula
“;”. Esse atributo pode ser usado em qualquer tag HTML.
CSS EXTERNA
Nesse caso, os estilos são declarados em um arquivo externo, com extensão “.css” e
vinculados ao documento
HTML por meio da tag <link> ou da diretiva @import dentro da tag
<head>. Ambos os exemplos podem ser
vistos logo a seguir:
null
CSS EM ESCOPO
INTEGRANDO A CSS À HTML
Essa forma de aplicação de estilo foi criada a partir da HTML5. Com ela, é possível aplicar
estilos no
âmbito de escopo, ou seja, específicos para as seções da página onde foram
declarados, incluindo os seus
elementos filhos. No código abaixo, a tag <p> receberá os estilos
definidos, sendo a mesma regra válida
para outros estilos e elementos que, porventura,
venham a fazer parte da <div>.
null
EFEITO CASCATA
Quando trabalhamos com CSS, é comum nos depararmos com a declaração conflitante de
estilos, ou seja,
diferentes definições de estilo para um mesmo elemento. Nessas situações,
entra em ação o Efeito Cascata.
Para entendermos a definição desse efeito, é preciso
abordarmos outros dois conceitos: herança e
especificidade.
HERANÇA
O CSS permite que a aplicação de propriedades a elementos pais seja herdada pelos seus
elementos filhos.
Peguemos como exemplo o código abaixo.
Perceba que o fragmento da Figura 9 foi adaptado. Antes, era aplicado o conceito de herança,
assim o texto
dentro da tag filha assumia o estilo definido para o seu pai. Agora, há um estilo
Seletores de elemento (utilização apenas do nome da tag) são os de menor precedência, por
serem muito genéricos;
Seletores de classe têm mais precedência que os de elemento;
CSS HACK
Seletores de identificação têm mais precedência que os de classe.
Técnica de codificação usada para alterar o comportamento natural da CSS e para
ocultar ou mostrar uma
determinada declaração de acordo com o navegador, sua versão
ou recursos disponíveis.
!IMPORTANT
CSS3
A CSS, atualmente, está em sua terceira versão, a CSS3. Dentre as diversas novidades dessa
versão, destacam-se:
Melhorias nos seletores, com novas possibilidades de seleção: primeiro e/ou último
elemento, elementos pares ou ímpares etc.;
Bordas arredondadas;
Manipulação de opacidade;
TEXTO DO PARÁGRAFO.
< /P >
D) p.classe{ background-color:pink; }
VERIFICANDO O APRENDIZADO
GABARITO
1. A RESPEITO DA INTEGRAÇÃO HTML E CSS, ASSINALE A AFIRMATIVA A alternativa "A " está correta.
CORRETA:
Tanto a HTML quanto a CSS são linguagens interpretadas diretamente pelo browser e que não
A) Tanto a HTML quanto a CSS são renderizadas pelo navegador que, interpretando as tags
precisam ser compiladas – exceto a CSS quando se utiliza pré-processadores.
de marcação e os estilos que lhes são aplicados, as exibe em tempo de execução/requisição
pelo usuário. 2. Sobre a especificidade, assinale a opção que corresponde ao estilo mais específico e
que, consequentemente, será aplicado ao elemento < p > abaixo:
B) Todo o código CSS é compilado pelo servidor web que o transforme em código HTML nativo
< div >
juntamente com a HTML. Já a CSS externa, por não estar dentro do arquivo HTML, precisa ser
< /p >
PROPRIEDADES DE COR
MÓDULO 2
Em quais elementos podemos definir cores.
Veja na tabela a seguir as principais, mas não as únicas, propriedades relacionadas à cor, bem
Reconhecer os recursos de cores, texto, fontes e web fontes da CSS3
como os elementos aos quais podem ser aplicadas.
Até aqui, vimos o conceito de CSS, sua sintaxe e a forma de integração em páginas HTML.
Além disso, vimos
algumas propriedades mais comuns foram apresentadas. Neste módulo,
aprofundaremos o estudo das propriedades
relacionadas a cores, texto, fontes e web fontes, Serve para
Propriedade Onde pode ser utilizada
definir
tomando como base recente especificação CSS, a CSS3.
Com a utilização de CSS, podemos manipular as cores de elementos HTML, seja na aparência
das caixas, seja na
cor de texto. Para isso, há uma série de propriedades CSS disponíveis para background- cor de fundo
Aplica-se a qualquer elemento HTML.
diversos elementos, mas antes
vamos abordar as formas de definição de cores. color de elementos
Com palavras-chave, onde podem ser usados os nomes das cores (seguindo as Atenção! Para visualização
completa da tabela utilize a rolagem horizontal
A propriedade text-align é usada para controlar o alinhamento do texto em razão do contêiner FONT-FAMILY
no qual está
inserido. Essa propriedade é utilizada para definir a família da fonte utilizada em página web ou em
Tal propriedade pode assumir 4 valores: left, right, center e justify. Como os nomes indicam, partes de seu
conteúdo. Utilizando-a, é possível definir, por exemplo, desde uma única fonte a
essas
propriedades alinham o texto à esquerda, direita, ao centro ou de forma justificada. uma lista de fontes, onde
os seus valores são declarados em ordem de importância, da
esquerda para direita. Desse modo, caso uma
determinada fonte não esteja disponível no
dispositivo cliente, a próxima definida será usada, e assim
sucessivamente. Caso nenhuma das
fontes definidas estejam disponíveis no cliente, o navegador fará uso de
uma fonte padrão.
ESPAÇAMENTO ENTRE LINHAS
Estes são exemplos de famílias de fonte: Arial, Verdana, “Times New Roman” (fontes com
nomes compostos
devem ser declaradas utilizando-se aspas), entre outras. As fontes citadas
A propriedade line-height permite alterar o espaçamento vertical entre as linhas de texto. Seus
anteriormente e algumas outras
formam o conjunto de fontes chamadas de Fontes Seguras
valores
possíveis são:
para Web (Web Safe Fonts). Sempre que possível,
deve-se dar preferência à utilização dessas
Normal – valor padrão do navegador (entre 1 e 1.2 em relação ao font-size, dependendo fontes “seguras”, pois possuem suporte pela maioria dos
sistemas operacionais.
do navegador);
FONT-SIZE
A propriedade font-size é responsável por definir o tamanho do texto. Seus valores podem ser A declaração da regra @font-face é feita pela definição de duas principais propriedades: font-
definidos com
a utilização de diferentes unidades de medida, como pixels, porcentagem, “em” family e src. Na
primeira, definimos um nome para a família da fonte que estamos importando,
etc. usando-o ao longo do arquivo CSS.
A segunda aponta para a url onde o arquivo da fonte se
encontra. Vamos ver a seguir a fonte Awesome sendo
declarada.
FONT-STYLE
Propriedade usada na estilização de textos aplicando o efeito de itálico. Seus valores possíveis
são:
normal (ou seja, tira o efeito do texto, sendo o estilo padrão de todo elemento), italic e
oblique (uma
versão mais inclinada em relação ao itálico).
FONT-WEIGHT
O peso de uma fonte é definido com a utilização dessa propriedade. Com ela, é possível Fonte: Elaborado pelo autor no Notepad++.
aplicar o efeito de
negrito em uma escala. Seus valores possíveis são: normal, bold, lighter e Figura 12: Declaração de Web Fonte.
bolder (aumentam ou diminuem o
peso da fonte em relação ao peso da fonte de seu elemento
Como podemos observar, além das propriedades font-family e src, há outras que podem ser
pai); e uma escala numérica que vai de 100 a
900.
aplicadas às Web
Fontes. Em relação à font-family, a partir do momento da sua declaração, o
Há algumas boas práticas e cuidados a serem levados em consideração quando se
trabalha nome definido poderá ser utilizado
para estilizar qualquer outro elemento ao longo do CSS –
com estilização de fontes usando CSS. Uma delas diz respeito ao controle sobre a possível considere que podemos tanto utilizar uma única
família de fontes para o documento HTML
degradação que pode ocorrer na página. Portanto, deve-se tomar os devidos cuidados optando inteiro como a combinação de diferentes famílias.
pela utilização
de uma lista de fontes e mantendo por último as fontes “genéricas”, como Serif,
O código também mostra que as fontes incorporadas podem tanto estar hospedadas
“Sans-Serif” e Monospace.
Desse modo, haverá maior garantia e controle sobre o que o
localmente quanto na internet.
Além disso, há alguns outros elementos na declaração dos
usuário verá como resultado.
quais ainda não falamos. São eles: as funções local
e format.
Cabe destacar também os diferentes tipos existentes de fontes web. Aprofundaremos esses
elementos extra a seguir.
WEB FONTES
As Web Fontes são um importante recurso em termos de tipografia. Se antes a sua estilização
ficava restrita
àquelas disponíveis nos sistemas operacionais dos usuários, a partir da
implementação da regra @font-face
tornou-se possível a utilização de Web Fontes. Essa nova
propriedade permite a utilização de fontes que, ao
serem definidas, são baixadas pelo
navegador no momento de carregamento da página. Logo, sua utilização
permite um controle
maior do layout de uma página no que diz respeito às fontes, além da possibilidade de
serem
usadas fontes com maior apelo visual.
Ícone do word
Essa função indica ao navegador que, antes de fazer o download da fonte definida, deverá
verificar se ela já está disponível na máquina do usuário. TTF/OTF 4.0 3.5 9.0 3.1 10.0
Ícone do word
EOT -- -- 6.0 -- --
Estão disponíveis atualmente alguns tipos de Web Fontes, cuja escolha deve considerar
fatores como a
compatibilidade com a maioria dos navegadores e o tamanho dos arquivos.
Veja a seguir os tipos mais comuns de
web fontes.
atalhos. O exemplo
a seguir mostra as duas formas de realizar uma mesma declaração: Fonte: Elaborado pelo autor no Notepad++.
FONTES
Fonte: Elaborado pelo autor no Notepad++.
A) Os estilos aplicados por padrão pelos navegadores existem para permitir que o controle do
A CSS permite total controle sobre qualquer elemento em uma página. Deve-se ter em mente,
layout do conteúdo da página fique nas mãos do usuário, e não do desenvolvedor.
ao utilizá-la, não só as preocupações com estética, mas também com usabilidade e
B) Os navegadores padronizam os estilos dos elementos de texto e fonte para garantirem a acessibilidade, garantindo assim a melhor experiência possível aos usuários.
usabilidade e acessibilidade das páginas.
2. Assinale a afirmativa CORRETA quanto à utilização de web fontes em relação às
C) A CSS permite total controle sobre os elementos de texto e fonte. Com isso, todo o controle fontes CSS padrões:
fica nas mãos do desenvolvedor, que poderá alterar qualquer aspecto desses elementos,
A alternativa "D " está correta.
tornando assim a página uniforme, uma vez que não dependerá dos estilos padrão dos
navegadores, que são diferentes entre si.
D) Embora a CSS permita a estilização de textos e fontes, os navegadores sempre terão As web fontes permitem um maior controle visual sobre como cada usuário verá o site,
controle sobre o layout da página, podendo, inclusive, redefinir os estilos CSS que não estejam diminuindo assim a dependência de fatores externos, como a disponibilidade de fontes no
computador do visitante.
de acordo com os padrões de acessibilidade.
A) Por serem mais leves, uma vez que são nativas, as fontes definidas através de CSS sempre Identificar os conceitos de Box Model, pseudoclasses, pseudo-elementos e posicionamento
serão renderizadas, sem qualquer tipo de restrição, em qualquer sistema operacional.
B) As web fontes devem ser usadas, em detrimento das fontes padrão, por terem maior apelo
visual.
BOX MODEL
C) A melhor escolha em relação aos estilos de fontes é não usar nem fontes padrão e nem
webfontes, ou seja, é deixar que fique a cargo do navegador escolher a fonte padrão de acordo
Nos módulos anteriores, vimos os conceitos básicos de CSS, sua sintaxe, seus elementos e
com as disponíveis no sistema operacional do usuário.
suas formas de
integração com HTML. Abordamos também como aprimorar o design de
D) Além de fornecerem mais opções, em termos visuais, as web fontes, quando usadas páginas com os estilos de cores, texto e
fontes.
adequadamente, garantem uma menor degradação das páginas, uma vez que não haverá
Neste módulo, avançaremos um pouco mais e percorreremos os conceitos de Box Model
dependência do ambiente do usuário, quanto a esse possuir ou não a fonte definida.
(modelo de caixas ou
retângulos), Pseudoclasses e Pseudo-elementos e Posicionamento.
Os elementos de uma página web são representados por uma caixa que possui o
formato de Para chegar a esse resultado, é importante entendermos o comportamento, a
composição e as
um retângulo. Uma boa analogia aqui seria compararmos a marcação HTML a brinquedos de características de cada bloco, assim como os estilos que podem receber.
bloco.
Nesse sentido, dentro do conceito de Box Model – que, em CSS, está relacionado a design e
layout – nossos
boxes possuem quatro componentes principais: margem (margin), borda
(border), preenchimento (padding) e
conteúdo (content).
Tendo em mãos tais elementos, é nosso papel montá-los, encaixá-los, de forma harmoniosa Fonte: Elaborado pelo autor no Notepad++.
para, ao final, obtermos o resultado esperado. Figura 13: Componentes do Box Model.
A imagem anterior nos ajuda a compreender a composição do Box Model de maneira prática. largura (width,
min-width, max-width) e altura (height, min-height, max-height) podem ser
Repare que foram
definidas 3 caixas com o elemento <div> e, para cada uma delas, foram estilizadas com CSS.
definidos diferentes estilos,
como largura, altura e cor de fundo. Para a <div> com identificador
“box_exemplo” foram declarados
ainda valores para margin, padding, border e content.
BORDER Há ainda a herança, onde um elemento filho pode herdar as propriedades de um elemento pai.
Todos esses modos
de definir estilo são bastante abrangentes. Entretanto, há ainda algumas
A borda delimita a área do elemento - altura e largura. Além disso, permite que uma cor
formas especiais e muito úteis para
se aplicar estilos: as pseudoclasses e os pseudo-
diferente seja
definida para essas extensões do elemento. É controlada pela propriedade CSS
elementos. Veremos a seguir as suas definições e como
utilizá-las.
border e derivadas – com as
quais a largura, a cor e o tipo de borda podem ser definidos.
Atente-se para a seguinte diferença: margin diz respeito ao espaço entre elementos; já o propriedade.
padding refere-se ao conteúdo interno do próprio elemento, além de fazer parte dele. Na A sintaxe para declaração da pseudoclasse é composta pela palavra-chave correspondente ao
prática, isso significa que a div #box_exemplo, cuja largura foi declarada como 400px e altura nome da pseudoclasse
precedido pelo sinal de dois pontos. Veja o exemplo a seguir:
como 200px tem, na verdade, 500px de altura e 300px de largura. Ou seja, o padding
aumentou suas dimensões:
width + padding-right + padding-left => 400px + 50px + 50px =
500px
height + padding-top + padding-bottom => 200px + 50px + 50px = 300px
Para controlar
o preenchimento de um elemento, são utilizadas as propriedades CSS padding-top, padding-
DIV:HOVER{BACKGROUND-COLOR:#000000;}
bottom, padding-right e padding-left, além do atalho padding.
CONTENT Como
Pseudoclasse Para que serve
Essa é a área interna do elemento, ocupada pelo seu conteúdo. Suas dimensões são altura e declarar
largura. Além
disso, sua cor de fundo (background), a cor da fonte (color) de seu conteúdo, sua
:active a:active Selecionar todos os links ativos.
Cabe, ainda, destacar um outro ponto do exemplo relacionado à sintaxe dos pseudo-
elementos: neles são usados
dois pontos duplos (ou dobrados) para a declaração. Isso é
PSEUDO-ELEMENTOS
proposital, para diferenciá-los das
pseudoclasses.
A PROPRIEDADE POSITION
POSICIONAMENTO
A propriedade CSS responsável pelo posicionamento é a “position”. Seus valores possíveis
Para tratarmos de posicionamento em CSS, precisaremos recorrer a alguns conceitos já vistos são: static,
relative, fixed, absolute e sticky. Além disso, as propriedades top, bottom, right e left
– sobretudo os
relacionados ao Box Model, além de relembrarmos que os elementos HTML são usadas em
conjunto, a fim de definir os valores das respectivas distâncias e,
Esses dois conceitos são importantes quando tratamos da estrutura visual de páginas HTML. POSITION RELATIVE
Em uma definição
simplista, ambos tratam de como os elementos, boxes, podem ser
A definição da propriedade “position:relative;” para um elemento faz com que ele seja
posicionados e organizados em uma página. Veja
na Figura 15, logo a seguir, a estrutura em
posicionado de modo
relativo à sua posição normal. Com isso, ao definirmos valores para as
colunas de uma página.
propriedades top, bottom, right e
left, ajustamos a sua posição em relação à sua posição
Em termos de HTML, apenas utilizando boxes (header, footer, section, aside, nav, div etc.), os natural.
elementos
ficariam empilhados uns sobre os outros. Para aplicar o layout visto na Figura 15 e
posicionar os elementos
na página, precisaremos utilizar CSS.
null
POSITION ABSOLUTE
A posição “absolute” faz com que um elemento seja posicionado em relação à localização do
seu elemento
ancestral mais próximo – o qual também deverá estar posicionado (ou seja, não
poderá ser static).
Quando o elemento definido com absolute for o primeiro elemento da página, ele então será
posicionado em relação ao <body>. Com isso, tal elemento acompanhará a rolagem da página.
POSITION STICKY
RESULTADO DOS COMPONENTES DO BOX
Esse valor para a propriedade position faz com que um elemento seja posicionado com base
na posição de
rolagem da página (scroll). Com isso, seu comportamento varia entre o relativo e MODEL NO NAVEGADOR
o fixado, dependendo da
posição do scroll.
Tal propriedade é mais recente, em termos de especificação, assim não possui suporte em
todas as versões
dos navegadores. É usada, normalmente, quando queremos criar um efeito
de sobreposição de conteúdo. Na
prática, o elemento é visualizado ao abrirmos uma página.
Ao rolarmos para baixo, ele se mantém fixo, com
os demais conteúdos passando sob ele.
VERIFICANDO O APRENDIZADO
B) A tag < p > será posicionada em função da tag < body >, uma vez que não foi declarada
1. EM RELAÇÃO ÀS PROPRIEDADES E DIMENSÕES DO BOX MODEL
uma propriedade position para a < div >.
REPRESENTADO PELO ELEMENTO < DIV >, CUJOS ESTILOS SÃO
DEFINIDOS ABAIXO, ASSINALE A AFIRMATIVA CORRETA.
C) A tag < p > será posicionada da mesma forma como se nenhuma propriedade de
DIV{
posicionamento lhe fosse atribuída.
WIDTH:500PX!IMPORTANT;
D) Para assumir a posição relativa, a tag < p > precisaria estar localizada fora da < div > ou de
BORDER: 5PX SOLID BLACK;
qualquer outro elemento pai.
PADDING-TOP: 10PX;
PADDING-RIGHT:10PX;
PADDING-BOTTOM: 5PX;
GABARITO
MARGIN-LEFT:50PX;
width:500px!important;
padding-bottom: 5px;
margin-left:50px;
}
2. NO FRAGMENTO DE CÓDIGO ABAIXO, A PROPRIEDADE POSITION
COM O VALOR RELATIVE É DEFINIDA PARA O ELEMENTO < P >. A alternativa "B " está correta.
CONSIDERANDO O CÓDIGO HTML E CSS, ASSINALE A AFIRMATIVA
CORRETA.
...
Como visto, as dimensões de largura e altura são alteradas de acordo com a borda e o padding
para o elemento < p >. Considerando o código HTML e CSS, assinale a afirmativa
< / BODY >
correta.
...
...
P{
POSITION:RELATIVE;
}
< p > Texto < / p >
A) A tag < p > será posicionada de forma relativa em relação ao seu elemento ancestral, ou
seja, em relação à < div >.
< / body >
Nesse contexto, a maioria dos Frameworks CSS mantêm similaridades entre si, além de prós e
... contras
específicos, que vão desde a facilidade de aprendizagem, ao suporte e à
p{
documentação disponíveis, entre
outros fatores.
position:relative;
Logo, a escolha de um Framework pode se dar por fatores objetivos, relacionados às suas
} características ou aos
requisitos específicos de um determinado projeto, ou mesmo por fatores
Para isso, é importante conhecer suas as principais características, além das vantagens e
As propriedades de posicionamento precisam ser utilizadas em conjunto com as propriedades
desvantagens de cada
opção. A seguir, três dos principais Frameworks CSS existentes serão
top, bottom, right e left – e seus respectivos valores. Do contrário, nenhuma mudança será
apresentados: Bootstrap, Foundation e
Semantic UI.
aplicada ao seu posicionamento. No código acima, a declaração CSS será ignorada pelo
navegador.
MÓDULO 4
FRAMEWORKS CSS
Como visto nos módulos anteriores, a CSS é uma tecnologia poderosa, flexível e, muitas BOOTSTRAP
vezes, complexa. São
várias propriedades e muitos valores possíveis. Inúmeras combinações
que podem, inclusive, sobreporem umas às
outras.
Ele foi desenvolvido pela equipe do Twitter em 2011 e, posteriormente, passou a ser mantido
A marcação HTML tem um comportamento natural em relação aos elementos, além de de modo
independente. Sua licença é open source e, atualmente, é o framework CSS mais
pequenas variações de um
navegador para outro. Por outro lado, há bastante similaridade em popular.
A grid do Bootstrap, por exemplo, possui 12 colunas e 5 breakpoints responsivos, que são
pontos de
quebra nos quais o layout será ajustado para atender a diferentes resoluções de COMO UTILIZAR O BOOTSTRAP
tela. Conforme visto na
figura abaixo, são eles: extra small, small, medium, large e extra large.
Para utilizar o Bootstrap, é necessário incluir a sua biblioteca, composta por dois arquivos: um
Na prática, esse sistema deve ser corretamente utilizado para que todos os elementos da
CSS e outro
Javascript. Essa instalação é simples e pode ser feita pela inclusão dos
página sejam alinhados
e visualizados em diferentes tamanhos de tela.
respectivos arquivos diretamente na
HTML.
# of columns 12
Nestable Yes
SISTEMA DE GRID
O Sistema de Grid do Foundation também é composto por 12 colunas. Nas versões mais
recentes, o sistema básico
de grid foi substituído por um novo sistema, o XY Grid. Em tal
sistema, novas funcionalidades foram
adicionadas, como alinhamento vertical e horizontal,
dimensionamento automático e grid vertical completa.
SEMANTIC UI
Mais recente entre os 3 Frameworks aqui apresentados, o Semantic UI se destaca por utilizar,
nativamente, um
pré-processador CSS, o LESS, e a biblioteca Javascript Jquery. Também é
um Framework open source.
FOUNDATION Uma importante particularidade desse Framework é que suas classes utilizam sintaxe de
linguagem natural, como
substantivos, por exemplo, para vincular conceitos de maneira mais
O segundo Framework a ser abordado é o Foundation, criado em 2011 e que está entre os intuitiva.
mais conhecidos e
utilizados. É um framework responsivo, baseado na abordagem mobile-first.
Sua principal característica é
fazer uso, nativo, do pré-processador de CSS chamado SASS.
Além dos 3 frameworks vistos anteriormente, há vários outros disponíveis. Alguns dos mais
conhecidos são:
VANTAGENS E DESVANTAGENS DA UTILIZAÇÃO DE
FRAMEWORKS
Na prática, não existe uma recomendação definitiva sobre usar ou não um Framework em um
projeto Web. Se, por
um lado, a utilização de Frameworks ajuda a otimizar o tempo de
desenvolvimento, por outro lado, tira um
pouco do controle do programador sobre o que está
sendo feito, uma vez que não é recomendado alterar o
comportamento padrão dos códigos
fornecidos pelos Frameworks. A lista abaixo traz alguns prós e contras
citados mais
comumente:
Vantagens Desvantagens
Padronização do
código, muito válido,
Tamanho / peso do Framework, que pode impactar no
PURE
Considerado o framework mais leve, foi desenvolvido pela Yahoo; sobretudo, quando
carregamento da página;
se trabalha em
MATERIALIZE CSS
Baseado no Material Design, ambos criados pelo Google e
equipe;
utilizados em seus produtos;
BULMA
Framework baseado unicamente em CSS, não faz
uso de Javascript;
SKELETON
Framework minimalista. Possui apenas 400 linhas de
código.
Restrições de design – lembre-se de que o framework possui
Em suma, como visto em suas definições e em seus exemplos de utilização, os Frameworks Economia de tempo, um layout padrão, baseado em
grids. Isso pode acabar
têm a mesma finalidade,
servindo para as mesmas funções. Em outras palavras, tudo que é uma vez que não é limitando a imaginação no momento de criação do design ou
possível criar com um Framework também é
possível com outro. precisar criar todo o impactando no tempo de
desenvolvimento para que seja
código CSS do zero; possível encaixar o layout criado no padrão estabelecido pelo
Por outro lado, há pós e contras em cada um deles, como o tamanho do Framework e impactos
Framework;
no carregamento da
página, facilidade ou dificuldade de aprendizagem e simplicidade de
D) Não há um melhor ou um pior Framework. Cada um oferece vantagens e desvantagens,
Seguimento de Curva de aprendizado – aprender a utilizar adequadamente
prós e contras. Inclusive, alguns podem ser a melhor opção para um determinado projeto e
padrões, já que os um Framework pode levar algum tempo;
para outro não.
Frameworks estão
sempre antenados
às especificações e
recomendações 2. DENTRE AS OPÇÕES ABAIXO, ASSINALE A QUE NÃO REPRESENTA
oficiais; UMA VANTAGEM EM SE UTILIZAR FRAMEWORKS CSS.
A) Flexibilidade e Adaptabilidade
GABARITO
Atenção! Para visualização
completa da tabela utilize a rolagem horizontal
1. Em relação à utilização de Frameworks, assinale a afirmativa incorreta:
VERIFICANDO O APRENDIZADO
A utilização de vários Frameworks CSS em um mesmo projeto pode causar inúmeros
problemas, por exemplo conflitos de estilos, uma vez que alguns compartilham entre si os
mesmos nomes de seletores. Logo, é imprescindível utilizar apenas um Framework por projeto.
1. EM RELAÇÃO À UTILIZAÇÃO DE FRAMEWORKS, ASSINALE A 2. Dentre as opções abaixo, assinale a que não representa uma vantagem em se utilizar
AFIRMATIVA INCORRETA: Frameworks CSS.
B) Os Frameworks são um importante recurso que auxiliam no desenvolvimento, diminuindo o O sistema de Grids dos Frameworks, embora bastante útil, acaba fazendo com que, em muitas
tempo, padronizando o código e garantindo uma maior compatibilidade entre navegadores e situações, seja necessário adaptar o layout do site ao Framework, e não o contrário.
dispositivos.
Nesse tema, foi apresentada a CSS, linguagem de estilo responsável pela camada visual em ao desenvolvimento web. Busque por:
CONTEUDISTA
REFERÊNCIAS
Alexandre de Oliveira Paixão
Meyer, E., Weyl, E. CSS: The Definitive Guide. O’Reilly Media, Inc., 2017.
CURRÍCULO LATTES
EXPLORE+
Identificar o conceito de vetor e sua utilização em JavaScript
MÓDULO 4
INTRODUÇÃO
Segundo Flanagan (2011), JavaScript é a linguagem de programação da Web mais utilizada pelos sites. Além disso, todos os navegadores − estejam
eles em desktops, jogos, consoles, tablets ou smartphones − incluem interpretadores JavaScript, fazendo desta a linguagem de programação mais
onipresente da história.
Ao longo deste tema, veremos os conceitos básicos e as principais funcionalidades do JavaScript. Além disso, aprenderemos a integrá-lo às
DEFINIÇÃO páginas HTML e a utilizá-lo − desde tarefas básicas, como manipular a interface DOM, a tarefas mais complexas, como transmitir dados entre o
cliente e o servidor de forma assíncrona.
Apresentação dos conceitos básicos e das principais funcionalidades do JavaScript, uma das linguagens de programação mais importantes e Vamos começar nossa jornada acessando os códigos-fontes originais propostos para o aprendizado de Javascript. Baixe o arquivo aqui,
utilizadas na internet. descompactando-o em seu dispositivo. Assim, você poderá utilizar os códigos como material de apoio ao longo do tema!
PROPÓSITO MÓDULO 1
Compreender a linguagem JavaScript, sua sintaxe e utilização em páginas HTML.
Identificar os conceitos básicos, a sintaxe e as formas de utilização do JavaScript
PREPARAÇÃO
JAVASCRIPT
Para aplicação dos exemplos, será necessário um editor de texto com suporte à marcação HTML. No sistema operacional Windows, é indicado o
Notepad++. No Linux, o Nano Editor.
Uma alternativa aos editores instalados no computador são os interpretadores online, como CodePen e JSFiddle.
OBJETIVOS
MÓDULO 1
Fonte: pixcon/Shutterstock
Esta linguagem faz parte da tríade de tecnologias que compõe o ambiente Web, juntando-se à HTML − que cuida da estrutura e do conteúdo das
MÓDULO 2
páginas − e ao CSS − responsável pela apresentação. Sua função, nesse ambiente, é cuidar do comportamento e da interatividade das páginas
Web. Trata-se de uma linguagem de programação interpretada e multiparadigma, uma vez que possui suporte à programação estruturada,
Aplicar as estruturas de decisão e de repetição
orientada a objetos e funcional.
O JavaScript, comumente chamado de JS, foi criado inicialmente para o ambiente Web, no lado cliente. Entretanto, evoluiu ao ponto de atualmente ser
utilizado também no lado servidor, além de ser uma das principais linguagens para o desenvolvimento de aplicativos mobile.
MÓDULO 3
Com JavaScript, é possível até mesmo manipular os estilos de um documento, de forma similar ao que é feito via CSS.
ATENÇÃO
É importante destacar que, embora possuam nomes parecidos, as linguagens de programação JavaScript e Java não têm nenhuma relação.
INCORPORANDO O JAVASCRIPT À HTML
A incorporação do JavaScript a páginas HTML pode ser feita de duas formas:
A INTERFACE DOM
CÓDIGOS NO CORPO DA PÁGINA
Iniciaremos nosso estudo de JavaScript entendendo o que é e como manipular a interface, ou árvore, DOM. Isso auxiliará o entendimento de como
essa linguagem se integra e interage com a HTML. Incluindo os códigos diretamente no corpo da página − dentro da seção <head> e da tag <script>
A sigla DOM significa Modelo de Objeto de Documento. Trata-se de uma interface que permite a manipulação, via programação, de documentos HTML
(e outros, como XML, por exemplo). Além de interface, é, também, comumente chamado de árvore, por fornecer uma representação ARQUIVOS EXTERNOS
estruturada do documento nesse formato.
Através de arquivos externos, com extensão js, linkados ao documento também dentro da seção <head>
A árvore DOM é composta por nós e objetos, ambos possuindo propriedades e métodos, além de eventos. Através dessa estrutura, é possível
acessar, por exemplo, o conteúdo textual de um elemento − como a tag <p> −, recuperar e até mesmo alterar o seu valor.
Para a otimização do desempenho do carregamento da página, deve-se mover todo o código JavaScript para o seu final, após o fechamento da tag
Embora frequentemente associados, o DOM não faz parte da linguagem JavaScript, podendo também ser manipulado por outras linguagens. Neste </body>.
tema, porém ficaremos restritos à manipulação do DOM através do JavaScript.
ATENÇÃO
Deve-se tomar cuidado para não mover códigos ou scripts incluídos que sejam necessários à correta visualização ou aos comportamentos da página,
já que os códigos movidos para o final só serão lidos e interpretados após todo o restante da página.
1 <!doctype html>
2 <html lang="pt-BR">
3 <head>
4 <meta charset="utf-8">
5 <title>Incorporando Javascript em Páginas HTML</title>
6 <!-- Incorporando um arquivo .js externo -->
7 <script src="script.js"></script>
9 <body>
10 <div id="exibe_resultado"> Resultado da Multiplicação: </div>
12 <!-- Incorporando códigos Javascript diretamente na página -->
Por meio do JavaScript, é possível inserir dinamicamente, em tempo de execução, novos elementos à árvore DOM, mesmo que estes não façam 13 <script type="text/javascript">
parte da estrutura inicial da página. Da mesma forma, é possível excluir e alterar elementos preexistentes ou dinamicamente criados. 14 //Com duas barras criamos um comentário de linha em Javascript
15 //Comentários de mais de uma linha podem ser feitos dentro de /* */
Esses elementos, porém, existirão somente enquanto durar a sessão atual do usuário. Ou seja, trata-se de uma manipulação dinâmica e
16
dependente de estado, de ações e interações por parte do usuário, mas que se perderão quando ele sair da página.
17 var variavel;
//Declarando uma variável cujo nome é 'variavel'
18
19 variavel = 3 + 3; //
Atribuindo valores e aplicando uma operação matemática em uma variável
20
22 diálogo na tela cujo conteúdo será o valor da variável 'variavel' */
24
25 var resultadoMultiplicacao = multiplique(10, 50);
// chamando a função 'multiplique' passando dois valores - 10 e 50
26
27 //Manipulando a Árvore DOM a fim de exibir, dentro da DIV declarada no HTML, o resultado da multiplicação juntamente com o seu texto inicial
DICA
28 var divLocal = document.getElementById('exibe_resultado');
29 /*
30 Neste ponto a variavel divLocal é um objeto que representa a div declarada no HTML.
VARIÁVEIS
31 Sendo um objeto é possível acessar seus atributos, como innerHTML, precedido do nome do objeto seguido de um '.'
32 */
São declaradas utilizando-se a palavra reservada “var”, sucedida pelo seu nome. Não devem ser utilizados caracteres especiais como nomes
33 divLocal.innerHTML += resultadoMultiplicacao;
de variáveis.
34
Além disso, embora existam diferentes convenções, procure utilizar um padrão e segui-lo ao longo de todo o seu código para a nomeação das
35 //Definição da função 'multiplique' que recebe dois parâmetros - numero1 e numero2
37
38 /*
39 Declarando uma nova variável que guardará o resultado da operação de multiplicação;
EXEMPLO
40 Iniciando a variável com o valor de 0.
41 */
Na linha 25, a palavra composta “resultado multiplicação” foi transformada em uma variável através do padrão camelcase, ou seja, a segunda palavra
42 var resultado = 0;
(e demais palavras, quando for o caso) é iniciada com a primeira letra em maiúsculo.
43
Outra característica importante de uma variável em JS é que, por se tratar de uma linguagem fracamente tipada, não é necessário declarar o tipo de
44 //Atribuindo à variável 'resultado' o valor resutante da multiplicação dos 2 parâmetros recebidos
dados. Com isso, uma variável que armazenará um número (inteiro, decimal etc.) e outra que armazenará uma palavra (string, char etc.) são
45 resultado = numero1 * numero2;
Após declaradas, as variáveis podem ser utilizadas sem a palavra reservada “var”, como visto nas linhas 19 e 33.
47 //Retornando (devolvendo) o valor da variável resultado
48 return resultado;
49
50 }
51 </script>
LINGUAGEM FRACAMENTE TIPADA
52 </html>
Figura 2: Formas de incorporação do JavaScript numa página HTML. Uma linguagem é dita fracamente tipada quando não é necessário informar o tipo de dado no momento de criação de uma variável.
ATENÇÃO
ATRIBUIÇÃO
Baixe aqui o código usado na Figura 2
As variáveis precisam ser declaradas antes de sua utilização. Entretanto, há uma forma simplificada, vista na linha 25, na qual é feita uma
atribuição de valores no momento de declaração da variável “resultadoMultiplicacao”.
SINTAXE JAVASCRIPT A respeito da atribuição de valores, é importante frisar que, embora declarados da mesma maneira, os tipos de dados são atribuídos de formas
distintas. Um número, por exemplo, pode ser atribuído diretamente a uma variável, enquanto uma string precisará estar envolta em aspas – simples
ou duplas. A linha 13 mostra dois números sendo atribuídos à “variável”.
A Figura 2 mostra tanto as formas de inserção do JavaScript em uma página HTML (linhas 7 e 13) quanto alguns aspectos da sua sintaxe. Tais
aspectos serão vistos em detalhes a seguir, mas, antes de começarmos, é recomendado que você copie o código anterior e o execute – pode ser em Veja o exemplo a seguir, no qual atribuímos uma string a uma variável:
seu computador ou utilizando uma ferramenta de codificação online, como o CodePen ou JSFiddle. Você pode copiar direto do box, ou utilizar o
arquivo Figura 2.
DICA
Serão utilizados os números das linhas do editor, vistos na imagem, para facilitar a localização dos fragmentos e elementos abordados.
VAR NOMEDISCIPLINA = ‘JAVASCRIPT’
COMENTÁRIO
Existem duas formas de inserir comentários no código JavaScript: para os comentários de apenas uma linha, utilizam-se as duas barras “//”. Para os
de múltiplas linhas, utiliza-se “/*” e “*/”. Veja, por exemplo, as linhas 14, 15, 21 e 22.
PONTO E VÍRGULA
Repare o final de cada linha de código − todas foram terminadas com a utilização de um ponto e vírgula. Diferentemente de outras linguagens, em
JavaScript não é obrigatória a utilização de caracteres para indicar o final de uma linha de código, mas, seguindo uma linha de boas práticas, adote
uma convenção e a utilize em todo o seu código.
Salve a alteração e carregue novamente sua página.
OUTROS ELEMENTOS
Repare que o alerta é exibido, mas a div “exibe_resultado” não recebeu o valor de resultado da multiplicação.
Ao longo do código apresentado na Figura 2, foram utilizados outros elementos. A seguir, na tabela 1, cada um deles será descrito:
Isso acontece porque, quando o código está no início da página, ele é lido pelo navegador antes que o restante seja renderizado.
LINHA
Portanto, a tag <div>, por exemplo, ainda não foi carregada e não está presente na árvore DOM.
ELEMENTO PARA QUE SERVE DO Caso queira manter o seu código no início e ter o mesmo resultado de quando ele fica ao final, é necessário utilizar um evento dentro do mesmo, o
CÓDIGO “onload”, e modificar seu código para utilizá-lo.
Exibir uma caixa de diálogo no navegador. Existem outras funções nativas de diálogo,
alert 23
inclusive para receber input de valores.
ONLOAD
Referenciar um elemento da árvore DOM através do valor do seu atributo “id”. Pesquise O evento “onload” pode ser usado quando queremos que algo seja carregado junto com o carregamento da página.
document.getElementById 28
também sobre document.getElementByClassName.
Palavra reservada, utilizada para indicar que será declarada uma função. É procedida
Armazene os números inseridos pelo usuário em duas variáveis;
function pelo nome da função e por parênteses. Caso receba parâmetros, eles devem ser 36
declarados dentro dos parênteses.
Crie uma função para dividir números inteiros;
Palavra reservada, utilizada para indicar o conteúdo a ser retornado pela função. Nem Exiba na tela uma caixa de diálogo com o resultado da divisão precedido pela frase “O resultado da divisão é igual a:”.
return todas as funções retornam valores. Logo, essa instrução só deve ser utilizada por funções 48
que retornem algum resultado. Caso queria ir além, crie uma calculadora para realizar as quatro operações matemáticas. Nesse caso, você precisará pedir ao usuário que escolha a
operação a ser realizada, além dos números de entrada.
Tabela 1: Lista de elementos utilizados no código de exemplo.
RESOLUÇÃO
Atenção! Para visualização
completa da tabela utilize a rolagem horizontal
No vídeo a seguir, o professor Alexandre Paixão nos apresenta um exercício resolvido. Vamos assistir!
Mova o código que está entre as linhas 12 e 51, inclusive, para dentro da seção <head>.
1 body {
C) Com a utilização da linguagem JavaScript, é possível ter acesso à árvore DOM. Com isso, tarefas como a modificação de elementos existentes e a
2 <!doctype html>
inclusão de novos elementos, assim como conteúdos, se torna possível.
3 <html lang="pt-BR">
D) Os códigos JavaScript incorporados ao final da página não permitem a manipulação da árvore DOM, já que são interpretados apenas após o
4 <head>
6 <title>Praticando Javascript - Exercício 1</title>
7 </head>
INCORRETA:
9
10 </body>
12 <script type="text/javascript">
B) Valores de qualquer tipo podem ser atribuídos da mesma forma.
13
C) JavaScript é uma linguagem fracamente tipada. Logo, não é necessário informar o tipo de dado no momento de criação da variável.
14 var numero1 = prompt("Insira o primeiro número: ");
16
17 var resultadoDivisao = divida(numero1, numero2);
GABARITO
18
19 alert('O resultado da divisão é igual a: ' + resultadoDivisao);
1. A linguagem JavaScript é uma linguagem tipicamente do lado cliente, embora também usada, mais recentemente, no lado servidor. Sobre
20
sua utilização no lado cliente, e mais precisamente sobre sua relação com o DOM, assinale a afirmativa correta:
21 function divida(numero1, numero2){
A alternativa "C " está correta.
22
23 var resultado = 0;
24
Através de JavaScript, é possível manipular a árvore DOM, independentemente do modo de incorporação ao documento HTML. A única ressalva diz
25 resultado = numero1 / numero2;
respeito a eventos de manipulação que tentem acessar os nós e os elementos DOM antes que toda a página seja renderizada, como visto em um dos
26
exemplos demonstrados.
27 return resultado;
2. A respeito dos tipos e da utilização de variáveis em JavaScript, assinale a afirmativa incorreta:
28
30 </script>
31 </html>
JavaScript é uma linguagem bastante flexível em relação à declaração e à utilização de variáveis. Entretanto, alguns cuidados são necessários, entre
eles a atribuição de valores do tipo string, que precisam ser englobados por aspas – duplas ou simples.
ATENÇÃO
VERIFICANDO O APRENDIZADO
ESTRUTURAS DE DECISÃO
1. A LINGUAGEM JAVASCRIPT É UMA LINGUAGEM TIPICAMENTE DO LADO CLIENTE, EMBORA TAMBÉM USADA,
MAIS RECENTEMENTE, NO LADO SERVIDOR. SOBRE SUA UTILIZAÇÃO NO LADO CLIENTE, E MAIS
PRECISAMENTE SOBRE SUA RELAÇÃO COM O DOM, ASSINALE A AFIRMATIVA CORRETA:
A) JavaScript permite que a estrutura inicial de uma página HTML seja modificada. Além disso, como também é uma linguagem com suporte do lado
servidor, ela permite que esses códigos HTML modificados sejam salvos na página HTML original.
B) Um script JS pode ser incluído tanto no corpo do documento HTML como através de um arquivo externo. A diferença principal entre essas duas
formas está no fato de que o código inserido diretamente na HTML faz parte da árvore DOM – sendo, portanto, a única forma de manipular os
elementos dessa interface.
Segundo Flanagan (2011), as estruturas de decisão, também conhecidas como “condicionais”, são instruções que executam ou pulam outras Figura 3: Fluxo normal e fluxo alternativo.
instruções dependendo do valor de uma expressão especificada. São os pontos de decisão do código, também conhecidos como ramos, uma vez Nas linguagens de programação, utilizamos as instruções condicionais para implementar o tipo de decisão apresentado no exemplo. Em JavaScript,
que podem alterar o fluxo do código, criando um ou mais caminhos. estão disponíveis as instruções " if/else" e "switch". Tais instruções serão apresentadas a seguir.
Para melhor assimilação do conceito, vamos usar um exemplo a partir do código construído no módulo anterior:
As orientações do programa diziam que deveria ser realizada a divisão de dois números inteiros positivos.
IF
Entretanto, o que acontece se o usuário inserir um número inteiro que não seja positivo?
Ou como forçá-lo a inserir um número positivo? A sintaxe da instrução "if/else" em JavaScript possui algumas formas. A primeira e mais simples é apresentada do seguinte modo:
Para essa função, podemos utilizar uma condição. Ou seja: if (condição) instrução
“... Caso o usuário insira um número inteiro não positivo, avise a ele que o número não é válido e peça que insira um número válido ...” Nessa forma, é verificada uma única condição. Caso seja verdadeira, a instrução será executada. Do contrário, não.
Nesse caso, o fluxo normal do programa é receber dois números positivos, calcular a divisão e exibir o resultado. Perceba que a condição cria um Antes de continuarmos, é importante destacar os elementos da instrução:
novo fluxo, um novo ramo, onde outro diálogo é exibido e o usuário, levado a inserir novamente o número. Ela é iniciada com a palavra reservada “if”.
O fluxo normal e o fluxo resultado da condicional podem ser vistos na Figura 3, a seguir. Nela, são apresentados os passos correspondentes ao nosso
exercício, separando as ações do programa e também as do usuário.
Repare que a verificação “é um nº inteiro positivo” permite apenas duas respostas: “sim” e “não”. Tal condição, mediante a resposta fornecida, é
responsável por seguir o fluxo normal do código ou o alternativo. Dentro de parênteses, é inserida a condição (ou condições, como veremos a seguir).
DICA
Por fim, é inserida a instrução a ser executada caso a condição seja verdadeira.
Observação: o fluxograma de exemplo foi simplificado para fornecer mais detalhes. Logo, a respectiva notação padrão não foi utilizada em sua Outro detalhe importante: caso exista mais de uma instrução para ser executada, é necessário envolvê-las em chaves. Veja o exemplo:
2 instrução1;
3 instrução2;
4 }
Nesse segundo caso, além de mais de uma instrução, também temos mais de uma condição. Quando é necessário verificar mais de uma condição,
em que cada uma delas precisará ser verdadeira, utilizamos os caracteres “&&”.
Na prática, as instruções 1 e 2 só serão executadas caso as condições 1 e 2 sejam verdadeiras. Vamos a outro exemplo:
2 instrução1;
3 instrução2;
4 }
Repare que, nesse código, os caracteres “&&” foram substituídos por “||”. Esses últimos são utilizados quando uma OU outra condição precisa ser
verdadeira para que as instruções condicionais sejam executadas.
E o que acontece se quisermos verificar mais condições?
ELSE IF
Nesse caso, podemos fazer isso tanto para a forma onde todas precisam ser verdadeiras, e separadas por “&&”, quanto para a forma onde apenas
uma deve ser verdadeira, separadas por “||”. Além disso, é possível, ainda, combinar, numa mesma verificação, os dois casos. Veja o exemplo:
Veja o exemplo a seguir:
1 if ( (condição1 && condição2) || condição3){
2 instrução1;
2 instrução1;
3 instrução2;
4 }
4 instrução2;
Nesse fragmento, temos as duas primeiras condições agrupadas por parênteses. A lógica aqui é: 5 }else{
6 instrução3;
1 if (!condição1){
2 instrução1;
3 instrução2;
SWITCH
4 }
A instrução "switch" é bastante útil quando uma série de condições precisa ser verificada. É bastante similar à "else if". Vejamos:
O sinal “!” é utilizado para negar a condição. As instruções 1 e 2 serão executadas caso a condição 1 não seja verdadeira.
1 Switch(numero1){
2 Case < 0:
3 instrução1;
ELSE 4 Break;
5 Case == 0:
A instrução "else” acompanha a instrução "if". Logo, embora não seja obrigatória, como vimos nos exemplos, sempre que a primeira for utilizada, 6 instrução2;
deve vir acompanhada da segunda. O "else" indica se alguma instrução deve ser executada caso a verificação feita com o "if" não seja 7 Break;
9 instrução3;
}else{ Em linhas gerais, o código anterior é igual e tem a mesma função do visto no exemplo de "else if". Veja a seguir:
Perceba que o "else" (senão) acompanha o "if" (se). Logo, SE as condições forem verdadeiras, faça isto. SENÃO, faça aquilo.
A seguir, temos os “Case”, em quantidade equivalente às condições que queremos verificar.
DICA
Dentro de cada “Case” temos a(s) instrução(ões) e o comando “Break”.
Uma observação importante: no último fragmento foi utilizado, de forma proposital, português-estruturado nas condições e instruções. Isso porque,
mais adiante, você mesmo codificará esse "if/else" em JavaScript.
Por fim, temos a instrução “Default”, que será executada caso nenhuma das condições representadas pelos “Case” sejam atendidas.
PORTUGUÊS-ESTRUTURADO
3 alert(contador);
4 contador++;
Esse código tem o mesmo resultado que o visto no exemplo utilizando o laço “for”. Sua sintaxe é simples: “Enquanto uma condição fornecida for
Essas estruturas – também chamadas de laços – permitem que uma ação seja executada de forma repetitiva. Em nosso exercício, por exemplo,
verdadeira, faça isso."
temos uma ação recorrente, que é a de solicitar ao usuário que insira um número. Se fosse executada dentro de um laço, o nosso código diminuiria,
facilitando o trabalho.
A sintaxe de uma estrutura de repetição pode ser vista no fragmento de código apresentado na Figura 4, a seguir. Após ler o código e os comentários
explicativos, execute-o e veja o resultado. Você pode copiar direto do box a seguir, ou utilizar o arquivo Figura 4.
DO/WHILE
Embora semelhante ao laço "while", temos uma diferença fundamental entre eles:
“do/while”
FOR
A condição é testada no final.
Sobre a sintaxe apresentada na Figura 4, temos o laço “for”, um dos presentes em JavaScript. Em sua forma mais comum, temos uma variável, que
chamamos normalmente de contador, que recebe um valor inicial (no exemplo, 0) e é incrementada (pelo “++”) até atingir uma condição (ser menor
que 10).
1 var contador;
“while”
2 for (contador = 0; contador < 10; contador ++){
3
A condição é testada no início.
4 //As instruções incluídas aqui serão executadas 10 vezes
Com isso, pelo menos uma instrução será, obrigatoriamente, executada. Vejamos o exemplo:
5
1 var contador = 0;
6 /*
2 do{
7 Serão exibidas 10 caixas de diálogo exibindo o valor da variável contador.
3 contador += 1;
8 O primeiro número será 0 e o último será 9 (repare que começamos com a nossa
4 alert(contador);
9 variável contador recebendo o número 0 e sendo incrementada até ser menor do que 10,
10 ou seja, até o número 9.
11 */
Execute o código e veja a diferença em relação ao utilizado no “while”.
12 alert(contador);
13 }
Esse laço, assim como os demais em uma linguagem de programação, é bastante utilizado com arrays (vetor ou matriz contendo dados não
ATENÇÃO ordenados. Veremos sobre eles no próximo módulo). Normalmente, precisamos percorrer o conteúdo de um array e manipular ou apenas exibir o seu
valor. Para isso, podemos fazer uso de laços. Na Figura 5, a seguir, serão apresentados dois fragmentos de código para uma mesma função − um
1 var frutas = ['Laranja', 'Uva', 'Pera'];
2
3
EXEMPLO
4 /*Imprimindo na caixa de diálogo o conteúdo do array 'frutas' utilizando o laço 'for'*/
5 for(var i = 0; i < frutas.length; i++){
Algumas variações possíveis nesse código seriam iniciar o contador em 1, por exemplo (o mais usual, em programação, é iniciarmos nossos índices
6 alert('Nome da Fruta contida no Array: ' + frutas[i]);
em zero), ou irmos até o número 10. Ou seja, no lugar do sinal de menor, utilizaríamos o “menor igual”, dessa forma: “ <= 10”. Teste também, em seu
7 }
A seguir, veremos as outras estruturas de repetição, além do “for”, presentes na linguagem JavaScript. 9 /*Imprimindo na caixa de diálogo o conteúdo do array 'frutas' utilizando o laço 'for/in'*/
10 for(var fruta in frutas){
11 alert('Nome da Fruta contida no Array: ' + frutas[fruta]);
12 }
WHILE
Figura 5: Comparação entre os laços “for” e “for/in”.
1. NO QUE CONCERNE ÀS ESTRUTURAS DE DECISÃO, MAIS PRECISAMENTE À INSTRUÇÃO “SWITCH”, ASSINALE
A AFIRMAÇÃO INCORRETA:
B) Com essa instrução, conseguimos realizar verificações que não são possíveis apenas utilizando "if" e "else".
Baixe aqui o código usado na Figura 5.
C) Essa instrução é uma forma de reduzir a complexidade proveniente da utilização de vários "if" e "else".
Analisando o código, é possível notar as diferenças de sintaxe entre os laços “for” e “for/in”.
D) Essa instrução é utilizada para testar várias opções de condicionais.
No primeiro, em “for”, definimos uma variável contador (“i”) e deveremos percorrer o array “frutas” começando em seu índice 0 até o seu tamanho
(“length”).
2. OBSERVE O FRAGMENTO DE CÓDIGO A SEGUIR. APÓS A SUA EXECUÇÃO, QUAL O VALOR DA VARIÁVEL CONT
− EXIBIDA NA INSTRUÇÃO "ALERT(CONT)"?
VAR CONT = 1;
Já no “for/in”, declaramos uma variável contador (“fruta”) e dizemos ao código que percorra o array imprimindo o seu conteúdo a partir do índice DO{
ALERT(CONT);
A) 10
B) 1
C) 9
D) 11
GABARITO
1. No que concerne às estruturas de decisão, mais precisamente à instrução “switch”, assinale a afirmação incorreta:
A “switch”, assim como as instruções “if/else”, permite que o fluxo de um programa seja alterado a partir de verificações de condicionais. Logo, tais
EXERCÍCIO COM ESTRUTURAS DE DECISÃO E DE REPETIÇÃO instruções não se diferem, sendo a "switch" mais utilizada quando há muitas condições a serem verificadas, diminuindo assim a complexidade do
código caso fosse utilizado “if/else”.
No vídeo a seguir, o professor Alexandre Paixão nos apresenta um exercício resolvido demonstrando as estruturas de controle de decisão e de
2. Observe o fragmento de código a seguir. Após a sua execução, qual o valor da variável cont − exibida na instrução "alert(cont)"?
do{
cont += 1;
alert(cont);
O laço "do/while" executa a primeira instrução antes de testar a condição fornecida. Nesse caso, a instrução consiste em incrementar, de 1 em 1, o
valor da variável “cont”. Como se inicia em 1 e vai até 9, ao final o seu valor será 10.
VERIFICANDO O APRENDIZADO
MÓDULO 3
VETORES EM JAVASCRIPT conteúdo do vetor “frutas” na posição/índice 0 é “Laranja”; na posição/índice 1 é “Uva” ; e na posição/índice 2 é “Limão”.
Em JS, um vetor pode ter, no máximo, 4.294.967.295 (232 – 2) elementos. Outra característica importante é que, em JavaScript, os arrays possuem
tamanho dinâmico, ou seja, não é necessário informar o tamanho do vetor ao declará-lo.
Fonte: pixcon/Shutterstock
4 var mistura = ['Um', 2, 3, 'Quatro']; //array de diversos tipos de dados
Um vetor é uma estrutura de dados simples utilizada para armazenamento de objetos do mesmo tipo. É chamado, na literatura relacionada a
Outra forma de criação de vetores em JavaScript é usando o construtor (conceito relacionado à programação orientada a objetos) Array. Vejamos o
linguagens de programação, de array. Nesse contexto, é normalmente tratado em conjunto com outra estrutura: a matriz. Em linhas gerais:
exemplo:
Um vetor é um array unidimensional.
1 var alunos = new Array();
2 var alunos = new Array('Alex', 'Anna', 'João');
A matriz é um array multidimensional (um vetor de vetores). ACESSO E EXIBIÇÃO DE ELEMENTOS DO VETOR
A função prática de um vetor é simplificar a utilização de variáveis.
Em termos de acesso aos elementos de um array, a forma mais simples é utilizando o seu índice. Vamos ao exemplo:
No exemplo do módulo anterior, vimos que eram necessárias duas variáveis para guardar os números solicitados ao usuário. Com a utilização de um
1 var alunos = ['Alex', 'Anna', 'João']; // array de strings
A função “alert”, imprimirá o conteúdo da posição zero do array “alunos”, ou seja, “Alex”;
ATENÇÃO
Seguindo a mesma lógica, se quiséssemos imprimir “João”, utilizaríamos o índice 2;
Embora possa parecer sem importância o uso de arrays nesse caso, imagine, por exemplo, que seja necessário armazenar as notas de 50 alunos
para, ao final, calcular as respectivas médias. Seriam necessárias 50 variáveis (ou apenas 1 array). Outra forma de acessar e exibir os elementos de um vetor é usando um laço de repetição. Veja novamente o exemplo contido na Figura 5.
O JavaScript possui métodos nativos para tratamento de arrays. Em termos de acesso e manipulação, veremos agora como utilizar o push. Nos
próximos tópicos, outros métodos serão apresentados.
SAIBA MAIS
Para compreender em que situações o método push pode ser útil, vamos voltar ao nosso vetor “alunos”. Imagine que, após ter sido declarado
inicialmente com 3 valores, seja necessário incluir novos valores a esse array, em tempo de execução. O método push, cuja sintaxe pode ser vista
nome_do_array.push(valor)
Um vetor é composto por uma coleção de valores, onde cada um deles é chamado de elemento. Além disso, cada elemento possui uma posição
Usando nosso array de exemplo, poderíamos adicionar um novo elemento desta forma:
numérica dentro do vetor, conhecida como índice. Veja, no exemplo a seguir, usando notação da linguagem JavaScript, um array contendo nomes de
1 alunos.push('Helena');
frutas:
É possível, ainda, inserir múltiplos valores utilizando push:
1 var frutas = ['Laranja', 'Uva', 'Limão'];
1 alunos.push('Helena', 'Maria');
Como mencionado, há outras maneiras de adicionar elementos a um array de forma dinâmica. A primeira delas pode ser vista a seguir:
1 frutas[frutas.length] = 'Maria'; Em seguida imprima (utilizando alert, por exemplo) o tamanho do array (usando a propriedade length).
Nesse caso, devemos utilizar o tamanho do array para informar que desejamos adicionar um novo elemento. Isso pode ser feito informando o número,
caso o saibamos, ou de forma dinâmica, usando a propriedade length − que retorna justamente o tamanho do array. Essa importante propriedade
será apresentada logo adiante.
Veja que o tamanho do array permanece igual ao inicial, antes da utilização do delete.
Isso acontece porque esse método não remove o valor, apenas o torna indefinido (undefined).
SPLICE
O splice é um método multiuso em JavaScript. Ele serve tanto para excluir elementos de um array, como veremos a seguir, como para substituir e OUTROS MÉTODOS PARA REMOVER ELEMENTOS DO VETOR
inserir. Sua sintaxe é:
Array.splice(posição,0,novo_elemento,novo_elemento,...) A linguagem JavaScript possui, além de "delete", outros 4 métodos para remoção de elementos, conforme veremos a seguir:
Onde:
2 alunos.splice(3,0,'Helena');
SHIFT
3 alert(alunos); //imprimirá 'Alex', 'Anna', 'João', 'Helena'
Embora similar ao pop, este método remove um elemento do início do array. Após a remoção, este é reindexado (ou seja, o elemento de índice 1
Além disso, com esse método também é possível substituir um dos elementos do array. Veja o exemplo a seguir:
passa a ser o de índice 0 e assim sucessivamente). Além disso, o tamanho do array também é atualizado. Sua sintaxe pode ser vista a seguir:
1 var alunos = ['Alex', 'Anna', 'João'];
frutas.shift();
2 alunos.splice(1,1,'Helena');
Aqui, ao passarmos o número 1 como segundo parâmetro, informamos ao método que um elemento, o de índice 1, deveria ser excluído. Entretanto,
como inserimos ao final o nome ‘Helena’, o método realizou a substituição do elemento excluído pelo novo elemento inserido.
SPLICE
A propriedade length
Este método, introduzido anteriormente, pode ser usado para exclusão de elementos. Para tanto, ele recebe como parâmetros a quantidade de
Uma das necessidades mais comuns quando se trabalha com arrays é saber o seu tamanho. Como vimos em alguns de nossos exemplos, em elementos que se deseja eliminar e o índice a partir do qual estes serão excluídos. A sintaxe a seguir demonstra a remoção de 2 elementos, a
JavaScript está disponível a propriedade length, que retorna o tamanho, ou número de elementos, de um array. partir do índice 2, do array fornecido:
nome_do_array.length primos.splice(2,2);
Nesse método, para fins de remoção, o primeiro parâmetro indica o índice e o segundo, a quantidade de elementos a serem excluídos.
REMOÇÃO DE ELEMENTOS DO VETOR
A remoção de elementos de um array, em JavaScript, pode ser feita com a utilização do método nativo delete. Vejamos como esse método funciona
utilizando nosso array de exemplo:
OUTRAS FORMAS DE REMOVER ELEMENTOS DO VETOR
1 delete frutas[0];
Existem outras maneiras para excluir elementos de um array. Uma forma simples é determinar o tamanho, utilizando a propriedade length, do
Como visto, sua sintaxe é composta pelo nome do método, delete, pelo nome do array e pelo índice do elemento que queremos remover. array. Isso fará com que este seja reduzido ao novo tamanho informado. Vejamos o exemplo prático:
Esse método possui uma particularidade: embora o valor seja excluído do array, este não é ‘reorganizado’, permanecendo com o mesmo tamanho. var primos = [2,3,5,7,11,13,17];
29
alert(primos.length); //imprimirá 4
30
Nesse exemplo, ao definirmos o tamanho do array como 4, este será reduzido, sendo mantidos os elementos do índice 0 ao 3 e excluídos os demais.
31 var alunos = ['Alex', 'Anna', 'João'];
32 alunos.splice(1,1,'Helena');
33 alert(alunos); //imprimirá 'Alex, 'Helena', 'João'
SAIBA MAIS 34
35 delete frutas[0];
Existe, ainda, outro método para a remoção de elementos de um array: filter. Entretanto, ele não modifica o vetor original, mas cria um novo a 36
partir deste. Esse método utiliza uma sintaxe mais complexa, assim como conceitos e funções de call-back que fogem ao escopo deste tema. 37 frutas.pop();
38
39 frutas.shift();
40
42 var primos = [2,3,5,7,11,13,17];
Conhecendo as estruturas de decisão e de repetição e os conceitos e exemplos de utilização de vetores, chegou a hora de praticar. 43 primos.splice(2,2);
44 alert(primos); //imprimirá 2,3,11,13,17
47 var primos = [2,3,5,7,11,13,17];
O segundo será um desafio, pois exigirá a pesquisa e o estudo de conteúdos adicionais, uma vez que não vimos todos os conceitos necessários 48 alert(primos.length); //imprimirá 7
50 alert(primos.length); //imprimirá 4
Vamos a eles:
Baixe aqui o código usado na exercício.
1. Junte em um único arquivo todos os códigos vistos ao longo deste último módulo e execute-os novamente. Isso ajudará a fixar o conteúdo.
2. Faça um programa em JavaScript que:
RESOLUÇÃO
Solicite ao usuário que insira dois números inteiros positivos;
1 var frutas = ['Laranja', 'Uva', 'Limão'];
2
4 var alunos = []; //array vazio
Verifique se os números inseridos são inteiros positivos. Caso contrário, solicite ao usuário para inseri-los novamente;
5 var alunos = ['Alex', 'Anna', 'João']; // array de strings
6 var notas = [10.0, 9.5, 9.5]; //array de números decimais
10 var alunos = new Array();
Observações:
11 var alunos = new Array('Alex', 'Anna', 'João');
12
Há mais de uma forma de desenvolver o programa. Logo, não há código certo ou errado.
13 var alunos = ['Alex', 'Anna', 'João']; // array de strings
14 alert(alunos[0]); //exibirá “Alex” na caixa de diálogo
Você pode utilizar funções JavaScript para melhor organizar o seu código. Inclusive, pode usar um pouco de recursividade.
15
O código relacionado a uma das formas de resolver esse desafio está disponível a seguir:
16
17 alunos.push('Helena');
RESOLUÇÃO
18
19
20 alunos.push('Helena', 'Maria');
21
22
23 frutas[frutas.length] = 'Maria';
24
25
26 var alunos = ['Alex', 'Anna', 'João'];
1
27 alunos.splice(3,0,'Helena');
2 //Declaração do array 'numeros' sem tamanho definido e sem elementos atribuídos
3 var numeros = [];
57 //Os números a serem divididos são acessados através dos índices do array
4
58 resultado = numeros[0] / numeros[1];
5 //O primeiro elemento (o de índice 0) recebe o retorno da função que solicita o primeiro número
59 return resultado;
6 numeros[0] = soliticaPrimeiroNumero(); 60 }
7
9 numeros[1] = soliticaSegundoNumero();
10
11 //Declaração de atribuição de valor à variável que armazenará o resultado da divisão
VERIFICANDO O APRENDIZADO
12 //O resultado da divisão virá da função 'divida' (esse função recebe como parâmetro o array 'numeros')
13 var resultadoDivisao = divida(numeros);
14
15 //Exibindo o resultado da divisão na tela 1. EM RELAÇÃO AOS CONCEITOS E AO USO DE VETORES EM JAVASCRIPT, ASSINALE A AFIRMATIVA INCORRETA:
16 alert('O resultado da divisão é igual a: ' + resultadoDivisao);
17
A) Um vetor, ou array, é um grupo de variáveis que contém valores, do mesmo tipo ou de tipos diferentes.
18 /*
20 Esta função não recebe parâmetros
C) Em JavaScript, o primeiro elemento de um array tem o índice igual a 0.
21 */
D) Em JavaScript, podemos acessar o último elemento de um array da seguinte forma: vetor[vetor.length-1].
22 function soliticaPrimeiroNumero(){
23 //Declaração e atribuição de variável. Ela receberá o número inserido pelo usuário
24 var numero1 = prompt("Insira o primeiro número: ");
2. DESEJA-SE EXCLUIR O ÚLTIMO ELEMENTO DO ARRAY ABAIXO. ASSINALE A ALTERNATIVA CUJO MÉTODO NÃO
25
26 //Condição para verificar se o número é positivo.
27 //Caso não, o retorno da função será chamar a própria função novamente.
29 //Caso sim, retorna o valor inserido pelo usuário
A) pares.pop()
30 if(numero1 < 0){
B) pares.splice(5,1)
31 alert("O número precisa ser inteiro e positivo");
32
C) pares.length = 5
33 //Este tipo de retorno, onde a própria função é chamada novamente, é conhecido como recursividade
D) pares.splice(6,0,0)
34 return soliticaPrimeiroNumero();
35 }else{
36 return numero1;
GABARITO
37 }
39
A alternativa "B " está correta.
40 function soliticaSegundoNumero(){
41 var numero2 = prompt("Insira o segundo número: ");
JavaScript permite que um array seja composto por dados de diferentes tipos.
42
43 if(numero2 < 0){
2. Deseja-se excluir o último elemento do array abaixo. Assinale a alternativa cujo método não pode ser aplicado para realizar essa ação:
44 alert("O número precisa ser inteiro e positivo");
45 return soliticaSegundoNumero();
var pares = [2,4,6,8,10,12];
46 }else{
A alternativa "D " está correta.
47 return numero2;
48 }
49 }
Como visto, o método splice pode ser utilizado tanto para remover quanto para adicionar ou substituir elementos de um array. Quando usado para
50
remover, sua sintaxe corresponde ao código visto na alternativa 'b', na qual indicamos o índice e a quantidade de elementos, a partir dele, a ser
51 /*
removida. Já a alternativa 'd' faz com que seja adicionado um novo elemento, com valor 0, após o índice 6.
52 Esta função recebe como parâmetro um array - que contém os 2 números que desejamos dividir
53 */
54 function divida(numeros){
55 var resultado = 0; MÓDULO 4
56
Reconhecer os recursos assíncronos Ajax e JSON Em relação aos recursos para realização de requisições, há dois disponíveis em JS: o objeto XMLHttpRequest e a interface Fetch API.
Inicialmente, foi implementado no navegador Internet Explorer através de um objeto do tipo ActiveX. Posteriormente, outros fabricantes fizeram suas
implementações, dando origem ao XMLHttpRequest, que se tornou o padrão atual.
DICA
3 <head>
Quando realizadas, estas bloqueiam o remetente. Ou seja, o cliente faz a requisição e fica impedido de realizar qualquer nova solicitação até que a 5 <title>Requisição XMLHttpRequest</title>
anterior seja respondida pelo servidor. Com isso, só é possível realizar uma requisição de cada vez. 6 </head>
7 <body>
8 <h1>Imagens Aleatórios de Cachorros</h1>
REQUISIÇÕES ASSÍNCRONAS
9 <p>
Nestas não existe sincronismo. Logo, várias requisições podem ser realizadas em simultâneo, independentemente de ter havido resposta do servidor A partir do click no botão abaixo uma nova imagem aleatória de cachorros será carregada utilizando requisições assíncronas com XMLHttpRequest</p>
às solicitações anteriores. 10
11 <img id="img_dog" src="" alt="Aguardando a imagem ser carregada" />
12 <br/>
13 <button onclick="carregarImagens()">Carregar Imagens</button>
ATENÇÃO
14 </body>
15 <script type="text/javascript">
Em comparação com as requisições síncronas, deve-se dar preferência à utilização das assíncronas. Isso porque estas últimas não apresentam os
16
18
19 var xmlHttpRequest = new XMLHttpRequest();
21
Para melhor entendimento de como as requisições assíncronas funcionam na prática, tomemos como exemplo o feed das redes sociais. Em tais 22 xmlHttpRequest.open("GET", url, true);
páginas, novos conteúdos são carregados sem que seja necessário recarregar o navegador e, consequentemente, todo o conteúdo visto. 23
24 xmlHttpRequest.onreadystatechange = function() {
Eventos como a rolagem de tela, por exemplo, fazem com que os conteúdos sejam carregados do servidor e exibidos na tela do dispositivo.
25 if (xmlHttpRequest.readyState == 3) {
25 console.log('Carregando o conteúdo');
27 }
29
30 var jsonResponse = JSON.parse(xmlHttpRequest.responseText);
Em JavaScript, quando falamos de requisições assíncronas, naturalmente falamos de AJAX. Esse termo foi empregado pela primeira vez em 2005 e
31
engloba o uso não de uma, mas de várias tecnologias: HTML (ou XHTML), CSS, JavaScript, DOM, XML (e XSLT), além do elemento mais
32 console.log('Requisição Finalizada');
A utilização de AJAX permite que as páginas e aplicações Web façam requisições a scripts do lado servidor e carreguem, de forma rápida e muitas
34 console.log('Resultado da Requisição: ' + jsonResponse.message);
vezes incremental, novos conteúdos sem que seja necessário recarregar a página inteira.
35
Embora o “X” no acrônimo se refira a XML, esse não é o único formato disponível. Além dele, temos: o HTML, arquivos de texto e o JSON, sendo 36 var imgDog = document.getElementById("img_dog");
esse último o mais utilizado atualmente. Veremos sobre ele mais adiante. 37 imgDog.src = jsonResponse.message;
38 }
39 };
40
OUTROS MÉTODOS E PROPRIEDADES
41 xmlHttpRequest.send(null);
42
A Figura 6 mostra um exemplo simples do que é possível fazer utilizando AJAX. Além disso, apenas algumas propriedades e métodos foram vistos.
43 }
44 </script>
45 </html>
46
SAIBA MAIS
47
Na seção Explore +, estão disponíveis sugestões de conteúdo que permitirão um aprofundamento nesse tema. É recomendável a leitura desse
48
material, assim como a implementação e até mesmo modificação do código anterior para uma melhor assimilação do conteúdo.
49
API FETCH
ATENÇÃO
Essa API é, em termos conceituais, similar à XMLHttpRequest – ou seja, permite a realização de requisições assíncronas a scripts do lado
servidor. Entretanto, por ser uma implementação mais recente, essa interface JavaScript apresenta algumas vantagens, como:
Baixe aqui o código usado na Figura 6.
O código na Figura 6 contém tanto funcionalidades JavaScript vistas neste tema quanto algumas novas, além do XMLHttpRequest, que veremos O uso de promise;
mais adiante. Ao utilizar esse código, você terá um exemplo real de dados sendo requisitados a um servidor − nesse caso, uma API que retorna
imagens aleatórias de cachorros − e exibidos na página, sem que ela seja recarregada a cada nova requisição/click no botão. O fato de poder ser utilizado em outras tecnologias, como service workers, por exemplo.
Por ora, vamos nos concentrar no XMLHttpRequest. Utilizando as linhas contidas no código presente na figura anterior, veja: A Figura 7 apresenta o mesmo exemplo utilizado na Figura 6, mas substituindo o XMLHttpRequest pela API Fetch. A seguir, alguns métodos e
propriedades serão apresentados:
Na linha 19 uma instância do objeto é criada. Esse é o primeiro passo para sua utilização. A partir desse ponto, toda referência deverá ser feita
pelo nome da variável utilizada (em nosso exemplo, xmlHttpRequest);
PROMISE
O método de requisição dos dados.
A url remota/do servidor que queremos acessar. O promise (promessa) é um objeto utilizado para processamento assíncrono, representando um valor que pode estar disponível agora, no futuro
O tipo de requisição – onde “true” define que será feita uma requisição assíncrona e “false”, uma síncrona. Esse argumento é opcional. Logo, pode não ou nunca.
Continuando o código, na linha 24 temos a propriedade “onreadystatechange”, que monitora o status da requisição XMLHttpRequest –
propriedade “readyState” − e especifica uma função a ser executada a cada mudança;
Repare, agora, na linha 25: o status 3 significa que a requisição ainda está sendo processada. Logo, poderíamos, por exemplo, exibir em nossa SERVICE WORKERS
tela uma mensagem (ou imagem, como é muito comum) avisando que a informação requisitada está sendo carregada. Perceba que,
dependendo do tempo de resposta do servidor remoto, nem sempre será possível ver essa informação; Scripts executados em segundo plano no navegador, separados da página web.
Já na linha 28 temos o tratamento do status quando ele for igual a 4, ou seja, quando a requisição estiver concluída. Além da propriedade 1 <!doctype html>
“readyState”, poderíamos também monitorar a propriedade “status”, que armazena o código de resposta do servidor Http utilizado pela 2 <html lang="pt-BR">
XMLHttpRequest; 3 <head>
4 <meta charset="utf-8">
Seguindo o código de exemplo, na linha 30 vemos a propriedade “responseText”. Além dela, está disponível também a “responseXML”. 5 <title>Requisição XMLHttpRequest</title>
Ambas dizem respeito a como trataremos o retorno da requisição: se como texto, no caso da primeira, ou como XML, no caso da segunda; 6 </head>
7 <body>
Ainda na linha 30, repare que também foi utilizado outro método, o parse. Esse método não pertence ao objeto XMLHttpRequest, mas este é 8 <h1>Imagens Aleatórios de Cachorros</h1>
Por fim, na linha 41 é utilizado o método send, que envia a requisição. 11 <img id="img_dog" src="" alt="Aguardando a imagem ser carregada" />
12 <br/>
13 <button onclick="carregarImagens()">Carregar Imagens</button>
14 </body>
15 <script type="text/javascript">
JSON
16
17 function carregarImagens(){
JSON pode ser traduzido para Notação de Objetos JavaScript. Trata-se de um tipo, ou formatação, leve para troca de dados. Essa, inclusive, é sua
18
principal vantagem em relação aos outros tipos. Além disso, destaca-se também a sua simplicidade, tanto para ser interpretado por pessoas quanto
19 var url = "https://dog.ceo/api/breeds/image/random"
por “máquinas”.
20 fetch(url, {
21 method: 'get'
22 })
23 .then(function(response) {
COMENTÁRIO
24 response.json().then(function(data){
25 console.log('Resultado da Requisição: ' + data.message);
O JSON, embora normalmente associado ao JavaScript – tendo sido definido, inclusive, na especificação ECMA-262, de dezembro de 1999 –, é um
26
formato de texto, independente de linguagem de programação. Essa facilidade de uso em qualquer linguagem contribuiu para que se tornasse um dos
27 var imgDog = document.getElementById("img_dog");
formatos mais utilizados para a troca de dados.
28 imgDog.src = data.message;
A Figura 8 apresenta alguns exemplos da estrutura de um objeto JSON:
29 });
30 })
31 .catch(function(err) {
32 console.error('O seguinte erro ocorreu durante a requisição: ' + err);
33 });
34
35 }
36 </script>
37 </html>
38
39
40
Fonte: autor
41
É composto por um conjunto de pares nome/valor. Na imagem, “status” é o nome de um objeto e “success”, o seu valor. Esses pares são
separados por dois pontos “:”;
ATENÇÃO
Para separar pares, valores ou objetos é utilizada a vírgula;
Baixe aqui o código usado na Figura 7.
Em relação à sua sintaxe, podemos notar algumas semelhanças com a XMLHttpRequest: O objeto e seus pares são englobados por chaves “{ }”;
Fetch options – em nosso exemplo utilizamos apenas um parâmetro, o método. Tal parâmetro, inclusive, é opcional. Veja a linha 21, onde O JSON fornece suporte a uma gama de tipos de dados. Além disso, possui alguns métodos, como o JSON.parse(), visto em um de nossos exemplos.
declaramos o GET, que é o método padrão. Além desse parâmetro, há outros disponíveis;
Tipo de dado retornado pela requisição. Veja a linha 24, onde foi utilizado o objeto correspondente ao tipo de dado retornado pela requisição –
nesse caso, JSON. Há outros tipos de objetos, como texto e até mesmo bytes, sendo possível, por exemplo, carregar imagens, arquivos pdf,
SAIBA MAIS
entre outros.
A seção Explore + sugere materiais adicionais sobre o tema. A leitura desse material é fortemente recomendada.
ATENÇÃO
TEORIA NA PRÁTICA
Ainda em relação à sintaxe, merece destaque a forma, própria, como a API Fetch trata a requisição (request) e o seu retorno (response): quando o
Como mencionado, os códigos utilizados para a apresentação do XMLHttpRequest e da API Fetch são funcionais. Copie esses códigos e os execute
método fetch é executado, ele retorna uma promessa (promise) que resolve a resposta (response) à requisição, sendo esta bem-sucedida ou
para ver, na prática, o comportamento das requisições assíncronas. Você pode copiar direto do box, ou utilizar o arquivo Figura 8.
não.
Caso queira avançar um pouco mais, inclua outros elementos de interação na página que se comuniquem com servidores remotos;
GABARITO
Outra boa ideia é pesquisar e utilizar alguma outra API que retorne outro tipo de conteúdo, diferente do que foi mostrado.
1. Sobre as requisições assíncronas em JavaScript − AJAX, é incorreto afirmar que:
A alternativa "A " está correta.
RESOLUÇÃO
Como discutido, as requisições assíncronas tornam a interação mais rápida no cliente, uma vez que a página não fica bloqueada, aguardando o
retorno do servidor. Isso torna possível que outras ações, incluindo novas requisições, sejam realizadas.
JSON é uma notação simples para troca de dados. Embora proveniente de uma especificação JavaScript, não é exclusivo desta linguagem.
CONCLUSÃO
FRAMEWORKS JAVASCRIPT
A exemplo do que vimos nas demais tecnologias do lado cliente, no ambiente Web, existem inúmeros frameworks disponíveis também para
JavaScript.
CONSIDERAÇÕES FINAIS
Neste tema, abordamos a linguagem de programação lado cliente do JavaScript. Ao longo dos módulos, vimos conceitos e sintaxes − propriamente
SAIBA MAIS ditos ou a ela relacionados, como a interface DOM e as requisições assíncronas, desde as formas de inclusão em arquivos HTML à declaração e
utilização de variáveis.
Embora não faça parte do escopo deste tema, cabe destacar que a utilização desses recursos é uma grande aliada no desenvolvimento Web. Logo, Estudamos, ainda, outras estruturas de dados, como os arrays, e os conceitos de programação relacionados à função das estruturas de decisão e de
sempre que possível, é recomendada. repetição, bem como suas aplicações em JavaScript. Ao final, pudemos conhecer alguns recursos avançados, como o AJAX e o JSON. Para maior
compreensão do tema, cada módulo foi amparado com a apresentação de exemplos práticos e funcionais. Assim, temos certeza de que os
conhecimentos sobre o JavaScript aqui consolidados o ajudarão em sua vida acadêmica e profissional.
VERIFICANDO O APRENDIZADO
A) Essas requisições tornam a interação na página mais lenta, já que dependem do retorno de dados que são requisitados ao servidor.
C) O objeto utilizado para realização da requisição fica aguardando o retorno do servidor e é capaz de processar esse retorno, sendo esse bem-
AVALIAÇÃO DO TEMA:
sucedido ou não.
D) As requisições assíncronas não bloqueiam o cliente − por exemplo, o navegador Web −, permitindo que outras operações sejam realizadas
enquanto se aguarda o retorno da requisição.
REFERÊNCIAS
2. A RESPEITO DO JSON, É CORRETO AFIRMAR QUE:
BARBOSA, A. DOM. Publicado em: 4 set. 2017.
A) O JSON é um formato leve de troca de informações e dados entre sistemas. FLANAGAN, D. JavaScript: The Definitive Guide. Califórnia: O’Reilly Media, 2011.
B) Esse formato, cujo nome vem de JavaScript Object Notation, é exclusivo para a transmissão de dados na linguagem JavaScript. RAUSCHMAYER, A. Speaking JavaScript. Califórnia: O’Reilly Media, 2014.
C) Quando utilizamos JavaScript, JSON é o único formato de transmissão de dados disponível, uma vez que é nativo desta linguagem.
D) Não é possível transferir estruturas de dados mais complexas, como arrays, através de JSON.
EXPLORE+
Para saber mais sobre DOM, leia os textos:
Modelo de Objeto de Documento (DOM) e Examples of Web and XML development using the DOM, da comunidade Mozilla.
What is the Document Object Model, THE HTML DOM Document Object e JavaScript HTML DOM, do site W3schools.
Acesse os sites das comunidades CodePen e JSFiddle para testar códigos HTML, CSS e JavaScript.
Para aprofundar seus conhecimentos, leia: Promise; JavaScript – Método Filter; Fetch API e Usando Fetch, da comunidade Mozilla.
CONTEUDISTA
Alexandre de Oliveira Paixão
DEFINIÇÃO
CURRÍCULO LATTES
A linguagem PHP (PHP: Hypertext Preprocessor), conceitos de programação, variáveis,
estruturas de decisão e de repetição, arrays e funções.
PROPÓSITO
Conhecer a linguagem de programação PHP, seus conceitos básicos e recursos disponíveis é
importante na formação do desenvolvedor Web do lado servidor.
PREPARAÇÃO
Para melhor compreensão do conteúdo deste tema, é recomendado um conhecimento básico
de lógica de programação e de HTML.
Para a aplicação dos exemplos, será necessário um editor de texto com suporte à marcação
PHP e um servidor Web com suporte à linguagem. Em relação ao editor, no sistema INTRODUÇÃO
operacional Windows é indicado o Notepad++. No Linux, o Nano Editor. Quanto ao servidor,
recomenda-se o Apache. Como veremos neste tema, PHP é uma linguagem server side, gratuita e multiplataforma.
Logo, para ser executada, precisa de um servidor com suporte à linguagem. Entre os mais
utilizados estão o Apache, o IIS (da Microsoft) e o Nginx. A configuração desses ambientes
exige um conhecimento intermediário/avançado e pode ser realizada tanto localmente − em
OBJETIVOS computadores pessoais − quanto em servidores através de serviços contratados.
MÓDULO 1 DICA
É possível encontrar diversos tutoriais disponíveis na internet que orientam durante o processo
Examinar a linguagem de programação PHP e seus conceitos básicos
de configuração do ambiente PHP.
MÓDULO 1
A LINGUAGEM PHP
GATEWAY INTERFACE (CGI) ESCRITO EM LINGUAGEM
DE PROGRAMAÇÃO C (PHP).
PHP, s.d.
SINTAXE
TÉRMINO DE INSTRUÇÕES E COMENTÁRIOS
O script PHP deve ser iniciado pela tag “<?php” e fechado com a tag “?>”. Isso é necessário Em relação aos comentários, temos duas opções:
para que o servidor Web entenda qual código deve ser interpretado e qual deve ser apenas Os de uma linha são iniciados com duas barras: //
renderizado, uma vez que tags HTML podem ser inseridas dentro de um arquivo contendo
Os de múltiplas linhas são delimitados por /* e */
código PHP. Veja o exemplo a seguir:
Veja a seguir os exemplos de finalização de comandos e de utilização de comentários:
1 <?php
2 //Comentários de uma linha são realizados com a utilização de barras duplas
3
RENDERIZADO 4 /*
2 <html lang="pt-BR">
11
4 <body>
5 <h1>Título do texto</h1>
7 </body>
DICA
8 </html>
Repare que a tag de fechamento “?>” não é obrigatória quando temos apenas código PHP em
O código anterior poderia ser salvo como um script PHP.
um script.
3 $ano_criacao = 1994;
Repare que diversos tipos de dados foram utilizados e atribuídos às variáveis declaradas. Além
As variáveis são um dos principais recursos em uma linguagem de programação. Em PHP, a
disso, diferentes convenções de nomeação foram aplicadas – início com underscore;
definição de uma variável é feita com a utilização do símbolo “$” seguido do nome da mesma.
separação por underscore; CamelCase. É boa prática escolher um único padrão e utilizá-lo
No código de exemplo anterior, a variável “$var1” foi declarada e, ao mesmo tempo,
em todo o projeto.
inicializada.
O único cuidado diz respeito ao momento de atribuição de valores, já que dados do tipo string,
por exemplo, precisam ser envolvidos por aspas duplas (“ ”) ou simples (‘ ’).
Após o primeiro caractere (letra ou sublinhado) podem ser utilizados letras, números e
sublinhados.
Além dos métodos aqui mencionados, o protocolo HTTP possui, ainda, uma série de outras
propriedades relevantes no que tange à programação Web. Recomenda-se, portanto, uma
leitura mais aprofundada sobre esse protocolo.
SUPERGLOBAIS A seguir, veremos exemplos de utilização dos métodos GET e POST, que são os mais usados
em programas PHP.
Diversas variáveis predefinidas no PHP são "superglobais", o que significa que elas
MÉTODO GET
estão disponíveis em todos os escopos para todo o script. Não há necessidade de fazer
Esse método é utilizado na requisição e na recuperação de recursos de um servidor, como uma
global $variable; para acessá-lo dentro de funções ou métodos. Estas variáveis
superglobais são: $GLOBALS. página ou um arquivo, entre outros. Veja o exemplo de uma requisição GET:
/endereco_servidor/script.php?var1=value1&var2=value2&var3=value3
Como visto na figura, a requisição GET é composta pelo endereço (URL e URI) e pela query
MÉTODOS DE REQUISIÇÃO HTTP string – pares de nome/valores (var1=value1, ...).
Em linhas gerais, não deve ser utilizado quando estamos lidando com informações
A especificação do protocolo HTTP estabelece uma série de métodos de requisição cuja
sensíveis, uma vez que a query string fica visível na barra de endereços do navegador.
função é indicar qual ação deve ser executada por determinado recurso. Nesse sentido, cada
Outra característica importante desse método é que ele pode ser usado a partir de
um deles implementa uma diferente semântica. São nove os métodos disponíveis:
formulários HTML.
GET
MÉTODO POST
HEAD
Esse método é usado no envio de dados para o servidor a fim de criar ou atualizar um recurso.
POST A figura 2 mostra o corpo de uma requisição feita com POST:
var1=value1&var2=value2&var3=value3
CONNECT
Figura 2: Exemplo de requisição com o método POST
OPTIONS
Assim como o GET, esse método pode ser utilizado em formulários HTML, com a
TRACE
vantagem de não deixar os dados transmitidos visíveis na barra de endereços do
PATCH navegador – embora seja possível acessá-los analisando a requisição em si.
SAIBA MAIS VARIÁVEL $_GET
Em PHP, essa variável predefinida é um array associativo que contém as variáveis recebidas O cookie HTTP é um fragmento reduzido de dados que fica armazenado no navegador
de métodos HTTP GET. Voltando ao exemplo da figura 1, no script “script1.php” as variáveis do usuário, proveniente de um servidor Web. São normalmente usados para fins de
passadas seriam representadas da seguinte forma: gerenciamento de sessões, armazenamento de preferências do usuário ou rastreamento.
<?php
OPERADORES
2/2=1
VARIÁVEL $_POST Os sinais “+”, “-“, “*” e “/” representam as operações matemáticas de adição, subtração,
multiplicação e divisão, respectivamente. Logo, são chamados de operadores aritméticos.
A exemplo de $_GET, a variável predefinida $_POST também é um array associativo. Em PHP, além dos operadores aritméticos, há outros disponíveis. Veremos os principais a
É considerada "coringa", uma vez que exerce múltiplos papéis. Com ela, é possível receber Além dos mencionados no exemplo, também estão disponíveis em PHP outros quatro
tanto variáveis provenientes de métodos GET quanto POST – e também do método cookies operadores aritméticos, sendo os dois a seguir os mais importantes:
($_COOKIE).
Operador / Exemplo de
Sua utilização é semelhante ao que foi visto em $_GET e $_POST. Para que serve
utilização
Atenção! Para visualizaçãocompleta da tabela utilize a rolagem horizontal Repare nos comentários inseridos na imagem, onde o resultado de cada combinação é
explicado. Para melhor fixação, copie os exemplos e os execute. Tente também alterar os
Tabela 1: Operadores aritméticos em PHP
valores ou realizar outras combinações.
Esse tipo de operador é usado, sobretudo, com números (int/integer e float) para a realização
de cálculos. Quando utilizado com outra forma de dado, é feita a conversão para o tipo
numérico antes que a operação seja realizada.
OPERADORES DE COMPARAÇÃO
São utilizados para comparar dois valores. A tabela 2 apresenta os operadores disponíveis e
OPERADORES DE ATRIBUIÇÃO suas funções:
São utilizados na atribuição de valores a variáveis. Além de casos simples, como o que vimos
Operador / Exemplo
com o operador “=”, é possível realizar a combinação de operadores de atribuição com os Para que serve
de utilização
aritméticos. Para ficar mais claro, vamos aos exemplos:
<?php
$var1 ==
$var1 !=
!=
$var2 = "Programação";
$var2
$var2 .= " com PHP"; //com a utilização da combinação de operadores a variável $var2 passou
Verifica se $var1 é diferente de $var2
a ter o conteúdo "Programação com PHP"
$var1 <>
<>
$var2
$var = ($var4 = "Copie esses códigos") . " e pratique seus conhecimentos!" ;
/*
No exemplo acima o conteúdo da variável $var3 é igual a "Copie esses códigos e pratique seus $var1 !== Verifica se não são idênticas/iguais ou se não são do mesmo
!==
conhecimentos!"
$var2 tipo
*/
$var1 >=
>= Verifica se $var1 é maior ou igual a $var2
$var2 || $var1 || $var2 Retorna true se $var1 OU $var2 forem verdadeiras
Atenção! Para visualizaçãocompleta da tabela utilize a rolagem horizontal Atenção! Para visualizaçãocompleta da tabela utilize a rolagem horizontal
Como visto, os operadores “and” / “&&” e “or” / “||” têm a mesma função. Entretanto, “and” e
“or” têm maior precedência que seus equivalentes.
DICA
A partir da versão 7 do PHP, um novo operador foi incluído, o “spaceship”, cuja forma de
SAIBA MAIS
utilização é “$var1<=> $var2”. Ele retorna -1, 0 ou 1 quando $var1 for, respectivamente,
menor, igual ou maior que $var2. Além dos operadores apresentados, há outros disponíveis em PHP, como os bit a bit (bitwise)
e os de controle de error. Na seção Explore+, destacamos um site que contém a lista
completa de operadores.
OPERADORES LÓGICOS
São usados para combinar expressões lógicas. A tabela 3 mostra os operadores lógicos
disponíveis em PHP:
Operador / Exemplo de
Para que serve
utilização
and $var1 and $var2 Retorna true se $var1 E $var2 forem verdadeiras
$VAR1 == 2;
ECHO $VAR1;
A) 2.
B) true.
C) null.
A) A linguagem PHP oferece amplo suporte ao tratamento de variáveis HTTP. Com isso,
independentemente do método utilizado no envio, podemos escolher entre as três variáveis
superglobais - $_POST, $_GET e $_REQUEST.
B) Em PHP, é possível tratar variáveis enviadas pelo método HTTP chamado REQUEST
fazendo uso da variável $_REQUEST.
C) Variáveis enviadas através do método HTTP GET podem ser manipuladas em PHP através
das variáveis globais POST ou GET. Entretanto, as enviadas pelo método POST só podem ser
manipuladas com a variável $_POST.
As estruturas de decisão e de repetição são recursos importantes em uma linguagem de
programação. Com elas, é possível mudar o fluxo de um programa através de verificações
<?php
echo $var1;
ESTRUTURAS DE DECISÃO
Como vimos, a atribuição de variáveis é feita com a utilização do operador “=”, enquanto o sinal
“==” é um operador de comparação. Logo, no código acima não foi realizada uma atribuição e
nem mesmo uma comparação, uma vez que esta última precisa vir acompanhada de uma
estrutura de decisão.
PHP possui variáveis globais específicas para tratar os dados recebidos através de métodos
GET e POST, além de uma variável “coringa”, a $_REQUEST, que pode receber os dados
desses dois métodos e também do método COOKIES.
Fonte:Shutterstock
Figura 5: Fluxo das estruturas de decisão
A figura 5 demonstra o fluxo de uma estrutura de decisão. Nela é possível ver que, a partir da
MÓDULO 2 verificação de uma condição, o programa se divide em dois caminhos possíveis. Esse é um
exemplo simples, uma vez que várias condições podem ser verificadas ao mesmo tempo,
assim como vários caminhos alternativos podem ser seguidos.
Aplicar as estruturas de decisão e repetição disponíveis em PHP
Na linguagem de programação PHP, estão disponíveis as seguintes estruturas de decisão: if,
else, elseif/else if e switch. Cada uma delas será vista a seguir.
IF
Fonte: gdainti | Shutterstock
A sintaxe da estrutura de controle if em PHP é composta pela condição (ou condições) a ser
verificada e, caso seja verdadeira, é seguida da instrução (ou instruções) a ser executada.
Logo, temos que as condições são avaliadas por seus valores booleanos, isto é, se são
verdadeiras ou falsas. Vejamos este fragmento de código PHP: QUAL RETORNO É EXIBIDO NESSE CASO?
1 <?php
3 $var1 = 10;
Como $var1 é menor que $var2, nada é exibido no navegador, já que a condição é falsa.
4 $var2 = 20;
Nessa situação, para imprimirmos uma mensagem informando que a condição é falsa, ou seja,
5
que $var1 é menor que $var2, faremos uso do else. Veja como ficaria nosso código nesse
8 }
2
No exemplo foi realizada apenas uma verificação – a comparação entre as duas variáveis 3 $var1 = 10;
definidas. Caso a primeira seja maior que a segunda, uma mensagem é exibida na tela. É 4 $var2 = 20;
possível também realizar outras verificações em um mesmo if. Para isso, basta utilizar 5
A condição (ou condições) a ser avaliada deve ser envolvida por parênteses, sendo 9 echo "$var1 é menor que $var2";
Em relação à sua sintaxe, vale o que foi dito para if, sobre múltiplas instruções
precisarem ser envolvidas em chaves.
ELSE
Para apresentar a estrutura else, voltaremos ao exemplo anterior, no qual é verificado se uma
variável era maior do que a outra e, em caso positivo, exibida uma mensagem.
ELSEIF /ELSE IF
É uma combinação das duas instruções vistas. Logo, sua função é definir fluxo (ou fluxos)
alternativo caso uma condição verificada com if seja falsa. Entretanto, ela permite ainda que
O QUE ACONTECE EM NOSSO PROGRAMA CASO A uma nova condição (ou até mesmo condições) seja avaliada. Vamos ao exemplo de seu uso:
2
3 $var1 = 10;
4 $var2 = 10;
12 break;
5
13 }
Com o switch temos uma série de verificações e, ao final, uma instrução padrão
7 echo "$var1 é maior que $var2";
10 }else{
FORMAS ALTERNATIVAS
Repare que além da primeira verificação, com o if, foi inserida uma segunda, com elseif. PHP permite que sejam utilizadas formas alternativas das instruções vistas. Em linhas gerais,
Ao final, a instrução else representa o fluxo caso nem a condição do if e nem a do elseif troca-se a chave de abertura por dois pontos e a de fechamento pela palavra reservada “end”
sejam verdadeiras. seguida do nome da instrução. Veja o exemplo:
1 <?php
Sobre sua sintaxe, além do que já foi dito no if, cabe destacar que não há limites de
2
4 $var2 = 10;
5
Pode ser comparada a uma série de instruções if, possuindo uma sintaxe um pouco diferente e
9 echo "$var1 é menor que $var2";
usada sobretudo quando se deseja verificar diferentes valores, inúmeras vezes, em uma
10 else:
2
Outra sintaxe alternativa interessante presente no PHP é o operador ternário. Através dele é
4 case 10:
possível avaliar uma condição e atribuir um valor de acordo com a validação. Veja o exemplo
5 echo "var1 é igual a 10";
7 case 20:
1 <?php
9 break;
3 $var1 = 10;
10 default:
4 $var2 = ($var1 >= 10) ? 11 : 9;
O laço while possui uma sintaxe simples: enquanto uma expressão for verdadeira, uma série
Note que uma condição foi verificada dentro de parênteses. Caso verdadeira, após o sinal
de instruções será executada de forma repetida. Para imprimirmos na tela os números de 2 a
“?” é atribuído o valor “11”. Caso negativa, após o sinal “:” é atribuído o valor “9”.
20, pulando de 2 em 2, poderíamos utilizar o seguinte código:
1 <?php
2
ESTRUTURAS DE REPETIÇÃO 3 $i = 2;
As estruturas de repetição, muitas vezes também chamadas de laços, permitem que 5 echo $i;
instruções ou trechos de códigos sejam executados de forma repetitiva. Sua sintaxe define as 6 $i+=2;
condições ou expressões que devem ser verificadas e, caso essas sejam verdadeiras, quais 7 echo "\n";
instruções devem ser executadas e por quantas vezes. A figura 6 apresenta o fluxo básico das 8 }
estruturas de repetição. 9
10 /*Sintaxe alternativa*/
Em PHP estão disponíveis as seguintes estruturas: while, do-while, for, foreach. A seguir,
11 $i = 2;
13 echo $i;
14 $i+=2;
15 echo "\n";
16 endwhile;
DICA
Repare que, no exemplo foram mostradas a forma normal e a forma alternativa do laço while –
também presente nas demais estruturas de repetição em PHP. Para praticar, copie o código e o
execute. Em seguida, tente alterar a condição e veja o resultado.
Fonte:Shutterstock
ATENÇÃO
Figura 6: Fluxo das estruturas de repetição
O comando ‘echo “\n”’ é utilizado para imprimir uma linha em branco quando o script é
executado via linha de comando.
WHILE
DO-WHILE
Por último, ao final de cada interação, a terceira expressão − “$i++” − é avaliada e executada.
Esse laço é semelhante ao anterior, exceto pelo fato de que a verificação, aqui, é feita ao final.
Com isso, a primeira instrução dentro do laço sempre será executada. Veja o exemplo:
1 <?php
2
DICA
3 $i = 2;
4 do {
Outra possibilidade nesse laço é avaliar múltiplas expressões, que deverão ser separadas
5 echo $i;
por vírgulas. Além disso, também é possível inserir expressões vazias.
6 $i+=2;
7 echo "\n";
8 }while ($i <= 20);
FOREACH
A última estrutura de repetição que veremos em PHP é a foreach. Esse laço é parecido com o
FOR for, possuindo uma sintaxe mais simples e sendo muito propício para realizar interações em
arrays. Veja o exemplo:
Esse laço possui sintaxe um pouco diferente do que vimos nos anteriores. Vamos ao exemplo:
1 <?php
1 <?php
2 $carros = Array("Fusca", "Monza", "Passat");
2
3
4 echo $i;
5 echo $carro;
5 echo "\n";
6 echo "\n";
6 }
7 }
Com o laço for, temos três expressões sendo avaliadas. Considerando o exemplo anterior, 8
10 echo $carros[$i];
12 }
<?PHP
$VAR1 = 10;
$VAR2 = 20;
$VAR3 = 25;
...;
A) A linguagem PHP possui dois pares de estruturas de repetição: while e do-while; for e
foreach. Esses pares têm a mesma função, sintaxe, e são executados da mesma forma, tendo
sido criados em duplicidade apenas para fornecer uma nomenclatura semelhante à vista em
outras linguagens.
1. Em PHP é possível incluir subcondições dentro de uma verificação a ser tratada por
uma estrutura de decisão. Considerando o código abaixo, assinale a opção equivalente à
instrução a ser executada dentro do if:
<?php
$var2 = 20;
$var3 = 25;
}
Os vetores, ou arrays, são variáveis que armazenam um grupo de itens relacionados.
A alternativa "A " está correta. Observando o exemplo utilizado ao final do último módulo, vimos a variável “$carros”
armazenar nomes de carros.
Os arrays podem ser vistos, numa abstração com o nosso dia a dia, como listas escritas em
Em PHP, é possível incluir e verificar uma subcondição dentro de uma condição a ser verificada
uma folha: nela inserimos vários itens, de forma ordenada. Com isso, cada novo elemento é
em uma estrutura de decisão. Nesta questão, a utilização do operador “||” indica que apenas
incluído ao final da lista – embora seja possível inseri-los também em outra ordem. Nas
uma das condições verificadas deve ser verdadeira para que a instrução contida dentro dele
linguagens de programação em geral, e especificamente em PHP, os arrays funcionam
seja executada. A primeira ($var1 > $var2) é falsa. Já a segunda é verdadeira, uma vez que a
exatamente dessa forma: uma lista ordenada na qual novos itens podem ser inseridos,
variável $var3 será comparada com o resultado da soma entre $var2 e $var1 − soma essa que
assim como os existentes podem ser deletados ou substituídos.
será realizada antes da comparação.
A linguagem PHP possui quatro estruturas de repetição. Tais estruturas têm sintaxes
diferentes, sendo cada uma mais indicada para determinadas situações.
índices também podem ser formados por strings.
ARRAY NUMÉRICO
ARRAY ASSOCIATIVO
ARRAY MISTO
DICA
O mesmo vale para os elementos de um vetor: podemos tanto ter strings quanto números,
entre outros tipos de dados, como arrays de arrays.
Fonte: - Walnut Bird | Shutterstock A linguagem PHP, por ser simples e bastante flexível, permite diferentes formas de declarar e
atribuir valores em um array. Não existe uma maneira melhor do que a outra − qualquer uma
Os arrays são compostos por dois elementos principais: o item em si e o seu índice, que é a
delas pode ser utilizada. Nesse sentido, cabe destacar a última forma: ela é bastante útil em
posição que este ocupa dentro de um array. Esse número se inicia em 0. Entretanto, os
situações nas quais não sabemos o tamanho do array ou a quantidade de itens que ele 9 //Segunda forma
receberá. 10 $carros = [
11 'vw' => "Fusca",
Ao estudar os exemplos, repare, ainda, nos comentários inseridos no código. Vamos a eles:
12 'chevrolet' => "Monza",
<?php
13 'fiat' => "Tempra"
14 ];
$carros = array();
15
16 //Terceira forma
17 $carros['vw'] = "Fusca";
18 $carros['chevrolet'] = "Monza";
19 $carros['fiat'] = "Tempra";
Por fim, veremos exemplos de array com índices numéricos e associativos. Repare que a
//Esta forma é semelhante à anterior, mas utilizando sintaxe similar a do Javascript
sintaxe é parecida com a vista na declaração dos associativos, ou seja, cada par “índice/valor”
$carros = ["Fusca", "Monza", "Passat"];
é separado por ‘=>’. Veja a seguir o exemplo e teste você mesmo o código em questão.
$carros[0] = "Fusca";
1 <?php
$carros[1] = "Monza";
2 $carros = array (
$carros[2] = "Passat";
3 'vw' => "Fusca",
4 0 => "Passat",
$carros[] = "Fusca";
6 1 => "Chevette",
$carros[] = "Monza";
7 'fiat' => "Tempra",
$carros[] = "Passat";
8 2 => "Uno"
9 );
Os arrays anteriores são numéricos. Vejamos outros exemplos, agora com vetores
10 //A impressão desse array gera a seguinte saída
1 <?php
13 Array
2 //Primeira forma
14 (
3 $carros = array (
4 'vw' => "Fusca",
6 'fiat' => "Tempra"
7 );
8
21 )
“unset”
22 */
A função “unset” recebe como parâmetro o array e índice ou índices que desejamos remover.
As formas vistas nos exemplos anteriores são as mais simples para a criação e inserção de Além disso, é possível também remover o vetor inteiro, passando-o como parâmetro e sem
elementos. Entretanto, a linguagem oferece outras formas, através do uso de funções como a definir nenhum índice.
array_push (que adiciona elementos ao final de um array) e a array_unshifit (adiciona
“array_splice”
elementos no início de um array).
A função “array_splice” recebe como parâmetros o array a ser manipulado, o offset (índice a
partir do qual desejamos excluir elementos) e o length (quantidade de itens que queremos
excluir).
SAIBA MAIS
1 <?php
2 $carros = array (
Além dessas, há funções que permitem gerar novos vetores, combinar vetores existentes e
3 'vw' => "Fusca",
6 1 => "Chevette",
8 2 => "Uno"
9 );
2 12 echo "\n\n";
A primeira é definindo o valor do elemento como vazio. Nesse caso, embora o valor do
14 $carros[0] = '';
elemento seja removido, o seu índice permanece no vetor, que também mantém o seu
15
tamanho inicial.
16 print_r($carros);
Outra forma é fazendo uso de duas funções: unset e array_splice. 17 echo "O tamanho atual do array é: " . count($carros);
O código a seguir − que como os demais é totalmente funcional e, portanto, deverá ser 18 echo "\n\n";
executado por você − contém exemplos de utilização das formas apresentadas. Seguem 19
algumas observações sobre o código e o uso das funções: 20 //Removendo dois elementos do array com unset
21 unset($carros['fiat'], $carros[1]);
“print_r”
22
25 echo "\n\n";
29
Array
O array que será visto na letra “b”, a seguir, é multidimensional. Ou seja, ele é composto por
[0] => melancia
mais de uma dimensão – nesse caso, duas. Olhando para o exemplo, temos: [1] => cereja
Cada uma dessas chaves possui um novo array, numérico, que contém quatro
[citricas] => Array
elementos.
(
Essas estruturas de dados são similares às vistas na disciplina de Matemática, onde temos [0] => laranja
também as matrizes, que podem ser chamadas de vetores de vetores. Trazendo esse [1] => limão
conceito ao contexto em questão, temos um array de arrays, ou um array dentro de outro [2] => abacaxi
TEORIA NA PRÁTICA
A melhor forma de fixar conteúdos quando se aprende uma linguagem de programação é
FUNÇÕES
praticando os conceitos estudados. Para isso, utilize seu ambiente AMP local ou um editor de
código online e faça o seguinte:
Funções, em linguagens de programação, são pedaços de código, encapsulados, que podem
Crie um array para armazenar frutas de acordo com seu tipo: ser chamados em qualquer outro trecho do programa ou do código. Em relação à sua sintaxe,
uma função deve ter um nome, uma definição e uma posterior invocação à mesma.
Frutas vermelhas: melancia, cereja, framboesa e morango. Em uma linguagem, as funções podem ser nativas − como a função “print_r”, utilizada em
alguns exemplos anteriores − ou construídas pelo desenvolvedor – também chamadas de
Frutas cítricas: laranja, limão, abacaxi e mexerica. funções definidas pelo usuário.
Nome da função seguido de parênteses – “()”. Caso receba parâmetros, eles deverão ser
DICA declarados dentro dos parênteses. Do contrário, deverão ficar sem conteúdo.
Em termos práticos, pense nas funções como um código criado para resolver problemas
Instruções da função envoltas em chaves – “{}”.
singulares ou executar tarefas específicas. Além disso, tenha em mente que esses códigos
poderão ser usados mais de uma vez ao longo do seu projeto. Logo, em vez de reescrever um As funções em PHP podem ou não retornar resultados. A primeira delas, “soma”, através do
mesmo código, faça uso de funções. operador “return”, devolve o resultado da soma entre os dois parâmetros recebidos. Repare
que a variável “$num3” recebe justamente esse resultado. Já a função “imprimir_resultado” não
retorna valores, apenas imprimindo uma frase na tela.
FUNÇÕES EM PHP
O exemplo a seguir descreve a sintaxe de criação de uma função em PHP e a forma de invocá- ATENÇÃO
la.
Outra particularidade em PHP é que as funções não precisam estar definidas para serem
1 <?php
invocadas. Repare que chamamos as duas antes mesmo de codificá-las. Devemos, porém,
2 $num1 = 10;
nos atentar para a quantidade de parâmetros a serem passados. Além disso, sua sintaxe é
3 $num2 = 15;
5 $num3 = soma($num1,$num2);
6 imprimir_resultado($num3);
7
NOMENCLATURAS DE FUNÇÕES E OUTRAS
8
BOAS PRÁTICAS
10 {
A nomeação de funções em PHP segue as mesmas regras para a definição de variáveis, com
11 return $numero1 + $numero2;
alguns padrões utilizados e que são considerados como boas práticas. As mesmas dicas
12 }
14 {
VOCÊ PODE CRIAR NOMES DE FUNÇÕES SEPARANDO
15 echo "O resultado da operação é igual a: " . $numero;
Palavra reservada “function” seguida do nome da função. há duas vertentes defendendo que:
A chave de abertura deve ser inserida logo após o fechamento dos parênteses que guardam os
parâmetros da função.
No vídeo a seguir, o professor Alexandre Paixão nos apresenta alguns exercícios,
demonstrando o uso de vetores e funções em PHP. Vamos assistir!
A chave de abertura deve ser inserida na linha seguinte – essa foi a aplicada nos códigos
anteriores.
Por fim, outra boa prática recomendada: indente seu código − não só nas instruções inseridas
dentro das funções, mas ao longo de todo o programa. Veja o código de exemplo e perceba
que as instruções dentro da função não estão coladas no início da linha. Indentar um código
ajuda na sua compreensão e no seu entendimento, além de deixar clara a hierarquia
existente.
FUNÇÕES NATIVAS
SAIBA MAIS
A Zend, fabricante norte-americana de software orientado para PHP, é uma das empresas mais
A linguagem PHP disponibiliza uma série de funções nativas, para as mais variadas
conhecidas e relevantes sobre o assunto. Além de um Framework bastante conhecido, que
necessidades. Há funções para a manipulação de arrays (como as que vimos nos exemplos
leva o seu nome, ela também é responsável pela certificação profissional PHP mais importante
anteriores), de strings, de arquivos, de acesso de banco de dados, entre tantas outras. A
do mercado. Entre todo o material que disponibiliza, há um manual de boas práticas com uma
documentação oficial da linguagem ou Manual do PHP é uma fonte extensa e que deve ser
série de convenções relacionadas à produção de código em PHP. Vale a pena a leitura desse
sempre consultada.
material, conforme sugerido na seção Explore +.
VERIFICANDO O APRENDIZADO
A) Vetores podem ser vistos como pilhas ou filas de itens, onde um novo elemento é,
naturalmente, incluído ao seu final.
B) Podemos incluir novos elementos em qualquer posição de um array, seja no início, meio ou
fim.
C) Um vetor pode conter diferentes tipos de dados, incluindo até mesmo outros vetores.
D) Um array multidimensional é um vetor que possui tanto índice numérico quanto associativo. entanto, é preciso ter atenção com algumas regras. O nome de uma função, por exemplo, deve
seguir as mesmas normas para os nomes de variáveis.
A) Uma função que não recebe parâmetros não poderá, nunca, retornar resultado.
B) Não é possível declarar variáveis dentro do escopo de uma função. Com isso, só estarão
CONSIDERAÇÕES FINAIS
disponíveis as recebidas como parâmetro.
C) Em PHP, diferentemente de outras linguagens, uma função pode ser invocada antes de ser Neste tema, foi apresentada a programação de páginas dinâmicas utilizando PHP, linguagem
codificada. de script server side. Ao longo de três módulos, através da explanação de conceitos e da
aplicação de exemplos práticos e funcionais, vimos a criação de variáveis e atribuição de
D) Em PHP é possível iniciar o nome de uma função utilizando qualquer caractere, inclusive
valores, alguns dos operadores disponíveis e a manipulação de variáveis recebidas de
números.
métodos HTTP POST e GET. Foram listadas, ainda, as estruturas de decisão e de repetição
disponíveis na linguagem e, por fim, descritos os recursos de vetor/array e funções.
GABARITO
As funções, em PHP, a exemplo do que ocorre com outros de seus recursos, possuem
bastante flexibilidade. Dessa forma, é possível declarar novas variáveis dentro do seu escopo
REFERÊNCIAS
ou ter funções retornando ou não valores, independentemente de receberem ou não
PHP. Manual do PHP: O que é o PHP? Consultado em meio eletrônico em: 16 ago. 2020.
parâmetros. Além disso, elas podem ser invocadas antes mesmo de serem definidas. No
EXPLORE+ CONTEUDISTA
Alexandre de Oliveira Paixão
Para saber mais sobre JavaScript, leia o livro JavaScript: The Definitive Guide, de
David Flanagan. CURRÍCULO LATTES
Acesse o site Apache Friends para aprofundar seus conhecimentos sobre o XAMPP, o
mais popular ambiente de desenvolvimento PHP.
Para testar seus códigos PHP, utilize os sites Online PHP Editor, PHPTester e Write PHP
Online.
Escopo de variáveis
Precedência de operadores
Operadores
for
break
continue
Visite o site da comunidade Mozilla e pesquise sobre os temas: HTTP; GET; e POST.
Acesse o site W3Schools e leia: The GET method e The POST method.
Leia o manual Zend Framework coding standard for PHP, da Zend Framework.
< MÓDULO 1
DEFINIÇÃO
Linguagem de Programação PHP. Linguagem PHP. Linguagem de script PHP. Linguagem de MÓDULO 2
Programação Web PHP. Integração de PHP com banco de dados. Integração de PHP com
Descrever os principais métodos da Classe PDO
MySQL. Integração de PHP com PostgreSQL. PDO. Classe PDO. Métodos da Classe PDO.
Integração entre HTML, PHP e banco de dados.
MÓDULO 3
PROPÓSITO Construir uma aplicação contendo um formulário HTML, uma tabela HTML e scripts PHP para
inserção e listagem de dados em/de um SGDB
Apresentar as funcionalidades da linguagem de programação PHP para integração com banco
de dados, fazendo uso da extensão PDO – PHP Data Objetcs.
INTRODUÇÃO
PREPARAÇÃO Ao longo deste tema, veremos como integrar o PHP com banco de dados fazendo uso da
Classe PDO (PHP Data Objects), uma interface de acesso a databases.
Para aplicação dos exemplos, serão necessários: um editor de texto com suporte à marcação
PHP; um servidor web com suporte à linguagem PHP e com um SGBD instalado e configurado Veremos desde a sua instalação, conceitos básicos, formas de utilização com MySQL e
para ser utilizado com PHP; um aplicativo Cliente para acesso ao SGDB. Em relação ao editor, PostgreSQL, à utilização de dois dos seus principais métodos. Tudo isso apoiados em
no Sistema Operacional Windows, é indicado o Notepad++. No Linux, o Nano Editor. Quanto exemplos práticos.
ao servidor, recomenda-se o Apache. Sobre o SGDB deverá ser utilizado o MySQL ou o Ao final deste tema, desenvolveremos um formulário HTML para a inclusão de informações em
PostgreSQL. Por fim, quanto ao aplicativo Cliente para acesso ao BD, recomenda-se o um banco de dados.
DBeaver.
Vamos começar nossa jornada acessando os códigos-fontes originais propostos para o
aprendizado de PHP com PDO. Baixe o arquivo, descompactando-o em seu dispositivo.
Assim, você poderá utilizar os códigos como material de apoio ao longo do tema!
OBJETIVOS
MÓDULO 1
Inicialmente, antes de tratarmos da classe PDO e de sua utilização com dois dos principais
Definir a Classe PDO e sua utilização com MySQL e PostgreSQL SGBDs existentes, vamos observar um pouco mais esses sistemas e sua integração com PHP.
MYSQL
O MySQL é um sistema de gerenciamento de banco de dados criado em 1995. Inicialmente de
SISTEMAS GERENCIADORES DE BANCOS código aberto, foi adquirido posteriormente pela Oracle, que, atualmente, mantém tanto uma
versão GPL quanto uma versão comercial. Trata-se de um dos SGBDs mais utilizados na web,
DE DADOS sendo, normalmente, associado ao PHP, dada a facilidade de conexão entre ambos.
Em PHP, estão disponíveis vários métodos e funções, através da extensão que leva o mesmo
nome do SGBD, para conexão e execução de instruções SQL no MySQL.
Os bancos de dados são o ponto central de muitos sites, sistemas e aplicativos. Tais estruturas
permitem o armazenamento e recuperação de qualquer tipo de informação, desde dados Para fins de comparação, o código abaixo demonstra a conexão com o MySQL e a execução
simples, como os posts de um blog pessoal, a dados altamente sensíveis, como os dados de uma instrução de consulta SQL utilizando as funções PHP específicas para o SGBD em
bancários ou financeiros, por exemplo. Nesse sentido, a linguagem de programação PHP questão.
oferece amplo suporte à integração com bancos de dados, sejam relacionais ou não, sejam >?php
suportados por diversos Sistemas Gerenciadores de Bancos de Dados (SGBD), como SQL //Constantes para armazenamento das variáveis de conexão.
Server, Oracle, MySQL e PostgreSQL – sendo esses dois últimos normalmente associados ao define('HOST', '127.0.0.1');
define('USER', 'user');
define('PASSWORD', 'psswd');
//Conectando com o Servidor
PHP
$conn = mysqli_connect(HOST, USER, PASSWORD, DBNAME) or die( ' Não foi possível
conectar.' );
mysqli_stmt_execute($stmt);
define('HOST', '127.0.0.1');
while (mysqli_stmt_fetch($stmt)) {
define('DBNAME', 'test');
}
$stringConn = "host=".HOST." dbname=".DBNAME." user=".USER." password=".PASSWORD;
//Encerrando a conexão
$conn = pg_connect($stringConn) or die( ' Ocorreu um erro e não foi possível conectar ao
mysqli_close($conn);
banco de dados.' );
POSTGRESQL
$instrucaoSQL = "Select nome, cpf, telefone From Cliente";
O PostgreSQL é um SGBD de código aberto, atualmente disponível sob a licença BSD, criado $result = pg_query( $conn, $instrucaoSQL ) or die(' Ocorreu um erro na execução da instrução:
em 1996. Enquanto o MySQL é um SGBD puramente relacional, o PostgreSQL é considerado ' . $instrucaoSQL );
um SGBD objeto-relacional. Na prática, essa diferença pode ser vista nas funcionalidades que //pg_query($dbcon, "SELECT id, nome FROM clientes");
o PostgreSQL possui, como a herança de tabelas e a sobreposição de funções. Outra //Imprimindo os dados da consulta
diferença importante é que o PostgreSQL adere de forma mais próxima aos padrões SQL. while ($row = pg_fetch_array( $result )){
//Encerrando a conexão
pg_close($conn);
Em PHP, as variáveis são representadas por um $ seguido pelo seu nome, que é case- a sua utilização com o PHP.
sensitive - ou seja, uma letra maiúscula é diferente de uma letra minúscula ($var é diferente de
$Var). Em relação à declaração e atribuição de valores, ambos os processos podem ocorrer ao
mesmo tempo. Veja no último exemplo que a variável $stringConn foi declarada (inserida pela
DICA
primeira vez no código) ao mesmo tempo que recebeu um valor (processo de atribuição). Por
último, as variáveis em PHP não possuem tipo. Logo, não é necessário indicar o tipo de dado a
Consulte o Manual do PHP para uma lista completa de todas as suas extensões.
ser armazenado por uma variável.
A respeito das estruturas de decisão, estão disponíveis em PHP: if, else, elseif e switch. PDO, acrônimo para PHP Data Objects, ou Objetos de Dados PHP, e conforme definição vista
ARRAYS anteriormente, é uma classe contida dentro de uma biblioteca e, por consequência, dentro de
uma extensão. Ao referi-la, vamos chamá-la apenas de classe ao longo deste tema.
Os arrays, ou vetores, são variáveis que guardam uma lista de itens relacionados. Tais
variáveis são compostas pelo par índice/valor. A variável $row, nos exemplos, é um array Trata-se de uma interface leve para acesso a bancos de dados em PHP. Nesse sentido, cabe a
cada banco de dados implementar a interface PDO a fim de expor os seus recursos e funções
associativo, ou seja, seus índices são compostos por strings – o nome de cada coluna
selecionada do banco de dados. Há ainda os arrays numéricos e os híbridos (arrays com específicos que, então, ficarão disponíveis para serem utilizados através do código PHP.
FUNÇÕES
código: as de conexão com o banco de dados; as de execução de query, entre outras não
vistas nos exemplos. Entretanto, fazendo uso do PDO, só precisaríamos mudar, nessa
situação, o nome do driver a ser utilizado – conforme poderá ser visto adiante. No mais, todas
as funções de execução de query, de tratamento de resultados, e demais, permaneceriam
exatamente iguais.
DRIVERS PDO
Atualmente, estão disponíveis 12 drivers PDO, ou seja, é possível utilizá-lo com doze
diferentes SGBDs. A tabela 1 ilustra os drivers e os bancos de dados suportados.
Para utilizarmos a classe PDO, é necessário habilitar sua extensão no servidor web, ou seja, PDO_CUBRID Cubrid
habilitar a extensão que contém o driver específico para cada banco de dados com os quais se
deseja trabalhar.
PDO_DBLIB FreeTDS / Microsoft SQL Server / Sybase
PDO_FIREBIRD Firebird
DICA
Em relação à instalação e configuração da extensão PDO e drivers mencionados, há diversos PDO_IBM IBM DB2
tutoriais disponíveis na internet. Lembre-se de que esse processo é diferente de acordo com o
Sistema Operacional utilizado. A seção Explore + contém algumas referências base para esse PDO_INFORMIX IBM Informix Dynamic Server
processo.
Como mostrado na Figura 1, assim como nos códigos de exemplo relacionados à conexão e PDO_MYSQL MySQL 3.x/4.x/5.x
execução de instruções próprios do MySQL e do PostgreSQL, vistos anteriormente, a principal
vantagem em se utilizar PDO no lugar das funções nativas do PHP para cada SGBD é o fato
PDO_OCI Oracle Call Interface
dessa extensão fornecer uma camada de abstração de acesso a dados. Em outras palavras,
isso significa que:
PDO_ODBC ODBC v3 (IBM DB2, unixODBC e win32 ODBC)
É possível utilizar os métodos e funções PDO independente do SGBD.
Na prática, e voltando aos códigos PHP para integração com cada SGBD, perceba que, se
PDO_PGSQL PostgreSQL
fôssemos trocar o banco de dados utilizado, precisaríamos também mudar algumas linhas de
Uma boa prática, em qualquer linguagem de programação, é tratar as possíveis exceções que
PDO_SQLITE SQLite 3 e SQLite 2
possam ocorrer no código. Cada linguagem possui uma sintaxe própria, sendo muito comum
na maioria a utilização da instrução “try/catch”.
PDO_SQLSRV Microsoft SQL Server / SQL Azure
A maioria das linguagens de programação conta com instruções específicas para o tratamento
de exceções. Em linhas gerais, temos uma exceção que pode ser lançada e capturada,
PDO_4D 4D estando o respectivo código envolvido por um bloco try, cuja sintaxe deve contar com, ao
menos, um bloco catch ou finally. Por fim, temos que o objeto lançado, ou seja, a exceção,
Atenção! Para visualizaçãocompleta da tabela utilize a rolagem horizontal precisa ser uma instância ou subclasse da classe Exception.
CONEXÃO COM O SGBD UTILIZANDO PDO Em relação ao bloco catch, podemos ter vários relacionados a um bloco try, sendo cada um
responsável pelo tratamento de um tipo de exceção. Já o conteúdo do bloco finally será
A primeira ação necessária ao trabalharmos com banco de dados é realizar a conexão com o
sempre executado após o bloco try ou catch.
próprio. Para isso, utilizamos o construtor da classe PDO, que é responsável por criar uma
instância de conexão. O fragmento abaixo demonstra a conexão com MySQL e com o
PostgreSQL.
PORTA A partir de um dos exemplos acima, poderíamos utilizar o seguinte código, com tratamento de
possíveis exceções, para realizar a conexão com o MySQL, por exemplo:
Uma porta, em redes de computadores, tem a função de identificar aplicações e processos a
<?php
fim de permitir que eles compartilhem uma única conexão com um determinado endereço IP.
//Constantes para armazenamento das variáveis de conexão.
Nesse sentido, a porta padrão do Mysql é a 3306 e a do PostgreSQL a 5432. define('HOST', '127.0.0.1');
Reforçando o que foi dito, caso precisássemos alterar o SGBD usado em nosso projeto, só define('PORT', '5432');
precisaríamos modificar essas informações acima e todo o restante do código, relacionado ao define('DBNAME', 'test');
define('PASSWORD', 'psswd');
try {
";password=" . PASSWORD);
PostgreSQL, usando recursos de captura de telas.
} catch (PDOException $e) {
echo 'A conexão falhou e retornou a seguinte mensagem de erro: ' . $e->getMessage();
ENCERRAMENTO DE CONEXÕES E
CONEXÕES PERSISTENTES
Para encerrar uma conexão aberta através de PDO, basta atribuir NULL à variável que contém
a instância da classe. O mesmo deve ser feito com as variáveis que armazenam o resultado da
execução dos métodos que executam instruções SQL, como Exec e Query – que serão vistos
mais adiante.
//...
$dsn = null;
PDO oferece suporte a conexões persistentes – que, em linhas gerais, consiste em não
PDO E SUA CONEXÃO COM MYSQL E
encerrar uma conexão aberta com o SGBD ao final de execução de um script. Com isso, é POSTGRESQL
possível fazer cache da conexão e reutilizá-la quando outros scripts requisitarem uma conexão
semelhante (com as mesmas credenciais) a essa que ficou aberta. Para usar conexões Um resumo sobre PDO e sua conexão com MySQL e PostgreSQL
persistentes em PDO, é necessário incluir um parâmetro a mais no momento de criação da
instância. Veja como ficaria o nosso exemplo de conexão com o PostgreSQL:
<?php
...
try {
VERIFICANDO O APRENDIZADO
echo 'A conexão falhou e retornou a seguinte mensagem de erro: ' . $e->getMessage();
A partir dessa Classe, poderíamos construir novas classes que compartilhassem os mesmos
Como mencionado, uma classe, em linguagens de programação, é um conceito vinculado ao
atributos e funcionalidades que a Classe Pessoa, além de poderem possuir propriedades e
paradigma de orientação a objetos. Logo, antes de descrever a classe PDO e seus métodos e,
funções próprias. Veja esse novo exemplo:
para um melhor entendimento, serão descritos os conceitos básicos de OO em PHP.
CLASSES E OBJETOS
//Como abaixo, essa função pode ser vazia. Ou seja, não realiza nenhuma ação.
$this->nome = $nome;
return $this->nome;
$this->tipo = $tipo;
Figura 3: Diagrama de Classes – Exemplo de Herança entre Classes. public function getTipo()
nome de herança. Logo, dentro desse conceito, é possível criar classes, como as classes return $this->tipo;
Cliente e Funcionário, que além de herdarem características de uma classe “pai”, possuem }
ainda suas próprias características distintas – data de cadastro e data da primeira compra, em }
Cliente e data de admissão e cargo, em Funcionário. A partir dessa estrutura, a Classe “Fruta”, podemos declarar vários objetos “filhos” /
Há muito mais a ser visto sobre orientação a objetos. As considerações acima foram provenientes dela mesma. Esses objetos também são chamados de instâncias e contêm
apresentadas de maneira resumida, a fim de iniciar esse assunto, ou mesmo revisá-lo, uma valores distintos, uma vez que a estrutura é dinâmica. O próximo fragmento de exemplo
vez que utilizaremos alguns desses conceitos a seguir, quando abordarmos a Classe PDO, demonstra a criação de alguns objetos oriundos da Classe “Fruta”.
Por fim, abaixo são demonstrados exemplos práticos, em PHP, da criação de classes e include "fruta.class.php";
instanciação de objetos de uma classe. Entre cada exemplo, estão presentes explicações
adicionais. Note ainda os comentários inseridos no código, pois eles contêm algumas $fruta1 = new Fruta();
$fruta1->setTipo("vermelha");
<?php
class Fruta
$fruta2->setNome("laranja");
var $nome;
$fruta2->setTipo("cítrica");
var $tipo;
//Construtor da Classe: Essa função é executada todas as vezes em que uma instância da Como visto no código acima, a criação de novas “frutas”, ou de objetos da classe “Frutas”, é
classe é criada.
feita com a criação de uma variável que recebe o operador “new” seguido do nome da Classe.
A partir desse ponto, essa variável em questão torna-se uma instância da classe. Na prática, $driverdata ]]] ) : bool
essa instância possui os mesmos atributos e propriedades da classe da qual se originou. public bindParam ( mixed $parameter , mixed &$variable [, int $data_type = PDO::PARAM_STR
[, int $length [, mixed $driver_options ]]] ) : bool
A classe PDO é dividida em duas classes: a própria PDO e a PDOStatement. Enquanto a public debugDumpParams ( void ) : void
primeira contém métodos para conexão com os SGBDs, para o controle de transações e public errorCode ( void ) : string
execução de queries; a segunda, PDOStatement, contém outros métodos relacionados às public errorInfo ( void ) : array
instruções executadas e ao seu retorno. public execute ([ array $input_parameters = NULL ] ) : bool
Os códigos a seguir mostram as estruturas dessas classes. public fetch ([ int $fetch_style [, int $cursor_orientation = PDO::FETCH_ORI_NEXT [, int
$cursor_offset = 0 ]]] ) : mixed
PDO {
public fetchAll ([ int $fetch_style [, mixed $fetch_argument [, array $ctor_args = array() ]]] ) :
public __construct ( string $dsn [, string $username [, string $passwd [, array $options ]]] )
array
Esse método pertencente à classe PDO, executa uma instrução SQL e retorna o número de
public rollBack ( void ) : bool
linhas afetadas pela instrução. Sua sintaxe pode ser vista a seguir:
public setAttribute ( int $attribute , mixed $value ) : bool
<?php
/*a variável $dsn, abaixo, corresponde à instação da classe PDO, inicializada na conexão com
PDOStatement implements Traversable {
o BD*/
/* Propriedades */
O código acima é funcional e complementar ao código anterior, uma vez que o método Exec
/* Métodos */
deve ser invocado a partir da instância para a classe PDO (correspondente à variável $dsn em
public bindColumn ( mixed $column , mixed &$param [, int $type [, int $maxlen [, mixed
nosso código). <?php
//...
Em relação às linhas afetadas, tal informação é útil para confirmarmos se a operação foi
while ($row = $resultSet->fetch(PDO::FETCH_ASSOC)) {
executada com sucesso. Logo, podemos utilizar uma estrutura de decisão, como “if”, para
//...
verificar o conteúdo da variável $qtdeLinhasAfetadas. Caso nenhuma linha tenha sido afetada,
}
será retornado 0 (zero). Além disso, Exec pode retornar ainda o booleano FALSE ou então “”
(vazio). OUTROS MÉTODOS IMPORTANTES
Por fim, cabe destacar que esse método não retorna à quantidade de linhas afetadas quando Além desses dois métodos apresentados, as Classes PDO e PDOStatment possuem outros
for executada uma instrução SELECT – o que pode ser feito através do próximo método que importantes métodos, como o Prepare e o Execute, por exemplo.
veremos, o Query.
Considerando a sintaxe desses dois métodos, em comparação com o que vimos dos métodos
MÉTODO QUERY Exec e Query, é boa prática fazer uso de ambos no lugar dos dois primeiros. Para embasar tal
afirmação, veremos alguns conceitos extras, a começar pelo SQL Injection.
O método Query, também pertencente à classe PDO, tem função parecida com o método Exec.
Entretanto, ele, além de executar uma instrução SQL, retorna – quando houver - um conjunto
de resultados (result set) como um objeto PDOStatement. Em caso de falhas, é retornado o
booleano FALSE. Vejamos um exemplo de sua utilização:
SQL INJECTION
<?php
}
//...
Perceba que, como o método retorna um objeto, é possível acessar seus índices na forma de
$login = $_POST['login'];
índices de array. Para isso, foi utilizado o método fetch, um laço while que percorreu o result
$pswd = $_POST['pswd'];
A respeito do método fetch, que retorna um result set no formato de array numérico e $result = mysql_query( $instrucaoSQL ) or die(' Ocorreu um erro na execução da instrução: ' .
associativo, há ainda outros disponíveis: o fetchAll, fetchColumn e fetchObject. Além disso, $instrucaoSQL . ' ' .
esse método pode receber como parâmetro o tipo de retorno, ou seja, se deverá retornar um mysql_error() );
array associativo, numérico, associativo e numérico (que é o seu padrão por omissão), entre
Perceba que, no código, o conteúdo das variáveis POST ‘login’ e ‘pswd’, equivalentes aos
outros. Veja o exemplo de sua utilização retornando um array associativo:
campos input de um formulário HTML para login, são recebidos no PHP e atribuídos a novas
variáveis. A seguir, o conteúdo dessas variáveis é utilizado em uma instrução SQL. Veja o que
poderia acontecer se no formulário HTML fossem inseridos valores diferentes do previsto, Para resolver os problemas acima, de SQL Injection, poderíamos escrever alguns códigos em
como, por exemplo, os seguintes valores: PHP. Em linhas gerais, esses códigos conteriam instruções para tratar os dados recebidos
antes de utilizá-los em instruções SQL. Esse trabalho poderia ser maçante, já que precisaria
prever e tratar diversas formas de códigos maliciosos. Para facilitar e resolver tais questões, a
classe PDO possui um método chamado Prepare.
- O método Prepare, como o nome indica, prepara uma instrução antes de ser executada,
retornando um objeto do tipo statement, que será então executado através do método Execute
(pertencente à classe PDOStatement).
- O método Prepare faz uso de um recurso chamado bind. Tal recurso vincula a variável ou
valor a ser utilizado na instrução SQL a uma outra variável (também pode ser utilizado o sinal
“?”). Durante esse processo de preparação da instrução e bind dos valores, a classe PDO
realiza, de forma interna, ou seja, sem que precisemos nos preocupar com eles, uma série de
tratamentos para evitar a SQL Injection.
<?php
Figura 4: Exemplo de SQL Injection em um Formulário HTML. //Constantes para armazenamento das variáveis de conexão.
Os valores inseridos no formulário mostrado na Figura 4 seriam recebidos no código PHP da define('HOST', '127.0.0.1');
define('DBNAME', 'test');
<?php
define('USER', 'user');
//...
define('PASSWORD', 'psswd');
//Realizando uma consulta no BD através do login e senha recebidos por POST
try {
$login = $_POST['login'];
$pswd = $_POST['pswd'];
$instrucaoSQL = "Select * From Usuario Where login = '' OR true = true;/* And password = '*/--
";password=" . PASSWORD);
'";
//...
echo 'A conexão falhou e retorno a seguinte mensagem de erro: ' . $e->getMessage();
Veja que, no lugar dos valores esperados – login e senha –, seriam recebidos comandos que }
modificariam o sentido original da instrução SQL, no código PHP, permitindo assim o acesso ao
sistema em questão. //Realizando uma consulta no BD através do login e senha recebidos por POST
$login = $_POST['login'];
$pswd = $_POST['pswd'];
MÉTODOS PREPARE E EXECUTE $stmt = $dsn->prepare("Select * From Usuario Where login = :login And password =
:password");
relacionados à classe PDO. Veja, por exemplo, as diferenças, na prática, entre os métodos
$stmt->execute([':login' => $login, ':password' => $pswd]);
Exec e Query; e entre esses dois métodos e os métodos Prepare e Execute. Tente realizar uma
RESUMINDO
$stmt = null;
$dsn = null;
- Inclua, ao menos, uma instrução para cada tipo possível: insert, update delete e select;
- Veja onde é possível melhorar os códigos utilizados. Você pode, por exemplo, incluir algumas
DICA
verificações extras etc.
Repare no código que o método prepare recebe como parâmetro a instrução SQL a ser A seguir o especialista demonstrará a execução de códigos apresentados no módulo, com
executada e que, nos lugares onde seriam utilizadas as variáveis PHP com os valores consultas SELECT e manipulação de dados INSERT, UPDATE e DELETE. Assista ao vídeo.
provenientes do formulário HTML, são usadas outras variáveis, chamadas parâmetros
nomeados (named parameters).
A seguir, o método execute faz o vínculo (bind) entre os named parameters e as variáveis PHP.
O mesmo código acima poderia ser executado tendo o sinal de interrogação “?” no lugar dos
parâmetros nomeados. Veja como ficaria esse fragmento de código:
<?php
//...
$stmt->execute([$login, $pswd]);
//...
UM POUCO DE PRÁTICA
UM POUCO DE PRÁTICA
A fim de melhor assimilar o conteúdo apresentado até aqui, chegou a hora de praticar. Todos
os códigos anteriores, usados como exemplos, são funcionais. Logo, a começar pelo código
responsável pela conexão com o SGBD (e tomando o cuidado de alterar as credenciais, nas
constantes PHP, para refletirem os dados de seu ambiente), copie e execute cada um deles
Este módulo terá caráter prático. Logo, todos os conceitos vistos nos módulos anteriores serão
utilizados na confecção de um Formulário HTML, que enviará dados para um script PHP que
os inserirá em um SGBD – nesse caso, no PostgreSQL, e de uma página para listagem desses
mesmos dados. Cada etapa desse processo será apresentada em detalhes, desde a criação
das tabelas no SGBD, passando pela criação do formulário HTML e chegando nos scripts PHP
que farão a conexão e inserção dos dados através das classes PDO e PDOStatement.
VERIFICANDO O APRENDIZADO
MOTIVAÇÃO
Deverá ser criado um formulário para armazenar os dados de clientes, contendo o seu nome
completo (obrigatório), o seu CPF (obrigatório; apenas os números), um endereço de e-mail
MÓDULO 3 válido (obrigatório) e sua data de nascimento (obrigatório; dia, mês e ano). Além disso, deverá
ser criada uma listagem para exibição dos clientes cadastrados.
A instrução SQL abaixo contém um exemplo de como a tabela cliente pode ser criada.
nome_cliente varchar(255),
cpf_cliente varchar(11),
email_cliente varchar(255),
data_nascimento_cliente timestamp,
);
PREPARAÇÃO
DICA
A sintaxe completa da instrução “Create Table”, para o PostgreSQL, pode ser vista em seu button ou type Sim O valor “submit”, atribuído ao atributo
próprio manual. input type em um desses campos, cria o
evento de envio do formulário.
POST POST.
if(formulario.nome_cliente.value === "" || formulario.nome_cliente.value === null) {
formulario.cpf_cliente.focus();
return false;
//o campo e-mail precisa ser válido, ou seja, deve : "@" e "."
if(formulario.email_cliente.value.indexOf("@") == -1 || formulario.email_cliente.value.indexOf(".")
== -1) {
formulario.email_cliente.focus();
return false;
formulario.data_nascimento_cliente.focus();
return false;
O script PHP definido no atributo “action” da tag “form”, no arquivo HTML, é o responsável por
}
receber os dados do formulário, validar os dados recebidos, conectar com o banco de dados e
}
inserir as informações.
Para utilizar a função Javascript acima, é necessário mudar um pouco o código do arquivo O atributo method, do formulário HTML, define o método HTTP utilizado para a transmissão
HTML que contém o formulário, removendo os atributos da HTML5, modificando o DocType dos dados – POST ou GET, sendo POST o valor padrão, caso esse atributo seja omitido no
para uma versão anterior da HTML, entre outros ajustes. Para facilitar, o código completo formulário. Para tratar os dados transmitidos por cada um desses métodos, há uma variável
desse arquivo HTML foi adicionado ao final, junto aos demais códigos. global pré-definida em PHP: $_POST e $_GET. Além disso, há também a variável
$_REQUEST, que recebe os dados transmitidos por ambos os métodos.
Essas variáveis pré-definidas são, na verdade, um array associativo, cujos índices equivalem
CODIFICANDO O SCRIPT PHP QUE ao valor definido para o atributo name, em cada campo do formulário. Logo, se um input no
formulário HTML for definido com “name=nome_cliente”, em PHP ele poderá ser lido dessa
PROCESSARÁ O FORMULÁRIO forma: $_REQUEST[‘nome_cliente’] - ou através de $_POST[‘nome_cliente’] ou
$_GET[‘nome_cliente’], dependendo do método utilizado.
DICA
Normalmente, em cenários reais, são utilizados padrões de projeto, como o MVC (Model-View-
Controller), e paradigmas como a Orientação a Objetos, para realizar a integração entre a
HTML, o PHP e o Banco de Dados. Tais questões foram deixadas de lado em nosso cenário,
por estarem fora do escopo deste tema. Entretanto, é recomendado estudar sobre esses <!-- Bootstrap -->
padrões e paradigmas a fim de aplicá-los, garantindo assim maior qualidade ao código gerado, <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css"
além de outros benefícios. rel="stylesheet" />
</head>
O script PHP que processa o formulário pode ser visto ao final deste módulo. Tal script realiza a
<body>
conexão com o SGBD PostgreSQL, prepara a instrução SQL com o método Prepare e os
<div class="container">
insere no banco de dados através do método Execute. Mais adiante, é realizada uma
<div class="row">
verificação e, em caso de sucesso ou erro, exibida uma mensagem correspondente. Por fim,
<div class="col-md-12">
<div class="row">
<div class="col-md-8">
<div class="card-header">
Embora o objetivo principal fosse o formulário de inserção de dados no SGBD, é interessante <h3>Cadastro de Clientes</h3>
vermos também a recuperação de informações e exibição em uma página HTML. Como dito, </div>
embora funcional, o código utilizado para listagem das informações tem caráter apenas de <div class="card-body">
estudo. Em situações reais, uma série de cuidados, tanto estéticos como de padrões de <div class="form-group">
página PHP contendo, tanto códigos de programação, quanto elementos HTML. Veja o código
</div>
base no exemplo.
<div class="form-group">
<label for="cpf_cliente">CPF
</div>
<div class="form-group">
<html>
<small id="emailHelp" class="form-text text-muted">Nunca vamos compartilhar seu email, com
<head>
ninguém.
<meta charset="utf-8">
<div class="form-group">
</div>
<div class="col-md-12">
</div>
<div class="row">
</div>
<div class="col-md-8">
</div>
<div class="card">
</div>
<div class="card-header">
</div>
<h3>Cadastro de Clientes</h3>
</form>
</div>
</div>
<div class="card-body">
</div>
<div class="form-group">
</div>
<label for="nome_cliente">Nome</label>
<script src="https://code.jquery.com/jquery-3.5.1.min.js">>
<input type="text" class="form-control" id="nome_cliente" name="nome_cliente"
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js">>
placeholder="Seu nome" >
</body>
</div>
</html>
<div class="form-group">
<label for="cpf_cliente">CPF</label>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<div class="form-group">
<html xmlns="http://www.w3.org/1999/xhtml">
<label for="email_cliente">Endereço de E-mail</label>
<head>
<input type="text" class="form-control" id="email_cliente" name="email_cliente"
<title>Formulário HTML - Cadastro de Clientes
placeholder="Seu e-mail" >
<meta charset="utf-8">
</div>
rel="stylesheet" />
<label for="data_nascimento_cliente">Data de Nascimento</label>
<script type="text/javascript">
<input type="text" class="form-control" id="data_nascimento_cliente"
function validarFormulario(formulario){
name="data_nascimento_cliente" placeholder="Sua data de nascimento" >
}
<div class="form-group text-center">
</script>
<button type="submit" class="btn btn-primary">Enviar</button>
</head>
</div>
<body>
</div>
<div class="container">
</div>
</div>
define('PORT', '5432');
</div>
define('DBNAME', 'minimundo');
</form>
define('USER', 'postgres');
</div>
define('PASSWORD', '159753');
</div>
try {
</div>
$dsn = new PDO("pgsql:host=". HOST . ";port=".PORT.";dbname=" . DBNAME . ";user=" .
<script src="https://code.jquery.com/jquery-3.5.1.min.js">>
USER . ";password=" . PASSWORD);
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js">>
} catch (PDOException $e) {
</body>
echo 'A conexão falhou e retorno a seguinte mensagem de erro: ' . $e->getMessage();
</html>
}
FORMULÁRIO HTML
/***PREPARAÇÃO E INSERÇÃO NO BANCO DE DADOS ***/
<?php
$stmt = $dsn->prepare("INSERT INTO cliente(nome_cliente, cpf_cliente, email_cliente,
/***VALIDAÇÃO DOS DADOS RECEBIDOS DO FORMULÁRIO ***/
data_nascimento_cliente) VALUES (?, ?, ?, ?)
");
if($_REQUEST['nome_cliente'] == ""){
$resultSet = $stmt->execute([$_REQUEST['nome_cliente'],
exit;
$_REQUEST['data_nascimento_cliente']]);
}
if($resultSet){
if(strlen($_REQUEST['cpf_cliente']) != 11){
echo "Os dados foram inseridos com sucesso.";
exit;
echo "Ocorreu um erro e não foi possível inserir os dados.";
}
}
exit;
$dsn = null;
exit;
/***CONEXÃO COM O BD ***/
}
//O código de validação server side pode ser visto no exemplo de código 3.
define('HOST', '192.168.52.128');
define('HOST', '192.168.52.128');
define('USER', 'postgres');
define('PASSWORD', '159753');
<tr>
try {
<th scope="col">#
echo 'A conexão falhou e retorno a seguinte mensagem de erro: ' . $e->getMessage();
<th scope="col">Data de Nascimento
}
</tr>
$resultSet = $dsn->query($instrucaoSQL);
<while ($row = $resultSet->fetch(PDO::FETCH_ASSOC)):
?>
?>>
<!DOCTYPE html>
<tr>
<html>
<th scope="row"><?php echo $row['id_cliente']; ?></th>
<head>
<td><?php echo $row['nome_cliente']; ?></td>
rel="stylesheet" />
endwhile;
</head>
?>
<body>
</tbody>
<div class="container">
</table>
<div class="row">
</div>
<div class="col-md-12">
</div>
<div class="row">
</div>
<div class="col-md-8">
</div>
<div class="card">
</div>
<div class="card-header">
</div>
<h3>Listagem de Clientes</h3>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.5.1.min.js">>
<div class="card-body">
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js">>
<table class="table">
</body>
<thead class="thead-dark">
</html>
AVALIAÇÃO DO TEMA:
REFERÊNCIAS
VERIFICANDO O APRENDIZADO PHP. Manual do PHP. In: PHP. Publicado em: 5 ago. 2020.
EXPLORE+
CONCLUSÃO
Para saber mais sobre os assuntos explorados neste tema:
Pesquise:
O PHP possui algumas funções específicas para vários SGBDs, através das quais é possível
realizar a conexão com o banco de dados e executar instruções SQL. Além disso, há funções
próprias para a recuperação de dados, como as que transformam o conjunto de resultados em
arrays numéricos ou associativos. O Manual do PHP contém a listagem dessas funções, assim
como exemplos de sua utilização. Cabe ressaltar que, no lugar da utilização dessas funções
específicas, deve-se dar preferência ao uso da Classe PDO como camada abstração para esse
fim. Neste mesmo Manual, não deixe de ler também maiores sobre o método fetch e
equivalentes.
CONTEUDISTA
Alexandre de Oliveira Paixão
CURRÍCULO LATTES