View
254
Download
12
Category
Preview:
DESCRIPTION
Aplicações Web de PHP na conteudo web
Citation preview
Aplicaes Web com PHP
Curso de Aplicaoes WEB em PHP
Autor:
Mauricio Vivas
Copyright (c) 2000, Mauricio Vivas de Souza Barreto. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. A copy of the license is included in the section entitled "GNU Free Documentation License".
Copyright (c) 2000, Mauricio Vivas de Souza Barreto E garantida a permisso para copiar, distribuir e/ou modificar este documento sob os termos da GNU Free Documentation License, verso 1.1 ou qualquer outra verso posterior publicada pela Free Software Foundation; sem obrigatoriedade de Sees Invariantes na abertura e ao final dos textos.
Uma copia da licena deve ser includa na seo intitulada GNU Free Documentation License.
ii
iii
ndice
NDICE..........................................................................................................................IV
NOTAS DO AUTOR......................................................................................................12
01. INTRODUO.........................................................................................................14
FUNCIONAMENTO BSICO DO PROTOCOLO HTTP...................................14CLIENT-SIDE SCRIPTS............................................................................15SERVER-SIDE SCRIPTS...........................................................................15O QUE PHP?.......................................................................................16O QUE PODE SER FEITO COM PHP?.......................................................17COMO SURGIU A LINGUAGEM PHP?......................................................17
02. ENVIANDO DADOS PARA O SERVIDOR HTTP.............................................19
O MTODO GET....................................................................................19HEADERS...............................................................................................20O MTODO POST..................................................................................21UTILIZANDO GET E POST....................................................................21
03. FORMULRIOS HTML.........................................................................................22
DEFININDO UM FORMULRIO................................................................22A TAG .....................................................................................22CAMPO DE TEXTO.................................................................................23
Parmetros:.....................................................................................23CAMPO DE TEXTO COM MSCARA........................................................23
Parmetros:.....................................................................................23CHECKBOX............................................................................................24
Parmetros:.....................................................................................24RADIO BUTTON.....................................................................................24
Parmetros:.....................................................................................24SUBMIT BUTTON....................................................................................24
Parmetros:.....................................................................................25RESET BUTTON......................................................................................25
Parmetros:.....................................................................................25BUTTON.................................................................................................25
Parmetros:.....................................................................................25TEXTAREA.............................................................................................25
Parmetros:.....................................................................................25SELECT..................................................................................................26
Parmetros:.....................................................................................26UPLOAD DE ARQUIVOS..........................................................................26
Parmetros:.....................................................................................2704. INSTALAO E CONFIGURAO EM AMBIENTE WINDOWS................28
SERVIDOR APACHE................................................................................28PHP.......................................................................................................29MYSQL..................................................................................................30
05. INSTALAO E CONFIGURAO EM AMBIENTE LINUX REDHAT.....32
iv
(DISPONVEL NA PRXIMA VERSO).....................................................3206. SINTAXE BSICA..................................................................................................33
DELIMITANDO O CDIGO PHP...............................................................33SEPARADOR DE INSTRUES.................................................................33NOMES DE VARIVEIS...........................................................................34COMENTRIOS.......................................................................................34
Comentrios de uma linha:..............................................................34Comentrios de mais de uma linha:.................................................34
IMPRIMINDO CDIGO HTML...................................................................35CRIANDO UM SCRIPT DE EXEMPLO........................................................35
07. TIPOS........................................................................................................................37
TIPOS SUPORTADOS...............................................................................37Inteiros (integer ou long)..................................................................37Nmeros em Ponto Flutuante (double ou float)...............................38Strings...............................................................................................38
Significado................................................................................................................39
Arrays...............................................................................................39Listas..............................................................................................................................40
Objetos..............................................................................................41Booleanos.........................................................................................41
TRANSFORMAO DE TIPOS..................................................................41Coeres...........................................................................................41Transformao explcita de tipos.....................................................42Com a funo settype........................................................................43
08. OPERADORES.........................................................................................................44
ARITMTICOS.........................................................................................44DE STRINGS............................................................................................44BIT A BIT................................................................................................44DE ATRIBUIO......................................................................................44LGICOS................................................................................................45COMPARAO.......................................................................................45EXPRESSO CONDICIONAL.....................................................................46DE INCREMENTO E DECREMENTO...........................................................46DE ERRO.................................................................................................47ORDEM DE PRECEDNCIA.......................................................................47
09. ESTRUTURAS DE CONTROLE...........................................................................49
BLOCOS.................................................................................................49COMANDOS DE SELEO.......................................................................49
if........................................................................................................49switch................................................................................................52
COMANDOS DE REPETIO....................................................................53while.................................................................................................53do... while.........................................................................................54for.....................................................................................................54foreach..............................................................................................55
QUEBRA DE FLUXO................................................................................56Break.................................................................................................56
v
Continue...........................................................................................5610. FUNES.................................................................................................................58
DEFININDO FUNES.............................................................................58VALOR DE RETORNO..............................................................................58ARGUMENTOS........................................................................................59
Passagem de parmetros por referncia..........................................59Argumentos com valores pr-definidos (default).............................60
CONTEXTO.............................................................................................61ESCOPO..................................................................................................61FUNES VARIVEIS.............................................................................62
11. VARIVEIS E CONSTANTES..............................................................................64
DECLARAO DE UMA VARIVEL.........................................................64O MODIFICADOR STATIC........................................................................64VARIVEIS VARIVEIS..........................................................................65VARIVEIS ENVIADAS PELO NAVEGADOR.............................................65
URLencode.......................................................................................66Utilizando arrays..............................................................................66
VARIVEIS DE AMBIENTE......................................................................67VERIFICANDO O TIPO DE UMA VARIVEL..............................................67
Funo que retorna o tipo da varivel.............................................68Funes que testam o tipo da varivel.............................................68
DESTRUINDO UMA VARIVEL................................................................68VERIFICANDO SE UMA VARIVEL POSSUI UM VALOR............................69
A funo isset....................................................................................69A funo empty.................................................................................69
CONSTANTES PR-DEFINIDAS................................................................69DEFININDO CONSTANTES.......................................................................70
12. CLASSES E OBJETOS...........................................................................................71
CLASSE..................................................................................................71OBJETO..................................................................................................71A VARIVEL $THIS................................................................................71SUBCLASSES..........................................................................................72CONSTRUTORES.....................................................................................72
13. NOES DE SQL....................................................................................................74
INTRODUO.........................................................................................74ESTRUTURA DAS TABELAS....................................................................75COMANDO CREATE................................................................................75
Comando Drop.................................................................................75Comando Alter..................................................................................76
MANIPULANDO DADOS DAS TABELAS...................................................76Comando SELECT............................................................................76Comando INSERT............................................................................77Comando UPDATE..........................................................................77Comando DELETE...........................................................................78
14. ACESSANDO O MYSQL VIA PHP.......................................................................80
ESTABELECENDO CONEXES.................................................................80SELECIONANDO A BASE DE DADOS........................................................80
vi
REALIZANDO CONSULTAS......................................................................81Apagando o resultado.......................................................................81Nmero de linhas..............................................................................81Utilizando os resultados...................................................................82Alterando o ponteiro de um resultado..............................................82
15. ACESSANDO O POSTGRESQL VIA PHP..........................................................84
ESTABELECENDO CONEXES.................................................................84REALIZANDO CONSULTAS......................................................................84
Verificando o erro na execuo de uma query.................................85Apagando o resultado.......................................................................85Nmero de linhas..............................................................................85Utilizando os resultados...................................................................85
16. UTILIZANDO HEADERS......................................................................................87
FUNO HEADERS_SENT........................................................................87BOOLEAN HEADERS_SENT (VOID);......................................................................87
17. UTILIZANDO COOKIES.......................................................................................88
O QUE SO.............................................................................................88GRAVANDO COOKIES.............................................................................88LENDO COOKIES GRAVADOS..................................................................89
18. MANIPULANDO ARQUIVOS...............................................................................90
COPIANDO ARQUIVOS...........................................................................90VERIFICANDO O TAMANHO DE UM ARQUIVO........................................90VERIFICANDO SE UM ARQUIVO EXISTE..................................................90LIMPANDO O CACHE..............................................................................91ABRINDO ARQUIVOS PARA LEITURA E/OU ESCRITA...............................91LENDO DE UM ARQUIVO........................................................................93ESCREVENDO EM UM ARQUIVO.............................................................93EXEMPLO...............................................................................................93UPLOADS COM FORMULRIOS HTML...................................................94
19. ENVIANDO E-MAIL...............................................................................................96
20. ALGUMAS FUNES TEIS...............................................................................97
CLASS_EXISTS E FUNCTION_EXISTS......................................................97DATE.....................................................................................................97NUMBER_FORMAT..................................................................................98SET_TIME_LIMIT....................................................................................98
21. BIBLIOGRAFIA E REFERNCIAS.....................................................................99
APNDICE 01 - FUNES PARA TRATAMENTO DE STRINGS.....................100
FUNES RELACIONADAS A HTML....................................................100htmlspecialchars.............................................................................100htmlentities.....................................................................................100nl2br...............................................................................................100get_meta_tags.................................................................................101strip_tags........................................................................................101urlencode........................................................................................101
vii
urldecode........................................................................................102FUNES RELACIONADAS A ARRAYS..................................................102
Implode e join.................................................................................102split.................................................................................................102explode............................................................................................103
COMPARAES ENTRE STRINGS..........................................................103similar_text.....................................................................................103strcasecmp......................................................................................103strcmp.............................................................................................104strstr................................................................................................104stristr...............................................................................................104strpos..............................................................................................104strrpos.............................................................................................104
FUNES PARA EDIO DE STRINGS...................................................105chop................................................................................................105ltrim................................................................................................105trim.................................................................................................105strrev...............................................................................................105strtolower........................................................................................106strtoupper.......................................................................................106ucfirst..............................................................................................106ucwords...........................................................................................106str_replace......................................................................................107
FUNES DIVERSAS.............................................................................107chr...................................................................................................107ord ..................................................................................................107echo ................................................................................................107print ...............................................................................................107strlen ..............................................................................................108
APNDICE 02 - FUNES PARA TRATAMENTO DE ARRAYS......................109
FUNES GENRICAS..........................................................................109Array...............................................................................................109range...............................................................................................109shuffle.............................................................................................110sizeof...............................................................................................110
FUNES DE NAVEGAO...............................................................110reset................................................................................................110end..................................................................................................110next.................................................................................................111prev.................................................................................................111pos...................................................................................................111key...................................................................................................111each.................................................................................................111
FUNES DE ORDENAO...................................................................112sort..................................................................................................112rsort................................................................................................112asort................................................................................................113arsort..............................................................................................113ksort................................................................................................113usort................................................................................................113
viii
uasort..............................................................................................113uksort..............................................................................................114
APNDICE 03 TIPOS SUPORTADOS PELO MYSQL.......................................115
NUMRICOS.........................................................................................115DATA E HORA......................................................................................115STRINGS...............................................................................................115
GNU FREE DOCUMENTATION LICENSE...........................................................117
0. PREAMBLE ..................................................................................1171. APPLICABILITY AND DEFINITIONS ......................................1172. VERBATIM COPYING ................................................................1183. COPYING IN QUANTITY ...........................................................1184. MODIFICATIONS ........................................................................1195. COMBINING DOCUMENTS .......................................................1206. COLLECTIONS OF DOCUMENTS ............................................1217. AGGREGATION WITH INDEPENDENT WORKS ...................1218. TRANSLATION ............................................................................121
ix
x
Notas do autor
Este documento foi criado inicialmente como parte do projeto de
concluso de curso da Universidade Federal de Sergipe, e distribudo gratuitamente
atravs da Internet.
Depois de terminado o projeto, recebi diversas sugestes sobre contedo a
incluir, e tambm passei a dar cursos de PHP em diversas instituies de Sergipe.
Diante disso, continuei a escrever o documento, sendo algumas incluses para atender
s sugestes e outras para utilizar nos cursos.
Como poder ser observado principalmente no captulo 05, o documento
no est concludo, e nem sei se algum dia estar, tendo em vista que o uso de PHP
cresce cada vez mais, e ainda falta muito a ser dito sobre ele aqui.
Se voc tem uma pgina com tutoriais, ou gostou deste documento e quer
public-lo em seu site, fique vontade para faz-lo. S peo duas coisas:
1. Me avise, informando a URL do site (s por curiosidade minha);
2. Lembre-se que o autor do documento sou eu. Apesar de ainda no ter
visto, j fui informado que h cpias piratas deste documento. Mas
quero lembrar que no preciso piratear algo completamente
GRATUITO.
Este documento pode ser encontrado nos seguintes sites:
http://www.tutoriais.com.br
http://www.lemon.com.br/canais/tutoriais/
http://www.cipsga.org.br/
O terceiro endereo o site do CIPSGA - Comit de Incentivo a Produo
do Software Gratuito e Alternativo, uma organizao no governamental que vem
realizando um grande trabalho no Brasil, buscando o desenvolvimento tecnolgico
atravs do software livre.
12
Se houver alguma informao incorreta, peo que me informem por e-
mail. Se tiverem dvidas sobre temas tratados aqui, ou at sobre os ainda no presentes
neste documento, entrem em contato comigo por e-mail. s vezes fico meio atarefado
no trabalho, e acabo ficando sem responder alguns e-mails. Pode insistir que no h
problema . Para obter a verso original do documento, voc pode pedir por e-mail, ou
visitar o site www.vivas.com.br.
Meu e-mail? mauricio@vivas.com.br ou mauricio@cipsga.org.br.
13
01. Introduo
Funcionamento bsico do protocolo http
O objetivo deste trecho explicar sem entrar muito em detalhes o que
acontece enquanto estamos navegando na World Wide Web, e mostrar algumas
peculiaridades do protocolo http.
Quando digitamos um endereo (URL) no navegador ou clicamos num
link, o navegador far uma requisio ao servidor http do tipo GET (ver captulo 02).
Essa requisio ter algumas linhas de cabealho (headers), e receber como resposta
um arquivo, tambm com linhas de cabealho, que geralmente uma pgina no formato
html. Se essa pgina contiver uma ou mais imagens (tag ), ser feita mais uma
requisio para cada imagem.
A maneira que o navegador tem de identificar se a resposta requisio
uma pgina html, um arquivo txt, uma imagem, um documento pdf, ou qualquer outro
formato atravs de um header de resposta chamado Content-type. Atravs do
contedo desta linha possvel identificar o tipo de arquivo (ver mais no captulo 16).
Assim que o arquivo de resposta enviado a conexo encerrada. Isso
faz com que cada nova pgina gere uma nova requisio completamente independente
da anterior, o que impede de haver uma identificao por parte do servidor da origem da
requisio. Sem artifcios seria impossvel fazer uma loja virtual, por exemplo, pois no
momento de pagar a compra o servidor no saberia quais os itens j selecionados, por
no haver ligao entre a requisio feita para selecionar o item e a requisio feita para
pagar a compra. O principal artifcio usado para isso o cookie (captulo 17), que tem a
funo de enviar uma identificao junto com cada requisio, tornando possvel a
associao entre as requisies.
Um outro problema do protocolo http que o servidor s pode enviar
informaes quando h uma solicitao. Ele nunca envia automaticamente informaes
para o navegador, e por isso no pode validar dados digitados sem que os mesmos sejam
enviados com uma requisio. A soluo para isso utilizar client-side scripts.
14
Client-Side Scripts
So responsveis pelas aes executadas no browser, sem contato com o
servidor. Os exemplos mais comuns de aplicaes client-side so imagens e textos que
mudam com o passar do mouse.
Os scripts client-side so muito teis para fazer validaes de formulrios
sem utilizar processamento do servidor e sem provocar trfego na rede. Outra utilizao
comum na construo de interfaces dinmicas e leves.
Figura 1. Funcionamento de scripts client-side
Server-Side Scripts
Os scripts server-side so responsveis pela criao de pginas em tempo
real. Num mecanismo de busca, por exemplo, seria invivel manter um arquivo para
cada consulta a ser realizada. O que existe um modelo da pgina de resposta, que
mesclado com os dados no momento em que a pgina requisitada.
O cliente (navegador) no capaz de diferenciar pginas estticas de
pginas dinmicas, a no ser que o script gerador da pgina dinmica envie alguma
informao desse tipo.
15
Figura 2. Requisio Normal
Figura 3. Requisio de pgina dinmica
O que PHP?
PHP uma linguagem que permite criar sites WEB dinmicos,
possibilitando uma interao com o usurio atravs de formulrios, parmetros da URL
e links. A diferena de PHP com relao a linguagens semelhantes a Javascript que o
cdigo PHP executado no servidor, sendo enviado para o cliente apenas html puro.
Desta maneira possvel interagir com bancos de dados e aplicaes existentes no
servidor, com a vantagem de no expor o cdigo fonte para o cliente. Isso pode ser til
16
quando o programa est lidando com senhas ou qualquer tipo de informao
confidencial.
O que diferencia PHP de um script CGI escrito em C ou Perl que o
cdigo PHP fica embutido no prprio HTML, enquanto no outro caso necessrio que
o script CGI gere todo o cdigo HTML, ou leia de um outro arquivo.
O que pode ser feito com PHP?
Basicamente, qualquer coisa que pode ser feita por algum programa CGI
pode ser feita tambm com PHP, como coletar dados de um formulrio, gerar pginas
dinamicamente ou enviar e receber cookies.
PHP tambm tem como uma das caractersticas mais importantes o
suporte a um grande nmero de bancos de dados, como dBase, Interbase, MS-SQL
Server, mySQL, Oracle, Sybase, PostgreSQL e vrios outros. Construir uma pgina
baseada em um banco de dados torna-se uma tarefa extremamente simples com PHP.
Alm disso, PHP tem suporte a outros servios atravs de protocolos
como IMAP, SNMP, NNTP, POP3 e, logicamente, HTTP. Ainda possvel abrir
sockets e interagir com outros protocolos.
Como surgiu a linguagem PHP?
A linguagem PHP foi concebida durante o outono de 1994 por Rasmus
Lerdorf. As primeiras verses no foram disponibilizadas, tendo sido utilizadas em sua
home-page apenas para que ele pudesse ter informaes sobre as visitas que estavam
sendo feitas. A primeira verso utilizada por outras pessoas foi disponibilizada em 1995,
e ficou conhecida como Personal Home Page Tools (ferramentas para pgina
pessoal). Era composta por um sistema bastante simples que interpretava algumas
macros e alguns utilitrios que rodavam por trs das home-pages: um livro de visitas,
um contador e algumas outras coisas.
Em meados de 1995 o interpretador foi reescrito, e ganhou o nome de
PHP/FI, o FI veio de um outro pacote escrito por Rasmus que interpretava dados de
17
formulrios HTML (Form Interpreter). Ele combinou os scripts do pacote Personal
Home Page Tools com o FI e adicionou suporte a mSQL, nascendo assim o PHP/FI, que
cresceu bastante, e as pessoas passaram a contribuir com o projeto.
Estima-se que em 1996 PHP/FI estava sendo usado por cerca de 15.000
sites pelo mundo, e em meados de 1997 esse nmero subiu para mais de 50.000. Nessa
poca houve uma mudana no desenvolvimento do PHP. Ele deixou de ser um projeto
de Rasmus com contribuies de outras pessoas para ter uma equipe de
desenvolvimento mais organizada. O interpretador foi reescrito por Zeev Suraski e
Andi Gutmans, e esse novo interpretador foi a base para a verso 3, chamada de PHP:
Hypertext Preprocessor.
O lanamento do PHP4, ocorrido em 22/05/2000, trouxe muitas
novidades aos programadores de PHP. Uma das principais foi o suporte a sesses,
bastante til pra identificar o cliente que solicitou determinada informao. Alm das
mudanas referentes a sintaxe e novos recursos de programao, o PHP4 trouxe como
novidade um otimizador chamado Zend, que permite a execuo muito mais rpida de
scripts PHP. A empresa que produz o Zend promete para este ano o lanamento de um
compilador de PHP. Cdigos compilados sero executados mais rapidamente, alm de
proteger o fonte da aplicao.
18
02. Enviando Dados para o Servidor HTTP
Programar para a web pode ser considerado como um jogo que consiste
em receber os dados do usurio, process-los e enviar a resposta dinmica. Uma vez
enviada a resposta, encerrado o contato entre o servidor e o cliente. Portanto a
primeira coisa a aprender como fazer para receber os dados enviados pelo browser
para o servidor.
O protocolo HTTP prov dois principais mtodos para enviar informaes
para o servidor web, alm da URL referente ao arquivo solicitado. Esses mtodos so o
POST e o GET.
O protocolo HTTP/1.0 tambm especifica o mtodo HEAD, utilizado
apenas para transmitir informaes do header, alm dos mtodos PUT e DELETE, que
no sero abordados neste curso.
O mtodo GET
A especificao do protocolo HTTP/0.9 (a primeira implementao do
HTTP) possua a definio do mtodo GET, utilizado pelo browser para solicitar um
documento especfico.
Por exemplo: a seguinte requisio HTTP retornaria o documento
"index.html", localizado no diretrio do servidor chamado teste:
GET /teste/index.html CRLF
Devemos notar que a requisio GET inicia com a palavra GET, inclui o
documento solicitado e encerra com a combinao dos caracteres carriage return e line
feed.
Para um melhor entendimento, voc pode fazer uma requisio GET
conectando diretamente em algum servidor WEB, conectando atravs de um programa
de telnet (geralmente o servidor http utiliza a porta 80). A resposta ser o cdigo da
pgina solicitada.telnet www.guia-aju.com.br 80Trying 200.241.59.16...Connected to www.guia-aju.com.br.Escape character is '^]'.GET /index.php3(... pgina solicitada ...)Connection closed by foreign host.
19
Obviamente a diferena do browser que ele trata as informaes
recebidas e exibe a pgina j formatada.
Atravs do mtodo GET tambm possvel passar parmetros da
requisio ao servidor, que pode tratar esses valores e at alterar a resposta a depender
deles, como no exemplo abaixo:telnet www.guia-aju.com.br 80Trying 200.241.59.16...Connected to www.guia-aju.com.br.Escape character is '^]'.GET /index.php3?id=0024horas&tipo=Taxi(... pgina solicitada ...)Connection closed by foreign host.
No exemplo so passados dois parmetros: id e tipo. Esses parmetros
esto no formato conhecido por URLencode.
Apesar de ser possvel passar parmetros utilizando o mtodo GET, e
com isso gerar pginas dinamicamente, este mtodo tem pelo menos dois problemas que
em determinadas circunstncias podem ser considerados srios:
O primeiro que o GET permite uma quantidade de dados passados
limitada a 1024 caracteres, o que pode gerar perda de informaes em certos casos.
O segundo que pelo fato de que as informaes fazem parte da URL,
todos os dados podem ser vistos pelo usurio. Isso pode ser extremamente perigoso
quando informaes sigilosas esto envolvidas (senha, por exemplo).
Headers
A verso 1.0 do protocolo HTTP trouxe boas inovaes ao mesmo. Uma
delas foi a criao de headers nas mensagens de requisio e de resposta. Os headers so
informaes trocadas entre o navegador e o servidor de maneira transparente ao usurio,
e podem conter dados sobre o tipo e a verso do navegador, a pgina de onde partiu a
requisio (link), os tipos de arquivos aceitos como resposta, e uma srie de outras
informaes.
Assim foi possvel definir um outro mtodo de requisio de arquivos,
que resolveu os principais problemas do mtodo GET.
20
O mtodo POST
Atravs da utilizao de headers possvel enviar os parmetros da URL
solicitada sem expor esses dados ao usurio, e tambm sem haver um limite de
tamanho.
Uma conexo ao servidor HTTP utilizando o mtodo POST seria algo
semelhante ao que segue:telnet www.guia-aju.com.br 80Trying 200.241.59.16...Connected to www.guia-aju.com.br.Escape character is '^]'.POST /index.php3Accept */*Content-type: application/x-www-form-urlencodedContent-length:22
id=0024horas&tipo=Taxi
(... pgina solicitada ...)Connection closed by foreign host.
Devemos observar os headers enviados ao servidor: a linha Accept
informa os tipos de dados que podem ser enviados como resposta (no caso, todos). A
linha Content-type informa o tipo de dado que est sendo enviado (urlencoded). O
terceiro header o mais importante pois informa o tamanho do corpo da mensagem, que
contm os parmetros. Aps todos os headers h um salto de linha e ento iniciado o
corpo da mensagem, no formato urlencoded.
Obviamente o usurio no deve se preocupar com os headers, em
codificar os dados ou em calcular o tamanho do corpo da mensagem. O browser faz isso
de maneira transparente.
Utilizando GET e POST
O mtodo GET pode ser utilizado atravs da digitao de um endereo no
local apropriado do navegador ou atravs de um hiperlink, ou seja, uma referncia de
uma pgina a outra. Nesses casos preciso converter os dados para o formato
urlencode. A terceira maneira de utilizar o GET atravs de formulrios HTML, e neste
caso o usurio no precisa se preocupar com a codificao dos dados. A utilizao de
formulrios HTML a nica maneira possvel de submeter dados pelo mtodo POST.
21
03. Formulrios HTML
Definindo um formulrio
Por ser uma linguagem de marcao, a sintaxe do HTML na maioria dos
casos exige uma tag de incio e uma de final daquele bloco. Exatamente isso que
ocorre com a definio de um formulrio: uma tag no incio e outra no final, sendo que
todos os elementos do formulrio devem estar entre as duas tags. Isto torna possvel a
incluso de mais de um formulrio num mesmo html. As tags citadas so:
Onde temos:
name: o identificador do formulrio. Utilizado principalmente em Scripts
client-side (JavaScript);
action: nome do script que receber os dados do formulrio ao ser
submetido. Mais frente esto abordadas as maneiras de tratar esses dados recebidos;
method: mtodo de envio dos dados: get ou post;
enctype: formato em que os dados sero enviados. O default
urlencoded. Se for utilizado um elemento do tipo upload de arquivo (file) preciso
utilizar o tipo multipart/form-data.
Exemplo:
(textos e elementos do form)
Cada elemento do formulrio deve possuir um nome que ir identific-lo
no momento em que o script indicado no ACTION for tratar os dados.
A tag
Muitos elementos de um formulrio html so definidos pela tag .
Cada tipo de elemento possui parmetros prprios, mas todos possuem pelo menos dois
22
parmetros em comum: type, que define o tipo de elemento, e name, que como j foi
dito define o nome daquele elemento.
Campo de Texto
O campo mais comum em formulrios. Exibe na tela um campo para
entrada de texto com apenas uma linha.
Parmetros:
Value o valor pr-definido do elemento, que aparecer quando a pgina
for carregada;
Size O tamanho do elemento na tela, em caracteres;
Maxlength O tamanho mximo do texto contido no elemento, em
caracteres;
Campo de Texto com Mscara
Tipo de campo semelhante ao anterior, com a diferena que neste caso os
dados digitados so substitudos por asteriscos, e por isso so os mais recomendados
para campos que devam conter senhas. importante salientar que nenhuma criptografia
utilizada. Apenas no aparece na tela o que est sendo digitado.
Parmetros:
Value o valor pr-definido do elemento, que aparecer quando a pgina
for carregada;
Size O tamanho do elemento na tela, em caracteres;
Maxlength O tamanho mximo do texto contido no elemento, em
caracteres;
23
Checkbox
Utilizado para campos de mltipla escolha, onde o usurio pode marcar
mais de uma opo.
Parmetros:
Value o valor que ser enviado ao servidor quando o formulrio for
submetido, no caso do campo estar marcado
Checked O estado inicial do elemento. Quando presente, o elemento j
aparece marcado;
Radio Button
Utilizado para campos de mltipla escolha, onde o usurio pode marcar
apenas uma opo. Para agrupar vrios elementos deste tipo, fazendo com que eles
sejam exclusivos, basta atribuir o mesmo nome a todos do grupo.
Parmetros:
Value o valor que ser enviado ao servidor quando o formulrio for
submetido, no caso do campo estar marcado
Checked O estado inicial do elemento. Quando presente, o elemento j
aparece marcado;
Submit Button
Utilizado para enviar os dados do formulrio para o script descrito na
seo action da definio do formulrio
24
Parmetros:
Value o texto que aparecer no corpo do boto.
Reset Button
Utilizado para fazer todos os campos do formulrio retornem ao valor
original, quando a pgina foi carregada. Bastante utilizado como boto limpar, mas na
realidade s limpa os campos se todos eles tm como valor uma string vazia.
Parmetros:
Value o texto que aparecer no corpo do boto.
Button
Utilizado normalmente para ativar funes de scripts client-side
(JavaScript, por exemplo). Sem essa utilizao, no produz efeito algum
Parmetros:
Value o texto que aparecer no corpo do boto.
TextArea
texto
Exibe na tela uma caixa de texto, com o tamanho definido pelos
parmetros cols e rows.
Parmetros:
Cols nmero de colunas do campo, em caracteres;
Rows nmero de linhas do campo, em caracteres;
25
Wrap Maneira como so tratadas as quebras de linha automticas. O
valor soft faz com que o texto quebre somente na tela, sendo enviado para o servidor
o texto da maneira como foi digitado; O valor hard faz com que seja enviado para o
servidor da maneira como o texto aparece na tela, com todas as quebras de linhas
inseridas automaticamente; o valor off faz com que o texto no quebre na tela e nem
quando enviado ao servidor.
Value O elemento do tipo textarea no possui o parmetro value. O
valor pr-definido do campo o texto que fica entre as tags e .
Select
texto
Se o parmetro size tiver o valor 1 e no houver o parmetro
multiple, exibe na tela uma combo box. Caso contrrio, exibe na tela uma select
list.
Parmetros:
Size nmero de linhas exibidas. Default: 1;
Multiple parmetro que, se presente, permite que sejam selecionadas
duas ou mais linhas, atravs das teclas Control ou Shift;
option Cada item do tipo option acrescenta uma linha ao select;
value Valor a ser enviado ao servidor se aquele elemento for
selecionado. Default: o texto do item;
text valor a ser exibido para aquele item. No definido por um
parmetro, mas pelo texto que fica entre as tags e
Upload de arquivos
26
Exibe na tela do browser um campo de texto e um boto, que ao clicado
abre uma janela para localizar um arquivo no disco. Para utilizar este tipo de
componente, o formulrio dever utilizar o mtodo POST e ter o parmetro enctype
com o valor "multipart/form-data".
Parmetros:
Size O tamanho do campo de texto exibido.
27
04. Instalao e configurao em ambiente windows
Servidor Apache
O servidor http que ser utilizado neste curso o Apache, que est
disponvel para download em http://www.apache.org/httpd.html. A instalao do
Apache bastante simples, similar a qualquer aplicao windows. Para usurios do
Windows 95 o winsock2 deve estar instalado no sistema. Se no estiver, o download
pode ser feito em:http://www.microsoft.com/windows95/downloads/contents/wuadmintools/s_wunetworkingtools/w95sockets2/
Depois de instalado, necessrio fazer a configurao do servidor,
atravs do arquivo httpd.conf. Todas as configuraes esto comentadas. O mnimo que
deve ser configurado o diretrio onde os documentos estaro, atravs da opo
DocumentRoot. Basta procurar a opo e escrever o nome do diretrio em seguida,
como no exemplo:DocumentRoot "C:\vivas\"
Uma outra configurao bsica a DirectoryIndex, que informa ao
servidor quais os arquivos sero exibidos automaticamente como ndice do diretrio.
isso que faz com que ao digitar, por exemplo, www.guia-aju.com.br, o servidor saiba
qual dos arquivos do diretrio deve ser exibido. Abaixo temos um exemplo da
utilizao do DirectoryIndex:
DirectoryIndex index.html index.htm index.php3
Para executar o servidor Apache, basta ir ao diretrio onde foi instalado e
digitar Apache. Na primeira execuo recomendvel fazer isso pelo prompt do
DOS, para verificar qualquer mensagem de erro. Um erro comum ocorre na linha
ServerName, que deve ser configurada com o endereo ip da mquina.
ServerName 192.168.1.1
Feito isso, crie um arquivo com um dos nomes definidos como ndice e
coloque no diretrio definido como root. Execute o servidor Apache e tente acessar o
endereo http://localhost pelo browser. Se a pgina for exibida, porque o servidor
foi instalado corretamente.
28
PHP
O PHP pode ser conseguido em www.php.net, e sua instalao tambm
simples. Atualmente existem duas opes de download: a primeira no formato
padro de instaladores do Windows, e neste caso no necessrio explicar, j que o
padro citado bastante simples. Para quem gosta de sujar as mos, existe a opo
de download dos arquivos em formato zip, que necessitam de configurao manual.
Veremos a seguir os passos necessrios para isso:
Descompactar os arquivos para algum diretrio (no nosso exemplo,
c:\php)
Renomear o arquivo de configurao. O arquivo php.ini-dist deve
ser renomeado (ou copiado) para php.ini. Depois disso, o arquivo pode ser editado,
bastando modificar a linha extension_dir, que deve conter o diretrio onde esto os
mdulos (c:\php). Veja o exemplo:
extension_dir = c:\php
Alm disso necessrio descomentar a linha referente o mdulo mysql, j
que iremos utiliz-lo. Basta tirar o ; (ponto-e-vrgula) do incio da linha:;extension=php_mysql.dll
Feito isso, podemos partir para a configurao do servidor Apache,
necessria para que este reconhea o PHP. Editando novamente o arquivo httpd.conf, as
linhas a seguir devem ser adicionadas no final do arquivo:
ScriptAlias /php/ "c:/php/" AddType application/x-httpd-php .php4 .phpAction application/x-httpd-php "/php/php.exe"
A primeira linha cria um atalho (chamado de /php/) para o diretrio onde
est o PHP. A Instruo ScriptAlias cria no Apache um atalho vlido apenas para
execuo de programas.
A segunda linha cria um tipo para o PHP, associando todos os arquivos
com as extenses .php4 e .php ao interpretador PHP, aqui chamado de
application/x-httpd-php.
A terceira linha define que o executvel do interpretador PHP, chamado
pelo Apache de application/x-httpd-php, o /php/php.exe. Observe que o
29
diretrio o mesmo definido na linha acima, e na verdade um atalho para o arquivo
c:/php/php.exe.
Depois de salvar o arquivo, podemos testar se a instalao do PHP foi
bem sucedida. A melhor maneira criar um arquivo chamado teste.php e salvar no
diretrio raiz (DocumentRoot) do servidor Apache. O arquivo deve conter a seguinte
informao:
Acessando a pgina atravs do servidor
(http://localhost/teste.php), devemos ter como resultado uma listagem de
todas as configuraes do PHP, incluindo o mdulo mysql, que foi definido como ativo
no arquivo php.ini.
mySQL
O banco de dados mySQL pode ser conseguido em
http://www.mysql.com/. Sua instalao tambm bastante simples, tambm no
modelo de instalao de qualquer aplicativo para Windows.
As configuraes necessrias so relativas a segurana, e exigem um
conhecimento mais avanado de administrao de servidores. Como essa instalao
destina-se apenas a praticar o PHP, no necessrio fazer muitas alteraes na
segurana, bastando apenas saber como adicionar usurios.
Para isto, basta utilizar o comando GRANT, que tem a seguinte sintaxe:GRANT privilegio [(lista_colunas)] [, privilegio [(colunas)] ...] ON {tabela | * | *.* | db.*} TO usuario [IDENTIFIED BY senha'] [, usuario [IDENTIFIED BY senha'] ...] [WITH GRANT OPTION]
Onde privilgio uma das palavras reservadas listadas a seguir:ALL PRIVILEGESFILERELOADALTER
INDEX SELECT CREATE INSERT
SHUTDOWN DELETE PROCESS UPDATE
DROP REFERENCES USAGE
30
Cada palavra representa um tipo de acesso (s) coluna(s), tabela(s) ou
base(s) de dados listadas logo depois da clusula ON.
usuario deve conter o nome do usurio (login) e o host permitido (ex.:
teste@localhost).
Abaixo temos um exemplo da utilizao do comando grant:GRANT SELECT, INSERT, UPDATE ON *TO vivas@localhost IDENTIFIED BY senhateste;
O exemplo cria o usurio vivas, com a senha senhateste, que s pode
acessar da mesma mquina onde est o servidor (localhost), e s pode utilizar os
comandos select, insert e update.
Tambm possvel adicionar usurios utilizando o comando INSERT,
pra alterar diretamente na tabela de privilgios, que a tabela user da base de dados
mysql, que possui os campos para definir nome de usurio, host, senha, e permisses
especficas. Utilizando este mtodo preciso reiniciar o servidor, ou executar o
comando FLUSH PRIVILEGES, para que as alteraes tenham efeito.
31
05. Instalao e configurao em ambiente linux RedHat
(Disponvel na prxima verso)
32
06. Sintaxe Bsica
Delimitando o cdigo PHP
O cdigo PHP fica embutido no prprio HTML. O interpretador identifica
quando um cdigo PHP pelas seguintes tags:
comandos
O tipo de tag mais utilizado o terceiro, que consiste em uma
abreviao do primeiro. Para utiliz-lo, necessrio habilitar a opo short-tags na
configurao do PHP. O ltimo tipo serve para facilitar o uso por programadores
acostumados sintaxe de ASP. Para utiliz-lo tambm necessrio habilit-lo no PHP,
atravs do arquivo de configurao php.ini.
Separador de instrues
Entre cada instruo em PHP preciso utilizar o ponto-e-vrgula, assim
como em C, Perl e outras linguagens mais conhecidas. Na ltima instruo do bloco de
script no necessrio o uso do ponto-e-vrgula, mas por questes estticas recomenda-
se o uso sempre.
33
Nomes de variveis
Toda varivel em PHP tem seu nome composto pelo caracter $ e uma
string, que deve iniciar por uma letra ou o caracter _. PHP case sensitive, ou seja,
as variveis $vivas e $VIVAS so diferentes. Por isso preciso ter muito cuidado ao
definir os nomes das variveis. bom evitar os nomes em maisculas, pois como
veremos mais adiante, o PHP j possui alguma variveis pr-definidas cujos nomes so
formados por letras maisculas.
Comentrios
H dois tipos de comentrios em cdigo PHP:
Comentrios de uma linha:
Marca como comentrio at o final da linha ou at o final do bloco de
cdigo PHP o que vier antes. Pode ser delimitado pelo caracter # ou por duas barras
( // ).
Exemplo:
Comentrios de mais de uma linha:
Tem como delimitadores os caracteres /* para o incio do bloco e
*/ para o final do comentrio. Se o delimitador de final de cdigo PHP ( ?> )
estiver dentro de um comentrio, no ser reconhecido pelo interpretador.
34
Exemplos:
*/
Imprimindo cdigo html
Um script php geralmente tem como resultado uma pgina html, ou
algum outro texto. Para gerar esse resultado, deve ser utilizada uma das funes de
impresso, echo e print. Para utiliz-las deve-se utilizar um dos seguintes formatos:
print(argumento);echo (argumento1, argumento2, ... );echo argumento;
Criando um script de exemplo
O exemplo abaixo demonstra como funciona um script executado no
servidor (no nosso caso, PHP). Vamos criar o arquivo hello.php e coloca-lo no
diretrio de documentos do Apache, com o seguinte contedo:
35
Ao acessar o arquivo atravs do servidor Apache
(http://localhost/hello.php), e utilizando a opo visualizar cdigo fonte do
browser, veremos o seguinte:
Hello World
Hello World
Isso demonstra que o script executado no servidor e s o resultado
enviado para o browser, impedindo que o usurio veja o contedo do script.
36
07. Tipos
Tipos Suportados
PHP suporta os seguintes tipos de dados:
Inteiro
Ponto flutuante
String
Array
Objeto
Booleano
PHP utiliza checagem de tipos dinmica, ou seja, uma varivel pode
conter valores de diferentes tipos em diferentes momentos da execuo do script. Por
este motivo no necessrio declarar o tipo de uma varivel para us-la. O interpretador
PHP decidir qual o tipo daquela varivel, verificando o contedo em tempo de
execuo.
Ainda assim, permitido converter os valores de um tipo para outro
desejado, utilizando o typecasting ou a funo settype (ver adiante).
Inteiros (integer ou long)
Uma varivel pode conter um valor inteiro com atribuies que sigam as
seguintes sintaxes:
$vivas = 1234; # inteiro positivo na base decimal$vivas = -234; # inteiro negativo na base decimal$vivas = 0234; # inteiro na base octal-simbolizado pelo 0
# equivale a 156 decimal$vivas = 0x34; # inteiro na base hexadecimal(simbolizado
# pelo 0x) equivale a 52 decimal.
37
A diferena entre inteiros simples e long est no nmero de bytes
utilizados para armazenar a varivel. Como a escolha feita pelo interpretador PHP de
maneira transparente para o usurio, podemos afirmar que os tipos so iguais.
Nmeros em Ponto Flutuante (double ou float)
Uma varivel pode ter um valor em ponto flutuante com atribuies que
sigam as seguintes sintaxes:
$vivas = 1.234;$vivas = 23e4; # equivale a 230.000
Strings
Strings podem ser atribudas de duas maneiras:
a) utilizando aspas simples ( ' ) Desta maneira, o valor da varivel ser exatamente o
texto contido entre as aspas (com exceo de \\ e \' ver tabela abaixo)
b) utilizando aspas duplas ( " ) Desta maneira, qualquer varivel ou caracter de
escape ser expandido antes de ser atribudo.
Exemplo:
A sada desse script ser "---$teste--\n".
A sada desse script ser "---Mauricio--" (com uma quebra de linha no
final).
38
A tabela seguinte lista os caracteres de escape:
Sintaxe Significado\n Nova linha\r Retorno de carro (semelhante a \n)\t Tabulao horizontal\\ A prpria barra ( \ )\$ O smbolo $\ Aspa simples\ Aspa dupla
No apndice 01 est disponvel uma lista das funes utilizadas no
tratamento de strings.
Arrays
Arrays em PHP podem ser observados como mapeamentos ou como
vetores indexados. Mais precisamente, um valor do tipo array um dicionrio onde os
ndices so as chaves de acesso. Vale ressaltar que os ndices podem ser valores de
qualquer tipo e no somente inteiros. Inclusive, se os ndices forem todos inteiros, estes
no precisam formar um intervalo contnuo
Como a checagem de tipos em PHP dinmica, valores de tipos
diferentes podem ser usados como ndices de array, assim como os valores mapeados
tambm podem ser de diversos tipos.Exemplo:
Equivalentemente, pode-se escrever:
39
Listas
As listas so utilizadas em PHP para realizar atribuies mltiplas.
Atravs de listas possvel atribuir valores que esto num array para variveis. Vejamos
o exemplo:
Exemplo:
list($a, $b, $c) = array(a, b, c);
O comando acima atribui valores s trs variveis simultaneamente.
bom notar que s so atribudos s variveis da lista os elementos do array que possuem
ndices inteiros e no negativos. No exemplo acima as trs atribuies foram bem
sucedidas porque ao inicializar um array sem especificar os ndices eles passam a ser
inteiros, a partir do zero. Um fator importante que cada varivel da lista possui um
ndice inteiro e ordinal, iniciando com zero, que serve para determinar qual valor ser
atribudo. No exemplo anterior temos $a com ndice 0, $b com ndice 1 e $c com ndice
2. Vejamos um outro exemplo:
$arr = array(1=>um,3=>tres,a=>letraA,2=>dois);list($a,$b,$c,$d) = $arr;
Aps a execuo do cdigo acima temos os seguintes valores:$a == null$b == um$c == dois$d == tres
Devemos observar que varivel $a no foi atribudo valor, pois no array
no existe elemento com ndice 0 (zero). Outro detalhe importante que o valor tres
foi atribudo varivel $d, e no a $b, pois seu ndice 3, o mesmo que $d na lista. Por
fim, vemos que o valor letraA no foi atribudo a elemento algum da lista pois seu
ndice no inteiro.
Os ndices da lista servem apenas como referncia ao interpretador PHP
para realizar as atribuies, no podendo ser acessados de maneira alguma pelo
programador. De maneira diferente do array, uma lista no pode ser atribuda a uma
varivel, servindo apenas para fazer mltiplas atribuies atravs de um array.
No apndice 02 est disponvel uma lista das funes mais comuns para o
tratamento de arrays.
40
Objetos
Um objeto pode ser inicializado utilizando o comando new para instanciar
uma classe para uma varivel.
Exemplo:class teste {
function nada() {echo nada;
}}
$vivas = new teste;$vivas -> nada();
A utilizao de objetos ser mais detalhada no captulo 12.
Booleanos
O tipo booleano foi implementado na verso 4 do PHP, mas nessa verso
o funcionamento completamente compatvel com a verso anterior, ou seja: a maneira
de avaliar as expresses e retornar true ou false atravs do tipo integer: usado o
valor 0 (zero) ou vazio (String vazia) para representar o estado false, e qualquer valor
diferente de zero (geralmente 1) para representar o estado true.
Transformao de tipos
A transformao de tipos em PHP pode ser feita das seguintes maneiras:
Coeres
Quando ocorrem determinadas operaes (+, por exemplo) entre dois
valores de tipos diferentes, o PHP converte o valor de um deles automaticamente
(coero). interessante notar que se o operando for uma varivel, seu valor no ser
alterado.
O tipo para o qual os valores dos operandos sero convertidos
determinado da seguinte forma: Se um dos operandos for float, o outro ser
41
convertido para float, seno, se um deles for integer, o outro ser convertido para
integer.
Exemplo:$vivas = 1; // $vivas a string 1$vivas = $vivas + 1; // $vivas o integer 2$vivas = $vivas + 3.7;// $vivas o double 5.7$vivas = 1 + 1.5 // $vivas o double 2.5
Como podemos notar, o PHP converte string para integer ou
double mantendo o valor. O sistema utilizado pelo PHP para converter de strings para
nmeros o seguinte:
- analisado o incio da string. Se contiver um nmero, ele ser
avaliado. Seno, o valor ser 0 (zero);
- O nmero pode conter um sinal no incio (+ ou -);
- Se a string contiver um ponto em sua parte numrica a ser
analisada, ele ser considerado, e o valor obtido ser double;
- Se a string contiver um e ou E em sua parte numrica a ser
analisada, o valor seguinte ser considerado como expoente da base
10, e o valor obtido ser double;
Exemplos:$vivas = 1 + 10.5; // $vivas == 11.5$vivas = 1 + -1.3e3; // $vivas == -1299$vivas = 1 + teste10.5; // $vivas == 1$vivas = 1 + 10testes; // $vivas == 11$vivas = 1 + " 10testes"; // $vivas == 11$vivas = 1 + "+ 10testes"; // $vivas == 1
Transformao explcita de tipos
A sintaxe do typecast de PHP semelhante ao C: basta escrever o tipo
entre parenteses antes do valor
Exemplo:$vivas = 15; // $vivas integer (15)
42
$vivas = (double) $vivas // $vivas double (15.0)$vivas = 3.9 // $vivas double (3.9)$vivas = (int) $vivas // $vivas integer (3)
// o valor decimal truncado
Os tipos de cast permitidos so:
(int), (integer) muda para integer;
(real), (double), (float) muda para float;
(string) muda para string;
(array) muda para array;
(object) muda para objeto.
Com a funo settype
A funo settype converte uma varivel para o tipo especificado, que
pode ser integer, double, string, array ou object.
Exemplo:$vivas = 15; // $vivas integersettype($vivas,double) // $vivas double
43
08. Operadores
Aritmticos
S podem ser utilizados quando os operandos so nmeros (integer ou
float). Se forem de outro tipo, tero seus valores convertidos antes da realizao da
operao.
+ adio- subtrao* multiplicao/ diviso% mdulo
de strings
S h um operador exclusivo para strings:
. concatenao
bit a bit
Comparam dois nmeros bit a bit.
& e lgico| ou lgico^ ou exclusivo~ no (inverso)> shift right
de atribuio
44
Existe um operador bsico de atribuio e diversos derivados. Sempre
retornam o valor atribudo. No caso dos operadores derivados de atribuio, a operao
feita entre os dois operandos, sendo atribudo o resultado para o primeiro. A atribuio
sempre por valor, e no por referncia.
= atribuio simples+= atribuio com adio-= atribuio com subtrao*= atribuio com multiplicao/= atribuio com diviso%= atribuio com mdulo.= atribuio com concatenao&= atribuio com e lgico|= atribuio com ou lgico^= atribuio com ou exclusivo= atribuio com shift right
Exemplo:
$a = 7;$a += 2; // $a passa a conter o valor 9
Lgicos
Utilizados para inteiros representando valores booleanos
and e lgicoor ou lgicoxor ou exclusivo! no (inverso)&& e lgico|| ou lgico
Existem dois operadores para e e para ou porque eles tm diferentes
posies na ordem de precedncia.
Comparao
45
As comparaes so feitas entre os valores contidos nas variveis, e no
as referncias. Sempre retornam um valor booleano.
== igual a=== exatamente igual a!= diferente de< menor que> maior que= maior ou igual a
A diferena entre os operadores == e === pode ser percebida no seguinte
exemplo:$letra = 10;$numero = 10;if ($letra == $numero) // Avaliado como true...if ($letra === $numero) // Avaliado como false...
Expresso condicional
Existe um operador de seleo que ternrio. Funciona assim:
(expressao1)?(expressao2):( expressao3)
o interpretador PHP avalia a primeira expresso. Se ela for verdadeira, a
expresso retorna o valor de expresso2. Seno, retorna o valor de expresso3.
de incremento e decremento
++ incremento-- decremento
Podem ser utilizados de duas formas: antes ou depois da varivel. Quando
utilizado antes, retorna o valor da varivel antes de increment-la ou decrement-la.
Quando utilizado depois, retorna o valor da varivel j incrementado ou decrementado.
46
Exemplos:
$a = $b = 10; // $a e $b recebem o valor 10$c = $a++; // $c recebe 10 e $a passa a ter 11$d = ++$b; // $d recebe 11, valor de $b j incrementado
de erro
PHP suporta um operador para controlar erros:
@ Operador de controle de erros
Quando esse operador utilizado antes de uma expresso, qualquer
mensagem de erro que possa ser gerada pela expresso ser omitida. Se a opo
track_errors estiver habilitada no arquivo php.ini, a mensagem de erro ser
armazenada na varivel $php_errormsg. Vale lembrar que a cada erro ocorrido a
varivel ter seu valor substitudo e, portanto, dever ser checada logo aps a linha
geradora do erro.
Ordem Operadores07 ? :08 ||09 &&10 |11 ^12 &13 == != === !==14 < >=15 >16 + - .17 * / %18 ! ~ ++ -- (int) (double) (string) (array) (object) @19 [20 new
48
09. Estruturas de Controle
As estruturas que veremos a seguir so comuns para as linguagens de
programao imperativas, bastando, portanto, descrever a sintaxe de cada uma delas,
resumindo o funcionamento.
Blocos
Um bloco consiste de vrios comandos agrupados com o objetivo de
relacion-los com determinado comando ou funo. Em comandos como if, for,
while, switch e em declaraes de funes blocos podem ser utilizados para permitir
que um comando faa parte do contexto desejado. Blocos em PHP so delimitados pelos
caracteres { e }. A utilizao dos delimitadores de bloco em uma parte qualquer do
cdigo no relacionada com os comandos citados ou funes no produzir efeito
algum, e ser tratada normalmente pelo interpretador.Exemplo:if ($x == $y) comando1; comando2;
Para que comando2 esteja relacionado ao if preciso utilizar um bloco:
if ($x == $y){ comando1; comando2;}
Comandos de seleo
Tambm chamados de condicionais, os comandos de seleo permitem
executar comandos ou blocos de comandos com base em testes feitos durante a
execuo.
if
O mais trivial dos comandos condicionais o if. Ele testa a condio e
executa o comando indicado se o resultado for true (valor diferente de zero). Ele
possui duas sintaxes:
49
if (expresso) comando;
if (expresso): comando; . . . comando;endif;
Para incluir mais de um comando no if da primeira sintaxe, preciso
utilizar um bloco, demarcado por chaves.
O else um complemento opcional para o if. Se utilizado, o comando
ser executado se a expresso retornar o valor false (zero). Suas duas sintaxes so:
if (expresso) comando;else comando;
if (expresso): comando; . . . comando;else comando; . . . comando;endif;
A seguir, temos um exemplo do comando if utilizado com else:
if ($a > $b) $maior = $a;else $maior = $b;
O exemplo acima coloca em $maior o maior valor entre $a e $b
Em determinadas situaes necessrio fazer mais de um teste, e executar
condicionalmente diversos comandos ou blocos de comandos. Para facilitar o
entendimento de uma estrutura do tipo:
50
if (expressao1) comando1;else if (expressao2) comando2; else if (expressao3) comando3; else comando4;
foi criado o comando, tambm opcional elseif. Ele tem a mesma
funo de um else e um if usados sequencialmente, como no exemplo acima. Num
mesmo if podem ser utilizados diversos elseifs, ficando essa utilizao a critrio do
programador, que deve zelar pela legibilidade de seu script.
O comando elseif tambm pode ser utilizado com dois tipos de sintaxe.
Em resumo, a sintaxe geral do comando if fica das seguintes maneiras:
if (expressao1) comando;[ elseif (expressao2) comando; ][ else comando; ]
if (expressao1) : comando; . . . comando;[ elseif (expressao2) comando; . . . comando; ][ else comando; . . . comando; ]endif;
51
switch
O comando switch atua de maneira semelhante a uma srie de
comandos if na mesma expresso. Frequentemente o programador pode querer
comparar uma varivel com diversos valores, e executar um cdigo diferente a depender
de qual valor igual ao da varivel. Quando isso for necessrio, deve-se usar o
comando switch. O exemplo seguinte mostra dois trechos de cdigo que fazem a
mesma coisa, sendo que o primeiro utiliza uma srie de ifs e o segundo utiliza
switch:
if ($i == 0) print i igual a zero;elseif ($i == 1) print i igual a um;elseif ($i == 2) print i igual a dois;
switch ($i) {case 0: print i igual a zero; break;case 1: print i igual a um; break;case 2: print i igual a dois; break;}
importante compreender o funcionamento do switch para no cometer
enganos. O comando switch testa linha a linha os cases encontrados, e a partir do
momento que encontra um valor igual ao da varivel testada, passa a executar todos os
comandos seguintes, mesmo os que fazem parte de outro teste, at o fim do bloco. por
isso usa-se o comando break, quebrando o fluxo e fazendo com que o cdigo seja
executado da maneira desejada. Veremos mais sobre o break mais adiante. Veja o
exemplo:
switch ($i) {case 0: print i igual a zero;case 1: print i igual a um;
52
case 2: print i igual a dois;
}
No exemplo acima, se $i for igual a zero, os trs comandos print sero
executados. Se $i for igual a 1, os dois ltimos print sero executados. O comando s
funcionar da maneira desejada se $i for igual a 2.
Em outras linguagens que implementam o comando switch, ou similar, os
valores a serem testados s podem ser do tipo inteiro. Em PHP permitido usar valores
do tipo string como elementos de teste do comando switch. O exemplo abaixo funciona
perfeitamente:
switch ($s) {case casa: print A casa amarela;case arvore: print a rvore bonita;case lampada: print joao apagou a lampada;
}
comandos de repetio
while
O while o comando de repetio (lao) mais simples. Ele testa uma
condio e executa um comando, ou um bloco de comandos, at que a condio testada
seja falsa. Assim como o if, o while tambm possui duas sintaxes alternativas:
while () ;
while (): ; . . . ;endwhile;
53
A expresso s testada a cada vez que o bloco de instrues termina,
alm do teste inicial. Se o valor da expresso passar a ser false no meio do bloco de
instrues, a execuo segue at o final do bloco. Se no teste inicial a condio for
avaliada como false, o bloco de comandos no ser executado.
O exemplo a seguir mostra o uso do while para imprimir os nmeros de
1 a 10:$i = 1;while ($i
for (;;) ;
for (;;) : ; . . . ;endfor;
As trs expresses que ficam entre parnteses tm as seguintes
finalidades:
Inicializao: comando ou sequencia de comandos a serem realizados
antes do inicio do lao. Serve para inicializar variveis.
Condio: Expresso booleana que define se os comandos que esto
dentro do lao sero executados ou no. Enquanto a expresso for verdadeira (valor
diferente de zero) os comandos sero executados.
Incremento: Comando executado ao final de cada execuo do lao.
Um comando for funciona de maneira semelhante a um while escrito
da seguinte forma:
while () {comandos...}
foreach
Na verso 4 do PHP foi includo mais um comando de repetio, utilizado
para percorrer os elementos de um array. Sua sintaxe :foreach(array as $valor) expressaoforeach(array as $chave => $valor) expressao
Sendo que expressao pode conter um bloco de expresses. O
funcionamento do comando foreach bastante simples: no incio da execuo o array
reiniciado, ou seja, o ponteiro do array passa a apontar para o primeiro elemento,
dispensando o uso da funo reset. A cada execuo do lao um elemento do array
55
selecionado, atribuindo valor s variveis $valor e $chave com o valor e a chave do
elemento selecionado, sendo que essas variveis podem ser utilizadas dentro do lao.
Exemplo: foreach ($arr as $key => $value) { echo "Chave:
$key; Valor: $value
\n";}
Quebra de fluxo
Break
O comando break pode ser utilizado em laos de do, for e while,
alm do uso j visto no comando switch. Ao encontrar um break dentro de um
desses laos, o interpretador PHP para imediatamente a execuo do lao, seguindo
normalmente o fluxo do script.while ($x > 0) { ... if ($x == 20) { echo erro! x = 20; break; ...}
No trecho de cdigo acima, o lao while tem uma condio para seu
trmino normal ($x
O exemplo acima uma maneira ineficiente de imprimir os nmeros
pares entre 0 e 99. O que o lao faz testar se o resto da diviso entre o nmero e 2 0.
Se for diferente de zero (valor lgico true) o interpretador encontrar um continue,
que faz com que os comandos seguintes do interior do lao sejam ignorados, seguindo
para a prxima iterao.
57
10. Funes
Definindo funes
A sintaxe bsica para definir uma funo :
function nome_da_funo([arg1, arg2, arg3]) {Comandos;... ;[return ];
}
Qualquer cdigo PHP vlido pode estar contido no interior de uma
funo. Como a checagem de tipos em PHP dinmica, o tipo de retorno no deve ser
declarado, sendo necessrio que o programador esteja atento para que a funo retorne o
tipo desejado. recomendvel que esteja tudo bem documentado para facilitar a leitura
e compreenso do cdigo. Para efeito de documentao, utiliza-se o seguinte formato de
declarao de funo:
tipo function nome_da_funcao(tipo arg1, tipo arg2, ...);
Este formato s deve ser utilizado na documentao do script, pois o PHP
no aceita a declarao de tipos. Isso significa que em muitos casos o programador deve
estar atento ao tipos dos valores passados como parmetros, pois se no for passado o
tipo esperado no emitido nenhum alerta pelo interpretador PHP, j que este no testa
os tipos.
Valor de retorno
Toda funo pode opcionalmente retornar um valor, ou simplesmente
executar os comandos e no retornar valor algum.
No possvel que uma funo retorne mais de um valor, mas permitido
fazer com que uma funo retorne um valor composto, como listas ou arrays.
58
Argumentos
possvel passar argumentos para uma funo. Eles devem ser
declarados logo aps o nome da funo, entre parnteses, e tornam-se variveis
pertencentes ao escopo local da funo. A declarao do tipo de cada argumento
tambm utilizada apenas para efeito de documentao.
Exemplo:
function imprime($texto){ echo $texto;}
imprime(teste de funes);
Passagem de parmetros por referncia
Normalmente, a passagem de parmetros em PHP feita por valor, ou
seja, se o contedo da varivel for alterado, essa alterao no afeta a varivel original.
Exemplo:
function mais5($numero) { $numero += 5;}
$a = 3;mais5($a); //$a continua valendo 3
No exemplo acima, como a passagem de parmetros por valor, a funo
mais5 intil, j que aps a execuo sair da funo o valor anterior da varivel
recuperado. Se a passagem de valor fosse feita por referncia, a varivel $a teria 8 como
valor. O que ocorre normalmente que ao ser chamada uma funo, o interpretador
salva todo o escopo atual, ou seja, os contedos das variveis. Se uma dessas variveis
for passada como parmetro, seu contedo fica preservado, pois a funo ir trabalhar
na verdade com uma cpia da varivel. Porm, se a passagem de parmetros for feita
por referncia, toda alterao que a funo realizar no valor passado como parmetro
afetar a varivel que o contm.
59
H duas maneiras de fazer com que uma funo tenha parmetros
passados por referncia: indicando isso na declarao da funo, o que faz com que a
pasagem de parmetros sempre seja assim; e tambm na prpria chamada da funo.
Nos dois casos utiliza-se o modificador &. Vejamos um exemplo que ilustra os dois
casos:
function mais5(&$num1, $num2) { $num1 += 5; $num2 += 5;}
$a = $b = 1;mais5($a, $b); /* Neste caso, s $num1 ter seu valor
alterado, pois a passagem por referncia est definida na declarao da funo. */
mais5($a, &$b); /* Aqui as duas variveis tero seus valores alterados. */
Argumentos com valores pr-definidos (default)
Em PHP possvel ter valores default para argumentos de funes, ou
seja, valores que sero assumidos em caso de nada ser passado no lugar do argumento.
Quando algum parmetro declarado desta maneira, a passagem do mesmo na chamada
da funo torna-se opcional.
function teste($vivas = testando) { echo $vivas;}
teste(); // imprime testandoteste(outro teste); // imprime outro teste
bom lembrar que quando a funo tem mais de um parmetro, o que
tem valor default deve ser declarado por ltimo:
function teste($figura = circulo, $cor) { echo a figura um , $figura, de cor $cor;}
teste(azul);
60
/* A funo no vai funcionar da maneira esperada, ocorrendo um erro no interpretador. A declarao correta : */
function teste2($cor, $figura = circulo) { echo a figura um , $figura, de cor $cor;}
teste2(azul);
/* Aqui a funcao funciona da maneira esperada, ou seja, imprime o texto: a figura um crculo de cor azul */
Contexto
O contexto o conjunto de variveis e seus respectivos valores num
determinado ponto do programa. Na chamada de uma funo, ao iniciar a execuo do
bloco que contm a implementao da mesma criado um novo contexto, contendo as
variveis declaradas dentro do bloco, ou seja, todas as variveis utilizadas dentro
daquele bloco sero eliminadas ao trmino da execuo da funo.
Escopo
O escopo de uma varivel em PHP define a poro do programa onde ela
pode ser utilizada. Na maioria dos casos todas as variveis tm escopo global.
Entretanto, em funes definidas pelo usurio um escopo local criado. Uma varivel
de escopo global no pode ser utilizada no interior de uma funo sem que haja uma
declarao.
Exemplo:$vivas = Testando;
function Teste() { echo $vivas;}
Teste();
O trecho acima no produzir sada alguma, pois a varivel $vivas de
escopo global, e no pode ser referida num escopo local, mesmo que no haja outra com
nome igual que cubra a sua visibilidade. Para que o script funcione da forma desejada, a
varivel global a ser utilizada deve ser declarada.
61
Exemplo:$vivas = Testando;
function Teste() { global $vivas; echo $vivas;}
Teste();
Uma declarao global pode conter vrias variveis, separadas por
vrgulas. Uma outra maneira de acessar variveis de escopo global dentro de uma
funo utilizando um array pr-definido pelo PHP cujo nome $GLOBALS. O ndice
para a varivel referida o proprio nome da varivel, sem o caracter $. O exemplo
acima e o abaixo produzem o mesmo resultado:
Exemplo:$vivas = "Testando";
function Teste() { echo $GLOBALS["vivas"]; // imprime $vivas echo $vivas; // no imprime nada }
Teste();
Funes variveis
PHP suporta o conceito de funes variveis. Isso significa que se uma
varivel tiver parnteses ao final, a funo cujo nome for o valor da varivel ser
executada, se existir. Vejamos o exemplo:function soma($a, $b) {
return $a + $b;}function multiplica($a, $b) { return $a *
$b;}function dobro($a) { return 2 * $a;}$func = 'soma';echo
$func(4,5) . "
\n";$func = 'multiplica';echo $func(4,5) . "
\n";$func = 'dobro';echo $func(4) . "
\n";
62
No exemplo anterior, as trs funes sero executadas: A primeira
execuo retorna 9, a segunda retorna 20 e a terceira retorna 8.
63
11. Variveis e Constantes
Declarao de uma varivel
Como a tipagem em PHP dinmica, as variveis no precisam ser
declaradas. Uma varivel inicializada no momento em que feita a primeira
atribuio. O tipo da varivel ser definido de acordo com o valor atribudo.
O modificador static
Uma varivel esttica visvel num escopo local, mas ela inicializada
apenas uma vez e seu valor no perdido quando a execuo do script deixa esse
escopo. Veja o seguinte exemplo:
function Teste() { $a = 0; echo $a; $a++;}
O ltimo comando da funo intil, pois assim que for encerrada a
execuo da funo a varivel $a perde seu valor. J no exemplo seguinte, a cada
chamada da funo a varivel $a ter seu valor impresso e ser incrementada:
function Teste() { static $a = 0; echo $a; $a++;}
O modificador static muito utilizado em funes recursivas, j que o
valor de algumas variveis precisa ser mantido. Ele funciona da seguinte forma: O valor
das variveis declaradas como estticas mantido ao terminar a execuo da funo. Na
prxima execuo da funo, ao encontrar novamente a declarao com static, o valor
da varivel recuperado.
Em outras palavras, uma varivel declarada como static tem o mesmo
tempo de vida que uma varivel global, porm sua visibilidade restrita ao escopo
local em que foi declarada e s recuperada aps a declarao.
64
Exemplo: function Teste() { echo "$a"; static $a = 0; $a++;}
O exemplo acima no produzir sada alguma. Na primeira execuo da
funo, a impresso ocorre antes da atribuio de um valor funo, e portanto o
contedo de $a nulo (string vazia). Nas execues seguintes da funo Teste() a
impresso ocorre antes da recuperao do valor de $a, e portanto nesse momento seu
valor ainda nulo. Para que a funo retorne algum valor o modificador static deve
ser utilizado.
Variveis Variveis
O PHP tem um recurso conhecido como variveis variveis, que consiste
em variveis cujos nomes tambm so variveis. Sua utilizao feita atravs do duplo
cifro ($$).$a = teste;$$a = Mauricio Vivas;
O exemplo acima e equivalente ao seguinte:
$a = teste;$teste = Mauricio Vivas;
Variveis enviadas pelo navegador
Para interagir com a navegao feita pelo usurio, necessrio que o PHP
possa enviar e receber informaes para o software de navegao. A maneira de enviar
informaes, como j foi visto anteriormente, geralmente atravs de um comando de
impresso, como o echo. Para receber informaes vindas do navegador atravs de um
link ou um formulrio html o PHP utiliza as informaes enviadas atravs da URL. Por
exemplo: se seu script php est localizado em http://localhost/teste.php3 e
voc o chama com a url http://localhost/teste.php3?vivas=teste,
automaticamente o PHP criar uma varivel com o nome $vivas contendo a string
65
teste. Note que o contedo da varivel est no formato urlencode. Os formulrios
html j enviam informaes automaticamente nesse formato, e o PHP decodifica sem
necessitar de tratamento pelo programador.
URLencode
O formato urlencode obtido substituindo os espaos pelo caracter +
e todos os outros caracteres no alfa-numricos (com exceo de _) pelo caracter %
seguido do cdigo ASCII em hexadecimal.
Por exemplo: o texto Testando 1 2 3 !! em urlencode fica
Testando+1+2+3+%21%21
O PHP possui duas funes para tratar com texto em urlencode. Seguem
suas sintaxes:
string urlencode(string texto);string urldecode(string texto);
Essas funes servem respectivamente para codificar ou decodificar um
texto passado como argumento. Para entender melhor o que um argumento e como
funciona uma funo, leia o tpico funes.
Utilizando arrays
Cada elemento de um formulrio HTML submetido a um script PHP cria
no ambiente do mesmo uma varivel cujo nome o mesmo nome do elemento. Por
exemplo: um campo definido como:
ao ser submetido a um script PHP far com que seja criada uma varivel
com o nome $endereco. Isto acontece de forma semelhante para cookies, como
veremos mais adiante.
66
Uma boa tcnica de programao utilizar a notao de arrays para
nomes de cookies ou itens de um formulrio html. Para um conjunto de checkboxes, por
exemplo, podemos utilizar a seguinte notao:
opcao1opcao2opcao3opcao4opcao5
Ao submeter o formulrio, o script que recebe os valores submetidos ter
uma varivel chamada $teste contendo os valores marcados num array, com ndices a
partir de zero. Assim, se forem marcadas as opoes 2, 3 e 5, poderemos fazer as
seguintes afirmaes:$teste == array(valor2, valor3, valor5);$teste[0] == valor2;$teste[1] == valor3;$teste[2] == valor5;
Recommended