Desenv Web PHP e Book
Desenv Web PHP e Book
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
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
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.
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.
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.
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:
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.
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.
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>.
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.
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.
...
...
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: “#”.
...
...
Figura 03: Janela com a cor de fundo definida usando o valor #4D998F.
5 EXIBINDO INFORMAÇÕES
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.
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:
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>.
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.
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.
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.
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.
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.
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.
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.
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.
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:
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 “/”.
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:
Neste caso, o resultado será o redirecionamento para o link absoluto definido na tag href.
Usando um link relativo:
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
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
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.
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>
<table border=’1’>
<tr></tr>
<tr></tr>
<tr></tr>
</table>
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.
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’>
</table>
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’>
</table>
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>
</tr>
<tr>
</tr>
</table>
<table border=’1’>
<tr>
</tr>
<tr>
</tr>
</table>
9 LISTAS
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.
<ol>
</ol>
Ou:
<ul>
</ul>
Figura 17: Listas ordenadas e não ordenadas.
10 FORMULÁRIOS
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.
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>
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.
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.
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:
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.
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).
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.
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:
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:
Neste caso, o usuário poderia escolher qualquer combinação de cores, marcando uma, duas
ou as três opções.
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.
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.
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’>
</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.
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:
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
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.
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>
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
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.
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.
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.
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.
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.
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.
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.
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
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.
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.
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
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
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.
<?
$sobrenomes[0] = ‘Silva’;
$sobrenomes[1] = ‘Souza’;
$sobrenomes[2] = ‘Oliveira’;
?>
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:
<?
?>
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];
?>
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
em várias
linhas
*/
?>
<?
$i = 1;
$teste123 = 123;
$casa = “Endereço”;
$curso = “Computação”;
$CuRsO = 42;
$_8569 = 1.50;
?>
<?
$i += 1;
$valor *= 5;
$teste /= 2;
?>
<?
$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.
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:
<?
?>
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;
$altura = 1.83;
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
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
?>
<?
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.
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:
E ainda,
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:
ENTÃO comando_1
SENÃO comando_2
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 .= “ Silva”;
?>
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
$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
<?
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
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) {
} // if
$p = 500;
} // if
$str = “nome”;
if($str != “caracteres”)
echo
?>
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) {
} else {
$i = 31;
} // if
$p = 500;
} else {
} // 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.
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:
} // 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
<?
$contador = 0;
++$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.
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
?>
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
<?
$contador = 0;
do {
++$contador;
?>
É 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.
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)
?>
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
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.
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:
<?
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:
<?
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:
<?
$chave = 13;
$encontrou = 0;
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:
<?
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
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.
<?
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;
$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;
$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.
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();
?>
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.
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.
<?
if($lingua == 'BR') {
return date('d/m/yy');
} else {
return date('m/d/yy');
} // if
} // formato_data
?>
<?
?>
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.
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
?>
20 INCLUINDO ARQUIVOS
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.
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
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>
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
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.
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.
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:
<input
name=”nome”
type=”text”
</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:
<input
name=”nome”
type=”text”
value=”<?= $valor_nome ?>”>
</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.
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.
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.
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:
<?
$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.
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.
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:
<?
$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.
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:
<?
if(isset($_POST['nome'])) {
}
$resultado = pg_exec($q);
?>
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:
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:
<?
?> 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:
<?
?>
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:
<?
?>
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
?>
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
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).
<?
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.
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();
?>
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.
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();
?>
24 ORIENTAÇÃO A OBJETOS
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.
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;
$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.
Uma vez definida uma classe, ela poderá ser utilizada como base para futuras instanciações
de objetos.
<?
include 'Treinamento.php';
?>
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.
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';
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
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';
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.
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->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
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.
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.
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).
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.
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)) {
}
if(!eregi('[a-z]{6}', $senha)) {
?>
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.
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>
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.
<?
print_r($_FILES);
?>
Com base nesse supervetor, deve-se manipular o local onde o arquivo será salvo
remotamente.
<?
$dir_remoto = 'uploads';
if(move_uploaded_file($_FILES['arquivo']['tmp_name'], $destino)) {
$salvei = 1;
echo 'OK';
} else {
$salvei = 0;
echo 'NOK';
} // if
?>
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.
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) {
// 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
Vale lembrar que esse conjunto de novas funcionalidades só está disponível a partir do
PHP5.
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 {
} catch(Exception $e) {
print $e;
} // try
?>
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.
<?
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
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.