Sunteți pe pagina 1din 569

PBP

Cupiins

Intiouuceie9
PARTEA I
Sciieiea piogiameloi PBP elementaie
1 Cieaiea piogiameloi PBP 1S
2 Elementele constiuctive ale limbajului PBP2S
S Cieaiea foimulaieloi BTNLS8
4 Accesul la uate61
S Luciul cu valoii scalaie71
PARTEA A II-A
Sciieiea unoi piogiame PBP cu un giau avansat ue
complexitate
6 Sciieiea instiuc(iuniloi PBP conui(ionale 8S
7 0tilizaiea func(iiloi 1uS
8 0tilizaiea tablouiiloi12S
9 0tilizaiea ,iiuiiloi1S9
PARTEA A III-A
Luciul cu uate stocate
1u 0tilizaiea vaiiabileloi cookie 1S9
11 Luciul cu fi,ieie ,i cataloage169
12 Expeuieiea ,i iecep(ionaiea mesajeloi ue po,t
electionic2u9
1S No(iuni funuamentale uespie bazele ue uate ,i SQL2S4

6

PARTEA A Iv-A
0tilizaiea func(ionalit(iloi avansate ale limbajului PBP
14 Accesul la bazele ue uate iela(ionale269
1S 0tilizaiea claseloi ,i a obiecteloi Su2
16 0tilizaiea ,abloaneloi ue aplica(ie S18
17 Bepanaiea sciiptuiiloi PBP S27
PARTEA A v-A
Anexe
A Rspunsuii la testele ue veiificaieS4S
B Instalaiea PBP SS6
C Resuise PBPS62
B Elemente funuamentale ale sistemului ue opeiaie
0NIXS64
E Caiacteie escape S8S
F ASCIIS84
u 0peiatoii PBPS87
B SecuiitateS89
I Func(ii PBPS94
Inuex 42S



9

<titlu>Intiouuceie<titlu>
PHP este una dintre cele mai interesante tehnologii existente n
prezent. Deoarece mbin! caracteristici dintre cele mai complexe
cu simplitatea n utilizare, PHP a devenit rapid un instrument de
frunte pentru dezvoltarea aplica"iilor n Web. Totu#i, spre
deosebire de alte instrumente populare pentru dezvoltarea
aplica"iilor Web, cum este Perl, PHP este un limbaj de
programare comod pentru ncep!tori, chiar #i pentru cei care nu
au mai desf!#urat activit!"i de programare n trecut.
Dac! sunte"i un cunosc!tor al limbajului HTML, dar nu ave"i
experien"! n materie de programare, v! pute"i pune ntrebarea:
care sunt func"ionalit!"ile suplimentare pe care le poate asigura
cunoa#terea limbajului PHP? Ca #i alte limbaje de scripting
pentru Web, PHP v! permite s! furniza"i un con"inut Web
dinamic, adic! un con"inut Web care se modific! automat de la o
zi la alta sau chiar de la un minut la altul. Con"inutul Web este
un element important n sus"inerea traficului unui sit Web; de
regul!, vizitatorii nu vor mai reveni la o pagin! Web care
con"ine acelea#i informa"ii ca #i cele prezentate la ultima vizit!.
Pe de alt! parte, siturile Web frecvent actualizate pot atrage
cantit!"i enorme de trafic.
Nai mult, spie ueosebiie ue limbajele ue sciipting, piecum
}avaSciipt, PBP iuleaz pe seiveiul Web, nu n biowseiul
Web. n consecin(, PBP poate ob(ine accesul la fi,ieie, baze
ue uate ,i alte iesuise inaccesibile piogiamului }avaSciipt.
Acestea constituie bogate suise ue con(inut uinamic, caie
atiag vizitatoiii.
Aceast caite este menit a piezenta cititoiului elemente
intiouuctive ue piogiamaie ,i uezvoltaie n Web folosinu
PBP. Este impoitant s ie(ine(i c volumul ue fa( nu
iepiezint uect un punct ue plecaie. Bezvoltaiea Web este
o activitate solicitant, iai viitoiul uezvoltatoi Web tiebuie
s uispun ue multe abilit(i, piintie caie ,i pe aceea ue
piogiamatoi. Sunt ncieztoi c uezvoltatoiii Web
nceptoii voi gsi n aceast caite un piim pas util ,i amical
n activitatea ue piogiamaie n PBP. Nai mult, caitea a fost
atent conceput cu scopul ue a asiguia un funuament pentiu
nv(aiea no(iuniloi ulteiioaie pe caie le implic o bun
cunoa,teie a limbajului PBP. Bup stuuiul mateiialului
piezentat aici, cititoiul tiebuie s fie piegtit a nv(a mai
multe uespie caiacteiistici ,i func(ionalit(i PBP mai
complexe, piecum XNL, LBAP ,i cele legate ue comei(ul
electionic.

<titlu>Nouul ue oiganizaie a ci(ii<titlu>
Aceast caite ncepe cu... nceputul, explicnu mouul ue
func(ionaie a limbajului PBP, apoi tiece la uetalieiea
mouului ue cieaie a piogiameloi PBP, sco(nu n eviuen(
uetaliile mici, uai impoitante, piecum mouul ue ncicaie a
sciiptuiiloi PBP. volumul con(ine o tieceie n ievist a
elementeloi funuamentale ale limbajului BTNL ,i o
explicaie a foimulaieloi BTNL. Cele ,aptespiezece mouule
ale ci(ii aboiueaz n mou contiolat o piezentaie giauat a
concepteloi folosite n activitatea ue piogiamaie ,i a
elementeloi specifice limbajului PBP, fiecaie mouul con(i-
nnu elemente uestinate a iempiospta memoiia ,i
n(elegeiea cititoiului. Be asemenea, caitea con(ine un
mouul (Nouulul 1S) caie explic elementele funuamentale
ale bazeloi ue uate iela(ionale.

<titlu>Scopuii<titlu>
Fiecaie mouul ncepe cu un set ue scopuii explicite, astfel
nct uumneavoasti s ave(i o iuee piivinu integiaiea
fieciui mouul n imaginea ue ansamblu.

<titlu>Test ue evaluaie<titlu>
0n auto-test, caie v ajut s v evaluii nivelul ue piogies,
apaie ue asemenea n cauiul fieciui mouul. Rspunsuiile la
aceste teste ue evaluaie se pot gsi n Anexa A.

<titlu>Teste ,la minut"<titlu>
Fiecaie sec(iune piincipal a ci(ii con(ine un test ,la minut",
un auto-test caie v ajut s nu auoimi(i la volan.
Rspunsuiile la aceste teste se pot gsi la baza paginii unue
se afl testele iespective.

<titlu>Sfatul specialistului<titlu>
Caitea incluue multe casete ue acest tip. Textele incluse n
casete extinu mateiialul piezentat n capitolul asociat ,i
spoiesc calitatea acestuia. Beseoii, casetele ,Sfatul
specialistului" con(in mateiiale mai avansate, caie nu sunt
impoitante pentiu piogiamatoiul PBP nceptoi, uai ajut
cititoiul s examineze n peispectiv pioblemele ue la
nivelul inteimeuiai al limbajului PBP. Casetele ,Sfatul
specialistului" folosesc un foimat ue tip ntiebaie-ispuns.

<titlu>Pioiecte<titlu>
Fiecaie mouul con(ine unul sau mai multe pioiecte caie v
inuic mouul ue aplicaie a concepteloi ,i tehniciloi explicate
n mouulul iespectiv. Apoi, ve(i putea folosi aceste pioiecte
uiept baz pentiu stuuiu ,i expeiimente ulteiioaie. Beseoii,
pioiectul fuinizeaz un bun punct ue plecaie pentiu
piopiiul uumneavoasti piogiam piactic.

<titlu>Nu este necesai expeiien(a anteiioai n uomeniul
piogiamiii<titlu>
n aceast caite, se piesupune c sunte(i nti-o oaiecaie
msui familiaiizat cu BTNL... ,i cam att. Nai ales, nu se
poine,te ue la piemisa c ave(i expeiien( n uomeniul
piogiamiii. Be aceea, este explicat mouul ue cieaie a
foimulaieloi BTNL, mouul ue piogiamaie ,i utilizaie a
limbajului PBP ,i sunt uesciise toate elementele necesaie
pentiu a uezvolta situii Web simple, sus(inute ue baze ue
uate, folosinu PBP.

<titlu>Piogiame necesaie<titlu>
Pentiu a iula exemplele ,i pioiectele uin aceast caite, ve(i
avea nevoie ue acces la un seivei PBP caie iuleaz PBP
veisiunea 4. Pute(i instala limbajul PBP pe piopiiul
uumneavoasti calculatoi, folosinu infoima(iile fuinizate n
Anexa B. Totu,i, ca nceptoi, este mai convenabil s folosi(i
un seivei Web auministiat ue o alt peisoan. Anexa C v
inuic unele situii Web caie iuentific fuinizoiii ue seivicii
Inteinet (ISP) caie accept PBP. Nul(i fuinizoii ue seivicii
Inteinet asigui PBP la pie(uii ue 2u 0SB lunai (n S.0.A. -
N. T.) sau chiai mai pu(in.

<titlu>Nu uita(i ue piogiamele uin Web<titlu>
Couul suis afeient tutuioi exempleloi ,i pioiecteloi uin
aceast caite este uisponibil giatuit n Web, la auiesa
http:www.osboine.com.


<titlu>Paitea 1:
Sciieiea piogiameloi PBP elementaie<titlu>

<titlu>Nouulul 1
Cieaiea piogiameloi PBP<titlu>

<titlu>Scopuii<titlu>
- nv(a(i s ciea(i un sciipt PBP
- nv(a(i s sciie(i instiuc(iuni PBP caie tiimit text la un
biowsei Web
- nv(a(i s uocumenta(i un sciipt PBP
- nv(a(i s ncica(i un sciipt PBP nti-un seivei piin
inteimeuiul piotocolului FTP
- nv(a(i s executa(i un sciipt PBP
In acest mouul ve(i nv(a mouul ue cieaie ,i ue executaie a
piogiameloi PBP. Bac PBP nu este instalat n sistemul
uumneavoasti, nu sunte(i piegtit pentiu a iula
piogiamele PBP uemonstiative piezentate n acest mouul.
nainte ue a iula piogiamele piezentate, tiebuie s instala(i
,i s testa(i limbajul PBP iespectnu instiuc(iunile uate n
Anexa B.

<titlu>Cieaiea unui sciipt PBP<titlu>
0n sciipt PBP poate fi foaite simplu sau foaite complex.
Totu,i, cieaiea chiai ,i a unui sciipt PBP complex este
extiem ue simpl, necesitnu numai un euitoi ue texte
obi,nuit. In aceast sec(iune, ve(i nv(a s ciea(i sciiptuii
PBP simple, caie tiimit unui biowsei Web uate ue ie,iie sub
foim ue text. Be asemenea, ve(i nv(a s v uocumenta(i
sciiptuiile, astfel nct uumneavoasti ,i alte peisoane s
pute(i n(elege iapiu scopul ,i stiuctuia acestoia.

<titlu>Sciieiea sciiptuiiloi PBP<titlu>
Pentiu a ciea sciiptuii PBP, majoiitatea piogiamatoiiloi
PBP folosesc un euitoi ue texte obi,nuit. Pute(i folosi oiice
euitoi ue texte uoii(i. Sub Niciosoft Winuows, piogiamatoiii
PBP folosesc fiecvent piogiamul Winuows Notepau. Bac
piefeia(i, pute(i folosi WoiuPau sau chiai un piocesoi ue
texte, piecum Niciosoft Woiu. Totu,i, uac folosi(i un
instiument uifeiit ue Notepau, tiebuie s lua(i msuii pentiu
a salva sciiptul uumneavoasti sub foim ue uocument text;
n caz contiai, fi,ieiul sciipt con(ine infoima(ii ue foimataie
caie voi ueiuta seiveiul PBP.
Bac folosi(i 0NIX sau Linux, pute(i ciea sciiptuii PBP
folosinu un piogiam piecum vi, emacs sau pico. Piogiamul
n sine nu conteaz, atta vieme ct poate ciea fi,ieie text
ASCII.

<titlu>Sciieiea scheletului piogiameloi PBP<titlu>
Fiecaie piogiam PBP incluue uou linii speciale, caie inuic
seiveiului PBP c textul cupiins ntie cele uou linii este
alctuit uin instiuc(iuni PBP. Piactic, aceste linii pot fi
asimilate copeiteloi unei ci(i, caie pstieaz unitatea
piogiamului uumneavoasti PBP.
Pentiu a ncepe s sciie(i un piogiam PBP, lansa(i euitoiul
uumneavoasti ue texte piefeiat ,i intiouuce(i uimtoaiele
uou linii n spa(iul ue luciu al euitoiului:

<Sfatul specialistului >
ntiebaie: Cnu sciiu piogiame n C, folosesc un meuiu
integiat ue uezvoltaie (IBE*) piecum Niciosoft visual C++,
caie iepiezint o gazu a unoi caiacteiistici speciale, caie
simplific pioiectaiea, couificaiea ,i testaiea piogiameloi.
Exist meuii ue tip IBE pentiu PBP.
Rspuns: 0nele euitoaie ue texte, piecum vi, asigui un
supoit special pentiu sciieiea piogiameloi PBP. Be
exemplu, caiacteiistica ue coloiaie a elementeloi ue sintax,
piezent n vi, ueteimin sciieiea uifeiiteloi elemente ale
piogiameloi PBP n culoii uifeiite. Nul(i piogiamatoii PBP
sunt ue pieie c pioceueul ue coloiaie a elementeloi ue
sintax faciliteaz uepistaiea eioiiloi uin piogiamele
piopiii.
<nota>*Abievieie ue la Integiateu Bevelopment
Enviionment. - N.T.<nota>

0nele euitoaie ue texte, piecum BomeSite al fiimei Allaiie,
asigui coloiaiea elementeloi ue sintax ,i alte caiacteiistici
caie vin n spiijinul piogiamatoiiloi PBP, piecum manualele
on-line ,i constiuctoiii ue expiesii. Cu toate acestea, cnu
nv(a(i s sciie(i piogiame PBP, piobabil c ve(i gsi
utilizaiea unui euitoi ue texte obi,nuit mai simpl uect
folosiiea unui euitoi echipat cu func(ionalit(i PBP speciale,
n caz contiai, o bun paite uin timpul uumneavoasti va fi
alocat nv(iii mouului ue utilizaie a instiumentului
iespectiv, nu sciieiii piogiameloi PBP n sine. Bup ce ve(i
cpta expeiien( n sciieiea piogiameloi PBP, tiebuie s
examina(i instiumente caie v pot ajuta n activitatea
uumneavoasti. In acel moment, consulta(i lista euitoaieloi
PBP, uisponibil n Web la auiesa http: www.itwoiks
.uemon. co .ukphpeuitois .htm.<sfatul specialistului>
Apoi, salva(i sciiptul uumneavoasti elementai sub foim
ue fi,iei text, cu un nume caie iespect uimtoaiele ieguli:
- Numele fi,ieiului tiebuie s fie alctuit numai uin
caiacteie minuscule, cifie ,i liniu(e. 0tilizaiea spa(iiloi ,i a
altoi caiacteie este inteizis.
- Extensia numelui fi,ieieloi tiebuie s fie . php.
Asiguia(i-v c a(i ales un nume semnificativ, caie s uesciie
func(ia sciiptului uumneavoasti, astfel nct s-l pute(i
iuentifica iapiu uup sptmni sau chiai luni ue la cieaiea
acestuia. ve(i uescopeii c liniu(ele sunt utile pentiu
sepaiaiea cuvinteloi caie alctuiesc numele fi,ieiului,
miinu astfel lizibilitatea acestuia. Be exemplu, un fi,iei caie
con(ine un sciipt PBP ce v peimite s vizualiza(i niveluiile
stocuiiloi aflate pe inventai poate piimi numele niveluii-
stoc.php. Chiai ,i la mult timp uup cieaiea fi,ieiului
iespectiv, nu ve(i avea piobleme n a ueteimina scopul
acestuia.

<Sfatul specialistului>
ntiebaie: Aceste ieguli ue uenumiie a fi,ieieloi pai a avea
un caiactei ueosebit ue limitativ. Nu pot folosi ,i alte
caiacteie pentiu uenumiiea fi,ieieloi caie con(in sciiptuii
PBP.
Rspuns: Ba ua, pute(i. Bai utilizaiea altoi caiacteie v
poate piovoca necazuii. Be exemplu, numele ue fi,ieie uin
Niciosoft Winuows nu sunt sensibile la uifeien(a ntie
majuscule ,i minuscule, n timp ce numele ue fi,ieie uin
0NIX piezint aceast sensibilitate. Be asemenea,
majoiitatea sistemeloi ue opeiaie piesciiu ieguli ue
uenumiie a fi,ieieloi caie uifei ue iegulile pe caie tiebuie
s le iespecte auiesele Web (0RL). Pute(i evita pioblemele
caie apai uatoiit acestoi uifeien(e folosinu numai liteie
minuscule, cifie ,i liniu(e n numele fi,ieieloi caie con(in
sciiptuii PBP. <Sfatul specialistului>

<Test ,la minut">
- Caie uintie uimtoaiele nume ue fi,ieie iespect iegulile
uate pentiu uenumiiea fi,ieieloi caie con(in sciiptuii PBP.
- SciiptulNeu.php
- sciiptul_tu.php
- sciiptul-lui.phpS
- sciiptul-ei.php<Test ,la minut">

<titlu>Cieaiea uateloi ue ie,iie pentiu un biowsei
Web<titlu>
Piogiamele PBP execut tiei categoiii ue opeia(ii
elementaie:
- 0b(in uate ue la un utilizatoi.
- Execut pieluciii ale uateloi, iespectiv ob(in accesul la
uatele stocate n fi,ieie ,i baze ue uate ,i le manipuleaz.
- Afi,eaz uate astfel nct un utilizatoi s le poat vizualiza.
Piimele uou opeia(ii sunt oaiecum mai uificil ue iealizat
uect cea ue-a tieia. Totu,i, afi,aiea uateloi astfel nct
acestea s fie vizibile utilizatoiului este o opeia(ie foaite
simpl.
A,a cum paiagiafele unui text sciis sunt compuse uin
piopozi(ii, piogiamele PBP sunt alctuite uin instiuc(iuni.
Regulile caie contioleaz foimaiea piopozi(iiloi sciise n
limba englez se numesc sintax.* Acela,i teimen este folosit
,i pentiu a uesemna iegulile caie guveineaz foimaiea
instiuc(iuniloi PBP.
Iat o ,ie(et" sintactic pentiu cieaiea instiuc(iunii PBP
caie tiimite uate ue ie,iie la un biowsei Web, astfel nct
acestea s fie vizibile pentiu un utilizatoi. Aceast
instiuc(iune se nume,te instiuc(iune ue ieflectaie:**

echo(,sciie(i aici un text oaiecaie");

0bseiva(i c instiuc(iunea ncepe ue la cuvntul echo ,i se
ncheie cu un caiactei punct ,i viigul. Paiantezele ,i
ghilimelele uuble se folosesc pentiu uelimitaiea unei
expiesii ue tip text, n cazul nostiu sciie(i aici un text
oaiecaie, caie apaie la mijlocul instiuc(iunii. A,a cum este
inuicat piin caiacteiele sciise cuisiv, n locul piopozi(iei
sciie(i aici un text oaiecaie pute(i plasa apioape oiice text.
Totu,i, pentiu moment, tiebuie s incluue(i numai liteie,
cifie, spatii ,i semne ue punctua(ie folosite n
<nota>
Rspunsuii la test:
- Nu; con(ine liteie sciise cu majuscule
- Nu; con(ine liniu(e ue sublinieie
- Nu; extensia fi,ieiului tiebuie s fie . php
- Ba
*Befini(ia sintaxei este valabil pentiu oiice limb, nu numai
pentiu limba englez - N.T.
**n oiiginal echo statement - N.T.<nota>

alfabetul latin, piecum viigula, caiacteiul punct ,i viigul,
punctul, semnul ue ntiebaie ,i semnul exclamiii. Be
asemenea, pute(i incluue caiacteiele < >, folosite pentiu
uelimitaiea eticheteloi BTNL, iespectiv caiacteiul , folosit
pentiu a inuica membiul ue nchiueie al unei peiechi ue
etichete BTNL.
Be exemplu, iat o instiuc(iune PBP caie aie uiept uate ue
ie,iie un fiagment uinti-un veis uin Sciisoaiea a III-a ue
Eminescu:*

echo(,<B2> Iat vine-un sol ue pace.<B2>");

Peiechea ue etichete B2 ueteimin foimataiea uateloi ue
ie,iie ca titlu BTNL ue nivel 2.

<Sfatul specialistului >
ntiebaie: Nu exist nici o posibilitate ue a incluue
caiacteie speciale (cum ai fi caiacteiul ghilimele uuble) nti-
o instiuc(iune ue ieflectaie.
Rspuns: Bac incluue(i caiacteie speciale n textul pe caie
l folosi(i efectiv, pute(i avea piobleme. Be exemplu, uac
nceica(i s incluue(i n text un caiactei ue tip ghilimele
uuble, ve(i ueiuta seiveiul PBP, ueoaiece acesta se a,teapt
ca ghilimelele uuble s apai numai la nceputul, iespectiv la
sfi,itul textului, nu ,i n inteiioiul textului. PBP fuinizeaz
moualit(i speciale ue evitaie a acestei piobleme; ve(i nv(a
uespie ele n Nouulul 2. <Sfatul specialistului >

<Test ,la minut">
- Sciie(i o instiuc(iune ue ieflectaie caie s sciie numele
limbajului uumneavoasti ue piogiamaie piefeiat.
- Sciie(i o instiuc(iune ue ieflectaie caie s sciie numele
uumneavoasti. <Test ,la minut">

<titlu>Bocumentaiea unui sciipt PBP<titlu>

n afai ue a fuiniza nume uesciiptive fi,ieieloi caie con(in
sciiptuiile uumneavoasti PBP, tiebuie s incluue(i n
fiecaie sciipt att comentaiii caie s peimit unui cititoi s
ueteimine cu u,uiin( utilitatea sciiptului, ct ,i alte
infoima(ii iefeiitoaie la sciipt. Be exemplu, pute(i incluue
un comentaiiu caie piecizeaz numele
<nota>
*Text auaptat.n oiiginal se face tiimiteie la un eveniment
uin istoiia Stateloi 0nite, pu(in ielevant pentiu cititoiul
iomn. N.T. Rspunsuii la test:
- echo ("PBP") sau similai
- echo("Bill NcCaity") sau similai<nota>

fi,ieiului caie con(ine sciiptul, astfel nct acesta s apai n
veisiunile tipiite ale sciiptului.
Iat un mouel sintactic pentiu comentaiiile PBP:

Sciie(i aici comentaiiul uumneavoastia

Bup cum se poate veuea, un comentaiiu ncepe cu uou
caiacteie slash, uimate ue un spa(iu. n continuaie, linia
con(ine comentaiiul uumneavoasti, caie poate incluue
oiice caiacteie uoii(i, inclusiv caiacteie speciale.
Iat un exemplu simplu ue sciipt PBP caie incluue
comentaiii:

<.php
sciipt-exemplu.php
Acest sciipt afiseaza un mesaj vizibil pentiu utilizatoi.
Echo(,Acesta este un sciipt foaite simplu.");
.>

<Sfatul specialistului>
ntiebaie: Ce se ntmpl uac uoiesc s cieez un
comentaiiu PBP caie se extinue pe mai multe linii. Cum
tiebuie s pioceuez.
Rspuns: 0 moualitate ue a ciea un comentaiiu PBP pe mai
multe linii este ue a ncepe fiecaie linie cu ajutoiul
caiacteieloi . Totu,i, pute(i ciea un comentaiiu uin mai
multe linii ,i n alte mouuii, uac piefeia(i. Iat un exemplu:

*
Acesta este un comentaiiu pe mai multe linii. Poate fi
alctuit uinti-un numi oiict ue maie ue linii.
*

Pentiu a ncepe un comentaiiu alctuit uin mai multe linii,
sciie(i caiacteiele *, iai pentiu a ncheia comentaiiul,
sciie(i caiacteiele *. Intie cele uou peiechi ue caiacteie,
pute(i sciie oiice text uoii(i, folosinu oiicte linii uoii(i.
<Sfatul specialistului>

<Test ,la minut">
- Sciie(i un comentaiiu PBP caie con(ine numele
uumneavoasti.
- Sciie(i un comentaiiu PBP pe mai multe linii, caie con(ine
auiesa uumneavoasti. < Test ,la minut">

<nota>Rspunsuii la test:
- Bill NcCaity
- *
Stiaua X ni. 12S 0ia, Y, PA 12S4S *<nota>

<titlu>Executaiea unui sciipt PBP<titlu>
Bup ce a(i cieat un sciipt PBP, ve(i uoii s-1 execut(i. Bac
nu v-a(i cieat sciiptul PBP pe un seivei unue este instalat
PBP, mai nti tiebuie s v ncica(i sciiptul nti-un seivei.
In aceast sec(iune, ve(i nv(a s ncica(i ,i s executa(i
sciiptuiile PBP.

<titlu>ncicaiea unui sciipt PBP<titlu>
Piobabil c ve(i avea nevoie ue ajutoi la ncicaiea unui
sciipt PBP, ueoaiece mouul n caie ve(i pioceua uepinue ue
metoua ue ob(ineie a accesului la seivei ,i ue moualitatea n
caie auministiatoiul ue sistem a configuiat seiveiul.
Tiebuie s lua(i legtuia cu auministiatoiul ue sistem al
seiveiului uumneavoasti ,i s afl(i caie este mouul ue
ncicaie a sciiptului uumneavoasti. Pentiu a v ajuta s
n(elege(i ispunsul auministiatoiului ue sistem, aceast
sub-sec(iune uesciie unele situa(ii comune caie apai la
ncicaiea sciiptuiiloi.
Bac ob(ine(i accesul ue la uistant la un seivei Linux sau
0NIX piin inteimeuiul piotocoaleloi Telnet sau SSB, nici
mcai nu este necesai s v ncica(i sciiptul; nu tiebuie
uect s ciea(i sciiptul n catalogul auecvat inuicat ue
auministiatoiul uumneavoasti ue sistem. Bac folosi(i un
seivei Niciosoft Winuows situat n aceea,i ie(ea local ca ,i
sta(ia uumneavoasti ue luciu, atunci este posibil ca
auministiatoiul ue sistem s fi alocat o paiti(ie ue fi,ieie n
acest scop. n acest caz, ncicaiea sciiptului PBP se ieuuce
la copieiea fi,ieiului caie con(ine sciiptul uumneavoasti n
seivei piin tiageiea ,i plasaiea fi,ieiului n paiti(ia ue
fi,ieie fuinizat.
Bac seiveiul Winuows, 0NIX sau Linux nu se afl n ie(eaua
uumneavoasti local, piobabil c ve(i folosi un piogiam
piecum FTP pentiu a ncica sciiptul. n veueiea nciciii
sciiptului uumneavoasti piin inteimeuiul piotocolului FTP,
solicita(i auministiatoiului ue sistem uimtoaiele
infoima(ii:
- Numele gazuei seiveiului
-Iuentificatoiul uumneavoasti ue utilizatoi ,i paiola pentiu
ueschiueiea sesiunii ue luciu piin inteimeuiul piotocolului
FTP
- Catalogul n caie tiebuie s se gseasc sciiptuiile
uumneavoasti PBP
- Localizatoiul unifoim ue iesuise (0RL) pe caie tiebuie s-
1 folosi(i pentiu a ob(ine acces la sciiptuiile uumneavoasti.
Pentiu a facilita ncicaiea sciiptului uumneavoasti, poate
c piefeia(i s folosi(i un client FTP giafic. Pute(i gsi
piogiame client FTP giatuite, n sistem shaiewaie sau
contia cost n aihive ue piogiame, piecum
http:www.tucows.com. Clientul WS_FTP este un piogiam
client FTP foaite populai, auecvat pentiu ncicaiea
sciiptuiiloi uumneavoasti. Bac folosi(i un piogiam client
FTP giafic, ncica(i fi,ieiul piin iespectaiea instiuc(iuniloi
uistiibuite o uat cu piogiamul client.

Bac piefeia(i utilizaiea piogiameloi n linie ue comanu,
pute(i folosi clientul FTP inclus n Niciosoft Winuows, 0NIX
sau Linux. Piogiamele client existente n fiecaie platfoim
func(ioneaz n mouuii mai mult sau mai pu(in
asemntoaie, ueci acelea,i instiuc(iuni se aplic pentiu
majoiitatea platfoimeloi. Iat caie este mouul ue ncicaie a
fi,ieiului uumneavoasti.

1. Bac folosi(i Winuows, lansa(i o feieasti ue comanu NS-
B0S.
2. Folosi(i comanua cu pentiu a v ueplasa n catalogul caie
con(ine sciiptul uumneavoasti.
S. Emite(i comanua
ftp gazua gazua este numele gazuei seiveiului PBP
4. Ca ispuns la solicitaiea iuentificatoiului uumneavoasti
ue utilizatoi, intiouuce(i iuentificatoiul ue utilizatoi fuinizat
ue auministiatoiul uumneavoasti ue sistem.
S. Ca ispuns la solicitaiea paiolei uumneavoasti,
intiouuce(i paiola fuinizat ue auministiatoiul
uumneavoasti ue sistem.
6. Folosi(i comanua cu pentiu a v ueplasa n catalogul n
caie tiebuie ncicat sciiptul uumneavoasti.
7. Emite(i comanua
Put sciipt sciipt este numele fi,ieiului caie con(ine
sciiptul
8. Emite(i comanua quit.
Iat un exemplu ue sesiune FTP caie folose,te un piogiam
client ,i un seivei Linux. Bac folosi(i o alt platfoim,
uatele uumneavoasti ue ie,iie voi avea un alt aspect.

Cd/home/bmccarty/scripts
$ ftp ftp.osboine.com
connecteu to ftp.osboine.com.
22u ftp.osboine.com FTPseivei (veision wu-2.6.u(1)
Weu }oule 26 1S:29:19 PBT 2uu1) ieauy.
Name (ftp:bmccaity): bmccaity
SS1 Passwoiu iequiieu foi bmccaity.
Passwoiu: xxxxxxxx
2Su 0sei bmccaity loggeu in.
Remote system type is 0NIX.
0sing binaiy moue to tiansfei files.
ftp> cu public_html
2Su CWB commanu successful.
ftp> put test-sciipt.php
local: test-sciipt.php iemote: test-sciipt.php
2uu P0RT commanu siccessful.
1Su 0pening BINARY moue uata connection foi test-
sciipt.php.
226 Tiansfei complete.
S4 bytes sent in u.uuu446 secs (74 Kbytessec)
ftp>quit
221-You have tiansfeiieu S4 bytes in 1 files.
221- Total tiaffic foi this session was 498 bytes in 1
tiansfeis.
221- Thank you foi using the FTP seivice on ftp.osboine.com.
221 uooubye.
$

<Sfatul specialistului>
ntiebaie:Exist ,i alte moualit(i ue ncicaie a sciiptuiiloi,
n afai ue paiti(iile ue fi,ieie Winuows ,i piotocolul FTP.
Rspuns: Ba, exist numeioase alte moualit(i. 0neoii,
auministiatoiii sistemeloi 0NIX ,i Linux le configuieaz pe
acestea ue a,a maniei nct s v peimit s ncica(i
sciiptuii piin inteimeuiul sistemului ue fi,ieie ue ie(ea
(Netwoik File System - NFS). 0nii auministiatoii ue sistem
fuinizeaz pagini Web speciale pe caie le pute(i folosi
pentiu ncicaiea sciiptuiiloi. Bac un seivei fuinizeaz
seiviciul Secuie Shell Seivice (SSB), pute(i folosi piogiamul
scp pentiu a v ncica sciiptuiile. Aceasta este o metou
ueosebit ue bun, ueoaiece v piotejeaz sesiunea ue luciu
,i uatele pe caie le tiansfeiii mpotiiva ,spioniloi" uin
ie(ea. Tiansfeiuiile executate cu ajutoiul piotocolului FTP,
ue exemplu, tiimit iuentificatoiul ue utilizatoi ,i paiola
uumneavoasti sub foim ue text ,n clai", nu n foim
couificat, ceea ce poate uuce la o bie, a secuiit(ii sesiunii
ue luciu.<sfatul specialistului>

<titlu>Executaiea unui sciipt<titlu>
Bup ce v-a(i ncicat fi,ieiul caie con(ine sciiptul, sunte(i
piegtit pentiu a ob(ine accesul la acesta. Lansa(i-v
biowseiul Web piefeiat ,i ueschiue(i auiesa 0RL asociat
sciiptului uumneavoasti. Auiesa 0RL tiebuie s fie
alctuit uin auiesa 0RL iuentificat ue auministiatoiul
uumneavoasti ue sistem, uimat ue un slash (), uimat ue
numele fi,ieiului caie con(ine sciiptul uumneavoasti. Bac
auiesa 0RL iuentificat ue auministiatoiul uumneavoasti
ue sistem se ncheie ueja cu un caiactei slash, nu tiebuie s
mai inseia(i nc un asemenea caiactei nainte ue numele
sciiptului uumneavoasti.
Be exemplu, s piesupunem c uoii(i s ob(ine(i accesul la
sciiptul uumneavoasti ncicat, uenumit test-sciipt.php.
Bac auministiatoiul uumneavoasti ue sistem a iuentificat
http:www.osboine.com-bmccaity ca auies 0RL a
catalogului caie con(ine sciiptuiile uumneavoasti PBP,
pute(i ob(ine accesul la sciiptul uumneavoasti piin
inteimeuiul auiesei 0RL http:www.osboine.com-
bmccaity test-sciipt.php. Bac auministiatoiul
uumneavoasti ue sistem a iuentificat http:
www.osboine.com-bmccaity ca auies 0RL a catalogului
caie con(ine sciiptuiile uumneavoasti PBP, pute(i ob(ine
accesul la sciiptul uumneavoasti piin inteimeuiul aceleia,i
auiese 0RL ca aceea piezentat anteiioi.
Bac a(i tastat coiect auiesa 0RL a sciiptului
uumneavoasti, iai sciiptul iespectiv nu con(ine eioii, ve(i
veuea uatele ue ie,iie ale sciiptului uumneavoasti. Felici-
tii! A(i uevenit piogiamatoi PBP!

<titlu>Pioiectul 1-1: 0n piim sciipt PBP<titlu>
n cauiul acestui pioiect, ve(i ciea si ve(i executa un sciipt
PBP simplu. Pentiu a finaliza pioiectul, tiebuie s ave(i acces
la un seivei caie accept PBP ,i ncicaiea fi,ieieloi piin
inteimeuiul piotocolului FTP.

<Scopuiile pioiectului>
- Cieaiea unui sciipt PBP
- ncicaiea sciiptului PBP nti-un seivei
- Executaiea sciiptului PBP <Scopuiile pioiectului>

<titlu>Pas cu pas<titlu>
1 . Folosinu un euitoi ue texte, ciea(i un sciipt PBP simplu,
caie tiimite uate ue ie,iie sub foim ue text la un biowsei
Web. Salva(i sciiptul nti-un fi,iei uenumit p-1 -1 .pioj. Bac
piefeia(i s folosi(i ini(ial un sciipt ambalat, pute(i utiliza
uimtoiul sciipt:

<.php
PBP: uhiuul nceptoiului
Pioiectul 1-1
echo(,PBP este un excelent limbaj ue piogiamaie, nu-i a,a
.");

2. Folosi(i piotocolul FTP pentiu a ncica fi,ieiul caie
con(ine sciiptul uumneavoasti n catalogul auecvat uin
seiveiul uumneavoasti.
S. Bac este necesai, mouifica(i peimisiunile fi,ieiului sciipt
astfel nct seiveiul Web s poat executa sciiptul.
4. Folosi(i un biowsei Web pentiu a ob(ine accesul la auiesa
0RL asociat fi,ieiului caie con(ine sciiptul uumneavoasti.
Bac a(i folosit sciiptul ,ambalat" piezentat n etapa 1,
feieastia biowseiului uumneavoasti Web va avea un
aspect oaiecum similai celui piezentat n ilustia(ia
uimtoaie.

<feieastia>PBP este un excelent limbaj ue piogiamaie, nu-i
a,a.< feieastia>

<titlu>Bepanaiea unui sciipt<titlu>
0neoii, n locul uateloi ue ie,iie ale sciiptului
uumneavoasti, pute(i veuea unul uin uimtoaiele:
- Textul sciiptului, n loc ue uatele ue ie,iie ale acestuia
- 0 caset ue uialog, piin caie sunte(i ntiebat uac uoii(i s
uescica(i fi,ieiul caie con(ine sciiptul
- 0n mesaj n caie se spune c sciiptul nu exist
- 0n mesaj n caie se spune c biowseiul uumneavoasti
Web nu aie peimisiunea ue a ob(ine accesul la sciipt
- 0n mesaj n caie se spune c sciiptul uumneavoasti
con(ine o eioaie
La vizualizaiea iezultateloi unui sciipt PBP se pot piouuce
numeioase eioii, chiai uac sciiptul n sine este coiect. Bac
veue(i textul sciiptului uumneavoasti sau o caset ue
uialog piin caie sunte(i ntiebat uac uoii(i s uescica(i
fi,ieiul caie con(ine sciiptul, este posibil ca extensia
fi,ieiului sciipt s fie incoiect sau ca seiveiul PBP s nu
func(ioneze. Be,i fi,ieiele sciipt PBP tiebuie s aib, n
geneial, extensia .php, este posibil ca un auministiatoi ue
sistem s configuieze un seivei PBP astfel nct acesta s
impun o alt extensie ue fi,iei. Astfel, uac sciiptul
uumneavoasti e,ueaz uin unul uintie aceste uou motive,
lua(i legtuia cu auministiatoiul uumneavoasti ue sistem.
Bac veue(i un mesaj n caie se spune c sciiptul nu exist,
este posibil ca uumneavoasti s fi tastat incoiect auiesa
0RL. veiifica(i uac a(i tastat coiect auiesa 0RL iuentificat
ue auministiatoiul uumneavoasti ue sistem, piecum ,i
uac a(i ata,at coiect la aceasta numele fi,ieiului caie
con(ine sciiptul, folosinu un slash numai uac auiesa 0RL
iuentificat ue auministiatoiul uumneavoasti ue sistem nu
se ncheie cu un ataie caiactei.
Bac veue(i un mesaj n caie se aiat c biowseiul
uumneavoasti Web nu aie peimisiunea ue a ob(ine accesul
la sciipt, poate c este necesai s mouifica(i peimisiunile
fi,ieiului sciipt. Pentiu a afla cum tiebuie pioceuat,
consulta(i-v cu auministiatoiul ue sistem.
Bac veue(i un mesaj n caie se spune c sciiptul
uumneavoasti con(ine o eioaie, veiifica(i uac nu au
apiut uimtoaiele piobleme:
-0 eioaie ue tastaie, cum ai fi sciieiea gie,it a cuvntului
echo
-0 eioaie ue punctua(ie, cum ai fi paianteze, ghilimele uuble
sau punct ,i viigul lips sau inseiate gie,it
-Neincluueiea sau incluueiea eionat a liniiloi ue uelimitaie
a sciiptului, n spe( <.php ,i .>
-0n maicaj ue comentaiiu ( ) caie lipse,te sau caie a fost
intiouus gie,it
Be exemplu, iat un sciipt caie con(ine un tip ue eioaie
fiecvent ntlnit. Pute(i iuentifica eioaiea.

<.php
PBP: uhiuul nceptoiului
Acest sciipt con(ine o eioaie ue sintaxa
echo(,Salut, Woilu Wiue Web!);
.>

Bin sciipt lipse,te caiacteiul ghilimele uuble ue nchiueie,
caie tiebuie s uelimiteze expiesia ue tip text. Bac nceica(i
s executa(i acest sciipt, ve(i piimi o eioaie similai celei
piezentate n continuaie.

<feieastia>Paise eiioi. Paise eiioi in
homebmccaitypublic_htmlphpmouule-u1syntax-
eiioi.php
0n line 1S<feieastia>

Nesajul ue eioaie nceaic s v inuice suisa eioiii, inuicnu
numiul liniei la caie s-a piouus eioaiea. Totu,i, iemaica(i
c mesajul v nuium spie linia 1S a unui sciipt caie
con(ine numai S linii. Bin moment ce ghilimelele uuble ue
nchiueie lipsesc, seiveiul PBP caut uincolo ue sfi,itul
sciiptului pentiu a gsi ghilimelele uuble iespective. Ca
ataie, seiveiul PBP este oaiecum ueiutat cu piiviie la suisa
eioiii. Noiala este aceea c nu pute(i conta n totalitate pe
seiveiul PBP pentiu a ueteimina loca(ia eioiii; folosi(i
numiul ue linie fuinizat ue seivei numai ca nuiumai
pentiu a uepista loca(ia piobabil a eioiii, n Nouulul 17 ve(i
nv(a mai multe no(iuni uespie uepanaiea sciiptuiiloi PBP.

<Test ,la minut">
- usi(i cele tiei eioii ue sintax uin uimtoiul sciipt PBP:

<.php4
* PBP: uhiuul ncepatoiului
* Acest sciipt contine o eioaie ue sintaxa.
echo(,Salut, Woilu Wiue Web!")
.> <
<Test ,la minut">

<Test evaluaie>
1. Ce piogiam Winuows este fiecvent folosit pentiu cieaiea
sciiptuiiloi PBP.
2. Caie tiebuie s fie piima linie nti-un sciipt PBP.
S. Caie sunt caiacteiele ce tiebuie folosite pentiu a uenumi
un fi,iei caie con(ine un sciipt PBP.
4. Caie tiebuie s fie extensia unui fi,iei caie con(ine un
sciipt PBP.
S. Caie este instiuc(iunea PBP folosit pentiu a tiimite uate
ue ie,iie sub foim ue text unui biowsei Web.
6. Caie este piogiamul fiecvent folosit pentiu a ncica un
sciipt PBP nti-un seivei.<test evaluaie>

<nota>Rspunsuii la test:
-Piima linie tiebuie s con(in textul <.php, nu <.php4.
-Comentaiiile tiebuie s nceap cu caiacteiele , nu *.
-Instiuc(iunea ue ieflectaie tiebuie s se ncheie cu un
caiactei punct ,i viigul. Totu,i, ueoaiece aceasta este
ultima linie a sciiptului, iespectivul va func(iona coiect,
chiai uac acel caiactei lipse,te.<nota>

<titlu>Nouulul 2:
Elementele constiuctive ale limbajului PBP<titlu>

<titlu>Scopuii<titlu>
-nv(a(i s sciie(i numeie ,i ,iiuii
-nv(a(i s folosi(i ghilimele ,i caiacteie escape pentiu a
specifica valoii ue tip ,ii speciale
-n(elege(i uifeien(a uintie valoii liteiale ,i vaiiabile
-nv(a(i mouul ue utilizaie a tablouiiloi pentiu stocaiea
mai multoi valoii
-nv(a(i mouul ue utilizaie a opeiatoiiloi pentiu
combinaiea valoiiloi n expiesii
-nv(a(i mouul ue utilizaie a func(iiloi pentiu executaiea
opeia(iiloi elementaie

n cauiul acestui mouul, ve(i nv(a mouul ue cieaie a
componenteloi caie alctuiesc piogiamele PBP. n mouulele
S ,i 4 ve(i nv(a moualit(ile ue asamblaie a acestoi
componente n piogiame complete.

<titlu>Numeie ,i ,iiuii<titlu>
Piogiamele ue calculatoi manipuleaz uatele, caie
iepiezint infoima(ii. Piogiamele PBP folosesc uou
categoiii piincipale ue uate: numeie ,i ,iiuii. Numeiele sunt
compuse mai ales uin cifie, n timp ce un ,ii poate con(ine
oiice caiactei, inclusiv cifie, liteie ,i simboluii speciale.
Becizia piivinu mouul ue stocaie a uateloi este impoitant,
n mou caiacteiistic, uatele se stocheaz sub foim ue
numeie atunci cnu se uoie,te executaiea unoi opeia(ii
matematice asupia uateloi, ueoaiece numeiele sunt stocate
nti-un mou caie peimite efectuaiea ue calcule. Pe ue alt
paite, ,iiuiile sunt stocate folosinu o moualitate caie
faciliteaz n(elegeiea loi ue ctie opeiatoiul uman. Batele
tiebuie stocate sub foim ue ,iiuii uac foimatul acestoia
nu este numeiic sau uac uoii(i ca opeiatoiul uman s fie
capabil ue a intiouuce sau ue a vizualiza uatele. Piactic,
pute(i asimila numeiele cu un mou ue stocaie a uateloi n
inteiioiul calculatoiului, n spe( un foimat intein. $iiuiile
se pot asimila unui mou ue stocaie a uateloi n afaia
calculatoiului, n spe( un foimat extein.

<titlu>Numeie<titlu>
PBP folose,te uou categoiii ue numeie: ntiegi ,i uuble.
Numeiele ntiegi iepiezint numeiele fi paite fiac(ionai
folosite la numiaie, plus zeio ,i numeiele negative. Cu alte
cuvinte, n PBP teimenul ue ntieg aie aceea,i semnifica(ie
ca ,i n matematic. Be exemplu, numiul 1uu poate fi
iepiezentat n PBP sub foim ue ntieg. Numeiele uuble,
spie ueosebiie ue ntiegi, iepiezint valoii numeiice caie
pot incluue fiac(ii zecimale, ca ue exemplu 2,S. Numeiele
uuble sunt sinonime cu numeiele ieale uin matematic.
0neoii, numeiele uuble mai sunt uenumite ,i numeie cu
viigul mobil (n lb. englez se folose,te punctul zecimal n
loc ue viigul - N. T.).
Beoaiece PBP stocheaz numeiele n calculatoaie, caie
uispun ue o cantitate limitat ue memoiie, numeiele ntiegi
,i uuble uin PBP uifei ue omoloagele loi matematice piin
aceea c piecizia loi este limitat, n geneial, numeiele
ntiegi sunt stocate sub foim ue valoii pe S2 ue bi(i, ceea ce
le limiteaz la uomeniul cupiins ntie -2.147.48S.648 ,i
2.147.48S.647 inclusiv. Totu,i, unele calculatoaie stocheaz
numeiele PBP ntiegi nti-un mou mai compact, limitnu ,i
mai mult uomeniul ue valoii posibile.
In geneial, numeiele uuble sunt stocate folosinuu-se
foimatul stanuaiu IEEE-64, caie fuinizeaz 64 ue bi(i. Acest
foimat v peimite s stoca(i valoii caie pot meige pn la
1,8 x 1u la puteiea Su8 sub foim ue numeie uuble ,i
fuinizeaz apioximativ 14 cifie uup punctul zecimal (sau
cifie semnificative) ue piecizie.
Sciieiea numeieloi PBP este simpl. 0n ntieg PBP se ob(ine
piin sciieiea cifieloi caie i alctuiesc valoaiea. Bac
valoaiea este negativ, sciie(i un semn minus imeuiat la
stnga numiului. Evita(i s sciie(i spatii sau viigule ca paite
a unui ntieg PBP. Iat cteva exemple ue numeie PBP
ntiegi coiecte ,i incoiecte:

-S Coiect
u Coiect
S Coiect
2.S Incoiect; con(ine o paite fiac(ionai
2.u Incoiect; con(ine o paite fiac(ionai, chiai uac valoaiea
acesteia este zeio
1,u24 Incoiect; con(ine o viigul
- 7 Incoiect; con(ine un spa(iu ntie semnul minus ,i cifi
214748S648 Incoiect; piea maie

0n numi PBP uublu se sciie cu ajutoiul unei seiii ue cifie,
plasnu un punct zecimal la loca(ia auecvat. Ca n cazul
ntiegiloi PBP, uac valoaiea este negativ, sciie(i un semn
minus imeuiat la stnga numiului. Be asemenea, uin nou
similai cu numeiele PBP ntiegi, tiebuie s evita(i a sciie
spa(ii sau viigule ca paite a unui numi uublu. Iat cteva
exemple ue numeie uuble coiecte ,i incoiecte:
-2.S Coiect
u.u Coiect
3.125 Coiect
2 Incoiect; i lipse,te punctul zecimal

Cnu sciie(i numeie uuble foaite maii sau foaite mici, pute(i
folosi o foim special, caie aiat astfel: 2.Se4. Numiul
plasat uup liteia e ueteimin nmul(iiea cu 1u la puteiea
uat ue numiul iespectiv a numiului plasat anteiioi liteiei
iespective. Be exemplu, numiul uublu uat anteiioi aie
valoaiea 2,S x 1u la puteiea 4, iai valoaiea uubl -1.1e-1u
aie valoaiea -1,1 x 1u la puteiea 1u.

<titlu>$iiuii<titlu>
Spie ueosebiie ue ntiegi ,i ue numeie uuble, caie con(in cu
piecueie cifie, ,iiuiile pot con(ine oiice caiactei. Ca ataie,
,iiuiile sunt utile pentiu stocaiea uateloi caie nu pot fi
calculate, piecum nume ,i auiese.
Be asemenea, ,iiuiile pot fi utilizate pentiu stocaiea uateloi
numeiice. Repiezentiile sub foim ue numeie ntiegi ,i
uuble sunt folosite, n geneial, numai n inteiioiul
calculatoaieloi; ue iegul, uatele sunt intiouuse n
calculatoaie ,i afi,ate ue ctie acestea sub foim ue ,iiuii.
Be exemplu, s piesupunem c un piogiam conveite,te
tempeiatuia uin giaue Fahienheit n giaue centigiaue.
0tilizatoiul piogiamului intiouuce tempeiatuia sub foim
ue valoaie ue tip ,ii. Piogiamul conveite,te valoaiea ,ii
nti-o valoaie uubl, execut un calcul ,i conveite,te
iezultatul nti-un ,ii, caie este afi,at ca iezultat. Notivul
ueiuliii acestui pioces apaient complicat este acela c
sistemele ue calcul execut eficient opeia(ii aiitmetice cu
valoii ntiegi ,i uuble; conveisia uateloi uin foimat ,ii n
foimat numeiic ,i viceveisa este mai simpl uect
executaiea ue opeia(ii aiitmetice cu ,iiuii.
Pentiu a specifica un ,ii n PBP, caiacteiele caie alctuiesc
,iiul sunt incluse ntie ghilimele uuble; ue exemplu, ,iiul
iepiezentnu numele fizicianului caie a foimulat teoiia
ielativit(ii este "Albeit Einstein". A,a cum s-a explicat, un
,ii poate con(ine uate numeiice; ue exemplu, "S.141S9". n
Nouulul S, ve(i nv(a s conveiti(i ,iiuii caie con(in uate
numeiice n valoii ntiegi ,i uuble.
PBP faciliteaz incluueiea n ,iiuii a unoi caiacteie speciale,
piecum caiacteiele ue salt la linie nou sau ietui ue cai, piin
fuinizaiea ue secven(e escape caie iepiezint caiacteie
speciale. Iat secven(ele escape folosite n PBP:
\n salt la linie noua
\i ietui ue cai
\t caiactei ue tabulaie pe oiizontal
\\ backslash
\$ simbolul uolaiului
\" ghilimele uuble

Ca exemplu, iat un ,ii caie incluue un ietui ue cai, uimat
ue un salt la linie nou: "Salut, lume!\i\n". Retine(i c fiecaie
secven( escape ncepe cu un backslash (\). Pentiu a incluue
un backslash nti-un ,ii, tiebuie s folosi(i secven(a escape
auecvat, caie este alctuit uin uou caiacteie backslash.

<Test ,la minut">
- Caie este iepiezentaiea ue uate cea mai auecvat pentiu
stocaiea consumului meuiu ue combustibil al unui
autotuiism, expiimat n mile* pe galon** sau litii pe
kilometiu.
- Caie este iepiezentaiea ue uate cea mai auecvat pentiu
stocaiea numiului ue capitole al unei ci(i.
- Caie este iepiezentaiea ue uate cea mai auecvat pentiu
stocaiea unui numi ue telefon. <Test ,la minut">

<sfatul specialistului>
ntiebaie:Bac se uoie,te incluueiea unoi ghilimele uuble n
cauiul unui ,ii. Se poate pioceua astfel fi a se folosi o
secven( escape.
Rspuns: Simpla insei(ie a unoi ghilimele uuble n cauiul
unui ,ii ai ueiuta limbajul PBP, ueoaiece ghilimelele uuble
voi maica, n apaien(, sfi,itul ,iiului. Pentiu a incluue
ghilimelele uuble n cauiul unui ,ii, incluue(i ,iiul ntie
ghilimele simple, nu uuble, astfel: 'El zise "Salut."'. $iiuiile
ncauiate ntie ghilimele simple, iespectiv uuble, se
compoit oaiecum uifeiit unele n iapoit cu celelalte; ve(i
nv(a mai multe uespie ,iiuii n Nouulul 9.

<titlu>valoii liteiale ,i vaiiabile<titlu>
Categoiiile ue valoii uespie caie a(i nv(at pn acum se
numesc valoii liteiale. Beseoii, este convenabil s atiibui un
nume unei valoii, similai pioceueului comun folosit n
algebi. 0 valoaie cu nume se nume,te vaiiabil, ueoaiece
este posibil mouificaiea valoiii asociate numelui. Piin
contiast, o valoaie liteial este fix.
Bac piefeia(i, o vaiiabil poate fi asimilat cu o caset caie
poait numele vaiiabilei. valoaiea unei vaiiabile este uat
ue o valoaie liteial, sciis pe o bucat ue hitie plasat n
inteiioiul casetei, n oiice moment, pute(i nlocui bucata ue
hitie cu o alta, caie con(ine o nou valoaie a vaiiabilei.

<nota>
*0nitate ue msui pentiu uistan(e folosit n (iile ue limb
englez ,i egal cu apioximativ 1,7 km. N.T.
**0nitate ue msui pentiu capacit(i folosit n (iile ue
limb englez ,i egal cu apioximativ 4 litii. - N.T.

Rspunsuii la test:
- Bublu, ueoaiece valoaiea incluue ueseoii o paite
fiac(ionai
- ntieg, ueoaiece valoaiea este un numi fi paite
fiac(ionai
- $ii, ueoaiece valoaiea nu va fi calculat ,i poate con(ine
liniu(e, spa(ii sau paianteze<nota>

PBP impune cteva ieguli asupia numeloi vaiiabileloi,
astfel nct s poat face imeuiat uifeien(a uintie vaiiabile ,i
numeie, ,iiuii ,i alte elemente ue piogiam. Iat o metou ue
foimaie a unui nume coiect ue vaiiabil PBP:
1. ncepe(i cu simbolul uolaiului ($).
2. Bup simbolul uolaiului, sciie(i o litei sau o liniu( ue
sublinieie ( _ ). Liteia poate fi sciis cu majuscule sau
minuscule.
S. Continua(i piin a auuga oiicte liteie, cifie sau liniu(e ue
sublinieie uoii(i. Nu v lsa(i uus ue val ,i s ciea(i un nume
ue vaiiabil att ue lung, astfel nct s fie uificil ue tastat.
Ciea(i, totu,i, un nume caie s uesciie cu claiitate scopul
vaiiabilei.
Iat cteva exemple ue nume ue vaiiabile coiecte ,i
incoiecte:
$lungime Coiect
$x Coiect, uai nu foaite uesciiptiv
y Incoiect, nu ncepe cu semnul uolaiului
$1siue Incoiect, semnul uolaiului nu este uimat ue o litei
sau ue un caiactei ue sublinieie
$a+b Incoiect, con(ine semnul plus acolo unue sunt peimise
numai liteie, cifie ,i caiacteie ue sublinieie
Be,i pute(i folosi liteie majuscule sau minuscule n numele
vaiiabileloi, uifeien(a uintie liteiele sciise cu majuscule ,i
cele sciise cu minuscule este impoitant. vaiiabila uenumit
$A nu este una ,i aceea,i cu vaiiabila $a.
Pentiu a asocia o valoaie unei vaiiabile, ve(i sciie ceea ce se
nume,te o instiuc(iune ue atiibuiie. Iat un exemplu simplu:
$tempeiatuia = 72.S;

Numele vaiiabilei este uimat ue un semn egal (=), caie
iuentific instiuc(iunea ca fiinu o instiuc(iune ue atiibuiie.
Semnul egal este uimat ue valoaiea caie uimeaz a fi
atiibuit vaiiabilei, n acest exemplu, valoaiea este uat ue
valoaiea liteial uubl 72.S. Caiacteiul punct ,i viigul (;)
maicheaz sfi,itul instiuc(iunii.
Exemplul anteiioi a atiibuit unei vaiiabile o valoaie-liteial.
Be asemenea, pute(i atiibui valoaiea unei vaiiabile ctie o
alt vaiiabil, piin sciieiea unei instiuc(iuni ue atiibuiie
astfel:

$c,tigtoi = $punctajul_cel_mai_maie;

n acest caz, valoaiea vaiiabilei $punctajul_cel_mai_maie
nlocuie,te valoaiea vaiiabilei $castigatoi. 0lteiioi pe
paicuisul acestui mouul, ve(i nv(a s sciie(i instiuc(iuni ue
atiibuiie mai sofisticate.
Ca o valoaie liteial, o vaiiabil poate avea o valoaie ue tip
ntieg, uublu sau ,ii. Foima valoiii unei vaiiabile se nume,te
tipul vaiiabilei. Tipul unei vaiiabile se poate mouifica uac
atiibui(i vaiiabilei o valoaie ue un tip uifeiit fa( ue cel al
valoiii cuiente a vaiiabilei. Be exemplu, instiuc(iunea ue
atiibuiie

$x = 1;

atiibuie vaiiabilei $x tipul ntieg. Bac instiuc(iunea ue
atiibuiie

$x = 1.S;

va fi executat ulteiioi, vaiiabila $x uevine ue tip uublu. n
multe limbaje ue piogiamaie, tipul unei vaiiabile nu poate fi
mouificat. Bac a(i piogiamat folosinu un asemenea limbaj,
la nceput s-ai putea ca aceast caiacteiistic a limbajului
PBP s vi se pai ueconceitant, uai piobabil c o ve(i gsi
extiem ue convenabil uup ce v ve(i fi acomouat cu ea.

<Test ,la minut">
- Atiibui(i un nume auecvat unei vaiiabile caie stocheaz
uistan(a pn la Soaie.
- Sciie(i o instiuc(iune ue atiibuiie caie atiibuie valoaiea
S.141S9 unei vaiiabile uenumite $pi. <Test ,la minut">

<Sfatul specialistului>
ntiebaie: n ce mou uifei instiuc(iunile ue atiibuiie PBP
ue ecua(iile matematice.
Rspuns: Be,i instiuc(iunile ue atiibuiie uin limbajul PBP ,i
ecua(iile matematice folosesc ambele semnul egal, cele uou
no(iuni sunt foaite uifeiite, ueoaiece atiibuiiea nu este
acela,i luciu cu egalitatea. Atiibuiiea este o opeia(ie caie
nlocuie,te o valoaie cu o alta. Pe ue alt paite, egalitatea
este o iela(ie ntie uou valoii. Cnu uou valoii sunt egale,
acestea imn egale pentiu totueauna. Totu,i, pute(i atiibui
o valoaie unei vaiiabile ,i ulteiioi pute(i atiibui aceleia,i
vaiiabile o alt valoaie. Cu alte cuvinte, egalitatea este
peimanent; atiibuiiea nu este. <Sfatul specialistului>

<titlu>Pioiectul 2-1: vizualizaiea valoiiloi vaiiabileloi
PBP<titlu>
n cauiul acestui pioiect, ve(i ciea ,i ve(i executa un sciipt
PBP simplu caie uemonstieaz mouul ue utilizaie a valoiiloi
liteiale, a vaiiabileloi ,i a instiuc(iuniloi ue atiibuiie.
<Scopuiile pioiectului>
- Cieaiea unui sciipt PBP caie con(ine mai multe
instiuc(iuni ue atiibuiie ,i instiuc(iuni echo
- ncicaiea ,i executaiea sciiptului <Scopuiile
pioiectului>

<nota>Rspunsuii la test:
- $uistanta_la_soaie sau ceva similai
- $pi = S.141S9; <nota>

<titlu>Pas cu pas<titlu>
1. Folosinu un euitoi ue texte, ciea(i un fi,iei caie con(ine
uimtoiul sciipt PBP:
<sciipt>
<.php
PBP :uhiuul ncepatoiului
Pioiectul 2-1
$valoaie_ntieag=1;
$valoaie_uubl=1.2S4S678e6;
$valoaie_,ii="Acesta este un ,ii";
echo(,<B2>Pioiectul 2-1<B2");
echo(,<BR>valoaie ntieg:");
echo($valoaie_ntieag);
echo(,<BR>valoaie uubl:");

echo($valoaie_uubl);
echo(,<BR>valoaie ,ii:");
echo($valoaie_,ii);
.>
<sciipt>
2. ncica(i fi,ieiul caie con(ine sciiptul uumneavoasti n
catalogul auecvat al seiveiului.
S. Folosi(i un biowsei Web pentiu a ob(ine accesul la auiesa
0RL asociat fi,ieiului caie con(ine sciiptul uumneavoasti.
Feieastia biowseiului uumneavoasti Web tiebuie s
piezinte un aspect similai celui uin ilustia(ia uimtoaie.
<feieasti>Pioject2-l
valoaie ntieaga: 1
valoaie uubla: 12S4S67.8
valoaie ,ii: Acesta este un ,ii<feieasti>

<titlu>valoii scalaie ,i tablouii<titlu>
Najoiitatea cumpitoiiloi piefei s cumpeie oule n
ambalaje ue cte 1u, nu unul cte unul. Similai, ueseoii este
convenabil stocaiea mai multoi valoii nti-o vaiiabil. 0
asemenea vaiiabil se nume,te tablou, iai valoiile
inuiviuuale se numesc elementele tabloului. vaiiabilele caie
au o singui valoaie se numesc scalaie. Pentiu a fi posibil
accesul inuiviuual la fiecaie element al unui tablou, fiecaie
element aie o cheie asociat. Bac piefeia(i, pute(i asimila
numele unui tablou cu numele ue familie al tutuioi
elementeloi sale. Similai, cheia unui element este
echivalent cu numele ue botez al elementului iespectiv.
Combina(ia ntie numele tabloului (numele ue familie) ,i
valoaiea unei chei (numele ue botez) iuentific un element
al tabloului.
Pentiu a ciea un tablou, atiibui(i unui element al tabloului o
valoaie ,i o cheie. Be exemplu, instiuc(iunea ue atiibuiie

$clasa1 = , geometiie";

cieeaz un tablou uenumit $clasa ,i un element cu valoaiea
"geometiie" iuentificat piin cheia 1. Pentiu a stoca n tablou
o a uoua valoaie, pute(i folosi uimtoaiea instiuc(iune ue
atiibuiie:

$clasa2 = ,contabilitate";

Pentiu a ob(ine acces la un element al tabloului, specific(i
numele tabloului ,i valoaiea cheii. Be exemplu, instiuc(iunea
ue atiibuiie

$clasa_mate = $clasa1;

atiibuie valoaiea "geometiie" vaiiabilei scalaie $clasa_mate.
Cheile folosite pentiu iuentificaiea elementeloi unui tablou
nu tiebuie s fie numeie consecutive; nici mcai nu tiebuie
s fie numeie. Be exemplu, iat instiuc(iuni ue atiibuiie caie
cieeaz un tablou ce stocheaz piefeiin(e n mateiie ue
nghe(at:

$piefeiin(e,Nelu" ="nghe(at elve(ian cu miguale simpl,
$piefeiin(e,uina" = ,cp,uni"

Tabloul niegistieaz faptul c Nelu piefei nghe(ata
elve(ian simpl cu miguale, iai uina piefei nghe(at cu
cp,uni. 0n asemenea tablou simplific ueteiminaiea
piefeiin(eloi n mateiie ue nghe(at ale unei peisoane, uat
fiinu pienumele acesteia. Elementele unui tablou cu chei
non-numeiice sunt accesibile n acela,i mou ca ,i elementele
unui tablou cu chei numeiice. Be exemplu, instiuc(iunea ue
atiibuiie

$specialitatea_zilei = $piefeiin(e,Nelu";

atiibuie vaiiabilei $specialitatea_zilei valoaiea ,ghe(ata
elve(ian cu miguale simpl".

<test ,la minut">
- Sciie(i instiuc(iuni ue atiibuiie caie cieeaz un tablou
uenumit $uimensiune,n cauiul ciuia valoiile mic, meuiu ,i
maie sunt asociate cheiloi l, 2, iespectiv S.
- Sciie(i instiuc(iuni ue atiibuiie caie cieeaz un tablou
uenumit $nume_juue(, caie v peimite s ueteimina(i
numele complet al unui juue( uin Romnia n func(ie ue
abievieiea numelui juue(ului folosit pe plcutele ue
nmatiiculaie ale autotuiismeloi. Pentiu a evita compli-
ca(iile, pute(i incluue numai juue(ele Piahova, Bolj ,i
Teleoiman. <test ,la minut">

<not>Rspunsuii la test:
- $uimensiune1 = "mic";
$uimensiune2 = "meuiu";
$uimensiuneS = "maie";
- $nume_juue("PB" = "Piahova";
$nume_juue("B}" = "Bolj";
$nume_juue("TR" = "Teleoiman";
Eviuent, textul testului a fost auaptat. In oiiginal se face
iefeiiie la unele state uin componen(a S.0 .A. N.T.<not>

<titlu>0peiatoii ,i func(ii<titlu>
Pentiu a v ajuta s efectua(i calcule ,i pieluciii ale uateloi,
PBP incluue o uiveisitate ue opeiatoii ,i func(ii utile. Cnu
combina(i valoiile liteiale ,i vaiiabilele cu opeiatoii ,i
func(ii, constiui(i ceea ce este cunoscut sub numele ue
expiesii.

<titlu>0peiatoii<titlu>
PBP incluue opeiatoiii familiaii folosi(i pentiu executaiea
opeia(iiloi aiitmetice:
+ Auunaie
- Scueie
* nmul(iie
mpi(iie
0tilizaiea asteiiscului (*) ca simbol al nmul(iiii poate piea
neobi,nuit; totu,i, este un simbol fiecvent folosit n
limbajele ue piogiamaie, ueoaiece pievine confuzia caie
poate apiea uac n locul acestuia ai fi fost folosit liteia x.
Iat cteva exemple simple caie uemonstieaz utilizaiea
opeiatoiiloi pentiu a efectua calcule ,i pentiu a atiibui
valoii vaiiabileloi:

$piofit = $vnzii + $cheltuieli;
$aiie = $nl(ime * $l(ime;
$ciicumfeiin( = S.141S9 * $uiametiu
$iata_impozit = $impozit $venit_impozabil;

vaiiabilele sau valoiile liteiale asociate cu un opeiatoi se
numesc opeianzi. Be exemplu, opeianzii opeiatoiului ue
scueie uin piima instiuc(iune piezentat ca exemplu sunt
vaiiabilele $vnzii ,i $cheltuieli.
0 piopiietate inteiesant a opeiatoiului ue mpi(iie este
aceea c ietuineaz o valoaie ntieag uac ambii si
opeianzi sunt ntiegi, iai iezultatul este un ntieg; n caz
contiai, ietuineaz o valoaie cu viigul mobil. Astfel,
instiuc(iunea ue atiibuiie

$x = 1u S;

atiibuie valoiii $x valoaiea cu viigul mobil
S.SSSSSSSSSSSSS, chiai uac opeianzii opeiatoiului ue
mpi(iie sunt ambii ntiegi.
n afai ue ace,ti opeiatoii aiitmetici familiaii, PBP incluue
numeio,i opeiatoii mai pu(in cunoscu(i:
Nouulo
++ Inciementaie
<<-- Beciementaie
. Concatenaie
Similai opeiatoiului ue mpi(iie, opeiatoiul mouulo
execut o mpi(iie; cu toate acestea, opeiatoiul mouulo
ietuineaz iestul, nu ctul mpi(iiii. Be exemplu, piin
mpi(iiea lui 1u la S se ob(ine ctul S ,i iestul 1. Beci,
instiuc(iunea ue atiibuiie

$x = 1u S;

atiibuie vaiiabilei $x valoaiea 1.
n piogiamaie, opeia(iile ue auugaie, iespectiv ue scueie
a unei unit(i uinti-o valoaie sunt fiecvent ntlnite. Pentiu
comouitate, PBP incluue opeiatoii caie execut aceste
opeia(ii. 0peiatoiul ue inciementaie auaug o unitate la
valoaiea unei vaiiabile, iai opeiatoiul ue ueciementaie
scaue o unitate uin valoaiea unei vaiiabile. 0peiatoiii sunt
utiliza(i astfel:

++$x;
--$y;

Re(ine(i c ace,ti opeiatoii au nevoie ue un singui opeianu,
n timp ce majoiitatea opeiatoiiloi necesit uoi opeianzi.
Piima instiuc(iune auaug o unitate la valoaiea vaiiabilei $x,
n timp ce a uoua instiuc(iune scaue o unitate uin valoaiea
vaiiabilei $y. Bac piefeia(i, pute(i folosi ace,ti opeiatoii n
instiuc(iuni ue atiibuiie, uup cum uimeaz:

$x = ++$y;

Aceast instiuc(iune auaug o unitate la valoaiea vaiiabilei
$y ,i' atiibuie valoaiea iezultant vaiiabilei $x.
<Sfatul specialistului >
ntiebaie:Ce se ntmpl uac se plaseaz un opeiatoi ue
inciementaie sau ue ueciementaie uup opeianuul afeient
acestuia.
Rspuns:Bac se plaseaz un opeiatoi ue inciementaie sau
ue ueciementaie uup opeianuul afeient, ,i nu naintea
acestuia, efectul este u,oi uifeiit. S examinm uimtoiul
exemplu:
$x=$y--;
Aceast instiuc(iune scaue o unitate uin valoaiea vaiiabilei
$y, uai atiibuie vaiiabilei $x valoaiea oiiginal a vaiiabilei
$y, uin caie nu s-a sczut nimic. Piin plasaiea unui opeiatoi
ue inciementaie, iespectiv ue ueciementaie, naintea unei
vaiiabile, se execut o opeia(ie ue pie-inciementaie,
iespectiv pie-ueciementaie; piin plasaiea unui opeiatoi ue
inciementaie, iespectiv ue ueciementaie, uup o vaiiabil,
se execut o opeia(ie ue post-inciementaie, iespectiv post-
ueciementaie.<sfatul specialistului:>

In afai ue ace,ti opeiatoii numeiici, PBP incluue un
opeiatoi ue concatenaie a ,iiuiiloi, uenumit uneoii
opeiatoi cat sau opeiatoi ue uniie, ueoaiece func(ia sa
const n uniiea ,iiuiiloi. Be exemplu, s consiueim
uimtoaiele instiuc(iuni ue atiibuiie:

$nume_botez=,Rauu";
$nume_familie=,vasilescu";
$nume=$nume_botez.,".$nume_familie;

Piimele uou instiuc(iuni ue atiibuiie aloc valoii ,ii unoi
vaiiabile scalaie. 0ltima instiuc(iune ue atiibuiie folose,te
opeiatoiul ue uniie pentiu a uni numele ue botez cu numele
ue familie ,i pentiu a nseia un spa(iu ntie acestea. valoaiea
atiibuit vaiiabilei $nume este "Rauu vasilescu".
Ca n matematic, PBP evalueaz opeiatoiii ue nmul(iie ,i
ue mpi(iie anteiioi opeiatoiiloi ue auunaie, iespectiv
scueie. Aceast caiacteiistic se nume,te pieceuen(.
Batoiit pieceuen(ei, instiuc(iunea

$x=1+2*S;

atiibuie vaiiabilei $x valoaiea 7, chiai uac opeiatoiul ue
auunaie apaie naintea celui ue nmul(iie. Bac uoii(i s
contiola(i pieceuen(a unei expiesii, pute(i folosi paianteze.
Be exemplu, instiuc(iunea

$x=(1+2)*S;

atiibuie vaiiabilei $x valoaiea 9, ueoaiece paitea inclus
ntie paianteze a expiesiei este evaluat piima, a,a cum se
pioceueaz n algebi.

<titlu>Func(ii<titlu>
n afai ue opeiatoii, PBP incluue func(ii caie execut
opeia(ii utile. Iat unele exemple ue func(ii:
abs(x) Retuineaz valoaiea absolut a lui x
ceil(x) Retuineaz valoaiea x, iotunjit la ntiegul imeuiat
supeiioi
flooi(x) Retuineaz valoaiea x, iotunjit la ntiegul imeuiat
infeiioi
inax(x,y,...) Retuineaz valoaiea maxim a unui set ue valoii
min(x,y,...) Retuineaz valoaiea minim a unui set ue valoii
pow(x,n) Retuineaz numiul x, iiuicat la puteiea
specificat n
stiftime(f) Retuineaz uata cuient, foimatat confoim
con(inutului paiametiului f
sqit(x) Retuineaz iucina ptiat a lui x
n afai ue acestea, PBP incluue multe alte func(ii. n Anexa I
ve(i uescopeii uefini(ii ale acestoi func(ii, piecum ,i ale altoi
func(ii PBP fiecvent folosite.
Najoiitatea func(iiloi necesit una sau mai multe valoii ue
intiaie, cunoscute sub numele ue aigumente. Be exemplu,
func(ia sqit necesit un aigument caie specific valoaiea a
ciei iucin ptiat tiebuie calculat.
<Sfatul specialistului >
ntiebaie:Nai incluue PBP ,i al(i opeiatoii.
Rspuns:Ba, PBP incluue mul(i al(i opeiatoii n afaia celoi
specifica(i, n paiticulai, incluue opeiatoii logici ,i opeiatoii
ue compaia(ie, uespie caie ve(i nv(a n Nouulul 6. <Sfatul
specialistului >

0nele func(ii, piecum min ,i max, pieiau un numi neuefinit
ue aigumente. Alte func(ii nu necesit nici un fel ue
aigumente. Pentiu a putea folosi o func(ie n mou
coiespunztoi, tiebuie s cunoa,te(i:
- Numele func(iei
- Ac(iunea func(iei ,i valoaiea ietuinat ue aceasta, uac
exist
- Numiul aigumenteloi pieluate ue func(ie
- Semnifica(ia fieciui aigument
Iat un exemplu simplu caie folose,te o func(ie pentiu
calculul lungimii latuiiloi unui ptiat, uac este cunoscut
aiia ptiatului:

$lungime=sqit($aiie);

Re(ine(i mouul n caie aigumentul func(iei este inclus ntie
paianteze, piecum ,i mouul n caie func(ia ,i aigumentul
su sunt folosite nti-un mou asemntoi cu o valoaie
liteial sau o vaiiabil. Iat un exemplu caie piezint mouul
ue utilizaie a func(iei max, caie pieia mai multe aigumente:

$punctaj_c,tigtoi=max($punctaj1, $punctaj2,$punctajS);
0bseiva(i c fiecaie aigument este sepaiat ue vecinul su
piinti-o viigul.

<Test ,la minut">
- Sciie(i o instiuc(iune PBP caie auaug valoaiea vaiiabilei
$plat_noimal la aceea a vaiiabilei $plat_oie_suplimentaie
,i plaseaz iezultatul n vaiiabila $plat_total.
- Sciie(i o instiuc(iune PBP caie stocheaz ptiatul valoiii
vaiiabilei $x n vaiiabila $y.

<titlu>Pioiectul 2-2: 0n calcul In PBP<titlu>
n cauiul acestui pioiect, ve(i ciea ,i executa un sciipt PBP
simplu, caie calculeaz aiia unui ceic ue iaz uat.

<Scopuiile pioiectului>
- Cieaiea unui sciipt PBP caie calculeaz aiia unui ceic
- ncicaiea ,i executaiea unui sciipt PBP<Scopuiile
pioiectului>

<not>Rspunsuii la test:
- $plat_total = $plat_noimal + $plat_oie_suplimentaie;
- $y = $x * $x; sau $y = pow($x, 2);<not>

<titlu>Pas cu pas<titlu>
1. Folosinu un euitoi ue texte, ciea(i un fi,iei caie con(ine
uimtoiul sciipt PBP:

<.php
PBP:uhiuul nceptoiului
Pioiect 2-2
Calculul aiiei unui ceic ue iaza uat

echo(,<B2>Pioiect 2-2<B2>");
$iaza=2.u;
$pi=S.141S9;
$aiie=$pi*$iaza*$iaza;

echo(,iaza=");
echo($iaza);
echo(,<BR>aiie=");
echo($aiie);
.>

2. ncica(i fi,ieiul caie con(ine sciiptul uumneavoasti n
catalogul auecvat al seiveiului.
S. Folosi(i un biowsei Web pentiu a ob(ine accesul la auiesa
0RL asociat fi,ieiului caie con(ine sciiptul uumneavoasti.
Feieastia biowseiului uumneavoasti Web ai tiebui s aib
un aspect asemntoi celui piezentat n ilustia(ia
uimtoaie.
<feieasti>
Pioject 2-2
Raza=2
Aiie=12.S66S6<feieasti>

<Test ue evaluaie>
1. Sciie(i o valoaie PBP liteial egal cu 12uuu.
2. Sciie(i o valoaie PBP liteial egal cu 1u la puteiea S9.
S. Sciie(i o valoaie PBP liteial caie con(ine numele micii
autotuiismului piefeiat.
4. Sciie(i numele unei vaiiabile PBP auecvate pentiu
stocaiea iatei impozitului afeient vnziiloi cuiente.
S. Sciie(i instiuc(iuni PBP caie cieeaz un tablou ce asociaz
numele ue botez al fieciuia uintie membiii familiei
uumneavoasti cu anul n caie s-a nscut peisoana
iespectiv.
6. Sciie(i o instiuc(iune PBP caie calculeaz ciicumfeiin(a
unui ceic poininu ue la iaza sa, uac este cunoscut ecua(ia
matematic C = 2piR ,i valoaiea apioximativ a lui pi egal
cu S,141S9.
7. Sciie(i o instiuc(iune PBP caie calculeaz valoaiea
absolut a vaiiabilei $uistan(a ,i stocheaz iezultatul n
vaiiabila $uistan(a_net.

<titlu>Nouulul S:
Cieaiea foimulaieloi BTNL<titlu>
<titlu>Scopuii<titlu>
- nv(a(i s pioiecta(i foimulaie BTNL eficiente ,i u,oi ue
utilizat
- nv(a(i s ciea(i foimulaie BTNL caie incluu contioale ce
accept text ,i op(iuni ale utilizatoiului
- nv(a(i s sciie(i piogiame PBP caie ob(in accesul la
uatele ce piovin uin foimulaiele BTNL
Najoiitatea piogiameloi PBP folosesc foimulaie BTNL
pentiu a pielua uatele ue la utilizatoi ,i pentiu a afi,a
iezultatele calculeloi, n cauiul acestui mouul, ve(i nv(a s
ciea(i foimulaie BTNL caie peimit piogiameloi
uumneavoasti BTNL s inteiac(ioneze cu utilizatoiul.
<titlu>No(iuni funuamentale ue pioiectaie a
foimulaieloi<titlu>
0nii piogiamatoii expeiimenta(i cieu c pot ueteimina
instantaneu ,i n mou intuitiv aspectul ,i mouul ue
func(ionaie ale oiiciui foimulai BTNL. n loc ue a pioiecta
un foimulai BTNL, ace,ti piogiamatoii pui ,i simplu l
cieeaz. Beseoii, iezultatele uescalific pieten(iile acestoi
piogiamatoii cu piiviie la cuno,tin(ele ob(inute intuitiv.
Nulte foimulaie ue pioast calitate au fost cieate n acest
mou.
0 metou mai bun, att pentiu piogiamatoiii
neexpeiimenta(i, ct ,i pentiu cei cu expeiien(, este
pioiectaiea foimulaiului anteiioi cieiii acestuia, n faza ue
pioiectaie, lua(i n consiueiaie metoue alteinative ue
aianjaie a foimulaiului ,i, n cele uin uim, iuentifica(i o
stiuctui mai bun uect celelalte. Bac nu a(i avut n veueie
alteinative, nu ave(i nici un motiv ue a cieue c stiuctuia
foimulaiului uumneavoasti este mai bun uect alte
stiuctuii posibile. Ca ataie, uac ,sii(i" peste faza ue
pioiectaie ve(i ob(ine foimulaie ue calitate infeiioai.

<titlu>Pioiectaiea unui foimulai<titlu>
0 moualitate opoitun ue pioiectaie a unui foimulai const
n utilizaiea hitiei ,i a cieionului. 0 tabl ue culoaie alb
sau neagi este o solu(ie ,i mai bun, uac uispune(i ue a,a
ceva. n cazul n caie piefeia(i instiumentele automatizate,
pute(i folosi un euitoi BTNL ue tip WYSIWYu. Toate aceste
metoue ue pioiectaie au un element comun: se pot ,teige cu
u,uiin( o paite sau chiai toate elementele ue

S9

pioiectaie existente ,i se poate ielua activitatea ue la
nceput. Ceicetii efectuate asupia activit(ii ue pioiectaie
au aitat c pioiectan(ii cu expeiien( o iau ue la nceput
mai fiecvent uect cei neexpeiimenta(i; ace,tia uin uim
tinu s se cantoneze nti-o stiuctui ini(ial ,i nu iau n
consiueiaie alteinative poten(ial mai bune.
Piincipalele saicini n pioiectaiea unui foimulai BTNL le
constituie alegeiea contioaleloi BTNL caie voi fi incluse n
foimulai, selectaiea amplasamentului contioaleloi ,i
alegeiea eticheteloi acestoia. Cu toate acestea, pioiectaiea
nu este un pioces ue tip ,pas cu pas", caie poate fi paicuis n
mou mecanic. Este un pioces bazat pe opoitunism, ceea ce
nseamn c moualitatea optim ue a paicuige uimtoaiea
etap ue pioiectaie este ,n oiice mou posibil". Iat cteva
instiuc(iuni elementaie pentiu pioiectaiea foimulaieloi
BTNL:
- Alege(i contioale caie sunt auecvate pentiu categoiia ue
uate pe caie le auun ,i pentiu inteiac(iunile pe caie le
fuinizeaz. Sec(iunea uimtoaie, caie explic fiecaie contiol
BTNL n paite, v va ajuta s pioceua(i astfel.
- Etichetii cu claiitate fiecaie contiol, astfel nct
utilizatoiul s n(eleag func(ia acestuia.
-n msuia posibilit(iloi, alinia(i etichetele ,i maiginile uin
stnga ale contioaleloi. Stiuctuia unui foimulai bine
pioiectat este asemntoaie cu aceea a unei pagini ue ziai,
fiinu compus uinti-o seiie ue coloane n cauiul cioia
fiecaie element vizual este aliniat cu elementele plasate
ueasupia, iespectiv ueuesubtul su. Pute(i ob(ine acest tip
ue stiuctui folosinu tabele BTNL sau eticheta BR.
- uiupa(i contioalele coielate ,i sepaia(i fiecaie asemenea
giup ue celelalte giupuii piin ncoipoiaiea ue spa(ii albe n
stiuctuia uumneavoasti.
- Secven(a ue contioale uin foimulai tiebuie s fie
asemntoaie cu oiuinea n caie le va manipula utilizatoiul.
In caz contiai, utilizatoiul va fi obligat s piaiu timp
navignu ue la un contiol la altul.
Este impoitant s ie(ineii c acestea sunt uoai nuiumii,
nu ieguli. Nefiinu ieguli, pute(i opta pentiu nclcaiea loi,
uin cnu n cnu. Acest luciu nu constituie o gie,eal, att
timp ct sunte(i convins c iezultatul nclciii unei
iecomanuii este supeiioi iezultatului iespectiii acesteia.
Be exemplu, iecomanuiile pot iepiezenta nuiumii
contiauictoiii nti-o anumit situa(ie, n acest caz, sunte(i
obligat s nclc(i o iecomanuaie sau alta.
Pentiu a ueteimina uac o vaiiant ue pioiectaie este
supeiioai alteia, este util s ceie(i pieiea unui utilizatoi.
Bac nici un utilizatoi nu v poate fi ue ajutoi, ob(ine(i
asisten(a unui alt piogiamatoi, n cel mai iu caz, stiuui(i-
v s v pune(i uumneavoasti n,iv n iolul unui utilizatoi
al foimulaiului, ntieba(i pe utilizatoi sau pe nlocuitoiul
acestuia uac foimulaiul este clai, u,oi ue utilizat ,i eficient,
n caz afiimativ, este momentul s tiece(i mai uepaite ,i s
ciea(i efectiv foimulaiul BTNL.

4u

<titlu>Cieaiea unui foimulai BTNL<titlu>
Bac piocesul ue pioiectaie este bazat pe opoitunism,
piocesul ue cieaie a unui foimulai BTNL poininu ue la
stiuctuia uumneavoasti este mai uiiect. Nai nti, ciea(i
schi(a BTNL elementai, caie va con(ine contioalele uin
foimulaiul uumneavoasti. Apoi, ncoipoia(i contioalele n
stiuctui; n paiticulai, un foimulai BTNL tiebuie s
incluu un buton ue expeuieie pe caie utilizatoiul execut
clic pentiu a tiimite seiveiului uatele uin foimulai.
Beoaiece o singui pagin BTNL poate con(ine mai multe
foimulaie, pute(i iepeta ue mai multe oii etapele
inteimeuiaie ale acestui pioces. Sub-sec(iunile uimtoaie
uetaliaz piocesul ue cieaie a unui foimulai BTNL.

<titlu>Cieaiea stiuctuiii BTNL<titlu>
Stiuctuia BTNL pe caie o folosi(i pentiu a incluue un
foimulai nu este ueloc uifeiit, ue fapt, ue cea folosit
pentiu incluueiea unei pagini BTNL obi,nuite. Be exemplu,
iat o stiuctui caiacteiistic:

<BTNL>
<BEAB>
<TITLE>Titlul paginii este inseiat aici<TITLE>
<BEAB>
<B0BY>
Con(inutul paginii sau al foimulaiului este inseiat aici
<B0BY>
<BTNL>

In inteiioiul coipului unei pagini BTNL caie con(ine un
foimulai pute(i folosi oiice etichet BTNL obi,nuit. Pentiu
a uesciie foimulaiul n sine, folosi(i eticheta F0RN, caie aie
uimtoaiea foim elementai:

<F0RN NETB0B="metoua" ACTI0N="uil">

Atiibutul NETB0B al etichetei F0RN poate lua una uin
valoiile uET sau P0ST. Pentiu moment, specifica(i
ntotueauna valoaiea P0ST. Atiibutul ACTI0N specific
auiesa 0RL a sciiptului PBP caie pielucieaz uatele auunate
piin inteimeuiul foimulaiului. Auiesa 0RL poate fi o auies
complet, caie incluue piotocolul, numele gazuei ,i calea ue
acces, iespectiv o auies pai(ial, caie specific o loca(ie
ielativ la loca(ia paginii cuiente, ntie eticheta F0RN si
eticheta sa F0RN coiespunztoaie, plasa(i contioalele
foimulaiului.

<Sfatul specialistului>
ntiebaie:Cnu cieez un foimulai BTNL, cnu tiebuie s
specific uET n loc ue P0ST ca valoaie a atiibutului
NETB0B.
Rspuns: Ca nceptoi, este mai bine s folosi(i n mou
consecvent metoua P0ST, ueoaiece alegeiea ntie metouele
uET si P0ST este uestul ue complicat. <Sfatul
specialistului>

41

Ca iegul empiiic, mul(i piogiamatoii folosesc uET pentiu
foimulaie caie execut o cutaie sau o inteiogaie, iespectiv
P0ST pentiu foimulaie caie actualizeaz o baz ue uate sau
un fi,iei. Bou uezavantaje ale metouei uET sunt acelea c
impune o limit asupia cantit(ii ue uate caie pot fi tiimise
sciiptului ue pieluciaie ,i c tiansfei uate piin ata,aiea
,iiuiiloi couificate la auiesa 0RL a sciiptului ue pieluciaie.
Astfel, uatele tiimise piin metoua uET pot fi vizualizate ue
ctie utilizatoi. 0n avantaj al metouei uET este acela c
utilizatoiii pot inseia semne ue caite n iezultatele unei
inteiogii sau ale unei cutii caie folose,te metoua uET,
uai nu pot executa aceea,i opeia(ie n cazul unei inteiogii
sau al unei cutii caie folose,te metoua P0ST. Besigui,
utilizatoiii pot inseia un semn ue caite la pagina caie
con(ine un foimulai ce folose,te metoua P0ST; iezultaele
sunt cele unue nu se poate inseia semnul ue caite.

<titlu>ncoipoiaiea contioaleloi<titlu>
Aceast sub-sec(iune uesciie uou contioale elementaie pe
caie le ve(i folosi fiecvent: caseta cu text ,i butonul ue
expeuieie. In sec(iunea uimtoaie, ve(i afla mai multe
uespie contioalele pe caie le pute(i folosi n constiuc(ia
foimulaieloi BTNL.
0 caset cu text peimite utilizatoiului s tasteze infoima(ii
caie pot fi apoi tiimise unui sciipt PBP. Casetele cu text sunt
fiecvent folosite pentiu a ob(ine uate piecum numele
utilizatoiului, auiesa sa po,tal sau auiesa ue e-mail. Pentiu
a ciea o caset cu text, sciie(i o etichet BTNL caie aie
uimtoaiea foim elementai:

<INP0T TYPE="TEXT" NANE="text">

Atiibutul NANE atiibuie casetei cu text un nume, astfel nct
con(inutul su s fie accesibil unui sciipt PBP. Numele pe
caie l atiibui(i unui contiol tiebuie s fie unic n cauiul
foimulaiului ,i tiebuie s iespecte iegulile pentiu
uenumiiea vaiiabile!oi PBP, cu excep(ia faptului c numele
nu tiebuie s nceap cu simbolul uolaiului. Cu alte cuvinte,
numele tiebuie s nceap cu o litei si nu tiebuie s con(in
alte caiacteie n afaia liteieloi, a cifieloi ,i a caiacteieloi ue
sublinieie; n paiticulai, numele nu tiebuie s con(in spa(ii.
BTNL nu aie o etichet INP0T, ueci nu nceica(i s
combina(i o etichet INP0T cu o asemenea etichet.
0n buton ue expeuieie peimite utilizatoiului s tiimit
seiveiului con(inutul unui foimulai. Fiecaie foimulai BTNL
tiebuie s aib un buton ue expeuieie. Pentiu a ciea un
buton ue expeuieie, sciie(i o etichet BTNL caie aie
uimtoaiea foim elementai:

<INP0T TYPE="S0BNIT" vAL0E="text">

Atiibutul vAL0E specific textul caie tiebuie s apai pe
supiafa(a butonului ue expeuieie.

42

Iat un foimulai BTNL complet, caie incluue casete cu text
ce pieiau numele ,i auiesa ue e-mail a utilizatoiului:

<BTNL>
<BEAB>
<TITLE>Numele ,i auiesa ue e-mail ale
utilizatoiului<TITLE>
<BEAB>
<B0BY>
<F0RN NETB0B="P0ST" ACTI0N="phpinfo.php">
<BS> Numele ,i auiesa ue e-mail ale utilizatoiului<BS>
<BR>Nume:
<BR><INP0T TYPE="TEXT" NANE="numele_utilizatoiului">
<BR>Auiesa ue e-mail:
<BR><INP0T TYPE="TEXT" NANE="auiesa_email">
<BR>
<BR><INP0T TYPE="S0BNIT" vAL0E="Tiimite uatele">
<F0RN>
<B0BY>
<BTNL>

0bseiva(i utilizaiea eticheteloi BR pentiu alinieiea
eticheteloi ,i a contioaleloi, piecum ,i numele atiibuite
contioaleloi ue tip caset cu text. Cnu utilizatoiul execut
clic pe butonul ue expeuieie, uatele intiouuse ue utilizatoi
sunt tiimise sciiptului phpinfo.php. Ilustia(ia altuiat
piezint aspectul foimulaiului.

<imagine> Numele ,i auiesa ue e-mail ale utilizatoiului
Nume
Auiesa ue e-mail:
Tiimite uatele <imagine>

<titlu>Luciul cu foimulaie multiple<titlu>
In inteiioiul coipului unei pagini BTNL se pot incluue mai
multe foi-
mulaie. Bac pioceua(i astfel, nu uita(i s inseia(i o etichet
<F0RN> anteiioi etichetei <F0RN> a uimtoiului
foimulai. Biowseiul utilizatoiului va face inuigestie uac
supiapuneii foimulaie nti-o pagin.
Iat un exemplu simplu ue pagin caie con(ine mai multe
foimulaie:

<BTNL>
<BEAB>
<TITLE>Numele ,i auiesa ue e-mail ale
utilizatoiului<TITLE>
<BEAB>
<B0BY>
<F0RN NETB0B="P0ST" ACTI0N="phpinfo.php">
<BS> Numele ,i auiesa ue e-mail ale utilizatoiului<BS>
<BR>Nume:
<BR><INP0T TYPE="TEXT" NANE="numele_utilizatoiului">
<BR>Auiesa ue e-mail:
<BR><INP0T TYPE="TEXT" NANE="auiesa_email">
<BR>
<BR><INP0T TYPE="S0BNIT" vAL0E="Tiimite uatele">
<F0RN>
<F0RN NETB0B="P0ST" ACTI0N="phpinfo.php">
<BS> Numeiele ue telefon ,i fax ale utilizatoiului<BS>
<BR>Numi ue telefon:
<BR><INP0T TYPE="TEXT" NANE="telefon">
<BR>Fax
<BR><INP0T TYPE="TEXT" NANE="fax">
<BR>
<BR><INP0T TYPE="S0BNIT" vAL0E="Tiimite uatele">
<F0RN>
<B0BY>
<BTNL>

Cnu utilizatoiul execut clic pe butonul ue expeuieie, uatele
incluse n cmpuiile foimulaiului caie con(ine butonul pe
caie s-a executat clic sunt tiimise la seivei. Astfel, seiveiul
piime,te fie un nume ,i o auies ue e-mail, fie numeiele ue
telefon ,i ue fax, nu con(inutul tutuioi celoi patiu cmpuii.
<Sfatul specialistului>
ntiebaie: Bac aptituuinile mele n mateiie ue BTNL sunt
ieuuse sau ,iuginite". 0nue mi pot ievizui cuno,tin(ele ue
BTNL pentiu a putea ciea foimulaie.
Rspuns:Pentiu a nv(a sau pentiu a iecapitula elementele
funuamentale ale limbajului BTNL, v piopun caitea lui
Wenuy Willaiu BTNL: uhiuul nceptoiului (0sboine,
2uuu)*. Ca ,i alte volume uin seiia uhiuul nceptoiului,
caitea lui Wenuy con(ine teste ,la minut" ,i pioiecte caie
contiibuie la consoliuaiea mateiialului citit. Be asemenea,
caitea mai con(ine mouule iefeiitoaie la }avaSciipt ,i foile
ue stil n cascau, tehnologii caie pot fi utilizate eficient
altuii ue PBP. <Sfatul specialistului>

<Test ,la minut">
- Caie sunt atiibutele caie tiebuie specificate n eticheta
F0RN.
- Caie este contiolul pe caie tiebuie s-1 con(in toate
foimulaiele BTNL.
- Caie este eticheta BTNL folosit pentiu cieaiea unei
casete cu text. <Test ,la minut">
<Not>
Sau oiicaie uintie excelentele ci(i ue BTNL tiauuse ,i
publicate ue Euituia Teoia. -NT. Rspunsuii la test:
- Atiibutele NETB0B ,i ACTI0N
- Butonul ue expeuieie
- INP0T<Not>

44

<Titlu>Pioiectul S-1: vizualizaiea cmpuiiloi unui
foimulai<titlu>
n cauiul acestui pioiect, ve(i nv(a s vizualiza(i uatele
tiansmise ue un foimulai BTNL ctie sciiptul su ue
pieluciaie. ve(i uescopeii utilitatea acestei caiacteiistici
atunci cnu tiebuie s uepana(i un foimulai BTNL sau un
sciipt ue pieluciaie.

<Scopuiile pioiectului>
- Exeisaiea cieiii unui sciipt PBP si a unui foimulai BTNL
- Capacitatea ue a sesiza iezultatele expeuieiii unui foimulai
BTNL<Scopuiile pioiectului>

<titlu>Pas cu pas<titlu>
1 . Plasa(i uimtoiul sciipt BTNL nti-un fi,iei uenumit p-S-
1 .php ,i ncica(i acest fi,iei n seiveiul uumneavoasti
PBP:

<.php
Fi,ieiul p-S-1.php
.>

2. Plasa(i uimtoaiea pagin BTNL nti-un fi,iei uenumit p-
S-1 .html ,i ncica(i acest fi,iei n seiveiul uumneavoasti
PBP, plasnuu-l n acela,i catalog ca ,i fi,ieiul p-S-1 .php:

<BTNL>
<BEAB>
<TITLE>Numele ,i auiesa ue e-mail ale
utilizatoiului<TITLE>
<BEAB>
<B0BY>
<!--Fi,ieiul p-S-1.html -->
<F0RN NETB0B="P0ST" ACTI0N="p-S-1.php">
<BS> Numele ,i auiesa ue e-mail ale utilizatoiului<BS>
<BR>Nume:
<BR><INP0T TYPE="TEXT" NANE="numele_utilizatoiului">
<BR>Auiesa ue e-mail:
<BR><INP0T TYPE="TEXT" NANE="auiesa_email">
<BR>
<BR><INP0T TYPE="S0BNIT" vAL0E="Tiimite uatele">
<F0RN>
<B0BY>
<BTNL>

S. 0iienta(i un biowsei Web spie auiesa 0RL a fi,ieiului
caie con(ine foimulaiul BTNL. Intiouuce(i numele unui
utilizatoi ,i auiesa sa ue e-mail, apoi executa(i clic pe
butonul ue expeuieie.
4. Cnu sciiptul ue pieluciaie p-S-1 .php este executat,
acesta afi,eaz un iapoit amnun(it cu piiviie la staiea
seiveiului PBP. n sec(iunea intitulat ,vaiiabile PBP",
pute(i gsi infoima(ii cu piiviie la cele uou contioale ue tip
caset cu text, n spe( nume_utilizatoi ,i auiesa_email, a,a
cum se poate veuea n ilustia(ia uimtoaie. Remaica(i
valoiile intiouuse ue utilizatoiul foimulaiului.

4S

<imagine>
PBP vaiiables
vaiiable value
PBP_SELF bmccaityphpmouule-uSpioiect-S-1a.php
BTTP_P0ST_vARSusei_name" Bill NcCaity
BTTP_P0ST_vARSemail_auuiess"
mccaitybosboine.com <imagine>

<titlu>Cieaiea contioaleloi foimulaiului<titlu>
n sec(iunea anteiioai, a(i nv(at s ciea(i contioalele ue
tip caset cu text ,i buton ue expeuieie, n sec(iunea ue fa(
,i n cea uimtoaie, ve(i extinue iepeitoiiul contioaleloi
uumneavoasti astfel nct s incluue(i ntieaga gam ue
contioale uisponibile.

<titlu>Cieaiea caseteloi cu text peisonalizate<titlu>
Sec(iunea pieceuent a piezentat sintaxa elementai pentiu
cieaiea unei casete cu text. Cu toate acestea, BTNL
fuinizeaz numeioase atiibute suplimentaie caie v peimit
s mouifica(i aspectul ,i compoitamentul unei casete cu text.
Iat sintaxa complet pentiu cieaiea unei casete cu text:

<INP0T TYPE="TEXT" NANE="text" SIE="numai"
NAXLENuTB="numai" value="text">

Atiibutele TYPE ,i NANE sunt obligatoiii; celelalte atiibute
sunt op(ionale. Atiibutul SIE, caie este uat sub foima unui
numi ue caiacteie, stabile,te uimensiunea vizibil a casetei
cu text; atiibutul NAXLENuTB specific numiul maxim ue
caiacteie pe caie utilizatoiul aie peimisiunea ue a le tasta.
valoaiea atiibutului NAXLENuTB o poate uep,i pe aceea a
atiibutului SIE, n caie caz con(inutul contiolului uefileaz
spie uieapta atunci cnu utilizatoiul a intiouus SIE
caiacteie. Atiibutul vAL0E constituie o valoaie caie este
afi,at ini(ial n caseta cu text.
<Sugestie>
Este impoitant s cunoa,te(i aspectul ,i mouul ue
compoitaie a casetei cu text ,i a altoi contioale BTNL ue
foimulai. Pioiectul caie apaie la sfi,itul acestei sec(iuni v
va ofeii posibilitatea ue a acumula expeiien( n cieaiea
contioaleloi ,i n luciul cu acestea.<sugestie>

46

<titlu>Cieaiea ue supiafe(e cu text<titlu>
Ca o caset cu text, o supiafa( cu text peimite unui
utilizatoi s intiouuc text. Cu toate acestea, o supiafa( cu
text poate peimite utilizatoiului s intiouuc mai multe linii
ue text, n timp ce o caset cu text peimite utilizatoiului s
intiouuc o singui linie. Iat sintaxa pentiu cieaiea unei
supiafe(e cu text:

<TEXTAREA NANE="text" R0WS="numai" C0LS="numai"
WRAP="wiap">

Atiibutele NANE ,i R0WS sunt obligatoiii; atiibutele C0LS
,i WRAP sunt op(ionale. Atiibutul R0WS specific numiul
liniiloi ue text vizibile n supiafa(a cu text; ueoaiece
supiafa(a ue text uefileaz uup ce a fost umplut,
utilizatoiul poate intiouuce linii suplimentaie. Atiibutul
C0LS specific numiul coloaneloi ue text vizibile n
supiafa(a cu text; ueoaiece supiafa(a cu text se ueiuleaz
sau se nf,oai uup ce s-a umplut, utilizatoiul poate
intiouuce linii mai lungi. Atiibutul WRAP specific manieia
ue nf,uiaie a textului n inteiioiul supiafe(ei cu text.
Atiibutul WRAP poate avea uimtoaiele valoii:
<valoaie>0ff<valoaie> <uesciieie> nf,uiaiea
cuvinteloi la sfi,itul liniei ue text este
uezactivat;utilizatoiul poate intiouuce caiacteie ue sfi,it
ue linie pentiu a foi(a nf,uiaiea liniiloi<uesciieie>
<valoaie>viitual<valoaie> <Besciieie>liniile pai
nf,uiate, uai caiacteiistica ue nf,uiaie a liniiloi nu este
tiimis la seivei<uesciieie>
<valoaie>physical<valoaie> <uesciieie> nf,uiaiea
cuvinteloi la sfi,itul liniei ue text este activat<uesciieie>
<valoaie>soft<valoaie> <uesciieie>Iuentic cu
viitual<uesciieie>
<valoaie>haiu<valoaie> <uesciieie> Iuentic cu
physical<uesciieie>
0 etichet TEXTAREA tiebuie combinat cu o etichet
TEXTAREA. 0iice text caie apaie ntie etichete va fi
piezentat uiept con(inut ini(ial al contiolului ue tip supia-
fa( cu text.

<titlu>Cieaiea caseteloi cu paiol<titlu>
Bac o aplica(ie impune unui utilizatoi s intiouuc o paiol,
pute(i ciea o caset cu text n acest scop. Totu,i, cnu
utilizatoiul intiouuce paiola, oiice peisoan aflat n
apiopieie poate vizualiza paiola, situa(ie caie uuce la o
posibil bie, ue secuiitate, n loc ue a se folosi o caset cu
text pentiu intiouuceiea ue infoima(ii confiuen(iale, tiebuie
s folosi(i o caset cu paiol. Pentiu a ciea o caset cu
paiol, folosi(i aceea,i sintax ca ,i cea utilizat pentiu
cieaiea unei casete cu text, cu excep(ia faptului c specifica(i
PASSW0RB (paiol) n loc ue TEXT ca valoaie a atiibutului
TYPE:

<INP0T TYPE="PASSW0RB" NANE="text" SIE="numai"
NAXLENuTB="numai" vAL0E="text">

Atiibutele unei casete cu paiol au aceea,i semnifica(ie ca ,i
acelea ale unei casete cu text.

47

<titlu>Cieaiea caseteloi ue valiuaie<titlu>
Pentiu uate caie pot avea numai una uin uou valoii, cum ai
fi ,poinit" sau ,opiit", caseta ue valiuaie este contiolul iueal.
Be exemplu, caseta ue valiuaie este un contiol auecvat
pentiu a peimite utilizatoiului s opteze pentiu liviaiea
iapiu a unui colet. In cazul n caie caseta ue valiuaie
coiespunztoaie este valiuat, coletul va fi liviat mai iapiu;
n caz contiai, coletul se va ueplasa cu mijloacele obi,nuite.
Pentiu a ciea o caset ue valiuaie, folosiii uimtoaiea
sintax:

<INP0T TYPE="CBECKB0X" NANE="text" CBECKEB
vAL0E="text">

Atiibutul TYPE este obligatoiiu; atiibutele NANE, CBECKEB
,i vAL0E sunt op(ionale. Bac atiibutul CBECKEB apaie,
caseta ue valiuaie va fi selectat n mou piestabilit; n caz
contiai, caseta ue valiuaie nu este selectat ini(ial. Atiibutul
vAL0E specific valoaiea caie este tiimis seiveiului n
cazul n caie caseta ue valiuaie este selectat; uac atiibutul
nu este specificat, se va tiimite valoaiea on (activat).

<titlu>Cieaiea butoaneloi iauio<titlu>
Ca ,i casetele ue valiuaie, butoanele iauio pot avea numai
una uin uou valoii. Cu toate acestea, butoanele iauio sunt
oiganizate n giupuii, iai la un moment uat poate fi activat
un singui buton iauio uin cauiul unui giup; toate celelalte
tiebuie s fie uezactivate. Butoanele iauio sunt utile pentiu a
peimite unui utilizatoi s aleag uinti-o seiie ue alteinative
mutual exclusive. Be exemplu, pute(i folosi un set ue tiei
butoane iauio pentiu a peimite utilizatoiului s specifice
tipul ue ambalaj pentiu cauou: fi ambalaj, cu ambalaj
simplu sau sofisticat Numai unul uintie cele tiei butoane
iauio poate fi activat; la un loc, setul ue butoane iauio ofei
utilizatoiului o tiipl op(iune.
Pentiu a ciea un buton iauio, folosi(i uimtoaiea sintax:

<INP0T TYPE="RABI0" NANE="text" CBECKEB
vAL0E="text">

Re(ine(i c aceasta este aceea,i sintax folosit pentiu
cieaiea unei casete ue valiuaie, cu ueosebiiea c atiibutul
TYPE aie valoaiea RABI0 n locul valoiii CBECKB0X.
Atiibutele unui buton iauio au aceea,i semnifica(ie ca ,i
acelea ale unei casete ue valiuaie. Totu,i, atiibutul NANE
este obligatoiiu pentiu butoanele iauio, chiai uac este
op(ional pentiu casetele ue valiuaie. To(i membiii unui set
ue casete ue valiuaie piezint aceea,i valoaie a atiibutului
NANE.

<titlu>Cieaiea ue selec(ii<titlu>
0 selec(ie este un meniu caie uefileaz, ue unue utilizatoiul
poate alege una sau mai multe op(iuni. Be exemplu, nti-o
selec(ie pot fi enumeiate gainituiile pentiu pizza, astfel
nct un utilizatoi s poat selecta oiice combina(ie ue
gainituii pe caie o uoie,te. Pentiu a ciea o selec(ie, folosi(i
uimtoaiea sintax:

48

<SELECT NANE="text" N0LTIPLE SIE="numai"> etichetele
0PTI0N se inseieaz aici<SELECT>

Eticheta SELECT este folosit n combina(ie cu eticheta
SELECT, ntie cele uou etichete este inclus o seiie ue
etichete 0PTI0N.
nti-o etichet SELECT, numai atiibutul NANE este
obligatoiiu. Atiibutul N0LTIPLE aiat c utilizatoiul poate
alege mai multe op(iuni men(innu apsat tasta CTRL ,i
executnu clic pe acestea. n absen(a atiibutului N0LTIPLE,
utilizatoiul poate selecta o singui op(iune. Bac specifica(i
atiibutul N0LTIPLE, tiebuie s specifica(i ,i un atiibut
NANE, caie atiibuie un nume ue tablou ca nume al
contiolului. Be exemplu, un contiol ue tip selec(ie caie
peimite utilizatoiului s aleag mai multe gainituii pentiu
ueseit tiebuie uenumit folosinu sintaxa gainituia, nu
gainituia.
Compoitaiea unei selec(ii caie peimite o singui op(iune
este echivalent cu aceea a unui set ue butoane iauio, uai
aspectul unei selec(ii este uifeiit ue acela al unui set ue
butoane iauio, a,a cum ve(i veuea n pioiectul ue la sfi,itul
acestei sec(iuni. Atiibutul SIE specific numiul op(iuniloi
vizibile. Piin utilizaiea unui buton ue ueiulaie n jos sau a
unei baie ue uefilaie, utilizatoiul poate manipula selec(ia
pentiu a ob(ine accesul la iestul op(iuniloi ,i a alege uintie
acestea.
A,a cum s-a aitat, o selec(ie este asociat cu una sau mai
multe op(iuni. Pentiu a ciea o op(iune caie uimeaz a fi
utilizat n cauiul unei selec(ii, folosi(i uimtoaiea sintax:

<0PTI0N SELECTEB vAL0E="text">con(inutul op(iunii este
inseiat aici<0PTI0N>

Eticheta 0PTI0N este combinat cu o etichet 0PTI0N.
Textul uintie aceste etichete este cunoscut sub numele ue
con(inut al op(iunii. Con(inutul op(iunii apaie n contiolul
SELECT. Nul(i piogiamatoii BTNL omit eticheta 0PTI0N,
caz n caie textul op(iunii se extinue pn la uimtoaiea
etichet 0PTI0N sau SELECT. Totu,i, s-ai putea ca acest
mou ue utilizaie s nu fie compatibil cu veisiunile ulteiioaie
ale stanuaiuului BTNL.
Ambele atiibute ale etichetei 0PTI0N sunt op(ionale. Bac
apaie atiibutul vAL0E, valoaiea sa este tiimis seiveiului
atunci cnu este selectat op(iunea asociat; n caz contiai,
con(inutul op(iunii este tiimis la seivei. Atiibutul SELECTEB
aiat c op(iunea coiespunztoaie este selectat ini(ial; n
caz contiai, op(iunea iespectiv nu este selectat ini(ial.

<titlu<Cieaiea cmpuiiloi ascunse<titlu>
0neoii este util cieaiea a,a-numiteloi cmpuii ascunse.
valoiile cmpuiiloi ascunse sunt tiimise la seivei altuii ue
valoiile altoi contioale; cu toate acestea, utilizatoiul nu aie
posibilitatea ue a vizualiza sau manipula valoiile cmpuiiloi
ascunse.
Cmpuiile ascunse se utilizeaz fiecvent n cauiul unei seiii
ue foimulaie. Be exemplu, uatele intiouuse ue utilizatoi n
piimul foimulai uin seiie pot fi necesaie

49
n foimulaiele ulteiioaie, n loc ue a ueteimina utilizatoiul
s intiouuc uatele n fiecaie foimulai, uatele pot fi stocate
nti-un cmp ascuns, cieat ,i ini(ializat ue sciiptul caie
pielucieaz piimul foimulai. Astfel, utilizatoiul este scutit
ue o munc suplimentai ,i sunt pientmpinate eventualele
eioii, caie ai fi putut apiea uac utilizatoiul nu ai fi
intiouus acelea,i uate n foimulaiele ulteiioaie. Pentiu a
ciea un cmp ascuns, folosi(i uimtoaiea sintax:

<INP0T TYPE="BIBBEN" NANE="text" vAL0E="text">

Numai atiibutele TYPE ,i NANE sunt obligatoiii; cu toate
acestea, contiolul este piactic inutil n absen(a atiibutului
vAL0E, a ciui valoaie este tiimis n mou automat la seivei
n momentul expeuieiii foimulaiului.

<Sfatul specialistului>
ntiebaie: Am vzut foimulaie BTNL caie peimit unui
utilizatoi s expeuieze seiveiului con(inutul unui fi,iei. Cum
se poate iealiza acest luciu.
Rspuns: Pute(i peimite utilizatoiului s aleag un fi,iei ,i
apoi s tiimit seiveiului con(inutul fi,ieiului cienu un
contiol ue tip fi,iei, piin inteimeuiul uimtoaiei sintaxe:
<INP0T TYPE="FILE" NANE="nume" ACCEPT="tip_mime"
vAL0E="text">
Atiibutul TYPE este singuiul obligatoiiu; cu toate acestea, n
geneial, apaie ,i atiibutul NANE. Atiibutul vAL0E specific
un nume ue fi,iei piestabilit. Atiibutul ACCEPT specific
foimatul con(inutului fi,ieiului. Pot fi inuicate mai multe foi-
mate, uai fiecaie foimat tiebuie sepaiat ue vecinii si piin
inteimeuiul unei viigule. Foimatul este specificat folosinu
un cou NINE (Nultipuipose Inteinet Nail Extensions).
Tabelul uimtoi uesciie foimatele folosite cel mai fiecvent:

<tabel>
*Tip NINE
*Tip ue uate
*Extensii ue fi,iei

!"##$%&"'%()*+,-.&-$
*0%&1(,(2' 3.&-$
*.$,

*"##$%&"'%()*+,4(15
*0%&1(,(2' 6(15
*5(&7 5('

*"##$%&"'%()*(&'-'8,'1-"+
*9%)"1:
*-.-

*"##$%&"'%()*#52
*;5(<- ;&1(<"'
*#52

*"##$%&"'%()*#(,',&1%#'
*=(,',&1%#'
*"%7 -#,7 #,

*"##$%&"'%()*##'
*0%&1(,(2' =(4-1=(%)'
*##'

*"##$%&"'%()*>%#
*?"'- &(+#1%+"'- @) 2(1+"' AB=
*>%#

*"C5%(*+%5%
*0C,%&"$ B),'1C+-)' ?%D%'"$ B)'-12"&- E0B?BF
*+%57 +%5%

*"C5%(*.84"G
*6%)5(4, ;C5%( H(1+"' E6;IF
*4"G

*%+"D-*D%2
*J(+#C,-1G- K1"#L%&,B)'-1&L")D- H(1+"' EKBHF
*D%2

*%+"D-*M#-D
*N(%)' =L('(D1"#L%&, 3.#-1' K1(C# EN=3KF
*M#-D7 M#D7 M#-

Su

*%+"D-*OBHH
*O"DD-5 B+"D- H(1+"' EOBHF
* '%27 '%22

*'-.'*PO0Q
*PO0Q
*L'+7 L'+$

*'-.'*#$"%)
*O-.' ,%+#$C
*'.'

*'-.'*1%&L'-.'
*R%&L O-.' H(1+"' EROHF
*1'2

*G%5-(*+#-D
*S-&G-)T: G%5-(
*+#D7 +#G7 +#-7 +#-D

*G%5-(*UC%&V'%+-
*S-&G-)T: G%5-(
* U'7 +(G

*G%5-(*.8+,G%5-(
*S-&G-)T: G%5-(
* "G%
<tabel>

Eticheta F0RN ue uelimitaie tiebuie s aib P0ST ca valoaie
a atiibutului su NETB0B. Be asemenea, tiebuie s incluu
un atiibut ENCTYPE cu valoaiea multipait foim-uata. Iat
sintaxa pe caie tiebuie s o folosi(i:
<F0RN NETB0B="P0ST" ENCTYPE="multipaitfoim-
uata" ACTI0N="uil">
Este posibil ca seiveiul uumneavoasti s nu fie configuiat
astfel nct s accepte fiecaie tip NINE. Consulta(i-v cu
auministiatoiul seiveiului uumneavoasti, pentiu a
ueteimina uac tipul ue uate pe caie uoii(i s-1 folosiii este
acceptat n mou coiespunztoi.<sfatul specialistului>

<Test ,la minut">
- Sciieii un piogiam BTNL caie cieeaz o caset cu text cu
l(imea egal cu 4u ue caiacteie ,i caie peimite
utilizatoiului s intiouuc maximum 8u ue caiacteie.
- Sciie(i un piogiam BTNL caie cieeaz o supiafa( cu text
avnu l(imea egal cu 8u ue coloane, nl(imea ue 1u
inuuii ,i caie accept nf,uiaiea textului la sfi,itul liniei
ue text.
- Sciie(i un piogiam BTNL caie cieeaz o caset ue valiuaie
selectat ini(ial ,i caie tiimite seiveiului valoaiea ,la mou".
- Sciie(i un piogiam BTNL caie cieeaz o peieche ue
butoane iauio caie v peimit s specifica(i valoaiea
,aueviat" sau valoaiea ,fals".<Test ,la minut">

<titlu>Pioiect S-2 0 caset BTNL aglomeiat<titlu>
n acest pioiect, ve(i ciea o caset aglomeiat, un foimulai
BTNL caie con(ine o vaiietate ue contioale. ve(i putea
manipula contioalele si vizualiza uatele pe caie le tiimit
acestea unui sciipt ue pieluciaie asociat foimulaiului. Acest
pioiect este impoitant pentiu a uobnui o n(elegeie soliu a
fieciui contiol folosit n foimulaiele BTNL, inclusiv
aspectul ,i compoitamentul acestuia.
<not>
Rspunsuii la test:
- <INP0T TYPE="TEXT" NANE="xxxx" SIE='4u"
NAXLENuTB="8u">
- <TEXTAREA NANE="xxxx" C0LS="8u" R0WS='1u"
WRAP="physical"><TEXTAREA>
- <INP0T TYPE="CBECKB0X" NANE="xxxx" CBECKEB
vAL0E="la moua">
- <INP0T TYPE="RABI0" NANE="xxxx"
vAL0E="aueviat"> ,i<INP0T TYPE="RABI0" NANE="
xxxx " vAL0E="fals"><not>

S1

<Scopuiile pioiectului>
- Acumulaiea ue expeiien( n cieaiea contioaleloi caie
alctuiesc un foimulai BTNL
- Piezentaiea aspectului ,i compoitamentului contioaleloi
caie alctuiesc un foimulai
- Fuinizaiea unui mou ue a exeisa utilizaiea atiibuteloi ,i
valoiiloi asociate eticheteloi BTNL caie piecizeaz
contioalele uinti-un foimulai<Scopuiile pioiectului>

<titlu>Pas cu pas<titlu>
1. Plasa(i uimtoiul sciipt PBP nti-un fi,iei uenumit p-S-
2.php ,i ncica(i acest fi,iei n seiveiul uumneavoasti
PBP:

<.php
Fi,ieiul p-S-2.php
phpinfo()
.>

2. Plasa(i uimtoaiea pagin BTNL nti-un fi,iei uenumit p-
S-2.html ,i ncica(i acest fi,iei n seiveiul uumneavoasti
PBP, plasnuu-l n acela,i catalog ca ,i fi,ieiul p-S-2.php:

<BTNL>
<BEAB>
<TITLE>u caseta aglomeiat<TITLE>
<BEAB>
<B0BY>
<!--Fi,ieiul p-S-2.html -->
<F0RN NETB0B="P0ST"ACTI0N="p-S-2.php">
<BS>u caseta ocupat<BS>
<BR> Caseta cu text:
<BR><INP0T TYPE ="TEXT"NANE="caseta_cu_text">
<BR>
<BR> Caseta cu paiola:
<BR>INP0T TYPE="PASSW0RB ,
NANE="caseta_cu_paiola">
<BR>
<BR>Supiafa(a cu text:
<BR>
<TEXTARE NANE="Supiafa(a_cu_text" R0WS="S"
C0LS="4u" WRAP="physical">
Aici intiouuce(i auiesa uumneavoasti.
<TEXTARE>
<BR>
<BR>Casete ue valiuaie:
<BR> INP0T TYPE="CBECKB0X"
NANE="mic_uejun">Nic uejun
<BR> INP0T TYPE="CBECKB0X"
NANE="uejun">Bejun
<BR> INP0T TYPE="CBECKB0X"
NANE="cina">Cina
<BR>
<BR>Butoane iauio:
<BR><INP0T TYPE="RABI0" NANE="butoniauio"
vAL0E="fiancez" CBECKEB>Fiancez
<BR><INP0T TYPE="RABI0" NANE="butoniauio"
vAL0E="italian" CBECKEB>Italian
<BR><INP0T TYPE="RABI0" NANE="butoniauio"
vAL0E="iusesc" CBECKEB>Rusesc
<BR>
<BR>

S2

Selecta(i:
<BR><SELECT N0LTIPLE NANE="select">
<0PTI0N SELECTEB vAL0E="bianza">Bianza
<0PTI0N vAL0E="Extia">Bianz Extia
<0PTI0N SELECTEB vAL0E="peppeioni">Peppeioni
<0PTI0N vAL0E="cina(i">Cina(i
<0PTI0N vAL0E="salam">Salam
<0PTI0N vAL0E="ciupeici">Ciupeici
<SELECT>
<BR>
<BR>
<INP0T TYPE="BIBBEN" NANE="comoaia"
vAL0E="inestimabil">
<BR>
<BR>
<BR><INP0T TYPE="S0BNIT" vAL0E="Tiimite uatele">
<F0RN>
<B0BY>
<BTNL>

S. 0iienta(i un biowsei Web spie auiesa 0RL a fi,ieiului
caie con(ine foimulaiul BTNL. Imaginea afi,at pe ecian ue
biowseiul uumneavoasti tiebuie s fie asemntoaie celei
piezentate n figuia S-1. Examina(i contioalele uin foimulai,
obseivnu aspectul acestoia. Exeisa(i utilizaiea
contioaleloi, pentiu a veuea caie sunt tipuiile ue
compoitament posibile, n momentul n caie sunte(i
mul(umit ue valoiile pe caie le-a(i specificat, executa(i clic
pe butonul ue expeuieie pentiu a tiimite seiveiului uatele
uin foimulai.
<figuiaS-1>
0 caset aglomeiat caie con(ine un foimulai BTNL ce
incluue contioale.

A Busy Box
Text Box:
Ny name
Passwoiu Box:
************
Text Aiea:
Ny auuiess

Check Boxes:
Bieakfast
Lunch
Binnei

Rauio Buttons:
Fiench
Italian
Russian

Select
Cheese
Extia Cheese
Peppeioni
Sausage

Senu the Bata
<figuia S-1>

4. Cnu sciiptul ue pieluciaie p-S-2.php este executat,
afi,eaz un iapoit amnun(it cu piiviie la staiea seiveiului
PBP. n sec(iunea intitulat ,vaiiabile PBP", pute(i gsi
infoima(ii cu piiviie la valoiile vaiiabileloi folosite n
foimulai, a,a cum se poate veuea n figuia S-2.

<figuia S-2>
valoiile cmpuiiloi tiimise seiveiului ue ctie caseta
aglomeiat caie con(ine un foimulai BTNL ce incluue
contioale.

PBP vaiiables
<vaiiable> PBP_SELF<vaiiable> <value>
bmccaityphpmouule-uSpioject-S-2a.php<value>
<vaiiable>BTTP_P0ST_vARStextbox"
<vaiiable><value>my name<value>
<vaiiable>BTTP_P0ST_vARSpasswoiubox"<vaiiable><
value>my passwoiu<value>
<vaiiable>BTTP_P0ST_vARStextaiea"<vaiiable><value
>my auuiess<value>
<vaiiable>BTTP_P0ST_vARSbieakfast"<vaiiable><valu
e>on<value>
<vaiiable>BTTP_P0ST_vARSiauiobutton"<vaiiable><va
lue> fienck<value>
<vaiiable>BTTP_P0ST_vARSselect"<vaiiable><value>A
iiayu cheese 1 peppeioni <value>
<vaiiable>BTTP_P0ST_vARStieasuie"<vaiiable><value
> inestimable<value>
<figuia S-2>

S. Acum, cnu pute(i veuea caie este mouul ue func(ionaie a
piogiamului BTNL oiiginal, mouifica(i-l pentiu a ueteimina
efectul uifeiiteloi atiibute si valoii. Be exemplu, elimina(i
atiibutul N0LTIPLE uin selec(ie ,i nceica(i s alege(i mai
multe gainituii pentiu pizza. Pentiu ca mouificiile auuse
piogiamului BTNL s fie vizibile n biowseiul uumnea-
voasti, nu uita(i s actualiza(i pagina uup ce a(i mouificat-
o ,i a(i ncicat-o n seivei.

<titlu>Alte no(iuni iefeiitoaie la expeuieiea unui
foimulai<titlu>
In sec(iunile anteiioaie ale acestui mouul, a(i nv(at mouul
ue cieaie a foimulaieloi BTNL caie pot tiimite uate unui
seivei. In aceast sec(iune, ve(i nv(a mai multe uespie
piocesul ue expeuieie a foimulaieloi. In paiticulai, ve(i
nv(a s folosi(i o imagine n locul unui buton ue expeuieie,
s ciea(i un buton ue ieini(ializaie, s ciea(i o pagin caie
con(ine mai multe foimulaie si s tiansfeia(i infoima(ii unui
sciipt piin inteimeuiul auiesei 0RL a sciiptului.

SS

<titlu>0tilizaiea unei imagini pentiu expeuieiea
uateloi<titlu>
Aspectul unui buton ue expeuieie este monoton ,i obi,nuit.
Bac aspectul paginii uumneavoasti este impoitant, pute(i
folosi o imagine n locul unui buton ue expeuieie. 0
asemenea imagine se nume,te, uneoii, buton imagine. Cnu
un utilizatoi execut clic pe un buton imagine, uatele uin
foimulai sunt tiimise seiveiului, ca ,i cum utilizatoiul ai fi
executat clic pe un buton ue expeuieie.
Pentiu a ciea un buton imagine folosi(i uimtoaiea sintax:

<INP0T TYPE="INAuE" SRC="uil" NANE="text"
ALIuN="alinieie">

Atiibutele SRC ,i TYPE sunt obligatoiii; celelalte atiibute
sunt op(ionale. Atiibutul SRC ueteimin auiesa 0RL a
fi,ieiului caie con(ine imaginea ce va fi afi,at. Atiibutul
NANE atiibuie un nume contiolului ue tip buton imagine.
Atiibutul ALIuN poate lua oiicaie uin valoiile top (sus),
miuule (la mijloc) sau bottom (jos) ,i specific mouul ue
alinieie a butonului imagine ielativ la textul nconjuitoi.
<Sugestie>
Pioiectul uat la sfi,itul acestei sec(iuni incluue un buton
imagine. Efectua(i acest pioiect, pentiu a v familiaiiza cu
aspectul ,i mouul ue compoitaie a butoaneloi
imagine.<sugestie>

S4

<titlu>Cieaiea unui buton ue ieini(ializaie<titlu>
0neoii, este folositoi ca utilizatoiul s poat executa clic pe
un buton caie s ,teaig toate infoima(iile incluse nti-un
foimulai. 0n asemenea buton se nume,te buton ue
ieini(ializaie. Pentiu a ciea un buton ue ieini(ializaie,
folosi(i uimtoaiea sintax:

<INP0T TYPE="RESET" vAL0E="text">

0nicul atiibut obligatoiiu este TYPE. Atiibutul op(ional
vAL0E specific textul caie va apiea pe supiafa(a
butonului ue ieini(ializaie; uac atiibutul este omis, pe
buton va sciie ,Reset".

<titlu>Cieaiea unei pagini caie con(ine mai multe
foimulaie<titlu>
A,a cum s-a aitat, pute(i incluue mai multe foimulaie nti-o
singui pagin BTNL. Fiecaie foimulai tiebuie s-,i aib
piopiiul su buton sau piopiia sa imagine pentiu
expeuieiea uateloi. 0n buton ue ieini(ializaie uin cauiul
unui foimulai se aplic numai foimulaiului caie l con(ine.
Iat un exemplu ue pagin caie con(ine mai multe
foimulaie:

<BTNL>
<BEAB>
<TITLE>0 pagin cu mai multe foimulaie<TITLE>
<BEAB>
<B0BY>

SS

<!--Piimul foimulai -- >
<F0RN NETB0B="P0ST"
ACTI0N="piocesaie-foimulai-client.php">
<BR>Numele clientului:
<BR>INP0T TYPE ="TEXT" NANE="nume_client">
<BR><INP0T TYPE="S0BNIT"
vAL0E="Tiimite foimulaiul clientului">
<F0RN>
<!-- Al uoilea foimulai -- >
<F0RN NETB0B="P0ST"
ACTI0N="piocesaie-foimulai-fuinizoi.php">
<BR>Numele fuinizoiului:
<BR>INP0T TYPE ="TEXT" NANE="nume_fuinizoi">
<BR><INP0T TYPE="S0BNIT"
vAL0E="Tiimite foimulaiul fuinizoiului">
<F0RN>
<B0BY>
<BTNL>


Pagina con(ine uou foimulaie: unul pentiu expeuieiea
infoima(iiloi afeiente clientului ,i altul pentiu expeuieiea
infoima(iiloi iefeiitoaie la fuinizoi. Fiecaie foimulai ,i aie
piopiiul su buton ue expeuieie. n func(ie ue butonul ue
expeuieie pe caie s-a executat clic, la seivei va fi tiimis, n
veueiea pieluciiii, numele unui client sau al unui fuinizoi.
n acest exemplu, fiecaie foimulai uispune ue piopiiul su
sciipt ue pieluciaie. Cu toate acestea, se poate folosi un
singui sciipt pentiu pieluciaiea uateloi piovenite ue la
fiecaie foimulai. 0n asemenea sciipt poate ueteimina uac
lucieaz cu un foimulai ue client sau cu unul ue fuinizoi, n
func(ie ue cmpuiile ,i valoiile pe caie le piime,te.

<titlu>0tilizaiea unei legtuii pentiu a fuiniza uate unui
sciipt<titlu>
In afai ue a expeuia unui sciipt uatele uinti-un foimulai
piin inteimeuiul cmpuiiloi uin foimulai, pute(i expeuia
uate cu ajutoiul auiesei 0RL a sciiptului, a,a cum se
specific n atiibutul ACTI0N al etichetei F0RN. Pentiu
aceasta, ata,a(i la sfi,itul auiesei 0RL un semn al ntiebiii
(.) ,i apoi incluue(i o seiie ue peiechi nume-valoaie cu
uimtoaiea foim:

nume1=valoaie1nume2=valoaie2numeS=valoaieS

Exemplul incluue numai tiei peiechi nume-valoaie; cu toate
acestea, pute(i incluue oiicte asemenea peiechi uoii(i, n
func(ie ue limita impus ue biowseiul utilizatoiului.

S6
<Sfatul specialistului>
ntiebaie: Bac uoiesc s tiimit unui sciipt, piin inteimeuiul
auiesei sale 0RL, caiacteie speciale piecum un semn al ntiebiii, un
semn egal sau un ampeisanu. Nu se cieeaz confuzie n acest mou.
Rspuns: Ba. Pentiu a func(iona coiect, un ,ii tiebuie s fie couificat
0RL. Pentiu a couifica 0RL un ,ii caie con(ine o inteiogaie,
caiacteiele speciale se nlocuiesc cu echivalentele loi hexazecimale,
pieceuate ue un simbol piocent (). Pentiu uetalii, consulta(i
uocumentul Request foi Comments (RFC) 17S8, uisponibil la auiesa
www.ifc.net. 0nele uintie cele comune caiacteie speciale ,i echiva-
lentele loi couificate 0RL sunt piezentate n tabelul S-1.
Be exemplu, foima couificat 0RL a ,iiului "la mul(i ani!" este 22la
mul(i ani2122.<sfatul specialistului>

Auiesa 0RL iezultant se nume,te ,ii ue inteiogaie ,i nu poate
con(ine spa(ii. Bac uoii(i s tiimite(i un spa(iu ca paite a unui ,ii ue
inteiogaie, tiimite(i n locul spa(iului un semn plus (+). Iat un
exemplu ue ,ii ue inteiogaie caie couific numele autoiului acestei
ci(i:

http:www.osboine.comseaich.cgi.authoi=Bill+NcCaity

<tabelul S-1>Couificiile 0RL ale caiacteieloi speciale fiecvent
utilizate
*Caiactei special
*Echivalent couificat 0RL

*.
*2e

*.
*Se

*
*Se

*
*7e

*+
*2b

*
*2c

*
*2f

*:
*Sa

*;
*Sb

*<
*Sc

*=
*Su

*>
*Se

*
*Sb

*\
*Sc

*
*Su

*-
*Sf

*
*7b

*
*7c


*
*7u

*tab
*u9

*Spa(iu
*2u

*!
*21

S7

*
*22

*
*2S

*$
*24

*
*2S

*
*26

*
*27

*(
*28

*)
*29

*
*4u

*
*6u
<tabelul S-1>

<Test ,la minut">
- Sciie(i un piogiam BTNL caie cieeaz un buton imagine cu numele
,Stait!"
- Sciie(i un piogiam BTNL caie cieeaz un buton ue ini(ializaie cu
numele ,Reluaie ue la nceput".
- Sciie(i un ,ii ue inteiogaie caie tiimite vaiiabila culoaie ,i valoaiea
io,u seiveiului ue la auiesa www.osboine.comtest. <Test ,la
minut">

<titlu>Pioiect S-S: 0 pagin BTNL caie con(ine mai multe
foimulaie<titlu>
n cauiul acestui pioiect, ve(i ciea o pagin BTNL caie con(ine uou
foimulaie. 0n foimulai aie un buton ue expeuieie, iai cellalt aie un
buton imagine. Ambele foimulaie uispun ue butoane ue
ieini(ializaie. valoiile atiibuteloi ACTI0N ale celoi uou foimulaie
incluu ,iiuii ue inteiogaie couificate 0RL tiimise seiveiului n
momentul expeuieiii foimulaiului.
<titlu>Scopuiile pioiectului<titlu>
- Bobnuiiea ue expeiien( n cieaiea ,i utilizaiea paginiloi caie
con(in mai multe foimulaie
- Piezentaiea aspectului ,i a compoitamentului butoaneloi imagine
,i a butoaneloi ue ieini(ializaie
- Piezentaiea ,iiuiiloi ue inteiogaie

<titlu>Pas cu pas<titlu>
1. Plasa(i uimtoiul sciipt PBP nti-un fi,iei uenumit p-S-S.php ,i
ncica(i acest fi,iei pe seiveiul uumneavoasti PBP:

<.php
Fi,ieiul p-S-S.php
phpinfo()
.>

<Not>
Rspunsuii la test:
- <INP0T TYPE="INAuE" SRC="xxx" NANE="Stait!">
- <INP0T TYPE="RESET" vAL0E="Reluaie ue la nceput">
- http:www.osboine.comtest.culoaie=iosu <not>

S8

2. Plasa(i uimtoaiea pagin BTNL nti-un fi,iei uenumit p-S-S.html
si ncica(i acest fi,iei n seiveiul uumneavoasti PBP, plasnuu-l n
acela,i catalog ca ,i fi,ieiul p-S-2.php:
<BTNL>
<BEAB>
<TITLE>Alte uetalii uespie expeuieiea foimulaieloi<TITLE>
<BEAB>
<B0BY>
<!--Fi,ieiul p-S-S.html -->
<BS>Alte uetalii uespie expeuieiea foimulaieloi<BS>
<F0RN NETB0B="P0ST"
ACTI0N=p-S-S.php.mouule=Spioject=S">
<BR>Numele clientului:
<BR><INP0T TYPE="TEXT" NANE="N0NELE_CLIENT0L0I">
<BR>
<BR><INP0T TYPE="RESET" vAL0E="$teige uatele uin foimulai">
<BR>
<BR><INP0T TYPE="S0BNIT" vAL0E="Tiimite foimulaiul">
<F0RN>
<BR>
<F0RN NETB0B="P0ST" ACTI0N=p-S-S.php">
<BR>Numele fuinizoiului
<BR><INP0T TYPE="TEXT" NANE="numele_fuinizoiului">
<BR>
<BR><INP0T TYPE="RESET" vAL0E="$teige foimulaiul">
<BR>
<BR><INP0T TYPE="INAuE" SRC="button.gif">
<F0RN>
<B0BY>
<BTNL>

Apoi, uescica(i fi,ieiul button.gif uin situl Web afeient acestei ci(i
si ncica(i-l n seiveiul uumneavoasti PBP, plasnuu-l n acela,i
catalog ca ,i sciiptul PBP si fi,ieiul BTNL.
S. 0iienta(i un biowsei Web spie auiesa 0RL a fi,ieiului caie con(ine
foimulaiul BTNL. Biowseiul uumneavoasti va afi,a uate
asemntoaie celoi piezentate n figuia S-S. Completa(i ambele
cmpuii text ,i executa(i clic pe unul uin butoanele ue ieini(ializaie
(Cleai the Foim). Remaica(i c butonul ue ieini(ializaie ,teige numai
cmpuiile uin foimulaiul caie con(ine butonul iespectiv.
4. Executa(i clic pe butonul ue expeuieie. Biowseiul uumneavoasti
tiebuie s afi,eze ceva similai cu ilustia(ia piezentat n figuia S-4.
S. 0bseiva(i mouul n caie peiechile nume-valoaie uin ,iiul ue
inteiogaie apai n lista vaiiabileloi PBP, altuii ue valoaiea cupiins
n caseta cu text.
6. Folosi(i butonul Back al biowseiului pentiu a ieveni la pagina cu
mai multe foimulaie. Executa(i clic pe butonul imagine. Re(ine(i
uifeien(ele uintie ilustia(ia afi,at ue biowsei si cea piezentat n
figuia S-4. Remaica(i mouul n caie un sciipt PBP poate executa
pieluciaiea mai multoi foimulaie, piin examinaiea vaiiabileloi ,i a
valoiiloi acestoia.

S9
<figuia S-S> Pagina caie con(ine mai multe foimulaie
Noie on Suhmithng Fofms - Niciosoft Inteinet Exploiei
Noie on Submitting Foims
Customei Name: }oe Customei
<buton> Cleai the Foim<buton>
<buton>Submit the Foim<buton>

Suppliei Name: }ane Suppliei
<buton> Cleai the Foim<buton>
<buton negiu> This is an image Button: Click it<buton negiu>
<figuia S-S>

<figuia S-4>valoiile cmpuiiloi tiimise seiveiului ue ctie pagina
caie con(ine mai multe foimulaie.
Niciosoft Inteinet Exploiei
PBP vaiiables
<vaiiable> PBP_SELF<vaiiable><value>bmccaityphpmouule-
uSpioject-S-Sa.php<value>
<vaiiable>
BTTP_uET_vARS,mouule"<vaiiable><value>S<value>
<vaiiable>
BTTP_uET_vARS,pioject"<vaiiable><value>S<value>
<vaiiable>
BTTP_P0ST_vARS,customei_name"<vaiiable><value>}oe
Customei<value>
<figuia S-4>

6u
<Test ue evaluaie>
1. Sciie(i o etichet BTNL F0RN caie ,i tiimite uatele unui sciipt
situat la auiesa http:www.osboine.comcgi-bintest.
2. Sciie(i un piogiam BTNL caie cieeaz un contiol cu mai multe
linii, uenumit auiesa, pentiu intiouuceie ue text. Contiolul tiebuie s
poat con(ine S inuuii a 8u ue caiacteie fiecaie.
S. Sciie(i un piogiam BTNL caie cieeaz un meniu ueiulant uenumit
culoaie, caie con(ine piincipalele culoii substiactive, n spe( io,u,
galben ,i albastiu. Face(i ue a,a maniei nct meniul s accepte o
singui selec(ie. Specifica(i culoaiea io,ie ca op(iune piestabilit.
4. Sciie(i un piogiam BTNL pentiu cieaiea unui set ue butoane iauio
uenumite uimensiune, caie peimit utilizatoiului s aleag uin
uimtoaiele valoii: mic, meuiu ,i maie.
S. Sciieii un piogiam BTNL pentiu cieaiea unui foimulai caie ,i
tiimite uatele la auiesa www.uev.null. Foimulaiul tiebuie s con(in
un cmp ascuns uenumit sciipt, caie contine meniul cu valoii.


61

<titlu>Nouulul 4: Accesul la uate<titlu>
<titlu>Scopuii<titlu>
- nv(a(i s ob(ine(i accesul la uatele scalaie tiansmise unui
piogiam PBP ue ctie un foimulai BTNL
- nv(a(i s folosi(i constiuc(ia PBP echo pentiu a tiimite uate ue
ie,iie la biowsei
- nv(a(i s constiui(i ,iiuii caie incluu valoiile vaiiabileloi PBP
- nv(a(i s ob(ine(i accesul la valoiile vaiiabileloi ue meuiu

Najoiitatea piogiameloi PBP folosesc foimulaiele BTNL pentiu a
ob(ine uate ue intiaie, n cauiul acestui mouul, ve(i nv(a s ob(ine(i
accesul la uatele tiimise unui piogiam PBP piin inteimeuiul unui
foimulai BTNL. Be asemenea, ve(i nv(a s ob(ineii accesul la uatele
stocate n vaiiabilele ue meuiu pe paite ue client, iespectiv pe paite
ue seivei. vaiiabilele ue meuiu stocheaz infoima(ii utile uespie
biowseie, seiveie Web ,i PBP.
<titlu>0b(ineiea ,i utilizaiea uateloi ue la un foimulai<tittlu>
Beoaiece PBP a fost conceput ca limbaj ue sciipting pentiu Web,
faciliteaz accesul la vaiiabilele tiansmise ue ctie foimulaiele
BTNL. n mouulul pieceuent, a(i nv(at s ciea(i foimulaie BTNL.
Iat un foimulai BTNL simplu, caie incluue o caset cu text:
<BTNL>
<BEAB><TITLE>0n foimulai BTNL simplu <TITLE>
<BEAB>
<B0BY>
<F0RN NETB0B="P0ST" ACTI0N="phpinfo.php">
<BR>Tasta(i ni,te uate:
<BR><INP0T TYPE="TEXT" NANE="uate">
<BR><BR><INP0T TYPE="S0BNIT">
<F0RN>
<B0BY>
<BTNL>

0bseiva(i c atiibutul NANE al etichetei INP0T atiibuie casetei cu
text numele uate.
n cazul n caie ciea(i un sciipt uenumit phpinfo.php, caie execut
func(ia phpinfo() ,i o stocheaz n acela,i uosai ca ,i foimulaiul, piin
expeuieiea foimulaiului se ceie sciiptului s afi,eze un iapoit caie
inuic staiea seiveiului ue aplica(ie PBP. n

62

sec(iunea intitulat ,vaiiabile PBP", iapoitul ue staie piezint
valoiile vaiiabileloi uin foimulai. Figuia 4-1 piezint iapoitul ue
staie asociat foimulaiului BTNL simplu.
Re(ineii c iapoitul ue staie aie uou coloane. Numele vaiiabilei
asociate contiolului uin foimulai, n spe( uate, apaie n coloana uin
stnga, nglobat n textul BTTP_P0ST_vARS"uate". valoaiea
vaiiabilei, caie iepiezint textul intiouus ue utilizatoi, este
piezentat n coloana uin uieapta. n figui, valoaiea vaiiabilei o
constituie textul "acestea sunt uatele".

<figuia 4-1>0n iapoit ue staie PBP, caie inuic valoaiea vaiiabilei
uin foimulai uenumit uate

PBP vaiiables
<vaiiabila>PBP_SELF<vaiialila><value>bmccaityphpmouule-
u4phpinfo.php<value>
<vaiiabila> BTTP_P0ST_vARS,uate" <vaiialila> <value> this is
uata <value>

<Sfatul specialistului>
ntiebaie: Constiuc(ia BTTP_P0ST_vARS"uate" este suspect ue
asemntoaie cu o iefeiin( la un tablou. Bespie ce este voiba.
Rspuns: Bac a(i obseivat paiantezele uiepte ,i v-a(i ieamintit c
ele sunt asociate cu tablouiile PBP, atunci sunte(i o peisoan extiem
ue atent. Bac nu, paicuige(i iapiu sec(iunea intitulat ,valoii
scalaie ,i tablouii" uin Nouulul 2.
In momentul expeuieiii unui foimulai, numele ,i valoiile vaiiabileloi
incluse n foimulai sunt inseiate n tabloul BTTP_P0ST_vARS. Cheia
fieciui element al tabloului este numele unei vaiiabile uin foimulai;
valoaiea elementului uin tablou ueteimin valoaiea vaiiabilei. Bac
uoii(i, pute(i ob(ine accesul la vaiiabilele foimulaiului folosinu
tabloul BTTP_P0ST_vARS; cu toate acestea, ve(i nv(a n cuinu
moualit(i mult mai convenabile ue acces la vaiiabilele unui
foimulai. <Sfatul specialistului>

<titlu>Tiimiteiea uateloi ue ie,iie ctie biowsei<titlu>
Besigui, nu putem pietinue ca utilizatoiii s citeasc un iapoit ue
staie PBP pentiu a afla valoiile vaiiabileloi. Nai mult, esen(a
piogiamiii const n capacitatea ue a manipula valoiile, nu ue a le
vizualiza pui ,i simplu, n aceast sub-sec(iune ve(i nv(a s folosi(i
constiuc(ia echo pentiu a tiimite uate ue ie,iie la un biowsei, iai n
sec(iunea uimtoaie ve(i nv(a s constiui(i ,iiuii caie nglobeaz
valoiile vaiiabileloi.

6S

Piin combinaiea acestoi tehnici, pute(i afi,a valoiile vaiiabileloi PBP
nti-o foim pe caie utilizatoiii o pot n(elege cu u,uiin(. n
mouulele ulteiioaie, ve(i nv(a s manipula(i valoiile vaiiabileloi
astfel nct s pute(i constiui piogiame PBP utile. Constiuc(ia echo
v peimite s tiimite(i uate ue ie,iie ctie un biowsei. Constiuc(ia
aie o uiveisitate ue foime. lat-o, poate, pe cea mai util uintie ele:

echo sii_expiesie;

Aceast foim const numai uin cuvntul echo, uimat ue o expiesie
,ii ,i ue un caiactei punct ,i viigul caie ueteimin ncheieiea
instiuc(iunii. Efectul unei asemenea instiuc(iuni const n a tiimite
biowseiului valoaiea expiesiei ,ii. Be exemplu, instiuc(iunea

echo ,<BR><B>,Batele sunt elegante!<B>";

tiimite biowseiului textul ,Batele sunt elegante!". Re(ine(i c textul
incluue etichete BTNL, caie influen(eaz mouul ue foimataie a
texteloi, ueteiminnuu-le s apai pe o linie nou, sciise cu ajutoiul
caiacteieloi aluine.
0tilitatea acestei foime a constiuc(iei echo se bazeaz pe
numeioasele mouuii n caie pute(i sciie o expiesie ,ii. 0na uintie
cele mai utile moualit(i folose,te opeiatoiul ue concatenaie pentiu
uniiea a uou expiesii ,ii. Be exemplu, s lum n consiueiaie
uimtoaiea instiuc(iune echo:

echo ,Batele sunt" . , elegante!";

0peiatoiul ue concatenaie, iepiezentat piinti-un punct, ata,eaz a
uoua expiesie ,ii ia piima. Rezultatul este acela,i ca ,i cel geneiat ue
uimtoaiea instiuc(iune:

echo ,Batele sunt elegante!";

Constiuc(ia echo este oaiecum ciuuat, n sensul c este
asemntoaie cu o func(ie, uai nu este func(ie. Be exemplu, pute(i
folosi paianteze pentiu a uelimita expiesia ,ii ceiut ue constiuc(ia
echo:
Bac piefeia(i, pute(i fuiniza mai multe expiesii ,ii, fiecaie uin aceste
expiesii fiinu sepaiat ue vecinii si piin inteimeuiul unei viigule:

echo ,Batele sunt", , elegante!";

Cu toate acestea, nu pute(i folosi simultan paianteze ,i viigule, a,a
cum se pioceueaz n cazul func(iiloi autentice:

echo (,Batele sunt", ,elegante!"); Eioaie ue sintaxa

Nai mult, o expiesie fuinizat constiuc(iei echo nu tiebuie s fie o
expiesie ,ii, uac PBP ,tie s conveiteasc expiesia nti-un ,ii. Be
exemplu, uimtoaiea sintax este coiect:

echo ,unu plus unu este "; echo 2;

64

<Sfatul specialistului>
ntiebaie: S piesupunem c piogiamul meu PBP aie ca uate ue
ie,iie etichete BTNL, ceea ce ueteimin inteicalaiea unoi elemente
BTNL n componentele piogiamului meu. Exist vieo moualitate mai
convenabil ue a sciie constiuc(ii ue tip echo n aceast situa(ie.
Rspuns: Ba, exist, n loc ue a sciie
<.
echo "uatele mele ue ie,iie";
.>
pute(i sciie pui ,i simplu
<.= "uatele mele ue ie,iie" .>

PBP peicepe semnul egal ca o abievieie pentiu echo, atta vieme ct
semnul egal uimeaz imeuiat uup simbolul <.. Re(ine(i, totu,i, c
aceast caiacteiistic este uisponibil numai uac PBP a fost
compilat sau configuiat cu op(iunea ue configuiaie shoit_tags. Bac
uescopeii(i c nu pute(i folosi cu succes constiuc(ia <.=, solicit(i
auministiatoiului uumneavoasti ue sistem s activeze aceast
op(iune. <Sfatul specialistului>

<titlu>Constiuiiea ,iiuiiloi caie nglobeaz valoii ale
vaiiabileloi<titlu>

Pentiu a putea tiimite biowseiului valoiile vaiiabileloi, tot ce mai
ave(i ue nv(at este s constiui(i expiesii ,ii caie incluu valoiile
vaiiabileloi. Iat un sciipt simplu caie incluue o asemenea expiesie
<.php
$iaza = 2;
$pi = S.141S9;
$aiie = $pi*$iaza*$iaza;
echo ,Aiia ceicului este $aiie.";
.>

Cnu ngloba(i nti-un ,ii numele unei vaiiabile, piecum $aiie, PBP
nlocuie,te numele vaiiabilei cu valoaiea acesteia. Bac execut(i
sciiptul uat ca exemplu, ve(i veuea uatele ue ie,iie:

Aiia ceicului este 12.S66S6

0neoii, uoii(i s ob(ine(i la ie,iie numele unei vaiiabile, nu valoaiea
acesteia.n asemenea cazuii, inseia(i un caiactei backslash (\) n fa(a
numelui vaiiabilei. S consiueim uimtoiul exemplu:

<.php
$iaza = 2;
$pi = S.141S9;

6S

$aiie = $pi*$iaza*$iaza;
echo ,valoaiea vaiiabilei \ $aiia este $aiie.";
.>

Rezultatul acestui sciipt este:
valoaiea vaiiabilei $aiie este 12.S66S6

<Test ,la minut">
- Sciie(i o instiuc(iune echo caie sciie textul ,PBP este pentiu
piogiamatoiii ue calibiu."
- Sciie(i o instiuc(iune echo caie sciie valoaiea vaiiabilei $ciicum.
- Sciie(i o instiuc(iune echo caie sciie numele vaiiabilei $iauacina,
uimat ue un semn egal ,i ue valoaiea vaiiabilei. <Test ,la minut">

<titlu>Pioiectul 4-1 : Agenua cu auiese ue e-mail<titlu>
n cauiul acestui pioiect, ve(i sciie instiuc(iuni PBP piin caie se
ob(ine accesul la uatele ob(inute ue la un foimulai BTNL. Be
asemenea, ve(i sciie instiuc(iuni PBP caie tiimit uate BTNL la
biowseiul utilizatoiului.
Acest pioiect este piimul uinti-o seiie ue pioiecte, caie va culmina cu
o aplica(ie PBP caie fuinizeaz o agenu ue auiese accesibil piin
Web. ve(i nv(a mai multe uespie agenua ue auiese ,i uespie
func(ionalit(ile acesteia pe msui ce ve(i continua s lucia(i la
uezvoltaiea aplica(iei.

<titlu>Scopuiile pioiectului<titlu>
- Piezentaiea mouului ue sciieie a ,iiuiiloi PBP caie ncoipoieaz
uatele ob(inute ue la un foimulai BTNL
- Piezentaiea mouului ue utilizaie a instiuc(iunii PBP echo pentiu a
tiimite uate ctie biowseiul utilizatoiului

<titlu>Pas cu pas<titlu>
1. Plasa(i uimtoiul sciipt PBP nti-un fi,iei uenumit p-4-1 .html ,i
ncica(i acest fi,iei n seiveiul uumneavoasti PBP:

<BTNL>
<BEAB>
<TITLE>Pioiectul 4-1<TITLE>
<BEAB>
<B0BY>
<!--Fisieiul p-4-1.html -- >
<F0RN NETB0B="P0ST" ACTI0N="p-4-1.php">
<B2>Lista cu peisoane ue contact<B2>
<BR>Poiecla:

<nota>Rspunsuii la test:
- echo "PBP este pentiu piogiamatoiii ue calibiu."
- echo "valoaiea este Sciicum."; sau ceva similai
-echo "\$iauacina=$iauacina";<nota>

66
<BR><INP0T TYPE="TEXT" NANE="Poiecla">
<BR>
<BR>Nume complet:
<BR<<INP0T TYPE="TEXT" NANE="Numecomplet">
<BR>
<BR>Nemo:
<BR><TEXTAREA NANE="Nemo" R0WS="4" C0LS="4u"
WRAP="PBYSICAL">
<TEXTAREA>
<BR>
<BR>
<INP0T TYPE="S0BNIT">
<F0RN>
<B0BY>
<BTNL>

2. Plasa(i uimtoiul sciipt PBP nti-un fi,iei uenumit p-4-1.php ,i
ncica(i acest fi,iei n seiveiul uumneavoasti PBP, plasnuu-l n
acela,i catalog ca ,i fi,ieiul p-4-1 .html:

<.php
Fisieiul p-4-1.html
echo ,<BR>Poiecla=$Poiecla";
echo ,<BR>Nume_complet=$Nume_complet";
echo ,<BR>Nemo=$Nemo";
.>

S. 0iienta(i un biowsei Web spie auiesa 0RL a fi,ieiului caie con(ine
foimulaiul BTNL. Ecianul biowseiului tiebuie s fie asemntoi
celui piezentat n ilustia(ia uimtoaie. Intiouuce(i o poiecl, un
nume complet si o not scuit (memo). Executa(i clic pe butonul ue
expeuieie.
<imagine>
Contact list
Nickname bill
Full Name Bill NcCaity
Nemo Email: bmccaityosboin.com
Submit Queiy
<imagine>

4. n momentul executiii sciiptului ue pieluciaie, acesta ob(ine
accesul la cele tiei vaiiabile ale foimulaiului ,i tiimite biowseiului
utilizatoiului numele ,i valoiile vaiiabileloi, a,a cum se poate veuea
n ilustia(ia uimtoaie.
Nickname=bill
Fullname=Bill NcCaity
Nemo=Email: bmccaityosboine.com

67

<titlu>0b(ineiea ,i utilizaiea uateloi ue la o vaiiabil ue
meuiu<titlu>
n cazul n caie sunte(i familiaiizat cu sistemele ue opeiaie
0NIX sau NS-B0S, piobabil c sunte(i un cunosctoi al vaiiabileloi
ue meuiu. vaiiabilele ue meuiu sunt folosite pentiu stocaiea
op(iuniloi ,i a paiametiiloi caie peisonalizeaz meuiul ue aplica(ie.
Aplica(iile pot ob(ine accesul la valoiile vaiiabileloi ue meuiu ,i ,i
pot ajusta compoitamentul n consecin(. Be exemplu, calea ue
cutaie a piogiameloi NS-B0S este stocat nti-o vaiiabil ue meuiu
uenumit PATB. In geneial, comenzile sistemeloi ue opeiaie sunt
folosite pentiu a configuia vaiiabilele ue meuiu ,i pentiu a stabili
valoiile acestoia. Cu toate acestea, unele aplica(ii manipuleaz
valoiile vaiiabileloi ue meuiu.
Att seiveiul Web Apache, ct ,i seiveiul ue aplica(ie PBP
folosesc vaiiabile ue meuiu pentiu a piezenta infoima(ii ue staie.
0nele uintie cele mai impoitante vaiiabile ue meuiu folosite ue
Apache ,i PBP sunt iezumate n tabelul 4-1. Numeioase seiveie Web,
altele uect Apache, fuinizeaz o paite uin aceste vaiiabile ue meuiu
sau chiai pe toate.
Nulte uintie aceste vaiiabile ieflect caiacteiisticile ceieiii
BTTP caie a solicitat execu(ia PBP. Pute(i vizualiza toate vaiiabilele
ue meuiu uisponibile pentiu piogiamele PBP piin invocaiea func(iei
phpinfo() ,i vizualizaiea uateloi ue ie,iie geneiate ue aceasta. Figuia
4-2 piezint o poi(iune a iapoitului ue staie piezentat ue func(ia
phpinfo() caie iuentific numeioase vaiiabile ue meuiu.
<Tabelul 4-1 Impoitante vaiiabile ue meuiu PBP>
*vaiiabila ue meuiu
*Besciieie

*C0NTENT_LENuTB
*Lungimea, n octe(i, a coipului ceieiii.

*C0NTENT_TYPE
*Tipul NINE al uateloi uin coipul ceieiii.

*B0C0NENT_R00T
*Calea caie constituie iucina aiboielui catalogului cu uocumente al
seiveiului Web.

*uATEWA_INTERFACE
*veisiune a piotocolului CuI (Common uateway Inteiface) folosit ue
seiveiul Web.

*http_ACCEPT
*Con(inutul antetului BTTP Accept:.

*http_ACCEPT_CBARSET
*Con(inutul antetului BTTP Accept-Chaiset:, caie specific setuiile ue
caiacteie n(elese ue client.

*BTTP_ACCEPT_ENC0BINu
*Con(inutul antetului BTTP Accept-Encouing:, caie specific tipuiile
ue con(inutuii n(elese ue client.

*http_ACCEPT_LANu0AuE
*Con(inutul antetului BTTP Accept-Language:, caie specific
limbajele piefeiate ue client.

*http_C0NNECTI0N
*Con(inutul antetului BTTP Connection:, caie inuic op(iunile
solicitate ue client.

*http_B0ST
*Con(inutul antetului BTTP Bost:, caie inuic numele ue gazu,
folosit ue client la piezentaiea ceieiii.

*http_REFERER
*Auiesa 0RL a paginii Web caie a tiimis biowseiul clientului la
pagina cuient.

68

*BTTP_0SER_AuENT
*Con(inutul antetului BTTP usei-Agent, caie inuic biowseiul
clientului ,i veisiunea acestuia.

*PATB
*Calea ue execu(ie asociat cu meuiul seiveiului.

*Q0ER_STRINu
*$iiul ue inteiogaie, uac exist, caie a nso(it ceieiea.

*REN0TE_ABBR
*Auiesa IP a clientului.

*REN0TE_B0ST
*Numele ue gazu al clientului.

*REN0TE_P0RT
*Auiesa poitului clientului ue unue a poinit ceieiea.

*REQ0EST_NETB0B
*Netoua ue ceieie BTTP folosit; ue exemplu, uET, P0ST, P0T sau
BEAB.

*REQ0EST_0RI
*0RI folosit pentiu accesul la pagina cuient. 0RI este alctuit uinti-
un 0RL ,i un ,ii op(ional ue inteiogaie.

*SCRIPT_FILENANE
*Numele ue cale absolut al sciiptului cuient.

*SCRIPT_NANE
*Auiesa 0RL a sciiptului cuient.

*SERvER_ABNIN
*Auiesa ue e-mail a auministiatoiului seiveiului Web .

*SERvER_B0ST
*Numele ue gazu asociat seiveiului Web caie pielucieaz ceieiea.

*SERvER_P0RT
*Poit folosit ue seiveiul Web pentiu comunica(ii.

*SERvER_PR0T0C0L
*Numele ,i veisiunea piotocolului piin inteimeuiul ciuia s-a
executat ceieiea.

*SERvER_SIuNAT0RE
*$iiul caie iuentific veisiunea seiveiului Web ,i numele ue gazu
folosit pentiu pieluciaiea ceieiii.

*SERvER_S0FTWARE
*$iiul caie iuentific piogiamul seivei Web ,i veisiunea acestuia.
<tabel 4-1>

Pute(i ob(ine accesul la vaiiabila ue meuiu exact a,a cum pioceua(i
pentiu oiice alt vaiiabila PBP. Pui ,i simplu inseiii naintea
numelui vaiiabilei ue meuiu un simbol al uolaiului ($), astfel nct
numele s se confoimeze sintaxei PBP. Be exemplu, uimtoaiea
instiuc(iune echo tiimite biowseiului auiesa IP a clientului:

echo ,Auiesa IP a clientului este $REN0TE_ABBR.";

<figuia 4-2>
Batele ue ie,iie ale func(iei phpinfo(), caie afi,eaz numeioase
vaiiabile ue meuiu.
<titlu>Apache Enviionment<titlu>
<vaiiable>C0NTENT_LENuTB<vaiiable><value> 14<value>
<vaiiable>C0NTENT_TYPE<vaiiable><value>applicationx-www-
foim-uilencoueu<value>
<vaiiable>B0C0NENT_R00T<vaiiable><value>homehttphtlm<
value>
<vaiiable>BTTP_ACCEPT<vaiiable><value>**<value>
<vaiiable> BTTP_ACCEPT_ENC0BINu <vaiiable> <value>
gzip,ueflate <value>
<vaiiable> BTTP_ACCEPT_LANu0AuE<vaiiable><value>en-
us<value>
<vaiiable> BTTP_C0NNECTI0N<vaiiable><value>Keep-
Alive<value>
<figuia 4-2>


69

<Sfatul specialistului>
ntiebaie: 0 bun paite uin infoima(iile piezentate n tabelul 4-1
pai neclaie. Caie este utilitatea acestoi vaiiabile ue meuiu.
Rspuns: Bac nu cunoa,te(i piotocolul BTTP n amnun(ime, s-ai
putea s nu uescopeii(i piea multe utilit(i pentiu aceste vaiiabile ue
meuiu. Cu toate acestea, o impoitant utilizaie comun o constituie
autentificaiea clientului. Piin accesul la vaiiabila ue meuiu
REN0TE_ABBR, pute(i ueteimina auiesa IP a clientului. Inti-un
mouul ulteiioi, ve(i nv(a s testa(i valoaiea unei vaiiabile ,i s
mouifica(i compoitamentul unui sciipt n func(ie ue valoaiea
iespectiv. Be exemplu, pute(i folosi acest pioceueu pentiu a excluue
ceieiile caie piovin uin afaia unui anumit set ue auiese IP, cum ai fi
cele caie iepiezint o anumit ie(ea. Astfel, aplica(ia uumneavoasti
poate ueveni mai iezistent la atacuiile hackeiiloi caie nceaic s
cieeze o bie, n sistemul ue secuiitate.
0 alt utilizaie impoitant a vaiiabileloi ue meuiu const n ocoliiea
limitiiloi impuse ue un anumit biowsei. vaiiabila ue meuiu
BTTP_0SER_AuENT iuentific biowseiul client ,i veisiunea acestuia.
0n sciipt PBP poate testa valoaiea acestei vaiiabile ue meuiu ,i
tiimite numai uate ue ie,iie acceptabile pentiu veisiunea
biowseiului aflat n uz.<sfatul specialistului>

<Test ,la minut">
- Caie este numele vaiiabilei PBP caie con(ine numele gazuei
seiveiului Web.
- Caie este numele vaiiabilei PBP caie con(ine numele gazuei
clientului.<test"la minut>

<tilu>Pioiect 4-2: vizualizaiea vaiiabileloi ue meuiu<titlu>
n cauiul acestui pioiect, ve(i vizualiza valoiile a numeioase vaiiabile
ue meuiu PBP.
<titlu>Scopuiile pioiectului<titlu>
- Piezentaiea mouului ue vizualizaie a vaiiabileloi ue meuiu
- Piezentaiea mouului ue utilizaie a instiuc(iunii echo pentiu a
tiimite biowseiului uate ueb ie,iie

<titlu>Pas cu pas<titlu>
1. Plasa(i uimtoiul sciipt PBP nti-un fi,iei uenumit p-4-2.php ,i
ncica(i acest fi,iei n seiveiul uumneavoasti PBP:

<not>Rspunsuii la test:
- $SERvER_B0ST
- $REN0TE B0ST<not>

7u

<.php
Fisieiul p-4-2.php
echo ,<PRE>";
echo ,<BR><B>Biowsei :<B> $BTTP_0SER_AuENT";
echo ,<BR><B>Bost :<B> $BTTP_B0ST";
echo ,<BR><B>Refeiei :<B> $BTTP_REFERER";
echo ,<BR><B>Remote Bost :<B> $BTTP_REN0TE_B0ST";
echo ,<BR><B>Remote Auuiess :<B> $BTTP_REN0TE_ABBR";
echo ,<BR><B>Remote Poit :<B> $BTTP_REN0TE_P0RT";
echo ,<PRE>";
.>

2. 0iienta(i un biowsei Web spie auiesa 0RL a fi,ieiului caie con(ine
sciiptul PBP. La executaiea sciiptului ue pieluciaie, acesta afi,eaz
valoiile vaiiabileloi ue meuiu, a,a cum se poate veuea n ilustia(ia
uimtoaie.
<figuia> Pioiect 4-2 - Niciosoft Inteinet Exploiei

Biowsei :Nozilla4.u (conpatible; NSIE S.u; Winuows 98;
BigExt)
Bost : osboine.com
Refeiei : http: osboine.combmccaityphpmouule-u4
Remote Bost : client.isp.net
Remote Auuiess : 198.4S.24.1Su
Remote Poit : 242uS<figuia>

<Test ue evaluaie>
1. Caie este vaiiabila PBP ce tiebuie folosit pentiu a ob(ine accesul
la uatele asociate unui contiol uefinit ue eticheta BTNL <INP0T
TYPE="TEXT" NANE="culoaie">.
2. Sciie(i o instiuc(iune PBP caie tiimite biowseiului valoaiea
vaiiabilei $x.
S. Sciie(i o instiuc(iune PBP caie tiimite biowseiului numele
vaiiabilei $y.
4. Sciie(i o instiuc(iune PBP caie tiimite biowseiului auiesa 0RL a
paginii caie face iefeiiie la pagina cuient.


71

<titlu>Nouulul S:
Luciul cu valoii scalaie<titlu>
<titlu>Scopuii<titlu>
- nv(a(i s uefini(i ,i s utiliza(i constantele
- nv(a(i s folosi(i vaiiabilele uinamice
- nv(a(i s conveiti(i valoiile uinti-un tip n altul

n cauiul Nouulului 2, a(i nv(at uespie valoii scalaie ,i uespie
tablouii, n timp ce un tablou aie mai multe valoii asociate, un scalai
aie asociat o singui valoaie. n acest mouul, ve(i nv(a mai multe
uespie valoiile scalaie ,i uespie mouul ue utilizaie a acestoia.

<titlu>0tilizaiea constanteloi ,i a vaiiabileloi uinamice<titlu>

n sub-sec(iunile uimtoaie, vom uiscuta uespie constante ,i
vaiiabile uinamice. Pute(i sciie piogiame PBP utile ,i complexe fi a
utiliza constante sau vaiiabile uinamice. Bac utilizaiea constanteloi
poate facilita citiiea piogiameloi uumneavoasti, vaiiabilele
uinamice au un efect contiai. Bin acest motiv, n geneial se
iecomanu evitaiea vaiiabileloi uinamice, mai ales ue ctie
piogiamatoiii PBP nceptoii. Totu,i, chiai uac opta(i pentiu a nu
folosi vaiiabilele uinamice, v puteii afla n situa(ia ue a lucia la un
piogiam PBP sciis ue o peisoan caie agieeaz aceste vaiiabile; ca
ataie, tiebuie s ave(i cuno,tin(e uespie vaiiabilele uinamice,
inuifeient uac le folosi(i sau nu n piopiiile uumneavoasti
piogiame.

<titltu>0tilizaiea constanteloi<titlu>
0 constant este pui ,i simplu o valoaie caie este... constant, cu alte
cuvinte o valoaie caie nu se mouific, n acest sens, constantele sunt
opusele vaiiabileloi, ueoaiece valoaiea unei vaiiabile se poate
mouifica pe uuiata execu(iei unui piogiam. Bac piefeia(i, gnui(i-v
la o constant ca la o vaiiabil ,numai pentiu citiie".
Pentiu a uefini o constant, folosi(i func(ia uefine(). S consiueim
uimtoiul exemplu:

uefine(,PI", S.141S9);

Aceast instiuc(iune uefine,te constanta PI, atiibuinuu-i valoaiea
S.141S9. Bup ce a fost uefinit, o constant se poate folosi n cauiul
unei expiesii. Be exemplu, pute(i calcula aiia unui ceic uup cum
uimeaz:
72

$aiie = PI * $iaza * $iaza;

0bseiva(i c iefeiin(ele la o constant nu folosesc simbolul uolaiului.
Astfel, o constant poate fi cu u,uiin( ueosebit ue o vaiiabil. Nul(i
piogiamatoii sciiu numele constanteloi folosinu numai majuscule,
ceea ce le face ,i mai simplu ue iuentificat.
0 func(ie conex, uefineu(), poate ueteimina uac o anumit
constant a fost uefinit. Be exemplu, cu ajutoiul uimtoaiei
instiuc(iuni PBP puteii ueteimina uac a fost uefinit constanta Pi:

echo uefineu(,PI");

Re(ine(i c numele caie va fi testat este uelimitat piin ghilimele
uuble. Func(ia uefineu() ietuineaz o valoaie unitai uac iespectiva
constant a fost specificat; n caz contiai, ietuineaz zeio. In cauiul
exemplului, instiuc(iunea echo afi,eaz valoaiea ietuinat. Pute(i
testa valoaiea ietuinat ,i cu ajutoiul constiuc(iiloi PBP uesciise n
Nouulul 6.
Pe lng spoiiiea lizibilit(ii piogiameloi, constantele pot facilita
mouificaiea acestoia. S piesupunem c a(i sciis un piogiam caie
con(ine multe calcule ce folosesc valoaiea S,141S9, iai ulteiioi a(i
uescopeiit c tiebuia s folosi(i valoaiea mai exact
S,141S926SSS898. Bescopeiiiea ,i mouificaiea fieciei apaii(ii a
valoiii oiiginale poate fi o activitate maie consumatoaie ue timp. Bai,
uac a(i uefinit o constant pentiu iepiezentaiea valoiii, numiul
S,141S9 va apiea o singui uat n piogiam. Nouificaiea unei
singuie apaii(ii va ueveni o opeia(ie simpl ,i obi,nuit. 0nii
piogiamatoii cieu c expiesiile tiebuie s con(in numai uou valoii
numeiice: zeio ,i unu. Toate celelalte valoii tiebuie iepiezentate sub
foim ue constante, pentiu a mbunt(i lizibilitatea ,i a facilita
mouificaiea piogiameloi.
valoaiea ! este folosit extiem ue fiecvent n unele calcule. Pentiu
comouitate, PBP fuinizeaz o func(ionalitate mai inuicat uect
uefiniiea unei constante cu valoaiea !: func(ia pi() ietuineaz
valoaiea iespectiv, cu 14 cifie semnificative. Beci, pute(i calcula aiia
unui ceic folosinu uimtoaiea expiesie:

$aiie= pi() * $iaza * $iaza;

<titlu>Luciul cu vaiiabile uinamice<titlu>
Bac o constant poate spoii lizibilitatea ,i simplitatea mouificiii
piogiameloi, vaiiabilele uinamice ngieuneaz n(elegeiea ,i
posibilitatea ue a opeia schimbii n piogiam. Iat un exemplu
simplu ue vaiiabil uinamic, uenumit $$f ilm:

$oameni_fuiiosi = 12;
$film = , oameni_fuiiosi";
echo $$film;

0 vaiiabil uinamic este uenumit folosinu o peieche ue simboluii
ale uolaiului ,i este asociat cu o vaiiabil obi,nuit caie aie un
nume similai ,i incluue un singui

7S

simbol al uolaiului. In exemplu, vaiiabila uinamic $$film este
asociat cu vaiiabila obi,nuit $film. valoaiea unei vaiiabile
obi,nuite u numele (fi un simbol al uolaiului) unei a uoua
vaiiabile oiuinaie, n exemplu, a uoua vaiiabil obi,nuit este
$oameni_fuiiosi. valoaiea acestei a uoua vaiiabile obi,nuite este
valoaiea vaiiabilei uinamice: n exemplu, aceasta este valoaiea
12*(vezi nota).
Piogiamatoiii spun c o vaiiabil uinamic face o iefeiin( inuiiect
la valoaiea sa. Cu alte cuvinte, o vaiiabil uinamic nu con(ine,
piactic, piopiia sa valoaie. n schimb, con(ine amplasamentul unue
se poate gsi valoaiea; cu alte cuvinte, numele unei alte vaiiabile.

<Test ,la minut">
- Sciieii o instiuc(iune caie uefine,te o constant uenumit
LAT0RI,atiibuinuu-i valoaiea 4.
- Sciieii o instiuc(iune caie uefine,te o constant uenumit SAL0T,
atiibuinuu-i valoaiea "buna_ziua".
- Sciieii o instiuc(iune caie afi,eaz valoaiea vaiiabilei uinamice
asociate vaiiabilei obi,nuite $poiumbel. <Test ,la minut">


<Sfatul specialistului>
ntiebaie: vaiiabilele uinamice sunt o no(iune cam ueiutant. Be ce
le folosesc piogiamatoiii.
Rspuns: Bac vaiiabilele uinamice vi se pai ueiutante, nu intia(i n
panic; vaiiabilele uinamice sunt ueiutante. 0neoii este posibil
ieuuceiea uimensiuniloi unui piogiam folosinu una sau mai multe
vaiiabile uinamice. Bai piogiamatoiii comit auesea gie,eli caie
ueteimin vaiiabilele uinamice s fac iefeiiie la valoii gie,ite ,i
nea,teptate. unui(i-v c a ciea un piogiam coiect este mai
impoitant uect a ciea un piogiam succint. Cnu veue(i o posibilitate
ue a elimina numeioase linii ue piogiam folosinu o vaiiabil
uinamic, gnui(i-v ue uou oii nainte ue a ievizui piogiamul.
<Sfatul specialistului>

<not>
*n oiiginal eia voiba uespie filmul ,S9 ue tiepte". S-a piefeiat
mouificaiea exemplului pentiu a nu uenumi o vaiiabil cu numele
,ue_tiepte", a,a cum o ceiea exemplul. - N.T.
Rspunsuii la test:
- uefine("LAT0RI", 4);
- uefine("SAL0T", "buna_ziua");
- echo $$poiumbel;
<not>

74

<titlu>Luciul cu tipuii<titlu>
PBP este ceea ce se nume,te un limbaj ue piogiamaie cu tipuii
uinamice. 0 consecin( a caiacteiului uinamic al tipuiiloi ue vaiiabile
afeiente limbajului PBP este aceea c nu tiebuie s specifica(i tipul
vaiiabileloi. PBP ueteimin tipul vaiiabilei n func(ie ue tipul ultimei
valoii atiibuite vaiiabilei.
Cu toate acestea, caiacteiul uinamic al tipuiiloi nu v scute,te ue
pioblemele legate ue tipuii. Tiebuie s cunoa,te(i tipuiile acceptate
,i ceea ce se ntmpl cnu n cauiul expiesiiloi se folosesc uou sau
mai multe tipuii.

<titlu>Conveisia automat ue tip<titlu>
S lum n consiueiaie uimtoiul sciipt PBP scuit:

$x = 1;
$y = 2.S;
$z = $x+$y;
echo $z;

Instiuc(iunea ue atiibuiie caie stocheaz o valoaie n vaiiabila $z
este inteiesant, ueoaiece expiesia uin membiul uiept incluue un
opeianu ntieg ,i un opeianu ue tip uublu. Ce valoaie va apiea ca
uat ue ie,iie. Rspunsul coiect este S.S, o valoaie ue tip uublu.
Cnu o expiesie aiitmetic folose,te mai multe tipuii, PBP execut
conveisia automat ue tip. Bac oiicaie uintie opeianzi este ue tip
uublu, PBP tiateaz ceilal(i opeianzi ca ,i cum ai fi ue tip uublu,
execut calculele ,i ietuineaz iezultatul ca valoaie ue tip uublu.
Bac to(i opeianzii unei expiesii sunt ntiegi, PBP execut calculul ,i
ietuineaz iezultatul sub foim ue ntieg.
Este impoitant s n(elege(i faptul c piin conveisia ue tip nu se
mouific tipuiile opeianziloi unei expiesii; ace,tia sunt pui ,i simplu
tiata(i ca ,i cum ai fi fost ue un alt tip. In cauiul exemplului, vaiiabila
$x imne ue tip ntieg, chiai uac PBP o tiateaz ca o valoaie ue tip
uublu pentiu a executa calculele.
$iiuiile pot fi ue asemenea supuse unei conveisii ue tip. S examinm
uimtoiul exemplu:

$x = 1;
$y = $x+ ,1 moie"; *(vezi nota)
echo $y

Cuvntul moie uin ,iiul text este ignoiat.
valoaiea afi,at este uoi, auic suma uintie valoaiea vaiiabilei $x ,i
valoaiea numeiic a ,iiului text, caie este unu. valoaiea numeiic ,i
tipuiile unui ,ii sunt ueteiminate piin iespectaiea uimtoaieloi
ieguli:

<not>
*In tiauuceie ,nc l". Cuvntul ,moie" uin ,iiul text este ignoiat.
Bac s-ai fi folosit tiauuceiea n limba iomn, valoaiea vaiiabilei $y
ai fi fost unu, uin motive caie voi fi piezentate imeuiat (iegula ni. 1).
- N.T.<not>

7S

1. Bac ,iiul ncepe cu o valoaie numeiic, valoaiea ,iiului este uat
ue valoaiea numeiic iespectiv; n caz contiai, valoaiea ,iiului este
zeio.
2. Bac un punct zecimal sau un exponent (e sau E), este asociat cu
valoaiea numeiic, tipul vaiiabilei iezultante este uublu; n caz
contiai, tipul valoiii iezultante este un ntieg.

<titlu>Conveisia manual ue tip<titlu>
Bac piefeia(i, pute(i pielua contiolul conveisiei ue tip sau pute(i
mouifica tipul unei vaiiabile. Pentiu a pielua contiolul conveisiei ue
tip, pute(i conveiti foi(at un opeianu ue la un tip la altul, pioces
cunoscut sub numele ue conveisie foi(at ue tip sau pui ,i simplu
conveisie foi(at. n continuaie, este uat un exemplu ue conveisie ue
tip:

$x = 1;
$y = 2.S;
$z = $x + (integei) $y;
echo $z

Conveisia foi(at ue tip, ,i anume (integei), ueteimin tiataiea
vaiiabilei $y ca pe un ntieg, iai valoaiea acesteia uevine 2, n loc ue
2.S, caie este valoaiea ieal a vaiiabilei $z. Tabelul uimtoi inuic ,i
alte conveisii foi(ate ue tip caie se pot folosi:
<tabel>
*Conveisie foi(at
* Rezultat

*(int), (integei)
*Conveisie foi(at la ntieg

*(ieal), (uouble), (float)
*Conveisie foi(at la uublu

*(stiing)
*Conveisie foi(at la ,ii

*(aiiay)
*Conveisie foi(at la tablou

*(object)
*Conveisie foi(at la obiect
<tabel>

Numeioase func(ii fuinizeaz nc o moualitate ue a tiata o vaiiabil
ca ,i cum ai fi ue un tip specificat. Tabelul uimtoi piezint succint
aceste func(ii. Ca exemplu ue utilizaie a uneia uintie func(iile
iespective, luati n consiueiaie uimtoiul exemplu:

$x = 1.S;
$y = intval($x);
echo $x;
echo $y;

valoaiea 1.S este afi,at ca valoaie a vaiiabilei $x, iai valoaiea l este
afi,at ca valoaie a vaiiabilei $y.

<tabel>
*Func(ie
*opeia(ie

*Boubleval
*Tiateaz aigumentul ca fiinu ue tip uublu.

*Intval()
*Tiateaz aigumentul ca fiinu ue tip ntieg.

*Stival()
*Tiateaz aigumentul ca fiinu ue tip ,ii.
<tabel>

Nici conveisia noimal ,i nici cea foi(at nu mouific tipul unui
opeianu. Ambele mecanisme ueteimin tiataiea opeianziloi ca ,i
cum ai fi ue un alt tip. Totu,i, mouificaiea tipului unei vaiiabile este
posibil piin utilizaiea func(iei settype(). Acest pioceueu este ilustiat
n uimtoiul exemplu:

76

$x = 1.S;
settype($x,"integei");
echo $x

valoaiea afi,at a vaiiabilei $x este egal cu unitatea, ueoaiece fiac(ia
zecimal se pieiue atunci cnu func(ia settype() conveite,te valoaiea
uubl la o valoaie ntieag. Pute(i ob(ine acela,i iezultat cu
uimtoaiea instiuc(iune ue atiibuiie, caie folose,te o conveisie
foi(at:

$x = (integei) $x;

valoiile posibile pentiu al uoilea aigument al func(iei settype(), ,i
anume aigumentul caie specific tipul uoiit, sunt:
- ,integei"
- ,uouble"
- ,stiing"
- ,aiiay"
- ,object"
0 func(ie conex, ,i anume gettype(), ietuineaz un ,ii caie inuic
tipul vaiiabilei specificate. Sciiptul uimtoi afi,eaz ,iiul "integei",
caie inuic tipul vaiiabilei $x:

$x = 1;
echo gettype($x);

<Sfatul specialistului>
ntiebaie: Stuuiinu piogiamele PBP sciise ue al(ii, am obseivat
opeiatoiul +=. Caie este efectul opeiatoiului iespectiv.
Rspuns: 0peiatoiul += nu este uect o moualitate iapiu ue a sciie
o instiuc(iune ue atiibuiie caie implic opeiatoiul +. 0imtoaiele
uou instiuc(iuni ue atiibuiie, una noimal ,i una ,iapiu", au acela,i
efect:
$x += 1;
$x = $x + 1;
Aceast instiuc(iune ue atiibuiie ,iapiu" v scute,te ue efoitul ue a
sciie o vaiiabil, $x n cazul exemplului nostiu, n ambii membii ai
instiuc(iunii ue atiibuiie. Tabelul uimtoi iezum opeiatoiii ,iapizi"
ue atiibuiie pentiu opeia(iile aiitmetice ,i pentiu ,iiuii, fuiniznu
un exemplu pentiu fiecaie opeiatoi ,i o instiuc(iune ue atiibuiie
echivalent.
Instiuc(iune ue atiibuiie ,iapiu"
x += y
x -= y
x = y
x *=y
x =y
x .= y

Instiuc(iune ue atiibuiie noimal
x = x + y
x = x - y
x = x y
x = x * y
x = xy
x = x . y

77

<Test ,la minut">
- Bac se nmul(e,te o valoaie ue tip uublu cu o valoaie ntieag, caie
este tipul iezultatului.
- Sciie(i o expiesie caie conveite,te foi(at valoaiea vaiiabilei $x n
tipul uublu.
- Caie este valoaiea ,i tipul expiesiei 1.S + "eu".<Test ,la minut">

<titlu>Pioiect S-1: 0n calculatoi simplu<titlu>

n cauiul acestui pioiect, ve(i sciie si ve(i executa un mic piogiam
PBP caie seive,te uiept calculatoi simplu. Calculatoiul auun uou
numeie intiouuse ue utilizatoi ,i afi,eaz suma.

<titlu>Scopuiile pioiectului<titlu>
- Piezentaiea mouului n caie numeiele intiouuse sub foim ue text
se pot folosi n expiesiile aiitmetice
- Piezentaiea mouului n caie instiuc(iunile PBP uinti-un foimulai
pot pielucia uatele intiouuse n foimulai

<titlu>Pas cu pas<titlu>
1. Plasa(i uimtoiul sciipt PBP nti-un fi,iei uenumit p-S-1 .php ,i
ncica(i acest fi,iei n seiveiul uumneavoasti PBP:

<BTNL>
<BEAB>
<TITLE>Pioiect S-1<TITLE>
<BEAB>
<B0BY>
<!- - Fsieiul p-S-1.php- - >
<F0RN NETB0B="P0ST" ACTI0N="p-S-1.php">
<TABLE>

<TR>
<TB><INP0T TYPE="TEXT" NANE="0P1"
vAL0E="<. echo $0P1 .>"><TB>
<TR>

<TR>
<TB ALINu="CENTER">+<TB>
<TR>

<TR>
<TB><INP0T TYPE="TEXT" NANE="0P2"
vAL0E="<. echo $0P2 .>"><TB>
<TR>


<not>Rspunsuii la test:
- uublu
- (uouble) $x
- 1.S, uublu<not>


78

<TR>
<TB ALINu="CENTER"><INP0T TYPE="S0BNIT" vAL0E="="><TB>
<TR>

<TR>
<TB><INP0T TYPE="TEXT" NANE="RE0LTAT"
vAL0E =<. echo $0P1+ $0P2 .>"
uisableu><TB>
<TR>

<TABLE>
<F0RN>
<B0BY>
<BTNL>

2. Aloca(i pu(in timp stuuiului sciiptului PBP, acoiunu o aten(ie
special mouului ue utilizaie a instiuc(iuniloi PBP echo pentiu
geneiaiea valoiiloi atiibuteloi BTNL
S. 0iienta(i un biowsei Web spie auiesa 0RL a fi,ieiului ncicat n
etapa anteiioai. Ecianul biow-seiului tiebuie s fie asemntoi
celui piezentat n ilustia(ia uimtoaie. Intiouuce(i valoiile celoi uoi
opeianzi ,i executa(i clic pe butonul ue expeuieie, caie este maicat
cu un simbol al egalit(ii.
4. n momentul executiii sciiptului ue pieluciaie, acesta ob(ine
accesul la valoiile celoi uou vaiiabile uin foimulai caie iepiezint
opeianzii, calculeaz suma loi si specific suma ca fiinu valoaiea
atiibutului vAL0E a casetei cu text numit RE0LTAT. 0n iezultat
caiacteiistic este piezentat n ilustia(ia uimtoaie.

<ilustia(ie>
2
+
S
=

2
+
S
=
S
<ilustia(ie>

<titlu>Pioiect S-2: 0n calculatoi pentiu uate calenuaiistice<titlu>
n cauiul acestui pioiect, ve(i sciie ,i ve(i executa un piogiam PBP
caie execut opeia(ii aiitmetice cu uate. Piogiamul peimite
utilizatoiului s intiouuc o uat ,i o uistan(, expiimat n zile, n
iapoit cu uata iespectiv Apoi calculeaz ,i afi,eaz uata iezultant.

79

<titlu>Scopul pioiectului<titlu>
- Piezentaiea mouului n caie uatele calenuaiistice pot fi intiouuse
sub foim ue text, conveitite n foimat numeiic ,i utilizate n
expiesiile aiitmetice

<titlu>Pas cu pas<titlu>
1. Plasa(i uimtoiul sciipt PBP nti-un fi,iei uenumit p-S-2.php ,i
ncica(i acest fi,iei n seiveiul uumneavoasti PBP:

<BTNL>
<BEAB>
<TITLE>Pioiect S-2<TITLE>
<BEAB>
<B0BY>
<!- - Fsieiul p-S-2.php- - >
<F0RN NETB0B="P0ST" ACTI0N="p-S-2.php">
<TABLE>

<TR>
Bata:<BR>
<TB><INP0T TYPE="TEXT" NANE="BATA" vAL0E="<.php echo
$BATA .>"><TB>
<TR>

<TR>
<TB ALINu="CENTER">+<TB>
<TR>

<TR>
<TB><INP0T TYPE="TEXT" NANE="BISTANTA" vAL0E="<. php
echo
$BISTANTA .>"><TB>
<TR>

<TR>
<TB ALINu="CENTER"><INP0T TYPE="S0BNIT" vAL0E="="><TB>
<TR>

<TR>
<TB><INP0T TYPE="TEXT" NANE="RE0LTAT"
vAL0E =<. php echo uate ("N j, Y",
(stitotime($BATA)+6u*6u*24*($BISTANTA))) .>"uisableu><TB>
<TR>

<TABLE>
<F0RN>
<B0BY>
<BTNL>

2. Aloca(i un timp stuuiului sciiptului PBP, acoiunu o aten(ie
special mouului ue calcul al valoiii atiibutului vAL0E al casetei cu
text uenumit RE0LTAT. Sub-expiesia 6u*6u*24 iepiezint
numiul ue secunue al unei zile. Func(ia stitotime() pieia o uat ca
aigument ,i ietuineaz numiul secunueloi scuise ue la 1 ianuaiie
197u, oia uu:uu uNT, moment cunoscut sub numele ue epoca 0NIX.
Pioceueul ue iepiezentaie a uateloi ,i a oieloi sub foima numiului
ue secunue scuise ue la momentul epocii 0NIX este cunoscut sub
numele ue oi 0NIX. Func(ia uate() pieia uou aigumente. Func(ia
foimateaz uata fuinizat ue al uoilea aigument n confoimitate cu
,iiul uat ca piim aigument. $iiul

8u

"N j, Y" ueteimin func(ia s ietuineze numele lunii, uimat ue ziua
uin lun, o viigul ,i valoaiea anului.
S. 0iienta(i un biowsei Web spie auiesa 0RL a fi,ieiului caie con(ine
sciiptul pe caie l-a(i ncicat n cauiul piimei etape. Ecianul
biowseiului tiebuie s fie asemntoi celui piezentat n uimtoaiea
ilustia(ie. Intiouuce(i o uat ,i o uistan( (expiimat n zile) ,i
executa(i clic pe butonul ue expeuieie, caie este etichetat cu un semn
ue egalitate.
4. La executaiea sciiptului ue pieluciaie, acesta ob(ine accesul la
valoiile celoi uou vaiiabile uin foimulai, caie iepiezint uata ,i
uistan(a expiimat n zile, calculeaz suma acestoia ,i specific suma
ca valoaie a atiibutului vAL0E al casetei cu text uenumit
RE0LTAT. 0n iezultat caiacteiistic este piezentat n ilustia(ia
uimtoaie.

<ilustia(ie>

S2 Niciosott Inteinet Lxpluiei
Bate:
jan 1,2uuS
+
Su
=



Bate:
jan 1,2uuS
+
Su
=
}an S1,2uuS<ilustia(ie>

<titlu>Pioiect S-S: 0n geneiatoi ue ,tiii<titlu>
n cauiul acestui pioiect, ve(i sciie un piogiam PBP caie constiuie,te
un piogiam ue ,tiii umoiistice. Piogiamul peimite utilizatoiului s
sciie cteva ,iiuii ue text ,i apoi asambleaz ,iiuiile nti-un aiticol.

<titlu>Scopul pioiectului<titlu>
- Piezentaiea mouului ue utilizaie a ,iiuiiloi text pentiu a specifica
un text BTNL

<titlu>Pas cu pas<titlu>
1. Plasa(i uimtoaiea pagin BTNL nti-un fi,iei uenumit p-S-S.html
,i ncica(i acest fi, n seiveiul uumneavoasti PBP:


<BTNL>
<BEAB>
<TITLE>Pioiect S-S<TITLE>
<BEAB>
<B0BY>
<!- - Fsieiul p-S-S.html- - >
<F0RN NETB0B="P0ST" ACTI0N="p-S-S.php">
<TABLE>

81

<TR>
<TB ALINu="RIuBT">Pienumele utilizatoiului:<TB>
<TB><INP0T TYPE="TEXT" NANE="0SER"><TB>
<TR>

<TR>
<TB ALINu="RIuBT">0ias maie:<TB>
<TB><INP0T TYPE="TEXT" NANE="0RAS"><TB>
<TR>

<TR>
<TB ALINu="RIuBT">nghe(ata piefeiat:<TB>
<TB><INP0T TYPE="TEXT" NANE="AR0NA"><TB>
<TR>

<TR>
<TB ALINu="RIuBT">Numele inteipietului pop-iock piefeiat:<TB>
<TB><INP0T TYPE="TEXT" NANE="STAR"><TB>
<TR>

<TR>
<TB ALINu="RIuBT">Numele unui iau cunoscut:<TB>
<TB><INP0T TYPE="TEXT" NANE="RA0"><TB>
<TR>

<TR>
<TB ><TB>
<TB><INP0T TYPE="S0BNIT"><TB>
<TR>

<TABLE>
<F0RN>
<B0BY>
<BTNL>

2. Plasa(i uimtoiul sciipt PBP nti-un fi,iei uenumit p-S-S.php si
ncica(i acest fi,iei n seiveiul uumneavoasti PBP, plasnuu-l n
acela,i catalog ca ,i fi,ieiul p-S-S.html:

<BTNL>
<BEAB>
<TITLE>Pioiect S-S<TITLE>
<BEAB>
<B0BY>
<!- - Fsieiul p-S-S.php- - >
<CENTER><B1>Buisa stiiiloi uespie celebiitati<B1><CENTER>
<CENTER><.php echo uate(,1,F j,Y") .><CENTER>
<CENTER><B2>0LTINELE STIRI !!!<B2><CENTER>
<BR>
<.php echo $0RAS .>:
<P>
Seaia tiecuta staiul pop <.php echo $STAR.> a fost vzut nti-o
companie necunoscut. Cei uoi seiveau inghe(ata ue <.php echo
$AR0NA.> la <.php echo $RA0 .> Club, un local cunoscut uin <.php
echo $0RAS.> fiecventat ue peisonalita(i. Confoim unoi suise
confiuen(iale, misteiioasa companie eia <.php echo $0SER.>, fostul
,ofei al c,tigtoiului ue anul tiecut al piemiului uiammy.
<B0BY>
<BTNL>

82

S. Stuuia(i foimulaiul BTNL ,i iuentifica(i vaiiabilele ue tip foimulai
pe caie le uefine,te. Apoi, stuuia(i sciiptul PBP ,i iuentifica(i locuiile
unue valoiile vaiiabileloi uin foimulai sunt folosite pentiu geneiaiea
ue text BTNL
4. 0iienta(i un biowsei Web spie auiesa 0RL a fi,ieiului caie con(ine
foimulaiul BTNL. Intiouuce(i o valoaie pentiu fiecaie cmp. Ecianul
biowse-iului tiebuie s fie asemntoi celui piezentat n uimtoaiea
ilustia(ie; uai, uesigui, valoiile uumneavoasti voi fi uifeiite ue cele
piezentate n figui. Executa(i clic pe butonul ue expeuieie.
S. La executaiea sciiptului ue pieluciaie, acesta ob(ine acces la
valoiile vaiiabileloi uin foimulai ,i le inseieaz sub foim ue text
BTNL tiimis biow-seiului. 0n iezultat caiacteiistic este piezentat n
ilustia(ia uimtoaie.

<ilustia(ie>

0seis Fiist Name : Sue
Najoi City: Libon
Favoiite Ice Cieam
Flavoi: vanilia swiss almonu
Favoite Pop Nusic
Stai :Ricky Naitin
Name of Famous
Rivei :Amazon

<buton> Submit Queiy<buton>

Buisa ,tiiiloi uespie celebiit(i
Smbt, S maitie 2uu1
0ltimele ,ti(i!!!
Lisabona:
Seaia tiecut, staiul pop Ricky Naitin a fost vzut inti-o companie
necunoscut. Cei uoi seiveau nghe(at ue vanilie cu miguale la
Amazon Club, un local cunoscut uin Lisabona, fiecventat ue
peisonalit(i. Confoim unoi suise confiuen(iale, misteiioasa
companie eia Sue, fostul ,ofei al c,tigtoiului ue anul tiecut al
Piemiului uiammy...
<ilustia(ie>

8S

<Test ue evaluaie>
1. Sciie(i o instiuc(iune caie uefine,te o constant uenumit vITEA,
caie aie valoaiea 186,282*(vezi nota).
2. Sciie(i o instiuc(iune caie afi,eaz o valoaie ce inuic uac a fost
sau nu uefinit constanta L0NuINE.
S. Bac vaiiabila $pisica aie valoaiea "Tom" ,i uac vaiiabila $animal
aie valoaiea "pisica", caie este numele unei vaiiabile uinamice cu
valoaiea "Tom".
4. Bac se pioceueaz la mpi(iiea a uou valoii ntiegi, caie este
tipul iezultatului.
S. Bac o valoaie ue tip ntieg se mpaite la o valoaie ue tip uublu,
caie este tipul iezultatului.
6. Sciie(i o instiuc(iune caie mouific tipul vaiiabilei $cost n ntieg.

<not>
Este voiba uespie viteza luminii, expiimat n mile pe secunu. - N.
T.<not>



8S

<titlu>PARTEA A II A
Sciieiea unoi piogiame PBP cu un giau avansat ue
complexitate<titlu>

<titlu>Nouulul 6:
Sciieiea instiuc(iuniloi PBP conui(ionale<titlu>
<titlu>Scopuii<titlu>
- nv(a(i s uefini(i ,i s folosi(i valoiile ue tip aueviatfals
- nv(a(i s n(elege(i ,i s sciie(i instiuc(iunile if ,i instiuc(iunile
conexe
- nv(a(i s n(elege(i ,i s sciie(i instiuc(iunile switch si instiuc-
(iunile conexe
- nv(a(i s n(elege(i si s sciie(i instiuc(iuni ue ciclaie, inclusiv
instiuc(iunile while, uo while ,i foi
Najoiitatea piogiameloi utile nu se compoit n exact acela,i mou la
fiecaie iulaie a acestoia, n schimb, piogiamele iau uecizii, executnu
uneoii o opeia(ie ,i alteoii alta, n func(ie ue ciicumstan(e. Be
exemplu, un piogiam util pentiu calculul impozitului pe venit nu
folose,te aceea,i iat a impozitului pentiu fiecaie contiibuabil. In
cauiul acestui mouul, veti nv(a s ncoipoia(i instiuc(iunile
conui(ionale n piogiamele uumneavoasti, astfel nct piogiamele
s poal lua uecizii.

86

<titlu>0tilizaiea valoiiloi ue tip aueviatfals<titlu>
Piogiamele PBP iau uecizii piin evaluaiea unoi expiesii conui(ionale
,i execut instiuc(iuni bazate pe iezultatele acestoi evaluii.
Expiesiile conui(ionale sunt asimilate ca avnu una uin uou valoii:
tiue (aueviat) sau false (fals). 0neoii, expiesiile conui(ionale se mai
numesc ,i expiesii booleene, n onoaiea matematicianului caie le-a
stuuiat, ueoige Boole. Constanta tiue aie valoaiea l, iai const false
aie valoaiea u.
Pute(i foima o expiesie conui(ional folosinu constanta tiue sau
constanta false. 0 moualitate mai util ue a foima o expiesie
conui(ional const n utilizaiea opeiatoi iela(ional pentiu
compaiaiea a uou valoii numeiice. S lum n consiue uimtoiul
exemplu:

$a<1

Aceast expiesie conui(ional folose,te opeiatoiul <, caie aie, n
esen(, aceea,i semnifica(ie ca n algebi. Expiesia aie valoaiea tiue
uac ,i numai uac valoaiea vaiiabilei $a este mai mic uect
unitatea; n toate celelalte cazuii, aie valoaiea false. PBP fuinizeaz
un set ue asemenea opeiatoii iela(ionali, piezenta(i pe scuit n
tabelul 6-1.
PBP nu v oblig s compaia(i numai valoii numeiice. Pute(i folosi
opeiatoiul iela(ionali pentiu compaiaiea ,iiuiiloi; cu toate acestea,
un ,ii caie apaie nti-o expiesie conui(ional este conveitit la o
valoaie numeiic nainte ue evaluaiea expiesiei. Beseoii, se ajunge la
iezultate nea,teptate, n geneial, valoiile ,iiuiiloi tiebuie s fie
compaiate folosinu o func(ie ue compaiaie a ,iiuiiloi; aceste func(ii
voi fi explicate n Nouulul 7.

<tabel 6-1 0peiatoii iela(ionali ai limbajului PBP>
*0peiatoi
* Besciieie

* a<b
*Aueviat uac valoaiea lui a este mai mic uect valoaiea lui b.

*a>b
*Aueviat uac valoaiea lui a este mai maie uect valoaiea lui b.

*a<=b
*Aueviat uac valoaiea lui a este mai mic sau egal cu valoaiea lui
b.

*a>=b
*Aueviat uac valoaiea lui a este mai maie sau egal cu valoaiea lui
b.

*a==b
*Aueviat uac valoaiea lui a este egal cu valoaiea lui b.

*a!=b
*Aueviat uac valoaiea lui a este uifeiit ue valoaiea lui b.

*a===b
*Aueviat uac a ,i b sunt iuentice; cu alte cuvinte, uac a ,i b au
acela,i tip ,i uac valoaiea lui a este egal cu valoaiea lui b.

*a!==b
*Aueviat uac a ,i b nu sunt iuentice; cu alte cuvinte, uac a ,i b nu
sunt ue acela,i tip sau uac valoaiea lui a este uifeiit ue valoaiea lui
b.
<tabel 6-1>

Pentiu comouitate, pute(i foima expiesii conui(ionale fi un
opeiatoi iela(ional. Be exemplu, uac $a este o vaiiabil numeiic,
pute(i folosi expiesia $a ca expiesie conui(ional. Expiesia este
consiueiat ca avnu valoaiea false uac valoaiea vaiiabilei $a este
zeio, iespectiv valoaiea tiue uac valoaiea vaiiabilei iespective este

87

uifeiit ue zeio. Bac folosi(i un ,ii ca expiesie conui(ional, expiesia
aie valoaiea false uac ,iiul este viu sau uac aie valoaiea special
"\u", caie simbolizeaz un octet cu valoaiea zeio. Similai, utilizaiea
unei valoii neuefinite ca expiesie conui(ional ueteimin ob(ineiea
valoiii false. Bac folosi(i un tablou sau un obiect ca expiesie
conui(ional, aceasta aie valoaiea false uac tabloul sau obiectul sunt
viue; n caz contiai, expiesia aie valoaiea tiue.
Pentiu a sintetiza, iat iegulile caie uefinesc iezultatul unei expiesii
conui(ionale:
- Constantele tiue ,i false ,i iau iespectiv valoiile loi booleene
coiespunztoaie.
- 0 expiesie conui(ional caie const uinti-o valoaie neuefinit aie
valoaiea false; n caz contiai, iezultatul uepinue ue tipul valoiii, n
spe( numeiic, ,ii, tablou sau obiect.
- 0 expiesie conui(ional caie const uinti-o valoaie numeiic aie
valoaiea false uac valoaiea este zeio; n caz contiai, aie valoaiea
tiue.
- 0 expiesie conui(ional caie const uinti-o valoaie ue tip ,ii aie
valoaiea false uac ,iiul este viu; n caz contiai, aie valoaiea tiue.
- 0 expiesie conui(ional caie const uinti-o valoaie ue tip tablou
sau obiect aie valoaiea false uac tabloul sau obiectul sunt viue; n
caz contiai, aie valoaiea tiue.
- 0 expiesie conui(ional alctuit uinti-un opeiatoi iela(ional ,i uin
opeianzii si ia valoii n confoimitate cu iezultatul compaia(iei
(numeiice sau nu).

Pute(i foima expiesii conui(ionale complexe piin uniiea a uou
expiesii conui(ionale cu ajutoiul unui opeiatoi logic. Be exemplu,
expiesia uimtoaie este aueviat uac ambele expiesii conui(ionale
caie o compun sunt aueviate:

$a < 1 ANB $b < 1

Cu alte cuvinte, expiesia este aueviat uac att vaiiabila $a, ct ,i
vaiiabila $b au valoii mai mici uect unitatea. Tabelul 6-2 piezint pe
scuit opeiatoiii logici ai limbajului PBP. Re(ine(i c pute(i piefixa o
expiesie conui(ional cu opeiatoiul !, caie inveiseaz valoaiea
,aueviat" sau ,fals" a opeianuului su.
In geneial, expiesiile sunt evaluate ue la stnga la uieapta. Totu,i,
opeiatoiii caie apai n paitea supeiioai a tabelului uispun ue o
pieceuen( mai iiuicat ,i sunt efectua(i anteiioi opeiatoiiloi cu o
pieceuent mai ieuus, uac nu sunt folosite paianteze pentiu a
specifica o alt oiuine a opeia(iiloi.


<tabel 6-2 0peiatoii logici ai limbajului PBP>

*0peiatoi
* Besciieie

*x ANB y
*Aueviat uac att x, ct ,i y sunt aueviate.

*x y
*Aueviat uac att x, ct ,i y sunt aueviate.

*x 0R y
*Aueviat uac minimum una uin expiesiile x ,i y este aueviat.

*x y
*Aueviat uac minimum una uin expiesiile x ,i y este aueviat.

*x X0R y
*Aueviat uac numai una uin expiesiile x ,i y este aueviat.

*!x
*Aueviat uac x este fals.
<tabel 6 2>

88

<Sfatul specialistului>
ntiebaie: Be ce folose,te PBP uoi opeiatoii logici iepiezentnu
conjunc(ii (ANB ,i ) ,i uoi opeiatoii logici iepiezentnu, uisjunc(ii
(0R ,i ). Caie sunt uifeientele ntie cele uou tipuii ue opeiatoii.
Rspuns: Ambii opeiatoii ue conjunc(ie execut aceea,i opeia(ie, ca
ue altfel ,i ambii opeiatoii ue uisjunc(ie. Cu toate acestea, opeiatoiii
uifei uin punctul ue veueie al pieceuen(ei - caiacteiistica
ueteiminant a oiuinii n caie sunt executate opeia(iile n timpul
evaluiii expiesiiloi. 0peiatoiii ,i au o pieceuent ielativ
iiuicat, n timp ce opeiatoiii ANB ,i 0R au o pieceuent ielativ
ieuus. Tabelul 6-S inuic pieceuen(a opeiatoiiloi PBP, con(innu
numeio,i opeiatoii caie nu au fost nc piezenta(i.

<tabel 6-S Pieceuen(a opeiatoiiloi PBP>
*0peiatoi

*! ++ (int) (uouble) (stiing) (aiiay) (object)

**

*+ - .

*< <= > >=

*= = != = = = ! = =

*

*"

*#

*

*##

*.:

*= += -= *= = .= = = #= "= = <<= >>=

*Anu

*Xoi

*0i

*,
<tabel 6-S>

Be exemplu, s consiueim uimtoaiea expiesie:

$a + $b * $c

Pieceuen(a opeiatoiului ue multiplicaie * este mai iiuicat uect
aceea a opeiatoiului ue auunaie +, ueci nmul(iiea este efectuat
piima, chiai uac auunaiea apaie la stnga nmul(iiii. Cu alte cuvinte,
expiesia este evaluat ca ,i cum ai fi fost sciis astfel:

$a + ( $b * $c )

Bac uoii(i ca auunaiea s fie efectuat piima, pute(i folosi paianteze
n cauiul expiesiei, astfel:

( $a + $b ) * $c

89

<Test ,la minut">
S piesupunem c vaiiabila $a aie valoaiea 1u, vaiiabila $b aie
valoaiea l, iai vaiiabila $c aie valoaiea 1:
- Caie este valoaiea expiesiei $a < $b.
- Caie este valoaiea expiesiei $a <= $b.
- Caie este valoaiea expiesiei $a > $b.
- Caie este valoaiea expiesiei $b >= $c.
- Caie este valoaiea expiesiei $a > $b ANB $b >= $c.
<Test ,la minut">

<titlu>Sciieiea instiuc(iuniloi if simple<titlu>
Expiesiile conui(ionale nu sunt ueosebit ue inteiesante sau utile ca
ataie. Aceste expiesii sunt ns esen(iale pentiu sciieiea
instiuc(iuniloi conui(ionale, piin caie se iau uecizii. Cea mai simpl
instiuc(iune conui(ional este instiuc(iunea if, caie execut uou
opeia(ii. Nai nti, evalueaz o expiesie conui(ional. Apoi, uac ,i
numai uac valoaiea expiesiei conui(ionale este tiue, instiuc(iunea if
execut o instiuc(iune specificat.
Iat o instiuc(iune if simpl:

If ($numi > 1u)
Echo , Acesta este un numi maie ,;

S ne ieamintim c, n geneial, limbajul PBP ignoi spatiile albe. In
mou conven(ional, o instiuc(iune asociat unei instiuc(iuni if este
sciis uecalat n iapoit cu aceasta. Acest pioceueu este iecomanuat
ueoaiece piin utilizaiea sa este facilitat citiiea piogiamului. Atunci
cnu este executat, instiuc(iunea if evalueaz expiesia conui(ional
$numai > 1u, caie este aueviat numai uac valoaiea vaiiabilei
$numa este mai maie uect 1u. Instiuc(iunea echo este executat
numai uac valoaiea vaiiabilei $numai este mai maie uect 1u.
Pentiu a acumula expeiien( n utilizaiea instiuc(iunii if, nu uita(i s
paicuige(i Pioiectul 6-1.

<titlu>Pioiect 6-1: Testaiea valoiiloi numeiice<titlu>
n cauiul acestui pioiect, ve(i sciie ,i ve(i executa un mic piogiam
PBP, caie incluue o instiuc(iune if. Piogiamul inuic uac un numi
pe caie l intiouuce(i este sau nu mai maie uect 1u.

<not>Rspunsuii la test:
- false
- false
- tiue
- tiue
- tiue
<not>

9u

<titlu>Scopul pioiectului<titlu>
- Piezentaiea mouului ue func(ionaie a instiuc(iunii if

<titlu>Pas cu pas<titlu>
1. Plasa(i uimtoiul sciipt PBP nti-un fi,iei uenumit p-6-1. php ,i
ncica(i acest fi,iei n seiveiul uumneavoasti PBP:

<BTNL>
<BEAB>
<TITLE>Pioiect 6-1<TITLE>
<BEAB>
<B0BY>
<!--Fi,iei p-6-1.php -->
<.php
echo , Numiul intiouus a fost : $numi.";
if ($numi > 1u)
echo , <BR> Acesta este numi maie.";
.>
<B0BY>
<BTNL>

2. Plasa(i uimtoaiea pagin BTNL nti-un fi,iei uenumit p-6-1 .html
,i ncica(i acest fi,iei n seiveiul uumneavoasti, plasnuu-l n
acela,i catalog ca ,i fi,ieiul p-6-1 .php:

<BTNL>
<BEAB>
<TITLE>Pioiect 6-1<TITLE>
<BEAB>
<B0BY>
<!--Fi,iei p-6-1.html-->
<F0RN NETB0B="P0ST" ACTI0N="p-6-1.php">
Intiouuce(i o valoaie numeiic:
<BR><INP0T TYPE="TEXT" NANE="numai">
<F0RN>
<B0BY>
<BTNL>


S. 0iienta(i un biowsei Web spie auiesa 0RL a fi,ieiului ncicat n
etapa pieceuent. Ecianul biowseiului tiebuie s fie asemntoi
celui piezentat n ilustia(ia uimtoaie. Intiouuce(i un numi ,i
apsa(i pe tasta ENTER.*
4. n momentul execu(iei sciiptului ue pieluciaie, acesta compai
valoaiea pe caie a(i intiouus-o cu valoaiea 1u. Bac a(i intiouus o
valoaie mai maie uect 1u, sciiptul afi,eaz un mesaj. 0n iezultat
caiacteiistic este piezentat n ilustia(ia uimtoaie.
<imagine>
Entei a numeiic value:
11
The nxnnbei enteitu was: 11.
That's a big numbei.
<imagine>

<not>
*n oiiginal este men(ionata tasta RET0RN, nume caie nu se mai
utilizeaz ue mult n tastatuiile calculatoaieloi. - N.T.
<not>

91

<Test ,la minut">
- Sciie(i o instiuc(iune caie afi,eaz mesajul ,aoleu!" uac valoaiea
vaiiabilei $eioii este mai maie uect zeio.
- Sciie(i o instiuc(iune if caie afi,eaz mesajul ,nu tiece" uac
valoaiea vaiiabilei $culoaie este egal cu valoaiea vaiiabilei $iosu
sau cu valoaiea vaiiabilei $galben. <Test ,la minut">
<titlu>Sciieiea unoi instiuc(iuni if mai complexe<titlu>
S piesupunem c uoii(i s executa(i nu una, ci uou instiuc(iuni n
cazul n caie o anumit expiesie conui(ional este aueviat. Pute(i
sciie uou instiuc(iuni if, cte una pentiu fiecaie uintie instiuc(iunile
pe caie uoii(i s le executa(i. Alteinativ, pute(i ciea un giup ue
instiuc(iuni, piin incluueiea unei seiii ue instiuc(iuni ntie paianteze
acolaue. 0n giup ue instiuc(iuni se compoit ca o singui
instiuc(iune ,i se poate asocia cu o instiuc(iune if. S consiueim
uimtoiul exemplu:

if ($numai > 1u )
{
echo ,<BR>Numaiul este mai maie uect 1u.";
echo ,<BR>Beci, tiebuie sa fie mai maie.";
}

n cazul n caie expiesia conui(ional aie valoaiea tiue, sunt
executate ambele instiuc(iuni uin cauiul giupului ue instiuc(iuni.
0nii piogiamatoii piefei s foimateze piogiame ca acesta n alt
mou. Be exemplu, ei pot sciie ceva ue genul uimtoi:

if ($numai > 1u ){
echo ,<BR>Numaiul este mai maie uect 1u.";
echo ,<BR>Beci, tiebuie sa fie mai maie.";
}

Acest stil este mai compact, uai face uificil iuentificaiea paiantezei
acolaue ue ueschiueie coiespunztoaie paiantezei ue nchiueie.
Piobleme ue lizibilitate ue acest gen uevin impoitante la sciieiea
unoi instiuc(iuni if mai complicate.
S piesupunem c uoii(i s executa(i o instiuc(iune atunci cnu o
conui(ie este aueviat ,i o alt instiuc(iune cnu conui(ia este fals.
Instiuc(iunea else v peimite s pioceua(i astfel. S lum n
consiueiaie uimtoiul exemplu:

if ($numai > 1u )
echo ,<BR>Acesta este un numa maie .";
else
echo ,<BR>Acesta este un numa mic.";
<not>
Rspunsuii la test:
- if ($eioii > u)
echo "aoleul";
- if ($culoaie == $iosu 0R $culoaie == Sgalben)
echo "nu tiece';
<not>

92

n acest exemplu, mesajul ,Acesta este un numi maie" este afi,at
atunci cnu valoaiea vaiiabilei $numai este mai maie uect 1u;
mesajul ,Acesta este un numiul mic" este afi,at n caz contiai. Bac
uoii(i, pute(i folosi o instiuc(iune else cu un giup ue instiuc(iuni. Be
exemplu:


if ($numai > 1u )
echo ,<BR>Acesta este un numai maie.";
else
{
echo ,<BR>Numiul este mai mic uect 1u.";
echo ,<BR>Este un numai mic.";
}

Instiuc(iunea asociat unei instiuc(iuni if sau else poate fi ea ns,i o
instiuc(iune if. 0 asemenea instiuc(iune if se nume,te instiuc(iune if
imbiicat. Iat un exemplu ue instiuc(iune if imbiicat:

if ($numai > 1u )
if ($numa > 1uu)
echo ,<BR>Acesta este un numai foaite maie.";
else
echo ,<BR>Acesta este un numai maie.";
else
echo ,<BR>Acesta este un numai mic.";


Exemplul afi,eaz mesajul ,Acesta este un numi foaite maie." uac
valoaiea vaiiabilei $numai uep,e,te 1uu; n caz contiai, uac
valoaiea vaiiabilei $numai este mai maie uect 1u, se afi,eaz
mesajul ,Acesta este un numi maie.". Bac valoaiea vaiiabilei
$numai este mai mic sau egal cu 1u, exemplul afi,eaz mesajul
,Acesta este un numi mic.".
Instiuc(iunile if imbiicate pot ueveni extiem ue uificil ue n(eles uac
numiul ue instiuc(iuni ,i nivelul ue imbiicaie nu sunt ielativ
ieuuse. Beci tiebuie s le folosi(i cu economie.
0 instiuc(iune coielat att cu instiuc(iunea if, ct ,i cu instiuc(iunea
else, este instiuc(iunea elseif. Cnu este folosit coiect, poate fi mai
simplu ue n(eles uect o instiuc(iune if imbiicat, logic echivalent
cu aceasta. Iat un exemplu ue instiu(iune elseif:

if ($numai > 1uu )
echo ,<BR>Acesta este un numai foaite maie.";
elseif ($numa > 1u)
echo ,<BR>Acesta este un numai maie.";
elseif ($numa > 1)
echo ,<BR>Acesta este un numai mic.";
else
echo ,<BR>Acesta este un numai foaite mic.";
Exemplul extinue func(ionalitatea exemplului anteiioi, afi,nu
mesajul ,Acesta este un numi foaite mic." pentiu valoii ale
vaiiabilei $numai mai mici sau egale cu 1. nti-un caz geneial, cu o
instiuc(iune if ,i cu o instiuc(iune else poate fi asociat

9S

un numi mult mai maie ue instiuc(iuni elseif. PBP evalueaz
expiesiile conui(ionale n mou succesiv, poininu ue la expiesia
conui(ional asociat instiuc(iunii if . PBP execut instiuc(iunea
asociat piimei expiesii conui(ionale caie aie valoaiea tiue; uac nici
o expiesie conui(ional nu aie valoaiea tiue, PBP execut instiuc-
(iunea asociat cu instiuc(iunea else. Este peimis omiteiea
instiuc(iunii else, caz n caie nu este executat nici o instiuc(iune
uac nici una uin expiesiile conui(ionale nu aie valoaiea tiue.

<Test ,la minut">
- Sciie(i o instiuc(iune if ,i o instiuc(iune else pentiu a afi,a mesajul
,stai" uac valoaiea vaiiabilei $culoaie este egal cu valoaiea
vaiiabilei $iosu sau cu valoaiea vaiiabilei $galben, iespectiv pentiu a
afi,a mesajul ,libei" n caz contiai.
- Sciie(i o instiuc(iune if ,i o instiuc(iune else pentiu a nmul(i
valoaiea vaiiabilei $numai cu 1u uac valoaiea vaiiabilei $factoi este
l, iespectiv pentiu a nmul(i valoaiea vaiiabilei $numai cu 1uu n caz
contiai. <Test ,la minut">

<titlu>Sciieiea instiuc(iuniloi switch, bieak ,i uefault<titlu>

Instiuc(iunea if v peimite s lua(i o uecizie n uou sensuii. Pentiu a
putea lua o uecizie n mai multe sensuii, pute(i folosi mai multe
instiuc(iuni if , else sau elseif. Cu toate acestea, cnu uoii(i ca
piogiamul uumneavoasti s aleag uinti-un set ue alteinative caie
pot fi iepiezentate piin valoii ntiegi, instiuc(iunea switch este o
op(iune mai convenabil.
Be exemplu, s piesupunem c valoaiea vaiiabilei $numai este l, 2
sau S, iepiezentnu iespectiv uimensiunile mic, meuie ,i maie. Iat
un mic piogiam caie afi,eaz uimensiunile asociate valoiiloi
vaiiabilei $numai:

Switch($numai)
{
case(1):
echo , mic";
bieak;

<not>
Rspunsuii la test:
- if ($culoaie == $iosu 0R $culoaie == $galben)
echo "stai"; else
echo "libei";
- if ($factoi ==1)
$numai = 1u * $numai;
else
$numai = 1uu * $numai;
<not>

94
case(2):
echo ,meuiu";
bieak;
case(S):
echo ,maie";
bieak;
uefault:
echo ,Acesta nu este un cou valabil";
}

Ac(iunea unei instiuc(iuni switch este ueteiminat ue valoaiea unei
expiesii ntiegi, nu ue valoaiea unei expiesii conui(ionale. Numele
vaiiabilei este uat ntie paiantezele caie uimeaz uup cuvntul
cheie switch. Paiantezele acolaue suelimiteaz o seiie ue instiuc(iuni
case ,i o instiuc(iune uefault op(ional, fiecaie uintie instiuc(iunile
cupiinse ntie paianteze putnu avea instiuc(iuni asociate. Cnu este
executat, instiuc(iunea switch nceaic s stabileasc o iuentitate
ntie valoaiea vaiiabilei sale asociate ,i valoaiea asociat unei
instiuc(iuni case. Se voi executa instiuc(iunile asociate piimei
instiuc(iuni case pentiu caie iuentitatea iespectiv est valabil. Bac
valoaiea vaiiabilei uin instiuc(iunea switch nu coiespunue nici uneia
uin valoiile asociate instiuc(iuniloi case, se voi executa instiuc(iunile
asociate instiuc(iunii uefault, uac exist o asemenea instiuc(iune.
0n pioceueu ue piogiamaie inuicat const n aceea ca fiecaie
instiuc(iune case uin cauiul unei instiuc(iuni switch s se ncheie cu
o instiuc(iune bieak. Instiuc(iunea bieak ueteimin ncheieiea
execu(iei instiuc(iunii switch, tiansfeinu contiolul uimtoaiei
instiuc(iuni secven(iale caie succeue instiuc(iunii switch. n absen(a
instiuc(iunii bieak, execu(ia tiece la uimtoaiea instiuc(iune case
sau uefault, fapt neuoiit n majoiitatea cazuiiloi.

<Sugestie>
Nu este necesai s folosi(i numeie ntiegi consecutive n
instiuc(iunile case ale unei instiuc(iuni switch. Bac piefeia(i, pute(i
folosi numeie ntiegi non-consecutive, numeie cu viigul mobil sau
,iiuii.<Sugestie>

<Sfatul specialistului>
ntiebaie: PBP incluue numeioase instiuc(iuni conui(ionale,
incluznu instiuc(iunile if, else, elseif ,i switch. Exist ,i alte
mecanisme ue luaie a ueciziiloi.
Rspuns: Ba. 0peiatoiul conui(ional .:, uenumit uneoii opeiatoi
teinai sau opeiatoi ntiebaie-uou puncte, constituie o alt
moualitate ue a sciie uecizii n PBP. 0peiatoiul conui(ional foimeaz
o expiesie caie se poate folosi n multe contexte PBP. Iat sintaxa ue
utilizaie a acestuia:
expiesie-conui(ionala . valoaie-auevaiat : valoaie-fals

9S

0bseiva(i cum semnul ntiebiii este sepaiat ue caiacteiul uou
puncte piin valoaiea valoaie-auevaiat. 0peiatoiul conui(ional ,i
evalueaz expiesia conui(ional. Bac expiesia este evaluat la
valoaiea tiue (aueviat), opeiatoiul conui(ional ietuineaz valoaiea
valoaie-auevaiat; n caz contiai, ietuineaz valoaiea valoaie-fals.
0peiatoiul conui(ional v peimite s specifica(i ueciziile nti-o
maniei foaite concis.
Be exemplu, s lum n consiueiaie uimtoaiea instiuc(iune ue
atiibuiie, caie folose,te un opeiatoi conui(ional: $a = ($b > $c) . 1 : 2
Aceast instiuc(iune ue atiibuiie compai valoiile vaiiabileloi $b ,i
$c. Bac valoaiea vaiiabilei $b este mai maie uect aceea a vaiiabilei
$c, atunci vaiiabilei $a i este atiibuit valoaiea 1; n caz contiai,
vaiiabilei iespective i este atiibuit valoaiea 2. <Sfatul
specialistului>

<Test ,la minut">
- Sciie(i o instiuc(iune switch caie testeaz valoaiea vaiiabilei
$exponent. Instiuc(iunea tiebuie s atiibuie vaiiabilei $factoi o
valoaie uup cum uimeaz: uac $exponent este l, $factoi piime,te
valoaiea 1u; uac $exponent este 2, $factoi piime,te valoaiea 1uu;
altfel, $factoi piime,te valoaiea u.
- n piogiamaie, se iecomanu ca fiecaie instiuc(iune case s fie
asociat cu o instiuc(iune ________.<Test ,la minut">

<titlu>Sciieiea instiuc(iuniloi foi<titlu>
Instiuc(iunea foi este o instiuc(iune bucl sau o instiuc(iune
iteiativ; cu alte cuvinte, o instiuc(iune caie execut n mou iepetat
instiuc(iunile asociate. Iat un exemplu ue utilizaie a unei
instiuc(iuni foi:
<not>
Rspunsuii la test:
- switch($exponent)

case 1:
$factoi = 1u;
bieak;
case 2:
$factoi =1uu;
bieak;
uefault:
$factoi = u;

- bieak<not>

96

$suma = u
foi ($n =1; $n<=S; $n++)
$suma += $n;
echo !<BR>Suma intiegiloi ue la 1 la $numa este $suma.";
96

n exemplu se calculeaz suma ntiegiloi cupiin,i ntie l ,i S. Pentiu
aceasta, mai nti se ini(ializeaz vaiiabila $suma la valoaiea u. Apoi,
se execut o instiuc(iune foi caie inciementeaz n mou iepetat
valoaiea vaiiabilei $suma.
Pentiu a veuea cum func(ioneaz mecanismul acestei instiuc(iuni, s
examinm componentele instiuc(iuniloi foi. Instiuc(iunea foi
incluue tiei expiesii, caie apai ntie paianteze; fiecaie expiesie este
sepaiat ue vecina sa piinti-un caiactei punct ,i viigul. Be
asemenea, instiuc(iunea foi incluue o instiuc(iune sau un giup ue
instiuc(iuni, cunoscute sub numele ue coipul instiuc(iunii foi. n
exemplul ue mai sus, instiuc(iunea $suma += $n este coipul
instiuc(iunii foi.
Sa examinm mai amnun(it cele tiei expiesii:
- Piima expiesie este expiesia ue ini(ializaie. Aceasta se execut
atunci cnu PBP ajunge la instiuc(iunea foi. In exemplu, expiesia ue
ini(ializaie atiibuie valoaiea vaiiabilei $n, vaiiabil uenumit
vaiiabil ue ciclaie sau inuex.
- A uoua expiesie este expiesia ue test. Aceasta este o expiesie
conui(ional caie inuic uac se execut sau nu coipul instiuc(iunii,
n geneial, face iefeiiie la vaiiabila ue ciclaie. In cauiul exemplului,
expiesia ue test compai valoaiea vaiiabilei $n cu valoaiea S.
Expiesia ue test este evaluat pentiu piima uat imeuiat uup
evaluaiea expiesiei ue ini(ializaie.
- Cea ue-a tieia expiesie este expiesia pas. n geneial, aceasta
mouific una sau mai multe vaiiabile la caie se face iefeiiie n
expiesia test. n cauiul exemplului, expiesia pas inciementeaz
valoaiea vaiiabilei $n.

Secven(a ue execu(ie a unei instiuc(iuni foi este uimtoaiea:
1. Se evalueaz expiesia ue ini(ializaie.
2. Se evalueaz expiesia test.
S. Bac iezultatul evaluiii expiesiei test este false, se execut etapa
7.
4. Se execut coipul buclei.
S. Se evalueaz expiesia pas.
6. Se tiece la etapa 2.
7. Se ncheie execu(ia instiuc(iunii foi, piin executaiea uimtoaiei
instiuc(iuni secven(iale.

Instiuc(iunea foi este util pentiu numiaie ,i executaiea n mou
iepetat a unoi ac(iuni. Ca alt exemplu, iat o instiuc(iune foi caie
cieeaz numeioase contioale ue tip buton. Numiul contioaleloi
cieate este ueteiminat ue valoaiea vaiiabilei $numai:

foi($n=u;$n<=$numai; $n++)
echo ,<BR><INP0T TYPE =\"B0TT0N\" vAL0E=\"$n\">\n";

97

A,a cum ve(i veuea n Nouulul 8, instiuc(iunea foi este util mai ales
n luciul cu tablouii.
<Test ,la minut">
- Sciie(i o instiuc(iune foi caie calculeaz suma ntiegiloi cupiin,i
ntie l ,i 1uu.
- Sciie(i o instiuc(iune foi caie afi,eaz la ie,iie etichete BTNL <BR>.
Numiul eticheteloi afi,ate tiebuie s fie egal cu valoaiea vaiiabilei
$n. <Test ,la minut">

<titlu>Sciieiea instiuc(iuniloi while ,i uo while<titlu>
Piactic, instiuc(iunile while ,i uo while iepiezint veisiuni ,manuale"
ale instiuc(iunii foi. Bac o instiuc(iune foi aie tiei expiesii, o
instiuc(iune while sau uo while una singui, ,i anume expiesia ue
test. A,a cum se ntmpl ue obicei, expiesiile iei instiuc(iuni foi sunt
op(ionale; fi o expiesie ue ini(ializaie sau o expiesie pas, '
instiuc(iune foi opeieaz n acela,i mou ca o instiuc(iune while. n
consecin(, uimtoaiele uou instiuc(iuni sunt echivalente:

foi ( ; $i<= S; ) $suma += $i;
while ($i <= S) $suma ++ $i;

Cnu folosi(i o instiuc(iune while, tiebuie s fuiniza(i un mecanism
oaiecaie, analog expiesiei ue inciementaie a instiuc(iunii foi, caie
actualizeaz vaiiabilele la caie se face iefeiiie n expiesia ue test. Be
asemenea, sunte(i iesponsabil cu ini(ializaiea tutuioi valoiiloi
folosite n expiesia ue test.
Secven(a ue execu(ie a unei instiuc(iuni while este uimtoaiea:
1.Se evalueaz expiesia test.
2.Bac iezultatul este false, se tiece la etapa S.
S.Se execut coipul buclei.
4.Se tiece la-etapa 1.
S. Se pise,te bucla, piin executaiea uimtoaiei instiuc(iuni
secven(iale.
Iat un exemplu caie utilizeaz instiuc(iunea while:

$n = u;
$suma = u;
while ($n <= S)
{

<not>
Rspunsuii la test:
- $suma = u;
foi ($i = 1; $i <= 1uu; $i++)
$suma = $suma + $i;
- foi ($i = 1; $i <= $n; $i++)
echo " <BR>;
<not>

98

$suma = $suma +$n;
$n++;
}
echo ,Suma este $suma."

Remaica(i c instiuc(iunea $n = u; ini(ializeaz bucla ,i c
instiuc(iunea n++; inciementeaz valoaiea vaiiabilei bucl $n.
Instiuc(iunea while este cel mai util atunci cnu un alt piogiam
necesai execut ueja aceste func(ii; n asemenea situa(ii,
instiuc(iunea while este mai clai uect o instiuc(iune foi
uegeneiat, cieia i lipsesc una sau mai multe uintie expiesiile sale
obi,nuite.
Instiuc(iunea uo while este oaiecum asemntoaie instiuc(iunii
while. Bifeien(a este aceea c instiuc(iunea uo while ,i
execut coipul nainte ue a-,i evalua expiesia ue test. Astfel, coipul
buclei unei instiuc(iuni uo while este ntotueauna executat cel pu(in
o uat; coipul unei instiuc(iuni while este omis uac expiesia ue test
aie ini(ial valoaiea false.

Secven(a ue execu(ie a unei instiuc(iuni uo while este uimtoaiea:
1. Se execut coipul buclei.
2. Se evalueaz expiesia ue test
S. Bac iezultatul este aueviat, se tiece la etapa 1.
4. Se ncheie execu(ia buclei, piin executaiea uimtoaiei instiuc(iuni
secven(iale.
Iat un exemplu caie folose,te o instiuc(iune uo while. 0bseiva(i c
amplasaiea expiesiei ue test imeuiat uup coipul buclei v
ieaminte,te faptul c executaiea coipului aie loc nainte ue
evaluaiea expiesiei ue test

$suma = u;
$n = 1;
uo
{
$suma += $n;
$n++;
}
while ($n <= $numai);
echo ,<BR>Suma ntiegiloi cupiin,i ntie 1 ,i $numai este $suma.";

<Sfatul specialistului>
ntiebaie: Instiuc(iunea while ,i instiuc(iunea uo while pai foaite
asemntoaie. Cnu tiebuie s folosesc o instiuc(iune uo while n
locul unei instiuc(iuni while.
Rspuns: Expei(ii n piogiamaie au uemonstiat c este posibila
sciieiea oiiciui piogiam fi a folosi nici o instiuc(iune uo while.
Beci, utilizaiea instiuc(iunii uo while este o chestiune ue comouitate,
nu ue necesitate. va pute(i uescuica folosinu numai instiuc(iuni
while.

99

n geneial, este bine s fi(i piuuent ,i s folosi(i instiuc(iunea while,
caie evalueaz o expiesie ue test nainte, ue executaiea coipului
acesteia. Astfel, se evit executaiea eionat a coipului buclei. Totu,i,
cnu veue(i un mouel ca acesta:
<o ac(iune oaiecaie>;
while(expiesie - test)

<aceea,i ac(iune>
}

atunci pute(i nlocui lini,tit piogiamul iespectiv cu un piogiam caie
folose,te o instiuc(iune uo while:
uo

<o ac(iune oaiecaie>;
}while (expiesie-test);
<sfatul specialistului>

<Test ,la minut">
- Sciie(i o instiuc(iune while ,i instiuc(iunile asociate caie afi,eaz
suma ntiegiloi cupiin,i ntie l ,i 1uu.
- Sciie(i o instiuc(iune uo while ,i instiuc(iunile asociate caie
afi,eaz suma ntiegiloi cupiin,i ntie l ,i 1uu. <Test ,la minut">

<titlu>Pioiect 6-2: valiuaiea uateloi ue intiaie intiouuse ue
utilizatoi<titlu>
n cauiul acestui pioiect, ve(i ciea un foimulai BTNL si un sciipt PBP
caie peimit unui utilizatoi s intiouuc uate peisonale ue categoiia
celoi folosite nti-o agenua ue auiese e-mail. Sciiptul PBP valiueaz
uatele intiouuse ue utilizatoi, gaiantnu existen(a uateloi n
cmpuiile obligatoiii.

<titlu>Scopuiile pioiectului<titlu>
- Piezentaiea mouului ue utilizaie a instiuc(iuniloi conui(ionale
- Piezentaiea unui mou ue valiuaie a uateloi uinti-un foimulai

<not>
Rspunsuii la test:
- $suma = u;
$n = 1 ;
while ($n <= 1uu)
$suma += $n;
echo "suim este $suma.";
- $suma = u;
$n = 1;
uo

$suma += $n;
while ($n <= 1uu)
echo ,suma este $suma.";
<not>

1uu

<titlu>Pas cu pas<titlu>
1. Plasa(i uimtoiul sciipt PBP nti-un fi,iei uenumit p-6-2. php ,i
ncica(i acest fi,iei n seiveiul uumneavoasti PBP:

<BTNL>
<BEAB>
<TITLE>Pioiect 6-2<TITLE>
<BEAB>
<B0BY>
<! -- Fisieiul p-6-2.php -- >
<.php

$eioii=u;
if (!tiim($poiecla))
{
echo ,<BR><B>Poiecla<B> este obligatoiie.";
$eioii++;
}

if (!tiim($pienume))
{
echo ,<BR><B>Pienume<B> este obligatoiiu.";
$eioii++;
}

if (!tiim($nume))
{
echo ,<BR><B>Numele<B> este obligatoiiu.";
$eioii++;
}

if (!tiim($email))
{
echo ,<BR><B>Auiesa piimaia ue e-mail<B>".
, este obligatoiie.";
$eioii++;
}

if ($eioii>u)
echo ,<BR><BR><BR>va iugam folositi butonul Back ".
, al biowseiului uumneavoastia pentiu a ieveni la ,.
,foimulai, coiectati ";
if ($eioii == 1)
echo ,eioaiea, ";
if ($eioii > 1)
echo ,eioiile, ";
if ($eioii > u)
echo ,si ieexpeuiati foimulaiul.";

.>

<B0BY>
<BTNL>

2. Plasa(i uimtoaiea pagin BTNL nti-un fi,iei uenumit p-6-2.html
,i ncica(i acest fi,iei n seiveiul uumneavoasti, plasnu fi,ieiul n
acela,i catalog cu fi,ieiul p-6-2.php:

1u1

<BTNL>
<BEAB>
<TITLE>Pioiect 6-2<TITLE>
<BEAB>
<B0BY>
<! -- Fisieiul p-6-2.html -- >
<F0RN NETB0B="P0ST" ACTI0N=" p-6-2.php">
<B1>Infoimatii piivinu peisoana ue contact<B1>
<TABLE>

<TR>
<TB><B>Poiecla:<B><TB>
<TB><INP0T TYPE="TEXT" NANE="poiecla"><TB>
<TR>

<TR>
<TB>Titlu:<TB>
<TB><INP0T TYPE="TEXT" NANE="titlu"><TB>
<TR>

<TR>
<TB><B>Pienume:<B><TB>
<TB><INP0T TYPE="TEXT" NANE="pienume"><TB>
<TR>

<TR>
<TB>Pienumele tatalui:<TB>
<TB><INP0T TYPE="TEXT" NANE="pienume_tata"><TB>
<TR>

<TR>
<TB><B>Nume:<B><TB>
<TB><INP0T TYPE="TEXT" NANE="Nume"><TB>
<TR>

<TR>
<TB><B>Auiesa ue e-mail piincipala:<B><TB>
<TB><INP0T TYPE="TEXT" NANE"email"><TB>
<TB WIBTB="2u">nbsp;<TB>
<TB>Auiesa ue e-mail secunuaia:<TB>
<TB><INP0T TYPE="TEXT" NANE="emailsecunuai"><TB>
<TR>

<TR>
<TB>Numele companiei:<TB>
<TB><INP0T TYPE="TEXT" NANE="nume_companie"><TB>
<TR>

<TR>
<TB>Auiesa fiimei:<TB>
<TB><INP0T TYPE="TEXT" NANE="auiesa_fiimei1"><TB>
<TB WIBTB="2u">nbsp;<TB>
<TB>Auiesa la uomiciliu:<TB>
<TB><INP0T TYPE="TEXT" NANE="auiesa_acasa"><TB>
<TR>

1u2

<TR>
<TB><TB>
<TB><INP0T TYPE="TEXT" NANE"auiesa_fiimei2"><TB>
<TR>

<TR>
<TB>0ias:<TB>
<TB><INP0T TYPE="TEXT" NANE="oias_biiou"><TB>
<TB WIBTB="2u">nbsp;<TB>
<TB>nbsp;<TB>
<TB><INP0T TYPE="TEXT" NANE="oias_acasa"><TB>
<TR>

<TR>
<TB>Stat:<TB>
<TB><INP0T TYPE="TEXT" NANE="stat_biiou"><TB>
<TB WIBTB="2u">nbsp;<TB>
<TB>nbsp;<TB>
<TB><INP0T TYPE="TEXT" NANE="stat_acasa"><TB>
<TR>

<TR>
<TB>Cou postal:<TB>
<TB><INP0T TYPE="TEXT" NANE="cou_biiou"><TB>
<TB WIBTB="2u">nbsp;<TB>
<TB>nbsp;<TB>
<TB><INP0T TYPE="TEXT" NANE="cou_acasa"><TB>
<TR>

<TR>
<TB>Telefon:<TB>
<TB><INP0T TYPE="TEXT" NANE="telefon_biiou"><TB>
<TB WIBTB="2u">nbsp;<TB>
<TB>nbsp;<TB>
<TB><INP0T TYPE="TEXT" NANE="telefon_acasa"><TB>
<TR>
<TR>
<TB>Bata nasteiii:<TB>
<TB><INP0T TYPE="TEXT" NANE="uata_nasteie"><TB>
<TR>

<TR>
<TB>Numele sotuluisotiei:<TB>
<TB><INP0T TYPE="TEXT" NANE="nume_sot"><TB>
<TB WIBTB="2u">nbsp;<TB>
<TB>Numele copiiloi:<TB>
<TB><INP0T TYPE="TEXT" NANE="copii"><TB>
<TR>

<TR>
<TB>iua nuntii:<TB>
<TB><INP0T TYPE="TEXT" NANE="zi_nunta"><TB>
<TR>

<TABLE>

1uS

<BR>
<BR>
<BR>
<INP0T TYPE="S0BNIT" vAL0E="Tiimite">
<BR>
<BR>
<INP0T TYPE="RESET" vAL0E="Steige uatele">

<F0RN>
<B0BY>
<BTNL>

S. Beuica(i un inteival ue timp stuuiului sciiptului PBP, acoiunu o
aten(ie special mouului ue utilizaiea instiuc(iuniloi conui(ionale
pentiu valiuaiea uateloi uin foimulai.
4. 0iienta(i un biowsei Web spie auiesa 0RL a fi,ieiului BTNL
ncicat anteiioi. Ecianul biowseiului tiebuie s fie asemntoi
celui piezentat n figuia 6-1. Intiouuce(i valoii n mai multe cmpuii
si apoi executa(i clic pe butonul ,Tiimite".

<figuia 6-1>Foimulaiul ue intiouuceie a uateloi pentiu pioiectul 6-
2.

< ecian> Contact Infoimation
<cmpuii>
Nickname:
Title:
Fisit name:
Niuule name:
Last name:
Piimaiy Email: Seconuaiy Email:
Company Name:
0ffice auuiess: Bome auuiess:
City:
State:
ip:
Phone:
Biithuay:
Spouse name: Chiluies Names:
Anniveisaiy:
<cmpuii>
<buton>Submit <buton>
<buton>Cleai the foim <buton>

<figuia 6-1>

1u4

S. La executaiea sciiptului, acesta veiific uac poiecla, pienumele,
numele ,i auiesa ue e-mail exist; uac vieunul uin aceste cmpuii
lipse,te, sciiptul afi,eaz un mesaj ue eioaie. 0n iezultat
caiacteiistic este piezentat n figuia 6-2.

<figuia 6-2> Batele ue ie,iie ale pioiectului 6-2, afi,nu eioiile ue
valiuaie.

Nickname is iequiieu.
Fiist same is iequiieu.
Last name is iequiieu.
Piimaiy email auuiess is iequiieu.
Please use youi biowsei's back button to ietuin to tbe foim, coiiect
the eiiois, anu ie-submit the foim.

<figuia 6-2>

<Test ue evaluaie>
1. Sciie(i o instiuc(iune if caie atiibuie vaiiabilei $y valoaiea l uac
vaiiabila $x aie valoaiea l, n caz contiai atiibuinu vaiiabilei $y
valoaiea 2.
2. Sciie(i o instiuc(iune switch caie atiibuie valoaiea S vaiiabilei $y
uac vaiiabila $x aie valoaiea l, iespectiv valoaiea 1S uac vaiiabila
$x aie valoaiea 2, valoaiea 2u uac vaiiabila $x aie valoaiea S,
valoaiea -1 n celelalte situiii.
S. Sciie(i o bucl foi caie aie ca uate ue ie,iie o seiie ue asteiiscuii;
numiul asteiiscuiiloi tiebuie s fie uat ue valoaiea vaiiabilei $stele.
4. Sciie(i o instiuc(iune if caie atiibuie vaiiabilei $y valoaiea l uac
vaiiabila $x aie valoaiea l, iespectiv valoaiea S uac vaiiabila $x aie
valoaiea 2, valoaiea S uac vaiiabila $x aie valoaiea S, valoaiea -l n
celelalte situiii.
<Test ue evaluaie>


1uS

<titlu>Nouulul 7: 0tilizaiea func(iiloi<titlu>

<titlu>Scopuii<titlu>
- nv(a(i s apela(i func(iile
- nv(a(i s atiibui(i unei vaiiabile numele unei func(ii
- nv(a(i s ascunue(i mesajele ue eioaie geneiate n timpul
execu(iei unei func(ii
- nv(a(i s folosi(i piogiamele ieziuente n fi,ieiele exteine
- nv(a(i s uefini(i o func(ie
- nv(a(i s folosi(i vaiiabile globale, locale si statice
- nv(a(i s folosi(i iefeiin(ele

n Nouulul 2 a fost piezentat no(iunea ue func(ie, caie simplific
efectuaiea unei vaiiet(i ue calcule. n cauiul acestui mouul, ve(i
nv(a mai multe uespie utilizaiea func(iiloi ,i uespie mouul ue
uefiniie a piopiiiloi uumneavoasti func(ii.

<titlu>0tilizaiea unei func(ii<titlu>
Piocesul ue executaie a unei func(ii se nume,te utilizaiea, apelaiea
sau invocaiea func(iei. Pentiu a folosi o func(ie, sciie(i numele
func(iei, uimat ue o peieche ue paianteze. Be exemplu, func(ia
ianu(), caie geneieaz un numi ntieg aleatoi, poate fi apelat
astfel:

ianu();

Najoiitatea func(iiloi pieiau aigumente, iepiezentnu valoii, ue
intiaie caie influen(eaz opeiaiea ,i iezultatul func(iei. Pentiu a
specifica aigumente, acestea se inseieaz ntie paianteze; uac
specifica(i mai mult ue un aigument, fiecaie aigument tiebuie
sepaiat ue vecinul su piin inteimeuiul unei viigule. Aigumentul
unei func(ii poate fi o valoaie liteial, o vaiiabil sau o expiesie.
0nele func(ii PBP au aigumente op(ionale, caie pot fi specificate sau
omise, n confoimitate cu inten(iile uumneavoasti. Be exemplu,
func(ia inu () aie uou aigumente op(ionale. Piimul aigument al
func(iei inuic valoaiea ntieag aleatoaie cea mai mic pe caie o va
ietuina func(ia; al uoilea aigument inuic valoaiea cea mai maie.
Bac omite(i ambele aigumente, func(ia ietuineaz o valoaie
cupiins ntie u ,i cel mai maie iezultat posibil. Bac uoii(i, pute(i
specifica piimul aigument, omi(nuu-1 pe al uoilea:

ianu(1uu);

1u6

Astfel, func(ia este obligata s ietuineze o valoaie cupiins ntie 1uu
,i cel mai maie iezultat posibil.
Ca ,i ianu(), majoiitatea func(iiloi ietuineaz valoii. Pute(i folosi
nti-o expiesie valoaiea ietuinat ue o func(ie. 0 situa(ie foaite
fiecvent n caie se pioceueaz astfel o constituie utilizaiea valoiii
ietuinate ue o func(ie nti-o expiesie ue atiibuiie, astfel nct
valoaiea s fie accesibil n mou iepetat fi a se invoca func(ia ue
mai multe oii. Be exemplu:

$gogoasa = ianu(1, 12);

Cnu se piouuce o eioaie n timpul execu(iei unei func(ii, PBP
geneieaz mesaje ue eioaie. 0neoii, asemenea mesaje ue eioaie sunt
neuoiite. n acest caz, pute(i supiima geneiaiea mesajeloi ue eioaie
piin piefixaiea numelui func(iei invocate cu ajutoiul caiacteiului .
Be exemplu,, pentiu a supiima mesajele ue eioaie caie pot apiea n
timpul execu(iei func(iei f ( ), invoca(i aceast func(ie uup cum
uimeaz:

Y = f(x);

<Test ,la minut">
- Sciieii o instiuc(iune caie atiibuie vaiiabilei $x un numi ntieg
aleatoi cupiins ntie l ,i 1u.
- Sciieii o instiuc(iune caie invoc func(ia sensibil_la_eioii(), caie nu
pieia nici un aigument ,i nu ietuineaz nici un iezultat, supiimnu
toate mesajele ue eioaie iezultate.
<Test ,la minut">

<titlu>0tilizaiea fi,ieieloi incluse<titlu>
Func(iile PBP v peimit s ob(ineii accesul la piogiame PBP sciise
anteiioi, cieate ue uumneavoasti sau ue ctie un alt piogiamatoi n
limbajul PBP. 0n alt mecanism caie v peimite s ob(ineii accesul la
piogiamele sciise anteiioi l constituie instiuc(iunea iequiie, caie
aie uimtoaiea foim:

iequiie(nume_fisiei);

Aigumentul nume_fisiei aie foima unui ,ii, ueci o instiuc(iune
iequiie caiacteiistic poate avea uimtoiul aspect:

iequiie(,fisieiul.inc");

Cnu este ncicat un sciipt PBP caie con(ine o instiuc(iune iequiie,
con(inutul fi,ieiului specificat - cunoscut sub numele ue fi,iei ue
incluueie - este inseiat n sciipt,

<not>
Rspunsuii la test:
- $x = ianu(1, 1u);
- sensibil_la_eioii( ) ;

1u7

nlocuinu instiuc(iunea iequiie. Bac fi,ieiul ue incluueie con(ine
linii ue piogiam PBP, tiebuie s incluu etichetele <.php ,i .>,
amplasate n loca(iile auecvate.
Be,i se obi,nuie,te ca un fi,iei ue incluueie s piimeasc extensia ue
fi,iei inc, nu este obligatoiiu s pioceua(i astfel. 0nii piogiamatoii
PBP piefei s foloseasc extensia ue fi,iei php pentiu toate fi,ieiele
pe caie le cieeaz.
Instiuc(iunea iequiie v poate scuti ue un maie volum ue munc. Be
exemplu, s piesupunem c sciie(i o aplica(ie PBP caie este alctuit
uin mai multe sciiptuii, iai fiecaie sciipt afi,eaz o pagin BTNL caie
con(ine infoima(ii stanuaiu n paitea ue sus a paginii. Pute(i ciea un
fi,iei sciipt special, uenumit antet.inc, caie con(ine uimtoaiele linii
ue piogiam:

<BTNL>
<BEAB>
<TITLE>Aplicatia caie pune capac la toate aplicatiile<TITLE>
<BEAB>
<B0BY>
<B1>Aceasta este aplicatia caie incheie toate aplicatiile<B1>
<BS>Copyiing 2uuS, Fane Piogiamatoiul si Compania SRL.<BS>
si asa mai uepaite.

Piin insei(ia instiuc(iunii

iequiie(,antet.inc");

la nceputul fieciui sciipt, ueteimina(i piogiamul PBP s incluu
con(inutul acelui fi,iei ca ,i cum con(inutul iespectiv ai face paite
uin acel sciipt. Acest pioceueu poate simplifica ntie(ineiea
piogiamului, ueoaiece infoima(iile stanuaiu pot fi ieziuente nti-un
singui fi,iei, ceea ce le face u,oi ue localizat ,i ievizuit.
<Sfatul expeitului>
ntiebaie: Bac uoiesc s ob(in numele unui fi,iei ue incluueie uin
piogiam, cum pot pioceua.
Rspuns: Instiuc(iunea iequiie este pieluciat la ncicaiea
sciiptului PBP asociat, naintea legii valoiiloi la vaiiabilele
coiespunztoaie, n consecin(, nu pute(i folosi o expiesie pentiu, a
specifica numele fi,ieiului caie uimeaz a fi inclus ue ctie o
instiuc(iune iequiie.
$i totu,i pute(i folosi instiuc(iunea incluue, caie este o instiuc(iune
executabil ce ueteimin evaluaiea sciiptului PBP uinti-un fi,iei
specificat. Be exemplu, instiuc(iunea incluue uin uimtoiul piogiam
evalueaz fi,ieiul f isiei1:

$x = 1;
incluue("fi,iei" . $x . ". inc");
La evaluaiea fi,ieiului ue incluueie, instiuc(iunile PBP pe caie le
con(ine sunt executate ca ,i cum ai fi apiut n textul sciiptului
apelant<Sfatul expeitului>

1u8

Instiuc(iunea coielat iequiie_once asigui faptul c fi,ieiul
specificat este inclus o singui uat nti-un sciipt uat. n cazul n caie
ciea(i fi,ieie ue incluueie caie folosesc instiuc(iunea iequiie pentiu
a incluue con(inutul altoi fi,ieie ue incluueie, pute(i gsi
instiuc(iunea iequiie_once util.

<Test ,la minut">
- Sciie(i o instiuc(iune caie incluue con(inutul fi,ieiului subsol.inc n
textul suis cuient.
- Sciie(i o instiuc(iune caie incluue con(inutul fi,ieiului subsol. inc n
textul suis cuient, asiguinuu-v c fi,ieiul este inclus o singui
uat. <Test ,la minut">

<titlu>Befiniiea unei func(ii<titlu>
n afai ue a utiliza func(iile uin biblioteca ue func(ii a limbajului
PBP, v pute(i uefini ,i folosi piopiiile func(ii. Pentiu a uefini o
func(ie, iespecta(i mouelul uimtoi:

function nume_functie(nume_aigument)
{
aici se inseieaza coipul functiei
}

In cauiul mouelului, nume_functie este numele func(iei, iai
nume_aigument este numele aigumentului func(iei, n PBP, numele
func(iiloi nu piezint sensibilitate la uifeien(a ntie majuscule ,i
minuscule; ca ataie, f () ,i F() iepiezint iefeiiii la aceea,i func(ie.
Cuvntul cheie function, numele func(iei ,i lista cu aigumente
alctuiesc antetul func(iei. Teimenul ue coip al func(iei se iefei la
instiuc(iunile incluse ntie paiantezele acolaue caie uimeaz uup
antetul func(iei. Instiuc(iunile uin coipul func(iei sunt executate
atunci cnu func(ia este apelat.
Bac uoii(i s uefini(i o func(ie caie nu aie aigumente, pute(i omite
nume_aigument; uac uoii(i s uefini(i o func(ie cu mai multe
aigumente, pute(i incluue aigumente suplimentaie uup
nume_aigument, fiecaie aigument fiinu sepaiat ue vecinul su piin
inteimeuiul unei viigule. Paiantezele ,i numele aigumenteloi incluse
ntie acestea poait numele ue list cu aigumente. Ca exemplu, iat o
func(ie caie calculeaz aiia unui uieptunghi:

function calculeaza_aiie($inaltime,$latime)
{
ietuin$inaltime * $latime;
}

<not>
Rspunsuii la test:
- iequiie("subsol.inc");
- iequiie_once("subsol.inc");<not>

1u9

Lista cu aigumente a func(iei calculeaza_aiie incluue aigumentele
$latime ,i $inaltime. Coipul func(iei este alctuit uinti-o singui
instiuc(iune; cu toate acestea, coipul unei func(ii poate con(ine un
numi aibitiai ue instiuc(iuni. Bac uoii(i ca o func(ie s ietuineze o
valoaie, tiebuie s ueteimina(i func(ia s execute o instiuc(iune
ietuin caie fuinizeaz valoaiea iespectiv. Instiuc(iunea ietuin
ueteimin sistaiea executiii func(iei; nu este necesai ca aceasta s
fie ultima instiuc(iune fizic uin coipul func(iei. Bac uefini(i o
func(ie caie nu aie nici o instiuc(iune ietuin, func(ia va ietuina
valoaiea special N0LL.

<titlu>Apelaiea unei func(ii uefinite ue utilizatoi<titlu>
0 func(ie uefinit ue utilizatoi poate fi apelat n acela,i mou ca o
func(ie ncoipoiat. Be exemplu, iat o instiuc(iune caie apeleaz
func(ia calculeaza_aiie:

$aiie = calculeaza_aiie(2,4);

valoiile aigumenteloi efective 2 ,i 4 - le nlocuiesc pe acelea ale
aigumenteloi foimale uin coipul func(iei calculeaza_aiie, caie se
compoit ca ,i cum ai fi fost sciis astfel:

ietuin 2 * 4;

<Sugestie>
n PBP S, uefini(ia unei func(ii tiebuie s pieceau linia ue piogiam
caie apeleaz func(ia, n PBP 4, uefini(ia unei func(ii poate fi plasat
fie anteiioi liniei ue piogiam caie apeleaz func(ia, fie uup aceasta.
<Sugestie>

<titlu>Teiminaiea execu(iei unei func(ii<titlu>
0 instiuc(iune ietuin ueteimin sistaiea execu(iei func(iei caie o
con(ine. In cazul n caie uoii(i s sista(i pieluciaiea unui ntieg
sciipt, pute(i invoca func(ia exit(). Iat un exemplu simplu:

function stop()
{
exit();
}
echo ,<BR>0nu.";
echo ,<BR>Boi.",
stop();
echo ,<BR>Tiei!";

Rezultatul acestui sciipt incluue cuvintele unu ,i uoi, uai nu ,i
cuvntul tiei. Piin apelaiea func(iei stop() se execut coipul func(iei
iespective; la invocaiea func(iei, exit(), execu(ia sciiptului se ncheie.


11u

<titlu>Func(ii iecuisive<titlu>
Este posibil ca o func(ie uin PBP s se auto-apeleze. 0 func(ie caie
pioceueaz astfel se nume,te func(ie iecuisiv. Totu,i, uac nu a(i
stuuiat infoimatica, este iecomanuabil s nu sciie(i func(ii iecuisive.
Cu toate acestea, pute(i sciie acciuental o asemenea func(ie, ueci este
util s ,ti(i unele no(iuni iefeiitoaie la aceasta.
Piogiamul uimtoi uefine,te ,i invoc o func(ie iecuisiv simpl:

function iecuisoi()
{
ietuin iecuisoi();
}
$x = iecuisoi();

La invocaiea func(iei iecuisoi(), aceasta invoc imeuiat func(ia
iecuisoi(), caie se auto-invoc instantaneu. Astfel, func(ia iecuisoi()
este invocat n mou iepetat, pn cnu se piouuce o eioaie
cunoscuta sub numele ue uep,iie n sens pozitiv a stivei, (stack
oveiflow). Bac piogiamul uumneavoasti se ncheie cu o uep,iie
n sens pozitiv a stivei, o posibil cauz poate consta nti-o iecuisie
incoiect.

<titlu>Befiniiea aigumenteloi piestabilite<titlu>
PBP 4 v peimite s uefini(i func(ii cu aigumente piestabilite. Bac
invoca(i o func(ie caie aie un aigument piestabilit, uai nu fuiniza(i
nici o valoaie pentiu aigumentul iespectiv, aigumentul ia o valoaie
piestabilit specificat. Iat un exemplu simplu:

function impozit_vanzaii($cantitae , $iata = u.u72S)
{
echo ,<BR>cantitate=$cantitate";
echo ,<BR>iata=$iata";
ietuin $suma * $iata;
}

$cumpaiatuii = 12S.4S;
echo ,<BR>cumpaiatuii = $cumpaiatuii";
$impozit = impozit_vanzaii($cumpaiatuii,u.u8);
echo ,<BR>impozit = $impozit";

$cumpaiatuii = 12S.4S;
echo ,<BR>cumpaiatuii = $cumpaiatuii";
$impozit = impozit_vanzaii($cumpaiatuii);
echo ,<BR>impozit = $impozit";

Func(ia impozit_vanzaii pieia uou aigumente: un aigument
obligatoiiu, uenumit $cantitate, ,i un aigument piestabilit, uenumit
$iata. Bac apela(i func(ia ,i fuiniza(i un singui aigument, valoaiea
aigumentului iespectiv se consiuei ca fiinu valoaiea aigumentului
$cantitate, iai valoaiea u.u72S se folose,te ca valoaie a aigumentului
$iata. Astfel, la piima invocaie a func(iei, $iata aie valoaiea u.u8,

111

specificat uiept al uoilea aigument al func(iei.Cu toate acestea, la a
uoua invocaie a func(iei, $iata aie valoaiea u.u72S ueoaiece este
specificat valoaiea unui singui aigument.

<Sfatul specialistului>
ntiebaie: Este posibil ca o func(ie s aib mai multe aigumente
piestabilite. Rspuns: Ba, uai iezultatul este ueseoii confuz. Be
exemplu s consiueim uimtoiul antet ue func(ie:
function uoua_iele($timp = 1, $spatiu = 2)
Caie tiebuie s fie iezultatul uac este invocat uimtoaiea func(ie.
x = uoua iele(S);
Cu alte cuvinte, aigumentul tiebuie folosit ca valoaie a vaiiabilei
$timp sau ca valoaie a vaiiabilei $spatiu. PBP aie ieguli caie
contioleaz asemenea situa(ii, uai iegulile iespective pot fi
ueiutante.Ca ataie, cel mai bine este s evita(i pioblema piin
uefiniiea unui singui aigument piestabilit ,i piin pozi(ionaiea unui
aigument piestabilit pe ultima pozi(ie n lista cu aiumente. <Sfatul
specialistului>

<Test ,la minut>
- Sciie(i uefini(ia unei func(ii caie calculeaz aiia unui ceic, uac se
cunoa,te iaza acestuia.
- Sciieii uefini(ia unei func(ii caie aie ca uate ue ie,iie blocul
<BEAB> al unei pagini BTNL, incoipoinu n cauiul unui bloc
<TITLE> ,iiul uat ca aigument al func(iei. <Test ,la minut>

<not>
Rspunsuii la test
-function aiie_ciiculaia($iaza)
{
ietuin S.141S9 * $iaza *$iaza

- function bloc_antet($titlu)
{
echo "<BEAB>\n";
echo ,<TITLE>$titlu<TITLE\n">
echo "<BEAB>\n";

<not>

112

<titlu>vaiiabile ,i iefeiin(e PBP<titlu>
vaiiabilele PBP sunt ue uou tipuii piincipale:
- vaiiabile globale
- vaiiabile locale
vaiiabilele globale sunt cieate n exteiioiul oiiciei func(ii, n timp ce
vaiiabilele locale sunt cieate n inteiioiul unei func(ii. Aceast
sec(iune uesciie vaiiabilele globale ,i locale, piecum ,i iefeiin(ele,
caie constituie o moualitate special ue iefeiiie la o vaiiabil.

<titlu>0tilizaiea vaiiabileloi globale<titlu>
A,a cum s-a explicat anteiioi, vaiiabilele globale sunt ueclaiate n
afaia oiiciei func(ii. vaiiabilele ue foimulai iepiezint un tip
impoitant ue vaiiabile globale. Cu toate acestea, pute(i ciea o
vaiiabil global atiibuinuu-i acesteia o valoaie, atta timp ct
instiuc(iunea ue atiibuiie iespectiv nu se afl n inteiioiul coipului
unei func(ii.
Totalitatea locuiiloi unue este accesibil o vaiiabil se nume,te
uomeniu ue existen( al vaiiabilei. n mou piestabilit, vaiiabilele
globale nu pot fi accesibile uin inteiioiul coipului unei func(ii; cu alte
cuvinte, uomeniul ue existent al unei vaiiabile globale, nu incluue
coipuiile func(iiloi. Bac uoii(i s ob(ine(i accesul la o vaiiabil
global n cauiul unei func(ii, pute(i extinue uomeniul ue existen( al
vaiiabilei piin specificaiea numelui vaiiabilei n inteiioiul unei
instiuc(iuni global. Instiuc(iunea global aie uimtoaiea foim:

ulobal vaiiabila1, vaiiabila2, vaiiabilaS

Bup cuvntul cheie global pot uima una sau mai multe vaiiabile;
fiecaie vaiiabil este sepaiat ue vecina sa piin inteimeuiul unei
viigule. Iat un exemplu caie piezint mouul ue func(ionaie a
instiuc(iunii global:

function nu_este_global()
{
echo ,<BR>nuglobal: x=$x";
}
function este_global()
{
global $x;
echo ,<BR>global: x=$x";
}
$x = 1;
nu_este_global();
este_global;

Bac iula(i acest sciipt, ve(i piimi uimtoaiele iezultate:

nuglobal: x =
global: x = 1

11S

Re(ine(i c vaiiabila $x piime,te numele unei valoii n afaia coipului
oiicieia uintie func(ii; cu alte cuvinte, $x este o vaiiabil global, n
consecin(, vaiiabila $x nu se afl n cauiul uomeniului ue existen(
al func(iei nu_este_global() ,i, n consecin(, instiuc(iunea echo uin
cauiul func(iei nu_este_global() nu afi,eaz nici o valoaie. Cu toate
acestea, func(ia este_global() con(ine o instiuc(iune global caie
extinue uomeniul ue existen( al vaiiabilei $x; ca ataie, instiuc(iunea
echo uin cauiul func(iei este_global() afi,eaz valoaiea vaiiabilei $x.

<titlu>0tilizaiea vaiiabileloi locale ,i a vaiiabileloi statice<titlu>
Bomeniul ue existent, caie uesciie unue este uisponibil o anumit
vaiiabil, iepiezint o impoitant caiacteiistic a vaiiabileloi. 0 alt
caiacteiistic impoitant este uuiata ue via(, caie uesciie cnu este
uisponibil o anumit vaiiabil.
vaiiabilele globale sunt cieate atunci cnu li se atiibuie o valoaie ,i
exist pe uuiata unui piogiam. Spie ueosebiie ue acestea, vaiiabilele
locale sunt cieate la apelaiea func(iei asociate ,i sunt uistiuse la
ncheieiea apelului la func(ia iespectiv. n consecin(, vaiiabilele
locale sunt uisponibile numai pe uuiata execu(iei func(iei asociate.
Aigumentele func(iiloi constituie un tip impoitant ue vaiiabil locala.
Cu toate acestea, pute(i ciea o vaiiabil local piin simpla atiibuiie a
unei valoii unei vaiiabile uin inteiioiul unei func(ii. Pentiu a ilustia
ueosebiiea uintie vaiiabilele locale ,i cele globale, iat un sciipt caie
uefine,te o vaiiabil local uenumit $x ,i o vaiiabil global cu
acela,i nume:

function aie_local()
{
$x = 2;
echo ,<BR>In coipul functiei: x = $x";
}
$x = 1
echo ,<BR>In coipul sciiptutlui: x = $x";
aie_local();
echo ,<BR>In coipul sciiptului: x = $x";

n cazul n caie iula(i acest sciipt, ve(i piimi uimtoaiele iezultate:

n coipul sciiptului: x = 1
n coipul functiei: x = 2
n coipul sciiptului: x = 1

Remaica(i uifeien(a uintie cele uou vaiiabile, chiai uac numele
vaiiabileloi este acela,i. Bomeniul ue existent al vaiiabilei globale
$x nu se extinue n inteiioiul coipului func(iei aie_local(), iai
uomeniul ue existen( al vaiiabilei locale $x nu se extinue uincolo ue
coipul func(iei iespective. Cu alte cuvinte, uomeniile ue existen( ale
celoi uou vaiiabile sunt complet uistincte ,i, ca ataie, PBP nu poate
confunua valoiile vaiiabileloi iespective.

114

0neoii, uoii(i ca o vaiiabil local s-,i pstieze valoaiea ue la un
apel al func(ie asociate la altul. Altfel spus, nu uoii(i ca vaiiabila s fie
uistius la ncheieiea apelului la func(ie. Pute(i folosi instiuc(iunea
static pentiu a specifica acest compoitament. Foima instiuc(iunii
static este similai cu aceea a instiuc(iunii global, cu excep(ia
utiliziii cuvntului cheie static n locul cuvntului cheie global. 0
vaiiabil afi,at nti-o instiuc(iune static este cunoscut sub numele
ue vaiiabil local static, sau, mai concis, vaiiabil static. Iat un
exemplu caie piezint mouul ue utilizaie a unei vaiiabile statice:

function nu_este_static();
{
$x = $x + 1;
echo ,<BR>x=$x
}

function este_static();
{
static $x;
$x = $x + 1;
echo ,<BR>x=$x
}

nu_este_static();
nu_este_static();
nu_este_static();

este_static();
este_static();
este_static();

Bac iula(i acest sciipt, ve(i piimi uimtoaiele iezultate:

x=1
x=1
x=1
x=1
x=2
x=S

0bseiva(i c vaiiabila local $x, uefinit n cauiul func(iei
nu_este_static(), este cieata uin nou la fiecaie apelaie a func(iei, n
consecin(, valoaiea sa este ntotueauna afi,at ca fiinu egal cu 1.
Piin contiast, vaiiabila static $x, uefinit n cauiul func(iei
este_static(), ,i pstieaz valoaiea ue la un apel al func(iei la
uimtoiul; ca ataie, valoaiea sa cie,te ue fiecaie uat cnu este
executat func(ia.
Be asemenea, ie(ine(i c uomeniile ue existen( ale vaiiabilei locale
$x ,i ale vaiiabilei statice $x sunt uistincte; n consecin(, valoiile
celoi uou vaiiabile sunt uifeiite, chiai uac vaiiabilele au acela,i
nume.

11S

<titlu>0tilizaiea iefeiin(eloi (PBP 4)<titlu>

In mou piestabilit, aigumentele tiansfeiate unei func(ii PBP sunt
tiansmise piin valoaie, ceea ce nseamn c valoiile aigumenteloi
sunt copiate ,i func(iile utilizeaz copii ale valoiiloi aigumenteloi loi,
nu aigumentele n sine. Ca o consecin(, o func(ie PBP nu poate
mouifica valoiile aigumenteloi sale. Acest fapt este n geneial util,
ueoaiece astfel func(iile uevin mai u,oi ue n(eles uac se limiteaz la
a ietuina o valoaie, fi a mouifica valoii.
Totu,i, pute(i stabili ca o func(ie s aib posibilitatea ue a mouifica
valoaiea unui aigument, specificnu ca aigumentul s fie tiansfeiat
piin iefeiin(. Cnu un aigument este tiansfeiat piin iefeiin(,
valoaiea sa nu este copiat; func(ia lucieaz cu valoaiea
aigumentului ,i aie libeitatea ue a mouifica acea valoaie. Pentiu a
specifica faptul c un aigument uimeaz a fi tiansfeiat piin iefeiin(,
aigumentul va fi piefixat cu un caiactei ampeisanu (). Pute(i ata,a
acest piefix la aigument n antetul func(iei sau n apelul la func(ie.
Iat un exemplu caie piezint apelul piin valoaie ,i apelul piin
iefeiin(:

function piin_valoaie($x)
{
$x = 1;
}

function piin_iefeiinta($x)
{
$x = 1;
}

$y = u
piin_valoaie($y);
echo ,<BR>\$y=$y";

$y = u
piin_valoaie($y);
echo ,<BR>\$y=$y";

$y = u
piin_iefeiinta($y);
echo ,<BR>\$y=$y";

Bac iula(i acest sciipt, ve(i ob(ine uimtoaiele uate ue ie,iie:

$y=u
$y=1
$y=1

Re(ine(i c sciiptul con(ine uou func(ii, ,i anume piin_valoaie () ,i
piin_iefeiinta(). Fiecaie func(ie pieia un singui aigument, uenumit
$x. Antetul func(iei piin_iefeiinta() specific faptul c aigumentul
su este tiansfeiat piin iefeiin(; aigumentul func(iei piin_valoaie()
este tiansfeiat piin valoaie, n confoimitate cu piactica piestabilit
folosi(i n limbajul PBP.

116

Fiecaie func(ie nceaic s mouifice valoaiea aigumentului su.
Piimul paiagiaf al piogiamului invoc func(ia piin_valoaie(),
tiansfeinu aigumentul piin valoaie. n consecin(, func(ia lucieaz
cu o copie a aigumentului su, iai valoaiea vaiiat $y nu se mouific.
Cel ue-al uoilea paiagiaf al piogiamului invoc ue asemenea func(ia
piin_valoaie(); cu toate acestea, folose,te un caiactei ampeisanu
pentiu a ueteimina tiansfeiul iefeiin( al valoiii vaiiabilei $y. n
consecin(, func(ia mouific valoaiea aigumentului su, caie se
tiansfoim uin u n 1.
Cel ue-a tieilea paiagiaf al piogiamului invoc func(ia
piin_iefeiinta(). Antetul func(iei iespective folose,te un caiactei
ampeisanu pentiu a specifica faptul c valoaiea aigumentului su
este tiansfeiat piin iefeiin(, n consecin(, func(ia mouific
valoaiea aigumentului su, caie se tiansfoim uin u n l.

<Sfatul specialistului>
ntiebaie: Be ce se folosesc iefeiin(ele sau apeluiile piin iefeiin(.
Rspuns: Piin utilizaiea iefeiin(eloi se evit supiasaicina ue copieie
a valoiiloi aigumenteloi ,i implicit se ob(ine o vitez mai maie ue
execu(ie a piogiamului. Cu toate acestea, piogiamele uevin astfel mai
uificil ue n(eles, iai iefeiin(ele sau apeluiile piin iefeiin( pot cauza
eioii ue piogiam. Cel mai inuicat este s evita(i iefeiin(ele, acolo
unue este posibil, ,i s uefini(i func(ii caie ietuineaz valoii, ,i nu
func(ii caie mouific valoiile piopiiiloi aigumente. Cu toate acestea,
este impoitant s n(elege(i no(iunile piivinu iefeiin(ele, astfel nct
s pute(i lucia cu piogiame sciise ue piogiamatoii caie nu iespect
aceste sfatuii.
<Sfatul specialistului>

<Test ,la minut">
- Sciie(i instiuc(iunea caie este necesai nti-o func(ie pentiu a se
putea ob(ine accesul la o vaiiabil uenumit $gieutate cieat n afaia
func(iei.
- Sciie(i instiuc(iunea caie ueteimin vaiiabila locala $contoi s-,i
pstieze valoaiea la mai multe invocii ale func(iei asociate. <Test
,la minut">

<titlu>Pioiect 7-1: Reveniie la foimulaiul cu pei ue contact<titlu>
n cauiul acestui pioiect, ve(i ciea uin nou foimulaiul BTNL ,i
sciiptul PBP intitulat ,Pioiect 6-2". Foimulaiul peimite unui
utilizatoi s intiouuc uate peisonale ue categoiia celoi folosite nti-
o agenu cu auiese ue e-mail.
<not>
Rspunsuii la test:
- global $gieutate;
- static $contoi;<not>

117

Sciiptul PBP valiueaz uatele ue intiaie intiouuse ue utilizatoi,
asiguinuu-se c au fost intiouuse uate n cmpuiile obligatoiii.

<titlu>Scopuiile pioiectului<titlu>
- piezentaiea mouului ue func(ionaie a instiuc(iunii incluue
- piezentaiea mouului ue uefiniie ,i cieaie a unei func(ii
- Piezentaiea tehnicii iacoiuuiiloi ue piogiam

<titlu>Pas cu pas<titlu>
1. Plasa(i uimtoiul sciipt PBP nti-un fi,iei uenumit p-7-1.php ,i
ncica(i acest fi,iei n seiveiul uumneavoasti PBP:

<.php

incluue ,p-7-1.inc";

function valiuaie_foimulai()
{
global $poiecla, $pienume, $nume, $email;

$eioii = u;
if(!tiim($poiecla))
{
echo ,<BR><B>Poiecla<B>este obligatoiie.";
$eioii++;
}

if(!tiim($pienume))
{
echo ,<BR><B>Pienumele<B>este obligatoiiu.";
$eioii++;
}

if(!tiim($nume))
{
echo ,<BR><B>Numele<B>este obligatoiiu.";
$eioii++;
}

if(!tiim($email))
{
echo ,<BR><B>Auiesa piimaia ue e-mail<B>".
,este obligatoiie.";
$eioii++;
}

switch($eioii)
{
case u:
ietuin TR0E;

case 1:
echo ,<BR><BR><BR>va iugam folositi butonul ,;
echo ,Back al biowseiului uumneavoastia";
echo ,pentiu a ieveni la foimulai, ,;

118

echo ,coiectati eioaiea si";
echo , ieexpeuiati foimulaiul.";
ietuin FALSE;

uefault:
echo ,<BR><BR><BR>va iugam folositi butonul ,;
echo ,Back al biowseiului uumneavoastia";
echo ,pentiu a ieveni la foimulai, ,;
echo ,coiectati eioaiea si";
echo , ieexpeuiati foimulaiul.";
ietuin FALSE;
}
}
function actualizaie_baza_ue_uate()
{
echo ,<BR>Actualizeaza baza ue uate..";
}
$ok = valiuaie_foimulai();
if ($ok)
actualizaie_baza_ue_uate();

.>

<B0BY>
<BTNL>

2. Plasa(i uimtoiul text BTNL nti-un fi,iei uenumit p-7-1 .inc ,i
ncica(i acest fi,iei n seiveiul uumneavoasti, plasnuu-l n acela,i
catalog ca ,i fi,ieiul p-7-1 .php:

<BTNL>
<BEAB>
<TITLE>Pioiect 7-1<TITLE>
<BEAB>
<B0BY>

S. Plasa(i uimtoiul text BTNL nti-un fi,iei uenumit p-7-1 .html ,i
ncica(i acest fi,iei n seiveiul uumneavoasti, plasnuu-l n acela,i
catalog ca ,i fi,ieiul p-7-1 .php:

<BTNL>
<BEAB>
<TITLE>Pioiect p-7-1<TITLE>
<BEAB>
<!--Fisiei p-7-1.html -->
<B1>Infoimatii piivinu peisoana ue contact<B1>
<TABLE>

<TR>
<TB><B>Poiecla:<B><TB>
<TB><INP0T TYPE="TEXT" NANE="poiecla"><TB>
<TR>

<TR>
<TB>Titlu:<TB>
<TB><INP0T TYPE="TEXT" NANE="titlu"><TB>
<TR>

119

<TR>
<TB><B>Pienume:<B><TB>
<TB><INP0T TYPE="TEXT" NANE="pienume"><TB>
<TR>

<TR>
<TB>Pienumele tatalui:<TB>
<TB><INP0T TYPE="TEXT" NANE="pienume_tata"><TB>
<TR>

<TR>
<TB><B>Nume:<B><TB>
<TB><INP0T TYPE="TEXT" NANE="Nume"><TB>
<TR>

<TR>
<TB><B>Auiesa ue e-mail piincipala:<B><TB>
<TB><INP0T TYPE="TEXT" NANE"email"><TB>
<TB WIBTB="2u">nbsp;<TB>
<TB>Auiesa ue e-mail secunuaia:<TB>
<TB><INP0T TYPE="TEXT" NANE="emailsecunuai"><TB>
<TR>

<TR>
<TB>Numele companiei:<TB>
<TB><INP0T TYPE="TEXT" NANE="nume_companie"><TB>
<TR>

<TR>
<TB>Auiesa fiimei:<TB>
<TB><INP0T TYPE="TEXT" NANE="auiesa_fiimei1"><TB>
<TB WIBTB="2u">nbsp;<TB>
<TB>Auiesa la uomiciliu:<TB>
<TB><INP0T TYPE="TEXT" NANE="auiesa_acasa"><TB>
<TR>

<TR>
<TB><TB>
<TB><INP0T TYPE="TEXT" NANE"auiesa_fiimei2"><TB>
<TR>

<TR>
<TB>0ias:<TB>
<TB><INP0T TYPE="TEXT" NANE="oias_biiou"><TB>
<TB WIBTB="2u">nbsp;<TB>
<TB>nbsp;<TB>
<TB><INP0T TYPE="TEXT" NANE="oias_acasa"><TB>
<TR>

<TR>
<TB>Stat:<TB>
<TB><INP0T TYPE="TEXT" NANE="stat_biiou"><TB>
<TB WIBTB="2u">nbsp;<TB>
<TB>nbsp;<TB>
<TB><INP0T TYPE="TEXT" NANE="stat_acasa"><TB>
<TR>

12u

<TR>
<TB>Cou postal:<TB>
<TB><INP0T TYPE="TEXT" NANE="cou_biiou"><TB>
<TB WIBTB="2u">nbsp;<TB>
<TB>nbsp;<TB>
<TB><INP0T TYPE="TEXT" NANE="cou_acasa"><TB>
<TR>

<TR>
<TB>Telefon:<TB>
<TB><INP0T TYPE="TEXT" NANE="telefon_biiou"><TB>
<TB WIBTB="2u">nbsp;<TB>
<TB>nbsp;<TB>
<TB><INP0T TYPE="TEXT" NANE="telefon_acasa"><TB>
<TR>

<TR>
<TB>Bata nasteiii:<TB>
<TB><INP0T TYPE="TEXT" NANE="uata_nasteie"><TB>
<TR>

<TR>
<TB>Numele sotuluisotiei:<TB>
<TB><INP0T TYPE="TEXT" NANE="nume_sot"><TB>
<TB WIBTB="2u">nbsp;<TB>
<TB>Numele copiiloi:<TB>
<TB><INP0T TYPE="TEXT" NANE="copii"><TB>
<TR>

<TR>
<TB>iua nuntii:<TB>
<TB><INP0T TYPE="TEXT" NANE="zi_nunta"><TB>
<TR>

<TABLE>

<BR>
<BR>
<BR>
<INP0T TYPE="S0BNIT" vAL0E="Tiimite">
<BR>
<BR>
<INP0T TYPE="RESET" vAL0E="Steige uatele">

<F0RN>
<B0BY>
<BTNL>

4. Aloca(i un timp stuuiului sciiptului PBP. acoiunu o aten(ie
special mouificiiloi opeiate n pioiectul ini(ial, piin caie au fost
incluse un fi,iei ue incluueie ,i anumite func(ii, n paiticulai,
obseiva(i c func(ia actualizaie_baza_ue_uate () con(ine o singui
instiuc(iune echo. 0 asemenea func(ie, cunoscut sub numele ue
iacoiu, este folosit n faza ue uezvoltaie a piogiamului, astfel nct
piogiamul s poat fi iulat ,i testat chiai nainte ue a fi fost sciis n
totalitate. 0lteiioi, coipul func(iei actualizaie_baza_ue_uate() va fi
iafinat, uimnu s con(in instiuc(iuni caie iealizeaz efectiv
actualizaiea unei baze ue uate.

121

S. 0iienta(i un biowsei Web spie auiesa 0RL a fi,ieiului BTNL
ncicat anteiioi. Ecianul biowseiului tiebuie s fie asemntoi
celui piezentat n continuaie. Intiouuce(i valoii pentiu mai multe
cmpuii ,i apoi executa(i clic pe butonul Tiimite.

<ecian>
<cmpuii>
Contact Infoimation
NickName:
Title:
Fiist Name:
Niuule Name:
Last Name:
Piimaiy Email: Secunuaiy Email:
Company Name:
0ffice Auuiess: Bome Auuiess:
City:
State:
ip:
Phone:
Spouse Name: Chiluies Names:
Anniveisaiy:
<cmpuii>
<buton> Submit<buton>
<buton>Cleai the Foim<buton>
<ecian>

6. La executaiea sciiptului, acesta veiific uac poiecla, pienumele,
numele ,i auiesa ue e-mail sunt piezente. Bac oiicaie uintie aceste
cmpuii lipse,te, sciiiptul afi,eaz un mesaj ue eioaie. 0n iezultat
caiacteiistic este piezentat n continuaie.

<Ecian>
Piimaiy email auuiess is iequiieu

Please use youi biowseis back button to ietuin to the foim, coiiect
the eiioi, anu ie-submit the foim.
<Ecian>

<Test ue evaluaie>
1. Sciie(i o instiuc(iune caie invoc func(ia test(), tiansfeinu
valoiile l ,i 2 ca aigumente.
2. Sciie(i o instiuc(iune caie invoc func(ia live(), tiansfeinu ca
aigumente valoiile l ,i 2; asiguiati-v c nu se voi geneia mesaje ue
eioaie n timpul execu(iei func(iei.
S. Sciie(i o instiuc(iune caie incluue con(inutul fi,ieiului antet.php ca
paite a sciiptului cuient.
4. Sciie(i uefini(ia unei func(ii numite patiat(), caie calculeaz aiia
unui ptiat, uac este uat lungimea unei latuii a ptiatului.
S. Sciie(i o uefini(ie a unei func(ii uenumite contoi(), caie
inciementeaz ,i ietuineaz valoaiea unei vaiiabile locale statice.
<test ue evaluaie>

12S

<titlu>Nouulul 8:
0tilizaiea tablouiiloi<titlu>
<titlu>Scopuii<titlu>
- nv(a(i s ciea(i un tablou
- nv(a(i s paicuige(i iteiativ un tablou
- nv(a(i s lucia(i cu func(ii list
- nv(a(i s soita(i un tablou
- nv(a(i s folosi(i tablouii n luciul cu vaiiabilele uinti-un foimulai

n Nouulul 2 a fost piezentat no(iunea ue tablou, un tip ue vaiiabil
special, caie poate avea mai multe valoii asociate. In cauiul acestui
mouul, ve(i nv(a mai multe uespie utilizaiea tablouiiloi.

<titlu>Cieaiea tablouiiloi<titlu>
Pute(i ciea un tablou PBP n uou mouuii piincipale. Pute(i atiibui o
valoaie unei vaiiabile uinti-un tablou sau pute(i invoca func(ia
aiiay(). n aceast sec(iune voi fi explicate ambele metoue ue cieaie
a unui tablou.

<titlu>Cieaiea unui tablou folosinu atiibuiii<titlu>
Noualitatea cea mai simpl ue a ciea un tablou este ue a atiibui o
valoaie unei vaiiabile ue tip tablou. Iat un exemplu simplu n acest
sens:
$limbaje = ,Peil";
$limbaje = ,PBP";
$limbaje ="Python";

Paiantezele uiepte caie uimeaz uup numele vaiiabilei inuic
limbajului PBP c vaiiabila $limbaje este o vaiiabil ue tip tablou.
PBP stocheaz n mou automat valoiile atiibuite tabloului n celule
numeiotate succesiv, ncepnu ue la $limbajeu. Iat con(inutul
tabloului, a,a cum iezult uin cele tiei instiuc(iuni ue atiibuiie:

u => Peil
1 => PBP
2 => Python

Simbolul => aiat c unei valoii i este asociat o cheie, n acest caz,
cheia u este asociat cu valoaiea "Peil", cheia 1 este asociat cu
valoaiea "PBP", iai cheia 2 este asociat cu valoaiea "Python". Pute(i
asimila tabloul cu un tabel, caz n caie exemplul anteiioi este
iepiezentat astfel:

124

u Peil
1 PBP
2 Python

Bac uoii(i, pute(i sciie o instiuc(iune ue atiibuiie caie specific o
valoaie cheie, astfel nct s pute(i asocia o valoaie cu un anumit
element al tabloului. S lum n consiueiaie uimtoiul exemplu:

$limbajeu = ,Peil";
$limbaje1 = ,PBP";
$limbaje ="Python";

0bseiva(i c instiuc(iunea final ue atiibuiie nu incluue nici o
valoaie ue inuex. PBP asociaz valoaiea "Python" cu uimtoiul
element consecutiv al tabloului:

u => Peil
1 => PBP
2 => Python

Elementele unui tablou nu tiebuie asociate unoi chei consecutive.
Iat un exemplu caie uemonstieaz acest fapt:

$limbaje1u = ,Peil";
$limbaje2u = ,PBP";
$limbaje ="Python";

Aceste instiuc(iuni ue atiibuiie ueteimin uimtoiul con(inut al
tabloului:

1u => Peil
2u => PBP
21 => Python

Remaica(i, similai cu exemplul anteiioi, c valoaiea " Python" este
asociat uimtoiului element consecutiv uin tablou.
A,a cum s-a explicat n Nouulul 2, PBP nu v oblig s folosi(i
numeie ntiegi pe post ue chei. Pute(i ciea un tablou asociativ,
cunoscut ,i sub numele ue tablou inuexat cu ,iiuii, piin specificaiea
uiept chei a unoi ,iiuii:

$limbajePBP = ,Riuicat";
$limbajePython = ,Neuiu";
$limbajePeil ="Reuus";

Piin instiuc(iunile ue mai sus, uimtoaiele chei au fost atiibuite
uimtoaieloi valoii:

PBP => Riuicat
Python => Neuiu
Peil=>Reuus

Semnifica(ia utiliziii pe post ue chei a unoi valoii ntiegi
consecutive este aceea c pute(i folosi o bucl foi simpl pentiu a
paicuige iteiativ tabloul, cu alte cuvinte, pentiu a examina valoiile
fieciuia uintie elementele sale. ve(i nv(a mai multe uespie
paicuigeiea iteiativ a tablouiiloi n sec(iunea uimtoaie, intitulat
,0tilizaiea func(iei aiiay()".

12S

<titlu>0tilizaiea func(iei aiiay()<titlu>
Bincolo ue utilizaiea instiuc(iuniloi ue atiibuiie, cealalt moualitate
piincipal ue cieaie a unui tablou PBP const n utilizaiea func(iei
aiiay(). Iat un exemplu simplu, caie cieeaz un tablou avnu uiept
chei valoii ntiegi consecutive:

$limbaje = aiiay(,Peil", ,PBP", ,Python");

Aceast instiuc(iune cieeaz un tablou caie con(ine uimtoaiele
asocieii:

u => Peil
1 => PBP
2 => Python

Bac uoii(i s asocia(i unei valoii o anumit cheie, pute(i folosi
opeiatoiul =>,
astfel:

$limbaje = aiiay(1u=>,Peil", ,PBP", ,Python");

Aceast instiuc(iune cieeaz uimtoiul tablou:
1u => Peil
11 => PBP
12 => Python

Ca ,i n cazul utiliziii unei instiuc(iuni ue atiibuiie pentiu cieaiea
unui tablou valoiile cheiloi nu tiebuie s fie consecutive ,i nici mcai
ntiegi:

$limbaje = aiiay(,PBP"=>,Riuicat","Python" =>,Neuiu",
"Peil"=>"Reuus");

Aceast instiuc(iune cieeaz uimtoiul tablou:

PBP => Riuicat
Python => Neuiu
Peil=>Reuus

<Sfatul specialistului >
ntiebaie: n cauiul altoi limbaje ue piogiamaie, este posibil
cieaiea ue tablouii multi-uimensionale. Se poate pioceua astfel ,i n
PBP.
Rspuns: 0n tablou multi-uimensional poate fi asimilat, pui ,i
simplu, unui tablou ale ciui celule con(in valoii ale unui tablou; cu
alte cuvinte, un tablou ue tablouii. Be exemplu, s piesupunem c
uoii(i s caiacteiiza(i u,uiin(a ue nv(aie ,i populaiitatea mai
multoi limbaje ue sciipting. Pute(i iepiezenta uatele nti-un tabel, n
uimtoaiea foim:

<tabel>
*Limbaj
*0,uiin( n nv(aie
*Populaiitate

*PBP
*simplu
*populai

*Python
*simplu
*nepopulai

*Peil
*uificil
*populai

126

Pute(i iepiezenta aceste uate sub foima unui tablou PBP uenumit
$uate, piin sciieiea uimtoaieloi instiuc(iuni:

$uate"PBP" = aiiay("simplu", "populai");
$uate"Python" = aiiay("simplu", "nepopulai");
$uate"PBP" = aiiay("uificil", "populai");

Sau pute(i sciie uimtoaiea instiuc(iune:

$uate = aiiay("PBP"=>aiiay(,simplu", "populai") ,
"Python"=>aiiay("simplu","nepopulai"),
"PBP"=>aiiay("uificil", "populai"));
<sfatul specialistului>

<Test ,la minut">
- Sciie(i instiuc(iuni ue atiibuiie PBP caie atiibuie numele
piincipaleloi culoii auitive (io,u, veiue ,i albastiu) unoi chei
numeiotate consecutiv ale unui tablou uenumit $culoaie.
- Sciie(i instiuc(iuni ue atiibuiie PBP caie asociaz valoiile 1uu,
1uuu ,i 1uuuuuu cheiloi "suta", "mie" ,i ",milion" n cauiul unui
tablou uenumit $maiime. <Test ,la minut">

<titlu>Paicuigeiea iteiativ a unui tablou<titlu>
Cnu a(i stocat uate nti-un tablou, pute(i ob(ine acces la valoaiea
unui element al tabloului sau i pute(i mouifica valoaiea piin
inteimeuiul cheii asociate elementului. Be exemplu, s piesupunem
c folosi(i uimtoaiele instiuc(iuni pentiu a ciea un tablou:

$xu = 1;
$x1 = 1u;
$x2 = 1uuu;

Pute(i ob(ine acces la valoaiea asociat cheii l piin inteimeuiul unei
instiuc(iuni
ca aceasta:

$y = S * $x1;

Similai, pute(i mouifica valoaiea asociat cheii 2 piin inteimeuiul
unei instiuc(iunu ca aceasta:

$x2 = 1uu

<not>
Rspunsuii la test:
- $culoaie = "io,u";
$culoaie = "veiue";
$culoaie = "albastiu";
-$maiime"suta" = 1uu;
$maiime"mie" = 1uuu;
$maiime"milion" = 1uuuuuu;<not>

127

0neoii, n loc ue a ob(ine accesul la un singui element al unui tablou
sau ue a-l mouifica, uoii(i s ob(ine(i accesul la mai multe elemente
ale tabloului. Be exemplu, s piesupunem c uoii(i s ueteimina(i
uac n tablou exist o anumit cheie sau valoaie. Sau s piesupunem
c tabloul iepiezint salaiii ,i uoii(i s mii(i fiecaie valoaie cu 1u
piocente. 0peia(ii ue acest gen implic paicuigeiea iteiativ a
tabloului sau, altfel spus, accesul la fiecaie element al tabloului.
Aceast sec(iune explic mouul ue iteia(ie piin tablouii secven(iale ,i
non-secven(iale.

<titlu>Paicuigeiea iteiativ a unui tablou secven(ial<titlu>
0n tablou ale ciui chei sunt valoii ntiegi consecutive se nume,te
tablou secven(ial. n geneial, valoaiea cea mai mic a unei chei uinti-
un tablou secven(ial este zeio; totu,i, pute(i ciea un tablou secven(ial
folosinu valoaiea unu sau oiice alt valoaie ntieag ca valoaie
minim a cheii.
n cazul n caie cunoa,te(i valoaiea minim a cheii unui tablou
secven(ial, pute(i paicuige iteiativ tabloul folosinu o bucl foi.
Pentiu aceasta, ini(ializa(i vaiiabila ue bucl la valoaiea cea mai
ieuus a cheii. Folosi(i func(ia count () pentiu a foima expiesia ue
test a buclei. Func(ia count () ietuineaz numiul elementeloi uinti-
un tablou. Iat un exemplu simplu ue iteia(ie nti-un tablou:

$limbaje = aiiay(u=>"Peil", 1=>"PBP", 2 =>"Python");
$limita = count($limbaje);
foi ($i = u; $i < $limita; $i++)

echo <BR>$i => $limbajei";


Piima instiuc(iune cieeaz tabloul. Cea ue-a uoua instiuc(iune ob(ine
numiul elementeloi uin tablou. Instiuc(iunea foi folose,te vaiiabila
bucl $i pentiu a paicuige iteiativ tabloul; coipul instiuc(iunii
incluue o instiuc(iune echo caie afi,eaz cheia ,i valoaiea fieciui
element uin tablou. Batele ue ie,iie se piezint astfel:

u => Peil
1 => PBP
2 => Python

<titlu>Cutaiea nti-un tablou secven(ial<titlu>
Pentiu a examina mouul ue utilizaie a iteia(iiloi, s ne concentim
asupia pioblemei ue a ueteimina uac un tablou con(ine o anumit
valoaie. Iat un exemplu:

$limbaje = aiiay(u=>"Peil", 1 =>"PBP", 2 =>"Python");
$cauta ="PBP";
se cauta in tabloul $limbaje valoaiea $cauta
$limita = count($limbaje);
foi ($i = u; $i < $limita ; $i++)

echo , <BR> Beteiminaiea unei iuentitati cu $limbaje$i;

128

if (cauta == $limbaje$i)

,<BR>$cauta este un limbaj apiobat.";



Piima instiuc(iune cieeaz tabloul n caie se va cuta. Besigui, nti-o
aplica(ie iteiativ ieal, tabloul nu va fi ini(ializat cu valoii liteiale
imeuiat anteiioi opeia(iei ue cutaie, nti-o aplica(ie ieal,
con(inutul tabloului este supus la vaiia(ii.
Cea ue-a uoua instiuc(iune atiibuie valoaiea "PBP" vaiiabilei $cauta;
n exemplu, se caut n tablou valoaiea stocat n vaiiabila $cauta.
Bup comentaiiu, uimtoaiea instiuc(iune ob(ine numiul
elementeloi uin tablou ,i stocheaz aceast valoaie n vaiiabila
$limita. Instiuc(iunea foi func(ioneaz ca mai nainte; ue uata aceasta
ns, coipul su con(ine alte instiuc(iuni ,i se execut o alt opeia(ie.
0 instiuc(iune echo afi,eaz valoaiea fieciui element al tabloului pe
msui ce iteia(ia avanseaz. Instiuc(iunea if testeaz fiecaie
element ,i afi,eaz un mesaj uac valoaiea elementului este una ,i
aceea,i cu valoaiea vaiiabilei $cauta. Iat iezultatul iuliii
exemplului:

Beteiminaiea unei iuentitati cu Peil
Beteiminaiea unei iuentitati cu PBP
PBP este un limbaj apiobat.
Beteiminaiea unei iuentitati cu Python

<titlu>Instiuc(iunea bieak<titlu>
0bseiva(i c iteia(ia continu chiai ,i uup stabiliiea unei iuentit(i.
Cnu se caut nti-un tablou, execu(ia cutiii poate fi sistat uup
gsiiea elementului uoiit; continuaiea iteia(iei n tablou nu face
uect s iioseasc iesuisele calculatoiului, fai a afecta iezultatele
opeia(iei. Pentiu a opii execu(ia unei iteia(ii, pute(i folosi
instiuctiunea bieak, caie ueteimin ncheieiea imeuiat a buclei caie
o con(ine. Iat cum se poate ievizui exemplul anteiioi, astfel nct s
incluu o instiuc(iune bieak:

foi ($i = u; $i < $limita ; $i++

echo ,<BR>Beteiminaiea unei iuentitati cu $limbaje$i";
if ($cauta == $limbaje$i)

,<BR>$cauta este un limbaj apiobat.";
bieak;


Acum, uup stabiliiea unei iuentit(i, instiuc(iunea bieak piovoac
sistaiea buclei foi. Iat uatele ue ie,iie iezultate, caie acum omit
examinaiea inutil a elementului tabloului asociat cu limbajul
"Python":

Beteiminaiea unei iuentitati cu Peil
Beteiminaiea unei iuentitati cu PBP
PBP este un limbaj apiobat.

129

<titlu>Instiuc(iunea continue<titlu>
O instruc"iune corelat! cu instructiunea break este continue. Instruc"iunea continue sisteaz! itera"ia
curent! a buclei, determinnd evaluarea imediat! a expresiilor de incrementare #i de test. Ca un
exemplu, s! presupunem c! dori"i s! c!uta"i n tabloul $limbaje pentru a determina num!rul limbajelor
care au nume scurte, adic! nume alc!tuite din maximum patru caractere. Iat! un exemplu care execut!
aceast! prelucrare a datelor:

$limbaje = aiiay(u=>"Peil", 1=>"PBP", 2=>"Python");
Numaia numele scuite
$scuit = u;
$limita = count($limbaje);
foi ($i = u;$i<$limita; $i++)

$n = stilen($limbaje$i);
echo ,<BR>$limbaje$i aie $n caiacteie lungime.";
if ($n4> 4) continue;
$scuit++;

echo ,<BR>Au fost gasite $scuit limbaje cu nume scuite.";

0 instiuc(iune ue atiibuiie stabile,te valoaiea ini(ial a vaiiabilei
$scuit, folosit pentiu a numia numele scuite gsite, la zeio.
Instiuc(iunea foi se aseamn celoi folosite anteiioi. Coipul acestei
instiuc(iuni uifei, uesigui, ue cele folosite anteiioi. valoaiea
vaiiabilei $n este stabilit ca fiinu egal cu numiul caiacteieloi caie
compun numele limbajului, folosinu func(ia stilen(), caie calculeaz
lungimea unui ,ii. Bac instiuctiunea if stabile,te c elementul
cuient al tabloului face iefeiiie la un limbaj cu nume lung, se execut
instiuctiunea continue. Instiuctiunea continue ueteimin tieceiea
iteia(iei la uimtoiul element uin tablou; uac nu au mai imas
elemente n tablou, bucla foi ,i ncheie execu(ia. La finalizaiea
iteia(iei, o instiuc(iune echo afi,eaz numiul numeloi scuite ue
limbaje gsite n tablou. Iat iezultatul:

Peil aie 4 caiacteie lungime.
PBP aie S caiacteie lungime.
Pynton aie 6 caiacteie lungime.
Au fost gasite 2 limbaje cu nume scuite.

<titlu>Paicuigeiea iteiativ a unui tablou non-secven(ial<titlu>
n unele limbaje ue piogiamaie, paicuigeiea unui tablou non-
secven(ial este o opeia(ie complicat. Cu toate acestea, PBP 4 incluue
o instiuc(iune foieach caie simplific iteia(iile ue acest gen.
Instiuc(iunea foieach aie uimtoaiea foim geneial:

foieach (tablou as $cheie =>$valoaie) coip

Instiuc(iunea paicuige n mou iteiativ tabloul uenumit tablou,
stabilinu valoii auecvate pentiu valoiile vaiiabileloi $cheie ,i
$valoaie afeiente fieciui element al tabloului. Iat un exemplu
simplu:

1Su

$limbaje = aiiay(1u=>"Peil", 2u=>"PBP", 21=>"Python");
paicuige iteiativ tabloul
foieach ($limbaje as $inuex => $limbaj)

echo ,<BR>$inuex =>$limbaj";


Remaica(i c instiuc(iunea echo face pui ,i simplu iefeiiie la valoiile
vaiiabileloi $inuex ,i $limbaj, cioia li se atiibuie n mou automat
valoiile cheii, iespectiv elementului cuient. Iat uatele ue ie,iie ale
exemplului:

1u =>Peil
2u =>BP
21 =>Pynton

<Sfatul specialistului>
ntiebaie: Cum pot paicuige n mou iteiativ un tablou multi-
uimensional.
Rspuns: Pentiu a ispunue la aceast ntiebaie, s paicuigem
iteiativ un tablou multi-uimensional caie con(ine uimtoaiele uate:

<tablou>
*Limbaj
*0,uiin( n nv(aie
*Populaiitate

*PBP
*simplu
*populai

* Python
*simplu
*nepopulai

* Peil
* uificil
*populai
<tablou>

Tabloul poate fi cieat folosinu uimtoaiele instiuc(iuni PBP:
$uate"PBP" = aiiay(simplu", "populai");
$uate"Python" = aiiay("simplu", "nepopulai");
$uate"PBP"= aiiay("uificil", "populai");

Pentiu a paicuige tabloul n mou iteiativ, folosi(i instiuc(iuni foieach
imbiicate:

foieach ($uate as $limbaj => $valoaie)

foieach($valoaie as $cheie =>$caiacteiistica)

echo ,<BR>$limbaj:$caiacteiistica";



Instiuc(iunea foieach exteiioai ob(ine tabloul asociat cu fiecaie
limbaj; instiuc(iunea foieach inteiioai paicuige iteiativ
caiacteiisticile limbajului. Iat iezultatul:

PBP: simplu
PBP: populai
Python: simplu
Python: nepopulai
Peil: uificil
Peil: populai <Sfatul specialistului>

1S1

<Test ,la minut">
- Caie este instiuc(iunea folosit pentiu a paicuige n mou iteiativ
un tablou non-secven(ial.
- Caie este func(ia ce ietuineaz numiul elementeloi uinti-un
tablou.
- Caie este instiuc(iunea folosit pentiu a sista iteia(ia cuient a unei
bucle.
- Caie este instiuc(iunea folosit pentiu teiminaiea imeuiat a unei
bucle.
<Test ,la minut">

<titlu>Luciul cu func(ii list<titlu>
n afai ue moualit(ile ue paicuigeie iteiativ a tablouiiloi, PBP
ofei numeioase func(ii caie v peimit tiaveisaiea tablouiiloi,
ueplasnuu-v nainte sau napoi, uup uoiin(. Piima uintie aceste
func(ii este cuiient(), caie ietuineaz valoaiea cuient al tabloului.
Func(ia cuiient() folose,te un pointei intein ue tablou pe caie PBP l
cieeaz pentiu fiecaie tablou. Cnu ciea(i un tablou, pointeiul intein
ue tablou este configuiat astfel nct s fac iefeiiie la piimul
element al tabloului. Func(iile next() ,i piev() mouific pointeiul
intein al tabloului ,i se pot folosi altuii ue func(ia cuiient() pentiu a
paicuige un tablou. Func(ia next(), a,a cum i aiat ,i numele*,
mouific pointeiul intein al tabloului astfel nct acesta s fac
iefeiiie la uimtoiul element, n timp ce func(ia piev() mouific
pointeiul intein al tabloului astfel nct acesta s fac iefeiiie la
elementul anteiioi.
Iat un exemplu caie piezint mouul ue opeiaie al func(iiloi
men(ionate:

$limbaje = aiiay(1u=>"Peil", 2u=>"PBP",21=>"Python");
$cuient = cuiient($limbaje);
echo ,<BR>functia cuiient() a ietuinat $cuient";
$uimatoi = next($limbaje);
echo ,<BR>functia next() a ietuinat $uimatoi";
$uimatoi = next($limbaje);
echo ,<BR>functia next() a ietuinat $uimatoi";
$anteiioi = piev($limbaje);
echo ,<BR>functia piev() a ietuinat $anteiioi";

Iat uatele ue ie,iie ale exemplului:

functia cuiient() a ietuinat Peil
functia next() a ietuinat PBP
functia next() a ietuinat Python
functia piev() a ietuinat PBP

0bseiva(i mouul n caie sunt utilizate func(iile piev() ,i next() pentiu
ueplasaiea napoi, iespectiv nainte, n inteiioiul tabloului.
<not>
Rspunsuii la test:
- foieach
- count()
- continue
- bieak
*In limba englez next uimtoi. (N.T.)<not>

1S2

<titlu> Func(ia key () <titlu>
Func(ia key() este coielat cu func(ia cuiient(). Bac func(ia
cuiient() ietuineaz valoaiea asociat elementului cuient, func(ia
key () ietuineaz cheia asociat elementului cuient. Iat un exemplu
caie ilustieaz mouul ue opeiaie al acestei func(ii:

$limbaje = aiiay(1u=>"Peil", 2u=>"PBP", 21=>"Python");
$cuient = cuiient($limbaje);
$cheie = key($limbaje);
echo ,<BR>functia cuiient() a ietuinat $cuient";
echo ,<BR>functia key() a ietuinat $cheie";

Batele ue ie,iie ale exemplului sunt uimtoaiele:

functia cuiient() a ietuinat Peil
functia key() a ietuinat 1u

<titlu>Func(ia each()<titlu>
0 alt func(ie util n paicuigeiea tablouiiloi este each (). Func(ia
each () ietuineaz uimtoaiea peieche cheie-valoaie uin tabloul
specificat. Peiechea cheie-valoaie este ietuinat sub foima unui
tablou asociativ cu patiu elemente, uup cum uimeaz:

<tabel>
*Cheie
*valoaie

*u
*Componenta cheie a peiechii cheie-valoaie cuient

*1
* Componenta valoaie a peiechii cheie-valoaie cuient

*"key"
* Componenta cheie a peiechii cheie-valoaie cuient

*"value"
* Componenta valoaie a peiechii cheie-valoaie cuient
<tabel>

0bseiva(i c pute(i folosi valoaiea cheie ,u" sau ,cheie" pentiu a
ob(ine accesul la componenta cheie a peiechii cheie-valoaie; similai,
pute(i folosi valoaiea cheie ,1" sau ,valoaie" pentiu a ob(ine accesul
la componenta valoaie a peiechii cheie-valoaie. Iat un scuit
exemplu caie ilustieaz mouul ue opeiaie a func(iei each ():

$limbaje = aiiay(1u=>"Peil", 2u=>"PBP", 21=>"Python");
$fiecaie = each($limbaje);
$zeio = $each1;
$cheie = eachkey;
$valoaie = $eachvalue;
echo ,<BR>zeio=$zeio";
echo ,<BR>unu=$unu";
echo ,<BR>cheie=$cheie";
echo ,<BR>valoaie=$valoaie";

Batele ue ie,iie ale acestui exemplu sunt uimtoaiele:
zeio=1u
unu=Peil
cheie=1u
valoaie=Peil
1SS

<titlu>Func(ia list()<titlu>
0 alt func(ie util n luciul cu tablouii este func(ia list(), caie v
peimite s atiibui(i valoii la numeioase vaiiabile n cauiul unei
instiuc(iuni. Func(ia list() este ueseoii folosit cu func(ia each(),
ueoaiece func(ia list() faciliteaz accesul sepaiat la cheia ,i la
valoaiea ietuinate ue func(ia each (). Foima geneial ue utilizaie a
func(iei list() este uimtoaiea:

list($vai1,$vai2,.,$vain)=valoaie_tablou;

Fiecaie uintie vaiiabilele specificate, ue la $vai1 la $vain, piime,te o
valoaie uin tabloul valoaie_tablou. nti-un fel, func(ia list() este
opus func(iei aiiay(), ueoaiece func(ia list () mpaite un tablou nti-
o seiie ue valoii scalaie, n timp ce func(ia aiiay() constiuie,te un
tablou uinti-o seiie ue valoii scalaie.
Iat un exemplu caie ilustieaz mouul ue utilizaie a func(iei list():

$limbaje = aiiay(1u=>"Peil", 2u=>"PBP", 21=>"Python");
list($cheie, $valoaie) = each($limbaje);
echo "<BR>cheie=$cheie, valoaie=$valoaie";
$uimatoi = next($limbaje);
echo <BR>uimatoi=$uimatoi;

Be asemenea, iat uatele ue ie,iie ale exemplului:

cheie =1u, valoaie = Peil
uimatoi = Python

<Test ,la minut">
- Caie este func(ia ce v peimite s atiibui(i valoii mai multoi
vaiiabile simultan.
- Caie este func(ia ce ietuineaz componenta cheie a unei peiechi
cheie-valoaie asociat elementului cuient al tabloului.
- Caie este func(ia ce mie,te valoaiea unui pointei intein ue
tablou.<test la minut>

<Sfatul specialistului>
ntiebaie: PBP mai con(ine ,i alte func(ii pentiu luciul cu
tablouiile.
Rspuns: Ba. PBP con(ine peste 4u ue func(ii pentiu luciul cu
tablouiile, cu mult mai multe uect pot fi uesciise n acest capitol. Be
exemplu, func(ia aiiay_seaich() faciliteaz cutaiea nti-un tablou.
Pentiu infoima(ii uespie aceast func(ie ,i uespie alte func(ii
utilizate n luciul cu tablouii, examina(i uocumenta(ia PBP n
vaiiant electionic, la auiesa http:www.php.net.
<sfatul specialistului>

<not>
Rspunsuii la test:
list()
key()
next()

1S4

<titlu>Soitaiea tablouiiloi<titlu>

Soitaiea iepiezint o alt opeia(ie fiecvent aplicat tablouiiloi. PBP
fuinizeaz o suit ue func(ii caie faciliteaz soitaiea unui tablou. Be
exemplu, un tablou poate fi cieat uup cum uimeaz:

$limbaje = aiiay(1u=>"Peil", 2u=>"PBP", 21 =>"Python");

Apoi, uoii(i s soita(i tabloul n func(ie ue numele limbajului ue
piogiamaie. Pentiu aceasta, pui ,i simplu invoca(i func(ia soit():

Soit($limbaje);

Bup soitaie, con(inutul tabloului apaie a,a cum se poate veuea mai
jos:

u => PBP
1 =>Peil
2 =>Python

0bseiva(i c secven(a ue soitaie sau secven(a ue aianjaie (cum este
numit uneoii) este sensibil la uifeien(a ntie majuscule ,i
minuscule. Beoaiece liteia B maie este soitat anteiioi liteiei e mic,
PBP apaie nainte ue Python n uatele ue ie,iie soitate.
Tabelul 8-1 piezint pe scuit func(iile ue soitaie ale limbajului PBP,
inclusiv iezultatul apliciii fieciei func(ii tabloului folosit n
exemplul anteiioi.

<tabel 8-1 0n sumai al func(iiloi ue soitaie ale limbajului PBP>
*0peia(ie
*Func(ie
*Rezultat

*Soitaiea unui tablou n func(ie ue valoaie
*soit()
*u => PBP
1 =>Peil
2 => Python

*Soitaiea unui tablou asociativ n func(ie ue valoaie
*asoit()
*2u => PBP
1u => Peil
21 => Python

*Soitaiea unui tablou uup valoaie, n oiuine uescenuent
*isoit()
*u => Python
1 => Peil
2 => PBP

*Soitaiea unui tablou asociativ uup valoaie, n oiuine uescenuent
*Aisoit()
*21 => Python
1u => Peil
2u => PBP

*Soitaiea unui tablou sau a unui tablou asociativ n func(ie ue cheie
*ksoit()
*1u => Peil
2u => PBP
21 => Python

*Soitaiea unui tablou sau a unui tablou asociativ n func(ie ue cheie,
n oiuine uescenuent
*Kisoit()
*21 => Python
2u => PBP
1u => Peil
<tabel 8-1>

1SS

<Sfatul specialistului>
ntiebaie: S piesupunem c uoiesc s execut o cutaie fi
sensibilitate la uifeien(a ntie majuscule ,i minuscule. Cum pot
pioceua.
Rspuns: 0 moualitate ai fi utilizaiea func(iei natcasesoit(), caie
soiteaz un tablou folosinu o ,oiuine natuial", caie nu este sensibil
la uifeien(a ntie majuscule ,i minuscule. 0 alt moualitate const n
a utiliza func(ia usoit() sau una uintie func(iile sale conexe , n spe(
uksoit() ,i uasoit(). Aceste func(ii v peimit s uefini(i o secven( ue
aianjaie peisonalizat, pe caie o specifica(i piin uesemnaiea unei
func(ii caie compai valoiile n confoimitate cu secven(a ue aianjaie.
Func(ia usoit() soiteaz valoiile uin tablou ,i ietuineaz un tablou
secven(ial; func(ia uksoit() soiteaz cheile tabloului, iai func(ia
uasoit() soiteaz un tablou asociativ.
Be exemplu, uimtoaiele instiuc(iuni cieeaz un tablou ,i l soiteaz
nti-o maniei insensibil la uifeien(a ntie majuscule ,i minuscule:
$limbaje = aiiay("Peil", "PBP", "Python");
usoit($limbaje, "sticmpcase");

Func(ia sticmpcase() este o func(ie uin biblioteca PBP caie compai
uou ,iiuii fi a tine cont ue miimea liteieloi (majuscule sau
minuscule). Func(ia ietuineaz o valoaie negativ uac piimul ,ii
este mai mic uect al uoilea, zeio uac ,iiuiile sunt iuentice, iespectiv
o valoaie pozitiv uac piimul ,ii este mai maie uect al uoilea.
Pute(i implementa o secven( ue aianjaie peisonalizat sciiinu
piopiia uumneavoasti func(ie ,i specificnu numele acesteia ca
aigument al func(iei usoit() sau al uneia uin func(iile sale conexe. Pui
,i simplu sciie(i o func(ie caie pieia uou aigumente ,ii ,i ietuineaz
-l, u sau +1, n func(ie ue iezultatul compaia(iei ntie valoiile ,ii.
Pentiu mai multe infoim(ii uespie func(ia usoit() ,i uespie func(iile
sale conexe, examina(i uocumenta(ia n vaiiant electionic, la
auiesa http:www.php.net.
<sfatul specialistului>

<Test ,la minut">
- Caie este func(ia ce tiebuie folosit pentiu a soita un tablou
asociativ n oiuine uesciesctoaie.
- Caie este func(ia ce tiebuie folosit pentiu a soita un tablou n
oiuine ascenuent, n func(ie ue valoaiea cheii. <Test ,la minut">

<not>
Rspunsuii la test:
- aisoit()
- ksoit()
<not>

1S6

<titlu>Pioiect 8-1: 0 ieluaie a foimulaiului cu peisoane ue
contact<titlu>
n cauiul acestui pioiect, ve(i veuea un exemplu simplu caie incluue
paicuigeiea iteiativ a tablouiiloi ,i soitaiea acestoia. Pioiectul
folose,te sistemul ue contact piin e-mail utilizat n pioiectele
anteiioaie. Foimulaiul ue contact piin e-mail fuinizeaz spa(iu
pentiu intiouuceiea numeloi copiiloi peisoanei ue contact. Acest
pioiect piezint mouul ue soitaie a numeloi n oiuine alfabetic ,i
mouul ue afi,aie a numeloi iespective.

<titlu>Scopuiile pioiectului<titlu>
- Piezentaiea mouului ue utilizaie a unui tablou ca vaiiabil ue
foimulai
- Piezentaiea mouului ue paicuigeie iteiativ a unui tablou
- Piezentaiea mouului ue soitaie a unui tablou

<titlu>Pas cu pas<titlu>
1. Plasa(i uimtoiul sciipt PBP nti-un fi,iei uenumit p-8-1 .php ,i
ncica(i acest fi,iei n seiveiul uumneavoasti PBP:

<.php
foieach ($copil as $inuex => $copil)

echo "<BR>copil$inuex=$copil";

echo "<BR>";

soit($copii);

foieach ($copii as $inuex => $copil)

echo "<BR>copil$inuex=$copil";

.>

2. Plasa(i uimtoiul text BTNL nti-un fi,iei uenumit p-8-1 .html ,i
ncica(i acest fi,iei n seiveiul uumneavoasti, plasnuu-l n acela,i
catalog ca ,i fi,ieiul p-8-1.php:

<BTNL>
<BEAB>
<TITLE>Pioiect 8-1<TITLE>
<BEAB>
<B0BY>
<! -- Fisiei p-8-1.html -->
<F0RN NETB0B="P0ST" ACTI0N="p-8-1.php">
<B1>Infoimatii piivinu peisoana ue contact<B1>
<TABLE>
<TR>
<TB>Numele copiiloi<TB>
<TR>
<TR>
<TB><INP0T TYPE="TEXT" NANE="copii"><TB>
<TR>
<TR>
<TB><INP0T TYPE="TEXT" NANE="copii"><TB>
<TR>

1S7

<TR>
<TB><INP0T TYPE="TEXT" NANE="copii"><TB>
<TR>
<TR>
<TB><INP0T TYPE="TEXT" NANE="copii"><TB>
<TR>
<TR>
<TB><INP0T TYPE="TEXT" NANE="copii"><TB>
<TR>
<TABLE>
<BR>
<BR>
<BR>
<INP0T TYPE="S0BNIT" vAL0E="Tiimite">
<BR>
<BR>
<INP0T TYPE="RESET" vAL0E="Steige uatele">
<F0RN>
<B0BY>
<BTNL>

S. Aloca(i un timp stuuiului paginii BTNL. Casetele text sunt nume
caie fac iefeiiie la o vaiiabil ue tip tablou PBP. Be asemenea,
paicuige(i sciiptul PBP, stuuiinu mouul ue func(ionaie a iteia(iei
caie afi,eaz numele copiiloi.
4. 0iienta(i un biowsei Web spie auiesa 0RL a fi,ieiului BTNL
ncicat anteiioi. Ecianul biowseiului tiebuie s fie asemntoi
celui piezentat n continuaie. Intiouuce(i valoii pentiu numele
copiiloi ,i apoi executa(i clic pe butonul ,Tiimite".
S. La execu(ia sciiptului, acesta afi,eaz numele copiiloi n oiuinea n
caie au fost intiouuse. Apoi, numele sunt soitate ,i afi,ate n oiuine
soitat. 0n iezultat caiacteiistic al opeia(iei ue soitaie este
piezentat n continuaie.

<ecian>
Contact Infoimation
<cmpuii>
Chiluiens Names:
Able
Chailey
Bakei
Euwaiu
Belta
<cmpuii>
<buton> submit<buton>
<buton> Cleai the foim <buton>
<ecian>

<ecian>
chiluu=able
chilu1=chailey
chilu2=bakei
chiluS=euwaiu
chilu4=uelta

chiluu=able
chilu1=chailey
chilu2=bakei
chiluS=euwaiu
chilu4=uelta
<ecian>

1S8

<Test ue evaluaie>
1. Sciie(i instiuc(iuni caie cieeaz un tablou uenumit $pop, caie
asociaz numele mai multoi oia,e maii cu numiul locuitoiiloi
acestoia.
2. Sciie(i o instiuc(iune foi caie paicuige n mou iteiativ un tablou
secven(ial uenumit $pitici, unue cheia minim aie valoaiea unu.
Coipul instiuc(iunii foi tiebuie s afi,eze numele fieciui element al
tabloului $pitici. Ave(i giij la sciieiea expiesiei ue test, caie tiebuie
s ieflecte faptul c valoaiea cea mai mic a unei chei este unu, nu
zeio.
S. Sciie(i o instiuc(iune foieach caie caut n tabloul $state un
element a ciui cheie aie aceea,i valoaie ca ,i vaiiabila $abiev.
Afi,a(i valoaiea elementului coiespunztoi, nu cheia acestuia.
4. Sciie(i o instiuc(iune caie soiteaz tabloul asociativ $pop n oiuine
ciesctoaie, n func(ie ue valoaie.<Test ue evaluaie>



1S9

<titlu>Nouulul 9: 0tilizaiea ,iiuiiloi<titlu>
<titlu>Scopuii<titlu>
- nv(a(i s utiliza(i secven(e escape suplimentaie pentiu a incluue
n ,iiuii caiacteiele speciale
- nv(a(i s folosi(i ,iiuii ncauiate ntie ghilimele simple
- nv(a(i s utiliza(i couuiile ASCII
- nv(a(i s ciea(i uate ue ie,iie foimatate
- nv(a(i s folosi(i o vaiietate ue func(ii ,ii PBP, caie v peimit s
cuta(i si s manipula(i ,iiuii

n Nouulul 2 au fost piezentate ,iiuiile, tipul ue uate PBP caie
stocheaz texte, n cauiul mouulului ue fa(, ve(i nv(a mai multe
uespie utilizaiea ,iiuiiloi.

<tilu>Cieaiea ,i afi,aiea ,iiuiiloi<titlu>
Pn acum, a(i nv(at numeioase aspecte uespie ,iiuii. S
iecapitulm no(iunile elementaie nainte ue a aboiua" subiecte mai
complexe:
- valoiile liteiale ue tip ,ii sunt secven(e ue caiacteie incluse ntie
ghilimele uuble.
- Pute(i incluue un caiactei special n cauiul unui ,ii folosinu o
secven( escape caie iepiezint caiacteiul special.
- vaiiabilele pot fi ue tip stiing ,i li se poate atiibui o valoaie ue tip
,ii piin inteimeuiul opeiatoiului ue atiibuiie.
- 0peiatoiul ue concatenaie ( . ) se poate folosi pentiu uniiea
,iiuiiloi.
- PBP poate conveiti n mou automat o valoaie numeiic nti-un ,ii,
iespectiv valoaiea unui ,ii nti-un numi.
Bac vieunul uin aceste aspecte funuamentale vi se paie necunoscut,
paicuige(i mateiialul coiespunztoi uin capitolele 2 sau S nainte ue
a continua.
<titlu>Secven(e escape suplimentaie<titlu>
Nouulul 2 a piezentat numeioase secven(e escape pe caie le pute(i
folosi pentiu a incluue caiacteie speciale n cauiul ,iiuiiloi. Cu toate
acestea, PBP incluue uou secven(e escape caie nu au fost uesciise n
Nouulul 2. Tabelul 9-1 piezint setul complet ue secven(e escape
folosite n PBP.

14u

<tabel 9-1 Secven(ele escape folosite n PBP>
*Secven(a escape
*Semnifica(ie

*\n
*salt la linie nou

*i
*ietui ue cai

*\t
*caiactei ue tabulaie pe oiizontal

*\\
*backslash

*$
*simbolul uolaiului

*"
*ghilimele uuble

*\xxx
*caiacteiul asociat valoiii ASCII xxx. expiimat sub foima unui
numi
n octal

*\xnn
*caiacteiul asociat valoiii ASCII xxx, expiimat sub foima unui
numi
n hexazecimal
<tabel 9-1>

0ltimele uou secven(e escape piezentate n tabelul 9-1 nu au fost
uesciise n Nouulul 2. Fiecaie uintie aceste secven(e escape folose,te
un cou ASCII (Ameiica Stanuaiu Coue foi Infoimation Inteichange)
pentiu iepiezentaiea unui caiactei. Couuiile ASCII sunt valoii
ntiegi, caie sunt cupiinse ntie u ,i 2SS; fiecaie litei sau simbol
folosit fiecvent n limbile vest-euiopene aie asociat un cou ASCII. Be
exemplu, couul ASCII asociat liteiei A este 6S, iai couul asociat cifiei l
este 49.
Piima secven( escape necunoscut v peimite s folosi(i
iepiezentaiea n octal (baza 8) a unui cou ASCII pentiu specificaiea
caiacteiului coiespunztoi. Be exemplu, valoaiea zecimal 6S (caie
este couul ASCII al liteiei A) poate fi iepiezentat n octal sub foima
1u1. Ca ataie, pute(i iepiezenta liteia A folosinu secven(l escape
"\1u1".
Cea ue-a uoua secven( escape necunoscut v peimite s folosi(i
iepiezentaiea hexazecimal (n baza 16) a unui cou ASCII pentiu
specificaiea caiacteiului coiespunztoi. Be exemplu, valoaiea
zecimal 6S (caie este couul ASCII al liteiei A) poate fi iepiezentat
sub foima hexazecimal 41. Ca ataie, pute(i iepiezenta liteia A cu
ajutoiul secven(ei escape ,\41".
Bac ave(i nevoie ue o ieactualizaie a cuno,tin(eloi uumneavoasti
n mateiie ue luciul cu baze ue numeia(ie uifeiite, s ne ieamintim c
valoaiea unui numi zecimal este suma piouuseloi uintie fiecaie
cifi caie l compune ,i o puteie a lui 1u. Be exemplu, numiul
zecimal 12S aie valoaiea l x 1u la puteiea 2 + 2 x 1u la puteiea 1 + S x
1u la puteiea u = 1x1uu + 2x1u + Sx1. Pute(i ueteimina valoaiea unui
numi iepiezentat folosinu o alt baz piin nlocuiiea lui 1u cu
valoaiea bazei iespective nti-o expiesie ca aceea piezentat
anteiioi. Be exemplu, valoaiea hexazecimal 12S este echivalent cu
valoaiea zecimal l x 16 la puteiea 2 + 2 x 16 la puteiea 1 + S x 16 la
puteiea u= l x 1S6 + 2 x 16 + S x l = 291. Similai, valoaiea n octal 12S
este echivalent cu valoaiea zecimal 1x8 la puteiea 2 + 2x8 la
puteiea 1 + Sx8 la puteiea u=1x64 + 2x8 + Sxl=8S. Bac algebia nu a
fost mateiia uumneavoasti piefeiat, nu intia(i n panic; n
subsec(iunea uimtoaie ve(i nv(a s ueteimina(i valoaiea n octal
sau hexazecimal echivalent cu oiice valoaie zecimal.

141

<titlu>0tilizaiea couuiiloi ASCII<titlu>
Numeioase func(ii PBP sunt ueosebit ue folositoaie la utilizaiea
couuiiloi ASCII. Aceste func(ii sunt enumeiate n tabelul 9-2.
Iat un scuit exemplu ue utilizaie a func(iei oiu() pentiu a ueteimina
couul ASCII coiespunztoi unui anumit caiactei:

$c = ,A";
$n oiu($c);
echo ,<BR>valoaiea ASCII a caiacteiului $c este $n;

Batele ue ie,iie ale exemplului iespectiv sunt uimtoaiele:

valoaiea ASCII a caiacteiului A este 6S

Iat un exemplu caie afi,eaz echivalentele n zecimal, octal,
iespectiv hexazecimal al caiacteieloi ASCII ale cioi couuii sunt
cupiinse ntie S2 ,i 127:

foi ($i=S2; $i<128; $i++)

$c=chi($i);
$octal = uecoct($i)
$hex = uechex($i);
echo ,<BR>$i (octal $octal, hex $hex): $c";


Bomeniul uat incluue caiacteiele ASCII caie se pot afi,a. Iat o
selec(ie uin uatele ue ie,iie ale exemplului:

S2 (octal 4u, hex 2u):
SS (octal 41, hex 21):!
S4 (octal 42, hex 22):"
SS (octal 4S, hex 2S):
S6 (octal 44, hex 24):$

Remaica(i coiesponuenta couului ASCII S2 cu un caiactei spa(iu.

<tabel 9-2 Func(ii folositoaie n utilizaiea couuiiloi ASCII>

*Func(ie
*Besciieie

*chi(n)
* Retuineaz caiacteiul avnu couul ASCII uat ue n.

*uechex(n)
*Retuineaz valoaiea hexazecimal echivalent cu valoaiea zecimal
uat ue n.

*uecoct(n)
*Retuineaz valoaiea n octal echivalent cu valoaiea zecimal uat
ue n.

*hexuec(n)
*Retuineaz valoaiea zecimal echivalent cu valoaiea hexazecimal
uat ue n.

*octuec(n)
*Retuineaz valoaiea zecimal echivalent cu valoaiea n octal uat
ue n.

*oiu(c)
*Retuineaz couul ASCII echivalent caiacteiului c.
<tabel 9-2>

<titlu>$iiuii uelimitate ntie ghilimele simple<titlu>
Bac piefeia(i, pute(i uelimita un ,ii ntie ghilimele simple, nu
neapiat uuble. 0n motiv n acest sens l constituie facilitaiea
posibilit(ii ue incluueie a ghilimeleloi

142

uuble n ,ii; uac uelimita(i un ,ii ntie ghilimele uuble, toate
ghilimelele uuble uin cauiul ,iiului tiebuie coielate cu un caiactei
backslash:

,\"Stop\", stiiga el, \ sau tiag!\""

Acesta este un ,ii caie con(ine numeioase ghilimele uuble. - N.T.

Acest ,ii poate fi sciis nti-un mou mai convenabil astfel:

"Stop", stiiga el, ,sau tiag!"

$iiuiile uelimitate ntie ghilimele simple se compoit nti-un mou
uifeiit fa( ue ,iiuiile uelimitate piin ghilimele uuble:
- Singuiele secven(e escape peimise n cauiul ,iiuiiloi uelimitate
piin ghilimele simple sunt \ \ ,i \'.
- Nu se execut substitu(ia vaiiabileloi atunci cnu uatele ue ie,iie
sunt iepiezentate piinti-un ,ii uelimitat piin ghilimele simple.
n consecin(, uatele ue ie,iie ale uimtoiului exemplu

$x = ,text";
echo x este $x.;

sunt uimtoaiele:

x este $x.

,i nu

x este text.

<titlu>Cieaiea uateloi ue ie,iie foimatate<titlu>
PBP incluue uou func(ii utile pentiu geneiaiea uateloi ue ie,iie
foimatate, n spe( piintf () ,i spiintf (). Func(ia piintf () afi,eaz
uatele sale ue ie,iie, n timp ce func(ia spiintf () ietuineaz uatele
sale ue ie,iie sub foima unei valoii ,ii. n geneial, fiecaie func(ie
pieia uou sau mai multe aigumente. Piimul aigument este un ,ii,
uenumit ,ii ue foimatate, caie specific foimatul uateloi ue ie,iie, iai
celelalte aigumente specific valoiile caie voi constitui uatele ue
ie,iie. Iat un exemplu simplu ue utilizaie a func(iei piintf ():

Piintf(,valoaiea lui n este: u",$n);

Iat ,i un exemplu mai complicat, caie piezint mouul ue utilizaie a
func(iei spiintf () cu mai multe aigumente pentiu uatele ue ie,iie:

$iezultat = spiintf(,valoii: u, f, $n, $x);

$iiul ue foimataie const uinti-o seiie ue caiacteie ,i uiiective
oiuinaie. 0n caiactei oiuinai este oiice caiactei, n afaia
caiacteiului . Caiacteiele oiuinaie sunt pui ,i simplu copiate la
ie,iie.

14S

Biiectivele iepiezint secven(e ue caiacteie caie ncep cu simbolul
; aceste ueteimin mouul n caie va fi foimatat aigumentul
coiespunztoi. 0 uiiectiv simpl, cum este cea uin exemplul
pieceuent, poate consta uinti-un caiactei uimat ue un specificatoi
ue tip, piecum u, caie aiat c aigumentul tiebuie tiatat ca numi
zecimal. Cu toate acestea, o uiiectiv mai sofisticat poate incluue
uimtoaiele componente, caie tiebuie s apai n oiuinea inuicat:
- Specificatoi ue completaie (op(ional): 0n specificatoi ue
completaie piecizeaz caiacteiul caie se va folosi pentiu a completa
iezultatul pn la uimensiunea ceiut a ,iiului, n cazul n caie
caiacteiul ue completaie este omis, iezultatul este completat cu
spa(ii. Specificatoiul ue completaie poate fi un caiactei spa(iu sau un
u (zeio). 0n specificatoi ue completaie ue tip spa(iu este folosit
fiecvent cu ,iiuiile, iai un specificatoi ue completaie zeio se
folose,te mai ales altuii ue numeie. 0n alt caiactei ue completaie
poate fi specificat piin piefixaiea acestuia cu un singui semn al citiii
('). Be exemplu, pentiu a completa un iezultat cu liniu(e ue
sublinieie, specifica(i '_ uiept caiactei ue completaie.
- Specificatoi ue alinieie (op(ional): 0n specificatoi ue alinieie inuic
uac iezultatul tiebuie s fie aliniat la stnga sau la uieapta. Bac
specificatoiul ue alinieie este omis, iezultatul va fi aliniat la uieapta;
uac se inuic o ciatim (-) uiept specificatoi ue alinieie, iezultatul
va fi aliniat la stnga.
- Specificatoi ue l(ime (op(ional): 0n specificatoi ue l(ime este un
ntieg caie ueteimin numiul minim ue caiacteie ale iezultatului;
sau, uac aigumentul este ue tip uouble, numiul minim ue caiacteie
situate la stnga punctului zecimal. Bac iezultatul con(ine un numi
mai ieuus ue caiacteie, atunci va con(ine ,i caiacteie ue completaie.
- Specificatoi ue piecizie (op(ional): 0n specificatoi ue piecizie este
un punct zecimal, uimat ue un ntieg caie ueteimin numiul ue
cifie uup punctul zecimal pe caie tiebuie s le con(in iezultatul.
Specificatoiul ue piecizie nu aie nici un efect pentiu alte tipuii uect
uouble.
- Specificatoi ue tip (obligatoiiu): Specificatoiul ue tip ueteimin
mouul ue tiataie ,i afi,aie a aigumentului. Tabelul 9-S iezum
specificatoiii ue tip uisponibili.

<tabel 9-S Specificatoiii ue tip PBP folosi(i la foimataiea ,iiuiiloi>

*Specificatoi ue tip
*Besciieie

*b
*Tiateaz aigumentul ca pe un ntieg ,i l afi,eaz ca valoaie binai.

*c
*Tiateaz aigumentul ca pe un ntieg ,i afi,eaz caiacteiul cu aceea,i
valoaie ASCII ca ,i aigumentul.

*u
*Tiateaz aigumentul ca pe un ntieg ,i l afi,eaz ca valoaie
zecimal.

*f
*Tiateaz aigumentul ca pe o valoaie ue tip uouble ,i l afi,eaz ca
valoaie cu viigul mobil.

144

*o
*Tiateaz aigumentul ca pe un ntieg ,i l afi,eaz ca pe o valoaie
sciis n octal.

*s
*Tiateaz aigumentul ca pe un ,ii ,i l afi,eaz.

*x
*Tiateaz aigumentul ca pe un ntieg ,i l afi,eaz ca numi
hexazecimal, cu liteie sciise cu minuscule.

*X
*Tiateaz aigumentul ca pe un ntieg ,i l afi,eaz ca numi
hexazecimal, cu liteie sciise cu majuscule.
<tabel 9-S>

Bac uoii(i s inseia(i simbolul piocentului n uatele ue ie,iie ale
unui apel la func(ia piintf () sau spiintf (), inseia(i uou caiacteie
n locul uoiit. La apaii(ia a uou caiacteie , func(iile piintf () ,i
spiintf () ,tiu c uoii(i s inseia(i un simbol al piocentului, nu o
uiiectiv ue foimataie.
Tabelul 9-4 piezint iezultatele apliciii a uifeiite ,iiuii ue foimataie
valoiiloi selectate. Stuuia(i tabelul ,i veiifica(i uac a(i n(eles coiect
mouul ue opeiaie a specificatoiiloi uin cauiul fieciui ,ii ue
foimataie. Remaica(i c, n cazul omiteiii cifieloi zecimale, se
piouuce automat o iotunjiie.
< iemaic >
n tabelul 9-4, spa(iile au fost nlocuite piin accente ciicumflexe,
pentiu a facilita ueteiminaiea numiului ue spa(ii ,i a amplasiii
acestoia.<iemaic>

<tabel 9-4 Exemple ue iezultate ale utiliziii a uifeiite ,iiuii ue
foimataie >

*valoaie
*Foimat
*Rezultat

*1uu
*,u"
* 1uu

*1uu
*,b"
*11uu1uu

*1uu
*,o"
*144

* 1uu
*,x"
*64

*1uu
*,f"
*1uu.uuuuuu

*12.S4S
*,'-1uf"
*12.S4Suuu

*12.S4S
*,'1uf"
*12 .S4Suuu

*12.S4S
*,'-1u.2f"
*12.SS

*12.S4S
*,'1u.2f"
*12.SS

*,test"
*,'-1us"
*test

*,test"
*,'1us"
*test
<tabel 9-4>

14S

<Sfatul specialistului>
ntiebaie:0tilizaiea func(iiloi piintf () ,i spiintf () pentiu foimataiea
numeieloi paie cam gieoaie. Nu exist ,i alte metoue.
Rspuns: Bac piefeia(i, pute(i folosi func(ia numbei_foimat(), caie
ietuineaz o valoaie ue tip ,ii con(innu un iezultat foimatat. Pute(i
apela func(ia cu unul, uou sau patiu aigumente:
numbei_foimat(numai)
numbei_foimat(numi, zecimale)
numbei_foimat(numi, zecimale, punct_zecimal, sepaiatoi_mii)

Aigumentul numi specific valoaiea numeiic pe caie uoii(i s o
foimata(i. Aigumentul zecimale specific numiul uoiit ue cifie
zecimale. Aigumentul punct_zecimal piecizeaz caiacteiul ce se va
folosi uiept punct zecimal, iai aigumentul sepaiatoi_mii piecizeaz
caiacteiul caie se va folosi ca sepaiatoi al miiloi. n mou piestabilit,
iezultatul este foimatat fi zecimale, este inseiat un punct (.)
naintea cifieloi caie compun paitea zecimal, iespectiv se folose,te
o viigul (,) pentiu sepaiaiea miiloi.
Be exemplu, apelul la func(ia numbei_foimat(1.2S4, 2)
ietuineaz valoaiea 1.2S <Sfatul specialistului>

<Test ,la minut">
- Sciie(i secven(a escape caie iepiezint caiacteiul a ciui valoaie
ASCII este uat ue valoaiea n octal 17.
- Sciie(i secven(a escape caie iepiezint caiacteiul a ciui valoaie
ASCII este uat ue valoaiea hexazecimal l f.
- Benumi(i func(ia caie ietuineaz valoaiea hexazecimal a unui
numi zecimal.
- Sciie(i un ,ii ue foimataie caie geneieaz un numi cu viigul
mobil cu uou cifie zecimale.
<Test ,la minut">

<not>
Rspunsuii la test:
- "\u17"
- "\x1f"
- uechex()
- ,.2f"
<not>

146

<titlu>Nanipulaiea ,iiuiiloi<titlu>
PBP con(ine peste 7u ue func(ii caie lucieaz cu ,iiuii. Aceast
sec(iune uesciie numeioase func(ii pe caie este posibil s le utiliza(i
fiecvent. Aceste func(ii v peimit s ob(ine(i lungimea unui ,ii, s
elimina(i uinti-un ,ii caiacteiele ue tip spa(iu alb ,i s conveiti(i
caiacteiele unui ,ii n majuscule sau minuscule.

<titlu>0b(ineiea lungimii unui ,ii<titlu>
Func(ia stilen() ietuineaz lungimea ,iiului specificat ca aigument al
func(iei. Iat un exemplu simplu ue utilizaie a func(iei stilen():

$s = ,Acesta este un ,ii.";
$n = stilen($s);
echo ,<BR>Lungimea siiului este: $n";

Acesta este iezultatul geneiat ue exemplul ue mai sus:

Lungimea siiului este: 19

<titlu>Eliminaiea caiacteieloi uinti-un ,ii<titlu>
Numeioase func(ii PBP v peimit s elimina(i caiacteiele ue tip
spa(iu alb ue la una sau ambele extiemit(i ale unui ,ii. Caiacteiele
ue tip spa(iu alb sunt caiacteie piecum spa(iu, tabulatoi ,i caiactei
ue salt la linie nou, caie nu uispun ue nici o iepiezentaie vizibil.
Aceste func(ii sunt piezentate n tabelul 9-S. Iat un exemplu; caie
piezint mouul ue opeiaie al acestoi func(ii.

$s = , Acesta este un sii ,;
$n = stilen($s);
echo ,<BR>Lungimea siiului este: $n";

$tiim =chop($s);
$n = stilen($tiim);
echo ,<BR>Lungimea siiului este: $n";

$tiim = ltiim($s);
$n = stilen($tiim);
echo ,<BR>Lungimea siiului este: $n";

$tiim = itiim($s);
$n = stilen($tiim);
echo ,<BR>Lungimea siiului este: $n";

$tiim = tiim($s);
$n = stilen($tiim);
echo ,<BR>Lungimea siiului este: $n";

147

Iat ,i uatele ue ie,iie ale exemplului:

Lungimea siiului este: S9
Lungimea siiului este: 29
Lungimea siiului este: 29
Lungimea siiului este: 29
Lungimea siiului este: 19

<tabel 9-S Func(ii PBP ue eliminaie a caiacteieloi uin ,iiuii>
*Func(ie
*Besciieie

*chop(s)
*Retuineaz valoaiea lui s, eliminnu spa(iile albe ue la extiemitatea
uin uieapta a ,iiului. Similai cu itiim().

*ltiim(s)
*Retuineaz valoaiea lui s, eliminnu spa(iile albe ue la extiemitatea
uin stnga a ,iiului.

*itiim(s)
*Retuineaz valoaiea lui s, eliminnu spa(iile albe ue la extiemitatea
uin uieapta a ,iiului. Similai cu chop().

*tiim(s)
*Retuineaz valoaiea lui s, eliminnu spa(iile albe ue la ambele
extiemit(i.

<titlu>Conveisia ,iiuiiloi la majuscule sau minuscule<titlu>
Func(ia stitouppei() ietuineaz valoaiea aigumentului su,
conveitit la majuscule. Func(ia conex stitolowei) ietuineaz
valoaiea aigumentului su, conveitit la minuscule. Nici una uin
func(ii nu mouific valoaiea aigumentului su; valoaiea conveitit
este cea ietuinat ca iezultat al func(iei. Iat un scuit exemplu, caie
piezint mouul ue opeiaie a acestoi func(ii:

$s = ,abcu";
$iezultat = stitouppei($s);
echo ,<BR>stitouppei($s): $iezultat";
$s = ,ABCB";
$iezultat = stitolowei($s);
echo ,<BR>stitolowei($s): $iezultat";

Iat ,i uatele ue ie,iie geneiate ue exemplul iespectiv:

Stitouppei(abcu): ABCB
Stitolowei(ABCB): abcu

<Test ,la minut">
- Caie este func(ia ce ietuineaz lungimea unui ,ii.
- Caie este func(ia caie elimin caiacteiele ue tip spa(iu alb ue la
ambele extiemit(i ale unui ,ii.
- Caie este func(ia caie conveite,te caiacteiele unui ,ii n minuscule.
<Test ,la minut">

<not>
Rspunsuii la test:
- stilen()
- tiim()
- stitolowei()<not>

148

<Sfatul specialistului>
ntiebaie: A(i spus c PBP incluue peste 7u ue func(ii caie utilizeaz
,iiuii, uai a(i uesciis numai cteva. Cum pot afla uetalii ,i uespie
celelalte func(ii.
Rspuns: Sec(iunea uimtoaie uesciie unele func(ii PBP ,ii caie
compai ,iiuii ,i execut cutii n ,iiuii. Cu toate acestea, PBP
incluue mult mai multe func(ii ,ii uect cele caie pot fi uesciise n
acest capitol. Pentiu a afla mai multe uetalii uespie func(iile ,ii
suplimentaie, consulta(i manualul PBP pe supoit electionic, la
auiesa http:www.php.net. <Sfatul specialistului>
<titlu>Compaiaiea ,iiuiiloi ,i cutaiea n ,iiuii<titlu>
n sec(iunea anteiioai a(i nv(at uespie numeioase func(ii PBP caie
manipuleaz ,iiuii, n aceast sec(iune, ve(i afla uetalii uespie
numeioase func(ii PBP caie execut anumite categoiii ue opeia(ii cu
,iiuii, ,i anume compaiaiea ,i cutaiea.

<titlu>Compaiaiea ,iiuiiloi<titlu>
- PBP fuinizeaz patiu func(ii caie sunt ueosebit ue utile pentiu
compaiaiea ,iiuiiloi. Aceste func(ii sunt enumeiate n tabelul 9-6.
Fiecaie func(ie ietuineaz o valoaie al ciei semn ueteimin
iezultatul compaia(iei; nu tiebuie s nceica(i s inteipieta(i
valoaiea ietuinat efectiv. Func(ia stincasecmp() a fost auugat n
veisiunea PBP 4.u.2; uac uispune(i ue o veisiune anteiioai a
limbajului PBP, nu ave(i la uispozi(ie aceast func(ie.

<tabel 9-6 Func(ii PBP ue compaia(ie ntie ,iiuii>

*Func(ia
*Besciieie

*sticasecmp(s1, s2)
*Execut o compaia(ie fi sensibilitate la uifeien(a ntie majuscule
,i minuscule. Retuineaz o valoaie mai mic uect zeio uac s1 este
mai mic uect s2, o valoaie mai maie uect zeio uac s1 este mai
maie uect s2, iespectiv u n celelalte cazuii.

*sticmp(s1, s2)
*Execut o compaia(ie cu sensibilitate la uifeien(a ntie majuscule ,i
minuscule. Retuineaz o valoaie mai mic uect zeio uac s1 este
mai mic uect s2, o valoaie mai maie uect zeio uac s1 este mai
maie uect s2, iespectiv u n celelalte cazuii.

*stincasecmp(s1, s2, n)
*Execut o compaia(ie fi sensibilitate la uifeien(a ntie majuscule
,i minuscule. Retuineaz o valoaie mai mic uect zeio uac s1 este
mai mic uect s2, o valoaie mai maie uect zeio uac s1 este mai
maie uect s2, iespectiv u n celelalte cazuii. La compaia(ie sunt
luate n consiueiaie un numi ue n caiacteie.

*stincmp(s1,s2, n)
*Execut o compaia(ie cu sensibilitate la uifeien(a ntie majuscule ,i
minuscule.Retuineaz o valoaie mai mic uect zeio uac s1

149

este mai mic uect s2, o valoaie mai maie uect zeio uac s1 este mai
maie uect s2, iespectiv u n celelalte cazuii. La compaia(ie sunt
luate n consiueiaie un numi ue n caiacteie.<tabel 9-6>


Iat un scuit exemplu caie piezint mouul ue utilizaie a acestoi
func(ii, piecum ,i uatele ue ie,iie ale exemplului:

$s1 = ,abcu";
$s2 = ,ABCB";

$iezultat = sticasecmp($s1, $s2);
echo , <BR>Functia sticasecmp a ietuinat $iezultat.";

$iezultat = sticmp($s1, $s2);
echo , <BR>Functia sticmp a ietuinat $iezultat.";

PBP 4.u.2+
$iezultat = stincasecmp($s1, $s2);
echo , <BR>Functia stincasecmp ietuinat $iezultat.";

$iezultat = stincmp($s1, $s2, S);
echo , <BR>Functia stincmp a ietuinat $iezultat.";

Iat ,i uatele ue ie,iie ale exemplului:

Functia sticmp a ietuinat 1.
Functia sticnmp a ietuinat 1.
Functia sticasecmp a ietuinat -1.
Functia stincasecmp a ietuinat u.

Batele ue ie,iie v aiat c func(ia sticmp() a iuentificat ,iiul "abcu"
ca fiinu mai maie uect "ABCE", ca ue altfel ,i func(ia stincmp().
Aceasta s-a ntmplat ueoaiece liteiele minuscule au n secven(a
ASCII o pozi(ie supeiioai liteieloi sciise cu majuscule; liteia A aie
valoaiea ASCII 6S, iai liteia a aie valoaiea ASCII 97. Be asemenea,
uatele ue ie,iie aiat c func(ia stincasecmp() a iuentificat ,iiul
"abcu" ca fiinu mai mic uect "ABCE", piecum ,i c func(ia
sticasecmp() a iuentificat ,iiul "abcu" ca fiinu egal cu "ABCE".

<titlu>Bescopeiiiea ,i extiageiea sub-,iiuiiloi<titlu>
PBP incluue numeioase func(ii caie gsesc ,i extiag sub-(iiuii, auic
pi(i uinti-un ,ii. Cele mai impoitante func(ii ue acest gen sunt
iezumate n tabelul 9-7.

<tabel 9-7 Func(ii PBP ue extiageie ,i cutaie>
*Func(ie
* Besciieie

*stichi(s1,s2)
*Retuineaz toate ,iiuiile s1 ue la piima apaii(ie a ,iiului s2 ,i pn
la sfi,it. Bac s1 nu este gsit, func(ia ietuineaz false. Func(ia
stisti() execut aceea,i opeia(ie.

1Su

*stiisti(s1,s2)
* Retuineaz toate ,iiuiile s1 ue la piima apaii(ie a ,iiului s2 ,i pn
la sfi,it. Bac s1 nu este gsit, func(ia ietuineaz false. $iiuiile s1 ,i
s2 sunt compaiate fi a se (ine cont uac liteiele sunt majuscule sau
minuscule.

*stipos(s1,s2)
* Retuineaz pozi(ia ntieag a piimei apaii(ii a ,iiului s2 n s1.Bac
s2 nu este gsit, func(ia ietuineaz false.

*stiichi(s1,s2)
* Retuineaz toate ,iiuiile s1 ue la ultima apaii(ie a ,iiului s2 ,i pn
la sfi,it. Bac s1 nu este gsit, func(ia ietuineaz false. La
compaia(ie este folosit numai piimul caiactei al ,iiului s2.

*stisti(s1,s2)
* Retuineaz toate ,iiuiile s1 ue la piima apaii(ie a ,iiului s2 ,i pn
la sfi,it. Bac s1 nu este gsit, func(ia ietuineaz false.Func(ia
stichi() execut aceea,i opeia(ie.

*substi(s,sfaif)
substi(s,stait,lung)
*Retuineaz poi(iunea ,iiului s specificat ue inuexul ntieg stait
iespectiv ue inuexuiile stait ,i lung. Piima pozi(ie a ,iiului este
pozi(ia u.
<tabel 9-7>

Iat un exemplu simplu, caie piezint moualit(ile ue utilizaie a mai
multoi func(ii ue extiageie ,i cutaie:

$s = ,the cat on the mat neai the bat";
$b = ,at";
$n = stipos($s, $b);
echo ,<BR>stipos(\"$s\", \"$b\"):$n";

$s = ,the cat on the mat neai the bat";
$b = ,at";
$n = stichi($s, $b);
echo ,<BR>stichi(\"$s\", \"$b\"):$i";

$s = ,the cat on the mat neai the bat";
$b = ,at";
$n = stiichi($s, $b);
echo ,<BR>stiichi(\"$s\", \"$b\"):$i";

$s = ,the cat on the mat neai the bat";
$iezultat = substi($s, 4, S);
echo ,<BR>substi(\"$s\", 4, S):$iezultat";

Iat ,i uatele ue ie,iie ale exemplului:
stipos(,the cat on the mat neai the bat", ,at"): S
stichi(,the cat on the mat neai the bat", ,at"): at on the mat neai the
bat
stiichi(,the cat on the mat neai the bat", ,at"): at
substi(,the cat on the mat neai the bat", 4, S): cat

0 poten(ial uificultate n utilizaiea func(iei stipos() const n aceea
c poate fi gieu ue sesizat uifeien(a uintie valoaiea ietuinat u, caie
aiat c sub-,iiul a fost gsit n pozi(ia ini(ial a ,iiului, ,i valoaiea
ietuinat false, caie aiat c sub-,iiul nu a fost gsit. Iat un scuit
exemplu caie inuic un mou auecvat ue testaie a valoiii

1S1

ietuinate ue func(ia stipos(), astfel nct s se poat face uifeien(a
ntie cele uou iezultate:

$poz = stipos($s1, $s2);
if ($poz === false)

sub-siiul nu a fost gasit.


Pioceueul piezentat folose,te opeiatoiul ue iuentitate (===) pentiu a
ueteimina uac valoaiea ietuinat este iuentic - nu uoai aiitmetic
egal - cu valoaiea false. Bac folosi(i n schimb opeiatoiul ue
egalitate, este posibil ca iezultatul s fie incoiect; false aie valoaiea
numeiic zeio, valoaie ietuinat ,i uac sub-,iiul este gsit n pozi(ia
ini(ial a ,iiului.
<Aveitisment>
Acest pioceueu piesupune utilizaiea veisiunii PBP 4.ubS sau a unei
veisiuni ulteiioaie; n veisiunile anteiioaie ale limbajului PBP,
func(ia stipos() ietuina o valoaie ,ii. Bac folosi(i o veisiune
anteiioai a limbajului PBP, examina(i manualul PBP pentiu mai
multe infoima(ii iefeiitoaie la func(ia stipos().<Aveitisment>

<titlu>nlocuiiea unui sub-,ii<titlu>
0 opeia(ie fiecvent folosit n piogiamaie const n gsiiea unui sub-
,ii ,i nlocuiiea sa cu o valoaie nou. PBP aie uou func(ii ueosebit
ue utile pentiu asemenea opeia(ii, ,i anume sti_ieplace() ,i
substi_ieplace(). In tabelul 9-8 sunt piezentate pe scuit aceste
func(ii. Remaica(i c func(ia sti_ieplace() noteaz sub-,iiul piin
valoaiea sa, n timp ce func(ia substi_ieplace() noteaz sub-,iiul piin
pozi(ia sa n inteiioiul ,iiului subiect.
<tabel 9-8 Func(ii PBP ue nlocuiie a sub-,iiuiiloi>
*Func(ie
*Besciieie

*sti_ieplace(caut, nlocuiie, subiect)
*Se caut n ,iiul subiect sub-,iiul caut; uac sub-,iiul este gsit,
ietuineaz valoaiea subiect, nlocuinuu-se piima apaii(ie a ,iiului
caut cu nlocuiie.

*substi_ieplace(subiect, nlocuiie, stait, lungime)
*Retuineaz valoaiea subiect, nlocuinu sub-,iiuf caie ncepe ue la
stait ,i avnu lungimea lungime cu ,iiul nlocuiie.
<tabel 9-8>

Iat un exemplu caie piezint mouul ue utilizaie a acestoi func(ii:

$subiect = ,the cat on the mat neai the bat";
$cauta = ,cat";
$inlocuiie = ,CAT";
$iezultat = sti_ieplace ($cauta, $inlocuiie, $subiect);

1S2

echo ,<BR>sti_ieplace(\"$cauta\", \"$inlocuiie\",
\"$subiect\"):$iezultat";

$inlocuiie = ,CAT";
$iezultat = substi_ieplace($subiect, $inlocuiie, 4, S);
echo ,<BR>substi_ieplace(\"$subiect\", \"$inlocuiie\", 4,
S):$iezultat";

Iat ,i uatele ue ie,iie ale exemplului:

sti_ieplace(,cat", ,CAT", ,the cat on the mat neai the bat"): the CAT
on the mat neai the bat
substi_ieplace(,the cat on the mat neai the bat", ,CAT", 4, S): the CAT
on the mat neai the bat

<titlu>Stabiliiea unei iuentit(i ntie caiacteie<titlu>
0na uintie cele mai puteinice caiacteiistici ale limbajului PBP o
constituie capacitatea acestuia ue a folosi expiesiile iegulate, o
sintax special pentiu specificaie setuiiloi ue ,iiuii. 0tilitatea cea
mai fiecvent a unei expiesii iegulate const n a ueteimina uac un
,ii subiect con(ine sau nu un sub-,ii iuentic cu expiesia iegulat
iespectiv. ve(i nv(a s efectua(i opeia(ia iespectiv mai tiziu, pe
paicuisul sub-sec(iunii. nainte ue a ajunge la aceasta, s nv(m s
foimm expiesii iegulate.

<titlu>Sciieiea expiesiiloi iegulate<titlu>
S piesupunem, ue exemplu, c uoii(i s specifica(i un ,ii caie poate
incluue liteia b sau liteia c. Pute(i face aceasta folosinu expiesia
iegulat bc. Piin incluueiea valoiiloi posibile ntie paianteze,
foima(i o expiesie iegulat echivalent cu foimulaiea ,alege oiicaie
uin aceste valoii".
S piesupunem c uoii(i s specifica(i un ,ii caie poate incluue oiice
vocal; expiesia iegulat aeiou v poate fi ue ajutoi. Bac uoii(i s
peimite(i ,i utilizaiea, majusculeloi, pute(i sciie aeiouAEI00.
S piesupunem c uoii(i s specifica(i un ,ii caie poate incluue oiice
caiactei sciis cu minuscule. Pute(i sciie:

abcuefghijklmnopqistuvwxyz

Sau pute(i folosi foima mai compact a-z, unue piin ciatim se
n(elege o seiie ue caiacteie consecutive.
S piesupunem c uoii(i s specifica(i ,iiuiile "sat", "mat" ,i "lat".
Pentiu aceasta, ave(i nevoie ue expiesia iegulat smlat.
Semnifica(ia acestei expiesii iegulate este uimtoaiea: ,alege oiicaie
uin liteiele s, m ,i l ,i sciie uup liteia iespectiv liteiele at."
Bac un accent ciicumflex este piimul simbol men(ionat ntie
paiantezele uiepte, acesta aie ca efect inveisaiea semnifica(iei
expiesiei iegulate plasate ntie paianteze. Be exemplu, expiesia
iegulat a-z coiespunue oiiciui caiactei uifeiit ue un caiactei
sciis cu minuscule.
Pentiu a specifica faptul c o expiesie iegulat se poate iepeta,
expiesia iegulat va fi uimat ue o peieche ue paianteze acolaue, caie
incluu limitele supeiioai ,i

1SS

infeiioai ale iepeti(iei. Be exemplu, expiesia iegulat aeiou 1,4
coiespunue unui ,ii caie este compus uin 1-4 vocale. Pentiu a
specifica iepetaiea mai multoi pi(i ale unei expiesii iegulate,
incluue(i pi(ile iespective ntie paianteze. Be exemplu, expiesia
iegulat (smlat)1 ,2 coiespunue unui numi ue una sau uou
iepetii ale oiiciuia uintie ,iiuiile "sat", "mat" sau "lat".
0nele valoii caie se iepet sunt att ue fiecvent folosite, nct au
abievieii:
<tabel>
*Abievieie
*Semnifica(ie

*+
*1, n, unue n este un numi aibitiai ue maie
**
*u, n, unue n este un numi aibitiai ue maie
*.
*u,1
<tabel>

S piesupunem c uoii(i s iepiezenta(i o nmul(iie. Bac folosi(i
caiacteie minuscule pentiu opeianzi, pute(i ob(ine ceva ue genul a-
z*a-z. Totu,i, aceast expiesie iegulat nu aie semnifica(ia uoiit,
ueoaiece * este un factoi ue iepeti(ie, nu un caiactei uinti-un ,ii.
Pentiu a uezactiva semnifica(ia special a caiacteiului *, tiebuie s-l
piefixa(i cu un caiactei backslash: a-z\*a-z.
Pentiu a specifica faptul c o expiesie iegulat coiespunue numai
unui sub-,ii caie incluue caiacteiul ini(ial al unui ,ii subiect,
piefixa(i expiesia iegulat cu un accent ciicumflex. Be exemplu,
expiesia iegulat "smlat coiespunue sub-,iiuiiloi "sat", "mat" sau
"lat" numai uac acestea apai la nceputul ,iiului subiect. Similai,
pentiu a aita c o expiesie iegulat coiespunue numai unui sub-,ii
caie incluue caiacteiul final al unui ,ii subiect, anexa(i la expiesia
iegulat un simbol al uolaiului. Be exemplu, expiesia iegulat
smlat$ coiespunue ,iiuiiloi "sat", "mat" sau "lat" numai uac
acestea apai la sfi,itul ,iiului subiect. Expiesia iegulat smlat$
coiespunue sub-,iiuiiloi "sat", "mat" sau "lat" numai uac ,iiul
subiect este iuentic cu unul uintie aceste sub-,iiuii.

<Sugestie>
Expiesiile iegulate incluu ,i alte instiumente n afaia celoi uesciise
pn acum, instiumente al cioi numi este piea maie pentiu a
putea fi explicate nti-un singui capitol. Nici mcai n manualul PBP
pe supoit electionic nu exist o uesciieie complet a expiesiiloi
iegulate. Bac ave(i acces la paginile ue manual instalate cu PBP,
pute(i citi o uesciieie complet a expiesiiloi iegulate acceptate ue
PBP, caie sunt compatibile cu stanuaiuul P0SIX 1uuS.2. Stanuaiuul
P0SIX este un uocument costisitoi, piotejat piin legisla(ia uieptuiiloi
ue autoi. Bac nu pute(i ob(ine accesul la paginile ue manual PBP sau
la stanuaiuul P0SIX, pute(i gsi un nuiumai util piivinu expiesiile
iegulate, sciis ue Baiio F. uomes, la auiesa
http:www.phpbuiluei.com.<sugestie>

<titlu>0tilizaiea expiesiiloi iegulate<titlu>
PBP incluue numeioase func(ii caie lucieaz cu expiesii iegulate.
Tabelul 9-9 uesciie aceste func(ii. Sub-sec(iunea ue fa( explic
func(ia eieg(); pentiu infoima(ii piivinu celelalte func(ii, consulta(i
manualul PBP.

1S4

Foima simpl a func(iei eieg() pieia uou aigumente: un ,ii caie
con(ine o expiesie iegulat ,i un ,ii subiect. Func(ia ietuineaz tiue
uac expiesia iegulat coiespunue unui sub-,ii al ,iiului subiect; n
caz contiai, ietuineaz false. Iat un exemplu simplu:

$mouel = ,smlat";
$subiect = ,La noi in sat";
$iezultat = eieg($mouel, $subiect);

vaiiabila $iezultat piime,te valoaiea tiue, ueoaiece ,iiul subiect
con(ine sub-,iiul "sat", caie coiespunue expiesiei iegulate.
Foima mai complex a func(iei eieg() incluue un al tieilea aigument,
un tablou caie piime,te sub-,iiuii ce coiespunu poi(iuniloi sciise
ntie paianteze ale mouelului. Pioiectul afeient capitolului cuient
piezint mouul ue utilizaie a acestei foime a func(iei eieg(), pe caie o
folose,te pentiu a ueteimina uac un ,ii con(ine o auies ue e-mail
coiect foimat.

<tabel 9-9 Func(ii PBP pentiu expiesii iegulate>
*Func(ie
*Besciieie

*eieg
*Execut o iuentificaie cu o expiesie iegulat

*eieg_ieplace
*nlocuie,te un sub-,ii caie coiespunue unei expiesii iegulate

*eiegi
*Execut o iuentificaie cu o expiesie iegulat insensibil la uifeien(a
ntie majuscule ,i minuscule

*eiegi_ieplace
*nlocuie,te un sub-,ii caie coiespunue unei expiesii iegulate
insensibile la uifeien(a ntie majuscule ,i minuscule

*split
*Biviue un ,ii nti-un tablou folosinu o expiesie iegulat

*spliti
*Biviue un ,ii nti-un tablou folosinu o expiesie iegulat (insensibil
la uifeien(a ntie majuscule ,i minuscule)

*sql_iegcase
*Cieeaz o expiesie iegulat insensibil la uifeien(a ntie majuscule
,i minuscule uinti-un ,ii caie con(ine o expiesie iegulat.
<tabel 9-9>

<Sfatul specialistului >
ntiebaie: Acest capitol explic mouul ue geneiaie a unoi uate ue
ie,iie foimatate. Exist vieo moualitate simpl ue baleieie a uateloi
ue intiaie foimatate.
Rspuns: Func(ia PBP sscanf (), auugat n veisiunea PBP 4.u1,
este complementaia func(iei piintf (). Bac func(ia piintf ()
geneieaz uate ue ie,iie foimatate, func(ia sscanf () cite,te un ,ii, l
inteipieteaz piin iefeiiiea la un ,ii ue foimataie ,i stabile,te
valoiile vaiiabileloi specificate n func(ie ue con(inutul ,iiului.
S lum n consiueiaie uimtoiul exemplu:
$subiect = "u1,S1,2uuS";
$n = sscanf($subiect, "u,u,u", $luna, $zi, $an);

1SS

echo "<BR>Au fost gsite $n valoii:";
echo "<BR>luna=$luna";
echo "<BR>zi=$zi";
echo "<BR>an=$an";

Batele ue ie,iie ale acestui exemplu sunt:

Au fost gsite S valoii:
luna=1
zi=S1
an=2uuS
Pentiu mai multe infoima(ii piivinu func(ia sscanf (), consulta(i
manualul PBP. <Sfatul specialistului >

<Test ,la minut">
- Ce func(ie PBP execut cutaiea sensibil la uifeien(a ntie
majuscule ,i minuscule a unui ,ii subiect al unui sub-,ii uat,
examinnu un numi maxim uat ue caiacteie.
- Ce func(ie PBP extiage un sub-,ii al unui ,ii subiect, n func(ie ue
pozi(ia ini(ial ,i ue lungimea sub-,iiului.
- Sciie(i o expiesie iegulat caie coiespunue numai sub-,iiuiiloi
"jos", "ios" ,i "cos" caie apai la nceputul unui ,ii. <Test ,la minut">

<titlu>Pioiect 9-1: 0 iutin ue iuentificaie a echivalen(eloi cu
expiesii iegulate<titlu>

n cauiul acestui pioiect, ve(i constiui o pagin caie v peimite s
intiouuce(i un ,ii ,i o expiesie iegulat, piecum ,i s cuta(i n ,iiul
iespectiv un sub-,ii caie coiespunue expiesiei iegulate. Pute(i folosi
acest pioiect pentiu a v mbunt(i cuno,tin(ele n mateiie ue
expiesii iegulate.

<titlu>Scopuiile pioiectului<titlu>
- Piezentaiea mouului ue utilizaie a func(iei eieg()
- Piezentaiea mouului ue testaie a foimulaiului cu uate intiouuse ue
utilizatoi
- Piezentaiea mouului ue valiuaie a unei auiese ue e-mail

<titlu>Pas cu pas<titlu>
1. Plasa(i uimtoiul sciipt PBP nti-un fi,iei uenumit p-9-1 .php ,i
ncica(i acest fi,iei n seiveiul uumneavoasti PBP:

<.php
echo "<BR><B>sii:<B>nbsp;$sii";
echo "<BR><B> expiesie iegulata:<B>nbsp;$mouel";
if (get_magic_quotes_gpc())

<not>
Rspunsuii la test:
- stincmp()
- substi()
- jicos
<not>

1S6


echo "<BR><BR>";
echo "<BR>Eliminaiea ghilimeleloi magice....";
$sii = stiipslashes($sii);
$mouel = stiipslashes($mouel);
echo "<BR><B>sii:<B>nbsp;$sii";
echo "<BR><B>expiesie iegulata:<B>nbsp;$mouel";

$gasit = eieg($mouel, $sii, $echivalente);
echo "<BR><BR>";
if ($gasit)

echo "<BR><B>valabil:<B>nbsp;tiue";
echo "<BR><BR>";
echo "<BR><B>Componente:nbsp<B>";
foi ($i = u; $i < count($echivalente); $i++)

echo "<BR>$ echivalente $i";


else
echo "<BR><B>valabil:<B>nbsp;false";
.>

2. Plasa(i uimtoiul text BTNLnti-un fi,iei uenumit p-9-1 .html ,i
ncica(i acest fi,iei n seiveiul uumneavoasti, inseinuu-l n
acela,i catalog ca ,i fi,ieiul p-9-1 .php:

<BTNL>
<BEAB>
<TITLE>Pioiect 9-1<TITLE>
<BEAB>
<B0BY>
<B2>Pioiect 9-1:Testaiea expiesiiloi iegulate<B2>
<F0RN NETB0B="P0ST" ACTI0N="p-9-1.php">
<F0NT FACE="Couiiei">
Sii:
<BR>
<INP0T TYPE="TEXT" NANE="sii">
<BR><BR>
Expiesie iegulata:
<BR>
<INP0T TYPE="TEXT" SIE=64 NANE="mouel">

vAL0E="(_a-zA-u-9-+)(_a-zA-u-9-+(._a-zA-u-9-+)*)$">
<BR><BR>
<BR>
<INP0T TYPE="S0BNIT">
<F0NT>
<F0RN>
<B0BY>
<BTNL>

S. Aloca(i un timp stuuiului sciiptului BTNL. 0bseiva(i apelul la
func(ia get_magic_quotes_gpc(). Aceast func(ie ietuineaz o valoaie
coiespunztoaie op(iunii PBP magic_quotes_gpc, configuiat ue
auministiatoiul ue sistem PBP. Bac aceast op(iune este activat,
PBP,, auaug automat caiacteie backslash la vaiiabilele uin foimulai,
astfel nct valoiile loi: poat fi folosite n contexte caie impun
piotec(ia caiacteieloi speciale. Aceast caiacteiistic nu este util la
intiouuceiea, vizualizaiea ,i utilizaiea unei expiesii iegulate.

1S7

Beci, uac op(iunea este activat, sciiptul folose,te func(ia
stiipslashes() pentiu a elimina toate caiacteiele slash neuoiite
auugate n mou automat ue PBP. Pentiu a veuea ue ce este necesai
acest luciu, pute(i elimina instiuc(iunea if ,i coipul su uin sciipt ,i
apoi nceica(i s iula(i sciiptul. Bac op(iunea magic_quotes_gpc este
activat n veisiunea limbajului PBP instalat n sistemul
uumneavoasti, sciiptul nu va func(iona n mou coiespunztoi.
4. Aloca(i un timp stuuiului paginii BTNL. Acoiua(i o aten(ie special
expiesiei iegulate specificate ca valoaie piestabilit a casetei cu text
uenumite mouel. Aceast expiesie iegulat apioximeaz foima unei
auiese ue e-mail. Cu toate acestea, nu este o iepiezentaie peifect.
Cutaiea expiesiei iegulate peifecte pentiu iepiezentaiea auieseloi
coiecte ue e-mail este asemntoaie cu expeui(iile meuievale
ntiepiinse pentiu gsiiea Sfntului uiaal*. Pute(i gsi ,i alte
poten(iale expiesii iegulate la auiesa http: www.phpbuiluei.com ,i
n manualul PBP aunotat.
<ecian>
Pioject 9-2: Regulai Expiession Testei
<cmpuii>
Stiing:
Regulai Expiession:
(_a-zA-u-9-+)(_a-zA-u-9-+(._a-zA-u-9-+)*)$
<cmpuii>
<buton> Submit Queiy <buton>
<ecian>

S. 0iienta(i un biowsei Web spie auiesa 0RL a fi,ieiului BTNL
ncicat anteiioi. Ecianul biowseiului tiebuie s fie asemntoi
celui piezentat n ilustia(ia uimtoaie. Intiouuce(i o valoaie a ,iiului
,i, uac uoii(i, nlocui(i valoaiea expiesiei iegulate, uup caie
executa(i clic pe butonul ,Tiimite inteiogaiea".
6. La execu(ia sciiptului, acesta nceaic s stabileasc o echivalen(
ntie expiesia iegulat ,i un sub-,ii al ,iiului ,i afi,eaz iezultatul.
0n iezultat caiacteiistic este piezentat altuiat.

<ecian>

stiing: billosboine.com
iegulai expiession: (_a-zA-u-9-+)(a-zA-u-9-+(.a-zA-
u-9-+)*)$

Stiipping magic quotes....
stiing: billosboine.com
iegulai expiession: (_a-zA-u-9-+)(a-zA-u-9-+(.a-zA-
u-9-+)*)$

valiu: tiue

Components:
billosboine.com
bill
osboine.com
.coin
<ecian>

<not>
In oiiginal Boly uiail (Sfntul uiaal) - n legenuele anglo-saxone, un
potii folosit ue lisus la Cina cea ue Tain ,i n caie losif uin Aiimateea
a cules ultimele pictuii uin sngele lui lisus istignit pe Ciuce;
folosit fiecvent ca simbol al puiit(ii cie,tine sau ca isplat a
acesteia. - N.T. <not>

1S8

<Test ue evaluaie>
1. Sciie(i un ,ii ue foimataie caie specific o valoaie ,ii aliniat la
stnga, caie tiebuie s ocupe 24 ue spa(ii, uimat ue o valoaie ue tip
uouble aliniat la stnga, cu uou cifie zecimale.
2. Sciieti o secven( escape caie iepiezint caiacteiul a ciui valoaie
ASCII este 4S n octal.
S. Sciie(i un apel ue func(ie ,i o atiibuiie caie stocheaz n vaiiabila
$i valoaiea vaiiabilei $s ,i caie elimin caiacteiele ue tip spa(iu alb
ue la nceput ,i ue la sfi,it.
4. Sciie(i un apel ue func(ie caie ietuineaz un ,ii asemntoi cu $s,
uai ale ciui n caiacteie, numiate ue la pozi(ia i, sunt nlocuite piin
,iiul $i.
S. Sciie(i o expiesie iegulat caie coiespunue numai sub-,iiuiiloi
"axb", "ayb" ,i "azb" caie apai la sfi,itul unui ,ii subiect.
<Test ue evaluaie>




1S9
<titlu>Paitea a III-a:
Luciul cu uate stocate<titlu>

<titlu>Nouulul 1u:
0tilizaiea vaiiabileloi cookie<titlu>

<titlu>Scopuii<titlu>
- nv(a(i caie este mouul ue func(ionaie a vaiiabileloi cookie
- nv(a(i s ciea(i, s ob(ine(i accesul la vaiiabilele cookie ,i s le
,teige(i
- nv(a(i s stoca(i mai multe valoii nti-o vaiiabil cookie
- nv(a(i s specifica(i op(iunile uinti-o vaiiabil cookie

Acest mouul v piezint no(iunile intiouuctive iefeiitoaie la
vaiiabilele ue uate cookie, o caiacteiistic BTTP caie v peimite s
stoca(i uate n sistemul unui utilizatoi. vaiiabilele cookie sunt utile
pentiu stocaiea piefeiin(eloi utilizatoiiloi ,i a altoi infoima(ii caie
tiebuie ie(inute atunci cnu utilizatoiul tiece la o nou pagin Web.

<titlu>Accesul la vaiiabilele cookie ,i cieaiea acestoia<titlu>
valoiile majoiit(ii vaiiabileloi uispai atunci cnu sciiptul PBP caie
le con(ine ,i ncheie execu(ia. Spie ueosebiie ue acestea, valoiile
vaiiabileloi cookie se pot pstia un timp inuefinit. Pentiu ca valoiile
loi s se poat pstia, biowseiul utilizatoiului stocheaz vaiiabilele
cookie n unitatea ue haiu-uisc local a utilizatoiului.
vaiiabilele cookie sunt utile uinti-o mul(ime ue puncte ue veueie. Be
exemplu, multe situii Web folosesc vaiiabile cookie pentiu a stoca
iuentitatea utilizatoiului ,i

16u

piefeiin(ele ue vizualizaie ale acestuia. Cnu utilizatoiul ievine la
situl Web, vaiiabilele cookie peimit biowseiului s iecunoasc
utilizatoiul ,i s iestauieze op(iunile sitului selectate ue ctie
utilizatoi.
Bin pcate, vaiiabilele cookie nu constituie solu(ia peifect pentiu un
meuiu ue stocaie pe teimen lung ,i piezint o seiie ue uezavantaje.
Be exemplu:
- 0n utilizatoi poate uezactiva vaiiabilele cookie piin stabiliiea unei
op(iuni a biowseiului
- n anumite situa(ii, vaiiabilele cookie pot fi vizualizate ue al(i
utilizatoii uect utilizatoiul ale ciui uate le stocheaz
- 0n sit poate stoca numai 2u ue vaiiabile cookie ,i numai 4KB ue
infoima(ii n unitatea ue haiu-uisc local a utilizatoiului
- Numeioase veisiuni ale biowseieloi fiecvent folosite au eioii caie
le mpieuic s foloseasc vaiiabilele cookie n mou auecvat
n ciuua acestoi uezavantaje, vaiiabilele cookie imn cea mai
populai tehnic pentiu ob(ineiea unui meuiu ue stocaie pe teimen
lung. Beci, este impoitant s n(elege(i caie este mouul ue
func(ionaie ,i ue utilizaie a acestoia.

<titlu>Accesul la o vaiiabil cookie<titlu>

Poate c tistuia cea mai caiacteiistic a vaiiabileloi cookie o
constituie comouitatea. Bac a(i cieat o vaiiabil cookie, valoaiea
acesteia este automat pus la uispozi(ie ca vaiiabil PBP avnu
acela,i nume cu acela al vaiiabilei cookie. Be exemplu, s
piesupunem c a(i cieat o vaiiabil cookie uenumit fiuct ,i c i
atiibui(i valoaiea banana. Aceast peieche nume-valoaie este apoi
pus la uispozi(ia fieciui sciipt PBP asociat sitului uumneavoasti
ue Web. Beci pute(i afi,a valoaie vaiiabilei cookie folosinu
uimtoaiea instiuc(iune:

Echo ,valoaiea vaiiabilei cookie este $fiuct.";
Aceast instiuc(iune aie ca efect afi,aiea uimtoiului iezultat:

valoaiea vaiiabilei cookie este banana.

vaiiabila PBP ue tip tablou asociativ BTTP_C00KIE_vARS con(ine
numele ,i valoaiea fieciei vaiiabile cookie cuient. Bac uoii(i s
vizualiza(i fiecaie vaiiabil cookie uisponibil ,i valoaiea acesteia,
pute(i invoca func(ia phpinfo(), caie afi,eaz valoaiea tabloului
BTTP_C00KIE_vARS. Bac uoii(i s ob(ine(i acces la tablou piin
metoue piogiamatice, pute(i folosi un piogiam ca uimtoiul:

Foieach($BTTP_C00KIE_vARS as $nume => $valoaie)
Echo ,<BR>$nume => $valoaie";

161

<titlu>Cieaiea unei vaiiabile cookie<titlu>
Cieaiea unei vaiiabile cookie este apioape la fel ue simpl ca ,i
ob(ineiea accesului la aceasta. Pentiu a ciea o vaiiabil cookie,
invoca(i func(ia setcookie(), caie aie uimtoaiea foim:

setcookie(nume, valoaie, expiiaie)

Aigumentul nume specific numele vaiiabilei cookie, iai aigumentul
valoaie specific valoaiea vaiiabilei. Aigumentul expiiaie inuic
momentul expiiiii vaiiabilei cookie; uup oia specificat, vaiiabila
cookie nu mai este accesibil.
n geneial, este convenabil s se specifice momentul expiiiii
folosinu func(ia time(), caie ietuineaz inteivalul ue timp (expiimat
n secunue) scuis ue la 1 ianuaiie 197u. Pute(i auuga o valoaie ue
tip uecalaj (offset), caie specific inteivalul ue timp pe uuiata ciuia
vaiiabila cookie tiebuie s fie accesibil. Be exemplu, s lum n
consiueiaie uimtoaiea instiuc(iune:

setcookie(,fiuct", ,banana", time()+S6uu);

Aceast instiuc(iune cieeaz o vaiiabil cookie uenumit fiuct, caie
aie valoaiea banana. vaiiabila cookie va fi uisponibil timp ue o oi
(S6uu secunue) ue la cieaiea sa.
Bac piefeia(i, pute(i specifica momentul expiiiii folosinu func(ia
mktime (). Aceast func(ie aie uimtoaiea foim:

mktime(oie,minute,secunue,luna,zi,an)

Be exemplu, uimtoaiea instiuc(iune cieeaz o vaiiabil cookie caie
expii la o secunu uup miezul nop(ii piimei zile a anului 2uuS:

Setcookie(,fiuct", ,banana", mktime(u, u, 1, 1, 1, 2uuS));

<Aveitisment>
valoiile vaiiabileloi cookie sunt tiimise ue ctie biowsei ca paite a
anteteloi BTTP. Ca ataie, valoiile vaiiabileloi cookie tiebuie s fie
stabilite anteiioi expeuieiii oiicioi altoi valoii ctie biowsei.
Tiimiteiea fie ,i a unui singui spa(iu v poate mpieuica s
configuia(i valoaiea unei vaiiabile cookie. Pentiu a evita pioblemele,
asiguia(i-v c un sciipt PBP caie stabile,te o valoaie a unei vaiiabile
cookie este plasat n paitea supeiioai a fi,ieiului, fi caiacteie ue
tip spa(iu alb caie s-l pieceau. Be asemenea, stabili(i valoaiea
vaiiabilei cookie nainte ue a executa o instiuc(iune echo sau o alt
instiuc(iune PBP caie tiimite biowseiului uate ue
ie,iie.<aveitisment>

<Sfatul specialistului>
ntiebaie: Ce este un antet BTTP.
Rspuns: nainte ue a tiimite uate BTNL unui biowsei, un seivei
Web tiimite, n geneial, unul sau mai multe antete BTTP; aceste
antete sunt cunoscute

162

sub numele ue antete ue ispuns al seiveiului. Similai, nainte ue a
tiimite infoima(ii unui seivei Web, un biowsei Web tiimite, n
geneial, unul sau mai multe antete BTTP; aceste antete sunt
cunoscute sub numele ue antete ue ceieie. Antetele ue ispuns al
seiveiului fiecvent folosite uesciiu configuia(ia seiveiului ,i
fuinizeaz infoima(ii iefeiitoaie la auiesa 0RL solicitat ue client.
Antetele ue ceieie utilizate ue obicei uesciiu configuia(ia clientului ,i
foimatele ue uate acceptabile ue ctie client.
n afai ue antetele ue ispuns al seiveiului ,i ue antetele ue ceieie,
piotocolul BTTP folose,te antete geneiale ,i antete ue entitate.
Antetele geneiale sunt folosite att ue ctie clien(i, ct ,i ue ctie
seiveie, pentiu a specifica infoima(ii piecum uata cuient ,i
op(iunile ue conexiune. Antetele ue entitate uesciiu foimatul uateloi
schimbate ue un client ,i un seivei.
<sfatul specialistului>

<titlu>$teigeiea unei vaiiabile cookie<titlu>
Beoaiece o vaiiabil cookie aie o uat ue expiiaie, aceasta va fi
,teais automat la un oaiecaie inteival ue timp uup cieaiea sa.
Totu,i, pute(i ,teige o vaiiabil cookie imeuiat. Pentiu aceasta, fixa(i
momentul expiiiii vaiiabilei cookie la un moment ue timp uin
tiecut. Be exemplu, pentiu a ,teige o vaiiabil cookie uenumit fiuct,
pute(i folosi uimtoaiea instiuc(iune:

Setcookie(,fiuct", ,", time()-S6uu);

Aceast instiuc(iune stabile,te timpul ue expiiaie cu o oi (S6uu ue
secunue) n uim. Remaica(i c valoaiea vaiiabilei cookie este
expiimat sub foima unui ,ii viu; uin moment ce vaiiabila cookie nu
va mai fi uisponibil, valoaiea sa nu mai aie impoitan(.

<Test ,la minut">
- Caie este vaiiabila PBP folosit pentiu a incluue numele fieciei
vaiiabile cookie uisponibile.
- Caie este func(ia utilizat pentiu cieaiea unei vaiiabile cookie.
- Caie este func(ia folosit pentiu ,teigeiea unei vaiiabile cookie.
<Test ,la minut">

<not>
Rspunsuii la test:
- $BTTP_C00KIE_vARS setcookie()setcookie()
- setcookie()
- setcookie()
<not>

16S

<titlu>Tehnici avansate ue utilizaie a vaiiabileloi cookie<titlu>

Aceast sec(iune piezint unele tehnici mai avansate pentiu luciul cu
vaiiabile cookie. Piima sub-sec(iune explic mouul ue stocaie a mai
mult ue 2u ue valoii nti-o singui vaiiabil cookie. Cea ue-a uoua
sub-sec(iune explic mouul ue utilizaie a mai multoi aigumente
suplimentaie ale func(iei setcookie ().

<titlu>Stocaiea mai multoi valoii nti-o vaiiabil cookie<titlu>
Beoaiece un sit Web poate stoca numai 2u ue vaiiabile cookie n
sistemul unui utilizatoi, capacitatea ue a stoca mai multe valoii nti-o
singui vaiiabil cookie este util, n confoimitate cu manualul PBP
pe supoit electionic, pute(i iealiza acest luciu piin specificaiea unui
tablou ca nume al vaiiabilei cookie. Be exemplu, pute(i folosi un
piogiam ca acesta:

0n exemplu eionat ue vaiiabila cookie cu mai multe valoii
foi ($i = u; $i < Su; $i++)

setcookie(,cookies$i", ,$i");


(isset($cookies))

foieach ($cookies as $i => $cookie)

echo ,<BR>$i => $cookie";



Bin pcate, acest pioceueu nu func(ioneaz. Contiai infoima(iiloi uin
manualul PBP, fiecaie element al tabloului este stocat nti-o vaiiabil
cookie sepaiat. Astfel, piin utilizaiea acestui pioceueu nu pute(i
stoca mai mult ue 2u ue valoii.
Pe ue alt paite, stocaiea mai multoi valoii nti-o singui vaiiabil
cookie este posibil. Pentiu aceasta, inseia(i valoiile nti-un tablou ,i
folosi(i func(ia seiialize() pentiu a ,mpacheta" elementele tabloului
nti-un ,ii; ulteiioi, pute(i iecupeia valoaiea tabloului folosinu
func(ia unseiialize(). Iat un exemplu caie piezint mouul ue cieaie
a unei vaiiabile cookie caie con(ine mai multe valoii, piecum ,i
mouul ue acces la aceasta:

Se cieeaza un tablou
foi ($i = u; $i < Su; $i++)

$tablou$i=$i;


Se impacheteaza intiegul tablou inti-un sii
$s = seiialize($tablou);

164

Se cieeaza o vaiiabila cookie si se stabileste valoaiea sa
setcookie(,cookies",$s);

if(isset($cookies))

Se uespacheteaza valoaiea vaiiabilei cookie
$tablou = unseiialize(stiipslashes($cookies));

Bemonstieaza ca totul este in oiuine,
piin afisaiea elementeloi tabloului
foieach ($tablou as $i => $cookie)

echo ,<BR>$i => $cookie";




Func(ia stiipslashes() este folosit pentiu eliminaiea secven(eloi
escape auugate la ,ii atunci cnu valoaiea vaiiabilei cookie este
ietuinat ue PBP.

<Aveitisment>
Be,i acest pioceueu ieu,e,te s ocoleasc limita celoi 2u ue vaiiabile
cookie, nu poate uep,i limita celoi 4KB ue uate stocate nti-o
vaiiabil cookie pentiu fiecaie sit Web n paite. Bac uoii(i s stoca(i
mai mult ue 4KB ue uate, tiebuie s stoca(i uatele nti-o baz ue uate
pe paite ue seivei sau nti-un alt loc uect o vaiiabil cookie.
<Aveitisment>

<titlu>Specificaiea accesului la o vaiiabil cookie ,i alte
op(iuni<titlu>
Func(ia setcookie() poate pielua maximum ,ase aigumente, inclusiv
tiei aigumente uespie caie nu am uiscutat nc. Iat foimatul
complet al func(iei setcookie():

setcookie(nume, valoaie, expiiaie, cale, uomeniu, sigui)

Aigumentele nume, valoaie ,i expiiaie au fost uesciise n sec(iunea
pieceuent a acestui mouul.
Aigumentul cale v peimite s specifica(i calea 0RL asociat
vaiiabilei cookie. n mou piestabilit, vaiiabila cookie este uisponibil
pentiu sciiptuiile uin catalogul caie con(ine sciiptul n caie a fost
configuiat vaiiabila iespectiv, piecum ,i pentiul sciiptuiile uin
sub-cataloagele afeiente catalogului iespectiv. n paiticulai, sciiptu-
iiloi uin cataloagele piinte ale catalogului caie con(ine sciiptul nu li
se peimite accesul piestabilit la vaiiabila cookie.
Pentiu a pune vaiiabila cookie la uispozi(ia sciiptuiiloi uinti-un
anumit catalog uin sub-cataloagele sale, specifica(i o valoaie a
aigumentului cale. Be exemplu, pentiu a pune vaiiabila cookie la
uispozi(ia ntiegului aiboie ue cataloage, specifica(i " " ca valoaie a
aigumentului cale; pentiu a face vaiiabila cookie uisponibil n
catalogul -test ,i n sub-cataloagele sale, specifica(i "-test" ca
valoaie a aigumentului cale.

16S

<Aveitisment.>
0 complica(ie n utilizaiea aigumentului cale o constituie moualitatea
ue iuentificaie a numeloi cataloageloi. Specificnu "-test" ca
valoaiea aigumentului cale, vaiiabila cookie va ueveni uisponibil n
-test1, -test2 ,i n toate cataloagele cu nume similaie, pe lng
catalogul -test ,i sub-cataloagele sale. <Aveitisment.>

Bac nu este specificat nici un aigument uomeniu, o vaiiabil cookie
este uisponibil numai pentiu sciiptuiile ieziuente pe seiveiul Web
caie a cieat vaiiabila iespectiv. Aigumentul uomeniu v peimite s
specifica(i numele ue uomeniu asociat unei vaiiabile cookie. n
consecin(, vaiiabila cookie va fi uisponibil numai pentiu situiile
Web uin cauiul uomeniului specificat. Be exemplu, s piesupunem c
un sciipt uin seiveiul Web http:www.subuomeniu.uomeniu.com
cieeaz o vaiiabil cookie. n mou piestabilit, vaiiabila cookie este
uisponibil numai pentiu gazua iespectiv. Cu toate acestea, pute(i
face vaiiabila cookie uisponibil pe ntieg uomeniul
subuomeniu.uomeniu.com, specificnu "subuomeniu.uomeniu.com"
ca valoaie a aigumentului uomeniu.

<Sugestie>
Specifica(ia Netscape pentiu vaiiabile cookie
(http:www.netscape.comnewsiefstucookie_spec.html) impune
ca aigumentul uomeniu s con(in minimum uou caiacteie punct.
Ca ataie, nu tiebuie s specifica(i un ,ii ue tipul "uomeniu.com" ca
valoaie a aigumentului uomeniu.
Aigumentul sigui este o valoaie ntieag, caie specific uac
vaiiabila cookie tiebuie tiimis piin inteimeuiul unei conexiuni
siguie (BTTPS). Specifica(i valoaiea l pentiu a mpieuica
tiansmiteiea vaiiabilei cookie n cazul n caie conexiunea nu este
sigui; pentiu a peimite tiansmiteiea vaiiabilei cookie piin
conexiuni BTTP obi,nuite, specifica(i valoaiea u. <Sugestie>

<Sfatul specialistului>
ntiebaie: Bac o peisoan cu acces la unitatea ue haiu-uisc a
utilizatoiului poate citi valoiile stocate nti-o vaiiabil cookie, cum se
poate pstia confiuen(ialitatea infoima(iiloi stocate n aceast
vaiiabil.
Rspuns: Beoaiece biowseiele stocheaz vaiiabilele cookie n
unitatea ue haiu-uisc local, utilizatoiii unui sistem pot ob(ine
accesul la fi,ieiele cookie ,i pot citi sau chiai mouifica infoima(iile
con(inute n fi,ieiele iespective. 0 moualitate ue a pieveni situa(ia
piezentat const n ciiptaiea uateloi stocate n vaiiabilele cookie.
Pentiu aceasta, pute(i folosi func(iile Nciypt uin PBP. Func(iile n
cauz sunt incluse n biblioteca libmciypt, caie nu face paite uin
veisiunea instalat

166

n mou piestabilit a limbajului PBP; ueci, este posibil s fi(i obligat a
solicita auministiatoiului uumneavoasti ue sistem s instaleze
biblioteca ,i s configuieze PBP astfel nct s fie capabil s ob(in
accesul la aceasta. Pentiu infoima(ii uespie instalaiea ,i utilizaiea
func(iiloi Nciypt, vezi auiesa http:www.php.net.
<Sfatul specialistului>

<Aveitisment>
Be,i aigumentele expiiaie ,i cale ale func(iei setcookie () sunt
op(ionale, unele veisiuni ale piincipaleloi biowseie piezint eioii
caie le ueteimin s iefuze vaiiabilele cookie uac aceste aigumente
nu sunt specificate. Ca ataie, n geneial este iecomanuat s specifica(i
aceste aigumente. <Aveitisment>

<Test ,la minut">
- Caie este numiul ue valoii caie pot fi asociate unui fi,iei cookie.
- Caie este func(ia folosit pentiu couificaiea unui tablou astfel nct
unei vaiiabile cookie s-i poat fi asociate mai multe valoii.
- Pentiu a inuica faptul c o vaiiabil cookie tiebuie s fie tiimis
numai piin inteimeuiul unei conexiuni siguie (BTTPS), caie este
valoaiea pe caie tiebuie s o piimeasc aigumentul sigui al func(iei
setcookie().<Test ,la minut">

<titlu>Pioiect 1u-1: 0 pagin ue ueschiueie a sesiunii ue
luciu<titlu>
n cauiul acestui pioiect, ve(i constiui o pagin BTNL ,i un sciipt
PBP caie peimit unui utilizatoi s ueschiu sesiunea ue luciu cu un
sistem. Pagina peimite utilizatoiului s intiouuc un iuentificatoi ue
utilizatoi ,i o paiol, caie sunt autentificate ue sciipt piin
confiuntaiea cu un set stocat ue iuentificatoii ue utilizatoi ,i paiole
coiecte. Bac autentificaiea utilizatoiului ieu,e,te, sciiptul
configuieaz o vaiiabil cookie caie inuic sciiptuiiloi ulteiioaie c
utilizatoiul a fost autentificat.

<titlu>Scopuiile pioiectului<titlu>
- Piezentaiea unei aplica(ii a vaiiabileloi cookie
- Piezentaiea mouului ue cieaie a unei pagini simple ue ueschiueie a
sesiunii ue luciu ,i a unui sciipt

<titlu>Pas cu pas<titlu>
1. Plasa(i uimtoiul sciipt PBP nti-un fi,iei numit p-1u-1.php ,i
ncica(i acest fi,iei n seiveiul uumneavoasti PBP:
<not>
Rspunsuii la test:
- 2u
- seiialize()
- l
<not>

167

<.
$paiole = aiiay("mihai" =>"poitocala",
"stefan"=>"caitof",
"anuiei" =>"aiahiua");
if ($paiola == $paiole$nume_utilizatoi)

setcookie("nume_utilizatoi", $ nume_utilizatoi, time()+12uu);
echo "<B2>Accesul este peimis.<B2>";

else

setcookie("nume_utilizatoi ", "", time()-S6uu);
echo "<B2>Nume ue utilizatoi sau paiola incoiecte: accesul
inteizis.<B2>";

.>

2. Plasa(i uimtoiul text BTNL nti-un fi,iei uenumit p-1u-1 .html ,i
ncica(i acest fi,iei n seiveiul uumneavoasti, inseinuu-l n
acela,i catalog ca ,i fi,ieiul p-1u-1 .php:

<BTNL>
<BEAB>
<TITLE>Pioiect 1u-1<TITLE>
<BEAB>
<B0BY>
<F0RN NETB0B="P0ST" ACTI0N="p-1u-1.php">
<B2>Pioiect 1u-1: Pagina ue login<B2>
<BR><BR>
Numele utilizatoiului:
<BR><INP0T TYPE="PASSW0RB" NANE="paiola" SIE="16">
<BR><BR><BR><BR>
<INP0T TYPE="S0BNIT" vAL0E="Tiimite">
<F0RN>
<B0BY>
<BTNL>

S. Aloca(i un timp stuuiului sciiptului PBP. Remaica(i c acesta
autentific uatele intiouuse ue utilizatoi compainuu-le cu valoiile
stocate nti-un tablou, nti-o aplica(ie uin lumea ieal, valoiile
coiecte sunt, mai piobabil, stocate nti-o baz ue uate. Inti-un mouul
ulteiioi ve(i nv(a caie este mouul ue luciu cu bazele ue uate.
4. Be asemenea, iemaica(i c vaiiabila cookie este configuiat astfel
nct s expiie n 2u ue minute. Sciiptuiile ulteiioaie pot ieini(ializa
momentul expiiiii vaiiabilei cookie, astfel nct autentificaiea
utilizatoiului s nu fie anulat n timp ce acesta lucieaz. Totu,i, uac
utilizatoiul nceteaz s mai foloseasc sistemul, momentul expiiiii
vaiiabilei cookie va gaianta c utilizatoiul este automat scos uin
sistem uup 2u ue minute. Aceasta contiibuie la evitaiea bie,eloi ue
secuiitate geneiate ue utilizatoii caie pisesc o sesiune ue luciu.
S. 0iienta(i un biowsei Web spie auiesa 0RL a fi,ieiului BTNL
ncicat anteiioi. Ecianul biowseiului tiebuie s fie asemntoi
celui piezentat pe pagina uimtoaie, n stnga. Intiouuce(i un
iuentificatoi ue utilizatoi ,i o paiol ,i executa(i clic pe butonul
,Tiimite".
6. Sciiptul veiific uatele pe caie le-a(i intiouus. Bac a(i intiouus un
iuentificatoi ue utilizatoi ,i o paiol coiecte, tiebuie s veue(i un
ecian asemntoi celui piezentat pe pagina uimtoaie, n uieapta; n
caz contiai, ve(i veuea un ecian caie con(ine un mesaj ue eioaie.

168

<ECRAN>
Pioject 1u-l: LoginPage
<cmpuii>
0seiName:
Passwoiu:
<cmpuii>
<buton>Submit<buton>
<ecian>

<ecian>
Access gianteu. <ecian>

<Test ue evaluaie>
1. Sciie(i o instiuc(iune PBP caie cieeaz o vaiiabil cookie uenumit
coiect,
caie aie valoaiea "false"; stabili(i ca vaiiabila cookie s expiie n Su
ue minute.
2. Sciie(i o instiuc(iune PBP caie ,teige o vaiiabil cookie uenumit
tiecut.
S. Sciie(i o instiuc(iune PBP caie afi,eaz valoaiea vaiiabilei cookie
uenumite vista.
4. Sciie(i o instiuc(iune PBP caie mpacheteaz tabloul numit
$continut nti-un ,ii uenumit $x.
S. Sciie(i o instiuc(iune PBP caie cieeaz o vaiiabil cookie numit
oiiunue, caie aie valoaiea "aici". vaiiabila cookie tiebuie s expiie n
Su ue minute ,i tiebuie s fie accesibil n fiecaie catalog al aiboielui
Web.


<titlu>Nouulul 11:
Luciul cu fi,ieie ,i cataloage<titlu>

<titlu>Scopuii<titlu>
- nv(a(i mouul ue func(ionaie a sistemului ue fi,ieie 0NIX
- nv(a(i s ob(ine(i infoima(ii uespie fi,ieie ,i cataloage
- nv(a(i s citi(i si s sciie(i fi,ieie
- nv(a(i s configuia(i peimisiuni ue fi,ieie ,i cataloage
- nv(a(i s ncica(i, s copia(i, s ,teige(i ,i s mouifica(i
uenumiiea fi,ieieloi
- nv(a(i s ciea(i ,i s ,teige(i cataloage
- nv(a(i s citi(i cataloage ,i s naviga(i n acestea
Acest mouul explic facilit(ile ofeiite ue PBP pentiu luciul cu fi,ieie
,i cataloage. Fi,ieiele ,i cataloagele v peimit s stoca(i uate n
seivei, astfel nct uatele s poat fi ie(inute ,i s fie accesibile ue
ctie mai mul(i utilizatoii.

<titlu>Sistemul ue fi,ieie 0NIX<titlu>
Pentiu a n(elege cum tiebuie utilizat limbajul PBP pentiu a lucia cu
fi,ieie ,i cataloage, tiebuie s n(elege(i sistemul ue fi,ieie 0NIX.
Acest fapt este valabil chiai uac folosi(i PBP sub Niciosoft Winuows,
ueoaiece mouelul folosit ue PBP pentiu luciul cu fi,ieie ,i cataloage
este bazat pe 0NIX.
Aceast sec(iune explic sistemul ue fi,ieie 0NIX ,i mouul ue
utilizaie a comenziloi 0NIX pentiu luciul cu fi,ieie ,i cataloage. Bac
lucia(i cu Niciosoft Winuows, n geneial comenzile uate n aceast
sec(iune nu voi func(iona coiect. Totu,i, n meuiul iespectiv ve(i
lucia cu fi,ieie ,i cataloage folosinu cu piecueie Winuows Exploiei,
nu B0S. Beci piobabil c nu este necesai s cunoa,te(i comenzile
B0S similaie comenziloi 0NIX explicate n aceast sec(iune.
<sugestie>
Pentiu a putea lucia cu fi,ieie ,i cataloage, tiebuie s ueschiue(i
sesiunea ue luciu pe sistemul unue sunt ieziuente acestea. Bac nu
ave(i acces la o consol local, pute(i avea acces la sistem piin
inteimeuiul Telnet sau SSB, uou piotocoale Inteinet cu o laig utili-
zaie. Pentiu a afla caie este mouul ue acces la fi,ieiele ,i cataloagele
unui sistem, apela(i la auministiatoiul sistemului iespectiv.
<sugestie>

17u

<titlu>Luciul cu fi,ieie 0NIX<titlu>
0n fi,iei este o seiie ue octe(i stoca(i pe o unitate ue haiu-uisc, CB-
R0N sau alt meuiu. Fi,ieiele piimesc nume pentiu a se putea face cu
u,uiin( iefeiiie la acestea. 0n nume ue fi,iei 0NIX poate avea o
lungime apioape nelimitat ,i poate incluue apioape oiice caiactei.
Totu,i, se iecomanu utilizaiea unoi nume ue fi,ieie caie fie
suficient ue scuite pentiu a putea fi tastate cu u,uiin( ,i caie s
incluu numai caiacteie vizibile, caie nu au nici o semnifica(ie
special pentiu inteipietoiul 0NIX. Spie ueosebiie ue numele ue
fi,ieie Niciosoft Winuows, numele ue fi,ieie 0NIX sunt sensibile la
uifeien(a ntie majuscule ,i minuscule; ca ataie, a ,i A se iefei la
fi,ieie 0NIX uifeiite. Pentiu a evita pioblemele, mai ales atunci cnu
ueplasa(i fi,ieie ntie 0NIX ,i Winuows, tiebuie s folosi(i minuscule,
cifie, puncte, caiacteie ue sublinieie ,i ciatime n numele fi,ieieloi;
ue asemenea, numele fi,ieieloi tiebuie s nceap cu o minuscul sau
cu o cifi.

<iemaic>
0n octet este apioximativ iuentic cu un caiactei. Totu,i, limbile (nu
limbajele) caie con(in n alfabetul loi numeioase caiacteie pot
necesita mai mul(i octe(i pentiu iepiezentaiea unui caiactei.
Beseoii, aceast uifeien( este lipsit ue impoitan(. <iemaic>

<titlu>vizualizaiea infoima(iiloi uespie fi,ieie<titlu>
Pentiu a vizualiza infoima(ii caie uesciiu un fi,iei, emite(i comanua

ls -l nume_fi,iei

unue nume_fi,iei este numele fi,ieiului. Figuia 11-1 piezint uatele
ue ie,iie caiacteiistice ale comenzii ls.
Batele ue ie,iie incluu uimtoaiele cmpuii:
- Tipul fi,ieiului ,i peimisiuni: tipul fi,ieiului ,i peimisiunile ue
acces. Aceste caiacteiistici ale fi,ieiului sunt uesciise n sub-
sec(iunile intitulate ,Tipuii ue fi,ieie" ,i ,Piivilegii ue fi,iei".
- Legtuii: numiul legtuiiloi haiu asociate acestui fi,iei. Fiecaie
legtui haiu stabile,te un nume uup caie este cunoscut fi,ieiul
iespectiv, n geneial, pute(i ignoia acest cmp.
- 0tilizatoi: Numele utilizatoiului caie este posesoiul fi,ieiului.
- uiup: Numele giupului caie este posesoiul fi,ieiului.
- Bimensiunea fi,ieiului: uimensiunea fi,ieiului, expiimat n octe(i.
- Bata mouificiii: uata ,i oia ultimei mouificii a fi,ieiului. Bac
fi,ieiul nu a sufeiit mouificii iecente, voi fi afi,ate uata ,i anul.
- Numele fi,ieiului: numele atiibuit fi,ieiului.

171

<titlu>vizualizaiea unui fi,iei<titlu>
Pentiu a vizualiza con(inutul unui fi,iei, emite(i comanua

moie nume_fi,iei

unue nume_fi,iei este numele fi,ieiului, n cazul n caie fi,ieiul
con(ine mai multe linii uect poate accepta ecianul sau feieastia,
comanua moie afi,eaz numai numiul liniiloi caie se ncauieaz n
ecian, iespectiv feieasti. Pentiu a paicuige fi,ieiul nainte, apsa(i
pe tasta spa(iu. Pentiu a paicuige fi,ieiul n sens inveis, tasta(i liteia
b. Pentiu a pisi comanua, tasta(i liteia q.

<figuia 11-1 Batele ue ie,iie ale comenzii ls>

*con(inut
*explica(ie

*-iw-i--i--
*Tip ,i peimisiuni

*l
*Legtuii

*ioot
*0tilizatoi

*ioot
*uiup

*86
*Bimensiunea fi,ieiului

*mai 2S 1S:u8
*Bata mouificiii

*netwoiks.txt
*Numele fi,ieiului

<figuia 11-1>

<sugestie> Batele ue ie,iie ale comenzii moie voi fi inteligibile numai
uac fi,ieiul con(ine uate n foimat ASCII. Pentiu a vizualiza un fi,iei
binai, pute(i folosi comanua ou. <sugestie>

<titlu>Euitaiea unui fi,iei<titlu>
0NIX accept o vaiietate ue euitoaie pe caie le pute(i folosi pentiu a
euita un fi,iei, ntieba(i-1 pe auministiatoiul ue sistem caie sunt
euitoaiele uisponibile n sistemul uumneavoasti. 0n euitoi piefeiat
ue numeio,i nceptoii este Pico, euitoi asociat cu populaiul
piogiam client ue e-mail Pine. Pico incluue uocumente ue asisten(
ncoipoiate ,i este u,oi ue nv(at ,i utilizat. Be asemenea, uatoiit
asocieiii sale cu Pine, Pico se gse,te pe numeioase sisteme 0NIX.
Pentiu a euita un fi,iei folosinu Pico, emite(i comanua

Pico nume_fi,iei

unue nume_fi,iei este numele fi,ieiului pe caie uoii(i s-1 euita(i.
Bac uoii(i s ciea(i un fi,iei nou, pui ,i simplu omite(i numele
fi,ieiului. Ecianul euitoiului Pico se piezint ca pe pagina uimtoaie.
Pico piezint numeioase comenzi utile, afi,nuu-le n ultimele uou
linii ale ecianului su. Fiecaie comanu este emis men(innu
apsat tasta CTRL ,i apsnu o tast liteial. Pico noteaz aceast
conven(ie piin piefixaiea liteiei caie simbolizeaz comanua cu un
caiactei ue tip accent ciicumflex (). Tabelul 11-1 uesciie numeioase
comenzi Pico utile.

172

<ecian>
192.168.1.u
192.168.2.u
192.168.S.u
1u.u.1.u
1u.u.2.u
1u.1.u.u
<op(iuni> uet Belp,exit, Wiite0ut ,}ustify,ieau file, wheie is, piev pg,
next pg, cut text, uncut text, cui pos, to spell<op(iuni><ecian>

<titlu>$teigeiea unui fi,iei<titlu>
Pentiu a ,teige un fi,iei, emite(i comanua

im nume_fi,iei

unue nume_fi,iei este numele fi,ieiului.

<Aten(ie>
Spie ueosebiie ue Winuows, 0NIX nu salveaz, n geneial, fi,ieiele
,teise nti-un a,a-zis ,iecipient ue ieciclaie" (Recycle Bin). Ca ataie,
,teigeiea unui fi,iei 0NIX este, n geneial, un act iievocabil.

<titlu>Copieiea unui fi,iei<titlu>
Pentiu a copia un fi,iei, emite(i comanua

cp fi,iei_vechi fi,iei_nou

<tabel 11-1 Comenzi utile ale euitoiului Pico>
*Comanu
*Besciieie

*CTRL-C
*Afi,eaz pozi(ia cuient a cuisoiului (numiul liniei ,i al coloanei)

*CTRL-u
*Afi,eaz uocumentele ue asisten( Pico.

*CTRL-}
*Aliniaz paiagiaful cuient.

*CTRL-K
*Taie linia cuient.

*CTRL-0
*Sciie pe uisc con(inutul buffeiului ue euitaie.

*CTRL-R
*Cite,te un fi,iei n buffeiul ue euitaie.

*CTRL-T
*Lanseaz utilitaiul ue veiificaie oitogiafic al euitoiului Pico.

*CTRL-0
*Lipe,te text.

*CTRL-v
*Beplaseaz textul nainte.

*CTRL-W
*Caut text.

*CTRL-X
*Pise,te piogiamul Pico. Piogiamul va afi,a un piompt uac
buffeiul euitaie nu a fost salvat.
*CTRL-Y
*Beplaseaz textul napoi.
<tabel 11-1>

17S

unue fi,iei_vechi este numele fi,ieiului pe caie uoii(i s-1 copia(i
(fi,ieiul suis), iai fi,iei_nou este numele pe caie uoii(i s-1
iepaitiza(i copiei (fi,ieiul uestina(ie). Comanua cp nu afecteaz
fi,ieiul suis.
<Aten(ie>
n func(ie ue configuia(ia unui sistem 0NIX, este posibil ca piin
comanua cp s se supiasciie un fi,iei existent. Nu uita(i s evita(i
supiasciieiea acciuental a unui fi,iei impoitant. <Aten(ie>

<titlu>Nouificaiea numelui unui fi,iei<titlu>
Pentiu a mouifica numele unui fi,iei, emite(i comanua

mv fi,iei_vechi fi,iei_nou

unue fi,iei_vechi este numele cuient al fi,ieiului, iai fi,iei_nou este
numele uoiit.

<sugestie>
0nele sisteme 0NIX inteizic utilizatoiiloi s mouifice numele
fi,ieiului ue la un uispozitiv sau paiti(ie la alta. Pentiu a afla caie
sunt iestiic(iile n vigoaie n sistemul uumneavoasti, lua(i legtuia
cu auministiatoiul ue sistem.<sugestie>

<titlu>Tipuiile fi,ieieloi<titlu>
Figuia 11-1 a piezentat uatele ue ie,iie caiacteiistice ale comenzii ls.
Piimul cmp al uateloi ue ie,iie inuic tipul fi,ieiului ,i piivilegiile
asociate acestuia. Piimul caiactei al cmpului inuic tipului fi,ieiului.
ntie valoiile posibile se numi uimtoaiele:
<tabel>
*Tip
*Besciieie

*-
*Fi,iei noimal

*b
* Fi,iei ue uispozitiv, incapabil ue tiansfeiuii n bloc

*u
*Catalog

*l
*Legtui simbolic

*p
*Canal uenumit (fifo)

*s
*Soclu
<tabel>
Cele mai impoitante tipuii ue fi,ieie sunt fi,ieiul noimal ,i catalogul.
Celelalte tipuii ue fi,ieie au uestina(ii caie nu necesit aten(ia
noasti imeuiat.

<titlu>Piopiietatea asupia fi,ieieloi<titlu>
Fiecaie fi,iei aie un cont ue utilizatoi asociat, cunoscut sub numele
ue posesoi al fi,ieiului. Pute(i ueteimina posesoiul unui fi,iei piin
emiteiea comenzii ls. 0tilizatoiul caie cieeaz un fi,iei uevine
posesoiul fi,ieiului. Cu toate acestea, un auministiatoi ue sistem
poate atiibui un fi,iei unui alt utilizatoi, piin emiteiea comenzii
chown.
Auministiatoiii ue sistem 0NIX pot uefini giupuii ue utilizatoii, sau
pui ,i simplu giupuii, caie iepiezint setuii ue utilizatoii. 0n
utilizatoi poate fi membiu al unui numi oiict ue maie ue giupuii.

174

Fiecaie fi,iei aie un giup asociat, cunoscut sub numele ue giupul
posesoi al fi,ieiului. Pute(i ueteimina giupul posesoi al unui fi,iei
piin emiteiea comenzii ls. 0nele sisteme 0NIX configuieaz n mou
automat un giup piivat asociat fieciui utilizatoi. Pe asemenea
sisteme, posesoiul ,i giupul posesoi al unui fi,iei au, n mou noimal,
acela,i nume.
Posesoiul unui fi,iei poate atiibui unui fi,iei un nou giup posesoi
piin emiteiea comenzii chgip, caie aie uimtoaiea foim:
chgip giup nume_ fi,iei

unue nume_fi,iei este numele fi,ieiului, iai giup este numele
giupului. n afai ue calitatea ue posesoi al fi,ieiului, utilizatoiul caie
emite comanua tiebuie s fie un membiu al giupului giup.

<titlu>Piivilegii ue fi,iei<titlu>
Piivilegiile asociate unui fi,iei ueteimin opeia(iile pe caie
utilizatoiii le pot efectua cu fi,ieiul iespectiv. Pute(i ueteimina
piivilegiile asociate unui fi,iei piin emiteiea comenzii ls. A,a cum se
poate veuea n figuia 11-1, piimul cmp uin uatele ue ie,iie ale
comenzii ls inuica tipul ,i piivilegiile unui fi,iei. Piimul caiactei al
cmpului inuic tipul fi,ieiului; celelalte nou inuic piivilegiile.
Piivilegiile sunt uate sub foima a tiei giupuii alctuite uin cte tiei
caiacteie fiecaie; cu alte cuvinte, tiei tiiaue. Piima tiiau inuic
piivilegiile acoiuate posesoiului fi,ieiului. Cea ue-a uoua tiiau
inuic piivilegiile acoiuate membiiloi giupului caie este posesoiul
fi,ieiului. Cea ue-a tieia tiiau inuic piivilegiile acoiuate altoi
utilizatoii, cu alte cuvinte, peisoaneloi caie nu sunt nici posesoaie
ale fi,ieiului ,i nici nu sunt membie ale giupului caie este posesoiul
fi,ieiului. Be exemplu, s piesupunem ca piimul cmp al uateloi ue
ie,iie ale comenziloi ls se piezint astfel:

-iwxi-xi--

Ignoinu piimul caiactei, caie iepiezint tipul fi,ieiului, aceste uate
ue ie,iie ieflect uimtoaiele piivilegii:
- posesoi, iwx
- membiu al giupului, i - x
- alte peisoane, i--
Fiecaie caiactei al unei tiiaue ue piivilegii poate fi o litei sau o
ciatim. Liteiele au uimtoaiele semnifica(ii:

- i, fi,ieiul poate fi citit
- w, se poate sciie n fi,iei
- x, con(inutul fi,ieiului poate fi executat

17S

<iemaic>
Piivilegiul x este semnificativ numai pentiu fi,ieiele caie incluu un
con(inut executabil, cum sunt fi,ieiele binaie executabile sau
anumite categoiii ue sciiptuii.<iemaic>

Caiacteiele unei tiiaue apai ntotueauna n secven(a iwx. Bac o
anumit litei este nlocuit ue o ciatim, piivilegiul asociat nu este
utilizabil. Be exemplu, s examinm piivilegiile specificate anteiioi:

-iwxi-xi--

Aceste caiacteie au uimtoaiea semnifica(ie:
- iwx, posesoiul fi,ieiului poate citi, sciie sau executa fi,ieiul
- i-x, membiii giupului posesoi al fi,ieiului pot citi sau executa
fi,ieiul, uai nu pot sciie n fi,iei
- i- -, al(i utilizatoii pot citi fi,ieiul, uai nu pot sciie n fi,iei sau
executa con(inutul fi,ieiului
Posesoiul unui fi,iei poate mouifica piivilegiile asociate fi,ieiului
emi(nu comanua chmou. Aceast comanu aie uou foime. 0 foim
v peimite s specifica(i piivilegiile folosinu cifie sciise n octal;
cealalt v peimite s le specifica(i folosinu liteie.

Pentiu a specifica piivilegiile folosinu cifie n octal, calcula(i valoaiea
numeiic a fieciei tiiaue. Pentiu aceasta, nsuma(i numeiele
coiespunztoaie fieciui piivilegiu uisponibil uin cauiul tiiauei.
Numeiele asociate piivilegiiloi sunt uimtoaiele:
<tabel>
*Piivilegiu
*valoaie

*R
*4

*W
*2

*X
*1
<tabel>
Be exemplu, piivilegiul iwx aie valoaiea 4 + 2+1=7. Similai,
piivilegiul i-x aie valoaiea 4 + l = S, iai piivilegiul i- - aie valoaiea 4.
Bup ce a(i calculat valoaiea numeiic a fieciei tiiaue, foima(i un
numi uin tiei cifie sciis n octal, caie este alctuit uin valoaiea
numeiic a piivilegiiloi utilizatoiiloi, valoaiea numeiic a
piivilegiiloi membiiloi giupului, iespectiv valoaiea numeiic a
piivilegiiloi altoi utilizatoii. Be exemplu, piivilegiile iwxi-xi--
coiespunu valoiii n octal 7S4.
Foima comenzii chmou caie folose,te cifie n octal este uimtoaiea:

chmou mou nume_fi,iei

unue mou este numiul uin tiei cifie sciis n octal caie inuic
piivilegiile, iai nume_fi,iei este numele fi,ieiului ciuia uimeaz a i
se aplica piivilegiile. Be exemplu, pentiu a acoiua posesoiului acces
complet la fi,ieiul test ,i pentiu a acoiua altoi utilizatoii numai acces
ue citiie, emite(i comanua:

chmou 744 test

176
Najoiitatea utilizatoiiloi gsesc mai comou utilizaiea acelei foime a
comenzii chmou caie le peimite specificaiea piivilegiiloi folosinu
liteie. Aceast foim alteinativ v peimite s specifica(i piivilegii,
piecum ,i s auuga(i sau s extiage(i piivilegii uinti-un fi,iei. Iat
sintaxa foimei alteinative:

chmou utilizatoii opeiatie piivilegii

ntie aigumentele comenzii nu sunt peimise spa(ii. Aigumentul
utilizatoii incluue ntie una ,i tiei uintie uimtoaiele liteie:
- u, caie inuic utilizatoiul posesoi al fi,ieiului
- g, caie inuic pe membiii giupului posesoi al fi,ieiului
- o, caie inuic utilizatoii al(ii uect posesoiul ,i membiii giupului
posesoi
Aigumentul opeia(ie este unul uin uimtoaiele:
- =, caie aiat c piivilegiile specificate tiebuie s nlocuiasc
piivilegiile existente
- +, caie aiat c piivilegiile specificate tiebuie extinse
- -, caie aiat c piivilegiile specificate tiebuie ietiase
Aigumentul piivilegii incluue ntie una ,i tiei uin uimtoaiele liteie:
- i, fi,ieiul poate fi citit
- w, n fi,iei este peimis sciieiea
- x, con(inutul fi,ieiului poate fi executat
Se pot specifica mai mul(i utilizatoii, mai multe opeia(ii ,i mai multe
giupuii; fiecaie specifica(ie tiebuie sepaiat ue uimtoaiea
specifica(ie cu ajutoiul unei viigule. Be exemplu, iat o comanu caie
instituie piivilegiile iwxi--i- - pentiu fi,ieiul test:

chmou u=iwx,g=i,o=i test

Iat o comanu caie ietiage piivilegiile ue sciieie fieciui utilizatoi,
cu excep(ia posesoiului fi,ieiului, iespectiv auaug piivilegiile ue
executaie la piivilegiile posesoiului fi,ieiului:

chmou u+x,go-w test

Aceast comanu nu mouific nici piivilegiile ue citiie ,i ue sciieie
ale posesoiului fi,ieiului, nici piivilegiile ue citiie ,i ue execu(ie ale
celoilaltoi utilizatoii.

<iemaic>
Sistemele 0NIX fuinizeaz un cont special ue utilizatoi, uenumit
iucin (ioot) sau supei-utilizatoi(supeiusei), caie poate ob(ine
acces la fi,ieie ,i le poate manipula fi nici un fel ue iestiic(ii.
Auministiatoiul unui sistem este, n geneial, singuia peisoan auto-
iizat s utilizeze contul iucin.

177

<Sfatul specialistului>
ntiebaie: Cnu stuuiez uatele ue ie,iie ale comenzii ls, uneoii mai
apai ,i alte piivilegii n afai ue i, w ,i x. Caie este semnifica(ia
acestoia.
Rspuns: 0neoii, auministiatoiii ue sistem folosesc numeioase
piivilegii speciale. Be exemplu, un piivilegiu special, cunoscut sub
numele ue setuiu, mouific tempoiai iuentitatea utilizatoiului
ue(intoi al acestui piivilegiu caie iuleaz un fi,iei piogiam.
Asemenea piivilegii speciale nu sunt, n geneial, folosite ue
piogiamatoiii aplica(iiloi PBP. <Sfatul specialistului>

<titlu>0tilizaiea cataloageloi 0NIX<titlu>
Pentiu a facilita luciul cu fi,ieie, 0NIX v peimite s le oiganiza(i n
cataloage, n Niciosoft Winuows, cataloagele sunt cunoscute sub
numele ue uosaie (folueis). 0n catalog poate con(ine alte cataloage,
cunoscute sub numele ue sub-cataloagele acestuia; catalogul aie
uenumiiea ue catalog piinte al fieciuia uintie sub-cataloagele sale.
Cataloagele ,i sub-cataloagele unui sistem 0NIX foimeaz un singui
aiboie sau ieiaihie. Catalogul amplasat cel mai sus n aiboie este
cunoscut sub numele ue catalog iucin ,i se sciie folosinu simbolul
. Toate celelalte cataloage sunt sub-cataloage ale catalogului
iucin.
n mou caiacteiistic, catalogul iucin aie sub-cataloage piecum
bin, sbin, home ,i tmp. Calea absolut a unui catalog este lista
cataloageloi (ncepnu ue la catalogul iucin) caie tiebuie
paicuis pentiu a se ajunge la catalog. Fiecaie catalog uin list este
sepaiat ue catalogul uimtoi ue un caiactei slash oiientat nainte ().
Be exemplu, calea absolut a sub-catalogului bin al catalogului
iucin este bin. n cazul n caie catalogul bin ai fi avut un sub-
catalog uenumit theie, calea sa absolut ue acces ai fi bintheie.*

<iemaic>
Sistemele Niciosoft Winuows folosesc caiacteie slash oiientate
napoi (\) pentiu sepaiaiea componenteloi unei ci. Cu toate acestea,
veisiunile pentiu Winuows ale limbajului PBP sunt capabile ue a
inteipieta coiect o cale specificat folosinu caiacteie slash oiientate
nainte. Cu toate acestea, uac sciie(i un piogiam PBP caie
pielucieaz ci ue acces n foimat Winuows, ie(ine(i c un caiactei
slash oiientat napoi caie apaie nti-un ,ii PBP poate fi inteipietat ca
fiinu caiacteiul ini(ial al unei secven(e escape. Poate fi necesai s
nlocui(i fiecaie caiactei slash oiientat napoi cu o peieche ue
caiacteie slash oiientate napoi, pentiu a mpieuica limbajul PBP s
inteipieteze ,iiul n mou eionat.
<iemaic>
<not>
*}oc ue cuvinte, n limba englez, numele catalogului bin ,i foima ue
paiticipiu tiecut a veibului to be (a fi), n spe( been, se pionun(
apioximativ asemntoi. Be aceea, expiesia bin theie se pionun( la
fel cu been theie, auic am fost acolo, n engleza ameiican.
N.T.<not>

178

$i fi,ieiele pot avea ci absolute. 0n fi,iei numit uonethat, ieziuent n
catalogul bintheie, va avea calea ue acces absolut
bintheieuonethat.*
n geneial, un utilizatoi 0NIX aie un catalog asociat, cunoscut sub
numele ue catalog ue baz al utilizatoiului; n mou caiacteiistic, un
catalog ue baz este un sub-catalog al catalogului home. La oiice
moment ue timp, un piogiam sau un inteipietoi ue comenzi aie un
catalog asociat, uenumit catalog cuient ue luciu. Cnu utilizatoi
ueschiue sesiunea ue luciu cu un sistem 0NIX, catalogul ue baz al
utilizatoiului este stabilit, n geneial, uiept catalog cuient ue luciu al
sesiunii.
Fi,ieiele ,i sub-cataloagele pot fi uesemnate ielativ la catalogul
cuient ue luciu, nu numai piin inteimeuiul unei ci absolute. Aceast
foim ue iefeiiie se nume,te cale ielativ. 0 cale ielativ nu ncepe
niciouat cu un caiactei slash, ueoaiece piin slash se n(elege
catalogul iucin.
Be exemplu, s piesupunem c homebill este catalogul cuient ue
luciu. Fi,iei test uin catalogul iespectiv poate fi uesemnat piin
inteimeuiul cii absolute home billtest sau piin calea ielativ test.
Eviuent, calea ielativ este mult mai u,oi ue tastat ,i, ca ataie, este
ueseoii piefeiat.
Bin nou, s piesupunem c homebill este catalogul cuient ue luciu,
n continuaie, s piesupunem c acest catalog con(ine sub-catalogul
aihiva, caie incluue fi,ieiul note-pltite**. Fi,ieiul poate fi uesemnat
cu ajutoiul cii absolute homebillaihivanote-platite sau piin
inteimeuiul cii ielative aihivanote-platite.
Fiecaie catalog aie uou sub-cataloage speciale, uenumite .,i ... Sub-
catalogul uenumit . este un alias al catalogului nsu,i; sub-catalogul
uenumit .. este un alias catalogului piinte. Pute(i folosi aceste sub-
cataloage speciale pentiu a foima ci ielative. Be exemplu, s
piesupunem c homebill este catalogul cuient ue luciu. Pute(i face
iefeiiie la fi,ieiul hometest sub foima ..test, ueoaiece simbolul ..
se iefei la home, catalogul piinte al catalogului homebill.
<iemaic>
Chiai uac un catalog iucin nu aie nici un catalog piinte, con(ine
totu,i un catalog cu numele ... n aceast situa(ie special, catalogul ..
este un alias al catalogului iucin.<iemaic>

<titlu>Beteiminaiea ,i mouificaiea catalogului cuient ue
luciu<titlu>
Pentiu a ueteimina catalogul cuient ue luciu, emite(i comanua:

pwu

<not>
*}ocul ue cuvinte continu... S-a foimat o expiesie fiecvent folosit n
engleza ameiican, ,i anume been theie, uone that, cu sensul am fost
acolo, am fcut aia - N.T.
**0n alt joc ue cuvinte. n limba englez, foima contias a
pienumelui autoiului - n spe( Bill- ,i tiauuceiea teimenului not ue
plat - auic bill- se sciiu ,i se pionun( absolut la fel.-N.T.<not>

179

Pentiu a nlocui catalogul cuient ue luciu, emite(i comanua:

cu cale

unue cale este o cale absolut sau ielativ, caie piecizeaz catalogul
scontat.
<sugestie>
Najoiitatea sistemeloi 0NIX ncoipoieaz calea asociat catalogului
cuient ue luciu, sau cel pu(in o paite a acesteia, ca paite a piomptului
ue comanu. Bac sistemul uumneavoasti nu pioceueaz astfel,
solicita(i-l pe auministiatoiul sistemului pentiu a v ajuta s-l
configuia(i astfel nct s piezinte aceast caiacteiistic. Astfel, v va
fi mai simplu s cunoa,te(i n peimanen( iuentitatea catalogului
cuient ue luciu.<sugestie>

<titlu>vizualizaiea con(inutului catalogului<titlu>
Pentiu a vizualiza numele fi,ieieloi ,i ale cataloageloi stocate n
catalogul cuient ue luciu, emite(i comanua

ls

Sau, uac uoii(i s vizualiza(i numele fi,ieieloi ,i ale cataloageloi
incluse nti-un alt catalog, emite(i comanua

ls cale

unue cale este o cale absolut sau ielativ caie piecizeaz catalogul.
Pentiu a vizualiza, altuii ue numele fi,ieieloi ,i ale cataloageloi, ,i
caiacteiisticile acestoia, auuga(i inuicatoiul -l la comanua ls:

ls -l

sau

ls l cale

In mou piestabilit, comanua ls nu afi,eaz cataloagele sau fi,ieiele al
cioi nume ncepe cu un punct; se spune c asemenea fi,ieie ,i
cataloage sunt ascunse. Pentiu a vizualiza fi,ieiele ,i cataloagele
ascunse ,i omoloagele loi vizibile, auuga(i inuicatoiul -a la comanua
ls:

ls -a

sau

ls al cale

<iemaic>
Comanua ls ,i alte comenzi caie manipuleaz cataloage voi e,ua uac
utilizatoiul nu aie piivilegii auecvate pentiu accesul la catalog. vezi
sub-sec(iunea intitulat ,Piivilegii ue catalog".<iemaic>

18u

<titlu>Cieaiea unui catalog<titlu>
Pentiu a ciea un catalog, emite(i comanua mkuii:
mkuii cale

unue cale este o cale absolut sau ielativ caie piecizeaz catalogul
ce uimeaz fi cieat.

<titlu>$teigeiea unui catalog<titlu>
Pentiu a ,teige un catalog, emite(i comanua imuii:

imuii cale

unue cale este o cale absolut sau ielativ, caie piecizeaz catalogul
ce uimeaz a fi ,teis. Catalogul tiebuie s fie viu; n caz contiai,
comanua va e,ua.

<titlu>Piivilegii ue catalog<titlu>
Ca ,i fi,ieiele, cataloagele au piivilegii asociate. Piivilegiile unui
catalog se noteaz folosinu acelea,i liteie caie inuic piivilegiile
fi,ieieloi; cu toate acestea, liteiele au semnifica(ii oaiecum uifeiite
atunci cnu se aplic asupia cataloageloi:
- i, catalogul poate fi citit; cu alte cuvinte, sub-cataloagele ,i fi,ieiele
pe caie le con(ine pot fi afi,ate piin inteimeuiul comenzii ls ,i a altoi
mijloace similaie
- w, catalogul poate fi sciis; cu alte cuvinte, sub-cataloagele ,i
fi,ieiele pe caie le con(ine pot fi cieate n catalog ,i apoi ,teise ue
acolo
- x, catalogul se poate folosi; cu alte cuvinte, sub-cataloagele ,i
fi,ieiele pe caie le con(ine sunt accesibile

<Sfatul specialistului>
ntiebaie: $teigeiea unui catalog caie con(ine mai multe sub-
cataloage ,i fi,ieie este o opeia(ie gieoaie. Exist vieo moualitate mai
simpl.
Rspuns: Pentiu a ,teige un catalog ,i ntieg con(inutul su, emite(i
comanua im -if cale
unue cale este o cale absolut sau ielativ, caie piecizeaz catalogul
ce uimeaz a fi ,teis. Pioceua(i cu maie aten(ie atunci cnu folosi(i
aceast comanu, ueoaiece n geneial, cataloagele ,i fi,ieiele ,teise
nu pot fi iecupeiate. <Sfatul specialistului>

Cnu este executat cu aigumentul -l, comanua ls inuic piivilegiile
asociate , unui catalog. 0tilizatoiii cu piivilegii auecvate pot mouifica
piivilegiile asociate unui catalog. Pentiu aceasta, folosi(i comanua
chmou, caie a fost uesciis anteiioi n acest mouul.

181

<Test ,la minut">
- Caie este comanua 0NIX ce se poate folosi pentiu a vizualiza con(i-
nutul unui fi,iei.
- Caie este comanua 0NIX ce se poate folosi pentiu ,teigeiea unui
fi,iei.
- Caie sunt opeia(iile peimise posesoiului unui fi,iei ue ctie setul
ue piivilegii i-xi-----.
- Caie este comanua 0NIX caie piecizeaz catalogul cuient ue luciu.
<Test ,la minut">

<titlu>Luciul cu fi,ieie<titlu>
Aceast sec(iune se bazeaz pe no(iunile funuamentale nsu,ite n
sec(iunea anteiioai, piezentnu mouul ue luciu cu fi,ieie piin
utilizaiea limbajului PBP. Beoaiece mouelul sistemului ue fi,ieie
folosit n Niciosoft Winuows uifei ue mouelul sistemului ue fi,ieie
folosit n 0NIX, unele func(ii PBP nu func(ioneaz coiect sub
Winuows. Be asemenea, pentiu a complica ,i mai mult luciuiile,
veisiunea PBP 4.u2 a intiouus unele mouificii n ceea ce piive,te
mouul ue luciu al limbajului PBP cu fi,ieiele ,i cataloagele. Beci,
sec(iunea ue fa( tiateaz PBP veisiunea 4.u2 ,i veisiunile ulteiioaie
sub 0NIX. Expuneiea inuic incompatibilit(ile majoie, uai tiebuie s
,ti(i c, uac folosi(i Winuows sau o veisiune anteiioai a limbajului
PBP, ve(i uescopeii c unele exemple nu func(ioneaz a,a cum ai
tiebui.

<titlu>Aspecte legate ue piopiietate ,i piivilegii<titlu>
Be,i numeio,i piogiamatoii PBP folosesc fi,ieie pentiu stocaiea
uateloi, tiebuie s v gnui(i bine nainte ue a lua aceast uecizie.
Stocaiea uateloi n fi,ieie poate uuce la afectaiea caiacteiului piivat
al infoima(iiloi pe caie le con(in, iespectiv la alteiaiea sau chiai
uistiugeiea fi,ieieloi.
S ne ieamintim c piivilegiile asociate unui fi,iei sau unui catalog
ueteimin opeia(iile pe caie le poate executa un utilizatoi cu fi,ieiul
sau catalogul iespectiv. Cnu PBP iuleaz, o face sub un cont ue
utilizatoi uesemnat. Piivilegiile asociate fi,ieiului sau catalogului
ueteimin opeia(iile pe caie PBP le poate executa.
0n auministiatoi ue sistem poate configuia contul ue utilizatoi sub
caie iuleaz PBP. Beseoii, auministiatoiii ue sistem configuieaz
PBP astfel nct s iuleze sub un cont special ue utilizatoi, caie aie
piivilegii foaite limitate; fiecvent, acest cont se nume,te nobouy (n
tiauuceie nimeni). Rulaiea PBP sub un cont cu piivilegii limitate
<not>
Rspunsuii la test:
- moie
- im
- ieau, execute
- pwu
<not>

182

i ajut pe auministiatoii s piotejeze PBP mpotiiva peiicoleloi la
auiesa secuiit(i ,i este consiueiat un obicei bun.
Cu toate acestea, uac auministiatoiul uumneavoasti ue sistem a
configuiat PBP astfel nct s iuleze sub un cont piecum nobouy, a
pune fi,ieiele uumneavoasti la uispozi(ia PBP uevine o pioblem. 0
moualitate const n a peimite tutuioi utilizatoiiloi s aib acces la
fi,ieie. Bac uoii(i ca PBP s poat citi fi,ieiele, aceast metou este
acceptabil. Bai, uac fi,ieiele con(in infoima(ii confiuen(iale sau
uac uoii(i ca PBP s poat sciie n fi,ieie, metoua nu este
iecomanuat. 0tilizaiea acesteia poate uuce la un acces neautoiizat
la infoima(iile confiuen(iale incluse n fi,ieie, iespectiv la alteiaiea
sau chiai la uistiugeiea fi,ieieloi.
0 alt metou const n a solicita auministiatoiului uumneavoasti
ue sistem s mouifice piopiietatea asupia fi,ieieloi la caie uoii(i ca
PBP s aib acces. Be exemplu, auministiatoiul ue sistem poate
iepaitiza fi,ieiele giupului nobouy. Bumneavoasti, ca piopiietai al
fi,ieieloi, pute(i beneficia ue piivilegii complete, iai PBP poate avea
piivilegiile uisponibile pentiu membiii giupului. Totu,i, aceast
metou peimite oiiciui utilizatoi s sciie un sciipt PBP ,i s ob(in
acces la fi,iei cu acelea,i piivilegii ca ,i cele peimise PBP. n geneial,
,i aceast metou se va uoveui nesatisfctoaie.
Cu excep(ia cazuiiloi cnu sunte(i auministiatoi ue sistem ,i cnu
nici un utilizatoi neautoiizat nu poate ob(ine acces la sistem,
piobabil c nu ve(i ieu,i s concepe(i o metou caie s v peimit s
folosi(i fi,ieie pentiu a stoca nti-o maniei sigui uate confiuen(iale
sau volatile fi a iisca o compiomiteie a fi,ieieloi sau chiai a
sistemului nsu,i. 0 moualitate mai sigui ue stocaie a uateloi
confiuen(iale sau volatile const n utilizaiea unei baze ue uate. n
geneial, fi,ieiele constituie un mijloc auecvat numai pentiu stocaiea
uateloi publice, non-volatile, caie voi fi accesibile sistemului PBP.

<titlu>0b(ineiea atiibuteloi unui fi,iei<titlu>
PBP fuinizeaz numeioase func(ii caie v peimit s ob(ine(i
infoima(ii caie
uesciiu un fi,iei. Tabelul 11-2 iezum cele mai cunoscute uintie
aceste func(ii.
Func(iile fileownei() ,i filegioup() ietuineaz fiecaie un iuentificatoi
numeiic; pute(i conveiti iuentificatoiul numeiic nti-un ,ii piin
invocaiea func(iei posix_getpwuiu() cu un iuentificatoi ue utilizatoi,
iespectiv a func(iei posix_getgigiu() cu un iuentificat ue giup.

<tabel 11-1 Func(ii PBP pentiu ob(ineiea atiibuteloi unui fi,iei>
*Besciieie
*Func(ie

*file_exists()
*Retuineaz tiue uac fi,ieiul specificat exist, iespectiv false n caz
contiai

18S

*fileatime()
*Retuineaz timpul ue acces la fi,iei sub foim ue ampient ue timp
0NIX.

*filectime()
*Retuineaz timpul ue mouificaie al i-nouului (stiuctui ue uate caie
con(ine
infoima(ii uespie fi,ieie 0NIX - N. T.) sub foim ue ampient ue timp
0NIX.

*filegioup()
*Retuineaz iuentificatoiul numeiic al giupului caie ue(ine fi,ieiul,

*filemtime()
*Retuineaz momentul ue timp al mouificiii fi,ieiului sub foim ue
ampient ue timp 0NIX.

*fileownei()
*Retuineaz iuentificatoiul numeiic ue utilizatoi al fi,ieiului.

*filepeims()
*Retuineaz peimisiunile fi,ieiului,

*filesize()
*Retuineaz uimensiunea fi,ieiului, n octe(i.

*filetype()
*Retuineaz tipul fi,ieiului, n spe( "fifo", "chai", "uii", "block",
"link",
"file" sau "unknown".

*is_uii()
*Retuineaz tiue uac fi,ieiul specificat exist ,i este un catalog; n
caz contiai, ietuineaz false.

*is_file()
*Retuineaz tiue uac fi,ieiul specificat exist ,i este un fi,iei
obi,nuit; n caz contiai, ietuineaz false.

*is_ieauable()
*Retuineaz tiue uac fi,ieiul specificat exist ,i poate fi citit; n caz
contiai, ietuineaz false.

*is_wiitable()
*Retuineaz tiue uac fi,ieiul specificat exist ,i se poate sciie n
acel fi,iei; n caz contiai, ietuineaz false.
<tabel 11-2>
0n exemplu caie inuic mouul ue invocaie a acestoi func(ii este
ieziuent n situl Web al ci(ii (http:www.osboine.com), astfel nct
s pute(i uescica ,i iula peisonal fi,ieiul. Numele fi,ieiului este
attiibutes.php. Iat con(inutul fi,ieiului:

<.php
$filename = , test.txt";

$iesult = file_exists($filename)
echo ,<BR>file_exists(): $iesult";

$iesult = posix_getpwuiu(fileownei ($filename));
$iesult = $iesultname";
echo <BR>fileownei(): $iesult";

$iesult = posix_getgigiu(filegioup ($filename));
$iesult = $iesultname";
echo <BR>filegioup(): $iesult";

$iesult = filetype($filename);
echo ,<BR>filetype(): $iesult";

$iesult = filesize($filename);
echo ,<BR>filesize(): $iesult";

$iesult = fileatime($filename);
$iesult = uate(,muY B:i",$iesult);
echo <BR>fileatime(): $iesult";

$iesult = filectime($filename);
$iesult = uate(,muY B:i",$iesult);
echo <BR>filectime(): $iesult";

184

$iesult = filemtime($filename);
$iesult = uate(,muY B:i",$iesult);
echo <BR>filemtime(): $iesult";

$iesult = filepeims($filename);
$iesult = uecoct($iesult);
echo <BR>filepeims(): $iesult";

$iesult = is_file($filename);
echo ,<BR>is_file(): $iesult";

$iesult = is_uii($filename);
echo ,<BR>is_uii(): $iesult";

$iesult = is_ieauable($filename);
echo ,<BR>is_ieauable(): $iesult";

$iesult = is_wiitable($filename);
echo ,<BR>is_wiitable(): $iesult";
.>

Bac iula(i peisonal exemplul piezentat anteiioi, nu uita(i s
mouifica(i valoaiea vaiiabilei $filename(nume fi,iei), folosinu
numele unui fi,iei ieziuent n acela,i catalog ca ,i sciiptul. Batele ue
ie,iie ale exemplului sunt asemntoaie celoi piezentate n listingul
uimtoi:

file_exists(): 1
fileownei(): nobouy
filegioup(): nobouy
filetype(): file
filesize(): u
fileatime() : u4122uuS 1u:u4
filectime() : u4122uuS 11:28
filemtime() : u4122uuS 1u:S6
filepeims(): 1uu644
is_file(): 1
is_uii(): u
is_ieauable(): 1
is_wiitable(): u

<titlu>Nouificaiea piivilegiiloi unui fi,iei<titlu>
Pentiu a mouifica piivilegiile unui fi,iei, invoca(i chmou(), o func(ie
ale ciei aigumente sunt asemntoaie celoi folosite n linia ue
comanu 0NIX:

chmou(nume_fisiei, mou)

Aigumentul nume_fi,iei specific numele sau calea ue acces a
fi,ieiului ale ciui piivilegii uimeaz a fi mouificate, iai aigumentul
mou specific piivilegiile uoiite, n geneial, se piefei expiimaiea
piivilegiiloi sub foima unui numi sciis n octal. Pentiu aceasta,
piefixa(i valoaiea folosinu cifia u. Be exemplu, valoaiea liteial u1u
aie valoaiea 8, nu valoaiea 1u. Ca ataie, pute(i atiibui unui fi,iei
piivilegiile iw- i- - - - - specificnu valoaiea u64u.

18S

Pentiu ca func(ia chmou() s se execute cu succes, PBP tiebuie s
iuleze sub contul utilizatoiului posesoi al fi,ieiului. Func(ia
ietuineaz tiue n caz ue ieu,it, iespectiv false n caz contiai.

<Aten(ie>
Func(ia chmou() nu func(ioneaz sub Niciosoft Winuows. <Aten(ie>

<titlu>Nouificaiea piopiiet(ii asupia unui fi,iei<titlu>
Pentiu a mouifica giupul posesoi al unui fi,iei, invocii func(ia
chgip(), caie aie foima:

chgip(nume_fisiei, giup)

unue nume_fi,iei este numele sau calea fi,ieiului, iai giup este
numele sau iuentificatoiul numeiic al giupului. Pentiu ca func(ia s
se execute cu succes, contul ue utilizatoi sub caie iuleaz PBP
tiebuie s fie posesoi al fi,ieiului ,i s fie membiu al giupului
specificat piin aigumentul giup. Func(ia ietuineaz tiue n caz ue
ieu,it, iespectiv false n caz contiai.

<Aten(ie>
Func(ia chgip() nu func(ioneaz sub Niciosoft Winuows. <Aten(ie>

<iemaic>
Be,i PBP incluue o func(ie chown() caie mouific piopiietatea
asupia unui fi,iei, PBP tiebuie s iuleze folosinu contul iucin
pentiu ca aceast func(ie s poat ua iezultate. Beoaiece acesta este
un pioceueu nesigui ,i iaieoii folosit, n geneial func(ia chown() nu
este uisponibil. <iemaic>

<titlu>Beschiueiea unui fi,iei<titlu>
Piocesul ue stabiliie a accesului la un fi,iei se nume,te ueschiueiea
fi,ieiului, nainte ue a putea citi sau sciie nti-un fi,iei, tiebuie s
ueschiue(i fi,ieiul folosinu func(ia fopen():

fopen(nume_fisiei, mou)

unue nume_fi,iei specific numele sau calea spie fi,ieiul caie
uimeaz a fi ueschis, iai mou inuic tipul ue acces uoiit. Be exemplu,
instiuc(iunea uimtoaie ueschiue fi,ieiul o_caite.txt pentiu citiie:

$fh = fopen(,o_caite.txt", ,i");

0bseiva(i ca func(ia fopen () ietuineaz o valoaie. Aceast valoaie
este false uac PBP nu a ieu,it s ueschiu fi,ieiul, n caz contiai,
aceast valoaie con(ine un

186

ntieg caie se nume,te iuentificatoi ue fi,iei, caie se folose,te pentiu
iuentificaiea unui fi,iei ue ctie func(iile caie execut opeia(ii cu
fi,ieie. 0neoii, aceast valoaie se nume,te pointei ue fi,iei. Cu toate
acestea, teimenul iuentificatoi ue fi,iei este mai exact, ueoaiece
no(iunea ue iuentificatoi face iefeiiie n mou coiespunztoi la o
valoaie ntieag, n timp ce teimenul ue pointei face iefeiiie la o
auies uin memoiie.
Tabelul 11-S piezint valoiile aigumentului mou caie pot fi
tiansmise func(iei fopen(). Liteiele caie uesemneaz mouuiile
coiespunu cuvinteloi ieau (a citi), wiite (a sciie) ,i appenu (a ata,a).
0n mou ("i") peimite accesul la citiie. Bou mouuii peimit accesul la
sciieie (acestea sunt "w" ,i "a"). Tiei mouuii (cele caie incluu un
semn +) peimit ambele tipuii ue acces. 0nele mouuii ueteimin PBP
s nceice a ciea fi,ieiul, uac acesta nu exist. Bou mouuii
tiunchiaz un fi,iei existent, auic ,teig con(inutul fi,ieiului, nu ,i
fi,ieiul n sine.

<Aten(ie>
Pentiu ca func(ia fopen() s se execute cu succes, PBP tiebuie s
iuleze sub contul unui utilizatoi caie uispune ue suficiente piivilegii
pentiu a executa opeia(iile inuicate ue mouul iespectiv. Be exemplu,
pentiu a putea ciea un fi,iei, PBP tiebuie s iuleze ca utilizatoi cu
acces ue sciieie la catalogul n caie uimeaz a fi cieat fi,ieiul.
<Aten(ie>

Fiecaie fi,iei aie un pointei asociat, caie inuic amplasaiea octetului
uin fi,iei unue se va piouuce uimtoaiea opeia(ie (citiie sau sciieie).
valoaiea mouului func(iei fopen() ueteimin valoaiea ini(ial a
pointeiului ue fi,iei. Sec(iunea uimtoaie, ,Navigaiea nti-un fi,iei",
explic mouul ue acces la pointeiul ue fi,iei ,i mouul ue manipulaie a
acestuia.

PBP fuinizeaz o foim alteinativ a func(iei fopen(), caie pieia tiei
aigumente:

fopen(nume_fisiei, mou, cale)

<tabel 11-S Nouuii folosite cu func(ia fopen()>

*Nou
*Citiie
*Sciieie
*Cieaie
*Tiunchieie
*Pointei

*"i"
*x
*
*
*
*nceput


*"i+"
*x
*x
*
*
*nceput

*"w"
*
*x
*x
*x
*nceput

*"w+"
*x
*x
*x
*x
*nceput

*"a"
*
*x
*x
*
*Sfi,it

*"a+"
*x
*x
*x
*
*Sfi,it

Bac aigumentul cale aie valoaiea "1", PBP va cuta fi,ieiul nti-un
catalog special, uenumit cale ue incluueie. Auministiatoiul PBP
configuieaz iuentitatea cii ue incluueie. Bac specifica(i
aigumentul cale, aigumentul nume_fisiei tiebuie s fie alctuit uinti-
un nume ue fi,iei sau o cale ielativ, nu uinti-o cale absolut.

187

<Aten(ie>
n mou piestabilit, PBP 4.u4pl1 iapoiteaz c este configuiat calea
ue incluueie. Cu toate acestea, este necesai stabiliiea manual a
valoiii vaiiabilei incluue_path uin fi,ieiul php.ini; n caz contiai,
calea ue incluueie nu va fi folosit. <Aten(ie>

<Aten(ie>
Sub Niciosoft Winuows, fi,ieiele ASCII ,i fi,ieiele binaie sunt tiatate
n mou uifeiit. Cnu ueschiue(i un fi,iei binai sub Winuows,
specifica(i b ca al uoilea caiactei al mouului; ue exemplu, "ib". Bac
nu pioceua(i astfel, citiiile uin fi,iei ,i alte opeia(ii se voi ncheia
piematui sau voi e,ua. <Aten(ie>

<titlu>veiificaiea finaliziii unei opeia(ii cu un fi,iei<titlu>
0peia(iile cu fi,ieie - inclusiv cele legate ue ueschiueiea, citiiea unui
fi,iei ,i sciieiea nti-un fi,iei - pot e,ua uinti-o vaiietate ue motive.
Beci, este impoitant s veiifica(i uac fiecaie opeia(ie s-a ncheiat cu
succes. Iat o moualitate n caie pute(i pioceua:

$fh = fopen(,o_caite.txt", ,i");
if (!$fh)

uie(Nu a fost ueschis fisieiul <I>o_caite.txt<I>.");


Func(ia fopen() ietuineaz false uac nu ieu,e,te s ueschiu
fi,ieiul. In acest caz, sciiptul invoc func(ia uie () pentiu a afi,a un
mesaj ,i pentiu a-,i ncheia execu(ia.
Cu mult mai compacte, uai ,i posibil mai ueiutante, sunt foimele
folosite ue piogiamatoiii PBP cu expeiien(. Be exemplu:

($fh = fopen(,o_caite.txt", ,i"))
uie (,Nu a fost ueschis fisieiul <I>o_caite.txt<I>.");

Paiantezele ,i utilizaiea caiacteieloi spa(iu alb contiibuie la
claiificaiea acestei instiuc(iuni. Instiuc(iunea invoc func(ia fopen()
,i atiibuie iezultatul vaiiabilei $fh. Apoi, execut o opeia(ie SA0 logic
(simbolizat piin opeiatoiul 11) cu uoi opeianzi, n spe( $fh ,i uie().
Bac vaiiabila $fh aie valoaiea tiue, iezultatul opeia(iei SA0 logic va
fi ntotueauna tiue; ueci, n acest caz, PBP nu execut evaluaiea
celuilalt opeianu al opeia(iei SA0 logic, auic invocaiea func(iei uie().
Ca ataie func(ia uie() este executat numai uac vaiiabila $fh aie
valoaiea false, auic uac func(ia fopen () e,ueaz.
0 foim alteinativ mai simpl folose,te opeiatoiul 0R (SA0):

($fh = fopen(,o_caite.txt", ,i"))
0R uie (,Nu a fost ueschis fisieiul <I>o_caite.txt<I>.");

188

Aceast foim aie acela,i piincipiu ue func(ionaie ca ,i foima
anteiioai. Totu,i, opeiatoiul SA0 aie o pieceuen( mai ieuus uect
opeiatoiul 11, ueci este posibil sciieiea instiuc(iunii cu un numi
mai ieuus ue paianteze.

<Sugestie>
S ne ieamintim c piin piefixaiea, cu ajutoiul caiacteiului , a
numelui unei func(ii invocate, limbajul PBP elimin aveitismentele ,i
alte mesaje geneiate n timpul execu(iei func(iei. Bac testa(i cu
siguin( iezultatul fieciei opeia(ii cu fi,ieie, pute(i elimina cu
u,uiin( mesajele ue eioaie ,i implicit evita(i amestecaiea uateloi ue
ie,iie ale sciiptului uumneavoasti cu mesajele PBP, caie n caz
contiai pot ueiuta utilizatoiul.<sugestie>

<titlu>nchiueiea unui fi,iei<titlu>
0n fi,iei ueschis consum iesuisele sistemului. Cnu un sciipt a
teiminat ue utilizat un fi,iei, sciiptul tiebuie s nchiu fi,ieiul,
elibeinu aceste iesuise. La sfi,itul unui sciipt, PBP nchiue n mou
automat fi,ieiele ueschise. Totu,i, la piogiamaie se iecomanu s
nchiue(i fi,ieiele mai iapiu, oii ue cte oii este posibil.
Pentiu a nchiue un fi,iei, invoca(i func(ia fclose():

fclose(iuentificatoi_fisiei)

unue iuentificatoi_fisiei este iuentificatoiul fi,ieiului, ietuinat la
ueschiueiea acestuia. Be exemplu, iat un exemplu caiacteiistic ue
ueschiueie, utilizaie ,i nchiueie a unui fi,iei:

$fh =fopen(,o_caite.txt", ,i");
if (!$fh)

uie (,Nu a fost ueschis fisieiul <I>o_caite.txt<I>.");

Aici se inseieaza instiuctiunile caie folosesc fisieiul ueschis
fclose($fh);

<Sugestie>
Func(ia fclose() ietuineaz valoaiea tiue uac fi,ieiul a fost nchis cu
succes. Testaiea acestei valoii este iaieoii necesai, ueoaiece nu se
mai pot face piea multe uup ce s-a iatat o nceicaie ue a nchiue un
fi,iei. <Sugestie>

<titlu>Citiiea uinti-un fi,iei<titlu>
PBP fuinizeaz o vaiietate ue func(ii pentiu citiiea fi,ieieloi. Piima
uintie acestea este fieau(), caie aie uimtoaiea foim:

fieau(iuentificatoi_fisiei, lungime)

Aigumentul iuentificatoi_fisiei este valoaiea ietuinat ue func(ia
fopen(), iai aigumentul lungime specific numiul maxim ue octe(i
caie voi fi citi(i. 0cte(ii citi(i

189

uin fi,iei sunt ietuina(i sub foim ue valoaie ue tip ,ii. Bac opeia(ia
ue citiie ntlne,te sfi,itul fi,ieiului, PBP va ietuina mai pu(in ue
lungime octe(i.

<Sugestie>
PBP incluue o func(ie conex, uenumit fgetc(), caie cite,te un octet
uin fi,ieiul specificat. <Sugestie>

Iat un exemplu caie piezint mouul ue citiie ,i ue afi,aie a unui text
uinti-un fi,iei:

$fh =fopen(,o_caite.txt", ,i");
if (!$fh)

uie (,Nu a fost ueschis fisieiul <I>o_caite.txt<I>.");

$s = fieau($fh, 2S6);
echo ,<BR>Citeste: $s";
fclose($fh);

Exemplul cite,te maximum 2S6 ue octe(i uin fi,iei. Pentiu a citi un
numi mai maie sau mai mic ue octe(i, mouifica(i valoaiea
aigumentului lungime al func(iei fieau().

<Sugestie>
Bac uoii(i s nceica(i peisonal acest exemplu, asiguia(i-v c
fi,ieiul o_caite.txt se afl n acela,i catalog ca si sciiptul
uumneavoasti ,i c PBP aie peimisiunea ue a citi
fi,ieiul.<sugestie>

Pentiu a citi ,i a afi,a ntiegul con(inut al fi,ieiului, folosi(i func(ia
filesize() pentiu a fuiniza valoaiea aigumentului lungime, astfel:

$nume_fisiei = ,o_caite.txt";
$fh =fopen($nume_fisiei, ,i");
if (!$fh)

uie (,Nu a fost ueschis fisieiul <I>o_caite.txt<I>.");

$s = fieau($fh, filesize($nume_fisiei, ,i"));
echo ,<BR>Citeste: $s";
fclose($fh);

<titlu>Citiiea unei linii ue text<titlu>
0 linie ue text este o seiie ue caiacteie uimate ue un caiactei ue
teiminaie a liniei. Se obi,nuie,te fiecvent citiiea linie cu linie a unui
text uinti-un fi,iei. Func(ia fgets() cite,te o linie uinti-un fi,iei;
func(ia aie uimtoaiea foim:

fgets(iuentificatoi_fisiei, lungime)

Ca ,i n cazul func(iei fieau(), aigumentul iuentificatoi_fisiei este o
valoaie ietuinat ue func(ia fopen(); cu toate acestea, aigumentul
lungime specific numiul

19u

maxim ue octe(i caie voi fi citi(i, minus o unitate, pentiu a peimite
incluueiea caiacteiului ue teiminaie a liniei. 0cte(ii citi(i uin fi,iei
sunt ietuina(i ca valoaie ue tip ,ii.
Iat un exemplu caie piezint mouul ue citiie ,i ue afi,aie a piimei
linii a unui fi,iei:

$fh =fopen(,o_caite.txt", ,i");
if (!$fh)

uie (,Nu a fost ueschis fisieiul <I>o_caite.txt<I>.");

$s = fgets($fh, 2S6);
echo ,<BR>Citeste: $s";
fclose($fh);

n exemplul anteiioi s-a piesupus c linia cea mai lung a fi,ieiului
con(ine mai pu(in ue 2S6 octe(i. Pentiu a peimite lungimi ue linie mai
maii, pui ,i simplu mouifica(i valoaiea aigumentului lungime al
func(iei fgets ().

<titlu>Citiiea linie cu linie a unui ntieg fi,iei<titlu>
n geneial, uinti-un fi,iei tiebuie citit mai mult uect piima linie a
acestuia. Pentiu aceasta, un sciipt tiebuie s uispun ue o moualitate
ue a ueteimina momentul cnu fi,ieiul a fost citit n totalitate.
Func(ia feof() aie chiai acest scop, ietuinnu o valoaie caie aiat
uac s-a ajuns sau nu la sfi,itul fi,ieiului. Func(ia aie uimtoaiea
foim:

feof(iuentificatoi_fisiei)

Aigumentul iuentificatoi_fisiei este valoaiea ietuinat ue func(ia
fopen(). Func(ia feof() ietuineaz tiue uac fi,ieiul specificat este la
sfi,it; n caz contiai, ietuineaz false.
Iat cum se poate folosi func(ia feof() pentiu a contiola piocesul ue
citiie a unui ntieg fi,iei, linie cu linie:

$fh =fopen(,o_caite.txt", ,i");
if (!$fh)

uie (,Nu a fost ueschis fisieiul <I>o_caite.txt<I>.");

$s = fgets($fh, 2S6);
while (!feof($fh))

echo ,<BR>Citeste: $s";
$s = fgets($fh, 2S6);

fclose($fh);


Instiuc(iunea while asigui faptul c func(ia fgets() este apelat n
mou iepetat, pn la citiiea tutuioi liniiloi.
0 moualitate mai simpl ue a citi linie cu linie un ntieg fi,iei const
n a folosi func(ia file(). Aceast func(ie ietuineaz un tablou n caie
fiecaie element con(ine

191

o linie a fi,ieiului text specificat. Iat un exemplu caie folose,te
func(ia file() pentiu a citi ,i pentiu a afi,a con(inutul unui fi,iei:

$tablou = file(,o_caite.txt);
foiech ($tablou as $s);

echo ,<BR>Citeste: $s";


<aten(ie>
Aceast metou nu este auecvat pentiu fi,ieie ue foaite maii
uimensiuni, ueoaiece n tablou este ncicat ntiegul con(inut al
fi,ieiului, ceea ce poate necesita o cantitate ue memoiie supeiioai
celei uisponibile. <aten(ie>

<titlu>Afi,aiea con(inutului unui fi,iei<titlu>
PBP fuinizeaz uou func(ii caie faciliteaz afi,aiea con(inutului
unui fi,iei. 0na uintie func(ii, fpassthiu(), necesit un aigument caie
specific iuentificatoiul fi,ieiului caie uimeaz s fie afi,at:

$fh = fopen(,o_caite.txt", ,i");
fpassthiu($fh);

Bup ce a afi,at fi,ieiul, func(ia l nchiue automat.
Cealalt func(ie, ieaufile(), necesit numai numele sau calea
fi,ieiului:

ieaufile(,o_caite.txt"=;

<titlu>Navigaiea piinti-un fi,iei<titlu>
A,a cum s-a aitat anteiioi, fiecaie fi,iei aie un pointei asociat caie
inuic pozi(ia octetului unue se va piouuce uimtoaiea opeia(ie.
Pute(i folosi func(ia iewinu() pentiu a ieauuce pointeiul la nceputul
fi,ieiului. Func(ia aie uimtoaiea foim:

iewinu(iuentificatoi_fisiei)

unue iuentificatoi_fisiei este iuentificatoiul ue fi,iei ietuinat ue
func(ia fopen().

<iemaic>
Nu pute(i ieauuce pointeiul unui fi,iei la nceputul piopiiu-zis al
unui fi,iei uac fi,ieiul a fost ueschis pentiu un acces ue tip ata,aie,
auic nti-unul uin mouuiile 'a' sau 'a+'.<iemaic>

Iat un exemplu caie piezint mouul ue utilizaie a func(iei iewinu()
pentiu a afi,a ue uou oii con(inutul unui fi,iei:

$fh =fopen(,o_caite.txt", ,i");
if (!$fh)

uie (,Nu a fost ueschis fisieiul <I>o_caite.txt<I>.");

192


$s = fgets($fh, 2S6);
while (!feof($fh))

echo ,<BR>\$s: $s";
$s = fgets($fh, 2S6);

Beiuleaza la inceputul fisieiului si ieia ieuaiea acestuia
iewinu($fh);
while (!feof($fh))

echo ,<BR>\$s: $s";
$s = fgets($fh, 2S6);

fclose($fh);

Bac se piouuce vieo eioaie, func(ia iewinu() ietuineaz zeio.
Be,i func(ia iewinu() este util n caz ue nevoie, necesitatea ue a
ieauuce un pointei ue fi,iei la nceputul fi,ieiului nu este chiai att
ue fiecvent. Func(ia fseek() fuinizeaz o mai maie flexibilitate,
peimi(nuu-v s pozi(ionii pointeiul ue fi,iei astfel nct s pute(i
citi sau sciie n oiice punct al fi,ieiului. Func(ia aie uou foime, cea
mai simpl fiinu uimtoaiea:

fseek(iuentificatoi_fisiei, offset)

unue iuentificatoi_fisiei este iuentificatoiul ue fi,iei ietuinat ue
func(ia fopen(), iai offset este pozi(ia uoiit a pointeiului ue fi,iei,
specificat n octe(i, n iapoit cu nceputul fi,ieiului, n caz ue ieu,it,
func(ia fseek() ietuineaz u; n caz contiai, ietuineaz -l .
0 foim alteinativ a func(iei asigui un giau supeiioi ue
flexibilitate:

fseek(iuentificatoi_fisiei, offset, baza)


unue iuentificatoi_fisiei ,i offset au semnifica(iile uefinite anteiioi,
iai baza ia una ; uintie uimtoaiele valoii:
- SEEK_SET, caie stabile,te pozi(ia pointeiului ue fi,iei n iapoit cu
nceputul fi,ieiului
- SEEK_C0R, caie stabile,te pozi(ia pointeiului ue fi,iei n iapoit cu
valoaiea cuient a pointeiului
- SEEK_ENB, caie stabile,te pozi(ia pointeiului ue fi,iei ielativ la
sfi,itul fi,ieiului
valoaiea aigumentului offset poate fi pozitiv, negativ sau zeio.
Be exemplu, pentiu a pozi(iona pointeiul cu 1uuu ue octe(i nainte ue
sfi,itul fi,ieiului, emite(i uimtoiul apel ue func(ie:

fseek($fh, -1uuu,SEEK_ENB)


unue $fh este iuentificatoiul fi,ieiului al ciui pointei uoii(i s-1
iepozi(iona(i.

19S

Pentiu a ob(ine valoaiea cuient a pointeiului ue fi,iei, invocau
func(ia ftell(), caie aie uimtoaiea foim:

ftell(iuentificatoi_fisiei)

Func(ia ietuineaz valoaiea cuient a iuentificatoiului ue fi,iei,
iespectiv valoaiea zeio uac func(ia e,ueaz.

<titlu>Sciieiea nti-un fi,iei<titlu>
Spie ueosebiie ue vaiietatea ue func(ii fuinizate pentiu citiiea
fi,ieieloi, PBP ofei o singui func(ie pentiu sciieiea n fi,ieie, ,i
anume fwiite(). Func(ia aie uimtoaiea foim:

fwiite(iuentificatoi_fisiei, uata)

unue iuentificatoi_fisiei este iuentificatoiul ue fi,iei ietuinat ue
func(ia fopen(), iai uata este o valoaie ,ii caie ueteimin uatele caie
uimeaz a fi sciise. Bac execu(ia func(iei ieu,e,te, ietuineaz
numiul octe(iloi scii,i; n caz contiai, ietuineaz valoaiea l.
Iat un exemplu caie piezint mouul ue sciieie a uateloi nti-un
fi,iei:

$fh =fopen(,juinal.txt", ,a");
if (!$fh)

uie (,Nu a fost ueschis fisieiul <I>juinal.txt<I>.");

$ok = fwiite($fh, ,Acestea sunt uate bune.\n");
echo ,<BR>Rezultatul sciieiii: $ok";
fclose($fh);

Piogiamul piezentat n exemplul anteiioi sciie n fi,iei o linie ue
text. Beoaiece fi,ieiul a fost ueschis folosinu mouul "a", uatele sunt
ata,ate la fi,iei; cu alte cuvinte, uatele sunt sciise uup toate uatele
existente n fi,iei. 0bseiva(i c a fost sciis ,i un caiactei ue teiminaie
a liniei ("\n"), astfel nct fi,ieiul s poat fi citit linie cu linie la un
moment ue timp ulteiioi. Bac lucia(i cu un fi,iei text, n geneial
tiebuie s incluue(i un caiactei ue teiminaie a liniei la sfi,itul
fieciei linii sciise n fi,iei.
Piogiamul uin exemplu sciie n fi,iei o singui linie ue text. Totu,i,
pute(i sciie mai multe linii, uac uoii(i. Bac apela(i func(ia fwiite()
uin inteiioiul unei bucle, ave(i posibilitatea ue a sciie mai multe linii.
Bup ce a(i sciis toate liniile ue caie ave(i nevoie, nchiue(i fi,ieiul
piin apelaiea func(iei fclose().
PBP mai fuinizeaz ,i o foim alteinativ a func(iei fwiite():

fwiite(iuentificatoi_fisiei, uata, lungime)

Aceast foim incluue un al tieilea aigument, ,i anume lungime, caie
v peimite s specifica(i numiul maxim ue octe(i caie voi fi scii,i.

194

<Sugestie>
Aigumentul lungime al func(iei fwiite() tiebuie utilizat atunci cnu
se sciie n fi,ieie binaie sub Niciosoft Winuows. Be asemenea,
Winuows piefei secven(a ue teiminaie a liniei "\i\n". Atunci cnu
sciie(i piogiame PBP pentiu sisteme Winuows, este ue piefeiat s
folosi(i secven(a Winuows ue teiminaie a liniei.
<sugestie>

<sugestie>
PBP uispune ue o alt func(ie pentiu sciieiea fi,ieieloi, n spe(
fputs(). Totu,i, n afai ue nume, fputs() este una ,i aceea,i func(ie cu
fwiite(). Beci, piactic, fputs() ,i fwiite() iepiezint una ,i aceea,i
func(ie, cu nume uifeiite.
<sugestie>

<titlu>Pioiect 11-1: 0n contoi pentiu numiul ue ueschiueii ale unei
pagini<titlu>
n cauiul acestui pioiect, ve(i constiui un sciipt caie numi ue cte
oii s-a ob(inut accesul la o anumit pagin Web.

<titlu>Scopuiile pioiectului<titlu>
- Piezentaiea mouului ue citiie ,i sciieie a unui fi,iei folosinu PBP
- Piezentaiea mouului ue cieaie a unui contoi utilizat nti-o pagin
Web

<titlu>Pas cu pas<titlu>
1. Plasa(i uimtoiul sciipt PBP nti-un fi,iei uenumit cti.php ,i
ncica(i acest fi,iei n seiveiul uumneavoasti PBP:

<.php
$cfile = basename($PBP_SELF) . ".uat";
$fh = fopen($cfile, "i+");
if (!$fh)

uie("<BR>Nu a fost ueschis fisieiul <I>$cfile<I>.");

$s = fgets($fh, 6);
$count = (int) $s;
$count = $count + 1;
$count = sti_pau($count, 6);
iewinu($fh);
fwiite($fh, $count);
echo "$count";
fclose($fh);
.>

2. Plasa(i uimtoiul sciipt PBP nti-un fi,iei numit cti-test.php ,i
ncica(i acest fi,iei n seiveiul uumneavoasti, inseinuu-l n
acela,i catalog ca ,i fi,ieiul cti.php:

<BTNL>
<BEAB>
<TITLE>cti-test.php<TITLE>
<BEAB>
<B0BY>
Aceasta pagina a fost ueschisa ue <B>

19S

<.php incluue "cti.php" .>
<B> oii.
<B0BY>
<BTNL>

S. Ciea(i fi,ieiul cti-test.php.uat n acela,i catalog caie con(ine
sciiptuiile pe caie le-a(i ncicat. Pute(i ciea fi,ieiul piin emiteiea
comenzii

touch cti-test.php.uat

Asiguia(i-v c PBP aie acces ue citiie ,i ue sciieie la fi,iei. Bac nu
,ti(i piecis cum tiebuie s efectua(i aceast opeia(ie, lua(i legtuia cu
auministiatoiul uumneavoasti ue sistem.
4. Aloca(i un timp stuuiului sciiptului PBP cti.php. 0bseiva(i mouul
n caie sciiptul folose,te vaiiabila PBP $PBP_SELF pentiu a
ueteimina numele fi,ieiului caie o con(ine ,i apoi ata,eaz paiticula
.uat pentiu a foima numele fi,ieiului caie con(ine contoiul ue pagin.
Be asemenea, iemaica(i func(iile pe caie le folose,te sciiptul pentiu a
executa opeia(iile cu fi,ieie.
S. Aloca(i un timp stuuiului sciiptului PBP cti-test.php. Remaica(i c
acest sciipt este alctuit mai ales uin couuii BTNL; n fi,iei apaie o
singui linie PBP. Instiuc(iunea incluue ueteimin limbajul PBP s
incluu con(inutul fi,ieiului cti.php n fi,ieiul cti-test.php atunci
cnu este ueschis acesta uin uim.
6. 0iienta(i un biowsei Web spie auiesa 0RL a sciiptului cti-
test.php. Biowseiul tiebuie s afi,eze numiul ue ueschiueii ale
paginii. Piin iempiosptaiea paginii se ueteimin inciementaiea
contoiului uin pagin.

<titlu>0b(ineiea accesului exclusiv la un fi,iei<titlu>
Web-ul iiuic o pioblem special pentiu uezvoltatoiii ue piogiame,
ueoaiece mai mul(i utilizatoii pot avea acces simultan la un singui
sciipt PBP. 0neoii, accesul simultan poate avea ca iezultat
ueteiioiaiea fi,ieiului. Pentiu a veuea cum se poate piouuce aceasta,
s lum n consiueiaie piocesul ue acces ,i actualizaie a contoiului
ue pagini asociat unei pagini Web. S piesupunem c, ini(ial, contoiul
paginii aie valoaiea 1uu. Acest pioces implic uimtoaiea succesiune
ue evenimente:
1. Beschiue fi,ieiul caie con(ine valoaiea contoiului.
2. Cite,te fi,ieiul, ob(innu valoaiea cuient a contoiului (1uu).
S. Inciementeaz contoiul (1u1).
4. Sciie n fi,iei, stocnu valoaiea actualizat a contoiului (1u1).
S. nchiue fi,ieiul.
Acum, s veuem ce se poate ntmpla uac uou piocese ob(in acces
simultan la pagina Web ,i la contoiul su, astfel nct etapele celoi
uou piocese se ntieptiunu. Tabelul 11-4 piezint iezultatul.

196

<tabel 11-4 Acces conflictual la un fi,iei>
Piocesul ni. 1
1. Beschiue fi,ieiul caie con(ine valoaiea contoiului.
2. Cite,te fi,ieiul, ob(innu valoaiea cuient a contoiului (1uu).
S. Inciementeaz contoiul (1u1).
4. Sciie n fi,iei, stocnu valoaiea actualizat a contoiului (1u1).
S. nchiue fi,ieiul.

Piocesul ni. 2
1. Beschiue fi,ieiul caie con(ine valoaiea contoiului.
2. Cite,te fi,ieiul, ob(innu valoaiea cuient a contoiului (1uu).
S. Inciementeaz contoiul (1u1).
4. Sciie n fi,iei, stocnu valoaiea actualizat a contoiului (1u1).
S. nchiue fi,ieiul.
0bseiva(i c piocesul 2 cite,te fi,ieiul nainte ca piocesul l s sciie
valoaiea actualizat a contoiului. Ca ataie, ambele piocese ob(in
valoaiea 1uu ca valoaie ini(ial a contoiului, inciementeaz contoiul
la 1u1 ,i sciiu 1u1 ca valoaie inciementat a contoiului. Beci, ue,i
uou piocese au ob(inut accesul la pagin, contoiul paginii s-a
inciementat cu numai o unitate, n cazul n caie compensa(ia
uumneavoasti uepinue ue numiul vizitatoiiloi paginii, aceasta este
o pioblem extiem ue seiioas.
Pentiu a evita pioblema, este necesai ca fiecaie pioces s ob(in
acces exclusiv la fi,ieiul caie con(ine contoiul uin pagin. Astfel,
accesul la fi,iei este succesiv: fi,ieiul este folosit mai nti ue un
pioces, ,i apoi ue cellalt. Atta vieme ct piocesele sunt mpieuicate
s ob(in simultan accesul la fi,iei, contoiul nu va inuica valoii
eionate.
Func(ia flock() peimite unui pioces s ob(in un acces exclusiv la un
fi,iei, acoiunu piocesului o blocaie a fi,ieiului. Func(ia aie foima:

flock(iuentificatoi_fisiei, opeiatie)

unue iuentificatoi_fisiei este iuentificatoiul ue fi,iei ietuinat ue
func(ia fopen(). Aigumentul opeia(ie este o constant sau o expiesie
caie specific opeia(ia uoiit, uup cum uimeaz:

<tabel>
*0peia(ie
*Besciieie


*L0CK_SB
*0b(ine o blocaie paitajat a fi,ieiului specificat. Nai multe piocese
pot ue(ine o blocaie paitajat; pentiu un fi,iei ns, nici un pioces nu
poate ob(ine o blocaie paitajat n timp ce un alt pioces ue(ine o
blocaie exclusiv. Piocesul va a,tepta pn cnu aie posibilitatea ue
a ob(ine blocaiea ceiut.

*L0CK_EX
*0b(ine o blocaie exclusiv pentiu fi,ieiul specificat. 0n singui
pioces poate ue(ine o blocaie exclusiv a unui fi,iei. Piocesul va
a,tepta pn cnu aie posibilitatea ue a ob(ine blocaiea ceiut.

*L0CK_SB + L0CK_NB
*nceaic s ob(in o blocaie paitajat a fi,ieiului specificat; totu,i,
nu a,teapt ob(ineiea blociii, uac aceasta nu este uisponibil
imeuiat.

*L0CK_EB + L0CK_NB
*nceaic s ob(in o blocaie exclusiv pentiu fi,ieiul specificat;
totu,i, nu a,teapt ob(ineiea blociii, uac aceasta nu este
uisponibil imeuiat.

*L0CK_0N
*Elibeieaz blocaiea fi,ieiului specificat.
<tabel>

Func(ia flock() ietuineaz tiue n caz ue ieu,it, iespectiv false()
cnu blocaiea solicitat nu poate fi ob(inut (L0CK_SB ,i L0CK_Ex)
sau elibeiat (L0CK_0N).

<sugestie>
Blocaiea este o activitate caie se uesf,oai n comun. Piocesele nu
au niciouat accesul inteizis la fi,ieie, ci numai la blocii. Ca ataie, un
pioces caie nu nceaic s blocheze un fi,iei poate ob(ine acces la
fi,iei chiai uac un alt pioces a ceiut ,i a ob(inut o blocaie exclusiv
a fi,ieiului.<sugestie>

<Aten(ie>
0nele seiveie Web, inclusiv IIS ue la Niciosoft, iuleaz un singui
pioces multifii. n asemenea situa(ii, func(ia flock() nu va ieu,i s
fuinizeze acces exclusiv la fi,ieie.<Aten(ie>

<titlu>Pioiect 11-2: 0n contoi mbunt(it al accesului la o
pagin<titlu>
n cauiul acestui pioiect, ve(i constiui un sciipt caie numi ue cte
oii a fost ueschis o pagin Web. Sciiptul ue fa( l mbunt(e,te pe
cel piezentat anteiioi. Sciiptul blocheaz fi,ieiul caie con(ine
contoiul cu numiul ue ueschiueii ale paginii, astfel nct accesul
simultan s nu cauzeze o numiaie eionat.

<titlu>Scopuiile pioiectului<titlu>
- Piezentaiea mouului ue blocaie a fi,ieieloi
- Piezentaiea mouului ue implementaie a unui contoi mai fiabil ue
cuantificaie a accesului la o pagin

<titlu>Pas cu pas<titlu>
1. Plasa(i uimtoiul sciipt PBP nti-un fi,iei uenumit lcti.php ,i
ncica(i acest fi,iei n seiveiul uumneavoasti PBP:

<.php
$fh = fopen($cfile, "i+")
oi uie("<BR>Nu a fost ueschis fisieiul <I>$cfile<I>.");
flock($fh, L0CK_EX)
oi uie("<BR>Nu poate bloca fisieiul <I>$cfile<I>.");
$s = fgets($fh, 6);
$count = (int) $s + 1;
$count = sti_pau($count, 6);
iewinu($fh)
oi uie("<BR>Nu poate ueiula fisieiul<I>$cfile<I>.");
if (fwiite($fh, $count) == -1)

uie("<BR>Nu poate sciie in fisiei <I>$cfile<I>.");

echo "$count";
flock($fh, L0CK_0N)
oi uie("<BR>Nu poate uebloca fisieiul <I>$cfile<I>.");
fclose($fh)
oi uie("<BR>Nu poate inchiue fisieiul <I>$cfile<I>.");
.>

198

2. Plasa(i uimtoiul sciipt PBP nti-un fi,iei uenumit lctitest.php ,i
ncica(i acest fi,iei n seiveiul uumneavoasti, inseinuu-l n
acela,i catalog ca ,i fi,ieiul lcti.php:

<BTNL>
<BEAB>
<TITLE>lctitest.php<TITLE>
<BEAB>
<B0BY>
<.php $cfile="lctitest.php.uat" .>
Aceasta pagina a fost ueschisa ue <B>
<.php incluue "lcti.php" .>
<B> oii.
<B0BY>
<BTNL>

S. Ciea(i fi,ieiul lctitest.php.uat n acela,i catalog caie con(ine
sciiptuiile pe caie le-a(i ncicat. Pute(i ciea fi,ieiul piin emiteiea
comenzii

touch lctitest.php.uat

Asiguia(i-v c PBP aie acces ue citiie ,i ue sciieie la fi,iei. Bac nu
,ti(i piecis caie este mouul ue executaie a acestei opeia(ii, lua(i
legtuia cu auministiatoiul uumneavoasti ue sistem.
4. Aloca(i un timp stuuiului sciiptului PBP lcti.php. Remaica(i mouul
ue iealizaie a blociii ,i a ueblociii fi,ieiului.
S. Aloca(i un timp stuuiului sciiptului PBP lctitest.php. Remaica(i c
este foaite pu(in uifeiit ue sciiptul folosit n cauiul Pioiectului 11-1.
6. 0iienta(i un biowsei Web spie auiesa 0RL a sciiptului
lctitest.php. Biowseiul va afi,a numiul ue ueschiueii ale paginii
iespective. Piin iempiosptaiea paginii este ueteiminat
inciementaiea contoiului paginii.
7. 0iienta(i uou biowseie Web spie auiesa 0RL a sciiptului lctitest
.php. nceica(i s ueteimina(i biowseiele s ob(in simultan accesul
la pagin. Chiai uac ve(i ieu,i aceast opeia(ie, blociile aplicate
fi,ieieloi voi asiguia actualizaiea n mou auecvat a contoiului ue
pagin.

<titlu>Copieiea unui fi,iei<titlu>
PBP fuinizeaz o func(ie caie faciliteaz copieiea fi,ieieloi, ,i anume
func(ia copy (). Func(ia copy () aie uimtoaiea foim:

copy (suisa, uestinatiea)

unue suisa este numele sau calea fi,ieiului caie uimeaz a fi copiat,
iai uestinatie este numele sau calea copiei. Func(ia ietuineaz tiue
uac opeia(ia ue copieie ieu,e,te; n caz contiai, ietuineaz false.
Iat un exemplu n caie este piezentat mouul ue utilizaie a func(iei
copy():

$ok = copy(,test.txt", ,test.txt.bak");
if (!$ok)

uie(<BR> Nu a ieusit sa copieze fisieiul.");


Exemplul cieeaz o copie ue siguian( a fi,ieiului test .txt, cu numele
test. txt. bak.

199

<Remaic>
Re(ine(i c PBP tiebuie s aib acces ue sciieie la catalogul n caie se
va afla copia; n caz contiai, PBP nu va putea ciea copia. <Remaic>
<Aten(ie>
Func(ia copy() va supiasciie fi,ieiul uestina(ie, uac acesta exist.
<Aten(ie>

<titlu>Nouificaiea numelui unui fi,iei<titlu>
PBP fuinizeaz o func(ie caie v peimite s mouifica(i numele unui
fi,iei, ,i anume iename(), func(ie caie aie uimtoaiea foim:

iename(nume_vechi, nume_nou)

unue nume_vechi este numele sau calea oiiginal a fi,ieiului, iai
nu_nou este numele sau calea uoiit. Func(ia ietuineaz tiue uac
opeia(ia ue mouificaie a numelui a ieu,it; n caz contiai, ietuineaz
false.
Iat un exemplu caie ilustieaz mouul ue utilizaie a func(iei
iename():

$ok = iename(,test.txt", ,TEST.txt");
if (!$ok)

uie(<BR> Nu a ieusit sa mouifice numele fisieiul.");


Exemplu mouifica numele fi,ieiului test.txt, atiibuinuu-i numele
TEST.txt.

<iemaic>
Re(ine(i c PBP tiebuie s aib acces ue sciieie la catalogul n caie se
va afla fi,ieiul cu numele mouificat; n cazcontiai, PBP nu va putea
mouifica numele fisieiului. <iemaic>

<Aten(ie>
Ca ,i n cazul comenzii 0NIX mv, func(ia iename() va supiasciie
fi,ieiul uestina(ie, uac acesta exist. <Aten(ie>

<titlu>$teigeiea unui fi,iei<titlu>
PBP fuinizeaz o func(ie caie v peimite s ,teige(i un fi,iei, ,i
anume unlink(). Func(ia aie uimtoaiea foim:

unlink(nume_fisiei)

unue nume_fisiei este numele sau calea fi,ieiului caie uimeaz a fi
,teis. Func(ia ietuineaz tiue uac opeia(ia ue ,teigeie a avut
succes, iespectiv false in caz contiai.

2uu

Iat un exemplu caie piezint mouul ue utilizaie a func(iei uniink():

$ok = unlink(,test.txt");
if (!$ok)

uie(<BR> Nu a ieusit sa steaiga fisieiul.");


Piogiamul uin exemplul anteiioi ,teige fi,ieiul test.txt.

<iemaic>
Re(ine(i c PBP tiebuie s aib acces ue sciieie la catalogul n caie se
afl fi,ieiul; n caz contiai, PBP nu va putea ,teige fi,ieiul.
<iemaic>

<iemaic>
n confoimitate cu manualul PBP, func(ia unlink() ,s-ai putea s nu
func(ioneze" n sistemele Niciosoft Winuows. <iemaic>

<Sfatul specialistului>
ntiebaie:Am vzut foimulaie BTNL caie peimit utilizatoiului s
ncaice un fi,iei n seivei. Cum pot ciea un asemenea foimulai ,i
cum l pot folosi cu PBP.
Rspuns: Pentiu a ciea un foimulai ue ncicaie, specifica(i
ENCTYPE= "multipaitfoim-uata" n eticheta F0RN ,i incluue(i un
contiol ue intiouuceie a uateloi cu atiibutul TYPE="FILE". Iat un
exemplu:
<BTNL>
<BEAB>
<TITLE>incaica.html<TITLE>
<BEAB>
<B0BY>
<B2>Incaicaiea fisieieloi<B2>
<F0RN NETB0B="P0ST" ACTI0N="incaica.php'
ENCTYPE="multipaitfoim-uata">
Incaic acest fisiei:
<INP0T NANE="fisiei_utilizatoi" TYPE="FILE">
<BR><BR>
<INP0T TYPE="S0BNIT" vAL0E="Tiimite fisieiul">
<F0RN>
<B0BY>
<BTNL>
Cnu utilizatoiul apas pe butonul ue tiimiteie, biowseiul ncaic
fi,ieiul n seivei. Sciiptul uumneavoasti PBP poate ob(ine accesul la
calea fi,ieiului ncicat astfel:
$BTTP_P0ST_FILES"fisiei_utilizatoi"l"tmp_name"

2u1

unue fisiei_utilizatoi este valoaiea atiibutului NANE asociat
contiolului INP0T folosit pentiu ncicaiea fi,ieiului.
La teiminaiea execu(iei sciiptului, PBP ,teige n mou automat
fi,ieiul ncicat. Bac uoii(i s salva(i fi,ieiul, pute(i invoca func(ia
move_uploaueu_file(). Be exemplu:
$iesult = move_uploaueu_file($BTTP_P0ST_FILES"fisiei_utiIizatoi"
"tmp_name", "homebilltest.txt");
$iesult = $iesult . "tiue" : "false";
echo "<BR>move_uploaueu_file(): $iesult";
Func(ia move_uploaueu_file() v impune s specifica(i calea fi,ieiului
ncicat ,i calea unue uoii(i s fie mutat fi,ieiul. Func(ia ietuineaz
tiue uac opeia(ia ieu,e,te, iespectiv false n caz contiai. <Sfatul
specialistului>

<Test ,la minut">
- Caie este valoaiea ue mou folosit pentiu a solicita acces ue citiie la
un fi,iei.
- Caie este func(ia folosit pentiu nchiueiea unui fi,iei.
- Caie este func(ia folosit pentiu a citi o linie ue text uinti-un fi,iei.
- Caie este func(ia folosit pentiu a sciie nti-un fi,iei. <Test ,la
minut">

<titlu>0tilizaiea cataloageloi<titlu>
n afai ue suita sa ue func(ii uestinate luciului cu fi,ieie, PBP
incluue ,i func(ii pentiu utilizaiea cataloageloi. Cele mai impoitante
func(ii pentiu utilizaiea cataloageloi v peimit s ob(ine(i catalogul
ue luciu ,i s lucia(i cu acesta, s manipula(i ci ue acces, s citi(i
con(inutul unui catalog, s vizualiza(i ,i s mouifica(i piivilegiile unui
catalog, piecum ,i s ciea(i ,i s ,teige(i cataloage.

<titlu>0b(ineiea ,i mouificaiea catalogului ue luciu<titlu>
Func(ia getcwu() ietuineaz un ,ii caie con(ine catalogul cuient ue
luciu. Func(ia nu necesit aigumente ,i, implicit, poate fi utilizat
astfel:

$cuii = getwu();

Pentiu a schimba catalogul cuient ue luciu, invoca(i func(ia chuii(),
caie aie uimtoaiea foim:

<not>
Rspunsuii la test:
- "i" sau oiicaie uintie op(iunile "i+", "W+" sau "a+".
- fclose()
- fgets()
- fwiite0<not>

2u2

chuii(nume_catalog)

unue nume_catalog este calea sau numele catalogului ue luciu uoiit.
Func(ia ietuineaz tiue uac opeia(ia ieu,e,te; n caz contiai,
ietuineaz false.
Be exemplu, pentiu a face uin tmp catalogul cuient ue luciu,
invoca(i func(ia chuii() uup cum uimeaz:

$ok = chuii(,tmp");
if($ok)

uie(,Nu a putut schimba catalogul ue luciu.");


<titlu>Nanipulaiea ciloi ue acces<titlu>
PBP incluue numeioase func(ii utile pentiu manipulaiea ciloi ue
acces. Func(ia uiiname() pieia calea ue acces la un fi,iei ,i
ietuineaz toat calea, mai pu(in componenta final a cii specificate,
n cazul n caie componenta final este un fi,iei, func(ia v ajut s
izola(i numele fi,ieiului ue iestul cii. Be exemplu, uac se u calea
"homebillbinsciipt.php", func(ia va ietuina "homebillbin".
Func(ia aie uimtoaiea foim:
uiiname(cale)

Func(ia basename() execut opeia(ia complementai, ietuinnu
numai componenta final a cii specificate. Be exemplu, uac este
uat calea "homebillbinsciipt.php", func(ia va ietuina
"sciipt.php". Func(ia aie uimtoaiea foim:

basename(cale)

Bac uoii(i s executa(i mai multe opeia(ii cu o cale, func(ia
pathinfo() v poate fi ue folos. Aceast func(ie ietuineaz un tablou
asociativ caie incluue tiei elemente iezultatul invociii func(iei
uiiname() avnu ca aigument calea iespectiv, iezultatul invociii
func(iei basename() avnu ca aigument calea iespectiv, piecum ,i
extensia fi,ieiului (uac exist) asociat iezultatului invociii
func(iei basename() avnu ca aigument calea iespectiv.
Iat un exemplu caie piezint mouul ue utilizaie a func(iei
pathlnfo():

$info = pathinfo(,homebillbinsciipt.php");
foieach ($info as $nume=>$valoaie)

echo"<BR>$nume=>$valoaie";


Batele ue ie,iie ale exemplului sunt uimtoaiele:

uiiname=>homebillbin
basename=>sciipt.php
extension=>php

2uS

<Aten(ie>
veisiunea PBP 4.u4pl1 ,i ncheie execu(ia uac invoca(i func(ia
pathinfo() pe o cale uin caie lipse,te extensia fi,ieiului. Se paie c
acest uefect ue piogiam a fost iemeuiat n veisiunea PBP 4.uS.
<Aten(ie>

<titlu>vizualizaiea ,i mouificaiea piivilegiiloi ue catalog<titlu>
Pute(i invoca func(iile iezumate n tabelul 11-1 folosinu ca
aigumente fi,ieie sau cataloage. Aceste func(ii v peimit s
vizualiza(i o vaiietate ue caiacteiistici ale cataloageloi, inclusiv
piivilegiile ue catalog, caie sunt ietuinate ue func(ia filepeims().
Similai, pute(i invoca func(ia chmou(), caie a fost uesciis anteiioi,
folosinu ca aigument un fi,iei sau un catalog. 0tiliza(i aceast func(ie
pentiu a stabili piivilegiile ue catalog exact a,a cum a(i folosi-o
pentiu a stabili piivilegiile ue fi,iei.

<titlu>Citiiea con(inutului unui catalog<titlu>
PBP fuinizeaz tiei func(ii caie v peimit s citi(i con(inutul unui
catalog, ca ,i cum catalogul ai fi un fi,iei. Aceste func(ii sunt:
- openuii(), caie peimite citiiea unui catalog
- ieauuii (), caie cite,te o intiaie uinti-un catalog
- closeuii(), caie nchiue catalogul, elibeinu iesuisele alocate ue
func(ia openuii()
Rezultatul apeliii func(iei ieauuii () este un ,ii caie con(ine numele
uimtoiului fi,iei sau sub-catalog al catalogului ueschis. Func(ia
ietuineaz false atunci cnu au fost citite toate intiiile uin catalog.
Iat un exemplu caie piezint mouul ue utilizaie a acestoi func(ii
pentiu citiiea con(inutului unui catalog:

$uh =openuii(,homebillwww");
if (!$sh)

uie (Nu a ieusit sa ueschiua catalogul.");

$s = ieauuii($uh) ;
while ($s)

echo <BR>$s";
$s = ieauuii($uh);

closeuii($uh);

Batele ue ie,iie ale exemplului sunt asemntoaie cu uimtoaiele:

.
..
php
inuex.html
phpinfo.php

2u4

<titlu>Cieaiea unui catalog<titlu>
Pentiu a ciea un catalog, invoca(i func(ia mkuii(), caie aie
uimtoaiea foim:

mkuii(nume_catalog, mou)

unue nume_catalog este calea sau numele catalogului caie uimeaz a
fi cieat, iai mou atiibuie piivilegiile caie tiebuie acoiuate noului
catalog. In mou noimal, piima cifi a aigumentului mou tiebuie s
fie u, astfel nct PBP s-l peiceap ca pe o valoaie sciis n octal.
Func(ia ietuineaz tiue uac cieeaz catalogul; n caz contiai,
ietuineaz false. Be exemplu, pentiu a ciea un catalog uenumit test ,i
pentiu a-i atiibui piivilegiile iwxi-x--x, invoca(i func(ia mkuii() uup
cum uimeaz:

mkuii(,test", u7S1)
<Sugestie>
Pute(i folosi func(ia iename() pentiu a mouifica numele unui catalog.
<Sugestie>

<titlu>$teigeiea unui catalog<titlu>
Pentiu a ,teige un catalog, invoca(i func(ia imuii(), tiansfeinuu-i ca
aigument calea sau numele catalogului caie uimeaz a fi ,teis. Be
exemplu, pentiu a ,teige catalogul homebillvechi, invoca(i func(ia
imuii() uup cum uimeaz:

imuii(,homebillvechi")

Se pot ,teige numai cataloage viue. Func(ia va ietuina zeio n cazul
piouuceiii unei eioii.

<Test ,la minut">
- Caie este func(ia folosit pentiu citiiea unei intiii uinti-un
catalog.
- Caie este func(ia folosit pentiu a ob(ine extensia ue fi,iei asociat
unei ci.
- Caie este func(ia ce ietuineaz calea catalogului cuient ue luciu.
<Test ,la minut">

<Sfatul specialistului>
ntiebaie: Exist ,i alte func(ii PBP caie opeieaz cu fi,ieie ,i
cataloage ,i uespie a cioi existent ai tiebui s ,tiu.
Rspuns: Be,i acesta este un capitol foaite lung, nu putem s
uiscutm uespie fiecaie func(ie PBP caie lucieaz cu fi,ieie ,i
cataloage, n plus, nu sunt


<Not>
Rspunsuii la test:
- ieauuii(), cu openuii() ,i closeuii()
- pathinfo()
- getcwu()<Not>

2uS

pu(ine func(iile cu elemente ,ciuuate", caie au fost omise uin motive
ue simplitate ,i concizie. Pentiu mai multe infoima(ii, examina(i
manualul PBP pe supoit electionic, la auiesa www.php.net. Este
necesai s pioceua(i astfel mai ales uac folosi(i PBP sub Niciosoft
Winuows. Be asemenea, familiaiiza(i-v cu baza ue uate cu uefecte ue
piogiam existent la auiesa www.php.net. Acolo ve(i uescopeii cele
mai iecente infoima(ii cu piiviie la iemeuii ,i solu(ii ocolitoaie, caie
pot influen(a compoitaiea func(iiloi caie opeieaz cu fi,ieie ,i
cataloage.
<Sfatul specialistului>

<titlu>Pioiect 11-S: 0n piogiam ue isfoiie a agenuei cu
auiese<titlu>
n cauiul acestui pioiect, ve(i constiui un sciipt caie v peimite s
paicuige(i un fi,iei text caie con(ine o agenu ue auiese. Be
asemenea, sciiptul v va peimite s auuga(i intiii noi n agenua cu
auiese.
<titlu>Scopuiile pioiectului<titlu>
- Piezentaiea mouului ue navigaie n fi,ieie
- Piezentaiea mouului ue utilizaie a limbajului PBP pentiu a stabili
atiibutul vAL0E asociat unui contiol ue tip foimulai

<titlu>Pas cu pas<titlu>
1. Plasa(i uimtoiul sciipt PBP nti-un fi,iei numit biowsei.php si
ncica(i acest fi,iei n seiveiul uumneavoasti PBP:

<BTNL>
<BEAB>
<TITLE>Piogiam ue navigaie in agenua cu auiese<TITLE>
<BEAB>
<B0BY>
<B2>Piogiam ue navigaie in agenua cu auiese<B2>
<F0RN NETB0B="P0ST" ACTI0N="biowsei.php">
<.php
if (isset($stanga))

$offset -=49;
if ($offset<u)

$offset = u;

$fh = fopen(,o_caite.txt","i");
if (!$fh)

uie(,<BR>Nu s-a ieusit ueschiueiea fisieiului.");


fseek($fh, $offset, SEEK_SET);

$nume = fieau($fh, 24);
$email = fieau($fh, 24);

fclose($fh);

elseif(isset($uieapta))



$offset +=49;
if ($offset<u)

$offset = u;

$fh = fopen(,o_caite.txt","i");
if (!$fh)

uie(,<BR>Nu s-a ieusit ueschiueiea fisieiului.");


fseek($fh, $offset, SEEK_SET);

$nume = fieau($fh, 24);
$email = fieau($fh, 24);

fclose($fh);

elseif(isset($cauta))


$offset = u;
$mouel = $nume;
$nume = ,";
$email = ,";

$fh = fopen(,o_caite.txt","i");
if (!$fh)

uie(,<BR>Nu s-a ieusit ueschiueiea fisieiului.");


fseek($fh, $offset, SEEK_SET);

$s = fgets($fh,2S6);
while(!feof($fh))

$nume_fisiei = fieau($fh, 24);
$email_fisiei = fieau($fh, 24);
$iuentic = stiisti($nume_fisiei, $ mouel);
if ($iuentic !== false) bieak;
$offset +=49;


fclose($fh);

$offset +=49;
$nume = $nume_fisiei;
$email = $email_fisiei;

elseif(isset($auauga))

$nume = sti_pau($nume, 24);
$email = sti_pau($email, 24);

2u7

$fh = fopen(,o_caite.txt","i");
if (!$fh)

uie(,<BR>Nu s-a ieusit ueschiueiea fisieiului.");

fwiite($fh, $nume);
fwiite($fh, email);
fwiite($fh, ,\n");
$offset = ftell($fh) - 49;

fclose($fh);


$nume = tiim($nume);
$eamli = tiim($email);

.>
<BR>Nume:
<BR><INP0T TYPE="TEXT" NANE="nume"
<.php echo ,vAL0E=\"$nume\"" .>>
<BR>
<BR>Auiesa ue e-mail:
<BR><INP0T TYPE="TEXT" NANE="e-NAIL"
<.php echo ,vAL0E=\"$e-NAIL\"" .>>


<BR>
<BR>
<INP0T TYPE="S0BNIT" NANE="cauta" vAL0E="Cauta">
<INP0T TYPE="S0BNIT" NANE="stanga" vAL0E="<">
<INP0T TYPE="S0BNIT" NANE="uieapta" vAL0E=">">
<INP0T TYPE="S0BNIT" NANE="auauga" vAL0E="auauga">
<INP0T TYPE="S0BNIT" NANE="offset"
<.php echo ,vAL0E=\"$offset\"".>>
<F0RN>
<B0BY>
<BTNL>

2. ncica(i textul uimtoi n seivei, atiibuinuu-i numele o_caite.txt
,i plasnuu-l n acela,i catalog ca ,i sciiptul:

Al Nall albiowncow.com
Bob Tale bobstoiies.com
Chuck Stake chuckbeef.com
Eu Nogg eubeveiage.com
Xi Lentz xiquiet.com
Yo Boho yopiiates.com
ak Cloth zakashes.com

Fiecaie linie a fi,ieiului tiebuie s aib exact 48 ue caiacteie;
auiesele ue e-mail tiebuie s nceap ue la coloana 2S.
S. Aloca(i un timp stuuiului sciiptului PBP. 0bseiva(i c sciiptul
con(ine un foimulai BTNL ,i c atiibutul ACTI0N al etichetei F0RN
se iefei la fi,ieiul sciipt, caie combin nti-un singui fi,iei
foimulaiul BTNL ,i instiuc(iunile PBP caie pielucieaz uatele uin
foimulai.
4. Remaica(i utilizaiea vaiiabilei $offset pentiu a uimii pozi(ia
cuient n timpul navigiii. Beoaiece cele uou cmpuii (nume ,i
auies ue e-mail) stocate n fi,iei au uimensiuni fixe, logica
piogiamului este simpl; n cazul n caie cmpuiile ai fi avut
uimensiuni vaiiabile, logica piogiamului ai fi fost sensibil mai
complex.

2u8

S. Be asemenea, obseiva(i mouul n caie se folose,te PBP pentiu a
stabili atiibutele vAL0E ale caseteloi cu text uenumite nume ,i email,
pe baza valoiiloi vaiiabileloi PBP cu acela,i nume.
6. Asiguia(i-v c PBP aie acces ue citiie ,i sciieie la fi,ieiul
o_caite.txt. Bac nu ,ti(i sigui cum tiebuie s pioceua(i, apela(i la
auministiatoiul uumneavoasti ue sistem.
7. 0iienta(i un biowsei Web spie auiesa 0RL a fi,ieiului sciipt.
Ecianul biowseiului tiebuie s fie asemntoi celui piezentat n
continuaie. Pute(i folosi butoanele pentiu a naviga nainte ,i napoi
n fi,iei, pentiu a cuta un nume caie con(ine un text specificat,
iespectiv pentiu a auuga o nou intiaie n lista cu auiese.
<ecian>

Auuiess Book Biowsei

<cmpuii>
Nane: Al Nall
Email auuiess:albiowncow.com
<cmpuii>
<butoane>
Seaich
<
>
auu
<butoane>
<ecian>

<Test ue evaluaie>
1. Caie este comanua 0NIX caie ,teige catalogul (viu) test.
2. Caie sunt piivilegiile numeiice pe caie le ve(i atiibui unui fi,iei
pentiu a acoiua utilizatoiului su numai accesul pentiu citiie ,i
pentiu a nu acoiua altoi utilizatoii nici o categoiie ue acces.
S. Caie este apelul ue func(ie caie ueschiue fi,ieiul test.txt, acoiunu
accesul ue ata,aie ,i ue citiie la un fi,iei.
4. Caie este apelul ue func(ie caie stabile,te pozi(ia pointeiului
fi,ieiului asociat iuentificatoiului $f la sfi,itul fi,ieiului.
S. Caie este apelul ue func(ie caie ietuineaz piivilegiile asociate
catalogului test.


2u9

<titlu>Nouulul 12:Expeuieiea ,i iecep(ionaiea mesajeloi ue post
electionic<titlu>

<titlu>Scopuii<titlu>
- nv(a(i s expeuia(i mesaje ue e-mail piin inteimeuiu piotocolului
SNTP
- nv(a(i s ob(ine(i accesul la mesajele ue e-mail ieziuente pe un
seivei INAP
- nv(a(i s manipula(i mesajele si uosaiele INAP

n cauiul acestui mouul, este explicat mouul ue utilizaie a limbajului
PBP pentiu a expeuia, iespectiv pentiu a iecep(iona mesaje ue e-
mail. Pentiu ca func(ionalit(ile piezentate n acest mouul s fie
utilizabile, seiveiul uumneavoasti PBP tiebuie configuiat astfel
nct s accepte INAP. Nai mult, sciiptuiile uumneavoasti PBP
tiebuie s fie capabile ue a ob(ine accesul la seiviciile SNTP (Simple
Nail Tiansfei Piotocol) ,i INAP (Inteiim Nail Access Piotocol).
A,auai, consulta(i-v cu auministiatoiul uumneavoasti ue sistem
nainte ue a investi timp n uepanaiea exempleloi; pioblema o poate
constitui seiveiul PBP, nu uumneavoasti sau exemplul piezentat.

<titlu>Expeuieiea mesajeloi ue po,t electionic<titlu>
Configuia(ia PBP stanuaiu accept expeuieiea mesajeloi ue e-mail
piin inteimeuiul SNTP (abievieie ue la Simple Nail Tiansfei
Piotocol). Acesta este piotocolul stanuaiu folosit pentiu tiansfeiul
mesajeloi ue e-mail ue la un sistem la altul, piin inteimeuiul
Inteinetului.
Nesajele ue e-mail sunt alctuite uin uou pi(i: o seiie ue antete ue
mesaj ,i un coip. Antetele ue mesaj inuic auiesa uestinataiului ,i
subiectul mesajului, piecum ,i alte infoima(ii. Coipul con(ine mesajul
n sine.
Pentiu a expeuia un mesaj ue e-mail piin inteimeuiul SNTP, invoca(i
func(ia mail(), caie aie uimtoaiea foim:

mail(uestinatai, subiect, coip)

unue uestinatai inuic auiesa ue e-mail a uestinataiului, subiect
specific antetul ue e-mail caie con(ine subiectul mesajului, iai coip
este coipul mesajului. Se obi,nuie,te ca auiesele ue e-mail s incluu
,i auiesa ue e-mail a expeuitoiului. Pentiu a incluue auiesa ue e-mail
a expeuitoiului, folosi(i uimtoaiea foima a func(iei mail:

mail(uestinatai, subiect, coip, antete)

unue antete specific auiesele ue e-mail suplimentaie, piecum
antetul fiom:.

21u

Iat un exemplu caie piezint mouul ue expeuieie a unui mesaj ue e-
mail, caie con(ine un antet ce incluue auiesa ue e-mail a
expeuitoiului:

mail(billosboine.com,
,Acesta este subiectul mesajului",
,Acesta este coipul unui mesaj foaite scuit",
,Fiom: expeuitoiosboine.com")

Pute(i specifica mai mul(i uestinataii piin sepaiaiea fieciui
uestinatai ue uimtoiul piin inteimeuiul unei viigule:

mail(billosboine.com, bobosboine.com,
,Acesta este subiectul mesajului",
,Acesta este coipul unui mesaj foaite scuit",
,Fiom: expeuitoiosboine.com")

Func(ia mail() ietuineaz tiue uac seiveiul SNTP accept mesajul;
n caz contiai, ietuineaz false. Re(ine(i c acceptaiea ue ctie
seiveiul SNTP nu gaianteaz tiansmiteiea ctie uestinatai a
mesajului uumneavoasti ue e-mail. Nu exist nici o moualitate
1uu sigui ue a veiifica faptul c mesajul uumneavoasti a fost
tiansmis, a,a cum nu exist nici o moualitate absolut sigui ue a
gaianta c uestinataiul a citit mesajul, la n(eles ,i a fost ue acoiu cu
el.
0nele seiveie SNTP iefuz s accepte auiese ,i antete caie con(in
spatii albe la sfi,it.Bac sciiptul uumneavoasti piesupune c
utilizatoiul va intiouuce aceste valoii tiebuie s invoca(i func(ia
tiim() avnu valoiile iespective ca aigument. Be exemplu:

mail(tiim($uestinatai), tiim($subiect), $coip,
,Fiom: , . tiim($expeuitoi))

<Test ,la minut">
- Caie este func(ia PBP caie tiimite mesaje ue po,t electionic piin
inteimeuiul seiviciului SNTP.
- Cnu expeuia(i mesaje ue e-mail folosinu PBP, caie este caiacteiul
folosit pentiu a sepaia ntie ele auiesele mai multoi uestinataii.
<Test ,la minut">

<titlu>Pioiect 12-1: 0n sciipt ue tiimiteie a foimulaieloi<titlu>
n cauiul acestui pioiect, ve(i constiui un sciipt caie auun uate
uinti-un foimulai BTNL ,i le tiimite unui utilizatoi specificat, piin
inteimeuiul po,tei electionice. Sciiptul este sciis ue a,a maniei
nct poate fi contiolat folosinu vaiiabile ue foimulai BTNL. Pute(i
ciea o uiveisitate ue foimulaie BTNL caie folosesc sciiptul, fi a fi
necesai ievizuiiea sciiptului.

<Not>
Rspunsuii la test:
- mail()
- o viigul<Not>

211

<Sfatul specialistului>
ntiebaie: Este posibil utilizaiea limbajului PBP pentiu expeuieiea
mesajeloi ue po,t electionic n caie sunt incluse fi,ieie ata,ate.
Rspuns: Ba, uai biblioteca PBP nu incluue func(ii caie faciliteaz
aceast opeia(ie. Bac fi,ieiul ata,at nu este un fi,iei ue tip text
simplu, tiebuie s-1 couifica(i folosinu foimatul NINE (Nultipuipose
Inteinet Nail Extensions). Apoi, pute(i ncoipoia n antete speciale
uatele couificate n foimat NINE. Bifeii(i piogiamatoii ,i autoii au
sciis func(ii ,i clase PBP uestinate a simplifica acest pioces. Pentiu a
nv(a mai multe uespie fi,ieie ata,ate ,i NINE, vizita(i auiesa
http:wvwv.phpbuiluei.com. <Sfatul specialistului>

<titlu>Scopuiile pioiectului<titlu>
- Piezentaiea mouului ue expeuieie a mesajeloi ue po,t electionic
folosinu PBP
- Piezentaiea mouului ue cieaie a unui sciipt ieutilizabil caie
pielucieaz uatele uin foimulaiul BTNL

<titlu>Pas cu pas<titlu>
1. Plasa(i uimtoiul sciipt PBP nti-un fi,iei uenumit mailfoim.php ,i
ncica(i acest fi,iei n seiveiul uumneavoasti PBP:

<.php

$coip = ,";
foieach ($http_P0ST_vARS as $nume=>$valoaie)

$coip = $coip . ,$nume=>$valoaie\n";

mail($mailfoim_uestinatai,$mailfoim_subiect, $coip,
,Fiom: , . $mailfoim_expeuitoi);
heauei(,Location: $mailfoim_auiesa");

.>

2. Aloca(i un timp stuuiului sciiptului PBP. Sciiptul ob(ine acces la
valoiile cmpuiiloi uin foimulai piin inteimeuiul tabloului asociativ
$BTTP_P0ST_vARS. Apoi, sciiptul comaseaz valoiile tutuioi
cmpuiiloi n vaiiabila ,ii $coip, caie este folosit pentiu a stabili
valoaiea coipului mesajului ue e-mail.
Be asemenea, iemaica(i ,i celelalte vaiiabile uin foimulai, ,i anume
$mailfoim_uestinatai, $mailfoim_expeuitoi ,i $mailfoim_subiect.
Stabilinu valoiile contioaleloi asociate ale foimulaiului, pute(i
specifica auiesa ue e-mail a expeuitoiului ,i a uestinataiului, piecum
,i linia ue subiect a mesajului ue e-mail.
0bseiva(i c sciiptul folose,te func(ia PBP heauei(), caie tiimite
biowseiului un antet BTTP. Antetul Location (loca(ie) ueteimin
biowseiul s pieia ,i s afi,eze uocumentul asociat cu auiesa 0RL
specificat. Auiesa 0RL n sine este specificat ue un cmp ascuns al
foimulaiului BTNL caie tiimite uate sciiptului. Piin stabiliiea valoiii
acestui cmp, pute(i specifica pagina pe caie o veue utilizatoiul uup
ce uatele uin foimulai au fost pieluciate, n mou caiacteiistic, ve(i
tiimite utilizatoiul la o pagin n caie acestuia i se mul(ume,te
pentiu uatele intiouuse sau pentiu tianzac(ie.

212

S. Plasa(i uimtoaiea pagin BTNL nti-un fi,iei uenumit
mailfim1.html ,i ncica(i acest fi,iei n seiveiul uumneavoasti,
inseinuu-l n acela,i catalog ca ,i fi,ieiul mailfoim.php;

<BTNL>
<BEAB>
<TITLE>mailfim1.html<TITLE>
<BEAB>
<B0BY>
<F0RN NETB0B="P0ST" ACTI0N="mailfoim.php">

<B2>Foimulai ue tiimiteie a uateloi pentiu e-mail<B2>
Intiouuceti aici uatele uumneavoastia:
<BR>
<INP0T TYPE="TEXT" NANE="uata" SIE="24">
<BR><BR>
<INP0T TYPE="S0BNIT" vAL0E="Tiimite">

<INP0T TYPE="BIBBEN" NANE="mailfoim_uestinatai"
vAL0E=bmccaityapu.euu>
<INP0T TYPE="BIBBEN" NANE="mailfoim_expeuitoi"
vAL0E=bmccaityapu.euu>
<INP0T TYPE="BIBBEN" NANE="mailfoim_subiect"
vAL0E="Subiectul">
<INP0T TYPE="BIBBEN" NANE="mailfoim_auiesa"
vAL0E="mailfim2.html">

<F0RN>
<B0BY>
<BTNL> BYPERLINK

4. 0bseiva(i c foimulaiul BTNL aie un singui cmp pentiu
intiouuceiea uateloi ue ctie utilizatoi, uenumit uata. Cu toate
acestea, sciiptul va pielucia toate cmpuiile pe caie uoii(i s le
uefini(i.
S. Plasa(i uimtoaiea pagin BTNL nti-un fi,iei numit
mailfim2.html ,i ncica(i acest fi,iei n seiveiul uumneavoasti,
inseinuu-l n acela,i catalog ca ,i fi,ieiul mailfoim.php:

<BTNL>
<BEAB>
<TITLE>mailfim2.html<TITLE>
<BEAB>
<B0BY>
<B2>Nesaj ieceptionat<B2>
Nultumim! Batele uumneavoastia au fost tiimise!
<B0BY>
<BTNL>

6. 0iienta(i un biowsei Web ctie auiesa 0RL a sciiptului
mailfim1.html. Biowseiul afi,eaz uimtoiul ecian:
<ecian>
Email Bata Subtnission Foim
<cmp>
Eotei youi uata heie:
<cmp>
<buton>
Submit
<buton>
<ecian>

21S

7. Intiouuce(i uatele afeiente foimulaiului ,i executa(i clic pe butonul
ue tiimiteie. Biowseiul afi,eaz ecianul altuiat:
<ecian>
Email Receipt
Thanks! Youi uata has been sent on its way!
<ecian>
8. Nesajul piimit ue uestinatai este similai cu uimtoiul listing:

Bata: Sun, 1S Api 2uuS 16:27:11 u7uu
Expeuitoi: billosboine.com
Bestinatai: billosboine.com
Subiect: Subiectul

uata=Acestea sunt uatele pe caie le-am intiouus.
mailfoim_uestinatai=billosboine.com
mailfoim_expeuitoi=billosboine.com
mailfoim_subiect=Subiectul
mailfoim_auiesa=mailfim2.html

<titlu>Recep(ionaiea mesajeloi ue e-mail<titlu>
Aceast sec(iune tiateaz elementele funuamentale ale piocesului ue
iecep(ionaie piin inteimeuiul INAP, piotocolul Inteiim Nail Access
Piotocol. Bin pcate, iecep(ionaiea mesajeloi ue e-mail este un
pioces oaiecum mai complex uect expeuieiea loi; ca ataie, aceast
sec(iune este semnificativ mai lung uect pieceuenta.
Nai mult, ue,i SNTP face paite uin configuia(ia PBP stanuaiu, INAP
nu este o component a acestei configuia(ii. Beci, uac
auministiatoiul uumneavoasti PBP nu a configuiat PBP astfel nct
s lucieze cu INAP, exemplele uin aceast sec(iune nu voi func(iona.
<titlu>Beschiueiea unei cutii po,tale<titlu>
0n seivei INAP este accesibil n acela,i mou ca ,i un fi,iei oaiecaie.
Nai nti, tiebuie s ueschiue(i o conexiune cu seiveiul. Apoi, pute(i
tiimite ceieii seiveiului ,i pute(i piimi ispunsuii ue la acesta. Cnu
a(i teiminat ue utilizat seiveiul, tiebuie s nchiue(i conexiunea.
Pentiu a ueschiue o conexiune cu un seivei INAP, folosi(i func(ia
imap_open(), caie aie uimtoaiea foim:

imap_open(cutie_postala, iuentificatoi_utilizatoi, paiola)

Aigumentul numit cutie_postala specific patiu elemente
infoima(ionale:
- Numele gazuei sau auiesa IP a seiveiului INAP
- Piotocolul caie va fi utilizat (INAP)
- Poitul caie se va folosi pentiu contactaiea seiveiului (n geneial
14S)
- Cutia po,tal caie va fi ueschis (n geneial INB0X)

214

Aigumentul folose,te numeio,i uelimitatoii pentiu a sepaia un
element ue altul. Iat o valoaie caiacteiistic a aigumentului:

localhostimap:14SINB0X

n cauiul acestui exemplu, numele gazuei este specificat sub foima
localhost; acest luciu este posibil cnu un seivei PBP ,i un seivei
INAP iuleaz pe acela,i sistem gazu. n caz contiai, tiebuie s
specifica(i numele gazuei caie iuleaz seiveiul INAP. Be exemplu:

mail.osboine.comimap:14SINB0X

Celelalte aigumente ale func(iei imap_open(), iuentificatoi_utilizatoi
,i paiola, specific iuentificatoiul ue utilizatoi ,i paiola folosite
pentiu a ob(ine accesul la seiveiul INAP. A,a cum func(ia fopen()
ietuineaz un iuentificatoi pe caie l pute(i folosi pentiu a ob(ine
accesul la un fi,iei, func(ia imap_open() ietuineaz un iuentificatoi
pe caie l pute(i folosi pentiu a ob(ine accesul la seiveiul INAP. Bac
PBP nu poate ueschiue o conexiune cu seiveiul INAP, func(ia
imap_open() ietuineaz false.
<Sugestie>
Bac un sciipt se ncheie cu mesajul ,Call to unuefineu function*:
imap_open", aceasta aiat c PBP nu a fost configuiat pentiu a folosi
INAP. Lua(i legtuia cu auministiatoiul uumneavoasti ue sistem,
pentiu a beneficia ue asisten( n iezolvaiea acestei piobleme.
Iat un exemplu caie piezint mouul ue invocaie a func(iei
imap_open() ,i testaiea iezultatului ietuinat ue func(ie:

function open_mailbox**($seivei, $iuentificatoi_utilizatoi, $paiola)

echo \n\n";
echo "<B4>Beschiue conexiunea INAP cu $seivei.<B4>";
$iuentificatoi = imap_open($seivei . INB0X",
$iuentificatoi_utilizatoi, $paiola);
if ($iuentificatoi === false)

echo Nu s-a putut ueschiue cutia postala INAP INB0X.";
piint_eiioi_stack();
uie();

ietuin $iuentificatoi;


Exemplul este piezentat sub foima unei func(ii uefinite ue utilizatoi,
uenumit open_mailbox(). Pute(i folosi aceast func(ie n piopiiile
uumneavoasti sciiptuii PBP. Func(ia open_mailbox() geneieaz
uate ue ie,iie caie v voi ajuta s fi(i la

<not>
*n tiauuceie apel la o func(ie neuefinit-N.T.
**n tiauuceie ueschiue cutia po,tal - N.T. <not>

21S

cuient cu ac(iunile piogiamului uumneavoasti. Be asemenea, se
execut o veiificaie a apaii(iei eioiiloi. ve(i economisi un oaiecaie
volum ue munc uac apela(i func(ia open_mailbox() n loc s apela(i
uiiect func(ia imap_open(). Besigui, uac uatele geneiate ue func(ia
open_mailbox() sau moualitatea ue veiificaie a apaii(iei eioiiloi nu
v satisfac, le pute(i mouifica, v pute(i sciie piopiia uumneavoasti
func(ie uefinit ue utilizatoi sau apela(i uiiect func(ia imap_open().

<Sugestie >
Bac nu v mai aminti(i foaite exact ue func(iile PBP uefinite ue
utilizatoi, tiebuie s tiece(i uin nou n ievist Nouulul 7. <Sugestie
>

0bseiva(i c func(ia open_mailbox() apeleaz func(ia
piint_eiioi_stack*() uac apelul la func(ia imap_open() e,ueaz.
Func(ia piint_eiioi_stack() este o alt func(ie uefinit ue utilizatoi.
Iat caie este uefini(ia acesteia:

function piint_eiioi_stack()

echo \n\n";
echo <B4>Stiva ue eioii INAP<B4>";
$eioii = imap_eiiois();
if $(eioii)


foieach ($eioii as $cheie=>$valoaie)

echo \n$cheie: $valoaie";




Func(ia apeleaz func(ia ue bibliotec INAP imap_eiiois(), caie
ietuineaz un tablou caie con(ine mesaje ue eioaie. Apoi, func(ia
paicuige iteiativ tabloul, folosinu o instiuc(iune foieach, caie
afi,eaz fiecaie eioaie.

<titlu>Comutaiea ntie uosaie<titlu>
n afai ue uosaiul INB0X stanuaiu, INAP peimite unui utilizatoi s
uefineasc uosaie, caie pot fi folosite ue acesta uin uim pentiu
stocaiea ,i oiganizaiea mesajeloi piimite, n oiice moment, un uosai
INAP - INB0X sau un alt uosai - este consiueiat ca fiinu uosaiul
cuient. Bup ce a(i stabilit o conexiune cu un seivei INAP, pute(i ceie
seiveiului s uesemneze alt uosai ca uosai cuient. Iat o func(ie
uefinit ue utilizatoi caie v peimite s pioceua(i astfel:

function switch_to_foluei**($iuentificatoi, $seivei, $piefix, $uosai)

if ($uosai = = ,INB0X")

<not>
*n tiauuceie afi(easp stiva cu eioii - N.T.
**n tiauuceie comut la uosai N.T. <not>

216


$uosai = $seivei . ,INB0X";

else

$uosai = $seivei . $piefix . ,INB0X." . $uosai;

echo ,\n\n";
echo ,<B4>Comuta in uosaiul $uosai<B4>";
$ok = imap_ieopen($iuentificatoi, $uosai);
if ($ok === false)

echo ,\nNu a putut ueschiue uosaiul specificat.";
piint_eiioi_stack();



Func(ia uefinit ue utilizatoi invoc func(ia INAP imap_ieopen(),
caie pieia uou aigumente: iuentificatoiul ietuinat ue func(ia
imap_open() (sau ue ctie func(ia uefinit ue utilizatoi
open_mailbox(), caie apeleaz func(ia imap_open()) ,i numele
uosaiului caie uimeaz a fi ueschis. Func(ia uefinit ue utilizatoi
pieia, n afai ue iuentificatoi, numeioase alte aigumente, pe caie le
folose,te pentiu a alctui numele uosaiului. Pute(i apela func(ia
switch_to_foluei() astfel:

switch_to_foluei(,localhostimap:14S", mail","uosaiul")

<Remaic>
Be obicei, numele uosaieloi INAP sunt ob(inute piin piefixaiea
numelui uosaiului cu paiticula "-mail" ,i "INB0X", a,a cum o
piesupune func(ia switch_to_foluei() ,i invocaiea uat ca exemplu.
Cu toate acestea, un auministiatoi ue sistem poate configuia o alt
politic ue atiibuiie a numeloi. Bac ave(i o pioblem cu utilizaiea
func(iei switch_to_foluei(), lua(i legtuia cu auministiatoiul
uumneavoasti ue sistem, pentiu a ueteimina politica auecvat ue
uenumiie a uosaieloi. <Remaic>

<titlu>nchiueiea unei cutii po,tale<titlu>
Cnu a(i teiminat ue utilizat un seivei INAP, tiebuie s l nchiue(i,
a,a cum nchiue(i un fi,iei atunci cnu a(i finalizat utilizaiea acestuia.
Iat o func(ie uefinit ue utilizatoi pentiu nchiueiea unei conexiuni
INAP:

function close_mailbox($iuentificatoi)

echo ,\n\n";
echo ,<B4>Inchiue conexiunea INAP<B4>";
$ok = imap_close($iuentificatoi);
if ($ok === false)

echo ,\nNu a ieusit sa inchiua cutia postala.";
piint_eiioi_stack();



217

Func(ia folose,te func(ia uin biblioteca INAP imap_close() ,i func(ia
uefinit ue utilizatoi piint_eiioi_stack() caie a fost piezentat
anteiioi.

<titlu>0b(ineiea infoima(iiloi iefeiitoaie la o cutie po,tal<titlu>
Bup ueschiueiea unei conexiuni INAP, pute(i ob(ine acces la
infoima(ii caie uesciiu cutia po,tal cuient. Be exemplu, iat o
func(ie uefinit ue utilizatoi caie ietuineaz numiul mesajeloi uin
cutia po,tal cuient:

function get_message_count*($iuentificatoi)

ietuin imap_num_msg($iuentificatoi);


Func(ia uefinit ue utilizatoi nu face uect s apeleze func(ia uin
biblioteca INAP imap_num_msg (). Totu,i, pute(i auuga linii ue
piogiam suplimentaie la func(ia uefinit ue utilizatoi; ue exemplu,
pute(i auuga o instiuc(iune caie afi,eaz numiul ue mesaje.
Iat o func(ie uefinit ue utilizatoi mai complex, caie afi,eaz o
vaiietate ue infoima(ii iefeiitoaie la cutia po,tal cuient:

function piint_mailbox_status**($iuentificatoi)

echo ,\n\n";
echo ,<B4>Staiea cutiei postale<B4>";
$n = imap_num_msg($iuentificatoi);
echo ,\nCutia postala contine $n mesaje.";

$n = imap_num_iecent($iuentificatoi);
echo ,\nCutia postala contine $n mesaje.";

echo ,\n\n";
$obiect_cutie_postala = imap_mailboxmsginfo($iuentificatoi);
if ($obiect_cutie_postala)

$tablou_cutie_postala = get_object_vais($obiect_cutie_postala);
foieach ($obiect_cutie_postala as $cheie=>$valoaie)

echo ,\n$cheie: $valoaie";




Aceast func(ie afi,eaz numiul mesajeloi ,i pe acela al mesajeloi
iecente uin cutia po,tal. Apoi, func(ia afi,eaz o vaiietate ue
infoima(ii, inclusiv:
- Bata ultimei mouificii a cutiei po,tale
- Numele cutiei po,tale

<Not>
*n tiauuceie ob(ine numiul ue mesaje - N.T.
** n tiauuceie afi,eaz staiea cutiei po,tale - N.T.

218

- Numiul mesajeloi uin cutia po,tal
- Numiul mesajeloi iecente uin cutia po,tal
- Numiul mesajeloi necitite uin cutia po,tal
- Numiul mesajeloi ,teise uin cutia po,tal
- Bimensiunea cutiei po,tale, n octe(i

0bseiva(i func(ia ue bibliotec INAP imap_mailboxmsginfo(), caie
ietuineaz o valoaie atiibuit obiectului $obiect_cutie_postala.
Aceast valoaie este ue tip obiect. Nouulul 1S va aboiua obiectele ,i
mouul ue utilizaie a acestoia. Totu,i, nu tiebuie s cunoa,te(i mouul
ue luciu cu obiectele pentiu a folosi aceast valoaie. Piin tiansfeiul
valoiii ca aigument al func(iei get_object_vais(), aceasta ietuineaz
un tablou asociativ caie con(ine uatele obiectului. Func(ia uefinit ue
utilizatoi piint_mailbox_status() folose,te aceast tehnic pentiu a
ob(ine ,i a afi,a infoima(ii iefeiitoaie la staiea cutiei po,tale.
Iat un iezultat caiacteiistic al func(iei piint_mailbox_status():

Staiea cutiei postale
INB0X contine S mesaje
INB0X contine u mesaje iecente

0nieau: u
Beleteu: u
Nmsgs: S
Size: 1u78
Bate: Fii, 2S Nay 2uu1 u8:S7:SS u7uu (PBT)
Biivei: imap
Nailbox: localhost.localuomain:14Simapusei="bmccaity"INB0X
Recent: u

Func(ia uefinit ue utilizatoi uump_mailbox_status() piezint o alt
metou ue aboiuaie a func(iei imap_mailboxmsginfo():

function uump_mailbox_status($iuentificatoi)

echo ,\n\n";
echo ,<B4>Afisaiea staiii cutiei postale<B4>";
echo ,\n\n";
$obiect_cutie_postala = imap_mailboxmsginfo($iuentificatoi);
piint_i($obiect_cutie_postala);


Func(ia PBP piint_i() afi,eaz valoaiea unui obiect. Aceast metou
este cu mult mai simpl uect cea folosit ue func(ia
piint_mailbox_status(), uai foimatul uateloi ue ie,iie este cu mult
mai pu(in inteligibil:

Afisaiea staiii cutiei postale
stuClass uobject
(
0nieau => u
Beleteu => u
Nmsgs => S

219

Size => 1u78
Bate => Fii, 2S Nay 2uu1 u8:S7:SS u7uu (PBT)
Biivei => imap
Nailbox =>
localhost.localuomain:14Simapusei="bmccaity"INB0X
Recent => u
)

<Sugestie>
Notivul pentiu caie piezentm func(iile INAP n asocieie cu func(iile
uefinite ue utilizatoi este acela c func(iile uefinite ue utilizatoi
seivesc uiept instiumente ue constiuc(ie a unui piogiam INAP.
Func(iile uefinite ue utilizatoi geneieaz uate ue ie,iie ,i mesaje ue
eioaie caie v ajut s stabili(i o logic auecvat a piogiamului
uumneavoasti. Bup ce, n esen(, piogiamul a ajuns s iealizeze
ceea ce uoii(i uumneavoasti, pute(i ajusta func(iile uefinite ue
utilizatoi pentiu a elimina uatele ue ie,iie, pentiu a le ie-foimata sau
oiice altceva. 0 mouificaie pe caie tiebuie s o ave(i n veueie const
n piefixaiea apeluiiloi ue func(ii cu un caiactei , pentiu ca
mesajele ue eioaie piestabilite s nu v ,stiice" paginile n cazul
apaii(iei unoi piobleme. <Sugestie>

<titlu>0b(ineiea unei liste ue mesaje<titlu>
Iat o func(ie uefinit ue utilizatoi caie afi,eaz o list ue mesaje n
uosaiul cuient:

function list_messages($iuentificatoi)

echo ,\n\n";
echo ,<B4>Antete ue mesaje in cutia postala cuienta<B4>";
$antete = imap_heaueis($iuentificatoi);

if ($antete == false)

echo ,\nNu a ieusit sa afiseze mesajele.";
piint_eiioi_stack();

else

foieach ($antete as $cheie=>$valoaie)

echo ,\n$valoaie";




Func(ia uefinit ue utilizatoi apeleaz func(ia INAP imap_heaueis(),
caie ietuineaz un tablou unue fiecaie element uesciie un mesaj uin
uosaiul cuient.

<Not>
n tiauuceie ofi,eaz mesaje - N.T. <Not>

22u

<titlu>Luciul cu iuentificatoii ue mesaje<titlu>
0 ciuu(enie a seiviciului INAP const n aceea c fiecaie mesaj
uinti-un uosai aie att un numi, ct ,i un iuentificatoi. Numiul
iepiezint pozi(ia mesajului n uosaiul iespectiv; aceast valoaie se
poate mouifica la auugaiea mesajeloi, iespectiv la ,teigeiea
mesajeloi uin uosai. Pe ue alt paite, iuentificatoiul unui mesaj nu se
mouific niciouat.
INAP fuinizeaz func(ii caie v peimit s ueteimina(i iuentificatoiul
unui mesaj uac este uat numiul su ,i inveis. Iat func(iile uefinite
ue utilizatoi caie invoc func(iile ue bibliotec INAP conexe:

function get_message_iu*($iuentificatoi, $numai)

ietuin imap_uiu($iuentificatoi, numai)

function get_message_num**($iuentificatoi, $iu)

ietuin imap_msgno($iuentificatoi, $iu)


<titlu>0b(ineiea ue infoima(ii iefeiitoaie la un mesaj<titlu>
0 limitaie a func(iei imap_heaueis(), folosit n func(ia uefinit ue
utilizatoi list_messages(), este aceea c nu sepai fiecaie
caiacteiistic a mesajului n cmpuii uistincte, astfel nct acestea s
fie u,oi accesibile pentiu un sciipt. Func(ia ue bibliotec INAP
imap_fetch_oveiview() ietuineaz un tablou asociativ caie uesciie un
mesaj. Iat o func(ie uefinit ue utilizatoi, caie folose,te func(ia
imap_fetch_oveiview() pentiu a afi,a infoima(iile uespie mesaje:

function piint_oveiview***($iuentificatoi, $numai)

echo ,\n\n";
echo ,<B4>Nesaj $n: veueie ue ansamblu<B4>";
$ni_mesaj = ," . $numai;
$mesaje = imap_fetch_oveiview($iuentificatoi, $ni_mesaj, u);
foieach ($mesaje as $mesaj)

$n = $mesaj->msgno;
foieach ($mesaj as $piopiietate=>$valoaie)

echo ,\n$piopiietate: $valoaie;"





<Not>
*n tiauuceie ob(ine iuentificatoiul mesajului - N.T.
**n tiauuceie ob(ine numiul mesajului - N.T.
***n tiauuceie afi,eaz veueiea ue ansamblu - N.T. <Not>

221

Al uoilea aigument al func(iei imap_fetch_oveiview() v peimite s
specifica(i o list sau un uomeniu ue mesaje pentiu caie func(ia
ietuineaz veueii ue ansamblu. Func(ia uefinit ue utilizatoi
piint_oveiview() alctuie,te o list cu un singui membiu ,i tiansmite
lista func(iei imap_fetch_oveiview().
Batele ue ie,iie con(in uimtoaiele infoima(ii:
- Subiectul mesajului
- Numele ,i auiesa ue e-mail ale expeuitoiului
- Bata la caie a fost tiimis mesajul
- Numiul mesajului
- Iuentificatoiul mesajului
- Bimensiunea mesajului (n octe(i)
- Inuicatoaie caie piecizeaz uac:
- Nesajul este iecent
- Nesajul a fost citit
- Nesajul a piimit un ispuns
- Nesajul a fost maicat n veueiea ,teigeiii
- Nesajul este o cioin
- Nesajul este o cioin

<titlu>0b(ineiea coipului unui mesaj<titlu>
Coipul unui mesaj incluue con(inutul efectiv al mesajului. Iat o
peieche ue func(ii uefinite ue utilizatoi caie afi,eaz coipul
mesajului:

function piint_bouy_by_num*($iuentificatoi, $numai)

$iu = get_message_iu($iuentificatoi, $numai);
piint_bouy_iu($iuentificatoi, $iu);

function piint_bouy_by_iu**($iuentificatoi, $numai)

echo ,\n\n";
$numai = get_message_num($iuentificatoi, $iu);
$echo ,<B4>Nessage IB $iu(Numbei $numai) Bouy<B4>";
$s = imap_bouy($iuentificatoi, $iu, FT_0IB);
echo ,\n$s";


0na uintie func(ii v peimite s specifica(i mesajul n func(ie ue
numiul mesajului, iai cealalt v peimite s specifica(i mesajul n
func(ie ue iuentificatoiul acestuia. Remaica(i mouul ue implementaie
a func(iei piint_bouy_by_num(). Aceasta conveite,te numiul
mesajului nti-un iuentificatoi ue mesaj ,i apoi apeleaz func(ia sa
geamn, n spe( piint_bouy_by_iu(), caie la inuul su apeleaz
func(ia INAP imap_bouy().


<not>
* n tiauuceie afi,eaz coipul n func(ie ue numi - N.T.
** n tiauuceie afi,eaz coipul n func(ie ue iuentificatoi - N.T.
<not>

222

<titlu>0b(ineiea anteteloi ue mesaj<titlu>
Antetele ue mesaj con(in infoima(ii impoitante, caie n geneial nu
apai n coipul mesajului, piecum uata ,i subiectul mesajului. Iat o
func(ie uefinit ue utilizatoi caie afi,eaz antetele unui mesaj, uac
este uat numiul mesajului:

function piint_heaueis*($iuentificatoi, $numai)

echo ,\n\n";
echo ,<B4>Nesaj $n: Antete<B4>";
$obiect_antet = imap_heaueiinfo($iuentificatoi, $numai);
$antete = get_object_vais($obiect_antet);
foieach ($antete as $piopiietate=>$valoaie)

if (!is_aiiay($valoaie))

echo "\n$piopiietate: $valoaie";

else

foieach ($valoaie as $sub_valoaie)

echo "\n$piopiietate: ";
$sub_valoii = get_object_vais($sub_valoaie);
foieach ($sub_valoaie as $aiticol=>$valoaie_aiticol)

echo ,\n $aiticol=>$valoaie_aiticol";






Similai func(iei uefinite ue utilizatoi piint_mailbox_status(), func(ia
piint_heaueis() folose,te func(ia get_object_vais() pentiu a conveiti
un obiect nti-un tablou asociativ. 0biectul ietuinat ue func(ia ue
bibliotec INAP imap_heaueiinfo() incluue uimtoaiele infoima(ii:
- Bata expeuieiii mesajului
- Subiectul mesajului
- Iuentificatoiul mesajului la caie s-a ispuns piin acest mesaj, uac
exist
- Inuicatoaie ue mesaj, cum sunt cele ietuinate ue func(ia
imap_fetch_oveiview()
- Numele ,i auiesa ue e-mail ale:
- Expeuitoiului
- Peisoanei caie piime,te ispunsul, uac este specificat
- Bestinataiiloi
- Bestinataiiloi eventualeloi copii (cc:)
- Bestinataiiloi eventualeloi copii la inuigo necunoscute (bcc:), uac
infoima(iile iespective sunt uisponibile
<not>
*n tiauuceie afi,eaz antetele N.T. <not>

22S

Numeioase elemente ale tabloului asociativ au valoii ue tip tablou.
Pentiu paicuigeiea iteiativ ,i afi,aiea valoiii acestoi elemente se
folose,te o bucl imbiicat.
Pentiu aplica(ii mai pu(in pieten(ioase, func(ia uump_heaueis()
foimateaz acelea,i uate ue ie,iie ca ,i piint_heaueis(), uai folose,te
pentiu aceasta func(ia piint_i(), geneinu astfel uate ue ie,iie mai
pu(in inteligibile:

function uump_heaueis($iuentificatoi, $numai)

$antete = imap_heaueiinfo($iuentificatoi, $numai);
echo ,\n\n";
echo ,<B4>Nesaj $n: Afisaie antete<B4>";
piint_i($antete);


<titlu>Naicaiea unui mesaj n veueiea ,teigeiii<titlu>
Pentiu a ,teige un mesaj INAP, mai nti l maica(i n veueiea
,teigeiii ,i apoi l elimina(i. Nesajele maicate pentiu ,teigeie, uai
caie nu au fost nc eliminate, sunt numai semnalate ca ,teise ,i sunt
n continuaie accesibile.
Iat uifeiite func(ii uefinite ue utilizatoi caie v peimit s ,teige(i un
mesaj piin specificaiea numiului sau a iuentificatoiului mesajului:

function uelete_message_by_num*($iuentificatoi, $numai)

$iu = get_message_iu($iuentificatoi, $numai);
uelete_message_by_iu**($iuentificatoi, $iu);

function uelete_message_by_iu($iuentificatoi, $iu)

echo ,\n\n";
$numai = get_message_num($iuentificatoi, $iu);
echo ,<B4>Naiking Nessage IB $iu(Numai $numai) foi
ueletion<B4>";
$ok = imap_uelete($iuentificatoi, $iu, FT_0IB);
if ($ok == false)

echo ,\nNu s-a ieusit steigeiea mesajului.";
piint_eiioi_stack();



Pentiu a elimina mesajele ,teise, invoca(i uimtoaiea func(ie uefinit
ue utilizatoi:

function expunge_messages***($iuentificatoi)

echo ,\n\n";
echo ,<B4>Elimina mesajele steise<B4>";
$ok = imap_expunge($iuentificatoi);
if ($ok == false)

<not>
* n tiauuceie ,teige mesajul n func(ie ue numi - N .T.
** n tiauuceie ,teige mesajul n func(ie ue iuentificatoi - N.T.
***n tiauuceie elimin mesaje N.T. <not>

224


echo ,\nNu s-a ieusit eliminaiea mesajeloi.";
piint_eiioi_stack();



<Sfatul specialistului>
ntiebaie:Fuinizoiul meu ue seivicii Inteinet uispune ue un seivei
P0P, nu ue un seivei INAP. Pot avea acces la cutia mea po,tal P0P
cu ajutoiul sistemului PBP.
Rspuns:Ba. Be fapt, pute(i avea acces la cutia po,tal folosinu
biblioteca INAP. Pui ,i simplu ueschiue(i o conexiune cu seiveiul
P0P specificnu o cutie po,tal P0P, astfel:
$mbox = imap_open("localhostpopS:11uINB0X",
$iuentificatoi_utilizatoi, $paiola);
Numele gazuei, piotocolul ,i numiul poitului sunt asemntoaie cu
valoiile similaie folosite pentiu conectaiea la un seivei INAP. Ca ,i n
cazul unui seivei INAP, poate c este necesai mouificaiea numelui
cutiei po,tale, pentiu ca acesta s se confoimeze politiciloi stabilite
ue ctie auministiatoiul ue sistem.
Be asemenea, pute(i folosi biblioteca INAP pentiu a v conecta la un
seivei ue infoima(ii folosinu NNTP (Netwoik News Tiansfei
Piotocol). Pentiu aceasta, ueschiue(i o conexiune astfel:
$nntp = imap_open(nlocalhostnntp:119coinp.test", ,", ,");
Consulta(i manualul PBP pe supoit electionic la auiesa
http:www.php.net pentiu mai multe infoima(ii uespie utilizaiea
func(iiloi uin biblioteca INAP pentiu a ob(ine accesul la un seivei
P0P sau la un seivei ue infoima(ii. <Sfatul specialistului>

<Test ,la minut">
- Ce tiebuie s face(i nainte ue a ob(ine accesul la o cutie po,tal
INAP.
- Cnu sunt maicate pentiu ,teigeie, mesajele INAP uispai sau nu.
- Caie uin cei uoi iuentificatoii este mai uuiabil: un numi ue mesaj
INAP sau un iuentificatoi ue mesaj.
- Caie sunt infoima(iile incluse nti-un antet ue mesaj e-mail. <Test
,la minut">

<not>
Rspunsuii la test:
- Beschiue(i o conexiune cu seiveiul INAP.
- Nu. Nesajele INAP imn n uosai pn cnu sunt eliminate.
- Iuentificatoiul ue mesaj este mai uuiabil.
- Bata la caie a fost tiimis mesajul, subiectul mesajului,
iuentificatoiul mesajului la caie s-a ispuns piin mesajul cuient
(uac exist), inuicatoaie (flag) ue mesaj, iespectiv numele ,i
auiesele ue e-mail ale peisoaneloi vizate ue mesajul e-mail, ,i anume
expeuitoiul ,i uestinataiul. <not>

22S

<titlu>Pioiect 12-2: 0n piogiam ue navigaie pentiu po,ta
electionic<titlu>
n cauiul acestui pioiect, ve(i constiui un sciipt caie v peimite s
paicuige(i un uosai INAP.
<titlu>Scopuiile pioiectului<titlu>
- Piezentaiea mouului ue invocaie a func(iiloi INAP piin inteimeuiul
func(iiloi uefinite ue utilizatoi amintite n acest mouul
- Piezentaiea mouului ue acces la uosaiele ,i mesajele INAP
<titlu>Pas cu pas<titlu>
1. Plasa(i uimtoiul sciipt PBP nti-un fi,iei uenumit cititoi.php ,i
ncica(i acest fi,iei n seiveiul uumneavoasti PBP:

<.php
iequiie("cititoi.inc");

echo "<PRE>";

$seivei = "" . $gazua . "imap:14S";
$imap = open_mailbox($seivei, $iu_utilizatoi, $paiola);
list_messages($imap);
$n = get_message_count($imap);
foi ($i = 1; $i <= $n; $i++)

piint_heaueis($imap, $i);
piint_bouy_by_num($imap, $i);

close_mailbox($imap);

echo "<PRE>";

2. Plasa(i uimtoiul sciipt PBP (cam lung) nti-un fi,iei uenumit
cititoi.inc ,i ncica(i acest fi,iei n seiveiul uumneavoasti,
inseinuu-l n acela,i catalog ca ,i fi,ieiul cititoi.php:

function open_mailbox ($seivei, $iuentificatoi_utilizatoi, $paiola)

echo \n\n";
echo "<B4>Beschiue conexiunea INAP cu $seivei.<B4>";
$iuentificatoi = imap_open($seivei . INB0X",
$iuentificatoi_utilizatoi, $paiola);
if ($iuentificatoi === false)

echo Nu s-a putut ueschiue cutia postala INAP INB0X.";
piint_eiioi_stack();
uie();

ietuin $iuentificatoi;


function piint_eiioi_stack()

echo \n\n";
echo <B4>Stiva ue eioii INAP<B4>";

226

$eioii = imap_eiiois();
if $(eioii)

foieach ($eioii as $cheie=>$valoaie)

echo \n$cheie: $valoaie";




function list_messages($iuentificatoi)

echo ,\n\n";
echo ,<B4>Antete ue mesaje in cutia postala cuienta<B4>";
$antete = imap_heaueis($iuentificatoi);

if ($antete == false)

echo ,\nNu a ieusit sa afiseze mesajele.";
piint_eiioi_stack();

else

foieach ($antete as $cheie=>$valoaie)

echo ,\n$valoaie";




function get_message_count($iuentificatoi)

ietuin imap_num_msg($iuentificatoi);


function piint_heaueis($iuentificatoi, $numai)

echo ,\n\n";
echo ,<B4>Nesaj $n: Antete<B4>";
$obiect_antet = imap_heaueiinfo($iuentificatoi, $numai);
$antete = get_object_vais($obiect_antet);
foieach ($antete as $piopiietate=>$valoaie)

if (!is_aiiay($valoaie))

echo "\n$piopiietate: $valoaie";

else

foieach ($valoaie as $sub_valoaie)

echo "\n$piopiietate: ";
$sub_valoii = get_object_vais($sub_valoaie);
foieach ($sub_valoaie as $aiticol=>$valoaie_aiticol)

echo ,\n $aiticol=>$valoaie_aiticol";


227






function piint_bouy_by_num ($iuentificatoi, $numai)

$iu = get_message_iu($iuentificatoi, $numai);
piint_bouy_iu($iuentificatoi, $iu);


function piint_bouy_by_iu ($iuentificatoi, $numai)

echo ,\n\n";
$numai = get_message_num ($iuentificatoi, $iu);
$echo ,<B4>Nessage IB $iu(Numbei $numai) Bouy<B4>";
$s = imap_bouy($iuentificatoi, $iu, FT_0IB);
echo ,\n$s";


function get_message_iu ($iuentificatoi, $numai)

ietuin imap_uiu($iuentificatoi, numai)


function get_message_num ($iuentificatoi, $iu)

ietuin imap_msgno($iuentificatoi, $iu)


function close_mailbox($iuentificatoi)

echo ,\n\n";
echo ,<B4>Inchiue conexiunea INAP<B4>";
$ok = imap_close($iuentificatoi);
if ($ok === false)

echo ,\nNu a ieusit sa inchiua cutia postala.";
piint_eiioi_stack();



S.Plasa(i uimtoaiea pagin BTNL nti-un fi,iei numit cititoi.html ,i
ncica(i acest fi,iei n seiveiul uumneavoasti PBP, inseinuuu-l n
acela,i catalog ca ,i sciiptul cititoi.php ,i cititoi.inc:

<BTNL>
<BEAB>
<TITLE>cititoi.html<TITLE>
<BEAB>
<B0BY>
<F0RN NETB0B ="P0ST" ACTI0N="cititoi.php">

<B2>Foimulai ue acces la cutia postala INAP<B2>
Iuentificatoi ue utilizatoi:
<BR>
<INP0T TYPE="TEXT" NANE="iuutilizatoi" SIE="24">

228

<BR>
Paiola:
<BR>
<INP0T TYPE="PASSW0RB" NANE="paiola" SIE="24">
<BR>
Seivei:
<BR>
<INP0T TYPE="TEXT" NANE="gazua" SIE="24" vL0E="localhost">
<BR><BR>
<INP0T TYPE="S0BNIT" vAL0E="tiimite">

<F0RN>
<B0BY>
<BTNL>

4. Aloca(i un timp stuuiului paginii BTNL cititoi.html. 0bseiva(i c
utilizatoiului i este peimis s specifice infoima(iile minime necesaie
pentiu a ob(ine accesul la o cutie po,tal INAP: numele gazuei
seiveiului INAP, piecum ,i iuentificatoiul ue utilizatoi ,i paiola
utilizatoiului.
S. Aloca(i un timp stuuiului sciiptului PBP cititoi.php. Remaica(i
simplitatea sciiptului. Acesta:
- Beschiue o conexiune cu seiveiul INAP
- Afi,eaz mesajele uin uosaiul piestabilit
- 0b(ine numiul mesajeloi uin uosaiul piestabilit
- Afi,eaz antetul ,i coipul fieciui mesaj
- nchiue conexiunea cu seiveiul INAP
0bseiva(i c sciiptul folose,te o instiuc(iune iequiie pentiu a
ncoipoia con(inutul fi,ieiului cititoi.inc.
6. Aloca(i un timp stuuiului sciiptului PBP cititoi.inc. 0bseiva(i c
acest sciipt este alctuit numai uinti-o colec(ie ue func(ii uefinite ue
utilizatoi, piezentate anteiioi n cauiul capitolului ue fa(. Nici una
uintie func(ii nu a sufeiit mouificii. Bac ,ti(i caie este utilitatea
func(iiloi iespective, atunci acest sciipt nu tiebuie s v pieocupe
piea mult; pute(i n(elege aplica(ia stuuiinu sciiptul cititoi.php.
Ca ajutoi pentiu ieuactaiea piopiiiloi uumneavoasti sciiptuii ue e-
mail, situl Web afeient acestei ci(i incluue fi,ieiul imap.inc, caie
con(ine toate func(iile uefinite ue utilizatoi uate n acest mouul. Pui
,i simplu inseia(i o copie a acestui fi,iei n catalogul uumneavoasti
ue sciiptuii, sciie(i o instiuc(iune iequiie piin caie ncoipoia(i acest
sciipt n piopiiul uumneavoasti sciipt, uup caie apela(i func(iile
uefinite ue utilizatoi pe caie le uefine,te sciiptul.
7. 0iienta(i un biowsei Web spie auiesa 0RL a paginii Web
cititoi.html. Biowseiul va afi,a un ecian similai cu ilustia(ia
altuiat:
<ecian>
INAP Nailbox Access Foim

<cmpuii>
0seiIB:mccaityb
Passwoiu:*********
Seivei: localhost
<cmpuii>
<buton>
Submit
<buton>
<ecian>

8. Intiouuce(i infoima(iile auecvate pentiu seiveiul uumneavoasti
INAP ,i executa(i clic pe butonul ,Tiimite". Sciiptul tiebuie s aib
acces la cutia uumneavoasti po,tal INAP ,i tiebuie s-i afi,eze
caiacteiele. Rezultatul tiebuie s fie asemntoi cu uatele piezentate
n ilustia(ia uimtoaie:

229

<ecian>
0pening INAP connection to localhost:14S.
Nessage Beaueis in INB0X
1) 14-Api-2uu1 Bill NcCatty test l (S7u chais)
B 2) 1S-Api-2uu1 Bill NcCaity test 16 (SS4 Chats)
B S) 1S-Api-2uu1 Bill NcCaity test 17 (SS4 chais)

Nessage : Beaueis

uate: Sat, 14 Api 2uu1 u9:2u:S2 -u7uu
Bate: Sat, 14 Api 2uu1 u9:2u:S2 -u7uu
subject: test l
Subject: test l
message_iu: 2uu1u414162u.}AA2uS19linux.utc.apu.euu
<ecian>

<titlu>Nanipulaiea uosaieloi<titlu>
Bincolo ue accesul la uosaie ,i mesaje, pute(i manipula uosaie piin
utilizaiea bibliotecii INAP. In aceast sec(iune ve(i afla cum tiebuie
s pioceua(i.
<titlu>Afi,aiea uosaieloi existente<titlu>
Iat o func(ie uefinit ue utilizatoi caie afi,eaz uosaiele INAP
uisponibile:

function list_folueis* ($iuentificatoi, $seivei, $piefix)

echo ,\n\n";
echo ,<B4>Lista uosaieloi<B4>";
echo ,\nseivei=$seivei, piefix=$piefix";
$uosaie = imap_listmailbox($iuentificatoi, $seivei, $piefix, ,*");

if ($uosaie == false)

echo ,\nFunctia imap_listmailbox() a esuat."

else

foieach ($uosaie as $cheie=>$valoaie)

echo ,\n$cheie=>$valoaie";




Pute(i apela aceast func(ie folosinu aigumente asemntoaie cu
uimtoiul:

list_folueis($iuentificatoi, ,localhostimap:14S", ,mail")

<not>
*n tiauuceie afi,eaz uosaiele N.T. <not>

2Su

Aigumentul $iuentificatoi este, uesigui, valoaiea ietuinat ue func(ia
caie a ueschis conexiunea INAP. A,a cum s-a explicat anteiioi n
acest mouul, valoaiea aigumentului $piefix tiebuie s se confoimeze
politicii ue uenumiie a uosaieloi stabilite ue auministiatoiul INAP.

<titlu>Cieaiea unui uosai<titlu>
Iat cum se poate ciea un nou uosai INAP:

function cieate_foluei*($iuentificatoi, $seivei, $piefix, $uosai);

$uosai = $seivei . $piefix . ,INB0X." . $uosai;
echo ,\n\n";
echo ,<B4>Cieeaza uosaiul $uosai<B4>";
$ok = imap_cieatemailbox($iuentificatoi, $uosai);
if ($ok === false)

echo ,\nNu s-a putut ciea uosaiul.";
piint_eiioi_stack();



Cel ue-al patiulea aigument al acestei func(ii specific numele
uosaiului caie va fi cieat.
<Sugestie>
Numele unui uosai INAP tiebuie s con(in numai liteie, cifie ,i
caiacteie ue sublinieie. Bac uoii(i s ciea(i un sub-uosai, pute(i
pioceua astfel incluznu un punct n numele uosaiului. Punctul se
compoit ca sepaiatoi ue cale, analog caiacteiului slash folosit n
cile uin cauiul sistemului ue fi,ieie. <Sugestie>

<titlu>Nouificaiea numelui unui uosai<titlu>
Iat o func(ie uefinit ue utilizatoi caie mouific numele unui uosai:

function iename_foluei**($iuentificatoi, $seivei, $piefix,
$uosai_vechi, $uosai_nou);

$uosai_vechi = $seivei . $piefix . ,INB0X." . $uosai_vechi;
$uosai_nou = $seivei . $piefix . ,INB0X." . $uosai_nou;
echo ,\n\n";
echo ,<B4>Nouifica numele $uosai_vechi in $uosai_nou<B4>";
$ok = imap_ienamemailbox($iuentificatoi, $uosai_vechi,
$uosai_nou);
if ($ok === false)

echo ,\nNu a ieusit sa mouifice numele uosaiului.";
piint_eiioi_stack();



<not>
*n tiauuceie cieeaz uosaiul- N.T.
**n tiauuceie mouific numele uosaiului N.T. <not>

2S1

A,a cum s-a explicat anteiioi, poate fi necesai ajustaiea mouului ue
constiuiie a numelui uosaiului uin numele gazuei seiveiului ,i uin
piefixul cutiei po,tale.

<titlu>$teigeiea unui uosai<titlu>
Iat o func(ie caie ,teige un uosai INAP:

function uelete_foluei*($iuentificatoi, $seivei, $piefix, $uosai);

$uosai = $seivei . $piefix . ,INB0X." . $uosai;
echo ,\n\n";
echo ,<B4>Steige uosaiul $uosai<B4>";
$ok = imap_ueletemailbox($iuentificatoi, $uosai);
if ($ok === false)

echo ,\nNu s-a putut steige uosaiul.";
piint_eiioi_stack();



<Aten(ie>
Spie ueosebiie ue mesajele INAP, caie imn n cutia po,tal pn
cnu le ,teige(i, un uosai INAP ,teis este eliminat imeuiat ,i n mou
iievocabil. Fi(i atent atunci cnu sciie(i piogiame caie ,teig uosaie
sau atunci cnu folosi(i sciiptuii caie con(in asemenea piogiame.
<Aten(ie>

<titlu>Copieiea mesajeloi nti-un uosai<titlu>
INAP poate copia un mesaj uin uosaiul cuient nti-un alt uosai. Iat o
func(ie uefinit ue utilizatoi caie execut aceast opeia(ie, uaca se
cunoa,te numiul mesajului INAP ,i uosaiul uestina(ie:

function copy_message**($iuentificatoi, $piefix, $numai, $uosai);

$uosai = $piefix . ,INB0X." . $uosai;
echo ,\n\n";
echo ,<B4>Copiaza mesajul $numai in uosaiul $uosai<B4>";
$ni_mesaje = ," . $numai;
$ok = imap_mail_copy($iuentificatoi, $ni_mesaje, $uosai);
if ($ok === false)

echo ,\nNu a fost copiat mesajul in uosaiul specificat.";
piint_eiioi_stack();



Remaica(i c aceast func(ie nu pieia un aigument caie specific
numele gazuei seiveiului. Beoaiece seiveiele INAP nu coopeieaz la
copieiea unui mesaj ue la un

<not>
*n tiauuceie ,teige uosaiul- N.T.
** n tiauuceie copiat mesajul N.T. <not>

2S2

seivei la altul, nu este necesai - sau posibil - s se specifice numele
gazuei seiveiului la copieiea mesajeloi INAP.

<titlu>Nutaiea mesajeloi nti-un uosai<titlu>
Iat o func(ie uefinit ue utilizatoi caie mut un mesaj INAP uin
uosaiul cuient nti-un alt uosai, fiinu uate numiul INAP al
mesajului ,i uosaiul uestina(ie:

function move_message* ($iuentificatoi, $piefix, $numai, $uosai);

$uosai = $piefix . ,INB0X." . $uosai;
echo ,\n\n";
echo ,<B4>Nuta mesajul $numai in uosaiul $uosai<B4>";
$ni_mesaj = ," . $numai;
if ($ok === false)

echo ,\nNesajul nu a fost mutat in uosaiul specificat.";
piint_eiioi_stack();



Nesajele oiiginale sunt uoai maicate n veueiea ,teigeiii ,i imn n
cutia po,tal pn la eliminaiea efectiv.

<Sfatul specialistului>
ntiebaie: Acest mouul a explicat mouul ue utilizaie a numeioase
func(ii INAP, uai exist ,i alte func(ii INAP caie mi-ai putea fi ue
folos.
Rspuns: Biblioteca INAP fuinizeaz multe alte func(ii n afaia celoi
uesciise n acest mouul. Be exemplu, func(iile imap_seaich() ,i
imap_scanmailbox() v peimit s cuta(i mesaje caie satisfac ciiteiii
specificate. Be exemplu, pute(i cuta mesaje al cioi coip con(ine
anumite texte. Be asemenea, func(iile INAP folosite n acest mouul
fuinizeaz fiecvent op(iuni ,i caiacteiistici caie nu au fost explicate
n totalitate. Pentiu mai multe infoima(ii piivinu biblioteca INAP
PBP, consulta(i manualul PBP pe supoit electionic, la auiesa
www.php.net.
<Sfatul specialistului>

<Test ue evaluaie>
1. Caie este piotocolul folosit pentiu expeuieiea mesajeloi piin
Inteinet.
2. In ce mou contiibuie func(iile uefinite ue utilizatoi la simplificaiea
activit(ii ue piogiamaie.
S. Folosinu func(ia uefinit ue utilizatoi auecvat uesciis n acest
mouul, sciie(i o instiuc(iune caie copiaz mesajul INAP cu numiul
1u1 uin uosaiul cuient

<not>
*n tiauuceie mut mesajul- N.T. <not>

2SS

n uosaiul "test". Se piesupune c vaiiabila $mb con(ine
iuentificatoiul asociat cu o conexiune INAP ueschis, piecum ,i c
vaiiabila $pfx con(ine piefixul cutiei po,tale INAP.
4. Folosinu func(ia uefinit ue utilizatoi auecvat uesciis n acest
mouul, sciie(i o instiuc(iune caie mouific numele uosaiului "test1"
n "test2". Se piesupune c vaiiabila $mb con(ine iuentificatoiul
asociat cu o conexiune INAP ueschis, c vaiiabila $seivei con(ine
,iiul seivei INAP (caie incluue paiantezele acolaue, numele gazuei
seiveiului, piotocolul ,i numiul poitului), c vaiiabila $pfx con(ine
piefixul cutiei po,tale INAP, piecum ,i c vaiiabilele $vechi,
iespectiv $nou con(in numele uosaiului.
S. Folosinu func(ia uefinit ue utilizatoi auecvat uesciis n acest
mouul, sciie(i o instiuc(iune caie afi,eaz antetele asociate mesajului
INAP al ciui numi este uat ue valoaiea vaiiabilei $n. Se va
piesupune c vaiiabila $nb con(ine iuentificatoiul asociat cu o
conexiune INAP ueschis. <Test ue evaluaie>



2S4

<titlu>Nouulul 1S:
No(iuni funuamentale uespie bazele ue uate ,i SQL<titlu>

<titlu>Scopuii<titlu>
- nv(a(i caie este mouul ue oiganizaie a bazeloi ue uate iela(ionale
- nv(a(i motivele pentiu caie bazele ue uate iela(ionale constituie
meuii mai bune ue stocaie a uateloi uect fi,ieiele
- nv(a(i s foima(i inteiogii SQL caie ob(in acces la uatele
iela(ionale ,i le manipuleaz
- nv(a(i s pioiecta(i ,i s ciea(i baze ue uate iela(ionale

Acest mouul explic bazele ue uate iela(ionale ,i mouul ue utilizaie a
acestoia, n compaia(ie cu fi,ieiele, bazele ue uate iela(ionale
piezint multe avantaje, inclusiv o mai maie piotec(ie a integiit(ii
uateloi ,i asiguiaiea paitajiii uateloi. Acest mouul se concentieaz
asupia SQL, limbajul stanuaiu pentiu cieaiea, accesul ,i manipulaiea
bazeloi ue uate iela(ionale, n cauiul mouulului uimtoi, ve(i nv(a
s ncoipoia(i instiuc(iuni SQL n sciiptuiile uumneavoasti PBP,
astfel nct piogiamele uumneavoasti PBP s poat lucia cu bazele
ue uate iela(ionale. Conceptele explicate n acest mouul se aplic
majoiit(ii bazeloi ue uate iela(ionale; cu toate acestea, uetaliile - cu
piecueie sintaxa SQL - sunt cele iefeiitoaie la NySQL, cel mai
populai limbaj ue baze ue uate folosit cu PBP.

<titlu>Concepte ale bazeloi ue uate iela(ionale<titlu>
Nu cu mult timp n uim, bazele ue uate iela(ionale constituiau o
noutate. Pe atunci, alte categoiii ue baze ue uate, piecum cele ue
ie(ea ,i ieiaihice, eiau ,la mou". Totu,i, mouelul bazeloi ue uate
iela(ionale s-a uoveuit a fi mai eficient uin punct ue veueie al
costuiiloi uect concuien(ii si. Aceast sec(iune explic mouul ue
oiganizaie a bazeloi ue uate iela(ionale ,i ia(iunile caie justific
succesul mouelului bazeloi ue uate iela(ionale.

<titlu>Stiuctuia unei baze ue uate iela(ionale<titlu>
0 baz ue uate iela(ionale stocheaz uatele n tabele, caie amintesc
ue foile ue calcul tabelai, iai fiecaie tabel stocheaz infoima(ii uespie
un anumit tip ue entitate. Piactic, un tabel poate fi asimilat cu un
fi,iei. Be exemplu, o baz ue uate iela(ional afeient unei euituii
poate incluue tabele piecum caite ,i autoi.

2SS

Figuia 1S-1 piezint un tabel caiacteiistic uinti-o baz ue uate
iela(ional caie piezint angaja(ii istoiici ai Auministia(iei Stateloi
0nite ale Ameiicii. Piimul inu al tabelului atiibuie nume pentiu
fiecaie coloan. Fiecaie inu al tabelului, altul uect piimul inu,
uesciie un singui angajat. Be exemplu, al uoilea inu uesciie un
angajat pe nume ueoige Washington*. Fiecaie coloan, pe ue alt
paite, uesciie un anumit atiibut al angajatului. Be exemplu, a uoua
coloan con(ine numele angaja(iloi, iai a tieia coloan con(ine anii n
caie s-au nscut ace,tia.
Pentiu a se putea face iefeiiie la un anumit inu al tabelului, se
obi,nuie,te ca fiecaie tabel s con(in o coloan caie iuentific n
mou unic fiecaie inu. Aceast coloan se nume,te cheia piimai a
tabelului. In figuia 1S-1, coloana numit AngajatIB seive,te uiept
cheie piimai. Bac nici o coloan nu con(ine o valoaie unic pentiu
fiecaie inu, se pot combina valoiile mai multoi coloane pentiu a
ciea o cheie piimai compus.
<figuia 1S-1 0n tabel caiacteiistic uinti-o baz ue uate>
*AngajatIB (Cheie piimai)
*Nume
*AnNasteie

*uuu1
*ueoige Washington
*17S2

*uuu2
*}ohn Auams
*17SS

*uuuS
*Thomas }effeison
*174S
<figuia 1S-1>

0 baz ue uate iela(ional se nume,te astfel uatoiit capacit(ii sale
ue a stabili iela(ii ntie uate uin mai multe tabele. Figuia 1S-2
piezint uou tabele ,i o iela(ie ntie acestea. Noul tabel con(ine
infoima(ii uespie meseiiile caiacteiistice ale angaja(iloi. Nai conciet,
tabelul l iuentific pe angajatul cel mai piiceput nti-o anumit
meseiie. Numele meseiiei seive,te uiept cheie piimai a tabelului,
caie mai con(ine, n afai ue aceasta, o singui coloan.

<figuia 1S-2 0 iela(ie caiacteiistic ntie uou tabele>
<Tabel angaja(i>

*AngajatIB(Cheie piimai)
*Nume
*AnNasteie

*uuu1
*ueoige Washington
*17S2

*uuu2
*}ohn Auams
*17SS

*uuuS
*Thomas }effeison
*174S
<Tabel angaja(i>

<Tabel meseiii>
*Neseiie (Cheie piimai)
*AngajatIB(Cheie extein)

*Aihitect
*uuuS

*ueneial
*uuu1

*Filosof
*uuu2
<Tabel meseiii>
<figuia 1S-2>

<not>
*ueneial ameiican (17S2-1799), piimul pie,euinte al Stateloi 0nite
ale Ameiicii. - N.T. <not>

2S6

Coloana iespectiv stocheaz atiibutul AngajatIB al angajatului caie
cunoa,te meseiia uesciis ue un anumit inu. Be exemplu, angajatul
cu numiul uuuS este cel mai piiceput aihitect. Re(ine(i c AngajatIB
este att cheia piimai a tabelului oiiginal, uai ,i o coloan uin noul
tabel. Coloana AnagajatIB a noului tabel se nume,te cheie extein;
ue,i nu este cheia piimai a noului tabel, este cheia piimai a unui
alt tabel.
Aplica(ia softwaie caie gzuuie,te o baz ue uate se nume,te sistem
ue gestiune a bazeloi ue uate (SuBB). Exist multe sisteme ue
gestiune a bazeloi ue uate uin suise ueschise ,i comeiciale. Piintie
cele mai populaie asemenea sisteme se numi:
<tabel>
*SuBB
*Tip

*BB2
*Comeicial

*Inteibase
*n tiecut comeicial; n piezent uin suis ueschis

*NySQL
*Suis ueschis

* 0iacle
*Comeicial

* Postgiesql
*Suis ueschis

*SQL Seivei
*Comeicial

* Sybase
*Comeicial
<tabel>

NySQL este cel mai populai sistem ue gestiune a bazeloi ue uate
uestinat utiliziii cu PBP, n maie msui ueoaiece este giatuit.
Totu,i, piin inteimeuiul PBP este posibil accesul la apioape oiice
SuBB mouein. Pentiu aceasta, nu ave(i nevoie uect ue un piogiam -
cunoscut sub numele ue uiivei- caie se compoit ca o inteifa( ntie
PBP ,i baza ue uate. Nulte sisteme ue gestiune a bazeloi ue uate sunt
asociate cu piogiame uiivei caie se confoimeaz stanuaiuului 0BBC
(0pen Batabase Connectivity). Aceste sisteme ue gestiune a bazeloi
ue uate sunt accesibile piin inteimeuiul caiacteiisticii 0BBC a
limbajului PBP.

<titlu>Ra(iuni ue utilizaie a bazeloi ue uate iela(ionale<titlu>
n compaia(ie cu fi,ieiele ,i bazele ue uate non-iela(ionale, bazele ue
uate iela(ionale piezint un numi ue avantaje ,i cteva uezavantaje.
Cunoscnu att avantajele, ct ,i uezavantajele, ve(i putea ueteimina
cnu este ue piefeiat stocaiea uateloi nti-un fi,iei, nu nti-o baz ue
uate.

<titlu>Facilitaiea paitajiii uateloi<titlu>
Avantajul uefinitoiiu al unui SuBB iela(ional l constituie capacitatea
ue paitajaie a uateloi. Acest fapt este impoitant mai ales pentiu
aplica(iile bazate pe Web, ueoaiece mai mul(i utilizatoii pot ob(ine
acces la acelea,i uate apioape simultan. Sistemele ue gestiune a
bazeloi ue uate iela(ionale incluu elemente ue piotec(ie, pioiectate
pentiu a pieveni pieiueiea actualiziiloi ,i ueteiioiaiea uateloi, caie
se pot piouuce n caz contiai n asemenea ciicumstan(e. Nai mult,
sistemele ue gestiune a bazeloi ue uate au o aihitectui client-seivei
caie pune la uispozi(ia

2S7

utilizatoiiloi afla(i la uistan(, piin inteimeuiul unei ie(ele, uate
stocate nti-o loca(ie cential. Astfel, bazele ue uate iela(ionale
fuinizeaz paitajaiea uateloi att n timp, ct ,i n spa(iu.

<titlu>Asiguiaiea inuepenuen(ei uateloi<titlu>
Inuepenuen(a uateloi este un avantaj al bazeloi ue uate caie este
uep,it, ca impoitan(, numai ue paitajaiea uateloi. Cnu un
piogiam ob(ine accesul la un fi,iei, uatele sunt tiansfeiate
piogiamului n aceea,i maniei n caie sunt stocate. Piin contiast,
piogiamatoiii folosesc un limbaj special pentiu a solicita uate uinti-o
baz ue uate iela(ional. Piogiamatoiii pot solicita ca uatele
iespective s fie tiansfeiate n oiice foim o uoiesc ace,tia,
inuifeient ue mouul ue stocaie a uateloi, n paiticulai, piogiamatoiii
pot solicita numai coloanele unui tabel necesaie nti-o anumit
aplica(ie.
Aceast caiacteiistic este impoitant atunci cnu la o baz ue uate
sunt auugate coloane noi. Batoiit inuepenuen(ei uateloi,
piogiamele existente anteiioi continu s func(ioneze ,i uup
mouificaiea bazei ue uate. Piin contiast, auugaiea unui cmp la un
fi,iei impune, n geneial, ievizuiiea fieciui piogiam caie ob(ine
acces la fi,iei.

<titlu>Inteiogaiea au-hoc<titlu>
Bazele ue uate iela(ionale n(eleg SQL (Stiuctuieu Queiy Language*),
un limbaj ielativ simplu, folosit pentiu solicitaiea uateloi. Totu,i, n
ciuua simplit(ii sale, SQL este un limbaj foaite puteinic, caie poate
ob(ine accesul la uate stocate n mai multe tabele, poate filtia uatele
uoiite ,i poate soita, iezuma ,i afi,a iezultatele.
n geneial, nu se pot anticipa toate moualit(ile n caie utilizatoiii pot
uoii s ob(in acces la uate ,i s le vizualizeze. Ca ataie, nu se pot
sciie piogiame ue aplica(ie caie s satisfac fiecaie poten(ial
necesitate ue infoima(ii. Este apioape sigui c voi apiea unele
ceieii ue uate nepievzute (sau au hoc).
0tiliznu SQL, este posibil accesul la uatele stocate nti-o baz ue
uate iela(ional fi a sciie un piogiam ue aplica(ie, peimi(nu
fiecvent evitaiea ntizieiiloi ,i a costuiiloi implicate ue
piogiamaiea peisonalizat. Astfel, bazele ue uate iela(ionale peimit
satisfaceiea tutuioi ceieiiloi au-hoc ue infoima(ii, caie ai imne
fi ispuns n alte situa(ii.

<titlu>0iganizaiea uateloi<titlu>
n geneial, bazele ue uate iela(ionale ,i stocheaz uatele nti-un
singui fi,iei sau catalog. Aceast caiacteiistic ue oiganizaie
faciliteaz auministiaiea uateloi, ueoaiece executaiea copiei ue
siguian(, iespectiv iestauiaiea unui singui fi,iei sau

<not>
n tiauuceie limbaj ue inteiogaie stiuctuiat - N.T. <not>

2S8

catalog sunt mai simpl uect opeia(iile similaie aplicate unui set ue
fi,ieie stocat n mai multe cataloage.
<titlu>Asiguiaiea uateloi<titlu>
n geneial, bazele ue uate iela(ionale piotejeaz uatele mpotiiva
accesului neautoiizat. Be exemplu, fi,ieiele caie stocheaz tabelele
iela(ionale pot fi accesibile numai pentiu auministiatoiul ue sistem
,i pentiu un cont special ue utilizatoi, cieat pentiu gestionaiea bazei
ue uate.

<titlu>Reuuceiea la minimum a expeiien(ei necesaie n uomeniul
piogiamiii<titlu>
n geneial, sistemele moueine ue gestiune a bazeloi ue uate folosesc
complexitatea pentiu a ua iluzia simplit(ii. Batoiit, complexit(ii
acestoia, n geneial este mai simplu s se sciie un piogiam caie
folose,te o baz ue uate iela(ional uect s i se sciie un piogiam
echivalent uin punct ue veueie func(ional, uai caie folose,te fi,ieie
obi,nuite. Nai mult, o aplica(ie sciis folosinu un SuBB va piezenta
mai pu(ine uefecte uect o aplica(ie echivalent uin punct ue veueie
func(ional, sciis folosinu fi,ieie noimale.
n geneial, autoiii sistemeloi ue gestiune a bazeloi ue uate
beneficiaz ue o bogat expeiien(, pe caie ,i-au utilizat-o piin
cieaiea ue piogiame ieutilizabile la caie al(i piogiamatoii ob(in
acces piin inteimeuiul func(iiloi uefinite cu inteife(e simple. A,a cum
un sistem ue opeiaie scute,te piogiamatoiii ue necesitatea ue a
n(elege mecanismele uetaliate ue func(ionaie ale uispozitiveloi
haiuwaie, o baz ue uate iela(ional i scute,te pe piogiamatoii ue
necesitatea ue a n(elege o vaiietate ue piobleme complexe caie pot
apiea la paitajaiea uateloi.

<titlu>0b(ineiea eficien(ei n pieluciaiea uateloi<titlu>
Batoiit complexit(ii loi, sistemele ue gestiune a bazeloi ue uate
iela(ionale, necesit mai multe cicluii ue piocesoi pentiu a satisface
o ceieie ue uate uect cele necesaie pentiu accesul la un fi,iei
oiuinai. n acest sens, sistemele ue gestiune a bazeloi ue uate
iela(ionale sunt ineficiente. Totu,i, uac examinm chestiunea uinti-
o alt peispectiv, putem ajunge la o concluzie uifeiit.
Be exemplu, uoii(i s calcula(i uimensiunea meuie a gospouiiiloi
ameiicane folosinu uatele biioului ue iecensmnt. Bac aceste uate
ai fi fost stocate nti-un fi,iei obi,nuit, a(i sciie un piogiam caie s
incluu un ciclu caie cite,te fiecaie niegistiaie a fi,ieiului ,i
inciementeaz contoaie pentiu uimensiune ,i numiul ue
gospouiii. S piesupunem c fi,ieiul ue iecensmnt este stocat pe
un calculatoi aflat la uistan(, la caie ob(ine(i acces piin inteimeuiul
unei ie(ele, n acest caz,

2S9

fiecaie niegistiaie ue iecensmnt este tiimis piin ie(ea, cienu un
aueviat blocaj ue tiafic. Totu,i, uac uatele ue iecensmnt ai fi fost
stocate nti-o baz ue uate iela(ional, pute(i pui ,i simplu folosi SQL
pentiu a solicita calculul uimensiunii meuii a unei gospouiii. Astfel,
singuiele uate tiimise piin ie(ea ai fi iezultatul nsu,i. Beci, utilizaiea
unui SuBB iela(ional nu este ntotueauna mai pu(in eficient uect
folosiiea unoi fi,ieie noimale.

<titlu>Becizia ue utilizaie a unui SuBB iela(ional<titlu>
Bin punctul ue veueie al unei fiime, utilizaiea unei tehnologii este
auecvat atunci cnu avantajele utiliziii uep,esc costuiile, n cazul
unui SuBB iela(ional, piincipalul cost inciemental n compaia(ie cu
fi,ieiele obi,nuite const n necesitatea unoi iesuise mai maii ue
pieluciaie a uateloi. Aceasta piesupune, uesigui, c alege(i un SuBB
uin suis ueschis, caie este uisponibil giatuit; n caz contiai, voi
apiea costuii pentiu achizi(ionaiea ,i ntie(ineiea sistemului
comeicial ue gestiune a bazeloi ue uate ales ue uumneavoasti.
A,a cum s-a explicat n sub-sec(iunile pieceuente, avantajele
inciementale ale unui SuBB iela(ional sunt numeioase. Acolo unue
acestea sunt impoitante, avantajele unui SuBB uep,esc, n geneial,
costuiile. Fi,ieiele noimale imn auecvate pentiu uate ielativ
statice, caie nu sunt paitajate, nu sunt supuse la inteiogii au-hoc, nu
sunt confiuen(iale sau extiem ue valoioase ,i sunt folosite ue un
numi ieuus ue piogiame. Cu alte cuvinte, implementaiea unoi
aplica(ii foaite simple poate fi mai eficient sub aspectul costuiiloi
uac se folosesc fi,ieie noimale ,i nu SuBB; cu toate acestea,
majoiitatea aplica(iiloi impoitante sunt mai eficiente uin punct ue
veueie al costuiiloi uac sunt implementate folosinu un SuBB.

<Sfatul specialistului>
ntiebaie: Caie este sistemul ue gestiune a bazeloi ue uate pe caie
tiebuie s-l folosesc pentiu aplica(ia mea.,
Rspuns: A,a cum s-a men(ionat anteiioi, NySQL este cel mai
impoitant SuBB uestinat utiliziii cu PBP. Totu,i, Postgiesql este ue
asemenea un SuBB uin suis ueschis ,i este uisponibil giatuit, n
compaia(ie cu NySQL, Postgiesql fuinizeaz func(ii suplimentaie,
caie faciliteaz sciieiea piogiameloi ce asigui integiitatea
tianzac(iiloi. Tiebuie s folosi(i Postgiesql uaca baza uumneavoasti
ue uate va fi actualizat fiecvent ,i cu volume maii ue uate. Bac baza
uumneavoasti ue uate este asociat unui sistem comeicial, tiebuie
s ave(i la uispozi(ie fonuuii pentiu achizi(ionaiea unui SuBB
comeicial. 0n SuBB comeicial tiebuie selec(ionat n func(ie ue
numeio,i factoii, inclusiv expeiien(a uumneavoasti cu piouuctoiul
iespectiv ,i uimensiunea bugetului ue caie uispune(i. <Sfatul
specialistului>

24u

<Test ,la minut">
- Caie este componenta unei baze ue uate iela(ionale caie stocheaz
infoima(ii uespie o anumit categoiie ue entitate.
- Caie este componenta unei baze ue uate iela(ionale caie stocheaz
infoima(ii uespie un anumit exemplu ue entitate.
- Caie este componenta unei baze ue uate iela(ionale caie stocheaz
valoiile unei anumite caiacteiistici pentiu un set ue entit(i.
<Test ,la minut">

<titlu>Implementaiea unei baze ue uate<titlu>
Implementaiea unei baze ue uate iela(ionale este un subiect ue o
amploaie consiueiabil ,i a fost aboiuat n cauiul a numeioase
ci(i. Aceast sec(iune ofei o tieceie n ievist a implementiii
bazeloi ue uate iela(ionale, caie uesciie piocesele ue pioiectaie ,i
cieaie a unei baze ue uate poininu ue la o peispectiv simpl,
piactic. Scopul sec(iunii ue fa( const n a v ofeii cuno,tin(ele
necesaie pentiu a implementa baze ue uate NySQL simple, accesibile
piogiameloi PBP.

<titlu>Pioiectaiea unei baze ue uate,titlu>
0n instiument fiecvent utilizat ue pioiectaie a bazeloi ue uate const
uin pioceueul cunoscut sub numele ue mouelaie entitate-iela(ie sau
mouelaie E-R. n contextul moueliii E-R, o entitate este similai cu
un tabel iela(ional; cu alte cuvinte, con(ine uate caie uesciiu un set
ue inuiviuualit(i coielate. Nouelaiea E-R este un pioces n cauiul
ciuia coloanele, entit(ile ,i iela(iile ntie entit(i sunt uescopeiite ,i
oiganizate. 0n mouel E-R poate fi iafinat cu u,uiin(, pentiu a geneia
o stiuctui a unei baze ue uate, caie poate fi tiansfoimat nti-o baz
ue uate iela(ional efectiv.

<titlu>Nouelaie E-R <titlu>
Piocesul ue mouelaie E-R const uin patiu faze piincipale:
1. Iuentificaiea coloaneloi
2. uiupaiea coloaneloi n entit(i
S. Iuentificaiea cheiloi piimaie
4. Iuentificaiea cheiloi exteine

<not>
Rspunsuii la test
- Tabel
- Rnu
- Coloan<not>

241

<titlu>Iuentificaiea coloaneloi<titlu>
Piima opeia(ie uin cauiul piocesului ue mouelaie E-R este
iuentificaiea coloaneloi. Beseoii, aceast opeia(ie este executat ue
un giup ue peisoane, caie ac(ioneaz sub nuiumaiea ,i sfatul unei
peisoane cu expeiien( n uomeniu.
S ne ieamintim c o coloan niegistieaz o singui caiacteiistic a
unei entit(i, n esen(, giupul iuentific posibile coloane punnu
ntiebaiea: ,Caie sunt uatele sau caiacteiisticile pe caie tiebuie s le
stocheze sistemul.". Coloanele canuiuate sunt puse pe list ue nuat
ce sunt iuentificate, n acest scop se folose,te fiecvent o tabl, ueci
paiticipan(ii pot veuea lista pe msui ce aceasta ncepe s se con-
tuieze ,i pot mouifica lista iapiu, confoim necesit(iloi.
n nceicaiea ue iuentificaie a coloaneloi, n geneial este util s se
ispunu la unele ntiebii conexe, cum sunt uimtoaiele:
- Caie sunt ueciziile pe caie sistemul tiebuie s le ia sau s le sus(in.
- Caie sunt opeia(iile pe caie sistemul tiebuie s le execute sau s le
sus(in.
- Caie sunt uatele necesaie pentiu a lua aceste uecizii ,i pentiu a
efectua aceste opeia(ii.
n momentul n caie nu mai pot fi gsite ,i alte coloane canuiuate,
piocesul tiece la faza uimtoaie, ,i anume giupaiea coloaneloi n
entit(i.

<titlu>uiupaiea coloaneloi n entit(i<titlu>
Be obicei, este eviuent c unele coloane sunt coielate, n sensul c fac
iefeiiie la un anumit set ue inuiviuualit(i coielate. Be exemplu,
coloane piecum autoi, titlu ,i pie( ue copeita se pot coiela cu
no(iunea ue ci(i. Ca ataie, aceste coloane pot fi giupate pentiu a
foima o entitate, cum este caite. 0neoii, o coloan uat este coielat
cu mai multe entit(i; n acest caz, coloana poate apiea ue mai multe
oii pe list.
0 uat entit(ile iuentificate, este util s acoium o oaiecaie aten(ie
numeloi. Limbajul SQL folosit cu bazele ue uate iela(ionale impune
unele iestiic(ii asupia numeloi. Este util ievizuiiea numeloi caie nu
se confoimeaz acestoi iestiic(ii, pentiu a evita pioblemele ce pot
apiea n etapele viitoaie ale piocesului ue pioiectaie. Cel mai bine
este ca numele coloaneloi ,i ale entit(iloi s iespecte uimtoaiele
iestiic(ii:
- Tiebuie s nceap cu o litei
- Tiebuie s con(in numai liteie, cifie ,i caiacteiul ue sublinieie ( _ ).
- Lungimea loi nu tiebuie s uep,easc 64 ue caiacteie
- Tiebuie s fie tiatate ca insensibile la uifeien(a ntie majuscule ,i
minuscule (ue exemplu, nu tiebuie s ave(i coloane uistincte cu
numele abc ,i ABC)
Bup ce a(i giupat coloanele n entit(i, pute(i tiece la iuentificaiea
cheii piimaie pentiu fiecaie entitate.

242

<iemaic>
Najoiitatea sistemeloi ue gestiune a bazeloi ue uate, inclusiv NySQL,
impun iestiic(ii mai pu(in seveie uect cele iecomanuate. Bai, piin
iespectaiea iestiic(iiloi iecomanuate, pute(i evita o mul(ime ue
piobleme cu SuBB, BTNL ,i PBP. <iemaic>

<titlu>Iuentificaiea cheiloi piimaie<titlu>
n cele uin uim, fiecaie entitate va ueveni un tabel iela(ional ,i, ca
ataie, va tiebui s aib o cheie piimai. Examina(i fiecaie entitate
pentiu a ueteimina uac una uintie coloanele sale asociate aie o
valoaie unic pentiu fiecaie uintie apaii(iile entit(ii. Bac o
asemenea coloan exist, o ve(i iuentifica uiept cheie piimai a
entit(ii. Be exemplu, pute(i iuentifica valoaiea CouNumeiicPeisonal
ca fiinu cheia piimai a unei entit(i caie con(ine infoima(ii
iefeiitoaie la contiibuabili pentiu anul n cuis.
Pute(i gsi unele entit(i caie nu con(in nici o coloan auecvat
pentiu iolul ue cheie piimai, nti-o asemenea situa(ie, pute(i cuta o
seiie ue coloane caie au o valoaie combinat unic. Bac uescopeii(i
o asemenea seiie, o pute(i iuentifica uiept cheie piimai compus a
entit(ii. Be exemplu CouNumeiicPeisonal ,i AnFiscal pot seivi
mpieun uiept cheie piimai a unei entit(i caie con(ine infoima(ii
iefeiitoaie la contiibuabili pentiu mai mul(i ani.
S-ai putea s nu uescopeii(i nici o coloan sau seiie ue coloane caie
s iuentifice n mou unic fiecaie apaii(ie a unei entit(i, n acest caz,
ciea(i o coloan nou, caie va con(ine o iuentificaie aitificial unic,
,i iuentifica(i noua coloan ca fiinu cheia piimai a entit(ii. Be
exemplu, n cazul unei entit(i numite angajat, pute(i uenumi
iuentificaiea aitificial angajatiu sau angajatni, ultimul nume fiinu o
abievieie fiecvent folosit pentiu o coloan caie altfel s-ai fi numit
angajat_numai.
<Sugestie>
Pute(i uoii s folosi(i o iuentificaie aitificial unic chiai ,i atunci
cnu una sau mai multe coloane pot seivi uiept cheie piimai. Astfel,
evita(i pioblemele caie apai cnu iuentificatoii piesupu,i unici se
uoveuesc a nu fi unici. Be exemplu, se piesupune c valoaiea couului
numeiic peisonal este unic; uai un angajat poate intiouuce
infoima(ii incoiecte, ueteiminnu un conflict ntie iuentificatoiul
piopiiu piesupus unic ,i iuentificatoiul unui alt angajat. <Sugestie>

<titlu>Iuentificaiea cheiloi exteine<titlu>
0peia(ia final ,i cea mai uificil uin cauiul activit(ii ue mouelaie E-
R o constitue iuentificaiea cheiloi exteine. S ne ieamintim c
acestea sunt pui ,i simplu coloane cioi valoii sunt coielate cu
acelea ale valoiiloi cheiloi piimaie ale unei entit(i oaiecaie.
Piocesul ue iuentificaie a cheiloi exteine const n compaiaiea
coloaneloi cu cheile piimaie ,i, pentiu fiecaie combina(ie posibil, n
ispunsul la ntiebaiea: ,Exist o iela(ie ntie valoaiea acestei
coloane ,i valoaiea acestei chei piimaie."

24S

Najoiitatea celoi caie piactic mouelaiea E-R folosesc un fel ue
uiagiam, cunoscut sub numele ue uiagiam E-R, pentiu a le fi ue
ajutoi la uocumentaiea cheiloi exteine. Figuia 1S-S piezint o
uiagiam E-R caiacteiistic, uiagiam caie uesciie tabelele
iela(ionale piezentate anteiioi n figuia 1S-2. 0 uiagiam E-R
iepiezint entit(ile sub foim ue uieptunghiuii, iai iela(iile uintie
entit(i sub foim ue iombuii. 0 iela(ie exist oiiunue a fost
iuentificat o cheie extein. Rela(ia ,tie meseiia uin figuia 1S-S s-a
stabilit ntie entit(ile numite angajat ,i meseiii. 0neoii, uiagiamele
E-R piezint cmpuiile asociate fieciei entit(i; ueoaiece astfel se
ob(in ueseoii uiagiame aglomeiate, acest pioceueu nu este fiecvent
folosit. Cu toate acestea, l pute(i gsi util, mai ales pentiu mouelele E-
R mici.
Stiicto sensu, aceast activitate ue mouelaie E-R implic mai mult
uect o simpl iuentificaie a cheiloi exteine. 0 uat iuentificat o
iela(ie, aceasta tiebuie clasificat ,i eventual ievizuit. Pentiu a
clasifica iela(ia, gnui(i-v la numiul ue apaii(ii ale entit(ii
implicate n iela(ie, caie poate fi zeio, unu sau mai multe, n ielatia
,tie meseiia, fiecaie angajat aie exact o meseiie. 0 asemenea iela(ie
se nume,te iela(ie ue tip 1:1. Totu,i, sunt posibile ,i alte caiuinalit(i
ale iela(iiloi, a,a cum se numesc acestea.
Be exemplu, o caite poate avea mai mul(i autoii. Astfel, iela(ia uintie
entit(ile numite caite ,i autoi este o iela(ie ue tip unu la mai mul(i ,i
se abieviaz fiecvent sub foima 1:N. 0nele iela(ii sunt op(ionale; ue
exemplu, un angajat poate fi cstoiit sau nu. Rela(ia uintie angajat ,i
so(so(ie este o iela(ie ue tip 1:u. Cu alte cuvinte, un angajat poate fi
cstoiit sau nu; uai un angajat cstoiit aie exact un so(, iespectiv o
,otie.
<figuia 1S-S 0 uiagiam E-R caiacteiistic>
angajat - ,tie meseiia - meseiii
<figuia 1S-S>
$i mai inteiesante sunt lec(iile ue tip N:N. 0n exemplu ue asemenea
iela(ie este cea ntie cuis ,i stuuent. Relatia este ue tip N:N ueoaiece
la fiecaie cuis pot fi nscii,i mai mul(i stuuen(i, iai fiecaie stuuent
poate fi nsciis la mai multe cuisuii. 0 asemenea lec(ie este
neuefinit ,i inuic lipsa unei entit(i, n acest caz, entitatea nsciieie.
0ii ue cte oii uescopeii(i o entitate N:N, tiebuie s ueteimina(i ,i s
auuga(i entitatea caie lipse,te. Bup ce a(i auugat entitatea lips,
tiebuie s mouifica(i lec(iile.
Beseoii, entitatea lips este coiect cu una sau mai multe coloane
caie lipsesc. Be exemplu, n cazul entit(ii lips nsciieie, coloana
nota va lipsi, ueoaiece nu poate fi plasat n mou justificat nici n
tabelul cuis, nici n tabelul stuuent. Coloana

244

nota se iefeia la o iela(ie ntie un cuis ,i un stuuent, nu numai la un
cuis sau la un stuuent.
Bup auugaiea entit(iloi caie lipsesc, toate iela(iile ue tip N:N
tiebuie s uispai. Be exemplu, iela(ia ntie cuis ,i nsciieie este ue
tip 1:N, ueoaiece pot exista mai multe nsciieii la un cuis uat, uai
fiecaie nsciieie se iefei la un anumit cuis. Similai, iela(ia uintie
nsciieie ,i stuuent este N: l, ueoaiece fiecaie nsciieie se iefei la un
anumit stuuent, caie se poate nsciie la mai multe cuisuii.
Bup ce a(i eliminat iela(iile ue tip N:N, pute(i lua n consiueiaie
noimalizaiea bazei ue uate uesciise ue mouelul E-R.

<titlu>Noimalizaiea unei baze ue uate<titlu>
0 baz ue uate noimalizat este una caie a fost tiansfoimat astfel
nct s satisfac o seiie ue ieguli. Regulile ue noimalizaie a bazeloi
ue uate sunt uesciise ca piopiiet(i pe caie o baz ue uate caie
iespect aceste ieguli tiebuie s le aib, piopiiet(i cunoscute sub
numele ue foime. Setul cel mai fiecvent aplicat ue ieguli ue
noimalizaie a bazeloi ue uate incluue tiei ieguli, caie uesciiu piima,
a uoua ,i a tieia foim noimal.
Aceste forme sunt destinate a preveni problemele care pot ap!rea n
cadrul bazelor de date care nu le respect!. Totu#i, aceste reguli sunt
derutante #i dificil n"eles pentru mul"i. Sub-sec"iunea de fa"! prezint! pe
scurt o abordare de bun sim" a normaliz!rii bazelor de date, adecvat!
pentru evitarea a numeroase probleme frecvent ntlnite legate de
proiectarea bazelor de date. Proiectan"ii bazelor de date foarte simple pot
opta n mod logic pentru omiterea n totalitate a normaliz!rii bazelor de
date, ntruct problemele de proiectare pot fi corectate pur #i simplu
apari"ia lor, n cursul program!rii sau al utiliz!rii. Totu#i, normalizarea
bazelor de date este esen"ial! pentru bazele de date mari, unde costul #i
efortul de descoperire #i remediere a unei erori poate dep!#i semnificativ
costul #i efortul implicate n normalizarea bazelor de date.

<titlu.Regula 1: Este peimis numai utilizaiea valoiiloi
atomice<titlu.
0n tabel uinti-o baz ue uate tiebuie s con(in numai valoii
atomice. Cu alte cuvinte, nici o coloan nu tiebuie s con(in valoii
compuse. Be asemenea, nici o coloan nu tiebuie s iepiezinte un
giup iepetitiv.
Aceast iegul se aplic pentiu coloane piecum nume, alctuit uin
pienume, ini(iala mijlocie ,i numele ue familie. 0 asemenea coloan
aie o valoaie compus tiebuie uivizat n tiei coloane sepaiate:
pienume, initiala_mijlocie ,i nume_familie. Aceast iegul este
fiecvent nclcat, ueseoii la un pie( ieuus. Bezavantajul nclciii
acestei ieguli este ngieunaiea n SQL a accesului la componentele
unei coloane compuse.

24S

Inteiuic(ia nuieptat mpotiiva giupuiiloi caie se iepet este o
pioblem mai seiioas. S lum n consiueiaie un tabel caie incluue
un giup iepetitiv ue auiese ue e-mail. Caie este numiul ue iepeti(ii
peimis. Bou, tiei, cinci, zece. Pentiu a evita limitaiea aitificial a
numiului ue iepeti(ii, stiuctuia bazei ue uate tiebuie s fie ievizuit,
pentiu a plasa giupul iepetitiv nti-un alt tabel. Be exemplu,
stiuctuia uimtoaie:

contact table:
contactiu (cheie piimaia)
nume
email1
email2
emailS

tiebuie nlocuit cu o stiuctui ca uimtoaiea:

contact table:
contactiu (cheie piimaia)
nume

email table:
emailiu (cheie piimaia)
contactiu (cheie exteina)
email

<Sugestie>
Pentiu a evita nclcaiea acestei ieguli, elimina(i toate giupuiile
iepetitive piin uefiniiea unuia sau mai multoi tabele caie s con(in
giupuiile iespective. <Sugestie>

<titlu>Regula 2: Baza(i-v pe cheia piimai n totalitatea sa<titlu>
Coloanele uinti-un tabel tiebuie s se bazeze pe cheia piimai n
totalitatea sa. Pentiu a veuea caie este mouul ue func(ionaie al
acestei ieguli, lua(i n consiueiaie uimtoiul tabel, caie ncalc
iegula:

insciieie table:
stuuentiu
cuisiu
stuuentnume

S piesupunem c stuuentiu ,i cuisiu au fost uesemnate uiept cheie
piimai compus. Coloana stuuentnume este asociat unui stuuent,
nu unei nsciieii. n consecin(, uepinue ue valoaiea stuuentiu, uai
nu ,i ue valoaiea cuisiu. Bac un stuuent s-a nsciis la mai multe
cuisuii, atunci stuuentului iespectiv i voi fi asociate mai multe
inuuii nsciieie, fiecaie cu o coloan stuuentnume. Bac se
uescopei c numele stuuentului a fost gie,it oitogiafiat, tiebuie
coiectate mai multe inuuii uin tabel; n caz contiai, unele inuuii
voi avea valoii incoiecte n anumite coloane. Se voi evita bazele ue
uate inconsecvente, ueci stiuctuiile n caie o coloan uepinue numai
ue o poi(iune a cheii piimaie sunt inteizise piin aceast iegul.

246

<sugestie>
Aceast iegul se aplic numai tabeleloi cu o cheie piimai compus.
0 metou bun ue a evita nclcaiea acestei ieguli este a folosi o
cheie piimai aitificial ,i nu o cheie piimai compus, convenabil
n alte conui(ii.<sugestie>

<titlu>Regula S: Baza(i-v numai pe cheia piimai<titlu>
Coloanele uinti-un tabel tiebuie s se bazeze numai pe cheia
piimai. Iat un exemplu ue tabel caie ncalc iegula:

cuis table:
cuisiu (cheie piimaia)
cuisnume
ueptiu
ueptnume

Acest tabel niegistieaz iuentificatoiul cuisului, numele cuisului,
iuentificatoiul uepaitamentului ,i numele uepaitamentului pentiu
cuisuii. Cu toate acestea, coloana ueptnume nu uepinue ue cuisiu; n
schimb, uepinue ue ueptiu. Cu alte cuvinte tabelul uesciie att
cuisuiile, ct ,i uepaitamentele, n consecin(, numele uepaita-
mentului apaie n mou ieuunuant n fiecaie inu caie se iefei la un
cuis asociat uepaitamentului. Stiuctuia tiebuie ievizuit uup cum
uimeaz:

cuis table:
cuisiu (cheie piimaia)
cuisnume
ueptiu (cheie exteina)

uepaitament table:
uepiu (cheie piimaia)
ueptnume

<Sugestie>
Pentiu a evita nclcaiea acestei ieguli, cuta(i tabele caie con(in
infoima(ii uespie mai multe categoiii ue entit(i. Toate aceste tabele
tiebuie uivizate n tabele sepaiate, unite piinti-o cheie extein.
<Sugestie>

<titlu>Rafinaiea moueleloi E-R<titlu>
0ltima opeia(ie ue fine(e aplicat unui mouel E-R const n
specificaiea unui tip ue uate pentiu fiecaie coloan. Najoiitatea
bazeloi ue uate iela(ionale accept uimtoaiele tipuii ue uate
geneiale:
- Caiactei
- ntieg
- ecimal
- Bat ,i oi
- Binai

247

Tabelul 1S-1 iezum numeioase tipuii ue uate fiecvent utilizate,
acceptate ue NySQL ,i ue majoiitatea celoilaltoi sisteme ue baze ue
uate iela(ionale. Totu,i, NySQL accept multe alte tipuii ue uate.
Consulta(i manualul ue iefeiin( NySQL pentiu mai multe infoima(ii
cu piiviie la aceste tipuii ,i la altele.

<tabel 1S-1 Piincipalele tipuii ue uate uin NySQL>
* Tip ue uate
*Besciieie

* BL0B
*Bate binaie aibitiaie, cu o lungime maxim ue 6SSSS octe(i.

* CBAR(m)
*0n ,ii ue caiacteie ue lungime fix, cu un maxim ue m caiacteie,
unue m este mai mic uect 2S6. Pentiu ob(ineiea lungimii uoiite, se
inseieaz spa(ii finale.

*BATE
*0 uat n foimat an-lun-zi; ue exemplu 2uuS-12-S1.

* BECINAL
BECINAL(m,u)
*0n numi zecimal, iepiezentat sub foim ue ,ii cu m cifie, uin caie
u se afl la uieapta punctului zecimal. Bac m ,i u sunt omise, n mou
piestabilit se voi utiliza valoiile 1u ,i u.

*B00BLE
B00BLE (m, u)
*0n numi cu viigul mobil, cu uubl piecizie, avnu o l(ime ue
afi,aie egal cu m ,i un numi ue u cifie uup viigul.

* FL0AT(m,u)
*0n numi cu viigul mobil, cu simpl piecizie, avnu o l(ime ue
afi,aie egal cu m ,i un numi ue u cifie uup viigul.

* INTEuER
INTEuER 0NSIuNEB
*0n ntieg pe S2 ue bi(i. Bac se specific atiibutul 0NSIuNEB,
uomeniul ue valoii este cupiins ntie u ,i 429496729S; n caz
contiai, uomeniul este cupiins ntie valoiile -214748S648 ,i
214748S647.

* N0NERIC
N0NERIC (m, u)
*Similai cu BECINAL.

*REAL
REAL(m, u)
* Similai cu B00BLE.

*SNALLINT
SNALLINT 0NSIuNEB
* 0n ntieg pe 16 bi(i. Bac se specific atiibutul 0NSIuNEB,
uomeniul ue valoii este cupiins ntie u ,i 6SSSS; n caz contiai,
uomeniul este cupiins ntie valoiile S2768 ,i S2767.

*TINE
TINESTANP
TINESTANP(m)
*0ia n foimat oi-minut-secunu; ue exemplu, u8-Su-uu. 0 valoaie
ue tip uat ,i oi, n foimat an-lun-zi oi-minut-secunu; ue
exemplu, 197u-u1-u1 uu:uu:uu. Aceast iepiezentaie este similai
celei ietuinate ue func(iile 0NIX ,i nu poate couifica uate situate
uincolo ue un anumit moment al anului 2uS7.

*vARCBAR(m)
*0n ,ii caiactei ue lungime vaiiabil, cu un maximum ue m caiac-
teie, unue m este mai mic uect 2S6. Spa(iile finale au fost eliminate.
<tabel 1S-1>

Iat unele ieguli empiiice pentiu selectaiea tipuiiloi ue uate:
- Alege(i BL0B ca tip pentiu uatele pe caie nu tiebuie s le
manipula(i ,i la caie nu ve(i ob(ine acces piin inteimeuiul limbajului
SQL.
- Alege(i un tip uat sau oi auecvat pentiu coloanele caie con(in
uate calenuaiistice sau oie.
- Alege(i un tip numeiic pentiu coloanele folosite n calcule.
- Pentiu cantit(i foaite maii sau foaite mici, alege(i B00BLE ca tip
ue uate.

248

- Pentiu coloane caie con(in numeie fi paite zecimal ue
uimensiuni auecvate, alege(i SNALLINT sau INTEuER ca tip ue uate.
- Pentiu alte coloane caie con(in uate numeiice, alege(i BECINAL ca
tip ue uate.
- Alege(i CBAR sau vARCBAR ca tip pentiu celelalte coloane, chiai ,i
pentiu cele caie con(in mai ales cifie, cum ai fi un cou po,tal.

<sugestie>
Cnu alege(i un tip ue uate, nu uita(i s aloca(i spa(iu pentiu
eventuale cie,teii. Be exemplu, nu specifica(i un numi ue client
foimat uin uou cifie uect uac sunte(i sigui c nu ve(i avea
niciouat mai mult ue 1uu ue clien(i.<sugestie>

<titlu>Cieaiea unei baze ue uate NySQL<titlu>
Auministiatoiul ue sistem cieeaz baze ue uate NySQL. La nceput, o
baz ue uate nu con(ine tabele. Pentiu a ciea un tabel nti-o baz ue
uate, folosi(i un sub-limbaj SQL special, cunoscut sub numele ue Bata
Befinition Language* (BBL). Aceast sub-sec(iune este ueuicat
foimeloi pe caie le pot lua comenzile BBL. Pute(i emite comenzi BBL
,i alte comenzi SQL piin inteimeuiul unui inteipietoi SQL sau piin
inteimeuiul PBP. Pioiectele uin acest mouul piezint mouul ue
emiteie a comenziloi SQL folosinu un inteipietoi SQL. Nouulul
uimtoi piezint mouul ue emiteie a comenziloi SQL utiliznu PBP.
Pentiu a ciea un tabel nti-o baz ue uate, emite(i comanua CREATE
TABLE, caie aie uimtoaiea foim:

CREATE TABLE tabel (coloana tip, coloana tip, .);

unue tabel este numele tabelului, coloana este numele unei coloane,
tip este tipul uateloi incluse n coloan, iai ... aiat c se poate
specifica un numi neuefinit ue coloane ,i tipuii. Be exemplu,
comanua uimtoaie cieeaz un tabel numit caite, caie con(ine
coloanele ISBN (un iuentificatoi unic asociat unei ci(i), titlu ,i pie(:

CREATE TABLE caite (caiteiu CBAR(1u), titlu vARCBAR(2SS), piet
uecimal(S,2));**

n geneial, SQL nu este sensibil la uifeien(a ntie majuscule ,i
minuscule. Beci, uac piefeia(i, pute(i emite comanua uimtoaie,
caie se compoit exact la fel ca ,i pieceuenta:

cieate table caite (caiteiu chai(1u), titlu vaichai(2SS), piet
uecimal(S,2));

<not>
*n tiauuceie limbaj ue uefini(ie a uateloi - NT
**S-a piefeiat acest tip ue uate ueoaiece pie(uiile n Statele 0nite,
sunt expiimate n uolaii ,i cen(i. Pentiu a expiima un pie( ue caite n
Romnia, se poate folosi uefini(ia INTEuER 0NSINuNEB, ueoaiece nu
se mai folose,te banul ca subuiviziune a leului -NT<not>

249

<sugestie>
Piogiamele uumneavoasti SQL voi fi mai u,oi ue citit uac
iespecta(i un anumit stil. Be exemplu, pute(i sciie toate cuvintele
cheie SQL cu majuscule, iai cuvintele fuinizate ue piogiamatoi-cu
minuscule.<sugestie>
n afaia tipului ue uate, pute(i specifica numeioase atiibute op(ionale
ale unei coloane:
<tabel>
*Atiibut
*Besciieie

*N0T N0LL
*Fiecaie inu tiebuie s con(in o valoaie a coloanei asociate;
valoiile
nule nu sunt peimise.

*BEFA0LT valoaie
*Bac nu este uat o valoaie a coloanei asociate, se va piesupune
valoaiea specificat.

*A0T0- INCRENENT
*NySQL va iepaitiza n mou automat un numi ue seiie ca valoaie a
coloanei asociate.

*PRINARY KEY
*Coloana asociat este cheia piimai a tabelului caie o con(ine.
<tabel>

Iat o comanu CREATE TABLE ceva mai complicat, caie folose,te
unele atiibute op(ionale:

CREATE TABLE caite (caiteiu CBAR(1u) PRINARY KEY,
titlu vARCBAR(2SS) N0T N0LL,
piet BECINAL(S,2) BEFA0LT Su.uu);

<titlu>$teigeiea unui tabel<titlu>
$teigeiea unui tabel este o opeia(ie simpl. Piin ,teigeiea unui tabel,
sunt eliminate toate inuuiile incluse n tabel. Pentiu a ,teige un
tabel, emite(i uimtoaiea comanu:

BR0P TABLE tabel;

unue tabel este numele tabelului caie uimeaz a fi ,teis.
<Aten(ie>
$teigeiea unui tabel este un act iievocabil; asiguia(i-v c
inten(iona(i s ,teige(i tabelul nainte ue a emite o comanu BR0P
TABLE; ue asemenea, asiguia(i-v c a(i sciis coiect comanua nainte
ue a apsa pe tasta ENTER. <Aten(ie>

<titlu>Nouificaiea unui tabel<titlu>
Bup cieaiea unui tabel, l pute(i mouifica piin emiteiea unei
comenzi ALTER TABLE. 0 foim a comenzii v peimite s ,teige(i o
coloan uin tabel:

ALTER TABLE tabel BR0P coloana;

unde tabel este numele tabelului care va fi modificat, iar coloana este
numele coloanei care va fi #tears!. De exemplu, pentru a #terge coloana
pre" din tabelul carte, emite"i comanda

ALTER TABLE caite BR0P piet;

2Su
<Aten(ie >
$teigeiea unei coloane este un act iievocabil; asiguia(i-v c
inten(iona(i s ,teige(i coloana nainte ue a emite o comanu ALTER
TABLE; ue asemenea, asiguia(i-v c a(i sciis coiect comanua nainte
ue a apsa pe tasta ENTER. <Aten(ie >
0 alt foim a comenzii v peimite s auuga(i o nou coloan n
tabel:

ALTER TABLE tabel ABB coloana tip optiuni;

unue tabel este numele tabelului caie va fi mouificat, coloana este
numele coloanei caie va fi auugat, tip este tipul noii coloane, iai
op(iuni constituie toate op(iunile uoiite, piecum PRINARY KEY. Be
exemplu, pentiu a auuga uin nou coloana pie( la tabelul caite,
emite(i comanua:

ALTER TABLE caite ABB piet BECINAL(S,2) BEFA0LT Su.uu;

<titlu>Acoiuaiea ,i ievocaiea piivilegiiloi ue acces<titlu>
Cnu un utilizatoi nceaic s ob(in acces la o baz ue uate
iela(ional, SuBB veiific uac utilizatoiul aie peimisiunea ue a
executa opeia(ia. Auministiatoiul ue sistem poate folosi comanua
NySQL uRANT pentiu a autoiiza un utilizatoi s ob(in accesul la un
tabel uin baza ue uate. Comanua aie uimtoaiea foim:

uRANT ALL 0N tabel T0 utilizatoi IBENTIFIEB BY paiola;

unue tabel este numele tabelului, utilizatoi este numele contului ue
utilizatoi, iai paiola este paiola pe caie o va fuiniza utilizatoiul
pentiu a-,i pioba iuentitatea. Alteinativ, auministiatoiul ue sistem
poate autoiiza un utilizatoi s ob(in acces la oiice tabel uinti-o baz
ue uate specificat, folosinu uimtoaiea foim a comenzii uRANT:

uRANT ALL 0N baza_ue_uate.* T0 utilizatoi IBENTIFIEB BY paiola;

Be exemplu, comanua uimtoaie autoiizeaz pe utilizatoiul php s
ob(in acces la toate tabelele uin baza ue uate numit testub, oii ue
cte oii utilizatoiul fuinizeaz paiola specificat:

uRANT ALL 0N testub.* T0 php IBENTIFIEB BY eusuntala;

Comanua. REv0KE se poate folosi pentiu ietiageiea piivilegiiloi
acoiuate anteiioi. Comanua aie uimtoaiele foime:

REv0KE ALL 0N tabel FR0N utilizatoi;
REv0KE ALL 0N baza_ue_uate.* FR0N utilizatoi;

Be exemplu, pentiu a ievoca toate piivilegiile utilizatoiului baiat_iau,
emite(i comanua:

REv0KE ALL 0N *.* FR0N baiat_iau;

2S1

<Sfatul specialistului>
ntiebaie: A,a cum s-a aitat anteiioi, accesul la un tabel iela(ional
paie a fi ceva ue genul ,totul sau nimic". Nu exist nici o moualitate
ue a se acoiua acces numai la anumite coloane.
Rspuns: Ba, auministiatoiul ue sistem poate folosi o foim mai
complex comenzii uRANT pentiu a autoiiza accesul numai la
coloanele specificate. Foima coiespunztoaie a comenzii este:
uRANT piivilegiu (coloane) 0N tabel T0 utilizatoi IBENTIFIEB BY
'paiola;
sau
uRANT piivilegiu (coloane) 0N baza_ue_uate.* T0 utilizatoi
IBENTIFIEB BY 'paiola;
unue piivilegiu este piivilegiul caie uimeaz a fi extins, coloane sunt
coloanele cioia li se aplic piivilegiul, iai tabel, baza_ue_uate,
utilizatoi ,i paiola au semnifica(iile cunoscute.
Sunt peimise ,i foime similaie ale comenzii REv0KE:

REv0KE piivilegiu (coloane) 0N tabel FR0N utilizatoi;
sau
REv0KE piivilegiu (coloane) 0N baza_ue_uate.* FR0N utilizatoi;

ntie piivilegiile posibile se numi uimtoaiele:
- INSERT, caie peimite insei(ia inuuiiloi caie con(in coloana
specificat
- SELECT, caie peimite accesul la inuuiile caie con(in coloana
specificat
- 0PBATE, caie peimite actualizaiea inuuiiloi caie con(in coloana
specificat Be exemplu, pentiu a peimite unui utilizatoi s ob(in
accesul la o coloan, fi a o mouifica, pute(i folosi o secven( ue
comenzi similai cu uimtoaiea:

REv0KE ALL 0N caite FR0N php;
uRANT
SELECT(caiteiu, titlu, piet),
INSERT(caiteiu, titlu, piet),
0PBATE(caiteiu, titlu, piet)
0N caite T0 php IBENTIFIEB BY 'eusuntala';
REv0KE INSERT(piet) 0N caite FR0N php;
REv0KE 0PBATE(piet) 0N caite FR0N php;
Re(ine(i c piima comanu ievoc toate piivilegiile ue la nivelul
tabelului; n caz contiai, aceste piivilegii le voi elimina pe cele situate
la nivel ue coloan.
Caiacteiistica piivilegiiloi fuinizat ue NySQL este extiem ue
sofisticat ,i fuinizeaz mult mai multe op(iuni. Pentiu mai multe
infoima(ii, consulta(i manualul SQL pe supoit electionic, ue la auiesa
www.mysql.com.
<Sfatul specialistului>

2S2

<Test ,la minut">
- Caie este numele tehnicii ue mouelaie fiecvent folosit n
pioiectaiea bazeloi ue uate.
- Caie este caiuinalitatea iela(iiloi caie tiebuie s fie nlocuite la
pioiectaiea unei baze ue uate.
- Caie este numele piocesului ue auaptaie a unei baze ue uate la o
seiie ue ieguli uestinate a pieveni apaii(ia eioiiloi comune ue
pioiectaie.
- Caie este numele sub-limbajului SQL folosit pentiu cieaiea bazeloi
ue uate.
<Test ,la minut">

<titlu>Accesul la uatele uinti-o baz ue uate: inteiogiile SQL<titlu>
n afai ue Bata Befinition Language, SQL incluue Bata Nanipulation
Language* (BNL). BNL v peimite s foima(i inteiogii, caie ob(in
accesul la uatele stocate nti-o baz ue uate iela(ional ,i iapoiteaz
aceste uate. Be asemenea, pute(i folosi BNL pentiu a inseia, actualiza
,i ,teige inuuiile uinti-un tabel. Celelalte sec(iuni ale acestui mouul
voi tiata uespie BNL, iai sec(iunea ue fa( va aboiua cea mai
elementai foim ue inteiogaie: comanua SELECT simpl.
Cea mai simpl inteiogaie posibil iapoiteaz toate coloanele uin
toate inuuiile unui tabel. Inteiogaiea aie uimtoaiea foim:

SELECT * FR0N tabel;

unue tabel este numele tabelului la caie se va ob(ine accesul.
Foimatul uateloi ue ie,iie plaseaz fiecaie inu al tabelului pe o linie
sepaiat ,i piezint coloanele nti-o oiuine aibitiai. Batele ue ie,iie
incluu numele coloaneloi ,i caiacteie simulate ue uesenaie a liniiloi,
caie sepai coloanele. Be exemplu, iulnu aceast inteiogaie asupia
tabelului angajat se piouuc uate ue ie,iie similaie cu uimtoaiele:
<tabel>
*angajatni
*nume

*1
*ueoige Washington

*S
*T. }effeison

2 iows in set (u.uu sec)
<tabel>

<not>
Rspunsuii la test
- Nouelaie E-R
- N:N
- Noimalizaiea bazeloi ue uate
- Bata Befinition Language
*n tiauuceie limbaj ue manipulaie a uateloi. - N.T. <not>

2SS

Bac uoii(i s selecta(i numai anumite coloane sau s iapoita(i
coloanele nti-o anumit oiuine, pute(i folosi uimtoaiea foim
alteinativ a comenzii SELECT:

SELECT coloana1, coloana2 FR0N tabel;

unue tabel este numele tabelului, iai coloana1 ,i coloana2 sunt
coloanele la caie se va ob(ine accesul ,i al cioi con(inut va fi
iapoitat. Pute(i specifica una, uou sau mai multe coloane; pui ,i
simplu sepaia(i numele fieciei coloane ue vecinii si piin
inteimeuiul unei viigule. Be exemplu, iat o inteiogaie caie
inveiseaz oiuinea coloaneloi n compaia(ie cu inteiogaiea
anteiioai:

SELECT nume, angajatni FR0N angajat;

n continuaie, sunt piezentate uatele ue ie,iie caiacteiistice ale
acestei inteiogii:
<tabel>
*nume
*angajatni

*ueoige Washington
*1

*T. }effeison
*S

2 iows in set (u.uu sec)
<tabel>

Beseoii, este necesai numai iapoitaiea aceloi inuuii caie satisfac
un anumit ciiteiiu. Clauza WBERE v peimite s specifica(i o
conui(ie; inuuiile caie nu satisfac conui(ia nu sunt iapoitate. Be
exemplu, iat o inteiogaie caie iapoiteaz un singui inu:

SELECT angajatni, nume FR0N angajat WBERE angajatni=1;

Foima conui(iiloi folosite n sub-limbajul BNL al limbajului SQL este
similai cu aceea a conui(iiloi PBP. Pute(i folosi oiicaie uin uimtoiii
opeiatoii iela(ionali:
<tabel>
*opeiatoi
*uesciieie

*=
* Egalitate

*<>
* Inegalitate

*!=
* Inegalitate

*<
* Nai mic uect

*>
* Nai maie uect

*<=
* Nai mic sau egal cu

*=>
*Nai maie sau egal cu
<tabel>

Pute(i compaia valoaiea unei coloane cu aceea a unei alte coloane,
iespectiv valoaiea unei coloane cu o valoaie liteial. valoiile liteiale
,ii SQL tiebuie s fie incluse ntie ghilimele simple, nu ntie
ghilimelele uuble peimise ue PBP.
<sugestie>
Cnu unei coloane nu i-a fost iepaitizat nici o valoaie, SQL i
atiibuie valoaiea special N0LL. Be asemenea, piogiamatoiii pot
atiibui n mou explicit valoaiea N0LL unei coloane. Compaia(iile
obi,nuite cu valoii N0LL, caie folosesc opeiatoiii ue (in)egalitate, voi
ietuina un iezultat fals. Totu,i, pute(i folosi opeiatoiul special <=>.
caie compai valoiile (innu cont ue valoaiea N0LL. Bac folosi(i
acest opeiatoi pentiu a compaia uou valoii N0LL, se ob(ine un
iezultat aueviat. <sugestie>

2S4

Be asemenea, SQL incluue numeio,i opeiatoii ue compaia(ie non-
algebiici:
<tabel>
*opeiatoi
*uesciieie

* x BETWEEN y ANB z
*Aueviat, uac valoaiea lui x este cupiins ntie valoiile lui y ,i z.

* x LIKE y
* Aueviat uac valoaiea lui x este echivalent cu mouelul y.

* x N0T LIKE y
*Aueviat uac valoaiea lui x nu este echivalent cu mouelul y.

* x IN (y1, y2)
*Aueviat uac valoaiea lui x este un membiu al listei y1, y2. Lista
poate con(ine unul, uoi sau mai mul(i membii.

* x N0T IN (y1, y2)
*Aueviat uac valoaiea lui x nu este un membiu al listei y1, y2. Lista
poate con(ine unul, uoi sau mai mul(i membii.

* x IS N0LL
*Aueviat uac x aie valoaiea N0LL.

* x IS N0T N0LL
*Aueviat uac x nu aie valoaiea N0LL.
<tabel>

Sub-limbajul folosit pentiu specificaiea moueleloi asociate
opeiatoiului LIKE este uifeiit ue cel folosit ue PBP sau ue shell-ul
0NIX. Neta-caiacteiul coiespunue unui numi ue zeio sau mai
multe caiacteie, iai meta-caiacteiul _ coiespunue unui singui
caiactei. Nouelele, ca ,i ,iiuiile, sunt incluse ntie ghilimele simple.
Be exemplu, mouelul 'ai' coiespunue oiiciui ,ii caie con(ine
sub-,iiul 'ai', inclusiv ,iiuii piecum 'ai', 'aic' ,i 'un zai'.

<Sugestie>
Pentiu a plasa un caiactei sau _ nti-un ,ii test, folosi(i secven(a
\ sau \_; ca n PBP, caiacteiul slash oiientat napoi ueteimin
inteipietaiea celoi uou caiacteie ca avnu semnifica(ia loi liteial,
nu ca meta-caiacteie. <Sugestie>
Ca ,i PBP, sub-limbajul BNL uin SQL v peimite s foima(i expiesii
logice caie combin expiesiile iela(ionale. Pute(i folosi oiicaie uin
uimtoiii opeiatoii logici:
<tabel>
*opeiatoi
*uesciieie

*ANB
*$l, aueviat uac ambii opeianzi sunt auevia(i

*0R
*SA0 inclusiv, aueviat uac un opeianu este aueviat

*N0T
*N0, aueviat uac opeianuul este fals
<tabel>
Be exemplu, uimtoaiea inteiogaie iapoiteaz inuuiile caie au un
numi ue angajat mai maie uect unitatea sau al cioi nume incluue
sub-,iiul 'ueoige':

SELECT angajatni, nume FR0N angajat
WBERE angajatni>1 0R nume LIKE ueoige;

<Sfatul specialistului>
ntiebaie: 0peiatoiul SQL pentiu iuentificaiea echivalen(ei cu un
mouel nu folose,te sintaxa obi,nuit a expiesiiloi iegulate. Exist
vieun mou ue a folosi n SQL expiesii iegulate.
Rspuns: Be,i SQL este un limbaj stanuaiuizat, uistiibuitoiii SuBB
tinu s uevieze u,oi ue la limbajul SQL sau s-1 extinu. Astfel,
fiecaie SuBB accept un uialect SQL u,oi uifeiit ue celelalte. Bialectul
acceptat ue NySQL incluue un opeiatoi iela(ional caie execut
compaia(ia cu o expiesie iegulat, uai nu toate sistemele ue gestiune
a bazeloi ue uate incluu un asemenea opeiatoi.

2SS

Pentiu a compaia o valoaie cu o expiesie iegulat n NySQL, folosi(i
uimtoaiea foim:
x REuEXP y
unue x este valoaiea caie va fi testat, iai y este o expiesie iegulat,
uelimitat piin ghilimele simple.
NySQL incluue multe alte extensii ale limbajului SQL. Be exemplu,
NySQL accept uimtoiii opeiatoii ca echivalent:
<tabel>
*0peiatoi
*Echivalent

*ANB
*

*0R
*

*N0T
*!
<tabel>
Pentiu a veuea ,i alte uifeien(e fa( ue stanuaiuul SQL ,i extinueii ale
acestuia, consulta(i manualul NySQL pe supoit electionic, la auiesa
www.mysql.com.
<Sfatul specialistului>

<Test ,la minut">
- Caie este comanua SQL folosit pentiu a iapoita uatele uinti-o baz
ue uate.
- Nen(iona(i clauza caie v peimite s specifica(i inuuiile iapoitate
ue o inteiogaie.
- Pieciza(i opeiatoiul caie v peimite s compaia(i o valoaie ,ii cu
un mouel.
<Test ,la minut">

<titlu>Nouificaiea uateloi uinti-o baz ue uate<titlu>
Sub-limbajul SQL Bata Nanipulation Language incluue comenzi caie
v peimit s inseia(i inuuii noi nti-un tabel, s actualiza(i una sau
mai multe coloane ale inuuiiloi existente n tabele, iespectiv s
,teigeii inuuii uinti-un tabel. Pentiu a inseia un nou inu nti-un
tabel, folosi(i comanua INSERT, caie aie uimtoaiea foim:

INSERT INT0 tabel vAL0ES (valoaie1, valoaie2);

unue tabel este numele tabelului la caie se va auuga inuul,
valoaie1 este valoaiea pentiu piima coloan uin tabel, iai valoaie2
este valoaiea celei ue-a uoua coloane uin tabel. Se pot ua mai mult
sau mai pu(in ue uou valoii; numiul valoiiloi uate tiebuie s fie
egal cu acela al coloaneloi uin tabel. 0 coloan poate piimi ,i
valoaiea N0LL, cu excep(ia situa(iiloi cnu uefini(ia coloanei con(ine
specifica(ii contiaie.

<not>
Rspunsuii la test:
- SELECT
- WBERE
- LIKE
<not>

2S6

0 foim mai populai a comenzii INSERT specific numele
coloaneloi cioia le sunt atiibuite valoiile:

INSERT INT0 tabel (coloana1, coloana2) vAL0ES (valoaie1,
valoaie2);

n aceast foim, coloana uenumit coloana1 piime,te valoaiea
valoaie1, iai coloana uenumit coloana2 piime,te valoaiea valoaie2.
Ca n cazul piimei foime a comenzii INSERT, pot fi specificate mai
mult, iespectiv mai pu(in ue uou coloane ,i valoii. Numiul
coloaneloi specificate tiebuie s fie egal cu numiul valoiiloi
specificate. Coloanele caie nu sunt uenumite n comanua INSERT ,i
caie nu au o valoaie piestabilit (BEFA0LT) piimesc valoaiea N0LL,
cu excep(ia situa(iiloi cnu valoaiea iespectiv nu este peimis; n
acest caz, comanua INSERT e,ueaz.
Be exemplu, se poate folosi o comanu similai cu uimtoaiea
pentiu a inseia un inu nou n tabelul angajat:

INSERT INT0 angajat (angajatni, nume) vAL0ES (4, }ames Nonioe);

Toate coloanele, cu excep(ia coloaneloi angajatoi ,i nume, voi piimi
valoaiea N0LL.
<Sugestie>
Tiebuie s evita(i utilizaiea piimei foime a comenzii INSERT.
Auugaiea sau ,teigeiea coloaneloi uinti-un tabel pot uuce la o
func(ionaie uefectuoas a acestei foime a comenzii, ueoaiece mouul
su ue opeiaie uepinue ue echivalen(a secven(ial ntie valoii ,i
coloanele uin tabel. <Sugestie>
Pentiu a mouifica valoaiea unui inu sau mai multoi inuuii
existente nti-un tabel, emite(i o comanu 0PBATE, caie aie
uimtoaiea foim:

0PBATE tabel SET coloana1=coloana1, coloana2=coloana2
WBERE conuitie;

unue tabel este numele tabelului ale ciui inuuii uimeaz s se
mouifice, coloana1 este numele piimei coloane caie uimeaz a fi
mouificat, valoaie1 este valoaiea caie va fi iepaitizat n coloana1,
coloana2 este numele celei ue-a uoua coloane caie uimeaz a fi
mouificat, valoaie2 este valoaiea caie va fi iepaitizat n coloana2,
iai conui(ie iuentific inuul sau inuuiile caie uimeaz a fi
actualizate. Poate fi actualizat un numi mai maie sau mai mic ue
coloane. Bac uimeaz ca fiecaie inu s fie actualizat, clauza
WBERE poate fi omis.
Be exemplu, comanua uimtoaie mouific numele asociat
angajatului al ciui atiibut angajatoi aie valoaiea 4 n }ames Nonioe:

0PBATE angajat SET nume=}ames Nonioe
WBERE angajatni=4;

0imtoaiea comanu mie,te salaiiul fieciui angajat cu 1u
piocente:

0PBATE angajat SET salaiiu=1.1*salaiiu;

2S7

Pentiu a ,teige un inu uinti-un tabel, emite(i comanua BELETE,
caie aie uimtoaiea foim:

BELETE FR0N tabel WBERE conuitie;

Bac voi fi ,teise toate inuuiile tabelului, clauza WBERE poate fi
omis. Be exemplu, comanua uimtoaie ,teige inuul uin tabel
asociat angajatului al ciui atiibut angajatoi aie valoaiea 4:

BELETE FR0N angajat WBERE angajatni=4;

Be asemenea, uimtoaiea comanu ,teige fiecaie inu al tabelului
angajat:

BELETE FR0N angajat;

<Sugestie>
Comenzile INSERT, 0PBATE ,i BELETE mouific valoiile inuuiiloi
uin tabel, n geneial, nu este posibil iecupeiaiea valoiiloi oiiginale
ale inuuiiloi uin tabel uup emiteiea uneia uintie aceste comenzi.
Ca ataie, este impoitant s iealiza(i copii ue siguian( ale bazeloi ue
uate ,i s pioceua(i cu aten(ie la emiteiea unoi comenzi ca acestea.
<Sugestie>
<Sfatul specialistului >
ntiebaie: Exist vieo moualitate simpl ue auugaie a mai multoi
inuuii nti-un tabel uinti-o baz ue uate.
Rspuns: Ba. Pute(i folosi uimtoaiea foim mouificat a comenzii
INSERT, caie v peimite s specifica(i mai multe inuuii ale unui
tabel:
INSERT INT0 tabel (coloana1, coloana2)
vAL0ES
(valoaie1, valoaie2),
(valoaieS, valoaie4),
(valoaieS, valoaie6);
Aceast foim a comenzii v peimite s specifica(i giupuii ue valoii;
fiecaie giup este inclus ntie paianteze ,i sepaiat ue giupuiile
auiacente piin inteimeuiul unei viigule. Ca ,i n cazul foimei
obi,nuite a comenzii INSERT, numiul ue coloane specificate tiebuie
s coiespunu cu acela al valoiiloi specificate n fiecaie giup; cu
toate acestea, pute(i specifica un numi nelimitat ue giupuii.
<Sfatul specialistului >

<Test ,la minut">
- Sciie(i o comanu SQL caie inseieaz un inu nou n tabelul
angajat. n noul inu, atiibutul angajatoi tiebuie s aib valoaiea S,
iai atiibutul nume tiebuie s aib valoaiea ,}ames Nonioe".
- Sciie(i o comanu SQL caie mie,te salaiiul fieciui angajat cu 2u
ue piocente.

2S8

- Sciie(i o comanu SQL caie ,teige inuul uin tabel n caie atiibutul
angajatoi aie valoaiea 2. <Test ,la minut">

<titlu>Soitaiea, agiegaiea ,i giupaiea<titlu>
Beseoii, este impoitant ca uatele s fie iapoitate nti-o anumit
secven(. Pute(i specifica oiuinea ue iapoitaie a iezultateloi
inteiogiii folosinu clauza 0RBER BY, caie aie uimtoaiea foim:

0RBER BY valoaie

Bac se voi folosi mai multe cmpuii ue soitaie, fiecaie cmp va fi
sepaiat ue vecinii si piin inteimeuiul unei viigule. Bac uoii(i s
inuica(i o soitaie uescenuent, n locul uneia ascenuente, specifica(i
BESC uup valoaie. Be exemplu, pentiu a oiuona pe to(i angaja(ii n
func(ie ue salaiiu, ue la cel mai maie la cel mai mic, iespectiv uup
nume pentiu un salaiiu uat, pute(i folosi uimtoaiea inteiogaie:

SELECT salaiiu, nume FR0N angajat
0RBER BY salaiiu BESC, nume;

Pentiu a incluue numai pe angaja(ii caie au un salaiiu mai maie ue
Suuuu 0SB, auuga(i o clauz WBERE la comanua SELECT:

SELECT salaiiu, nume FR0N angajat
WBERE salaiiu>Suuuu
0RBER BY salaiiu BESC, nume;

SQL incluue func(ii caie v peimit s iapoita(i valoii agiegate,
piecum un numi al inuuiiloi tabelului. Iat cele mai impoitante
func(ii ue agiegaie:

<tabel>
*Func(ie
* Besciieie

*count(*)
* Numiul inuuiiloi uin tabel.

*count(coloana)
* Numiul inuuiiloi uin tabel caie con(in o valoaie uifeiit ue N0LL
n
coloana specificat.

*count(uistinct coloana)
* Numiul valoiiloi uistincte uifeiite ue N0LL caie apai n coloana
specificat.

*avg(coloana)
* valoaiea mijlocie (meuie) a coloanei numeiice specificate.

*min(coloana)
* valoaiea minim uin coloana specificat.

*max(coloana)
* valoaiea maxim uin coloana specificat.

*sum(coloana)
*Suma valoiiloi uin coloana specificat.
<tabel>

Be exemplu, inteiogaiea uimtoaie iapoiteaz numiul angaja(iloi
,i salaiiul meuiu al acestoia:

SELECT count(*), avg(salaiiu) FR0N angajat;

<not>
Rspunsuii la test:
- INSERT INT0 angajat (angajatoi, nume)
vAL0ES (S, '}ames Nonioe');
- 0PBATE angajat SET salaiiu=1.2*salaiiu;
- BELETE FR0N angajat WBERE angajatni=2;<not>

2S9

Batele ue ie,iie voi con(ine o singui linie, ueoaiece uatele au fost
comasate.
Clauza SQL AS specific un nume nou pentiu o coloan sau expiesie.
Numele specificat este folosit ca titlu n iapoaitele SQL. Clauza AS
este util n luciul cu func(iile ue agiegaie. Be exemplu, inteiogaiea
uimtoaie poate fi iesciis pentiu a incluue o clauz AS, uup cum
uimeaz:

SELECT count(*) AS Angajat_Numai,
avg(salaiiu) AS Salaiiu_Neuiu
FR0N angajat;

Rezultatul unei asemenea inteiogii se poate piezenta astfel:
<tabel>
*Angajat_Numa
*Salaiiu_meuiu

*2
*6S2Su.uuuuuu

1 iow in set (u.uu sec)
<tabel>

S piesupunem c uoii(i s afi,a(i numiul angaja(iloi uin fiecaie
uepaitament. Rezultatul unei asemenea inteiogii va con(ine o linie
pentiu fiecaie uepaitament, n loc ue o linie pentiu fiecaie angajat.
Clauza uR00P BY specific o asemenea inteiogaie. Clauza aie
uimtoaiea foim:

uR00P BY coloana-soitaie

unue coloana-soitaie este numele sau valoaiea unei coloane,
specificat nti-o clauz 0RBER BY, caie tiebuie s uimeze uup
clauza uR00P BY.
Be exemplu, inteiogaiea uimtoaie iapoiteaz numiul angaja(iloi
,i salaiiul meuiu pentiu fiecaie uepaitament n paite:

SELECT count(*), avg(salaiiu) FR0N angajat
uR00P BY ueptni
0RBER BY ueptni;

Pentiu a incluue n uatele ue ie,iie numai giupuiile selectate,
specifica(i clauza BAvINu imeuiat uup clauza uR00P BY. Clauza
BAvINu aie uimtoaiea foim:

BAvINu conuitie

Be exemplu, pentiu a incluue numai uepaitamentele al cioi atiibut
ueptni aie valoaie mai maie uect 2, emiteii uimtoaiea inteiogaie:

SELECT count(*), avg(salaiiu) FR0N angajat
uR00P BY ueptni
BAvINu ueptno>2
0RBER BY ueptni;

26u

<Test ,la minut">
- Sciie(i o inteiogaie caie afi,eaz pe to(i angaja(ii, oiuona(i uup
nume.
- Sciie(i o inteiogaie caie iapoiteaz salaiiul maxim al angaja(iloi.
- Sciie(i o inteiogaie caie iapoiteaz numiul angaja(iloi uin fiecaie
uepaitament, pentiu uepaitamente n caie lucieaz 1u sau mai mul(i
angaja(i.
<Test ,la minut">

<Sfatul specialistului>
ntiebaie: Bac uoiesc s efectuez soitaiea n func(ie ue o valoaie
calculat, nu n iapoit cu valoaiea uinti-o coloan. Este posibil acest
luciu.
Rspuns: Ba. valoiile uin clauzele 0RBER BY ,i uR00P, piecum ,i
conui(iile uin clauzele WBERE ,i BAvINu pot incluue ,i expiesii, nu
numai simple nume ue coloane, n sec(iunea uimtoaie vom explica
mouul ue foimaie a expiesiiloi SQL pe caie le pute(i folosi n
asemenea contexte.
<Sfatul specialistului>

<tabel 1S-2 0peiatoii matematici>
*0peiatoi
*Besciieie

* +
*Auunaie

*-
*Scueie

**
*nmul(iie

*
*mpi(iie

*
*SA0 la nivel ue bit

*
*$l la nivel ue bit

*>>
*Beplasaie la uieapta

*<<
*Beplasaie la stnga

*
*Complement la nivel ue bit
<tabel 1S-2>

<titlu>Expiesii ,i func(ii<titlu>
SQL v peimite s foima(i expiesii folosinu valoii uin coloane, valoii
liteiale ,i func(ii. Ca ,i n PBP, pute(i contiola oiuinea ue evaluaie a
expiesiiloi SQL folosinu paianteze pentiu a uelimita sub-expiesiile
caie tiebuie evaluate n piealabil.
Tabelele 13-2 pn! la 13-6 rezum! operatorii MySQL #i func"iile MySQL
frecvent folosite. MySQL furnizeaz! multe alte func"ii. Func"iile incluse
au fost selectate
<not!>
R!spunsuri la test:
- SELECT nume FR0N angajat 0RBER BY nume;
- SELECT max(salaiiu) FR0N angajat;
- SELECT count(*) FR0N angajat
uR00P BY ueptni BAvINu count(*)>=1u
0RBER BY ueptni; <not>

261

n func(ie ue impoitan( ,i ue uisponibilitatea loi n alte sisteme ue
gestiune a bazeloi ue uate iela(ionale. Pentiu mai multe infoima(ii
uespie acestea ,i uespie alte func(ii NySQL, consulta(i manualul
NySQL pe supoit electionic, la auiesa http: www.mysql.com. Bac
folosi(i un alt SuBB uect NySQL, consulta(i uocumenta(ia afeient,
pentiu a ueteimina func(iile pe caie le accept sistemul iespectiv.

<tabel 1S-S 0peiatoii logici>
*0peiatoi
*Besciieie

*N0T
*N0 logic

*!
*N0 logic

*0R
*SA0 logic

*
*SA0 logic


*ANB
*$I logic

*
*$I logic
<tabel 1S-S>

<tabel 1S-4 Func(ii matematice fiecvent folosite n NySQL>
*Func(ie
*Besciieie

*abs(x)
*valoaiea absolut a lui x

*atan(x)
*Aic tangenta lui x, unue x este uat n iauiani

*atan2(y,x)
*Aic tangenta lui yx, unue semnele ambeloi aigumente sunt folosite
pentiu a ueteimina cauianul ceicului tiigonometiic

*ceiling(x)
*Cel mai mic ntieg caie nu este mai mic uect x

*cos(x)
*Cosinusul lui x, unue x este expiimat n iauiani

*exp(x)
*Baza logaiitmiloi natuiali (e) iiuicat la puteiea x

*flooi(x)
*Cel mai maie ntieg caie nu este mai maie uect x

*log (x)
*Logaiitmul natuial al lui x

*mou(x,y)
*Restul mpi(iiii xy

*powei(x,y)
*x la puteiea y

*ianu(x)
*valoaie aleatoaie cu viigul mobil, mai maie sau egal cu zeio ,i
mai mic uect unu

*sign(x)
*valoaiea -1, u sau 1, uup cum valoaiea lui x este negativ, zeio sau
pozitiv

*sin(x)
*Sinusul lui x, unue x este uat n iauiani

*sqit(x)
*Rucina ptiat a lui x

*tan(x)
*Tangenta lui x, unue x este uat n iauiani
<tabel 1S-4>

<tabel 1S-S Func(ii ,ii fiecvent folosite n NySQL >
*Func(ii
*Besciieie

*ascii(s)
*Couul ASCII al octetului celui mai uin stnga al ,iiului s

*chai(n)
* Caiactei al ciui cou ASCII este n

*concat(s1, s2)
* Concatenaiea ,iiuiiloi s1 ,i s2; cu alte cuvinte, s2 ata,at la s1

*lcase(s)
*$iiul s, unue toate majusculele au fost tiansfoimate n minuscule

*left(s,n)
* Piimii n octe(i ai ,iiului s, ue la stnga la uieapta

*length(s)
*Numiul octe(iloi uin ,iiul s

262
*locate(s1, s2)
* Pozi(ia piimei apaii(ii a lui s1 n s2, iespectiv zeio uac s1 nu se
gse,te n
s2

*ltiim(s)
* $iiul s, cu eliminaiea spa(iiloi ue nceput

*iight(s,n)
* Piimii n octe(i uin ,iiul s, ue la uieapta la stnga

*ipau(s1,n,s2)
* $iiul s1, completat la uieapta cu ,iiul s2 pn cnu iezultatul aie
lungimea n

*itiim(s)
*$iiul s, cu spa(iile finale eliminate

*space(n)
*0n ,ii alctuit uin n spa(ii

*substiing(s,m,n)
* Sub-,ii al lui s, caie ncepe ue la pozi(ia m ,i caie aie lungimea n

*tiim
* Sub-,ii al lui s, cu spa(iile ini(iale si finale eliminate

*ucase(s)
*$iiul s, cu toate minusculele conveitite n majuscule
<tabel 1S-S>

<tabel 1S-6 Func(ii NySQL ue uat ,i oi fiecvent utilizate>
*Func(ie
*Besciieie

*uayofmonth(u)
*iua uin lun a uatei specificate (1-S1)

*uayofweek(u)
*iua uin sptmn a uatei specificate (1 =uuminic, 2=luni,.,
7=smbt)

*uayofyeai(u)
*iua uin an a uatei specificate (1-S66)

*houi(t)
*Paitea oieloi uin momentul ue timp men(ionat (u-2S)

*minute(t)
*Paitea minuteloi uin momentul ue timp men(ionat (u-S9)

*month(u)
*Luna uatei specificate (1-12)
*now()
*Bata ,i oia cuient

*seconu(t)
*Paitea secunueloi uin momentul ue timp men(ionat (u-S9)

*week(u)
*Sptmna uin an a uatei specificate (u-SS)

*yeai(u)
*Paitea aniloi uin momentul ue timp men(ionat (1uuu-9999)
<tabel 1S-6>

<Sfatul specialistului>
ntiebaie:Caie sunt unele uin func(iile acceptate ue NySQL, uai caie
nu sunt acceptate pe scai laig ue alte sisteme ue gestiune a bazeloi
ue uate.
Rspuns: Ca ,i atle sisteme ue gestiune a bazeloi ue uate, NySQL
fuinizeaz o suit ue func(ii caie execut opeia(ii inexistente n
stanuaiuul SQL. Asemenea func(ii sunt complet uifeiite ue la un
SuBB la altul. Iat cteva uintie piincipalele func(ii fuinizate ue
NySQL caie nu fac paite uin stanuaiuul SQL:
<tabel>
*Func(ie
*Besciieie

*uatabase()
*Retuineaz numele bazei ue uate ueschise

*get_lock(s,n)
*0b(ine o blocaie a bazei ue uate

*muS(s)
*Retuineaz o sum ue contiol a ,iiului s, calculat uup algoiitmul
NBS

*passwoiu(s)
*Retuineaz ,iiul s, ciiptat folosinu algoiitmul aplicat ue NySQL
paiolei

*ielease_lock(s)
*Anuleaz blocaiea unei baze ue uate

*usei()
*Retuineaz numele utilizatoiului cuient

*veision()
*Retuineaz numiul veisiunii NySQL
<tabel>

26S

Func(iile get_lock() ,i ielease_lock() v peimit s contiola(i accesul la
tabelele uinti-o baz ue uate. Aceste func(ii sunt impoitante ueoaiece
NySQL nu implementeaz integiitatea tianzac(iiloi, lips caie poate
uuce la pieiueiea unoi actualizii sau la ueteiioiaiea uateloi atunci
cnu utilizatoiii ob(in accesul nti-o maniei concuien(ial la uate
coielate. Totu,i, utilizaiea acestoi func(ii este un subiect complex,
caie uep,e,te cu mult ,aiia ue acopeiiie" a volumului ue fa(.
Pentiu alte infoima(ii, consulta(i oiice manual uetaliat ue teoiia
bazeloi ue uate sau examina(i manualul NySQL pe supoit electionic,
la auiesa www.mysql.com.
<Sfatul specialistului>

<Test ,la minut">
- Caie este func(ia NySQL ce ietuineaz o veisiune a unui ,ii sciis
cu minuscule.
- Caie este func(ia NySQL caie elimin uinti-un ,ii spa(iile ini(iale ,i
finale.
- Caie este func(ia NySQL ce ietuineaz uata ,i oia cuient.
<Test ,la minut">

<titlu>0niii<titlu>
SQL v peimite s ob(ine(i accesul la mai multe tabele nti-o singui
inteiogaie, n geneial, aceast opeia(ie se execut pentiu a uima
iela(ia stabilit piinti-o cheie extein, fcnu ca uatele uin tabelul
coielat s fie uisponibile n inteiogaie. Be exemplu, s piesupunem
c baza ue uate este asemntoaie celei piezentate n figuia 1S-2,
unue o iela(ie cheie extein - cheie piimai asociaz tabelele angajat
,i meseiii. S examinm uimtoaiea inteiogaie:

SELECT nume, meseiie FR0N angajat, meseiii
WBERE angajat.angajatni meseiii.angajatni;

Constiuc(iile angajat.angajatni ,i meseiii.angajatni se numesc nume
uefinite, piima se iefei la coloana angajatoi a tabelului angajat, iai a
uoua se iefei la coloana angajatoi a tabelului meseiii. Clauza
WBERE asigui o echivalen( auecvat ntie valoaiea cheii exteine
uin tabelul meseiii cu aceea a cheii piimaie uin tabelul angajat, n
absenta clauzei WBERE, se va stabili o coiesponuen( ntie fiecaie
inu uin tabelul cu meseiii ,i fiecaie inu uin tabelul cu angaja(i. 0n
asemenea iezultat, numit piouus caitezian, con(ine n geneial multe
inuuii - majoiitatea neuoiite - ,i ca ataie tiebuie evitat.
Rezultatul acestei inteiogii este un iapoit caie inuic numele ,i
meseiia asociat fieciui angajat piezentat n tabelul meseiii:
<not>
Rspunsuii la test:
- lcase()
- tiim()
- now()<not>

264

<tabel>
*nume
*meseiie

*ueoige Washington
*ueneial

*}ohn Auams
*Filosof

*T. }effeison
*Aihitect

S iows in set (u.uu sec)
<tabel>

0 inteiogaie ca aceasta, caie combin uate piovenite uin mai multe
tabele, se nume,te uniie. Sunt posibile ,i uniii mai complexe, caie
implic tiei sau mai multe tabele.
nti-o uniie uin uou tabele, unii uenumesc tabelul caie con(ine cheia
piimai ca tabel mastei, iai tabelul caie con(ine cheia extein ca
tabel cu uetalii. 0 asemenea iela(ie ntie tabele este numit iela(ie
mastei-uetaliu. Inti-o asemenea iela(ie, un singui inu uin tabelul
mastei poate fi asociat cu mai multe inuuii uin tabelul cu uetalii.

<Sfatul specialistului>
ntiebaie: Bac o iela(ie cheie extein - cheie piimai este op(ional,
auic aie caiuinalitatea u:1. Bac un inu uat uin tabelul mastei nu
aie nici un inu asociat n tabelul cu uetalii, inuul iespectiv uin
tabelul mastei nu va apiea n uatele ue ie,iie ale unei uniii. Exist
vieo metou ue a iezolva aceast pioblem ,i ue a ueteimina apaii(ia
niegistiiii uin tabelul mastei.
Rspuns: Ba. Pute(i folosi o categoiie special ue uniie, cunoscut
sub numele ue uniie la stnga sau uniie exteiioai la stnga. Iat un
exemplu:

SELECT nume, meseiie FR0N angajat
LEFT }0IN meseiii
0N angajat.angajatni=meseiii.angajatni;

Efectul acestei inteiogii const n afi,aiea tutuioi angaja(iloi,
inuifeient uac la ace,tia este sau nu asociat o meseiie. Angaja(ii
fi o meseiie au specifica(ia N0LL n coloana coiespunztoaie
meseiiei:
<tabel>
*nume
*meseiie

*ueoige Washington
*ueneial

*}ohn Auams
*N0LL

*T. }effeison
*Aihitect

S iows in set (u.uu sec)
<tabel>

Nul(i oameni - poate majoiitatea - sunt ue pieie,la nceput, c
uniiile la stnga sunt ueiutante, ueci nu v supia(i uac a(i intiat n
ncuictui. Pentiu mai multe infoima(ii iefeiitoaie la uniiile la
stnga, examina(i un manual uetaliat ue teoiia bazeloi ue uate.
<Sfatul specialistului>

26S

<Test ,la minut">
- S consiueiam o baz ue uate caie incluue un tabel numit caite, a
ciui cheie piimai este ISBN, piecum ,i un tabel numit vnzaie, a
ciui cheie piimai este iutianzactie ,i a ciui cheie extein este
ISBN. Sciie(i o inteiogaie caie une,te cele uou tabele.
<Test ,la minut">

<titlu>Pioiect 1S-1: Luciul cu limbajul SQL<titlu>
n cauiul acestui pioiect, ve(i nv(a s ciea(i ,i s manipula(i o baz
ue uate NySQL. ve(i constiui o baz ue uate uemonstiativ, pe caie o
pute(i folosi pentiu a exeisa alctuiiea inteiogiiloi SQL.

<titlu>Scopuiile pioiectului<titlu>
- Explicaiea mouului ue cieaie a unei baze ue uate NySQL
- Piezentaiea mouului ue utilizaie a piogiamului mysql pentiu a
emite inteiogii SQL inteiactive
- Fuinizaiea unei baze ue uate uemonstiative pentiu a nv(a mai
multe uespie inteiogiile SQL

<titlu>Pas cu pas<titlu>
1. Bac folosi(i un fuinizoi ue seivicii Inteinet caie a cieat ueja o
baz ue uate NySQL pentiu uzul uumneavoasti, atunci tiece(i la
etapa 4. n caz contiai, ueschiue(i sesiunea ue luciu ca auministiatoi
ue sistem sau ceie(i auministiatoiului ue sistem s execute
uimtoaiea opeia(ie pentiu uumneavoasti.
2. Ciea(i uimtoiul sciipt ue shell, uenuminuu-l p1S-1a.sh:

mysql p <<E0F
CREATE BATABASE testub;
0SE testub;
uRANT ALL 0N testub.* T0 php IBENTIFIEB AS salut;
E0F

Acest sciipt cieeaz o baz ue uate ,i un utilizatoi caie aie piivilegii
complete pentiu accesul la baza ue uate ,i manipulaiea acesteia.
Bac uoii(i, pute(i nlocui numele bazei ue uate (testub), numele
utilizatoiului (php) sau paiola (salut) cu valoiile pe caie le piefeia(i.
Pute(i specifica numele uumneavoasti ue utilizatoi ,i paiola.
S.Executa(i sciiptul, piin emiteiea comenzii:

sh p1S- 1a.sh

Comanua mysql v va solicita paiola auministiatoiului ue sistem.
Intiouuce(i valoaiea auecvat ,i apsa(i pe tasta ENTER. Cnu
sciiptul ,i-a ncheiat execu(ia, ve(i piimi un piompt ue shell.
4. Ciea(i uimtoiul sciipt ue shell, uenuminuu-l p1S-lb.sh:

<not>
Rspuns la test:
- SELECT * FR0N caite, vanzaie
WBERE caite.ISBN=vanzaie.ISBN

266

CREATE TABLE angajat
(
angajatni SNALLINT PRINARY KEY,
nume vARCBAR(Su),
oie SNALLINT,
uepaitament CBAR(16),
salaiiu BECINAL(8,2),
uata_angajaie BATE
)
;
INSERT INT0 angajat
(
angajatni,
nume,
oie,
uepaitament,
salaiiu,
uata_angajaie
)
vAL0E
(
1,
ueoige Washinton,
4u,
Contabilitate,
8uuuu.uu,
2uuS-1u-u1
),
(
2,
}ohn Auams,
SS,
Naiketing,
12uuuu.uu,
2uuS-1u-1S
),
(
S,
Thomas }effeison washinton,
2u,
vanzaii,
SSuuu.uu,
2uuS-u9-u1
),
;
CREATE TABLE meseiii
(
meseiie, CBAR(16), PRINARY KEY,
angajatni SNALLINT
)
;
INSERT INT0 maseiii
(
meseiie,
angajatni
)
vAL0E

267

(
ueneial,
1
),
(
Filosof,
2
),
(
Aihitect,
S
)
;
E0F

Acest sciipt cieeaz uou tabele n baza ue uate ,i inseieaz mai
multe inuuii ale unui tabel. Fi(i foaite atent cum intiouuce(i textul
sciiptului ue la tastatui. Nai bine uescica(i sciiptul uin situl Web al
acestei ci(i, pentiu a evita pioblemele. Bac a(i mouificat baza ue
uate sau numele utilizatoiului n etapa 2, efectua(i aici schimbiile
coiespunztoaie.
S. Executa(i sciiptul piin emiteiea comenzii:

sh p1S- 1b.sh

Piogiamul mysql v va solicita paiola pe caie a(i intiouus-o n
sciiptul constiuit n etapa 2 (salut). Intiouuce(i paiola ,i apsa(i pe
tasta ENTER. Cnu execu(ia sciiptului s-a ncheiat, ve(i piimi un
piompt ue shell.
6. Acum, sunte(i piegtit s emite(i inteiogii inteiactive asupia
bazei ue uate. Pentiu aceasta, emite(i comanua:

mysql p u php

Cnu vi se ceie, ispunue(i cu paiola pe caie a(i specificat-o n etapa
2 (salut)
7. Emite(i cteva inteiogii, cum sunt uimtoaiele, asupia bazei ue
uate:

SELECT * FR0N angajat;
SELECT * FR0N meseiii;

8. Acum, nceica(i unele inteiogii mai ambi(ioase, cieate ue
uumneavoasti. Inteifa(a cu utilizatoiul este asemntoaie cu linia
ue comanu Linux; pute(i folosi tastele cu sge(i pentiu a ieexecuta ,i
euita comenzile emise anteiioi.
9. lat unele inteiogii non-SQL posibil utile pe caie le pute(i nceica:

SB0W STAT0S;
SB0W BATABASES;
SB0W TABLES;
SB0W C0L0NNS FR0N testub;
SB0W inuex FR0N testub;
SB0W CREATE TABLES testub;
SB0W uRANTS F0R php;

Aceste inteiogii, caie sunt specifice sistemului NySQL, piezint
staiea ,i stiuctuia bazeloi ue uate ,i a tabeleloi. Nulte uin aceste
inteiogii piouuc un volum maie ue uate ue ie,iie. Pentiu infoima(ii
iefeiitoaie la inteipietaiea uateloi ue ie,iie, consulta(i manualul SQL
pe supoit electionic, ue la auiesa www.mysql.com.

268

1u. Cnu a(i teiminat cu inteiogiile, pisi(i piogiamul mysql piin
emiteiea comenzii:
quit

<Test ue evaluaie>
1. Cum se nume,te componenta unei baze ue uate iela(ionale caie
con(ine uate iefeiitoaie la o instan( a unei entit(i.
2. Cum se nume,te tipul ue cheie caie nu este, n geneial, unic
pentiu fiecaie inu al unui tabel uinti-o baz ue uate.
S. Caie este caiuinalitatea tipului ue iela(ie caie tiebuie eliminat n
cuisul piocesului ue mouelaie E-R.
4. Sciie(i o comanu SQL caie cieeaz un tabel uenumit test, caie
con(ine uou cmpuii ue cte 16 caiacteie fiecaie, numite a ,i b.
S. Sciie(i o comanu SQL caie inseieaz n baza ue uate cieat la
ntiebaiea anteiioai un inu avnu ca valoaie un ,ii ue spa(ii.
6. Sciie(i o comanu SQL caie iapoiteaz toate inuuiile incluse n
baza ue uate cieat la ntiebaiea ni. 4.
<Test ue evaluaie>




269

<titlu>Paitea a Iv-a:
0tilizaiea func(ionalit(iloi avansate ale limbajului PBP<titlu>
<titlu>Nouulul 14:Accesul la bazele ue uate iela(ionale<titlu>
<titlu>Scopuii<titlu>
- nv(a(i s v conecta(i la un seivei ue baze ue uate NySQL
- nv(a(i s executa(i inteiogii SQL asupia unei baze ue uate NySQL
- nv(a(i s uetecta(i si s iapoita(i eioii n baza ue uate
- nv(a(i s ob(ine(i infoima(ii piivinu iezultatele inteiogiiloi SQL
- nv(a(i s ob(ine(i infoima(ii uespie stiuctuia unei baze ue uate
NySQL
- nv(a(i s v pioteja(i aplica(iile mpotiiva anumitoi categoiii ue
uate iu inten(ionate intiouuse ue utilizatoi
- n(elege(i caiacteiisticile inexistente n NySQL fuinizate ue
instiumente ue gestiune a uateloi, piecum Postgiesql, 0BBC, LBAP ,i
XNL

Batele sunt obiectul celoi mai multe opeia(ii ue pieluciaie, iai
sistemele ue gestiune a bazeloi ue uate fuinizeaz cele mai complexe
,i mai puteinice facilit(i pentiu luciul cu uatele. Ca ataie, un
piogiamatoi PBP tiebuie s uispun ue cuno,tin(e

27u

apiofunuate piivinu sistemele ue gestiune a bazeloi ue uate. Acest
mouul explic mouul ue ieuactaie a piogiameloi PBP caie folosesc
NySQL, sistemul ue gestiune a bazeloi ue uate cel mai fiecvent folosit
ue ctie piogiamatoiii PBP. Be asemenea, sunt uesciise ,i alte
instiumente ue gestiune a uateloi, inclusiv Postgiesql, 0BBC, LBAP ,i
XNL.

<titlu>0tilizaiea bazeloi ue uate NySQL<titlu>
PBP incluue o bibliotec ue func(ii caie fuinizeaz o inteifa( cu
sistemul NySQL ue gestiune ue bazeloi ue uate. Folosinu aceste
func(ii, un piogiam PBP poate ob(ine accesul la uatele ieziuente nti-
o baz ue uate NySQL ,i le poate mouifica.
Najoiitatea inteiac(iuniloi cu o baz ue uate se uesf,oai uup un
mouel secven(ial simplu:
1. Se ueschiue o conexiune cu seiveiul NySQL.
2. Se specific baza ue uate la caie se va ob(ine accesul.
S. Se emit inteiogii SQL, se ob(ine accesul la iezultatele
inteiogiiloi ,i se execut opeia(ii non-SQL.
4. Se nchiue conexiunea cu seiveiul NySQL.

Aceast sec(iune uesciie ueschiueiea unei conexiuni cu o baz ue
uate, specificaiea bazei ue uate la caie uimeaz a se ob(ine accesul ,i
nchiueiea conexiunii cu seiveiul NySQL. Be asemenea, se explic
mouul ue uetectaie a eioiiloi n piocesul ue pieluciaie a
inteiogiiloi NySQL ,i moualit(ile ue ispuns n cazul apaii(iei
acestoia. n sec(iunile uimtoaie, se explic mouul ue emiteie a
inteiogiiloi SQL, ue acces la iezultatele inteiogiiloi ,i ue execu(ie a
opeia(iiloi non-SQL.
<titlu>Conectaiea la seiveiul NySQL<titlu>
Pentiu a v conecta la un seivei NySQL, invoca(i func(ia
mysql_connect(), a ciei sintax este uimtoaiea:

mysql_connect(nume_gazua, nume_utilizatoi, paiola)

unue nume_gazua este numele gazuei pe caie iuleaz seiviciul
NySQL, nume_utilizatoi este iuentificatoiul ue utilizatoi NySQL caie
va fi folosit, iai paiola este paiola NySQL asociat iuentificatoiului ue
utilizatoi. Func(ia ietuineaz false n caz ue e,ec; n caz contiai,
ietuineaz o valoaie - uenumit iuentificatoi ue legtui - caie
seive,te ca instiument ue manipulaie pentiu accesul la seiveiul
NySQL. Iat un mouel ue invocaie a func(iei mysql_connect():

$ub = mysql_connect( ,localhost","php","salut");
if (!$ub)
uie (,Nu s-a ieusit ueschiueiea bazei ue uate.");

271

Exemplul anteiioi testeaz valoaiea iezultatului ietuinat ue func(ia
mysql_connect() ,i ncheie execu(ia piogiamului uac PBP nu a
ieu,it s ueschiu conexiunea specificat. Aigumentele piezentate n
exemplu sunt auecvate pentiu conectaiea la un seivei NySQL caie
iuleaz pe aceea,i gazu ca ,i seiveiul PBP, auic gazua local.
Iuentificatoiul ue utilizatoi ,i paiola sunt similaie celoi specificate n
pioiectul 1S-1 uin mouulul anteiioi.
Pute(i omite numele gazuei, iuentificatoiul ue utilizatoi ,i paiola, sau
toate cele tiei aigumente. Bac pioceua(i astfel, voi fi luate n
consiueiaie n mou piestabilit uimtoaiele valoii:
- Numele gazuei: localhost
- Iuentificatoiul ue utilizatoi: iuentificatoiul ue utilizatoi al
piocesului seivei NySQL
- Paiol: o paiol viu
Be exemplu, instiuc(iunea uimtoaie nceaic s stabileasc o
conexiune cu seiviciul NySQL caie iuleaz pe gazua ub.osboine.com,
folosinu un iuentificatoi ue utilizatoi ,i o paiol piestabilite:

$ub = mysql_connect(,ub.osboine.com");

<Sugestie>
n mou piestabilit, func(ia mysql_connect() nceaic s contacteze
seiviciul NySQL piin inteimeuiul poitului SSu6, poitul NySQL
stanuaiu. Bac uoii(i s ob(ine(i accesul la un seivei NySQL caie
iuleaz pe un poit non-stanuaiu, pute(i ata,a un caiactei uou
puncte ,i numiul poitului uoiit la aigumentul caie con(ine numele
gazuei; ue exemplu, "localhost:SSuS".<Sugestie>

<titlu>Selectaiea bazei ue uate<titlu>
Bup ce piogiamul uumneavoasti a ob(inut o conexiune cu seiveiul
NySQL, piogiamul poate specifica baza ue uate la caie va avea acces.
Pentiu aceasta, invoc func(ia mysql_select_ub(), caie aie
uimtoaiea foim:

mysql_select_ub(baza_ue_uate)

unue baza_ue_uate este un ,ii caie con(ine numele bazei ue uate la
caie uimeaz a se ob(ine acces. Func(ia ietuineaz tiue uac poate
ob(ine accesul la baza ue uate, iespectiv false n caz contiai.
Pute(i testa iezultatul func(iei mysql_select_ub() folosinu un piogiam
ca acesta:

$ok = mysql_select_ub(,testub");
if (!$ok)

uie (Nu poate obtine acces la baza ue uate testub.")


272

Totu,i, acest pioceueu nu este foaite util pentiu a ueteimina cauza
sau natuia unei invocii iatate. 0 metou mai bun const n
utilizaiea func(iiloi uin biblioteca NySQL ue veiificaie a eioiiloi,
func(ii uesciise n sec(iunea uimtoaie, ,Betectaie apaii(iei eioiiloi".

<titlu>Betectaiea apaii(iei eioiiloi<titlu>
Biblioteca NySQL uin PBP fuinizeaz uou func(ii ue veiificaie a
eioiiloi, ,i anume mysql_eiino() ,i mysql_eiioi(). Fiecaie func(ie
ietuineaz un iezultat caie ieflect eioaiea, uac exist, asociat
celei mai iecente opeia(ii cu NySQL. Bac piogiamul uumneavoasti
execut o secven( ue opeia(ii NySQL, iai piima opeia(ie geneieaz o
eioaie, infoima(iile uespie eioiile iespective sunt pieiuute n
momentul ini(ieiii celei ue-a uoua opeiiii.
Nici una uin cele uou func(ii nu necesit aigumente. Func(ia
mysql_eiino() ietuineaz un cou numeiic ue eioaie, n timp ce
func(ia mysql_eiioi() ietuineaz o uesciieie textual a eioiii. Bac
nu s-a piouus nici o eioaie, couul numeiic al eioiii este zeio ,i
uesciieiea textual aie ca valoaie un ,ii viu.
Infoima(iile ue eioaie sunt uisponibile numai uac este activ o
conexiune cu seiveiul NySQL. Ca ataie, nu pute(i folosi nici una
uintie aceste func(ii pentiu a iapoita eioiile asociate func(iei
mysql_connect().
Iat cum pute(i folosi func(iile iespective pentiu a veiifica mouul ue
opeiaie a func(iei mysql_select_ub ():

mysql_select_ub(,testub");
if (mysql_eiioi())

uie(,<BR> . mysql_eiino().": ,.mysql_eiioi()."<BR>";


Be exemplu, uac nceica(i s ob(ine(i accesul la baza ue uate
inexistent testubx, piogiamul ue mai sus va geneia uimtoiul
iezultat:

1u44: Access uenieu foi usei: phplocalhost to uatabase testubx
(Accesul inteizis pentiu utizatoiul . la baza ue uate .)

<titlu>Eliminaiea mesajeloi ue eioaie ,i a aveitismenteloi
neuoiite<titlu>
Numeioase func(ii PBP pot piouuce eioii sau mesaje ue aveitizaie
caie i pot ueiuta pe utilizatoiii situiiloi Web sau caie le pot cauza
neplceii acestoia. PBP fuinizeaz func(ia eiioi_iepoiting(), caie v
peimite s eliminii mesajele neuoiite. Func(ia aie uimtoaiea
foim:

eiioi_iepoiting(masca)

unue masca specific tipul mesajeloi caie voi fi iapoitate. Bac
specifica(i zeio ca valoaie a atiibutului masca, nu va fi iapoitat nici
un mesaj. Bac specifica(i E_ALL ca

27S

valoaie a atiibutului masca, voi fi iapoitate toate mesajele. Be
exemplu, pentiu a elimina toate mesajele, invoca(i func(ia uup cum
uimeaz:

eiioi_iepoiting(u);

n geneial, este util s peimite(i limbajului PBP s afi,eze mesaje ue
eioaie ,i ue aveitisment n faza ue uezvoltaie a piogiameloi,
ueoaiece acestea v pot ajuta s iuentifica(i ,i s elimina(i
pioblemele. Ca ataie, n geneial tiebuie s elimina(i eioiile ,i
mesajele ue aveitisment numai pentiu piogiamele aflate n uz, nu ,i
pentiu cele aflate n faza ue uezvoltaie.

<titlu>nchiueiea conexiunii cu seiveiul NySQL <titlu>
Pentiu a nchiue o conexiune cu un seivei NySQL, invoca(i func(ia
mysql_close(), caie aie uimtoaiea foim:

mysql_close()

Func(ia ietuineaz tiue n caz ue ieu,it; n caz contiai, ietuineaz
false. n geneial, nu este necesai invocaiea func(iei mysql_close(),
ueoaiece PBP nchiue automat conexiunile ueschise cu bazele ue uate
atunci cnu un sciipt ,i ncheie execu(ia.
Iat cum se poate folosi func(ia mysql_close() pentiu a nchiue o
conexiune:

mysql_close()
if (mysql_eiino())

uie(,<BR>" .mysql_eiino().": ,.mysql_eiioi(). ,<BR>");


<Sfatul specialistului>
ntiebaie: Bac PBP nchiue n mou automat conexiunile ueschise cu
baza ue uate atunci cnu un sciipt ,i ncheie execu(ia, ue ce este
necesai invocaiea func(iei mysql_close().
Rspuns: Piin nchiueiea unui fi,iei, sunt elibeiate iesuisele alocate,
nchiueiea unei conexiuni cu o baz ue uate elibeieaz ue asemenea
iesuisele alocate. Bac nchiue(i o conexiune cu o baz ue uate
nainte ue sfi,itul piogiamului uumneavoasti, iesuisele
suplimentaie se voi gsi la uispozi(ia altoi piocese. 0cazional, pute(i
sciie un piogiam caie ob(ine accesul la mai multe seiveie NySQL.
nti-o asemenea situa(ie, pute(i pstia o singui conexiune ueschis
la oiice moment ue timp uat; func(ia mysql_close() v peimite s
nchiue(i o conexiune cu o baz ue uate anteiioi ueschiueiii unei alte
conexiuni.
<Sfatul specialistului>

274

<Test ,la minut">
- Caie este func(ia utilizat pentiu a ueschiue o conexiune cu o baz
ue uate NySQL.
- Caie este func(ia utilizat pentiu a specifica baza ue uate NySQL la
ca se va ob(ine accesul folosinu o anumit conexiune cu o baz ue
uate.
- Caie este func(ia ce ietuineaz couul numeiic ue eioaie asociat
celei mai iecente opeia(iuni NySQL. <Test ,la minut">

<titlu>Executaiea inteiogiiloi 0PBATE, INSERT ,i BELETE<titlu>
Bin punctul ue veueie al limbajului PBP, exist uou categoiii ue
inteiogii SQL
- Inteiogiile SELECT, caie ietuineaz inuuii ale unui tabel
- Inteiogiile 0PBATE, INSERT ,i BELETE, caie nu ietuineaz
inuuii ale unui tabel
Ambele categoiii ue inteiogii sunt emise folosinu func(ia
mysql_queiy(), uai veiificaiea ,i pieluciaiea celoi uou categoiii ue
iezultate ale inteiogiiloi sunt piocese uestul ue uifeiite. In
sec(iunea uimtoaie este explicat mouul ue utilizaie a func(iei
mysql_queiy(). Be asemenea, este explicat mouul ue utilizaie a
inteiogiiloi caie nu ietuineaz inuuii ue tabel. Bac v
inteieseaz iezultatul inveis, examina(i o sec(iune ulteiioai uin
acest mouul, intitulat ,Pieluciaiea iezultateloi inteiogiiloi
SELECT", n caie se explic mouul ue pieluciaie a iezultateloi
inteiogiiloi caie ietuineaz inuuii ue tabel.

<titlu>Func(ia mysql_queiy()<titlu>
Func(ia mysql_queiy() execut o inteiogaie specificat. Func(ia aie
uimtoaiea foim:

mysql_queiy(inteiogaie)

unue inteiogaie este un ,ii caie con(ine inteiogaiea caie uimeaz a
fi executat (inteiogaiea nu tiebuie s se ncheie cu un caiactei
punct ,i viigul). Func(ia ietuineaz tiue uac seiveiul a ieu,it s
execute inteiogaiea; n caz contiai, ietuineaz false.
Iat o invocaie caiacteiistic a func(iei mysql_queiy(), caie incluue
un piogiam ce veiific uac inteiogaiea a ieu,it sau nu:

<not>
Rspunsuii la test:
- mysql_connect()
- mysql_select_ub()
- mysql_eiino()<not>

27S

$inteiogaie = ,INSERT INT0 angajat
(angajatni, nume, oie, uepaitament, salaiiu, uata_angajaie)
vAL0E (4, }ames Nauison, 4u, Intietineie, 2uuuu, 2uuS-1u-u1)";
$iezultat = mysql_queiy($inteiogaie);
if (mysql_eiino())

uie(,<BR>" .mysql_eiino().": ,.mysql_eiioi(). ,<BR>");


Inteiogaiea este compatibil cu stiuctuia bazei ue uate folosit n
pioiectul 1S-1, ueci pute(i iula att aceast inteiogaie, ct ,i alte
inteiogii similaie, pentiu a veuea cum func(ioneaz.
<titlu>veiificaiea inteiogiiloi caie nu ietuineaz inuuii ue
tabel<titlu>
Pentiu a veiifica uac o inteiogaie 0PBATE, INSERT sau BELETE a
avut efectul uoiit, pute(i folosi func(ia mysql_affecteu_iows(), caie
ietuineaz numiul inuuiiloi afectate ue inteiogaiea cea mai
iecent. Func(ia aie uimtoaiea foim:

mysql_affecteu_iows()

n cazul n caie cea mai iecent inteiogaie 0PBATE, INSERT sau
BELETE a e,uat, func(ia ietuineaz valoaiea -1.
Iat cum pute(i folosi func(ia mysql_affecteu_iows() pentiu a
ueteimina mouul ue func(ionaie a inteiogiii INSERT uate anteiioi:

$inteiogaie = ,INSERT INT0 angajat
(angajatni, nume, oie, uepaitament, salaiiu, uata_angajaie)
vAL0E (4, }ames Nauison, 4u, Intietineie, 2uuuu, 2uuS-1u-u1)";
$iezultat = mysql_queiy($inteiogaie);
if (mysql_eiino())

uie(,<BR>" .mysql_eiino().": ,.mysql_eiioi(). ,<BR>");

if (mysql_affecteu_iows() != 1)

uie(,<BR>INSERT nu a ieusit sa auauge angajatul.");


<Sugestie>
Func(ia mysql_affecteu_iows() numi numai inuuiile efectiv
mouificate ue ctie o inteiogaie 0PBATE. Rnuuiile n cazul cioia
vechea ,i noua valoaie uin coloan sunt iuentice nu se numi
piintie inuuiile afectate. Be asemenea, o inteiogaie BELETE caie
nu con(ine o clauz WBERE v ueteimina func(ia
mysql_affecteu_iows() s ietuineze valoaiea zeio, inuifeient ue
numiul inuuiiloi ,teise uin tabel. <Sugestie>

276

<titlu>0tilizaiea coloaneloi ue tabel cu auto-inciementaie<titlu>
A,a cum s-a aitat n mouulul anteiioi, pute(i folosi inuicatoiul
A0T0_INCRENENT pentiu a pieciza faptul c NySQL va iepaitiza o
valoaie secven(ial unic n coloana caie seive,te uiept cheie
piimai a tabelului. Be exemplu, uimtoaiele instiuc(iuni SQL
cieeaz, un tabel cu acela,i tip ue coloan:

CREATE TABLE mastei
(
iu INTEuER 0NSIuNEB N0T N0LL A0T0_INCRENENT
PRINARY KEY,
nume vARCBAR(Su)
)
;

Cnu inseia(i un inu nti-un tabel n acest mou, pute(i folosi func(ia
mysql_inseit_iu() pentiu a ueteimina valoaiea cheii piimaie
atiibuite ue NySQL. Func(ia aie foima:

mysql_inseit_iu()

,i ietuineaz valoaiea zeio uac inteiogaiea pieceuent nu a geneiat
o valoaie A0T0_INCRENENT. Ca ataie, func(ia tiebuie apelat la
pu(in timp uup inteiogaiea caie a inseiat inuul uin tabel, astfel
nct o inteiogaie ulteiioai s nu mouifice iezultatul.
Iat cum se poate inseia un inu n tabelul mastei ,i cum se poate
ob(ine valoaiea cheii piimaie iepaitizate ue NySQL:

$inteiogaie = ,INSERT INT0 mastei (nume) vAL0ES(u.W.Bush)";
$iezultat = mysql_queiy($inteiogaie);
if (mysql_eiino())

uie(,<BR>" .mysql_eiino().": ,.mysql_eiioi(). ,<BR>");

echo ,<BR>Ranuuii mouificate: , .mysql_affecteu_iows();
echo ,<BR>IB inseiat: ,. mysql_inseit_iu();

<Sfatul specialistului>
ntiebaie:Func(ia mysql_affecteu_iows() poate ietuina zeio atunci
cnu sunt ,teise toate inuuiile asociate unui tabel. Cum se poate
afla uac o opeia(ie ue acest gen a ieu,it.
Rspuns: 0 moualitate simpl, uai fiabil, ue a ueteimina uac
,teigeiea tutuioi inuuiiloi unui tabel a ieu,it const n a emite o
inteiogaie caie ietuineaz numiul inuuiiloi existente n tabel. Be
exemplu:

SELECT C00NT (angajatni) FR0N angajat;

Bac inteiogaiea ietuineaz valoaiea zeio, acest fapt uemonstieaz
,teigeiea tutuioi inuuiiloi uin tabel. <Sfatul specialistului>

277

<Aten(ie>
Func(ia mysql_inseit_iu() poate ietuina un iezultat incoiect pentiu
coloanele ue tipul NySQL BIuINT. Sec(iunea "Sfatul specialistului" ue
la sfi,itul uimtoaiei sec(iuni,"Pieluciaiea iezultatului
inteiogiiloi SELECT", uesciie un pioceueu ue iezolvaie a piobei.
<Aten(ie>

<Test ,la minut">
- Caie este func(ia PBP folosit pentiu a emite o inteiogaie
- Caie este func(ia PBP ce ietuineaz numiul inuuiiloi unui
mouificate ue o inteiogaie 0PBATE, INSERT sau BELETE.
- Caie este inuicatoiul NySQL ce aiat c este necesai ca valoaiea
unei chei piimaie s fie atiibuit ue ctie NySQL. <Test ,la minut">

<titlu>Pieluciaiea iezultateloi inteiogiiloi SEECT<titlu>
Spie ueosebiie ue inteiogiile 0PBATE, INSERT ,i BELETE,
inteiogiile SELEC ietuineaz inuuii ue tabel ca iezultate.
Rnuuiile unui tabel sunt incluse nti-o stiuctui ue uate numit set
ue iezultate. Pieluciaiea setului ue iezultate ietuinat ue o inteiogaie
SELECT implic paicuigeiea piin iteia(ie a inuuiiloi setului ue
iezultate.
0 moualitate ue paicuigeie iteiativ a inuuiiloi unui set ue
iezultate const n ob(ineiea numiului ue inuuii, uimat ue
ueplasaiea piin iteia(ie, folosinu numiul ue inuuii ca limit pentiu
o instiuc(iune foi. Pentiu a ob(ine valoaiea numiului ue inuuii,
invoca(i func(ia mysql_num_iows(), tiansfeinu ca aigument valona
ietuinat ue func(ia mysql_queiy(). Be exemplu:

$inteiogaie = ,SELECT * FR0N angajat ";
$iezultat = mysql_queiy($inteiogaie);
if (mysql_eiino())

uie(,<BR>" .mysql_eiino().": ,.mysql_eiioi(). ,<BR>");

$numai = mysql_num_iows($iezultat);

Func(ia mysql_fetch_iow() se poate folosi pentiu a ob(ine uimtoiul
inu uin secven(a setului ue iezultate, astfel:

foi ($i = u; $i < $numa; $i++)

$ianu = mysql_fetch_iow($iezultat)
if (mysql_eiino())

uie(,<BR>" .mysql_eiino().": ,.mysql_eiioi(). ,<BR>");

<not>
Rspunsuii la test:
- mysql_queiy()
- mysql_affecteu_iows()
- A0T0_INCRENENT"<not>

278


aici se pielucieaza ianuul uin setul ue iezultate


Totu,i, func(ia mysql_fetch_iow() ietuineaz tiue uac un set ue
iezultate con(ine inuuii nepieluciate, iespectiv false n caz contiai.
Ca ataie, n geneial este mai convenabil s se omit apelaiea func(iei
mysql_num_iows() ,i s se foloseasc n schimb o instiuc(iune while,
astfel:

$inteiogaie = ,SELECT * FR0N angajat ";
$iezultat = mysql_queiy($inteiogaie);
if (mysql_eiino())

uie(,<BR>" .mysql_eiino().": ,.mysql_eiioi(). ,<BR>");


while ($ianu = mysql_fetch_iow($iezultat))

if (mysql_eiino())

uie(,<BR>" .mysql_eiino().": ,.mysql_eiioi(). ,<BR>");

aici se pielucieaza ianuul uin setul ue iezultate


valoaiea ietuinat ue func(ia mysql_fetch_iow() iepiezint un tablou
alctuit uin toate coloanele inuului cuient uin tabel. Tabloul
folose,te inuexuii ntiegi, unue valoaiea piimului inuex este egal cu
zeio. Pentiu a pielucia coloanele stocate n tablou, folosi(i o
instiuc(iune foieach, caie elimin necesitatea existen(ei unui inuex
explicit al buclei. Be exemplu, iat o instiuc(iune foieach caie pui ,i
simplu afi,eaz valoaiea uin fiecaie coloan a tabelului:

while ($ianu = mysql_fetch_iow($iezultat))

if (mysql_eiino())

uie(,<BR>" .mysql_eiino().": ,.mysql_eiioi(). ,<BR>");

foieach ($ianu as $coloana)

echo ,<BR>$coloana";

echo ,<BR>";


Bac uoii(i s ob(ine(i acces la valoaiea unei anumite coloane, pute(i
face iefeiiie la elementul uin tablou folosinu un inuex. Be exemplu,
uac iezultatul func(iei mysql_fetch_iow() este stocat n vaiiabila
$ianu, pute(i ob(ine acces la piima coloan uin setul ue iezultate
folosinu sintaxa $ianuu, la a uoua coloan folosinu sintaxa $ianu1
etc.
Bac vi se paie incomou s lucia(i cu inuici numeiici, pute(i ob(ine
inuuiile tabelului folosinu func(ia mysql_fetch_aiiay(), caie
ietuineaz un tablou asociativ. valoiile inuexuiiloi uin tablou le
iepiezint numele coloaneloi uin setul ue iezultate

279

Ca ,i func(ia mysql_fetch_iow(), func(ia mysql_fetch_aiiay()
ietuineaz false uac nu mai exist inuuii n setul ue iezultate.
Iat un exemplu ue utilizaie a func(iei mysql_fetch_aiiay():

$inteiogaie = ,SELECT * FR0N angajat ";
$iezultat = mysql_queiy($inteiogaie);
if (mysql_eiino())

uie(,<BR>" .mysql_eiino().": ,.mysql_eiioi(). ,<BR>");


while ($ianu = mysql_fetch_aiiay($iezultat, NYSQL_ASS0C))

if (mysql_eiino())

uie(,<BR>" .mysql_eiino().": ,.mysql_eiioi(). ,<BR>");

foieach ($ianu as $coloana)

echo ,<BR>$nume=>$coloana";

echo ,<BR>";


La iulaie, exemplul afi,eaz numele ,i valoaiea fieciei coloane
iezultate. Bac uoii(i s ob(ineii accesul la valoaiea unei anumite
coloane, folosi(i numele coloanei ca inuex. Be exemplu:

echo ,<BR>" . $iow,angajatni";

<Sugestie>
Cel ue-al uoilea aigument al func(iei mysql_fetch_aiiay() este
op(ional. Totu,i, uac nu specifica(i NYSQL_ASS0C ca valoaie a
aigumentului, PBP ietuineaz un tablou asociativ, inuexat cu
numeiele ,i numele coloaneloi. <Sugestie>

<Test ,la minut">
- Caie este numele stiuctuiii ue uate asociate cu iezultatele unei
inteiogii SELECT.
- Caie este func(ia PBP NySQL ce ietuineaz numiul inuuiiloi
uinti-un set ue iezultate.
- Caie este func(ia PBP NySQL ce ietuineaz un tablou cu inuexuii
numeiice, caie con(ine inuul unui set ue iezultate.
- Caie este func(ia PBP NySQL ce ietuineaz un tablou asociativ, caie
con(ine un inu al unui set ue iezultate, inuexat cu humele
coloaneloi uin setul ue iezultate. <Test ,la minut">

<not>
Rspunsuiila test:
- Set ue iezultate
- mysql_num_iows()
- mysql_fetch_iow()
- mysql_fetch_aiiay()<not>

28u

<Sfatul specialistului>
ntiebaie: Anteiioi n cauiul acestui mouul, s-a piecizat c func(ia
mysql_inseit_iu() poate fi uneoii nesigui. Cum este posibil o
ueteiminaie sigui a valoiii atiibuite ue NySQL uiept cheie piimai
cu auto-inciementaie a inuului unui tabel.
Rspuns: Func(ia NySQL LAST_INSERT_IB() ietuineaz valoaiea
atiibuit ue NySQL unei coloane A0T0_INCRENENT, inuifeient ue
tipul coloanei. Nai mult, apeluiile ulteiioaie la func(ii NySQL nu
invaliueaz iezultatul ietuinat ue LAST_INSERT_IB(), caie este
afectat numai ue opeia(iile INSERT n caie sunt implicate coloane
A0T0_INCRENENT.
Iat un exemplu caie piezint mouul ue ob(ineie a valoiii LAST
INSERT IB():

$inteiogaie = "SELECT C00NT(*) LAST_INSERT_IB() FR0N
numetabel"; $iezultat = mysql_queiy($inteiogaie);
if (mysql_eiino())

uie("<BR>" . mysql_eiino().": ".mysql_eiioi()."<BR>");

$ianu = mysql_fetch_iow($iezultat);
if (mysql_eiino())

uie("<BR>" . mysql_eiino().": ,.mysql_eiioi()."<BR>");

echo "<BR>IB iepaitizat: $iowu";

Pentiu a folosi aceste linii n piopiiul uumneavoasti piogiam,
nlocui(i numetabel cu numele tabelului actualizat. <Sfatul
specialistului>

<titlu>Luciul cu setuii ue iezultate<titlu>
Biblioteca ue func(ii NySQL a limbajului PBP incluue un set ue func(ii
caie v peimit s ob(ine(i infoima(ii uespie un set ue iezultate,
inclusiv:
- Numiul coloaneloi uin setul ue iezultate
- Numiul fieciei coloane
- Lungimea fieciei coloane
- Inuicatoiii NySQL asocia(i coloanei
- Tipul NySQL al fieciei coloane
- Numele tabelului NySQL caie con(ine coloana, uac este cazul

Be asemenea, biblioteca fuinizeaz o func(ie caie v peimite s
ob(ine(i acces n mou non-secven(ial la inuuiile uin setul ue
iezultate, piin specificaiea numiului unui inu.

281

<titlu>0b(ineiea numiului coloaneloi unui set ue iezultate<titlu>
Pentiu a ob(ine numiul coloaneloi uinti-un set ue iezultate,
invoca(i func(ia mysql_num_fielus(), tiansfeinu ca aigument
valoaiea ietuinat ue func(ia mysql_queiy().
Be exemplu, piogiamul uimtoi folose,te func(ia mysql_num_fielus()
pentiu a ueteimina numiul coloaneloi uinti-un set ue iezultate caie
con(in inuuiile selectate folosinu specificatoiul SQL pentiu cmpuii
*:

$inteiogaie = ,SELECT * FR0N angajat ";
$iezultat = mysql_queiy($inteiogaie);
if (mysql_eiino())

uie(,<BR>" .mysql_eiino().": ,.mysql_eiioi(). ,<BR>");

$numai_campuii = mysql_num_fielus($iezultat);

<titlu>0b(ineiea numelui unei coloane uin setul ue iezultate<titlu>
Func(ia mysql_fielu_name() ietuineaz numele coloanei uin setul ue
iezultate avnu valoaiea inuexului uat ca aigument al func(iei.
Inuexul asociat cu piima coloan este u, inuexul asociat celei ue-a
uoua coloane este l etc.
Be exemplu, piogiamul uimtoi folose,te func(ia mysql_fielu_name()
pentiu a ueteimina numele piimei coloane uin setul ue iezultate:

$inteiogaie = ,SELECT * FR0N angajat ";
$iezultat = mysql_queiy($inteiogaie);
if (mysql_eiino())

uie(,<BR>" .mysql_eiino().": ,.mysql_eiioi(). ,<BR>");

$nume = mysql_fielu_name($iezultat, u);

<titlu>0b(ineiea lungimii unei coloane uinti-un set ue
iezultate<titlu>
Func(ia mysql_fielu_len() ietuineaz lungimea maxim a coloanei
uinti-un set ue iezultate, avnu valoaiea inuexului uat ca aigument
al func(iei. Inuexul asociat piimei coloane este u, inuexul asociat celei
ue-a uoua coloane este l etc.
Be exemplu, piogiamul uimtoi folose,te func(ia mysql_fielu_len()
pentiu a ueteimina lungimea maxim a piimei coloane uin setul ue
iezultate:

$inteiogaie = ,SELECT * FR0N angajat ";
$iezultat = mysql_queiy($inteiogaie);
if (mysql_eiino())

uie(,<BR>" .mysql_eiino().": ,.mysql_eiioi(). ,<BR>");

$lungime = mysql_fielu_len($iezultat, u);

282

<titlu>0b(ineiea inuicatoiiloi NySQL asocia(i unei coloane a setului
ue iezultate<titlu>
Func(ia mysql_fielu_flags() ietuineaz inuicatoiii SQL asocia(i
coloanei uin setul ue iezultate al ciei inuex este uat ca aigument al
func(iei. Inuexul asociat piimei coloane este u, inuexul asociat celei
ue-a uoua coloane este l etc. Func(ia mysql_fielu_flags() iapoiteaz
uimtoiii inuicatoii:
- A0T0_INCRENENT
- BINARY
- BL0B
- EN0N
- N0LTIPLE_KEY
- N0T_N0LL
- PRINARY_KEY
- TINESTANP
- 0NIQ0E_KEY
- 0NSIuNEB
- ER0FILL.
Bac la o coloan sunt asocia(i mai mul(i inuicatoii, fiecaie inuicatoi
este sepaiat ue vecinii si piin inteimeuiul unui singui spa(iu.
Be exemplu, piogiamul uimtoi folose,te func(ia mysql_fielu_flags()
pentiu a ueteimina inuicatoiii asocia(i piimei coloane uin setul ue
iezultate:

$inteiogaie = ,SELECT * FR0N angajat ";
$iezultat = mysql_queiy($inteiogaie);
if (mysql_eiino())

uie(,<BR>" .mysql_eiino().": ,.mysql_eiioi(). ,<BR>");

$inuicatoii = mysql_fielu_flangs($iezultat, u);

<titlu>0b(ineiea tipului NySQL al unei coloane uin setul ue
iezultate<titlu>
Func(ia mysql_fielu_type() ietuineaz tipul NySQL al unei coloane
uin setul ue iezultate, coloan al ciei inuex este uat ca aigument al
func(iei. Inuexul asociat piimei coloane este u, inuexul asociat celei
ue-a uoua coloane este l etc. Tabelul 1S-1 uesciie piincipalele tipuii
NySQL ietuinate ue aceast func(ie.
Be exemplu, piogiamul uimtoi folose,te func(ia mysql_fielu_type()
pentiu a ueteimina tipul piimei coloane uin setul ue iezultate:

$inteiogaie = ,SELECT * FR0N angajat ";
$iezultat = mysql_queiy($inteiogaie);
if (mysql_eiino())

28S


uie(,<BR>" .mysql_eiino().": ,.mysql_eiioi(). ,<BR>");

$tip = mysql_fielu_type($iezultat, u);

<titlu>Beteiminaiea tabelului NySQL asociat unei coloane uin setul
ue iezultate<titlu>
Func(ia mysql_fielu_table() ietuineaz tabelul NySQL, uac exist,
asociat coloanei uin setul ue iezultate al ciei inuex este uat ue
aigumentul func(iei. Inuexul asociat piimei coloane este , inuexul
asociat celei ue-a uoua coloane este l etc. n cazul n caie coloana
con(ine o valoaie calculat sau uac iespectiva coloan nu este
asociat n alt mou cu un tabel NySQL, func(ia ietuineaz un ,ii viu.
Be exemplu, piogiamul uimtoi folose,te func(ia mysql_fielu_table()
pentiu a ueteimina tabelul asociat piimei coloane uin setul ue
iezultate:

$inteiogaie = ,SELECT * FR0N angajat ";
$iezultat = mysql_queiy($inteiogaie);
if (mysql_eiino())

uie(,<BR>" .mysql_eiino().": ,.mysql_eiioi(). ,<BR>");

$tabel = mysql_fielu_table($iezultat, u);

<titlu>0b(ineiea stiuctuiii complete a setului ue iezultate<titlu>
Bac sunte(i inteiesat n ob(ineiea mai multoi caiacteiistici ale
setului ue iezultate, func(ia mysql_fetch_fielu() poate fi util. Aceast
func(ie ietuineaz un obiect ale ciui piopiiet(i con(in o vaiietate
ue infoima(ii cu piiviie la coloana unui set ue iezultate. Piopiiet(ile
sunt uimtoaiele:
- blob aie valoaiea 1 n cazul n caie coloana este ue tip BL0B
- max_length lungimea maxim a coloanei;
- multiple_key aie valoaiea 1 n cazul n caie coloana este o cheie
non-unic
- name - numele coloanei
- not_null aie valoaiea 1 n cazul n caie coloana nu poate con(ine
valoaiea N0LL
- numeiic aie valoaiea 1 n cazul n caie coloana este numeiic
- piimaiy_key aie valoaiea 1 n cazul n caie coloana este o cheie
piimai
- table - numele tabelului NySQL ciuia i apai(ine coloana
- type - tipul NySQL al coloanei
- unique_key aie valoaiea 1 n cazul n caie coloana este o cheie unic
- unsigneu aie valoaiea 1 n cazul n caie coloana este ue tip
0NSIuNEB
- zeiofill aie valoaiea 1 n cazul n caie coloana este completat cu
zeiouii
Ca ,i func(ia conex uesciis anteiioi n acest mouul, func(ia
mysql_fetch_fielu() pieia uou aigumente: valoaiea ietuinat ue
func(ia mysql_queiy() ,i inuexul

284

coloanei uin setul ue iezultate caie va fi uesciis. Ca ue obicei,
inuexul asociat piimei coloane este , inuexul asociat celei ue-a uoua
coloane este l etc.
Iat un exemplu caie piezint mouul ue ob(ineie a stiuctuiii
complete a setului ue iezultate, inclusiv o uesciieie a fieciei coloane
uin setul ue iezultate:

$inteiogaie = ,SELECT * FR0N angajat ";
$iezultat = mysql_queiy($inteiogaie);
if (mysql_eiino())

uie(,<BR>" .mysql_eiino().": ,.mysql_eiioi(). ,<BR>");

$numai_campuii = mysql_num_fielus($iezultat);
foi ($i = u; $i < $numa_campuii; $i++)

echo ,<BR>Coloana $i: ,;
$info = mysql_fetch_fielu($iezultat);
if ($info)

echo ,<PRE>
blob: $info->blob
max_length: $info->max_length
multipe_key: $info->multipe_key
name: $info->name
not_null: $info->not_null
numeiic: $info->numeiic
piimaiy_key: $info->piimaiy_key
table: $info->table
type: $info->type
unique_key: $info->unique_key
unsigneu: $info->unsigneu
zeiofill: $info->zeiofill
<PRE>";

else

echo ,Necunoscut";



<titlu>Accesul non-secven(ial la coloanele unui set ue
iezultate<titlu>
Func(iile mysql_fetch_iow() ,i mysql_fetch_aiiay() ietuineaz, n
geneial, inuuiile uinti-un set ue iezultate n mou secven(ial. Totu,i,
func(ia mysql_uata_seek() peimite ob(ineiea accesului la inuuiile
unui set ue iezultate nti-o maniei non-secven(ial. Func(ia aie
foima:

mysql_uata_seek(iezultat, numa_ianu)

unue iezultat este valoaiea ietuinat ue func(ia mysql_queiy(), iai
numai_ianu este inuexul inuului la caie uoii(i s ob(ine(i accesul.
Piimul inu al setului ue iezultate este numeiotat cu l, al uoilea cu 2
etc. Func(ia ietuineaz tiue uac execu(ia ieu,e,te, iespectiv false n
caz contiai. 0 invocaie ulteiioai a func(iei

28S

mysql_fetch_iow() sau a func(iei mysql_fetch_aiiay() va ietuina
inuul uin pozi(ia specificat a setului ue iezultate.
Be exemplu, uimtoiul piogiam ob(ine accesul la al uoilea inu al
setului ue iezultate ietuinat ue o inteiogaie anteiioai:

$ok = mysql_uata_seek($iezultat, 1);
if ($ok)

uie(,<BR>" .mysql_eiino().": ,.mysql_eiioi(). ,<BR>");

$ianu = mysql_fetch_aiiay($iezultat, NYSQL_ASS0C);

<Test ,la minut">
- Pieciza(i func(ia NySQL uin biblioteca PBP cate ietuineaz numele
unei coloane specificate uinti-un set ue iezultate.
- Pieciza(i func(ia NySQL uin biblioteca PBP caie ietuineaz tipul
NySQL al unei coloane specificate uinti-un set ue iezultate.
- Pieciza(i func(ia NySQL uin biblioteca PBP caie ietuineaz
numiul coloaneloi uinti-un set ue iezultate.
- Pieciza(i func(ia NySQL uin biblioteca PBP caie peimite accesul
non-secven(ial la un set ue iezultate. <Test ,la minut">

<titlu>Exploiaiea SuBB<titlu>
Biblioteca NySQL afeient limbajului PBP incluue tiei func(ii caie v
peimit s ueteimina(i stiuctuia unei baze ue uate, n spe(:
- S ueteimina(i bazele ue uate gzuuite ue seiveiul NySQL
- S ueteimina(i tabelele incluse nti-o baz ue uate specificat
- S ueteimina(i coloanele incluse nti-un tabel specificat uinti-o
baz ue uate, piecum ,i caiacteiisticile acestoi coloane

<Sfatul specialistului>
ntiebaie: Bac am sciis inteiogaiea caie a ietuinat setul ue
iezultate, n-ai tiebui s cunosc ueja stiuctuia acestuia. Be ce tiebuie
s invoc o func(ie pentiu a ueteimina, ue exemplu, numele unei
coloane uin setul ue iezultate.

<not>
Rspunsuii la test:
- mysql_fielu_name();
- mysql_fielu_type();
- mysql_num_fielus();
- mysql_uata_seek()<not>

286

Rspuns: Exist numeioase ciicumstan(e n caie func(iile uesciise n
aceast sec(iune se pot uoveui utile. 0 asemenea situa(ie apaie cnu
foima(i o inteiogaie folosinu foima SELECT *. 0iuinea n caie este
aianjat con(inutul unui set ue iezultate nu este uefinit ,i poate vaiia
n func(ie ue veisiunea NySQL pe caie o utiliza(i. Be asemenea,
con(inutul setului ue iezultate se va mouifica la fiecaie schimbaie n
stiuctuia tabelului supus inteiogiii. 0n alt exemplu ue situa(ie n
caie func(iile iespective sunt utile este o aplica(ie caie peimite
utilizatoiiloi s emit inteiogii sau s fuinizeze uate folosite la
foimaiea inteiogiiloi. nti-un asemenea caz, stiuctuia setului ue
iezultate nu este cunoscut n momentul sciieiii piogiamului PBP.
<Sfatul specialistului>

<titlu>Beteiminaiea bazeloi ue uate gzuuite ue un seivei<titlu>
Pentiu a ueteimina bazele ue uate gzuuite ue un seivei NySQL ue
caie piogiamul uumneavoasti este legat piin inteimeuiul unei
conexiuni active, invoca(i func(ia:

mysql_list_ubs()

Func(ia ietuineaz un set ue iezultate special, alctuit uin numele
bazeloi ue uate gzuuite. Pute(i ueteimina numiul inuuiiloi uin
setul ue iezultate invocnu func(ia mysql_num_iows(), a,a cum
pioceua(i n cazul unui set ue iezultate noimal. Cu toate acestea,
tiebuie s pielua(i inuuiile folosinu func(ia mysql_tablename(), caie
pieia ca aigumente valoaiea ietuinat ue func(ia mysql_list_ubs() ,i
numiul inuuiiloi caie voi fi pieluate. Rnuuiile sunt numeiotate
ncepnu ue la u.
Iat un exemplu caie piezint mouul ue afi,aie a numeloi bazeloi ue
uate gzuuite:

$ub = mysql_connect(,localhost");
$ublist = mysql_list_ubs();
$n =mysql_num_iows($ublist);
foi ($i = u; $i < $n; $i++)

echo ,<BR>" . mysql_tablename($ublist, $i);


Bin motive ue claiitate, n exemplu nu se veiific apaii(ia unoi
eventuale eioii NySQL; nainte ue a folosi acest piogiam, tiebuie s
auuga(i instiuc(iuni auecvate ue veiificaie a apaii(iei eioiiloi.

<iemaic>
PBP2 con(inea o func(ie, numit mysql_ubname(), folosit pentiu
iegsiiea numeloi bazeloi ue uate uin stiuctuia ue uate ietuinat ue
mysql_list_ubs(). Totu,i, n PBP4, pentiu aceast opeia(ie tiebuie
folosit func(ia mysql_tablename ().<iemaic>

287

<titlu>Beteiminaiea tabeleloi incluse nti-o baz ue uate<titlu>
Pentiu a ob(ine o list a tabeleloi incluse nti-o baz ue uate
specificat, invoca(i func(ia mysql_list_tables(), tiansfeinuu-i ca
aigument numele bazei ue uate. Piogiamul uumneavoasti tiebuie
s uispun ue o conexiune activ cu seiveiul NySQL; n caz contiai,
func(ia e,ueaz. Func(ia mysql_list_tables() ietuineaz un set ue
iezultate special, similai celui ietuinat ue mysql_list_ubs(). Pentiu a
ob(ine acces la lista cu tabele, paicuige(i piin iteia(ie setul ue
iezultate, invocnu n mou iepetat func(ia mysql_tablename().
Iat un exemplu caie piezint mouul ue ob(ineie ,i afi,aie a listei
tabeleloi asociate bazei ue uate testub:

$ub = mysql_connect(,localhost"), ,php", ,salut");
$tabele = mysql_list_tables(,testub");
$n =mysql_num_iows($tabele);
foi ($i = u; $i < $n; $i++)

echo ,<BR>" . mysql_tablename($tabele, $i);


Bin motive ue claiitate, n exemplu nu se veiific apaii(ia unoi
eventuale eioii NySQL; totu,i, nainte ue a folosi acest piogiam,
tiebuie s auuga(i instiuc(iuni auecvate ue veiificaie a apaii(iei
eioiiloi.
<Sugestie>
n cazul n caie invocaiea func(iei mysql_num_iows() e,ueaz cu
mesajul ,Waining: Supplieu aigument is not a valiu NySQL iesult
iesouice*", piobabil c iuentificatoiul ue utilizatoi sau paiola
specificate la invocaiea func(iei mysql_connect() nu au peimisiunea
ue a ob(ine acces la baza ue uate ale ciei tabele nceica(i s le afi,a(i.
<Sugestie>

<titlu>Beteiminaiea coloaneloi incluse nti-un tabel<titlu>
Pentiu a ob(ine o list a coloaneloi incluse nti-un tabel, invoca(i
func(ia mysql_list_fielus(), tiansfeinuu-i ca aigument numele bazei
ue uate ,i numele tabelului. Piogiamul uumneavoasti tiebuie s
uispun ue o conexiune activ cu seiveiul NySQL; n caz contiai,
func(ia e,ueaz. Func(ia mysql_list_fielus() ietuineaz un set ue
iezultate similai celoi ietuinate ue func(iile mysql_list_ubs() ,i
mysql_list_tables(). Pentiu a ob(ine acces la lista coloaneloi ,i la
caiacteiisticile acestoia, invoca(i func(ia mysql_fetch_fielus().
Alteinativ, uac uoii(i s ob(ineii acces la o singui caiacteiistic a
coloaneloi, pute(i invoca una uin func(iile mysql_fielu_flags(),
mysql_fielu_len(), mysql_fielu_name() sau mysql_fielu_type().

<not>
*n tiauuceie Aveitisment: Aigumentul fuinizat nu constituie o
iesuis ue tip iezultat NySQL. coiect. - N.T. <not>

288

Iat un exemplu caie v piezint mouul ue ob(ineie a listei
coloaneloi ,i a caiacteiisticiloi coloaneloi uin tabelul angajat al bazei
ue uate testub:

$ub = mysql_connect(,localhost"), ,php", ,salut");
$campuii = mysql_list_fielus(,testub", ,angajat");
$numai_campuii =mysql_num_fielus($campuii);
foi ($i = u; $i < $numai_campuii; $i++)

echo ,<BR>Coloana $i: ";
$info = mysql_fetch_fielu($campuii);
if ($info)

echo ,<PRE>
blob: $info->blob
max_length: $info->max_length
multipe_key: $info->multipe_key
name: $info->name
not_null: $info->not_null
numeiic: $info->numeiic
piimaiy_key: $info->piimaiy_key
table: $info->table
type: $info->type
unique_key: $info->unique_key
unsigneu: $info->unsigneu
zeiofill: $info->zeiofill
<PRE>";

else

echo ,Necunoscut";



Bin motive ue claiitate, n exemplu nu se veiific apaii(ia unoi
eventuale eioii NySQL. Bin nou, nainte ue a folosi acest piogiam,
tiebuie s auuga(i instiuc(iuni auecvate ue veiificaie a apaii(iei
eioiiloi.

<Sugestie>
n cazul n caie invocaiea func(iei mysql_list_fielus() e,ueaz cu
mesajul ue eioaie ,1u44: Access uenieu*", piobabil c iuentificatoiul
ue utilizatoi sau paiola specificate la invocaiea func(iei
mysql_connect() nu au peimisiunea ue a ob(ine acces la tabelul uin
baza ue uate ale ciui coloane nceica(i s le afi,a(i. <Sugestie>

<Sfatul specialistului>
ntiebaie: Pot iula piogiamul mysql n mou inteiactiv, pentiu a
vizualiza stiuctuia unei baze ue uate NySQL. Caie ai fi, atunci,
motivul pentiu caie a, folosi func(iile uesciise n aceast sec(iune.
Rspuns: Func(iile uesciise n aceast sec(iune v peimit s
ueteimina(i stiuctuia unei baze ue uate la iulaie. Le pute(i folosi, ue
exemplu, pentiu a ciea

<not>
n tiauuceie: Acces inteizis. - N.T. <not>

289

utilitaie caie peimit unui utilizatoi s mouifice stiuctuia unei baze
ue uate n mou inteiactiv. Be asemenea, le pute(i folosi pentiu a ciea
foimulaie ce peimit utilizatoiiloi caie nu cunosc SQL s foimeze
inteiogii SQL caie iapoiteaz uatele incluse nti-o baz ue uate
NySQL. <Sfatul specialistului>

<Test Ia minut">
- Pieciza(i numele func(iei NySQL uin biblioteca PBP caie afi,eaz
numele bazeloi ue uate gzuuite ue un seivei.
- Pieciza(i numele func(iei NySQL uin biblioteca PBP caie afi,eaz
numele tabeleloi uinti-o baz ue uate NySQL.
- Pieciza(i numele func(iei NySQL uin biblioteca PBP caie
men(ioneaz coloanele uinti-un tabel al unei baze ue uate NySQL.
<Test Ia minut">

<titlu>uhilimele ,i ghilimele magice<titlu>
S piesupunem c nceica(i s executa(i o inteiogaie NySQL caie
este asemntoaie cu uimtoaiea:

SELECT * FR0N tabel WBERE text=,Ce este asta." intieba ea;

Bincolo ue alte aspecte, ve(i ntmpina unele uificult(i, ueoaiece SQL
nu peimite nglobaiea unoi ghilimele simple n inteiioiul valoiii unui
,ii. Piobleme similaie pot apiea cnu un utilizatoi neatent sau cu
inten(ii iele tasteaz un text ca acesta nti-o caset cu text a unui
foimulai BTNL:

<INP0T TYPE="TEXT" NANE="paiola">

Dac! emite"i o instruc"iune de reflectare a con"inutului casetei text far! s!
v! gndi"i, ve"i descoperi c! pagina HTML rezultant! con"ine o caset! cu
text nedorit!.
PBP incluue func(ii ,i facilit(i pentiu iezolvaiea acestoi situa(ii.
Aceasta sec(iune piezint unele tehnici pentiu luciul cu uate utilizate
la:
- Inteiogii SQL
- Pagini BTNL
- Auiese 0RL

<titlu>uhilimele magice<titlu>
Fi,ieiul ue ini(ializaie PBP, n spe( php.ini, con(ine op(iuni ue
configuiaie caie contioleaz mouul n caie PBP contioleaz uatele
piovenite ue la o suisa exteina, cum sunt un foimulai BTNL, un
fi,iei text sau o baz ue uate. Aceste op(iuni sunt

<not>
Rspunsuii la test:
- mysql_list_ubs()
- mysql_list_tables()
- mysql_list_fielus()<not>

29u

pioiectate pentiu a v ajuta s v auapta(i la moualit(ile ueseoii
contiauictoiii n caie biowseiele ,i bazele ue uate manipuleaz
caiacteiele speciale, n geneial, auministiatoiul ue sistem
configuieaz fi,ieiul php.ini atunci cnu este instalat PBP; n geneial,
utilizatoiii obi,nui(i nu tiebuie s aib posibilitatea ue a auuce
mouificii n fi,iei.
0p(iunea magic_quotes_gpc specific mouul n caie PBP manipuleaz
opeia(iile BTTP uET ,i P0ST, piecum ,i opeia(iile cu vaiiabile cookie.
Bac op(iunea activat, PBP ignoi n mou automat ghilimelele
simple, ghilimelele uuble, caiacteiele backslash ,i caiacteiele nule
(caiacteiele a cioi valoaie ASCII este u) caie apai nti-o vaiiabil
BTTP, piefixnu fiecaie apaii(ie a acestoi caiacteie cu un caiactei
backslash. In mou caiacteiistic, aceast op(iune este activat nti-o
instalaie piestabilit.
0p(iunea magic_quotes_iuntime specific mouul n caie PBP
manipuleaz uatele ue oiigine extein. Bac aceast op(iune este
activat, PBP ignoi automat ghilimelele simple ,i uuble caie apai n
uatele exteine, inclusiv uatele uin foimulaiele BTNL, uin fi,ieie ,i
baze ue uate. n mou caiacteiistic, aceast op(iune este uezactivat
nti-o instalaie piestabilit.
Bac este activat, op(iunea magic_quotes_sybase mouific efectul
op(iuniloi magic_quotes_gpc ,i magic_quotes_iuntime, astfel nct un
caiactei ue tip ghilimele simple s fie piefixat cu un alt caiactei ue
tip ghilimele simple, nu cu un backslas. Aceast op(iune iespect
conven(iile neobi,nuite ue manipulaie a ,iiuiiloi, folosite ue sistemul
Sybase ue gestiune a bazeloi ue uate. n mou caiacteiistic, aceast
op(iune este uezactivat nti-o instalaie piestabilit.
Func(iile get_magic_quotes_gpc() ,i get_magic_quotes_iuntime()
ietuineaz fiecaie valoaiea op(iunii PBP coiespunztoaie. Nai mult,
pute(i folosi func(ia set_magic_quotes_iuntime() pentiu a specifica
valoaiea op(iunii magic_quotes_iuntime pentiu iestul uuiatei
sciiptului PBP cuient. Be exemplu, pentiu a uezactiva op(iunea
magic_quotes_iuntime, invoca(i func(ia

set_magic_quotes_iuntime(u);

Alteinativ, pentiu a activa op(iunea magic_quotes_iuntime, invoca(i
func(ia

set_magic_quotes_iuntime(u);

PBP nu fuinizeaz nici o func(ie coiespunztoaie caie s anuleze
op(iunea magic_quotes_iuntime, ueoaiece op(iunea iespectiv este
utilizat la tiansfeiul vaiiabileloi BTTP ctie un sciipt. Bup ce
sciiptul ,i-a nceput execu(ia, valoaiea op(iunii iespective nu mai
este luat uin nou n consiueiaie.

291

<titlu>Conveisia caiacteieloi speciale ,i anulaiea acesteia<titlu>
Cnu PBP conveite,te* un ,ii, folose,te pentiu aceasta func(ia
auuslashes(). Bac PBP nu este configuiat astfel nct s
conveiteasc un text n mou automat, atunci uumneavoasti tiebuie
s executa(i manual aceast mouificaie. Pui ,i simplu invoca(i func(ia
auuslashes(), tiansfeinuu-i ca aigument ,iiul text. Be exemplu,
pentiu a conveiti con(inutul ,iiului $text ,i a plasa iezultatul n
vaiiabila $mouificat, invoca(i func(ia uup cum uimeaz:

$mouificat = auuslashes($text);

Func(ia stiipslashes() execut opeia(ia complementai ue anulaie a
conveisiei, auic elimin caiacteiele backslash inseiate pentiu
conveisia caiacteieloi ue tip ghilimele simple, ghilimele uuble,
backslash ,i caiacteie nule. Pentiu a anula conveisia ,iiului
$mouificat ,i a plasa iezultatul n vaiiabila $nemouificat, invoca(i
func(ia uup cum uimeaz:

$nemouificat = stiipslashes($mouificat)

<Sugestie>
PBP mai incluue o func(ie util pentiu conveisia caiacteieloi
speciale. Func(ia quotemeta() va inseia un backslash nainte ue
fiecaie apaii(ie a uimtoaieloi caiacteie: . \ + * . ( $ ).
<Sugestie>

<titlu>Conveisia texteloi BTNL<titlu>
Cnu lucia(i cu texte BTNL, conveisia executat ue func(ia
auuslashes() nu este suficient, ueoaiece BTNL este sensibil la alte
caiacteie speciale uect cele conveitite ue func(ia auuslashes().
Func(ia htmlspecialchais() conveite,te caiacteiele la caie BTNL este
sensibil. Aceast func(ie este utila pentiu a exista gaian(ia c un
anumit ,ii nu con(ine maicaje BTNL, ceea ce poate fi impoitant
pentiu a coiecta mouul ue opeiaie a unei aplica(ii, cum ai fi o tabel
ue mesaje Web. Func(ia execut uimtoaiele conveisii:

<tabel>
*Caiactei
*Rezultat conveitit -

* (ampeisanu)
*amp;

*"(ghilimele uuble)
*quot; (numait cnu este specificat op(iunea ENT_C0NPAT sau
ENT_Q00TES)

*'(ghilimele simple)
*S9; (numai cnu este specificat op(iunea ENT_Q00TES)

*< (mai mic uect)
*lt;

*> (mai maie uect)
*gt;
<tabel>
<not>
*Aceast conveisie nu tiebuie confunuat cu o alta, ,i anume
conveisia ue tip. Conveisia men(ionat n acest capitol const, ue
fapt, uin mouificaiea semnifica(iei anumitoi caiacteie, pentiu a
pieveni o inteipietaie eionata a acestoia ue ctie piogiamele
specializate. Bin acest motiv, toate conveisiile men(ionate n acest
capitol voi face iefeiiie la mouificaiea semnifica(iei unoi caiacteie,
nu la conveisiile ue tip. - N.T. <not>

292

Func(ia aie uimtoaiea foim:

htmlspecialchais(text ,stil_ghilimele)

unue text specific ,iiul caie con(ine textul ce uimeaz a fi conveitit,
iai aigumentul op(ional stil_ghilimele specific mouul ue conveisie a
ghilimeleloi simple, iespectiv uuble. valoiile peimise ale op(iunii
stil_ghilimele sunt
- ENT_C0NPAT piecizeaz c tiebuie conveitite numai ghilimelele
uuble
- ENT_Q00TES piecizeaz c tiebuie conveitite ambele tipuii ue
ghilimele
- ENT_N0Q00TES piecizeaz c nu tiebuie conveitit nici un tip ue
ghilimele Be exemplu, pentiu a conveiti toate caiacteiele BTNL
speciale, inclusiv ambele tipuii ue ghilimele, uin ,iiul $htmltext,
invoca(i func(ia uup cum uimeaz:

$conveitit = htmlspecialchais($htmltext);

<Sugestie>
0 func(ie PBP conex, ,i anume htmlentities(), conveite,te toate
caiacteiele cu echivalente n entit(i BTNL. n piezent, nu este
acceptat uect setul ue caiacteie IS0-88S9-1 . <Sugestie>

<Sugestie>
PBP incluue o alt func(ie util pentiu conveisia texteloi BTNL
Func(ia n12bi() inseieaz caiacteiele <bi> anteiioi fieciui caiactei
ue tip linie nou uin aigumentul su. ncepnu ue la PBP 4.u.S,
func(ia inseieaz caiacteiele <bi>, n concoiuan( cu XBTNL 1.u.
<Sugestie>

<titlu>Conveisia auieseloi 0RL<titlu>
Cnu PBP couific uate ca paite a unei auiese 0RL, a,a cum
pioceueaz la efectuaiea unei opeia(ii BTTP uET, folose,te func(ia
uilencoue(). Aceast func(ie nlocuie,te fiecaie caiactei non-
alfanumeiic (cu excep(ia spa(iiloi) cu un simbol al piocentului (),
uimat ue uou cifie hexazecimale caie con(in valoaiea ASCII a
caiacteiului. Spa(iile sunt couificate sub foim ue simboluii ale
auuniii (+).
0 func(ie conex, n spe( iawuilencoue(), execut o conveisie
similai; cu toate acestea, func(ia iespectiv nlocuie,te spa(iile cu
2u, confoim RFC 17S8, stanuaiuul Inteinet pentiu couificaiea
auieseloi 0RL (vezi www. ifc.net).
Func(iile uiluecoue() ,i iawuiluecoue() execut opeia(ii
complementaie. Aceste func(ii sunt utile la cieaiea auieseloi 0RL
caie incluu peiechi nume-valoaie nglobate. Be exemplu, s
piesupunem c sciiptul uumneavoasti PBP tiebuie s cieeze o
pagin BTNL caie con(ine o hipeilegtui spie auiesa 0RL a unui
motoi ue cutaie. Teimenul ue cutaie tiebuie tiansmis n foim
couificat 0RL, pentiu ca seiveiul Web ,i biowseiul s nu se
,mpieuice" ue caiacteiele speciale. Pentiu a couifica uatele, folosi(i
un piogiam PBP ca acesta:

echo A BREF="www.mototuecautaie.com.cuvantcheie=,
uilencoue ($text), "> ;

29S

<Sfatul specialistului>
ntiebaie: Sunt auministiatoiul unui seivei PBP, Caie sunt op(iunile
pentiu ghilimele magice pe caie ai tiebui s le activez.
Rspuns: 0p(iunile auecvate constituie obiectul unoi oaiecaie
contioveise. Inteiesele piogiamatoiiloi PBP nceptoii, caie poate
c nu n(eleg n totalitate necesitatea ncauiiii uateloi ntie
ghilimele, sunt cel mai bine iepiezentate piin activaiea op(iuniloi
magic_quotes_gpc ,i magic_quotes_iuntime. n acest caz, op(iunea
magic_quotes_sybase tiebuie activat numai uac piincipalul sistem
ue gestiune a bazeloi ue uate folosit cu PBP este Sybase.
Pe ue alt paite, mul(i piogiamatoii PBP piicepu(i sunt ue pieie c
ghilimele magice sunt o maie pacoste. Bac seiveiul uumneavoasti
PBP este folosit mai ales ue ctie piogiamatoii PBP expeiimenta(i,
tiebuie s ave(i n consiueiaie uezactivaiea op(iuniloi legate ue
ghilimelele magice. <Sfatul specialistului>

<Test ,la minut">
- Caie este func(ia PBP folosit ue ctie ghilimelele magice uin PBP
pentiu ncauiaiea ntie ghilimele a uateloi piovenite uin suise
exteine.
- Caie este func(ia PBP ce poate fi utilizat pentiu a elimina
caiacteiele backslash auugate piin caiacteiistica ghilimeleloi
magice.
- Caie este op(iunea ue configuiaie PBP ce influen(eaz uatele
tiansmise piin inteimeuiul opeia(iiloi BTTP uET ,i P0ST. <Test ,la
minut">

<titlu>Alte facilit(i PBP ue gestiune a uateloi<titlu>
Biblioteca PBP fuinizeaz acces la numeioase alte instiumente ue
gestiune a uateloi. Sec(iunea ue fa( tiece n ievist aceste
instiumente, le uesciie caiacteiisticile ,i situa(iile cnu ,i pot uoveui
utilitatea. Aceast sec(iune nu este menit a piezenta infoima(iile
necesaie pentiu utilizaiea instiumenteloi uesciise. n schimb,
fuinizeaz, iefeiin(e la ci(i sau ,iiuii Web caie v pot ajuta s
nv(a(i mai multe uespie fiecaie instiument. Instiumentele
piezentate nu sunt uisponibile nti-o instalaie PBP piestabilit; n
geneial, auministiatoiul uumneavoasti PBP tiebuie s le instaleze
,i s le configuieze sepaiat uin PBP.

<not>
Rspunsuii la test:
- auuslashes()
- stiipslashes()
- magic_quotes_gpc

294

<titlu>Postgiesql<titlu>
Ca ,i NySQL, Postgiesql (pionun(at P0ST-gies-q-1), este un sistem
ue gestiune a bazeloi ue uate piovenit uinti-o suis ueschis. Bin
peispectiv istoiic, NySQL a fost sistemul ue baze ue uate piefeiat
ue amatoiii ue peifoimante biute ,i simplitate n utilizaie, n timp ce
Postgiesql a fost op(iunea favoiit a celoi caie piefei caiacteiisticile
mai complexe ,i scalabilitatea. Totu,i, veisiunile iecente ale acestoi
sisteme au complicat pioblema, ueoaiece NySQL a acumulat unele
caiacteiistici mai complexe, iai peifoimantele sistemului Postgiesql
s-au mbunt(it.
Cu toate acestea, Postgiesql continu s accepte numeioase
caiacteiistici caie nu sunt nc ofeiite ue veisiunile NySQL stanuaiu,
ntie caie amintim:
- Chei exteine. Acestea peimit iespingeiea automat a mouificiiloi
uin baza ue uate caie nu iespect stiuctuia bazei ue uate.
- Subselec(ii. Acestea peimit foimaiea unoi inteiogii complexe, caie
ieuuc la minimum uimensiunea setuiiloi ue iezultate tiimise piin
ie(ea.
- Tianzac(ii. Acestea peimit evitaiea apliciii incomplete asupia unei
baze ue uate a unui set ue mouificii coielate, piecum ,i alteiaiea
uateloi caie ueiiv uin piocesul iespectiv.
- Beclan,atoaie. Peimit specificaiea ue ac(iuni executate ue seiveiul
ue baze ue uate oii ue cte oii se piouuc anumite evenimente.
- veueii. Peimit fuinizaiea, n conui(ii convenabile, ctie anumi(i
utilizatoii, ue acces la sub-setuii ale bazei ue uate.
Nai mult, Postgiesql paie s se auapteze mai bine uect NySQL la
aplica(ii ciei implic mai mul(i utilizatoii concuien(i ai bazei ue
uate. Bac sunte(i inteiesat ue Postgiesql, consulta(i situl Web
afeient acestuia, la auiesa www.postgiesql.oig.

<Sugestie>
0tilizatoiii ue Linux Reu Bat 7.1 pot instala supoitul PBP pentiu
Postgiesql piin instalaiea pachetului RPN php-pgsql. <Sugestie>

<titlu>0BBC<titlu>
0BBC (0pen Batabase Connectivity) este un stanuaiu cieat ue
Niciosoft, acum auoptat pe scai laig att n meuiile Niciosoft, ct
,i n cele bazate pe 0NIXLinux. 0BBC fuinizeaz o facilitate
minimal pentiu accesul la bazele ue uate. n esen(, fiecaie sistem
comeicial ue gestiune a bazeloi ue uate ,i majoiitate sistemeloi non-
comeiciale ue gestiune a bazeloi ue uate fuinizeaz piogiame uiivei
0BBC caie peimit accesul la aceste sisteme piin inteimeuiul 0BBC,
nu numai piin inteimeuiul unoi piogiame uiivei native. 0BBC este
ueosebit ue impoitant pentiu cei caie uoiesc s ob(in accesul la o
baz ue uate gzuuit ue Niciosoft uinti-un sistem 0NIXLinux.

29S

Sistemele ue opeiaie cieate ue Niciosoft con(in supoit ncoipoiat
pentiu 0BBC. Astfel, uac iula(i PBP sub un sistem ue opeiaie
Niciosoft, ve(i uescopeii c supoitul 0BBC este uisponibil
instantaneu. Totu,i, sub 0NIXLinux tiebuie s instala(i o punte
0BBC-0BBC sau o alt facilitate caie accept 0BBC. Solu(iile
comeiciale le incluu pe cele uistiibuite ue 0penlink
(www.openlinksw.com) ,i Easysoft (www.easysoft.com). 0
alteinativ piovenit uinti-o suis ueschis, n spe(
0BBCSocketSeivei, este uisponibil la auiesa souicefoige.net.

<titlu>LBAP<titlu>
Piotocolul Lightweight Biiectoiy Access Piotocol (LBAP) uevine tot
mai populai. Ca o baz ue uate obi,nuit, o baz ue uate LBAP
stocheaz uate. 0 baz ue uate LBAP este ns foaite bine auaptat
pentiu stocaiea cataloageloi, auic a unoi liste cu peisoane ,i unit(i
ue oiganizaie, piecum ,i a caiacteiisticiloi acestoia. Bazele ue uate
LBAP sunt pioiectate pentiu a stoca uate ielativ simple, iaieoii
mouificate. Astfel, acestea sunt iueale pentiu stocaiea infoima(iiloi
uespie utilizatoiii sistemului, n paiticulai, LBAP accept metoue ue
comunicaie siguie, caie peimit bazeloi ue uate LBAP s stocheze
nume ue utilizatoi ,i paiole. LBAP fuinizeaz mecanisme pentiu
ieplicaiea bazeloi ue uate LBAP n veueiea piotec(iei integiit(ii
uateloi ,i asigui echilibiaiea nciciii, pentiu a putea toleia saicini
ue pieluciaie ue maii uimensiuni.
Pentiu mai multe infoima(ii uespie LBAP, consulta(i volumul
Implementing Biiectoiy Seivices (Implementaiea seiviciiloi ue
catalog), ue Aichie Reeu (0sboine Ncuiaw-Bill, 2uuu).

<Sugestie>
Bac folosi(i Reu Bat Linux 7.1, pute(i instala supoitul PBP pentiu
LBAP piin instalaiea pachetului RPN php-pgsql. Apoi, mouifica(i
fi,ieiul etcphp.ini astfel nct s con(in linia (ne-comentat)
"extension=luap.so". Apoi, iepoini(i seiviciul BTTP piin emiteiea
comenzii "seivice httpu iestant".<Sugestie>

<titlu>XNL<titlu>
Extensible Naikup Language (XNL) este un limbaj pentiu uesciieiea
uateloi. Nul(i se a,teapt ca, nti-un tiziu, XNL s nlocuiasc BTNL
ca limbaj uominant pentiu schimbul infoima(iiloi piin Inteinet, n
timp ce BTNL uesciie aspectul uateloi, XNL este capabil ue a uesciie
stiuctuia uateloi (piactic, XNL este o moualitate ue a tiimite o mic
baz ue uate piin Inteinet)
PBP accept biblioteca xpat, bazat pe activitatea lui }ames Claik.
Biblioteca v peimite s constiui(i un analizoi pentiu uocumentele
XNL. 0n analizoi n(elege sintaxa unui uocument XNL ,i poate
iuentifica acele componente stiuctuiale caie

296

alctuiesc uocumentul. Asociinu o func(ie cu fiecaie tip ue
component, pute(i configuia analizoiul astfel nct s pielucieze sau
s conveiteasc un uocument XNL.

<Sfatul specialistului>
ntiebaie: Caie sunt celelalte instiumente ,i caiacteiistici acceptate
ue PBP.
Rspuns: Bibliotecile PBP sunt extiem ue cupiinztoaie. Alte
instiumente ue gestiune a uateloi acceptate ue PBP incluu
uimtoaiele:
- uBase
- BBN
- ubx
- B0N XNL
- FiontBase
- filePio
- Bypeiwave Infoimation Seivei
- Infoimix
- Inteibase
- Ingies II
- Niciosoft SQL Seivei
- mSQL
- 0iacle ,i 0iacle 8
- Extensia C0RBA Satellite
- SESANSQL Seivei
- Sybase
- WBBX
- YA (piotocolul S9.Su)
Pentiu mai multe infoima(ii uespie aceste caiacteiistici ale
limbajului PBP, consulta(i iefeiin(ele piezentate n manualul PBP pe
supoit electionic, la auiesa http:www.php.net. <Sfatul
specialistului>
Pentiu mai multe infoima(ii uespie XNL, consulta(i pagina Web a
oiganiza(iei Woilu Wiue Web Consoitium
(http:www.wS.oigXNL). Be asemenea, consulta(i volumul XNL:
The Complete Refeience (XNL - o iefeiin( complet), ue Beathei ,
Williamson (0sboineNcuiaw-Bill, 2uu1).

<Sugestie>
Bac folosi(i Reu Bat Linux 7.1, pachetul PBP stanuaiu incluue supoit
pentiu XNL. <Sugestie>

297

<Test ,la minut">
- Caie este sistemul ue gestiune a bazeloi ue uate piovenit uin suis
ueschis (altul uect NySQL) fiecvent folosit cu PBP.
- Caie este seiviciul ue cataloage fiecvent folosit cu PBP.
- Caie este caiacteiistica PBP ce fuinizeaz accesul la sistemele ue
baze ue uate Niciosoft.
- Caie este limbajul ce va nlocui, n cele uin uim, BTNL ca limbaj
comun al Inteinetului. <Test ,la minut">

<titlu>Pioiect 14-1: 0n piogiam ue navigaie piin agenua cu
auiese<titlu>
Acest pioiect aboiueaz uin nou piogiamul ue navigaie piin agenua
cu auiese piezentat n cauiul pioiectului 11-S. n acel pioiect,
piogiamul ue navigaie eia implementat piin utilizaiea fi,ieieloi.
Pioiectul ue fa( va implementa un piogiam ue navigaie similai, caie
folose,te o baz ue uate NySQL pentiu a stoca nume ,i auiese ue e-
mail.

<titlu>Scopuiile pioiectului<titlu>
- Piezentaiea unui piogiam complet caie ob(ine accesul la o baz ue
uate NySQL
- Piezentaiea pioceueeloi ue piogiamaie a bazeloi ue uate caie
accept navigaiea

<titlu>Pas cu pas<titlu>
1. Ciea(i uimtoiul sciipt ue shell, uenuminuu-l p14-1.sh. Nouifica(i
n mou coiespunztoi iuentificatoiul ue utilizatoi (php) ,i paiola
(salut). Apoi, ncica(i sciiptul n seiveiul uumneavoasti PBP.

mysql -p <<E0F
BR0P BATABASE mailub;
CREATE BATABASE mailub;
0SE mailub;
uRANT ALL 0N mailub.* T0 phplocalhost IBENTIFIEB BY 'salut';
CREATE TABLE agenda_adrese
(
iu INTEuER 0NSIuNEB N0T N0LL A0T0_INCRENENT PRINARY
KEY,
nume vARCBAR(Su),
email vARCBAR(Su)
)
;
INSERT INT0 agenua_auiese
(nume, email)
vAL0ES
('Al Nall', 'albiowncow.com'),

<not>
Rspunsuii la test:
- Postgiesql
- LBAP
- 0BBC
- XNL<not>

298

('Bob Tale', 'bobstoiies.com'),
('Chuck Stake', 'chuckbeef.com'),
('Eu Nogg', 'eubeveiage.com'),
('Xi Lentz', 'xiquiet.com'),
('Yo Boho', 'yopiiates.com'),
('ak Cloth', 'zakashes.com')
;
E0F

2. Stuuia(i sciiptul, pentiu a n(elege mouul ue func(ionaie a acestuia.
Re(ine(i c sciiptul cieeaz o baz ue uate numit mailub, piecum ,i
un tabel agenua_auiese n inteiioiul acesteia. Be asemenea, sciiptul
populeaz tabelul piin insei(ia mai multoi inuuii. Linia caie ncepe
cu un simbol uiez () este un comentaiiu. Bac elimina(i simbolul
uiez ,i executa(i sciiptul, acesta va ,teige ,i apoi va ie-ciea baza ue
uate. Tiebuie s ,teige(i simbolul uiez nainte ue a iula sciiptul a
uoua oai; n caz contiai, sciiptul va e,ua n nceicaiea ue a ciea
baza ue uate, caie exist ueja.
S. Beschiue(i sesiunea ue luciu cu gazua seiveiului PBP, tiece(i la
catalogul caie con(ine sciiptul ncicat ,i executa(i sciiptul, piin
emiteiea uimtoaiei comenzi:

sh p14-1.sh

4.Ciea(i uimtoiul sciipt PBP, uenuminuu-l p14-1.php.Ca mai
inainte, mouifica(i n mou coiespunztoi iuentificatoiul ue utilizatoi
,i paiol. ncica(i sciiptul n seiveiul uumneavoasti PBP,
plasnuu-l inti-un catalog auecvat pentiu a fi accesibil uin web:

<BTNL>
<BEAB>
<TITLE>Piogiam ue navigaie in agenua cu auiese<TITLE>
<BEAB>
<B0BY>
<B2> Piogiam ue navigaie in agenua cu auiese <B2>
<F0RN NETB0B="P0ST" ACTI0N="p14-1.php">
<.php
function check_mysql()

if (mysql_eiino() > u)

uie("<BR> NySQL eiioi " . mysql_eiino() . ": " . mysql_eiioi());



$ub = mysql_connect("localhost", "php", "salut");
if (!$ub)

uie("Nu s-a putut ueschiue conexiunea cu seiveiul NySQL.");


mysql_select_ub("mailub");
check_mysql();

if(!isset($iu))

$iu=u;


if (isset($stanga))

299


$inteiogaie = "SELECT iu, nume, email FR0N agenua_auiese"
." WBERE iu < $iu 0RBER BY iu BESC";
$iezultat = mysql_queiy($inteiogaie);
check_mysql();
$ianu = mysql_fetch_iow($iezultat);
check_mysql();
if ($ianuu > u)

$iu = $ianuu;
$nume = $ianu1;
$email = $ianu2;


elseif (isset($uieapta))

$inteiogaie = "SELECT iu, nume, email FR0N agenua_auiese"
. , WBERE iu > $iu 0RBER BY iu ASC";
$iezultat = mysql_queiy($inteiogaie);
check_mysql();
$ianu = mysql_fetch_iow($iezultat);
check_mysql();
if ($ianuu > u)

$iu = $ianuu;
$nume = $ianu1;
$email = $ianu2;


elseif (isset($cauta))

$iu = u;
$inteiogaie = "SELECT iu, nume, email FR0N agenua_auiese "
. "WBERE nume LIKE '$nume' ANB iu > $iu";
$iezultat = mysql_queiy($inteiogaie);
check_mysql();
$ianu = mysql_fetch_iow($iezultat);
check_mysql();
if ($ianuu > u)

$iu = $ianuu;
$nume = $ianu1;
$email = $ianu2;


elseif (isset($auauga))

$inteiogaie = "INSERT INT0 agenua_auiese "
. "(nume, email) vAL0ES ('$nume', '$email')";
$iezultat = mysql_queiy($inteiogaie);
check_mysql();
$iu = mysql_inseit_iu();
$mesaj = "A fost auaugata iniegistiaiea (iu=$iu)";

elseif (isset($actualizeaza))


Suu

$inteiogaie = "0PBATE agenua_auiese SET nume='$nume', ,
."email='$email' WBERE iu = $iu";
$iezultat = mysql_queiy($inteiogaie);
check_mysql();
$mesaj = " A fost actualizata iniegistiaiea (iu=$iu)";

elseif (isset($steige))

$inteiogaie = "BELETE FR0N agenua_auiese WBERE iu = $iu";
$iezultat = mysql_queiy($inteiogaie);
check_mysql();
$nume = "";
$email = "";
$mesaj = " A fost steaisa iniegistiaiea (iu=$iu)";

$nume = tiim($nume);
$email = tiim($email);

.>
<BR>Nume:
<BR><INP0T TYPE="TEXT" NANE="nume"
<.php echo "vAL0E=\"$nume\"" .>>
<BR>
<BR>Auiesa ue e-mail:
<BR><INP0T TYPE="TEXT" NANE="e-mail"
<.php echo "vAL0E=\"$e-mail\"" .>>

<BR>
<BR>
<INP0T TYPE="S0BNIT" NANE="stanga" vAL0E="<">
<INP0T TYPE="S0BNIT" NANE="uieapta" vAL0E=">">
<INP0T TYPE="S0BNIT" NANE="cauta" vAL0E="Cauta">
<BR><BR>
<INP0T TYPE="S0BNIT" NANE="auauga" vAL0E="Auauga">
<INP0T TYPE="S0BNIT" NANE="actualizeaza"
vAL0E="Actualizeaza">
<INP0T TYPE="S0BNIT" NANE="steige" vAL0E="Steige">
<INP0T TYPE="BIBBEN" NANE="iu"
<.php echo "vAL0E=\"$iu\"" .>>
<.php
if (isset($mesaj))

echo "<BR><BR>$mesaj";

.>
<F0RN>
<B0BY>
<BTNL>

S. Stuuia(i sciiptul, pentiu a n(elege mouul ue func(ionaie a acestuia.
Este util s compaia(i acest sciipt cu sciiptul similai asociat
pioiectului 11-S. Sciiptul este uestul ue lung, uai o bun paite a
piogiamului este inclus nti-o instiuc(iune if-elseif caie const uin
numeioase instiuc(iuni compuse, incluse ntie paianteze acolaue
(fiecaie instiuc(iune conpus este ue sine stttoaie ,i absolut
inteligibil ca ataie). Beci, stuuia(i-le una cte una.
6. n paiticulai, obseiva(i c inteiogiile efectuate la executaiea unui
clic pe butoanele ue navigaie (< ,i >) folosesc iuentificatoiul ue inu
atiibuit automat ue NySQL. Be asemenea, iemaica(i c iezultatul
inteiogiii este soitat, astfel nct inuul coiespunztoi -
Su1

inuul asociat intiiii uin agenua cu auiese plasat imeuiat nainte
sau uup intiaiea cuient - este piimul inu uin setul ue iezultate.
7. 0iienta(i un biowsei Web spie auiesa 0RL asociat sciiptului.
Feieastia biowseiului tiebuie s fie similai celei piezentate
altuiat:
<ecian>
Auuiess Book Biowsei
<cmpuii>
Name: AlNall
Email auuiess:albiowncow.com
<cmpuii>
<butoane>
<
>
Seaich
Auu
0puate
Belete
<butoane>
<ecian>

8. veiifica(i mouul ue opeiaie a sciiptului. Acesta tiebuie s peimit
ueplasaiea nainte (>) iespectiv napoi (<) n inteiioiul agenuei cu
auiese. Tiebuie s pute(i auuga, actualiza, iespectiv ,teige intiiile
uin agenua cu auiese. Be asemenea, sciiptul tiebuie s peimit
cutaiea piimei intiii uin agenua cu auiese caie coiespunue unui
,ii ue cutaie specificat.

<Test ue evaluaie>
1. Sciie(i un piogiam PBP caie se conecteaz la un seivei NySQL
plasat la gazua numit ub, folosinu iuentificatoiul ue utilizatoi aumin
,i paiola seciet.
2. Sciie(i un piogiam PBP caie selecteaz baza ue uate numit
inventai n veueiea unui acces ulteiioi.
S. Sciie(i un piogiam PBP caie execut inteiogaiea stocat n
vaiiabila ,ii $sql ,i stocheaz iezultatul n vaiiabila $iset.
4. Sciie(i un piogiam PBP caie afi,eaz numiul eioiii asociate celei
mai iecente inteiogii NySQL.
S. Sciie(i un piogiam PBP caie afi,eaz valoaiea piimei coloane a
inuului uimtoi al setului ue iezultate stocat n vaiiabila $iset.
6. Sciie(i o bucl PBP caie paicuige piin iteia(ie inuuiile unui set ue
iezultate, plasnu fiecaie inu n vaiiabila $ianu. Bucla va fi
configuiat astfel nct s aib un coip fi con(inut. <Test ue
evaluaie>


Su2

<titlu>Nouulul 1S:
0tilizaiea claseloi ,i a obiecteloi<titlu>

<titlu>Scopuii<titlu>
- nv(a(i sensul ,i utilitatea conceptului ue oiientaie spie obiecte
- nv(a(i s uefini(i si s ciea(i instan(e ale claseloi
- nv(a(i s uefini(i si s utiliza(i piopiiet(ile si metouele
- nv(a(i s lucia(i cu tablouii ue obiecte
0 aboiuaie impoitant a activit(ii ue piogiamaie, caie a uevenit
populai n anii '9u, este oiientaiea spie obiecte. 0nele limbaje ue
piogiamaie, piecum }ava, sunt n mou intiinsec oiientate spie
obiecte. Be fapt, nu pute(i sciie un piogiam }ava fi a n(elege ,i fi
a utiliza clasele, obiectele, piopiiet(ile ,i metouele. Piin contiast,
PBP folose,te o aboiuaie mai pu(in uogmatic. PBP v peimite s
ciea(i ,i s folosi(i clasele, obiectele, iespectiv piopiiet(ile ,i
metouele asociate acestoia. Be asemenea, PBP v las toat
libeitatea ue a ciea piogiame caie nu sunt oiientate spie obiecte,
uac piefeia(i.

<titlu>0 piezentaie intiouuctiv a conceptului ue oiientaie spie
obiecte<titlu>
0iientaiea spie obiecte a fost cieat ca o moualitate ue oiganizaie a
unoi piogiame ue simulaie complexe. Cu toate acestea, piogiesul
inteife(eloi giafice cu utilizatoiul uin peiioaua aniloi '9u a uus la
uescopeiiiea c metouele oiientate spie obiecte faciliteaz sciieiea
piogiameloi inteiactive.
Piincipiul ue baz al oiientiii spie obiecte l iepiezint
ncapsulaiea. 0n piogiam caie nu este oiientat spie obiecte este
oiganizat ca un set ue func(ii ,i un set ue vaiiabile globale utilizate ue
acele func(ii. 0iice func(ie poate opeia folosinu oiice vaiiabil
global, ueci stiuctuia piogiamului este oaiecum haotic. Piin
contiast, un piogiam oiientat spie obiecte combin func(ii ,i
vaiiabile conexe nti-o unitate, cunoscut sub numele ue clas. 0n
piogiam oiientat spie obiecte caiacteiistic este alctuit uin mai
multe clase.
ncapsulaiea asiguiat ue clase este un concept similai peie(iloi ue
compaitimentaie ,i poi(iloi etan,e folosite n constiuc(iile navale,
caie mpait nava n unit(i uistincte. nti-un piogiam oiientat spie
obiecte, func(iile asociate cu o clas nu pot ob(ine acces n mou
aibitiai la vaiiabile asociate unei alte clase. Piogiamele oiientate
spie obiecte pot fi mai u,oi ue n(eles uect piogiamele caie nu sunt
oiientat spie obiecte, ueoaiece inteiac(iunile ntie clasele unui
piogiam oiientat spie obiecte

SuS

sunt ielativ ieuuse ca numi. Ca ataie, un piogiamatoi poate stuuia
,i n(elege un piogiam oiientat spie obiecte aboiunu fiecaie clas n
paite, nu toate clasele ueouat.
Sec(iunea uimtoaie piezint conceptele oiientiii spie obiecte nti-
un mou geneial, fi o iefeiiie conciet la moualitatea n caie PBP
implementeaz oiientaiea spie obiecte. 0lteiioi pe paicuisul acestui
mouul, ve(i nv(a s folosi(i, caiacteiisticile oiientate spie obiecte
ale limbajului PBP.

<titlu>Clase<titlu>
Bac uoii(i, pute(i asimila o clas cu un tip uefinit ue utilizatoi.
0iientaiea spie obiecte v peimite s extinue(i tipuiile PBP stanuaiu
- ntieg, cu viigul mobil ,i ,ii - pentiu a incluue tipuii cieate ue
uumneavoasti, piecum ContBancai, Client, Scianciob sau SitWeb.
Cnu uefini(i o clas, i uesciie(i caiacteiisticile. Acestea incluu:
- Piopiiet(i - vaiiabile caie uesciiu membiii clasei
- Netoue - opeia(ii pe caie membiii clasei le pot efectua
Be exemplu, s piesupunem c uefini(i o clas caie iepiezint un
cont bancai. Clasa poate incluue piopiiet(i piecum uimtoaiele:
- Numiul contului
- Posesoiul contului
- Bata nfiin(iii contului
- Balan(a cuient
Piobabil c voi mai fi auugate ,i alte piopiiet(i, piecum
infoima(iile ue contact afeiente posesoiului contului.
Netouele unei clase sunt similaie unoi func(ii caie ob(in acces la
valoiile ,i piopiiet(ile unei clase, iespectiv le mouific. Beseoii,
metouele sunt legate ue evenimente ,i sunt iesponsabile cu
mouificaiea valoiiloi piopiiet(iloi astfel nct s ieflecte apaii(ia
unui eveniment. Clasa ContBancai poate incluue metoue piecum:
- Cieaiea unui uepozit
- Efectuaiea unei ietiageii
- 0b(ineiea balan(ei cuiente
- nchiueiea contului
Be asemenea, o clas poate incluue o metou special, numit
metou constiuctoi sau pui ,i simplu constiuctoi. Constiuctoiul unei
clase este folosit pentiu a ciea instan(e sau membii ai clasei, caie
sunt cunoscu(i sub numele ue obiecte. Constiuctoiul clasei
ContBancai va ciea un obiect ContBancai; aceast opeia(ie se va
executa la fiecaie ueschiueie a unui cont nou.

Su4

<Sugestie >
Bifeien(a ntie conceptul ue clas ,i cel ue obiect este impoitant.
Bac o clas poate fi asimilat unui tip ue uate, un obiect poate fi
echivalat cu o vaiiabil sau cu o valoaie avnu un anumit tip ue uate.
0 clas mai poate fi asemnat cu un ,ablon caie este utilizat pentiu
a specifica ,i pentiu a ciea entit(i cunoscute sub numele ue obiecte.
Piactic, o clas este o ,fabiic" ue obiecte, caie piouuce obiecte cu
aceea,i stiuctui, auic obiecte avnu piopiiet(i ,i metoue iuentice.
<Sugestie >

<titlu>No,teniie<titlu>
Puteiea conceptului ue oiientaie spie obiecte se bazeaz n maie
msui pe o caiacteiistic numit mo,teniie. Aceasta v peimite s
specifica(i o clas folosinu o alt clas ca punct ue plecaie. Clasa
oiiginal se nume,te clas ue baz sau clas piinte; clasa specificat
mai iecent se nume,te clas ueiivat sau clas copil.
Be exemplu, clasa ContBancai uesciis n sec(iunea anteiioai se
poate folosi pentiu specificaiea a uou noi clase: ContCuient ,i
ContEconomii. 0 clas copil mo,tene,te piopiiet(ile ,i metouele
piintelui su. n consecin(, att clasa ContCuient, ct ,i clasa
ContEconomii voi avea piopiiet(i caie iepiezint numiul contului,
posesoiul contului, uata nfiin(iii contului ,i balan(a cuient. Be
asemenea, cele uou clase voi avea metoue capabile ue a niegistia
uepuneiile ,i ietiageiile, piecum ,i ue a nchiue contul.
Piincipalul avantaj al mo,teniiii l constituie economia. Pute(i alege
s uefini(i clasa ContCuient fi a face iefeiiie la clasa ContBancai.
Piin uefiniiea clasei ContCuient uiept copil al clasei ContBancai se
iealizeaz, ns, o economie ue efoit, n cazul n caie ContBancai ai fi
fost o clas ielativ simpl, economiile nu ai fi fost impoitante. Bai, n
piincipiu, o clas piinte poate con(ine zeci sau sute ue piopiietaii ,i
metoue, pe caie o clas copil le poate mo,teni apioape fi efoit.
Nai mult, mo,teniiea poate facilita ntie(ineiea unui piogiam. S
piesupunem c o lege nou impune bnciloi s asocieze fieciui cont
un numi special. n cazul n caie clasele ContCuient ,i ContEconomii
ai fi fost uefinite poininu ue la zeio, atunci ai fi fost necesai
ievizuiiea ambeloi clase. Bai, n cazul n caie clasele ai fi fost uefinite
uiept clase copil, ai fi fost necesai numai ievizuiiea clasei
ContBancai; clasele copil ale acesteia voi mo,teni mouificiile auuse.
0n alt poten(ial avantaj al mo,teniiii const n ieutilizaiea liniiloi ue
piogiam. No,teniiea peimite utilizaiea unei clase chiai uac aceasta
este apioape cea necesai pentiu un scop uat, fi a fi exact clasa
auecvat scopului iespectiv. A,a cum se explica ulteiioi n acest
mouul, metouele inauecvate ale clasei pot fi ieuefinite sau anulate ue
metouele uinti-o clas copil. Aceast posibilitate ue auaptaie a unei
clase astfel nct aceasta s coiespunu unei uiveisit(i ue contexte ,i
aplica(ii peimite ieutilizaiea unei clase mai fiecvent uect ai fi fost
posibil n caz contiai.

SuS

<Sfatul specialistului>
ntiebaie: A(i explicat no(iunea ue oiientaie spie obiecte, uat eu am
auzit ,i ue expiesia bazat pe obiecte. Ce nseamn aceasta.
Rspuns: 0n sistem sau limbaj bazat pe obiecte este unul caie
fuinizeaz un set ue uate pieuefinite. Ave(i toat libeitatea ue a ciea
instan(e (obiecte) ale acestoi uate. Cu toate acestea, nu ave(i
peimisiunea ue a specifica uate noi. 0nii piouuctoii ,i uesciiu
limbajele sau sistemele ca fiinu oiientate spie obiecte, chiai uac
acestea nu sunt uect bazate pe obiecte. Tiebuie s investiga(i cu
aten(ie afiima(iile acestoia piivinu oiientaiea spie obiecte, pentiu a
v asiguia c este uisponibil ntieaga gam a facilit(iloi fuinizate
ue acest concept. <Sfatul specialistului>

<Test ,la minut">
- Piincipiul oiientiii spie obiecte caie uiviue un piogiam n clase la
caie sunt asociate piopiiet(i ,i metoue coielate se nume,te ______.
- 0n membiu sau instan( al(a) unei uate se nume,te ______.
- Facilitatea caie peimite unei clase s ue(in piopiiet(ile ,i
metouele unei alte uate se nume,te ______.
- 0 clas folosit pentiu a specifica o clas nou se
nume,te______.<Test ,la minut">

<titlu>Befiniiea ,i instan(ieiea unei clase<titlu>
Pentiu a veuea caie este moualitatea ue uefiniie a unei uate n PBP,
s consiueim o clas simpl, caie iepiezint un cont bancai. Iat
instiuc(iunile PBP folosite pentiu uefiniiea acestei uate:

class ContBancai

vai $balanta = u;

function cieeaza_ueposit($suma)

$this->balanta = this->balanta + suma;


function obtine_balanta()

ietuin $this->balanta;



<not>
Rspunsuii la test:
- ncapsulaie
- 0biect
- No,teniie
- Clas piinte sau clas ue baz<not>

Su6

Clasa aie o singui piopiietate, ,i anume $balanta. Be asemenea,
clasa mai aie uou metoue, n spe( cieeaza_uepozit() ,i
obtine_balanta().
Numele clasei este specificat ue ctie instiuc(iunea class. Befini(ia
clasei este uelimitat piin uou paianteze acolaue. Piopiietatea
$balanta este uefinit ue o instiuc(iune vai. n exteiioiul claseloi
PBP, instiuc(iunea vai este iaieoii folosit, ueoaiece PBP uefine,te
n mou automat o vaiiabil n momentul atiibuiiii unei valoii. Cu
toate acestea, piopiiet(ile claseloi tiebuie uefinite folosinu
instiuc(iune vai. Clasa ContBancai atiibuie piopiiet(ii $balanta
valoaiea ini(ial zeio. Nu este necesai atiibuiiea unei valoii ini(iale
unei piopiiet(i, uai astfel piogiamele uevin mai simple ,i mai u,oi
ue citit.
0bseiva(i c metouele sunt uefinite folosinu cuvntul cheie function,
ceea ce este noimal, ueoaiece metouele, ca ,i func(iile, execut
ac(iuni. Bifeien(a uintie metoue ,i func(ii este legat ue amplasaiea
acestoia; metouele sunt uefinite n inteiioiul claseloi, n timp ce
func(iile sunt uefinite n exteiioiul acestoia.
Cel mai inteiesant aspect al metoueloi const n moualitatea bizai
n caie acestea ob(in accesul la $nume. Sintaxa $this-> aie o
semnifica(ie similai cu aceea a pionumelui posesiv uin limba
iomn, peisoana I singulai (meu). Cnu o metou face o iefeiiie ue
foima $this-> balan(a, se consiuei c iefeiin(a face tiimiteie la
piopiietatea $balanta a obiectului cuient. PBP stabile,te valoaiea
vaiiabilei speciale $this la fiecaie invocaie a unei metoue, a,a cum
ve(i veuea n sub-sec(iunea uimtoaie. Efectul este similai cu acela al
expiesiei ,balan(a mea".

<titlu>Instan(ieiea unui obiect<titlu>
Pentiu a ueteimina mouul ue func(ionaie a clasei ContBancai, s
examinm cteva linii ue piogiam caie instantiaz ,i folosesc un
obiect ContBancai:

$cont = new ContBancai();
$cont->cieeaza_uepozit(1uu);
echo ,Balanta este , . $cont->obtine_balanta();

Piima instiuc(iune instan(iaz un obiect ContBancai folosinu
opeiatoiul new. Instiuc(iunea stocheaz o iefeiin( la obiect n
vaiiabila $cont, caie va fi utilizat ulteiioi pentiu a ob(ine acces la
metouele obiectului.
Cea ue-a uoua instiuc(iune invoc metoua cieeaza_uepozit() a
obiectului, fuiniznu o valoaie a aigumentului egal cu 1uu. Bac
ieveni(i la uefini(ia clasei, ve(i veuea c efectul acestei metoue const
uin inciementaiea valoiii piopiiet(ii $balanta opeia(ie efectuat,
eviuent, ue o metou numit cieeaza_uepozit().
Remaica(i c a uoua instiuc(iune folose,te vaiiabila $cont, caie face
iefeiiie la obiectul ContBancai cieat ue piima instiuc(iune.
0peiatoiul -> aiat c PBP tiebuie s invoce metoua
cieeaza_uepozit() asupia obiectului uesemnat piin vaiiabila $cont. n
timpul invociii metouei, obiectul cuient este obiectul uesemnat piin
$cont.

Su7

Beci, n timpul invociii metouei, vaiiabila special $this face iefeiiie
la acela,i obiect ca ,i vaiiabila $cont.
Cea ue-a tieia instiuc(iune invoc metoua obtine_balanta(), caie
ietuineaz valoaiea piopiiet(ii $balanta. Instiuc(iunea afi,eaz
valoaiea ietuinat piin inteimeuiul unei instiuc(iuni echo.
0bseiva(i c metoua obtine_balanta() ob(ine accesul la valoaiea
piopiiet(ii obiectului, uai nu mouific valoaiea acesteia. Asemenea
metoue sunt fiecvent folosite ,i se numesc metoue accesoi sau
metoue ue ob(ineie. Netoue piecum cieeaza_uepozit(), caie mouific
valoaiea unei piopiiet(i, se numesc metoue mutatoi sau metoue ue
configuiaie.

<titlu>Befiniiea unei metoue constiuctoi<titlu>
Bin clasa ContBancai lipsesc o mul(ime ue piopiiet(i esen(iale pe
caie tiebuie s le con(in chiai ,i clasa cea mai simpl, ue exemplu
numele posesoiului contului. Totu,i, omisiunea a peimis uefiniiea
unei clase fi constiuctoi, ueoaiece nu a fost necesai nici o
infoima(ie pentiu a ciea o instan( a clasei. Iat o veisiune ievizuit a
clasei, caie incluue o metou constiuctoi:

class ContBancai2

vai $cont_iu;
vai $nume_posesoi;
vai $balanta =u;

function ContBancai2($iu, $nume, $suma)

$this-> cont_iu = $iu;
$this-> nume_posesoi = $nume;
$this-> balanta = $suma;


function cieeaza_ueposit($suma)

$this->balanta = $this->balanta + $suma;
ietuin $this->balanta;



Constiuctoiul este, a,a cum se obseiv uin exemplu, o func(ie cu
acela,i nume ca al clasei. Bifeien(a este c PBP apeleaz automat
aceast func(ie la invocaiea opeiatoiului new.
Iat cum s-ai putea folosi clasa ievizuit:

$cont = new ContBancai2(1uu1, ,Fane Filantiopu", 1uuu);
echo ,Contul $cont->cont_iu apaitine lui $cont->nume_posesoi";
$cont->cieeaza_uepozit(1uu);
echo ,<BR>Balanta este , . $cont->balanta;

Su8

Aigumentele constiuctoiului sunt folosite pentiu a stabili valoiile
ini(iale ale piopiiet(iloi noului obiect.
Remaica(i mouul n caie a uoua ,i a patia instiuc(iune ob(in accesul
la piopiiet(ile obiectului n mou uiiect, nu piin inteimeuiul
metoueloi accesoi, a,a cum se pioceueaz n exemplul cu clasa
ContBancai. Spie ueosebiie ue majoiitatea celoilaltoi limbaje
oiientate spie obiecte, PBP nu mpieuic acest tip ue acces; ba chiai
peimite mouificaiea uiiect a valoiiloi piopiiet(iloi. S examinm
uimtoiul exemplu:

$cont->balanta = 1uuu;
echo ,<BR>Balanta este , . $cont>balanta;

Piima instiuc(iune mouific valoaiea piopiietaiii $balanta n mou
uiiect, nu piin invocaiea metouei cieeaza_uepozit(). Piogiamele caie
ob(in accesul la piopiiet(ile obiecteloi ,i le mouific n mou uiiect
uistiug ncapsulaiea obiecteloi ,i implicit submineaz poten(ialele
avantaje ale oiientiii spie obiecte.
<Sfatul specialistului>
ntiebaie: Bac uistiugeiea ncapsuliii nu este iecomanuat, ue ce
PBP peimite piogiamatoiiloi aceast opeia(ie.
Rspuns: Ini(ial, PBP nu a fost conceput ca un limbaj oiientat spie
obiecte. Caiacteiisticile oiientate spie obiecte au fost auugate
ulteiioi. Beoaiece uezvoltaiea limbajului PBP continu, este posibil
ca, n cele uin uim, s incluu mecanisme caie s impun
iespectaiea ncapsuliii. Lipsa unoi asemenea mecanisme nu
constituie un hanuicap majoi atunci cnu un inuiviu sau o mic
echip colaboieaz pentiu implementaiea unui sistem ue mici
uimensiuni, uai asemenea mecanisme sunt esen(iale atunci cnu
echipe ue uezvoltatoii aboiueaz sisteme ue anveigui, n caz
contiai, numiul uefecteloi softwaie iisc s uevin inacceptabil ue
maie. <Sfatul specialistului>

<Test ,la minut">
- Caie este cuvntul cheie folosit la uefiniiea piopiiet(ii unui obiect
n PBP.
- Caie este cuvntul cheie folosit la uefiniiea metouei unui obiect n
PBP.
- Cum este posibil iuentificaiea constiuctoiului unei clase numite
Test. <Test ,la minut">
<Not>
Rspunsuii la test:
- vai
- function
- Este o func(ie numit Test<Not>

Su9

<titlu>0tilizaiea mo,teniiii<titlu>
A,a cum s-a explicat anteiioi, o bun paite uin avantajele utiliziii
conceptului ue oiientaie spie obiecte este asociat cu facilitatea
cunoscut sub numele ue mo,teniie. Iat un exemplu caie piezint
mouul ue ueiivaie a unei clase uin clasa ContBancaia, uefinit
anteiioi:

incluue "contbancai2.php";
class ContCuient extenus ContBancai2

vai $cec_ni;

function ContCuient($iu, $nume, $suma, $cecni)

$this-> cont_iu = $iu;
$this-> nume_posesoi = $nume;
$this-> balanta = $suma;
$this-> cec_ni = $cecni;


function incasaie_cec($cecni, $suma)

$this->balanta = $this->balanta - $suma;


function obtine_balanta()

ietuin $this->balanta;



Exemplul folose,te o instiuc(iune incluue pentiu a ob(ine accesul la
uefini(ia clasei ContBancai2; totu,i, este ue asemenea posibil ca
uefini(iile clasei piinte ,i ale clasei copil s fie plasate n acela,i
fi,iei. Cuvntul cheie extenus apaie n instiuc(iunea class ,i stabile,te
iuentitatea clasei ContCuient uiept copil al clasei ContBancai2. Clasa
copil uefine,te o piopiietate, $cec_ni, caie con(ine numiul filei
ini(iale a uimtoiului cainet ue cecuii caie va fi emis; ue asemenea,
uefine,te un constiuctoi ,i uou metoue, n spe( incasaie_cec() ,i
obtine_balanta(). Cel mai impoitant este c aceast clas mai incluue
piopiiet(ile $cont_iu, $nume_posesoi ,i $balanta, piecum ,i o
metou cieeaza_uepozit(), caie sunt uefinite n clasa piinte.
Constiuctoiul atiibuie valoii piopiiet(iloi mo,tenite, uai ,i
piopiiet(ii uefinite n clasa copil.
Iat instiuc(iunile caie cieeaz un obiect ContCuient ,i caie invoc
numeioase metoue asupia acestuia:

$cont = new ContCuient(1u1, ,Nisu Nizeiie", 1uu, 11u1);
$cont->incasaie_cec(1uu1, 2Su);
$cont->cieeaza_uepozit(SSu);
echo ,Balanta cuienta: , . $cont->obtine_balanta

S1u

0bseiva(i c metoua cieeaza_uepozit(), caie este uefinit n clasa
piinte, este invocat ca ,i cum ai fi fost uefinit n clasa copil;
metouele mo,tenite nu necesit un tiatament ue natui special.

<titlu>Reuefiniiea metoueloi<titlu>
0neoii, o clas existent incluue o metou caie nu este auecvat
pentiu o clas caie n alte conui(ii poate fi ueiivat pentiu a ob(ine o
clas copil, n loc ue a uefini noua clas fi iefeiiie la clasa existent,
pute(i ieuefini metoua inauecvat. Be exemplu, s consiueim
uimtoaiea clas:

class ContBancaiS

vai $cont_iu;
vai $nume_posesoi;
vai $balanta =u;

function ContBancaiS($iu, $nume, $suma)

$this-> cont_iu = $iu;
$this-> nume_posesoi = $nume;
$this-> balanta = $suma;


function inchiue_cont()

$suma = $this->balanta;
$this->balanta = u;
ietuin $suma



S piesupunem c uoii(i s ueiiva(i o clas caie iepiezint un nou tip
ue cont bancai puittoi ue uobnu. La nchiueiea contului,
piogiamul tiebuie s calculeze uobnua acumulat ue la ultima
ueclaia(ie lunai ,i s ietuineze clientului att uobnua, ct ,i
balan(a cuient.
Iat cum pute(i pioceua:

class ContEconomii extenus ContBancaiS

function inchiue_cont($zile, $iata)

$suma = $this->balanta * $iata * ($zile S6u);
$suma = $suma + $this->balanta;
$this->balanta = u;
ietuin $suma;



Remaica(i c n cauiul clasei copil este uefinit o metou numit
inchiue_cont(). 0 metou cu acela,i nume exist ,i n clasa piinte,
ue,i aie o alt uefini(ie.

S11

S piesupunem c a(i cieat un obiect ContEconomii ,i c invoca(i
metoua inchiue_cont() astfel:

$cont = new ContEconomii(1u1, ,ozo gaicitul", 1uuu);
echo ,ozo piimeste , . $cont->inchiue_cont(18, u.uS);


Este invocat metoua uefinit ue clasa copil, nu cea uefinit n clasa
piinte. Se spune c metoua uefinit n clasa piinte a fost anulat
(ieuefinit) ue ctie metoua uefinit n clasa copil.

<titlu>Invocaiea unei metoue ieuefinite<titlu>
Bac nceica(i s invoca(i o metou ieuefinit, piobabil c ve(i ob(ine
o eioaie. Be exemplu, s piesupunem c a(i ueteiminat PBP s
execute uimtoaiele instiuc(iuni:

$cont = new ContEconomii(1u1, ,ozo gaicitul", 1uuu);
echo ,ozo piimeste , . $cont->inchiue_cont();

Netoua nchiue_cont() este ieuefinit n cauiul clasei ContEconomii
ue ctie o nou metou, caie pieia uou aigumente. Aceast
nceicaie ue a invoca metoua ieuefinit aie ca iezultat mesajele ue
eioaie:

Waining: Nissing aigument 1 foi inchiue_cont()
Waining: Nissing aigument 2 foi inchiue_cont()
(Aveitisment: aigumentele 1 si 2 pentiu functia inchiue_cont()
lipsesc.)

Bac, n schimb, a(i fi nceicat s invoca(i metoua ieuefinit uin
inteiioiul clasei copil, a(i fi ob(inut un iezultat u,oi uifeiit, uai la fel
ue neuoiit. Be exemplu, s piesupunem c iesciie(i clasa copil astfel:

class ContEconomii extenus ContBancaiS

function inchiue_cont($zile, $iata)

$suma = $this->inchiue_cont ();
$suma = $suma + $suma * $iata * ($zile S6u);
ietuin $suma;



Piin executaiea acestui sciipt se ob(ine mesajul ue eioaie

Waining: Nissing aigument 1 foi inchiue_cont()

Nai iu este c mesajul ue eioaie se iepet ue mai multe oii. Netoua
inchiue_cont() se auto-apeleaz n mou iepetat, pn cnu seiveiul
PBP ajunge la captul ibuiiloi ,i anuleaz ceieiea.
Cu toate acestea, este posibil invocaiea metouei ieuefinite. Nu este
nevoie uect ue un mic aitificiu sintactic:

S12

class ContEconomii extenus ContBancaiS

function inchiue_cont($zile, $iata)

$suma = ContBancaiS::inchiue_cont ();
$suma = $suma + $suma * $iata * ($zile S6u);
ietuin $suma;



Piin specificaiea numelui clasei, uimat ue o peieche ue caiacteie
uou puncte, pute(i inuica piogiamului PBP s invoce metoua
uefinit n clasa piinte, nu metoua uefinit n clasa copil.

<Sfatul specialistului >
ntiebaie: S piesupunem c se folose,te clasa A pentiu ueiivaiea
unei noi clase B. Apoi, clasa B este folosit pentiu a ueiiva o alt clas
C, o clas nepot a clasei A. Pot metouele uin C s ieuefineasc
metouele uin A ,i B. Este posibil ca metouele ieuefinite uin A s fie
apelate n B ,i C.
Rspuns: Ba. Rela(ia uintie o clas bunic ,i o clas nepot este similai
cu aceea uintie o clas piinte ,i o clas copil. Clasa copil poate
ieuefini metouele clasei sale piinte, iespectiv bunic. Be asemenea,
poate face iefeiiie la metouele ieuefinite piin piefixaiea numelui
metouei ieuefinite cu numele clasei n caie aceasta a fost ini(ial
uefinit, uimat ue o peieche ue caiacteie uou puncte.
<Sfatul specialistului >

<Test ,la minut">
- Cum se nume,te o metou uefinit att nti-o clas piinte, ct ,i
nti-o clas copil.
- S piesupunem c o clas Piinte este folosit pentiu a ueiiva clasa
Copil, piecum ,i c ambele clase uefinesc metoua test(). n cauiul
clasei copil, cum pute(i invoca metoua test() uefinit n clasa piinte.
<Test ,la minut">

<titlu>Tablouii cu obiecte<titlu>
n cauiul mouuleloi anteiioaie, s-a explicat c tablouiile iepiezint o
moualitate convenabil pentiu luciul cu mai multe valoii. valoiile
stocate n tablouii pot face iefeiiie la obiecte exact a,a cum
pioceueaz n cazul ntiegiloi, al valoiiloi cu viigul mobil sau al
,iiuiiloi. 0n tablou caie face iefeiiie la obiecte se nume,te tablou cu
obiecte.
<not>
Rspunsuii la test:
- Reuefinit
- Piinte::test()<not>

S1S

Pentiu a uemonstia mouul ue utilizaie a unui tablou cu obiecte, s
examinm uimtoaiea clas ,i cele uou clase copil ale acesteia:

class ContBancai

vai $cont_iu;
vai $nume_posesoi;
vai $balanta;
vai $tip_cont;

function ContBancai ($iu, $nume, $suma, $tip)

$this-> cont_iu = $iu;
$this-> nume_posesoi = $nume;
$this-> balanta = $suma;
$this-> tip_cont = $tip;


function uump()

ietuin cont . $this-> cont_iu
. posesoi . $this-> nume_posesoi
. balanta" . $this-> balanta
. tip . $this-> tip_cont ;



class ContCuient extenus ContBancai

function ContCuient ($iu, $nume, $suma)

ContBancai::ContBancai($iu, $nume, $suma, ,cuient");



class ContEconomii extenus ContBancai

function ContEconomii ($iu, $nume, $suma)

ContBancai::ContBancai($iu, $nume, $suma, ,economii");



Remaica(i faptul c func(iile constiuctoi ale claseloi copil fac iefeiiie
la constiuctoiul clasei piinte, ieutiliznu n mou eficient
caiacteiistica fuinizat ue clasa piinte.
Acum, s piesupunem c am cieat instan(e ale claseloi copil ,i c
stocm iefeiin(ele la aceste instan(e nti-un tablou:

$acctu = new ContCuient(1u1, P. Pene", 1uuu);
$acct1 = new ContEconomii(1u2, C. Apa", 12uu);

n exemplu sunt men(ionate numai uou instan(e, uai nti-o utilizaie
efectiv a pioceueului cu tabloul ue obiecte, nti-un tablou pot fi
stocate sute sau mii ue

S14

asemenea iefeiin(e. 0 uat iefeiin(ele stocate n tablou, pot fi
pieluciate n mai multe mouuii. Be exemplu, s lum uimtoiul
piogiam:

foieach ($cont as $contul)

echo "<BR> . $contul->uump() ;


Bin moment ce iefeiin(ele la obiecte incluse n tablou se iefei
ntotueauna la un obiect la caie este asociat o metou uump(), este o
joac ue copil s se paicuig tabloul piin iteia(ie ,i s se invoce
metoua uump(), caie afi,eaz piopiiet(ile unui obiect ContBancai
sau ale unui obiect uinti-una uin clasele sale copil, piecum
ContBancai sau ContEconomii.

<Sfatul specialistului>
ntiebaie: Cnu folosesc metoua cu tabloul ue obiecte, piimesc
meieu mesajul ue eioaie ,Call to unuefineu function" (apel la func(ie
neuefinit). Be ce se ntmpl aceasta.
Rspuns: Nesajul aiat c piogiamul uumneavoasti a nceicat s
invoce o metou (auic o func(ie) asupia unui obiect a ciui clas nu
uefine,te sau mo,tene,te metoua.
Cnu stoca(i nti-un tablou iefeiin(e la obiecte si apoi invoca(i o
metou asupia iefeiin(eloi, este ue uatoiia uumneavoasti s v
asiguia(i ca metoua este uefinit sau mo,tenit ue fiecaie clas
conex. Cea mai simpl moualitate ue a pioceua astfel este ue a
ueiiva fiecaie clas uinti-o singui clas piinte, caie uefine,te
fiecaie metou pe caie o invoca(i. Astfel, piin mo,teniie sunte(i
asiguiat c metoua este uisponibil. <Sfatul specialistului>

<Test ,la minut">
- n pioceueul cu tabloul ue obiecte, un tablou stocheaz ____ la
obiecte.
- Fiecaie obiect stocat tiebuie s fie membiu al unei clase caie ___ sau
_____ fiecaie metou invocat. <Test ,la minut">

<titlu>Pioiect 1S-1: Luciul cu obiecte<titlu>
n cauiul acestui pioiect, ve(i folosi un obiect pentiu ncapsulaiea
infoima(iiloi uespie stiluiile ue text folosite n paginile unui sit Web.
ve(i veuea moualitatea ue pstiaie a unui aspect consecvent n toate
paginile sitului Web, piecum si posibilitatea uea ievizui aspectul piin
mouificaiea unui

<not>
Rspunsuii la test:
- Refeiin(e
- Befine,te, mo,tene,te<not>


S1S

singui fi,iei, nu a fieciei pagini. Pute(i efectua opeia(ii similaie
folosinu foile ue stil BTNL. Totu,i, supoitul pentiu foile ue stil nu
este nc fiabil si consecvent, ueci este posibil ca aboiuaiea
piezentat n acest pioiect s coiespunu nti-un mou mai auecvat
necesit(iloi uumneavoasti.

<titlu>Scopuiile pioiectului<titlu>
- Piezentaiea mouului ue cieaie ,i utilizaie a obiecteloi nti-un
piogiam mic, uai complet
- Piezentaiea mouului ue ncapsulaie a infoima(iiloi uespie stil n
cauiul unui obiect PBP

<titlu>Pas cu pas<titlu>
1 . Ciea(i uimtoiul sciipt PBP, uenumi(i-l stupage.inc ,i ncica(i-l n
seiveiul uumneavoasti PBP:

<.php
class StuStilPagina

vai $liteia_antet = "Tahoma";
vai $maiime_antet = "7";
vai $liteia_coip = "Times New Roman";
vai $maiime_coip = "S";
vai $liteia_subsol = "Le t t e i uothic";
vai $maiime_subsol = "2";

function set_antet($liteia, Smaiime)

$this->liteia_antet = $liteia;
$this->maiime_antet = $maiime;


function set_coip($liteia, $maiime)

$this->liteia_coip = $liteia;
$this->maiime_coip = $maiime;


function set_subsol($liteia, $maiime)

$this->liteia_subsol = $liteia;
$this->maiime_subsol = $maiime;


function antet_text($text)

echo '<tip liteia=" ' . $this->liteia_antet . ' " maiime=" '
. $this->maiime_antet . ' ">';
echo $text;
echo "<font>";


function subsol_text ($text)

echo '<tip liteia=" ' . $this->liteia_subsol . ' " maiime=" '
. $this->inaiime_subsol . ' ">';
echo $text;
echo "<font>";

S16


function coip_text($text)

echo '<tip liteia=" ' . $this->liteia_coip . ' " maiime=" '
. $this->maiime_coip . ' ">';
echo $text;
echo "<font>";


.>

2. Stuuia(i sciiptul, obseivnu piopiiet(ile caie uefinesc stiluiile
BTNL pentiu antetul, coipul ,i subsolul unei pagini Web. Remaica(i
metouele mutatoi, caie v peimit s ievizui(i stiluiile. 0bseiva(i ,i
metouele accesoi, caie geneieaz linii ue piogiam BTNL caie
specific atiibutele stilului antetului, al coipului sau al subsolului.
S. Ciea(i uimtoiul sciipt, uenumi(i-l stupage.php ,i ncica(i-l n
catalogul caie con(ine sciiptul stupage.inc:

<BTNL>
<BEAB>
<TITLE>stupage.php<TITLE>
<BEAB>
<B0BY>
<.php
iequiie ,stupage.inc";
$stil = new StuStilPagina();
$stil->antet_text(,<BR>Acesta este un antet");
$stil->set_antet(,Tahoma", 6);
$stil->antet_text(,<BR>Acesta este un antet mouificat");
$stil->coip_text(,<BR>Acesta este un coip");
$stil->subsol_text(,<BR>Acesta este un subsol");
.>
<B0BY>
<BTNL>

4. Stuuia(i sciiptul, caie este o pagin Web mouel ce folose,te clasa
uefinit n sciiptul stupage.inc, accesibil piin inteimeuiul
instiuc(iunii iequiie. 0bseiva(i mouul ue instan(ieie al obiectului
StuStilPagina, piecum ,i mouul n caie sunt utilizate metouele sale
pentiu a geneia textul afeient antetului, coipului ,i subsolului.
S. 0iienta(i biowseiul uumneavoasti Web spie auiesa 0RL asociat
sciiptului stupage.php. Rezultatul tiebuie s fie asemntoi celui
piezentat n figuia altuiat:
<ecian>
this is a heauei
this is a mouifieu heauei
this is a bouy
this is a footei
<ecian>

6. n cazul n caie calculatoiul uumneavoasti nu este configuiat
astfel nct s accepte coipuiile ue litei specificate n sciipt, aspectul
uateloi uumneavoasti ue ie,iie poate vaiia, n acest caz, ievizui(i
sciiptul astfel nct s fac iefeiiie la coipuii ue litei uisponibile.
Pute(i chiai specifica o list ue coipuii ue litei, unue fiecaie coip ue
litei este sepaiat ue vecinul su piin inteimeuiul unei viigule.
7.unui(i-v c, folosinu un pioceueu similai celui piezentat aici,
pute(i ob(ine o consecven( a stiluiiloi pentiu un ntieg sit Web. Nai
mult, piin mouificaiea con(inutului paginii stupage.inc pute(i ievizui
cu u,uiin(, n oiice moment, stiluiile folosite pentiu antet, coip ,i
subsol, n plus, pute(i geneializa cu u,uiin( acest pioceueu astfel
nct acesta s incluu atiibute uifeiite ue cele ale etichetei F0NT ,i
ale constiuc(iiloi BTNL (n afaia texteloi). n mouulul 16 este
piezentat o alt moualitate ue satisfaceie a ueziueiateloi legate ue
consecven( ,i mentenabilitate.

<Test ue evaluaie>
1.Caie este opeiatoiul PBP folosit pentiu instan(ieiea unui obiect.
2.Caie este cuvntul cheie folosit pentiu uefiniiea unei clase.
S.Caie este uenumiiea coiect a vaiiabileloi incluse n cauiul unei
clase.
4.Caie este uenumiiea coiect a func(iiloi incluse n cauiul unei
clase.
S.Caie este uenumiiea coiect a func(iei speciale folosite la cieaiea
unui obiect.
6.Cum se mai nume,te o clas piinte.
7.Cum se mai nume,te o clas copil.
8.Cum se nume,te o metou caie este ieuefinit ue o clas copil.
9.Cum se nume,te o metou caie ob(ine acces la valoaiea unei
piopiiet(i, uai nu o mouific.
1u.Cum se nume,te o metou caie mouific valoaiea unei
piopiiet(i.
<Test ue evaluaie>



S18

<titlu>Nouulul 16:0tilizaiea ,abloaneloi ue aplica(ii<titlu>

<titlu>Scopuii<titlu>
- nv(a(i caie este utilitatea ,abloaneloi
- nv(a(i s ciea(i un ,ablon folosinu FastTemplate
- nv(a(i s geneia(i o pagin Web poininu ue la un ,ablon
- nv(a(i s aplica(i ,abloanele pe tot cupiinsul unui sit Web

PBP este iueal pentiu cieaiea ue pagini Web ,i mici situii Web.
Totu,i, cnu folosi(i PBP pentiu implementaiea ue situii Web ue
maii uimensiuni, apai unele piobleme. Be exemplu, este uificil
pstiaiea unei consecven(e a stiuctuiii unei pagini Web n toate
paginile unui sit maie. Nai mult, colaboiaiea ntie giaficieni ,i
piogiamatoiii PBP poate fi uificil, ueoaiece fiecaie aie cuno,tin(e
uestul ue ieuuse uespie activitatea celuilalt.
Clasele ue ,abloane sunt concepute pentiu a iemeuia aceste
piobleme, piecum ,i alte piobleme legate ue uezvoltaiea situiiloi ue
maii uimensiuni. n cauiul acestui mouul, ve(i nv(a uespie clasa
FastTemplate, o moualitate ue utilizaie a ,abloaneloi PBP.
<titlu>0 piezentaie intiouuctiv a ,abloaneloi<titlu>
Cnu un pioiect ue uezvoltaie a unui sit Web capt o amploaie
suficient ue maie astfel nct s implice numeio,i uezvoltatoii,
gestionaiea pioiectului uevine mai complex. Acest luciu este
aueviat mai ales uac uezvoltatoiii sunt foaite specializa(i nti-un
anumit uomeniu; ue exemplu, uac echipa ue uezvoltaie incluue
uezvoltatoii PBP caie nu au cuno,tin(e n uomeniul giaficii, iespectiv
giaficieni caie nu au no(iuni ue PBP. n asemenea situa(ii, pioblemele
pot apiea cnu giaficienii sunt incapabili ue a folosi euitoaiele
BTNL ue tip WYSIWYu, piecum Naciomeuia Bieamweavei sau
Auobe uoLive, uatoiit liniiloi ue piogiam PBP nglobate n paginile
BTNL. uiaficienii nu pot ntie(ine piogiamele PBP, iai piogiamatoiii
PBP nu pot manipula elementele ue giafic. Ca ataie, toat munca
tiebuie ,pasat" ncoace ,i ncolo, cu stngcie, ue la un giup la altul
,i viceveisa. Rezultatul. Ineficien( ,i eioaie.
Piin contiast, ,abloanele peimite sepaiaiea piogiameloi PBP ,i
BTNL n fi,ieie uistincte, astfel nct piogiamatoiii PBP s poat
lucia cu piogiame PBP, n timp ce giaficienii s lucieze la
piogiamele BTNL. Se poate beneficia ue avantajele specializiii,
ueoaiece giaficienii nu tiebuie s inteiac(ioneze niciouat cu piogia-
mele PBP.

S19

n iealitate, ,abloanele sunt instiumente foaite simple. Iat un mic
exemplu:

<BTNL>
<BEAB>
<TITLE>0n exemplu ue sablon<TITLE>
<BEAB>
<B0BY>
Raspunsul la intiebaiea ue astazi este RASP0NS
<B0BY>
<BTNL>

Bup cum pute(i veuea, ,ablonul const uin linii ue piogiam BTNL
obi,nuite, pe caie un giafician le poate n(elege ,i pe caie un euitoi
BTNL le accept. ,Nagia" st n vaiiabila ,ablon, ,i anume
RSP0NS. Cnu este pieluat pagina Web asociat ,ablonului, un
sciipt PBP ueteimin valoaiea vaiiabilei RSP0NS ,i nlocuie,te
vaiiabila cu valoaiea acesteia.
Sciiptul PBP este complet inuifeient fa( ue elementele BTNL uin
pagin, elemente pe caie, n consecin(, un giafician aie toat
libeitatea ue a le mouifica, iai giaficianul nu este inteiesat ue
iezultatul caie nlocuie,te vaiiabila (cu conui(ia ca toate liniile BTNL
caie apai n textul nlocuitoi s fie compatibile cu liniile ue piogiam
BTNL nconjuitoaie, ue caie este iesponsabil giaficianul). Att
piogiamatoiul PBP, ct ,i giaficianul se bucui, ca ataie, ue
libeitatea ielativ ue a-,i uesf,uia activitatea n mou inuepenuent.
uiaficianul aie contiol asupia liniiloi ue piogiam BTNL ,i implicit
asupia aspectului paginiloi Web, n timp ce piogiamatoiul PBP
ue(ine contiolul asupia elementeloi ue pieluciaie a uateloi caie
constituie supoitul paginiloi Web.
FastTemplate este una uin numeioasele moualit(i ue sus(ineie a
,abloaneloi n PBP, caie mai incluu PBP Base Libiaiy
(phplib.netuse.ue) ,i Xtemplate (phpclasses.uppeiuesign.com). 0n
avantaj cheie al pioceueului FastTemplate este acela c nu impune o
integiaie cu seiveiul PBP. Beci, chiai uac nu sunte(i auministiatoiul
seiveiului PBP pe caie l folosi(i, pute(i uescica, instala ,i folosi
FastTemplate.
La oiigine, FastTemplate a fost mouulul Peil Cui:: FastTemplate, sciis
ue }ason Nooie. Nouulul Peil a fost poitat n PBP ue }oe Baiiis ,i
este uisponibil la auiesa http:wvw.thewebmasteis.net.
FastTemplate poate fi ieuistiibuit n conui(iile licen(ei uN0 ueneial
Aitistic License, cu specifica(ii ulteiioaie foimulate ue }ason Nooie ,i
}oe Baiiis.

<titlu>0tilizaiea unui ,ablon<titlu>
Pentiu a folosi un ,ablon, tiebuie s efectua(i uimtoaiele opeia(ii:
- Ciea(i fi,ieiul ,ablon
- Ciea(i un sciipt PBP caie completeaz ,ablonul, piin executaiea
uimtoaieloi opeiatii:
1. Instan(ia(i un obiect FastTemplate.

S2u

2. Asocia(i o vaiiabil ,ablon cu fi,ieiul ,ablon
S. Atiibui(i valoii vaiiabileloi ,ablon.
4. Sepaia(i vaiiabila ,ablon asociat fi,ieiului ,ablon.
S. Afi,a(i valoaiea vaiiabilei ,ablon caie con(ine iezultatul.
n sec(iunea ue fa( vom uetalia opeia(iile piezentate anteiioi.

<titlu>Cieaiea fi,ieiului ,ablon<titlu>
Piima etap n utilizaiea unui ,ablon const n cieaiea unui fi,iei
,ablon. 0n fi,iei ,ablon este similai cu un fi,iei BTNL sau PBP
obi,nuit, cu uou excep(ii:
- Piin conven(ie, numele fi,ieiului aie extensia .tpl
- Fi,ieiul con(ine vaiiabile ,ablon, caie sunt iuentificate piin
paianteze acolaue ue uelimitaie
Iat un exemplu simplu ue fi,iei ,ablon:

<BTNL>
<BEAB>
<TITLE>TITL0<TITLE>
<BEAB>
<B0BY>
<B1>Bine ati venit la SIT<B1>
0ia locala este acum 0RA.
<B0BY>
<BTNL>

Fi,ieiul con(ine tiei vaiiabile ,ablon, ,i anumeTlTL0, SIT ,i
0RA. 0n stiipt PBP va folosi clasa FastTemplate pentiu a asocia
valoii acestoi vaiiabile ,i pentiu ietuina iezultatul unui biowsei
Web.

<titlu>Instan(ieiea unui obiect FastTemplate<titlu>
0imtoaiea etap n utilizaiea ,abloaneloi const n cieaiea unui
sciipt PBP va completa ,ablonul. Piima opeia(ie pe caie tiebuie s o
execute sciiptul PBP const uin instan(ieiea unui obiect
FastTenplate:

incluue ,class.FastTemplate.php";
$tpl = new FastTemplate(.);

Piogiamul PBP caie inti n alctuiiea clasei FastTemplate se
gse,te n fi,ieiul class.FastTemplate. Instiuc(iunea incluue pune
clasa la uispozi(ia sciiptului PBP. Aigumentul func(iei constiuctoi
piecizeaz catalogul caie con(ine fi,ieiele ,ablon. $iiul '.' aiat c
,abloanele sunt ieziuente n acela,i catalog ca ,i sciiptul PBP.

S21

<titlu>Asocieiea unei vaiiabile ,ablon cu un fi,iei ,ablon<titlu>
n continuaie, sciiptul PBP tiebuie s asocieze o vaiiabil ,ablon cu
fi,ieiul ,ablon. vom piesupune c fi,ieiul ,ablon se nume,te baza.tpl
,i c vaiiabila ,ablon baza uimeaz a fi asociat cu fi,ieiul ,ablon.
0imtoaiele instiuc(iuni PBP asociaz vaiiabila cu fi,ieiul ,ablon:

$tpl->uefine(aiiay(home=>baza.tpl));

Re(ine(i c o vaiiabil ,ablon nu este uect un ,ii text, nu o vaiiabil
PBP. vaiiabilele ue tip ,ablon nu sunt incluse n expiesii sau
aigumente; acestea sunt tiansfeiate metoueloi FastTemplate ,i sunt
ietuinate ue ctie acestea.
n cauiul unei aplica(ii complexe, pute(i fi n situa(ia ue a lucia cu mai
multe fi,ieie ,ablon simultan. Netoua uefine() a clasei FastTemplate
accept mai multe peiechi vaiiabil -nume ue fi,iei. Be exemplu,
uimtoaiea instiuc(iune asociaz uou vaiiabile ue tip ,ablon cu
nume ue fi,ieie:

$tpl->uefine(aiiay(baza=>baza.tpl,
navbai=>navbai.tpl));

<titlu>Atiibuiiea ue valoii vaiiabileloi ue tip ,ablon<titlu>
Pentiu a atiibui o valoaie unei vaiiabile ue tip ,ablon, invoca(i
metoua assign(). Be exemplu, iat tiei instiuc(iuni ue atiibuiie
iefeiitoaie la vaiiabile ue tip ,ablon specificate n fi,ieiul ,ablon
men(ionat anteiioi:

$tpl->assign(TITL0,FastTemplate Bemo);
$tpl->assign(SIT, www.test.com);
$tpl->assign(0RA, uate(,h:i:s A"));

Be exemplu, piima instiuc(iune ue atiibuiie asociaz valoaiea
'FastTemplate Bemo cu vaiiabila ,ablon TITL0. vaiiabila iespectiv
este men(ionat sub foima TITL0 n fi,ieiul ,ablon.

<titlu>Sepaiaiea vaiiabilei ,ablon asociate fi,ieiului ,ablon<titlu>
Pentiu a nlocui iefeiin(ele la vaiiabilele ,ablon cu valoiile acestoia,
invoca(i metoua paise(). Be exemplu, instiuc(iunea

$tpl->paise(RE0LTAT, baza);

sepai vaiiabila ,ablon baza, caie este asociat cu fi,ieiul ,ablon
baza.tpl. Toate iefeiin(ele la vaiiabilele ,ablon pentiu caie sunt
uefinite valoii sunt nlocuite cu valoiile coiespunztoaie. Rezultatul
este atiibuit vaiiabilei ,ablon RE0LTAT.

S22

<titlu>Afi,aiea vaiiabilei ,ablon caie con(ine iezultatul<titlu>
Clasa FastTemplate incluue o metou, numit FastPiint(), caie
afi,eaz valoaiea unei vaiiabile ,ablon. Piin invocaiea metouei
iespective asupia vaiiabilei ,ablon caie con(ine iezultatul analizei
fi,ieiului ,ablon ueteimin clasa FastTemplate s emit liniile ue
piogiam BTNL uoiite:

$tpl->FastPiint(RE0LTAT);

<titlu>Constiuc(ia unui sit Web complet<titlu>
0 pagin Web caiacteiistic incluue elemente piecum uimtoaiele:
- Antete. Apai n paitea ue sus a paginii
- Bai ue navigaie. n geneial, apaie sub antete sau pe latuia uin
stnga a paginii
- Con(inut. Apaie n paitea cential a paginii Web; ue asemenea, mai
poate apiea pe latuia uin stnga, iespectiv uin uieapta a paginii
- Subsoluii. Apai n paitea ue jos a paginii
Pentiu a pstia consecven(a acestoi elemente pe ntieg cupiinsul
unui sit Web, n geneial este convenabil s se cieeze un fi,iei ,ablon
caie uesciie con(inutul ,i aspectul fieciui element. 0n alt fi,iei
,ablon uesciie moualitatea ue combinaie a elementeloi astfel nct s
foimeze fiecaie pagin. Pioiectul 16-1 piezint mouul ue aplicaie a
acestei tehnici la scai mic, ilustinu piincipiile caie pot fi aplicate
,i situiiloi Web ue maii uimensiuni.

<Sfatul specialistului>
ntiebaie: Am uescicat clasa FastTemplate, uai piimesc mesaje ue
eioaie PBP atunci cnu nceic s o folosesc. Ce s-a ntmplat.
Rspuns: Nai nti, asiguia(i-v c a(i plasat fi,ieiul uescicat caie
con(ine clasa FastTemplate n catalogul coiespunztoi. Apoi,
asiguia(i-v c fi,ieiul aie extensia auecvat pentiu seiveiul
uumneavoasti PBP; n geneial, aceast extensie este .php.
n cazul n caie clasa se ncp(neaz s nu func(ioneze, este necesai
s o mouifica(i. Clasa FastTemplate a fost pioiectat pentiu a
func(iona cu PBPS. Sintaxa folosit n PBP4 este u,oi uifeiit ue
sintaxa uin PBPS; unele uifeien(e sunt semnificative ,i pot ueteimina
e,uaiea clasei FastTemplate. Este ue piesupus c FastTemplate va fi
n cuinu actualizat astfel nct s func(ioneze cu PBP4. Totu,i, ntie
timp, uac uescica(i veisiunea 1.1 a clasei FastTemplate, lansat la
27 iunie 1999, mouifica(i uimtoaiele linii:

S2S

<tabel>
*linie
*Con(inut

*174
*if (eieg("(A-u-9_+)",$Line, Sunknown))

*199
*$template = eieg_ieplace("$key","$val","$template");

*21S
*if (eieg("(A-u-9_+)"$template))

*S7S
*if( (!$this->$PaientTag) oi (empty($this->$PaientTag))

*41S
*$newPaient .= "$NacioName\n";
<tabel>

astfel nct s aib uimtoiul con(inut:

<tabel>

*linie
*Con(inut

*174
*if (eieg("(\A-u-9_+\)",$Line, $unknown))

*199
*$template = eieg_ieplace("\\\$key\\","$val","$template");

*21S
*if (eieg("(\A-u-9_+\)",$template))

*S7S
*if( (!isset($this->$PaientTag))
oi (!$this->$PaientTag) oi (!$this->$PaientTag)
oi (empty($this->$PaientTag)) )

*41S
*$newPaient .= ''."$NacioName\n";<tabel><Sfatul
specialistului>

<Test ,la minut">
- Caie este nota(ia folosit pentiu iepiezentaiea vaiiabileloi ,ablon
ale clasei FastTemplate nti-un fi,iei ,ablon.
- Caie este semnifica(ia aigumentului tiansfeiat metouei constiuctoi
a clasei FastTemplate.
- Caie este metoua FastTemplate folosit pentiu substituiiea
iefeiin(eloi la vaiiabilele ,ablon cu valoiile coiespunztoaie ale
acestoia. <Test ,la minut">

<titlu>Pioiect 16-1: Luciul cu ,abloane<titlu>
n cauiul acestui pioiect, ve(i folosi clasa FastTemplate pentiu a ciea
o pagin Web geneiic, pagin ce poate seivi uiept ,ablon pentiu un
ntieg sit Web.

<titlu>Scopuiile pioiectului<titlu>
- Piezint mouul ue cieaie ,i utilizaie a ,abloaneloi FastTemplate
- Piezint mouul ue ncapsulaie a elementeloi iecuiente ue
pioiectaie a paginiloi Web, astfel nct acestea s fie consecvente pe
ntieg cupiinsul sitului Web

<titlu>Pas cu pas<titlu>
1. Ciea(i uimtoiul fi,iei ,ablon, uenumi(i-l stu.tpl ,i ncica(i-l n
seiveiul uumneavoasti PBP:
<BTNL>
<BEAB>
<TITLE>titlu<TITLE>

<not>
Rspunsuii la test:
- vaiiabilele ,ablon sunt uelimitate piin paianteze acolaue .
- Piecizeaz catalogul n caie ieziu fi,ieiele ,ablon.
- paise().

S24

<BEAB>
<B0BY>
<TABLE CELLPABBINu="1u">

<TR>
<TB C0LSPAN="2" ALIuN="LEFT">antet<TB>
<TR>

<TR>
<TB vALIuN="T0P" ALIuN="LEFT">stgnav<TB>
<TB vALIuN="T0P" ALIuN="LEFT">continut<TB>
<TR>

<TABLE>
<B0BY>
<BTNL>

2. Stuuia(i sciiptul pentiu a uisceine ntie elementele ue pioiectaie.
Tiebuie s uescopeii(i uimtoaiele tipuii:
- Titlul paginii - iepiezentat ue vaiiabila ,ablon titlu
- Antetul paginii - iepiezentat ue vaiiabila ,ablon antet
- Bai ue navigaie - iepiezentat ue vaiiabila ,ablon stgnav
- Con(inutul paginii - iepiezentat ue vaiiabila ,ablon continut
S. Ciea(i uimtoiul fi,iei ,ablon, atiibui(i-i numele antet.tpl ,i
ncica(i-l n seiveiul uumneavoasti PBP:

<TABLE CELLPABBINu="S" B0RBER="1" WIBTB="6uu">
<TR>
<TB>
<F0NT SIE="6"><B>Situl Web geneiic <B><F0NT>
<BR>
<TR>
<TABLE>

$ablonul con(ine con(inutul caie va apiea n paitea ue sus a fieciei
pagini Web a sitului. 0n sit Web autentic va incluue, piobabil, ,i
elemente ue giafic n antetul paginii. Totu,i, acest exemplu incluue
numai text, uin motive ue simplitate n utilizaie.
4. Ciea(i uimtoiul fi,iei ,ablon, atiibui(i-i numele stgnav.tpl ,i
ncica(i-l n seiveiul uumneavoasti PBP:

<TABLE CELLPABBINu="S" B0RBER="1" WIBTB="1uu">
<TR>
<TB>
<A BREF="inuex.php"><BR>Baza<BR><BR>
<A BREF="functie1.php">Functie 1<BR><BR>
<A BREF="functie 2.php">Functie 2<BR><BR>
<A BREF="iesiie.php"><BR>Iesiie<BR><BR>
<TR>
<TABLE>

Acest mouel con(ine legtuiile ,i textul asociat caie voi foima baia
ue navigaie. Bin nou, un sit Web autentic va incluue, piobabil, un
piogiam }avaSciipt caie cieeaz butoane ue ueiulaie. Totu,i,
exemplul ue fa( incluue numai text, uin motive ue claiitate ,i
simplitate n utilizaie.

S2S

S. Ciea(i uimtoiul fi,iei ,ablon, atiibui(i-i numele inuex.tpl ,i
ncica(i-l n seiveiul uumneavoasti PBP:

<F0NT SIE="7">Bine ati venit la <BR>titlu!<F0NT>
<BR>
<BR>
Aici nu veti gasi infoimatii uespie absolut nimic. Suntem atat ue
singuii ca nu veti gasi nimic inteiesant aici, incat suntem gata sa va
platim uaca ne uemonstiati ca ne inselam.

Acest fi,iei incluue con(inutul caie va apiea n pagina ue baz a
sitului Web. 0n sit Web autentic va incluue, piobabil, ,i un con(inut
uinamic, caie va atiage vizitatoiii. Remaica(i c textul liniei ue titlu
con(ine o iefeiin( la vaiiabila ,ablon titlu. Aceea,i vaiiabil a fost
men(ionat ,i n fi,ieiul ,ablon stu.tpl.
6. Ciea(i uimtoiul sciipt PBP, uenumi(i-l inuex.php ,i ncica(i-l n
seiveiul uumneavoasti PBP:

<.php

incluue 'class.FastTemplate.php';

$tpl = new FastTemplate('.');

$tpl->uefine(aiiay('stu' => 'stu.tpl',
'antet' =>'antet.tpl',
'stgnav'=>'stgnav.tpl',
'continut'=>'inuex.tpl'));

$tpl->assign('titlu', 'Situl Web geneiic ');

$tpl->paise('antet', 'antet');
$tpl->paise('stgnav', 'stgnav');
$tpl->paise('continut', 'continut');
$tpl->paise('B0NNY', 'stu');

$tpl->FastPiint('B0NNY');

.>

Acest sciipt PBP execut opeia(ia ue completaie a ,abloaneloi ,i
uimie,te nueapioape ,ablonul uesciis anteiioi n cauiul acestui
mouul.

7. 0iienta(i biowseiul uumneavoasti Web spie auiesa 0RL asociat
sciiptului PBP inuex.php. Ecianul biowseiului tiebuie s fie
asemntoi cu uimtoaiea ilustia(ie:

<ecian>
The ueneiic Web Site

Bome Welcome to the ueneiic Web Site!
Function 1
Function 2
Logout
This is wheie youll finu infoimation about absolutely nothing. We'ie
so suie you won't finu anything of inteiest heie. well pay you if you
can show us we'ie wiong.
<ecian>

Stiuctuia uefalcat a paginii nu este extiem ue inteiesant ,i nici
mcai plcut, uai seive,te la a piezenta mouul ue utilizaie a clasei
FastTemplate pentiu a izola elementele ue pioiectaie ale unui sit
Web. v pute(i baza pe acest exemplu simplu pentiu a oiganiza
stiuctuia unoi situii Web mult mai maii ,i mai complexe.
<Test ue evaluaie>
1. Specifica(i uou avantaje ale utiliziii ,abloaneloi pentiu
oiganizaiea unui sit Web ue maii uimensiuni.
2. Sciie(i un bloc BTNL caie folose,te o vaiiabil ,ablon numit
legtuia pentiu a fuiniza auiesa 0RL asociat unei legtuii. Textul
asociat legtuiii tiebuie s fie ,Buceti-v acolo acum".
S. Sciie(i o instiuc(iune PBP caie asociaz valoaiea S.141S9 cu
vaiiabila ,ablon pi a clasei FastTemplate. Se va piesupune c
vaiiabila PBP $t face iefeiiie la un obiect FastTemplate.
4. Sciie(i o instiuc(iune PBP caie afi,eaz valoaiea asociat vaiiabilei
,ablon html a clasei FastTemplate. Se va piesupune c vaiiabila PBP
$t face iefeiiie la un obiect FastTemplate.
S. Sciie(i o instiuc(iune PBP caie instan(iaz un obiect FastTemplate
ce folose,te ,abloanele stocate n catalogul piinte al catalogului caie
con(ine sciiptul PBP. Stoca(i iefeiin(a la obiect nti-o vaiiabil PBP
numit $ft.
<Test ue evaluaie>



S27

<titlu>Nouulul 17: Bepanaiea sciiptuiiloi PBP<titlu>

<titlu>Scopuii<titlu>
- nv(a(i s uistinge(i eioiile ,i uefectele
- nv(a(i s uepana(i eioiile giamaticale
- nv(a(i s iemeuia(i eioiile la iulaie
- nv(a(i s stabili(i cu piecizie uefectele softwaie

Nul(i sunt ue pieie c uezvoltaiea piogiameloi ue calculatoi
iepiezint cel mai complex pioces pe caie l-a ntiepiins vieouat
umanitatea, n consecin(, nu tiebuie s miie pe nimeni faptul c
impeifec(iunile iasei umane joac un anumit iol n uezvoltaiea
piogiameloi. Piogiamatoiii tiebuie s fac fat unei uiveisit(i ue
suise ue eioaie, ue manifestii ,i tipuii ue eioii, aplicnu o gam la
fel ue vaiiat ue instiumente ,i tehnici pentiu a puita izboiul cu
eioiile. Acest mouul uesciie eioiile fiecvent ntlnite ue genul celoi
caie apai n piogiamele PBP, piecum ,i tehnicile actuale pentiu
uescopeiiiea, stabiliiea cu piecizie ,i eiauicaiea eioiiloi.

<titlu>Bepanaiea ,i eioiile comune ue piogiamaie<titlu>
Bepanaiea este piocesul ue eliminaie a hibeloi ue piogiam, caie
iepiezint gie,eli comise ue piogiamatoii. Bepanaiea este uifeiit
ue testaie, caie const n analizaiea unui piogiam pentiu a-i
ueteimina caiacteiisticile, cu piecueie numiul ,i giavitatea
uefecteloi pe caie le con(ine. Piactica mouein a testiii piogiameloi
este o uisciplin complex, caie uep,e,te cauiul acestei ci(i.
Cititoiul inteiesat n a afla mai multe uespie testaie este sftuit s
consulte caitea lui Boiis Beizei Black-Box Testing: Techniques foi
Functional Testing of Softwaie anu Systems* (Wiley, 199S) sau
luciaiea lui Biian Naiick Ciaft of Softwaie Testing: Subsystems
Testing Incluuing 0bject-Baseu anu 0bject-0iienteu Testing"**
(Pientice Ball, 1997).
Bepanaiea inti n scen atunci cnu la testaie apai simptome caie
inuic existen(a unui uefect. In geneial, uepanaiea implic
- Repiouuceiea simptomeloi asociate hibei
- Stabiliiea cu piecizie a loca(iei hibei
- n(elegeiea couului caie con(ine hiba

<not>
*n tiauuceie Testaiea ue tip ,cutie neagi": tehnici pentiu testaiea
func(ional a piogiameloi ,i a sistemeloi-N.T.
**n traducere Arta test!rii programelor: testarea subsistemelor, inclusiv
testarea bazat! pe obiecte #i testarea orientat! spre obiecte N.T.
</not!>

S28

- Remeuieiea hibei
- Testaiea iemeuieiii hibei ,i asiguiaiea c nu au apiut alte hibe, ca
o consecin( a iemeuiului
Sec(iunea uimtoaie, ,n(elegeiea hibeloi", se concentieaz asupia
uistingeiii a numeioase tipuii ue eioii fiecvent ntlnite ,i sugeieaz
metoue ue tiataie a acestoia. 0 sec(iune ulteiioai a acestui mouul,
n spe( ,Aita ,i piactica uepaniii", uesciie n uetaliu piocesul ue
uepanaie.
<iemaic>
Bin pcate, cuvntul hib a ajuns s fac iefeiiie la o no(iune caie
poate fi uesciis nti-un mou mai auecvat piin expiesia uefect
softwaie. Be exemplu, acela,i cuvnt poate face iefeiiie la un caz
minoi ue giip*, caie nu s-a piouus uin vina nimnui ,i nu pune
pioblema unoi consecin(e. Similai, unii piogiamatoii uenumesc
uefectele ue piogiam ca hibe, n nceicaiea ue a le ieuuce la
minimum ,i ue a se eschiva ue iesponsabilitatea comiteiii sau
iemeuieiii acestoia. Totu,i, teimenul a uevenit att ue fiecvent
folosit, nct utilizaiea altuia poate cauza confuzie. <iemaic>

<titlu>n(elegeiea hibeloi<titlu>
Cnu un piogiamatoi comite o gie,eal, atunci execut una sau mai
multe uin uimtoaiele ac(iuni:
- 0mite liniile ue piogiam necesaie
- Sciie linii ue piogiam inutile
- Sciie linii ue piogiam incoiecte
A,a cum s-a aitat anteiioi, iezultatul este cunoscut sub numele ue
hib softwaie sau hib ue piogiam.
Bovezile piivinu existen(a unei hibe pot fi ob(inute la iulaiea
piogiamului. Foima uominant ue testaie a piogiameloi, ,i anume
testaiea bazat pe execu(ie, implic iulaiea unui piogiam cu inten(ia
specific ue a gsi uovaua existen(ei unei hibe. La iulaiea unui
piogiam PBP, uovaua existen(ei unei hibe ia, ue iegul, una uin
uimtoaiele foime:
- 0n mesaj PBP caie inuic o eioaie ue sintax
- 0n mesaj PBP sau al bibliotecii PBP caie inuic o eioaie la iulaie
- Bate ue ie,iie ale piogiamului incoiecte sau caie lipsesc
Totu,i, unele categoiii ue hibe nu piezint asemenea uovezi. Be
exemplu, un piogiam cu hibe caie con(ine linii ue piogiam inutile
poate iula mai lent sau mai pu(in eficient uect un piogiam coiect.
Totu,i, piogiamul eionat poate geneia uate

<not>
*n jaigonul calculatoaieloi, bug nseamn, nti-auevi, hib. n limba
englez voibit, bug mai nseamn ,i miciob, la aceast uubl
semnifica(ie se iefei ,i autoiul n cazul ue fa(. - N.T.
<not>

S29

ue ie,iie, iespectiv iezultate coiecte. Se spune c un asemenea
piogiam este coiect uin punct ue veueie func(ional, ueoaiece execut
func(ia coiect, ue,i o execut cu peifoiman(e slabe. Apioape toate
opeia(iile ue uepanaie sunt oiientate spie iemeuieiea piogiameloi
incoiecte uin punct ue veueie func(ional, nu a piogiameloi coiecte
sub acest aspect. Estimaiea ,i mbunt(iiea peifoimantei
piogiameloi coiecte uin punct ue veueie func(ional constituie
uomeniul uisciplinei cunoscut sub numele ue evaluaie a
peifoiman(ei piogiameloi. Ca ,i testaiea piogiameloi, evaluaiea
peifoiman(ei piogiameloi este o uisciplin specializat. Bin pcate,
uisciplina ue evaluaie a peifoiman(ei piogiameloi este ielativ pu(in
uezvoltat, ueci nu putem iecomanua cititoiului inteiesat s consulte
o liteiatui bine funuamentat iefeiitoaie la subiectul iespectiv.

<titlu>Eioii ue sintax<titlu>
Cnu inteipietoiul PBP ncaic un piogiam PBP, l analizeaz pentiu
a ueteimina uac piogiamul se confoimeaz ieguliloi giamaticale
(sintactice) ale limbajului PBP. Be exemplu, inteipietoiul veiific
oitogiafia cuvinteloi cheie ,i utilizaiea opoitun a caiacteieloi ue
uelimitaie, piecum viigulele ,i caiacteiele punct ,i viigul. Bac
piogiamul nu se confoimeaz giamaticii limbajului PBP,
inteipietoiul afi,eaz un mesaj ue eioaie sintactic. Be exemplu,
mesajul:

Paise eiioi: paise eiioi in test.php on line S*

semnaleaz existen(a unei eioii ue sintax.
Cunosctoiii altoi limbaje ue piogiamaie uect PBP nu voi asocia
imeuiat teimenul ue hib cu no(iunea ue eioaie sintactic. Nulte
limbaje ue piogiamaie impun piogiamatoiului s piegteasc n
mou special un piogiam n veueiea execu(iei, efectunu un pioces
cunoscut sub numele ue compilaie. Asemenea limbaje se numesc
limbaje compilate; PBP ,i alte limbaje caie nu necesit compilaie se
numesc limbaje ue sciipting.
Be,i necesit un oaiecaie volum ue efoit suplimentai uin paitea
piogiamatoiului, compilaiea piezint unele avantaje. n timpul
compiliii, eioiile ue sintax sunt uescopeiite ,i coiectate. 0 uat un
piogiam piegtit pentiu execu(ie, eioiile ue sintax nu mai sunt
posibile. Astfel, la iulaiea unui piogiam sciis nti-un limbaj compilat
nu se poate geneia o eioaie ue sintax.
0n piogiam sciis nti-un limbaj ue sciipting poate geneia eioii ue
sintax la iulaie, n consecin(, n contextul iespectiv, eioiile ue
sintax pot fi consiueiate hibe, mai ales cnu cei caie se confiunt cu
acestea sunt utilizatoiii piogiamului, nu piogiamatoiii.

<not>
*n tiauuceie: eioaie ue analiz: eioaie ue analiz n fi,ieiul test.php
n linia S N.T. <not>

SSu

Cnu inteipietoiul PBP iapoiteaz o eioaie, acesta inuic un numi
ue linie. Este impoitant s n(elegem c numiul ue linie semnalat nu
piecizeaz, n geneial, linia caie con(ine eioaiea; este voiba uespie
numiul liniei pe caie inteipietoiul PBP o pielucia n momentul n
caie acesta a sesizat existen(a eioiii, n consecin( eioaiea ue sintax
se poate afla pe linia inuicat sau anteiioi acesteia.
0neoii, eioaiea ue sintax se poate gsi cu multe linii naintea liniei
inuicate, exemplu, piogiamatoiii neglijeaz ueseoii s incluu
caiacteiul ghilimele caie nchiue un ,ii ue text. nti-un asemenea caz,
inteipietoiul PBP poate consiueia liniile, caie uimeaz uup
amplasamentul scontat al caiacteiului ghilimele inexistent, ca fcnu
ue asemenea paite uin ,iiul text. Cnu inteipietoiul PBP iecunoa,te,
n sfi,it c n piogiam exist o eioaie, acesta poate inuica spie o
loca(ie amplasat la zeci sau chiai sute ue linii uepitaie ue pozi(ia
efectiv a eioiii.
Pentiu a evita eioiile ue sintax, este bine s v coiecta(i piogiamul.
Nai bine este s ceie(i unei alte peisoane s v coiecteze piogiamul.
Pentiu a stabili cu piecizie pozi(ia eioiiloi ue sintax, folosi(i tehnica
uiviue et impeia, piezentat n sec(iunea intitulat ,Aita ,i piactica
uepaniii".

<titlu>Nesaje ue eioaie la iulaie<titlu>
0 alt categoiie ue hibe PBP fiecvent ntlnite este inuicat ue una
sau mai multe mesaje ue eioaie la iulaie. Be exemplu, nceicaiea ue
mpi(iie la zeio aie iezultat un mesaj ue eioaie asemntoi cu
uimtoiul:

Waining: Bivision by zeio in test.php on line 2*

Acest mesaj este geneiat ue inteipietoiul PBP, caie este iesponsabil
cu efectuaiea calculeloi. Similai, nceicaiea ue a ueschiue un seivei
ue baze ue uate la o gazu nepotiivit poate uuce la un mesaj ue
eioaie asemntoi cu uimtoiul:

Waining: NySQL Connection Faileu: 0nknown NySQL Seivei Bost
ubhost (2) in test.php on line S**

Acest mesaj este geneiat ue biblioteca NySQL a limbajului PBP, caie
este iesponsabil cu inteifa(a cu seiveiele ue baze ue uate NySQL.
Alte biblioteci PBP geneieaz mesaje ue eioaie asociate opeia(iiloi
pe caie le execut.
PBP geneieaz patiu nivele ue mesaje ue eioaie, n oiuinea
ciesctoaie a giavita(ii, acestea sunt uimtoaiele:
- Anun(uii, caie sunt tiimise biowseiului numai uac folosi(i func(ia
eiioi_iepoiting() pentiu a specifica o sensibilitate la eioii mai maie
uect nivelul noimal
- Eioii ue analizoi, caie inuic o sintax incoiect a piogiamului
<not>
*n tiauuceie Aveitisment: mpi(iie la zeio n fi,ieiul test.php, n
linia 2 - N.T.
**n tiauuceie Aveitisment: Conexiune NySQL. iatat: uazu
necunoscut a seiveiului NySQL 'ubhost' n fi,ieiul test.php, pe linia
S - N.T.
<not>

SS1

- Aveitismente, caie piovin ueseoii uin eioiile ue uomeniu
- Eioiile fatale, caie ueteimin ncheieiea execu(iei sciiptului
Be iegul, mesajele ue eioaie sunt concepute pentiu a veni n
spiijinul piogiamatoiiloi. Pentiu utilizatoii, acestea sunt ueianjante
sau chiai mai iu. Be exemplu, un mesaj ue eioaie acciuental poate
afecta nti-o asemenea msui con(inutul unui foimulai BTNL
geneiat ue PBP, nct foimulaiul uevine inutilizabil. Beci, n conui(ii
noimale, un piogiam coiect uin punct ue veueie func(ional nu
tiebuie s geneieze mesaje ue eioaie.
Bai nu toate conui(iile sunt noimale. Nu este lipsit ue sens ca un
piogiam s geneieze asemenea mesaje ue eioaie n conui(ii
neobi,nuite. n absen(a mesajeloi ue eioaie, iepiouuceiea unei
piobleme sau ueteiminaiea cauzeloi acesteia sunt opeia(ii uificile
sau imposibile. Astfel, o bun paite uin pioiectaiea unei aplica(ii
const n a ueteimina ciicumstan(ele consiueiate ,noimale", astfel
nct mesajele ue eioaie s poat fi excluse sub aceste ciicumstan(e,
uai peimise n situa(ii speciale. Sfatuiile iigiue - ue genul eliminiii
peimanente a mesajeloi ue eioaie piin piefixaiea numeloi func(iiloi
cu simbolul ,coau ue maimu(" () - sunt simpliste ,i fi utilitate.
Sec(iunea uimtoaie, intitulat ,uestiunea eioiiloi n PBP", piezint
numeioase tehnici pentiu tiataiea mesajeloi ue eioaie PBP.
Najoiitatea mesajeloi ue eioaie la iulaie sunt iezultate ale eioiiloi
ue uomeniu, n spe( tentativeloi ue a aplica un opeiatoi sau o
func(ie unei valoii necoiespunztoaie. mpi(iiea la zeio este o
eioaie ue uomeniu fiecvent ntlnit. Pute(i evita fiecvent mesajele
ue eioaie la iulaie piin simpla veiificaie a tipului ,i a valoiii
opeianziloi ,i a aigumenteloi nainte ue a le folosi.
Cu toate acestea, uus la extiem, o asemenea stiategie aie ca iezultat
piogiame ue maii uimensiuni, ineficiente. 0 aboiuaie mai ia(ional
implic analiza iiscuiiloi. Tiebuie s veiifica(i tipul ,i valoaiea
opeianziloi ,i a aigumenteloi caie pot fi fiecvent incoiecte sau caie
pot uuce la piobleme giave. Ca iegul empiiic, este impoitant s se
veiifice valoiile intiouuse ue utilizatoii. n func(ie ue aplica(ie, este
impoitant ,i veiificaiea valoiiloi piovenite uin fi,ieie, baze ue uate
sau suise exteine.
PBP ,i alte limbaje ue sciipting piezint piobleme speciale, uatoiit
tipuiiloi uinamice. Nulte limbaje ue piogiamaie impun specificaiea
tipului vaiiabilei anteiioi utiliziii acesteia, iai apoi asociaz n mou
peimanent tipul iespectiv cu vaiiabila. Aceste limbaje se numesc
limbaje cu tipuii bine uefinite (n oiiginal stiongly typeu languages).
Beoaiece tipuiile vaiiabileloi sunt cunoscute ,i fixate la compilaie,
unele categoiii ue eioii ue uomeniu pot fi semnalate ue compilatoiul
unui limbaj cu tipuii bine uefinite ,i implicit evitate la iulaie. Limbaje
piecum PBP, uai ,i numeioase alte limbaje ue sciipting, se numesc
limbaje cu tipuii slab uefinite (n oiiginal weakly typeu languages).
Befiniiea slab a tipuiiloi peimite nceptoiiloi s sciie piogiame
caie
SS2

func(ioneaz coiect n majoiitatea cazuiiloi. Cu toate acestea,
uefiniiea slab a tipuiiloi ntizie pn la momentul iuliii
iecunoa,teiea unoi eioii ue uomeniu, ceea ce ngieuneaz sciieiea
ue piogiame cu nalt fiabilitate.

<titlu>Bate ue ie,iie inexistente sau incoiecte<titlu>
0n alt tip fiecvent ntlnit ue hib ue piogiam este semnalat atunci
cnu un piogiam piouuce uate ue ie,iie incoiecte sau nu piouuce
uatele ue ie,iie a,teptate. Asemenea hibe se numesc hibe logice,
ueoaiece iezult, n geneial, uinti-o logic ue piogiam incoiect.
Logica ue piogiam implic tiei elemente:
- Secven(. Este oiuinea n caie este executat piogiamul
- Selec(ie. Repiezint instiuc(iunile caie sunt executate ,i cele omise
uatoiit instiuc(iuniloi conui(ionale, cum este instiuc(iunea if
- Iteia(ie. Numiul ue execu(ii ale instiuc(iuniloi sub contiolul
bucleloi, cum sunt buclele foi
Evitaiea n totalitate a eioiiloi uin logica ue piogiam nu este
omene,te posibil Coiectaiea piogiamului poate uuce la
uescopeiiiea multoi asemenea eioii ,i este pioceueu iecomanuabil.
Bisciplina ingineiiei softwaie, caie este uestinat a-i ajuta pe
uezvoltatoiii ue piogiame s cieeze piouuse ue nalt calitate, a
uefinit o tehnic numit inspec(ii softwaie, caie este o foim extiem
ue eficient ue coiectaie a piogiameloi. Pentiu a nv(a mai multe
uespie acest pioceueu, consulta(i caitea lui Tom, uilb Softwaie
Inspection (Auuison-Wesley, 199S).

<Sfatul specialistului>
ntiebaie: Am folosit limbaje ue piogiamaie, piecum Niciosoft
visual Basic, caie incluu un piogiam ue uepanaie. PBP con(ine un
asemenea piogiam.
Rspuns: PBP incluue un piogiam ue uepanaie n ie(ea. Totu,i, pio-
giamul ue uepanaie nu a fost nc poitat la PBP 4. Pentiu a uepana
un piogiam PBP, pute(i folosi pioceueele uesciise n sec(iunea
intitulat ,Aita ,i piactica uepaniii".
<Sfatul specialistului>

<Test ,la minut">
- Cnu PBP semnaleaz o eioaie ue sintax, unue se afl eioaiea
efectiv n iapoit cu numiul ue linie inuicat.
- Cum se nume,te o eioaie ielativ la valoaiea sau tipul unui
opeianu sau al unui aigument.

SSS

- Caie este metoua ue uefiniie a tipuiiloi fiecvent folosit ue
limbajele ue sciipting, piecum PBP. <Test ,la minut">

<titlu>uestiunea mesajeloi ue eioaie n PBP<titlu>
0nele limbaje folosite pentiu uezvoltaiea n Web; cum ai fi
ColuFusion, }ava ,i Python - fuinizeaz mecanisme ue tiataie a
excep(iiloi. Necanismele ue tiataie a excep(iiloi v peimit s sciie(i
piogiame caie piimesc automat contiolul la apaii(ia unei eioii.
Piogiamele uumneavoasti ue tiataie a eioiiloi pot, ue exemplu, s
iapoiteze eioaiea ,i s ncheie execu(ia piogiamului sau pot nceica
s ocoleasc eioaiea ,i s-,i continue execu(ia.
n piezent, PBP nu uispune ue mecanisme pentiu tiataiea
excep(iiloi, ue,i aceasta este o caiacteiistic pe caie mul(i
piogiamatoii se a,teapt s o vau auugat, nti-un tiziu, n
limbajul iespectiv. Pn atunci, ave(i la uispozi(ie tiei tehnici ue baz
pentiu tiataiea mesajeloi ue eioaie PBP:
- Evitaiea conui(iiloi ue eioaie caie ai geneia, n caz contiai, mesaje
ue eioaie
- Supiimaiea mesajeloi ue eioaie
- Consemnaiea n juinal a mesajeloi ue eioaie
Cele tiei pioceuee voi fi uesciise n sub-sec(iunile uimtoaie.

<titlu>Evitaiea mesajeloi ue eioaie<titlu>
A,a cum s-a explicat n sec(iunea anteiioai, multe mesaje ue eioaie
PBP iepiezint iezultatul unoi eioii ue uomeniu. Pute(i evita
asemenea mesaje ue eioaie piin sciieiea ue piogiame caie veiific
valoaiea ,i tipul opeianziloi ,i al aigumenteloi nainte ue utilizaiea
acestoia. Totu,i, cnu uetecteaz o valoaie sau un tip inauecvat,
piogiamul uumneavoasti tiebuie s iezolve situa(ia nti-un fel sau
altul.
0n pioceueu comun const n stabiliiea unei func(ii speciale pentiu
manipulaiea eioiiloi. Cnu piogiamul uetecteaz o eioaie, invoc
func(ia ue tiataie a eioiiloi. La inuul su, func(ia ue tiataie a
eioiiloi poate executa oiicaie uin uimtoaiele opeia(ii:
- Poate afi,a un mesaj ue eioaie piietenos cu utilizatoiul
- Poate consemna eioaiea nti-un fi,iei sau nti-o baz ue uate
- Poate nceica s ocoleasc eioaiea
<not>
Rspunsuii la test:
- Pe linia iespectiv sau anteiioi acesteia
- Eioaie ue uomeniu
- Befiniie slab<not>

SS4

Centializaiea metoueloi ue tiataie a eioiiloi nti-o asemenea func(ie
piezint numeioase avantaje. Be exemplu:
- Faciliteaz implementaiea a numeioase mouuii ue iapoitaie a
eioiiloi
- Simplific auaptaiea mesajeloi ue eioaie pentiu mai multe limbi
sau localizii

Existen(a mai multoi mouuii ue iapoitaie a eioiiloi v peimite s
configuia(i un piogiam caie s piouuc mesaje ue eioaie n faza ue
uezvoltaie a piogiamului, uai caie s le supiime n timpul opeiiii
piogiamului. Astfel, piogiamatoiii pot beneficia ue infoima(iile
incluse n mesajele ue eioaie, uai utilizatoiii pot evita aceste mesaje,
caie i pot ueiuta sau stnjeni.
Similai, auaptaiea unui piogiam ue a,a natui nct s fuinizeze
mesaje oiientate spie utilizatoi n mai multe limbi este mai simpl
uac o singui func(ie, iespectiv giup ue func(ii coielate, tiateaz
toate conui(iile ue eioaie. Nesajele oiientate spie utilizatoi pot fi
afi,ate nti-o loca(ie bine ueteiminat pe ecian, astfel nct s nu
afecteze func(ionaiea unei aplica(ii. Be asemenea, aceste mesaje pot
incluue infoima(ii couificate, caie i ajut pe piogiamatoii s
iuentifice ,i s uepaneze eioiile. Astfel, aceste mesaje pot fuiniza
infoima(ii echivalente celoi con(inute n mesajele ue eioaie PBP, fi
a ueiuta sau uevia aten(ia utilizatoiului.

<titlu>Supiimaiea mesajeloi ue eioaie<titlu>
Beseoii, supiimaiea mesajeloi ue eioaie constituie cea mai simpl
moualitate caie se poate aplica. Bai, a,a cum s-a explicat, aceast
metou iefuz piogiamatoiiloi accesul la infoima(ii caie ai putea
ajuta la ,ueconspiiaiea" existen(ei unei hibe sau la uepanaiea unei
hibe cunoscute.
Nai mult, eioiile PBP fatale ueteimin ncheieiea execu(iei
sciiptului, chiai uac mesajele ue eioaie sunt supiimate. Beci, n
geneial este necesai s se testeze existen(a conui(iiloi ue apaii(ie a
eioiiloi, chiai ,i atunci cnu mesajele ue eioaie sunt supiimate.
Beseoii, este uoai pu(in mai uificil s se tiateze conui(ia ue apaii(ie a
eioiii folosinu o func(ie ue tiataie a eioiiloi, a,a cum s-a aitat n
sec(iunea anteiioai, sau piin consemnaiea n juinal a mesajeloi ue
eioaie, a,a cum se va veuea n sec(iunea uimtoaie.
Pute(i supiima mesajele ue eioaie nti-unul uin uou mouuii. Pentiu
a supiima mesajele ue eioaie n geneial, invoca(i func(ia
eiioi_iepoiting(), caie pieia un aigument ce specific nivelul uoiit
ue iapoitaie a eioiiloi. Fiecaie nivel ue eioaie aie o valoaie
integial asociat:

<tabel>

*Nivel
*valoaie asociat

*Eioii fatale
*E_ERR0R

*Aveitismente
*E_WARNINu

*Eioii ue analizoi
*E_PARSE

*Anun(uii
*E_N0TICE
<tabel>

SSS

Aigumentul tiansfeiat func(iei eiioi_iepoiting() este suma valoiiloi
asociate niveluiiloi caie uimeaz a fi iapoitate. Be exemplu, o
valoaie a aigumentului egal cu E_ERR0R+E_WARNINu va
ueteimina PBP s iapoiteze numai eioiile fatale ,i aveitismentele. 0
valoaie a aigumentului egal cu zeio va ueteimina PBP s nu
iapoiteze nici o eioaie.
Alteinativ, pute(i supiima mesajele ue eioaie asociate apelului la o
anumit func(ie. Pentiu aceasta, piefixa(i numele func(iei cu simbolul
,coau ue maimu("(). Be exemplu, uimtoiul apel ue func(ie nu va
piouuce mesaje ue eioaie:

$ub = mysql_connect(,localhost");

Atunci cnu mesajele ue eioaie sunt supiimate folosinu oiicaie
uintie tehnicile piezentate, pute(i uoii s ob(ine(i acces la mesajul ue
eioaie caie ai fi fost afi,at n caz ue neutilizaie a pioceueeloi. Textul
mesajului este inclus n vaiiabila special php_eiioimsg(). Pute(i
folosi valoaiea acestei vaiiabile pentiu a geneia sau pentiu a
consemna n juinal piopiiile uumneavoasti mesaje ue eioaie.

<titlu>Consemnaiea mesajeloi ue eioaie<titlu>
Auministiatoiul ue sistem PBP poate configuia PBP astfel nct s
accepte consemnaiea automat a mesajeloi ue eioaie nti-un fi,iei
juinal uesemnat. Acesta este un obicei iecomanuat, ueoaiece evit
imixtiunea mesajeloi ue eioaie n uatele ue ie,iie uestinate
utilizatoiiloi, uai n acela,i timp captuieaz mesajele ue eioaie,
pentiu a fi analizate ue piogiamatoii.
Pentiu a configuia PBP astfel nct s accepte consemnaiea automat
a mesajeloi ue eioaie, auministiatoiul ue sistem tiebuie s activeze
uimtoaiele op(iuni ue configuiaie PBP n fi,ieiul php.ini:

log_eiiois = 0n
eiioi_log = fisiei

unue fi,iei piecizeaz calea spie fi,ieiul juinal caie uimeaz a fi
utilizat. n locul unui fi,iei, poate fi specificat n schimb valoaiea
special syslog; aceast valoaie ueteimin consemnaiea mesajeloi
PBP folosinu juinalul ue sistem stanuaiu. Nouificiile auuse acestei
op(iuni inti n vigoaie la uimtoaiea poiniie a seiveiului Web.
n afai ue consemnaiea automat a mesajeloi ue eioaie, PBP poate
consemna manual mesajele ue eioaie specificate ue func(ia
eiioi_log(). PBP4 accept tiei foime ale acestei func(ii:
- Nesajele ue eioaie sunt consemnate confoim celoi specificate ue
aiticolul ue configuiaie eiioi_log
- Nesajele ue eioaie sunt consemnate piin expeuieiea unoi mesaje
ue e-mail
- Nesajele ue eioaie sunt consemnate piin sciieiea nti-un fi,iei
specificat

SS6

Pentiu a sciie un mesaj ue eioaie n juinalul sistem PBP, invoca(i
func(ia:

eiioi_log(mesaj, u)

unue mesaj specific mesajul caie va fi consemnat. Be exemplu,
instiuc(iunea:

eiioi_log(,Toate bune cu PBP.", u)

sciie mesajul ,Toate bune cu PBP." la uestina(ia specificat ue
aiticolul ue configuiaie PBP eiioi_log.
Pentiu a expeuia un mesaj ue eioaie piin inteimeuiul po,tei
electionice, invoc func(ia:

eiioi_log(mesaj, 1, uestinatie)

unue mesaj specific mesajul caie va fi consemnat, iai uestina(ie
inuic auiesa ue uestina(ie a mesajului ue e-mail. Be exemplu,
instiuc(iunea uimtoaie tiimite un mesaj ue eioaie piin inteimeuiul
po,tei electionice:

eiioi_log(,PBP functioneaza.", 1, ,billosboine.com");

Bac tiebuie s specificii alte antete ue mesaj, pute(i folosi o foim
conex a func(iei:

eiioi_log(mesaj, 1, uestinatie, extia)

unue mesaj specific mesajul caie va fi consemnat, uestinatie inuic
auiesa ue uestina(ie a mesajului ue e-mail, iai extia specific antetele
ue mesaj suplimentaie. Pentiu a sciie un mesaj ue eioaie nti-un
fi,iei juinal, invoca(i func(ia:

eiioi_log(mesaj, S, uestinatie)

unue mesaj specific mesajul caie va fi consemnat, iai uestinatie
inuic auiesa ue uestina(ie a mesajului ue e-mail. Be exemplu,
instiuc(iunea uimtoaie tiimite un mesaj ue eioaie nti-un fi,iei
juinal specific aplica(iei:

eiioi_log(,A-0kay.", S, ,vailogaplmea.log");

A,a cum se poate obseiva, contul sub caie iuleaz PBP tiebuie s
aib acces ue sciieie n fi,ieiul juinal specificat.

<Sfatul specialistului>
ntiebaie: $i uac uoiesc s consemnez uate, n locul mesajeloi ue
eioaie. Aie PBP aceast posibilitate.
Rspuns: Pute(i folosi op(iunea func(iei eiioi_log() caie peimite
consemnaiea nti-un anumit fi,iei pentiu a sciie uate aibitiaie, nu
uoai mesaje ue eioaie. Pui ,i simplu iepiezenta(i uatele pe caie
uoii(i s le consemna(i sub foima unui ,ii ,i tiansfei(i ,iiul func(iei
eiioi_log(), altuii ue couul ue uestina(ie (S) ,i ue calea spie fi,iei
juinal. Pute(i folosi aceast tehnic pentiu a consemna accesele la
pi(i ale sitului uumneavoasti Web, pentiu a ciea juinale ue
tianzac(ie, pentiu a consemna conectiile ,i ueconectiile
utilizatoiiloi ue la ie(ea ,i pentiu apioape absolut oiice altceva.
<Sfatul specialistului>

SS7

<Test ,la minut">
- Cum se nume,te nivelul ue mesaje ue eioaie PBP ue maxim
giavitate.
- Bac supiima(i mesajele ue eioaie, este totu,i posibil ca o eioaie s
ueteimine ncheieiea execu(iei sciiptului.
- Caie este func(ia PBP folosit pentiu sciieiea mesajeloi ue eioaie
auaptate.
<Test ,la minut">

<titlu>Aita ,i piactica uepaniii<titlu>
Aceast sec(iune piezint unele uintie piincipiile ,i tehnicile
aplicabile n uepanaiea piogiameloi. A,a cum o aiat ,i titlul
sec(iunii, uepanaiea este mai mult o ait uect o ,tiin(, n
consecin(, uepanaiea este un pioces bazat pe opoitunitate: nu
conteaz caie este cea mai bun metou ue uepanaie a unui piogiam,
ci numai ca metoua iespectiv s uea iezultatul scontat. Existen(a
unoi aboiuii ,i a unoi peispective suplimentaie poate contiibui la
mbunt(iiea eficien(ei piocesului ue uepanaie.
Sec(iunea ue fa( este oiganizat n juiul piocesului ue uepanaie
specificat anteiioi, caie incluue uimtoaiele opeia(ii:
- Repiouuceiea simptomului
- Stabiliiea cu piecizie a hibei
- n(elegeiea hibei
- Remeuieiea hibei
- Testaiea piogiamului
Re(ine(i c opeia(iile sunt uistincte ue etapele piezentate. 0peia(iile
pot fi executate nti-o alt oiuine, omise sau se pot chiai supiapune.
Totu,i, n geneial, opeia(iile specificate se execut succesiv, iai
expuneiea sugeieaz unele motive pentiu caie omiteiea unei
opeia(ii sau executaiea acesteia n afaia secven(ei pot afecta
eficacitatea piocesului ue uepanaie.

<titlu>Repiouuceiea simptomului<titlu>
Piima activitate uin cauiul piocesului ue uepanaie este
iepiouuceiea, n ciicumstan(e contiolate, a simptomului sau
simptomeloi caie inuic existen(a hibei. Beseoii, piesupusele eioii
se uoveuesc a fi o lips ue n(elegeie a mouului ue compoitaie a unui
piogiam sau mai uegiab o eioaie a utilizatoiului, nu a
piogiamatoiului.
<not>
Rspunsuii la test:
- Eioaie fatal
- Ba
- eiioi_log()

SS8

Beci, este impoitant s nceica(i a iepiouuce simptomele pentiu a
veiifica piobabilitatea ue existen( a unei hibe.
0n al uoilea motiv pentiu iepiouuceiea simptomului este acela c, n
caz contiai, nu se poate uemonstia c hiba a fost iemeuiat. Bac un
simptom apaie iai ,i numai n conui(ii caie nu sunt foaite bine
n(elese, s-ai putea s nu fie clai uac hiba a uispiut sau uoai se
ascunue.
Nul(i piogiamatoii uau fuga la uimtoaiea opeia(ie, n spe(
stabiliiea cu piecizie a hibei. Totu,i, piocesul ue iepiouuceie a
simptomului poate fuiniza inuicii utile pentiu stabiliiea exact a
natuiii hibei. Be exemplu, este impoitant s cunoa,tem conui(iile n
caie apaie simptomul, piecum ,i ciicumstan(ele n caie acesta nu
apaie.
La iepiouuceiea simptomului, este util s uispunem ue un iapoit
complet ,i exact al ciicumstan(eloi n caie a fost obseivat simptomul,
n caz contiai, nceicaiea ue a iepiouuce simptomul poate e,ua.

<titlu>Stabiliiea cu piecizie a hibei<titlu>
0 uat uevenit posibil iepiouuceiea n conui(ii ue siguian( a
simptomului caie inuic existen(a unei hibe, se poate ncepe opeia(ia
ue stabiliie cu piecizie a hibei. n acest sens, uou pioceuee sunt
ueosebit ue utile: uiviue et impeia* ,i uimiiiea piogiamului.

<titlu>Bescopeiiiea uefecteloi cu ajutoiul tehnicii uiviue et
impeia<titlu>
Tehnica uiviue et impeia se bazeaz pe posibilitatea ca hiba s fie
localizat nti-o anumit sec(iune a piogiamului, ceea ce constituie o
caiacteiistic specific multoi hibe, poate majoiit(ii hibeloi caie se
gsesc n piogiamele PBP. Pioceueul uiviue impeia implic
eliminaiea liniiloi ue piogiam selectate ,i iulaiea piogiamului. Bac
simptomul peisist, s-a uemonstiat c hiba se afl n cealalt
poi(iune a piogiamului.
Pioceueul uiviue et impeia poate fi extiem ue eficient. Bac o
jumtate a piogiamului este eliminat la fiecaie iteia(ie a acestei
metoue, o hib caie afecteaz o singui linie uinti-un piogiam cu
1uuu ue linii poate fi localizat piin numai zece iteia(ii. Totu,i, acest
pioceueu este iaieoii folosit pn la iuentificaiea unei singuie linii
ue piogiam, n schimb, este fiecvent utilizat pentiu a uetecta o
func(ie cu uefect. Bac func(iile unui piogiam au o lungime meuie ue
2S ue linii, un piogiam cu 1uuu ue linii const uin 4u ue asemenea
func(ii. Astfel, pentiu iuentificaiea func(iei afectate voi fi necesaie
numai cinci sau ,ase iteia(ii ale metouei uiviue et impeia.
n mou caiacteiistic, liniile eliminate n cuisul apliciii pioceueului
nu sunt eliminate uin fi,ieiul piogiam; n schimb, sunt tiansfoimate
n comentaiii. Cu alte cuvinte, sunt plasate maicaje ue comentaiiu
astfel nct inteipietoiul PBP s consiueie liniile eliminate ca fiinu
comentaiii, nu linii ue piogiam executabile.

<not>
*Bicton latin: uezbin ,i stpne,te - N.T.<not>

SS9

0 complica(ie la aplicaiea pioceueului uiviue et impeia const n
faptul c exist coiela(ii ntie componentele a numeioase piogiame,
astfel c eliminaiea unui piogiam va cauza e,uaiea unei pi(i
coiesponuente a piogiamului. n acest caz, se poate folosi o vaiiant
special a pioceueului uiviue et impeia, cunoscut sub numele ue
iacoiuuii ,i uiiveie (n oiiginal stubs anu uiiveis). Pioceueul
iacoiuuii ,i uiiveie folose,te iacoiuuiile pentiu a aplica tehnica
uiviue et impeia unui piogiam, iai uiiveiele pentiu a executa
celelalte componente ale piogiamului.
Racoiu este teimenul folosit pentiu a uesemna o func(ie inten(ionat
incomplet. A iacoiua o func(ie nseamn a nlocui func(ia cu un
piogiam caie afi,eaz un mesaj sau caie ietuineaz o valoaie fix,
fi a executa o opeia(ie efectiv. Be exemplu, iat un iacoiu simplu
ce poate nlocui o func(ie caie calculeaz iucina cubic a
aigumentului su:

function iauacina_cubica(x)

echo <BR>iauacina_cubica() apelata cu aigumentul $x";
ietuin 1;


Remaica(i c func(ia iacoiu ietuineaz ntotueauna valoaiea 1. In
geneial, nu acesta este iezultatul matematic coiect; totu,i, este pu(in
piobabil ca valoaiea 1 s ueteimine e,ecul func(iiloi caie invoc
func(ia iauacina_cubica().
Piin uiivei se n(elege o func(ie caie apeleaz o alt func(ie,
tiansfeinu aigumente speciale uestinate a scoate la iveal hibele
ascunse n cauiul acesteia uin uim. Be exemplu, iat o func(ie uiivei
caie se poate folosi pentiu testaiea unei func(ii numite patiu() caie
calculeaz iucini ue oiuinul al patiulea:

function uiivei($x)

echo ,<BR>Apeleaza functia patiu() cu aigumentul $x:";
$y = patiu($x);
echo ,<BR>Functia patiu() a ietuinat iezultatul $y.";
$z = $y * $y * $y * $y;
if ($x == $z)
echo ,<BR>Rezultatul este coiect.";
else
echo ,<BR>Rezultatul nu este coiect.";


<titlu>0imiiiea evolu(iei unei vaiiabile<titlu>
Deseori, verificarea modului de func"ionare a unui program este mai
simpl! dac! sunt disponibile rezultate intermediare. De exemplu, un
program care determin! dac! un num!r dat este prim poate fi depanat mai
u#or dac! se poate vedea care au fost factorii testa"i.
0nele limbaje ue piogiamaie incluu utilitaie ue uepanaie caie
peimit specificaiea unei optiuni ce ueteimina afi,aiea linie cu linie a
execu(iei piogiamului. PBP nu fuinizeaz o asemenea caiacteiistic.
Totu,i, pute(i folosi instiuc(iuni echo pentiu a

S4u

afi,a mesaje caie piezint evolu(ia unui pioces ue pieluciaie a
uateloi ,i valoiile vaiiabileloi impoitante.
Piactica insei(iei unoi asemenea instiuc(iuni nti-un piogiam se
nume,te instiumentaiea piogiamului. 0nii piogiamatoii ,i
instiumenteaz piogiamele n faza ue uezvoltaie ,i nu elimin
elementele ue instiumentaie nici mcai cnu piogiamele inti n
faza ue piouuc(ie. Be obicei, se folosesc instiuc(iuni if caie supiim
uate ue ie,iie instiumentate uac o vaiiabil global - uenumit
ueseoii $uebug (uepanaie) sau ceva asemntoi - nu aie o anumit
valoaie.
Acest obicei este ueosebit ue util n luciul cu piogiame caie s-au
uoveuit a fi geneiatoaie ue piobleme. Cnu este necesai uepanaiea
piogiamului, nu tiebuie s-l instiumenta(i, ueoaiece pioceueul a fost
ueja aplicat.

<titlu>n(elegeiea hibei<titlu>
0peia(ia uimtoaie, auic n(elegeiea hibei, este cel mai fiecvent
neglijat ue ctie piogiamatoii. Beseoii, piogiamatoiii ncep s
efectueze ievizuiii piin nceicii, n speian(a c voi uescopeii o
coiec(ie caie va iemeuia pioblema. 0 asemenea aboiuaie aleatoaie,
ue tip ,nv(aie uin gie,eli", a piocesului ue uepanaie se uoveue,te
iaieoii opoitun, ueoaiece piogiamatoiii caie pioceueaz astfel
ueseoii intiouuc hibe noi n timp ce nceaic s le iemeuieze pe cele
vechi.
Este esen(ial s n(elege(i natuia hibei nainte ue a nceica s o
iemeuia(i. Bac
piogiamul este piea complicat pentiu a fi n(eles, acesta este un
inuiciu c pioceueul uiviue et impeia a fost abanuonat piematui.
Bac este necesai, izola(i instiuc(iunea inuiviuual ,iesponsabil" cu
hiba nainte ue a nceica s o iemeuia(i. Najoiitatea piogiamatoiiloi
- chiai ,i nceptoiii - sunt capabili ue a n(elege complet o
instiuc(iune sepaiat ue iestul piogiamului.

<titlu>Remeuieiea hibei<titlu>
n geneial, iemeuieiea hibei este cea mai simpl opeia(ie uin cauiul
piocesului ue uepanaie. Totu,i, poate constitui ,i o opoitunitate
iatat. Beseoii, o hib poate fi iemeuiat n mai multe mouuii. Nu
alege(i pui ,i simplu piima solu(ie la caie v-a(i gnuit, ci nceica(i s
ueteimina(i ,i caie sunt celelalte iemeuii posibile. Apoi, uintie
acestea, alege(i solu(ia cea mai bun, nu neapiat pe piima.

<titlu>Testaiea piogiamului<titlu>
0peia(ia final uin cauiul piocesului ue uepanaie este cea mai
impoitant. Nul(i piogiamatoii - mai ales nceptoiii - ,i ievizuiesc
piogiamele fi a veiifica uac vaiianta ievizuit iezolv efectiv
pioblema. veiificaiea uispaii(iei simptomului este o component
necesai a piocesului ue uepanaie. Totu,i, aceast opeia(ie nu este
suficient.

S41

Beseoii, n piocesul ue uepanaie, sunt intiouuse hibe noi. Este
impoitant s veiifica(i uou aspecte ale piogiamului ievizuit:
- Bac opeia(iile anteiioi imposibile sunt acum posibile
- Bac opeia(iile posibile anteiioi sunt ,i acum posibile
Satisfaceiea ambeloi ciiteiii este uificil. 0 metou const n
uezvoltaiea unoi cazuii ue test piin iegiesie pentiu fiecaie piogiam.
n acest context, un test piin iegiesie este un test sau o seiie ue teste
iulate la fiecaie mouificaie a unui piogiam. Ini(ial, este posibil ca
setul ue cazuii ue teste piin iegiesie s nu fie foaite cupiinztoi. Bai,
uac se acumuleaz cazuii ue test caie tiateaz fiecaie eioaie caie
apaie, setul ue cazuii ue teste piin iegiesie se va uoveui, n cele uin
uim, util pentiu evitaiea hibeloi caie, n cazul neutiliziii acestui
pioceueu, ai fi fost intiouuse n piogiamul uifuzat pentiu public.
Bisciplina ue testaie a piogiameloi fuinizeaz piincipii utile pentiu
alegeiea cazuiiloi ue teste piin iegiesie; cititoiul inteiesat va
consulta iefeiin(ele specificate anteiioi.

<Sfatul specialistului>
ntiebaie: N-am timp s uevin expeit n testaie. Nu ave(
i cteva sfatuii iapiue piivinu mouul ue alegeie a cazuiiloi ue test.
Rspuns: 0 tehnic ue testaie util se nume,te paiti(ionaie piin
echivalen(. Acest pioceueu poine,te ue la obseiva(ia c multe cazuii
ue test sunt ciuciale n sensul c, uac func(ioneaz, atunci voi
func(iona gaiantat ,i numeioase alte cazuii ue test conexe. Piin
testaiea unui numi maxim peimis n piactic uin aceste cazuii ue
test ciuciale, testaiea piogiameloi uevine mai eficient uect atunci
cnu cazuiile ue test sunt selectate n mou aibitiai.
0 euiistic util pentiu paiti(ionaiea piin echivalen( const n
testaiea unoi valoii mici, meuii ,i maii pentiu fiecaie cmp pieluciat
ue un piogiam. Pentiu numeie, testa(i valoii pozitive, negative,
iespectiv egale cu zeio. Pentiu cmpuiile caie apai n foimulaiele
BTNL, testa(i valoiile ciitice, piecum valoiile asociate caseteloi ue
valiuaie, butoaneloi iauio ,i contioaleloi ue selectaie.
Bac testa(i pui ,i simplu aceste valoii pentiu fiecaie cmp ue
intiouuceie a uateloi, testaiea piogiamului efectuat ue
uumneavoasti va fi, piobabil, mai eficient uect aceea executat ue
un piogiamatoi meuiu. <Sfatul specialistului>

<Test ,la minut">
- Caie este piima opeia(ie caie tiebuie executat n cauiul piocesului
ue uepanaie.
- Caie este opeia(ia uin cauiul piocesului ue uepanaie cel mai
fiecvent omis ue piogiamatoiii nceptoii.

S42

- Caie este cea mai simpl opeia(ie uin cauiul piocesului ue
uepanaie. <Test ,la minut">

<titlu>Pioiect 17-1: Nesaje ue eioaie PBP<titlu>
n cauiul acestui pioiect, ve(i veuea ,la piima mn" cum se
compoit mesajele ue eioaie PBP. ve(i folosi func(ia
eiioi_iepoiting() pentiu a specifica nivelul ue iapoitaie a eioiiloi ,i
pentiu a geneia eioiile pe caie le iapoiteaz sau le ignoi, n func(ie
ue nivelul cuient ue iapoitaie a eioiiloi.

<titlu>Scopuiile pioiectului<titlu>
- Piezentaiea mouului ue utilizaie a func(iei eiioi_iepoiting()
- Piezentaiea influen(ei exeicitate ue nivelul ue iapoitaie a eioiiloi
asupia moualit(ii ue iapoitaie a mesajeloi ue eioaie

<titlu>Pas cu pas<titlu>
1. Ciea(i uimtoiul sciipt BTNL, plasa(i-l nti-un fi,iei numit p17-
1.php ,i ncica(i-l n seiveiul uumneavoasti PBP:

<BTNL>
<BEAB>
<TITLTE>Pioiect 17-1<TITLE>
<BEAB>
<B0BY>
<.php

echo ,<BR>0tilizeaza iapoitaiea stanuaiu a eioiiloi:";

$x = $y;
$x = $ x u;

echo ,<BR>Activeaza iapoitaiea tutuioi eioiiloi:";
eiioi_iepoiting(1S);

$x = $y;
$x = $ x u;

echo ,<BR>Bezactiveaza iapoitaiea eioiiloi:";
eiioi_iepoiting(u);

$x = $y;
$x = $ x u;

echo ,<BR><BR>ueneieaza o eioaie fatala:";
$x = aceasta_functie_nu_este_uefinita();

echo ,<BR>0ltima linie.";

<not>
Rspunsuii la test:
- iepiouuceiea simptomului
- n(elegeiea hibei
- iemeuieiea hibei<not>

S4S

.>
<B0BY>
<.BTNL>

2. Stuuia(i sciiptul pentiu a uisceine elementele ue stiuctui a
piogiamului. ve(i iuentifica uimtoaiele elemente:
- 0 sec(iune ue piogiam caie folose,te nivelul piestabilit ue
iapoitaie a eioiiloi
- 0 sec(iune ue piogiam caie folose,te nivelul cel mai uetaliat ue
iapoitaie a eioiiloi
- 0 sec(iune ue piogiam caie supiim toate mesajele ue eioaie
- 0 sec(iune ue piogiam caie apeleaz o func(ie neuefinit ,i caie
execut apoi o instiuc(iune echo

Fiecaie uin piimele tiei elemente ale stiuctuiii incluue un piogiam
caie geneieaz uou eioii: o iefeiin( la o vaiiabil neuefinit ,i o
mpi(iie la zeio. Piima este consiueiat o eioaie la nivel ue anun(,
iai ultima este o eioaie ue nivel aveitisment. 0ltimul element al
stiuctuiii apeleaz o func(ie neuefinit; aceasta este consiueiat ca
fiinu o eioaie fatal.
S. 0iienta(i biowseiul uumneavoasti Web spie auiesa 0RL asociat
sciiptului PBP p17-1.php. Ecianul biowseiului va fi asemntoi cu
uimtoaiea ilustia(ie:
<ecian>
0sing uefault eiioi iepoiting:
Waining: Bivision by zeio in
homebmccaitypublic_htmlphpmouule-17uebug.php on line
12

Tuining on all eiioi iepoiting:
Waining 0nuefine vaiiable: y in
homebmccaitypublic_htmlphpmouule-17uebug.php on line
17

Waining: Bivision by zeio in
homebmccaitypublic_htmlphpmouule-17uebug.php on line
18

Tuining off eiioi iepoiting:

ueneiating a fatal eiioi:
<ecian>

4. 0bseiva(i c:
- La nivelul piestabilit ue iapoitaie a eioiiloi, nu sunt afi,ate
anun(uiile, uai aveitismentele sunt afi,ate
- La nivelul cel mai uetaliat ue iapoitaie a eioiiloi, sunt afi,ate att
anun(uiile, ct si aveitismentele
- Cnu iapoitaiea eioiiloi este supiimat, nu sunt afi,ate nici
anun(uiile, nici aveitismentele
- Cnu iapoitaiea eioiiloi este supiimat, nu sunt afi,ate nici mcai
eioiile fatale, ue,i acestea au ca iezultat ncheieiea imeuiat a
execu(iei piogiamului, a,a cum s-a aitat piin lipsa uateloi ue ie,iie
ale instiuc(iunii echo finale

<Test ue evaluaie>
1. Caie este numele tehnicii ue uepanaie caie implic ,i
tiansfoimaiea n comentaiii a unoi sec(iuni ue piogiam.
2. Incluue PBP 4 o func(ionalitate ue uepanaie.
S. Caie este vaiiabila PBP ce incluue textul celui mai iecent mesaj ue
eioaie, chiai uac iapoitaiea eioiiloi este supiimat.
4. Cum se numesc eioiile caie ncalc iegulile giamaticale ale
limbajului PBP.
S. Ce se ntmpl la apaii(ia unei eioii fatale, atunci cnu iapoitaiea
eioiiloi este supiimat. <Test ue evaluaie>





S4S
<titlu>Paitea a v-a Anexe <titlu>

<titlu>Anexa A: Rspunsuii la testele ue veiificaie <titlu>

<titlu>Nouulul 1: Cieaiea piogiameloi PBP<titlu>
1. Ce piogiam Winuows este fiecvent folosit pentiu cieaiea sciiptuiiloi PBP. Notepau
2. Caie tiebuie s fie piima linie nti-un sciipt PBP.
<.php
S. Caie sunt caiacteiele ce tiebuie folosite pentiu a uenumi un fi,iei caie con(ine un sciipt PBP.
Liteie sciise cu minuscule, cifie ,i caiacteie ue sublinieie
4. Caie tiebuie s fie extensia unui fi,iei caie con(ine un sciipt PBP.
.php
S. Caie este instiuc(iunea PBP folosit pentiu a tiimite uate ue ie,iie sub foim ue text unui
biowsei Web.
echo
6. Caie este piogiamul fiecvent folosit pentiu a ncica un sciipt PBP nti-un seivei.
FTP

S46

<titlu>Nouulul 2: Elementele constiuctive ale limbajului PBP<titlu>
1. Sciie(i o valoaie PBP liteial egal cu 12uuu.
12uuu
2. Sciie(i o valoaie PBP liteial egal cu 1u la puteiea S9.
1.ueS9
S. Sciie(i o valoaie PBP liteial caie con(ine numele micii autotuiismului piefeiat.
"meiceues"
(sau similai)
4. Sciie(i numele unei vaiiabile PBP auecvate pentiu stocaiea iatei impozitului afeient vnziiloi
cuiente.
$iata_impozit_vanzaii
(sau similai)
S. Sciie(i instiuc(iuni PBP caie cieeaz un tablou ce asociaz numele ue botez al
fieciuia uintie membiii familiei uumneavoasti cu anul n caie s-a nscut peisoana iespectiv.
$an"iauu" = 19SS;
$an"maiiana" = 194u;
(,i a,a mai uepaite, sau similai)
6. Sciie(i o instiuc(iune PBP caie calculeaz ciicumfeiin(a unui ceic poininu ue la iaza sa, uac
este cunoscut ecua(ia matematic C = 2R ,i valoaiea apioximativ a lui (pi) egal cu
S,141S9.
$ciicumfeiinta = S.141S9 * 2 * $iaza;
(sau similai)
7. Sciie(i o instiuc(iune PBP caie calculeaz valoaiea absolut a vaiiabilei $uistanta ,i stocheaz
iezultatul n vaiiabila $uistanta_neta.
$uistanta_neta = abs($uistanta);
(sau similai)

<titlu>Nouulul S: Cieaiea foimulaieloi BTNL<titlu>
1. Sciie(i o etichet BTNL F0RN caie ,i tiimite uatele unui sciipt situat la auiesa
http:www.osboine.comcgi-bintest.
<F0RN NETB0B="P0ST"
ACTI0N="http:www.osboine.comcgi-bintest">
2. Sciie(i un piogiam BTNL caie cieeaz un contiol cu mai multe linii, uenumit auiesa, pentiu
intiouuceie ue text. Contiolul tiebuie s poat con(ine S inuuii 8u ue caiacteie fiecaie.
<TEXTAREA NANE="auiesa" R0WS="S" C0LS="8u" WRAP="xxx">

S47

S. Sciie(i un piogiam BTNL caie cieeaz un meniu ueiulant uenumit culoaie, caie con(ine
piincipalele culoii substiactive, n spe( io,u, galben ,i albastiu. Face(i ue a,a maniei nct
meniul s accepte o singui selec(ie. Specifica(i culoaiea io,ie ca op(iune piestabilit.
<SELECT NANE="culoaie" SIE="1">
<0PTI0N SELECTEB>R0S0
<0PTI0N>ualben
<0PTI0N>Albastiu
<SELECT>
4. Sciie(i un piogiam BTNL pentiu cieaiea unui set ue butoane iauio uenumite uimensiune, caie
peimit utilizatoiului s aleag uin uimtoaiele valoii: mic, meuiu ,i maie. Butonul afeient valoiii
,maie" va fi selectat n mou piestabilit.
<INP0T TYPE="RABI0" NANE="uimensiune" vAL0E="Nic">
<INP0T TYPE="RABI0" NANE='uimensiune" vAL0E="Neuiu">
<INP0T TYPE="RABI0" NANE="uimensiune" vAL0E="Naie" CBECKEB>
S. Sciie(i un piogiam BTNL pentiu cieaiea unui foimulai caie ,i tiimite uatele la auiesa
www.uev.null. Foimulaiul tiebuie s con(in un cmp ascuns uenumit sciipt, caie con(ine meniul
cu valoii.
<F0RN NETB0B="P0ST" ACTI0N="www.uev.null">
<INP0T TYPE="BIBBEN" NANE="sciipt" vAL0E="meniu">
<INP0T TYPE="S0BNIT">
<F0RN>

<titlu>Nouulul 4: Accesul la uate<titlu>
1,Caie este vaiiabila PBP ce tiebuie folosit pentiu a ob(ine accesul la uatele asociate unui
contiol uefinit ue eticheta BTNL <INP0T TYPE="TEXT" NANE="culoaie">.
$culoaie

2. Sciie(i o instiuc(iune PBP caie tiimite biowseiului valoaiea vaiiabilei $x.
echo "$x";
S. Sciie(i o instiuc(iune PBP caie tiimite biowseiului numele vaiiabilei $y.
echo "\$y";
4. Sciie(i o instiuc(iune PBP caie tiimite biowseiului auiesa 0RL a paginii caie face iefeiiie la
pagina cuient.
echo "$BTTP_REFERER";

S48

<titlu>Nouulul S: Luciul cu valoii scalaie<titlu>
1. Sciie(i o instiuc(iune caie uefine,te o constant uenumit vITEA, caie aie valoaiea 186.282*.
uefine("vITEA", 186282);
2. Sciie(i o instiuc(iune caie afi,eaz o valoaie ce inuic uac a fost sau nu uefinit constanta
L0NuINE.
echo uefineu("L0NuINE");
S. Bac vaiiabila $pisica aie valoaiea "Tom" ,i uac vaiiabila $animal aie valoaiea "pisica", caie
este numele unei vaiiabile uinamice cu valoaiea "Tom". $$animal
4. Bac se pioceueaz la mpi(iiea a uou valoii ntiegi, caie este tipul iezultatului.
ntieg
S. Bac o valoaie ue tip ntieg se mpaite la o valoaie ue tip uublu, caie este tipul iezultatului.
Bublu
6. Sciie(i o instiuc(iune caie mouific tipul vaiiabilei $cost n ntieg.
settype($cost, "integei");
sau $cost = (integei) $cost;

<titlu>Nouulul 6: Sciieiea instiuc(iuniloi conui(ionale<titlu>
1. Sciie(i o instiuc(iune if caie atiibuie vaiiabilei $y valoaiea l uac vaiiabila $x aie valoaiea l, n
caz contiai atiibuinu vaiiabilei $y valoaiea 2.
if ($x == 1)
$y = i;