Sunteți pe pagina 1din 10

EDITORIAL))INTRODUCERE ))

II

..

_
II~

))

doilea rand, cu aceasta exceptie, sintaxa pentru ~tergere seamanaca doua picaturi de apa cu sintaxa pentru selec!ie. La fel ca in SELECT putem folosi mai multe conditii ~iam putea ~terge toate inregistrarile uncle autorul este Mihai Eminescu ~i titlul caqii contine cuvantul poezit'.

LIKE

DELETE FROMcarti este echivalentul de ~tergereallui SELECT * FROM carti, adica va ~tergetoate inregistrarile din tabel. Nu il yom pune in aplicare dar
este biDe de ~tiut.

adauga sau ~terge coloane ~i indec~i, putem redenumi coloane sau chiar tabelul in sine ~iputem schimba tipul de date continut de 0 coloana. Sa adaugam 0 coloana, data, in care sa stocam data adaugarii car!ii in baza de date. Campul data al tabelului carli ne va fi util atunci cand yom afi~avizitatorilornoulli!iledin magazinpe primapagina.Elnu corespunde datei la care a fast editata cartea ci datei in care aceastaa ajunspe rafturilevirtualeale magazinuluinostru. Cele mai noi 10 titluri din librarie Ie-am afla astfel foarte u~or folosind urmatoarea interogare:

Ce ne facem insa daca implementam interogarea in aceasta forma in aplicatie ~i intr-o bulla zi primim spre vanzare aceea~i carte dar cu un pret diferit? Ar trebui sa rescriem interogarea pentru a ne adapta situatiei ~i atunci cautarea unei caqi ar fi racuta cu interogarea:

Dacaam folosiun campcare sacontina un numar unic de identificare pentru fiecare carte cautarea ar fi mult simplificata:

UPDATE
Atunci cand vrem sa modificam continutulunei inregistrari nu estenevoie sa 0 ~tergem~isa 0 adaugam in varianta noua, putem folosi UPDATE care are urmatoarea sintaxa:

Sa adaugam noua coloana, la sf'ar~itul tabelului:

Am scris gresit numele coloanei, sa 0 redenumim din "dat" in "data":

valoare

UPDATE modifica con!inutul unuia sau mai multor campuri in func!ie de condi!iile specificate. Sa modificam, de exemplu, in coloana autor toate inregistrarile Mihai
Eminescu ~isa Ie i'nlocuim cu M. Eminescu:
UPDATE carti

Ne aducem aminte ca exista tipul DATE ~ica 0 data cum e 12-12-2003near putea fi mai utili daca s-ar afla intr-o coloana de tip DATE decat intr-una de tip TEXT a~a ca yom modifica tipul de date al noii coloane:

WHERE

Executati SELECT *FROM carti pentru a observa modificarea. Condi!iilepotfi extinse lafel cain sintaxa SELECT. In urmatoarea interogare yom modifica campul descriere ale tuturorinregistrarilor al CaraT titlu contine cuvantul "poezii" ~i campul descriere este gal:

Ca sa adaugam 0 coloana altundeva decat la srar~it, illITedescriere ~idata spre exemplu, folosim ALTER TABLE in felul urmator:

INDEC~I
aDd

Un exemplu de id din viata reala imi vine in minte: ati fast vreodata la un centro de inchiriat casete video? Va amintiti ordinea in care eraupuse casetele in rafturi? Un patron de centru de inchirieri numeroteazafiecarecaseta nOliprimita ~i0 pune la coada, in ordinea numerotarii, nu va cauta sa vada uncle ar intra din punct de vedere alfabetic, mai ales ca titluri precum "The Firm" ar putea fi puse ~i sub litera F ~i sub litera T, dupa cum considera fiecare, ~iatunci confuzia ar fi ~i mai mare. In plus ca sa adauge titluri noi in lista de casete disponibile nu vatrebui sarescrietoatalista, ci vaadauga claar titlurile noi la coada, in ordinea numerotarii. Dumneavoastra puteti astfel sa aflati rapid ce e nOliclaar aruncand 0 privirepeultima pagina a ofertei.Atunci cand cereti 0 caseta intr-un centro de inchirieri specificativanzatoarei numarul sub care se gase~tetitlul in lista, altfel ei i-aTlua cateva minute bune sa caute un film anume din cateva sute. Intr-o baza de date id-ul serve~teaceste functii la fel ca in viata de zi cu zi. Sa modificam tabelul carti astfel incM fiecare carte sa aiM un id unic:

Astfel, toate caqile tara descriere al caraT titlu continea cuvantul poezii au acum descrierea Carte de poezii.

eel mai folosit tip de index este id-ul. Id-ul este un numar unic de identificare pentru un element distinct (un rand) al unuitabel. Avalidstructuratabelului carti in forma actuala, pentru a alege "Romeo si Julieta" de William Shakespeare, interogarea ar arata in felul urmator:

ALTER TABLE
ALTER TABLE ne permite sa schimbarn structura unui tabel existent. Putem

SET INSERT ID=# este folosit ca pentru fiecare carte deja adaugata sa fie pus un id unic. De asemenea, pentru toate caqile ce Ie yeti adauga de acum inainte va exista un id unic, incrementat automat.
CHIP SPECIAL - SITE DINAMIC

Sa ne folosim de index pentru a executa opera!ii in tabel:

un text mult mai lung. Daca scriem intr-un document text numele "Isaac Asimov" vedem ca acesta ocupa 12 bytes in timp ce un numar din 3 cifte (presupunand ca idul autorului ar fi campus din 3 cifte) ocupa doar 3. Astfel inlocuind elementele repetitive dintr-un tabel cu un id facem 0 economic serioasa de spa!iu. Sa facem, deci, un nOli tabel: autori,

Tema: procedati in acela~i fel cu fiecare nume de autor din tabelul caqi. Acum ca avem id-uri numerice in lac de nume in coloana id_autor, sa modificam tabelul carti ~i sa transformam tipul campului id autor din TEXT in SMALLINT:

Valoarea id carte a acestei ultime inregistrari este 9. 0 folosim pentru a efectua modificari:

Cele doua tabele arata acum a~a:

Rezultatul va fi:

~isa redenumim campul autor din tabelul carti in id autor.

Normalizarea
Normalizarea inseamna structurarea tabelelor bazei de date in a~a fel incat datele din acestea sa ocupe cat mai rutin spa!iu pe hard disc, fiind astfel deosebit de utila. Chiar daca spa!iul nu poate parea 0 problema, trebuie sa lua!i in consideraTeposibilitatea de a fi nevoit sa va extinde!i intr-o zi peste numarul de megabi!i oferit de contractul incheiat cu ISP-ul, din lipsa de spa!iu.De ce saplati!i mai mult cand pute!i sa normaliza!i? Normalizarea este 0 practica bulla ~i va recomand sa 0 lua!i in calcul ori de cate ori face!i 0 baza de date. Sa studiem pentru un moment tabelul cartialbazeinoastre de date.In momentul de fa!a el este structurat in felul urmator. Nu ii yom modifica deocamdata tipul de date pe care il contine. 4\r trebui sa revenim ulterior la t~belui autori, sa cautam id-ul corespondent fiecarui autor ~i sa modificam manual fiecare camp in parte. i Vom reduce numarJl de operatii necesafe cu ajutorul fupctiei UPDATE. Adaugamintai autoru(innoulfabel,aflam id-ul unic repartizat de cafre MySQL ~i apoi inlocuim in tabelul carti numele autorului cu acest id.

Putem "uni" date1edin cele douatabele astfel incat sa ne fie afi~ate numele ~i titlul pentru fiecare imegistrare:

IIi:

Aceasta

interogare

ia coloana

nume - autor din tabelul autori ~i coloana

Ce s-ar intampla daca am avea toate caqile scrise de Isaac Asimov? Numarul acestora depa~e~te400 ~i coloana autor ar contine de tot atatea ori textul "Isaac Asimov". Ce putem face este sa cream un nOlitabel pentru autori cu doua campuri: id_autor ~i nume_autor ~i sa inlocuim campul text autor din tabelul ciir!icu un camp numit tot id_autor in care pentru toate caqile unui autor sa punem id-ul din tabelul de autori. In acest mod campul va contineun numardin catevacifte in lac de
CHIP SPECIAL - SITE DINAMIC

titlu din tabelul caqi ~iIeasociazadura idul autorului care este unic. Daca una din coloanele pe care vrem sa Ie afi~am are acela~anume in cele doua tabele, 0 putem apela ca nume_tabe1.nume_coloanaastfel incat sa nu existe ambiguitati:

In aplica!ia no astra va trebui sa avem caqile ordonate dura domenii. Nu yom

--

--

EDITORIAL II INTRODUCERE n

_
.
n

I}

II

default

amesteca romanele de razboi cu manualele ;;colare;;i cu poeziile! Ne va trebui in consecinta 0 noua coloana in tabel, pentru domeniul cartii: Legendele Olimpului vor apaqine domeniului "Pove;;ti", cartile de poezii domeniului Poezii ;;i a;;a mai departe. Tema: modificati tabelul carti pentru a adauga 0 coloana id_domeniu;;i creati un nOli tabel domenii cu JOlla campuri:
id - domeniu ;;inome
-

folosi pentru a afla toate comentariile aferente unei carti, cu ajutorul interogarii

Campul id- tranzactie corespunde celui din tabelul tranzactiiiarcampulid _carte celui din tabelul carti. Campul nr - buc ne va servi atunci dnd un utilizator cumpi'ira mai multe bucati din aceea;;i carte intr-o tranzactie ;;i de asemenea pentru a putea face statisticile pentru cele mai vandute carti. Introduceti cateva inregistrari in tabel folosind id tranzactie din tabelul tranzactii ;;i mai multe id_carte din tabelul carti:

domeniu. Adaugati

numelede domeniipentru ci'irtile baza din de date ;;iid-urileacestorain tabelul ci'irti, conformcu id-urile din tabelul domenii. Tema: afi;;atititlurile cartilor din baza de date ;;i domeniile de care acestea apartin (ca in exemplul de mai sus, cu tabelul autori):

Pentru urmarirea vanzarilor yom folosi JOllatabele, tranzactii ;;ivanzari. Sa presupunem ca Pop Ion cumpara Jolla cartiin I martie ;;irevinepentru a cumpara inca alte trei carti in 2 martie. In data de 3 martie cand viTIbanii pentru prima comanda noi yom ;;tica trebuie sa trimitern ni;;te carti lui Pop Ion Jar nu ;;tim exact care! lata de ce, pentru fiecare comanda, indiferent de numarul cartilor cerute, va trebui sa folosim un numar unic de identificare, numar pe care 11 tinem in tabelul tranzactii alaturi de celelalte informatii care ne intereseaza:

In tranzactia cu id_tranzactie 1 s-au vandut: 1 carte cu id_carte 2, 1 carte cu id_carte 3 ;;i 30 de carti cu id_carte 4. Am invatat in acest capitol cum sa facem 0 baza de MySQL date ;;i cum sa Iucramcu ea pentru a obtinedatele de care avem nevoie. Inainte de a trece Ia capitolul urmator insa trebuie sa va spun ca pe CD yeti gasi dtiva clienti vizuali pentru serverul MySQL cu care va yeti putea construi structurabazei'-- date mult mai de
u;;or. V-am "chinuit" cu sintaxa in Iinia de comanda deoarece mai tarziu, dnd yom lucra cu baza de date prill intermediul PHP, va fi necesar sa ;;tim cum se introduc sau se extrag date folosind comenzi SQL. In continuare yom invata bazele programarii PHP urmand ca apoi sa folosim cuno;;tintele acumulate in aceste Jolla capitolepentru a obtineinformatiidin baza de

Deocamdata avem in baza de date tabelele carti, autori ;;idomenii.In continuare va trebui sa mai adaugam unul. Ne reamintim ca la fiecare carte vizitatorii no;;tri au posibilitatea sa-;;i poata imparta;;iimpresiile. Pentru aceastayom crea un nOlitabel, comentarii, ale carui campuri nu Ie voi mai descrie deoarece numele ;;itipullor stint de ajuns de clare:

Am setat campul data- tranzactie ca TIMEST AMP (10) pentru ca astfel el va putea fi setat automat de MySQL la fiecare noua inregistrare ;;iva contine data inserarii inregistrarii in format YYYYMMDD. Executati urmatoarele Jolla interogi'iri:

date prill intermediul PHP ;;i a Ie afi;;a utiIizatoriiorintr-o pagina de web.

Tabelul vanzari va contine informatiile despre cartile vandute in fiecare tranzactie:

Campul id_carte din acest tabel ne va

CHIP SPECIAL

SITE DINAMIC

EDITORIAL
})

})

.))

CREARE SITE))

ADMINISTRARE

)) TIPS&TRICKS

PHP

Program are pentru toti


Ca limbaj de programare, PHP este foarte u~or de invatat dad elementele programarii sURfexplicate pe intelesul tuturor. Acesta este unul din scopurile articolului de rata: de a initia orice novice in tainele programarii PHP. Datorita similaritatii intre limbajele de programare de uz comun, cunoscand PHP va fi floare la ureche sa treceti apoi la VBScript, Java san chiar C. Nu i-am uitat pe programatorii experimentati in alte limbaje care vor afla in acest capitol particularitatile PHP.
HP este limbajul ideal pentru construirea de pagini web dinamice. Este uorde invatat,open-source,poate fi rulat pe mai multe platforme i se poate conectalamai multetipuride bazede date. Cel mai important aspect allimbajului este insa posibilitatea de a fi imbricat cu cod HTML. Putem astfel crea pagini HTML statice i din lac in lac, acolo unde este nevoie, sa introducem dinamism cu ajutorul PHP. Sa luam prima pagina a site-ului www.chip.ro de exemplu. Mareparte din structura sa este compusa din cod HTML static (meniurile, tabelele, aranjamentul in pagina). Din lac in lac codul HTML este intercalat cu cod PHP care extrage din baza de date cele mai noi tiri. In momentul in care apelatipagina, acestcodesteparsat (analizat linie cu linie i executat) pe server i este afiata 0 pagina HTML tara sa titi ca pentru crearea ei s-a tacut 0 conexiune la baza de date, s-au extras informatiile de acolo iau fast ordonatepentru afiare. tipurile iar pentru a lucra cu instructiuni trebuie sa aflam ce sunt structurile de control i functiile.

Variabile
0 variabila este 0 zona de memorie caruia i se da un nume pentru a putea fi recunoscuta ulterior i pentru a ne putea referi mai Hlrziula ea. Sa ne imaginam ca lonel iGigel au urmatoarea conversatie: lonel: pori aduna doua numere? Gigel: Da. Care este primul numar? lonel: Primul numar este 3. Al doilea numar este 2. Gigel: Rezultatul adunarii este 5. Toate cele trei numere din conversatia de mai sus Ie putem considera variabile. Gigeltinemintevaloareaprimului numar, 2, apoi tine minte valoarea celui de-al doilea numar, 3, dupa care Ie aduna i obtine rezultatul: 5. Discutia ar putea continua in felul urmator: lonel: Cel de-al doilea numar este acum 6. Care este rezultatul adunarii? Gigel: Este 9. lonel a schimbat valoarea celui de-al doilea numar, rezultatul fiind de aceasta data 9. Putem considera numerele respective ca fiind variabile iatunci codul PHP pentru prima adunare ar fi:

explozive a numarului site-urilor bazate

pe PHP.Intre2000 i 2002 numarullor a


crescut cu peste 13130% in timp ce numarul site-urilor bazate pe tehnologia ASP doar cu 278%, Java Server Pages cu 1594% i ColdFusion cu 429%. Pe langa manipularea continutului paginilor de web, PHPpoate trimite headere HTTP pentru autentificare, seta cookie-UTisau redirectiona utilizatorii. Mai mult, cu ajutorul bibliotecilor exteme de functii poate parsa fiiere XML, crea i manipula imagini, animatii Shockwave Flash, PDF-uri sau se poate conecta la un server de mail iar acestea sunt doar cateva din functiile pe care Iepoate indeplini.

Fiti gata...
In continuare va voi indruma prill elementele de baza ale PHP. Aezati-va confortabil, deschideti un editor de text, asigurati-va ca serverul web este pomit i puneti-vacenturile de siguranta. Varecomaud sarulati chiarvoi exempleleprezentatein continuaredeoareceaayetiintelege foarte Uofcum functioneaza PHP la server i care este rezultatul in browser. Puteti folosi orice editor de text. Notepad este bun pentru inceput dar puteti alege sa folositi unul din editoarele PHP de pe CD. Salvati fiierele cu extensia php, in document root (c:\Program Files\Apache Group\Apache\htdocs\) i Ie yeti accesa in browser la adresa httv:/ /localhost/numefi!jier.vhv.

Pe locuri...
Limbajul PHP s-a "nascut" in 1994 din nevoia lui Rasmus Lerdorf de a afla ciite persoane ii vizualizeaza CV-ul online. El a denumit setul de scripturi create PHP, acronimul pentru Personal Home Page. Pe parcursul urmatorilor trei ani limbajul a evoluat dar adevaratul succes a inceput sa il cunoasca de dnd Zeev Suraski iAndi Gutmans au rescris motorul PHP de la cap la coada, motor care poarta din versiunea 4 a PHP numele Zend, 0 combinatie de litere din prenumele creatorilor sai: Zeev i Andi. Fiind open-source, PHP beneficiaza de suport activ din partea comunitatii online, acesta fiind i motivul creterii
CHIP SPECIAL
-

Valoarea variabilei $total este suma celor doua numere, 5 in acest caz. La a doua operatie de adunare Gigeltine minte deja valoarea primului numar, schimba valoarea celui de-al doilea i obtine un nou rezultat:

Start!
Programarea de orice rei, nu doar PHP, are doua elemente de baza: date Ie i instructiunile. Pentru a lucra cu datele trebuie sa intelegem ce sunt variabilele i

Valoarea variabilei $total se schimba, deoarece am schimbat unul din elementele ecuatiei. Intelegem acum de ce sunt numite variabilele aa: pentru ca valoarea lor poate fi schimbata ori direct, cum am schimbat in a doua operatie valoarea lui $al_doilea_numar din 3 in 6, ori ca

SITE DINAMIC

EDITORIAL ))

I
urmare a dependentei lor de alte variabile, ai?acum se schimba valoarea variabilei $total in functie de valorile lui $primul_numar i?i$al_doilea_numar. Pentru a intelege mai bine conceptul de variabila, putem face 0 comparatie cu algebra. Daca luam un numar x i?iii dam valoarea 1, x+1= 1, x+2=2. Dacii x=7, x+1=8 i?i x+2=9. Analog, putem scrie urmatorul cod PHP intr-un fii?iernumit algebra.php:
<html> <body>

))8))

))

<7
x ea fiind

$x+1;

print "Rezultatul adunarii lui $x eu este

/*

aeum

sa

setaro

valoarea

fiind 7 7; $rezultat

VOIDaduna tot

cod HTML dura cum puteti vedea in exemplul alaturat. Puteti chiar crea pagini HTML tara pic de cod PHP in ele ~isa Ie dati extensia php. Atata vreme dit parser-ill PHP nu "vede" tagurile <7...7>, el va trimite pagina HTML neschimbata ciitre server. putem rune diacritice in cadrul unui string insa pentru ca browserul sa Ie afi~eze corect va trebui sa specificam in <head> setul de caractere folosit, la fel ea intr-un document HTML. - valoarea unei variabile poate fi schimbata dura necesitati (a~a cum am schimbat valoarea lui $x) sail ea va fi schimbata automat in functie de celelalte variabile de care depinde(a~acumvaloarea lui $rezultat s-a sehimbat in funqie de valoarea lui $x). - pentru a afi~a rezultatul folosim print, altfel valorile variabilelor ar fi fast schimbate dar nu ar fi fast afi~ate pe eeran. Pentru mai multe detalii privind folosirea lui print va recomand sa consultati oglinda alaturata.
-

liniade textcareincepeeu IInu este

afi~atii,la fel ca textul demarcat de 1*... *1~i nu apar nici macar daca dam View Source in browser pentru fi~ierul algebra.php accesat. Acestea sunt comentarii care nu sunt procesate de catre server ca fiind cod executabil ~i nici nu sunt trimise mai departe catre browser. In aplicatiile mai mari de cateva linii este util sa comentiim codul pentru a ne orienta mai bIDesail a explica actiunile intreprinse. Diferenta intre cele doua notatii este ca II este folosit pentru a corneum 0 singura linie de text in timp cel*... */poatefi folositpentru a delimita un comentariu ce se extinde pe mai multe linii. Marcatorii de eomentariu se potfolosi ~iatunci canddorirneao bucatiide cod sa nu ruleze. Puteti sa testati acest lucru comentand una din liniile care conlin instructiunea print ~iruland din nOlipagina. Numele variabilelor trebuie sa cantina doar litere (a-z, A-Z ~icaracterele ASCII de la 127 la 255), cifre ~i liniute de subliniere (underscores) ~ipot incepe doar cu litere sail liniute de subliniere. Astfel, $0- variabila, $- altaVariabila ~i$- inca_0- variabila- sunt

Folosirea functiei print

print "Rezultatul adunarii lui este $rezultat<br>"; ?>

</html>

Salvati fii?ierulin document root (directorul c:\Program files\Apache Group\Apaehe\htdoes\)i?iaccesati httv:/ /localhost/algebra.vhp. lata cum va arata pagina afii?ata:

Varia bile
R.zu1tatuladunariilui 1 cu 1 ..t. 2 R.zu1tatul adunarii lui 7 cu 2 ..to 8
"4

Rezultatul rulariiin browser a fi!?ierului algebra.php Sa diseeam codul pentru a invata diteva lucruri:
-

toate instructiunile PHP se termina .

cu punct i?ivirgilia. Omiterea semnului "punet i?ivirgilia" este cea mai frecventa grei?eala pe care 0 fac programatorii ineepatori.
-

codul PHP incepe intotdeauna cu <7


CHIP SPECIAL - SITE DINAMIC

~ise termina eu 7>. El poate fi imbricat cu

----

iii

EDITORIAL n

MySQLn8n

ADMINISTRARE n

nume corecte in timp ce $o-noua-variabila, $2var ~i$a_~aptea nu suntlnainte de a trece mai departe, va dati un sfat: dati variabilelor nume care sa defineasca pe cat posibil destinatia variabilei, mai ales daca aceasta va fi folosita de mai multe ori in cadrul programului. Daca vi seva cere samodificati aplicatia dura doua luni de la crearea ei 0 sa preferati sa inghititi tastatura mai degraba decat sa va chinuiti sa atlati din 500 de linii de cod ce reprezinta $al sau $xGvHKx.

ne putem referi la el atunci cand cerem filmul vanzatoarei, folosind numarul respectiv. Sa vedem un exemplu:

sa definim intai variabila sau sa-i decIaram tipul. $i = I va fi folosit ca integer sau string in functie de contextul in care este folosit Daca doriti sa fortati evaluarea unei variabile ca un anumit tip puteti folosi conversia de tip, astfel: $i = (int) $i sau $i= (bool) $i. MaimuItedetaliidespre conversia tipurilorgasitiinmanualul PHP de pe CD, in sectiunea Type casting.

Operatori

Tipuri de variabile
Variabilele pot fi de mai multe tipuri, nudoarnumere cum amvazutpana acum. Daca programarea PHP ar fi fast despre algebra ~inumere, n-a~fi fast aici povestindu-va cat de minunata este! PHP are opt tipuri de variabile dintre care vi Ievoi descrie pe cele mai importante 4.
integer Variabilele de tip integer Stintnumere intregi: 3, 783, -56, 0, -1 sunt valori integer. string Un string este 0 succesiune de caractere (~ir). Atunci cand stint folosite in codul PHP stringurile trebuie incadrate intre ghilimele ~i toate caracterele speciale din ele precedate cu semnul \ (detalii ~iexplicatii gasiti in oglindafuncpa print). lata ~i cateva exemple de stringuri: Cel mai des intalnit operator este eel de atribuire, definit prill semnul =. Am observat din exemplele de palla acum ca daca scriem $x = I nu inseamna ca $x este egal cu I ci ca i s-a acordat valoarea 1. De~i la prima vedere egalitatea ~iacordarea valorii pot parea a fi acela~i lucru, ele nu sunt! Sa consideram urmatoarele variabile:
$x

Indexarea unui array poate fi definita de caire programator, a~acum ~ipatronul unui magazin de casete video i~i poate numerota casetele dura cum ii place.

Este $x egal cu $y? Nu este. Valoarea lui $x este 1 in timp ce valoarea lui $y este 7. Folosind operatorul= de atribuire ii putem acorda lui $x valoarea lui $y:
$x $y $x

11I1

boolean Tipul boolean define~te 0 valoare de adevar, TRUE (adevarat) sau FALSE (fals). Spre exemplu, yom scrie mai tarziti 0 functiepentru sectiunea de administrare a site-ului cu ajutorul druia yom verifica daca utilizatorul este logat ca administrator.Dupa ce va face toate verificarile Decesare, functia noastra va retuma 0 valoare de adevar: TRUE daca este logat sau FALSE dad nu este ~i astfel yom ~tidaca sa ii acordam sau nu acces in sectiunea de administrare.
array Puteti sa considerati un array ca fiind 0 colectie de obiecte (matrice). Pentru a intelege conceptul, sa ne amintim de magazinul de casete video de care va povesteam intr-un capitol anterior. Va spuneam ca fiecare film este indexat cu un numar ~i astfel CHIP SPECIAL - SITE DINAMIC

Arrayurile pot fi indexate ~i asociativ, adica putem folosi stringuri in lac de integers pentru a ne referi la valorile unui array:

Abia acum $x este 7 ~ieste egal cu $y care are ~i el valoarea 7. Nu va lasati in~elati de asemanarea cu semnul = din matematica nici macar atunci cand faceti operatii complexe. Daca scriem $rezultat = $x + $y nu inseamna ca $rezultat este egal cu sumacelor doua, cica i-am atribuit (acordat) valoarea sumei celor doua. Operatorul de egalitate este == ~i se folose~te eel mai des in propozitii conditionale, pentru a testa egalitatea. Opusul sau, !=,este operatorulde inegalitate ~ise folose~tein acela~iscar. Pentru a va lamuri cum sta treaba cu egalitatea ~i atribuirea, testati urrnatorul cod:

Pentru avansati: in PHP nu este nevoie

,;,,;;;r,

EDITORIAL II

))

II

.
.

})

-~.
oricare din valorile verificate e TRUE. Retumeaza FALSE doar daca amandoua StintFALSE.

Am seris munarul5 ,; un t.xt o"".e"".

operatorul && (AND) ... daca atat numele cat ~iparola

1nu .st. .gal eu7

if(numele_este_valid && parola este


buna)

Rulati codul ~i apoi modificati valorile lui $x ~i $y cu $x = 13 ~i$y = 13. Operatorul de ega1itate se folose~te pentru a campara egalitatea a doua vaIorioAlti operatori folositi pentru compararea valorilor variabilelor Stint: > mai mare >= mai mare sau egal < mai mic <= mai mic sau egal

test3.php II atribuirea concatenarii

Stint valide putem acorda utilizatorului acces in sectiunea de administrare.

Operatorul &&retumeaza TRUE doar dad ambele valori verificate StintTRUE. EI retumeaza FALSE daca oricare din ele este FALSE (sau daca amandoua Stint FALSE).
II pe ecran va fi afi~at "Un text oarecare ~i numarul 6"

Structuri de control
Structuri1e decontrolsuntinstructiunile care aduc flexibilitatea in programare ~i u~ureaza munca programatorului. Am vazut cum putem defini 0 variabila $x ~icum putem obtine ca rezultat 0 alta variabila $total = $x + 1.Putem, cu ajutorul structurilor de control sa manipulam variabile1e~irezultatele cu minim de cod. Vom vedea cum, cu ajutorul lui while ~ifor putem folosi aceea~i bucata de cod pentru mai multe variabile tara sa trebuiasca sa rescriem codul pentru fiecare valoare a variabilei. Vom invata ~i structurile if... else if... else ~i switch cu care yom putea executa cod doar daca stint indeplinite anumite conditii. while Structura de control while este folosita pentru arula acela~icod pentru mai multe valori ale unci variabile oarecare $x, tara sa trebuiasca sa rescriem codul pentru $x = 1, $x = 2 ~i a~a mai departe pentru fiecare valoare a variabilei. Sa folosim pentru testare un cod asemanator ce1uicu care am pomit la inceputul capitolului ~i sa vedem cum structurile de control ne pot u~ura munca.

$y

este

mare

Un text oarecare

51 numaru16

$y)

Operatorii pentru stringuri Stint . pentru concatenare ~i .= pentru atribuirea concatenarii. Ace~ti operatori stint folositi pentru a uni stringuri, in felul urmator:

test1.php II concatenarea stringurilor

Operatorii logici va vor veni la indemana in executia scriptului atunci cand aveti nevoie sa lucrati cu valori de adevar. Vom face un exercitiu de imaginatie pentru a explica functia ~iutilitatea operata; rilor logici. Sa presupunem ca la intrarea in sectiunea de administrare avem un formular care cere numele ~i parola de acces in sectiune. Scriptul PHP ar putea verifica aceste informatii pentru a autoriza accesul in sectiune folosind operatorii logici astfel: - operatorul ! (NOT)

II pe ecran va fi afi~at"Am scris un text oarecare"

~.

Operatorul ! retumeaza TRUE daca valoarea initiala de adevar e FALSE ~i FALSE dacavaloareainitialaeste TRUE. - operatorulll (OR)
if(numele_este_valid II parola este

buna)

... verificadacanumelesauparo-

test2.php II concatenarea stringurilor cu variabile

pe ecran va fi afi~at "Am scris numarul 5 ~iun text oarecare"

la stint valide ~idaca oricare din ele este, retumeaza valoarea de adevar TRUE. In acest exemplu de pseudocod daca numele ar fi valid dar parola nu, i-am acorda utilizatorului acces mai departe, ceca ce nu e de dorit. Trebuie sa fim siglin ca ~inumele ~iparola stint valide.

Operatorul II retumeazaTRUE daca

Sa presupunem ca ar trebui ca pentru toate numerele de la 0 la 99 ar trebui sa CHIP SPECIAL - SITE DINAMIC

- -- -- - ----

.-

~:

.))

CREAREITE S

II

ADMINISTRARE TIPS&TRICKS )

calculam variabila $rezultat ~isa afi~am textul "Rezultatul inmultirii lui $x cu 5 este $rezultat". Daci'iar fi sa scriem codul de inmultire ~i afi~are pentru fiecare valoare a lui $x de la 0 la 99 ne-ar apuca dimineata. Pentru aceasta yom Colosi while, eel mai simplu tip de loop ~iyom scrie 0 singura bucata de cod care va prelua automat toate valorile lui $x de la 0 la 99 ~ipentru fiecare va inmulti cu 5 ~i va afi~arezultatul automat. Sa vedem ~i cum:

actiune cu $x inainte de a relua loop-ill, nu doar incrementarea. In exemplul urmator yom afi~a rezultatul inmultirii lui $x cu 2, apoi ii yom atribui lui $x valoarea rezultatului inmultirii ~i yom repeta loop-ill cu noul $x palla cand $x este mai mic decat 23:

for for este echivalentul lui while ~i functioneaza in mare masura la eel, cu cateva mici diferente. Sa rescriem cu ajutorul lui for codul din fi~ierul incrementare.phppentru a obtineacelea~i rezultate:

($x

0; $x < 100; $x++)

Salvati acest cod intr-un fi~ier incrementare.php ~iaccesati-l din browser pentru a vedea rezultatul.

x este 3 si rezultatul este 6 x este 6 si rezultatul este 12 x este 12 sirezultatul este 24 srarsit!

Rezultatul Rezultatul Rezultatul Rezultatul Rezultatul

'i'runultirii 'i'runultirii 'i'runultirii 'i'runultirii 'i'runultirii

1ui 0 1ui 2 1ui 4 1ui 6 1ui 8

cu cu cu cu cu

5 5 5 5 5

este este este este este

0 10 20 30 40

Structura for in actiune!

R"""'Iul"""uI\irii"" " '",.".", R""""""""'uI\irii""92 ,"5.". 460

Iii
II

R""""""""'uI\irii""","' "to470 Rm>IIo1ul"""u!Um"'" '"' "to'" R"""""'...u!Um"""',"'"""" R"""""""uI\irii""97,"' "to"" R"""""'...u!Um""" '"' .".... R"""""""u!Um""99,"',""'" ""oill

R_""""'uI\irii""93,"',"""

inmultirea automata a numerelor de la 0 la 99 cu 5.

Savedem, pas cu pas, cum functioneaza while. Int~iiam definit valoarea initiala a lui $x. Apoi, pentru fiecare valoare a lui $x mai mica strict decat 100 (0,1,2,3... palla dnd $x ajunge la 99) se calculeaza variabila $rezultat ~i se afi~eazatextul, jar in final $x este incrementat (adunat) cu 1, ci'ipatandastfel 0 noua valoare, ~iprogramul 0 ia din non de la carat cu $x = 2, apoi cu $x = 3 ~itot a~apalla dnd $x ajunge la 100. Cand $x ajunge la 100 conditia din while, $x < 100, nu mai este indeplinita a~a ca PHP inceteaza rularea loop-ului ~i continua cu restul de cod. $++ este 0 expresie rutin mai speciala ~ieste echivalenta cu incrementareacu 1.$x++ este astfelprescurtarea pentru $x = $x + 1. Desigur, putem intreprinde orice
CHIP SPECIAL - SITE DINAMIC

lata, in romane~te, ce am Iacut: am luat valoarea initiala a lui $x, 3, ~i am inceput loop-ill. La prima rulare se calculeaza variabila $rezultat care este $x * 2 = 3 *2 = 6 ~ise afi~eazape ecran "x este 3 ~i rezultatul este 6". Apoi, folosind operatorul de atribuire ,,=" in $x = $rezultat ii dam lui $x valoarea lui $rezultat care este 6 ~i loop-ill este reluat de la carat cu noua valoare $x = 6. Pentru $x = 6 conditia $x < 32 este indeplinita, $rezultat va fi 12 ~i,la sfar~it atribuim lui $x aceasta valoare. Pentru $x= 12valoarea $rezultatva fi 24,valoare atribuita din non variabilei $x. Cu $x = 24 conditia pentru rularea loop-ului, $x<23, nu se va indeplini ~iPHP va trece mai departe, la instructiunea print "sfar~it!". Va recomand sa testati acest cod personal. Sa mai observam un lucru inainte de a trece mai departe: codul ce urmeaza a fi executat este incadrat de acolade ~iacolada de inchidere nu este urmata de punct ~ivirgula. Incadrarea in acolade serve~te pentru recunoa~terea buci'itii de cod ce urmeaza a fi rulata in cazul unei structuri de control. In unele cazuri, yom vedea, acoladele pot fi omise.

Structura for este preferata de programatori deoarece intre cele dona paranteze ce 0 preceda sunt continute toate instructiunile ~i conditiile necesare rularii loop-ului. Astfel, in ($x = 0; $x < 100;$x++),prima parte, $x = 0 reprezinta situatia initiala de la care se pome~te rularea loop-ului. A dona parte, $x < 100, reprezinta conditiile ce trebuie indeplinite pentru ca loop-ill sa fie rulat. Puteti rula urmatorul cod ca sa observati ca loop-ill nu va fi rulat deoarececonditiaca $x sa fie mai mic decat 99 nu este indeplinita.

In sfar~it, a treia parte 0 constituie actiunile ce urmeaza a fi intreprinse cu variabila in loop. In exemplul nostru variabila este incrementata cu 11afiecare rulare. Mai putem adauga instructiuni in aceasta sectiune, separandu-le cu virgula. lata, spre exemplu, cum am putea scrie toate instructiunile pentru manipularea lui $x in ultima sectiune dintre parantezele lui for:

EDITORIAL n

1>.n

<? 0;

3. Schimbati $nr_fihne= count($filme)

cu $nr- filme = count($filme )-1 ~i rulati


din nOli scriptul. if Daca dorim sa rulam 0 bucata de cod
?>

?>

Observam ca nici nu mai avem nevoie de acolade. Ele nu ne-ar servi la nimic deoarece to ate instructiunile privind variabila $x se afla In a treia parte din paranteze: Intai este afi~at $x dupa care este incrementat ~iloop-ul 0 ia de la capat palla cand $x ajunge la 100 ~i conditia de rulare nu mai este Indeplinita. Putem folosi for pentru afi~area elementelor unui array cu un index numeric ordonat. Sa afi~am lista noastra de mille:
<?
"Blairwitch "Matrix", count($filme);

claar cand este Indeplinita 0 conditie anume, folosim if. lata cum, In urrnatorul cod afi~am un text claar daca numarul de caractere dintr-un string este mai mare decat 5.

Pentru stringul"mere" rezultatul afi~at pe ecran va fi "Textul are mai putin de 5 caractere" ~i pentru stringul "Ana are mere" rezultatul va fi "Textul are mai mult de 5 caractere". Testati acest lucru ruland codul pentru ambele cazuri. In constructia if ... else putem omite acoladele daca instructiunile ce urmeaza a fi executate stint pe 0 singura linie:

"$i ?>

0 Casablanca 1 - Blairw:itch Project


-

Incercati acela~i cod cu un string mai mic, $text = "Ana" sau $text = "mere" pentru a vedea ca daca stringul are mai putin de 5 caractere textul nu va fi afi~at. Observam folosirea semnului \ de precedare a caracterelor speciale pentru a afi~a ghilimelele In rezultatul de pe ecran, astfel: Textul "Ana are mere" are mai mult de 5 caractere. Am folosit In acest exemplu functia strlen care caIculeaza numarul de caractere Intr-un string. Pentru $text = "Ana are mere", valoarea variabilei

$nr- caractere = strlen($text)va fi 12


(spatiileconteaza).Pentru $text= "mere", $nr_caractere va fi 4. Va spuneam mai sus ca Inunele cazuri putem sa omitem acoladele. In cazullui if, daca partea dintre acolade este 0 singura linie putem "uita" acoladele ~isene codul asfel:

2 - Matrix 3 - Rambo

Rulati scriptul ~i observati ca au fast afi~atetoate filmele. Cum am Iacut acest lucru? Indicandu-i lui for de uncle sa Inceapa afi~area elementelor array-ului ~i unclesa se opreasca din loop. Ne-am actusaminte ca Intr-un array, daca indexul nu este definit, pome~te de la 0 ~i pentru a afi~a "Casablanca" trebuia sa scriem print $filme[O]~iam Iacut acela~i lucru. La a doua rulare a loop-ului $i a avutvaloarea 1~iaafi~atfilmul$filme[l] care este "Blairwitch project" ~ia~a mai departe pentru fiecare element din array. Functia countO este folosita pentru a numara elementele dintr-un array. count($filme) este 4 In cazul de rata. Teme: 1.Adaugatimai multe filme In array ~i rulati din nOliscriptul. 2. Schimbati $i = 0 cu $i = 1 ~irulati scriptul.

if... else Ce facem atunci cand dorim sa afi~am un text daca 0 conditie este Indeplinita ~i alt text daca aceea~i conditie nu este Indeplinita? Folosim if ... else:

In acest exemplu vedem ca else care este folosit chiar la sfar~it, serve~te pentru toate celelalte cazuri care nu Indeplinesc conditiile specificate In if ~i else if. Testati exemplul de mai sus folosind diverse valori pentru $text.
CHIP SPECIAL - SITE DINAMIC

EDITORIAL n

n,.'n

TIPS&TRICKS

switch switcheste altemativapentru blocurile conditionale if ... else if ... else. Este preferabil in cazul in care codul dintre acolade este mai mare ~i lie-am putea pierde in propozitii conditionale ~i paranteze. Sa vedem cu un exemplu simplu cum se folose~tewhile:
<1 $text "Ana are mere";

lui nu s-a oprit. Mai observam din acest exemplu ca in cadrul structurilor de control, de orice fel nu doar switch, putem folosi stringuridarva trebui saleincadram cu ghilimele (cum nu am fast nevoiti sa facem in cazul numerelor). lata Jolla exemple de folosire a stringurilor intr-o structura de control, folosind numere, respectiv stringuri:

recalculare($x)

$x

break;

Funqiile parametri:

pot accepta mai multi

Al doilea exemplu:

lit

I:'

I
II'

Cazul special "default" de la sffir~it este folositpentru situatiain care dorim sa executamcod~idacaniciunadin conditiile anterioarenu este indeplinita (fiind astfel similar lui else din structura if... else if... else).Elpoate fi omis ~iastfel sa executam cod doar dacauna din conditii este indeplinita.Instructiuneabreak; trebuie folosita la incheierea fiecarui caz deoarece altfel codul din urmatorul caz va fi executat. lata un exemplu:

asemenea sa dam parametrii prill virgula sau a~a: Am invatat palla acum ce Stintvariabilele ~i ce fel de structuri de control avem la dispozitie pentru a lucra cu ele astfel incat sa obtinem rezultatele dorite cu minim de efort. In continuare yom afla ce stint functiile ~i cum acestea ne fac munca chiar.mai u~oara. Putem da unei variabile valoarea rezultatului unei functii dad acesta este 0 variabila:

Functii ,
Va mai amintiti unde am mai intalnit termenul de functie? Dad va spun ca la algebra 0 sa fugiti mancand pamantul? Ei bille, legati-va de scaun pentru ca acolo am intalnit termenul ~iin continuare va voi explica funqionarea functiilor (hmm, asta 0 fi repetitie?) in PHP. De~i programarea PHP nu este matematica, modul in care trateaza functiile este similar. Spre exemplu, la algebra, functia f(x)=x+1executa 0 operatie cu x ~idadea un rezultat in functie de valoarea lui x. Acela~i lucru 11face ~i 0 functie PHP.

In pasareaunei variabile cafre0 funqie nu conteaza numele variabilei ci doar valoarea acesteia, valoare ce urmeaza a fi prelucrata.

Rezultatul rularii acestui cod va fi "Ana Barbu Claudia este un nume" ~i nu doar "Ana este un nume" a~a cum lie-am fi a~teptat, deoarece in lipsa instruqiunii break; la incheiera cazurilorrularea codu-

In acest exemplu vedem ca doar valoarea variabilei estecea care conteaza, functia preluand aceasta valoare. Functiile pot fi definite ~irulate tara a Ii se specifica vreun argument:

CHIP SPECIAL

SITE DINAMIC

.
~

S-ar putea să vă placă și