Sunteți pe pagina 1din 17

Introducere Pentru mult lume, principala raiune de a nva un limbaj precum PHP ar fi interaciunea pe care o ofer cu bazele de date.

In acest curs cutm s explicm cum se folosete PHP i M !"#, pentru a memora informaii pe $eb i cum includem toate astea pe site%ul $eb. Pentru a parcur&e acest curs sunt necesare cel puin elementele de baz privind folosirea PHP. !e recomand deci parcur&erea cursului de PHP, nainte de a continua. De ce mi trebuie o Baz de Date? 'ste, de fapt, surprinztor c(t de util poate fi o baz de date, mai ales atunci c(nd poate fi folosit ntr%un site $eb. !unt foarte multe lucruri care se pot face ntr%un astfel de caz, de la afiarea unor simple liste i p(n la producerea inte&ral a pa&inilor $eb dintr%o baz de date. )(teva exemple cu PHP i M !"#, folosite mpreun, sunt* !c+imbarea % rotaia ,anner%elor. Pentru a realiza sc+imbarea pe ecran a ima&inilor la diferitele vizitri ale unei pa&ini i a asi&ura astfel un interes mai mare al vizitatorilor, se poate folosi un script PHP care desc+ide o baz de date extra&e aleator o ima&ine sau un set de ima&ini, pentru a%l include ntr%un set de pa&ini $eb. !criptul PHP va contoriza deasemeni numrul de c(te ori a fost vzut banner%ul, put(nd, cu modificri minore, s urmreasc c+iar i numrul de click%uri. Pentru a adu&a, sc+imba sau edita bannerele, tot ce avem de fcut este s sc+imbm baza de date iar scriptul va ncrca banner%ul corect n toate pa&inile site%ului $eb. -orumurile $eb. !ute de forumuri de dezbatere sunt acum realizate % ruleaz n PHP i M !"#. .cestea s%au dovedit mult mai eficiente dac(t alte sisteme, creind c(te o pa&in pentru fiecare mesaj i oferind o lar& varietate de opiuni. /oate pa&inile forumului pot fi actualizate prin sc+imbarea unui script PHP. ,azele de 0ate. 1n astfel de exemplu 2edificator3 l ofer site%urile care dau toate informaiile dintr%o baz de date. !pre exemplu, !cript .venue este rulat de c(teva scripturi, care furnizeaz toate informaiile dintr%o baz de date ampl. /oate cate&oriile de scripturi diferite pot fi accesate ntr%un sin&ur script exact prin sc+imbarea 14#%ului pentru a accesa diferite pri ale bazei de date. !ite%urile $eb. )(nd avem un site de mari dimensiuni % cu multe pa&ini, i dorim s modificm aspectul &eneral sau s sc+imbm proiectul, c+estiune care ar cere foarte mult timp pentru aducere la zi i ncrcare. )u PHP i M !"# ntre&ul site $eb se poate reduce la unul sau dou scripturi PHP care s acceseze o baz de date M !"# pentru a obine informaiile pentru pa&inile $eb. Pentru a actualiza sau a modifica proiectul centrului $eb nu trebuie s sc+imbm dec(t o pa&in. De ce e nevoie? !unt necesare trei componente pentru a putea rula scripturi PHP care s acceseze baze de date cu M !"#. 5. 6n primul r(nd, este nevoie de un server $eb. .cesta poate fi sau pe calculatorul personal sau pe o 7&azd7 $eb. 8ricare pac+et % oricare tip de server $eb este acceptat i va lucra cu PHP i M !"#, dar cel mai recomandat este .pac+e, care e public i &ratis. 9. PHP trebuie s fie instalat pe server. 0ac nu este deja instalat, putei s o facei sau s apelai la administratorul serverului $eb, n acest sens. Pac+etul de instalare poate fi descrcat % preluat de la +ttp*::PHP.net i este deasemeni public % &ratuit. 0ac nu suntei si&ur dac este sau nu instalat, o s vedei mai jos cum v putei lmuri.

;. 6n fine, avei nevoie de M !"#. .cesta este de fapt pac+etul de pro&rame pentru &estiunea bazelor de date. Putei folosi deasemeni multe alte sisteme de baze de date 2!"#, 8racle etc.3 dar aici discutm despre PHP:M !"#, deci avem nevoie de M !"# 2cu toate c se folosesc comenzi care in de limbajul !"# i 7mer&7 la oricare din sistemele de baze de date !"#3. <i pac+etul M !"# este public % &ratuit, put(nd fi preluat din pa&ina oficial a firmei M !"#. 0ar i n cazul M !"# trebuie s verificm mai nt(i dac nu cumva este deja instalat. 0ac nu putei instala PHP i M !"#, sau dac &azda $eb nu v%o permite, putei apela la alt server $eb, la alt &azd. !pre exemplu, -reedom9!urf este un server $eb public, care acord acces liber i suport PHP, av(nd M !"# instalat. Host4oc=et este un alt server excelent care ofer spaiu de p(n la ;>> M8, i include PHP, M !"# i multe altele, dar percepe o tax de abonament de 5> 1!0 pe lun. Cum aflm dac PHP i MySQ !unt in!talate 'xist un test simplu, at(t pentru PHP c(t i pentru M !"#* #ansai % desc+idei un editor de texte i scriei urmtoarele* ?@ p+pinfo23A @B salv(nd fiierul cu un nume precum phpinfo.php .poi ncrcai acest fiier n spaiul Ceb, pe server, apel(ndu%l, dup aceea, din navi&ator. 0ac PHP%ul este deja instalat vei cpta o pa&in plin cu toate detaliile instalrii respective. Parcur&ei atunci aceste informaii. 0ac &sii o seciune despre M !"# atunci nseamn c M !"# este i el deja instalat. "e!tiunea Bazelor de date )+iar dac tot ce ine de administrarea bazelor de date poate fi realizat prin scripturi PHP, instalarea pe server a pac+etului PHPMyAdmin poate aduce un plus de confort. 'ste un excelent set de scripturi care asi&ur o interfa administrativ pentru bazele de date M !"#. !i mai este i public%&ratuit. )u el putei adu&a, elimina, edita, salva i vizualiza bazele de date, fiind deosebit de util pentru depanare. Sco#ul ace!tui cur! 1rmrim familiarizarea cursantului cu c(teva din elementele de baz ale folosirii PHP mpreun cu M !"#. Pentru asta vom urmri mereu un exemplu. Parcur&(nd cursul de fa vei nva cum s creai un pro&ram bazat pe $eb pentru a contacta colaboratorii % o variant de caiet de adrese. .cest pro&ram v permite s memorai numele mpreun cu adresa corespunztoare, adresa e%mail i numrul de telefon. Dei putea s actualizai nre&istrrile, s cutai n baza de date. 'xist(nd Ei opiunea de a trimite un mesaj email la toi cei din baza de date 2reinei ns* acest sistem nu va fi folosit pentru expedierea unor mesaje nesolicitate3. 0up realizarea acestui sistem vei fi, cu si&uran, n msur s creai aproape orice tip de baz de date pe $eb. Partea 9%a* )onstruirea unei ,aze de 0ate Introducere Mai nainte de a porni construcia unor script%uri pentru baze de date, ar trebui s avem o baz de date n care s plasm informaii i din care s citim. In aceast lecie vom vedea cum

creem o baz de date n M !"# i cum o pre&tim pentru date. )a un exemplu, vom crea o baz de date de tip carte de adrese de contact. Con!truc$ia Bazei de Date ,azele de date M !"# au un sistem de iniializare standard 2un setup3. 'ste vorba de o baz de date, compus din tabele, oarecum separate, conin(nd diferite c(mpuri, etc. c+iar dac sunt parte dintr%o baz de date. -iecare tabel conine nre&istrri care sunt fcute din c(mpuri. Conectarea la o Baz de Date Procesul de instalare a unei baze de date M !"# difer de la o platform la alta. In esen este vorba peste tot de un nume al bazei de date, un nume de utilizator 2cont3 i o parol. .ceste informaii sunt cerute pentru conectarea la baza de date. 0ac avei pac+etul PHPM .dmin 2sau un pro&ram similar3 instalat, atunci putei s intrai acolo i s v conectai introduc(nd contul 2numele de utilizator3 i parola. 0ac nu avei aa ceva, atunci trebuie s facei ntrea&a administrare a bazelor de date folosind script%uri PHP 2i o putei face3. Crearea unei %abele Mai nainte de orice altceva cu baza de date, trebuie s v creai o tabel. 8 tabel este o seciune a bazei de date pentru memorarea unor informaii structurate 2le&ate3. Intr%o tabel vom defini diferite c(mpuri care vor fi folosite n acea tabel. 0in cauza acestei construcii, aproape toate centrele cu baze de date trebuie s fie satisfcute folosind doar o baz de date. )rearea unei tabele n PHPM .dmin este simpl, scriei numele, selectai numrul de c(mpuri i F"uotAapsaiG butonul 2click3. .jun&ei atunci la un ecran setup n care trebuie s creai c(mpurile pentru baza de date. 0ac folosii un script PHP pentru a crea propria baz de date, iar completa creere i iniializarea vor fi fcute tr%o sin&ur comand. C&m#uri 'xist o lar& varietate de c(mpuri i de atribute disponibile n M !"# i vom discuta doar c(teva din ele* %i#ul c&m#ului De!criere /IHIIH/ Humr Intre& mic !M.##IH/ Humr Intre& mic M'0I1MIH/ Humr Intre& IH/ Humr Intre& D.4)H.4 /ext 2maximum 9JK caractere3 /'L/ /ext .cestea sunt doar c(teva dintre c(mpurile disponibile. 8 cutare pe Internet ne poate furniza lista cu toate tipurile de c(mpuri permise. Crearea unei %abele cu PHP ! creem o tabel din PHP este ceva mai dificil dec(t cu M !"#. .vem de parcurs urmtorii pai* )4'./' /.,#' numeMtabel N -ields O )(mpurile sunt definite dup cum urmeaz* fieldname t pe2len&t+3 extra info,

1ltimul c(mp introdus nu poate include nici o vir&ul. 8 s dm ndat un exemplu complet privind aceste definiri. Baza de date cu adre!e de contact ,aza de date de contact va conine toate informaiile de contact ale cunoscuilor introdui n tabel. Iar informaiile vor putea fi editate i consulate n internet. 1rmtoarele c(mpuri vor fi folosite n baza de date* 'ume %i#ul un(imea De!crierea id IH/ K Un identificator unic pentru fiecare nregistrare Hume D.4)H.4 5J Numele de familie al persoanei prenume D.4)H.4 5J Numele de botez al persoanei telefon D.4)H.4 9> Numrul de telefon mobil D.4)H.4 9> Numrul de telefon mobil fax D.4)H.4 9> Numrul de fa email D.4)H.4 ;> Adresa e!mail Ceb D.4)H.4 ;> Pagina "eb personal Poate v mirai c am folosit un tip de c(mp D.4)H.4 pentru coloana mumrMtelefon:fax, c+iar dac acestea sunt formate din cifre. )+iar dac am putea folosi tipul IH/, este preferabil s folosim D.4)H.4 pentru c astfel vor fi permise spaii i cratime, precum i poriuni de text, la fel ca numerele scrise ca text 2exemplu 5P>>%)8MP.HI3 i cum nu vom iniia apeluri telefonice de pe $eb, totul e n ordine. 'xist nc ceva de care trebuie s avem &rije n aceast baz de date. )(mpul id va fi pus ca P4IM.4I, IH0'L, 1HI"1' i iniializat ca auto#increment 2poziie ce apare n 'xtra n PHPM .dmin3. 4aiunea pentru asta este c acesta va fi c(mpul identificator 2primar sau index3 i deci trebuie s fie unic. 0efinirea sa ca auto increment nseamn c la adu&area fiecrei nre&istrri, c(t vreme nu specificm acolo un id, acesta va primi ca valoare urmtorul numr. 0ac folosim PHPM .dmin sau un pro&ram de mana&ement, putem crea o tabel numit contacte. Crearea %abelei n PHP Pentru a crea aceast tabel vom folosi urmtoarea secven de comenzi PHP. 8 parte dintre comenzile de mai jos n%au fost nc discutate, dar le vom explica n detaliu n lecia urmtoare. ?@ QuserRGusernameGA QpassCordRGpassCordGA QdatabaseRGdatabaseGA m sSlMconnect2local+ost,Quser,QpassCord3A Tm sSlMselectMdb2Qdatabase3 or die2 G,aza de date nu poate fi selectataG3A QSuer RG)4'./' /.,#' contacts 2id int2K3 H8/ H1## autoMincrement,nume varc+ar25J3 H8/ H1##,prenume varc+ar25J3 H8/ H1##,telefon varc+ar29>3 H8/ H1##,mobil varc+ar29>3 H8/ H1##,fax varc+ar29>3 H8/ H1##,email varc+ar2;>3 H8/ H1##,Ceb varc+ar2;>3 H8/ H1##,P4IM.4I U'I 2id3,1HI"1' id 2id3,U'I idM9 2id33GA m sSlMSuer 2QSuer 3A

m sSlMclose23A @B Introducei numele bazei de date, contul M !"# i parola M !"# n poziiile corespunztoare din primele ; linii de mai sus. Partea ;%a* Introducerea datelor Introducere Pe parcursul precedentelor lecii am vzut ce vrem s nvm n acest curs i am vzut cum putem crea o baz de date pe care s%o folosim n acest curs. In aceast lecie vom vedea cum introducem anumite informaii n baza noastr de date astfel nc(t s devin c(t mai util. Conectarea la o baz de date Primul lucru care trebuie fcut, mai nainte de a putea face ceva, este conectare la baza de date M !"#. .cesta este un pas foarte important, pentru c, dac nu suntem conectai, comenzile ctre baza de date vor eua. Practic, pentru a folosi o baz de date trebuie s precizm numele de utilizator 2 username3, parola 2pass$ord3 i numele bazei de date * QusernameRGnumeMutilizatorGA QpassCordRGparolaGA QdatabaseRGnumeleMbazeiMdeMdateGA 0esi&ur, aici s%ar putea discuta dac nu%i riscant s pstrm parola ntr%un fiier. Hu trebuie s v alarmai, ns, deoarece sursa PHP este prelucrat de server nainte de a fi trimis navi&atorului, astfel ncacircAt este imposibil pentru orice utilizator s vad scriptul. Mai apoi, avem nevoie de o comand care s lanseze conexiunea la baza de date* m sSlMconnect2local+ost,Qusername,QpassCord3A .ceast linie spune PHP%ului s se conecteze la serverul de baze de date M !"# la 7local+ost7 2localhost se numete serverul pe care ruleaz PHP%ul. In afara cazului n care gazda "eb indic altceva, vom folosi localhost3 folosind numele de cont memorat n Qusername i parola din QpassCord. Mai nainte de a discuta cum lucrm cu baza de date, vom vedea nc o comand* m sSlMclose23A .ceasta este o comand foarte important care nc+ide conexiunea cu serverul de baze de date. !criptul va rula nc, dac nu includem aceast comand, iar prea multe conexiuni M !"# desc+ise pot cauza probleme serverului Ceb. 'ste un obicei bun s includem comanda de nc+idere de mai sus dup ce am introdus toate comenzile ctre baza de date, pentru a menine platforma n bun stare. Selectarea bazei de date 0up ce ne%am conectat la severul de baze de date, trebie s selectm baza de date pe care vrem s%o folosim. /rebuie s fie o baz de date la care avem acces, cu respectivul nume de utilizator. !e folosete urmtoarea comand* Tm sSlMselectMdb2Qdatabase3 or die2 G,aza de date nu poate fi selectataG3A .ceasta spune PHP%ului s selecteze baza de date specificat n variabila Qdatabase 2pe care am definit%o mai nainte3. 0ac conexiunea nu se poate realiza procesul 2execuia script%ului3 se oprete afi(nd textul* ,aza de date nu poate fi selectata .ceast parte suplimentar 7or die7 este bun pentru ieire, c+iar dac nu asi&ur dec(t un minim control al erorii.

)*ecu$ia comenzilor 0up conectarea la server i selecia bazei de date dorite, putem ncepe execuia comenzilor pe server. 'xist dou moduri de a executa o comand. Prima revine pur i simplu la introducerea comenzii n PHP. .sta mer&e atunci c(nd nu apar rezultate ca urmare a execuiei comenzii. )ea de a doua variant este s definim comanda ca o variabil. .sta va atribui variabilei rezultatele operaiei. In aceast lecie vom folosi prima cale, deoarece nu ateptm rspuns de la baze de date. )omanda va arta cam aa* m sSlMSuer 2QSuer 3A -olosirea acestei forme a comenzii este util pentru c repetm pur i simplu aceiai comand iari i iari fr a fi nevoie s memorm altele. /ot ce avem de fcut este s sc+imbm variabila. Introducerea datelor .cum ne vom ntoarce la baza de date cu adrese de contact, pe care am creat%o n lecia anterioar. Pentru a introduce primele informaii n baza de date* Hume* Ionescu Prenume* V+eor&+e /elefon* >95 ;WJKXPY Mobil* >X9W ;;WWJJ -ax* >9KW JKXPY5 '%mail* ionescu&+eTpersonal.ro $eb* +ttp*::CCC.cinestie.inext.ro /oate acestea vor fi introduse cu o sin&ur comand* QSuer R GIH!'4/ IH/8 contacts D.#1'! 277,7Ionescu7,7V+eor&+e7,7>95 ;WJKXPY7,7>X9W ;;WWJJ7,7>9KW JKXPY57,7ionescu&+eTpersonal.ro7,7+ttp*::CCC.cinestie.inext.ro73GA Pare puin cam confuz la prima vedere. ! lmurim puin lucrurile. Ma nt(i, apare variabila QSuer creia i atribuim o comand 2vezi para&raful precedent3. 1rmtoarea parte, adic* IH!'4/ IH/8 contacts D.#1'! este destul de uor de neles. 'a spune PHP%ului s insereze n tabel numit contacts valorile care urmeaz 2scrise ntre paranteze3. .colo, ntre paranteze, avem toate c(mpurile de adu&at. .par toate c(mpurile n ordine i sunt inserate informaiile dintre &+ilimele. !pre exemplu* Ionescu va fi inserat n al 9%lea c(mp, care, n aceast tabel este c(mpul 7nume7 . Poate ai reinut c nu am inserat nimic n primul c(mp din baza de date 2id3. .sta din cauz c acest c(mp va fi un c(mp index, elementul unic de identificare. -iecare nre&istrare din baza de date va avea un unic I0. 0in aceast cauz, c(nd ncrcm baza de date, vom pune I0 pe 7.uto Increment7. .sta nseamn c, ne%atribuindu%i nici o valoare, el va lua la fiecare nre&istrare urmtoarea valoare din ir. Iar prima nre&istrare va avea valoarea I0R5 . Partea W%a* Introducere

P(n acum, am creat o baz de date i am ncrcat n ea informaii. In aceast lecie vom vedea cum se realizeaz o pa&in de intrare pentru aceast baz de date, i cum se afieaz coninutul acesteia. Introducerea datelor dintr+o #a(in H%M Introducerea datelor din pa&inile H/M# este aproape identic cu inserarea lor din script%uri PHP. .vantajul const, ns, n faptul c nu apare nevoia sc+imbrii script%ului pentru fiecare c(mp de introdus. In plus, putem permite GvizitatorilorG s introduc direct datele lor. Iat mai jos cum arat o pa&in H/M# cu celule text pentru introducerea detaliilor corespunztoare* ?form actionRGinsert.p+pG met+odRGpostGB Hume -amilie* ?input t peRGtextG nameRGnumeGB?brB Prenume* ?input t peRGtextG nameRGprenumeGB?brB /elefon* ?input t peRGtextG nameRGtelefonGB?brB Mobil* ?input t peRGtextG nameRGmobilGB?brB -ax* ?input t peRGtextG nameRGfaxGB?brB '%mail* ?input t peRGtextG nameRGemailGB?brB $eb* ?input t peRGtextG nameRGCebGB?brB ?input t peRG!ubmitGB ?:formB .ceast pa&in poate fi, desi&ur, formatat i pot apare diferite sc+imbri % variante. 'ste doar un formular de pornire, ilustrativ. Da trebui ns editat script%ul din lecia precedent, pentru ca, n locul introducerii informaiilor direct din script n baza de date, s fie folosite variabilele* ?@ QusernameRGusernameGA QpassCordRGpassCordGA QdatabaseRGbazaMmeaMdeMdateGA m sSlMconnect2local+ost,Qusername,QpassCord3A Tm sSlMselectMdb2Qdatabase3 or die2 G,aza de date nu poate fi selectataG3A QSuer R GIH!'4/ IH/8 contacts D.#1'! 277,7Qnume7,7Qprenume7,7Qtelefon7,7Qmobil7,7Qfax7,7Qemail7,7QCeb73GA m sSlMSuer 2QSuer 3A m sSlMclose23A @B .cest script trebuie salvat ca fiier cu numele insert.php, astfel ca s poat fi apelat de formularul H/M#. /reaba va mer&e ntruc(t, n loc ca datele s fie introduse local, ele se introduc n formular i sunt memorate n variabilele care apar precizate acolo i care sunt transmise apoi PHP%ului. Putem s adu&m script%ului un mesaj care s confirme preluarea datelor. .sta face parte din 7oferta7 de baz a PHP i rm(ne ca exerciiu. Scoaterea Datelor .cum avem n baza de date cel pu7in o nre&istrare, dac nu mai multe. !e pune problema cum vizualizm, cum scoatem aceste date folosind PHP. )unoaterea elementelor de pro&ramare din PHP este necesar, recomandabil fiind parcur&erea Mini%cursului de PHP naintea acestuia.

Prima comand la care vom apela este comanda !'#')/ din !"#, folosit ntr%o cerere M !"# n forma* !'#')/ Z -48M contacts .ceasta este o comand de baz din M !"#, care va spune script%ului s selecteze toate nre&istrrile din tabela contacts. 0ar, de data aceasta, comanda furnizeaz un rezultat, ea va trebui executat atribuin rezultatele unei variabile* QSuer RG!'#')/ Z -48M contactsGA QrezultatRm sSlMSuer 2QSuer 3A In acest caz, ntre&ul coninut al bazei de date va fi atribuit variabilei cu numele Qrezultat 2care va fi deci o matrice, un tablou3. Mai nainte de a putea scoate aceste date va trebui s le extra&em ca variabile simple, separate. Pentru asta trebuie s tim c(te nre&istrri avem n tabel 2deci i n variabila Qrezultat 3. 'umrarea liniilor .vem o comand special n M !"# pentru calculul numrului de linii din tabel. 'ste important pentru c n baza de date se fac uzual numeroase actualizri, completri, ter&eri. QnumRm sSlMnumroCs2Qrezultat3A .stfel, variabila Qnum va cpta ca valoare numrul de linii din Qrezultat 2adic tocmai din baza de date3. .cest numr va putea fi folosit n continuare pentru ciclul n care se vor analiza i desface n variable separate c(mpurile fiecrei linii. Con!truirea ciclului .vem de scris un ciclu pentru a selecta din tabel 2din rezultat3 linie cu linie.... 0efinim un indice, o variabil Qi care va parcur&e 2cu incrementare3 valorile de la 5 la Qnum . QiR>A C+ile 2Qi ? Qnum3 N 8P'4./II#' .!1P4. #IHI'I [[QiA O .cesta este un ciclu tipic n PHP i va executa ansamblul numit 8P'4./II#' .!1P4. #IHI'I de exact Qnum ori, adic de at(tea ori c(t trebuie. #a fiecare reluare Qi fiind mrit cu o unitate. .stfel Qi poate fi folosit i pentru a preciza numrul liniei care se prelucreaz. ,!ocierea datelor la variabile In partea pe care am numit%o 8P'4./II#' .!1P4. #IHI'I trebuie s separm fiecare c(mp din linia % nre&istrare asociindu%l unei variabile. -olosim pentru asta urmtoarea secven* QvariableRm sSlMresult2Qrezultat,Qi,GnumeleMcampuluiG3A .stfel, pentru a extra&e fiecare component din baza noastr de date, vom folosi urmtoarele instruciuni* QnumeRm sSlMresult2Qresult,Qi,GnumeG3A QprenumeRm sSlMresult2Qresult,Qi,GprenumeG3A QtelefonRm sSlMresult2Qresult,Qi,GtelefonG3A QmobilRm sSlMresult2Qresult,Qi,GmobilG3A QfaxRm sSlMresult2Qresult,Qi,GfaxG3A QemailRm sSlMresult2Qresult,Qi,GemailG3A QCebRm sSlMresult2Qresult,Qi,GCebG3A

Hu ne%am ocupat aici de c(mpul I0 2dei o puteam face3 pentru c nu ne este necesar la afiare datelor. Combinarea Scri#t+ului .cum putem scrie script%ul complet pentru scoaterea datelor. In acest script datele nu sunt formatate, adic vor fi afiate toate cu acelai font, predefinit. ?@ QusernameRGusernameGA QpassCordRGpassCordGA QdatabaseRGbazaMnoastraMdeMdateGA m sSlMconnect2local+ost,Qusername,QpassCord3A Tm sSlMselectMdb2Qdatabase3 or die2 G,aza de date nu poate fi selectataG3A QSuer RG!'#')/ Z -48M contactsGA QrezultatRm sSlMSuer 2QSuer 3A QnumRm sSlMnumroCs2Qrezultat3A m sSlMclose23A ec+o G?bB?centerB0atabase 8utput?:centerB?:bB?brB?brBGA QiR>A C+ile 2Qi ? Qnum3 N QnumeRm sSlMresult2Qrezultat,Qi,GnumeG3A QprenumeRm sSlMresult2Qresult,Qi,GprenumeG3A QtelefonRm sSlMresult2Qresult,Qi,GtelefonG3A QmobilRm sSlMresult2Qresult,Qi,GmobilG3A QfaxRm sSlMresult2Qresult,Qi,GfaxG3A QemailRm sSlMresult2Qresult,Qi,GemailG3A QCebRm sSlMresult2Qresult,Qi,GCebG3A ec+o G?bBQnume Qprenume?:bB?brB/elefon* Qtelefon?brBMobil* Qmobil?brB-ax* Qfax?brB'%mail* Qemail?brB$eb* QCeb?brB?+rB?brBGA [[QiA O @B Partea J%a* Introducere P(n acum am vzut cum creem o baz de date % tabelele din care este format, cum inserm informaiile i cum afim datele din baza de date. In aceast lecie vom vedea mai multe moduri de a afia % scoate date din baza de date. -ormatarea !coaterii In ultima parte a leciei precedente am scos o list cu toate persoanele nre&istrate n baza de date. 0e fapt am ajuns s avem definite variabilele care permit scoaterea sau afiarea, nc+eind cu o comand destul de simpl de afiare 2 echo3 fr a o explica. 0esi&ur, datele din tabel ar trebui prezentate pe ecran tot n forma unui tabel. Iar asta nu%i prea complicat. In fond dac tim cum s afim 2scoatem3 fiecare variabil n parte, atunci tot restul privind formatarea, or&anizarea ca tabel, etc., este doar le&at de cunoaterea H/M#.

/ot ce avem de fcut deci este s folosim PHP pentru scoaterile H/M# incluz(nd variabilele n zonele corecte. )el mai simplu este s nc+idem ta&ul PHP i s introducem liniile normale din H/M#. 8ridec(te ori ajun&em la o variabil o vom include folosind o secven de forma* ?@ ec+o GQnumeleMvariabileiGA @B Putem atunci s folosim un ciclu PHP pentru a repeta o secven de cod ca cea de mai sus, la includerea variabilelor ntr%un tablou. !pre exemplu, folosind secvena de cod din lecia precedent cu ciclul corespunztor, putem formata scoaterile pentru ca s apar ntr%o tabel mare* ?table borderRG>G cellspacin&RG9G cellpaddin&RG9GB ?trB ?t+B?font faceRG.rial, Helvetica, sans%serifGBHume?:fontB?:t+B ?t+B?font faceRG.rial, Helvetica, sans%serifGB/elefon?:fontB?:t+B ?t+B?font faceRG.rial, Helvetica, sans%serifGBMobil?:fontB?:t+B ?t+B?font faceRG.rial, Helvetica, sans%serifGB-ax?:fontB?:t+B ?t+B?font faceRG.rial, Helvetica, sans%serifGB'%mail?:fontB?:t+B ?t+B?font faceRG.rial, Helvetica, sans%serifGB$ebsite?:fontB?:t+B ?:trB QiR>A C+ile 2Qi ? Qnum3 N QnumeRm sSlMresult2Qrezultat,Qi,GnumeG3A QprenumeRm sSlMresult2Qresult,Qi,GprenumeG3A QtelefonRm sSlMresult2Qresult,Qi,GtelefonG3A QmobilRm sSlMresult2Qresult,Qi,GmobilG3A QfaxRm sSlMresult2Qresult,Qi,GfaxG3A QemailRm sSlMresult2Qresult,Qi,GemailG3A QCebRm sSlMresult2Qresult,Qi,GCebG3A @B ?trB ?tdB?font faceRG.rial, Helvetica, sans%serifGB?@ ec+o GQnume QprenumeGA @B?:fontB?:tdB ?tdB?font faceRG.rial, Helvetica, sans%serifGB?@ ec+o GQtelefonGA @B?:fontB?:tdB ?tdB?font faceRG.rial, Helvetica, sans%serifGB?@ ec+o GQmobilGA @B?:fontB?:tdB ?tdB?font faceRG.rial, Helvetica, sans%serifGB?@ ec+o GQfaxGA @B?:fontB?:tdB ?tdB?font faceRG.rial, Helvetica, sans%serifGB?a +refRGmailto*?@ ec+o GQemailGA @BGB'% mail?:aB?:fontB?:tdB ?tdB?font faceRG.rial, Helvetica, sans%serifGB?a +refRG?@ ec+o GQCebGA @ BGB$ebsite?:aB?:fontB?:tdB ?:trB ?@ [[QiA O ec+o G?:tableBGA .ceast secven va afia antetul tabelului, apoi va adu&a o linie suplimentar pentru fiecare nre&istrare din baza de date, format(nd datele la scoatere. 0ac suntei deja familiarizai cu PHP i H/M#, atunci lucrurile sunt probabil destul de clare % de uor de neles. 8 s explicm doar una din liniile din tabel, spre exemplu*

?a +refRGmailto*?@ ec+o GQemailGA @BGB'%mail?:aB care construiete o le&tur email la adresa transmis de variabila Qemail . .sta arat una dintre calitile importante i utile ale folosirii PHP pentru includerea datelor M !"# . .dic prin astfel de scoateri putem face pa&inile $eb dinamice. Selectarea unor date #a fel cu afiarea ntre&ii baze de date, PHP poate fi folosit pentru a selecta date individuale, doar anumite nre&istrri, sau nre&istrrile care verific anumite criterii. Pentru asta trebuie s folosim o variaiune a cererii !'#')/ . Pentru afiarea ntre&ii tabele am folosit cererea* !'#')/ Z -48M contacts 0ac vrem ns s selectm doar pe acele persoane care au prenumele 7Mi+ai7 vom folosi o cerere de forma* !'#')/ Z -48M contacts $H'4' prenumeR7mi+ai7 )a i la alte cereri % comenzi !"#, avem de fapt propoziii foarte apropiate de formularea curent din limba en&lez. Intr%un mod asemntor vom putea selecta nre&istrrile pe baza oricrui c(mp din baza de date. 0ar se poate selecta o nre&istrare folosind mai multe c(mpuri, adu&(nd n formularea cererii clauza* fieldR7value7 -r a intra n prea multe detalii, vom mai spune c putem folosi variabilele pentru a transmite criteriul dorit pentru selecie. !pre exemplu, dac dintr%un formular de cutare primim a variabil numit QnumeMcautat putem ima&ina urmtoarea secven* QSuer RG!'#')/ Z -48M contacts $H'4' numeR7QnumeMcautat7GA QresultRm sSlMSuer 2QSuer 3A 4einei c la sf(ritul primei linii avem un . urmat de / , nainte de 0 . Partea 6-a: Introducere In ultimele dou lecii am vzut cum extra&em date din baza de date i cum le afim pe ecran. .cum vom ajun&e la aspectele finale ale afirii datelor, prin selectarea elementelor dorite i controlul erorilor 2stoparea mesajelor de eroare3 atunci c(nd scoatem date. Interce#tarea )rorilor Prin scoaterea tuturor informaiilor dintr%o baz de date, este puin probabil s ajun&em la situaia c(nd nu mai sunt date. 0ar dac am permis ajustri i, ter&eri i actualizri ale nre&istrrilor, atunci se prea poate s ajun&em la o eroare. 0in fericire, cu PHP i M !"#, avem un mod simplu de a evita o astfel de situaie folosind* QnumRm sSlMnumroCs2Qrezultat3A unde Qrezultat conine rezultatul unei cereri % intero&ri a bazei de date 2 precum selectarea tuturor nre&istrrilor3. .a cum am discutat mai sus, aceasta va atribui variabilei Qnum numrul de linii din rezultat 2care s%a utilizat ntr%un ciclu, n lecia a W%a3. Putem insera n ciclu o comand de captare:tratare a erorilor folosind o instruciune I- * if 2QnumRR>3 N ec+o G,aza de date nu conine nici o nre&istrareGA O else N 8utput #oop O Putem dezvolta ramura asta fc(nd%o mai prietenoas. !pre exemplu, oferind o le&tur la pa&ina .dd 0ata, de introducere de informaii n baza de date, atunci c(nd ea este vid.

1rdonarea datelor Hu numai c putem scoate datele n funcie de coninutul unui c(mp, dar putem ordona aceste date pe baza unei re&uli aplicat coninutului unei coloane 2spre exemplu aranj(nd utilizatorii n ordine alfabetic3. In mod normal, afiarea n urma unei intero&ri se face n ordinea stabilit de identificatorul I0, pornind de la 5 n sus. Putem ns ale&e modul de ordonare 2sortarea3 dup oricare coloan din tabel. !pre exemplu, o ordonare util ar putea fi dup numele de botez. .sta nsemn(nd n ordine ascendent 2cresctoare, de la . la \ i de la 5 la 5>...3. Pentru a obine un astfel de rezultat folosim urmtoarea cerere* !'#')/ Z -48M contacts 840'4 ,I prenume .!) Putem folosi, desi&ur i ordonarea descendent, specific(nd 0'!) n locul lui .!) . ,lte variante cu my!2l3numro4! i Sortare Daloarea care i se atribuie 2ca mai sus3 variabilei Qnum este foarte important, nu numai pentru cicluri i captarea erorilor. 1n exemplu poate fi scoaterea doar a ultimelor J nre&istrri adu&ate bazei de date. Mai nt(i, avem ordonarea natural, stabilit de I0, 2ultima nre&istrare av(nd valoarea maxim a I03, dar vom ale&e ordinea descendent. .stfel vom avea nre&istrrile ncep(nd cu cea mai recent i termin(nd cu cea mai vec+e. Mai trebuie doar s numrm, afi(nd doar primele J. 0esi&ur, nainte de a ncepe ciclul de cinci, trebuie s ne asi&urm c Qnum este mai mare dec(t J . .vem deci o secven de forma* if 2Qnum?J3 N QtoRQnumA OelseN QtoRJA O QiR>A C+ile 2Qi ? Qto3 N !')D'H/. 0' )8M'H\I m sSl P'H/41 !)8./'4' )u alte cuvinte, dac avem mai mult de cinci linii n tabel atunci ciclul se va face de la > la J. In caz contrar, dac sunt mai puin de J linii, ciclul va parcur&e exact numrul respectiv de linii. C&m#ul ID .tunci c(nd, n primele lecii am creat baza de date 2cartea de adrese3, am inclus un c(mp numeric numit id. Pe care l%am stabilit ca auto#increment i i%am dat rolul de c(mp primar. .m discutat cum acesta are rolul de identificator unic pentru fiecare nre&istrare din baza de date. .cum facem un pas nainte, folosind acest c(mp pentru a selecta anumite nre&istrri din baza de date. Selec$ia unei !in(ure nre(i!trri Iat cum putem selecta nre&istrri din baza de date folosind coninutul unui c(mp particular* !'#')/ Z -48M contacts $H'4' fieldR7value7 .tunci, folosind unicitatea c(mpului I0 putem selecta orice nre&istrare din baza de date, folosind* !'#')/ Z -48M contacts $H'4' idR7Qid7 unde Qid este o variabil conin(nd numrul unei nre&istrri. !pre exemplu, dac dorim s avem o pa&in $eb &enerat dinamic dintr%o baz de date cu un sin&ur script PHP, putem

scrie script%ul ca s includ pa&ini $eb distincte ca nre&istrri ale bazei de date. .tunci, folosind c(mpul id, putem selecta fiecare pa&in individual plas(nd%o la soatere. Putem c+iar folosi c+iar 14#%ul pa&inii pentru a specifica nre&istrarea dorit +ttp*::CCC.centrulMpropriu.ro:stiri:items.p+p@itemRJWXK Iar script%ul PHP s caute nre&istrarea care are numrul de ordine 2id%ul3 care corespunde valorii variabilei Qitem, care n acest caz este JWXK e(turi la o !in(ur nre(i!trare -olosind aceast metod de ale&ere a nre&istrrii folosind 14#%ul, nre&istrarea poate fi extins prin &enerarea dinamic a 14#%ului. Pare cam complicat. Dom vedea cum realizm o pa&in de aducere la zi a bazei de date cu adresele. )u ideea ca utilizatorul s%i poat modifica propriile detalii din nre&istrare. Pentru asta, vom include o nou coloan cuprinz(nd o le&tur 1pdate . .ceast le&tur conduc(nd la o pa&in care s permit utilizatorului s actualizeze nre&istrarea. Pentru a selecta nre&istrarea din acea pa&in vom pune* @idRQid )pt(nd identificatorul id al nre&istrrii, secvena aceasta va crea o le&tur la fiecare din nre&istrri. Partea 7-a: Introducere P(n acum am nvat cum s punem informaiile n baza de date M !"#, cum s vedem aceste informaii din baza de date, select(nd care din ele vrem s le vedem. In aceast lecie vom vedea cum facem cele dou aciuni finale, actualizarea bazei de date i ter&erea unor nre&istrri din ea. Scri#t+ul de actualizare .m vzut n lecia anterioar cum creem o le&tur pentru fiecare nre&istrare pentru a ne poziiona n scriptul de actualizare. Prin folosirea variabilei Qid , le&turile respective pot transmite valoarea corecta a identificatorului I0 ctre script, astfel ca acesta s poat actualiza baza de date. Dom realiza deci un script de actualizare, care va avea dou pri* Pa(ina de afiare a actualizrii Prima parte a script%ului de actualizare folosete procedeul de selecie a unei sin&ure nre&istrri, aa cum l%am scris n lecia precedent, adu&(nd doar c(teva elemente H/M# pentru a%l face mai util. Mai nt(i, ne connectm la baza de date i selectm nre&istrarea potrivit. QidRQMV'/]7id7^A QusernameRGnumeMutilizatorGA QpassCordRGparolaGA QdatabaseRGbazaMdeMdateGA m sSlMconnect2local+ost,Qusername,QpassCord3A QSuer RG !'#')/ Z -48M contacts $H'4' idR7Qid7GA QresultRm sSlMSuer 2QSuer 3A QnumRm sSlMnumroCs2Qrezultat3A m sSlMclose23A QiR>A C+ile 2Qi ? Qnum3 N

QnumeRm sSlMresult2Qrezultat,Qi,GnumeG3A QprenumeRm sSlMresult2Qrezultat,Qi,GprenumeG3A QtelefonRm sSlMresult2Qrezultat,Qi,GtelefonG3A QmobilRm sSlMresult2Qrezultat,Qi,GmobilG3A QfaxRm sSlMresult2Qrezultat,Qi,GfaxG3A QemailRm sSlMresult2Qrezultat,Qi,GemailG3A QCebRm sSlMresult2Qrezultat,Qi,GCebG3A \ona de cod suplimentar [[QiA O 1nde 7\ona de cod suplimentar7 marc+eaz poriunea din script unde vor apare comenzile de actualizare. .dic formatarea H/M# pentru scoatere* ?form actionRGupdated.p+pG met+odRGpostGB ?input t peRG+iddenG nameRGudMidG valueRG?@ ec+o GQidGA @BGB Humele de -amilie* ?input t peRGtextG valueRGudMfirstG valueRG?@ ec+o GQnumeG@BGB?brB Humele de ,otez* ?input t peRGtextG valueRGudMlastG valueRG?@ ec+o GQprenumeG@BGB?brB Humrul de /elefon* ?input t peRGtextG valueRGudMp+oneG valueRG?@ ec+o GQtelefonG@ BGB?brB Humrul de Mobil* ?input t peRGtextG valueRGudMmobileG valueRG?@ ec+o GQmobilG@ BGB?brB Humrul de -ax* ?input t peRGtextG valueRGudMfaxG valueRG?@ ec+o GQfaxG@BGB?brB .dresa '%mail* ?input t peRGtextG valueRGudMemailG valueRG?@ ec+o GQemailG@BGB?brB .dresa $eb* ?input t peRGtextG valueRGudMCebG valueRG?@ ec+o GQCebG@BGB?brB ?input t peRG!ubmitG valueRG1pdateGB ?:formB .a cum se poate vedea, aceast secven construiete 2scoate3 un formular standard, dar n locul zonelor &oale, aa cum apreau n formularul pentru introducerea datelor, de data asta avem coninutul c(mpului respectiv din nre&istrarea n cauz 2care%i de actualizat3. .sta l face mai adaptat scopului, mai comod de folosit. ,ctualizarea bazei de date /ot ce mai avem de fcut este actualizarea efectiv a bazei de date. .sta este o operaie simpl care implic o nou cerere pentru baza de date* QSuer R G1P0./' contacts !'/ nume R 7QudMfirst7,prenume R 7QudMlast7,telefon R 7QudMp+one7,mobil R 7QudMmobile7,fax R 7QudMfax7,email R 7QudMemail7,Ceb R 7QudMCeb7 $H'4' id R 7QudMid7GA .ceast cerere spune sistemului de &estiune de baze de date s actualizeze tabela contacts n acele linii n care I0 coincide cu valoarea din QudMid 2care, aa cum se poate vedea din formularul anterior, a primit valoarea id a nre&istrrii pe care o actualizm3, modific(nd urmtoarele c(mpuri cu valorile specificate 2care au fost introduse cu ajutorul formularului3. .ceast cerere poate fi n&lobat ntr%un script simplu* QudMidRQMP8!/]7udMid7^A QudMfirstRQMP8!/]7udMfirst7^A QudMlastRQMP8!/]7udMlast7^A QudMp+oneRQMP8!/]7udMp+one7^A QudMmobileRQMP8!/]7udMmobile7^A

QudMfaxRQMP8!/]7udMfax7^A QudMemailRQMP8!/]7udMemail7^A QudMCebRQMP8!/]7udMCeb7^A QusernameRGnumeMutilizatorGA QpassCordRGparolaGA QdatabaseRGbazaMdeMdateGA m sSlMconnect2local+ost,Qusername,QpassCord3A QSuer RG1P0./' contacts $H'4' idR7QudMid7 !'/ firstR7QudMfirst7 lastR7QudMlast7 p+oneR7QudMp+one7 mobileR7QudMmobile7 faxR7QudMfax7 emailR7QudMemail7 CebR7QudMCeb7GA m sSlMSuer 2QSuer 3A ec+o G.ctualizarea s%a fcutGA m sSlMclose23A .sta va actualiza baza de date transmi(nd i o confirmare utilizatorului. Ster(erea nre(i!trrilor 1ltima parte a acestei lecii privete modul cum ter&em o nre&istrare dim baza de date. )a i cu pa&ina de actualizare, vom construi o pa&in pentru a ter&e una sau mai multe linii din baza de date. /rebuie s%i transmitem poziia 2I0%ul3 nre&istrrii, printr%un 14#, spre exemplu* delete.p+p@idRY !criptul care va face asta, numit delete.php, este aproape identic cu cel de actualizare a bazei de date, cu excepia comenzii M !"# 2modului n care este construit cererea3. In locul comenzii !"# 1P0./' , vom folosi* 0'#'/' -48M contacts $H'4' idR7Qid7 Ciclurile #a acest punct este momentul s menionm i un alt mod de folosire a ciclurilor cu o baz de date. Putem folosi un ciclu pentru a executa un ir de cereri. !pre exemplu, dac trebuie s sc+imbm % extra&em toate nre&istrrile dintr%o baz de date n care apare ca prenume !erban pentru a realiza un $ebsite CCC.serban.ro* Partea !tandard de )onectare la ,aza de 0ate QSuer RG !'#')/ Z -48M contacts $H'4' prenumeR7!erban7GA QrezultatRm sSlMSuer 2QSuer 3A QnumRm sSlMnumroCs2Qrezultat3A QiR>A C+ile 2Qi ? Qnum3 N QidRm sSlMresult2Qrezultat,Qi,GidG3A QSuer 5RG1P0./' contacts !'/ CebR7+ttp*::CCC.serban.ro7 $H'4' idR7Qid7GA m sSlMSuer 2QSuer 3A [[QiA O m sSlMclose23A Partea 8-a Introducere

Pe parcursul acestui curs am vzut cum s folosim PHP%ul pentru a interaciona cu un sistem de baze de date M !"# 2sau !"#3 i cum s folosim comenzile uzuale 2cele mai necesare3. .m exemplificat, cu modul de realizare a unei baze de date de tip carte de adrese 2ca sistem de mana&ement a contactelor @3. In aceast lecie final, vom vedea c(teva GtrucuriG M !"# i vom scrie versiunea definitiv 2final3 a script%ului construit pe parcursul acestui curs. Pentru economia de tim# .tunci c(nd construim un script complex folosind bazele de date, apare des secvena de conectare la baza de date. 0e aceea, pentru a simplifica lucrurile, se poate fie s creem un fiier cu numele de utilizator i parola sau c+iar un fiier de conectare. !pre exemplu, un fiier Gusername:passCordG poate fi construit cu numele* dbinfo.inc.p+p cuprinz(nd n el* ?@ QusernameRGnumeleMdeMutilizatorMalMbazeiMdeMdateGA QpassCordRGparolaGA QdatabaseRGnumeMbazaMdeMdateGA @B In care precizm datele concrete potrivite 2numeleMdeMutilizatorMalMbazeiMdeMdate, parola, numeMbazaMdeMdate3. .tunci n fiierele p+p vom folosi, c+iar la nceput, urmtoarea secven, care va include scriptul de mai sus* include2Gdbinfo.inc.p+pG3A sau, atunci c(nd acesta se afl n alt director* include2G:]traseul complet^:dbinfo.inc.p+pG3A .tunci, vom putea folosi n continuare variabilele Qusername, QpassCord i Qdatabase n script%ul nostru, fr a avea nevoie s le definim de fiecare dat. 0e asemeni, dac vom modifica c(ndva aceste informaii, spre exemplu trec(nd pe alt server Ceb, tot ce va fi de sc+imbat va fi n acest unic fiier. .ceeai sc+em o putem folosi pentru conectarea la baza de date, plas(nd i comanda de conectare n fiier. .tunci va trebui, ns, s ne asi&urm de nc+iderea conexiunii, pentru a nu avea probleme cu serverul M !"#. Cutarea !e poate realiza i o cutare limitat n baza de date folosind funcia special din M !"#. .dic prin folosirea funciei #IU' , n forma* !'#')/ Z -48M numeMtabela $H'4' numeMcamp #IU' 7_Qstrin&_7 .sta nsemn c #IU' va spune bazei de date s foloseasc posibilitile proprii de cutare. !emnele _ au semnificaia c orice alte date pot s apar n poziia lor i variabila Qstrin& va conine cererea de cutare. .dic putem avea acolo un cuv(nt, sau un numr, spre exemplu* #IU' 7_pian_7 ceea ce va conduce la scoaterea liniilor care includ cuv(ntul pian n c(mpul specificat. !imilar, putem renuna la unul din semnele _ astfel ca s precizm poziia irului de caractere* #IU' 7pian_7 .stfel vom putea selecta doar liniile n care c(mpul specificat ncepe cu prefixul pian, caz n care, spre exemplu, expresia urmtoare va fi evitat* 1n pian se afl pe scen.

-inalizarea Scri#t+ului Pe #arcur!ul ace!tui mini+cur! am #rezentat diferite #or$iuni de cod ale !cri#t+ului #entru con!truc$ia bazei de date contacts5 Pute$i de!crca !cri#t+ul com#let ca un fiier com#rimat zi#6 #entru a e*amina ntrea(a a#lica$ie 7vezi le(turile85 Concluzii ,cum6 nc9eind ace!t cur!6 ar trebui ! ti$i ! folo!i$i PHP i MySQ m#reun #entru a crea o baz de date + acce!ibil #e :eb6 #recum i #entru a !crie #ro(rame de acce! la baza de date5 -olo!irea bazelor de date #e :eb de!c9ide noi i mari #o!ibilit$i de lucru n Internet i #oate face mult mai #uternic un centru :eb6 economi!ind tim#ul de actualizare6 #ermi$&nd utilizatorilor ! interac$ioneze 7! r!#und8 i multe altele5

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