Você está na página 1de 61

Desenvolvendo aplicaes com PHP e MySQL

2
Sumrio
Notas do Autor, 3
Introduo, 4
Instalando o VertrigoServ no Windows, 5
Instalando o Xampp (Apache, !S"#, $%$, $erl& no #inu', 6
(m primeiro Script, 6
Sinta'e )*sica, 7
+ipos, 7
Arra!,
Vari*veis, !
,onstantes, 3
-'press.es, 4
/peradores, 5
-struturas de ,ontrole, "
-struturas de repetio, !
0un.es, !3
Algumas 1un.es do $%$, !5
anipulao de Arra!s, 3!
0un.es atem*ticas, 37
$%$ 2 ,onstantes atem*ticas, 4
0ormul*rios e Interao com %+#, 44
(m pouco so3re Sess.es, 46
!S"#, 47
Inserir, deletar e selecionar com !S"#, 4#
0un.es do !S"#, 5
$%$ interagindo com o )anco de 4ados !S"#, 5!
,onstruindo uma Aplicao $%$5!S"#, 54
6e1er7ncias )i3liogr*1icas, 6
8
$o%as do &u%or
-ste guia no tem a pretenso de e'aurir o assunto, mas servir de 1onte de consulta a iniciantes em
programao 9ue 9uerem desenvolver aplica.es para We3:
; muito importante 9ue o leitor teste os e'emplos, 1aa os e'erc<cios propostos e re1aa os e'erc<cios
resolvidos:
/s pr=2re9uisitos para a leitura deste guia so> l?gica de programao e 1amiliari@ao com %+#:
-stima2se 9ue pouco mais de ABC dos dom<nios na Internet possuem o $%$ instalado, da< uma grande
oportunidade a esses estudantes e pro1issionais: -sta = a primeira verso do guia:
4aniel oreira dos Santos
'(cnico em )n*orm%ica e Licenciando em Ma%em%ica
+on%a%os,
daniel2htmDhotmail:com
http>EEwww:danielmoreira:wordpress:com
D-vidas. su/es%es e cr0%icas s1o 2em3vindas4
! Se%em2ro de !55#
4evido a outras ocupa.es voltei a escrever o guia e at= mesmo a usar o $%$ apenas neste ano de
2BAB: %oFe, dia 2G de Hulho de 2BAB, pu3lico a primeira verso, 9ue chamarei de verso B (@ero&:
-spero em 3reve atuali@*2la com id=ias 9ue F* tenho em mente e tam3=m com sugest.es de leitores e
amigos: 0ico 1eli@ de poder contri3uir de alguma 1orma para o seu aprendi@ado: / segredo = dividir
para con9uistarI
4aniel oreira dos Santos
!# de 6ul7o de !55
J
)n%rodu1o
/ nome $%$ = um acrKnimo 9ue signi1ica L$%$ %!perte't $reprocessorM: $%$ = uma linguagem de
script interpretada utili@ada em maioria para desenvolver aplica.es We3 em3utida em um %+#, mas
tam3=m pode ser usada para o desenvolvimento de aplica.es desNtop O(I (veFa so3re $%$2O+P& e
scripts de linha de comando:
/ $%$ 9ue temos hoFe = o sucessor do $%$E0I, 9ue signi1ica $ersonal %ome $ageE0orms Interpreter: /
$%$E0I 1oi criado por 6asmus #erdor1 por volta de AGGQ com o intuito de controlar os acessos a sua
home page (curr<culo on line&:
Voc7 pode consultar mais so3re a hist?ria do $%$ na p*gina o1icial http>EEwww:php:net: Atualmente o
$%$ est* na verso Q: -sta verso pode ser encontrada no site assim como a documentao em
portugu7s:
A princ<pio daremos uma 7n1ase maior ao desenvolvimento de aplica.es para We3: $ara tal, voc7
precisa ter instalado em sua m*9uina um cliente (3rowser& We3, um servidor We3 (usaremos o Apache&
e evidentemente o interpretador $%$: ,aso no tenha voc7 pode instal*2los separadamente ou 3ai'ar os
pacotes pr=2con1igurados, voc7 pode alugar um servidor 9ue possua isso instalado se pre1erir:
,omo a con1igurao no = nosso o3Fetivo mostraremos onde e como 3ai'ar esses pacotes no #inu' e
Windows: Orande parte das aplica.es We3 1a@ interao com um 3anco de dados, n?s utili@aremos o
3anco de dados !S"#, F* 9ue = muito utili@ado e gratuito:
/ $%$ = uma linguagem de script Server2Side, isto =, um conFunto de c?digos 9ue sero interpretados
no servidor: (ma caracter<stica = 9ue o c?digo de um ar9uivo:php no = e'i3ido como acontece com
um c?digo %+# ou Hava script 9ue so chamados linguagens ,lient2Side, so interpretadas no cliente
We3:
Q
)ns%alando o 8er%ri/oServ no 9indo:s
,omo dito anteriormente, precisamos instalar o Apache (servidor We3 %++$&, $%$ e o !S"#
(Sistema Oerenciador de )anco de 4ados&: $ara tal vamos instalar / VertrigoServ, 9ue = um proFeto
desenvolvido para 1acilitar a instalao desses componentes:
/ VertrigoServ ainda inclui S"#ite, S"#iteanager, Rend/ptimi@er, Smart! e o $hp!Admin: -sse
Sltimo n?s utili@aremos algumas ve@es para manusearmos o nosso 3anco !S"#:
$ara 3ai'*2lo a3ra a p*gina do proFeto http>EEvertrigo:source1orge:netETlangU3r e procure pela verso
mais recente: 4epois de instalar, inicie a aplicao: Note 9ue na 3arra de tare1as (V direita& aparecer*
um <cone com um detalhe verde signi1icando 9ue tudo est* 1uncionando (Apache, $%$ e !S"#&:
,li9ue so3re o <cone e em seguida so3re WWW 0older: -sta pasta = onde os seus ar9uivos:php devero
estar: ,rie uma pasta com o nome do seu proFeto, para visuali@ar seus ar9uivos :php a3ra o seu
navegador pre1erido e digite http>EElocalhostEnomeWdaWsuaWpastaEnomeWdoWar9uivo:php:
Voc7 pode acessar o $hp!Admin em +ools (ou 0erramentas& e depois clicando so3re $hp!Admin:
$ronto, isso = tudo 9ue precisaremos no momentoI
X
)ns%alando o ;ampp <&pac7e. MySQL. PHP. Perl= no Linu>4
A3ra o seu We3 3rowser e digite http>EEsource1orge:netEproFectEshow1iles:phpTgroupWidUXAYYX, essa = a
p*gina do proFeto: $rocure pela verso mais nova para #inu': Agora a3ra o seu terminal e digite>
sudo tar xvfz xampp-linux-1.6.4.tar.gz -C /opt
Agora vamos iniciar as aplica.es>
sudo /opt/lampp/lampp start
$ronto: -st* tudo instalado no diret?rio EoptElampp com a con1igurao padro: Voc7 pode instalar em
outro diret?rio se pre1erir:
$ara ver seus ar9uivos:php atrav=s de um We3 3rowser colo9ue2os na pasta EoptElamppEhtdocs: No
navegador digite> http>EElocalhostEnomeWdaWpastaEnomeWdoWar9uivo:php
?m primeiro Scrip%
A9ui vamos mostrar um primeiro script em $%$ 9ue imprimir* a mensagem L/l* undoIM no
document do seu 3rowser:
-ste no = um script muito Stil, pois sua sa<da ser* a mesma de> <p> Ol&aacute !undo </p>: as a
inteno = de mostrar como ele aparece em um c?digo %+#:
Note 9ue um script em $%$ comea com <"p#p e termina com ">. / 9ue estiver entre esses
delimitadores de c?digo no aparece no lado cliente como um c?digo: ,li9ue com o 3oto direito do
mouse so3re o document, em seguida cli9ue em e'i3ir c?digo21onte, note 9ue voc7 no consegue
visuali@ar o c?digo $%$:
A 1uno ec#o imprime uma string na tela, nesse caso imprimimos L/l* undoM:
Y
Sin%a>e @sica
,omo 1alado anteriormente, um script em $%$ inicia com a tag <"p#p e termina com a tag ">: -ssas
so as tags mais utili@adas para delimitar um c?digo $%$, mas voc7 tam3=m pode usar <" e "> desde
9ue a opo shortWopenWtag esteFa ativada no seu php:ini ou tam3=m se o $%$ 1oi con1igurado com a
opo 22ena3le2short2tags:
/utra opo, por=m menos comum, = a de usar <script language-$p#p$> e </script>. ,omo
curiosidade voc7 poderia pes9uisar so3re como usar tags asp no php:
(ma 3oa pr*tica de programao = usar ponto e v<rgula ( Z & no 1inal de cada comando: / ponto e
v<rgula di@ ao $%$ 9ue a instruo chegou ao 1im, e se no houver erro ele e'ecuta a pr?'ima
instruo:
Voc7 pode omitir o Sltimo ponto e v<rgula ( Z & do 3loco de c?digo, pois a tag "> di@ ao php 9ue = o 1im
da instruo e do 3loco:
'ipos
/ $%$ tem suporte a oito tipos primitivos> 3oolean, integer, 1loat (dou3le&, string, arra!, o3Fect,
resource e null: / $%$ = uma linguagem dita 1racamente tipada, pois o tipo da vari*vel depende do
conte'to em 9ue ela est* inserida, isto = decidido em tempo de e'ecuo:
A 1uno var%dump&' checa o tipo e o valor de uma vari*vel ou e'presso: as comumente 9ueremos
sa3er apenas o tipo de uma vari*vel, ento usamos as 1un.es is%int&'( is%float( is%string&' e is%)ool&':
Assim como em outras linguagens podemos L1orarM um tipo em uma vari*vel: $ara 1a@ermos isso
usamos o 9ue chamamos de casting ou a 1uno sett*pe&':
$ara converter um tipo no $%$ escrevemos o nome do tipo 9ue 9ueremos moldar a vari*vel entre
par7ntesis e em seguida o nome da vari*vel: VeFa a sinta'e do casting no e'emplo a3ai'o>
oldagens poss<veis>
(int&, (integer& 2 molde para inteiro:
(3ool&, (3oolean& 2 converte para 3ooleano:
(1loat&, (dou3le&, (real& 2 converte para nSmero de ponto 1lutuante:
(string& 2 converte para string
(3inar!& 2 converte para string 3in*ria
(arra!& 2 converte para arra! (o3Fect& 2 converte para o3Feto
@ooleano
[
)ooleano, )ool ou )oolean( = o tipo mais simples: $ode assumir apenas dois valores> true ou false:
-sses so os chamados tipos l?gicos: /3serve 9ue as palavras true e false so insensitivas, sendo assim
= o mesmo 9ue escrever +rue e ,alse:
(sualmente o tipo 3ooleano = utili@ado 9uando retornado de uma e'presso envolvendo algum
operador l?gico> UU, \U, ]U, \, ], IU:
,omo vimos acima, podemos converter um valor 9ual9uer para 3oolean e'plicitamente utili@ando
casting ou atri3uindo esse tipo a uma vari*vel: -ntretanto se uma estrutura de controle, operador ou
1uno necessitar de um argumento 3ooleano, esse ser* enviado para o $%$ mesmo 9ue a vari*vel seFa
de um outro tipo 9ual9uer:
Isso ocorre por9ue o $%$ decide o tipo da vari*vel em tempo de e'ecuo, isso signi1ica 9ue uma
vari*vel pode ser 3oolean dependendo do conte'to:
-m uma converso para 3ooleano esses valores se tornam false>
A: / pr?prio 3ooleano 0A#S-:
2: / inteiro B (@ero& o ponto 1lutuante B:B (@ero&:
8: (ma string va@ia e a string ^B^:
J: (m arra! sem elementos:
Q: (m o3Feto sem elementos mem3ros (somente $%$ J&:
X: / tipo especial N(## (incluindo vari*veis no de1inidas&:
Y: /3Feto SimpleX# criado para tags va@ias:
"ual9uer valor di1erente = assumido como true:
)n%eiro
/ tipo inteiro = o mesmo 9ue conhecemos na matem*tica 9uando 1alamos de conFuntos num=ricos: (m
inteiro = um elemento do conFunto RU_:::, 22, 2A, B, A, 2, :::`: No entanto, a mem?ria do computador =
limitada, por isso e'iste um valor m*'imo para um inteiro no computador:
/ tamanho m*'imo depende da plata1orma, sendo um numero apro'imado a 2 3ilh.es 9ue = um
nSmero de 82 3its com sinal:
,omo o3servado no manual do $%$, ele no suporta inteiros sem sinal: / tamanho do inteiro pode ser
determinado por $%$WIN+WSIR-, o valor m*'imo para $%$WIN+WAX desde o $%$ J:J:B e $%$
Q:B:Q:
/s inteiros podem ser representados em notao decimal (ou 3ase AB&, octal (ou 3ase [& e he'adecimal
(ou 3ase AX&: $ara 9ue o $%$ entenda 9ue um nSmero est* sendo representado em uma outra 3ase
num=rica = preciso 9ue voc7 e'plicite isso:
$receda o nSmero com um - para indicar escrita em notao octal e com -x para indicar notao
he'adecimal: VeFa esse e'emplo>
G
(ma o3servao importante = 9ue se voc7 usa um nSmero maior 9ue o limite suportado pelo tipo
inteiro, o $%$ interpreta como um 1loat:
No e'iste um operador de diviso inteira no $%$ como o 4IV em algumas linguagens: -ntretanto
voc7 pode usar o casting 9ue vai truncar o nSmero real restando apenas os d<gitos inteiros ou voc7 pode
usar a 1uno round&':
$ara converter um valor para o tipo inteiro voc7 pode usar os modi1icadores &int' e &integer' como dito
anteriormente ou ento dei'ar com o 9ue o $%$ converta como acontece com as convers.es para
3ooleano: Isso acontece desde 9ue algum operador, estrutura de controle ou 1uno necessite de um
argumento inteiro:
/ valor l?gico true = convertido para inteiro como 1( e o valor l?gico false = convertido com -.
"uando um ponto 1lutuante = moldado para inteiro atrav=s do casting ele = truncado: Se o nSmero
estiver al=m dos limites de um inteiro o resultado = inde1inido:
Pon%o Alu%uan%e
/ tipo float, dou)le ou em portugu7s, ponto flutuante, = uma representao de um nSmero real: as
como F* mencionado, o computador possui uma mem?ria 1inita, o 9ue implica 9ue um 1loat = uma
apro'imao limitada do nSmero:
/ tamanho de um float = dependente da plata1orma assim como o tamanho de um int, sendo o m*'imo
de .1./e0-/ com uma preciso de AJ casas decimais (nSmero de XJ 3its&:
$or pro3lemas de perda de preciso, nunca podemos ter certe@a se um dado nSmero de ponto 1lutuante
realmente = e'ato: Na maioria das ve@es ele = uma apro'imao su1icientemente 3oa para algum
prop?sito espec<1ico:
/ $%$ vem com algumas 1un.es de preciso ar3itr*ria 9ue podem te aFudar se precisar de uma
preciso maior do 9ue a 1ornecida:
$ara converter um 3oolean ou um 1loat, primeiro a converso = 1eita para um int e ento segue a regra
de converso de inteiros para ponto 1lutuante: / caso do tipo primitivo string = especial e veremos
adiante:
VeFa um e'emplo de representa.es de ponto 1lutuante>
AB
S%rin/
(ma string = uma cadeia de caracteres: No $%$ uma string no possui um tamanho m*'imo, isto =,
pode ser uma cadeia to longa 9uanto se 9ueira:
Voc7 pode representar uma string com a a (ap?stro1o& ou L M (aspas duplas&:
/ $%$ entende mais se9b7ncias de escape para caracteres especiais 9uando a string = delimitada por
aspas:
VeFa a3ai'o algumas se9b7ncias de escape e'tra<das do manual>
cn 1im de linha (line1eed ou #0 ou B'BA (AB& em AS,II&
cr retorno de carro (carriage return ou ,6 ou B'B4 (A8& em AS,II&
ct +A) hori@ontal (%+ ou B'BG (G& em AS,II&
cv +A) vertical (V+ ou B'B) (AA& em AS,II& (desde o $%$ Q:2:Q&
c1 1orm 1eed (00 ou B'B, (A2& em AS,II& (desde o $%$ Q:2:Q&
cc contra 3arra ou 3arra invertida
cd sinal de ci1ro
c^ aspas
ceB2Yf_A,8` a se9b7ncia de caracteres 3atendo a e'presso regular dos caracteres em notao octal
c'eB2GA20a21f_A,2` a se9b7ncia de caracteres 3atendo a e'presso regular de um caractere em
notao he'adecimal:
VeFa este e'emplo do uso de strings retirado do manual>
AA
&rray
(m arra! = um conFunto de vari*veis inde'adas em uma lista: No $%$, um arra! = um tipo 3astante
comple'o, voc7 pode acessar um valor da lista atrav=s de um <ndice 9ue pode ser um inteiro ou at= uma
string:
(m arra! pode arma@enar valores de diversos tipos, como, inteiro, 1loat, 3ooleano, string e at= mesmo
outro arra! introdu@indo o conceito de arra! multidimensional: (m arra! de uma dimenso =
comumente chamado de vetor:
$odemos simular *rvores 3in*rias como arra! de arra!s, mas esse conceito 1oge da nossa pauta inicial:
(m arra! pode ser constru<do com o m=todo arra*&' do $%$: VeFa a sinta'e e logo a3ai'o um e'emplo
ilustrativo do uso do construtor>
arra!(
1ndice 2> valor( 1ndice2>valor( ...
&
,omo 1alamos anteriormente, o <ndice pode ser um inteiro ou uma string: Valor pode ser de 9ual9uer
tipo:
; importante notar algumas coisas, se voc7 inde'ar um valor com um 1loat, isto =, us*2lo como um
<ndice no seu arra!, ele ser* convertido para inteiro:
; poss<vel criar um arra! omitindo os <ndices, isto 1a@ com 9ue o $%$ 1i'e os <ndices como inteiros: Se
todos os <ndices 1orem omitidos o $%$ iniciali@a o primeiro <ndice com B e o restante de A em A em
ordem crescente: Se 1orem omitidos alguns <ndices apenas, o $%$ pega o maior <ndice inteiro
acrescentado de um e inde'a o novo valor da lista:
VeFa este e'emplo de um arra! multidimensional>
A2
-'istem outras o3serva.es a serem 1eitas so3re o tipo arra!: / uso do valor l?gico true como <ndice
ser* interpretado pelo $%$ como o inteiro A: Analogamente, false ser* interpretado como B inteiro:
(sar N(## para inde'ar um valor no arra! = interpretado como uma string va@ia e usar uma string
va@ia como chave ir* criar (ou so3rescrever& uma chave com uma string va@ia e seu valor:
(m aviso importante> voc7 no pode usar um arra! ou outro o3Feto como <ndice, isso 1ar* com 9ue o
$%$ e'i3a a seguinte mensagem de erro> LIllegal o11set t!pe:M:
+am3=m e'iste a possi3ilidade de inde'ar valores em um arra! com colchetes e'plicitando o <ndice e o
valor a ser atri3u<do: VeFa o pr?'imo e'emplo>
8ariveis
(ma vari*vel, tanto no $%$ como em 9ual9uer outra linguagem, = uma re1er7ncia V uma regio
limitada da mem?ria 9ue contem in1ormao de um determinado tipo de dado:
+oda vari*vel no $%$ deve iniciar com d, isto se torna muito 3om 9uando necess*rio identi1icar
vari*veis em um c?digo muito e'tenso:
/ $%$ = case sensitive, isto =, h* distino no uso de letras maiSsculas e minSsculas: #ogo, uma
vari*vel dVariavel = di1erente de dvariavel, dvArIaVe#, dVA6IAV-# e etc:
/ nome de uma vari*vel no $%$ pode ter 9ual9uer tamanho, desde 9ue o3edea algumas regras: (m
nome de vari*vel sempre deve iniciar com uma letra ou su3linhado, evidentemente depois do d,
seguido de 9ual9uer se9b7ncia de letras, algarismos e su3linhados: VeFa o pr?'imo e'emplo so3re o
uso de vari*veis no $%$>
,omo na linguagem , = poss<vel atri3uir uma vari*vel a outra por valor e atri3uir por re1er7ncia: (ma
atri3uio por valor signi1ica 9ue uma c?pia da vari*vel atri3u<da = passada para a outra vari*vel:
"uando o valor de uma das duas = modi1icado o da outra permanece inalterado:
"uando = 1eita uma atri3uio por re1er7ncia a segunda vari*vel re1erencia (aponta& para a vari*vel
original: #ogo = poss<vel alterar o valor da vari*vel original utili@ando a vari*vel 9ue rece3eu a
A8
atri3uio: $ara 1a@er re1er7ncia = necess*rio o uso do g antes da vari*vel original: VeFa este e'emplo>
,omo mostrado no e'emplo acima, s? = poss<vel atri3uir por re1er7ncia vari*veis com nome:
As vari*veis no precisam ser iniciali@adas no $%$, 1alaremos um pouco so3re 3oas pr*ticas de
programao e riscos 9ue isso representa no ,ap<tulo de Segurana:
"uando no iniciali@adas elas rece3em um valor padro do tipo delas, 9ue como dissemos, = decidido
em tempo de e'ecuo de acordo com o conte'to 2 0A#S-, @ero, string va@ia ou null:
+ons%an%es
$ela pr?pria de1inio da palavra, uma constante no = uma vari*vel: (ma vari*vel = um identi1icador
para um valor 9ue pode ser alterado, e no $%$ at= rece3er um valor de outro tipo: (ma constante = um
identi1icador de um Snico valor 9ue no = alterado no decorrer do script:
/ nome ou identi1icador de uma constante = sempre maiSsculo por padro: ,omo 9ual9uer outro r?tulo
no $%$, o nome de uma constante v*lida comea com uma letra ou su3linhado, seguido por uma
se9b7ncia de letras, nSmeros eEou su3linhados: VeFa este e'emplo>
A 1orma de de1inir uma constante = utili@ando a 1uno define&': (ma constante no pode ser alterada
depois de sua de1inio:
,onstantes podem ser 3oolean, int, 1loat ou string: (ma constante no pode ser um o3Feto, 9ue
estudaremos adiante:
$ara acessar o valor de uma constante 3asta escrever seu nome ou utili@ar a 1uno constant&': (ma
o3servao importante = 9ue voc7 no pode utili@ar o caractere d no nome de uma constante:
AJ
B>presses
(tili@amos e'press.es em todos os e'emplos dados acima: (ma e'presso = uma sentena com valor:
As e'press.es podem ser separadas em e'press.es de atri3uio e e'press.es de comparao:
A 1orma mais simples de aparecer uma e'presso = em uma atri3uio de um valor constante a uma
vari*vel, mas uma e'presso aparece em diversas outras 1ormas como compara.es retornando um
valor l?gico: VeFa o e'emplo a3ai'o>
/ $%$ avalia uma atri3uio da direita para a es9uerda, portanto = v*lido e muito comum escrevermos
3a23)244: / 9ue acontece = 9ue o $%$ atri3ui a constante JQ a d3 e a da:
No e'emplo acima utili@amos os operadores incremento e decremento: (m incremento = uma
atri3uio do tipo 3a55( 9ue = o mesmo 9ue 3a23a51: Analogamente um decremento = su3trair A do
valor original da vari*vel, portanto 3a-- = o mesmo 9ue 3a23a-1
-'istem v*rios operadores de comparao, todos eles so utili@ados em e'press.es: Vamos cit*2los a9ui
e v72los no pr?'imo cap<tulo com mais detalhe:
/perador de atri3uio U, operador de incremento 55, operador de decremento 22, operadores de
comparao> \ (maior 9ue&, \U (maior ou igual a&, ] (menor 9ue&, ]U (menor ou igual a&, UU (igual&, IU
(di1erente&, UUU (igual a e do mesmo tipo&, IUU (di1erente de ou no do mesmo tipo&:
Note 9ue e'istem 1ormas di1erentes de escrever a mesma coisa, por e'emplo, 3a521 isso =
interpretado pelo $%$ como o valor de da incrementado de A:
(m outro operador 3em conhecido, mas talve@ no to utili@ado seFa o operador condicional tern*rio:
A segunda su32e'presso = avaliada e tem seu valor retornado se a primeira su32e'presso 1or
verdadeira, se a primeira su32e'presso 1or 1alsa a terceira su32e'presso = avaliada e seu valor
retornado:
4aremos um e'emplo do seu uso mais adiante:
AQ
Cperadores
(m operador = algo 9ue d* vida a uma e'presso l?gica, em outras palavras, ele avalia uma e'presso
de um ou mais valores e retorna um outro valor:
-'istem os operadores un*rios 9ue operam em apenas um valor, os operadores 3in*rios 9ue operam em
dois valores e o operador tern*rio 9ue opera em tr7s valores:
,omo na matem*tica, no $%$ e'iste uma preced7ncia de operadores, isto =, 9uem ser* o primeiro a ser
avaliado 9uando v*rios operadores esto na mesma e'presso:
VeFa as ta3elas a3ai'o retiradas do manual do $%$>
PrecedDncia dos operadores
&ssocia1o Cperador )n*orma1o adicional
no associativo clone new clone e new
es9uerda e arra!(&
no associativo 55 22 incrementoEdecremento
no associativo
h 2 (int& (1loat& (string& (arra!& (o3Fect&
(3ool& D
tipos
no associativo instanceo1 tipos
direita I l?gico
es9uerda i E C aritm=tico
es9uerda 5 2 : aritm=tico e string
es9uerda ]] \\ )it2a23it
no associativo ] ]U \ \U ]\ comparao
no associativo UU IU UUU IUU comparao
es9uerda g )it2a23it e re1er7ncias
es9uerda j )it2a23it
es9uerda k )it2a23it
es9uerda gg l?gico
es9uerda kk l?gico
es9uerda T > tern*rio
direita
U 5U 2U iU EU :U CU gU kU jU ]]U
\\U
atri3uio
es9uerda and l?gico
es9uerda 'or l?gico
es9uerda or l?gico
es9uerda , muitos usos
AX
Cperadores &ri%m(%icos
B>emplo $ome Eesul%ado
2da Negao /posto de da:
da 5 d3 Adio Soma de da e d3:
da 2 d3 Su3trao 4i1erena entre da e d3:
da i d3 ultiplicao $roduto de da e d3:
da E d3 4iviso "uociente de da por d3:
da C d3 ?dulo 6esto de da dividido por d3:
Cperadores de compara1o
B>emplo $ome Eesul%ado
da UU d3 Igual Verdadeiro ('E?B& se da = igual a d3:
da UUU d3 Id7ntico
Verdadeiro ('E?B& se da = igual a d3, e eles so do mesmo tipo
(introdu@ido no $%$J&:
da IU d3 4i1erente Verdadeiro se da no = igual a d3:
da ]\ d3 4i1erente Verdadeiro se da no = igual a d3:
da IUU d3 No id7ntico
Verdadeiro de da no = igual a d3, ou eles no so do mesmo tipo
(introdu@ido no $%$J&:
da ] d3 enor 9ue Verdadeiro se da = estritamente menor 9ue d3:
da \ d3 aior 9ue Verdadeiro se da = estritamente maior 9ue d3:
da ]U d3
enor ou
igual
Verdadeiro se da = menor ou igual a d3:
da \U d3
aior ou
igual
Verdadeiro se da = maior ou igual a d3:
AY
Cperadores de )ncremen%oFDecremen%o
B>emplo $ome B*ei%o
55da $r=2incremento Incrementa da em um, e ento retorna da:
da55 $?s2incremento 6etorna da, e ento incrementa da em um:
22da $r=2decremento 4ecrementa da em um, e ento retorna da:
da22 $?s2decremento 6etorna da, e ento decrementa da em um:
Cperadores LG/icos
B>emplo $ome Eesul%ado
da and d3 - Verdadeiro ('E?B& se tanto da 9uanto d3 so verdadeiros:
da or d3 /( Verdadeiro se da ou d3 so verdadeiros:
da 'or d3 X/6 Verdadeiro se da ou d3 so verdadeiros, mas no am3os:
I da Nl/ Verdadeiro se da no = verdadeiro:
da gg d3 - Verdadeiro se tanto da 9uanto d3 so verdadeiros:
da kk d3 /( Verdadeiro se da ou d3 so verdadeiros:
Cperadores de array
B>emplo $ome Eesul%ado
da 5 d3 (nio (nio de da e d3:
da UU d3 Igualdade 'E?B se da e d3 tem os mesmos pares de chaveEvalor:
da UUU d3 Identidade
'E?B se da e d3 tem os mesmos pares de chaveEvalor na mesma ordem e
do mesmo tipo:
da IU d3 4esigualdade 'E?B se da no = igual a d3:
da ]\ d3 4esigualdade 'E?B se da no = igual a d3:
da IUU d3 No identidade 'E?B se da no = id7ntico a d3:
A[
Bs%ru%uras de +on%role
)asicamente as estruturas de controle so divididas em dois tipos> -struturas condicionais e as
estruturas de repetio (loops&: As estruturas de controle aglomeram instru.es 9ue devero ser
e'ecutadas dada uma condio ou 9ue sero e'ecutadas um nSmero 1inito de ve@es:
)*
/ i1, ou LseM em portugu7s, = uma estrutura de controle do tipo condicional, isto =, um dado 3loco de
comandos ser* e'ecutado LseM certa condio 1or veri1icada: Note 9ue F* usamos esta estrutura de
controle anteriormente: $ara 1icar mais claro vamos ver um e'emplo>
Neste e'emplo dvalor = igual a AB, se dvalor igual a AB ento a pr?'ima instruo = para imprimir a
string LValorUABM:
A sinta'e 3*sica da estrutura condicional i1 =>
i1(condi67o&_
)loco%de%comandos
`
)* else
/ i1 else (se seno& 1unciona de 1orma semelhante, apenas tem2se um 3loco de comandos de LescapeM
caso a condio no seFa satis1eita: Seguindo o e'emplo anterior>
Neste e'emplo = impresso a string LValorIUAAM pois a e'presso dvalorUUAB retorna o valor l?gico
1alse: #em3re2se 9ue ser* e'ecutado apenas um dos dois 3locos de comandos:
A sinta'e 3*sica do i1 else =>
i1(condio&_
3locoWdeWcomandosWA
`else_
3locoWdeWcomandosW2
`
AG
Bncadeando i* else i*
; muito 1re9bente o uso de i1as encadeados durante a con1eco de um programa: Vamos dar um
e'emplo de como seria o seu uso:
S:i%c7 case
/ Switch case = uma outra estrutura condicional, mas di1erente de outras linguagens, no $%$ o switch
case pode ser usado para testar condi.es so3re strings al=m de nSmeros inteiros:
A instruo switch e'ecuta case a case, 9uando uma instruo case = encontrada com um valor igual ao
valor dentro do switch, o $%$ e'ecuta as instru.es seguintes:
/ $%$ e'ecuta as instru.es at= o 1im do 3loco switch ou na primeira ve@ 9ue encontrar uma instruo
3reaN: Se voc7 no escrever uma instruo 3reaN no 1im das instru.es case, o $%$ continuar*
e'ecutando os cases seguintes: Vamos ver alguns e'emplos>

2B
-'emplo com strings>
No e'emplo acima 9uando o case correto = encontrado o programa sai do switch devido ao 3reaN ap?s
imprimir a 1rase correspondente:
/ case de1ault>
-ste case = e'ecutado 9uando nenhum outro = e'ecutado:
2A
Bs%ru%uras de Eepe%i1o <Loops=
As estruturas de repetio, ou laos de repetio, so utili@adas 9uando um 3loco de comandos precisa
ser e'ecutado um determinado nSmero de ve@es:
Aor
/ 1or = uma estrutura de repetio 9ue herdou uma sinta'e 3em compacta da linguagem ,: Sua sinta'e
3*sica =>
1or(inicializa67oZ condi67o de paradaZ incremento/decremento&_
)loco%de%comandos
`
VeFa um e'emplo comentado do uso do 1or>
Neste e'emplo a vari*vel di serviu como um contador de passos: Voc7 pode omitir a iniciali@ao da
vari*vel, no e'emplo acima no 1aria nenhuma di1erena F* 9ue o php iniciali@a a vari*vel com B:
Se a instruo de incremento 1osse omitida ter<amos o 9ue chamamos de loop in1inito, ou seFa, ele iria
imprimir L$rogramando em $%$ M inde1inidamente, provavelmente at= o seu computador travar por
1alta de mem?ria: -sse seria o e'emplo, mas no vale a pena rod*2lo, = apenas did*tico>
Note 9ue como di55 1oi omitido ele veri1ica a condio (tam3=m chamada teste de parada& ap?s
e'ecutar o 3loco de comandos, como o valor de di no 1oi alterado, a condio = sempre verdadeira e o
loop no p*ra:
22
97ile
4aremos os mesmos e'emplos acima, mas su3stituindo o 1or pelo while com as devidas modi1ica.es:
"uando avanarmos um pouco mais nas peculiaridades da linguagem teremos e'emplos mais
interessantes para olhar:
Sinta'e 3*sica do while>
while(condi67o&_
)loco%de%comandos
`
/utra 1orma de criar um loop in1inito = testando uma condio 9ue sempre = verdadeira: VeFa o
e'emplo a3ai'o>
Do 97ile
No = nada mais do 9ue o while 9ue permite 9ue o 3loco de comandos seFa e'ecutado uma ve@ antes
9ue a condio de parada seFa testada:
Sinta'e do 4o While>
do_
)loco%de%comandos
`while(condi67o&Z
VeFa este simples e'emplo para ilustrar o seu uso>
28
Aunes
At= agora n?s usamos somente uma 1uno, a 1uno LechoM usada para imprimir caracteres no
document do nosso 3rowser:
(ma 1uno = um 3loco de comandos 9ue pode ser invocado sempre 9uando necess*rio sem a
necessidade de repetir todo o 3loco, apenas 1a@endo re1erenciando o seu nome:
Oeralmente 9uando se chama uma 1uno, um conFunto de argumentos = passado e = retornado um
valor:
A seguir vamos ver como declarar uma 1uno, como passar argumentos, como retornar valores
gerados dentro dela e tam3=m veremos algumas 1un.es interessantes 9ue usaremos no decorrer deste
guia:
+ons%ruindo Suas Aunes
$ara declarar uma 1uno comeamos com a palavra function seguida do nome 9ue 9ueremos d*2la:
4entro de par7ntesis, uma lista de argumentos separados por v<rgula: A3rimos e 1echamos o 3loco de
comandos da 1uno respectivamente com _ e `:
function nomeWdaW1uncao(lista%de%argumentos&_
)loco%de%comandos
return valor
`
VeFa o e'emplo a3ai'o>
; claro 9ue o e'emplo acima = apenas ilustrativo: No precisamos criar uma 1uno para somar dois
nSmeros, podemos usar o operador L5M de uma ve@:
/ pr?'imo e'emplo = mais interessante, pois mostra como seria incKmodo repetir o 3loco de comandos
da 1uno toda ve@ 9ue precis*ssemos dela:
A partir dele voc7 pode in1erir como = Stil construir 1un.es para resolver pro3lemas maiores:
2J
Veremos nos e'emplos a seguir 9ue uma 1uno pode no precisar de uma lista de argumentos eEou
retornar algum valor:
/ e'emplo anterior poderia ser assim>
2Q
&l/umas *unes do PHP
Segue uma lista de 1un.es do $%$ 9ue utili@aremos algumas ve@es: $arte da lista 1oi retirada da
internet e parte retirada do manual do $%$: Voc7 pode ad9uirir a pr*tica de consult*2lo sempre 9ue
necessitar:
Manipula1o de S%rin/s
1) Funes relacionadas HTML
: #tmlspecialc#ars
string #tmlspecialc#ars&string str'
6etorna a string 1ornecida, su3stituindo os seguintes caracteres>
g para aga
^ para a^a
] para a]a
\ para m\a
. #tmlentities
string #tmlentities&string str'
0unciona de maneira semelhante ao comando anterior, mas de maneira mais completa, pois converte
todos os caracteres da string 9ue possuem uma representao especial em html, como por e'emplo>
n para ana
o para aoa
* para a*a
para ma
. nl8)r
string nl8)r&string str'
6etorna a string 1ornecida su3stituindo todas as 9ue3ras de linha (^cn^& por 9ue3ras de linhas em html
(^]3r\^&:
2X
-'emplo>
. get%meta%tags
arra* get%meta%tags&string ar9uivo'
A3re um ar9uivo %+# e percorre o ca3ealho em 3usca de ^meta^ tags, retornando num arra! todos
os valores encontrados:
-'emplo>
No ar9uivo teste:html temos>
:::
]head\
]meta nameU^author^ contentU^Fose^\
]meta nameU^tags^ contentU^php8 documentation^\
:::
]Ehead\]I22 3usca encerra a9ui 22\
:::
A e'ecuo da 1uno>
: strip%tags
string strip%tags&string str'
6etorna a string 1ornecida, retirando todas as tags html eEou $%$ encontradas:
-'emplo>
: urlencode
string urlencode&string str'
6etorna a string 1ornecida, convertida para o 1ormato urlencode: -sta 1uno = Stil para passar vari*veis
para uma pr?'ima p*gina:
2Y
: urldecode
string urldecode&string str'
0unciona de maneira inversa a urlencode, desta ve@ decodi1icando a string 1ornecida do 1ormato
urlencode para te'to normal:
2) Funes relacionadas arrays
: implode e Foin
string implode&string separador( arra* partes'
string :oin&string separador( arra* partes'
As duas 1un.es so id7nticas: 6etornam uma string contendo todos os elementos do arra! 1ornecido
separados pela string tam3=m 1ornecida:
-'emplo>
. split
arra* split&string padrao( string str( int ;limite<'
6etorna um arra! contendo partes da string 1ornecida separadas pelo padro 1ornecido, podendo limitar
o nSmero de elementos do arra!:
-'emplo>
: explode
arra* explode&string padrao( string str'
0unciona de maneira 3astante semelhante V 1uno split, com a di1erena 9ue no = poss<vel esta3elecer
2[
um limite para o nSmero de elementos do arra!:
+omparaes en%re s%rin/s
: similar%text
int similar%text&string str1( string str8( dou)le ;porcentagem<'
,ompara as duas strings 1ornecidas e retorna o nSmero de caracteres coincidentes: /pcionalmente pode
ser 1ornecida uma vari*vel passada por re1er7ncia (ver t?pico so3re 1un.es&, 9ue rece3er* o valor
percentual de igualdade entre as strings: -sta 1uno = case sensitive, ou seFa, maiSsculas e minSsculas
so tratadas como di1erentes:
-'emplo>
. strcasecmp
int strcasecmp&string str1( string str8'
,ompara as duas strings e retorna B (@ero& se 1orem iguais, um valor maior 9ue @ero se strA \ str2, e um
valor menor 9ue @ero se strA ] str2: -sta 1uno = case insensitive, ou seFa, maiSsculas e minSsculas
so tratadas como iguais:
. strcmp
int strcasecmp&string str1( string str8'
0unciona de maneira semelhante V 1uno strcasecmp, com a di1erena 9ue esta = case sensitive, ou
seFa, maiSsculas e minSsculas so tratadas como di1erentes:
: strstr
string strstr&string str1( string str8'
string strc#r&string str1( string str8'
As duas 1un.es so id7nticas: $rocura a primeira ocorr7ncia de str2 em strA: Se no encontrar, retorna
uma string va@ia, e se encontrar retorna todos os caracteres de strA a partir desse ponto:
-'emplo>
2G
: stristr
string stristr&string str1( string str8'
0unciona de maneira semelhante V 1uno strstr, com a di1erena 9ue esta = case insensitive, ou seFa,
maiSsculas e minSsculas so tratadas como iguais:
: strpos
int strpos&string str1( string str8( int ;offset< '
6etorna a posio da primeira ocorr7ncia de str2 em strA, ou @ero se no houver: / parpmetro opcional
o11set determina a partir de 9ual caractere de strA ser* e1etuada a 3usca: esmo utili@ando o o11set, o
valor de retorno = re1erente ao in<cio de strA:
: strrpos
int strrpos&string #a*stac=( c#ar needle'
6etorna a posio da Sltima ocorr7ncia de str2 em strA, ou @ero se no houver:
3) Funes para edio de strings
: c#op
string c#op&string str'
6etira espaos e linhas em 3ranco do 1inal da string 1ornecida:
-'emplo>
. ltrim
string ltrim&string str'
6etira espaos e linhas em 3ranco do 1inal da string 1ornecida:
-'emplo>
: trim
8B
string trim&string str'
6etira espaos e linhas em 3ranco do in<cio e do 1inal da string 1ornecida:
-'emplo>
: strrev
string strrev&string str'
6etorna a string 1ornecida invertida:
-'emplo>
. strtolo>er
string strtolo>er&string str'
6etorna a string 1ornecida com todas as letras minSsculas:
-'emplo>
. strtoupper
string strtoupper&string str'
6etorna a string 1ornecida com todas as letras maiSsculas:
-'emplo>
8A
: ucfirst
string ucfirst&string str'
6etorna a string 1ornecida com o primeiro caracter convertido para letra maiSscula:
-'emplo>
: uc>ords
string uc>ords&string str'
6etorna a string 1ornecida com todas as palavras iniciadas por letras maiSsculas:
-'emplo>
: str%replace
string str%replace&string str1( string str8( string str0'
Altera todas as ocorr7ncias de strA em str8 pela string str2:
4) Funes diversas
: c#r
string c#r&int ascii'
6etorna o caractere correspondente ao c?digo AS,II 1ornecido:
: ord
82
int ord&string string'
6etorna o c?digo AS,II correspondente ao caractere 1ornecido:
: ec#o
ec#o&string arg1( string ;argn<... '
Imprime os argumentos 1ornecidos:
: print
print&string arg'
Imprime o argumento 1ornecido:
: strlen
int strlen&string str'
6etorna o tamanho da string 1ornecida:
Manipula1o de &rrays
arra!
arra! arra!(:::&Z
; a 1uno 9ue cria um arra! a partir dos parpmetros 1ornecidos: ; poss<vel 1ornecer o <ndice de cada
elemento: -sse <ndice pode ser um valor de 9ual9uer tipo, e no apenas de inteiro: Se o <ndice no 1or
1ornecido o $%$ atri3ui um valor inteiro se9bencial, a partir do B ou do Sltimo <ndice inteiro
e'plicitado: VeFamos alguns e'emplos>
-'emplo A>
+emos o seguinte mapeamento>
B U\ ^um^ (B = o primeiro <ndice, se no houver um e'plicito&
A U\ ^dois^ (o inteiro seguinte&
^tr^ U\ ^tres^
Q U\ ^9uatro^ (valor e'plicitado&
X U\ ^cinco^ (o inteiro seguinte ao Sltimo atri3u<do, e no o pr?'imo valor, 9ue seria 2&
88
-'emplo 2>
+emos o seguinte mapeamento>
B U\ ^umM
X U\ ^doisM
Ltr^ U\ tres
Q U\ ^9uatro^ (seria Y, se no 1osse e'plicitado&
Y U\ ^cinco^ (seria X, se no estivesse ocupado&
-m geral, no = recomend*vel utili@ar arra!s com v*rios tipos de <ndices, F* 9ue isso pode con1undir o
programador: No caso de realmente haver a necessidade de utili@ar esse recurso, deve2se ter 3astante
ateno ao manipular os <ndices do arra!:
: range
arra! range(int minimo, int ma'imo&Z
A 1uno range cria um arra! cuFos elementos so os inteiros pertencentes ao intervalo 1ornecido,
inclusive: Se o valor do primeiro parpmetro 1or maior do 9ue o do segundo, a 1uno retorna 1alse
(valor va@io&:
: shu11le
void shu11le(arra! garr&Z
-sta 1uno ^em3aralha^ o arra!, ou seFa, troca as posi.es dos elementos aleatoriamente e no retorna
valor algum:
: si@eo1
int si@eo1(arra! arr&Z
6etorna um valor inteiro contendo o nSmero de elementos de um arra!: Se 1or utili@ada com uma
vari*vel cuFo valor no = do tipo arra!, retorna A: Se a vari*vel no estiver setada ou 1or um arra! va@io,
retorna B:
1) Funes de navegao!
+oda vari*vel do tipo arra! possui um ponteiro interno indicando o pr?'imo elemento a ser acessado no
8J
caso de no ser especi1icado um <ndice: As 1un.es seguintes servem para modi1icar esse ponteiro,
permitindo assim percorrer um arra! para veri1icar seu conteSdo (chaves e elementos&:
: reset
mi'ed reset(arra! arr&Z
Seta o ponteiro interno para o primeiro elemento do arra!, e retorna o conteSdo desse elemento:
: end
mi'ed end(arra! arr&Z
Seta o ponteiro interno para o Sltimo elemento do arra!, e retorna o conteSdo desse elemento:
: ne't
mi'ed ne't(arra! arr&Z
Seta o ponteiro interno para o pr?'imo elemento do arra!, e retorna o conteSdo desse elemento:
/3s:> -sta no = uma 3oa 1uno para determinar se um elemento = o Sltimo do arra!, pois pode
retornar 1alse tanto no 1inal do arra! como no caso de haver um elemento va@io:
: prev
mi'ed prev(arra! arr&Z
Seta o ponteiro interno para o elemento anterior do arra!, e retorna o conteSdo desse elemento:
0unciona de maneira inversa a ne't:
: pos
mi'ed pos(arra! arr&Z
6etorna o conteSdo do elemento atual do arra!, indicado pelo ponteiro interno:
: Ne!
mi'ed Ne!(arra! arr&Z
0unciona de maneira 3astante semelhante a pos, mas ao inv=s de retornar o elemento atual indicado
pelo ponteiro interno do arra!, retorna seu <ndice:
: each
arra! each(arra! arr&Z
8Q
6etorna um arra! contendo o <ndice e o elemento atual indicado pelo ponteiro interno do arra!: / valor
de retorno = um arra! de 9uatro elementos, cuFos <ndices so B, A, ^Ne!^ e ^value^: /s elementos de
<ndices B e ^Ne!^ arma@enam o <ndice do valor atual, e os elementos de <ndices A e ^value^ cont=m o
valor do elemento atual indicado pelo ponteiro:
-sta 1uno pode ser utili@ada para percorrer todos os elementos de um arra! e determinar se F* 1oi
encontrado o Sltimo elemento, pois no caso de haver um elemento va@io, a 1uno no retornar* o valor
1alse: A 1uno each s? retorna 1alse depois 9 o Sltimo elemento do arra! 1oi encontrado:
-'emplo>
2) Funes de ordenao
So 1un.es 9ue servem para arrumar os elementos de um arra! de acordo com determinados crit=rios:
-stes crit=rios so> manuteno ou no da associao entre <ndices e elementosZ ordenao por
elementos ou por <ndicesZ 1uno de comparao entre dois elementos:
: sort
void sort(arra! garr&Z
A 1uno mais simples de ordenao de arra!s: /rdena os elementos de um arra! em ordem crescente,
sem manter os relacionamentos com os <ndices:
: rsort
void rsort(arra! garr&Z
0unciona de maneira inversa V 1uno sort: /rdena os elementos de um arra! em ordem decrescente,
sem manter os relacionamentos com os <ndices:
: asort
void asort(arra! garr&Z
+em o 1uncionamento 3astante semelhante V 1uno sort: /rdena os elementos de um arra! em ordem
crescente, por=m mant=m os relacionamentos com os <ndices:
8X
: arsort
void arsort(arra! garr&Z
0unciona de maneira inversa V 1uno asort: /rdena os elementos de um arra! em ordem decrescente e
mant=m os relacionamentos dos elementos com os <ndices:
: Nsort
void Nsort(arra! garr&Z
0uno de ordenao 3aseada nos <ndices: /rdena os elementos de um arra! de acordo com seus
<ndices, em ordem crescente, mantendo os relacionamentos:
: usort
void usort(arra! garr, 1unction compara&Z
-sta = uma 1uno 9ue utili@a outra 1uno como parpmetro: /rdena os elementos de um arra! sem
manter os relacionamentos com os <ndices, e utili@a para e1eito de comparao uma 1uno de1inida
pelo usu*rio, 9ue deve comparar dois elementos do arra! e retornar B, A ou qA, de acordo com 9ual9uer
crit=rio esta3elecido pelo usu*rio:
: uasort
void uasort(arra! garr, 1unction compara&Z
-sta 1uno tam3=m utili@a outra 1uno como parpmetro: /rdena os elementos de um arra! e mant=m
os relacionamentos com os <ndices, utili@ando para e1eito de comparao uma 1uno de1inida pelo
usu*rio, 9ue deve comparar dois elementos do arra! e retornar B, A ou qA, de acordo com 9ual9uer
crit=rio esta3elecido pelo usu*rio:
: uNsort
void uNsort(arra! garr, 1unction compara&Z
-sta 1uno ordena o arra! atrav=s dos <ndices, mantendo os relacionamentos com os elementos:, e
utili@a para e1eito de comparao uma 1uno de1inida pelo usu*rio, 9ue deve comparar dois <ndices do
arra! e retornar B, A ou qA, de acordo com 9ual9uer crit=rio esta3elecido pelo usu*rio:
8Y
Aunes Ma%em%icas
a)s&'
6etorna o valor a3soluto de um nSmero:
acos&'
6etorna o arco co2seno de um nSmero:
acos#&'
6etorna o arco co2seno hiper3?lico de um nSmero:
asin&'
6etorna o arco seno de um nSmero:
asin#&'
6etorna o arco seno hiper3?lico de um nSmero:
atan&'
6etorna o arco tangente de um nSmero como um valor num=rico compreendido entre 2$IE2 e $IE2
radianos:
atan8&'
6etorna o pngulo teta de um ponto (', !& como um valor num=rico entre 2$I e $I radianos:
atan#&'
6etorna a tangente hiper3?lica inversa de um nSmero:
)ase%convert&'
,onverte um nSmero de uma 3ase para outra:
)indec&'
,onverte um nSmero 3in*rio para um nSmero decimal:
ceil&'
6etorna o pr?'imo maior valor inteiro arredondando para cima do valor, se 1racion*rio:
cos&'
6etorna o co2seno de um nSmero:
cos#&'
6etorna o co2seno hiper3?lico de um nSmero:

8[
dec)in&'
,onverte um nSmero decimal para um nSmero 3in*rio:
dec#ex&'
,onverte um nSmero decimal para um nSmero he'adecimal:
decoct&'
,onverte um nSmero decimal para um nSmero octal:
deg8rad&'
,onverte grau para radiano:
exp&'
6etorna o valor da e'ponencial de um nSmero:
expm1&'
6etorna o valor da e'ponencial de um nSmero e su3trai uma unidade:
floor&'
6etorna o pr?'imo menor valor inteiro ao se arredondar para 3ai'o do valor, se necess*rio:
fmod&'
6etorna o m?dulo da diviso dos argumentos:
getrandmax&'
6etorna o valor randKmico m*'imo 9ue pode ser retornado pela 1uno rand&'.
#exdec&'
,onverte um nSmero he'adecimal em um nSmero decimal:
#*pot&'
6etorna o comprimento da hipotenusa de um tripngulo retpngulo:
is%finite&'
6etorna true se um valor = um nSmero 1inito:
isWin1inite(&
6etorna true se um valor = um LnSmeroM in1inito:
is%nan&'
6etorna true se um valor no = um nSmero:
lcg%value&'
6etorna um pseudo nSmero randKmico entre B e A:
8G
log&'
6etorna o logaritmo natural de um nSmero (3ase -&:
log1-&'
6etorna o logaritmo na 3ase AB de um nSmero:
log1p&'
6etorna o logaritmo de A 5 um nSmero:
max&'
6etorna o nSmero com o valor mais alto dentre dois especi1icados:
min&'
6etorna o nSmero com o valor mais 3ai'o dentre dois especi1icados:
mt%getrandmax&'
6etorna o valor mais comprido 9ue pode ser retornado por mt%rand&'.
mt%rand&'
6etorna um inteiro randKmico usando o algoritmo de ersenne +wister:
octdec&'
,onverte um nSmero octal em um nSmero decimal:
pi&'
6etorna o valor de $I:
po>&'
6etorna a 3ase elevada ao e'poente e'p:
rad8deg&'
,onverte um nSmero em radiano para graus:
rand&'
6etorna um inteiro randomicamente:
round&'
Arredonda um nSmero:
sin&'
6etorna o seno de um nSmero:
sin#&'
6etorna o seno hiper3?lico de um nSmero:
s9rt&'
6etorna a rai@ 9uadrada de um nSmero:
JB
tan&'
6etorna a tangente de um pngulo:
tan#&'
6etorna a tangente hiper3?lica de um pngulo:
JA
PHP H +ons%an%es Ma%em%icas
Na Sltima coluna est* a verso do $%$ 9ue suporta a constante especi1icada:
+ons%an%e Descri1o PHP
W- 6etorna e (apro': 2:YA[& J
W-(#-6 6etorna a constante de -uler (apro': B:QYY& J
W#N$I 6etorna o logaritmo natural de $I (apro': A:AJJ& J
W#N2 6etorna o logaritmo natural de 2 (apro': B:XG8& J
W#NAB 6etorna o logaritmo natural de AB (apro': 2:8B2& J
W#/O2- 6etorna o logaritmo de - na 3ase 2 (apro': A:JJ2& J
W#/OAB- 6etorna o logaritmo de - na 3ase AB(apro': B:J8J& J
W$I 6etorna $I (apro': 8:AJAQG& 8
W$IW2 6etorna $IE2 (apro': A:QYB& J
W$IWJ 6etorna $IEJ (apro': B:Y[Q& J
WAW$I 6etorna AE$I (apro': B:8A[& J
W2W$I 6etorna 2E$I (apro': B:X8X& J
WS"6+$I 6etorna a rai@ 9uadrada de $I (apro': A:YY2& J
W2WS"6+$I 6etorna 2Erai@ 9uadrada de $I (apro': A:A2[& J
WS"6+AW2 6etorna rai@ 9uadrada de AE2 (apro': B:YBY& J
WS"6+2 6etorna a rai@ 9uadrada de 2 (apro': A:JAJ& J
WS"6+8 6etorna a rai@ 9uadrada de 8 (apro': A:Y82& J
J2
B>erc0cios Propos%os
A: 4ado um vetor 9ual9uer com [ nSmeros reais, 1aa um algoritmo 9ue in1orma se h* ou no nSmeros
repetidos nesse vetor:
2: ,rie um m?dulo 9ue imprime na tela os elementos de um vetor de Q nSmeros inteiros na ordem
inversa:
8: ,alcular a 9uantidade de dinheiro gasta por um 1umante: 4ados> o nSmero de anos 9ue ele 1umaZ o
nSmero de cigarros 1umados por dia e o preo de uma carteira:
J: #er dois nSmeros inteiros, ' e !, e imprimir o 9uociente e o resto da diviso inteira entre eles:
Q: 4ados dois nSmeros inteiros (A e )&, veri1icar e imprimir 9ual deles = o maior, ou a mensagem
LAU)M caso seFam iguais:
X: 4ados tr7s valores, di@er se eles 1ormam um tripngulo: ,aso a1irmativo, di@er seu tipo (e9bil*tero,
is?sceles ou escaleno&:
Y: #er um nSmero e veri1icar se ele = par ou <mpar:
[: Imprimir a s=rie de 0i3onacci:
A, A, 2, 8, Q, [, A8, 2A, 8J, QQ, [G,:::
G: ,alcular a soma dos primeiros termos da s=rie>
A 5 AE2 5 AE8 5 AEJ 5 AEQ 5 AEX 5 AEY 5 AE[ 5 AEG 5 AEAB 5 r
AB: 0aa um algoritmo para indicar o maior entre 8 nSmeros:
AA: 0aa um algoritmo para escrever por e'tenso 9ual9uer nSmero de A algarismo digitado pelo
usu*rio:
A2: -la3ore um algoritmo para in1ormar 9ual a idade do usu*rio (9uantos anos tem, apenas&, sendo
in1ormado a data atual e sua data de nascimento:
A8: 0aa um algoritmo para calcular o 1atorial de 9ual9uer nSmero inteiro:
AJ: 0aa um algoritmo para ordenar um vetor de nSmeros inteiros:
AQ: ,onstrua um algoritmo 9ue calcule o valor de um nSmero n elevado a 9ual9uer nSmero ':
AX: ,alcule o d<gito veri1icador de uma conta corrente segundo os seguintes crit=rios>
Some cada algarismo da conta
Se o resultado dessa soma 1or composto de apenas um algarismo, esse = o d<gito veri1icador
Se no resultado dessa soma houver mais de um algarismo, some2os at= encontrar apenas um
J8
algarismo 9ue ser*, ento, o d<gito veri1icador:
/ algoritmo deve mostrar na tela a conta corrente completa, com o d<gito veri1icador:
$or e'emplo>
,onta ,orrente> JXYG8
Soma dos algarismos> J5X5Y5G58U 2G
,omo 2G possui dois algarismos, deve2se somar novamente> 25G U AA
,omo AA tam3=m possui dois algarismos, deve2se somar novamente> A5A U 2
,omo 2 possui apenas um algarismo, esse = o d<gito veri1icador procurado:
A resposta na tela deveria ser> JXYG822
AY: 0aa um algoritmo para calcular todos os nSmeros primos entre 2 e ABBB:
A[: (ma empresa decidiu 1a@er um levantamento so3re o per1il dos candidatos 9ue se apresentarem
para o preenchimento de vagas de seu 9uadro de 1uncion*rios: $ara cada candidato, ser* solicitado o
se'o, a idade e se tem ou no e'peri7ncia no servio: -sses dados sero guardados em vetores:
-screver um algoritmo para ler os dados dos candidatos e, a seguir, calcular e imprimir as seguintes
in1orma.es>
a& / nSmero de candidatos do se'o 1eminino e masculino
3& A idade m=dia das mulheres 9ue F* t7m e'peri7ncia no servio
c& A menor idade entre as mulheres 9ue F* t7m e'peri7ncia no servio
d& A porcentagem dos homens com mais de JQ anos, com relao ao total de homens:
e& / nSmero de homens com idade in1erior a 8B anos sem e'peri7ncia no servio:
AG: -screva 1un.es de soma, su3trao, multiplicao e diviso, passados dois valores por parpmetro e
implemente2as:
2B: -screva uma Snica 1uno 9ue 1aa as 9uatro opera.es matem*ticas elementares:
JJ
Aormulrios e )n%era1o com H'ML
,omearemos agora a interagir com o %+#, %!per+e't arNer #anguage, ou ainda, #inguagem de
arcao de %iperte'to:
Nosso primeiro passo nesta segunda etapa do guia = rece3er valores passados atrav=s de 1ormul*rios
%+#, tra3alharmos com eles e e'i3ir o resultado no document:
$or 1im, teremos scripts muito mais 1le'<veis no sentido de interao com o usu*rio: Nos e'emplos e
e'erc<cios acima no vimos nenhuma interao entre o usu*rio e o script:
VeFa a resoluo do e'erc<cio Q com os dados passados pelo usu*rio atrav=s do teclado>
Ar9uivo html (num:html&>
No ar9uivo acima temos um 1ormul*rio com dois campos de te'to onde sero digitados os valores e um
3oto su3mit para enviar os dados: VeFa 9ue na linha 1orm temos um action com o nome do ar9uivo 9ue
rece3er* os dados digitados (no nosso caso maior:php& e 9ual ser* o method (no nosso caso $/S+&:
; necess*rio 9ue todos os campos 9ue tero seus valores utili@ados no script $%$ tenham o parpmetro
name:
/ m=todo indica como os dados sero passados: No nosso caso, $/S+ signi1ica 9ue os dados sero
passados sem serem e'i3idos na (6# e possi3ilita o envio de longas in1orma.es, ao contr*rio do
m=todo O-+:
JQ
Ar9uivo php (maior:php&>
No e'emplo acima poder<amos ter usado simplesmente dvalorA e dvalor2 ao inv=s de dW$/S+, 9ue o
$%$ entenderia 9ue seriam os campos de 1ormul*rio com mesmo nome: as desde 9ue a diretiva
register%glo)als no seu php:ini esteFa ativada, caso contr*rio, dvalorAUdvalor2UB:
+am3=m e'iste uma outra soluo com o uso de import%re9uest%varia)les 9ue veremos mais adiante:
Ainda e'istem alguns pro3lemas 9ue precisamos tratar: No sa3emos se o usu*rio digitou dois nSmeros
de 1ato, ele pode ter digito um te'to ou at= mesmo no ter digitado nada: $recisamos validar os nossos
dados:
VeFa como 1icaria com as altera.es de validao>
A 1uno isset serve para veri1icar se uma vari*vel 1oi de1inida ou no: A 1uno is%nan veri1ica se o
parpmetro passado = de 1ato um nSmero:
$ronto, nosso e'erc<cio est* resolvido:
JX
?m pouco so2re Sesses
)asicamente, as sess.es so m=todos 9ue preservam determinados dados ativos en9uanto o navegador
do cliente estiver a3erto, ou en9uanto a sesso no e'pirar:
"uando acessa um we3 site, um usu*rio rece3e um identi1icador chamado id de sesso: -ste = salvo em
um cooNie do lado do cliente ou propagado via (6#: Voc7 pode arma@enar v*rias in1orma.es em uma
sesso:
No site o1icial do manual do $%$ voc7 encontrar* diversas 1un.es para manipular as sess.es>
http>EEwww:php:netEmanualEptW)6Ere1:session:php
Voc7 F* deve ter tido contado com sess.es ao comprar em uma loFa virtual e ter adicionado seus
produtos ao carrinho de compras, ao 1a@er login de usu*rio em algum site, 1?rum e etc:
-m nossa aplicao desenvolveremos uma *rea de login para ilustrar o uso de sess.es:
VeFa este e'emplo do uso de sesso>
No e'emplo acima utili@amos a 1uno o)%start&' 9ue iniciali@a o 3u11er e impede 9ual9uer sa<da para
o navegador at= 9ue voc7 o encerre: -m seguida, a3rimos a sesso com a 1uno session%start&' e
gravamos um nome e uma string com uma idade no arra! de sesso dWS-SSI/N:
+am3=m gravamos na sesso o user agent( isto =, a identi1icao do navegador:
JY
MySQL
/ !S"# = um Sistema de Oerenciamento de )anco de 4ados (SO)4& da linguagem S"# q
Structured "uer! #anguage, 9ue signi1ica linguagem de consulta estruturada:
-'istem outros SO)4 populares, mais o !S"# se destaca pela 1acilidade de integrao aos scripts
$%$:
4entre suas caracter<sticas podemos destacar>
$orta3ilidade (suporta praticamente 9ual9uer plata1orma atual&Z
,ompati3ilidade com diversas linguagens de programao:
-'celente desempenho e esta3ilidade:
No e'ige muito recurso de hardware:
0*cil de usar:
; um so1tware livre com 3ase na O$#:
Suporta +riggers:
Inter1aces gr*1icas (e!S"# +oolNitf& de 1*cil utili@ao cedidos pela !S"# Inc:
Voc7 pode ad9uirir mais in1orma.es so3re vers.es, documentao e downloads no site o1icial do
!S"#> http>EEwww:m!s9l:com
+riando @anco de Dados e 'a2elas com PHPMy&dmin
)asicamente, um 3anco = composto por ta3elas 9ue so 1ormadas por campos: ,ada ta3ela precisa ter
um campo chave prim*ria 9ue 1a@ re1er7ncia a sua ta3ela em outras ta3elas:
Agora utili@aremos o 1amoso $%$!Admin para criar nossos )anco de 4ados e +a3elas: Se voc7
utili@a o VertrigoServ pode acess*2lo iniciando o programa, em seguida clicando so3re o <cone na 3arra
de tare1as: (m menu vai aparece em cima da 3arra, agora v* at= +ools (ou 1erramentas& e cli9ue em
$%$!Admin:
,aso esteFa utili@ando o Xampp, inicie o programa e em seguida a3ra o seu navegador: 4igite
http>EElocalhost, voc7 ver* a p*gina principal do Xampp, no menu es9uerdo procure por +ools (ou
1erramentas& e pelo $%$!Admin: $ronto:
Na p*gina principal do $%$!Admin encontramos do lado es9uerdo um menu superior com os
3ot.es> %ome (para voltar a p*gina principal do $%$!Admin&, S"# 2 "uer! Window (para escrever
um script S"# ou import*2lo de algum ar9uivo te'to&, $%$!Admin 4ocumentation (para visuali@ar a
J[
documentao do seu $%$!Admin& e 4ocumentation (para acessar a documentao do S"#&:
#ogo em3ai'o voc7 pode visuali@ar todos os 3ancos de dados criados: ,licando so3re eles pode
visuali@ar as ta3elas de cada 3anco e clicando so3re elas pode visuali@ar os seus campos, com mais um
cli9ue so3re )rowser, poder* visuali@ar os dados arma@enados nela:
Agora vamos criar nosso primeiro 3anco de dados com $%$!Admin: Acesse2o pelo seu navegador e
em seguida, no lado direito voc7 ver* escrito Lcreate new data3aseM e um campo te't: Se o seu
$%$!Admin estiver con1igurado em portugu7s provavelmente estar* Lcriar novo 3anco de dadosM:
Neste campo te't digitaremos o nome do 3anco 9ue 9ueremos criar, no nosso caso, digite Lin1pessoaisM
sem as aspas: Agora cli9ue no 3oto LcreateM:
$ronto, nosso 3anco de dados in1pessoais est* criado: Note 9ue aparecer* no seu navegador uma coluna
V es9uerda com o nome do seu 3anco e um @ero entre par7ntesis indicando 9ue ele no possue nenhuma
ta3ela: 4o lado direito do document do navegador voc7 ver* al=m do menu superior do $%$!Admin,
a mensagem LNo ta3les 1ound in data3aseM e logo a3ai'o L,reate new ta3le on data3ase in1pessoaisM,
isto =, crie uma nova ta3ela no 3anco de dados in1pessoais:
-nto no campo te't indicado como LnameM digite Lin1ormacoesM 9ue = o nome da nossa ta3ela: -m
LNum3er o1 1ieldsM digite 8, isso signi1ica 9ue nossa ta3ela ter* 8 campos: Agora cli9ue em LgoM:
Agora temos a tela de insero dos 8 campos da nossa ta3ela Lin1ormacoesM: Na mesma coluna escreva
no primeiro te't LidWcontatoM, tipo IN+, escolha o e'tra LautoWincrementM e o radio 3utton L$rimar!M:
,om isso voc7 est* di@endo 9ue o campo idWcontato = uma chave prim*ria, ou seFa, = o <ndice da ta3ela
9ue pode 1a@er re1er7ncia dela em outras ta3elas do mesmo 3anco: Nesse primeiro e'emplo s? temos
uma ta3ela: / argumento autoWincrement di@ 9ue ao adicionar um registro na ta3ela esse campo =
automaticamente incrementado de A:
Nas duas Sltimas colunas insira respectivamente nos campos te't LnomeM e Ltele1oneM e escolha o tipo
dos campos como +-X+:
Agora cli9ue em LgoM e nossa ta3ela in1ormacoes est* pronta:
,licando em Lin1ormacoesM no lado es9uerdo podemos ver todos os campos da nossa ta3ela: VeFa 9ue
clicando em LInsertM no menu superior do $%$!Admin = poss<vel inserir dados nos campos da nossa
ta3ela: as isso no tem muita graa a9ui, pois 9ueremos 1a@er isso atrav=s do $%$:
JG
Alternativamente, podemos criar um 3anco de dados, criar ta3elas neste 3anco e inserir seus campos
atrav=s do c?digo S"# correspondente: $erder<amos a inter1ace intuitiva do $%$!Admin, mas
ganhar<amos na praticidade:
VeFa como 1icaria o c?digo para criar o 3anco in1pessoais e a ta3ela in1ormacoes com seus campos>
/ atri3uto N/+ N(## signi1ica 9ue o campo no pode ser nulo: Isso = especi1icado pelo programador:
)nserir. dele%ar e selecionar com MySQL
Agora 9ue temos nosso 3anco Lin1pessoaisM criado, podemos inserir, deletar e selecionar dados nele:
A1inal, = para isso 9ue ele serve:
Nesta parte da apostila veremos como 1a@er isso em c?digo S"# e posteriormente, como 1a@er atrav=s
do $%$:
)nserir
Suponha 9ue voc7 9ueira adicionar um contato na sua ta3ela Lin1ormacoesM: VeFa o e'emplo a3ai'o de
como 1a@er>
/ c?digo acima signi1ica> Insira no 3anco ain1pessoaisa, na ta3ela ain1ormacoesa 9ue possui os campos
aidWcontatoa, anomea e atele1onea, os valores aAa, a4aniel oreira dos Santosa, aGGGG2BBBBa
respectivamente:
QB
Dele%ar
$erce3emos 9ue o c?digo = 3em sugestivo: 4elete de ain1ormacoesa, onde aidWcontatoa U A: #em3re 9ue
idWcontato = nossa chave prim*ria:
Selecionar
Atrav=s do c?digo S"# podemos selecionar um registro ou grupo de registros 9ue satis1a@em V uma
condio esta3elecida: ,omo e'emplo, suponha 9ue temos os seguintes registros na ta3ela
Min1ormacoesM>
A 4aniel oreira dos Santos GGGG2BBBB
2 Hos= ,arlos de /liveira Hr: BBBB2GGGG
8 Hairo #udtNe Hr: [[[[2BBBB
- 9ueremos selecionar para um 1im, (mostrar em uma ta3ela, por e'emplo&, os registros 9ue possuem [
no nSmero de tele1one: Nosso c?digo 1icaria assim>
/ asterisco (i& no c?digo acima 1a@ re1er7ncia a todos os campos da ta3ela in1ormacoes: -nto temos,
LSelecione todos os campos da ta3ela in1ormacoes onde tele1one parece com [[[[2[[[[ e ordene por
idWcontatoM:
&%ualiIar
Suponha 9ue 9ueremos atuali@ar o tele1one de um dos contatos registrados: $ara isso, usamos o
comando ($4A+-: VeFa o e'emplo>
Note 9ue s? ser* atuali@ado o tele1one do registro com idWcontato igual a 2, 9ue por sua ve@ = Snico:
Des%ruir
/ comando 46/$ e'clui de1initivamente a nossa ta3ela com todos os seus registros: ; 3om tomar
certo cuidado com este comando:
QA
Aunes do MySQL
Assim como o $%$, o !S"# possui algumas 1un.es muito Steis para manipulao dos registros de
um 3anco de dados: A9ui registrei algumas>
avg&coluna'
6etorna a m=dia dos valores da coluna:
count&item'
Se item 1or uma coluna, ser* retornado o nSmero de valores no nulos(N(##& nesta coluna:
Se a palavra2chave 4IS+IN,+ 1or colocada na 1rente do nome da coluna, ser* retornado o nSmero de
valores distintos nesta coluna:
Se 1or passado count(i&, ser* retornado o nSmero total de registros independente de 9uantos tenham
valor N(##:
min&coluna'
6etorna o valor m<nimo da coluna:
max&coluna'
6etorna o valor m*'imo da coluna:
sdt&coluna'
6etorna o desvio padro dos valores da coluna:
sdtdev&coluna'
/ mesmo 9ue S4+(coluna&:
sum&coluna'
6etorna a soma dos valores da coluna:
Q2
PHP in%era/indo com o @anco de Dados MySQL
,hegou a hora de interagir com o 3anco de dados e preparar o terreno para a construo da nossa
aplicao $%$E!S"#:
6e1aa a sua ta3ela ain1ormacoesa no 3anco de dados in1pessoais: Iremos utili@ar o $%$ para inserir e
manipular alguns registros:
m*s9l%affected%ro>s&'
6etorna o nSmero de linhas atingidas na operao anterior do !S"#: /3t=m o nSmero de linhas
atingidas pela consulta INS-6+, ($4A+-, 6-$#A,- ou 4-#-+- mais recente associada ao
lin=%identifier:
m*s9l%close&'
0echa a cone'o !S"# no persistente ao servidor !S"# 9ue esta associado ao identi1icador de
cone'o dado: Se lin=%identifier no 1or especi1icado, a ultima cone'o a3erta = usada: 6etorna true em
caso de 7'ito e 1alse caso contr*rio:
m*s9l%connect&'
A3re uma cone'o com um servidor !S"#: /s parpmetros so> Server, usu*rio e senha do 3anco de
dados:
m*s9l%fetc#%arra*&'
/3t=m uma linha como uma matri@ associativa, uma matri@ num=rica, ou am3as: 6etorna uma matri@
9ue corresponde a linha o3tida e move o ponteiro interno dos dados adiante:
m*s9l%fetc#%ro>&'
6etorna o resultado de uma linha numa matri@ num=rica: 6etorna uma matri@ num=rica 9ue
corresponde V linha, ou 1alse se no houver mais linhas:
m*s9l%field%len&'
6etorna o tamanho do campo especi1icado:
m*s9l%field%name&'
6etorna o nome do campo especi1icado no resultado de uma 9uer!:
m*s9l%field%ta)le&'
6etorna o nome da ta3ela onde esta o campo especi1icado:
m*s9l%field%t*pe&'
6etorna o tipo do campo especi1icado em um resultado de 9uer!:
m*s9l%get%client%info&'
6etorna in1ormao da verso do cliente !S"#, uma string 9ue representa a verso da 3i3lioteca do
cliente:
Q8
m*s9l%get%server%info&'
6etorna in1ormao do servidor !S"#:
m*s9l%num%ro>s&'
6etorna o nSmero de linhas em um resultado: -ste comando = valido apenas para o3ter o nSmero de
linhas a1etadas por um S-#-,+:
m*s9l%9uer*&'
6eali@a uma 9uer! !S"#: -nvia uma 9uer! para o 3anco de dados ativo no servidor da cone'o
in1ormada atrav=s do identi1icador:
Se o parpmetro identificador no = especi1icado, a ultima cone'o a3erta = usada: Se nenhuma cone'o
esta a3erta, a 1uno tenta esta3elecer uma cone'o como m*s9l%connect&' seFa chamada sem
argumentos e usa2a: / resultado = guardado em 3u11er:
(ma o3servao = 9ue a string da 9uer! no deve terminar com ponto e v<rgula (Z&:
m*s9l%select%d)&'
Seleciona um 3anco de dados !S"#: Veremos como isso = 1eito mais adiante:
QJ
+ons%ruindo uma &plica1o PHPJMySQL
Agora chegamos V parte mais esperada, onde aplicaremos tudo 9ue aprendemos nas p*ginas anteriores:
Vamos construir como e'emplo de aplicao, uma agenda de contatos com> login, cadastro, e'cluso e
edio de contatos:
Iremos utili@ar o 3anco de dados in1pessoais criado anteriormente e a ta3ela in1ormacoes para
arma@enar os dados dos nossos contatos:
-m primeiro lugar vamos construir a tela de login de usu*rios: ,omo voc7 F* est* 1amiliari@ado com
%+# no ter* di1iculdades e poder* 1a@er como 9uiser, modi1icando e melhorando este simples
e'emplo:
/3serve 9ue os nomes dos campos so login e senha e no (ser e $ass: -nto, nossa tela inicial 1icou
assim>
QQ
Agora, precisamos veri1icar se o usu*rio e a senha 1oram digitados corretamente: -ssa veri1icao n?s
1aremos no ar9uivo apontado pelo LactionM 9ue est* no ca3ealho do nosso 1ormul*rio, 9ue neste caso =
o ar9uivo logar:php: VeFa>
Note 9ue nosso e'emplo de login ainda = muito simples, sem interao com 3anco de dados e possui
apenas um usu*rio e senha:
A3rimos e gravamos em seo as vari*veis dlogin (9ue no nosso caso = a string LdanielmsM& e
ddataWlogin 9ue = a data em 9ue 1oi acessada a agenda de contatos:
#ogando com sucesso, veremos a tela principal da nossa aplicao: -sta = 3em simples e possui um
visual 1eito com %+# 3em 3*sico:
QX
-ste = o ar9uivo agenda:php>
A tela principal est* dividida na parte superior com as 3oas2vindas e os linNs LInserirM e LSAI6M e na
parte in1erior onde os contatos so listados e podem ser editados ou e'clu<dos:
A3ai'o segue o ar9uivo listar:php>
QY
/ pr?'imo passo = a insero de contatos no sistema: Segue os ar9uivos 1ormWinserir:php e inserir:php
respectivamente: "uando clicamos em LInserirM no menu superior da agenda, o ar9uivo
1ormWinserir:php = chamado no 1rame principal, onde encontramos um 1ormul*rio a ser preenchido:

Q[
Agora vamos V edio de contatos cadastrados no sistema: Segue os ar9uivos 1ormWeditar:php e
editar:php respectivamente: "uando clicamos em L55M ao lado do contato listado na agenda, o ar9uivo
1ormWeditar:php = chamado no 1rame principal, onde encontramos um 1ormul*rio preenchido com os
dados do contato e estes podem ser alterados:
QG
"uando clicamos em LXXM ao lado do contato listado na agenda, o ar9uivo e'cluir:php = chamado no
1rame principal e o registro = ento eliminado da ta3ela in1ormacoes: VeFa o ar9uivo e'cluir:php>
Ao clicarmos no linN LSAI6M a sesso = encerrada e voltamos a tela inicial de login da aplicao: Isso
acontece por9ue o linN chama o ar9uivo deslogar:php a3ai'o>
XB
B>erc0cios Propos%os
0aa uma agenda de contatos com login e interao ao 3anco de dados, cadastro, e'cluso e edio de
contatos, envio de e2mail com 1ormatao de te'to e imagem, aviso de compromissos, upload de 1oto
no cadastro do contato, cadastro mSltiplo de contatos atrav=s de leitura de ar9uivo te'to:
-ste e'erc<cio ser* resolvido na pr?'ima verso do guia: (m a3rao a todos:
XA
Ee*erDncias @i2lio/r*icas
AN(A# do $%$: http>EEphp:netEmanualEptW)6Einde':php
$%$ Q AN4 sS"# )I)#-: +im ,onverse and Ho!ce $arN with ,larN organ: Wile! $u3lishing, Inc:
)eginning $%$ Q, Apache, !S"# We3 4evelopment: -li@a3eth Naramore, Hason Oerner, sann #e
Scouarnec, Herem! Stol@, ichael P: Olass: Wro':
,?digos na We3: http>EEwww:codigosnawe3:com
%+# Sta11: http>EEwww:htmlsta11:org

Você também pode gostar