0% acharam este documento útil (0 voto)
53 visualizações145 páginas

Desenv Web PHP e Book

Enviado por

Moacir Heck
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
53 visualizações145 páginas

Desenv Web PHP e Book

Enviado por

Moacir Heck
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 145

Copyright © Portal Educação

2012 – Portal Educação


Todos os direitos reservados

R: Sete de setembro, 1686 – Centro – CEP: 79002-130


Telematrículas e Teleatendimento: 0800 707 4520
Internacional: +55 (67) 3303-4520
[email protected] – Campo Grande-MS
Endereço Internet: http://www.portaleducacao.com.br

Dados Internacionais de Catalogação na Publicação - Brasil


Triagem Organização LTDA ME
Bibliotecário responsável: Rodrigo Pereira CRB 1/2167
Portal Educação
P842d Desenvolvimento web com PHP / Portal Educação. - Campo Grande: Portal
Educação, 2012.
151p. : il.

Inclui bibliografia
ISBN 978-85-8241-240-4
1. PHP (Linguagem de programação). 2. HTML ( Linguagem de
programação). I. Portal Educação. II. Título.
CDD 005.133
SUMÁRIO

1 INTRODUÇÃO AO HTML
1.1 Por que aprender HTML antes de PHP?
2 INTRODUÇÃO
2.1 Linguagem de marcação
2.2 Linguagem Interpretada pelo próprio browser
2.3 Modelo Cliente / Servidor
2.4 Casos especiais: Firefox | Netscape | MS-Explorer
3 CONCEITOS INICIAIS
3.1 Extensão de um novo documento html
3.2 Vendo um documento HTML
3.3 Conceito de tags e de documento bem formado
3.4 Modificando parâmetros de tags
4 BASE DE UM DOCUMENTO
4.1 Definindo o documento principal
4.2 Definindo o cabeçalho do documento
4.3 Dando um título para o documento
4.4 Definindo o corpo principal
4.5 Alterando a cor de fundo
5 EXIBINDO INFORMAÇÕES
5.1 Escrevendo dados num documento
5.2 Criando cabeçalhos
5.3 Um parágrafo
5.4 Alterando o alinhamento de um texto
5.5 Mudando a cor do texto
5.6 Tornando o texto negrito
5.7 Tornando o texto itálico
5.8 Tornando o texto sublinhado
5.9 Quebrando linhas
5.10 Dividindo em seções
6 LIGAÇÕES ENTRE PÁGINAS
6.1 Conceitos de links entre páginas
6.2 Criando um novo link
7 INSERINDO IMAGENS
7.1 Inserindo uma imagem
8 TABELAS
8.1 Formatando dados usando tabelas
8.2 Mostrando as bordas
8.3 Incluindo uma nova linha
8.4 Incluindo uma nova célula
8.5 Mesclando linhas
8.6 Mesclando colunas
8.7 Alterando a cor de fundo de uma célula
8.8 Alterando o alinhamento de uma célula
9 LISTAS
9.1 Listas gerais
10 FORMULÁRIOS
10.1 Trabalhando com dados em HTML
10.2 Definindo um novo formulário
10.3 Opções de entrada de dados
10.4 Criando um novo campo
10.5 Criando um botão
10.6 Criando um botão de submissão
10.7 Criando um botão de limpeza
10.8 Criando uma checkbox
10.9 Criando um radiobutton
10.10 Criando um campo de senha
10.11 Caixas de seleção
10.12 Caixas de texto
11 JANELAS
11.1 Definição de janelas em HTML
11.2 Definição de janelas
12 INTRODUÇÃO AO PHP – PARTE 1
12.1 Linguagem Interpretada
12.2 Modelo Cliente/Servidor
12.3 Diferenças entre PHP e Java Script
12.4 Servidor Web
12.5 Casos específicos: Apache e MS-IIS
12.6 Instalando o Apache
12.7 Visualização dos resultados
13 CONCEITOS INICIAIS
13.1 Onde colocar o código
13.2 Mesclando PHP com HTML
13.3 As tags especiais
13.4 comando echo “TESTE”
14 TRABALHANDO COM DADOS
14.1 Tipos de dados
14.2 Declaração de variáveis
14.3 Declaração de constantes
14.4 Trabalhando com Vetores
14.5 Comentários
14.6 Comando de atribuição
14.7 Imprimindo conteúdo na tela
15 OPERADORES
15.1 Operadores matemáticos
15.2 Operadores relacionais
15.3 Operadores lógicos
15.4 Operador de concatenação de strings
15.5 Notação Pré-fixa e Pós-fixa
16 CONDICIONAIS
16.1 Bloco de Comandos
16.2 O condicional if
16.3 O condicional if/else
16.4 O condicional switch
17 REPETIÇÕES
17.1 Repetição usando while
17.2 Repetição usando for
17.3 Repetição usando do/while
17.4 Repetição usando foreach
18 DESVIOS INCONDICIONAIS
18.1 Desvio incondicional: return
18.20 Desvio incondicional: break
18.3 Desvio incondicional: continue
19 INTRODUÇÃO AO PHP – PARTE 2
19.1 Declarando uma função
19.2 Chamando uma função
19.3 Definindo um valor padrão para os parâmetros de entrada
20 INCLUINDO ARQUIVOS
20.1 Diretiva include
20.2 Diretiva require
20.3 Diretivas include_once e require_once
21 FORMULÁRIOS
21.1 Enviando dados entre arquivos
21.2 Cabeçalho de um formulário
21.3 Manuseando as informações passadas
21.4 Variáveis
21.5 O atalho
22 PHP E BANCO DE DADOS
22.1 Funções de Acesso a Bancos de Dados
22.2 Conectando com um banco de dados
22.3 Criando e executando uma consulta de dados
22.4 Tratando o retorno de uma consulta
23 GERENCIAMENTO DE SESSÕES
23.1 Introdução e Motivação
23.2 Criando uma sessão
23.3 Atribuindo informações a uma sessão
23.4 Acessando informações de uma sessão
23.5 Destruindo uma sessão
23.6 Cuidados necessários

24 ORIENTAÇÃO A OBJETOS
24.1 Introdução e Motivação
24.2 Classe e Objeto
24.3 Criando um objeto
24.4 Atributo e Estado
24.5 Método e Ação
24.6 Construtores
24.7 Herança
24.8 Métodos Estáticos
25 EXPRESSÕES REGULARES
25.1 Introdução e Motivação
25.2 Caracteres Normais e Caracteres Especiais
25.3 Listas de Caracteres
25.3 Repetições Definidas
25.5 Uso de Funções do PHP
26 CONTROLANDO O UPLOAD DE ARQUIVOS
26.1 Introdução e Motivação
26.2 Alterações Necessárias no Formulário
26.3 Tratamento no Servidor
4.26 Movendo um arquivo para um diretório
26.4 Salvando uma referência no Banco de Dados
27 TRATAMENTO DE EXCEÇÕES
27.1 Introdução e Motivação
27.2 Como Capturar uma Exceção
27.3 Como Lançar uma Exceção
27.4 Como Criar um Objeto de Exceção
REFERÊNCIAS
1 INTRODUÇÃO AO HTML

1.1 Por que aprender HTML antes de PHP?

Quando se está programando na perspectiva WEB, toda a interface gráfica, independente da


tecnologia usada, faz uso do HTML para construção e exibição de suas interfaces. Então, ainda que o
PHP controle o fluxo de execução da sua aplicação (como recuperar dados de um banco de dados ou
iterar sobre uma lista de dados) será o HTML responsável por renderizar a página em si, desenhando
os componentes gráficos, posicionando textos, tabelas e formulários.

Por conta disso, a primeira parte deste material se propõe a introduzir e estabelecer todos os
conceitos necessários para a construção de interfaces gráficas utilizando o HTML.
2 INTRODUÇÂO

2.1 Linguagem de marcação

Linguagens de marcação são utilizadas para definir formatos e padrões dentro de um


documento. Normalmente não possuem qualquer estrutura de controle como as linguagens de
programação tradicionais (por exemplo, comandos condicionais ou de repetição). Dessa forma, servem
basicamente para definir como um determinado conteúdo será exibido na tela.
As linguagens de marcação se utilizam do conceito de marcador ou tag, que possuem
significado quando forem visualizados por algum sistema, entendendo como esse conteúdo deve ser
exibido. Por exemplo, suponha que se queira deixar todas as palavras começadas pela letra “A” em
negrito; para executar essa operação em HTML, seria necessário colocar as palavras começadas por
esta letra entre os símbolos <b> e </b>.
Existem diversos tipos e padrões para linguagens de marcação e a HTML é apenas mais
uma delas, mas que se popularizou por causa do advento da Internet, já que a maioria dos documentos
que trafega na rede a utiliza para exibir suas informações.

2.2 Linguagem Interpretada pelo próprio browser

O HTML possui um código com várias marcações, mas ao ser aberto como um documento
texto, não mostra nada além de texto com essas marcas especiais em determinados pontos. Para que
o real efeito do HTML ocorra, é preciso outro software, que pegue o documento fonte e interprete o que
significa cada uma das marcações existentes.

A função básica de um browser Web (como o Microsoft Internet Explorer e o Mozilla Firefox)
é fazer exatamente isso; dado um documento com marcações HTML, ele está preparado para entendê-
las e exibir o conteúdo aos usuários depois de terem interpretado suas tags, exibindo o real conteúdo
de cada documento.
Vale destacar ainda que o HTML não é compilado, como algumas linguagens de
programação, transitando na rede de uma forma que o seu código fonte pode ser lido por

qualquer pessoa. Ele também não tem nenhum processamento no lado do servidor, este apenas envia
os arquivos para a máquina cliente, que fica responsável por fazer todo o processamento.

2.3 Modelo Cliente / Servidor

O modelo básico de funcionamento da Internet é o chamado Cliente / Servidor, onde existe


uma máquina central que tem armazenado os documentos que os usuários desejam ver e estes, por
sua vez, são os chamados clientes. No caso da Internet, não existe um computador central, pois ela
cresceu a tal ponto que fica impossível gerenciá-la desta maneira.

Um servidor pode atender a requisições de diversos clientes ao mesmo tempo, cada um


solicitando um documento, como uma página específica de um site, diferente ao mesmo tempo. Esse
servidor normalmente possui uma capacidade de processamento bem maior, para garantir que isso
possa ser feito sem demora para os clientes.

Os computadores clientes, após receberem os documentos do servidor pela Internet, ficam


responsáveis por realizar alguma operação sobre esses arquivos, como por exemplo, visualizar as
informações de um determinado arquivo num browser ou ainda salvar o arquivo em algum diretório na
máquina cliente (os populares downloads).

2.4 Casos especiais: Firefox | Netscape | MS-Explorer

Os dois sistemas mais populares para visualização de páginas HTML, aquelas que são
obtidas visitando sites na internet, são atualmente o Mozilla Firefox e o Microsoft Internet Explorer. O
primeiro roda na maioria das plataformas existentes (e é baseado no antigo Netscape Navigator), e o
segundo apenas em sistemas baseados no Microsoft Windows.
O Netscape Navigator já foi o líder deste segmento de mercado de visualização de páginas
internet, quando a Microsoft fez uma forte investida neste campo, disponibilizando seu browser direto
no sistema operacional. Isso gerou diversos movimentos de acusação de

concorrência desleal (deve-se levar em conta que o Microsoft Windows equipa a imensa maioria de
computadores), porém o resultado foi a inversão da liderança entre os navegadores.

Tecnicamente, eles são muito parecidos, ambos devem visualizar o conteúdo de um


documento HTML na tela do computador. Teoricamente, o resultado deveria ser igual se os
documentos fossem iguais (essa é uma das bases das linguagens de marcação), mas devido a
diferentes entendimentos de algumas marcas de documento, a implementação de um e de outro pode
mudar, o que acaba gerando resultados diferentes para documentos iguais.
3 CONCEITOS INICIAIS

3.1 Extensão de um novo documento: .html

A extensão padrão para os documentos HTML é o .html, porém existe uma variação, o .htm.
De modo geral, se um documento com esta extensão for criado e aberto num browser, este tentará
mostrar o seu conteúdo como HTML, interpretando tags e tudo o mais.

3.2 Vendo um documento HTML

Como já mencionado, a maneira de se ver o resultado de um documento HTML é abrindo-o


num browser. Isso tanto pode ser feito abrindo o documento diretamente, como o colocando num
servidor internet e acessando-o como mais uma página da internet. O resultado deve ser o mesmo.

3.3 Conceito de tags e de documento bem formado

Já foi falado rapidamente o significado de tags ou marcadores no início deste documento.


Uma tag é uma marca que deve ser colocada num documento e que determinados programas
interpretam de alguma forma, dando um significado específico, como alterando a formatação do
documento naquele ponto.

Normalmente, o texto a ser modificado deve vir entre uma marca que indica o início e o fim da
marcação. Essa tag deve ser alguma reconhecida pelo browser. Por exemplo:

<i> Texto Modificado e Exibido em Itálico </i>


No trecho acima, todas as palavras seriam mostradas em itálico, pois estão colocadas entre
tags que possuem esse significado e alteram o texto desta forma quando interpretadas por um browser.
A imensa maioria de tags da definição do HTML possui um abre e um fecha correspondente, daí vem a
definição de documento bem formado, ou seja, sempre que existir um abre, deve existir um fecha
correspondente a este.

Figura 01: Resultado das tags para itálico.

Se por algum motivo uma tag não for fechada, o documento continuará a ser exibido,
eventualmente com algum erro na visualização, mas nenhum erro na execução será mostrado,
diferente da maioria das linguagens de programação tradicionais, onde alguma saída de erro seria
mostrada para o usuário.

Uma última observação sobre documentos bem formados, é sobre o caso das tags que não
possuem marca indicando o fechamento. Nesses casos, deve-se colocar uma barra no início da
primeira tag e omitir a que seria de fechamento. O HTML já pode ser escrito dessa forma e a maioria
dos browsers irá reconhecer o formato, contudo a padronização maior virá quando o XHTML (HTML
extendido) se tornar um padrão mais difundido.
3.4 Modificando parâmetros de tags

As tags também possuem modificadores que podem alterar parte do significado do conteúdo
dela num determinado contexto. Por exemplo, o par de tags <body></body> define simplesmente o
corpo de uma página HTML, porém no exemplo <body bgcolor = “blue”> ... </body> ela continua
definindo o corpo de um documento HTML, mas modifica a sua cor de fundo para azul (a não
colocação deste parâmetro implica que a cor de fundo continua branca). Existe uma infinidade de
parâmetros para cada tag e apenas com uma referência do lado, consegue-se saber todas as suas
opções ou funcionalidades.

Figura 02: Página com fundo azul vista num browser.


4 BASE DE UM DOCUMENTO

4.1 Definindo o documento principal: <html></html>

Antes de se escrever o conteúdo que um determinado documento deverá exibir na tela, deve-
se identificar claramente que o documento em questão será entendido como um documento HTML e
que tudo que estiver contido nele receberá um tratamento especial. Esse tipo de operação é feito
utilizando-se as tags <html> e </html>, indicando que tudo dentro delas será interpretado como uma
página Internet.

4.2 Definindo o cabeçalho do documento: <head></head>

Todo documento HTML possui um cabeçalho onde são escritas definições gerais e de
padrões a serem seguidos em todas as partes do documento, bem como a escrita de determinados
trechos de código de programação ou ligação com documentos externos. A definição do título da
página, (detalhada abaixo) também deve ser escrita entre as tags <head> e </head>.

4.3 Dando um título para o documento: <title></title>

Por definição, todos os aplicativos executados sobre a plataforma Microsoft Windows (e uma
grande variedade de outras plataformas) que possuem interação por janelas, possuem uma barra
superior que mostra um título para o documento sendo exibido, ao mesmo tempo em que também fala
qual o aplicativo que está sendo executado na janela corrente.

Nas páginas da Internet, não é diferente em relação à existência desses elementos. Portanto,
para colocarmos o título que desejarmos numa janela do browser utilizamos as tags <title></title>, que
deve vir escrita entre as tags <head> e </head>. Podemos ter como exemplo:

<head>
<title> Título da minha Janela </title>

</head>

Nesse exemplo, será exibida uma janela com o título “Título da Janela”. Verifique as imagens
acima e note o título de cada janela.

4.4 Definindo o corpo principal: <body></body>

A partir da definição destas tags, que indicam o início do corpo principal do documento, ou
seja, o que será mostrado na tela do monitor, pode-se começar a escrever o conteúdo da página em si,
colocando-se diversas tags de formatação, definindo-se campos de formulários, mostrando textos e
imagens, além de criar links entre diversos outros documentos.

4.5 Alterando a cor de fundo: atributo bgcolor

Como já mencionado anteriormente, a grande maioria de tags HTML possui parâmetros


modificadores que de alguma forma alteram a forma como o conteúdo que virá entre as tags será
exibido. Um dos parâmetros existentes para a tag <body></body> é a que altera a cor de fundo de toda
a janela. Veja o exemplo:

...

<body bgcolor = “blue”> </body>

...

Neste caso, toda a janela do browser ficará com a cor azul, porém, no lugar do azul,
poderiam ser colocadas diversas outras cores, todas em inglês, que mudariam também o fundo. Além
do nome por extenso, também poderia ser colocado o valor correspondente da cor em hexadecimal,
precedido do símbolo sustenido: “#”.

...

<body bgcolor = “#4D998F”> </body>

...

Figura 03: Janela com a cor de fundo definida usando o valor #4D998F.
5 EXIBINDO INFORMAÇÕES

5.1 Escrevendo dados num documento

Esta seção trata principalmente da forma como os dados serão exibidos na tela, alterando
sua formatação, alinhamento e disposição na tela, sempre utilizando tags HTML para permitir isso. Por
padrão, pode ser escrito qualquer coisa no documento, mesmo fora das tags, e mesmo assim o
browser irá exibir o texto, com a diferença de que não se tem nenhum controle sobre o efeito.
Daí a importância de sempre se utilizar tags para controlar a formatação, não apenas abrindo
uma tag e colocando a informação, como também fechando a tag correspondente, para ao final gerar
um documento HTML bem formado, ao mesmo tempo em que se tem um controle preciso do que um
determinado browser irá exibir, e não deixar que ele tome decisões que vão distorcer o conteúdo.

5.2 Criando cabeçalhos: <hn></hn>

A maneira mais simples de se definir um cabeçalho (ou título) num documento HTML, é
através das tags <hn> e </hn>, onde o valor do “n” seria substituído por algum número entre 1 e 6,
sendo que valores menores indicam que o tamanho da fonte exibida será maior e números menores
indicam títulos de tamanho menor. Por exemplo:

<h1> Comparando Tamanhos </h1>

<h2> Comparando Tamanhos </h2>

<h3> Comparando Tamanhos </h3>

<h4> Comparando Tamanhos </h4>

<h5> Comparando Tamanhos </h5>

<h6> Comparando Tamanhos </h6>


Figura 04: Tamanhos diferentes da tag <hn> e </hn>.

5.3 Um parágrafo: <p></p>

Um texto normal, ou melhor, que seja encarado como normal e que apareça em diversos
pontos da página, deve vir entre as tags <p> e </p>, que denotam a existência de um parágrafo. Para
visualização de algum resultado, não é necessário que exista uma tag de fechamento, porém isso pode
fazer com que versões mais antigas de browsers vejam o resultado de forma diferente.

<p> Texto, Texto, Texto, Texto, Texto, Texto, Texto, Texto, Texto, Texto, Texto, Texto, Texto, Texto,
Texto, Texto, Texto, Texto, Texto, Texto, Texto, Texto, Texto, Texto, Texto, Texto, Texto, Texto, Texto,
Texto, Texto </p>

Neste exemplo, será criado um parágrafo contendo o texto entre as tags. Caso sejam criados
mais de um parágrafo, eles terão um pequeno espaçamento para indicarem que são elementos
diferentes.
Figura 05: Inserindo texto entre as tags <p> e </p>.

5.4 Alterando o alinhamento de um texto

Dentro das tags que trabalham com texto, pode vir um modificador, também chamado de
parâmetro, que altera o alinhamento do texto que vier entre as tags (daí a importância de fechar as
tags, pois mostra explicitamente até onde vai o alinhamento proposto para uma determinada tag).
Existem quatro alinhamentos possíveis: esquerdo, centralizado, direito e justificado.

<p align=’left’> Texto à esquerda </p>

<p align=’center’> Texto ao centro </p>

<p align=’right’> Texto à direita </p>

<p align=’justify’> Texto justificado </p>


Figura 06: Alinhamento de texto.

O texto com alinhamento à esquerda é o valor padrão, fazendo com que não seja necessário
colocar explicitamente esse item quando estiver sendo declarado. O texto com alinhamento justificado,
faz com que o texto fique alinhado tanto à esquerda, quanto à direita, distribuindo as palavras de uma
forma homogênea.

5.5 Mudando a cor do texto: <font></font>

As tags <font> e </font> servem para modificar a fonte, o tamanho e as cores utilizadas num
trecho de texto de forma global, não apenas uma ou outra palavra. Com isso, tem-se um controle
preciso da formatação que está se tentando alcançar.

<font color=’red’ size=’20’><p> Exemplo! </p></font>


Figura 07: Mudança da cor do texto.

5.6 Tornando o texto negrito: <b></b>

Para dar um destaque maior a algum trecho de texto, podem-se usar as tags <b> e </b>, que
destacam o texto que estiver contido entre elas. Elas podem ser colocadas dentro de outras tags, como
nas de parágrafo ou de título, desde que o ocorra o devido fechamento. Segue um exemplo:

<p> Texto normal, mas agora com <b> negrito </b> . </p>
Figura 08: Texto em negrito.

O início da frase está normal, porém existe uma palavra destacada.

5.7 Tornando o texto itálico: <i></i>

Da mesma forma que se pode destacar algum trecho de um texto utilizando negrito, como
mostrado acima, também se usam as tags <i> e </i> para mostrar um trecho de código em itálico, como
alguma citação ou palavra estrangeira. O seu uso é idêntico ao caso da tag negrito.

<p> Agora em <i> itálico </i> ... </p>


Figura 09: Texto em itálico.

5.8 Tornando o texto sublinhado: <u></u>

Por fim, o último dos modificadores padrão de textos é o de sublinhado, que deve ser
utilizado da mesma forma que as tags exibidas anteriormente, de negrito e itálico. Ele deixa marcado
com uma linha inferior, abaixo das palavras, todas as palavras entre elas.

<p> Parte <u>deste</u> texto <u> será sublinhado </u>. </p>

Figura 10: Texto em sublinhado.

Vale destacar que pode ocorrer qualquer combinação destas tags mostradas até o momento,
para se chegar ao efeito desejado.
5.9 Quebrando linhas: <br>

Esta tag não possui fecha, ela é definida unicamente. Ela serve para inserir quebras de linhas
no documento, fazendo com que o texto que vem abaixo seja ainda mais deslocado. É muito
importante para arrumar a disposição dos elementos gráficos na tela, não havendo limite de
quantidade.

<h1> Linha 1 </h1> <br><br><br><br><br> <h1> Linha 2 </h1>


Figura 11: Quebras de linha.

Neste exemplo, apesar de todas as frases estarem na mesma linha, foram inseridas cinco
quebras de linha, o que irá fazer com que o segundo texto seja deslocado em cinco linhas para baixo.

5.10 Dividindo em seções: <hr>

Da mesma forma que a tag <br>, esta também não possui uma tag para indicar o seu final,
ela é definida unicamente. Serve para colocar linhas horizontais, principalmente para implementar a
divisão de seções dentro de um mesmo conteúdo. Por exemplo:

<p> Primeira Seção </p> <hr> <p> Segunda Seção </p>


Figura 12: Separadores horizontais.
6 LIGAÇÕES ENTRE PÁGINAS

6.1 Conceitos de links entre páginas

Um dos fundamentos da Internet é permitir que se possa ir de um lugar a outro da rede com
apenas um clique. Esta é a função dos links, estabelecer conexões entre diversas páginas, sejam elas
internas, dentro do mesmo site, seja referenciando sites externos, de outras empresas, mas que sejam
relevantes para o conteúdo discutido no momento.
Dessa forma, surgem dois conceitos, o de link absoluto e o de link relativo, fundamentais para
a implementação de links dentro de uma página. Um link absoluto define todo o caminho onde uma
segunda página está hospedada e que será aberta no browser. Um link relativo indica apenas parte do
endereço, utilizando conceitos dos diretórios em uso para indicar outra página.

Em maiores detalhes, o diretório corrente onde uma página HTML está salva, é chamado
diretório raiz. Para se referenciar ao diretório (e eventuais arquivos) que está acima numa hierarquia,
usa-se o ponto-ponto: “..”. Para indicar um diretório abaixo na hierarquia, utiliza-se o nome do diretório,
mas caso exista mais de um, deve-se separar os nomes por uma barra “/”.

Esses conceitos são os mesmos que utilizados para a navegação em sistemas


computacionais baseados em linha de comando, como o MS-DOS ou um terminal, no Linux. Prefira
sempre utilizar caminhos relativos aos absolutos, pois isso garante uma facilidade maior caso seja
necessário modificar o endereço em que a página está hospedada, pois todos os demais diretórios
ficam intactos.

6.2 Criando um novo link: <a></a>


Agora, tecnicamente, um link é definido no HTML como um pedaço de texto (ou outro objeto
qualquer, como uma imagem) que ao ser clicado leva a um outro lugar, ou seja, a outra página. Isso é
feito utilizando-se as tags <a> e </a>, que deverão englobar o texto para o qual será dado destaque e
que será clicado pelo usuário final. Por exemplo, criando um link vazio:

<p> Texto: <a> Clique Aqui </a> </p>

Neste exemplo, nenhuma operação será feita, porém o link foi criado e pode ser clicado
(aparecerá a mãozinha, inclusive), porém o usuário permanecerá na mesma página. Para executar
alguma operação que realmente leva o usuário a outra página, é preciso incluir um parâmetro que
mostra a página de destino. Por exemplo:

<p>Texto:<a href=’http://www.mdcolombo.com.br’>Clique Aqui</a></p>

Neste caso, o resultado será o redirecionamento para o link absoluto definido na tag href.
Usando um link relativo:

<p>Texto:<a href=’../arqs/artigo.html’>Clique Aqui</a></p>

Neste último exemplo, o arquivo que será aberto é procurado um nível acima da hierarquia
corrente, depois dentro do diretório arqs e por fim, procura-se um arquivo de nome artigo.html. Caso
ele não exista, um erro é retornado, senão o documento é exibido na tela.
7 INSERINDO IMAGENS

7.1 Inserindo uma imagem: <img>

Uma imagem é encarada como um objeto que pode ser inserido em qualquer lugar da
página, não precisando inclusive ter uma tag que a feche. No ponto em que se deseja colocar a
imagem deve-se colocar a tag correspondente e indicar o local onde a imagem fonte está armazenada
e o nome da imagem a ser inserida. Todos os comentários de links absolutos e relativos se aplicam
aqui.

<img src=‘imgs/teste/cavalo.jpg’>

Para que uma imagem se torne um link, basta que uma tag <a> e </a> englobe uma tag
<img>.
8 TABELAS

8.1 Formatando dados usando tabelas: <table></table>

A melhor maneira, senão a única, de dispor elementos gráficos numa página HTML é através
do uso de tabelas, pois garante que um determinado elemento ou texto ficará onde se deseja que ele
fique, porém isso aumenta em muito a complexidade na elaboração de páginas. Atualmente, existem
diversos editores que facilitam essa operação, pois desenham as tabelas e ocultam o código.
Para declarar uma nova tabela, deve ser feito uso das tags <table> e </table>, que indicam
que uma nova tabela será criada, com suas várias linhas e colunas. Neste ponto, não existem dados
ainda, então o resultado visível não é muito grande, mais adiante é que os dados serão inseridos
dentro desta nova tabela.

8.2 Mostrando as bordas: atributo border

Quando se está trabalhando com tabelas, é fundamental saber onde as linhas e colunas
estão aparecendo, mesmo que para a página como um todo seja mais interessante, por questões de
design, que as bordas não apareçam. Enfim, ao menos em fase de desenvolvimento, as bordas devem
aparecer. Isso é feito através do parâmetro border, dentro de <table>. Assim:

<table border=’1’>

</table>

Neste caso, esta tabela terá bordas de tamanho 1.

8.3 Incluindo uma nova linha: <tr></tr>


Para incluir uma nova linha a uma tabela, devem-se usar as tags <tr> e </tr>. Tudo que
estiver entre elas, será disposto na mesma linha, independente do resultado final de exibição. Elas
devem vir dentro das tags <table> e </table>. Assim:

<table border=’1’>

<tr></tr>

<tr></tr>

<tr></tr>

</table>

8.4 Incluindo uma nova célula: <td></td>

Por fim, para se declarar todas as possibilidades de uma tabela, deve ser possível declarar
colunas dentro de uma tabela. Isso é feito utilizando as tags <td> e </td>, que por sua vez devem vir
dentro das tags <tr> e </tr>. Os dados propriamente ditos são colocados dentro de <td> e </td>. Vale
destacar, que desta forma, fica definida uma célula. Por exemplo:

<table border=’1’>

<tr> <td> C11 </td> <td> C12 </td> <td> C13 </td> </tr>

<tr> <td> C21 </td> <td> C22 </td> <td> C23 </td> </tr>

<tr> <td> C31 </td> <td> C32 </td> <td> C33 </td> </tr>

</table>
Figura 13: Tabela em HTML.

No exemplo acima, é definida uma tabela, com três linhas e três colunas.

8.5 Mesclando linhas: atributo rowspan

Há situações em que algumas células não possuem dados e para não deixá-las
simplesmente vazias, o que pode tornar mais confuso o entendimento do código, existe o conceito de
span, que serve para mesclar (como os conceitos do Microsoft Excel), juntando o espaço de duas
células e tornando-a uma só.
No caso do atributo rowspan, deve-se definir quantas linhas deseja-se incluir, daquela mesma
coluna, na célula final resultante. Isso é feito apenas na primeira célula, sendo que as demais devem
ser removidas. Pegando o exemplo anterior, vamos mesclar toda a primeira coluna:

<table border=’1’>

<tr> <td rowspan=2> C11 </td> <td> C12 </td> </tr>


<tr> <td> C21 </td> </tr>

<tr> <td> C31 </td> <td> C32 </td> </tr>

</table>

Figura 14: Linhas mescladas numa tabela.

8.6 Mesclando colunas: atributo colspan

A mesma idéia aplicada no item acima para a questão de mesclar linhas, pode ser aplicada
para mesclar colunas, onde diversas colunas podem ser unidas numa única, removendo o código das
demais. Assim:

<table border=’1’>

<tr> <td colspan=’2’> C11 </td> </tr>

<tr> <td> C21 </td> <td> C22 </td> </tr>


<tr> <td> C31 </td> <td> C32 </td> </tr>

</table>

Figura 15: Colunas mescladas numa tabela.

8.7 Alterando a cor de fundo de uma célula

Numa tabela, cada célula pode ser tratada independentemente, modificando seus
parâmetros, e fazendo com que apenas uma delas tenha sua exibição modificada. Para este efeito, é
necessário incluir nas tags <td> os modificadores correspondentes para mudar o comportamento
daquela célula em especial.
Dessa forma, para alterar a cor de fundo de uma célula, é preciso incluir o atributo bgcolor o
qual irá receber como valor modificador a nova cor que será colocada no fundo da célula. Esse nome
de cor segue os mesmo padrões de cores que devem ser utilizados em

HTML, ou seja, devem ser em inglês ou o valor hexadecimal precedido de sustenido e entre aspas.
<table border=’1’>

<tr>

<td bgcolor=’0000FF’> azul </td>

<td bgcolor=’yellow’> amarelo </td>

</tr>

<tr>

<td bgcolor=’gray’> cinza </td>

<td bgcolor=’#FF0000’> vermelho </td>

</tr>

</table>

Figura 16: Cores de fundo numa tabela.

8.8 Alterando o alinhamento de uma célula


Da mesma forma que se podem incluir modificadores para cores de células, independentes
umas das outras, pode-se também alterar o alinhamento do conteúdo existente dentro de uma célula,
seja texto, seja uma imagem. Alguns exemplos:

<table border=’1’>

<tr>

<td align=’left’> esquerda </td>

<td align=’center’> centro </td>

</tr>

<tr>

<td align=’right’> direito </td>

<td align=’justify’> justificado </td>

</tr>

</table>

9 LISTAS

9.1 Listas gerais: <ol></ol>, <ul></ul> e <li></li>


Uma outra forma de organizar as informações numa página HTML é através de listas, que
são itens estruturados e separados por algum símbolo de marcação, normalmente uma pequena
bolinha colocada ao lado do elemento de texto que se deseja exibir na tela.

O primeiro tipo de lista, <ol> e </ol> recebe o nome de lista ordenada, pois existe uma ordem
lógica entre os elementos que irão compor os dados. O segundo tipo de lista, <ul> e </ul> não implica
em nenhum tipo de ordem específica dos elementos. Por fim, as tags <li> e </li> definem um elemento
interno de qualquer uma das listas.

A estrutura básica de uma lista é:

<ol>

<li> Item </li>

<li> Item </li>

<li> Item </li>

</ol>

Ou:

<ul>

<li> Item </li>

<li> Item </li>

<li> Item </li>

</ul>
Figura 17: Listas ordenadas e não ordenadas.
10 FORMULÁRIOS

10.1 Trabalhando com dados em HTML

Para projetos maiores e que necessitam trocar ou obter informações do usuário, texto simples
e estático, não é muito interessante, pois acaba sendo um caminho de mão única de comunicação
entre o desenvolvedor e o usuário que está acessando os dados. Sendo assim, a linguagem HTML
oferece suporte a um grupo de estruturas para fazer o caminho de volta.
Sempre que alguém preenche seus dados numa página de cadastro, ela está fazendo uso de
formulários do HTML. Essas estruturas fornecem campos de texto por extenso, botões, caixas de
seleção e de senha. Em sistemas mais complexos e que trabalham com bases de dados, esses
conceitos são dos mais utilizados para a elaboração do sistema.

Nos itens a seguir, serão mostrados os principais elementos para construção de formulários
em HTML e de que forma eles se comportam num sistema.

10.2 Definindo um novo formulário

Para deixar claro que daquele ponto em diante será utilizado um formulário e seus diversos
elementos, deve-se antes declarar essa informação explicitamente, inclusive com alguns outros
parâmetros que irão controlar o comportamento dos dados entre o computador cliente e o servidor,
onde as informações poderão ser tratadas e, por exemplo, inseridas numa base.

<form name=’pri_form’ method=’post’ action=’arquivo.php’>

</form>
Todos os demais elementos devem vir entre as tags <form> e </form>. O primeiro parâmetro,
name, indica o nome do formulário, o que servirá para referenciá-lo em outros trechos do código. O
parâmetro method indica de que forma os dados serão enviados para o servidor (post indica que os
dados serão ocultos, a outra opção, get, que os dados irão visíveis) e por fim, action, indica qual o
arquivo que deve tratar os dados depois do envio.

10.3 Opções de entrada de dados: <input>

Uma das tags mais simples e ao mesmo tempo mais utilizadas é a tag <input>. Ela não
possui uma correspondente que a fecha e é utilizada para permitir ao usuário inserir informações
alfanuméricas ou então mostrar um botão clicável. Existem alguns modificadores que podem ser
utilizados que alteram a forma como os dados serão digitados pelos usuários.
A seguir são mostrados os vários tipos de estruturas que a tag input pode representar,
alterando apenas o campo type, que indica qual tipo de estrutura deve ser visualizada no formulário.
Além do tipo, é importante colocar o parâmetro name, para mostrar qual o identificador para aquela
estrutura, para que possa ser referenciado no futuro, caso seja necessário.

10.4 Criando um novo campo: parâmetro text

Quando se deseja digitar alguma informação alfanumérica num formulário, deve-se utilizar o
parâmetro text na declaração do campo. Isso é feito da seguinte forma:

<input type=’text’ name=’campo’ maxlength=’50’ size=’50’>


Figura 18: Campo de formulário.

A palavra input indica uma nova entrada de dados. O item, type=’text’, indica um novo campo
de entrada para texto. O item name=’campo’, declara um nome para o campo poder ser acessado por
outras linguagens de programação. Os outros dois parâmetros são itens para visualização. O primeiro
mostra o número máximo de caracteres que podem ser inseridos e o segundo, o tamanho do campo
que será mostrado na tela.

Outros parâmetros podem estar presentes. Eventualmente, podem existir informações


padrões que vieram de outras fontes, como uma base de dados, e deseja-se que essa informação seja
o padrão do campo, ou seja, que já venha digitada alguma coisa nele. Para isso, usa-se o parâmetro
value, seguido do texto a ser exibido. Por fim, existe o item readonly, para não permitir modificações no
conteúdo do campo.

10.5 Criando um botão: parâmetro button

Outro item muito interessante em formulário é a inserção de botões, que quando clicados,
disparam alguma ação, como executar o código fonte de alguma outra linguagem de programação. É
necessário o uso de outra linguagem de programação porque o HTML não fornece suporte a um
grande número de estruturas muito comuns em programação (condicionais, repetições, etc).

<input type=’button’ name=’botão’ value=’Aperte’>

A declaração do botão acima não realizará qualquer operação em especial, apenas permitirá
ao usuário ficar apertando um botão na tela, no entanto esse exemplo é bem explicativo. A declaração
do botão segue o mesmo padrão de um campo texto, com a diferença do tipo. O parâmetro value
também tem outra função, serve para indicar o título inserido no corpo do botão.

Para associar algum tipo de comportamento mais avançado ao botão, deve-se incluir um
outro parâmetro, o mais comum é o onClick associado a alguma função, que também pode ser
chamado de evento. Ele indica que sempre que o botão for clicado, chamará a função (ou método) ao
qual estiver associado, por exemplo, da linguagem JavaScript. Outro exemplo:

<input type=’button’

name=’botao_2’

value=’Aperte’

onClick=’alert(“oi”)’>
Figura 19: Botão com uma mensagem sendo exibida.

A função alert() deve ser escrita em algum trecho do código e ser visível por esse trecho de
código. No momento em que o usuário apertar o botão, a função será chamada e o código dela
executado.

10.6 Criando um botão de submissão: parâmetro submit

A declaração de um botão de submissão é idêntica ao de um botão comum, inclusive com


sua visualização sendo idêntica ao de um botão normal, com a diferença de que já existe uma
operação pré-configurada, a de envio dos dados do formulário para o formulário onde as páginas HTML
estão hospedadas, fazendo com que os dados sejam tratados. Por exemplo:

<input type=’submit’ name=’envio’ value=’Enviar’>

Será criado um botão com o título Enviar que, quando clicado, pegará todos os dados
preenchidos nos demais campos deste formulário e o enviará para o servidor.
10.7 Criando um botão de limpeza: parâmetro reset

Um botão de reset possui a mesma definição do submit, porém com uma ação associada
diferente, e potencialmente destrutiva, ou seja, uma vez acionado o botão, todas as informações de
todos os campos do formulário são apagadas, fazendo com que os campos retornem ao estado inicial.
Essa operação é perigosa por eventualmente fazer com que o usuário digite todas as informações
novamente. Por exemplo:

<input type=’reset’ name=’apag’ value=’Apagar’>

10.8 Criando uma checkbox: parâmetro checkbox

Uma checkbox (ou caixa de marcas) permite ao usuário marcar, dentre um grupo de opções,
aquelas que ele deseja, mais de uma se for o caso. Para indicar que todas as opções se referem ao
mesmo grupo, os nomes de todos os campos devem ser o mesmo. Por exemplo:

De quais cores você gosta?

<input type=’checkbox’ name=’cores’> Azul

<input type=’checkbox’ name=’cores’> Vermelho

<input type=’checkbox’ name=’cores’> Amarelo


Figura 20: Caixas de seleção múltipla.

Neste caso, o usuário poderia escolher qualquer combinação de cores, marcando uma, duas
ou as três opções.

10.9 Criando um radiobutton: parâmetro radio

A forma de declarar um campo radiobutton (ou radio) é muito semelhante ao de checkbox,


inclusive com a obrigatoriedade de o nome ser igual para todas as opções, sendo que a maior
diferença está que nesta opção, a seleção é única, ou seja, só pode ser escolhida uma opção dentre as
várias que são fornecidas para o usuário. Por exemplo:

Qual a sua faixa etária?

<input type=’radio’ name=’idades’> Menor 18

<input type=’radio’ name=’idades’> Entre(inclusive) 18 e 50


<input type=’radio’ name=’idades’> Maior 50

Figura 21: Caixas de seleção exclusiva.

Nestas opções, um mesmo usuário não pode escolher mais de uma opção, pois ele não pode
se encaixar, simultaneamente em duas faixas etárias distintas, como é o caso.

10.10 Criando um campo de senha: parâmetro password

Campos password são úteis quando não se deseja que outros usuários vejam as informações
que estão sendo digitadas num campo, por exemplo, numa senha, ao se validar a

entrada de um usuário de um sistema, ou mesmo quando o usuário estiver inserindo sua senha num
cadastro qualquer. Sua declaração é muito parecida com a de um campo normal:
<input type=’password’ name=’sna’ size=’10’ maxlength=’10’>

Aqui é criado um campo de tamanho dez caracteres e que só permite ao usuário digitar dez
caracteres quando da inserção de dados. No lugar dos caracteres, que seria o normal aparecerem na
tela, são exibidos asteriscos, ocultando assim a entrada dos usuários.

10.11 Caixas de seleção: <select></select>

Caixas de seleção são muito utilizadas para permitir ao usuário selecionar apenas uma opção
dentre várias existentes, sem mostrar todos os itens ao mesmo tempo (como no caso da checkbox),
obtendo-se um ganho de espaço considerável na tela, facilitando a formatação e diagramação da
página. Sua declaração segue:

<select name=’seleção’>

<option value=’1’> Item 1 </option>

<option value=’2’> Item 2 </option>

<option value=’3’> Item 3 </option>

</select>
Figura 22: Caixas de seleção.

Neste caso, foi criada uma caixa de seleção com três opções, sendo que cada opção
possível é declarada entre as tags <option> e </option>. Deve ser dado um nome para a caixa de
seleção para referência futura. Um parâmetro utilizado dentro da tag <option>, value, mostra qual o
valor que será considerado quando a opção for selecionada.

10.12 Caixas de texto: <textarea></textarea>

Esse elemento é utilizado principalmente quando a quantidade de texto a ser digitado pelo
usuário é muito grande. Ela permite uma melhor visualização de grandes quantidades de caracteres,
mesmo que isso não seja a melhor solução de exibição de informações em páginas HTML. Sua
declaração segue o seguinte modelo:

<textarea name=’tarea’ rows=’10’ cols=’40’></textarea>


Figura 23: Áreas de Texto.

No exemplo acima, é declarada uma textarea de nome tarea, que tenha dez linhas e quarenta
colunas, onde cada coluna é o espaçamento de um caractere. Caso exista algum texto que se deseja
colocar por padrão neste campo, ele deve ser posto entre as tags.
11 JANELAS

11.1 Definição de janelas em HTML

Uma janela de um browser pode ser considerada inteira, com apenas um documento
ocupando toda a área visível ou então pode ser dividida em diferentes partes, cada uma ocupada por
um documento HTML diferente, que de alguma forma se relacionam, ou seja, ao se clicar num link
numa janela, a página será aberta em outra. Esse conceito é chamado de frames.

Como nem todos os browsers suportam a definição de frames (todas as versões mais
recentes suportam atualmente) nem sempre foi uma boa idéia implementar soluções utilizando esses
conceitos. Vale destacar que com o uso de outras tecnologias (como PHP e ASP) o uso de frames
pode dificultar o desenvolvimento dos sistemas, sendo mais simples utilizar uma única página.

11.2 Definição de janelas: <frameset></frameset>

Quando se usa janelas, deve existir um documento especial que define como eles serão
montados, quais arquivos serão chamados e de que forma eles se relacionam. Isso é feito através do
uso das tags <frameset></frameset>, que devem ser utilizadas no lugar das tags <body></body> que
existem num documento normal HTML.
Dentro destas tags é que virão algumas configurações de parâmetros e de frames que serão
utilizadas para exibir o resultado. Vale destacar que quando se deseja visualizar o resultado, este
documento de definição é o que deve ser aberto no browser e não qualquer outro que componha o
conteúdo que será visto na tela.

<frameset cols=’25%, 75%’>


<frame name=’esq’ src=’menu.html’>

<frame name=’dir’ src=’conteudo.html’>

</frameset>

Figura 24: Definição de Janelas

Nesta definição, é definido um frame com duas colunas, sendo uma ocupando 25% da tela e
a outra ocupando 75% da tela. A seguir, são definidos os conteúdos dos dois frames, sendo que no
primeiro, chamado esq, deve ser aberto o arquivo menu.html e no menu direito será aberto o arquivo
conteudo.html. Uma definição alternativa, é que ao invés de se separar os frames por colunas,
separem-se por linhas, neste caso, no lugar de cols deverá ser colocada a palavra rows.
12 INTRODUÇÃO AO PHP – PARTE 1

12.1 Linguagem Interpretada

Uma linguagem interpretada é aquela que não precisa ser compilada antes de ser executada.
Porém, é necessário ter um mecanismo que consiga ler o código fonte e gerar a saída esperada pelo
usuário ou então mostrar eventuais erros no arquivo que está sendo executado naquele momento; de
certa forma, a compilação é feita em tempo real e se algo estiver errado, uma saída de erro é exibida,
caso contrário o resultado é mostrado.

Além do PHP, existem diversas outras linguagens interpretadas, que também podem ser
chamadas de “Linguagens Script”, tais como Microsoft ASP e JavaScript. Elas possuem aplicações
específicas, mas com alguns pontos em comum, com destaque especial entre PHP e Microsoft ASP,
assunto, porém, que foge do escopo deste treinamento.

12.2 Modelo Cliente/Servidor

A Internet atualmente é baseada no modelo chamado cliente/servidor. Nesse paradigma


existe uma máquina que deseja fazer alguma operação e para que isso ocorra, entra em contato com
outra máquina, que pode estar fisicamente distante, mas conectada através de uma rede, como por
exemplo a Internet, estabelecendo assim um canal de comunicação entre elas.

O cliente faz os pedidos de operações e o servidor fica responsável por executar alguma
operação ou processamento e enviar-lhe um resultado, através da rede. Isso pode ser

muito interessante para concentrar todo o processamento apenas de um lado da rede, deixando os
usuários finais com menos obrigação de ter bons computadores.
As questões de infra-estrutura não são importantes neste momento, mas vale destacar que
podem existir diversos computadores intermediários entre as duas pontas que estabeleceram
comunicação, o que pode aumentar o tempo de resposta. Destaca-se ainda que este conceito não é
absoluto, ou seja, uma máquina pode ser cliente num momento e servidor em outro.

12.3 Diferenças entre PHP e JavaScript

Uma das linguagens mais famosas atualmente, principalmente por causa do advento da
Internet, é a chamada JavaScript (que é bem diferente da sua prima de nome, a linguagem Java), que
muitas vezes pode ser confundida com PHP, especialmente para quem está começando a dar os
primeiros passos em programação web, por isso serão explicadas rapidamente suas diferenças.

PHP é executada do lado do servidor, ou seja, um browser internet, na máquina do usuário,


faz um pedido de página e um outro computador se encarrega de fazer todo o processamento
necessário, enviando, em seguida, apenas o resultado. JavaScript, por sua vez, é executada do lado
do cliente, sendo o código enviado junto com a página Internet e o processamento feito pelo browser.

A linguagem PHP permite acesso a bancos de dados de forma muito mais simples, pois pode
trabalhar diretamente com as conexões abertas entre o servidor de páginas e o servidor de bancos de
dados. Como JavaScript é executada do lado do cliente, fica muito mais complicado criar uma conexão
através da rede para acesso a dados e criação de páginas dinâmicas.

Um dos grandes diferenciais para se usar JavaScript é tirar a sobrecarga de processamento


do servidor, fazendo com que um pouco dessa carga fique por conta do cliente. Por exemplo, para
validar o preenchimento de determinados campos num formulário HTML, a

verificação pode ser feita no cliente, antes de enviar os dados pela rede, ganhando no tempo de
transferência dos dados.

As duas possuem suas origens de estrutura nas linguagens C/C++, por isso ambas se
parecem muito em suas estruturas de programação (condicionais, repetições, atribuições), porém PHP
possui facilidades por contar com recursos de um servidor (normalmente uma máquina mais potente) e
a JavaScript foi criada para controlar ações de um browser Internet.
12.4 Servidor Web

Para que um código em PHP seja executado, é necessário ter um software especial que
consiga pegar o arquivo com o código fonte em PHP, interpretá-lo e gerar algum resultado. Um servidor
Web é o responsável por gerenciar as diversas conexões que navegadores internet estiverem fazendo,
requerendo diversas páginas de sites, por exemplo.

O servidor processa o código fonte que está sendo solicitado pelo navegador, que
normalmente está associado a um endereço internet ou a um link interno de alguma página, verifica se
existe algum erro na página e gera como saída um documento em formato HTML; um ponto muito
interessante do PHP é que ele poder ser colocado no meio de código HTML, tendo lógica e interface no
mesmo documento.

12.5 Casos específicos: Apache e MS-IIS

Dois dos mais famosos servidores Web que permitem que navegadores possam fazer
requisições e a partir de documentos armazenados nos seus diretórios responder com código HTML,
são o Apache, que oferece suporte a diversas tecnologias, dentre elas o PHP e Microsoft ASP, o
Microsoft Internet Information Server (IIS) que, além de oferecer suporte à ASP, também poderá ser
configurado para rodar outras tecnologias. Ambos são responsáveis por tratar

requisições HTTP (Hypertext Transfer Protocol), que é o protocolo utilizado na Internet para
comunicação entre clientes e servidores.

O Apache é um projeto de software livre dentre vários outros mantidos pelo grupo Apache,
que se mantém com doações de várias empresas que têm interesse em utilizar sistemas de base
produzidos e geridos por ele, que possui toda a ideologia do software livre, ou seja, possui o código
aberto e qualquer interessado pode obtê-lo e fazer as modificações que bem entender. Ele domina o
mercado de servidores de página, ocupando aproximadamente 50%, estando atualmente em sua
versão 2.2.9, oferecendo várias correções de segurança e desempenho.

Já o Microsoft IIS é um sistema de propriedade da Microsoft como qualquer outro de seus


vários sistemas, como o Windows, em que, para ser permitida a sua utilização, é necessário o
pagamento de uma licença, além de que nenhuma modificação no sistema pode ser feita sem a
autorização da própria Microsoft, gerando uma dependência. Claro, com o benefício de um suporte
mais personalizado, em alguns casos.

12.6 Instalando o Apache

Esse material terá como foco o servidor Apache, que ocupa boa parte do mercado de
servidores de página web, é estável e pode ser obtido de forma livre e gratuita, a partir do site
http://httpd.apache.org/download.cgi, nas suas mais variadas versões para diferentes sistemas
operacionais, com especial destaque para sistemas Linux (em alguma distribuição) ou Microsoft
Windows.

Um método alternativo e que facilita esse momento de instalação da infra-estrutura de


software, é obter algum instalador que já prepara todo o ambiente necessário para o desenvolvimento.
Os dois mais famosos são o EasyPHP (http://www.easyphp.org/) e o Xampp
(http://www.apachefriends.org/en/xampp.html). A diferença entre cada um deles está no número de
componentes que cada um já traz por padrão. De qualquer forma, ambos trazem como servidor de
banco de dados o MySQL, outro software livre muito utilizado, o que permite a criação de ambientes
dinâmicos.

Eis um passo-a-passo de como instalar os componentes necessários a partir de um


instalador do EasyPHP, baixado a partir do site indicado acima.
O primeiro passo é escolher em qual idioma os softwares serão instalados.
Segue-se uma tela inicial de apresentação do processo de instalação no idioma selecionado.
Ao escolher o item “Eu aceito os termos do Contrato”, o botão Avançar torna-se habilitado e o
processo de instalação pode seguir.
O último passo antes da instalação em si é escolher o diretório em que os sistemas serão
instalados. Pode-se optar por instalar no diretório padrão fornecido (como acima) ou então definir outro.
Ao final da instalação, será criada uma entrada no menu de Programas da instalação do
Microsoft Windows que representa o EasyPHP. Ao se iniciar o programa, será mostrada uma tela de
inicialização do sistema, com semáforos representando o status do sistema. Outro indicativo é ele
mostrar ao lado do relógio do sistema um ícone indicando a execução dos sistemas.

Configurações adicionais podem ser feitas, escolhendo-se a opção correspondente no painel


de controle, que trará o arquivo httpd.conf, que representa todas as configurações disponíveis para o
servidor. Por padrão, todo o código-fonte em PHP deve ser colocado dentro do diretório www que foi
criado no processo de instalação do sistema.

12.7 Visualização dos resultados

Como já mencionado, todo o resultado gerado de uma página PHP se torna uma página
HTML e por isso pode ser visualizada da mesma forma pela grande maioria dos navegadores
disponíveis atualmente (cada um possui suas particularidades, mas de modo geral o resultado é o
mesmo). Com isso se ganha uma grande liberdade de acessar os dados de qualquer lugar do mundo.
13 CONCEITOS INICIAIS

13.1 Onde colocar o código

Deve ser definido um diretório (normalmente chamado public_html) onde todas as páginas de
código PHP devem ser colocadas (esses arquivos possuem extensão .php ou .inc) e que deve ser
“enxergado” pelo servidor web (neste caso, adotaremos o Apache). Essa configuração normalmente já
está pronta ou então é de responsabilidade do administrador do sistema.

Em seguida, deve ser criado um diretório para que os códigos que forem gerados sejam
colocados, sem gerar confusão, principalmente se muitos usuários estiverem colocando código nesta
pasta. Para ver o resultado desse código, deve ser aberto um navegador e digitado:

http://192.256.123.456/sua_pasta/arquivo.php

http://localhost/sua_pasta/arquivo.php

ou ainda,

http://192.256.123.456:8080/sua_pasta/arquivo.php

http://localhost:porta/sua_pasta/arquivo.php

Nos dois exemplos, usa-se como protocolo o http, que é padrão para a internet; localhost
significa que está se trabalhando localmente e que ainda não se pode visualizar esse conteúdo de fora
da empresa; porta é um número que indica por onde o navegador vai tentar se conectar ao servidor e,
se existir apenas um servidor web numa máquina, esse número pode ser omitido; depois vem o nome
da estrutura de diretórios interna ao public_html e por fim, o arquivo em si.

13.2 Mesclando PHP com HTML

Um dos principais recursos e facilidades do PHP é permitir que lógica e visualização de


dados possam ser colocados num mesmo arquivo. Por um lado, isso permite uma imensa flexibilidade
na construção de sistemas, mas por outro, prejudica, e muito, a manutenção futura de projetos
grandes, pois dependendo do código, ele pode não ser tão legível.

Tendo isso em mente , vêm sendo propostas maneiras de se separar um pouco mais o
código de lógica da visualização das informações, principalmente com a utilização de classes, vinda da
teoria de orientação a objetos e separação por camadas, sendo que cada camada é responsável por
uma atividade, tendo independência, facilitando a reorganização e manutenção.

13.3 As tags especiais “<?” “?>”

Numa página com a extensão php, tudo é visto como HTML pelo servidor web; sendo assim,
é preciso, de alguma forma, que o que for código PHP seja identificado pelo servidor, e é neste
contexto que entram as tags “<?” “?>”, pois tudo que estiver entre estas tags será identificado como
código php e tratado como tal, inclusive para verificar se tudo que foi escrito está correto.
13.4 O comando echo “TESTE”;

Uma das ações mais importantes em qualquer linguagem de programação é exibir uma saída
para o usuário. Em PHP, uma das maneiras de se fazer isso é utilizando o comando:

<?

echo “TESTE”;

?>

Este comando se imprime no trecho onde está colocada a cadeia de caracteres ou então a
variável correspondente. Repare no ponto e vírgula ao final do comando. Isso é muito importante, pois
a maioria dos comandos precisa dele para funcionar corretamente, caso contrário o servidor devolverá
uma mensagem de erro na linha em que estiver faltando esse marcador.

Resultado obtido

O resultado de qualquer comando em PHP será visto como uma cadeia de caracteres que
dará origem a um arquivo HTML, para que qualquer navegador consiga exibir os resultados do
processamento. Um ponto que vale a pena mencionar é que o navegador, que está numa máquina
cliente, não executa nenhum tipo de processamento, ficando tudo sob responsabilidade do servidor.
14 TRABALHANDO COM DADOS

14.1 Tipos de dados

PHP é fracamente tipada, o que significa que não é preciso declarar os tipos das variáveis
antes de utilizá-las. Dessa forma, pode-se colocar qualquer tipo de dados numa variável, a qualquer
momento, independente do tipo que ela armazenava antes da operação corrente. Os tipos existentes
são:

Tipo Descrição
boolean Representa verdadeiro ou falso.
integer Números inteiros.
float Números de ponto flutuante.
string Cadeia de caracteres.
array Vetores de dados.
object Objetos.
resource Resultados de operações em bancos de dados.
NULL Inexistência de dados.
14.2 Declaração de variáveis

Todas as variáveis em PHP devem ser começadas com o caractere $ (dólar), e depois terem
uma quantidade qualquer de caracteres alfanuméricos, porém com o primeiro caractere sendo uma
letra ou sublinhado. É uma boa prática de programação dar nomes descritivos para

as variáveis. Em PHP, faz-se distinção entre maiúsculas e minúsculas. Exemplos de variáveis seriam:

$i

$teste123

$casa

$curso

$CuRsO

$_8569

Neste caso, $curso e $CuRsO são variáveis diferentes.

14.3 Declaração de constantes

Uma constante é um identificador que possui um valor associado e que não pode ter esse
valor modificado através do tempo, pelo código PHP. As constantes possuem escopo global, ou seja,
podem ser acessadas de qualquer ponto do código. Algumas declarações típicas são as seguintes:

<?

define(“NOME_CONSTANTE”, “VALOR”);

define(“NOME_CONST_IDADE”, 18);
?>

Deve-se utilizar a palavra reservada define, tendo dois argumentos, o primeiro é o nome pela
qual a constante será referenciada e o segundo sendo o valor que ela armazenará. Como padrão,
adota-se que o nome da variável esteja todo em maiúsculo.

A sua utilização depois de definida, utilizando a sintaxe acima, é muito simples, apenas
incluindo no comando a palavra que faz referência ao valor. Para o mecanismo que interpreta o código,
é como se no lugar da palavra estivesse sendo colocado o valor que ele representa.

14.4 Trabalhando com Vetores

Vetores são uma das estruturas de dados mais importantes em computação.


Conceitualmente, é o agrupamento de diversas variáveis sobre o mesmo nome, facilitando o seu
acesso. O conteúdo de um vetor é acessado através de índices, pois o computador enxerga um vetor
como posições de memória alocadas continuamente. Existem várias formas de declarar um vetor:

<?

$sobrenomes[0] = ‘Silva’;

$sobrenomes[1] = ‘Souza’;

$sobrenomes[2] = ‘Oliveira’;

$idades = array(10, 11, 12);

?>

Nos casos acima, cada um dos vetores possui tamanho três. Os dois primeiros exemplos
mostram vetores de strings e o terceiro, um vetor de inteiros. Uma vez declarado os vetores, seus
valores podem ser acessados através de um índice inteiro que verifica o conteúdo existente naquele
ponto. Então, para imprimir na tela o nome, sobrenome e idade da Maria, escreveríamos:
<?

echo $nomes[1] . “ “ . $sobrenomes[1] . “,“ . $idades[1];

?>

Vale destacar que os índices começam em zero, ou seja, o primeiro elemento de um vetor é
definido como $vetor[0]. Diversas funções ajudam a trabalhar com vetores, mas algumas são
especialmente úteis, como sizeof(), que retorna o tamanho de um vetor naquele momento. Por
exemplo:

<?

$tamanho = sizeof($sobrenomes);

echo $tamanho;

?>

Esse exemplo imprimiria na tela o valor 3. Indo um pouco além, vetores podem ter dentro
deles outros vetores, introduzindo assim o conceito de dimensão. Num vetor simples, ele possui
apenas uma dimensão, chamado de vetor unidimensional, ou simplesmente, vetor. Se

tivermos um vetor dentro do outro, temos duas dimensões, ou ainda, matriz. A declaração de matriz é a
seguinte:

<?

$mat[0][0] = 10;

$mat[0][1] = 10;

$mat[0][2] = 10;
$mat[1][0] = 20;

$mat[1][1] = 20;

$mat[1][2] = 20;

$mat[3][0] = 30;

$mat[3][1] = 30;

$mat[3][2] = 30;

?>

Nesse caso, teríamos uma matriz de três linhas e três colunas, sendo que na primeira linha
teríamos o valor 10, na segunda linha, o valor 20 e por fim, na terceira linha, o valor 30. Vale destacar
que no lugar de índices com valores absolutos, como os exemplos dados até agora, poderíamos ter
variáveis indexando os vetores, o que garante uma flexibilidade muito maior. Por exemplo:

<?

$i = 0;

$j = 1;

echo $mat[$i][$j];

?>

Neste exemplo, seria impresso na tela o valor 10.

14.5 Comentários

Existem dois tipos de comentários em PHP, aqueles de uma única linha e aqueles que
envolvem uma ou mais linhas. Naqueles do primeiro caso, existem duas formas para indicar isso,
usando o caractere sustenido “#” ou então usando duas barras “//”. Para o caso de múltiplas linhas,
usam-se os caracteres “/*” e “*/”, para indicar abre e fecha comentários, respectivamente. Exemplo:

<?

# comentário de uma linha apenas

// outro comentário de uma linha apenas

/*

comentário

em várias

linhas

*/

?>

14.6 Comando de atribuição

Atribuição é outra operação importante em qualquer linguagem de programação, pois é a


forma mais simples de se manusear informações de usuários, consultas realizadas aos bancos de
dados e imprimir dados que variam de uma situação para outra na tela. O comando de atribuição é
bem parecido com o de outras linguagens (notadamente C, C++ e Java).

<?

$i = 1;

$teste123 = 123;
$casa = “Endereço”;

$curso = “Computação”;

$CuRsO = 42;

$_8569 = 1.50;

?>

Em todas as situações, o identificador da esquerda deve receber o valor da direita e entre


eles deve vir o sinal de igual, “=”. Seguindo também a notação das linguagens já citadas acima, todos
os operadores possuem uma abreviação para a situação da variável receber o seu valor atual com
algum outro valor e operação. Por exemplo:

<?

$i += 1;

$valor *= 5;

$teste /= 2;

?>

Que podem ser escritos de uma forma extendida como:

<?

$i = $i + 1;

$valor = $valor * 5;

$teste = $teste / 2;

?>
Ou seja, a variável inicial receberá também o valor depois de realizada alguma operação.

14.7 Imprimindo conteúdo na tela

Além do comando “echo” já mencionado anteriormente, o PHP possui uma série de outros
comandos pré-definidos que servem para escrever uma cadeia de caracteres ou variáveis num
documento HTML que poderá ser interpretado por um navegador. São eles:

<?

print “Cadeia de caracteres”;

print(“Outra cadeia de caracteres”);

?>

Nos dois casos acima, também poderia ter sido utilizado o comando echo, mas devido à
compatibilidade com versões mais antigas, os comandos print continuam disponibilizados para uso.
Existe uma variação de print, chamada printf, que além da cadeia de caracteres, possui como
parâmetros alguns itens que modificam a formatação do texto exibido. Por exemplo:

<?

$idade = 21;

printf(“A minha idade é %d”, $idade);

$altura = 1.83;

printf(“Altura: %6.2f”, $altura);


?>

O símbolo de % indica que naquele ponto deverá ser colocado o valor da variável que será
declarada depois da String (podem vir quantas variáveis forem necessárias), a letra indica de que
forma a variável deve ser tratada (se como String, ou caractere, ou inteiro, ou ponto flutuante, etc.) e se
tiver um valor numérico entre eles, qual o espaçamento e casas decimais, respectivamente.

Essa notação é herança da linguagem C, onde todos os comandos de saída, ou seja, que
geram alguma saída na tela ou em arquivo, possuem esse formato. Ele facilita quando não se tem
muito tempo para gastar com formatações mais rebuscadas próprias do HTML, ou então

quando a saída desejada é simples. Esse tipo de construção não é tão intuitiva para quem a está
vendo pela primeira vez.

15 OPERADORES

15.1 Operadores matemáticos


Todos os operadores da aritmética básica estão presentes em PHP, com a inclusão de
alguns outros que fornecem facilidades interessantes para os programadores. São eles:

Operador Descrição
+ Adição
- Subtração
* Multiplicação
/ Divisão
% Resto

Vale mencionar o operador Resto, que pega o resto de uma divisão entre dois números
inteiros. Alguns exemplos simples dessas operações, onde, no trecho comentado, vem o resultado da
operação correspondente:

<?

$a = 10 + 20; // $a == 30

$b = $a – 5; // $b == 25

$c = $b * 4; // $c == 100

$d = $c / 2; // $d == 50

$e = $d % 3; // $e == 2

?>

15.2 Operadores relacionais


Os operadores relacionais, como o próprio nome sugere, indicam uma relação entre dois
identificadores, como por exemplo:

<?

$idade > 21 // Depende do valor de $idade

13 == 12 // Falso

12 < 20 // Verdadeiro

?>

Nessas situações, temos como resultado, verdadeiro ou falso. No primeiro caso, a resposta
depende do valor armazenado na variável $idade; no segundo caso, o resultado é falso e por fim, na
última opção, temos como resposta, verdadeiro. Os operadores relacionais existentes são:

Operador Descrição
> Estritamente maior
>= Maior ou igual
< Estritamente menor
<= Menor ou igual
== Igual
!= Diferente

Merece destaque o operador igual, que pode ser facilmente confundido com o operador de
atribuição, causando um erro comum para programadores que estão se iniciando na linguagem. Estes
tipos de operadores são muito úteis em comandos de decisão, como será mostrado adiante.

15.3 Operadores lógicos


Os operadores lógicos estabelecem alguma relação entre condições, de tal forma que o
resultado final dependa de todas elas. Os fundamentos desses operadores estão na teoria denominada
álgebra booleana, em que todas as operações possíveis e desejáveis podem ser escritas, utilizando-se
apenas três operadores. Em PHP, teríamos:

Operador Descrição
&& “E” lógico
|| “OU” lógico
! “NÃO” lógico

Segue da teoria booleana, que para uma proposição ser verdadeira, utilizando-se o “E
lógico”, todas as condições precisam ser verdadeiras; utilizando-se o “OU lógico”, ao menos uma
precisa ser verdadeira para que toda a preposição seja verdadeira e o operador “NÃO lógico”, inverte o
valor da variável (se era Verdade, passa a ser Falso e vice-versa). Resumindo, teríamos:

Condição 1 Operador Condição 2 Resultado


Verdade && Verdade Verdade
Verdade && Falso Falso
Falso && Verdade Falso
Falso && Falso Falso
Verdade || Verdade Verdade
Verdade || Falso Verdade
Falso || Verdade Verdade
Falso || Falso Falso

E ainda,

Condição Operador Resultado


Verdade ! Falso
Falso ! Verdade

Na prática, em PHP esses operadores serão utilizados para juntar mais de uma condição em
comandos condicionais ou de repetição, para indicar qual caminho tomar ou quando uma repetição
deve parar. Por exemplo:

SE (($idade > 21) && ($cargo == “ALUNO”))

ENTÃO comando_1

SENÃO comando_2

No pseudocódigo acima, é mostrado um simples comando de decisão com duas cláusulas,


onde se as duas condições forem verdadeiras, então o comando_1 é executado, caso contrário (se ao
menos uma for falsa) o comando_2 é o que será executado. Para uma leitura mais clara do que se
pretende fazer, o uso de parênteses é muito aconselhável.
15.4 Operador de concatenação de strings

Para se realizar a operação de juntar duas cadeias de caracteres (strings), numa outra
variável, ou então para exibir o resultado na tela, existe um operador especial para esta função que é o
ponto “.”, sendo que ele também pode ser utilizado em atalhos, com o operador atribuição “.=”. Seguem
exemplos desse operador:

<?

$nome = “Fulano”;

$sobrenome = “De Tal”;

$sobrenome .= “ Silva”;

$nome_completo = $nome . “ “ . $sobrenome;

echo $nome_completo . “ : “ . “Qual a sua idade?”;

?>

Nas duas primeiras linhas, é feita uma atribuição simples; na terceira, na variável sobrenome
coloca-se, além do valor já existente lá dentro, mais um pedaço de string usando um operador de
atalho; na quarta linha, uma terceira variável recebe o valor das duas outras,

separadas por um espaço em branco (note a presença dos pontos) e por fim, o resultado é exibido na
tela.
15.5 Notação Pré-fixa e Pós-fixa

Dependendo da ordem dos operadores, o resultado atribuído numa variável pode se alterar.
Alguns operadores podem vir antes ou depois do operador, por isso deve-se tomar cuidado entre os
resultados obtidos e esperados.

Operador Significado
++ Incremento de 1
-- Decremento de 1

Alguns exemplos:

<?

$a = 10;

$b = ++$a; // $b == 11, $a == 11

$c = $a++; // $c == 11, $a == 12

echo $b; // Imprime 11

$d = --$b; // $d == 10, $b == 10

$e = $b--; // $e == 10, $b == 9

?>

O valor da variável $a começa com 10. Na segunda linha, devido à ordem do operador “++”, o
valor de $a é incrementado em 1 e só depois atribuído a $b, sendo que ao final desta linha, o valor de
ambos é igual, 11. Na terceira linha, como o operador “++” vem depois da variável, primeiro o valor
atual é retornado para $c e só depois o valor de $a é incrementado em 1, deixando os valores
diferentes.

No segundo trecho, a partir do comando echo, acontecem situações bem parecidas, com a
diferença de se estar utilizando o operador de decremento. A variável $b começa com o valor 11. Na
linha seguinte, o valor de $b é decrementado antes de ser atribuído em $d, ficando ao final ambos com
10. Na última linha, por fim, o valor é primeiro atribuído em $e para só depois ter o valor diminuído em
1, na variável $b.

16 CONDICIONAIS

16.1 Bloco de Comandos

Em muitos casos, deseja-se escrever mais de um comando num determinado trecho de


código, mas agrupado de tal forma que se um deles for executado, todos os demais também serão.
Para tanto, é preciso explicitamente falar onde começa e onde termina esse bloco. Isso é feito através
do abre e fecha chaves: “{“ e “}”. Seguem exemplos:

<?

comando_1;

comando_2;

comando_3;

?>
No pseudocódigo acima, todos os três comandos serão executados se o bloco inteiro for
escolhido para ser executado; então, pode-se concluir que um bloco de comandos é visto como uma
unidade atômica, ou seja, como se fosse um único comando.

16.2 O condicional if

A função do operador if é executar uma determinada função ou bloco de funções se uma


determinada condição for verdadeira ou, caso contrário, não realizar nada. Na condição,

normalmente vem uma variável que é comparada com algum valor para se dizer se o bloco será
executado ou não. A estrutura básica do comando é:

if (condição == verdade)

comando_if;

Usando exemplos:

<?

$i = 10;

if($i == 10) {

echo “O valor de i é 10”;

} // if

$p = 500;

if($p > 700) {

echo “O valor de p é maior que 700”;


$p = 701;

} // if

$str = “nome”;

if($str != “caracteres”)

echo

“O conteúdo de str é diferente de caracteres”;

?>

No primeiro exemplo, o valor de $i é 10 e como o outro argumento também é 10, a condição


resulta em verdade, sendo executado o comando de impressão na tela. No segundo, a condição
resulta em falso, não sendo impresso nada na tela e por fim, como o conteúdo de $str é diferente da
cadeia de comparação, o comando imprime alguma coisa na tela.

16.3 O condicional if/else

Bem parecido com o comando if, existe o comando if/else, que oferece uma opção, caso a
condição seja falsa, de executar um determinado comando. Resumindo, caso a condição seja verdade,
o primeiro comando é executado, caso contrário, o comando ou bloco que vier seguido do else será o
escolhido para ser executado. A estrutura seria:

if(condição == verdade)

comando_if;

else

comando_else;
Usando exemplos:

<?

$i = 22;

if($i == 30) {

echo “O valor de i é 30”;

} else {

$i = 31;

echo “O valor de i não é 30”;

} // if

$p = 500;

if($p < 700) {

echo “O valor de p é menor que 700”;

} else {

echo “O valor de p é maior ou igual a 700”;

} // if

?>
No primeiro exemplo, como a condição é falsa, o bloco else será executado atribuindo-se um
novo valor à variável e, em seguida, imprimindo uma mensagem na tela. No segundo exemplo, a
condição é verdadeira, imprimindo-se o comando logo a seguir dos parênteses, não se executando o
comando else, por exemplo.

16.4 O condicional switch

A estrutura de switch é um caso especial de vários if/else dispostos para ficar mais legível e
prática a programação. O seu objetivo é dar uma variável de escolha, algum bloco de comando é
escolhido para ser executado. Essa construção pode ser muito útil quando se está trabalhando com
diversas opções selecionáveis pelo usuário, pensando-se inclusive na modularização do sistema, o que
pode facilitar a manutenção futura do mesmo.

O parâmetro passado no cabeçalho do switch é normalmente uma variável que irá controlar
qual dos blocos deverá ser executado. Ele pode ser um valor inteiro, um caractere ou uma String. Se
ele for igual ao valor existente após a palavra case, então o bloco de comando do trecho é executado,
caso contrário uma outra opção é avaliada.

A palavra default é opcional, e só é executada caso nenhuma opção seja igual à variável de
condição, executando-se os comandos associados a ela. A palavra reservada break é importante
nessa estrutura, para que depois de executados os comandos, a execução saia do switch. A omissão
desta palavra implica que todos os comandos abaixo do case executado também sejam executados.
Esse é um dos únicos pontos em que a palavra break pode ser utilizada sem quebrar as boas práticas
de programação estruturada.

Vale destacar que não é necessário colocar as chaves para indicar o início e fim de bloco,
ficando isso implícito na construção. Além do mais, pode vir qualquer número de comandos após os
dois pontos. Duas opções com os mesmos comandos podem ser facilmente declaradas desde que
sejam colocadas duas palavras case com as respectivas opções, seguidas dos dois pontos. Segue um
exemplo:

<?

$op = ‘c’;
switch ($op) {

case ‘a’:

$teste = 10;

echo $teste;

break;

case ‘b’:

$teste = 20;

echo $teste;

break;

case ‘c’:

case ‘d’:

$teste = 55;

echo $teste;

break;

default:

echo “Nenhuma opção é igual à opção”;

} // switch

?>
A variável $op contém o valor que será avaliado. No primeiro e segundo case é feita a
comparação, mas como o resultado é falso, nenhum comando é executado. No terceiro, a comparação
retorna como verdade e os comandos associados são executados, sendo que ao final, por causa da
palavra break, o comando em default não é executado, fazendo com que o fluxo de execução saia do
comando switch.
17 REPETIÇÕES

17.1 Repetição usando while

Comandos de repetição servem para executar um determinado grupo de operações por um


número de vezes específico e depois sair deste bloco. Todos os comandos de repetição possuem
alguma condição que fazem com que eles saiam da repetição, caso contrário, ficariam executando de
forma infinita.

No caso do comando while, a condição é avaliada no começo da repetição; sendo assim, se


logo de início a opção for considerada falsa, nenhuma repetição será executada, passando para o
próximo comando depois do while. Um exemplo prático seria:

<?

$contador = 0;

while($contador < 10) {

echo “O valor do contador é: ” . $contador;

++$contador;

} // fim do while

?>
Neste exemplo, uma variável de controle é iniciada com zero. Como o valor é menor que 10,
o argumento é avaliado como verdade e os comandos dentro do bloco (delimitados pelas chaves) são
executados, primeiro a impressão e depois o incremento do contador. Esse incremento é muito
importante neste exemplo, pois é com ele que se tem a garantia que em algum momento a variável
$contador será maior ou igual a 10, tornando a condição falsa e saindo da repetição.

17.2 Repetição usando for

Outro tipo comum de repetição é o for, que ao contrário do while, já se sabe a priori quantas
vezes os comandos associados a ele serão executados, diminuindo as chances de um laço infinito. Por
exemplo:

<?

for($varia = 0; $varia < 10; ++$varia) {

echo “O valor da variável é: “ . $varia;

} // for

?>

A variável $varia é o chamado contador do laço, pois é o item a ser avaliado para saber se o
comando deve parar ou não. A primeira parte do bloco serve para inicializar as variáveis necessárias
para esse controle (pode existir mais de uma, separadas por vírgulas). O trecho entre os dois pontos e
vírgula, é a condição para saída da repetição. Por fim, o trecho final é a maneira como a variável de
controle será incrementada.
17.3 Repetição usando do/while

A estrutura de um comando do/while é bem parecida com o de um laço while, com a


diferença que a condição de parada só é avaliada no final do bloco, garantindo que ao menos uma vez
todos os comandos do bloco sejam executados.

<?

$contador = 0;

do {

echo “O valor do contador é: ” . $contador;

++$contador;

} while($contador < 10);

?>

É bem parecido com o exemplo acima, mudando-se apenas a ordem dos elementos. A
diferença é que independente do valor inicialmente colocado em $contador, ao menos uma vez seria
exibido o seu valor.

17.4 Repetição usando foreach

A repetição foreach foi criada para trabalhar de uma forma mais eficiente com as estruturas
de dados de vetores, pois fornece uma maneira rápida de acessar os vários campos
de um vetor, sem se ter a preocupação na forma como os índices são trabalhados ou acessados por
parte do sistema. Por exemplo, considere o exemplo:

<?

$vetor[0] = 10;

$vetor[1] = 11;

$vetor[2] = 12;

$vetor[3] = 13;

$vetor[4] = 14;

foreach($vetor as $único)

echo “O valor é “. $único;

?>

Um vetor é uma variável que possui dados em várias posições consecutivas de memória,
identificadas com o mesmo nome e que podem ser acessadas através de um índice inteiro. No
exemplo, nosso vetor possui cinco valores, com o índice inicial começando em zero (por padrão). O
comando foreach pega cada um dos valores e o coloca na variável $único, terminando a repetição
quando todos os itens do vetor tenham sido manipulados.
18 DESVIOS INCONDICIONAIS

18.1 Desvio incondicional: return

O comando return é muito utilizado em funções e serve para encerrar a execução da mesma
e retornar para o trecho de código que chamou o trecho inicialmente. Ele é muito útil quando o
processamento chegou a um ponto que não pode evoluir mais e deseja-se que o controle retorne para
a origem, podendo por isso ter vários comandos desse tipo num código.

18.2 Desvio incondicional: break

Este comando possui várias aplicações, sendo uma delas o uso dentro de condicionais
switch, para limitar o número de operações executadas ou então dentro de comandos de repetição,
para fazer com que a saída seja feita independente da condição de saída da repetição ter ocorrido,
passando para o próximo comando fora do laço. Por exemplo:

<?

for($i = 0; $i < 100; ++$i) {

if($i == 20)

break;

echo $i;

} // for
?>

Neste trecho, o laço fará vinte repetições, imprimindo o valor de $i, porém ao chegar no valor
20, a condição se tornará verdadeira e o comando associado, break, será executado, fazendo com que
o comando for seja encerrado. Existe a possibilidade de associar um valor inteiro ao lado do break,
para o caso de laços aninhados, indicando o número de repetições que devem ser puladas; o padrão é
de apenas um. Por exemplo:

<?

for($i = 0; $i < 20; ++$i) {

for($j = 0; $j < 20; ++$j) {

if($i == 6)

break 2;

echo $j;

} // for

echo $i;

} // for

?>

Neste exemplo, sempre que o valor de $i for igual a 6, o comando if terá sua condição igual à
verdade e o break executado, com o detalhe de que o fluxo de execução será direcionado

para fora de ambos os comandos for, diferente do que aconteceria se não tivéssemos parâmetro ao
lado do break, passando para fora apenas do for mais interno. Outro exemplo:
<?

$busca = {10, 11, 12, 13, 14};

$chave = 13;

$encontrou = 0;

for($i = 0; $i < sizeof($busca); ++$i) {

if($busca[$i] == $chave) {

$encontrou = 1;

break;

} // if

} // for

?>

Essa não seria a melhor estrutura nesse caso, mas serve bem para ilustrar o que se deseja.
Tem-se um vetor com diversas chaves e uma chave em especial para verificar se ela existe ou não no
vetor. Deve-se passar por todas as posições, porém, caso ela seja encontrada em alguma posição,
$encontrou recebe o valor 1 e o resto do processamento da repetição é encerrado.
18.3 Desvio incondicional: continue

O continue possui uma utilização semelhante ao break, com a diferença de que o fluxo de
execução não sai da repetição, mas cancela os demais comandos daquela repetição, passando para o
próximo passo. O conceito de laços aninhados também se aplica a este comando. Por exemplo,
teríamos:

<?

for($i = 0; $i < 20; ++$i) {

if($i % 2 == 0)

continue;

echo $i;

} // for

?>

No exemplo, seriam impressos apenas os números ímpares, pois como o resto de todos os
números pares é zero, todos eles teriam a condição verdadeira e o comando continue seria avaliado,
passando para a próxima iteração do laço.
19 INTRODUÇÃO AO PHP – PARTE 2

19.1 Declarando uma função

Uma função é um bloco independente de código, que pode ser chamado em diversos pontos
de outros códigos (inclusive por outras funções), eliminando a repetição de código, facilitando a
manutenção de sistemas e tornando o sistema um tanto mais modular, permitindo que novas partes
possam ser facilmente colocadas.

Para a criação de uma função, é necessária a definição de um nome único, de tal modo que
esta possa ser identificada sem conflitos com quaisquer outras. Pode também vir no seu cabeçalho,
zero ou mais parâmetros, sendo que os parâmetros contêm dados que serão manipulados dentro da
função, para produzir um resultado. E por fim, um comando return, para devolver algum valor ao local
que a chamou inicialmente, sendo contudo, este comando, opcional.

<?

function nome_da_função($param_1, $param_2, $param_3) {

return(10);

} // nome_da_função

?>

Além do que já foi mencionado para uma função, é necessário que antes de tudo seja escrita
a palavra function, para explicitar que estamos criando uma função. No caso de uma

função sem parâmetros, é preciso deixar apenas os parênteses, sem qualquer valor dentro. Os
comandos da função são englobados entre chaves. Segue um exemplo:
<?

function soma_vetor($vetor) {

$total = 0;

for($i = 0; $i < sizeof($vetor); ++$i)

$total += $vetor[$i];

return($total);

} // soma_vetor

?>

Neste exemplo, a função soma_vetor recebe como parâmetro um vetor (que deve ser de
inteiros, caso contrário ocorrerá um erro), pegará cada um dos valores nas posições do vetor e somará
com o valor que estiver em $total, que inicialmente é zero. Ao final, essa variável será retornada com o
total dos valores. Esse trecho poderá, dessa forma, ser utilizado em diversos pontos do código, de tal
forma que o reaproveitamento de código possa ser feito.

<?

function reverte($vetor) {

$inicio = 0;

$final = sizeof($vetor) – 1;

while($inicio < sizeof($vetor)) {

$novo_vetor[$inicio] = $vetor[$final];
++$inicio;

--$final;

} // while

return($novo_vetor);

} // reverte

?>

Neste exemplo, uma função que irá inverter a ordem dos elementos de um vetor recebe como
parâmetro um vetor. Ao final do processamento, uma nova variável irá armazenar a nova ordem dos
elementos do vetor, sendo por fim retornado como resultado da função.

19.2 Chamando uma função

Pode-se chamar uma função já definida (ou então alguma função interna do sistema); deve-
se usar o nome da função e colocar todos os parâmetros necessários para que ela retorne

um resultado correto. Caso a função não retorne nenhum valor, nada mais é preciso ser feito; caso
contrário, se a função retornar algum dado, é útil colocar uma variável antes da função.

<?

função_sem_retorno();

função_sem_retorno_mas_com_argumentos($a, $b, $c);


$teste = nova_função();

$outro_teste = função_de_teste($a, $x);

?>

Nos dois casos iniciais, nenhum valor é retorno; então, apenas o nome da função com
eventuais parâmetros são necessários. Nos dois casos seguintes, algum valor é retornado; então é
preciso colocar uma variável antes de se chamar a função.

19.3 Definindo um valor padrão para os parâmetros de entrada

Ao se definir uma função pode ser necessário que alguns dos parâmetros possuam valores
padrões que serão adotados caso o chamador não passe um valor explicitamente. Nesses casos, a
assinatura da função deve estar preparada com esse valor padrão, para que uma eventual chamada
sem esse valor não faça com que um erro seja lançado e o programa abortado.

<?

function formato_data($lingua = 'BR') {

if($lingua == 'BR') {

return date('d/m/yy');

} else {

return date('m/d/yy');
} // if

} // formato_data

?>

A chamada ficaria algo como:

<?

echo formato_data('US'); // saida: 06/10/08

echo formato_data(); // saida: 10/06/08

?>

No exemplo, a função recebe como parâmetro uma string, representando o formato em que a
saída deverá ser retornada. Caso o parâmetro de entrada não seja passado, assume-se o valor BR e
executa-se o programa usando esse valor. Caso algum valor seja passado (no exemplo acima, a
primeira chamada) o valor padrão não é usado. Uma alternativa interessante é definir que o parâmetro
a ser usado tenha o valor null, permitindo que nenhum valor seja usado na chamada da função.

Funções que tratam os argumentos

Desde o PHP em sua versão 4.0, existe um conjunto de funções que permite determinar, em
tempo de execução, o número de argumentos passados para uma função previamente definida. As três
funções fornecidas são func_num_args(), que retorna o número de argumentos passados a ela,
func_get_arg(), que retorna o valor passado à função numa determinada posição e func_get_args(),
que recupera os parâmetros na forma de um vetor. Em exemplos:

<?

function valores_passados() {
for($i = 0; $i < func_num_args(); ++$i) {

echo func_get_arg($i) . “ - ”;

} // for

} // valores_passados

valores_passados(1, 2, 3); // Saida: 1 – 2 – 3

valores_passados(1, 2, 3, 4, 5); // Saida: 1 – 2 – 3 – 4 – 5

?>

No exemplo, a função valores_passados() não possui um conjunto de parâmetros explícitos


para serem trabalhados, então, a partir das funções fornecidas para se trabalhar com parâmetros,
pode-se, a qualquer momento, obter a lista de valores, o número de elementos passados e um
determinado valor numa certa posição. Esse tipo de facilitado aumenta, e muito, a liberdade de
programação, ainda que seja relativamente mais simples inserir algum tipo de erro na programação e
posterior manutenção do sistema como um todo.

20 INCLUINDO ARQUIVOS

20.1 Diretiva include

Eventualmente, para projetos muito grandes, é uma boa prática dividir o código gerado em
diversos arquivos, de tal forma a tornar a sua manutenção e entendimento mais simples. Porém, ao se
fazer essa divisão, é necessário deixar explícito, nos demais códigos, os locais em que se fará uso
daqueles códigos colocados em outros arquivos.

A diretiva include serve para isso, pois indica o local e nome do arquivo em que um
determinado arquivo de código PHP está colocado para que ele possa ser incluído e utilizado
normalmente. Essa inclusão significa basicamente que foi feita uma “inserção” de código naquele
ponto, mesmo que ele não esteja visível. Exemplos de como fazer isso, seguem:

<?

include(‘biblioteca.php’);

include(‘../funcoes/arq_funcoes.php’);

include(“diretorio/pasta/arquivo.php”);

?>

No primeiro caso, o arquivo desejado está no mesmo diretório do arquivo que contém essa
linha. Nos outros dois, existe uma navegação pela estrutura de diretórios para localizar o arquivo. Vale
destacar que os dois pontos “..” denotam uma navegação para níveis mais altos na

hierarquia. Caso se use essa diretiva e não se encontre o arquivo, é escrita uma advertência na tela,
para o usuário.

20.2 Diretiva require

A diretiva require possui praticamente a mesma aplicação do comando include, com a


diferença que caso um arquivo não seja encontrado, é escrito um erro para o usuário e o
processamento do resto do script é encerrado.

20.3 Diretivas include_once e require_once


Como alternativas para os dois tópicos anteriores, existem as construções include_once e
require_once, que possuem exatamente os mesmos comportamentos dos seus equivalentes
mostrados antes, só que ao contrário delas, não gerariam erros ou advertências caso um mesmo
arquivo seja incluído mais de uma vez numa mesma estrutura de arquivos (lembrando que esse
processo pode ser complexo, quando se estiver tratando com vários arquivos em diferentes níveis).

Evitar esse tipo de erro pode ser uma saída fácil mas o uso exagerado (ou mesmo o uso)
dessas estruturas emite um sinal de alerta, indicando que o sistema pode não estar bem estruturado ou
que seria necessário remodelar a arquitetura nele presente, evitando esse tipo de distorção.

21 FORMULÁRIOS

21.1 Enviando dados entre arquivos

Um item que merece destaque à parte, quando se trabalha com PHP, é a questão do envio e
tratamento de dados entre formulários que foram preenchidos pelo usuário e sobre os quais deve ser
feita alguma ação, de tal forma que se alcance algum resultado, como a sua inserção num banco de
dados, ou então a sua validação ou mesmo o retorno de uma conta.

Os formulários em que os dados são inseridos pelo usuário são HTML puro, porém a lógica
de programação em que são tratados, é totalmente comandada pelo PHP, seja com suas funções pré-
definidas, seja com seus comandos nativos. Um formulário pode ser enviado para ser tratado por outro
arquivo PHP ou então por ele mesmo, desde que tenha ocorrido uma preocupação em organizar o
código de maneira a facilitar isso.
21.2 Cabeçalho de um formulário

Um formulário HTML possui um cabeçalho padrão e tags de campos que devem vir
englobadas dentro desta tag. Neste cabeçalho, vêm informações de configuração e de que forma o
formulário deverá ser tratado quando o usuário submeter essas informações ao servidor.

<form name=”form_1” method=”POST” action=”trata.php”>

<input name=”nome” type=”text” maxlength=”50”>

<input name=”cpf” type=”text” maxlength=”10”>

<input name=”telefone” type=”text” maxlength=”10”>

<input name=”sub” type=”submit”>

</form>

Neste exemplo, existem três campos para o usuário preencher (nome, cpf e telefone) e um
botão de submissão, para enviar esses dados ao servidor. No cabeçalho da tag form existem vários
dados importantes. Primeiro o seu nome, para futura referência. Depois o método com os dados serão
enviados, pode ser POST (ocultos para o usuário) ou GET (visíveis ao usuário pela barra de
endereços) e o arquivo que irá tratar esses dados, no parâmetro action.

Uma vez que este formulário seja submetido para o servidor, o arquivo que foi definido no seu
cabeçalho, neste caso trata.php, é invocado e estes campos são repassados para que este arquivo
manipule os dados da forma desejada, como por exemplo, montando uma cadeia de caracteres para
salvar os dados num banco de dados para que as informações não sejam perdidas com o tempo.
21.3 Manuseando as informações passadas

Existem diversas maneiras de se obter as informações que foram passadas de um arquivo


para outro a partir de um formulário de submissão. O mais simples dele é sabendo o nome dos campos
que foram utilizados no formulário original. Todos os nomes de campos que

foram criados num formulário possuem a sua respectiva variável quando submetidos ao servidor.
Sendo assim, teríamos:

<?

echo $nome;

echo $cpf;

echo $telefone;

?>

Com os comandos acima, escritos no arquivo trata.php, seriam impressos o conteúdo dos
campos digitados pelo usuário e que logo em seguida foram submetidos para o servidor. Dessa forma,
diversas ações poderiam ser realizadas pelo desenvolvedor, como por exemplo, validar as informações
passadas, garantindo que o nome e o cpf sejam válidos.

21.4 Variáveis $_GET e $_POST


Existem, contudo, formas alternativas e que garantem que as informações passadas sejam
realmente obtidas pelo desenvolvedor. Esse tipo de abordagem é importante em conceitos mais
avançados, como seções e cookies, onde variáveis são repassadas para diversos arquivos e mais que
isso, para o mesmo arquivo diversas vezes.

O PHP fornece duas variáveis de sistema para se trabalhar com as informações passadas de
um arquivo para outro: $_GET e $_POST. Todos os dados enviados entre arquivos

são tratados como um vetor, podendo ser acessados pelas variáveis acima, desde que se saibam os
nomes originais das variáveis no primeiro formulário. Dessa forma, teríamos:

<?

$n = $_POST[‘nome’];

$c = $_POST[‘cpf’];

$t = $_POST[‘telefone’];

?>

Em cada um dos casos, a variável à esquerda do sinal de igual irá receber o conteúdo
digitado pelo usuário no respectivo campo do formulário, podendo desta forma tratá-lo da forma que
achar mais interessante. Foi utilizado $_POST porque o formulário faz uso do método post em seu
cabeçalho.

21.5 O atalho <?= ?>

Quando se trabalha com formulários, uma aplicação normalmente necessária é fazer com
que os dados anteriormente preenchidos nele voltem a ficar disponíveis, seja para uma operação de
alteração dos dados, seja por conta de uma validação do formulário, que detectou que algum dos
campos possui uma informação incorreta. Nessas e em outras situações, pode ser necessário
preencher o atributo value dos campos de tal forma que os campos já apareçam preenchidos com um
valor padrão .

Uma alternativa para se fazer isso seria utilizar os comandos de impressão, como o echo,
exibindo o conteúdo de uma variável ou de uma posição dos supervetores que são preenchidos
quando uma submissão é realizada. Em exemplos:

<form name=”form_1” method=”POST” action=”trata.php”>

<input

name=”nome”

type=”text”

value=”<? echo $valor_nome; ?>”>

<input name=”sub” type=”submit”>

</form>

Esse comando, ainda que simples, é muito utilizado, principalmente em conjunto com
verificações se a variável em questão possui um valor que possa ser exibida na tela, garantindo que
nenhuma advertência seja exibida na tela por conta da tentativa de acesso a uma variável
originalmente sem valor. Existe uma sintaxe mais simples e que facilita o processo de atribuir valores
padrões ao diversos campos que um formulário pode ter. Eis o exemplo modificado:

<form name=”form_1” method=”POST” action=”trata.php”>

<input

name=”nome”

type=”text”
value=”<?= $valor_nome ?>”>

<input name=”sub” type=”submit”>

</form>

Repare que o comando echo (bem como o ponto-e-vírgula) sumiu do comando, sendo
substituído pelo símbolo de igual, cujo entendimento deve ser: pegue o valor da variável $valor_nome e
retorne para a saída padrão, que no caso é a construção do documento HTML. O uso dessa estrutura
em arquivos de saída deve ser moderado, pois eles podem se tornar complexos, limitando e
impactando eventuais manutenções futuras.

22 PHP E BANCO DE DADOS


22.1 Funções de Acesso a Bancos de Dados

PHP fornece diversas funções de acesso ao banco de dados, a maioria delas com o mesmo
objetivo e resultado obtido, mas que possuem nomes diferentes por acessarem bancos de dados
diferentes, o que indica que a implementação das funções, que é transparente para o desenvolvedor,
difere de um banco de dados para outro.

Dessa forma, para se conectar a um banco, cada um tem a sua própria função de conexão,
com nomes diferentes, mesmo que o resultado seja o mesmo. Um novo conceito que os projetos estão
implementando é o de separação em camadas, fazendo com que problemas específicos de
consistência de informações fiquem restritos a um dado ponto e não se tenha que mudar todo o código
caso alguma mudança seja necessária.

22.2 Conectando com um banco de dados

Um dos grandes diferenciais que a linguagem PHP possui sobre diversas outras é o seu
suporte nativo na interação com Bancos de Dados, o que torna o acesso às bases muito simples e
muito mais eficientes. Para a construção de um sistema dinâmico (que pode mudar com o tempo e se
atualizar com o tempo, sem a necessidade de se mexer em código), trabalhar com bancos de dados é
fundamental.

Para acessar um banco de dados, antes de tudo é preciso executar um comando que faça
uma conexão e deixe claro para os arquivos PHP qual Banco de Dados será acessado, em qual
servidor e utilizando qual usuário (e eventualmente, qual senha). Esse tipo de operação

deve ser realizado em todos os arquivos que irão fazer acesso ao Banco de Dados, sendo interessante
escrevê-lo num arquivo em separado e incluí-lo nos arquivos.

O comando para realizar essa conexão segue o padrão:


<?

pg_connect(“string_de_conexao”);

?> retornando um recurso que pode ser utilizado em outras funções PHP. Porém,
simplesmente executando esse comando, já se obtém a conexão com o Banco de Dados, permitindo
que comandos SQL sejam executados. O parâmetro string_de_conexão deve conter os seguintes
parâmetros:

Parâmetro Descrição
host Nome do servidor onde o Banco se encontra
dbname Nome do banco de dados
user Nome do usuário para acessar o Banco
password Senha deste usuário para acesso

Podemos armazenar essas informações numa variável, ficando o resultado como algo do
tipo:

<?

$c = “host=nome_h dbname=nome_b user=bdr password=pass”;

$conn = pg_connect($c);

?>

Os valores depois do sinal de igual devem ser modificados para os valores reais de conexão
para o banco de dados em questão. Todos os arquivos que tiverem essas linhas (sejam explícitas ou
num arquivo em separado), estarão prontos para realizar operações no banco de dados através de
funções pré-definidas.

Vale ressaltar ainda que as funções utilizadas aqui são para o banco de dados postgreSQL,
daí possuírem um prefixo “pg_” no início de seu nome. Outros bancos de dados possuem funções
similares, porém com prefixos diferentes, dependendo de cada caso. O PHP oferece hoje suporte a
uma imensa quantidade de Bancos de Dados, como Oracle, MS-SQLServer e MySQL. Cada uma
dessas funções pode ter um número diferente nos seus argumentos de entrada, ainda que de uma
forma ou de outra, tenham sempre o mesmo objetivo e necessitem dos argumentos num certo
momento.

22.3 Criando e executando uma consulta de dados

Uma vez estabelecida uma conexão com o Banco de Dados, temos a possibilidade de inserir,
remover, alterar e consultar dados existentes no sistema. Para isso, precisamos ter conhecimento das
tabelas existentes no banco de dados, seus campos e definições, caso contrário o trabalho de
manusear essas informações seria muito mais complexo e demorado.

Uma operação básica quando se trabalha com o PHP acessando um Banco de Dados, é a
questão de consulta das informações de uma tabela e a exibição desse conteúdo na tela, para o
usuário. Para mostrar como se realiza essa operação, considere uma definição de tabela como a que
segue.

Nome da Tabela: Pessoa


Atributos da Tabela: Nome
CPF
Telefone

No exemplo acima, a tabela tem o nome “Pessoa” e três atributos que irão guardar as
informações, o nome da pessoa, o seu número de CPF e o seu telefone. Nessa tabela pode existir um
grande número de registros, representados pelas linhas da tabela e que devem ser únicas, para que os
dados possam ser acessados sem possibilidade de erro.

Para realizar o acesso a Bancos de Dados usa-se a linguagem SQL (“Structured Query
Language”), sendo que seus comandos devem ser escritos na forma de uma String e executados
através de uma função do PHP. É uma boa prática de programação armazenar os comandos dentro de
uma variável, para só depois executar o comando pela função. Como exemplo teríamos:
<?

$query = “SELECT * FROM Pessoa”;

$resultado = pg_exec($query);

?>

A variável $query armazena uma String com a forma que o SQL usa para acessar todos os
dados de uma determinada tabela, no caso, Pessoa. A função pg_exec recebe como parâmetro o
comando SQL a ser executado e o manda para o servidor (cuja conexão foi anteriormente
estabelecida) e aguarda o resultado. Esse resultado é armazenado em $resultado.

Poderíamos ter colocado no lugar do SELECT acima, qualquer tipo de comando SQL, desde
para inserir ou atualizar dados, como para remover os dados permanentemente do sistema. Por isso,
todo o cuidado é pouco quando se escreve comandos deste tipo.

Uma operação corriqueira e que costuma ser muito necessária em sistemas é a


implementação de busca parcial de dados numa tabela, baseada nos valores de uma determinada
coluna, por exemplo. Quando isso é necessário, o comando SELECT deve ser montado de tal forma a
obedecer esse padrão, lembrando que esse comando, antes de ser

mandado ao servidor de banco de dados, é uma simples String; então, todos os comandos
mencionados anteriormente para tratamento de cadeias de caracteres, continuam válidos. Exemplos:

<?

$q = “SELECT * FROM pessoa”;

if(isset($_POST['nome'])) {

$q .= “ WHERE nome like '%” . $_POST['nome'] . “%'”

}
$resultado = pg_exec($q);

?>

No exemplo acima, é acrescentado ao comando básico um trecho condicional em SQL que


retornará todos os nomes que tenham o trecho informado na variável $_POST['nome']. Repare no uso
da função isset() para garantir que esse trecho de código só será executado caso a variável em
questão possua valor. Outro ponto importante está no caso de sempre executar um comando, variando
apenas o número de registros em questão. Uma boa prática em bases muito grandes é restringir o
número de registros, evitando problemas de desempenho.

22.4 Tratando o retorno de uma consulta

Utilizando o exemplo acima, vamos agora analisar como o retorno dos dados é tratado. Só
que antes, para facilitar a nossa visualização do exemplo, considere que a tabela em questão acima,
tenha os seguintes registros armazenados:

Nome CPF Telefone


José da Silva 12.258.789 – 12 19 4587 3256
Manuel da Costa 36.654.951 – 25 19 3269 5896
Maria de Oliveira 17.698.321 – 63 19 9858 7412

A consulta montada acima, deveria retornar todos esses três registros exibidos na tabela
acima, porém, a forma como isso é realizado não é tão intuitiva. O valor armazenado é um ponteiro
para os dados retornados. De certa forma, essas informações são vistas como uma matriz. Para
acessar cada um dos registros, deve-se fazer como no exemplo abaixo:
<?

$linha = pg_fetch_array($resultado, 0);

?> sendo que a variável $linha irá armazenar o registro que está na posição 0. Além disso,
essa variável é considerada um vetor, com seus parâmetros sendo acessados desta forma. No
exemplo da primeira linha, para imprimir o nome da pessoa, teríamos que escrever algo do tipo:

<?

echo “Nome da Pessoa: “ . $linha[0];

?>

Como os vetores começam na posição zero, o primeiro índice a ser utilizado deve ser esse.
Operações similares para imprimir os demais campos devem ser escritas como seguem:

<?

echo “CPF: “ . $linha[1] . “ e Telefone: “ . $linha[2];

?>

Eventualmente, queremos mostrar todos os registros recuperados. Isso deve ser feito
utilizando um laço de repetição. Por exemplo, utilizando um laço for:

<?

$tamanho = pg_num_rows($resultado);

for($i = 0; $i < $tamanho; ++$i) {

$linha = pg_fetch_array($resultado, $i);

echo “Nome: “ . $linha[0];


echo “, CPF: “ . $linha[1];

echo “, Tel.: “ . $linha[2] . “<br>;

} // for

?>

Utilizando-se o exemplo da tabela acima, seriam impressos os três nomes, um por linha
(repare no uso da tag HTML para quebra de linha) e depois o laço seria encerrado. Vale destacar ainda
que a função pg_num_rows devolve o número de registros feitos pela consulta. Caso fosse zero, a
repetição não teria sido executada.

23 GERENCIAMENTO DE SESSÕES

23.1 Introdução e Motivação

O grande interesse no estudo e uso de sessões reside na facilidade encontrada para manter
informações de forma persistente, entre diversas páginas de uma aplicação WEB, lembrando que por
padrão, o escopo de qualquer variável ou informação existe apenas durante aquela página,
desaparecendo caso não seja feita alguma operação ou salva em algum lugar, como um Banco de
Dados.

Desta forma, algumas aplicações que envolvem o uso de sessões são o gerenciamento de
usuários, que após serem validados, precisam ser colocados na sessão do sistema para que possam
ser testados a cada nova página e lojas virtuais, que mantêm os dados dos clientes e suas compras
durante todo o fluxo de navegação dos usuários.

Por fim, saber como utilizar de forma eficiente uma sessão, garante maior facilidade no
desenvolvimento das aplicações ao passo que torna eficiente o uso dos recursos disponíveis na
máquina, especialmente memória, que é um fator crítico quando se utiliza essa abordagem. Por isso, é
fundamental que todos os recursos sejam liberados quando possível (destruição da sessão).

23.2 Criando uma sessão

Tecnicamente, uma sessão é construída enviando um cookie para a máquina do usuário,


com um número que identifica unicamente aquela sessão e mantendo o mesmo número também no
servidor. As operações serão permitidas ao se comparar esses números e verificar que eles são
idênticos, tudo isso acontecendo de forma transparente.

<?

session_start();

?>

Os passos mencionados acima são abstraídos para a função session_start() que inicia uma
nova sessão para aquela página. Para cada página em que se desejar utilizar sessões, colocando ou
retirando variáveis que estejam colocadas lá dentro, é necessário fazer uma chamada a esta função.
Ela deve ser a primeira coisa presente no arquivo.

23.3 Atribuindo informações a uma sessão

Uma vez iniciada uma função, existem diversas maneiras de se colocar informações lá
dentro, seja através de funções, seja através de supervetores. A primeira abordagem foi mais utilizada
em versões anteriores do PHP, contudo hoje, a utilização de supervetores é mais simples, eficiente e
garante melhor legibilidade ao código.
<?

session_start();

$valor = “TESTE...”;

session_register(“valor”);

?>

No exemplo, antes de tudo, uma nova sessão é iniciada. Em seguida, é criada uma variável
local com alguma informação que será guardada na sessão. Repare que no uso de session_register()
não está presente o símbolo “$”. A partir deste momento, a variável $valor passará a existir enquanto a
sessão estiver disponível.

Outra razão que desaconselha o uso desta função é que para o seu correto funcionamento, a
diretiva register_globals precisa estar marcada como ativa, o que habilita o uso

de variáveis globais em todas as páginas do sistema. Ainda que isso possa ser uma grande facilidade
para o desenvolvimento, é também uma grave falha de segurança, sendo o ideal que esta diretiva
esteja sempre desligada.

<?

session_start();

$_SESSION[“outro”] = “MAIS UM...”;

?>
O exemplo acima mostra a maneira corrente ideal para se colocar uma informação na
sessão. A chamada a session_start() continua ocorrendo, só que agora aparece o super-vetor
$_SESSION, que é responsável por armazenar todas as informações de sessão. Vale destacar que ele
é um vetor e por isso deve ser indexado normalmente.

23.4 Acessando informações de uma sessão

Como todas as informações da sessão podem e devem ser acessadas através do seu
supervetor, a maneira como se acessa qualquer outra informação deste mesmo tipo, deve ser
empregada para obter informações que foram armazenadas nela, desde que a sessão seja inicializada
corretamente, utilizando a função session_start().

<?

session_start();

echo $_SESSION['outro'];

print_r($_SESSION);

?>

Como mencionado, em todas as páginas que forem utilizar de alguma forma a sessão, ela
deve ser iniciada, fazendo com que variáveis modificadas em outras páginas fiquem também
disponíveis na página atual, permitindo que novas operações possam ser realizadas. No exemplo
acima, primeiro é exibido um valor simples e em seguida, todos os valores presentes na sessão.
23.5 Destruindo uma sessão

Esse processo ocorre sempre ao final de algum fluxo de execução, como por exemplo, ao
final de uma compra virtual, onde todos os produtos do carrinho são retirados e a compra finalizada,
liberando os recursos para uma nova compra ou então, quando as informações não mais são
necessárias, como quando o usuário realiza o logou do sistema.

<?

session_start();

unset($_SESSION['outro']);

$_SESSION = array();

session_destroy();

?>

Independente de estarmos destruindo a sessão, sua inicialização é necessária. Em seguida,


pode-se apagar uma informação individualmente, utilizando-se a função unset() ou então todas de uma
vez, atribuindo um vetor vazio ao super-vetor $_SESSION. Por fim, ao se chamar a função
session_destroy(), o identificador dado à sessão é também eliminado.
23.6 Cuidados necessários

Um cuidado importante quando se trabalha com sessões é a maneira como gerenciar os


recursos que serão utilizados para armazenar informações necessárias que persistam por algum
tempo, pois é preciso lembrar que muitos usuários poderão utilizar esses recursos de forma
simultânea, o que pode comprometer sensivelmente o desempenho do servidor.

Outro item importante, agora pensando exclusivamente no desenvolvimento, é que toda a


inicialização da sessão deve ser feita antes que qualquer saída para o usuário seja feita; isso inclui a
exibição de qualquer tipo de caracter ou mesmo espaços em branco, pois o trabalho com sessões
envolve o trabalho dos cabeçalhos dos pacotes enviados e recebidos; então, antes de enviar qualquer
pacote, é necessário que todos os dados de cabeçalho já tenham sido escritos.

24 ORIENTAÇÃO A OBJETOS

24.1 Introdução e Motivação


A orientação a objetos é uma nova maneira (paradigma) de se organizar o código e de se
pensar nos sistemas que tentam garantir uma maior clareza e simplicidade aos projetos que estão
sendo desenvolvidos. Ela difere das linguagens de programação mais antigas, que faziam uso do
paradigma estruturado, e que não possuíam regras rígidas para estruturação do seu código.

Assim, um dos princípios básicos da orientação a objetos, é abstrair o mundo real para uma
aplicação, ou seja, pegar algum problema e mapeá-lo, numa escala reduzida ao sistema, agrupando
informações e operações relacionadas em locais que façam sentido, ao contrário do modelo
estruturado, onde essa preocupação era bem menor.

Nessa perspectiva de evolução, inicialmente PHP não oferecia suporte a este paradigma,
sendo voltado exclusivamente para a união de código direto na interface. Em versões mais recentes,
isso foi mudando e desde a versão 4 o seu suporte foi muito melhorado. Agora, em sua última versão,
a 5, o PHP oferece suporte a praticamente todos os conceitos presentes na orientação a objetos.

24.2 Classe e Objeto

A unidade básica de qualquer sistema que utilize como modelagem a orientação a objetos é a
classe. Uma classe é a maneira como uma estrutura de dados será organizada e

como ela deverá se comportar, armazenando assim informações (variáveis) e ações a serem
realizadas sobre essas informações (funções).

Diferente de estruturas de dados em modelos estruturados, agora, além dos dados, estão
presentes também as funções, que deverão idealmente realizar operações apenas nas informações da
própria classe. De forma resumida, uma classe acaba sendo uma forma, um modelo que será utilizado
para basear futuras cópias, que deixarão de ser elementos genéricos.

Enquanto uma classe é um caso genérico, um objeto é um caso especial baseado numa
classe, possuindo um estado específico, onde estado significa que ele possui informações preenchidas
em suas variáveis (as classes podem possuir valores padrões, mas um objeto tem liberdade para
colocar os valores necessários em suas variáveis).
<?

class Treinamento {

var $duracao;

var $nAlunos;

function Treinamento($a, $b) {

$this->duracao = $a;

$this->nAlunos = $b;

function setDuracao($novo) {

$this->duracao = $novo;

function getAlunos() {

return $this->nAlunos;

?>

Acima, é criada uma nova classe que define um treinamento. Essa classe possui dois
atributos (duração e número de alunos) que precisam da palavra reservada var. Em seguida, são
definidos três métodos que podem atuar sobre os dados desses objetos. O primeiro é especial e
chamado de construtor, pois será chamado sempre que um novo objeto deste tipo for instanciado.

A referência $this indica o objeto corrente que foi criado, tendo acesso a todos os atributos e
métodos deste objeto.

24.3 Criando um objeto

Uma vez definida uma classe, ela poderá ser utilizada como base para futuras instanciações
de objetos.

<?

include 'Treinamento.php';

$trei = new Treinamento(12, 10);

?>

No exemplo, incluiu-se o arquivo que define a classe que se deseja utilizar e depois se
realizou a instanciação do objeto propriamente dito através da palavra reservada new, que chama o
construtor da classe e retorna uma referência do objeto para a variável $trei.

24.4 Atributo e Estado


Um atributo é alguma informação que armazena algum estado para uma dada classe. São os
atributos que definem quais informações um objeto futuramente poderá armazenar. Tecnicamente, um
atributo é simplesmente uma variável que é definida no corpo de uma classe e que, quando for utilizada
por um objeto, possuirá valores específicos.

24.5 Método e Ação

Os métodos definem quais operações um determinado objeto poderá realizar sobre seus
atributos ou mesmo em outros objetos que sejam criados a partir de outras classes. Tecnicamente, um
atributo é uma função que não pode ser chamada diretamente, mas sempre a partir de uma classe
(contexto estático) ou a partir de um objeto (contexto dinâmico).

Métodos são fundamentais para o bom funcionamento de qualquer sistema, pois são eles
que garantem que ações possam ser realizadas, como a persistência de informações no banco, a
obtenção dos dados de um usuário, o tratamento de dados de um formulário. Essa separação garante
uma melhor separação entre as diversas ações que os objetos de um sistema podem realizar e tudo
isso sem interferência.

<?

include 'Treinamento.php';

$trei = new Treinamento(12, 10);

echo $trei->getAlunos();

?>
No exemplo, depois de instanciado o objeto, pode-se fazer chamadas a quaisquer métodos
que pertençam a ele, como por exemplo a função getAlunos(). A sintaxe utilizada indica qual o objeto e
qual o método que se deseja chamar. Como essa função retorna um valor, essa informação poderá ser
diretamente exibida na tela.

24.6 Construtores

Construtores são métodos especiais chamados sempre que algum novo objeto é criado. Com
eles, podem ser inicializados atributos que precisam de uma forma ou de outrareceberem valores
especiais de acordo com a chamada do método de criação do objeto, como por exemplo, ao se criar
um objeto Pessoa, pode-se querer passar como atributo de entrada o nome daquela pessoa em
especial, então o construtor já faz a atribuição necessária.

24.7 Herança

Um dos pontos fortes da orientação a objeto é o conceito de herança, onde um determinado


objeto genérico pode ser a base para objetos filhos, mais específicos, mas que de alguma forma
possuem coisas em comum com sua superclasse, que em PHP pode ser acessado através da
referência parent.

Como exemplo, uma classe Pessoa pode ser uma abstração para qualquer pessoa que
exista no sistema, contudo, ela possui comportamentos muito genéricos e que não atendem a todos os
tipos de situação. A partir dela pode ser criada uma classe Aluno, que também é um tipo de Pessoa, só
que além de tudo que uma Pessoa faz, ela também faz algumas operações e possui alguns estados
que apenas um Aluno possui, como notas de prova.
<?

include 'Treinamento.php';

class TreinamentoPHP extends Treinamento {

var $material;

} //

?>

O grande poder da herança reside no fato de não ser preciso reescrever diversos trechos de
código para implementar uma organização desse tipo, pois muitos códigos são reaproveitados de
classes que já foram definidas e que agora simplesmente “emprestam” parte do seu código para definir
elementos mais específicos.

24.8 Métodos Estáticos

Algumas vezes não é interessante e nem necessário criar um objeto simplesmente para
chamar algum método do objeto. Pense, por exemplo, numa classe matemática, que possua dentre
outras constantes, a constante PI. Existe um método que retorna o valor de PI sempre que solicitado.
Esse valor vai ser sempre o mesmo, independente do objeto instanciado.

Essa situação é identificada pelo contexto estático da aplicação, onde um mesmo atributo ou
método é compartilhado por todos os objetos que foram criados a partir daquela classe. Por questões
de arquitetura e simplicidade na execução do código, existe uma sintaxe alternativa para rodar um
trecho de código estático.

<?
class ExemploEstatico {

function teste() {

echo 'imprimiu?';

ExemploEstatico::teste();

$ee = new ExemploEstatico();

$ee->teste();

?>

No exemplo, foi criada uma classe com um método estático que retorna uma String. Num
contexto dinâmico (com a criação de objetos), antes de mais nada, um objeto deveria ser criado e o
método chamado a partir do objeto. No exemplo, a classe possui o método e, precedendo o método
que se deseja executar do nome da classe, a operação é executada corretamente.

25 Expressões Regulares
25.1 Introdução e Motivação

Validar a entrada de dados é um dos passos mais importantes de qualquer sistema de


computação, pois garante a consistência dos dados e do sistema como um todo. Algumas informações
são relativamente fáceis de serem verificadas, pois é necessário certificar apenas a sua existência ou
não.

Em outros casos contudo, é necessário também saber se a maneira como as informações


foram preenchidas estão corretas ou não, no sentido de apenas caracteres corretos terem sido
utilizados, a posição deles faz sentido lógico e assim por diante.

As expressões regulares fazem com que essas tarefas se tornem mais fáceis e robustas, pois
fornecem uma regra geral que todas as informações de um determinado tipo deverão seguir para que a
informação seja declarada válida, caso contrário, uma nova entrada de dados deverá ser realizada.

Diversas linguagens de programação possuem expressões regulares. Sua sintaxe é bem


parecida, ao menos no momento de gerar os padrões básicos, ocorrendo diferenças, eventualmente,
quando se deseja utilizar o padrão criado para verificar a informação de algum campo, entrando então,
o uso de funções específicas de cada linguagem.

25.2 Caracteres Normais e Caracteres Especiais

Existem dois tipos principais de caracteres quando se tratam de expressões regulares:


caracteres que expressam eles mesmos (por exemplo, as letras do alfabeto) e caracteres que possuem
um significado diferenciado, que representam alguma operação sobre a lista (por exemplo, \d
representam todos os números decimais).
Essa diferenciação é importante na hora de montar uma expressão regular, pois de forma
geral estamos interessados num grupo de caracteres; utilizar a sua forma simplificada é muito mais
interessante, pois simplifica a maneira como a expressão será escrita e uma das grandes forças das
expressões regulares é o seu poder de concisão.

25.3 Listas de Caracteres

O primeiro passo para montar qualquer expressão regular é definir quais caracteres podem
fazer parte da expressão. Esses elementos podem ser quaisquer caracteres válidos desde que não
possuam um significado especial para a sintaxe das expressões regulares (elementos que possuem
um duplo sentido são +, *, \ e por isso, para utilizá-los literalmente, faz-se o uso de uma barra antes,
para indicar um escape).

abcdefghijklmnopqrstuvwxyz

ABCDEFGHIJKLMNOPQRSTUVWXYZ

0123456789

As três linhas acima representam listas de caracteres. A primeira linha, todos os caracteres
minúsculos do alfabeto. A segunda, todos os caracteres maiúsculos do alfabeto. A terceira, por sua
vez, todos os dígitos numéricos da base decimal. Eventualmente, numa

validação de campo, quaisquer combinação desses caracteres é válida, daí a importância de se ter um
atalho.

[a-b]

[A-B]
[0-9]

As três linhas de cima podem ser reescritas com o uso do abre e fecha colchetes, que é o
operador que define uma lista.

[AEIOUaeiou]

[ijk]

Acima, mais alguns exemplos de listas de caracteres. Na primeira linha, todas as vogais,
sejam elas maiúsculas ou minúsculas. E na linha de baixo, tradicionais índices em qualquer linguagem
de programação.

O Caracter Coringa

Outra ferramenta importante no uso de expressões regulares é uma marca que indique a
substituição por qualquer caracter que case com a expressão (esse termo é importante, “casamento de
expressões”, pois a todo momento esse será o interesse desse tipo de abordagem, casar uma
expressão regular com alguma entrada de dados do usuário).

ca.a

te.te

O caracter ponto é essa marca especial. Ele pode ser substituído por qualquer coisa,
inclusive por nada e mesmo assim ele continua valendo. Nos exemplos acima, qualquer caracter pode
ser colocado no lugar do ponto, como por exemplo, casa, caça, caza, teste, teite, tete, etc.
Muitos ou Nenhum

Enquanto o caracter ponto substitui um elemento qualquer para tentar fazer o casamento, em
algumas situações deseja-se que um certo caracter possa ser colocado tantas vezes quantas forem
necessárias ou mesmo, nenhuma.

banan*a

te*te

beab.*

No primeiro exemplo, o asterisco, que é o caracter que serve para essa ação, tentará buscar
a letra “n” e qualquer coisa que tenha zero ou mais vezes essa letra, estará satisfeita. O mesmo vale
para a segunda linha, só que em relação à letra e. Já no último caso, a lógica vale para o ponto, só que
o ponto é trocado por qualquer coisa, então essa qualquer coisa, repetida zero ou mais vezes, estará
satisfeita.

O que se pode tirar dessa lógica e que vale para a grande maioria dos operadores de
expressões regulares é que eles atuam sempre em relação ao caracter anterior.

Um ou Muitos

Seguindo a lógica do operador asterisco, que busca o caracter anterior de onde está presente
zero ou muitas vezes, o próximo caracter especial também atua sobre o caracter anterior, só que ele
tenta casar uma ou mais vezes.

banan+a

te+te

beab+
No primeiro exemplo, a existência de um, dois ou muitos “n” indica que a expressão retornou
verdade. A situação é equivalente abaixo, onde um ou vários “e” devem ser apresentados. Por último,
um ou vários “b” farão com que a expressão retorne verdade.

Existe ou Não Existe

O próximo caracter define a existência ou não de um elemento.

banana?

te?te

beab?

No primeiro exemplo, a interrogação tenta casar a expressão regular com qualquer coisa que
tenha zero ou um “a”. Qualquer coisa diferente disso é falsa. Na segunda linha,

qualquer coisa que tenha zero ou um “e” (ou seja, qualquer coisa entre tte e tete). E no último exemplo,
que tenha zero ou um “b” (como em bea ou em beab).

25.4 Repetições Definidas

Nos tópicos anteriores foram abordadas maneiras de se verificar se um determinado caracter


se repete zero, uma ou infinitas vezes, mas um problema permanece, que é o de se verificar se uma
determinada parte da expressão regular casa um determinado número de vezes com outra.
Cas{2,5}a

Valor{6}

Nos três casos, existe um intervalo bem definido de vezes que o caracter anterior deve
aparecer ou não (indicado através do operador chaves), sendo que no primeiro caso, a letra “s” pode
aparecer de duas a cinco vezes (qualquer coisa diferente disso não irá casar). Já no segundo exemplo,
se o “r” aparecer seis vezes, o casamento será feito.

25.5 Uso de Funções do PHP

Os itens anteriores servem para a imensa maioria das linguagens de programação que
implementam expressões regulares, sendo a sintaxe muito parecida de uma para outra, com poucas
variações. No caso específico de PHP, é necessário, além disso, o uso de funções tais que tentam
casar uma expressão com uma variável por exemplo.

<?

if(ereg('[0-9]{4}-[0-9]{4}', $telefone)) {

echo 'telefone ok';

}
if(!eregi('[a-z]{6}', $senha)) {

echo 'Formato de senha inválida';

?>

Nos exemplos acima, são feitos uso das funções ereg() e eregi(), sendo que ambas recebem
como primeiro parâmetro uma expressão regular e como segundo argumento o valor que se deseja
verificar. Caso ocorra o casamento, as funções retornam verdade, senão retornam falso. A diferença
entre elas é que numa delas não existe diferenciação entre maiúsculas e minúsculas.

26 CONTROLANDO O UPLOAD DE ARQUIVOS

26.1 Introdução e Motivação

Uma aplicação específica muito utilizada em sistemas de informação é a anexação de


arquivos e documentos a uma informação cadastral. Esse tipo de comportamento acontece mesmo
quando se está enviando uma mensagem de email e se deseja incluir um documento para que o
destinatário receba também. Quando se trata de programação WEB, essa operação não é tão simples.

Esse tópico busca mostrar as diferenças e necessidades que um formulário WEB precisa ter,
de tal forma que um documento possa ser enviado ao servidor, salvo em algum lugar específico e sua
referência armazenada num banco de dados. Além disso, o seu resgate para futuros downloads num
site são importantes, pois é necessário fazer o caminho de volta também.
26.2 Alterações Necessárias no Formulário

A primeira modificação necessária é preparar o formulário para que além de se enviar dados
do tipo texto (como nome e telefone), também se possam enviar dados binários (como um arquivo texto
ou imagem). Sendo assim, a primeira modificação aparece no cabeçalho da tag <form>.

<form method='get' action='arq.php' enctype='multipart/form-data'>

<input type='hidden' name='MAX_FILE_SIZE' value='30000'>

<input type='file' name='arquivo'>

<input type='submit' name='sub' value='Enviar'>

</form>

No cabeçalho da tag <form> aparece uma diretiva que indica que os dados enviados podem
ser algo além de texto, que é o padrão. O campo hidden que vem em seguida, indica qual o tamanho
máximo do arquivo, em bytes, que pode ser enviado. O campo file define um novo componente na
interface para a escolha de um arquivo local.

Os demais componentes do formulário são os mesmos de qualquer interface criada


anteriormente, inclusive a parte de qual arquivo, no servidor, deverá tratar o envio (definido em action)
e o botão de submissão de dados.

26.3 Tratamento no Servidor


Uma vez que a ação de enviar tenha sido disparada, começa o processo de tratamento no
lado do servidor. A primeira coisa que deve ser feita é o upload de todos os dados do arquivo para lá.
Dependendo do tamanho do arquivo a ser enviado, esse processo pode demorar mais ou menos. Ao
final desse processo, uma nova variável é preenchida e fica disponível para manipulação.

<?

print_r($_FILES);

?>

O supervetor $_FILES armazena todas as informações importantes do arquivo enviado, como


nome e tamanho. É a partir dessa referência que o arquivo poderá ser tratado, salvando-o num
diretório local do servidor, por exemplo.

26.4 Movendo um arquivo para um diretório

Com base nesse supervetor, deve-se manipular o local onde o arquivo será salvo
remotamente.

<?

$dir_remoto = 'uploads';

$destino = $dir_remoto . $_FILES['arquivo']['name'];

if(move_uploaded_file($_FILES['arquivo']['tmp_name'], $destino)) {

$salvei = 1;
echo 'OK';

} else {

$salvei = 0;

echo 'NOK';

} // if

?>

A referência $_FILES['arquivo']['name'] retorna o nome do arquivo que o usuário digitou no


campo do formulário. A função move_uploaded_file() move o arquivo temporário criado no servidor
para o seu local de destino. Como essa função retorna verdade em caso de sucesso e falso em caso
de falso, é possível criar um tratamento de erro.

Vale destacar que essa função só estará disponível caso a configuração do servidor WEB
tenha habilitado o salvamento de arquivos através dela. Alguns servidores, por questões

de segurança, desabilitam essa opção (bem como a abertura para escrita de arquivos em qualquer
diretório). Uma alternativa é salvar o arquivo através de FTP.

26.5 Salvando uma referência no Banco de Dados

De forma geral, não se salva arquivos binários diretamente no banco de dados (ainda que
diversos sistemas gerenciadores de banco ofereçam esse suporte atualmente), sendo preferível salvar
o arquivo em algum diretório específico e armazenar no banco apenas uma referência ao arquivo,
como nome, quem é o dono dele e como fazer para recuperá-lo.
<?

if($salvei == 1) {

$q = “INSERT INTO t VALUES($dono, $_FILES['arquivo']['name']”;

// executo $q

?>

Além de mover o arquivo para um diretório dentro do sistema de arquivos (que não deve ser
acessado diretamente, através de configurações do servidor de aplicação), um registro na tabela deve
ser salvo indicando o dono do arquivo e qual o nome do arquivo a ser salvo. Um detalhe importante é
que no diretório de uploads não pode existir nomes repetidos; então, deve existir o tratamento de
choques de nomes.

27 TRATAMENTO DE EXCEÇÕES

27.1 Introdução e Motivação

Infelizmente, sistemas de computação possuem erros e estados de inconsistência. No início,


a maioria dos sistemas simplesmente parava por não saber tratar corretamente um determinado
estado, obrigando o usuário a reiniciar a operação. Com o avanço da tecnologia, ferramentas e
mecanismos vêm sendo oferecidos para ao menos melhorar o tratamento de erro.
É neste contexto que se insere o tratamento de exceções. Uma vez identificado um trecho de
código que pode lançar ou sofrer um estado de erro ou inconsistência, um bloco de código pode ser
criado para garantir um melhor tratamento deste trecho. Em PHP essa idéia é relativamente nova e faz
uso do modelo já proposto em outras linguagens de programação, como em JAVA.

Vale lembrar que esse conjunto de novas funcionalidades só está disponível a partir do
PHP5.

27.2 Como Capturar uma Exceção

Preparar o sistema para capturar e tratar uma exceção é uma excelente maneira de garantir
que o sistema não cairá num erro fatal e o devido tratamento para a situação de erro será feito.

<?

$val = 10;

try {

@echo $val / 0;

} catch(Exception $e) {

print $e;

} // try

?>
O código dentro do bloco try tentará ser executado. Como ele gera uma situação de erro
(divisão por zero) uma exceção será lançada. Essa exceção deverá ser pega diretamente pelo catch
correspondente, que faria o tratamento de erro (que no exemplo é simplesmente exibir a mensagem de
erro, para eventuais debugs).
27. 3 Como Lançar uma Exceção

Alguns trechos de código podem também lançar uma exceção. Isso pode ser útil quando uma
determinada configuração de parâmetros for identificada e o contexto não fizer sentido.

<?

$idade = $_POST['idade'];

try {

if($idade < 18) {

throw new Exception('Alguma mensagem...');

} catch(Exception $e) {

print $e;

} // try

?>

No trecho de código, a informação de idade é obtida através de um formulário. Ela é avaliada


e caso a idade seja menor que 18 uma exceção é lançada e tratada pelo bloco catch. Vale destacar
que uma função, ao lançar uma exceção, pode ter um poder muito maior, pois garante que o
lançamento e tratamento da exceção estejam em lugares diferentes.
27.4 Como Criar um Objeto de Exceção

Um jeito de personalizar a maneira como e quais exceções serão lançadas é criar exceções
próprias, específicas para o sistema que se está desenvolvendo neste momento. Como as exceções
fazem uso dos conceitos de orientação a objetos, a sua criação acaba ficando simplificada, pois uma
nova exceção simplesmente deve herdar do objeto Exception para se tornar uma exceção específica.

<?

class NovaExceção extends Exception {

function __construct($msg, $code = 0) {

parent::__construct($msg, $code);

?>

No exemplo, apenas a função __construct() foi redefinida para que o código passe a ter um
valor padrão sempre, independente do valor utilizado na instanciação do objeto. Demais modificações
na nova classe também poderão ser feitas.
REFERÊNCIAS

http://www.apachefriends.org/en/xampp.html

Um dos mais famosos instaladores para o pacote de desenvolvimento web usando PHP, MySQL e
Apache. Permite com poucos passos, instalar e colocar para executar um ambiente de
desenvolvimento. Este pacote vem com uma série de projetos livres e componentes que podem facilitar
em muito o trabalho de se desenvolver uma aplicação. Não recomendado para ambientes de produção.

http://www.apache.org

Local onde grandes projetos de software livre estão hospedados e podem ser obtidos por download
sem nenhum tipo de custo. Apenas para citar alguns dos projetos existentes, existem o Servidor Web
Apache, o Servidor de Aplicação Java Tomcat e o Ambiente de Desenvolvimento de JSP, Struts.

http://www.conceptia.com.br

Material fortemente baseado nos textos utilizados durante os treinamentos da empresa Conceptia
Consulting.

ttp://www.easyphp.org/
Um dos mais famosos instaladores para o pacote de desenvolvimento web usando PHP, MySQL e
Apache. Permite com poucos passos instalar e colocar para executar um ambiente de
desenvolvimento. Não recomendado para ambientes de produção.

http://guia-er.sourceforge.net/

Livro e guia rápido de expressões, muito bom, com diversos exemplos e casos práticos.
http://www.imaster.com.br

Site com diversas colunas nas mais variadas tecnologias de informação. Destaque especial para a
coluna sobre PHP, pois mostra diversos exemplos de aplicação e casos reais de programação em
PHP, além de falar sobre diversas nuances da linguagem, explicando como tirar o máximo proveito do
recurso.

http://www.microsoft.com/windows/ie/default.mspx

O navegador da Microsoft Internet Explorer é o atual dominante do mercado, estando presente na


imensa maioria dos computadores do mundo. Isso gerou uma grande disputa comercial no passado,
pois ao inserir o programa diretamente no sistema operacional Microsoft Windows, ele praticamente
eliminou a concorrência dos demais navegadores

http://www.mysql.com/

Um dos bancos de dados livres mais famosos e utilizados no mundo, sendo normalmente utilizado em
conjunto com o PHP para o desenvolvimento de soluções completas para pequenos e médios
sistemas. Está atualmente em sua versão 5.0 e pode ser obtido gratuitamente do site. A maior
diferença em relação ao PostGreSQL está no tamanho das bases de dados que cada um suporta,
sendo o PostGreSQL ainda mais robusto para sistemas críticos e de maior tamanho.

http://www.mozilla.com/firefox/

O Mozilla Firefox é um navegador Web de código livre e baseado no antigo Netscape Navigator. Cada
vez mais toma espaço do navegador Internet Explorer da Microsoft.

http://www.netscape.com/eng/mozilla/3.0/handbook/javascript/

A linguagem de programação Javascript pode ser utilizada para dar inteligência e comportamentos
específicos a páginas HTML de conteúdo estático. Uma referência completa pode ser encontrada no
site da Netscape, que foi a primeira empresa a oferecer suporte à tecnologia.
http://www.php.net

Referência para programação em PHP. Possui bibliotecas de todas as funções, disponíveis em PHP.
Parte de download de documentação de manuais e de ferramentas para programação em PHP. Muitos
exemplos, principalmente de usuários. Muito bom também como referência para as bibliotecas de
funções a bancos de dados.

http://www.postgresql.org/

Um dos bancos de dados livres mais famosos e utilizados no mundo. Possui como característica
marcante ser objeto-relacional, quer dizer, pode tanto trabalhar na perspectiva dos bancos de dados
relacionais (com tabelas na sua estrutura básica), bem como com objetos, trazendo uma série de
benefícios da orientação a objetos. Está atualmente em sua versão 8.3 e pode ser obtido gratuitamente
do site.

http://www.w3c.org

World Wide Web Consortium. Site de referência mundial para desenvolvimento Internet, pois concentra
todas as definições dos padrões utilizados. Possui um vasto material de consulta, do básico ao
avançado, além de diversos artigos técnicos e novas tendências mundiais no que toca ao avanço da
Internet.

Você também pode gostar