Você está na página 1de 102

PHP e MySQL

PHP
e
MySQL
Autor: Leandro Correa dos Santos
leandro.admo@hotmail.com
1
PHP e MySQL
Sumrio
Reviso de HTML.................................................................................................... .8
Estrutura HTML...................................................................... .............................8
Atributos.......................................................................... ...................................9
Principais Ta!s HTML......................................................................... ...............1"
#$%% e %%&......................................................................................... ..............1"
#Hn&.............................................................................. ..............................1"
#br&............................................................................ .................................1"
#p&....................................................................................................... ........1"
#a& .................................................................................................... ..........1"
#'ont&......................................................................... .................................11
#tab(e&................................................................................................... ......11
#tr&..................................................................................... .........................11
#td&.......................................................................... ...................................11
)or*u(+rios............................................................................ ...........................1,
M-todo .ET......................................................................................... ..........1,
M-todo P/ST...................................................................................... ...........1,
)or*u(+rios usando .ET e P/ST................................................ ...................10
E(e*entos do )or*u(+rio................................................ ..............................10
1a*po de Te2to........................................................ ....................................10
1a*po de Sen3a............................................................................. ..............10
4rea de Te2to............................................................... .................................10
Listbo2 e 1o*bobo2........................................................................... ...........15
13ec6bo2...................................................................................................... .15
7oto radio.............................................................................................. ......15
7ot8es Sub*it e Reset................................................................ ..................19
E2erc:cios;........................................................................................ .................19
PHP................................................................................... ....................................1<
/ =ue - PHP>................................................................ ....................................1<
1aracter:sticas do PHP..................................................................... .................1<
ASP ? PHP.......................................................................... ...............................1<
Re=uisitos........................................................................................................ ..1<
@nsta(aAo do PHP...................................................................... ...........................1B
A*biente CindoDs........................................................................................ 1B
A*biente Linu2...................................................................... .......................1B
Scripts 1(ient%Side e Server%Side..................................................................... ..18
Sinta2e PHP............................................................................................ ...........18
1o*ent+rios ............................................................................................... ......19
1o*ent+rios de u*a (in3a........................................................ ....................19
1o*ent+rios de v+rias (in3as............................................................ ............19
Eari+veis e* PHP............................................................................... ...................19
Tipos de vari+veis......................................................... ................................19
Atribuindo va(or F u*a vari+ve(..................................................... ...............,"
E2ibindo o conteGdo na te(a......................................................................... .,1
Arrays............................................................................................... ............,1
Arrays super(obais.................................................................................... ...,,
,
PHP e MySQL
/peraA8es arit*-ticas....................................................................... ...............,0
/peraA8es co* Strins e AtribuiAo...................................................... ...........,0
/perador H.I............................................................................................ ......,0
/perador H.JI ........................................................................... ..................,0
/peradores HKKI e H%%I...................................................... .........................,5
/peradores HKJI e H%JI......................................................................... ......,5
/peradores HLJI e HMJI.................................................................... ............,5
/perador HNJI........................................................................... ..................,5
/peradores de co*paraAo....................................................................... .......,5
/peradores (Oicos............................................................... ............................,9
/peraA8es (Oicas................................................................................... .........,9
/peraAo APQ......................................................................................... ......,<
/peraAo /R................................................................................ .................,<
/peraAo ?/R............................................................................. ..................,B
/peraAo P/T.................................................................................. .............,B
E2erc:cios...................................................................................... ....................,B
7(ocos de co*andos........................................................................... ..................,8
Estruturas de contro(e....................................................................................... ,8
Estrutura i'....................................................................... .............................,8
Estrutura D3i(e............................................................................. .................,9
Estrutura do...D3i(e.................................................................... ...................0"
Estrutura 'or.................................................................................. ................0"
Estrutura 'oreac3........................................................... ...............................0"
1o*andos brea6 e continue....................................... .................................0,
Estrutura sDitc3.................................................................... ........................0,
)unA8es............................................................................................... ..............00
Ea(or de retorno........................................................ ....................................00
Aru*entos ou parR*etros........................................... ...............................05
Passae* de parR*etros por re'erSncia......................................................05
Eari+veis (obais e (ocais............................................................ ......................09
Processando )or*u(+rios co* PHP................................................... ....................09
Array super(oba( TU.ET............................................................................ .......0<
Array Super(oba( TUP/ST................................................ ...............................0B
)or*ataAo de dados........................................................................................ 0B
)unAo 3t*(specia(c3arsVW................................................. ...........................0B
'unA8es adds(as3esVW e strips(as3esVW........................................ ...................08
'unA8es ur(encodeVW e ur(decodeVW............................................... .................08
'unA8es intva(VW e doub(eva(VW........................................... ............................09
'unA8es tri*VWX (tri*VW e c3opVW.....................................................................09
Ea(idaAo de 'or*u(+rios co* Yavascript..........................................................09
Ea(idaAo co* PHP........................................................................................ ....51
EspaAos e* branco.................................................................... ...................51
Quantidade *:ni*a de caracteres.................................................... ............51
1orreAo auto*+tica........................................................................... ..........51
Ea(ores nu*-ricos.......................................................................... ..............5,
Ar=uivos de te2to................................................................................. .............59
Manipu(ando Ar=uivos .................................................................................. ....59
Abertura................................................................................... .....................59
0
PHP e MySQL
)ec3a*ento.............................................................. ....................................5<
Leitura......................................................................................... ..................5<
Escrita............................................................................... ............................58
)unA8es Re=uire e @nc(ude...................................................... ..........................59
MySQL e PHP...................................................................................................... ...59
Estrutura de u* 7anco de Qados............................................ .........................9"
Acessando MySQL............................................................................... ..............9"
1o*andos s=(............................................................... ....................................9"
1o*ando create.................................................................................. ..........9"
13ave pri*+ria e c3ave estraneira................................................ .............9,
1riando tabe(as......................................................................... ....................9,
1o*ando insert.................................................................................. ...........90
1(+usu(a D3ere...................................................................................... ........95
1o*ando update..................................................................................... ......95
1o*ando a(ter tab(e.................................................. ...................................95
1o*ando de(ete............................................................................... ............99
1o*ando se(ect.......................................................... ..................................99
13aves estraneiras................................................. ....................................98
Tipos de tabe(as ....................................................................... ....................98
Re(acionando tabe(as...................................................... ..........................<"
Re(aciona*entos entre tabe(as............................................................... ......<"
1on'iurando usu+rios no MySQL............................................... ......................<1
Siste*a de privi(-ios................................................................... ................<1
1oncedendo privi(-ios Z co*ando .RAPT..................................................<,
1onectando%se ao MySQL co* o PHP...................................... .........................<,
1one2o.............................................................................. ..........................<0
E2ecutando =uery!s SQL............................................... ................................<0
/rani[ando os dados da consu(ta...............................................................<5
Retornando o nG*ero de (in3as................................................ ....................<5
)ec3ando a cone2o................................................... ..................................<9
Ap(icaA8es e* PHP e MySQL............................................................................... ..<<
MOdu(o de cadastro............................................................................. ..........<B
MOdu(o de e2c(uso.................................................................................... ...<B
MOdu(o de pes=uisa Z parte 1............................................. ..........................<8
MOdu(o de pes=uisa Z parte ,............................................. ..........................<9
MOdu(o de a(teraAo................................................................................... ...B"
1oo6ies e Sess8es % AutenticaAo.................................................................. ...B0
1oo6ies...................................................................................................... ....B0
Sess8es............................................................................... ..........................B0
PHP /rientado a /bYetos.................................................. ....................................BB
Principais co*ponentes .............................................................. .....................BB
1(assesX atributos e *-todos....................................................... .................BB
M-todos construtores e destrutores.............................................................81
Modi'icadores de Acesso........................................................................... ........8,
Modi'icador pub(ic.......................................................................... ...............8,
Modi'icador private........................................................... ............................8,
Modi'icador protected............................................................ .......................80
HeranAa................................................................................................ .........80
5
PHP e MySQL
Sobrescrever *-todos..................................................... .............................85
.(oss+rio de 'unA8es do PHP................................................ ................................89
Qatas............................................................................................................ .....89
QateVW........................................................................................... .................89
.etdate............................................................................... ..........................8<
.**6ti*eVW.................................................................................... ..............8<
.*str'ti*eVW................................................................................................ ..8<
Microti*eVW........................................................................................ ............8<
M6ti*eVW............................................................................................. ...........8B
Str'ti*eVW.............................................................................................. .........8B
Ti*eVW................................................................................................. ...........88
QiretOrios.......................................................................... ................................88
13dirVW.................................................................................... .......................88
1(osedirVW................................................................................................ .......88
/pendirVW......................................................................................... ..............88
ReaddirVW....................................................................... ................................88
E2ecuAo de Prora*as............................................................................ ........88
Escapes3e((c*dVW........................................................................ ..................88
E2ecVW....................................................................................... .....................89
Passt3ruVW..................................................................................... .................89
Syste*VW................................................................................................ ........89
Siste*a de ar=uivos do servidor ..................................................................... .89
7asena*eVW....................................................................................... ............89
13rpVW........................................................................................ ..................9"
13*odVW........................................................................... .............................9"
13oDnVW............................................................................................... ..........9"
1opyVW............................................................................................................ 9"
Qe(eteVW.................................................................................. .......................9"
Qirna*eVW..................................................................................... .................9"
)c(oseVW........................................................................................................ ..9"
)eo'VW.............................................................................................. ...............9"
)i(eVW.................................................................................. ............................91
)i(eUe2istsVW................................................................ ...................................91
)i(esi[eVW.................................................................................. ......................91
)i(etypeVW............................................................................... ........................91
)openVW.......................................................................................... ................91
)putsVW................................................................................................ ...........9,
)readVW............................................................................................... ............9,
)DriteVW................................................................................................. .........9,
Read'i(eVW.............................................................................................. .........9,
Rena*eVW...................................................................................................... .90
Mate*+tica................................................................................ .......................90
AbsVW...................................................................................................... ........90
7aseUconvertVW...................................................................... ........................90
Ma2VW........................................................................................... ..................90
MinVW.............................................................................................. ................90
MtUrandVW................................................................................................ .......90
PiVW..................................................................................................... ............90
9
PHP e MySQL
PoDVW.................................................................................. ...........................90
RandVW........................................................................ ...................................90
RoundVW.......................................................................................................... 95
SinVW......................................................................................................... ......95
S=rtVW........................................................................................... ..................95
TanVW.................................................................................... ..........................95
)unA8es diversas............................................................................................ ...95
Eva(VW................................................................................................ .............95
QieVW................................................................................. .............................95
E2itVW............................................................................................................ ..95
Mai(VW....................................................................................... ......................95
Pac6VW................................................................................ ............................99
S(eepVW.................................................................................................. .........99
Trata*ento de sess8es.......................................................... ...........................99
SessionUdecodeVW................................................................ ..........................99
SessionUdestroyVW........................................................................... ...............99
SessionUencodeVW............................................................... ...........................9<
SessionUstartVW........................................................... ...................................9<
SessionUisUreisteredVW............................................................................... ...9<
SessionU*odu(eUna*eVW................................................ ...............................9<
SessionUna*eVW................................................................................. ............9<
SessionUreisterVW...................................................................................... ....9<
SessionUunreisterVW................................................................................... ...9<
Strins...................................................................................................... .........9<
Adds(as3esVW............................................................................................. .....9<
13opVW........................................................................... ................................9B
1ryptVW............................................................................................ ...............9B
Ec3oVW............................................................................................... .............9B
E2p(odeVW.......................................................................................... .............9B
Ht*(entitiesVW......................................................................... .......................9B
Ht*(specia(c3arsVW............................................................... .........................9B
@*p(odeVW............................................................................................... ........9B
Ltri*VW............................................................................... ............................98
Md9VW................................................................................................... ..........98
ParseUstrVW.............................................................................. .......................98
Strc*pVW.............................................................................. ..........................98
StripUtasVW............................................................................................... .....98
Strips(as3esVW................................................................. ...............................98
Str(enVW.................................................................................. ........................98
StrrevVW........................................................................................ ..................99
Strto(oDerVW............................................................................ .......................99
StrtoupperVW............................................................. .....................................99
StrUrep(aceVW............................................................................................ ......99
Tri*VW................................................................................................. ............99
\c'irstVW............................................................................ .............................99
\cDordsVW................................................................................... ...................99
Eari+veis..................................................................... ....................................1""
Qoub(eva(VW................................................................................................ ..1""
<
PHP e MySQL
E*ptyVW.......................................................................... .............................1""
.ettypeVW........................................................................................... ..........1""
@ntva(VW.................................................................................................... .....1""
@sUarrayVW.................................................................................. ...................1""
@sUdoub(eVW.................................................................................................. .1""
@sU'(oatVW............................................................................ ..........................1""
@sUintVW............................................................................... ..........................1""
@sUobYectVW.................................................................................................. ..1"1
@sUrea(VW........................................................................ ...............................1"1
@sUstrinVW......................................................................... ...........................1"1
@ssetVW.................................................................................... ......................1"1
SettypeVW.......................................................................... ...........................1"1
Strva(VW............................................................................ ............................1"1
Re'erSncias 7ib(ior+'icas........................................................................... ........1",
B
PHP e MySQL
Reviso de HTML
HTML significa Hiper Text Markup Language Linguagem de Marca!o de Hiper
Texto. Com ela" podemos formatar documentos inteiros para exi#i!o na $nternet"
transformado textos simples em hipertexto.
A $nternet % nada mais do &ue uma grande rede de computadores" formada por
outras redes menores" compartilhando informa'es. (ara &ue essas informa'es se)am
compartilhadas entre os mesmos" % preciso &ue se)am disponi#ili*adas de forma &ue todo e
&ual&uer computador possa interpretar. HTML % uma linguagem padr!o para di+ulga!o de
documentos na rede" portanto" &ual&uer computador de+e ser capa* de interpret,-lo.
.m documento escrito em HTML %" em geral" chamado de p,gina /e#. 0 con)unto
dessas p,ginas forma um site 1lugar" em ingl2s3. Seu conte4do % chamado de hipertexto"
pois pode ser compreendido por &ual&uer computador" en&uanto &ue o texto comum pode
ser +isto em um computador de uma forma e em outro de outra forma. .m site pode conter
&uais&uer informa'es &ue se &ueira disponi#ili*ar +ia internet" mas para &ue ele se)a +isto"
% preciso &ue se)a pu#licado. (ara isso" existem os ser+idores /e#. Trata-se de
computadores &ue arma*enam e disponi#ili*am esses sites para +isita!o" a custos
relati+amente #aixos.
Al%m disso" de+e-se usar um programa capa* de interpretar o c5digo HTML da
p,gina" aplicar sua formata!o ao documento e exi#ir o resultado. 6ste programa %
chamado de #ro/ser ou na+egador. 0s na+egadores mais conhecidos s!o o Mo*illa 7irefox"
$nternet 6xplorer" 0pera e 8etscape.
HTML % uma linguagem est,tica" ou se)a" uma +e* escrito" sua estrutura permanece
inalterada.
Estrutura HTML
HTML % composto por tag9s" &ue s!o marca'es delimitadas pelos s:m#olos ;<= e
;>=" usados para indicar uma formata!o. 6x: Todo documento HTML de+e iniciar com a tag
<html> e terminar com a tag <?html>. 6ssas tags delimitam o documento" sendo &ue o
&ue esti+er fora delas n!o ser, considerado um documento HTML" e portanto n!o ser,
interpretado como hiper texto" e sim como texto comum. 6x:
<html>
...
pgina web
...
</html>
.m documento HTML % formado #asicamente por ca#ealho e corpo. 8o ca#ealho"
fornecemos informa'es" como o nome da p,gina" autor" pala+ras-cha+e para pes&uisa" etc.
6ssas informa'es n!o ficam expostas no na+egador do usu,rio.
Ca#ealhos iniciam com a tag <head> e terminam com <?head>. A maioria tas tags
HTML possuem in:cio e final.
@entro do ca#ealho da p,gina definimos o t:tulo da mesma. 0 t:tulo da p,gina ser,
8
PHP e MySQL
o conte4do entre as tags <title> e <?title>. 6sse t:tulo aparecer, na #arra de t:tulo do
na+egador. Ae)amos nosso exemplo:
<html>
<head>
<title>Minha Pgina Web!!!</title>
</head>
...
</html>
@igite o c5digo acima e sal+e como pagina.html e a#ra-o usando o na+egador de sua
prefer2ncia.
Agora" definiremos o corpo da p,gina. Todo seu conte4do ser, +isuali*ado dentro do
na+egador. 0 corpo da p,gina comea com a tag <#odB> e termina com <?#odB>.
<html>
<head>
<title>Minha Pgina Web!!!</title>
</head>
<body>
...
</body>
</html>
Altere o ar&ui+o pagina.html para &ue fi&ue como o c5digo acima" depois sal+e. C,
temos a estrutura de um documento HTML. Agora" +amos adicionar conte4do a esta p,gina.
Atributos
A grande maioria das tag9s HTML possuem atri#utos" &ue s!o +alores passados a elas
para &ue as mesmas assumam uma formata!o diferente. 6xemplo: Se &uisermos o corpo
da p,gina a*ul" podemos alterar o atri#uto #gcolor da tag #odB" alterando seu +alor para
#lue.
<html>
<head>
<title>Minha Pgina Web!!!</title>
</head>
<body bgcolor=blue>
...
</body>
</html>
9
PHP e MySQL
Principais Tag's HTML
Aamos agora conhecer as tag9s mais utili*adas na cria!o de uma p,gina HTML e
seus principais atri#utos. H, uma +asta &uantidade de tag9s &ue podem ser utili*adas"
dependendo do resultado dese)ado. A&ui" faremos apenas um #re+e resumo das principais"
mas sinta-se D +ontade para pes&uisar e desco#rir no+as tag9s e atri#utos para adicionar D
sua p,gina /e#.
@igite os exemplos dentro do corpo da p,gina do exemplo acima. Sal+e" depois a#ra-
o no na+egador de sua prefer2ncia" ou atuali*e o na+egador usando a tecla 7E.
<!-- e -->
.sados para indicar um coment,rio. coment,rios n!o s!o exi#idos no na+egador. S!o
utili*ados para uma melhor orienta!o pelo c5digo HTML.
<body> <!-- incio do corpo da pgina -->
<!-- colocar um ttulo aqui -->
</body> <!-- fim do corpo da pgina -->
<Hn>
@efine um t:tulo. n pode ser &ual&uer +alor entre F e G. Huanto maior o n4mero"
menor o tamanho do t:tulo.
<h1>Ttulo tamanho 1</h1>
<h2>Ttulo tamanho 2</h2>
<br>
Adiciona uma &ue#ra de linha ao texto. forando-o a continuar na linha de #aixo.
Mesmo &ue o texto dentro do documento ocupe apenas uma linha" o na+egador far, a
&ue#ra de linha sempre &ue encontrar a tag <#r>.
Este um texto que <br> recebeu uma quebra de linha <br> aqui
<p>
$nicia um no+o par,grafo" separando assim" #locos de texto distintos.
<p> Iniciei um pargrafo. Dentro dele, posso adiconar qualquer contedo e usar
<br> quebra de linha para que no ocupe apenas uma linha. <br> Quando o
pargrafo terminar, eu posso simplesmente iniciar outro <p> Pargrafos no
precisam ser encerrados, pois o incio do prximo o final do anterior.</p>
<a>
6ssa tag indica a presena de um link. Links s!o liga'es entre documentos HTML.
6les direcionam o na+egador para um ponto dentro do documento" para outro documento
1"
PHP e MySQL
HTML" para outro ar&ui+o ou at% para outro site. Seu principal atri#uto % href" &ue
determina para &ual documento o link % direcionado. 0 conte4do contido entre as tag9s <a>
e <?a> torna-se o link em si. (ode ser uma frase" uma imagem ou um campo do
documento.
<a href=pagina2.html>Pagina 2</a>
<a href=pasta/arquivo.jpg>Abre uma imagem no navegador</a>
<a href=http://www.umsitequalquer.com>Direciona para outro site</a>
<font>
.sada para formatar texto do documento. Seus principais atri#utos s!o:
face: 8ome da fonteI
sie: tamanho da fonteI
co!or: cor da fonteI
<font face=Times New Roman size=14 color=red>Texto Formatado</font>
<table>
Ta#elas s!o estruturas utili*adas para organi*ar e posicionar os elementos na p,gina.
Ta#elas cont%m linhas" &ue por sua +e*" cont%m c%lulas. @entro das c%lulas" adicionamos o
conte4do da p,gina. Seus principais atri#utos s!o:
bgco!or: cor de fundo
"idt#: largura 1pode ser indicada em pixels ou em percentuais3
#eig#t: altura
border: espessura da #orda
<tr>
Marca o in:cio de uma linha da ta#ela
<td>
Marca o in:cio de uma c%lula dentro de uma linha. Seus principais atri#utos s!o:
ce!!spacing: espao entre as c%lulas
ce!!padding: distJncia entre o conte4do e a #orda da c%lula
co!span: indica &ue a c%lula ocupa o espao de n c%lulas 1colunas3
ro"span: ocupa o espao de n linhas
<table border=1 width=100% height=500 bgcolor=gray>
<tr>
<td cellpadding=0 colspan=3 bgcolor=pink>Clula Rosa</td>
</tr>
<tr>
<td cellpadding=0 cellspacing=0 bgcolor=blue>Clula Azul</td>
11
PHP e MySQL
<td cellpadding=0 cellspacing=0 bgcolor=red>Clula Vermelha</td>
<td cellpadding=0 cellspacing=0 bgcolor=green>Clula Verde</td>
</tr>
</table>
$or%u!&rios
7ormul,rios s!o estruturas usadas para &ue o +isitante possa interagir com o site"
en+iando informa'es para o site. 6ssas informa'es s!o processadas por scripts &ue
capturam as informa'es en+iadas e as processam" retornando um resultado" gra+ando-as
no #anco de dados do site" etc....
0 campo pertencente ao formul,rio % delimitado pelas tag9s <form> e <?form>.
@entro dessas tag9s inserimos os elementos do formul,rio 1campos de texto" #ot'es" etc3.
6sses elementos ir!o capturar a informa!o fornecida pelo +isitante e en+iar ao script para
processamento. Cada elemento possui um nome &ue % referenciado pelo script na captura
de informa'es.
0s principais atri#utos da tag form s!o:
action: indica o script &ue ir, processar as informa'es en+iadas pelo formul,rio
%et#od: indica o m%todo de en+io das informa'es
As informa'es de um formul,rio podem ser en+iadas atra+%s de dois m%todos: K6T
e (0ST.
Mtodo GET
.sado para en+iar pe&uenas &uantidades de informa!o" +isto &ue sua capacidade de
en+io % limitada. 0 m%todo K6T usa a #arra de endereos do na+egador para en+iar
informa'es para o ser+idor. (ossui um limite de LEG caracteres" sendo &ue o excedente
pode 1 e aca#a3 se perdendo durante a transmiss!o. M o m%todo de en+io mais r,pido e
tam#%m o menos seguro" pois as informa'es en+iadas atra+%s deste m%todo ficam
explicitamente +is:+eis na #arra de endereos" o &ue o torna um m%todo pouco seguro" +isto
&ue informa'es confidenciais 1senhas" n4meros de cart'es" etc3 tornam-se +is:+eis a
&ual&uer pessoa. A .NL do site assume o seguinte aspecto:
http://www.sitequalquer.com?informao1=valor1&informao2=valor2
0 sinal ;O= indica &ue % o fim do endereo do site e o in:cio das informa'es &ue
ser!o en+iadas atra+%s do m%todo K6T. ;$nforma!oF= e ;$nforma!oL= s!o as +ari,+eis"
&ue cont%m os +alores &ue ser!o en+iados para o ser+idor. ;AalorF= e ;+alorL= s!o os +alores
das respecti+as +ari,+eis. 0 sinal ;P= % usado para separar uma +ari,+el da outra.
Mtodo POST
0posto ao anterior" as informa'es s!o en+iadas de forma mais segura" possi#ilitando
o uso de criptografia e outros recursos de segurana. 8!o h, um limite para a &uantidade
de informa'es &ue pode ser en+iada atra+%s deste m%todo" por%m" % o mais lento. (ara
us,-lo.
1,
PHP e MySQL
Formulrios usando GET e POST
(ara utili*ar &ual&uer um dos dois m%todos mencionados acima para en+iar
informa'es de um formul,rio" de+emos declar,-lo dentro da tag <form>" como nos
exemplos a seguir:
<form action=script.php method=GET> <!-- usando GET -->
<form action=script.php method=POST> <!-- usando POST -->
Elementos do Formulrio
A seguir" +eremos os principais elementos de um formul,rio. 0s elementos do
formul,rio possuem um atri#uto comum chamado name. 6le indica o nome de cada
elemento. 6ste nome ser, tratado pelo script como uma +ari,+el 1algo &ue cont%m uma
informa!o3" portanto" cada elemento de+e ter um atri#uto name distinto" para &ue se)a
diferenciado pelo script.
ampo de Te!to
(ermite a entrada de texto pelo usu,rio. .sado para preenchimento de nomes"
endereos e outras informa'es simples. Seus principais atri#utos s!o:
name: nome do campo de texto
+alue: +alor padr!o para o campo
si*e: tamanho do campo
maxlenght: &uantidade m,xima de caracteres aceitos pelo campo
Nome: <input type=text name=nome_do_visitante size=50 maxlenght=50
value=Digite aqui seu nome>
8ote &ue usamos a tag <input>. 6sta tag pode assumir formas di+ersas" como
campos de texto" senhas" #ot'es" etc. 0 &ue torna-a um campo de texto % o +alor do
atri#uto tBpe. Huando indicamos o +alor text" a tag input tornou-se um campo de texto.
0utras formas desta tag ser!o +istasa seguir.
ampo de Sen"a
Semelhante ao campo de texto" por%m n!o aceita o atri#uto +alue. .tili*ado para a
digita!o de informa'es confidenciais" principalmente senhas.
Senha: <input type=password name=senha size=12 maxlenght=12>
#rea de Te!to
A#re uma ,rea para digita!o de texto. @e+emos informar o n4mero de linhas e
colunas &ue a ,rea de texto ir, ocupar. $sto % feito atra+%s dos atri#utos ro/s 1linhas3 e cols
1colunas3.
Comentrio: <textarea name=comentario rows=10
cols=10>comentrio:</textarea>
10
PHP e MySQL
$istbo! e ombobo!
Cria uma lista de op'es para serem selecionadas. 0 com#o#ox mostra apenas um
+alor de cada +e* em um menu tipo ;cortina=" en&uanto o list#ox mostra mais de um +alor"
em forma de ;lista=. Am#os utili*am a mesma tag 1<select>3" por%m" o list#ox rece#e o
atri#uto si*e" informando &uantos +alores ser!o mostrados por ele. Am#os rece#em o
atri#uto multiple" &ue permite a sele!o de m4ltiplos +alores.
<!-- exemplo de listbox -->
<select name=cidade size=5 multiple>
<option value=guaira>Guaira</option>
<option value=umuarama>Umuarama</option>
<option value=lovat>Lovat</option>
<option value=cascavel>Cascavel</option>
<option value=cianorte>Cianorte</option>
</select>
<!-- mesmo exemplo, agora como combobox -->
<select name=cidade>
<option value=guaira>Guaira</option>
<option value=umuarama>Umuarama</option>
<option value=lovat>Lovat</option>
<option value=cascavel>Cascavel</option>
<option value=cianorte>Cianorte</option>
</select>
"e%&bo!
Cria caixas de sele!o" possi#ilitando ao +isitante selecionar mais de uma op!o. 0
atri#uto checked fa* com &ue a op!o aparea marcada no formul,rio. 0 atri#uto +alue %
o#rigat5rio.
Selecione uma cidade:<br>
<p align=center>
<input type=checkbox name=pesquisa[] value=umuarama>Umuarama<br>
<input type=checkbox name=pesquisa[] value=guaira checked>Guaira<br>
<input type=checkbox name=pesquisa[] value=curitiba>Curitiba<br>
</p>
0#s: 8ote &ue o atri#uto name possui em seu +alor" o nome pes&uisa" seguido de colchetes. $sso ser,
discutido mais adiante...
'ot(o radio
Semelhante ao Check#ox" por%m" permite a sele!o de apenas uma op!o dentre as
oferecidas. 1@iferencia-se do check#ox pelo formato arredondado3.
Enquete:<br>
Que nota voc daria ao nosso formulrio?<br>
<p align=center>
<input type=radio name=nota value=5>Otimo
<input type=radio name=nota value=4>Bom
<input type=radio name=nota value=3>Regular
<input type=radio name=nota value=2>Ruim
<input type=radio name=nota value=1>Pssimo
15
PHP e MySQL
</p>
0#s: 8ote &ue o atri#uto name de cada #ot!o radio possui o mesmo +alor. $sso ser, discutido mais
adiante...
'ot)es Submit e *eset
0 #ot!o su#mit en+ia as informa'es do formul,rio para o script indicado" utili*ando
o m%todo indicado 1K6T ou (0ST3. 0 #ot!o reset apaga tudo o &ue foi digitado no
formul,rio. M indicado colocar um #ot!o reset no formul,rio" caso o usu,rio desista de
en+iar o formul,rio ou n!o &ueira manter suas informa'es no computador 16x: &uando
esti+er usando um computador p4#lico3.
0 atri#uto name % opcional" mas pode ser usado" caso ha)a necessidade de se ter
mais de um #ot!o su#mit ou reset dentro de um mesmo formul,rio.
<input type=submit name=botao value=enviar><!-- boto 'enviar' -->
<input type=reset name=limpar value=limpar><!-- boto 'limpar' -->
E'erc(cios:
Monte o laBout do seu site. .se ta#elas para organi*ar o conte4do. 0 site de+e ter
um #anner na parte superior" uma coluna para o conte4do" outra coluna para o menu
de na+ega!o do usu,rio e um rodap% contendo seu nomeI
8o espao destinado ao conte4do" monte seu curriculum +itae.
8a coluna ao lado" crie uma ta#ela contendo Q linhas e uma coluna. A#aixo dela" crie
um formul,rio de en&uete e pea para &ue o +isitante d2 uma nota ao seu site
A#aixo de seu curriculum" crie outro formul,rio para &ue o +isitante possa adicionar
coment,rios ao conte4do do site. 0 +isitante de+e informar o nome" localidade" e-
mail de contato" uma nota para o conte4do e um coment,rio.
19
PHP e MySQL
PHP
) *ue + PHP,
(H( 1HBpertext (re(rocessor3 % uma linguagem de programa!o de scripts para
manipula!o de p,ginas HTML. Criada por Nasmus Lerdorf em FRRS" % amplamente utili*ada
na programa!o de /e# sites dinJmicos" especialmente para manipula!o de #anco de
dados.
-aracter(sticas do PHP
(H( % gratuito: @istri#u:do so# a licena K(L" possui seu c5digo-fonte 1c5digo
utili*ado para sua cria!o3 a#erto" o &ue facilita a corre!o de e+entuais erros no
c5digo" permitindo seu r,pido desen+ol+imento
(H( % multiplataforma: $nicialmente foi desen+ol+ido para ser usado em ser+idores
.nix?Linux 1&ue compreendem TUV dos ser+idores /e#3" ganhando uma +ers!o para
Windo/s e para Macintosh posteriormente. $sso fa* do (H( uma linguagem capa* de
ser executada independente da plataforma utili*ada.
(H( % compat:+el com a a maioria dos ser+idores /e# dispon:+eis no mercado" tendo
suporte nati+o para o ser+idor Apache 1atualmente o mais utili*ado no mercado3.
(H( suporta #anco de dados: (ossui suporte nati+o ao MBSHL" por%m pode utili*ar
outros sistemas de gerenciamento de #anco de dados 1SKX@3" dentre eles" 0racle"
SB#ase" mSHL" 7ire#ird" (ostgreSHL e @XL. (ermite tam#%m o uso de mais de um
#anco de dados na mesma aplica!o.
(H( suporta uma grande +ariedade de protocolos" dentre eles" $MA(" (0(Q" SMT("
YML" L@A(" HTT( e 7T(.
ASP . PHP
A linguagem AS( foi desen+ol+ida so# os mesmos o#)eti+os do (H(" por%m" por ter
sido desen+ol+ida pela Microsoft" funciona apenas em plataformas Microsoft" exigindo &ue
seu ser+idor tenha Windo/s LUUQ Ser+er instalado" por exemplo. $sso fa* do AS( in+i,+el"
de+ido a custos de licena" podendo +ariar entre .SZL.EUU"UU e .SZFU.UUU"UU. Al%m disso"
o fato do AS( ter seu c5digo ;fechado= dificulta seu desen+ol+imento e a corre!o de #ugs"
tornando a linguagem suscet:+el a erros.
Re*uisitos
(H( exige apenas a instala!o de um ser+idor /e# compat:+el. Caso &ueira utili*ar
um #anco de dados" instale um &ue se)a compat:+el. Necomendamos a utili*a!o do
Ser+idor /e# Apache e do #anco de dados MBSHL" por terem suporte nati+o ao (H(.
1<
PHP e MySQL
/nsta!a0o do PHP
+mbiente ,indo-s
A instala!o em am#iente Windo/s % simples. 0 instalador ir, configurar o am#iente
completo para o (H(. Aoc2 s5 de+er, informar o nome do ser+idor 1na d4+ida" deixe
localhost" seu nome e seu e-mail para contato.
6xiste um instalador para Windo/s &ue cont%m o ser+idor Apache" o (H( e o #anco
de dados MBSHL" al%m de outros recursos para administra!o de sites. Trata-se do Yampp.
0 instalador pode ser #aixado em ///.xampp.org.
(ara sa#er se a instala!o foi conclu:da com sucesso" a#ra o editor de texto de sua
prefer2ncia e adicione as seguintes linhas:
<?
phpinfo()
?>
Sal+e com o nome de info.php e colo&ue-o na pasta C:[xampp[htdocs. A#ra seu
na+egador de internet preferido e digite na #arra de endereos: http:??localhost?info.php. 0
resultado ser, uma lista detalhada da configura!o do (H( em seu computador. 6sta lista %
gerada pelo pr5prio php. 6ste script ser, explicado mais adiante.
+mbiente $inu!
Ao contr,rio do &ue muita gente pensa" a instala!o em am#iente Linux pode ser t!o
simples &uanto a instala!o em am#iente Windo/s" especialmente se hou+er conex!o com
a internet. Sistemas operacionais Linux s!o #aseados em pacotes" ou se)a" cada programa %
um pacote ou um con)unto de pacotes &ue podem ser instalados" atuali*ados e remo+idos
atra+%s de comandos simples ou utilit,rios gr,ficos" como o SBnaptic. A instala!o atra+%s
da linha de comando +aria em cada caso. Se +oc2 usa um sistema #aseado em @e#ian"
como .#untu" \urumin ou \noppix" +oc2 pode utili*ar o comando apt da seguinte forma:
A#ra o terminalI
@igite su e aperte 6nter para poder logar-se como administrador do sistemaI
@igite a senha do administradorI
@igite o seguinte comando:
apt-get install apacheL phpE mBs&lE mBs&ladmin phpmBadmin
Caso seu sistema se)a #aseado em Ned Hat" como 7edora" Mandri+a ou Cent0S"
su#stitua o apt-get do comando acima por ]um. Caso use Mandri+a" su#stitua-o por urpmi.
Bum install apacheL phpE mBs&lE mBs&ladmin phpmBadmin
urpmi install apacheL phpE mBs&lE mBs&ladmin phpmBadmin
6ste comando far, com &ue o sistema instale o ser+idor Apache" o (H(" o #anco de
dados MBSHL" o administrador do MBSHL e o (hpMBAdmin" usado para administrar
remotamente o site.
1B
PHP e MySQL
Caso prefira uma maneira mais f,cil de reali*ar esta tarefa" #asta usar o gerenciador
de pacotes SBnaptic. Se sua distri#ui!o n!o o possui" ele pode ser instalado atra+%s do
m%todo acima. 0 SBnaptic est, dispon:+el para &ual&uer distri#ui!o Linux. Ap5s instalado"
a#ra-o" digite a senha do Administrador 1root3" mar&ue" clicando com o mouse" os pacotes
&ue +oc2 &uer instalar. @epois cli&ue em aplicar. 6le ir, #aixar os pacotes necess,rios e
instalar em seu sistema. (ara sa#er se a instala!o foi conclu:da com sucesso" a#ra o editor
de texto de sua prefer2ncia e digite o seguinte c5digo:
<?
phpinfo()
?>
6m seguida" sal+e com o nome de info.php e mo+a-o para a pasta ?+ar?///. 6m
seguida" a#ra o na+egador de sua prefer2ncia e digite o seguinte endereo:
http:??localhost?info.php. 0 resultado ser, uma lista detalhada da configura!o do (H( em
seu computador. 6sta lista % gerada pelo pr5prio php. 6ste script ser, explicado mais
adiante.
Scripts -!ient1Side e Server1Side
Scripts Client-Side 1Lado-Cliente3 s!o executados no computador do pr5prio cliente"
por exemplo" o c5digo HTML" &ue % executado direto no na+egador. S!o muito utili*ados
para o processamento de pe&uenas tarefas" tirando essa responsa#ilidade do ser+idor /e#"
&ue fica li+re para executar os scripts Ser+er-Side 1Lado-Ser+idor3" &ue s!o" por exemplo" os
scripts (H(. Huando o usu,rio clica em um #ot!o de #usca" o pedido de #usca % en+iado ao
ser+idor" &ue encontra o script respons,+el pela #usca e o processa. 0 resultado % colocado
em ;pacotes= e en+iado de +olta ao computador &ue re&uisitou a pes&uisa. .m ser+idor
pode ter muitos clientes reali*ando re&uisi'es desse tipo" portanto" % recomendado &ue
pe&uenas +erifica'es e tarefas menores se)am executadas por aplica'es Client-Side"
deixando as re&uisi'es mais importantes 1como conferir senhas por exemplo3 para o
Ser+idor. (H( % uma linguagem Ser+er-Side" ou se)a" sempre ser, o ser+idor &ue ir,
executar. Se sua p,gina cont%m muitos scripts (H( desnecess,rios" pode aca#ar
pre)udicando o ser+idor" tornando a conex!o mais lenta. .se o (H( com cuidado I-3
Sinta'e PHP
A linguagem (H( pode ser usada de duas formas: incorporado ao HTML ou de forma
;pura=" em scripts separados das p,ginas HTML. 6m am#os sua sintaxe % a mesma. Todo
c5digo (H( % delimitado por tags de a#ertura e fechamento 1como o html3" como mostrado
a#aixo:
Esti(o p3p !(ono! Esti(o p3p !curto! Esti(o ]avascript Esti(o ASP
#>p3p
...
>&
#>
...
>&
#script (anuaeJ HPHPI&
...
#Mscript&
#N
...
N&
Tudo &ue esti+er dentro dessas tag9s (H( ser, considerado script (H(" e n!o HTML.
C5digo (H( digitado fora das tag9s ser, interpretado como erro.
18
PHP e MySQL
0#s: Cada linha de c5digo (H( de+e terminar com ;I= para &ue a linguagem
reconhea o fim de uma linha de comando e o comeo de uma no+a.
-o%ent&rios
Coment,rios no (H( podem ser de duas formas:
omentrios de uma lin"a
.samos duas #arras ou asterisco para iniciar um coment,rio de uma linha. Tudo o
&ue for digitado ap5s estes caracteres 1incluindo c5digo (H(3 n!o ser, interpretado pelo
ser+idor" lem#rando &ue coment,rios do c5digo ser!o +is:+eis apenas dentro do c5digo" ou
se)a" o na+egador n!o imprime um coment,rio na tela.
<?php
//este um comentrio de uma linha
#este tambm um comentrio de uma linha
?>
omentrios de .rias lin"as
.sados &uando o coment,rio ocupa mais de uma linha" s!o delimitados pelos sinais
9?^9 e 9^?9. Tudo &ue esti+er entre estes dois sinais ser, considerado coment,rio e n!o ser,
interpretado pelo ser+idor.
<?php
/*Este um exemplo de comentrioque ocupa mais de uma linha. Aqui
eu no preciso colocar o delimitador em todas as linhas.
O comentrio se encerra aqui */
?>
2ari&veis e% PHP
Aari,+eis s!o ;recipientes=" com a fun!o de arma*enar dados a fim de serem
utili*ados a &ual&uer momento pelo programa. @iferente de muitas linguagens de
programa!o" n!o % necess,rio declarar a exist2ncia de uma +ari,+el" ou mesmo o tipo de
informa!o &ue ela arma*enar,. Aari,+eis no (H( s!o identificadas pelo sinal ;Z= antes de
seu nome. 0s nomes de +ari,+eis n!o podem possuir caracteres especiais 1espaos"
acentos" etc3" com exce!o do underline 1;_=3. @e prefer2ncia" use nomes &ue indi&uem o
tipo de informa!o &ue a +ari,+el ir, arma*enar. 6xemplo de nomes +,lidos:
$nome, $endereco, $idade, $data_inscricao, $20assustar, $123;
(H( % Case Sensiti+e" ou se)a" diferencia mai4sculas e min4sculas. A +ari,+el Za %
diferente da +ari,+el ZA.
Tipos de .ari.eis
Aari,+eis de+em arma*enar um determinado tipo de informa!o. (H( n!o exige &ue
este tipo se)a informado" pois reconhece-o automaticamente. 0s tipos s!o:
84meros inteiros 1int ou integer3: 84meros naturais positi+os e negati+os. 6x: LE" -TI
19
PHP e MySQL
84meros 7racion,rios 1float" dou#le ou real3: 84meros fracion,rios" tam#%m
chamados de ponto flutuante ou dupla precis!o. 6x: Q"FSI
Caracteres alfanum%ricos 1String3: Aalores literais. 6x: ;Co!o da Sil+a=. Aalores do tipo
String de+em estar dentro de aspas ou ap5strofos. Mesmo +alores num%ricos" se
informados como strings" ser!o tratados como talI
Aalores #ooleanos 1#ool3: S!o do tipo Aerdadeiro ou 7also. (H( interpreta Aerdadeiro
como F e 7also como U. Aalores #ooleanos ser!o +istos mais adianteI
Aetores 1arraB3: Aetores s!o um con)unto ordenado de +ari,+eis. Cada +ari,+el possui
um :ndice" &ue pode ser num%rico ou literal 1no caso de arraB associati+o3. 6x:
Zlista`a. 0s colchetes ser+em para &ue determinada posi!o do +etor se)a
referenciada. 6x: Zlista`La. Aetores no (H( iniciam em U.
0#)eto 1o#)etc3: .tili*ados na programa!o orientada a o#)etos" onde definimos uma
classe" e dentro dela as +ari,+eis e fun'es &ue estar!o dispon:+eis aos seus o#)etos.
.ma +ari,+el do tipo o#)eto pode conter uma classe com di+ersas +ari,+eis e fun'es
para serem utili*adas. 6ste conceito ser, +isto mais adianteI
+tribuindo .alor / uma .ari.el
Como +imos anteriormente" +ari,+eis podem guardar &ual&uer tipo de +alor" mas para
isso % preciso &ue indi&uemos o +alor &ue de+e ser guardado dentro delas. (ara isso"
utili*amos um operador respons,+el por inserir na +ari,+el um determinado +alor. Trata-se
do sinal ;b=. 6x:
$salario = 700,00;
8a linha acima" a +ari,+el sal,rio rece#e o +alor TUU"UU &ue % do tipo float
1fracion,rio3. Cada linha de c5digo do (H( 1como em muitas linguagens de programa!o3
termina com o sinal ;I=. 6le indica o fim de uma linha de c5digo.
Aoc2 pode forar a +ari,+el a rece#er um tipo espec:fico de +alor" indicando o tipo
dese)ado entre par2nteses" antes da atri#ui!o. 6x: Se &uisermos &ue a +ari,+el Zsalario
rece#a o +alor como uma String em +e* de um inteiro" podemos reali*ar a con+ers!o do
+alor para String da seguinte forma:
$salario = (string) 700,00;
@essa forma" o conte4do da +ari,+el Zsalario n!o ser, um +alor num%rico e sim um
+alor literal" ou se)a" n!o h, mais o +alor TUU"UU e sim a string ;TUU"UU=.
(ara atri#uir a uma +ari,+el um +alor do tipo String" de+e-se colocar este +alor entre
aspas ou ap5strofo 1aspas simples3. Aalores dentro destes sinais s!o considerados Strings
1as diferenas entre elas ser!o comentadas adiante3. 6x:
$nome = SENAC;
$nome = 'senac';
,"
PHP e MySQL
E!ibindo o %onte0do na tela
(odemos exi#ir o conte4do de uma +ari,+el na tela com o uso do comando echo. 6le
imprime na tela o conte4do de uma +ari,+el. Tam#%m pode ser usado para imprimir c5digo
HTML. Sua sintaxe %:
echo conteudo $variavel <tag>;
8o exemplo acima" imprimimos um +alor literal" o +alor de uma +ari,+el e uma tag html.
Tam#%m podemos utili*ar ap5strofos no lugar de aspas" por%m" ap5strofos mostram o nome
de uma +ari,+el em +e* de seu conte4do. 6x:
$variavel = qualquer;
echo 'Valor $variavel';
0 exemplo acima imprimir, na tela: Aalor: Z+aria+el em +e* do +alor contido na
+ari,+el. (ara contornar este pro#lema" podemos utili*ar o operador de concatena!o (onto
1;.=3. Sua fun!o % concatenar 1unir3 as express'es Ds +ari,+eis. @essa forma" o exemplo
acima ficaria:
echo 'Valor '.$variavel;
@essa forma" Z+aria+el fica unida ao comando echo" &ue imprime seu +alor na tela.
Com o uso da concatena!o" a +ari,+el n!o precisa ficar entre ap5strofo ou aspas. 0
resultado ser,:
Valor qualquer
Arrays
ArraB 1ou Aetor3 % um con)unto ordenado de +ari,+eis. 6m um arraB" todas as
+ari,+eis possuem um :ndice" &ue pode ser um n4mero ou texto. 0 :ndice de+e aparecer
entre ;`; e ;a=" logo ap5s o identificador do arraB. 6x: Zlista`a ou Zlista`Ua.
8o (H(" os arrraBs iniciam-se em *ero. @iferente de outras linguagens" +oc2 n!o
precisa definir um n4mero limite de posi'es dentro de um arraB" pois ele se expande
dinamicamente.
Caso o +etor n!o se)a indicado entre os colchetes" o (H( ir, procurar pelo 4ltimo
elemento do arraB e atri#uir o no+o +alor na posi!o seguinte.
$lista[]; //isso indica que a varivel lista um array
$lista[0] = 10; //valor 10 na posio zero; a primeira posio do array
$lista[1] = 11; //valor 11 na posio 1
$lista[] = 12; //valor 12 colocado logo em seguida, na posio 2
$lista[] = 13; //valor 13 colocado na posio 3
$lista[7] = 14; //valor 14 colocado na posio 7, deixando as anteriores vazias
$lista[] = 15; //valor 15 colocado na posio 8 do array
(odemos utli*ar a fun!o arraB para atri#uir +alore a um +etor. 0s +alores de+em
estar entre par2nteses e separados por +:rgula. 6x:
$lista = array(10, 11, 12, 13, 14, 15);
Tam#%m % poss:+el utili*ar nomes em +e* de n4meros para referenciar um arraB"
criando assim um arraB associati+o. 6x:
$usuario['nome'] = Joo;
$usuario['idade'] = 25;
$usuario['cidade'] = Guaira;
,1
PHP e MySQL
$usuario['estado'] = Paran;
Pode*os uti(i[ar a 'unAo array para arrays associativosX indicando u*a
c3ave e u* va(orX separados pe(o sina( HJ&I Viua( e *aiorX 'or*ando u*a
setaW. E2;
$usuario = array(nome => Joo, idade => 25, cidade => Guaira, estado
=>Parana);
Cada posi!o do arraB possui um ;nome=" em +e* de um +alor num%rico. (odemos exi#ir seu
conte4do dessa forma:
echo O usurio .$usuario['nome']., de .$usuario['idade']. anos mora em .
$usuario['cidade']. - .$usuario['estado']..;
0 resultado do exemplo acima ser,:
0 usu,rio Co!o" de LE anos mora em Kua:ra (aran,
(odemos utili*ar mais de um :ndice em um arraB" tornando-o um arraB
multidimensional 1Matri*3. .ma matri* pode ser comparada a uma ta#ela" formada de linhas
e colunas. 6x:
$tabela[0][0];
$tabela[0][1];
$tabela[0][2];
$tabela[1][0];
$tabela[1][1];
$tabela[1][2];
8o exemplo acima" ter:amos uma ta#ela com Q linha e Q colunas. (odemos tam#%m
com#inar :ndices associati+os D matri*. 6x: .ma lista de times de fute#ol de cada cidade de
cada estado:
$time['MG']['BeloHorizonte'] = Atletico Mineiro;
$time['SP']['SaoPaulo'] = Corinthians;
$time['RS']['PortoAlegre'] = Gremio;
$time['PR']['Curitiba'] = Coritiba;
+rra1s super2lobais
S!o arraBs pertencentes ao (H(" entre eles est!o o arraB Z_K6T e Z_(0ST &ue
arma*enam o +alor das +ari,+eis en+iadas pelos formul,rios atra+%s dos respecti+os
m%todos K6T e (0ST. Al%m deles" temos o arraB ZKL0XALS" &ue arma*ena +ari,+eis glo#ais
definidas no script e os arraBs Z_S6SS$08 e Z_C00\$6" utili*ados em sess'es. Todos eles
ser!o +istos em detalhes mais adiante. A sintaxe para a utili*a!o destes arraB %:
ZANNA]`9+aria+el_ou_+alor9aI
0nde ANNA] % o nome do arraB superglo#al &ue ser, utili*ado e 9+aria+el_ou_+alor9 %
o nome da +ari,+el ou do +alor a ser extra:do do arraB.
,,
PHP e MySQL
)pera03es arit%+ticas
(ara reali*ar opera'es aritm%ticas no (H( utili*amos os seguintes operadores:
^ para o exemplo a#aixo" consideramos Za contendo o +alor S e Z# o +alor L
/peraAo /perador E2e*p(o Resu(tado
adiAo K Ta K Tb <
subtraAo % Ta % Tb ,
*u(tip(icaAo L Ta L Tb 8
diviso M Ta M Tb ,
*Odu(o Vresto da divisoW N Ta N Tb "
(odemos reali*ar uma opera!o aritm%tica e de atri#ui!o em uma 4nica linha. (ara
isso" precisamos apenas fa*er com &ue uma +ari,+el rece#a o +alor da opera!o. 6x:
$resultado = $a + $b * 2;
Lem#rando &ue +oc2 tam#%m pode usar sinais como par2nteses para indicar a ordem
de proced2ncia na opera!o aritm%tica. 6x: Hual a metade de dois mais doisO 0 resultado
pode ser diferente" conforme a ordem de proced2ncia dos operadores.
$valor = 2+2/2;
/* nesse caso, a diviso possui procedncia na operao, sendo executada antes
da adio. O resultado ser 3 */
$valor = (2+2)/2;
/* j neste caso, o que est entre parnteses possui procedncia maior do que a
diviso, ou seja, deve ser realizado primeiro. Neste caso, o resultado ser 2 */
)pera03es co% Strings e Atribui0o
Operador 345
.tili*amos o operador ;.= para concatenar 1unir3 dois +alores 1geralmente Strings3.
6x: &uando &ueremos unir o +alor de uma +ari,+el a uma string &ual&uer.
echo Meu nome .$nome. e moro em .$cidade. desde .$data..;
Operador 3465
.tili*amos operadore de atri#ui!o para adicionar a uma +ari,+el um no+o conte4do"
sem &ue o conte4do antigo se)a perdido. 6x: Atri#u:mos D +ari,+el Znome o nome do
usu,rio.
$nome = Leopoldo;
0 conte4do da +ari,+el % ;Leopoldo=. Agora" &ueremos adicionar o so#renome D
+ari,+el" mas de+emos fa*er isso sem &ue o nome se)a perdido. (ara isso" utili*amos o
operador ;.b=" &ue tem a fun!o de atri#uir o +alor D +ari,+el" sem &ue seu conte4do se)a
perdido.
$nome .= da Silva;
,0
PHP e MySQL
Agora" o conte4do da +ari,+el Znome % ;Leopoldo da Sil+a=.
Operadores 3775 e 3--5
0 operador ;cc= tem a fun!o de incrementar em F o +alor da +ari,+el. .tili*ado em
+ari,+eis ;contadoras=" % e&ui+alente D express!o ;Z+ari,+el b Z+ari,+el c F=. 6m oposi!o"
o operador ;--= decresce o +alor da +ari,+el em F. 6x: iniciamos a +ari,+el Zcontador como
tendo o +alor F e utili*amos os operadores ;cc= e ;--=. 0 resultado %:
$contador = 1; //varivel $contador possui valor 1
$contador++; //agora, $contador vale 2
$contador++; //$contador passa a valer 3
$contador--; //$contador volta a valer 2
$contador--; //$contador vale 1
Operadores 3765 e 3-65
Sua fun!o % incrementar ou decrementar D +ari,+el o +alor de outra +ari,+el.
6&ui+alente D express!o ;Z+aria+elF b Z+aria+elF c Z+aria+elL= e
;Z+aria+elF b Z+aria+elF +aria+elL=" respecti+amente. 6x:
$valor1 = 1; //inicia variveis
$valor2 = 2;
$valor3 = 3;
$cont = $valor3; //$cont agora vale 3
$cont += $valor2 //$soma $cont o valor em $valor2. $cont vale 5
$cont -= $valor1 //subtrai de $soma o valor de $valor1. $cont vale 4
Operadores 3865 e 3965
Semelhante aos anteriores" por%m o operador ;^b= multiplica o +alor das +ari,+eis"
en&uanto o operador ;?b= di+ide-os. 6x:
$valor1 = 4;
$valor2 = 2;
$cont = valor1; //$cont vale 4
$cont *= $valor2; //equivale a $cont = $cont * $valor2. $cont vale 8
$cont /= $valor1; //equivale a $cont = $cont / $valor1. $cont vale 2
Operador 3:65
Como podemos supor" % semelhante aos anteriores" por%m" o +alor acrescentado D
+ari,+el % o resto da di+is!o. 6x:
$valor1 = 2;
$valor2 = 4;
$cont = $valor2; //$cont vale 4
$cont %= $valor1
/*o resto da diviso entre $cont e $valor1 (4 e 2) acrescentado $cont, ou
seja. $cont = $cont + ($cont % $valor1). Como o resto da diviso entre 4 e 2
zero, a expresso seria equivalente a $cont = $cont + 0; */
)peradores de co%para0o
S!o utili*ados para comparar dois +alores ou duas express'es. Netorna o +alor F em
caso +erdadeiro e U em caso de falso. M atra+%s dos operadores de compara!o &ue
,5
PHP e MySQL
constru:mos testes l5gicos e estruturas de decis!o" &ue permitem ao script executar
determinada fun!o se determinada condi!o for satisfeita. S!o operadores de compara!o:
/peraAo operador Sinta2e
iua( JJ Ta JJ Tb MMretorna verdadeiro se 'ore* iuais
di'erente $J Ta $J Tb MMretorna verdadeiro se 'ore* di'erentes
*aiorM*enor # ou & Ta & Tb MMverdadeiro se Ta *aior =ue Tb
*aior ou
iua(M*enor ou
iua(
&J ou #J Ta &J Tb MMverdadeiro se Ta 'or *aior ou iua( a Tb
A opera'es de compara!o utili*ando os dois 4ltimos exemplos de+e ser utili*ada
com cuidado. 6x: Se possu:mos duas +ari,+eis Za e Z# contendo o mesmo +alor 1ex: o +alor
FU3" as seguintes opera'es retornar!o resultados diferentes:
operaAo resu(tado
Ta JJ Tb verdadeiro
Ta $J Tb 'a(so
Ta & Tb 'a(so
Ta # Tb 'a(so
Ta &J Tb verdadeiro
Ta #J Tb verdadeiro
0s dois 4ltimos exemplos retornaram o +alor +erdadeiro" pois a express!o a+aliou se
Za era maior ou igual e menor ou igual a Z#.
)peradores !4gicos
Compara'es como as citadas no exemplo acima s!o poss:+eis graas aos operadores
l5gicos. 6les a+aliam se uma express!o % +erdadeira ou falsa e retornam o resultado" sendo
+alor F para +erdadeiro e U para falso. 0s operadores l5gicos s!o:
/perador /peraAo
and ou ^^ E (Oico
or ou __ /\ (Oico
2or /\ He2c(usivoI
$ P`/ VneaAo ou inversoW
^ E (Oico Vbit a bitW
a ?/R (Oico Vbit a bitW
_ /R (Oico Vbit a bitW
b P`/ (Oico Vbit a bitW
)pera03es !4gicas
6m todas as linguagens de programa!o existem as estruturas chamadas estruturas
de decis!o" &ue s!o #locos de comandos" escritos de forma &ue executem determinada
fun!o caso uma condi!o se)a +erdadeira e outra caso se)a falsa. A pr5pria estrutura a+alia
,9
PHP e MySQL
a condi!o e se for +erdadeira" executa determinada1s3 fun!o1'es3I Caso se)a falsa"
executa fun!o1'es3 diferentes. (or%m" existem casos em &ue mais de uma condi!o de+e
ser a+aliada. (ara isso" utili*amos opera'es l5gicas. 6las a+aliam duas ou mais condi'es e"
atra+%s de opera'es l5gicas" determinam &ual ser, o resultado das condi'es a+aliadas. 0
programa" ent!o" ir, utili*ar este +alor para determinar o &ue fa*er. 6xistem #asicamente"
&uatro opera'es l5gicas chamadas: A8@" 0N" Y0N e 80T 16" 0." 0. 6YCL.S$A0 e 8d03.
0pera'es l5gicas permitem &ue o programa a+alie se uma condi!o % +erdadeira ou falsa e
execute fun'es espec:ficas com #ase nos resultados. Aeremos agora as principais
opera'es l5gicas:
Opera;(o +<=
0 operador A8@ retorna +erdadeiro apenas &uando todas as condi'es forem
+erdadeiras. .ma ta#ela de poss:+eis resultados % mostrada a#aixo.
condiAo 1 APQ condiAo , resu(tado
E APQ E E
E APQ ) )
) APQ E )
) APQ ) )
(odemos comparar a opera!o l5gica A8@ a uma multiplica!o. Su#stituindo o
Aerdadeiro por F e 7also por U" teremos o A8@ funcionando como um operador de
multiplica!o.
va(or 1 L va(or , Resu(tado
1 L 1 1
1 L " "
" L 1 "
" L " "
Opera;(o O*
A opera!o 0N n!o % t!o ;r:gida=. 0 resultado ser, +erdadeiro caso uma das
condi'es se)a +erdadeira. Seria id2ntico D uma opera!o de adi!o" por%m com uma
exce!o: 8a opera!o 0N" a soma F c F % igual a F. Ae)amos a ta#ela:
condiAo 1 /R condiAo , resu(tado
E /R E E
E /R ) E
) /R E E
) /R ) )
,<
PHP e MySQL
Transformando Aerdadeiro em F e 7also em U" teremos:
condiAo 1 K condiAo , resu(tado
1 K 1 1
1 K " 1
" K 1 1
" K " "
Lem#rando &ue n!o h, o +alor L na opera!o" portanto" F c F torna-se F.
Opera;(o >O*
A opera!o Y0N 10. 6YCL.S$A03 tem uma particularidade: Seu resultado ser,
+erdadeiro apenas se e somente se uma das condi'es for +erdadeira" retornando falsa caso
as duas tenham o mesmo +alor.
condiAo 1 ?/R condiAo , Resu(tado
E ?/R E )
E ?/R ) E
) ?/R E E
) ?/R ) )
Opera;(o <OT
Trata-se da mais simples de todas: 6la apenas in+erte o resultado de uma opera!o"
ou se)a" +erdadeiro torna-se falso e +ice-+ersa.
condiAo P/T resu(tado
E P/T )
) P/T E
E'erc(cios
6scre+a um script php &ue arma*ene em +ari,+eis o nome e a idade de uma pessoa.
@epois escre+a na tela" em uma 4nica mensagem" o nome e a idade da pessoa.
6scre+a um script &ue mostre o +alor de Q +ari,+eis num%ricas. @epois atri#ua D
primeira +ari,+el o +alor das outras duas +ari,+eis. Logo ap5s" acrescente F ao +alor
da segunda +ari,+el e decresa em F o +alor da terceira +ari,+el.
6scre+a um script &ue arma*ene em +ari,+eis o seu nome e o nome de E cores 1em
ingl2s3. .tili*ando apenas o comando echo" escre+a seu nome E +e*es na tela. Cada
ocorr2ncia do nome de+e ser de uma das cores pre+iamente arma*enadas nas
+ari,+eis. .tili*e a tag <font> para formatar os nomes.
,B
PHP e MySQL
5!ocos de co%andos
Xlocos s!o um con)unto de linhas de c5digo delimitadas pelos sinais ;e; e ;f=. Seu
o#)eti+o % agrupar comandos respons,+eis por determinada fun!o. Ae)amos como #locos
de comando podem ser utili*ados:
Estruturas de contro!e
.tili*amos estruturas a fim de executar determinados #locos de comandos &uando
necess,rio" possi#ilitando a reutili*a!o do c5digo. 6xistem Q tipos de estruturas:
6struturas de @ecis!o: .tili*adas pelo programa para possi#ilitar a execu!o de
determinado #loco de comandos caso uma condi!o se)a satisfeita. @essa forma" o
programa executa tarefas #aseado em condi'es pr%-esta#elecidas. 6x: 6scre+er uma
mensagem na tela" caso um +alor se)a par e outra mensagem caso se)a :mpar.
6struturas de Nepeti!o: (ossi#ilitam a execu!o de um determinado #loco de
comandos em uma &uantidade de +e*es pr%-determinada. $sso e+ita &ue o mesmo
#loco de comandos se)a reescrito di+ersas +e*es" facilitando a compreens!o do
c5digo. 6struturas de decis!o podem ser com#inadas D estrutura de repeti!o para
tornar a execu!o mais dinJmica.
7un'es: Xlocos de comandos e estruturas podem ser colocadas dentro de fun'es e
chamadas pelo programa principal &uando necess,rias" tornando o programa
principal mais r,pido" limpo e organi*ado. Tam#%m facilita sua posterior manuten!o.
Cada fun!o de+e possuir um nome 4nico" &ue segue as mesmas regras de um nome
de +ari,+eis.
Aamos agora conhecer as estruturas &ue podemos utili*ar no (H(:
Estrutura if
A estrutura if 1do ingl2s: ;se=3 executa um determinado #loco" caso uma condi!o
se)a +erdadeira. Sua sintaxe %:
<?php
if(condio){
comandos;
}
?>
A utili*a!o dos delimitadores ;e; e ;f= % o#rigat5ria" exceto se o #loco conti+er
apenas uma linha de c5digo. (odemos colocar &uantas linhas de c5digo precisarmos dentro
da estrutura. 6x:
<?php
if($valor1 == 2){
echo Estrutura if<br>;
echo valor da varivel 2;
}
?>
8o exemplo acima" a estrutura executar, os comandos &uando o +alor da +ari,+el
Z+alorF for igual a L.
,8
PHP e MySQL
6xistem casos em &ue precisamos &ue a estrutura execute um determinado #loco de
comandos caso uma condi!o se)a +erdadeira e outro caso se)a falsa. (ara isso existe uma
+aria!o da estrutura if chamado de if...else 1;se...ent!o=3.6ssa estrutura executa um
determinado #loco caso a condi!o se)a +erdadeira e outro caso se)a falsa. 6x:
<?php
if($a == $b){
echo Valor da varivel: $valor<br>;
echo Varivel um nmero par!<br>;
}else{
echo Valor da varivel: $valor<br>;
echo Varivel mpar!<br>;
}
?>
A condi!o a ser a+aliada pela estrutura if fa* um teste na +ari,+el Za. Caso o
resultado se)a +erdadeiro 1Za % igual a Z#3" a estrutura executar, o primeiro #loco de
comandos. Caso se)a falsa" ela ir, direto para o segundo #loco de comandos" ou se)a" ir,
;pular= a primeira parte da estrutura. $sso e+ita &ue o teste se)a feito no+amente" deixando
o programa duas +e*es mais r,pido.
Estrutura -"ile
A estrutura /hile % uma estrutura de repeti!o. 6la a+alia a express!o e executa o
#loco de comandos en&uanto a condi!o for +erdadeira. caso a condi!o retorne falsa" o
/hile deixa de execut,-la. Sua sintaxe %:
<?php
while(expresso){
comandos;
}
?>
@e+emos ter um cuidado especial a utili*ar estruturas de repeti!o" como /hile.
Temos &ue ter certe*a de &ue h, uma chance da express!o a+aliada retornar o +alor 7also"
do contr,rio" ir, se tornar um lao infinito" ou se)a" n!o +ai parar de executar.
6x:
<?php
$cont = 1;
while($cont < 10){
echo Valor de \$cont: $cont<br>;
$cont++;
}
?>
8a estrutura acima" definimos o +alor de Zcont como sendo F. 0 lao /hile executar,
um pe&ueno #loco de comandos en&uanto o +alor de Zcont for menor &ue FU. 0 #loco do
/hile escre+er, uma frase informando o +alor de Zcont" depois ir, acrescentar F ao seu
+alor. Assim" o +alor de Zcont ir, aumentar at% chegar a FU" encerrando a execu!o do
/hile.
,9
PHP e MySQL
Estrutura do444-"ile
A estrutura do.../hile % semelhante a /hile" por%m" en&uanto a estrutura /hile a+alia
a condi!o antes de executar" a estrutura do.../hile executa o #loco antes de fa*er o teste.
6x:
<?php
$cont = 1;
do{
echo Valor de \$cont: $cont<br>;
$cont++;
}while($cont < 10)
?>
Estrutura for
A utili*a!o do for % id2ntica a do /hile" entretanto" sua sintaxe % diferenciada. 8ele"
definimos uma +ari,+el contadora" uma condi!o para o final da repeti!o e uma regra de
modifica!o do contador. Sua sintaxe %:
<?php
for(inicializao;condio;operador){
comandos
}
?>
8a iniciali*a!o" definimos e iniciali*amos o contador. @epois" criamos uma condi!o
para o t%rmino da execu!o do for. 6m seguida definimos o parJmetro de atuali*a!o da
+ari,+el de controle do for. 6x:
<?php
for($cont=0;$cont<10;$cont++){
echo Valor da varivel \$cont $cont<br>;
}
?>
8o exemplo acima" definimos dentro do for uma +ari,+el Zcont e atri#u:mos o +alor U
a ela. 6m seguida" di*emos ao for para executar o #loco de comandos en&uanto o +alor de
Zcont for menor &ue FU. (or 4ltimo" di*emos &ue cada +e* &ue a estrutura for executada" a
+ari,+el Zcont rece#er, c F 1em +irtude do operador ;cc=3. Ap5s a atri#ui!o" a condi!o %
testada no+amente 1como no /hile3 at% &ue a condi!o para o t%rmino do for se)a satisfeita.
Estrutura forea%"
6sta estrutura oferece uma maneira mais simples de percorrer os elementos de um
arraB. (ossui duas sintaxes:
<?php
foreach($array as $elemento){
comandos;
}
?>
ou
<?php
foreach($array as $chave => $valor){
comandos;
}
?>
0"
PHP e MySQL
8o primeiro exemplo" a estrutura +ai do primeiro ao 4ltimo elemento do arraB" e a
cada itera!o o +alor corrente do arraB % atri#uido a +ari,+el Zelemento" e o ponteiro interno
do arraB % a+anado. @essa forma" podemos manipular os +alores de ZarraB atra+%s da
+ari,+el Zelemento.6x:
<?php
$valor = array(1, 2, 3, 4);
foreach($valor as $v){
echo Valor : $v <br>;
}
?>
A estrutura foreach atri#ui a Z+ o +alor da primeira posi!o de Z+alor e o imprime na
tela. 6m seguida" +ai D segunda posi!o de Z+alor" atri#ui seu conte4do a Z+ e o imprime
no+amente. (or isso o comando echo mostra o conte4do em Z+" em +e* do conte4do em
Z+alor. 8o caso de um arraB associati+o" ter:amos:
<?php
$lista = array(um=>1, dois=>2, tres=>3, quatro=>4);
foreach($a as $chave => $valor){
echo \$a[$chave] => $valor<br>;
}
?>
0 exemplo acima imprime a cha+e associati+a e o +alor de cada posi!o do arraB. 0
resultado ser,:
Za`uma b> F
Za`doisa b> L
Za`tresa b> Q
Za`&uatroa b> S
01
PHP e MySQL
omandos brea& e %ontinue
0 comando #reak % utili*ado para parar a execu!o de um determinado script" #loco
ou fun!o. Ao encontrar o comando #reak" (H( ir, direto ao final do #loco" deixando a
estrutura. Ao contr,rio" o comando continue fa* com &ue o (H( mantenha a execu!o do
script. 6x:
<?php
for($i=0; $i < 10; $i++){
if($i == 5){
echo \$i == 5! Parou de executar!;
break;
}
echo Executando: Valor de \$i => $i;
}
?>
0 resultado ser,:
executando: Aalor de Zi b> U
executando: Aalor de Zi b> F
executando: Aalor de Zi b> L
executando: Aalor de Zi b> Q
executando: Aalor de Zi b> S
Zi bb Eg (arou de executarg
Estrutura s-it%"
6ssa estrutura executa um determinado #loco de instru'es de acordo com o +alor
o#tido pela express!o a+aliada. Sua sintaxe %:
<?php
switch(condicao){
case valor1 : comando1
break;
case valor2 : comando2
break;
case valorn : comandon
break;
default: comando_default
break;
}
?>
Se a condi!o retornar o +alorF" executar, o comandoF" ent!o n!o precisar, conferir
as demais condi'es" podendo deixar a estrutura. (ara isso" utili*a-se o comando #reak
entre cada condi!o. Caso a condi!o n!o retorne nenhum dos +alores contidos na
estrutura" ser, executada a op!o default. 6x:
<?
switch($cor){
case 'vermelho' : echo cor vermelha<br>;
break;
case 'verde' : echo cor verde<br>;
break;
case 'azul' : echo cor azul<br>;
0,
PHP e MySQL
break;
default : echo escolha uma cor<br>;
break;
}
?>
Caso o +alor de Zcor se)a +ermelho" a frase ;cor +ermelha= ser, escrita na
tela" ent!o o comando #reak termina a execu!o da estrutura" +isto &ue a condi!o foi
satisfeita. 6m caso contr,rio" far, a pr5xima +erifica!o. Se nenhuma das condi'es for
satisfeita" executar, a op!o default" escre+endo na tela: ;escolha uma cor=. 0 uso do
default n!o % o#rigat5rio no s/itch" nem mesmo o uso de #reak" +isto &ue % a 4ltima
+erifica!o a ser feita.
$un03es
7un'es s!o #locos de c5digos destinados a executar uma determinada tarefa. A
sintaxe de uma fun!o %:
<?php
function nome_funcao(argumento1, argumento2, argumento_n){
comandos;
}
?>
Hual&uer c5digo (H( +,lido pode ser colocado dentro de uma fun!o. 6x:
<?php
function mensagem(){
echo Escreve uma mensagem.<br>;
echo Este um exemplo de funo<br>;
for($i=0;$i<5;$i++){
echo Usando for em uma funo<br>;
echo valor de \$i => $i<br>;
}
}
?>
Ap5s criarmos uma fun!o" podemos fa*er com &ue o script a execute com uma
simples chamada. 6x:
<?php
echo pgina web em php<br>;
echo Vamos chamar a funo mensagem()<br>;
mensagem();
echo funo executada com sucesso!!!<br>;
?>
Huando o (H( encontra a chamada D fun!o" interrompe a execu!o do script atual e
inicia a execu!o da fun!o chamada. Huando terminar de execut,-la" retornar, ao ponto
onde a fun!o foi chamada e continuar, a execu!o do script.
?alor de retorno
.ma fun!o pode ou n!o retornar um +alor. (ara isso % necess,rio usar o comando
return no final da fun!o" indicando o +alor &ue ser, retornado.6x:
<?php
function retorna_valor(){
return 10; //funo rvalor retorna o valor 10
00
PHP e MySQL
}
$valor = 3; //varivel inicializada
echo "\$valor => $valor<br>"; //valor antes da funcao
$valor = retorna_valor(); //$valor recebe o retorno da funo
echo "\$valor => $valor<br>"; //valor depois da funcao
?>
+r2umentos ou par@metros
S!o +alores passados D fun!o para serem manipulados pela mesma. A passagem de
parJmetros n!o % o#rigat5ria. 0s parJmetros de+em ser declarados entre par2nteses" ap5s
o nome da fun!o. 0s parJmetros ser!o rece#idos de acordo com a ordem de passagem e
transformados em +ari,+eis locais para &ue a fun!o possa utili*,-los. 6x:
<?php
function imprime($parametro){
echo $parametro<br>;
}
$argumento = argumento torna-se parmetro da funo.;
imprime($argumento);
?>
8o exemplo acima" a fun!o imprime13 rece#e como argumento a +ari,+el
Zargumento para &ue se)a manipulada. @entro da fun!o" o +alor do argumento agora
torna-se a +ari,+el Zparametro" &ue % impressa na tela atra+%s do comando echo. 0
argumento passado D fun!o n!o precisa necessariamente estar dentro de uma +ari,+el. 6x:
a chamada imprime1;frase pra imprimir=3 tam#%m % +,lida para o exemplo acima.
Passa2em de par@metros por referAn%ia
0s exemplos anteriores mostram a passagem de parJmetros por +alor" ou se)a" o
+alor da +ari,+el % passado D fun!o" por%m" &uando a fun!o termina de executar" o +alor
da +ari,+el passada D fun!o como parJmetro permanece inalterado. (ara &ue uma fun!o
possa alterar o +alor de uma +ari,+el 1ou mais de uma3" % necess,rio fa*er a passagem de
parJmetros por refer2ncia" ou se)a" a fun!o ir, rece#er a pr5pria +ari,+el como parJmetro
e poder, assim alterar seu +alor. 6x:
<?php
function soma10($num){
$num += 10;
}
$a = 5;
soma10($a);
echo $a;
?>
0 resultado do script acima ser, E" pois hou+e uma passagem de parJmetro por +alor
para a fun!o somaFU13. 8este caso" o +alor de Za foi ;copiado= e en+iado D fun!o" por%m"
o conte4do de Za foi mantido pelo (H(. (ara &ue a fun!o possa alterar o +alor de Za" a
+ari,+el de+e ser passada por refer2ncia" ou se)a" o endereo de mem5ria da +ari,+el de+e
ser passado para a fun!o 1afinal" +ari,+eis s!o endereos de mem5ria &ue arma*enam
determinado +alor3. A passagem por refer2ncia % feita utili*ando o sinal ;P=. Ae)a o exemplo
acima utili*ando a passagem por refer2ncia:
05
PHP e MySQL
<?php
function soma10(&$num){ //O & antes de $num indica passagem por referncia
$num += 10;
}
$a = 5;
soma10($a);
echo $a;
?>
0 resultado agora ser, FE.
2ari&veis g!obais e !ocais
0 escopo de uma +ari,+el % a por!o do script em &ue ela pode ser utili*ada. 6m
geral" as +ari,+eis tem escopo glo#al" ou se)a" podem ser utili*adas em &ual&uer por!o do
script" por%m" &uando declaramos fun'es" % criado um escopo local e a fun!o passa a
utili*ar apenas as +ari,+eis declaradas dentro dela. .ma +ari,+el glo#al n!o pode ser
utili*ada dentro de uma fun!o sem &ue se)a declarada. 6x:
<?php
$frase = uma frase qualquer...;
function mostra_frase(){
echo $frase;
}
mostra_frase();
?>
A +ari,+el Zfrase dentro da fun!o mostra_frase13 % considerada uma +ari,+el
diferente da &ue foi declarada anteriormente. (ara &ue a fun!o possa utili*ar a +ari,+el
Zfrase declarada fora dela" de+emos declar,-la dentro da fun!o como uma +ari,+el glo#al"
para &ue a fun!o possa reconhec2-la. 0 exemplo acima ficaria assim:
<?php
$frase = uma frase qualquer...;
function mostra_frase(){
global $frase;
echo $frase;
}
mostra_frase();
?>
0utra forma de acessar uma +ari,+el glo#al no (H( % recorrendo ao arraB ZKL0XALS.
6ste arraB % parte do pr5prio (H( 1uma constante3 e registra todas as +ari,+eis glo#ais
declaradas no script. (odemos utili*ar o arraB ZKL0XALS da seguinte forma:
<?php
$frase = uma frase qualquer...;
function mostra_frase(){
echo $GLOBALS[frase];
}
mostra_frase();
?>
0 +alor dentro de `; e =a % o nome da +ari,+el glo#al a ser utili*ada.
Processando $or%u!&rios co% PHP
A linguagem (H( % muito utili*ada para o tratamento de formul,rios. Como +isto
09
PHP e MySQL
anteriormente" formul,rios s!o utili*ados para &ue o usu,rio possa en+iar informa'es D
p,gina" como seu endereo de e-mail" ou um nome a pes&uisar. As informa'es s!o
en+iadas pelo formul,rio atra+%s dos m%todos K6T ou (0ST" processadas pelo ser+idor e
arma*enadas em ar&ui+os ou #ancos de dados. Muitas +e*es" esse processamento retorna
um resultado 16x: uma pes&uisa3 &ue % en+iado ao usu,rio. A linguagem HTML n!o % capa*
de manipular essas informa'es" exigindo para isso o uso de scripts" como o (H(. (ara
compreendermos melhor o funcionamento do (H( no tratamento de formul,rios" +amos
construir um exemplo simples. 7aremos uma p,gina chamada info.html" onde colocaremos
um formul,rio &ue en+iar, informa'es do +isitante para o ser+idor. 7aremos tam#%m um
script (H( &ue ir, rece#er as informa'es en+iadas pelo formul,rio e far, um
processamento simples" retornando uma mensagem ao usu,rio. 0 c5digo para o formul,rio
% mostrado a#aixo:
<html>
<head>
<title>informaes do usurio</title>
</head>
<body>
<form action="info.php" method="GET">
<p align="center">Nome: <input type="text" name="nome" size="30"></p>
<p align="center">E-mail: <input type="text" name="mail" size="30"></p>
<p align="center"><input type="submit" value="enviar"></p>
</form>
</body>
</html>
A p,gina info.html cont%m um formul,rio &ue pede ao usu,rio para &ue digite seu
nome e seu endereo de e-mail. 8ote &ue especificamos na tag <form> o atri#uto action
como info.php. 6ste % o nome do script &ue ir, processar as informa'es en+iadas pelo
formul,rio. Tam#%m atrui#u:mos D tag method o +alor K6T" indicando &ue este ser, o
m%todo utili*ado para o en+ido das informa'es ao ser+idor. Se nenhum +alor for atri#u:do a
essa tag" o m%todo K6T ser, utili*ado.
Como +imos anteriormente" o m%todo K6T en+ia informa'es ao ser+idor atra+%s de
uma cadeia de +ari,+eis" indicada logo ap5s o endereo de destino. $sso imp'e um limite no
tipo e na &uantidade de informa'es &ue podem ser en+iadas ao ser+idor 16x: n!o %
poss:+el en+iar fotos +ia m%todo K6T3" al%m de tornar +is:+eis as informa'es en+iadas"
sendo assim um m%todo pouco seguro de en+ido de dados.
Array superg!oba! 678ET
0 (H( disponi#ili*a o arraB Z_K6T para tratar as informa'es en+iadas pelo m%todo
K6T. As informa'es en+iadas s!o mantidas dentro destes arraBs e o nome dos campos %
utili*ado como cha+e associati+a para &ue o script possa acessar os +alores. 8o nosso
exemplo" seria Z_K6T`9nome9a e Z_K6T`9mail9a.
Aamos agora escre+er o script info.php &ue ir, tratar as informa'es en+iadas pelo
formul,rio. 0 script de info.php % mostrado a seguir:
<?php
//captura as informaes enviadas pelo formulrio
$nome = $_GET['nome'];
$mail = $_GET['mail'];
0<
PHP e MySQL
//mostra as informaes na tela
echo <p align='center'>Meu nome $nome</p>;
echo <p align='center'>Meu e-mail $mail</p>;
?>
0 script acima captura as informa'es en+iadas pelo formul,rio e as arma*ena dentro
de +ari,+eis" para facilitar seu processamento. 6m seguida" os +alores das +ari,+eis s!o
mostrados ao usu,rio. Caso os campos do formul,rio se)am preenchidos com os +alores
.muarama e umuarama@senac" a .NL ser,:
http:??localhost?info.phpOnomebumuaramaPmailbumuaramaVSUsenac
0nde:
http:??localhost?: % o endereo do siteI
info.php % o script &ue processa as informa'es do formul,rioI
O indica o in:cio das +ari,+eis do formul,rioI
nomebumuarama : +ari,+el nome contendo o +alor 9umuarama9 I
P : usado para separar uma +ari,+el da outraI
mailbumuaramaVSUsenac : +ari,+el mail contendo o +alor umuaramaVSUsenac.
8ote &ue o s:m#olo @ foi su#stitu:do pelo s:m#olo VSU" para &ue possa ser
transmitido atra+%s do m%todo K6T.
Array Superg!oba! 67P)ST
Semelhante ao K6T" o arraB superglo#al Z_(0ST arma*ena informa'es en+iadas
atra+%s do m%todo (0ST. (ara utili*ar o m%todo (0ST no exemplo anterior" de+emos fa*er
pe&uenas altera'es no formul,rio e no script. 6x:
<form action=info.php method=POST>
$sso far, com &ue o formul,rio en+ie as informa'es atra+%s do m%todo (0ST" em
+e* do K6T. Agora" #asta alterar o script info.php para &ue possa capturar as informa'es
do arraB Z_(0ST:
<?php
$nome = $_POST['nome'];
$mail = $_POST['mail'];
...
?>
$or%ata0o de dados
Fun;(o "tmlspe%ial%"arsBC
0s dados en+iados por formul,rios n!o possuem nenhum tipo de controle ou
formata!o" permitindo &ue ocorram di+ersos erros e?ou situa'es indese)adas. 6x: Aoc2
cria um /e# site para seu com%rcio e disponi#ili*a um espao para &ue os +isitantes
comentem so#re seu tra#alho. .m #elo dia +oc2 encontra entre os recados" um #anner da
concorr2ncia. $sso aconteceu por&ue n!o foi implantado nenhum tipo de controle ou
formata!o das mensagens" permitindo assim &ue o +isitante adicionasse HTML D
0B
PHP e MySQL
mensagem. (ara e+itar esse tipo de transtorno" utili*amos a fun!o htmlspecialchars" &ue
con+erte HTML para texto simples" exi#indo-o em forma de texto comum. 8o caso" o #anner
do concorrente apareceria como <img srcb=http:??///.concorrente.com?#anner.)pg=> . 6x:
<?php
$mensagem = <a href=www.senac.pr.gov.br>SENAC</a>;
echo $mensagem;
//mostra link
$mensagem = htmlspecialchars($mensagem);
echo $mensagem;
//mostra cdigo html
?>
0 primeiro comando echo mostrar, o link &ue le+ar, D p,gina correspondente. o
segundo mostrar, o c5digo html contido na +ari,+el.
fun;)es addslas"esBC e stripslas"esBC
6m alguns casos" o usu,rio pode digitar caracteres especiais em um campo onde eles
n!o de+am ser utili*ados. 6x: .m usu,rio pode preencher o campo nome do formul,rio
como Cos% da Sil+a" popular ;he*inho=. As aspas contidas no campo podem causar erros na
gra+a!o e?ou interpreta!o das informa'es. (ara e+itar isso" utili*amos a fun!o
addslashes" &ue adiciona uma [ antes de cada ocorr2ncia de caracteres especiais. 0 campo
ficaria: Cos% da Sil+a" popular [=he*inho[=. A presena da [ fa* com &ue as aspas se)am
interpretadas como caracteres especiais" e n!o se)am executadas como parte do script 16x:
poderia causar pro#lemas com o comando echo3. .tili*amos addslashes da seguinte forma:
$nome = addslashes($nome);
(ara re+erter o efeito da fun!o addslashes" utili*amso a fun!o stripslashes" &ue
remo+e os caracteres de controle adicionados pela fun!o addslashes" fa*endo com &ue a
string +olte D sua composi!o original. 6x:
$nome = stripslashes($nome);
@essa forma" o nome +olta a ser Cos% da Sil+a" popular ;he*inho=.
fun;)es urlen%odeBC e urlde%odeBC
Ao utili*ar o m%todo K6T" caracteres especiais s!o su#stitu:dos pelo seu c5digo
hexadecimal correspondente" precedido de V 16x: espaos em #ranco s!o su#stitu:dos por
VSU3. (ara &ue os c5digos se)am con+ertidos para os caracteres especiais &ue representam"
usamos urldecode. (ara reali*ar a opera!o in+ersa" utili*amos a fun!o urlencode. 6x:
<?php
$site = http://localhost/?nome=Jose%40Silva
$site = urldecode($site);
echo $site;
$site = urlencode($site);
?>
$sso far, com &ue os c5digos hexadecimais se)am remo+idos" mostrando na tela:
http:??localhost?OnomebCose Sil+a. 6m seguida" a fun!o urlencode % aplicada e o link +olta
ao seu estado normal. $sso pode ser 4til caso o script precise retransmitir o link.
08
PHP e MySQL
fun;)es int.alBC e double.alBC
Muitas +e*es precisamos &ue o usu,rio fornea um +alor num%rico para o formul,rio"
por%m os campos aceitam apenas texto. (ara a de+ida con+ers!o" podemos utili*ar as
fun'es int+al13 e dou#le+al13 &ue" respecti+amente con+ertem o +alor da +ari,+el em inteiro
e em dou#le. 6x: 8o formul,rio html temos:
<input type=text name=idade>
<input type=text name=peso>
0 script (H( de+e tratar os dois +alores como inteiro e dou#le" respecti+amente. (ara
isso podemso ter o seguinte c5digo:
<?php
$idade = intval($_GET['idade']);
$peso = doubleval($_GET['peso']);
?>
fun;)es trimBCD ltrimBC e %"opBC
7re&ientemente" usu,rios preenchem formul,rios colocando espaos em #ranco
antes e depois dos +alores. (ara o formul,rio" isso n!o significa muito" mas para o script
1ex: no momento de gra+ar as informa'es em um #anco de dados3 isso pode se tornar um
pro#lema" pois espaos em #ranco s!o interpretados como +alor. (ara e+itar pro#lemas"
podemos remo+er os espaos em excesso &ue o usu,rio en+ia utili*ando uma das fun'es
citadas acima. Apesar de possu:rem o mesmo o#)eti+o" essas fun'es possuem pe&uenas
diferenas: A fun!o chop13 remo+e espaos apenas no final da string. A fun!o ltrim13
remo+e espaos no in:cio da string e a fun!o trim13 remo+e espaos no in:cio e no final da
string. A utili*a!o depende do resultado dese)ado. 6x:
<?php
$nome = trim($nome);
$mail = chop($mail);
?>
2a!ida0o de for%u!&rios co% 9avascript
At% agora" nossos formul,rios n!o rece#eram nenhum tipo de +alida!o" nada &ue
impedisse o en+io de informa'es incorretas ou ;campos em #ranco=. Criar fun'es (H(
para fa*er esse tipo de +alida!o % perfeitamente poss:+el" no entanto" exige muito
processamento do ser+idor" tornando o acesso lento e o retorno demorado. (ara e+itar esse
tipo de transtorno" faremos com &ue uma parte das +alida'es necess,rias se)a feita no
na+egador do cliente" usando Ca+ascript.
Ca+ascript % uma linguagem de programa!o &ue funciona diretamente no na+egador
do cliente 1por isso chamado de tecnologia cliente3. .m script )a+ascript pode ser escrito em
meio ao c5digo html dentro da tag <script> ou fora" em documentos de texto separados.
Ca+ascript s5 precisa de um editor de texto para ser escrito e um na+egador para ser
executado. Apesar dos grandes esforos para &ue ele se)a executado de forma padr!o"
apenas o na+egador netscape executa-o com precis!o.
8!o nos aprofundaremos em )a+ascript" pois n!o % o foco deste documento.
Conheceremos apenas o #,sico para a +alida!o de formul,rios.
09
PHP e MySQL
Aamos criar a fun!o &ue ir, +alidar os campos do formul,rio. 6ssa fun!o de+e ser
escrita no ca#ealho do c5digo html da p,gina do formul,rio. Todo o c5digo de+e estar
dentro da tag <script>" &ue indicar, &ue o c5digo % )a+ascript dessa forma:
<head>
<script language=Javascript>
function valida(nomeform){
...
}
</script>
...
</head>
8a tag <form>" de+emos indicar &ue o formul,rio de+er, passar pela fun!o +alida
antes de ser en+iada para o ser+idor. 6ssa condi!o % definida configurando o atri#uto
onsu#mit da seguinte forma:
<form method=POST action=form.php onsubmit=return valida(this)>
0 formul,rio utili*ar, o m%todo (0ST para en+io das informa'es. o script &ue ir,
tratar as informa'es do formul,rio % o form.php. 0 atri#uto onsu#mit 1ao en+iar3 des+iar,
a sa:da do formul,rio para a fun!o +alida. A pala+ra this indica &ue ser, este formul,rio
&ue ser, tratado pela fun!o. A pala+ra return indica &ue a fun!o retornar, um +alor 1no
caso" #ooleano3. Se a fun!o retornar falso" o formul,rio n!o ser, en+iado.
Aamos implementar a fun!o +alida com as de+idas +alida'es a serem feitas. Aamos
comear fa*endo com &ue o formul,rio n!o se)a en+iado caso o campo nome n!o tenha
sido preenchido" ou se)a" seu +alor % nulo:
if(formulario.nome.value==)
alert(Nome no foi preenchido);
Se o +alor no campo nome do formul,rio n!o possuir nada" uma )anela de alerta ser,
mostrada na tela com a mensagem ;8ome n!o foi preenchido=. 0 formul,rio n!o ser,
en+iado.
(ara desco#rir se o usu,rio digitou o @ no campo de e-mail:
if(formulario.email.value.indexOf('@',0) == -1)
alert(E-mail invlido);
(ara limitar o n4mero de caracteres m:nimo e m,ximo para o campo de senha:
if(formulario.senha.value.lenght<5 || formulario.senha.value.lenght >15)
alert(senha deve ter entre 5 e 15 caracteres);
Agora +amos unir as condi'es de teste dentro da fun!o +alida:
<script language=javascript>
function valida(formulario){
if(formulario.nome.value==){
alert(Nome no foi preenchido);
return false;
}
if(formulario.email.value.indexOf('@',0)== -1){
alert(E-mail incorreto!);
return false;
}
if(formulario.senha.value.lenght<5 || formulario.senha.value.lenght>15){
alert(Senha deve conter entre 5 e 15 caracteres);
return false;
5"
PHP e MySQL
}
return true;
{
Antes de ser en+iado ao ser+idor" os +alores do formul,rio s!o su#metidos D fun!o
+alida. Caso alguma irregularidade se)a encontrada" a fun!o retorna false e o formul,rio
n!o % en+iado ao ser+idor. Caso contr,rio" a fun!o retorna true e o formul,rio % en+iado.
2a!ida0o co% PHP
Muitas +e*es" a +alida!o feita com )a+ascript n!o % suficiente 1ex: o c5digo foi
modificado pelo cliente3" exigindo assim uma segunda +alida!o atra+%s do (H(. Aamos
adaptar o script form.php para fa*er a +alida!o do formul,rio. Ae)amos as +alida'es mais
importantes a serem feitas:
Espa;os em bran%o
6m muitos casos" de+emos e+itar &ue o usu,rio en+ie espaos em #ranco dentro do
campo 1ex: campo de e-mail ou senha3. (ara remo+er os espaos em #ranco" utili*amos a
fun!o strstr13" &ue #usca a ocorr2ncia de um caracter dentro de uma string. 6x:
<?php
if(strstr($senha,' ')==TRUE)
echo A senha no pode conter espaos em branco;
?>
A fun!o strstr #uscou por espaos em #ranco na +ari,+el Zsenha. 6m caso de ha+er
espaos" uma mensagem de alerta % en+iada ao usu,rio 10 c5digo tam#%m pode ser
adaptado para &ue mostre uma )anela de alerta" usando )a+ascript3.
Euantidade mFnima de %ara%teres
(ara +erificar se um n4mero m:nimo de caracteres foi digitado" usamos a fun!o
strlen13" &ue retorna o n4mero de caracteres de uma string. 6x:
<?php
if(strlen($senha)<5)
echo Senha deve ter, no mnimo 5 caracteres;
?>
orre;(o automti%a
6m muitos casos" especialmente no campo de e-mail" alguns caracteres s!o digitados
incorretamente" como +:rgula no lugar de ponto" espaos antes e depois do @" etc. 0 script
(H( pode corrigir automaticamente estes erros com a fun!o str_replace13. Sua sintaxe %:
str_replace(caracter_antigo,caracter_novo,string).
6x: para su#stituirmos os h:fens por underlines" temos:
<?php
$mail = str_replace( - , _ , $mail);
?>
$sso far, com &ue toda ocorr2ncia de h:fen dentro da +ari,+el Zmail se)a su#stitu:da
por underline. Se &uisermos remo+er um caracter 1ex: espao em #ranco3" #asta indicar &ue
o no+o caracter ser, 9nada9. 6x:
51
PHP e MySQL
<?php
$mail = str_replace( , ,$mail);
?>
?alores numri%os
(ara sa#er se um campo rece#eu apenas +alores num%ricos 1ex: idade" telefone"
C6(3" podemos utili*ar a fun!o is_numeric13. 6la retorna 9+erdadeiro9 se o campo for
num%rico. 6x:
<?php
if(!is_numeric($cep))
echo cep deve conter apenas nmeros;
?>
Ap5s as de+idas +alida'es" as informa'es podem ser tratadas 1ex: gra+adas em um
#anco de dados3. 0 c5digo completo do formul,rio de cadastro 1cadastro.html3 e seu script
(H( 1cadastro.php3 s!o mostrados a seguir:
<html>
<head>
<title>Cadastro</title>
<script language=javascript>
function valida(form){
if(form.nome.value==){
alert(Nome no foi preenchido);
return false;
}
if(form.mail.value== || form.mail.value.indexOf('@',0) == -1 ||
form.value.indexOf('.',0) == -1){
alert(Campo de e-mail invlido);
return false;
}
if(form.estado.selectedIndex == 0){
alert(Selecione um estado);
return false;
}
if(form.login.value.lenght<5 || form.login.value.lenght>15){
alert (Login deve conter entre 5 e 15 caracteres);
return false;
}
if(form.senha.value.lenght<5 || form.senha.value.lenght>15){
alert(Senha deve conter entre 5 e 15 caracteres);
return false;
}
if(form.senha.value.indexOf(' ',0)!= -1){
alert(Senha no deve conter espaos em branco);
return false;
}
if(form.senha.value != form.confirmasenha.value){
alert(senhas no conferem);
return false;
}
return true;
}
</script>
</head>
<body>
<form method=POST action=cadastro.php onsubmit=return valida(this)>
5,
PHP e MySQL
<p>Nome: <input type=text name=nome size=20></p>
<p>E-mail: <input type=text name=email size=20></p>
<p>Estado:
<select name=estado>
<option value=AC>AC</option>
<option value=AL>AL</option>
<option value=AM>AM</option>
<option value=AP>AP</option>
<option value=BA>BA</option>
<option value=CE>CE</option>
<option value=DF>DF</option>
<option value=ES>ES</option>
<option value=GO>GO</option>
<option value=MA>MA</option>
<option value=MG>MG</option>
<option value=MS>MS</option>
<option value=MT>MT</option>
<option value=PA>PA</option>
<option value=PB>PB</option>
<option value=PE>PE</option>
<option value=PI>PI</option>
<option value=PR>PR</option>
<option value=RJ>RJ</option>
<option value=RN>RN</option>
<option value=RO>RO</option>
<option value=RR>RR</option>
<option value=RS>RS</option>
<option value=SC>SC</option>
<option value=SE>SE</option>
<option value=SP>SP</option>
<option value=TO>TO</option>
</select></p>
<p>Login: <input type=text name=login size=20></p>
<p>Senha: <input type=password name=senha1 size=20></p>
<p>Confirma Senha: <input type=password name=senha2 size=20></p>
<p><input type=submit value=enviar name=enviar></p>
</form>
</body>
</html>
Huando o usu,rio clicar no #ot!o en+iar" as informa'es do formul,rio ser!o en+iadas
para a fun!o +alida13" &ue +erifica o preenchimento correto dos campos e retorna um +alor
#ooleano. Caso se)a encontrada uma irregularidade" a fun!o retorna false 1falso3 e os
dados n!o ser!o en+iados ao ser+idor. Caso todas as informa'es este)am corretas" a fun!o
retorna true 1+erdadeiro3 e o formul,rio % en+iado para o ser+idor.
Aamos agora ao script cadastro.php:
<?php
//captura as informaes do formulrio atravs do array POST
$nome = $_POST['nome'];
$email = $_POST['email'];
$estado = $_POST['estado'];
$login = $_POST['login'];
$senha1 = $_POST['senha1'];
$senha2 = $_POST['senha2'];
//elimina erros na digitao de e-mails
$email = str_replace( ,,$email);
50
PHP e MySQL
$email = str_replace(/,,$email);
$email = str_replace(@.,@,$email);
$email = str_replace(.@,@,$email);
$email = str_replace(,,.,$email);
$email = str_replace(;,.,$email);
//varivel que informar a ocorrncia de erros
$erro = 0;
//verifica se foi digitado o nome
if(empty(nome)){
$erro = 1;
$msg = Informe seu nome;
}
//verifica tamanho mnimo do e-mail e se existe @ e ponto.
elseif(strlen($email)<8 || substr_count($email, @)!=1 ||
substr_count($email,.)==0){
$erro = 1;
$msg = E-mail no foi digitado corretamente;
}
//verifica se o estado foi selecionado
elseif(strlen($estado)!=2){
$erro = 1;
$msg = Informe o estado;
}
//verifica o tamanho do login
elseif(strlen(login)<5 || strlen(login)>15){
$erro = 1;
$msg = Login deve ter entre 5 e 15 caracteres;
}
//verifica se a senha contm espaos em branco
elseif(strstr($senha,' ')!=false){
$erro = 1;
$msg = A senha no deve conter espaos em branco;
}
//compara senha1 e senha2
elseif($senha1 != $senha2){
$erro = 1;
$msg = Senhas digitadas no conferem;
}
//se h erro, exibe mensagem:
if($erro){
echo <html><body>;
echo <p align='center'>$msg</p>;
//cria um link 'voltar' usando javascript
echo <p align='center'><a href='javascript:history.back()'>Voltar</a></p>;
echo </body></html>;
}else{
//aqui podemos realizar o tratamento das informaes. Ex: gravando em arquivo
//ou banco de dados
echo <html><body>;
echo <p align='center'>Cadastro Realizado com sucesso!</p>;
echo </body></html>;
}
?>
0 script acima +erifica o preenchimento do formul,rio. Caso algum erro se)a
encontrado" a +ari,+el Zerro rece#e o +alor F" e a +ari,+el Zmsg rece#e uma mensagem
relacionada D irregularidade encontrada" &ue % exi#ida )unto com um link" &ue utili*a uma
fun!o Ca+ascript para le+ar o usu,rio D 4ltima p,gina +isitada 1no caso" o formul,rio3. Caso
55
PHP e MySQL
o preenchimento este)a correto" o script apenas escre+e a mensagem ;Cadastro reali*ado
com sucesso= e finali*a. At% ent!o" este script tem apenas a fun!o de +alida!o do
formul,rio" mas podemos acrescentar fun'es para o tratamento de formul,rios" como a
gra+a!o em ar&ui+os de texto ou #ancos de dados.
Ar*uivos de te'to
A solu!o mais simples para o tratamento de informa'es % gra+,-las em ar&ui+os de
texto. (H( disponi#ili*a fun'es para a cria!o e manipula!o de ar&ui+os de texto. A
utili*a!o de ar&ui+os de texto % recomendada &uando o +olume de informa'es % pe&ueno
e n!o exige um tratamento mais complexo. 6x: podemos utili*ar ar&ui+os de texto para criar
contadores de acesso para o site em geral ou para p,ginas espec:ficas" cria!o de li+ros de
+isitas" listas de discuss!o" an4ncios on-line ou &ual&uer outra aplica!o simples" &ue n!o
exi)a um tratamento mais refinado" como oferecido por sistemas de gerenciamento de
#anco de dados 1SKX@3" como o MBSHL por exemplo" &ue deixaria o acesso ao site mais
lento. 6ntretanto" n!o % aconselh,+el utili*ar ar&ui+os de texto para tratar de informa'es
sigilosas" como senhas de usu,rios" de+ido a limita'es de segurana 1ar&ui+os texto podem
ser lidos por &ual&uer pessoa3. 8esses casos aconselhamos o uso de #ancos de dados.
Manipu!ando Ar*uivos
As &uatro opera'es #,sicas &ue podemos reali*ar em um ar&ui+os s!o a#ertura"
leitura" escrita e fechamento. (H( oferece di+ersas fun'es para o tratamento de ar&ui+os.
Ae)amos as principais:
+bertura
.tili*amos a fun!o fopen13 para reali*ar a a#ertura de um ar&ui+o. Sua sintaxe %:
fopen(nome_arquivo, modo);
0 parJmetro nome_ar&ui+o % o nome do ar&ui+o &ue ser, criado. Se for informado
uma .NL iniciando em http:??" ser, criada uma conex!o http com o ser+idor informado
antes da a#ertura do ar&ui+o. Caso se)a informado uma .NL iniciada em ftp:??" uma
conex!o ftp ser, criada antes da a#ertura do ar&ui+o. $sso possi#ilita a manipula!o de
ar&ui+os em ser+idores remotos. Caso a fun!o se)a executada com sucesso" ela retornar,
um ponteiro para o ar&ui+o rec%m a#erto" para &ue possamos manipular o ar&ui+o em si.
0 segundo parJmetro da fun!o % o modo de a#ertura do ar&ui+o. .ma rela!o dos
modos de a#ertura % mostrada a seguir:
59
PHP e MySQL
Modo Descrio
'r' So*ente (eituraX posiciona ponteiro no in:cio do ar=uivo
'r+' Leitura e escritaX posiciona ponteiro no in:cio do ar=uivo
'w'
So*ente escritaX posiciona ponteiro no in:cio do ar=uivo e dei2a%o co* ta*an3o
[ero. Se o ar=uivo no e2istirX tenta cri+%(o
'w+'
Leitura e escritaX posiciona ponteiro no in:cio do ar=uivo e dei2a%o co* ta*an3o
[ero. Se o ar=uivo no e2istirX tenta cri+%(o
'a'
So*ente escritaX posiciona ponteiro no 'ina( do ar=uivo. Se o ar=uivo no e2istirX
tenta cri+%(o
'a+'
Leitura e escritaX posiciona ponteiro no 'ina( do ar=uivo. Se o ar=uivo no e2istirX
tenta cri+%(o
'x'
1ria e abre ar=uivo so*ente para escritaX posiciona ponteiro no in:cio do ar=uivo. Se
ar=uivo e2istirX retorna 'a(so e era u* erro. \sado apenas e* ar=uivos (ocais
'x+'
1ria e abre ar=uivo para (eitura e escritaX posiciona ponteiro no in:cio do ar=uivo. Se
ar=uivo e2istirX retorna 'a(so e era u* erro. \sado apenas e* ar=uivos (ocais
E2iste* ta*b-* os parR*etros !t! e !b!X in'or*ados co*o G(ti*o caracter
do parR*etro *odo. / parR*etro !t! - usada e* siste*as CindoDsX para
Htradu[irI as =uebras de (in3a VcnW para crcn. / parR*etro !b! 'orAa o uso do *odo
bin+rioX usado e* siste*as =ue di'erencia* o *odo bin+rio do *odo te2to. E2;
$ponteiro = fopen(/pasta/teste.txt, r);
$ponteiro = fopen(/var/www/texto.txt, wb);
$ponteiro = fopen(http://www.server.com, r+);
E* caso de prob(e*as na abertura de ar=uivos e* siste*as \ni2 VLinu2X
7SQX etcW veri'i=ue as per*iss8es do diretOrio onde o ar=uivo est+ sendo criado.
E* siste*as CindoDsX deve%se usar caracteres de escape para a uti(i[aAo das
barras invertidas. E2;
$ponteiro = fopen(c:\\pasta\\arquivo.txt, rt);
Fe%"amento
(ara fechar um ar&ui+o" de+emos usar a fun!o fclose13 da seguinte forma:
fclose(ponteiro);
0 parJmetro ponteiro % a +ari,+el &ue arma*ena o ponteiro do ar&ui+o criado com a
fun!o fopen. Caso o ar&ui+o n!o possa ser fechado" a fun!o retornar, o +alor falso. 6x:
<?php
$ponteiro = fopen(testes.txt, r);
fclose($ponteiro);
$arquivo = fopen(contador.txt, 'r+');
fclose($arquivo);
?>
$eitura
A leitura de um ar&ui+o pode ser feita utili*ando-se a fun!o fread13" &ue possui a
seguinte sintaxe:
fread(arquivo,tamanho);
onde ar&ui+o % o nome do ar&ui+o &ue de+e ser lido e tamanho % o tamanho em #Btes &ue
5<
PHP e MySQL
de+e ser lido. 6x:
<?php
$arq = fopen('texto.txt', 'r');
$conteudo = fread($arq,4096);
echo $conteudo;
fclose($arq);
?>
8o exemplo acima" o ar&ui+o texto.txt % a#erto no modo leitura 1r3. 6m seguida" a
fun!o fread fa* a leitura de SURG #Btes do ar&ui+o e arma*ena na +ari,+el Zconteudo" &ue
% exi#ida na tela com o comando echo. @epois" o ar&ui+o % fechado.
Se o parJmetro 9tamanho9 n!o for informado para a fun!o fread13" ela utili*ar, o
+alor padr!o de FULS #Btes. A leitura ser, encerrada &uando o n4mero de #Btes informado
for lido ou &uando o final do ar&ui+o for alcanado.
0utra alternati+a para a leitura de ar&ui+os de texto % o uso da fun!o
file_get_contents13. 6ssa fun!o dispensa o uso de fopen13" fread13 e fclose13" ), &ue fa* a
a#ertura" leitura e fechamento do ar&ui+o de uma 4nica +e*. 6x:
<?php
$texto = file_get_contents(comentario.txt);
echo $texto;
?>
0 ar&ui+o 9comentario.txt9 foi a#erto pela fun!o" &ue arma*enou seu conte4do na
+ari,+el Ztexto e logo depois o fechou.
0utra alternati+a seria o uso da fun!o readfile13. 6la a#re o ar&ui+o" exi#e seu
conte4do e o fecha" dispensando o uso de &ual&uer outra fun!o extra. 6x:
<?php
$texto = readfile(comentario.txt);
?>
6sse simples exemplo a#re o ar&ui+o ;comentario.txt=" exi#e seu conte4do e o fecha.
(ara ler apenas uma linha do ar&ui+o" usamos a fun!o fgets13. 6ssa fun!o tam#%m
rece#e um tamanho como parJmetro" por%m ela ir, ler o ar&ui+o at% &ue o tamanho
informado se)a alcanado ou at% alcanar o final da linha. 6x:
<?php
$arq = fopen(comentario.txt, r);
$linha = fgets($arq,2048);
echo $linha;
fclose($arq);
?>
8o exemplo acima" o ar&ui+o ;comentario.txt= % a#erto em modo leitura e sua
primeira linha % lida com a fun!o fgets13 e arma*enada na +ari,+el Zlinha. Se a fun!o
fosse chamada no+amente" retornaria a segunda linha do ar&ui+o.
(ara ler apenas um caracter por +e*" usa-se a fun!o fgetc13. 6x:
<?php
$arq = fopen(comentario.txt,r);
while(($char = fgetc($arq))!= false)
echo $char;
fclose($arq);
?>
5B
PHP e MySQL
8o exemplo acima" uma atri#ui!o % feita dentro do /hile" onde a fun!o fgetc l2 um
caracter do ar&ui+o e arma*ena na +ari,+el Zchar" &ue % exi#ida com echo. 6m seguida o
pr5ximo caracter % lido e assim at% &ue n!o ha)a mais caracteres a serem lidos 1retorna
false3. 6nt!o" o ar&ui+o % fechado.
6xistem casos em &ue o ar&ui+o possui tag9s html e php em seu conte4do e elas
de+em ser remo+idas para &ue o ar&ui+o possa ser exi#ido ao usu,rio. (ara eliminar essas
tag9s" usamos a fun!o fgetss13" &ue possui a mesma sintaxe de fgets13" com a diferena de
eliminar tags do conte4do. 6x: 0 ar&ui+o ;texto.txt= possui o seguinte conte4do:
exemplo de <b>negrito</b> e </i> itlico</i>
Seria +isuali*ado como:
exemplo de negrito e itlico
Aamos reali*ar a leitura do ar&ui+o usando a fun!o fgetss13" no exemplo a#aixo:
<?php
$arq = fopen(texto.txt, r);
$conteudo = fgetss($arq, 2048);
echo $conteudo;
fclose($arq);
?>
0 resultado seria:
exemplo de negrito e itlico
(odemos tam#%m atri#uir cada linha de um ar&ui+o a uma posi!o de um arraB" para
&ue seu conte4do se)a exi#ido atra+%s de um lao for ou foreach. (ara isso" utili*amos a
fun!o file13" &ue arma*ena cada linha do ar&ui+o em uma posi!o do +etor. 6x:
<?php
$vetor = file(comentario.txt);
foreach( $vetor as $v)
echo $v<br>;
?>
0 exemplo acima coloca cada linha do ar&ui+o ;comentario.txt= em uma posi!o do
+etor. 6m seguida cada posi!o % exi#ida com o uso do foreach.
Es%rita
(ara escre+er dados em um ar&ui+o" utili*amos a fun!o f/rite. Seus parJmetros s!o
o ponteiro do ar&ui+o &ue de+e rece#er os dados e a string &ue ser, gra+ada no ar&ui+o:
f/rite1ponteiro"string3I
a string informada ser, gra+ada no ar&ui+o especificado pelo seu ponteiro. 6x:
<Ophp
$conteudo = Um pequeno exemplo de contedo que pode ser gravado em um arquivo;
$arq = fopen(exemplo.txt,w);
fwrite($arq,$conteudo);
fclose($arq);
?>
8o exemplo acima" a string contida na +ari,+el Zconte4do foi gra+ada no ar&ui+o
;exemplo.txt=.
58
PHP e MySQL
Como foi +isto anteriormente" podemos utili*ar ar&ui+os de texto para guardar
pe&uenas informa'es e criar pe&uenas aplica'es" como contadores de acesso" li+ros de
+isitas" mural de recados" entre outras. 6ntretanto" algumas aplica'es exigem um
gerenciamento mais completo das informa'es" al%m de uma maior segurana e
organi*a!o" como um cadastro de clientes.
$un03es Re*uire e /nc!ude
6scre+er scripts em php pode ser mais simples do &ue nas demais linguagens CK$"
por%m" n!o % uma #oa pr,tica colocar todo script dentro de um 4nico documento. 0 ideal %
&ue se tenha documentos separados e &ue estes se)am chamados &uando necess,rios
1assim como as fun'es3. (ara &ue um script contido em um ar&ui+o separado possa ser
usado" de+emos cham, lo utili*ando as fun'es re&uire13 e include13. 6ssas fun'es agem
como chamadas D fun'es" carregando o script php &ue rece#em como parJmetro e
executando-o dentro do script &ue o chamou. 6x: Temos um script chamado data.php" cu)a
fun!o % imprimir na tela a data atual. Seu conte4do %:
<?php
$data = date(d-m-Y);
echo Hoje $data <br>;
?>
Se &uisermos &ue a data se)a exi#ida em todas as p,ginas de nosso site" n!o
precisaremos escre+er este script no+amente. Xasta &ue o ;chamemos=" atra+%s da fun!o
include:
<?php
echo Pgina Principal<br>;
include(data.php);
?>
A fun!o include incluir, o script data.php na execu!o" des+iando o processamento
para o script e retornando em seguida.
6m alguns casos" precisamos chamar o script apenas uma +e*" ent!o usamos a
fun!o inlcude_once13" &ue reali*a a chamada apenas uma +e*. As fun'es re&uire13 e
re&uire_once13 s!o id2nticas" por%m" % aconselh,+el utili*ar include em +e* de re&uire13" por
&uest'es de desempenho e confia#ilidade.
MySQL e PHP
Como dito anteriormente" informa'es &ue precisam ser manipuladas com mais
segurana e flexi#ilidade exigem o uso de um #anco de dados. 6sse #anco de dados exige
um sistema de gerenciamento 1SKX@ Sistema de Kerenciamento de Xanco de @ados3.
6xistem muitos SKX@9s dispon:+eis no mercado" de forma gratuita ou atra+%s de pagamento
de licenas. 6ntre eles" est, o MBSHL" um sistema desen+ol+ido pela Sun MicrosBstems &ue
roda nati+amente no (H(.
A linguagem (H( suporta di+ersos SKX@9s como 0racle" SB#ase" $nter#ase17ire#ird3"
mSHL" Microsoft SHL Ser+er" MSSHL" MBSHL" (ostgreSHL" entre outros. 6ntretanto" o
MBSHL" como SKX@ nati+o do (H(" n!o exige instala!o de nenhum recurso adicional
1dri+er" extens!o" etc3" #astando apenas &ue o sistema este)a funcionando no ser+idor.
59
PHP e MySQL
Estrutura de u% 5anco de :ados
.m #anco de dados % constitu:do de ta#elas" tam#%m chamadas de entidade" &ue
s!o constitu:das de colunas" onde cada coluna representa um atri#uto da entidade. 6x: 6m
um #anco de dados de uma lo)a +irtual" podemos encontrar as ta#elas cliente" produto"
fornecedor e pedido. 8a ta#ela cliente" podemos encontrar atri#utos" como 8ome"
endereo" n4mero do C(7" etc. As ta#elas representam entidades existentes no mundo real
e s!o constitu:das de colunas &ue representam atri#utos rele+antes de cada entidade.
.ma +e* definidas as ta#elas" podemos ;preench2-las= com as informa'es
necess,rias" ex: podemos cadastrar clientes en+iando D ta#ela cliente as informa'es
necess,rias" conforme pede a ta#ela cliente 1nome" endereo" cpf"...3.
Acessando MySQL
(odemos acessar o MBSHL atra+%s do terminal utili*ando o comando mBs&l. Sua
sintaxe %:
prompt> mysql -u root -h localhost -p
A op!o -u indica o usu,rio 1no caso" root ou superusu,rio3. A op!o -h indica o
ser+idor onde se encontra o MBSHL 1nesse exemplo o ser+idor local ou localhost3 e a op!o
-p indica &ue o mBs&l de+e exigir a senha de acesso para o usu,rio. Se o usu,rio informado
possuir uma senha de acesso" a mesma de+e ser informada e ent!o o sistema far, o login
no MBSHL. A tela do terminal ter, agora a seguinte apar2ncia:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.0.32-Debian_7etch5-log Debian etch distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
$sso indica &ue o login foi efetuado e &ue +oc2 se encontra agora dentro do MBSHL.
-o%andos s*!
A linguagem s&l 1Struct HuerB Language3 % uma linguagem padr!o para a
manipula!o de dados dentro de um SKX@. @esen+ol+ida pela $XM" possi#ilita o
arma*enamento" organi*a!o" atuali*a!o e exclus!o de informa'es dentro do #anco de
dados.
A linguagem s&l % di+idida em duas: Linguagem de @efini!o de @ados 1@@L3 e
Linguagem de Manipula!o de @ados 1@ML3. As @@L9s s!o utili*adas para ;montar= o #anco
de dados e suas ta#elas" en&uanto as @ML9s s!o utili*adas para manipular os dados contidos
no #anco.
omando %reate
6ste comando % utili*ado para criar no+os #ancos de dados ou ta#elas. Sua sintaxe %:
create database nome_do_banco ; //cria um novo banco de dados
create table nome_da_tabela(atributos); //cria uma nova tabela
9"
PHP e MySQL
6x: Aamos criar um no+o #anco de dados:
mysql> create database exemplo;
Query OK, 1 row affected (0.00 sec)
A linha a#aixo do comando indica &ue a HuerB 1comando SHL3 executou com
sucesso" afetando uma linha" le+ando U"UU segundos para ser executado.
Agora +amos informar ao MBSHL &ue pretendemos utili*ar este #anco de dados $sso
% feito atra+%s do comando use:
mysql> use exemplo;
Database changed
A mensagem a#aixo indica &ue o MBSHL passar, a utili*ar o #anco de dados
9exemplo9 para executar os pr5ximos comandos.
Se &uisermos +er os #ancos de dados existentes no ser+idor" podemos utili*ar o
comando sho/ da seguinte forma:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| exemplo |
| mysql |
| testes |
+--------------------+
4 rows in set (0.00 sec)
0 MBSHL mostrar, uma pe&uena ta#ela com a rela!o dos #ancos de dados
existentes no ser+idor.
(ara uma melhor demonstra!o" +amos criar uma ta#ela chamada Aluno. 6ssa ta#ela
ir, arma*enar os dados dos alunos de um curso on-line. 0s atri#utos dessa ta#ela ser!o:
8ome do aluno" 6-mail" data de nascimento" e sua matr:cula. Cada um dos atri#utos
descrito ser, uma coluna da ta#ela Aluno. Assim como as +ari,+eis" atri#utos de uma ta#ela
tam#%m possuem um tipo de dados &ue poder, arma*enar. 0s tipos de cada atri#uto de+em
ser informados no momento da cria!o da ta#ela" mas podem ser alterados posteriormente
1como +eremos mais adiante3. 0s tipos de dados mais importantes s!o descritos na ta#ela
a#aixo:
atributo tipo
c3ar caracteres VstrinW de ta*an3o 'i2o
varc3ar caracteres VstrinW de ta*an3o vari+ve(
int nG*eros inteiros
'(oatX doub(e nG*eros 'racion+rios Vponto '(utuanteW
date data no 'or*ato do *ys=( Vano%*es%diaW
not nu(( indica =ue o atributo no pode ser nu(o Vdeve possuir u* va(orW
autoUincre*ent indica =ue va(or do ca*po ser+ incre*entado auto*atica*ente
91
PHP e MySQL
pri*ary 6ey indica =ue o atributo - u*a c3ave pri*+ria Videnti'icador GnicoW
'orein 6ey indica =ue o atributo - u*a c3ave estraneira Vc3ave pri*+ria de outra tabe(aW
te2t ar*a[ena te2to Vno deve ser do tipo not nu((W
Atri#utos definidos como +archar podem ocupar menos espao f:sico no ser+idor"
+isto &ue seu tamanho pode +ariar de acordo com o +alor informado. 6x: um campo +archar
de QU caracteres pode ter o tamanho m,ximo de QU caracteres" mas se for informado um
+alor menor" o campo se adaptar, ao +alor indicado" desde &ue n!o exceda o +alor m,ximo
indicado. Ao contr,rio" atri#utos do tipo char tem o tamanho fixo. 0 uso do atri#uto +archar
torna a ta#ela mais lenta em suas opera'es.
Campos definidos como not null o#rigatoriamente de+em rece#er um +alor. 6m geral"
% definido um +alor padr!o atra+%s do parJmetro 9default9" &ue define um +alor padr!o para
o campo.
"a.e primria e %"a.e estran2eira
As cha+es prim,rias 1primarB keB3 s!o utili*adas para identificar um registro dentro
de uma ta#ela. 6x: A matr:cula de cada aluno pode ser utili*ada para identific,-lo dentro da
classe. Colunas definidas como primarB keB de+em o#rigatoriamente ser do tipo not null e
n!o podem ter seu +alor repetido" afinal" trata-se de um identificador 4nico para cada
elemento cadastrado. (referencialmente utili*am-se campos num%ricos para cha+es
prim,rias 1ex: id" matr:cula3 ou outro atri#uto &ue respeite os argumentos citados.
As cha+es estrangeiras s!o usadas &uando &ueremos relacionar ta#elas entre si. 6x:
Cada aluno cadastrado ser, colocado em uma determinada turma. (odemos ter uma ta#ela
chamada turma" com informa'es das turmas existentes e uma cha+e prim,ria para
identificar cada turma" assim como na ta#ela aluno. 6nt!o" s5 precisamos criar uma terceira
ta#ela 1ex: matriculado3" contendo apenas a cha+e prim,ria &ue identifica o aluno e a turma
em &ue ser, matriculado. (ara a ta#ela matriculado" esses atri#utos s!o cha+es
estrangeiras" pois n!o s!o identificadores da pr5pria ta#ela" e sim identificadores
pertencentes D outras ta#elas 1da: o nome de cha+es estrangeiras3. 6ssa t%cnica fa* com
&ue as pes&uisas tornem-se mais eficientes" agili*a o funcionamento do #anco de dados"
organi*a melhor as informa'es e possi#ilita melhor gerenciamento das informa'es
cadastradas. Aeremos o uso de cha+es estrangeiras mais adiante.
riando tabelas
(ara a ta#ela aluno de nosso exemplo" teremos os atri#utos matricula" nome" email e
data de nascimento. 0s atri#utos nome e e-mail ser!o do tipo +archar de SU caracteres.
@ata de nascimento ser, do tipo date e a matr:cula ser, uma cha+e prim,ria do tipo inteiro.
0 uso de cha+es prim,rias n!o % o#rigat5rio no MBSHL" mas % muito 4til para aplica'es"
como o exemplo anterior. (ara montar essa estrutura" o comando create ficar, dessa forma:
mysql> create table aluno(
-> matricula int not null auto_increment primary key,
-> nome varchar(40) not null,
-> email varchar(40),
9,
PHP e MySQL
-> dataNasc date
-> );
Query OK, 0 rows affected (0.02 sec)
8ote &ue cada linha termina com uma +:rgula" exceto a 4ltima linha &ue antecede o
sinal ;3I=. 6le indica o fim dos parJmetros do comando create. Tudo o &ue esti+er entre
estes par2nteses far, parte da estrutura da ta#ela aluno.
0 comando sho/ pode mostrar as ta#elas dentro do #anco de dados:
mysql> show tables;
+-------------------+
| Tables_in_exemplo |
+-------------------+
| aluno |
+-------------------+
1 row in set (0.00 sec)
(ara a+eriguar a estrutura da ta#ela" podemos utili*ar o comando desc" &ue fornecer,
uma descri!o da ta#ela:
mysql> desc aluno;
+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+----------------+
| matricula | int(11) | NO | PRI | NULL | auto_increment |
| nome | varchar(40) | NO | | | |
| email | varchar(40) | YES | | NULL | |
| dataNasc | date | YES | | NULL | |
+-----------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
omando insert
.tili*amos esse comando para inserir dados em uma ta#ela. (ara cadastrarmos um
aluno" utili*amos insert e informamos os +alores na ordem em &ue as colunas foram
definidas. (ara cadastrar um aluno" de+emos informar a matr:cula" nome" e-mail e data de
nascimento nessa ordem" pois % como se encontra na ta#ela. 6x:
mysql> insert into aluno values(null,'Z da feira','feira@localhost','1974-12-
17'); Query OK, 1 row affected (0.00 sec)
0 comando acima insere um no+o registro na ta#ela aluno" informando seu nome" e-
mail e data de nascimento. 8ote &ue o parJmetro relati+o D sua cha+e prim,ria foi definido
como null. $sso far, com &ue o MBSHL numere automaticamente o campo. (or ser o
primeiro registro da ta#ela" ter, a matr:cula n4mero F.
6xistem casos em &ue a inser!o de dados em uma ta#ela ocorre apenas em alguns
campos espec:ficos. (odemos informar os campos &ue ser!o preenchidos" lem#rando &ue
todos os campos &ue s!o do tipo 80T 8.LL de+em rece#er um +alor o#rigatoriamente.
6m nosso exemplo" a ta#ela aluno de+e rece#er o#rigatoriamente os +alores
matricula e nome:
mysql> insert into aluno(matricula,nome) values (null,'maria bonita');
Query OK, 1 row affected (0.01 sec)
0s registros em nossa ta#ela ficar!o dessa forma:
90
PHP e MySQL
+-----------+--------------+-----------------+------------+
| matricula | nome | email | dataNasc |
+-----------+--------------+-----------------+------------+
| 1 | Z da feira | feira@localhost | 1974-12-17 |
| 2 | maria bonita | NULL | NULL |
+-----------+--------------+-----------------+------------+
8ote &ue os campos em &ue n!o foram especificados +alores rece#eram o +alor
padr!o 8.LL.
lusula -"ere
A cl,usula /here % adicionada &uando &ueremos &ue o comando se)a executado
dentro de uma condi!o. 6ssa condi!o pode ser uma compara!o entre +alores" uma
ocorr2ncia especial" etc. (odemos utili*ar o /here dentro dos comandos insert" update"
drop" etc. Aeremos o /here sendo utili*ado no comando update:
omando update
0 comando update % utili*ado para atuali*ar um registro da ta#ela. Caso a cl,usula
/here n!o se)a informada" todos os registros da ta#ela ser!o atuali*ados com o +alor
informado:
mysql> update aluno set email='bonita@localhost' where matricula = 2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
8o exemplo acima" o comando update a)ustou o e-mail para 9#onita@localhost9. A
cl,usula /here determina &ue a atuali*a!o somente de+e ocorrer &uando o n4mero da
matr:cula for igual a L. Se essa condi!o n!o fosse informada" todos os registros da ta#ela
teriam o e-mail a)ustado para 9#onita@localhost9:
+-----------+--------------+------------------+------------+
| matricula | nome | email | dataNasc |
+-----------+--------------+------------------+------------+
| 1 | Z da feira | feira@localhost | 1974-12-17 |
| 2 | maria bonita | bonita@localhost | NULL |
+-----------+--------------+------------------+------------+
omando alter table
.til*amos para alterar a estrutura de uma ta#ela. (odemos adicionar 1add3" a)ustar
1set3" excluir 1drop3 uma coluna" etc:
mysql> alter table aluno add cidade varchar(100) after dataNasc;
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
0 comando acima altera a ta#ela aluno" adicionando a coluna endereo" do tipo
+archar1FUU3 depois da coluna data8asc. A estrutura da ta#ela pode ser +ista com o
comando desc alunoI :
mysql> desc aluno;
95
PHP e MySQL
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| matricula | int(11) | NO | PRI | NULL | auto_increment |
| nome | varchar(40) | NO | | | |
| email | varchar(40) | YES | | NULL | |
| dataNasc | date | YES | | NULL | |
| cidade | varchar(100) | YES | | NULL | |
+-----------+--------------+------+-----+---------+----------------+
5 rows in set (0.01 sec)
Aamos agora excluir a coluna cidade:
mysql> alter table aluno drop cidade;
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
A ta#ela aluno +olta a ter a estrutura anterior:
mysql> desc aluno;
+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+----------------+
| matricula | int(11) | NO | PRI | NULL | auto_increment |
| nome | varchar(40) | NO | | | |
| email | varchar(40) | YES | | NULL | |
| dataNasc | date | YES | | NULL | |
+-----------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
omando delete
.tili*ado para excluir um registro da ta#ela. Se aplicado sem a cl,usula /here"
elimina todos os registros da ta#ela:
mysql> delete from aluno where matricula=2;
Query OK, 1 row affected (0.00 sec)
Nesultado:
+-----------+--------------+-----------------+------------+
| matricula | nome | email | dataNasc |
+-----------+--------------+-----------------+------------+
| 1 | Z da feira | feira@localhost | 1974-12-17 |
+-----------+--------------+-----------------+------------+
omando sele%t
.tili*ado para reali*ar pes&uisas dentro de uma ta#ela. Considerado um comando
complexo de+ido a grande gama de com#ina'es poss:+eis para a reali*a!o da pes&uisa.
(ara auxiliar na compreens!o do comando select" alguns registros foram adicionados D
ta#ela aluno. (ara pes&uisarmos todos os registros dentro de uma ta#ela" a sintaxe %:
mysql> select * from aluno;
+-----------+--------------------+------------------------+------------+
| matricula | nome | email | dataNasc |
+-----------+--------------------+------------------------+------------+
| 1 | Z da Feira | feira@localhost | 1973-12-17 |
| 2 | Maria Bonita | bonita@localhost | 1945-05-24 |
| 3 | Virgulino Ferreira | lampiao@localhost | 1947-06-19 |
| 4 | Getlio Vargas | vargas@localhost | 1910-04-12 |
| 5 | Raul Seixas | malucobeleza@localhost | 1957-06-28 |
99
PHP e MySQL
+-----------+--------------------+------------------------+------------+
5 rows in set (0.00 sec)
0 sinal 9 ^ 9 di* para o comando select #uscar todos os +alores da ta#ela. (odemos
especificar uma ou mais colunas para &ue a pes&uisa se)a reali*ada:
mBs&l> select nome"email from alunoI
+--------------------+------------------------+
| nome | email |
+--------------------+------------------------+
| Z da Feira | feira@localhost |
| Maria Bonita | bonita@localhost |
| Virgulino Ferreira | lampiao@localhost |
| Getlio Vargas | vargas@localhost |
| Raul Seixas | malucobeleza@localhost |
+--------------------+------------------------+
5 rows in set (0.00 sec)
8o exemplo acima" foram pes&uisados apenas os campos nome e email da ta#ela
aluno" &ue retornou o nome e e-mail de todos os cadastrados. (odemos utili*ar a cl,usula
/here para reali*ar uma #usca mais espec:fica dentro da ta#ela:
mBs&l> select matricula"nome from aluno /here matricula b QI
+-----------+--------------------+
| matricula | nome |
+-----------+--------------------+
| 3 | Virgulino Ferreira |
+-----------+--------------------+
1 row in set (0.00 sec)
8esse caso" a #usca foi feita nas colunas matricula e nome" nos registros cu)o
n4mero de matr:cula % igual a Q. (odemos tam#%m ordenar os +alores da pes&uisa usando a
cl,usula order #B:
mysql> select matricula,nome,dataNasc from aluno order by nome;
+-----------+--------------------+------------+
| matricula | nome | dataNasc |
+-----------+--------------------+------------+
| 4 | Getlio Vargas | 1910-04-12 |
| 2 | Maria Bonita | 1945-05-24 |
| 5 | Raul Seixas | 1957-06-28 |
| 3 | Virgulino Ferreira | 1947-06-19 |
| 1 | Z da Feira | 1973-12-17 |
+-----------+--------------------+------------+
5 rows in set (0.00 sec)
8ote &ue os registros pes&uisados foram ordenados pelo nome. (odemos tam#%m
ordenar pela data. $ndependente da coluna utili*ada" a ordena!o pode ser ascendente
1asc3 ou descendente 1desc3:
mysql> select matricula,nome,dataNasc from aluno order by dataNasc asc;
9<
PHP e MySQL
+-----------+--------------------+------------+
| matricula | nome | dataNasc |
+-----------+--------------------+------------+
| 4 | Getlio Vargas | 1910-04-12 |
| 2 | Maria Bonita | 1945-05-24 |
| 3 | Virgulino Ferreira | 1947-06-19 |
| 5 | Raul Seixas | 1957-06-28 |
| 1 | Z da Feira | 1973-12-17 |
+-----------+--------------------+------------+
5 rows in set (0.00 sec)
0 exemplo acima foi ordenado pela data de nascimento" em ordem ascendente.
mysql> select matricula,nome,dataNasc from aluno order by dataNasc desc;
+-----------+--------------------+------------+
| matricula | nome | dataNasc |
+-----------+--------------------+------------+
| 1 | Z da Feira | 1973-12-17 |
| 5 | Raul Seixas | 1957-06-28 |
| 3 | Virgulino Ferreira | 1947-06-19 |
| 2 | Maria Bonita | 1945-05-24 |
| 4 | Getlio Vargas | 1910-04-12 |
+-----------+--------------------+------------+
5 rows in set (0.00 sec)
Mesmo exemplo" agora com a data em ordem descendente.
6m alguns casos" a #usca n!o % feita por +alores exatos 1ex: #usca por nome3. 6xiste
uma cl,usula a ser adicionada ao comando select &ue #usca +alores id2nticos ao fornecido:
a cl,usula like. 0 +alor #uscado pode encontrar-se entre o sinal 9V9 para &ue a #usca n!o se
importe com +alores &ue existam antes ou depois do +alor #uscado. 6x: Aamos adicionar
tr2s registros com nomes id2nticos:
mysql> insert into aluno values(null,'Paulo Ricardo','rpm@localhost','1960-04-
09');
Query OK, 1 row affected (0.00 sec)
mysql> insert into aluno values(null,'Paulo Roberto','proberto@localhost','1982-
07-17');
Query OK, 1 row affected (0.00 sec)
mysql> insert into aluno values(null,'Pedro Paulo
Diniz','diniz@localhost','1979-06-10');
Query OK, 1 row affected (0.00 sec)
0s tr2s no+os registros t2m em comum o nome 9(aulo9. Aamos agora reali*ar uma
pes&uisa entre os alunos &ue possuem 9(aulo9 no nome:
mysql> select matricula, nome, dataNasc from aluno where nome like '%paulo%';
+-----------+-------------------+------------+
| matricula | nome | dataNasc |
+-----------+-------------------+------------+
| 6 | Paulo Ricardo | 1960-04-09 |
| 7 | Paulo Roberto | 1982-07-17 |
| 8 | Pedro Paulo Diniz | 1979-06-10 |
+-----------+-------------------+------------+
3 rows in set (0.00 sec)
Como o sinal 9 V 9 foi indicado antes e depois do nome 9paulo9" &ual&uer +alor antes
ou depois do nome foi ignorado. Se for informado apenas depois do nome" apenas os dois
primeiros registros ser!o listados:
9B
PHP e MySQL
mBs&l> select matricula" nome" data8asc from aluno /here nome like 9pauloV9I
mysql> select matricula, nome, dataNasc from aluno where nome like 'paulo%';
+-----------+---------------+------------+
| matricula | nome | dataNasc |
+-----------+---------------+------------+
| 6 | Paulo Ricardo | 1960-04-09 |
| 7 | Paulo Roberto | 1982-07-17 |
+-----------+---------------+------------+
2 rows in set (0.00 sec)
"a.es estran2eiras
0 uso de cha+es estrangeiras % 4til para melhor organi*a!o dos dados" e+itando
redundJncia e facilitando #uscas. 6x: Agora" cada aluno de+e informar o estado em &ue
mora. Aamos ent!o criar uma ta#ela" onde cadastraremos os estados e relacionaremos cada
estado com um aluno" utili*ando cha+es estrangeiras:
mysql> create table estado(
-> uf char(2) not null primary key,
-> estado varchar(40) not null
-> );
Query OK, 0 rows affected (0.01 sec)
0 comando acima cria uma ta#ela estado com os campos .7 e estado. 8ote &ue .7
% uma cha+e prim,ria" +isto &ue cada estado possui sua pr5pria sigla. Aamos cadastrar
apenas alguns estados nessa ta#ela:
mysql> insert into estado values('MG','Minas Gerais');
Query OK, 1 row affected (0.00 sec)
mysql> insert into estado values('BA','Bahia');
Query OK, 1 row affected (0.00 sec)
mysql> insert into estado values('PR','Paran');
Query OK, 1 row affected (0.00 sec)
mysql> insert into estado values('CE','Cear');
Query OK, 1 row affected (0.00 sec)
mysql> insert into estado values('RS','Rio Grande do Sul');
Query OK, 1 row affected (0.00 sec)
Tipos de tabelas
As ta#elas do MBSHL possuem tipos. 0 tipo padr!o de ta#ela % MB$SAM. Todas as
ta#elas s!o criadas dessa forma. M um tipo de ta#ela mais r,pido" mas &ue n!o permite
relacionamentos atra+%s de cha+es estrangeiras. (ara &ue este relacionamento possa ser
utili*ado" i tipo da ta#ela de+e ser inno@X" &ue % um tipo mais lento" mas &ue tra#alha com
cha+es estrangeiras. 0 tipo da ta#ela pode ser informado no momento da cria!o da ta#ela"
utili*ando a cl,usula engine no final dos atri#utos:
mysql> create table estado(
-> uf char(2) not null primary key,
-> estado varchar(40) not null
-> )engine=innodb;
Caso a ta#ela ), exista" podemos alter,-la:
98
PHP e MySQL
mysql> alter table aluno engine=innodb;
Query OK, 8 rows affected (0.15 sec)
Records: 8 Duplicates: 0 Warnings: 0
mysql> alter table estado engine=innodb;
Query OK, 5 rows affected (0.05 sec)
Records: 5 Duplicates: 0 Warnings: 0
Agora" +amos alterar a ta#ela aluno" adicionando o campo estado" onde colocaremos
apenas a cha+e prim,ria &ue identifica cada estado 1nesse caso" uf3. (ara isso" a no+a
coluna de+e ser a)ustada com a cl,usula foreign keB.
(rimeiramente" +amos criar a coluna estado na ta#ela aluno:
mysql> alter table aluno add estado char(2);
Query OK, 8 rows affected (0.09 sec)
Records: 8 Duplicates: 0 Warnings: 0
Agora" +amos defini-la como cha+e estrangeira &ue referencia a coluna uf da ta#ela
estado:
mysql> alter table aluno add foreign key(estado) references estado(uf);
Query OK, 8 rows affected (0.14 sec)
Records: 8 Duplicates: 0 Warnings: 0
Ae)amos como ficou a estrutura da ta#ela aluno:
mysql> desc aluno;
+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+----------------+
| matricula | int(11) | NO | PRI | NULL | auto_increment |
| nome | varchar(40) | NO | | | |
| email | varchar(40) | YES | | NULL | |
| dataNasc | date | YES | | NULL | |
| estado | char(2) | YES | MUL | NULL | |
+-----------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
Agora" +amos atuali*ar os registros da ta#ela aluno" informando o estado de cada
um:
mysql> update aluno set estado='PR' where matricula=1;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0
0 aluno com o n4mero de matr:cula igual a F te+e seu estado alterado para (N.
Aamos atuali*ar os demais:
mysql> update aluno set estado='CE' where matricula=2;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> update aluno set estado='CE' where matricula=3;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> update aluno set estado='RS' where matricula=4;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> update aluno set estado='BA' where matricula=5;
Query OK, 1 row affected (0.02 sec)
99
PHP e MySQL
Rows matched: 1 Changed: 1 Warnings: 0
mysql> update aluno set estado='PR' where matricula=6;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> update aluno set estado='MG' where matricula=7;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> update aluno set estado='MG' where matricula=8;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0
Ae)amos como ficou o registro dos alunos:
mysql> select * from aluno;
+-----------+--------------------+------------------------+------------+-------+
| matricula | nome | email | dataNasc | estado|
+-----------+--------------------+------------------------+------------+-------+
| 1 | Z da Feira |feira@localhost | 1973-12-17 | PR |
| 2 | Maria Bonita | bonita@localhost | 1945-05-24 | CE |
| 3 | Virgulino Ferreira | lampiao@localhost | 1947-06-19 | CE |
| 4 | Getlio Vargas | vargas@localhost | 1910-04-12 | RS |
| 5 | Raul Seixas | malucobeleza@localhost | 1957-06-28 | BA |
| 6 | Paulo Ricardo | rpm@localhost | 1960-04-09 | PR |
| 7 | Paulo Roberto | proberto@localhost | 1982-07-17 | MG |
| 8 | Pedro Paulo Diniz | diniz@localhost | 1979-06-10 | MG |
+-----------+--------------------+------------------------+------------+-------+
8 rows in set (0.00 sec)
Relacionando tabelas
Agora &ue temos a cha+e estrangeira definida" podemos listar o nome do estado ao
&ual pertence cada aluno" referenciando a cha+e estrangeira da ta#ela. 6x: Aamos
selecionar todos os alunos de Minas Kerais:
mysql> select aluno.nome, estado.estado from aluno, estado where estado.uf =
aluno.estado and estado.uf='MG';
+-------------------+--------------+
| nome | estado |
+-------------------+--------------+
| Paulo Roberto | Minas Gerais |
| Pedro Paulo Diniz | Minas Gerais |
+-------------------+--------------+
2 rows in set (0.05 sec)
A pes&uisa utili*a um select &ue #usca informa'es nas duas ta#elas 1aluno e
estado3" o#tendo +alor da coluna nome da ta#ela aluno 1aluno.nome3 e o +alor do campo
estado da ta#ela estado 1estado.estado3. 0 segredo est, na condi!o /here: A pes&uisa
retornar, os resultados em &ue o campo estado da ta#ela aluno se)a igual ao campo estado
da ta#ela estado 1aluno.estado b estado.uf3 e a .7 do estado se)a MK 1estado.uf b MK3.
@essa forma n!o precisamos arma*enar os nomes dos estados mais de uma +e*.
Caso ha)a uma mudana no nome dos estados" essa informa!o % facilmente atuali*ada.
Relacionamentos entre tabelas
Ta#elas de um #anco de dados podem ser comparadas a con)untos. 6sses con)untos
<"
PHP e MySQL
1ta#elas3 podem ser relacionados de tr2s formas:
F. .m para um: 0corre &uando cada elemento da primeira ta#ela est, relacionado com
apenas um elemento da segunda ta#ela. ex: .m li+ro somente pode ser pu#licado
por uma editora" portanto" a rela!o entre li+ro e editora % de um para umI
L. .m para muitos 1muitos para um3: 0corre &uando um elemento da primeira ta#ela
est, relacionado a mais de um elemento da segunda ta#ela. 6x: .m funcion,rio
tra#alha apenas em uma empresa" por%m" uma empresa pode ter +,rios
funcion,rios. 0 relacionamento entre funcion,rio e empresa % de muitos para um
1um para muitos3I
Q. Muitos para muitos: 0corre &uando muitos elementos da primeira ta#ela se
relacionam com muitos elementos da segunda ta#ela. M o caso de nosso exemplo"
pois um aluno pode reali*ar mais de um curso ao mesmo tempo" en&uanto uma
turma" o#rigatoriamente possui muitos alunos. A rela!o entre aluno e turma % de
muitos para muitos.
8o #anco de dados" as rela'es de um para muitos s!o resol+idas com cha+es
estrangeiras. A ta#ela &ue ter, seus atri#utos repetidos rece#e uma cha+e prim,ria e a
fornece como identificador para a outra ta#ela" como cha+e estrangeira.
0s casos de relacionamento de muitos para muitos n!o s!o t!o facilmente
representados" exigindo a cria!o de uma terceira ta#ela" &ue relacionar, as duas ta#elas
onde ocorrem esse relacionamento. 6x: (oder:amos criar uma ta#ela" onde cadastrar:amos
os cursos oferecidos pela institui!o. .m curso de+e ter mais de um aluno e um aluno pode
fa*er mais de um curso. 8este caso" h, um relacionamento de muitos para muitos" onde h,
a necessidade da cria!o de uma ta#ela ;intermedi,ria=" para &ue possa ha+er um
relacionamento entre os alunos matriculados e os respecti+os cursos &ue fre&ientam. 6ssa
ta#ela poderia conter apenas as cha+es prim,rias das ta#elas aluno e curso" reali*ando
assim o relacionamento entre am#os.
-onfigurando usu&rios no MySQL
At% agora" todas as opera'es no #anco de dados foram reali*adas utili*ando o
usu,rio root do mBs&l. Acessar o #anco de dados como root % uma p%ssima id%ia do ponto
de +ista da segurana. 0 usu,rio root tem acesso e permiss!o de leitura e escrita em
&ual&uer ar&ui+o dentro do ser+idor. 6scre+er scripts onde o acesso ao #anco de dados %
feito atra+%s do root % a#rir as portas para usu,rios mal intencionados no ser+idor. (ara
e+itar &ue pessoas n!o autori*adas tenham acesso ao seu #anco de dados" de+emos criar
outro usu,rio para o mBs&l e garantir &ue ele n!o ter, os mesmos pri+il%gios do root.
Sistema de pri.il2ios
(odemos di*er &ue" para &ue um usu,rio possa reali*ar &ual&uer opera!o dentro de
um #anco de dados" % necess,rio &ue ele tenha permiss!o 1pri+il%gio3 para isso. Cada
opera!o 1insert" update" delete" drop"...3 % uma opera!o diferente e o usu,rio precisa ter
permiss!o para execut,-las. 0 MBSHL 1assim como outros SKX@9s3 permite &ue
gerenciemos esses pri+il%gios" escolhendo assim &uais opera'es poder!o ser reali*adas
<1
PHP e MySQL
pelo no+o usu,rio. (odemos tam#%m determinar os #ancos de dados" ta#elas e at% as
colunas em &ue esse usu,rio poder, atuar.
on%edendo pri.il2ios G %omando G*+<T
0 comando grant % respons,+el pela cria!o do no+o usu,rio" #em como a concess!o
de pri+il%gios ao mesmo. Atra+%s deste comando" configuramos um no+o usu,rio para o
MBSHL" descre+emos &uais ser!o seus pri+il%gios e &uais #ancos de dados" ta#elas e
colunas em &ue ele ter, permiss!o de atuar. Sua sintaxe %:
grant privilgios on (banco.tabela | tabela.coluna) to usuario@servidor [
identified by 'senha' ];
8ote &ue podemos configurar uma senha de acesso para o no+o usu,rio utili*ando
esse comando. 6x: Aamos criar um usu,rio &ue ter, todos os pri+il%gios so#re o #anco de
dados pro)eto:
grant all privileges on projeto.* to testes@localhost identified by 'senha123';
0 parJmetro all pri+ileges indica &ue o usu,rio ter, todos os pri+il%gios concedidos.
pro)eto.^ indica &ue estes pri+il%gios ser!o concedidos para serem utili*ados no #anco de
dados pro)eto" em &ual&uer ta#ela pertencente a este #anco. testes@localhost indica &ue o
nome do no+o usu,rio % testes" e &ue o mesmo tem acesso apenas ao ser+idor localhost. Se
inform,ssemos o s:m#olo 9V9 no lugar de localhost" indicar:amos &ue o usu,rio testes teria
acesso a &ual&uer ser+idor em &ue o MBSHL atua. 6m identified #B 9senhaFLQ9"
configuramos a senha de acesso para esse usu,rio.
Caso &ueiramos re+ogar os pri+il%gios do usu,rio" utili*aremos o comando re+oke:
revoke all privileges to testes@localhost;
8ote &ue n!o precisamos informar a senha do usu,rio &ue ter, os pri+il%gios
re+ogados. 6sse comando re+oga todos os pri+il%gios do usu,rio testes" concedidos
anteriormente.
(ara uma maior segurana" de+emos conceder o m:nimo poss:+el de pri+il%gios a um
usu,rio. Aamos conceder ao usu,rio testes" os pri+il%gios select" insert" update e delete:
grant select, insert, update, delete on projeto.* to testes@localhost identified
by 'senha123';
$sso fa* com &ue o usu,rio testes possua apenas os pri+il%gios citados. Al%m disso"
nosso usu,rio ter, acesso apenas ao #anco de dados pro)eto.
-onectando1se ao MySQL co% o PHP
Como foi mencionado anteriormente" o #anco de dados MBSHL foi desen+ol+ido para
ser utili*ado em con)unto com o (H(. 0 MBSHL % um #anco de dados nati+o da linguagem.
Apesar disso" o (H( tam#%m pode ser utili*ado com outros #ancos de dados" assim como o
MBSHL pode ser acessado por outras linguagens CK$ 1ex: Ccc" (erl" (Bthon" Nu#B" etc3.
(ara &ue o (H( possa acessar o #anco de dados MBSHL" de+emos utili*ar fun'es
espec:ficas para conex!o ao #anco de dados.
<,
PHP e MySQL
one!(o
(ara conectarmos ao MBSHL" utili*amos a fun!o mBs&l_connect13" &ue possui a
seguinte sintaxe:
mysql_connect(servidor,usuario,senha);
servidor: endereo do ser+idor do #anco de dados 1caso se)a sua pr5pria m,&uina"
o endereo % localhost ou FLT.U.U.F3I
usuario: nome de usu,rio utili*ado para acessar o #anco de dadosI
sen#a: senha do usu,rio &ue far, a conex!oI
6sse comando retorna um identificador para a conex!o 1ponteiro3 em caso de
sucesso" ou fa!se em caso de falha. 6ste ponteiro pode ser arma*enado dentro de uma
+ari,+el (H( para utili*a!o posterior 1ex: para fechar a conex!o3.
6x: para nos conectarmos ao #anco de dados pro)eto como usu,rio testes:
$con = mysql_connect('localhost','testes','senha123');
A +ari,+el Zcon rece#er, o identificador da conex!o" &ue poderemos utili*ar para
identific,-la &uando necess,rio. 7eita a conex!o" de+emos selecionar o #anco de dados no
&ual de+eremos tra#alhar. Aoc2 pode passar o nome do #anco de dados como &uarto
parJmetro da conex!o ou utili*ar a fun!o mBs&l_select_d#13 para isso:
mysql_select_db($projeto);
E!e%utando Huer1Is SE$
0s comando SHL 1&uerB3 podem ser executadas atra+%s da fun!o mBs&l_&uerB13.
6la rece#e uma &uerB como parJmetro e 1opcionalmente3 o identificador da conex!o. $sso %
muito 4til em caso de aplica'es &ue conectam-se a mais de um #anco de dados ao mesmo
tempo. 6ssa fun!o retorna o resultado da execu!o da &uerB. 6x: para executar um select
na ta#ela cliente:
$res = mysql_query(select * from cliente;);
0 resultado da #usca 1select3 ficar, arma*enado na +ari,+el Zres" e poder, ser
manipulado mais adiante. (ara melhor exemplificarmos" +amos utili*ar a ta#ela cliente" com
a seguinte estrutura:
+--------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| nome | varchar(80) | NO | | | |
| email | varchar(50) | YES | | NULL | |
| estado | char(2) | NO | | | |
+--------+-------------+------+-----+---------+----------------+
Aoc2 tam#%m pode arma*enar a &uerB em uma +ari,+el e us,-la como parJmetro
para a fun!o mBs&l_&uerB13. $sso % muito 4til em casos em &ue % necess,rio a cria!o de
&uerB9s dinJmicas. 6x: Se o usu,rio pede para &ue o resultado da #usca na ta#ela clientes
se)a ordenado pelo nome dos clientes:
$query = select * from cliente;
<0
PHP e MySQL
if($ordenar==true)
$query .= order by nome;
$query .= ;;
$busca = mysql_query(query);
8o exemplo acima" se a +ari,+el Zordenar for +erdadeira" o parJmetro ;order #B
nome=" % adicionado D &uerB" para &ue o resultado se)a ordenado por nome.
Or2aniJando os dados da %onsulta
Huando executamos um select no #anco de dados" todas as informa'es ficam
contidas dentro de uma +ari,+el 1no exemplo acima" o resultado da pes&uisa fica todo
arma*enado na +ari,+el Z#usca3. (ara &ue o resultado se)a exi#ido" % necess,rio &ue ele
se)a organi*ado.
*etornando o n0mero de lin"as
Huando efetuamos uma pes&uisa" uma determinada &uantidade de resultados %
o#tida. 8o nosso exemplo" a #usca ;select ^ from cliente= retornar, como resultado todas as
informa'es de todos os clientes cadastrados. 0 MBSHL 1e outros SKX@9s3 retornam o
n4mero de linhas encontradas em uma pes&uisa. Como +imos anteriormente" cada linha
representa um registro" portanto" no exemplo acima" a &uantidade de linhas retornadas na
pes&uisa ser, a &uantidade de clientes cadastrados no #anco. (ara desco#rirmos a
&uantidade de linhas retornadas" utili*amos a fun!o mBs&l_num_ro/s13" &ue rece#e a
+ari,+el &ue cont%m o resultado da &uerB como padr!o. 6ssa fun!o retorna um +alor
inteiro" &ue pode ser arma*enado dentro de outra +ari,+el e utili*ado para informar o
n4mero de clientes encontrados. 6x:
$num_clientes = mysql_num_rows($busca);
Se ti+ermos T clientes cadastrados" a +ari,+el Znum_clientes rece#er, o +alor T. 6ste
+alor % utili*ado na exi#i!o de resultados" como +alor de controle para uma estrutura de
repeti!o. Assim" podemos fa*er com &ue a estrutura de repeti!o 1em geral" um for3
mostre todos os resultados o#tidos na pes&uisa. Assim" para exi#ir todos os resultados"
ter:amos um c5digo semelhante a este:
$busca = mysql_query("select * from cliente")or die("no faz pesquisa");
$num_busca = mysql_num_rows($busca)or die("no retorna num. de buscas feitas");
for($i=0;$i<$num_busca;$i++){
/*mostra os resultados*/
}
6m alguns casos" &ueremos executar altera'es nos registros da ta#ela 1ex: alterar o
endereo de um cliente ou exclu:-lo3 e precisamos sa#er &uantos registros foram afetados
com a execu!o da &uerB. (ara isso" utili*amos a fun!o mBs&l_affected_ro/s13" &ue retorna
o n4mero de registros afetados pela execu!o da &uerB. 6x: Aamos atuali*ar o estado dos
clientes para 9SC9:
$query = " update cliente set estado='SC' ; ";
$alt = mysql_query($query);
$num_alt = mysql_affected_rows($con)or die("nao mostrou linhas afetadas");
echo "$num_alt linhas afetadas<br>";
Ser, exi#ida uma mensagem" informando o n4mero de linhas afetadas" ou se)a" o
n4mero de registros &ue foram alterados com a &uerB.
<5
PHP e MySQL
Ap5s o#termos o n4mero de linhas retornadas" podemos formatar os dados para
exi#i!o. (ara isso" de+emos organi*ar os dados o#tidos na pes&uisa &ue est!o dentro da
+ari,+el Z#usca. (ara reali*ar esta tarefa" podemos utili*ar Q fun'es diferentes:
A primeira % a fun!o %ys*!7fetc#7ro";<" &ue rece#e a +ari,+el &ue cont%m o
resultado da pes&uisa e retorna o resultado em forma de linha. (ara acessar os dados"
de+emos informar o n4mero da linha correspondente. 6x:
$busca = mysql_query("select * from cliente")or die("no faz pesquisa");
$num_busca = mysql_num_rows($busca)or die("no retorna num. de buscas feitas");
for($i=0;$i<$num_busca;$i++){
$resultado = mysql_fetch_row($busca);
echo $resultado[0];
echo $resultado[1];
echo $resultado[2];
echo $resultado[3].<br>";
}
0s resultados da #usca foram organi*ados em linhas. Cada linha representa uma
coluna da ta#ela. A +ari,+el Zresultado`Ua cont%m o id do cliente" Zresultado`Fa o nome"
Zresultado`La seu e-mail e resultado`Sa seu estado.
0utra forma de organi*armos os resultados o#tidos % utili*ando a fun!o
%ys*!7fetc#7array;<= &ue retorna o resultado da pes&uisa como um +etor. (ara uma
melhor organi*a!o" podemos acrescentar o parJmetro M>SQL7ASS)-" &ue fa* com &ue
os resultados se)am organi*ados em um arraB associati+o" permitindo um melhor acesso e
controle na exi#i!o dos dados. 6x:
for($i=0;$i<$num_busca;$i++){
$resultado = mysql_fetch_array($busca,MYSQL_ASSOC);
echo $resultado['id'];
echo $resultado['nome'];
echo $resultado['email'];
echo $resultado['estado']."<br>";
}
$sso permite &ue os dados se)am acessados conforme o nome das colunas da ta#ela.
A terceira forma de organi*a!o dos dados % utili*ando a fun!o
mBs&l_fetch_o#)ect13" &ue retorna o resultado como um o#)eto 10 conceito de orienta!o a
o#)etos ser, +isto mais adiante3.:
for($i=0;$i<$num_busca;$i++){
$resultado = mysql_fetch_object($busca);
echo $resultado->id;
echo $resultado->nome;
echo $resultado->email;
echo $resultado->estado."<br>";
}
Fe%"ando a %one!(o
A fun!o respons,+el pelo fechamento da conex!o com o #anco de dados %
mBs&l_close13. 6ssa fun!o rece#e o ponteiro da conex!o como parJmetro. 6x:
mysql_close($con);
6sse comando ir, fechar a conex!o iniciada anteriormente em nosso exemplo. $sso
<9
PHP e MySQL
redu* o n4mero de conex'es ati+as no ser+idor. Xancos de dados em geral aceitam um
n4mero limitado de conex'es simultJneas. A utili*a!o da fun!o mBs&l_close13 li#era
recursos do ser+idor para no+as conex'es" permitindo maior efici2ncia da aplica!o.
Ap!ica03es e% PHP e MySQL
At% agora" +imos como o #anco de dados MBSHL pode ser utili*ado com o (H( em
exemplos simples e isolados. Agora" +amos construir pe&uenas aplica'es utili*ando essas
poderosas ferramentas" a fim de compreendermos melhor seu funcionamento. (ara a
constru!o de nossas aplica'es" +amos utili*ar a ta#ela cliente" &ue est, contida no #anco
de dados pro)eto. Aamos tam#%m criar o usu,rio 9user9" com a senha 9senhaFLQ9 e conceder
a ele os pri+il%gios select" insert"update e delete para o #anco. 0s exemplos apresentados
a&ui s!o apenas scripts independentes. 0s c5digos estar!o comentados para melhor
compreens!o. (ara a constru!o de uma aplica!o completa" os m5dulos de+er!o ser
integrados" mas por &uest!o did,tica" +eremos o funcionamento de cada m5dulo
separadamente. Aamos construir os m5dulos de cadastro" altera!o" pes&uisa e exclus!o"
para isso" @igite os seguintes comandos no terminal do MBSHL:
//conectando-se ao banco de dados
mysql -u root -p
//criando o banco de dados projeto
create database projeto;
//selecionando o banco projeto
use projeto;
//criando a tabela cliente
create table cliente(
id int not null auto_increment primary key,
nome varchar(80) not null,
email varchar(80) not null,
estado char(2) not null
)engine=innoDB;
//configurando o usurio do banco
grant select,insert,update,delete on projeto.* to user@localhost identified by
'senha123';
(recisaremos acessar o #anco de dados constantemente e informarmos os
parJmetros necess,rios para a conex!o. (ara facilitar nosso tra#alho" +amos escre+er o
seguinte c5digo:
<?php
$servidor = 'localhost';
$usuario = 'teste';
$senha = 'senha123';
$banco = 'projeto';
$con = mysql_connect($servidor,$usuario,$senha);
mysql_select_db($banco);
?>
Sal+e-o como mBs&lconfig.inc 1inc de include3. 6sse script ser, chamado toda +e* &ue
precisarmos nos conectar ao #anco de dados.
<<
PHP e MySQL
MKdulo de %adastro
Agora &ue temos o #anco de dados de+idamente montado e configurado" +amos criar
a primeira parte da aplica!o. (recisaremos de um formul,rio HTML para &ue o usu,rio
possa digitar os dados:
<html>
<head>
<title>Cadastro</title>
</head>
<body>
<form method="POST" action="cadastrar.php">
<p align="center">Nome: <input name="nome" type="text"></p>
<p align="center">E-mail: <input name="email" type="text"></p>
<p align="center">Estado (UF): <input name="estado" size="2" type="text"></p>
<p align="center"><input value="salvar" type="submit"></p>
</form>
</body>
</html>
Sal+e-o como cadastrar.html. Agora +amos escre+er o script &ue ir, gra+ar as
informa'es no #anco de dados 1cadastrar.php3:
<?php
//captura as informaes enviadas pelo formulrio
$nome = $_POST['nome'];
$email = $_POST['email'];
$estado = $_POST['estado'];
//conecta-se ao banco de dados
include("mysqlconfig.inc");
//monta a query que ir gravar as informaes
$query = "insert into cliente values(null,'$nome','$email','$estado'); ";
//grava as informaes
$grava = mysql_query($query);
//conta o nmero de colunas afetadas. Se for 1, a gravao foi efetuada
$num_linha = mysql_affected_rows($grava);
if($num_linha == 1)
echo "Cadastro Efetuado com sucesso<br>";
//link para a pgina anterior
echo "< a href='javascript:history.back()'>voltar</a>";
//fecha a conexo
mysql_close($con);
?>
0 script exi#ir, uma mensagem" caso o cadastro se)a efetuado com sucesso.
MKdulo de e!%lus(o
6ste m5dulo % muito simples. Criaremos um formul,rio" onde informaremos o c5digo
do cliente a ser exclu:do e um script &ue exclui este cliente. Aamos comear pelo formul,rio:
<html>
<head>
<B
PHP e MySQL
<title>Excluir</title>
</head>
<body>
<form method="POST" action="excluir.php">
<p align="center">Cdigo: <input type="text" name="id" size="3"></p>
<p align="center"><input type="submit" value="Excluir">
</form>
</body>
</html>
Sal+e-o como excluir.html. Agora" +amos criar os script &ue ir, reali*ar a exclus!o do
usu,rio:
<?php
//captura id do formulrio
$id = $_POST['id'];
//converte formato para inteiro
$id = intval($id);
//realiza a conexo com o banco de dados
include("mysqlconfig.inc");
//monta a query de excluso
$query = "delete from cliente where id='$id'; ";
//executa a query
$res = mysql_query($query);
//conta o nmero de registros afetados
$num_exclui = mysql_affected_rows($res);
//caso um registro tenha sido excludo, exibe mensagem
if($num_exclui == 1)
echo "Cliente excludo com sucesso<br>";
//link para a pgina anterior
echo "< a href='javascript:history.back()'>voltar</a>";
//fecha a conexo
mysql_close($con);
?>
Sal+e-o como excluir.php.
MKdulo de pesHuisa G parte L
6ste m5dulo ser, relati+amente simples. Aamos fa*er apenas com &ue ele liste os
clientes cadastrados no #anco de dados. 6ste script de+e ser sal+o como lista.php:
<?php
//conecta-se ao banco de dados
include("mysqlconfig.inc");
//monta a query de busca
<8
PHP e MySQL
$query = "select * from cliente; ";
//executa a query
$res = mysql_query($query);
//conta o nmero de registros encontrados na pesquisa
$num_reg = mysql_num_rows($res);
//monta uma tabela para organizar os dados
echo "<table border='0' cellpadding='1' cellspacing='1'> ";
//cria um for para a exibio dos dados
for($i=0;$i<$num_reg;$i++){
//formata resultado para exibio
$mostra = mysql_fetch_array($res);
echo "<tr>";
//exibe os resultados
echo "<td> $mostra['id'] </td>";
echo "<td> $mostra['nome'] </td>";
echo "<td> $mostra['email'] </td>";
echo "<td> $mostra['estado'] </td>";
echo "</tr>";
}
//encerra a tabela
echo "</table>";
//informa a quantidade de registros encontrados
echo $num_reg encontrados<br>;
//encerra a conexo
mysql_close($con);
?>
6sse script monta uma ta#ela e exi#e todos os registros encontrados na ta#ela
cliente.
MKdulo de pesHuisa G parte M
Agora" +amos criar um formul,rio" onde o usu,rio informar, um nome a ser
pesuisado na ta#ela cliente. Aamos comear com o formul,rio onde o usu,rio informar, o
nome:
<html>
<head>
<title>Buscar</title>
</head>
<body>
<form method="POST" action="buscar.php">
<p align="center">Nome: <input type="text" name="nome" size="30"></p>
<p align="center"><input type="submit" value="Buscar">
</form>
</body>
</html>
Sal+e-o como #uscar.html. 0 nome informado neste formul,rio ser, colocado na
<9
PHP e MySQL
&uerB de pes&uisa do script #uscar.php" &ue ir, listar todos os clientes registrados no #anco
com o nome igual ou id2ntico ao informado:
<?php
//captura o nome informado no formulrio
$nome = $_POST['nome'];
//conecta-se ao banco de dados
include("mysqlconfig.inc");
//monta a query de busca, inserindo o nome como parmetro
$query = "select * from cliente where nome like'%'$nome'%'; ";
//executa a query
$res = mysql_query($query);
//conta o nmero de registros encontrados na pesquisa
$num_reg = mysql_num_rows($res);
//monta uma tabela para organizar os dados
echo "<table border='0' cellpadding='1' cellspacing='1'> ";
//cria um for para a exibio dos dados
for($i=0;$i<$num_reg;$i++){
//formata resultado para exibio
$mostra = mysql_fetch_array($res);
echo "<tr>";
//exibe os resultados
echo "<td> $mostra['id'] </td>";
echo "<td> $mostra['nome'] </td>";
echo "<td> $mostra['email'] </td>";
echo "<td> $mostra['estado'] </td>";
echo "</tr>";
}
//encerra a tabela
echo "</table>";
//encerra a conexo
mysql_close($con);
?>
8ote &ue este script % semelhante ao anterior" por%m" o nome informado no
formul,rio de #usca % colocado como parJmetro na &uerB &ue % executada. 0 parJmetro
like indica &ue a #usca de+e ser feita com +alores id2nticos" ou se)a" se o usu,rio informar o
nome (aulo" todos os clientes com o nome de (aulo ser!o listados.
MKdulo de altera;(o
0 m5dulo de altera!o exige &ue se)a di+idido em Q partes: 8a primeira parte" um
formul,rio html" onde informaremos o c5digo 1id3 do cliente &ue ser, alterado. 8a segunda
parte" um script (H( &ue exi#e as informa'es do cliente e um #ot!o de confirma!o. 8a
terceira parte" o script &ue executa a altera!o dos dados do cliente. Aamos comear com o
formul,rio html" onde o usu,rio informar, o id do cliente a ser alterado:
B"
PHP e MySQL
<html>
<head>
<title>Alterar</title>
</head>
<body>
<form method="POST" action="exibir.php">
<p align="center">Nome: <input type="text" name="id" size="3"></p>
<p align="center"><input type="submit" value="Exibir">
</form>
</body>
</html>
0 c5digo informado neste formul,rio ser, en+iado para o script ;exi#ir.php=" &ue ir,
mostrar os dados do cliente. 6le conter, um formul,rio id2ntico ao de cadastro" por%m" o
atri#uto +alue das tag9s far, com &ue os +alores ), existentes se)am mostrados dentro dos
campos:
<?php
//captura o cdigo informado no formulrio
$id = $_POST['id'];
//conecta-se ao banco de dados
include("mysqlconfig.inc");
//monta a query de busca, inserindo o id como parmetro
$query = "select * from cliente where id='$id'; ";
//executa a query
$res = mysql_query($query);
//formata resultado para exibio
$mostra = mysql_fetch_array($res);
//monta o formulrio para exibio, que leva os dados
//para o script de gravao
echo "<form method='POST' action='salvar.php'>";
//exibe os resultados. O html ser exibido fora do PHP
?>
<p align='center'>Cdigo:
<?php echo $mostra['id'] ?>
</p>
<p align='center'>Nome:
<input type='text' name='nome' value='<?php echo $mostra['nome']; ?> '>
</p>
<p align='center'>E-mail:
<input type='text' name='email' value='<?php echo $mostra['email']; ?> '>
</p>
<p align='center'>Estado:
B1
PHP e MySQL
<input type='text' name='estado' value='<?php echo $mostra['estado']; ?>'
size='2'>
</p>
<p align='center'>
<input type='submit' value='Salvar'>
</p>
</form>
<?php
//encerra a conexo
mysql_close($con);
?>
0s dados do cliente s!o exi#idos dentro das tag9s do formul,rio 1com exce!o do id"
&ue de+e permanecer o mesmo3. 6ste mesmo formul,rio &ue est, exi#indo as informa'es
do cliente est, ;direcionado= para um script chamado ;sal+ar.php=. (odemos fa*er as
altera'es necess,rias nos dados &ue est!o sendo exi#idos neste script e ent!o" &uando
clicarmos no #ot!o ;Sal+ar=" os no+os dados 1e os antigos" isto %" &ue n!o foram alterados3
ser!o en+iados para o script ;sal+ar.php=" &ue ir, reali*ar a efeti+a gra+a!o dos dados:
<?php
//captura o cdigo informado no formulrio
$id = $_POST['id'];
$nome = $_POST['nome'];
$email = $_POST['email'];
$estado = $_POST['estado'];
//converte para inteiro
$id = (integer) $id;
//conecta-se ao banco de dados
include("mysqlconfig.inc");
//monta a query de alterao
$query = "update cliente set nome='$nome', email='$email', estado='$estado'
where id='$id'; ";
//executa a query
$res = mysql_query($query);
//conta o nmero de colunas alteradas. Se for 1, a alterao foi efetuada com
sucesso
$num_alt = mysql_affected_rows($res);
if($num_alt == 1)
echo "Alterao efetuada com sucesso!!!<br>";
//encerra a conexo
mysql_close($con);
?>
8ote &ue" conforme foi especificado na &uerB" os dados ser!o alterados en&uanto o
id do cliente for igual ao id fornecido" ou se)a" isso garante &ue apenas o cliente em &uest!o
ter, seus dados alterados.
B,
PHP e MySQL
-oo?ies e Sess3es 1 Autentica0o
oo&ies
Aoc2 ), de+e ter +i+ido essa situa!o: Aoc2 acessa seu perfil em um site de
relacionamentos e na+ega por ele por algum tempo. @epois +oc2 fecha seu na+egador para
terminar um tra#alho &ue deixou para tr,s. Logo depois" +oc2 entra na&uele site de
relacionamentos no+amente e" &ual a sua surpresa &uando perce#e &ue o site ), a#re
diretamente em seu perfil" sem &ue +oc2 precise digitar seu nome de login e sua senha
no+amente. 6nt!o +oc2 se pergunta: ;Como isso % poss:+elO=. A resposta est,"
primeiramente nos cookies. 6les s!o pe&uenos ar&ui+os de texto &ue o pr5prio (H( gra+a
em sua m,&uina" com informa'es rele+antes para a aplica!o 1ex: seu login e sua senha"
para &ue n!o tenha &ue logar-se no+amente3. Kra+ar um cookie % uma tarefa muito
simples" % necess,rio apenas o uso da seguinte fun!o:
setcookie(nomedocookie,valor a ser gravado);
6x: +amos gra+ar um cookie contendo a data atual:
$datadehoje = date(d-m-Y);
setcookie(datadehoje,$datadehoje);
6ste cookie agora est, gra+ado na m,&uina do usu,rio" e cont%m uma string com a
data atual. Todos os cookies podem ser acessados atra+%s do arraB superglo#al Z_C00\$6`a
da seguinte forma:
$datadehoje = $_COOKIE['datadehoje'];
(ara &ue um cookie se)a exclu:do" #asta utili*ar no+amente a fun!o setcookie13"
por%m sem nenhum +alor como conte4do:
setcookie(datadehoje);
$sso far, com &ue o cookie se)a apagado. 0 uso de cookies pode parecer uma #oa
pr,tica a princ:pio" mas em muitos casos" os usu,rios configuram os na+egadores para n!o
aceitarem cookies" o &ue dificulta a implementa!o dos mesmos.
Sess)es
.ma alternati+a ao uso de cookies % o uso de sess'es. Seu uso % id2ntico ao dos
cookies" por%m" os dados n!o ficam gra+ados no computador do usu,rio. Hual&uer
na+egador aceita sess!o" por isso torna-se uma #oa pr,tica criar autentica!o utili*ando
ses'es. (ara criar uma sess!o" de+emos adicionar em nossos scripts (H( a fun!o
session_start13. Necomenda-se &ue ela este)a nas primeiras linhas do script" antes de
&ual&uer processamento:
<?php
session_start();
?>
(ara registrar uma sess!o" podemos inserir dados diretamente no arraB superglo#al
Z_S6SS$08`a" da seguinte forma:
<?php
session_start();
$_SESSION['login'] = $login;
?>
B0
PHP e MySQL
0 exemplo acima configura a +ari,+el de sess!o login com o +alor contido na +ari,+el
Zlogin. Tam#%m podemos utili*ar a fun!o session_register13 para registrar uma +ari,+el de
sess!o:
<?php
session_start();
session_register(administrador);
?>
@essa forma" registramos uma +ari,+el de sess!o administrador. (ara +erificar se uma
+ari,+el de sess!o est, registrada" podemos utili*ar a fun!o session_is_registered13" &ue
+erifica se a +ari,+el 1passada como parJmetro est, registrada:
<?php
session_start();
if(session_is_registered(administrador) )
echo varivel registrada<br>;
else
echo varivel no est registrada<br>;
?>
0utra forma de +erificarmos se uma +ari,+el de sess!o est, registrada % adicionando
seu conte4do a uma +ari,+el do (H( e ent!o conferindo seu conte4do" atra+%s da fun!o
isset13" &ue +erifica se uma +ari,+el est, registrada:
<?php
session_start();
$login = $_SESSION['administrador'];
if(isset($login))
echo varivel registrada<br>;
else
echo varivel no registrada<br>;
?>
(ara excluir o conte4do de uma +ari,+el de sess!o" utili*amos a fun!o unset13:
<?php
session_start();
unset($_SESSION['login']);
?>
$sso fa* com &ue o +alor da +ari,+el de sess!o login se)a remo+ido. Huando o usu,rio
deixa o site ou decide fa*er logout e continuar na+egando" de+e-se ent!o desregistrar as
+ari,+eis de sess!o do usu,rio e destruir a sess!o iniciada por ele. $sso pode ser feito
utili*ando a fun!o session_destroB13" &ue elimina todas as +ari,+eis de sess!o registradas.
@essa forma" o script para logout ficaria da seguinte forma:
<?php
session_start();
$_SESSION = array();
session_destroy();
?>
8ote &ue inserimos dentro do arraB Z_S6SS$08`a um arraB completamente +a*io.
$sso fa* com &ue todas as +ari,+eis de sess!o fi&uem ;em #ranco=. 6m seguida" a sess!o %
destru:da com a fun!o session_destroB13.
Aamos criar um formul,rio de login para nosso site. (ara isso" +amos utili*ar uma
no+a ta#ela" chamada usuario. 6sta ta#ela conter, um nome para login e uma senha.
Aamos criar a ta#ela no #anco de dados:
B5
PHP e MySQL
mysql -u root -p
use projeto
create table usuario(
login char(30) not null primary key,
senha char(20) not null
);
Agora +amos criar a p,gina de cadastro para os no+os usu,rios:
<html>
<head>
<title>Cadastro de Usurios</title>
</head>
<body>
<form method=POST action=usuario.php>
<p align='center'>Login: <input type=text name=login size=20></p>
<p align='center'>Senha: <input type=text name=senha size=20></p>
<p align='center'><input type=submit value=Cadastrar></p>
</form>
</body></html>
Montado o formul,rio de cadastro" +amos criar o script (H( &ue ir, gra+ar as
informa'es:
<?php
//recebe as variveis do formulrio
$login = $_POST['login'];
$senha = $_POST['senha'];
//conecta-se ao banco de dados
include mysqlconfig.inc;
//monta a query de gravao
$query = insert into usuario values('$login','$senha'); ;
//grava os dados
mysql_query($query);
/*
aqui, coloque um link que direcione o usurio para a pgina principal do site,
ou utilize a funo header para lev-lo diretamente para a pgina principal
vamos considerar que a pgina principal do nosso site seja meusite.php:
*/
//direciona o usurio para a pgina de login
header(Location: login.html);
//fecha a conexo
mysql_close($con);
?>
Sal+e-o como usuario.php. 6le ir, gra+ar as informa'es dos no+os usu,rios na ta#ela
usuario" em nosso #anco de dados. Aamos agora criar a p,gina e o script de login" onde o
usu,rio informar, os dados e" se o usu,rio existir" as +ari,+eis de sess!o ser!o criadas.
Aamos comear com o formul,rio de login:
<html>
<head>
<title>Login</title>
</head>
B9
PHP e MySQL
<body>
<form method=POST action=login.php>
<p align='center'>Login: <input type=text name=login size=20></p>
<p align='center'>Senha: <input type=text name=senha size=20></p>
<p align='center'><input type=submit value=Entrar></p>
</form>
</body></html>
Agora" +amos criar o script login.php &ue ir, efeturar o registro das +ari,+eis de
sess!o" &ue ir!o determinar &ue o usu,rio est, registrado no site:
<?php
//recebe as variveis do formulrio
$login = $_POST['login'];
$senha = $_POST['senha'];
//conecta-se ao banco de dados
include mysqlconfig.inc;
//query queseleciona o usurio correspondente ao login e senha informados
$query = select login,senha from usuario where login='$login' and
senha='$senha'; ;
//executa query
$res = mysql_query($query);
//verifica se query retornou resultados
$num_linha = mysql_num_rows($res);
//se retornou resultado, usurio existe, ento, registra-o
if($num_linha > 0){
session_start();
$_SESSION['usuario'] = $login;
//usurio direcionado para pgina principal
header(Location: meusite.php);
}else{
//caso login seja invlido
echo usurio no existe<br>;
//link redireciona para a pgina login.html
echo <a href='login.html'>Voltar</a>;
}
?>
Caso o usu,rio este)a cadastrado no #anco de dados" seu login % arma*enado numa
+ari,+el de sess!o chamada 9usuario9. Agora" podemos determinar se o usu,rio est, logado
no site apenas +erificando a +ari,+el de sess!o. Aamos criar um script &ue +erifi&ue a
+ari,+el:
<?php
session_start();
if( !session_is_registered(usuario) ){
echo Efetue o login no site:<br>;
ehco <a href='login.html'>Login</a>;
}
?>
Aamos sal+,-lo como +erifica_sessao.php. 6sse script simples +erifica se a +ari,+el de
sess!o ;usuario= est, registrada. Se n!o esti+er" mostra o link para a p,gina de login do site.
@essa forma" se &uisermos proteger p,ginas de nosso site" #asta adicionar uma chamada
B<
PHP e MySQL
ao script no in:cio da p,gina. Se o usu,rio n!o esti+er registrado" n!o poder, +er o conte4do
da p,gina:
<?php
include verifica_sessao.php;
...
?>
(ara &ue a nossa aplica!o torne-se completa" de+emos oferecer um link para &ue o
usu,rio possa efetuar logout no site. Xasta criar um link direcionado para o script
logout.php" mostrado anteriormente.
(ara aumentar a segurana" podemos utili*ar criptografia para a senha. A criptografia
% um recurso &ue transforma a string em um c5digo dif:cil de ser interpretado pelo ser
humano. .ma das fun'es &ue podemos utili*ar para isso % a fun!o crBpt13" do pr5prio
(H(. 6ssa fun!o rece#e como parJmetro" a string &ue ser, criptografada e um con)unto de
dois caracteres para serem utili*ados como #ase para a cria!o da string criptografada. Sua
sintaxe %:
crBpt1caracteres" string_para_criptografar3I
6x: para criptografar a senha informada pelo usu,rio:
Zsenha b Z_(0ST`9senha9aI
Zsenha b crBpt1/h"Zsenha3I
A fun!o crBpt usar, as letras /h como #ase e ir, criptografar a senha. Caso o
usu,rio tenha informado a senha como ;a#acate=" o resultado seria: a#.pS)l&T0(Gc .
@epois de criptografada" o processo n!o pode ser re+ertido. (ara conferir se a senha do
usu,rio est, correta" informada pelo usu,rio no momento do login tam#%m de+e ser
criptografada e ent!o as duas s!o conferidas. A pala+ra a#acate sempre ter, o +alor
a#.pS)l&T0(Gc se as letras /h forem informadas no momento da criptografia.
(ara garantir &ue o processo n!o apresentar, erros" a string &ue ser, criptografada
n!o de+er, conter espaos em #ranco" pois a fun!o n!o os criptografa.
PHP )rientado a )b9etos
0 conceito de orienta!o a o#)etos tem sido adotado por muitos programadores e
linguagens de programa!o em +irtude de sua flexi#ilidade" capacidade de
reapro+eitamento do c5digo e facilidade de manuten!o. 6ste no+o paradigma tem como
princ:pio a representa!o de o#)etos do mundo real em forma de linguagem de
programa!o. Cada componente do programa % tratado como um o#)eto" com suas
caracter:sticas e funcionalidades" dentro de um conceito muito pr5ximo ao mundo real.
Principais co%ponentes
lassesD atributos e mtodos
S!o como ;moldes= utili*ados para a cria!o de o#)etos. .ma classe cont%m um
con)unto de atri#utos 1+ari,+eis3 e m%todos 1fun'es3 determinados pelo programador para
BB
PHP e MySQL
compor um de+ido o#)eto. As classes de+em ser criadas conforme os o#)etos do mundo real
&ue necessitamos representar. 6x: Aamos implementar a classe autom5+el: (ara representar
um p,ssaro em linguagem de programa!o" de+emos primeiramente o#ser+ar seus atri#utos
e m%todos. Alguns atri#utos de um autom5+el s!o: marca" modelo" ano de fa#rica!o"
com#ust:+el" n4mero de marchas" etc.
(erce#a &ue os atri#utos s!o caracter:sticas comuns a todos os autom5+eis. As
classes de+em" preferencialmente possuir caracter:sticas gen%ricas em rela!o ao o#)eto &ue
ser, representado.
A classe autom5+el tam#%m de+e possuir m%todos. M%todos s!o fun'es &ue
permitem &ue uma a!o se)a reali*ada pelo o#)eto. Alguns m%todos de um autom5+el 1o
&ue um autom5+el pode fa*er3: ligar" desligar" acelerar" freiar" trocar de marcha" etc.
Agora &ue temos uma pe&uena descri!o de um autom5+el" podemos implement,-lo
como um o#)eto no (H(. (ara isso" de+emos seguir a sintaxe da programa!o orientada a
o#)etos. Toda classe % determinada pela pala+ra reser+ada class. Seus atri#utos e m%todos
ficam dentro de cha+es.
<?php
class automovel{
//atributos e mtodos
}
?>
(ara representar os atri#utos da classe autom5+el" +amos criar apenas os atri#utos
marca" modelo e ligado" &ue usaremos para di*er se o autom5+el est, ligado ou desligado
<?php
class automovel{
//declarao de atributos (variveis)
var $marca;
var $modelo;
var $ligado;
}
?>
8ote &ue utili*amos uma sintaxe diferente nos nomes de +ari,+eis. 6ssa sintaxe %
muito comum em orienta!o a o#)etos. Huando um nome % formado pela uni!o de duas
pala+ras distintas" o primeiro nome fica inteiramente em letras min4sculas. 0s demais
nomes iniciam-se com letra mai4scula. $sso n!o % uma regra oficial e seu script n!o +ai
deixar de funcionar por isso" mas iremos adotar essa sintaxe para uma melhor assimila!o.
Aamos agora" criar alguns m%todos para a classe autom5+el. A cria!o de m%todos %
id2ntica D cria!o de fun'es. 6x: Aamos criar o m%todo liga13:
<?php
class automovel{
//declarao de atributos
var $marca, $modelo, $ligado;
//criao do mtodo liga()
function liga(){
$this->ligado = true;
}
}
?>
B8
PHP e MySQL
8osso m%todo liga13 apenas altera o estado da +ari,+el ligado para true"
representando um autom5+el ligado. .tili*amos o formato Zthis->atri#uto para informar &ue
estamos modificando uma +ari,+el &ue pertence D pr5pria classe. (odemos criar um m%todo
desliga13" para &ue o autom5+el possa ser desligado:
<?php
class automovel{
//declarao de atributos
var $marca, $modelo, $ligado;
//criao do mtodo liga()
function liga(){
$this->ligado = true;
}
//mtodo desliga
function desliga(){
$this->ligado = false;
}
}
?>
Temos uma classe autom5+el &ue liga e desliga" mas como sa#er se o autom5+el
est, ligadoO Aamos criar um m%todo &ue informa seu estado. Chamaremos esse m%todo de
estado13:
<?php
class automovel{
//declarao de atributos
var $marca, $modelo, $ligado;
//criao do mtodo liga()
function liga(){
$this->ligado = true;
}
//mtodo desliga
function desliga(){
$this->ligado = false;
}

//mtodo que informa o estado do automvel
function estado(){
if($this->ligado == true)
echo Automvel ligado<br>;
else
echo Automvel desligado<br>;
}
}
?>
Agora temos um m%todo &ue informa se o autom5+el est, ligado ou desligado.
Aamos ent!o reali*ar o &ue chamamos de instanciar um o#)eto. Como +imos no in:cio deste
documento" as +ari,+eis em (H( tam#%m podem ser do tipo o#)eto 1o#)ect3. $sso significa
&ue elas podem rece#er" como +alor" toda uma classe" ou se)a" podemos determinar &ue
uma +ari,+el conter, a classe autom5+el. Automaticamente" todos os atri#utos e m%todos
&ue existem na classe autom5+el passam a pertencer D +ari,+el. $niciali*ar uma +ari,+el
como o +alor de uma classe % o &ue chamamos de instancia!o de um o#)eto" pois cada
B9
PHP e MySQL
+ari,+el instanciada % tratada como um m%todo diferenteI como se cada +ari,+el fosse um
autom5+el diferente. Autom5+eis possuem as mesmas caracter:sticas 1descritas dentro da
classe3" mas cada autom5+el % 4nico. (ense na instancia!o como a ;linha de montagem=
de um o#)eto 1neste exemplo" de um autom5+el3:
Aamos instanciar um autom5+el:
<?php
class automovel{
//declarao de atributos
var $marca, $modelo, $ligado;
//criao do mtodo liga()
function liga(){
$this->ligado = true;
}
//mtodo desliga
function desliga(){
$this->ligado = false;
}

//mtodo que informa o estado do automvel
function estado(){
if($this->ligado == true)
echo Automvel ligado<br>;
else
echo Automvel desligado<br>;
}
}
//instanciando o objeto
$carro = new automovel();
//chamando a funo estado
$carro->estado();
?>
8ote &ue" para instanciarmos um o#)eto" utili*amos a pala+ra reser+ada ne/" seguida
do nome da classe. A partir deste momento" a +ari,+el Zcarro torna-se um autom5+el" e
cont%m todas as caracter:sticas definidas na classe. Se &uisermos &ue o o#)eto execute um
determinado m%todo" #asta reali*ar uma chamada D fun!o" atra+%s da sintaxe:
$objeto->mtodo
$sso fa* com &ue o m%todo contido dentro do o#)eto se)a executado. 6m nosso
exemplo" &uer:amos &ue o m%todo estado13 fosse executado" ent!o" fi*emos uma chamada
ao m%todo:
$carro->estado();
Assim" o m%todo estado13 contido no o#)eto Zcarro foi executado.
8ote &ue nenhum outro atri#uto foi iniciali*ado neste o#)eto. Aamos informar os
atri#utos de nosso o#)eto Zcarro:
$carro->marca = VolksWagen;
$carro->modelo = Fusca;
(odemos utili*ar o comando echo para imprimir diretamente o +alor das +ari,+eis:
echo eu tenho um $carro->marca $carro->modelo !!!;
8"
PHP e MySQL
6ssa linha ir, retornar a mensagem: ;eu tenho um AolksWagen 7usca ggg=I
(odemos" facilmente" criar di+ersos autom5+eis" sem &ue se)a necess,rio reescre+er
a classe autom5+el:
<?php
$carro = new automovel();
$esportivo = new automovel();
$jeep = new automovel();
$carroPopular = new automovel();
?>
Temos ent!o Zcarro" Zesporti+o" Z)eep e Zcarro(opular como &uatro o#)etos distintos"
pertencentes D classe autom5+el. Todos eles possuem os mesmos atri#utos e m%todos. Se
&uisermos ligar apenas o )eep...:
<?php
$jeep->liga();
?>
Apenas o o#)eto Z)eep estar, ligado. 0s demais n!o ter!o seu estado alterado. 8ote
&ue o apro+eitamento do c5digo % muito maior. Sua manuten!o tam#%m % facilitada. 6x:
Se &uisermos modificar o m%todo estado" para &ue ele tam#%m informe a marca e o modelo
do autom5+el" #asta modificar o m%todo estado dentro da classe autom5+el e pronto. Todos
os o#)etos estar!o alterados:
<?php
function estado(){
if($this->ligado == true)
echo "auomvel ligado<br>";
else
echo "automvel desligado<br>";
echo $this->marca<br>;
echo this->modelo<br>;
}
?>
Huando reali*amos a chamada ao m%todo estado do o#)eto carro:
$carro->estado();
0 resulado o#tido %:
automvel ligado
VolksWagen
Fusca
Mtodos %onstrutores e destrutores
M%todos construtores s!o utili*ados para iniciali*ar uma classe. o m%todo construtor %
o primeiro m%todo a ser executado dentro de uma classe" durante a instancia!o de um
o#)eto. 0 m%todo construtor n!o % o#rigat5rio" mas pode a)udar muito. M%todos
construtores em (H( possuem a seguinte sintaxe:
<?php
class automovel{
//mtodo constutor recebe $marca e $modelo como parmetros
function __construct($marca,$modelo){
81
PHP e MySQL
//inicializa os atributos
$this->marca = $marca;
$this->modelo = $modelo;
}
}
?>
6x: Se &uisermos determinar marca e modelo de um autom5+el no momento da
instancia!o:
$conversivel = new automovel(Ford,Escort);
0s parJmetros informados no momento da instancia!o s!o passados para o m%todo
construtor" &ue instancia as +ari,+eis. Aamos executar uma chamada ao m%todo estado:
$conversivel->estado();
0 resultado ser,:
automvel desligado
Ford
Escort
0 m%todo __destruct % executado &uando o o#)eto % destru:do. 8!o se pode
determinar a forma como o o#)eto ser, destru:do" ou se)a" remo+ido da mem5ria 1em geral"
acontece no final da execu!o do script3" mas pode-se configurar a'es a serem executadas
durante a destrui!o do o#)eto:
function __destruct{
echo $this->marca $this->modelo destrudo<br>;
}
Acrescentando este m%todo destrutor na classe autom5+el" o resultado ser,:
automvel desligado
Ford
Escort
Ford Escort destrudo
Modificadores de Acesso
S!o pala+ras reser+adas &ue determinam a forma como um atri#uto ou m%todo ser,
acessado pela aplica!o. (odemos di*er &ue eles alteram permiss'es de acesso aos
mesmos. 0s principais s!o:
Modifi%ador publi%
.m m%todo ou atri#uto determinado como pu#lic pode ser acessado por &ual&uer
m%todo da aplica!o. 6x: 0s atri#utos definidos em nossa aplica!o at% o momento s!o
atri#utos p4#licos" pois podemos modific,-los diretamente dentro da aplica!o"
simplesmente determinando um +alor" como uma +ari,+el p4#lica:
$carro->modelo = Santana;
Modifi%ador pri.ate
M o m%todo mais restriti+o. $ndica &ue um atri#uto ou m%todo somente poder, ser
acessado de dentro da classe a &ual pertence" impedindo o acesso externo. Se declararmos
os atri#utos da classe autom5+el como pri+ate" apenas m%todos pertencentes D classe
poder!o alter,-los" o &ue impede &ue atri#ui'es de +alores como a mostrada acima. (ara
8,
PHP e MySQL
&ue um atri#uto pri+ate possa ser alterado" % necess,rio &ue se)a criado um m%todo capa*
de alter,-lo. Aamos declarar os atri#utos da classe autom5+el como pri+ate:
<?php
class automovel{
//atributos declarados como private
private $marca, $modelo, $ligado;
...
}
?>
6m nosso exemplo" o m%todo &ue modifica os atri#utos Zmarca e Zmodelo % o
pr5prio m%todo construtor" en&uanto &ue o m%todo &ue modifica o estado do carro 1ligado
ou desligado3 % o m%todo estado. Nepare &ue n!o h, mais como alterar esses atri#utos sem
&ue uma chamada a um desses m%todos se)a reali*ada.
Modifi%ador prote%ted
6ste modificador % de um ;n:+el intermedi,rio=. Atri#utos ou m%todos declarados
como protected tornam-se p4#licos dentro da classe em &ue foram criados e das classes
&ue herdam a classe em &ue eles foram criados. 7ora de sua classe e suas herdeiras
1+eremos isso em Herana" logo adiante3" atri#utos e m%todos definidos como protected
possuem a mesma restri!o o#tida com o modificador pri+ate.
Heran;a
Herana % uma forma de reutili*ar uma classe. Classes podem herdar caracter:sticas
de outras classes" passando a possuir todas as suas caracter:sticas 1atri#utos e m%todos3.
.ma classe herda caracter:sticas de outra classe com o uso da pala+ra reser+ada extends.
6x: Aamos criar a classe carro@eCorrida" &ue ir, herdar as caracter:sticas da classe
autom5+el:
class carroDeCorrida extends automovel{
...
}
(ronto" agora temos uma no+a classe carro@eCorrida" com os atri#utos Zmarca"
Zmodelo e Zligado e os m%todos ligar13" desligar13 e estado13" sem &ue fosse necess,rio
reescre+er toda a classe. Hual&uer modifica!o na classe automo+el modifica tam#%m a
calsse carro@eCorrida. @i*emos ent!o &ue a classe automo+el % a ;classe pai= e a classe
carro@eCorrida % a ;classe filha=" pois herda as caracter:sticas da classe pai. (odemos agora
criar no+os atri#utos e m%todos para a classe carro@eCorrida. Aamos criar o atri#uto pneu e
o m%todo troca(neu para a classe carro@eCorrida:
class carroDeCorrida{
private $pneu;
function trocaPneu($tipoPneu){
$this->pneu = $tipoPneu;
}
}
80
PHP e MySQL
0 m%todo troca(neu rece#e como parJmetro o tipo de pneu &ue o carro de corrida ir,
rece#er na troca e altera o atri#uto Zpneu para o tipo especificado.
Sobres%re.er mtodos
.ma t%cnica muito utili*ada na programa!o orientada a o#)etos. (ermite &ue
alteremos todo um m%todo da classe pai" reescre+endo-o. 6x: 8a classe pai" o m%todo
estado13 mostra apenas as caracter:sticas #,sicas do carro. Aamos alterar a classe
carro@eCorrida para &ue tam#%m mostre o tipo do pneu:
<?php
class carroDeCorrida extends automovel{
//novo atributo pneu
private $pneu;
//mtodo trocaPneu, definida anteriormente
function trocaPneu($tipoPneu){
$this->pneu = $tipoPneu;
}
//mtodo estado sendo sobreescrita
function estado(){
//chamada ao mtodo estado da classe pai
parent::estado();
//nova linha do mtodo estado
echo "Pneus $this->pneu<br>";
}
}
?>
8ote &ue dentro do no+o m%todo estado13 h, uma chamada ao m%todo estado da
classe autom5+el 1 parent::estado13 3. 6ssa chamada % necess,ria para &ue o (H(
identifi&ue o m%todo &ue est, sendo so#rescrito.
Huando utili*amos herana em (H(" de+emos nos lem#rar sempre de &ue o (H(
ainda possui limita'es" se comparado a outras linguagens orientadas a o#)eto. 6x: As
classes &ue possuem herana de+em ser definidas dentro do mesmo ar&ui+o da classe pai"
ou se)a" em nosso exemplo" a classe carro@eCorrida de+e estar no mesmo ar&ui+o da classe
automo+el" pois o (H( n!o pode definir &ual % a classe pai e &ual a classe filha. (or%m" isso
pode ser resol+ido com o uso da fun!o re&uire ou include.
0utra limita!o encontrada na linguagem % &ue o (H( n!o suporta herana m4ltipla"
ou se)a" uma classe filha pode ter apenas uma classe pai" diferente de outras linguagens
como )a+a" &ue suporta essa caracter:stica.
Aamos instanciar um carro de corrida:
$formula = new carroDeCorrida("Puma","GTB");
$formula->trocaPneu("Slick");
$formula->estado();
0 resultado do trecho acima ser,:
automvel desligado
Puma
GTB
Pneus Slick
Puma GTB destrudo
85
PHP e MySQL
8!oss&rio de fun03es do PHP
Algumas das principais fun'es disponi#ili*adas pelo (H(:
:atas
=ateBC
Netorna uma data no formato especificado
String date1string formato"int`datahoraa 3I
Argumento @escri!o
@ata @ata?hora a ser formatada. Se n!o for
especificada utili*ar, a data?hora corrente
formato String com caracteres de formata!o de datas
Caractere Significado
a ;am= ou ;pm=
A ;AM= ou ;(M=
d @ia em formato num%rico. @e ;UF= a ;QF=.
@ @ia da semana" textual" Q letras. 6x.: ;7ri=
7 M2s" textual" formato longo. 6x.: =CanuarB=.
h Hora no formato de FL horas. @e ;UF= a ;FL=.
H Hora no formato de LS horas. @e ;UU= a ;LQ=.
g Hora no formato de FL horas" sem os *eros D es&uerda. @e ;F= a ;FL=.
K Hora no formato de LS horas" sem os *eros D es&uerda. @e ;U= a ;LQ=.
i Minutos. @e ;UU= a ;ER=.
) @ia do m2s sem os *eros D es&uerda. @e ;F= a ;QF=.
l @ia da semana" textual" longo. 6x.: ;7ridaB=.
L Xooleano &ue indica se o ano % #issexto.=U= ou ;F=.
m M2s. @e ;UF= a ;FL=.
n M2s sem *eros D es&uerda. @e ;F= a ;FL=.
M M2s" textual" Q letras. 6x.: ;Can=.
s Segundos. @e ;UU= a ;ER=.
S Sufixo ordinal em ingl2s" textual" L caracteres. 6x.: ;th;"=nd=.
t 84mero de dias do m2s determinado. 6x.:=Lj= a ;QF=.
89
PHP e MySQL
. 84mero de segundos desde o ;epoch=.
/ @ia da semana" num%rico. @e ;U=1domingo3 a ;G= 1s,#ado3 .
] Ano com S d:gitos. 6x.: ;LUUL=.
B Ano com L d:gitos. 6x.: ;UL=.
* @ia do ano. @e ;U= a ;QGE=.
h 7uso hor,rio em segundos. @e ;-SQLUU= a ;SQLUU=.
Getdate
Netorna um arraB associati+o contendo todas as informa'es de uma data?hora espec:fica.
ArraB getdate1int data?hora3I
kndices da matri* retornada.
;seconds= Segundos
;minutes= Minutos
;hours= Horas
;mdaB= @ia do m2s
;/daB= @ia da semana no formato decimal
;mon= M2s no formato decimal
;Bear= Ano no formato decimal
;BdaB= @ia do ano no formato decimal
;/eekdaB= @ia da semana no formato decimal
;month= M2s no formato texto
Gmm&timeBC
Netorna a data?hora KMT no formato .8$Y. M id2ntica D fun!o mktime13" exceto &ue a
data passada no parJmetro representa uma data KMT.
$nt gmmktime1int hora" int minuto" int segundo" int m2s" int dia" int ano" int `dsfa3I
GmstrftimeBC
Netorna uma data?hora KMT?C.T no formato especificado. M semelhante D fun!o
strftime13" exceto &ue a hora retornada % a hora de Kreen/ich.
String gmstrftime1string formato" int datahora3I
Mi%rotimeBC
Netorna uma string contendo a data?hora atual no formato ;msec sec= do .8$Y" &ue
8<
PHP e MySQL
significa o n4mero de milisegundos e depois os segundos desde o .8$Y 6poch1UF?UF?FRTU
UU:UU:UU KMT3.
String microtime1+oid3I
M&timeBC
Netorna uma data?hora no formato .8$Y
$nt mktime1int hora" int minuto" int segundo" int m2s" ine dia" int ano" int `dsfa3I
StrftimeBC
Netorna uma data no formato especificado. 0s nomes por extenso dos mesese dos dias da
semana dependem da configura!o feita com a fun!o setlocale13.
String strftime1string formato" int datahora3I
Argumento @escri!o
@ata @ata?hora a ser formatada. Se n!o especificada" utili*ar, a data?hora corrente
Caractere Significado
Va @ia da semana a#re+iado
VA @ia da semana completo
V# 8ome a#re+iado do m2s
VX 8ome completo do m2s
Vc Nepresenta!o preferida de data e hora
Vd @ia do m2s no formato decimal 1UU-QF3
VH Hora no formato decimal de LS horas 1UU-LQ3
Vl Hora no formato decimal de FL horas 1UU-FL3
V) @ia do ano no formato decimal 1UUF-QGG3
Vm M2s em formato decimal 1F-FL3
VM Minutos no formato decimal
Vp lamm ou lpmm" dependendo da hora especificada
VS Segundos no formato decimal
V. 84mero da semana do ano atual no formato decimal" comeando no primeiro
domingo como o primeiro dia da primeira semana
VW 84mero da semana do ano atual no formato decimal" comeando na primeira
segunda-feira como o primeiro dia da primeira semana
V/ @ia da semana no formato decimal" sendo o domingo igual a U.
8B
PHP e MySQL
Vx Nepresenta!o preferida da data" sem a hora
VY Nepresenta!o preferida da hora" sem a data
VB Ano no formato decimal" sem o s%culo 1UU-RR3
V] Ano no formato decimal" com o s%culo.
Vh hona de fuso hor,rio" ou nome" ou a#re+ia!o.
VV .ma caractere literal ;V=.
TimeBC
Netorna a data?hora no formato .8$Y" &ue corresponde ao n4mero de segundos desde o
.nix 6poch1UF[UF[FRTU UU:UU:UU KMT3
$nt time1+oid3I
:iret4rios
"dirBC
Altera o diret5rio correspondente do (H( para o diret5rio especificado. Netorna true se
ti+er sucessoI caso contr,rio retorna false
$nt chdir1string diret5rio3I
losedirBC
6ncerra a associa!o de um identificador1handle3 com um diret5rio.
Aoid closedir1int handle_dir3 I
OpendirBC
Netorna um handle de diret5rio para ser usado nas fun'es closedir13" readdir13 e
*eaddirBC
Netorna o pr5ximo nome de ar&ui+o do diret5rio" na ordem em &ue esti+erem arma*enadas
String readdir1int handle_dir3I
E'ecu0o de Progra%as
Es%apes"ell%mdBC
Netira &uais&uer caracteres de um string &ue poderiam ser utili*ados para enganar um
comando Shell para executar comandos ar#itr,rios. 6sta fun!o normalmente % usada para
88
PHP e MySQL
+erificar os dados fornecidos pelo usu,rio antes de serem passados para as fun'es exec13
ou sBstem13.
String escapeshellcmd1string comando3I
E!e%BC
6xecuta um comando externo e mostra a 4ltima linha do resultado do comando.
String exec1string comando" string `arraBa" int `+ari,+el_refa3 I
Argumento @escri!o
Comando Comando externo a ser executado
ArraB ArraB contendo as linhas do resultado
Aari,+el_ref Aari,+el &ue conter, o c5digo de retorno do comando executado
Passt"ruBC
6xecuta um comando externo e mostra todos os resultados.
String passthru1string comando" int `+ari,+el_refa3I
Argumento @escri!o
Comando Comando externo a ser executado
Aari,+el_ref Aari,+el &ue conter, o c5digo de retorno do comando executado
S1stemBC
6xecuta um comando externo e mostra os resultados.
String sBstem1string comando" int `+ari,+el_refa3I
Argumento @escri!o
Comando Comando externo a ser executado
Aari,+el_ref Aari,+el &ue conter, o c5digo de retorno do comando executado
Siste%a de ar*uivos do servidor
'asenameBC
Netorna o nome do ar&ui+o em um path. 8o Windo/s" am#os os caracteres" ? e [" s!o
usados como separadores de diret5rios. 6m outros am#ientes % utili*ado somente o
caractere ?.
String #asename1string path3I
89
PHP e MySQL
"2rpBC
Muda o grupo ao &ual um ar&ui+o pertence em am#ientes .8$Y. 6m am#ientes Windo/s
n!o fa* nada" retornando sempre true.
chgrp1string nome_do_ar&ui+o" mixed grupo3 I
"modBC
Altera as permiss'es de um ar&ui+o em am#ientes .8$Y. Netorna true em caso de sucessoI
caso contr,rio" retorna false. 6m am#ientes Windo/s esta fun!o n!o fa* nada" sempre
retornando true
$nt chmod1string nome_do_ar&ui+o" int modo3 I
"o-nBC
Altera o propriet,rio de um ar&ui+o em am#ientes .8$Y. Somente o root pode alterar o
propriet,rio de um ar&ui+o. Netorna true em caso de sucessoI caso contr,rio" retorna false.
8o Windo/s esta fun!o na fa* nada sempre retornando true.
$nt cho/n1string nome_ar&ui+o" mixed propriet,rio3I
op1BC
Copia um ar&ui+o. Netorna true se ti+er sucessoI caso contr,rio" retorna false.
$nt copB1string nome_ar&ui+o" string ar&ui+o_destino3I
=eleteBC
Apaga um ar&ui+o do ser+idor
Aoid delete1string nome_ar&ui+o3 I
=irnameBC
Netorna o nome de um diret5rio em um path. Ae)a a fun!o #asename13.
String dirname1string path3I
F%loseBC
7echa um ar&ui+o. Netorna true se ti+er sucessoI caso contr,rio" retorna false.
$nt fclose1int fp3I
FeofBC
Netorna true caso o ponteiro de ar&ui+o este)a no fim do ar&ui+o ou ocorra um erroI caso
9"
PHP e MySQL
contr,rio" retorna false.
$nt feof1fp3I
FileBC
L2 um ar&ui+o inteiro e coloca seu conte4do em um arraB. Cada elemento do arraB
corresponder, a cada linha do ar&ui+o lido" sem tirar &ual&uer informa!o.
ArraB file1string nome_ar&ui+o3I
FileNe!istsBC
Netorna true se um determinado ar&ui+o existeI caso contr,rio" retorna false. 0s resultados
desta fun!o s!o arma*enados e reutili*ados. (ara atuali*ar esta informa!o utili*e a fun!o
clearstatcache13.
$nt file_exists1string nome_ar&ui+o3I
FilesiJeBC
Netorna o tamanho de um ar&ui+o" ou false em caso de erro. 0s resultados desta fun!o
s!o
arma*enadas e reutili*adas. (ara utili*ar esta informa!o utili*e a fun!o clearstatcache13.
$nt filesi*e1string nome_ar&ui+o3I
Filet1peBC
Netorna o tipo de um ar&ui+o. 0s +alores poss:+eis s!o fifo" char" dir" #lock" link" file e
unkno/n. Netorna false em caso de erro. 0s resultados desta fun!o s!o arma*enadas e
reutili*adas. (ara utili*ar esta informa!o utili*e a fun!o clearstatcache13.
String filetBpe1string nome_ar&ui+o3I
FopenBC
A#re um ar&ui+o ou uma .NL. A fun!o retornar, false se ocorrer erro.
$nt fopen1string nome_ar&ui+o" string modo3I
Argumento @escri!o
8ome_ar&ui+o 8ome do ar&ui+o. A a!o a ser tomada depender, de como o nome %
iniciado. Ae)a a #aixo as op'es.
;http:??= A#re um conex!o HTT( F.U com o ser+idor especificado e um ponteiro de
ar&ui+o % retornado ao in:cio do texto da resposta
;ftp:??= A#re um conex!o 7T( com o ser+idor especificado e um ponteiro de
91
PHP e MySQL
ar&ui+o % retornado. 0 ser+idor de+e suportar o modo passi+o de 7T(. M
poss:+el a#rir os ar&ui+os para leitura ou para escrita" mas n!o am#os ao
mesmo tempo
outro Se o nome comear com &ual&uer outra coisa" o ar&ui+o ser, a#erto no
sistema de ar&ui+os e um ponteiro de ar&ui+o ser, retornado.
Modo Modo de a#ertura. Adicionalmente pode-se colocar a letra ;#= no
parJmetro modo" informando &ue a ser processado % um ar&ui+o #in,rio
;r= Somente leitura" a partir do inicio do ar&ui+o.
;rc= Leitura e escrita" a partir do inicio do ar&ui+o.
;/= Somente escrita. A partir do inicio do ar&ui+o e apagando todo o conte4do
do ar&ui+o. Se o ar&ui+o n!o existir" a fun!o tentar, cri,-lo.
;/c= (ara leitura e escrita. A partir do inicio do ar&ui+o e apagando todo o
conte4do do ar&ui+o. Se o ar&ui+o n!o existir" a fun!o tentar, cri,-lo.
;a= Somente escrita. A partir do inicio do ar&ui+o. Se o ar&ui+o n!o existir" a
fun!o tentar, cri,-lo.
;ac= (ara leitura e escrita. A partir do inicio do ar&ui+o. Se o ar&ui+o n!o
existir" a fun!o tentar, cri,-lo.
FputsBC
6scre+e o conte4do de uma string em um ar&ui+o
$nt fputs1int fp" string str" int `tamanhoa3I
FreadBC
L2 #Btes de um ar&ui+o
String fread1int fp" int `tamanhoa3I
F-riteBC
6scre+e um n4mero especifico de #Btes de uma string em um ar&ui+o
$nt f/rite1int fp" string str" int `num#Btesa3I
*eadfileBC
L2 um ar&ui+o e o en+ia para a sa:da padr!o do sistemaI retorna o n4mero de #Btes lidos
$nt readfile1string nome_ar&ui+o3I
9,
PHP e MySQL
*enameBC
Altera o nome de um ar&ui+o. Netorna true se ti+er sucessoI caso contr,rio false
$nt rename1string nome_anterior" string nome_no+o3I
Mate%&tica
+bsBC
Netorna o +alor a#soluto de um n4mero.
Mixed a#s1mixed n4mero3I
'aseN%on.ertBC
Netorna uma string com um n4mero con+ertido para outra #ase num%rica.
String #ase_con+ert1string n4mero" int #ase_ant" int no+a_#ase3I
Ma!BC
Netorna o maior dentre os especificados
Mixed max1mixed argF" mixed argL" mixed argn3I
MinBC
Netorna o menor dentre os especificados
Mixed min1mixed argF" mixed argL" mixed argn3I
MtNrandBC
Kera um n4mero aleat5rio mais confi,+el no inter+alo especificado
$nt mt_rand1int `limite_infa" int `limite_supa3I
PiBC
Netorna o +alor da constante pi
@ou#le pi1+oid3I
Po-BC
Netorna o resultado de uma #ase ele+ada a um expoente
7loat po/1float #ase" float expoente3I
*andBC
Netorna um n4mero aleat5rio dentro de um inter+alo especificado
90
PHP e MySQL
$nt rand1int `limit_infa" int `limi_supa3I
*oundBC
Netorna o +alor de um n4mero arredondado para o n4mero inteiro mais pr5ximo. Se o
n4mero esti+er exatamente entre dois n4meros inteiros" o resultado ser, sempre o n4mero
inteiro par
@ou#le rand1dou#le n4mero3I
SinBC
Netorna o seno de um Jngulo em radianos
7loat sin1float arg3I
SHrtBC
Netorna a rai* &uadrada
7loat s&rt1float arg 3I
TanBC
Netorna a tangente de um Jngulo em radianos
7loat tan1float arg3I
$un03es diversas
E.alBC
(rocessa uma string como c5digo (H(
Aoid e+al1string string_c5digo3I
=ieBC
$mprime uma mensagem e termina o script (H(
Aoid die1string mensagem3I
E!itBC
Termina o script (H( atual
Aoid exit1+oid3I
MailBC
6n+ia um email para um ou mais destinat,rios
95
PHP e MySQL
Xool mail1string dest" string assunto" string mensagem" string `headers_adica3I
Argumento @escri!o
@est 6ndereo de email dos
destinat,rios1separados por ;"=3
Assunto Assunto do email
Mensagem Conte4do do email
Headers_adic 6specifica headers adicionais &ue de+em ser
inseridas no fim do header padr!o. M4ltiplos
headers podem ser especificados e de+em ser
separados por ne/line1;[n=3
6xemplo:
Zdestino b ;8ome@estino <endereo@dominio.com.#r>=I
Zremetente b ;8omeNemetente <remetente@dominio.com.#r>=I
Zassunto b ;assunto do email=I
mail1Zdestino"=Zassunto=" Zmensagem" ;7rom: Zremetente [n= 3I
Pa%&BC
compacta dados em uma string #in,ria
string pack1string formato" mixed `argsa...3 I
SleepBC
Atrasa a execu!o por um tempo determinado 1em segundos3
Aoid sleep1int num_segundos3I
Trata%ento de sess3es
SessionNde%odeBC
@ecodifica os dados de uma sess!o em uma string
Xool session_decode1string dados3I
SessionNdestro1BC
@estr5i os dados registrados associados D sess!o atual
Xool session_destroB1+oid3I
99
PHP e MySQL
SessionNen%odeBC
Codifica os dados de uma sess!o
Xool session_encode1+oid3 I
SessionNstartBC
$niciali*a os dados de uma sess!o
Xool session_start1+oid3I
SessionNisNre2isteredBC
@esco#re se uma +ari,+el foi registrada na sess!o
Xool session_is_registered1string nome3I
SessionNmoduleNnameBC
Netorna ou muda o nome do m5dulo da sess!o atual
String session_module_name1string `m5duloa3I
SessionNnameBC
Netorna ou muda o nome da sess!o atual
String session_name1string `nomea3I
SessionNre2isterBC
Negistra uma +ari,+el com a sess!o atual
Xool session_register1string nome3I
SessionNunre2isterBC
@escarta uma +ari,+el da sess!o atual
Xool session_unregister1string nome3I
Strings
+ddslas"esBC
Coloca #arras in+ertidas antes dos caracteres especiais: apostrofo1l3" aspas1;3" #arra
in+ertida 1[3 e 8.L
String addslashes1string str3I
9<
PHP e MySQL
"opBC
Nemo+e espaos em #ranco em se&i2ncia
String chop1string str3I
r1ptBC
Netorna uma string criptografada atra+%s do modo @6S.
String crBpt1string str" string `salfa3I
E%"oBC
$mprime uma ou mais strings
6cho 1string argF" string argn....3I
E!plodeBC
Netorna um arraB contendo as partes da string com +alores separados por um separador
ArraB explode1string separador" string str3 I
HtmlentitiesBC
Con+erte todos os caracteres aplic,+eis em tags HTML
String htmlentities1string str3I
Htmlspe%ial%"arsBC
Con+erte caracteres especiais em tags HTML
String htmlspecialchars1string str3I
Caracter @escri!o
lPm lPampIm
l=m lP&uotIm
l<m lPltIm
l>m lPgtIm
OmplodeBC
Netorna uma string contendo a representa!o string de todos os elementos de um arraB
separados pelo argumento glue
String implode1string glue" arraB fatias3I
9B
PHP e MySQL
$trimBC
Netorna uma string sem os espaos iniciais
String ltrim1string str3I
MdPBC
Netorna o hash M@E de uma string
String mdE1string str3I
ParseNstrBC
Con+erte uma string de parJmetros no formato das .NLs +indas de formul,rios HTML em
+ari,+eis
Aoid parse_str1string str3I
6xemplo:
Zstr b ;formbfirmPoperationbinsertPindexbU=I
parse_str1Zstr3I
echo ZformI ??imprime ;firm=
echo ZoperationI ??imprime ;insert=
echo ZindexI ??imprime ;U=
Str%mpBC
Compara duas strings" retornando um +alor: < U se strF for menor &ue strLI > U se strF for
maior &ue strL" e U se elas forem iguais
$nt strcmp1string strF" string strL3I
StripNta2sBC
Netorna uma string sem as tags HTML e (H(
String strp_tags1string str3I
Stripslas"esBC
Apaga as #arras in+ertidas de caracteres espec:ficos
String stripslashes1string str3I
StrlenBC
Netorna o comprimento de uma string
$nt strlen1string str3I
98
PHP e MySQL
Strre.BC
$n+erte uma string
String strre+1string str3I
Strtolo-erBC
Transforma as letras em uma string para min4scula.
String strtolo/er1string str3 I
StrtoupperBC
Transforma as letras em uma string para mai4scula.
String strtoupper1string str3 I
StrNrepla%eBC
Su#stitui todas as ocorr2ncias de uma su#string por outra
String str_replace1string str_ant" string no+o_str" string str3 I
Argumento @escri!o
Str_ant Su#string a ser su#stitu:da
8o+o_str Su#string &ue su#stituir, a anterior
Str String original
TrimBC
Apaga os espaos em #ranco do inicio e fim de uma string.
String trim1string str3I
Q%firstBC
Transforma o primeiro caractere de uma string em mai4sculo
String ucfirst1string str3 I
Q%-ordsBC
Transforma o primeiro caractere de cada pala+ra de uma string em mai4sculo
String uc/ords1string str3I
99
PHP e MySQL
2ari&veis
=ouble.alBC
Netorna o +alor em ponto flutuante de uma +ari,+el
@ou#le dou#le+al1mixed +ar3 I
Empt1BC
Netorna false se +ar esti+er atri#u:daI caso contr,rio retorna true
$nt emptB1mixed +ar3 I
Gett1peBC
Netorna o tipo de uma +ari,+el
String gettBpe1mixed +ar3I
Ont.alBC
Netorna o +alor em inteiros de uma +ari,+el" utili*ando uma #ase especificada. 0 padr!o da
#ase % FU
$nt int+al1mixed +ar" int `#asea3
OsNarra1BC
Netorna true se a +ari,+el for do tipo arraB
$nt is_arraB1mixed +ar3I
OsNdoubleBC
Netorna true se a +ari,+el for do tipo dou#le
$nt is_dou#le1mixed +ar3I
OsNfloatBC
Netorna true se a +ari,+el for do tipo float
$nt is_float1mixed +ar3I
OsNintBC
Netorna true se a +ari,+el for do tipo inteiro
$nt is_int1mixed +ar3I
1""
PHP e MySQL
OsNobRe%tBC
Netorna true se a +ari,+el for um o#)eto
$nt is_o#)ect1mixed +ar3I
OsNrealBC
Netorna true se a +ari,+el for do tipo real
$nt is_real1mixed +ar3I
OsNstrin2BC
Netorna true se a +ari,+el for do tipo string
$nt is_string1mixed +ar3I
OssetBC
Netorna true se uma +ari,+el existir
$nt isset1mixed +ar3I
Sett1peBC
Altera o tipo de uma +ari,+el. Netorna true se ti+er sucessoI caso contr,rio" retorna false
$nt settBpe1string +ar" string tipo3I
Tipos permitidos
$nteger
@ou#le
String
ArraB
0#)eto
Str.alBC
Netorna o +alor em string de uma +ari,+el
String str+al1mixed +ar3I
.nset
6xclui uma +ari,+el
$nt unset1mixed +ar3I
1"1
PHP e MySQL
Refer@ncias 5ib!iogr&ficas
(H( para &uem conhece (H( Necursos a+anados para a cria!o de /e#sites
dinJmicos. Autor: Culiano 8iederauer 6ditora: 8o+atec Ltda
///.no+ateceditora.com.#r
Apostila de (H(. Autor: Xruno Nodrigues Si&ueira #runo@netflB.com.#r
(rograma!o para We# utili*ando (H(. Autores: Alexandre ArroBo e 7a#io Santos.
@i+is!o de ser+ios D comunidade. Centro de Computa!o .nicamp.
(rogramando para We# com (H(?MBSHL. Autor: 7red Cox Cunior
Curso de (H( e MBSHL. Autores: 7l,+io S. Kon*aga 1#im@inf.ufsc.#r3 e Kuilherme
Xirckan 1#irckan@inf.ufsc.#r3
(H( e MBSHL @esen+ol+imento We#. Autores: Luke Welling e Laura Thomson.
Segunda edi!o - LUUQ. 6ditora: Campus
1",

Você também pode gostar