Sunteți pe pagina 1din 68
Apac Mozilla 1.2.1 tudio, Quanta, EditPlus, conText QLFront 2.5, SQLyog, JSoft S ger for mySQL, myFrontEnd Turck MMCache for PHP, PHP Aci pe gustul fiecaruia www.level.ro forum Sia ca Salt C3 faza zilei ie cd fatale WC la] 3 lifestyle cd fanathic GEG rronucere , nstware . onGANZARE , MYSQL, PHP , CREARESITE , ADMINISTRARE TIPSGTRIKS Oana Saulescu oana@chip.ro Mai repede, mai usor Jn za in care mi s-a dat de facut un site de prezentare de produse, site care la un calcul preliminar urma si contind nu ‘mai puyin de $00 de pagin si peste 2000 de poze, am stut trebuie si existe 0 altemativa pentru astfl de munca sisi- ficd. La urma umelor, mi-am zis, doar Yahoo si Amazon nu au angajat mii de coameni pentru a face zilnic modificarle necesare pe paginile lor, nu? Ca si ada- ‘ugi sau s& modifci o pagind a unui site trebuie sa descarci de pe server, s.aplici rmodificiil, si gisegtsicellaltepagini care ar avea de suferit de pe urma sei basi linkurilor si referineor sisi aplici si la acestea modifcarle de rigoare, iar poi si urci totul inapoi pe server Perspectiva unui site cu $00 de pagini actualizat in acest mod, in fiecare 2i a siptimanii m.a facut s8 vid negra in fata ochilor chiar dinainte de a mi apuca de lucru, Ultrior am aflat c& beneficiarul site-uui pe care urma sil fac doreasi- si poativinde produsele on-line, si legétura cu cumpératori prin intermedi- Ul sito-ului gi i aibl'o evident a vin- Zitilor, stocurilr si clienior site-uui actuaizal la cerere. Stiam c¥ dack a fi fost si fac site-ul HTML, beneficiarulit i-ar fi trebuit un intreg departament pen- tru a putea face fat cerinfelor. ‘Am aflat de bazele de date si limbajele serversideintrebandinstinga iindreapia care ar fi fost soluia pentru problema ‘mea. O idee vagi despre ce insearmni 0 baza de dateaveam deja, stiam cf avind 0 seriede informatisimilarele pot organiza {In format tabelar, ea int-o foaie de Tuera Excel, pentru a putea gsi, sorta gi prelu- cra datele mai rapid. Dar nustiam cum se poate lega o baz de date deo pagina web, afl decit salvarea in format HTML, soluje care mise prea nacceptabil, a ajuns inapoi de unde pleeasem, la down- load, modificat HTML, upload. Am in- trebat din nou si din’ mulitudinea de rispunsuri enigmatice ca Perl, ASP sau Java, unul se ivea cel mai des: PHP. PHP este un limbaj server-side care poate, printrealtele, si interactioneze cu ‘o baza de date pentru a afiga sau a modi- fica informatiile din ea, Server-side {nseamnd cd ruleaza si face cereri cde ‘baza de date Ia server care la randul lui sserveste” paginile HTML rezultate. Astfel,clientul nu are nevoie de plugin- uri, programe aditionale sau setdri spe- ciale in browser pentru a vedea rezulta- tl, pagina HTML creat cuajutorul PHP, ‘Acest Special se adresea7a celor care ‘au ajuns inte-un impas aseménitor, care vor si invete mai mult sau pur gi simplu si-si facd viaja de web designer mai usoard. ‘Trebuie s8 aveti cuntostinje minime de HTML gi acces la un server cu PHP si ‘MySQL (acesta poate fi si calculatorul personal pecare s instalaficelenecesare de pe CD-ul alturat urménd pas cu pas indicatile prezentate in capitotul Insta- lare). Nu este necesar si aveti cunostinje preliminare de baze de date sau progra- ‘mare, Singura cerintd este si exersati gi i aplicati chiar voi toate exemplele prezentate aici. De multe ori, un rezultat concret vi poate lmuri mai bine decat un paragraf deseriptiv. Crearea de site-uri folosind PHP si baze de date este unul din cele mai bune Iucruri pe care le-ati putea invija. Soci- ctatea evolueazd, Internetul la fel si,con- form ultimei statistci vizute de mine, pe piata locurilor de muned, HTML-ul e in cedere liber’ in timp ce limbajele server- side sunt din ce.in ce mai cerute. PHP poate fi doar Inceputul pentru voi, nofiunile invajate in acest CHIP Special leputefi considera ca un punct de plecare {ninvdjarea chiara limbajelor ,serioase” precum Java sau C+, Cea mai mare realizare va fi ins eliminarea rutinei si ‘micsorarea timpului de lucru pe care il vei acorda oricirui proiect, oricat de complex sau de simplu. HIP SPROIAL - S(T DINAMIC React post “eleton:69-415155 18728, 0725-57051, O74.754083 Fax: 0288-418728, Ema fosacto@hips0 ‘vos eda 2200 Brgoy. SND. Cocoa 12 ‘Rare por coreoponsent 2200 - Brag, Ol Popa 2, Casa Potala Director Genera: Dan Bésescu (con badescu 3. Editorial 6 _Introducere Dezvoltarea Internetului este in al treilea stadiu de dezvoltare, iar ,dinamic" si ,interactiv” sunt atributele esenfiale ale oricarui site de succes.- PHP si MySQL sunt uneltele ideale pentru un site dinamic. 7 Ceitrei magnifici q Sfaturi pentru o instalare rapida a uneltelor necesare pentru constructia unui site folosind. 9 Cucreionul pe hartie Stabilirea obiectivelor. 11 SQL-ul meu si-al tau Baza de date este coloana vertebrala a unui site dinamic. in acest capitol veti invata tot ce aveti nevoie sa stiti pentru a construi si a lucra cu 0 baza de date. 20 Programare pentru toti Introducere in limbajul PHP. Interactivitate folosind PHP in combinatie cu formularele HTML Invatali cum sa folositi PHP si MySQL pentru a induce dinamism in paginile dumneavoastra. 36 _Noul site pas cu pas Creati primele pagini dinamice si interactive ale site-ului 51 _Stapanul datelor Sectiunea de administrare a site-ului. 65 Tips & Tricks Cum sa va protejati de neplaceri Prope fim: Ae Reo LTO, Monta par: Veszeet Nora RT, Una Rela internationale: i: chip hiistowinernatonal shes Eatura: Voge! Burda Communications SRL a ‘Sedil edu: 200-Braoy" Sr ND. Conan ne 12 5» adescudhvogebud Director thie: Dail ants Boxes! (san. danla@vegobursa 0) Copyright: Redattor. ara Siulesc (anatacip0) Tedacie: Crstane Visio erstana wabitéienip ro) ‘Secretar de opera: Virgt Popa (vege) ‘Grates, OTP. Vig Popa (rgHeohp.) In Romina: Vogel Sra Cmmuniatons SRL Brasov In Germania: Von Burda Woking Gm, \Woreburg, recor: Hermann Pa ISSN 1469-7078 ‘Contabltate administra: Mara Parga, Eva Seacca, Aan Duminu (conta Reciams ‘sot Lt {Gita ponevonebuds ro) Marin: Leon iam) Pet lanctatek Ren ty canine Maras, musth omat econ expe rd en propre tr ata fear cpt aire 9 tea pra prec 3 oen (cor. margnean@voglburda 0), 1a! de apart. Ropediowes migra sy pats x renin ormbior Marr ‘ana La (cana_Jeugvegnibu CHIP SPROIAL sive Dm a0) Distribute: oar Badescu foana,badescu@vogeburda ro), loan Sou fancy eoudvogolouva ro) fu a map apd not et parmea ama! cu aco ct ear Fecacto nu asus ‘aspunora pon regs inadrren arteIn ‘marl cxsbranir se seer Solutia completa... Sub acest moto am reunit pe CD 0 coleefie a celor mai bune aplicatii pentru crearea unui Uneltele de baza Bineinfeles, crearea unui site perfor- ‘mant, aici injelegind unul dinamic, pre- ‘cum si punerea lui in functiune, nu poate flicutd firs anumite programe, dedi- cate. Din acest motiv, pe CD am inclus serverul web Apache, sistemul de baze de date MySQL si PHP. Browsere Pentru testarea paginilor pe care le face este clar nevoie de un browser. ‘Acesta a fost si unul din motivele pentru care am inclus pe CD ultimele versiuni a doua browsere consacrate: Mozilla si Opera. Extras Ce ar insemna crearea/programarea unui site web fra ajutorul micilor pro- sgrmele care salveazi timp? O munca de luni de zile, De accea, pe CD veti gist rnumeroase astfel de utilitare: clienti vi= zuali pentru conectarea gi lucrul cu baza de date, editoare PHP, drivere MySQL Pentru conectarea din .Net, Java si Py- thon, ay" i te web dinamic, in mare parte absolut gratuite. Macromedia Nu este designer web care si nu fi ait de firma Macromedia si produsele sale, Acestea ugureazi foarte mult mun- ca de creae, programare gi finalizare a unui site web, datorité unor unelte ca Homesite, Flahsh MX, Dreamweaver, ca si amintim numai citeva din versiu- nile de proba incluse pe CD-ul atasat revistei Folosind Homesite SsauDream- weaver MX, erearea de site-uti web di namiee va mai usoard deoarece amin- douofertag-tipssiautocompletepentra HTML si PHP. = Clienti FTP Dupa realizarea si testarea site-ului vine si momentul in care acesta trebuie transferat pe un server conectat la Inter- net. Pe CD vefi gisi cei mai populari clienji de FTP cu care veti putea realiza transferul rapid si uso Scripturi complete ‘Am inclus gio serie de scripturi com- plete, gratuite, pe care le putefi utiliza pentru a va imbogifi site-ul, Printre cele ‘mai importante se numar PhpBB 2.0.4, un forum pe care trebuie doar si il configurati pentru a inchega 0 comuni- tate pe site-ul dvs., phpMyAdmin, o ‘uncaltdcuajutorul cireiavaputeficonecta labbaza de date de oriunde ai fi, Gallery, cu care vi puteti pune pozele online, phpMyChat, un sistem de chat web based, precum si multe altele Pe CD pe lingi Apache 1.3.27 si 2.0.44, PHP 43.1 si MySQL 3.23 pentru ‘Windows gi Linux veti gisi si manualele PHP si MySQL in format HTML siCHM. (Windows Help). (CDea ints poate f usizat fn eontormi- ‘ae eu ramet defini in tandardal Philips - Yellow Book. Etua au asumd respons- bitten asupre eventileor pagube provo- ‘atedeutlizarea CD-ul nal parame dest ‘ei stabil tn standard menionat anterior. NOTA Intrfja CD-lui CHIP Special este con- eputd sf raleze optim pe o plact gratia ce ‘suport minim 0 rzaate de 800 x 600 gi © dincime cul de 16bi.-De acca, nu ete ‘ecomandtifoosren acest inten edice ‘nu oferdminioal neces! Intefaa poate ‘ult att sub Windows 95°98/Me, eft ub ‘Windows NT/2000°XP. ‘Din eaiza multitudin de configura, edcta CHIP Special m poste suman 0 responsibiliateineventualitatea in care apar probleme fa functionarea interfeet $i a splicailor.Programele care au intat fn omponenia CD-ului CHIP Special av fst teste gi seleeate cu gi fn redacta CHIP Special. Totus redatia ma ly poate asuma nck ‘oresponsbiitate penta funcionarea anormal a software poate fut espon- ‘sbi penn eventalele Sune prone CD-t CHIP Special fost vericatimpotivavirslor ca urmaarele programe antivir (in ontine alfabetca): BitDefender Professional 64 ‘arizat de Softwin), F-Secure AntVirs S40 (mizat de lafodesign, Kaspersky Lab Ant Virus 40 (urizat de Kaspersky Lab - Rusia st RAV 85 (uit de GeCAD). Pentuorie inter lgatedeaplicile de ‘eC, vieugim sconce, prin fax ‘su prin email, utr programelor respective. [ATENTIE! Penrurlareacoreciaimertoe (CD-alu vi recomanion sete net reli ‘minime e800 x 600, oaincime a clai de 16 ‘itp flosies opium Simall Fons! CHIP SPROIAL - SITE DINAMIC eomORAL , QUERIED. wstasre , oncawzare , ysl. PHP , CREARESITE , ADMINISTRARE , TIPSSTRICKS Intoducere Incotro ne indreptam? Dezvoltarea Internetului este in al treilea stadiu de dezvoltare, iar »dinamic” si ,,interactiv” sunt atributele esenfiale ale oricirui site de succes. - 1960, end a fost lansat ARPANET, releaua Ministerului Apérarii al SUA, nimeni nu si-ar fi imaginat unde se va ajunge doar 40 de ani mai tirziu. Dezvol- tarea Intemetului a inceput cu adevrat in 1993, odats eu lansarea primului browser ‘gratuit, Mosaic, care putea afisa text si ima- ‘ni. Inmaiptin de un an, mumarul uilizato- rilor a ajuns la 2 milioane. David Siegel, autorul cari Creating killer websites” se referd Ia site-urileereate in aceasti perio adi ca ,Site-uri de prima generate”, linea- 1, limitate ca posibilitii dar indeajuns de funcfionale pentrutransmitereainformajc. Articolole prezente pe amandoua pagl- nile au fost introduse o singura data gi -au aranjat ,singure”: cele mai nol ja Inceput, cele mai vechi la sfarsit. ‘A doua generaji & inceput oda eu specfcaile pentru HTML 1 si comptita ‘Netscape- Microsoft penn dinars pc Orintare in acess peroa fost inspe vial” ca mod de comic tn prezent ne aft ina tia gener, 8 inamismului i interatvitii Lumes progresear in pas rapid ie web designer trebuie stink pasul, in aceast meserie evoufa este cunt chee. ‘Nuumdralnteraufilorereyte de lol aha, la el casi astptvle lr: ci dorese informasieproaspat si posibilitatea de @ imerationa.Paginiletatce numa sunt de ajuns pent asgurafidlizara tlizato- flor. Ips, n iva de ast oricne poate face un site cu ajutorl aplicailor veuale precum Macromedia DreamWeaver sa Microsoft Frontpage. Pena sta in fata concurenei, un web designer trebuie s8 fofere mai mit si mai rapid det celal CHIP SPECIAL - SITE DINAMIC fnt-o statistic¥ ficuts pe ejabs.com, cere- rea de programatori HTML este in eidere liberd in timp ce limbajle server-side sunt ccele mai cerute. Ca webdesigneri, ori ne ‘adaptim noilor cerinfe ori ingrosim coada Ja Oficiul fortelor de mune’, Se cere. Inprezent aproape jumitate de miliard din ppopulaja globulut are acces la Internet. fn 2002 39,7% din utlizatorii de Intemet au ficut cumparaturi cu valoare total estimati Ja 47,98 miliarde de dolar. Siteurile care ‘fer produse sau servci sunt nt-0 continu crestere.Uilizatoi tind si prefere cumnplir- turile online dtortl comoditfi de a coman- Programs > Apache HTTP Server > Start Apache in console care va porn programal intr-o consola, Pentru a testa, deschideti un browser si accesati adresa huip:/localhost. Daci pagina afigatd arati ca in imaginea altura, serverul este pornit si funefioneaza. Prima pagina servita de server dupa instalare. Pentru a nu fi nevofi ca de fccare dat clnd vrefi Si aveti serverul pomit si rulaji programul manual, puteti si il pomifi ca serviciu gi el va pomi automat odati cu Windows, in Windows NT, 2000 si XP, ‘dati cu instalarea programalu, este insalat siserviciul Apache. puteisetasipomeasca automat accesind Services (Windows Ser- ‘vice Control Manager) din Control Pane! (Administrative Tools n Windows 2000).In ‘Windows 9598 exist suport pentru servicit ‘nsiestedoarexperimental,Pentruca Apache i pomeasca automat la fiecare repomire calculatorulu,trebuie sf il instal inti ca lar. Folositi 0 consoki MS-DOS prompt pentru a intra in directoral C:\Program Files\Apache Group pachesiatasta apache -i-n,apache”, Daciimesajulprimiteste, The Ieee rete (© pagina HTML scrisa de utilizator si servita de Apache. HIP SPROIAL - SITE DINAMIC EDITORIAL , INTRODUCERE , ORGANZARE , MySQL, PHP , CREARESITE , ADMINISTRARE , TIPSATRICKS apache serviochas been installed successful--_ sl suprascrii cu acestacorespondentul Iv" putes sporti imediatservciul Qik su din direetorul C:\Program a rebool) serid in consol Files\Apache Group\Apacke\cont. Dac Notepentruinstalareairalarea Apache apache =n ,apache” ~x start. doriji si faceticonfigurarea manual (in Nu funetioneaza? ; Daca vi hotariji si'nu mai folosiji cazul in care ai instalat PHP tn alt direc- _,, Dacatunelcind acces adres tp a na vedio pain cs mesa serviciul Apache, tastji in command tor decdt cel indicat ic), dschider eu peapost ma wel o pain cu esl prompt apache -u-n ,apache”siservci- Notepad fisierul C:\Program Files inalationofthe Apache webserversoh ul va fi dezinstalat, ir programul nu va \packe Group\Apache\conflhpd.conf wate on this system wan suecesfil" ‘aifiporitautomatodatacu Windows. si adiugajiurmatoarele 3 lini ‘erica! ini dad server este port act: nu cumva avefi alt server HTTP . (PWS, 11S) care ruleaz. Document root Windows 95 Document root est drectorul in care ESL Tatoo eee ee afi fisirele HTML si PHP ce vor i acorrenpiicaien'nep-r pS tame eet mers servite de server. n cazul de fai el este foe tenia Auche Wind NT direclorul C:\Program Files\Apache Caiutati apoi linia Directorylndex 40,98, ME si 2000 mu au nevoie de acest Group Apacke'hidocs.Orice fiierpune|i index.html i modificaji-o in Directory- update, Adress de dovnload este: p.// indocumentroot vafidisponibilllaadresa Index index.html index.php. Pentru ca ee eee ets fugp:Lllocalhostinumefisier. Puteti testa schimbarile si fie recunoscute va trebui sworkingloolsheSSeockets2defenllasp acest Iueru crelind o pagina test.html ins reporniti Apache. Weeae IO: care si serie: Sitestim dacitotlfunctioneaz& cum Pan pie Niel Apmebetpttr

Aceasta este 0 pagina detest

_trebuie, Creati cu Notepad un document mle Windows XP tebuie sh aveti Win- ‘Copiati fisierul test.html in document text in care serieti dows XP Service Pack | instalat.1l putegi root si tastai in bara de adresea browse ‘objine de la htp:/vwn: microsoft.com’ ruluifutp-/localhostes.hamt. test php vindowsxp/pro/downloadsservicepacks/ Daci rezultatul nu araté ca in pagina © Bean rata at eet eked ciprgstcintctiet sac -ewes aura ae alt server HTTP pomit (IIS, PWS, etc.). _suncrioroass "y 1+ 93 acum ai eatin valoaros Ist $x ca stind 7 e412 vom aduna tot cu 1 */ Dist eguleatsl adunarss Iu eo 2 ‘Salvafi fisierul in document root (di- rectorul c:\Program files\Apache Group\Apache\htdocs\) si accesat hp./ flocathosWalgebra php. até cum va ara ta pagina afisati: Rezultatul rulérilin browser figiorulul algebra.php Si disecdm codul pentru ainvata céte- va lucruri — toate instrucfiunile PHP se termind cu punct si virguli. Omiterea semnulut ‘spunet si virgula” este cea mai freeventt ‘Breseald pe care o fac programatorii in- cepitori ~codul PHP incepe intotdeauna cu. Elpoate fiimbricatcu » ORGANIZARE , MySQL , cod HTML dupa cum puteti vedea in cexemplulaliturat. Putti chiar crea pagi- ni HTML fia pic de cod PHP inele sisi le dati extensia php. Atdta vreme cat parser-ul PHP nu,,vede”tagurile, cla trimite pagina HTML neschimbata tre server. —putem pune diacritice in cadrul unui string insi pentru ca browserul si le afiseze corect va trebui si speeificim in ‘ setul de caractere folosit, a fel ca {ntr-un document HTML. — valoarea unei variabile poate fi schimbati dupa necesititi (asa cum am schimbat valoarea Tui $x) sau ea va fi schimbati automat in functie de celelate variabile decare depinde (asacum valoar- cca lui Srezultats-a schimbat in functie de valoarea lui $x). — pentru a afiga rezultatul folosim print, altfelvalorile variabilelor ar fi fost schimbate dar nu ar fi fost afigate pe cecran, Pentru mai multe detalii privind folosirea lui print vi recomand si cconsultafi oglinda alaturat + CREARE SITE , ADMINISTRARE , TIPSATRICKS ~ linia de text care incepe ou / mu este afin fl ca texuldemareat de® i ‘nuaparnicimcar dct im View Source browser pen rer algebra php acces Acestea sunt comentar eae mu stint prooo- sated cite serverca find cod exccuabil niin sunt rimise mai depart cite brow ser lnaplicailemaimaridecitevalinieste utils coment codl pert ane orienta nna bine su a explica afin neprinse Diferena inte cele deus nai este ct // «ste folsit petra comentao sigur ine detextintimpce/*.,*/poatefflositpentra a delimita un comentara ce se extinde pe mmaimulelini, Marcatori de comentariu se pot los atunicndderimeaobucat de Cox sina rleze. Pues testa acest nent comentind na din linile care conjin insrsunea prin alin din ou pagina ‘Numele varablelortebuie $$ conf doa liter, AZ i caracterele ASC de 1a 127 ln 255), cite i nue de sublnere (ndescores$potinoepe doar eulitere sau line de subline. Astfl, So_varibila, SalaVariabila iS inea_o_variabila_sunt otek es meer eee ca cees oe fees ‘it Folosind ghilimelele duble orice vari- saree tere phonies a cele ets irnristereeaes ‘simple (print °.."), variabilele $x si Srezul- eee imakecuetrertarie ‘tat, Testati acest lucru! ert va an _ghilimele simple, “rupaind” stringul si inter- eae aera cpm oe aaroesae ceamcarie econ ee Serie eerie Puteti folosi celelalte ghilimele normal. qoeect eerie, Sneaeeneee Seca ee eaeeeseee ‘ghilimele duble”; ‘Altern cot Chilis simple webuie re 2 ini-un string incadrat de ghilimele ‘simple tn timp ce “ghilimelele duble” nu’, Daci doris aig doar valoarea unei grb pom ie te fevecianlle - 7 | daci rum acest cod, reat- rat afigat in browser va fi Un text carecaro", desi instrutiuile de’ aigare se Aft pe doul lini dferite. Aceasta se intim- pli deoarece cum ziceam si in inttoducere, fezultatulestetrimisedtrebrowserea HTML. Daca vrem si ne fe aigate na sub alia va trebui sh interalim cod HTML ttre cele dou instrctiuni.Putem face acest era in ‘dou modus ori prin interuperea codulut PHP, aga: print Salta. varsaniiar ocd prin sorienes Jai elezbetgty divecr ‘rine So.variabsiay Galte_variabila = "Ue text oarecarets CHIP SPROIAL B DINAMIC EDITORIAL , INTRODUCERE , INSTALARE , ORGANZARE , MySQL , rnume corecte in timp ce So-nows-variabila, S2varsiSa_sapteamu sunt. inainte dea trece sai depart, vi dau un fat: dai varabilelor rnume care si defineasc’ pe cit posbil destnaia variable, mai ales dact aceasta va fi folsit de mai mute ori in eadrul program Daca vise vaceresimodifcai aplcatia dup dou’ hn de acrearea cio St prefrati si inghiti tastatura mai degraba deci i vi chinuii si afl in 500 defini dd cod ce reprint Sal sau SxGVHKx. Tipuri de variabile Variabilele pot fi de mai multe tipuri, rnudoar numere cumam vizut pani acum, acd programarea PHP ar fi fost despre algebra si numere, n-a5 fi fost aici poves- tindu-va edt de minunata este! PHP are opttipuri de variable dintre care vile voi descrie pe cele mai importante 4. integer Variabilele de tip integer sunt numere Intregi: 3, 783, -56, 0, -1 sunt valori integer. string Un string este 0 succesiune de carac- tere (ir). Atunci end sunt folosite in codul PHP stringurile trebuie incadrate intre ghilimele si toate caracterele spe- ciale din ele precedate cu semnul \ (detalii siexplicafigisitiinoglinda funetia print). Tati gi cdteva exemple de stringur: boolean Tipul boolean defineste o valoare de adevir, TRUE (adevirat) sau FALSE (als), Spre exemplu, vom serie mai tar- ziuo functie pentruseetiuneadeadminis- {rare a site-ului cu ajutorul cdruia vom verifica dacd utilizatorul este logat ca administrator. Dupaice va face toate veri- ficirile necesare, functia noastra va re- tua o valoare de adevar: TRUE daca este logat sau FALSE daci nu este gi astfel vom sti dacd siti acordim sau nu acces in sectiunea de administrare. array uteti si considerati un array ca fiind o colectie de obiecte (matrice). Pentru a Inelege conceptul, sf ne amintim de maga- imal de casete video de care vi povesteam {nt-un capitol anterior. V@ spuneam ci fie- care film este indexat cu un numa gi astfel CHIP SPECIAL - sITz DINAMIC ‘ne puter refer lac atuneicindcerem filma vnzitoare,folosind numdul respect. ‘Sa veder un exemplu pint. $£8ime(0): me(214 Indexarea unui array poate fi definité de care programator, ga cum si patronul ‘unui magazin de casete video isi poate ‘mumerota casetele dupa cum ti place, 202te>reambo"): sesane(2024) sesane(291; stsane(321; Arrayurile pot fi indexate gi asociativ, adic putem folosistringuri in loc de inte- ‘gers pentruane refer la valorile unui array print $etlne("actsune")) Pentru avansati:n PHP nu este nevoie 1» CREARE SITE , ADMINSTRARE , TIPSATRICKS si defini inti variabila sau sii de clarim tipul Si va fi folosit ca integer sau string in funcfie de contextul in care este folosit. Dac dori s& fortati evalua ea uni variabile ca un anumit tip puteti folosi conversia de tip, astfel: $i (int) Si sau $i= (boo) Si. Mai multe detalii despre ‘conversia tipurilor gasijiin manualul PHP de pe CD, in setiunea Type casting, Operatori Cel mai des intlnit operator este cel de siribuire, definit prin semnul =. Am obser- vat din exemplele de pan acum ci dacd soriem $x = I nu inseamnd cd Sx este egal cu | ci cd i $a acordat valoarea 1. Desi la prima vedere egalitatea siacordarea valorit pot prea afi acelag lucr, ele mu sunt! $8 considerim urmatoarele variabile: Este $x egal cu Sy? Nueste. Valoarea lui Sx este | in timp ce valoarea lui Sy este 7, Folosind operatorul = de atribuire {i putem acorda lui $x valoarea lui Sy Abia acum $x este 7 si este egal cu Sy care are si el valoarea 7. Nu va lisati {ngelafi de aseminarea cu semnul = din ‘matematicd nici micar atunci cénd faceti ‘operafii complexe. Daca scriem Srezultat = Sx + Sy nu inseamnd ca Srezultat este gal cusumacelor doud,cicdi-amatribuit (acordat) valoarea sumei celor doug. Operatorul de egalitate este = si se foloseste cel mai des in propoziii condiionale, pentru a testa egalitatea, ‘Opusul siu, !=,este operatoruldeinegali- tate gi se foloseste in acelagi scop. Pentru ‘ava limuri cum stitreaba cu egalitatea gi atribuirea, testafi urmatorul cod: wet eT At (ox = oy , EDITORIAL , INTRODUCERE , INSTALARE , ORGANZARE , MySQL , GE), CREARESTE , ADMINSTRARE , TIPSATRICKS Rulati codul si apoi modificati valo- rile lui x gi $y cu $x = 13 gi Sy = 13. Operatorul de egalitate se foloseste pentru a compara egalitatea a doul va- lori. Alti operatori folositi pentru com- pararea valorilor variablelor sunt: >= mai mare sau egal ‘<= mai mie sau egal ar s(n > 59) print “Sx eate mat mare oa 63" s(n & 59) Print “Sx esce mai mic sau egal ov Sy" ‘Operatorii pentru stringuri sunt . pen- tru concatenare si = pentru atribuirea cconcatendrii. Acesti operator sunt folositi pentru a uni stringuri, in felul urmaor: testt.php // concatenarea stringurilor print Sveats pe ecran va fi afisat Am seris un text oarecare” Eat Yow Fares ane) Sep Rath Wo. focaheset 9 1, concatenarea stringurilor cu vari- abile fee 8: 1 pe ecran va fi afisat Am scris ‘numa 5 si un text oarecare” test3.php_ - 1 atribuirea coneateniit Stent = “el mondul *.Sner print Stexts /i pe ecran va fi afigat ,Un text oare- care si numrul 6” Operatorii logici vai vor veni la i demand inexecuta sriptului atuncicéind avetinevoiest lucraticu valorideadevat, ‘Vom face un exerciiu deimaginatie pen- ‘rua explica functa 3 utilitatea operato- rilor logic. Si presupunem cd la intrarea fn sectiunea de administrare ave un formular care cere numele si parola de acces in sectiune. Scriptul PHP ar putea verifica acesteinformati pentru a auto- riza accesul in secfiune folosind opera- tori logiciastet ~ operatorul ! (NOT) Se peste eo, parola: Operatorul ! retumeaz TRUE daci valoarea inijialé de adevar e FALSE si FALSE daci valoarea initia este TRUE, ~operatorul || (OR) buns) ... Verified ded mumele sau paro- Ja sunt valid si dacdoriare din ele est, retumeazi valoarea de adevir TRUE. In acest exemplu de pseudocod daci mu- mele ari valid dar parola nu, i-am acor- 4a uilizatorului acces mai departs, ceca cenu ede dorit. Trebuie si fim sigur et si numele si parla sunt valde. Operatorul | retueazi TRUE daci oricare din valorile verificate ¢ TRUE. ‘Retumeaz FALSE doar daci amiindoua sunt FALSE, operstorul && (AND) dacd atat numele cat si parola sunt valide putem acorda utilizatorului acces in sectiunea de administrar. ‘Operatorul && retumeaza TRUE doar daci ambele valoriverificate sunt TRUE. El returneaza FALSE daca oricare din ele este FALSE (sau dacd amandoud sunt FALSE). ‘Structuri de control ‘Structuile decontrol suntinstructunile care adue flexibilitatea in programare gi usureazi munca programatorului ‘Am vizut cum putem defini o vari- abil $x si cum putem obfine ca rezultat alt variabila Stotal = $x + 1. Putem, cu ajutoral structurilor de control si ma- nipulim variabilele gi rezultatele cu mi- nim de cod. Vom vedea cum, cu ajutorul lui while gi for putem folosi aceeasi bu- cat de cod pentru mai multe variabile fird si trebuiascd si rescriem codul pen- tru fiecare valoare a variabilei. Vom invaja si structurile if. else if. else gi switch cu eare vom putea executa cod doar dact sunt indeplinite anumite conditi while Structura de control while este fo- Tositd pentruarula acelagi cod pentru mai multe valori ale unei variabile oarecare Sx, fr si trebuiasea si rescriem codul pentru Sx = 1, $x =2 si aga mai departe pentru fiecare valoare a variabilei. Si folosim pentru testare un cod asemiing- tor celui cu care am pornit la inceputul capitolului si si vedem cum structurile de contro! ne pot ugura munca, eine oResuitatul inmurpield ut Sx eu seenuitat ~ x08) eine * Reb 5 este Srevoitatebe>": seul Samult Lett Lot Sx ou Si presupunem c¥ ar trebui ca pentru toate numerele de Ia 0 1a 99 ar trebui si CHIP SPECIAL - SIT DINAMIC EDITORIAL , INTRODUCERE , INSTALARE , ORGANIZARE , MySQL , QI, cREARESITE , ADMINISTRARE , TIPSATRICKS calculi variabila Srezultat gi si afisam textul ,Rezultatul inmultri lui $x eu S este Srezultat”. Daci ar fi si scriemcodul de inmultire si afigare pentru fiecare valoare a lui Sx de la 0 la 99 ne-ar apuca dimineata, Pentru aceasta vom folosi while, cel mai simplu tip de loop si vom. serie © singuri bucati de cod care va prelua automat toate valorile lui Sx de la 01299 gi pentru fiecare va inmulf cu 5 si va afiga rezultatul automat, Si vedem si Salvaji acest cod intr-un fisier incrementare.php siaccesafi-Idinbrows- cr pentru a vedea rezultatul Inmultirea automata a numerelor de la Ola99 cu 5. ‘Si vedem, pas eu pas, cum functio: neazi while. Intéi am definit valoarea iniiala @ Tui Sx. Apoi, pentru fiecare valoare aIui $x mai mica striet decat 100 (0,1, 2,3. pani cfind $x ajunge la 99) se caleuleazi variabila Srezultat si se afigeazi textul, iar in final $x este inere- rmentat (adunat) cu 1, cdpitind astfel o nou valoare, si programul o ia din now de la capat cu $x =2, apoi eu Sx=3 sitot aga pind cind Sx ajunge la 100. Cand Sx ajunge Ia 100 conditia din while, Sx < 100, nu mai este indeplinité asa cd PHP eteazi rularea loop-ului si continua cu restul de cod, $+ este o expresie Putin mai speciala gi este echivalenta cu incrementareacu 1, x+ esteastfel pres- ‘curtarea pentru Sx = $x + Desigur, putem intreprinde orice CHIP SPECIAL - SIT DINAMIC actiune cu $x inainte de a relua loop-ul, nu doar inerementarea, in exemplul ur- mator vom afisa rezultatul inmulfiri but Sx cu 2, apoi ii vom atribui lui $x valoarea rezultatului inmulfirit si vor repeta loop-ul cu noul $x pana cand $x este mai mic decat 23: ‘ _Aaktess [i] tp Mocobow eceneniae este’ sisematatl ecto ‘estes siemalatl ert 12 ‘este 2 inert este 24 sfusil Struetura for in actiune! Tata, in romaneste, ce am fcut: am Jat valoarea inifiala a lui $x, 3, si am ineeput loop-ul. La prima rulare se cal- cculeazi variabila Srezultat care este $x * 2=3*2=6 siscafiseazi pe ecran,,xeste 3 si rezultatul este 6. Apoi, folosind operatorul de atribuire ,="in $x=Srezul- tat fi dim lui $x valoarea lui Srezultat care este 6 si loop-ul este reluat de ta capit cu noua valoare $x = 6, Pentru Sx = 6 conditia $x < 32 este {ndepliniti Srezultat va fi 12 si, la sfégit atribuim Iui $x aceasta valoare. Pentru $x= 12 valoarea rezultatvafi24, valoare atribuiti din nou variabilei $x. Cu $x 24 conditia pentru rularea loop-ului, ‘$x<23, nu se va indeplini si PHP va trece mai departe, ta instructiunea print “sflirit!”. Va recomand si testa acest cod personal ‘Simai observim un lueruinainte dea trece mai departe: codul ce urmeazi a fi cexccutat este incadrat de acolade si aco- Jada de inchidere nu este urmati de punct si virguld, incadrarea in acolade serveste pentru recunoasterea bucitii de cod ee ‘urmeazi afi rulat in cazul unei structuri de control. in unele cazuri, vom vedea, acoladele pot fi omise. for for este echivalentul lui while si funcfioneazai in mare masuri la fel, cu cateva mici diferenfe. S& reseriem cu ajutorul lui for codul din fisierul incrementare-php pentruaobjineaceleasi rezultate: “Ades [2] io Mocshovcrmesmeste Result ambi a cu, ‘Rezltatl ai io ‘Remltata mi a ou 5 este 20 ‘Remtata mi a 6 eu 5 este 30 ‘Remltetal amuli a cu 5 este 40 ‘Remltatal Samui a 10 eu 5 ete 50 Structura for este preferati de pro- gramatori deoarece intre cele doud pparanteze ce o precedi sunt confimute toate instructiunile si conditile necesare ruliri loop-ului, Astfel, in ($x = 0; $x < 100; $x++), prima parte, k=O reprezint situatia inital de la care se pomeste ru- larea loop-ului. A doua parte, $x < 100, eprezint condifiilece trebuie indeplinite pentru ca loop-ul si fie rulat.Putefirula ‘urmitorul cod ca si observa ed loop-ul ‘nuva firulatdeoarece condija ca Sx fie ‘mai mic deeét 99 nu este indeplinit, In sfirsit, a treia parte © constituic actiunile ce urmeazi a fi intreprinse cu variabila in loop. fn exemplul nostra variabila este incrementaticu IIa ficcare rulare. Mai putem adiuga instructiuni in aceasti sectiune, separindu-le cu vir- gull. lat, spre exemplu, cum am putea serie toate instructiunile pentru manipu- larea lui $x in ultima secjiune dintre parantezele lui for: EDITORIAL , INTRODUCERE , INSTALARE , ORGANZARE , mSQL J). cREARE STE , ADMIMSTRARE , TIPSETRIOKS for (Gx ~ 01 Gx < 100) print "éxcbe>", eet (Observim c& nici nu mai avem nevoie de acolade. Ele nu ne-ar servi la nimic ‘dcoarece toute instructiunie privind vari- abila $x se afla in a treia parte din paranteze: inti este afisat $x dupa care «este incrementat i loop-ul oiade la capat pind cand $x ajunge la 100 si conditia de rulare nu mai este indeplinitd Putem folosi for pentru afigarea ele- ‘mentelor unui array cu un index numeric ‘ordonat, $i afisim lista noastra de filme: ‘$€L1ne = array(*casablanca”,“Biaireiteh Project”, "Matrin", "Ranbo")s ‘ns thine = ooune S¢4ne) for{6s = 0; $4 < Sne_tsiney #104) print “6k ~ s£sime(ssjeons PI cc lati scriptul gi observati c& au fost afigate toate filmele. Cum am flicut acest Iucru? Indicdndu-i tui for de unde si inceapatafigarea elementelor array-ului si unde si se opreasca din loop. Ne-am dus aminte cl intr-un array, dact index- ul nu este definit, pomeste de Ia 0 si Pentru a afiga Casablanca” trebuia si scriem print Sfilme{0] si am ficut acelasi Iucru. La a doua rulare a loop-ului $i a avutvaloarea I siaafigat filmul Sfilmef 1] care este ,Blairwitch project” si aga mai 5) ‘ne oneactere = incercaji mic, Stext = pentru a vedea eX dacstringul are mai putin de Scaracteretextul na va fi aig, Observim folosirea semnulu\ de preve- dare a caracterelor speciale pentru a afisa ahilimelele in rezulttul de pe ecran, astfel: Textul ,Ana are mere” are mai mull de 5 earatere. ‘Am folosit fn acest exemple funcjia strlen care ealeuleaz’ numaral de carac- tere inte-un string. Penta Stext = "Ana are mere", Valoarea_variabilei Snr_caraetere = strlen(Stext) va fi 12 (spajilleconeaza),PentruStext= "mere", Sor_earactre va fi 4 ‘Vaspuneam maisuscinunele cazuri putem si omitem acoladel. In cazal lui if, daca partea dintre acolade este o si aur lini putem ita” acoladele gi scrie codul asta: 4#(Gne_catactere > 5) print “fextul rote \" are mal nuit de 5 caractaze"y it. else Ce facem atunei cdnd dorim si afigm lun text daca o conditie este indeplinita i alt text daci aceeasi conditie nu este indeplinita? Folosim if... else: dn icacactanpeahistsiies (eenth; Se(Gne_cavactare > 5) ‘ pint *Textal are mat putin de § Pentrustringul ,mere”rezultatulafgat pe ccran va fi, Textul are mai putin de S caractere gi pentru stringul Ana are ‘mere rezultatul va fi Textul are mai rt de 5 caractere”, Testi acest Tuer rulind codul pentru ambele cazur. In construcfa if. else putem omite acoladce daca instructiunile ce urmeazi a fi executate sunt pe o singur nie: (Gne_caractere > 5) print “Textal if... elseif. else ‘Dar daca dorim si folosim mai multe conditii si in functie de ficeare dintre acestea sé afigim aliceva? Folosim if. elseif..else si repetim else if de cate ori for_eatactere = strlen (stent) se\Gne sctece <5) print *Testsl are mai putin de 5 1 flee ££ (Sor arastere == 5) i lee ¢(ene caractese > 12) mak putin de S caractece gf mai mult de 12") In acest exemplu vedem ci clse care este folosit chiar la sfirsit,serveste Pentru toate celelate cazuri care mu indeplinese conditile specificate in if sielse if, Testa exempul de mai su foosind diverse valori pentru Stext. HIP SPROIAL - SIT DINAMI EDTORAL , INTRODUCERE , INSTALARE , ORGANWZARE , MySQL , GMI), CREARESITE , ADMINISTRARE , TIPSATRICKS switch switch estealtemativa pentrublocurile conditionale if .. else if .. else. Este preferabil in cazul in care codul dintre acolade este mai mare si ne-am putea pierde in propozitii conditionale si paranteze, $a vedem cu un exemplu sim- plu cum se foloseste while: sro Cazul special default” de ta sfirgit este folosit pentru situatiain care dorim si executtim cod sidaciinieiunadincondifile anterioare nu este indeplinita (find astfel similar li else din structura if... els i else). El poate fiomis iastfelstexecutim cod doar dact una din conditi este indep- liniti Instructiunea break; rebuie folosit la incheierea fiectrui caz deoarece altfel codul din urmatorul caz va fi executat Tati un exemplu: Rezultatul rulirii acestui cod va fi ‘Ana Barbu Claudia este un nume” si nu doar ,Ana este un nume” aga cum ne-am fi asteptat, deoarece in lipsainstructiunii break; aincheieracazurilorrulareacodu- SPECIAL - SITE DINAMI Ij nu s-a oprit. Mai observim din acest exempla cd in cadrul structurilor de con- trol, de orice fel nu doar switeh, putem folosistringuridar vatrebuisileineadrim cu ghilimele (cum nu am fost nevoifi si facem in cazul numerelor). Tata dowd exemple de folosire a stringurilor intr-o structur’ de control, folosind numere, respect stringuri Al doilea exemplu: 1 (Snune == *Baxbu") ‘Am invatat pind acum ce sunt vari- abilele gi ce fel de structuri de control vem la dispozitie pentru a luera cu ele astfel inedt si obfinem rezultatele dorite cuminim de efor. Incontinuare vomafla ce sunt funciile $i cum acestea ne fac ‘munea chiar, mai usoari. Funct ‘Va mai amintiti unde am mai intilnit termenul de functie? Daca va spun cd ta algebri o si fugiti mincind pimantul? Ei bine, legafi-va de scaun pentru ci acolo am inténit termemul sin continua- re vi voi explica functionarea functiilor (Cimm, asta o fi repettie?) in PHP. Desi programarea PHP nu este matematicd, ‘modul in care trateazA functiil este simi lar. Spre exemplu, la algebra, functia fAx)-x+ executa ooperatie cu x si didea ‘un rezultat in funcfie de valoarea lui x. Acelayi cru il face si o functie PHP. 17 tonotise trebuse detinite tnasate Funetiile pot accepta mai multi parameti peint iamuittze(sy, Sy)? Putem de asemenea si dim parametrii direct, separati prin virguld sau a3 Putem da unei variable valoareare- zultatului nei fanetiidack acesta este 0 variabil Inpasareaunei varabile citreo functie ‘nu conteazi numele variabilei ci doar valoarea acesteia, valoare ce urmeazii a fi preluerata, on edunare (9x) ae = 10) In acest exemplu vedem ci doar valoarea variabilei este cea care contea- 2, functia preluiind aceasti valoare Functile pot fi definite gi rulate fia a li se specifica vreun argument: EDITORIAL , INTRODUCERE , INSTALARE , ORGANZARE , MySQL , aca (if) este vara mer- (et ym la mare, daca nu imal agteptam. function veeas_ta_maze() stuna = sateen) /* date(*n”) returneazi reprezentarea ‘numeric a unit in care suntem, de la 1 pentru ianuarie pnd la 12 pentru decem- brie, Astfel, dacd luna curenté e aprilie, ‘luna va fi4 sidacd enoiembrie Sluna va fini t,stuna’€ 61) stake > 9) Brine “0 08 ngheti de trig, sunten Sp lune a stun Detnt "Suntem tn luna a Siuna-ay fe cald gh soare, fogs 1a mare!) , ‘vreau lamare (ys Dac e mai devreme de luna iunie sau (operatorul |) mai tirziu de septembrie, nu e cazul si ne facem bagajele. Altfel, ddrumul e al nostru! Puteti modifica (temporar) setrile de data din Windows si si schimbati luna pentru a vedea ce se intimpla. Nu uitayi si revenifi la setdrile anterioare! Scriptul care are grija de tensiunea noastra: nici un ple de cafea dupa ora 10. Am vizutdinaceste exemple cdrezul- {atuluneifuncti poate fio valoare(funct inmultire care oferd rezultatul inmultirit lui Sx cu Sy) sau o acfiune (functia ‘yreau_la_mare() care afigeaza un text), Rezultatul unei functii mai poate fi $i 0 valoare de adevar, TRUE sau FALSE, ca ‘in exemplul urmator: 1 sora = aave ("sys Fedate|"6") xetumneazs ora corenté in tomat 0-24 +/ Atlgera >= 5 46 sora <9) ( , ‘ ) $£(e_dimineara()) print “Pott #8 tact flee print “E prea taratu pencen cate Sau, acelasi lucru scris folosind » CREARESITE , ADMINISTRARE , TIPSATRICKS ‘operatorul ! NOT: ainineata()) print *E pte ‘etezis pentes cates.” ‘sles print “Poti a8 f20l cafenua.? Aceasti functicilustreazA foarte bine folosirea operatorilor logici. Dacd ora este mai mare sau egali cu 5 si mai mic& sau egali cu 9, ne putem face cafeaua. acd e dani nu vom bea cafea desi Sora ‘<9 gla fl daca e ora 22 desi Sora >=S. Ambele conditiitrebuie si fie adevarate pentru ca e_dimineata() si fie TRUE. Functii predefinite ‘Toate funcilleexemplificatepéniacum au fost definite de noi. Exist ins si fuori predefinite, integrate in PHP, pentru o ‘multime deactiunUnexempluest functia date() pe care tocmai am folosit-o gi care retumeazi ora, luna, anul precum si alte clementealedatei Altexempluarfifunctia count) pe care am folosi-o si numiirim cite elemente sunt intr-un array. Exist funetii pentru aproape orice in PHP si va sfituieses8 cdutai fn manualul PHP de pe CD of de cate ori aveti nevoie de ceva CHIP SPECIAL ~ SITE DINAMIC EDITORIAL , INTRODUCERE , INSTALARE , ORGANZARE , MySQL . GE). CREARESTE , ADMINISTRARE , TIPSSTRICKS PHP si formularele HTML PHP si formularele HTML Formularele si link-urile sunt me completa, desigur,zeci de for mulare online, incepind de la n- Serierea la un serviciv gratuit de e-mail pind a semnareaunei crt de easpei. V- ay intrebat cum funefioneaza acest si care este mecanisml cae face posiil pistes datloriniroduse si manipularea Jor ulterioaré? V-afi uitat vreodata nedumert la linkrleinterinabile si parent fra sens dinunele pain de wet in acest capitol vor afl cum ajunge informatia dint-un formula la un seipt PHP gi cum, un link poate fi mai mult dct ceea ce pare la prima vedere Actiune! Un formular este compus in mod nor- mal din declaraia urmati de ‘elemente de tip i un buton ,sub- mit, In momental in care api butonul submit, datele adiugate de uilizator sunt transmise serverului unde sunt prelucrate. SA vedem practic cum se realizeazd acest lueru, reereand intr-un_formular dialogul cu care am inceput s& invaim PHP, unde Gigel trebuie si adune doud rnumere. Pentru aceasta vom crea dou fisiere, formular.html gi adunare.php, jerul HTML vom avea urmitorul formular: Fisierul adunare,php va confine uma torul cod: sort = § s0e9t*ne1"1 S02 = § post *ne2"1 CHIP SPECIAL - SITE DINAMIC Remutatul adunai fui 15 cu 13 este 28 larului au fost adunate gi rezultatul afigat. Rulatifitp:/ocathostiformular: uml, seriefi cite un numa in fiecare easutl de textsi apisafi butonul ,Adund”, Repetati cexperimentul cu alte numere Din acest exemplu observam mai multe lucruri; in declararea tag-ului
am specificat fisierul care ur- meazi si prelucreze datele (action="adunare php"), precum si me- toda prin care se transmit datele citre server, in cazul de faki POST. Element- cle formularului au cite un nume dupa care vor fi recunoscute de etre interpre~ tor (ex: $ POST{‘nrl”). La apisarea Dutonului Aduna", informatia va fi tri- ‘mis serverului. § POST este un array ceare confine toate datee trimise prin for- ular cu metoda POST iar fiecare din ‘elementele acestui array poate fi accesat ca $_POST[‘nume_variabila’) ‘Tema: adaugati incd un element, in formu- lar si modificaji scriptul PHP pentru a aduna cele trei numere. Valoare Elementele unui formular pot avea o valoare predefinita, modificabild de c&tre utilizator, daca atunci cand le dectarim, specificim aceasti valoare. Modificati fisierul formular.html pentru a contine ccodul urmator: Daca accesim hutp://localhost/ mila. im] observim cin cdmpurite ‘destinate numerelor ce urmeazi a fi adu- nate exist deja valorile 15 si respectiv 13, Putem apéisa butonul ,,Aduna” pent- nia objine rezultatul 28 sau putem modi fica oricare din valorile prezentate in formular (direct in browser, nu editind codul HTML), pentru a objine alt rezultat. Verificare Un utilizator sugubdit ar putea intro duce un text in loe de un numar sau ar putea lisa chiar cele dou cmpuri goale Inexemplul nostru aceasta n-ar fio prob- lem inst daca am face o aplicate serio asi on-line pentru primaria oragului, cu ajutorul clreia cetifenii si-gi plateascd impozitele, omiterea verificdrii datelor trimise de uilizator ar duce lahaos. Dac cetifeni ar putea scrie un text oarecarein Toc de codul numeric personal sau nu -ar completa, fa de impozit nu ar putea fi procesat De aceea, pentru orice fel de date trimise de eatre utilizatori vom face veri- ficitile de rigoare. Pentru a exemplifica, ‘vom face doui fisiere noi, enp-html cu care vom cere codul numeric personal al utilizatorului gi verificare_enp.php cu ccare vom verifica daca acesta este valid ‘np html va confine urmatorul formular: ‘Algoritmul din verificare_enp.php va EDITORIAL fi orientat dupa cerinfe: cdmpul Cod numeric personal” mu poate fi gol, tre- ‘buie si fie numeric, si contin 13 carac- tere si prima cif a sa trebuie si fie I sau 2. Vornverfica perand fiecaredincerinje iar in cazul unei incompatbiliti oprim executia scriptului folosind exit; Dac ‘nu am opri execufia dup’ semnatarea crori, seriptul ar rula fn continuare pind la capat gi un cod numeric personal in- valid ar fi inrodus in baza de date a primiriei desi pe pagina de output ar apirea mesajul de eroare. Am putea evita rularea seriprului pfnd la eapit dacd am folosiif.. else: nu ante indeplinita ‘ SE coringa 2 mu es Lf oaringa 3 ms cate ineptinis. Cu if... else ne-am pierde in acolade aga eX vom folosi exit in verificdrile noastre pentru a oprirularea ulterioaré a seriptului dacd una din cerinfe nu este indeplinits. in continuare vom serie seriptul de verificare a codului numeric personal introdus in formularul enp-html. Serieti si voi acest cod omijand comentarile ajutitoare, ‘daca utilizatoral nua introdus nimic {in cdmpul “Cod numeric personal", afigim un mesaj de eroare si oprim execufia seriptului*/ Ae(6_Postt ong" =e >) ‘ print "cinpst \"Cod nuneric mo {eee ee ee eee Formular cu un cmp pentru intro- ducerea codului numeric personal pentru verificare. INTRODUCERE , INSTALARE , ORGANIZARE , MySQL. personal\* este gol! Apfsati bow /* Dacd scriptul a ajuns pind aici inseamna ci cerinja anterioara a fost indeplinits. Trecem atunci la urmatoarea vverificare: dack CNP nu este numeric, afigm alt mesaj de eroare. is_numeric ‘este o funcfie predefiniti in PHP care verificd dupa cum fizice si mumele, dacd informatia trimis& de ut ‘numa sau nu*/ s¢(145_panerse(5_P087{ eng" 1)) ‘ 1 daca CNP nu are exact 13 caractere, afigim un mesaj de eroare, Funcfa strlen retumeaz numirul de caractere (inclusiv pati) dint-un string. stren(“mere")=4, strlen(“120"3 si strlen(“4 mere")=6.%/ snr_eavactere = strten(¢_P03t! onp"1)1 caractere! Apiesti hutonul Back $n browser pe /* dact prima cift.a CNP nueste I sau 2, codul numeric personal nu este valid. Pentru verificarea acestei cerinfe vom folosi functia substr care retumeazd 0 parte dintr-un string. Funcfia substr se apeleazd astfel: substr(.string”, numarul caracteuluide lacareseincepe“ierea", rumérul de earactere ce urmeazi a fi retumate dup acest carater) lat gi chteva exemple: CCREARE SITE ADMINSTRARE , TIPSSTRICKS, fsprina_citea ~ supete (6_#0871°enp"1 fk the 2 eau 21 Apzeapi Dotonvt event la pagina anterioard gl a- ‘/*Daci rularea scriptulu a ajuns pind {nacest punct inseamnd cd toate cerintele ‘au fost indeplinite si codul numeric per- sonal este corect. in aplicatia noastra ar ‘urma sil introducem in baza de date dar ‘cum nu acesta era scopul exemplul ‘vomafiga doar un mesaj de confirmare:*/ GET Formularele pot fi transmise serveru- lui si_cu metoda GET () insd este preferabil si evitati si folositi GET in formulare din trei motive: datele din cadral formularului sunt transmise serverului prin atagarea la URL, nu se pot transmite decit caractere ASCII gi canti- tateade informatie transmisibilaestelimi- tatd ca marime. acd folosim metoda GET trebuie ca si in cadrul scriptului PHP si accesim variabila ca atare (ex: $ GET[‘enp"] in loc de $ POST[‘enp")). Datele formu- Jarului sunt transmise prin URL sub for- ‘ma http://www.adresa.site/figer-php? variabilal=valoare| &variabi valoare2. Ca reguli general, orice vari- le trimise scriptului PHP prin inter- ‘mediul unui URL sunt accesible in ar- ray-ul §_GET gi astfel nu este neapérat ‘necesar Si construim un formular pentru a trimite variabile serverului. Vom rula tun exemplu simplu: formmaser.tirt (HIP SPECIAL - SITE DINAMIC EDITORIAL , INTRODUCERE , INSTALARE , ORGANIZARE , MySQL [et TS a_i snc te ey canara eo SNM Variabilele transmise prin metoda GET suntvizibilein baradeadrese abrowse- rll Rullind acest exemplu putem vedea ‘cum numele si valorle elementelor for- smularului se transmit fisierului PHP in URL. Putem accesa direct in browser bitp:/localhost/adunare.php?nr1=9053, &n12=4906 sau hitp:/localhost adunare php ?nr1=423 8nr2=546, trans- mifind datele prin URL, fir8 sa com- pletim formularul ‘in cadrul site-ului nostra yom folosi formulare pentru a lisa posibilitatea uti- lizatorilor si adauge comentari si pentru atrimite adresa unde dorese si primeasca ccrfile cumplrate. Datele din formularele completate de citre vizitator vor fi tri- mise serverului prin metoda POST. Tot incadrulsite-ului vom folosi de multe ori GET pentru a obtine variabile dintr-un URL. Spre exemplu, pentru a vedea 0 carte anume adresa va fi http://localhost’ carte php?carte_id=345. Scriptul PHP va selecta din baza de date doar informatiile despre cartea cu id 345 gle vaatiga. Vom vedea cum in urmitoarele doud capitole. Globals Exist o setae in php.ini care v-ar per- ‘mite accesul a variabilele trimise de utiliza- tor fir si le acces din array. Aste, nt- ‘un form trimis prin metoda POST, valoarea din ar putea fi accesibili ca Soarecare in loc de $_POSTY"oarecare’]. Acelasifucruestevala- 1» CREARESITE , ADMINISTRARE , TIPSATRICKS [Be Eat Yen Favater Tene Heb | [abies Acero net Alda amar [73 | ss Formularulcuajutorul caruia vom trimi- te doua numere pentru afi calculate la server. bil si pentru metoda GET sau pentru ele mentele din array-ul $ FILES. Varabila $_GETL oarecare’ ar putea fi accesibi ca Soarecare iar $_FILES[*isier'['size"] ca Siser_size, Desi poate plirea mai usor de rogramat asa, este recomandabil sf isa setarea Globals=Off in php.ini (asa cum cestesetat implicit siintotdeaunasaccesati variabilele din array-ul din care provin Asfel evita o serie de probleme de secur- tate, probleme pe care le vom explica mai pe larg in capitolul dedicat securittii aplicailor web). . Lucrul cu baze de date PHP si MySQL Dezvoltarea exploziva a limbajului PHP din ultimii ani este in cea mai mare parte datorati usuringei cu care acesta lucreazi cu bazele de date. HP oferd programatorului omultime ‘de functii predefinite pentru lucrul cubaza de date, Aceasta inseamna cd din cadrul PHP putem executa toate ‘operatiunile pe care le-am fut in capi- tolul dedicat invaparii MySQL. S8 ne reamintim pasii pe care iam facut pentru ‘a interactiona cu baza de date din linia de comanda: 1. ne-am conectat cu numele si parola (mysql -u root -p) 2, am ales baza de date cu care si interaction (USE librarie) 3. am executat o comanda SQL (SE- LECT * FROM cart) CHIP SPROIAL - SITE DINAMIC Din PHP putem face acelagi lueru, cu ajutorul functilor predefinite. Sa facem primul nostru script cu care si interaction cu baza de date (nu uitati cf serverul MySQL trebuie si fie por- nit) test php ‘Observimsimilitudinea intr cele dous abondiri. Cu fimefia mysql_connect ne conectim la baza de date specifcind hos- tul a care aceasta se af (localhost), nu- mele de utilizator (oot si paola (penta ci: aceasta este goal folosim un string aol"), Funcjia mysql select_db("ibra- Tie") este echivalent& cu USE librare ‘Aceste doi func trebuieapelteintot- ddeauna atanci cind dorim sB uri eu baza de date, intnte de a efectua vreo interogare.Pitem efectuaoricit de multe interogri dovim fra s fe nevoie sé ne reconecim pent iecare din ce la baza dedite, doar prinapelarea mysql_connect $i mysa_select_db o singur8 dati la in- cept in ce priveste mysql_query, notim dou lucrri. in prml nd, au am fo- Tosit punt si virgul8 pentru a incheia instruetiunea SQL aya cum eranecesarin lini de comand In al doilea rind, daci rulai script in browser mu vet vedea rimic pe ecran aga cum probabil ¥-ti astepat.Aceasta pentru cd mysql_query EDITORIAL , INTRODUCERE , INSTALARE cexecutlinterogarea dar nu afigeazi rezu- atul ci returneaza o valoare: TRUE dacd interogarea.a fost efectuatd cu succes sau FALSE dac& aceasta a esuat. Pentru instructiunile de tip SELECT, SHOW, EXPLAINsauDESCRIBE, mysql_query retumeazi si un identificator de resurse pe care il putem atribui unei variabile. Resursele sunt variable speciale care confin referinge cdtre resurse externe (precum rezultatul unei interogari a ba- zei de date) si pot fi manipulate cu ajutorul functilor. Este evident cf dacd rezultatul inte- rogitri ar fi fost afigat direct in browser, ‘nuam putea modifica aspectul sau functia paginilor de web dinamice siamazon.com ar fio simpli ingiruire de date. ‘Si ne convingem c& rezultatul inte- rogirii este 0 resursi. Pentru aceasta ‘moificajutima linea seriptuluisiseriei: php. Srosures = myogi_qvery ("SELECT + FHoK Putem de asemenea serie interogarea SQL intro variabilé pe care si o folosim ca parametru al functiei mysql_query. Aceasti metodi este preferata de multi deoarece textul interogarii este mai usor de reperat in cadrul scriptului: teste Som = "SELECT * FROM carti"y PHP oferi functii pentru accesarea resurselor care rezulté din mysql_query. Cuajutoral mysql_num_rowsputemafla cite rinduri a retunat interogarea: fost php ser = mysql_num_xovs(Sreeures) + print "Sunt énr cart in baza de date": 1 ORGANZARE , MySQL , GBI). cREARESTTE , ADMINISTRARE , TIPSATRICKS Pentraaafiga valoricadruldinresursi retumate putem folost mysql_result. In «exemplulurmétorafisimcontinutlcém- plu ths de pe primal nd al ‘abel (numerotarea ineepe de Ia 0 testpho Parametrii functiei mysql_result sunt: resursa (Sresursa), rindul (0, primul rind al tabelului) si numele cdmpului ("th 7 ans continues ctmpulst $4 Mysql_result este greoi de fotosit eoarece suntem nevoiti si accesim fiecarecoloand a fiedrui rind in pate Jn ajutoral nostra vine mysl_fetch aay cu care putem accesa valorile din tabe- Jul returnat in interogaredint-un array. Ptem accesa resursa ca un array nie test pho sarreozultat syaal_toton_areayGrecutes MOG. Ma) sau asociat sarenersl npea_feechaeraySresarn $50, ASSOC]; Garrnazsizat) acd mu specificim tipul aray-ului sau folosim MYSQL_ BOTH, vom putea acce- sa rezultatul att numeric eft si asocativ. rnyagi_totch_arcay (Sresursa); eta)" *.sarrRezultat (3) "bo" print SarsRezultat (+ + Sarmenultat(*eitlo"1s actet Observim folosirea operatorului . de ‘concatenare a stringurilor pentru a inter- ‘pune spafi si line break inte variabilele ‘ceurmeazi.a fiafisate, Mai observa ci, ‘desi mysql_num_rowsne spune c& avem ‘mai multe clini, print_r (SarRezultat) sau print SarrRezultat{‘titlu’] ne afigeaz "? Folosind while seriptltrece prin toate valorlearray-ului panda sfarit gi pen- tra fiecare din ele afgeaza valorte cim- purilor tit si deseriere. Variabila $row este arindul ei un array (observa citam apelat-o ca atare, Srow tila’) gi asta pentru ci SarrRezultat este un array mul- tidimensional. Ce este un array multidimensional? Un array care confine la réndul Iui alte array-uri. in eazul de fat, SarrRezultat este mulfimea array-urilor de randuri din tabel ir fiecare Srow este un array care cuprindevalorilerdnduluirespectiv.Spre exemplu, in pseudocod: CHIP SPECIAL - SITE DINAMIC EDTORAL , INTRODUCERE , INSTALARE ,, ORGANIZARE , MySQL , GQ). CREARESITE , ADMINISTRARE , TIPSSTRICKS Dupai cum vom vedea in continuare, aceste cfteva functii ne vor fi de ajuns pentru a putea construi un site dinamic interact si rareori vefi avea nevoie de mai mult, Vi recomand ca de cate ori suntefi in impas si consultagi manualul PHP pentru a afla informa despre cele~ lalte funcfii MySQL disponibile. Mai putin inseamna mai mult Sirevenim |a site-ul nostru. Daca arfi fost si facem site-ul in HTML, pentru fiecare carte ar fi trebuit sa concepem cle o pagind si pentru fiecare noua carte ar fi trebuit si modificam pagina dome- niuluicdruia i apartine. CuPHP in schimb tot ce trebuie si facem este prima pagini, 6 pagini pentru domeniu si una pentru carte, Atat-trei pagini vor fi tot ce ave nevoie, indiferent de numdrul carjilor sau domeniilor din baza de date. In con- tinuare vom exersa functiile MySQL ale PHP crednd o schiti a site-ului ‘Spuneam ci pe prima pagina vomavea rnumele de domenii, Numele de domenii Te objinem folosind interogarea SELECT ‘nume_domeniu from domeni iarpentrua Te aga, scriptul PHP pentru prima paging va aria ca in exemplul urmator: index.php (CHIP SPECIAL - SITB DINAMIC [adios [ED ttriocehos) libraria mea Sunt 6 cartiinbaza de date Domeni Mitel ‘© prima pagina ce contine lista dome- niilor disponibile, Scrieti si nulati acest script. E intere- sant, spuneti, dar mu suficient de impre- sionant? Fi bine, atunci si facem in ase fel incdt si putem da click pe fiecare nume de domeniu si si intrim intro pagini unde ne sunt afigate cértile din domeniul respectiv. ‘Cum facem acest lueru? Ne reamintim cA am legat tabelele domenii si carti prin id_domeniu. in timbaj SQL am putea si folosim interogarea sexrcr ta. domenis pentru & afigatoatetitlurile dincategoria ,Poezit” sila fel pentru toate celelalte categori, Nuvom face cite pagina pentrufiecare ‘domeniu in parte deoarece acesta este exact scopul nostru: i scriem un singur script care si afigeze dinamic rezul- tatele: cArjle de poezii pentru domeniul Poezii” si operele de teatru pentru do- ‘meniul ,Teatru”, Pentru aceasta vom folosi o variabilé care si confind nu- mele domeniului, variabila pe care 0 transmitem scriptului domeniu.php printr-un URL. Va trebui si modificdim fn index.php linia print $roe{ ‘mune denen’). be si sf transformim numele de domeniu {ntr-un link prin care transmitem varia- bila scriptului din domeni.php. sas eae pesto Astfel in prima paging toate numele «de domenii vor fi link-uri, ca de exemplu Poezie. Fifi ateni la dis- punerea ghilimelelor in cadrul scriptu- 1, in special la modul in care am inclus ghilimele duble int-un string incadrat de ghilimele simple. SA facem in continuare scriptul care afigeazi ttlurile disponibile in domeniul pe care am dat click. in fisierul domeniu.php vom folosi variabila tri- ‘mis prin URL pentru a obfine din baza de date doar earjile apartinaind domeniu- Tui respectiv domeniuphp ie een ibs ns torr ew ee fn cet doen Titluri Pees Poess, ohana 2 Poesi ohana 3 ais ER Lista crtilor din domeniul Poeziialese dupa id_domeniu. EDITORIAL , INTRODUCERE , INSTALARE Fe eae |e lo. seh” fone sates [Breet libraria mea ‘Sat 6 carn baza de date Putem trimite numele domeniuluiprin URL. ‘Vi spuneam in capitolul despre ‘MySQL eum id-urile ne pot usura mun- cca, Acest lucru devine evident atunci ind creem pagini de web dinamice deoarece sintaxa interogatilor SQL poate fi simplificatd foarte mult. Fiecare nume de domeniu din tabetul domenii are cate un id asociat si atunci, stiind ed domeniul Poeziiareid_domenity 1 am putea alege cdrtile din domeniul respectiv folosind simplu: SELECT * FROM carti WHERE id_domeniu=! in loc de mai greu de intelesul SELECT titlu FROM carti, domenii WHERE nume_domeniu= AND ddomenii.id_domeniu=carti.id_ domeniu, (Cum? Trimitind valoarealuiid_domeniu prin URL, pentru fiecare domeniu in parte, Modificati index.php astfel: 2p azray Gresuesa2]) mente. Seoul id donenis’ 1.7 Acum link-urile catre pagina domenii.php vor fi de tipul Poezit ‘, $a modificdm acum si interogarea $sql din domeniu php sisi o simplified folosind id_domeniu ca referint: $4. domensu".§_GEE( "id doventu') Putem, in mod similar, face o pagin’ ‘cares preiaid_cartedin URL sisiafigeze Pentru cartea respect titul, autorul i Adescrierea. Vom face acest lucruint-unul din capitolele umatoare, Pentru moment Ins, este sufcient sf injelegetifunctile MySQL si modul in care se folosese vari- abilele in interogarile SQL. $i chiar mai mult Putem folosi functia mysql_query pentru a efectua sialte operatiicubaza de date: INSERT, UPDATE sau DELETE. Si facem inti un script care ne afiseaz toate ttlurile din tabelul cari, script de ‘care vom avea nevoie in continuare pen- ‘tru a consulta baza de date far si fim nevoiti s& intram in linia de comanda ‘Vomprezentadateleintr-untabel HTML: toate_cartle.pho since Grownysah fot array(trasures)) at] te/ea> Rulati sriptul accesind adresa http: Tocathost/toate_cartile.php gi apoi creati tun nou fisier, operati php: operat. php » ORGANZARE , MySQL, GJ... creanesivé , ADNIISTRARE , TIPSETRINS libraria mea ‘Sunt 6 cartin baza de date Domenii Poesit ‘Teatru Mitologie © orientare mai usoara. Rulatiscriptulinbrowserapoiaccesati hup:/localhosttoate_cartile.php pentru fa vedea c4 noul tit @ fost introdus in tabel gi -a fost acordat automat gi un id. Daca folositi Opera sau setarea de re- fresh din Internet Options din Intemet Explorer Check for newer versions of stored pages - Never”, va fi nevoie si reinedreati pagina (refresh) ‘SX modificdm operafi.php pentru a vedea cum folosim instructiunea DE- LETE, rescriind variabila $sql [i (Romeo aan [a lane Bo fPoest Bees vob? Toate cartile din baza de date. CHIP SPECIAL - SIT DINAMIC EDITORIAL , INTRODUCERE , INSTALARE , ORGANIZARE , MySQL GED. cresre sme , anmuustrare , TPSATRIOIS operatiiphp Rulatisiacestexemplusiapoiaccesati hntps/localhosttoate_carile;php pentru a vedea cd inregistrarea a fost stearsa din ‘abel. PHP, MySQL si formularele ‘A sosit momentul si punem cap la cap toate luerurile invijate pani acum, Folosind formularele HTML putem interacfiona eu baza de date fir si tre- ‘cemprin chinurilesereritinterogirii SQL. in linia de comand sau in cadrul unui seript PHP ori de cate ori vrem si ‘adiugim, s8 modificdm sau si stergem vreo inregistrare ‘Si facem un formular care si ne ajute fn addugarea de ttluri noi adaugare.htm! siscrptl care va prelua valoarea din sau ) a cirei valoare este conjinuti in tagul option (