Documente Academic
Documente Profesional
Documente Cultură
Mysql and PHP
Mysql and PHP
Curs PHP/MySQL
Acest curs este o traducere i adaptare realizat de Mihai Jalobeanu, a ghidului lui David Cowans intitulat PHP/M !"# $utorial %& '((( ) *++' David ,owans-
Cuprins:
Partea ')a. /ntroducere Partea *)a. Construirea unei 0aze de Date Partea 1)a. /ntroducerea datelor Partea 2)a. A3iarea datelor Partea 4)a. Alte rezultate Partea 5)a. 6nregistrri i erori Partea 7)a. Actualizare i tergere Partea 8)a. 6ncheierea !cript)ului
'
PHP/MySQL
De ce mi trebuie o Ba ! de Date"
@ste, de 3apt, surprinztor cAt de util poate 3i o baz de date, 9ai ales atunci cAnd poate 3i 3olosit ;ntr)un site ?eb= !unt 3oarte 9ulte lucruri care se pot 3ace ;ntr)un ast3el de caz, de la a3iarea unor si9ple liste i pAn la producerea integral a paginilor ?eb dintr)o baz de date= CAteva e>e9ple cu PHP i M !"#, 3olosite ;9preun, sunt.
!chi9barea ) rota:ia 0anner)elor= Pentru a realiza schi9barea pe ecran a i9aginilor la di3eritele vizitri ale unei pagini i a asigura ast3el un interes 9ai 9are al vizitatorilor, se poate 3olosi un script PHP care deschide o baz de date i e>trage aleator o i9agine sau un set de i9agini, pentru a o%a)l- include ;ntr)un set de pagini ?eb= !criptul PHP va contoriza dease9eni nu9rul de cAte ori a 3ost vzut banner)ul, putAnd, cu 9odi3icri 9inore, s ur9reasc chiar i nu9rul de click)uri= Pentru a aduga, schi9ba sau edita bannerele, tot ce ave9 de 3cut este s schi9b9 baza de date iar scriptul va ;ncrca banner)ul corect ;n toate paginile site)ului ?eb= Boru9urile ?eb= !ute de 3oru9uri de dezbatere sunt acu9 realizate i ruleaz ;n PHP i M !"#= Acestea s)au dovedit 9ult 9ai e3iciente dacAt alte siste9e, creind cAte o pagin pentru 3iecare 9esa< i o3erind o larg varietate de op:iuni= $oate paginile 3oru9ului pot 3i actualizate prin schi9barea unui script PHP= 0azele de Date= Cn ast3el de e>e9plu %edi3icator- ;l o3er site)urile care dau toate in3or9a:iile dintr)o baz de date= !pre e>e9plu, !cript Avenue este rulat de cAteva scripturi, care 3urnizeaz toate in3or9a:iile dintr)o baz de date a9pl= $oate categoriile de scripturi di3erite pot 3i accesate ;ntr)un singur script e>act prin schi9barea CD#)ului pentru a accesa di3erite pr:i ale bazei de date=
PHP/MySQL
!ite)urile ?eb= CAnd ave9 un site de 9ari di9ensiuni ) cu 9ulte pagini, i dori9 s 9odi3ic9 aspectul general sau s schi9b9 proiectul, chestiune care ar cere 3oarte 9ult ti9p pentru aducere la zi i ;ncrcare= Cu PHP i M !"# ;ntregul site ?eb se poate reduce la unul sau dou scripturi PHP care s acceseze o baz de date M !"# pentru a ob:ine in3or9a:iile pentru paginile ?eb= Pentru a actualiza sau a 9odi3ica proiectul centrului ?eb nu trebuie s schi9b9 decAt o pagin=
De ce e ne#oie"
!unt necesare trei co9ponente pentru a putea rula scripturi PHP care s acceseze baze de date cu M !"#= '= 6n pri9ul rAnd, este nevoie de un server ?eb= Acesta poate 3i sau pe calculatorul personal sau pe o EgazdE ?eb= Fricare pachet ) oricare tip de server ?eb este acceptat i va lucra cu PHP i M !"#, dar cel 9ai reco9andat este Apache, care e public i gratis= *= PHP trebuie s 3ie instalat pe server= Dac nu este de<a instalat, pute:i s o 3ace:i sau s apela:i la ad9inistratorul serverului ?eb, ;n acest sens= Pachetul de instalare poate 3i descrcat ) preluat de la http.//PHP=net i este dease9eni public ) gratuit= Dac nu sunte:i sigur dac este sau nu instalat, o s vede:i 9ai <os cu9 v pute:i l9uri=
1= 6n 3ine, ave:i nevoie de M !"#= Acesta este de 3apt pachetul de
progra9e pentru gestiunea bazelor de date= Pute:i 3olosi dease9eni 9ulte alte siste9e de baze de date %!"#, Fracle etc=- dar aici discut9 despre PHP/M !"#, deci ave9 nevoie de M !"# %cu toate c se 3olosesc co9enzi care :in de li9ba<ul !"# i E9ergE la oricare din siste9ele de baze de date !"#-= Gi pachetul M !"# este public ) gratuit, putAnd 3i preluat din pagina o3icial a 3ir9ei M !"#= Dar i ;n cazul M !"# trebuie s veri3ic9 9ai ;ntAi dac nu cu9va este de<a instalat=
Dac nu pute:i instala PHP i M !"#, sau dac gazda ?eb nu v)o per9ite, pute:i apela la alt server ?eb, la alt gazd= !pre e>e9plu, Breedo9*!ur3 este un server ?eb public, care acord acces liber i suport PHP, avAnd M !"# instalat= HostDocHet este un alt server e>celent care o3er spa:iu de pAn la 1++ MF, i include PHP, M !"# i 9ulte altele, dar percepe o ta> de abona9ent de '+ C!D pe lun=
PHP/MySQL
salvAnd 3iierul cu un nu9e precu9 phpinfo.php Apoi ;ncrca:i acest 3iier ;n spa:iul web, pe server, apelAndu)l, dup aceea, din navigator= Dac PHP)ul este de<a instalat ve:i cpta o pagin plin cu toate detaliile instalrii respective= Parcurge:i atunci aceste in3or9a:ii= Dac gsi:i o sec:iune despre M !"# atunci ;nsea9n c M !"# este i el de<a instalat=
n lecNia urmOtoare (Partea 2-a) vom vedea cum proiectOm - cum realizOm o bazO de date n MySQL.
II #a cuprins
2
PHP/MySQL
Construc)ia Ba ei de Date
0azele de date M !"# au un siste9 de ini:ializare standard %un setup-= @ste vorba de o baz de date, co9pus din tabele, oarecu9 separate, con:inAnd di3erite cA9puri, etc= chiar dac sunt parte dintr)o baz de date= Biecare tabel con:ine ;nregistrri care sunt 3cute din cA9puri=
Conectarea %a o Ba ! de Date
Procesul de instalare a unei baze de date M !"# di3er de la o plat3or9 la alta= 6n esen: este vorba peste tot de un nu9e al bazei de date, un nu9e de utilizator %cont- i o parol= Aceste in3or9a:ii sunt cerute pentru conectarea la baza de date= Dac ave:i pachetul PHPM Ad9in %sau un progra9 si9ilar- instalat, atunci pute:i s intra:i acolo i s v conecta:i introducAnd contul %nu9ele de utilizator- i parola= Dac nu ave:i aa ceva, atunci trebuie s 3ace:i ;ntreaga ad9inistrare a bazelor de date 3olosind script)uri PHP %i o pute:i 3ace-=
PHP/MySQL
C+mpuri
@>ist o larg varietate de cA9puri i de atribute disponibile ;n M !"# i vo9 discuta doar cAteva din ele. *ipu% c+mpu%ui $/QR/Q$ !MA##/Q$ M@D/CM/Q$ /Q$ MADCHAD $@S$ Descriere Qu9r ;ntreg 9ic Qu9r ;ntreg 9ic Qu9r ;ntreg Qu9r ;ntreg $e>t %9a>i9u9 *45 caractere$e>t
Acestea sunt doar cAteva dintre cA9purile disponibile= F cutare pe /nternet ne poate 3urniza lista cu toate tipurile de cA9puri per9ise=
Clti9ul cA9p introdus nu poate include nici o virgul= F s d9 ;ndat un e>e9plu co9plet privind aceste de3iniri=
PHP/MySQL ,ume id Qu9e prenu9e tele3on 9obil 3a> e9ail web *ipu% /Q$ MADCHAD MADCHAD MADCHAD MADCHAD MADCHAD MADCHAD MADCHAD Lun-imea 5 '4 '4 *+ *+ *+ 1+ 1+ Descrierea Un identificator unic pentru fiecare nregistrare Numele de familie al persoanei Numele de botez al persoanei Numrul de telefon Numrul de telefon mobil Numrul de fa Adresa e!mail Pagina "eb personal
Poate v 9ira:i c a9 3olosit un tip de cA9p MADCHAD pentru coloana 9u9rTtele3on/3a>, chiar dac acestea sunt 3or9ate din ci3re= Chiar dac a9 putea 3olosi tipul /Q$, este pre3erabil s 3olosi9 MADCHAD pentru c ast3el vor 3i per9ise spa:ii i crati9e, precu9 i por:iuni de te>t, la 3el ca nu9erele scrise ca te>t %e>e9plu '8++)CFMPAQR- i cu9 nu vo9 ini:ia apeluri tele3onice de pe ?eb, totul e ;n ordine= @>ist ;nc ceva de care trebuie s ave9 gri< ;n aceast baz de date= CA9pul id va 3i pus ca PD/MADR, /QD@S, CQ/"C@ i ini:ializat ca auto#increment %pozi:ie ce apare ;n @>tra ;n PHPM Ad9in-= Da:iunea pentru asta este c acesta va 3i cA9pul identi3icator %pri9ar sau inde>- i deci trebuie s 3ie unic= De3inirea sa ca auto increment ;nsea9n c la adugarea 3iecrei ;nregistrri, cAt vre9e nu speci3ic9 acolo un id, acesta va pri9i ca valoare ur9torul nu9r= Dac 3olosi9 PHPM Ad9in sau un progra9 de 9anage9ent, pute9 crea o tabel nu9it contacte=
PHP/MySQL
/ntroduce:i nu9ele bazei de date, contul M !"# i parola M !"# ;n pozi:iile corespunztoare din pri9ele 1 linii de 9ai sus=
n lecNia urmOtoare (Partea 3-a) vom vedea cum ne conectOm la o bazO de date folosind PHP \i vom nvONa cum sO adOugOm informaNii n noua noastrO bazO de date.
II #a cuprins
8
PHP/MySQL
Conectarea %a o ba ! de date
Pri9ul lucru care trebuie 3cut, 9ai ;nainte de a putea 3ace ceva, este conectarea la baza de date M !"#= Acesta este un pas 3oarte i9portant, pentru c, dac nu sunte9 conecta:i, co9enzile ctre baza de date vor eua= Practic, pentru a 3olosi o baz de date trebuie s preciz9 nu9ele de utilizator %username-, parola %pass$ord- i nu9ele bazei de date.
Wuserna9eXPnu9eTutilizatorPK WpasswordXPparolaPK WdatabaseXPnu9eleTbazeiTdeTdatePK
Desigur, aici s)ar putea discuta dac nu)i riscant s pstr9 parola ;ntr)un 3iier= Qu trebuie s v alar9a:i ;ns, deoarece sursa PHP este prelucrat de server ;nainte de a 3i tri9is navigatorului, ast3el ;ncAt este i9posibil pentru orice utilizator s vad scriptul= Mai apoi, ave9 nevoie de o co9and care s lanseze cone>iunea la baza de date.
9 sYlTconnect%localhost,Wuserna9e,Wpassword-K
Aceast linie spune PHP)ului s se conecteze la serverul de baze de date M !"# la ElocalhostE %localhost se nu9ete serverul pe care ruleaz PHP) ul= 6n a3ara cazului ;n care gazda "eb indic altceva, vo9 3olosi localhost- 3olosind nu9ele de cont 9e9orat ;n Wuserna9e i parola din Wpassword= Mai ;nainte de a discuta cu9 lucr9 cu baza de date, vo9 vedea ;nc o co9and.
9 sYlTclose%-K
PHP/MySQL
serverul de baze de date= !criptul va rula ;nc, dac nu include9 aceast co9and, iar prea 9ulte cone>iuni M !"# deschise pot cauza proble9e serverului web= @ste un obicei bun s include9 co9anda de ;nchidere de 9ai sus dup ce a9 introdus toate co9enzile ctre baza de date, pentru a 9en:ine plat3or9a ;n bun stare=
Se%ectarea ba ei de date
Dup ce ne)a9 conectat la serverul de baze de date, trebuie s select9 baza de date pe care vre9 s)o 3olosi9= $rebuie s 3ie o baz de date la care ave9 acces, cu respectivul nu9e de utilizator= !e 3olosete ur9toarea co9and.
Z9 sYlTselectTdb%Wdatabase- or die% P0aza de date nu poate 3i selectataP-K
Aceasta spune PHP)ului s selecteze baza de date speci3icat ;n variabila Wdatabase %pe care a9 de3init)o 9ai ;nainte-= Dac cone>iunea nu se poate realiza procesul %e>ecu:ia script)ului- se oprete a3iAnd te>tul.
0aza de date nu poate 3i selectata
Aceast parte supli9entar Eor dieE este bun pentru ieire, chiar dac nu asigur decAt un 9ini9 control al erorii=
Bolosirea acestei 3or9e a co9enzii este util pentru c repet9 pur i si9plu aceiai co9and iari i iari 3r a 3i nevoie s 9e9or9 altele= $ot ce ave9 de 3cut este s schi9b9 variabila=
'+
PHP/MySQL
Introducerea date%or
Acu9 ne vo9 ;ntoarce la baza de date cu adrese de contact, pe care a9 creat)o ;n lec:ia anterioar, pentru a introduce pri9ele in3or9a:ii ;n baza de date.
,ume. /onescu Prenume. ,heorghe *e%e$on. +*' 124578( Mobi%. +7*2 112244 1a0. +*52 4578(' /-mai%. ionescugheZpersonal=ro 2eb. http.//www=cinestie=ine>t=ro
Pare pu:in ca9 con3uz la pri9a vedere= ! l9uri9 pu:in lucrurile= Mai ;ntAi, apare variabila WYuer creia ;i atribui9 o co9and %vezi paragra3ul precedent-= Cr9toarea parte, adic. /Q!@D$ /Q$F contacts MA#C@! este destul de uor de ;n:eles= @a spune PHP)ului s insereze ;n tabela nu9it contacts valorile care ur9eaz %scrise ;ntre paranteze-= Acolo, ;ntre paranteze, ave9 toate cA9purile de adugat= Apar toate cA9purile ;n ordine i sunt inserate in3or9a:iile dintre ghili9ele= !pre e>e9plu. /onescu va 3i inserat ;n al *)lea cA9p, care, ;n aceast tabel este cA9pul Enu9eE= Poate a:i re:inut c nu a9 inserat ni9ic ;n pri9ul cA9p din baza de date %id-= Asta din cauz c acest cA9p va 3i un cA9p inde>, ele9entul unic de identi3icare= Biecare ;nregistrare din baza de date va avea un unic /D= Din aceast cauz, cAnd ;ncrc9 baza de date, vo9 pune /D pe EAuto /ncre9entE= Asta ;nsea9n c, ne)atribuindu)i nici o valoare, el va lua la 3iecare ;nregistrare ur9toarea valoare din ir= /ar pri9a ;nregistrare va avea valoarea /DX' =
n lecNia urmOtoare (Partea 4-a) vom vedea cum folosim formularele \i variabilele pentru a insera informaNii \i cum afi\Om informaNiile din baza de date.
II #a cuprins
''
PHP/MySQL
Aceast pagin poate 3i, desigur, 3or9atat i pot apare di3erite schi9bri ) variante= @ste doar un 3or9ular de pornire, ilustrativ= Ma trebui ;ns editat script)ul din lec:ia precedent, pentru ca, ;n locul introducerii in3or9a:iilor direct din script ;n baza de date, s 3ie 3olosite variabilele.
IJ Wuserna9eXPuserna9ePK WpasswordXPpasswordPK WdatabaseXPbazaT9eaTdeTdatePK 9 sYlTconnect%localhost,Wuserna9e,Wpassword-K Z9 sYlTselectTdb%Wdatabase- or die% P0aza de date nu poate 3i selectataP-K WYuer X P/Q!@D$ /Q$F contacts MA#C@! %EE,EWnu9eE,EWprenu9eE,EWtele3onE,EW9obilE,EW3a>E,EWe9ailE,EWwebE-PK '*
PHP/MySQL
Acest script trebuie salvat ca 3iier cu nu9ele insert.php, ast3el ca s poat 3i apelat de 3or9ularul H$M#= $reaba va 9erge ;ntrucAt, ;n loc ca datele s 3ie introduse local, ele se introduc ;n 3or9ular i sunt 9e9orate ;n variabilele care apar precizate acolo i care sunt trans9ise apoi PHP) ului= Pute9 s adug9 script)ului un 9esa< care s con3ir9e preluarea datelor= Asta 3ace parte din Eo3ertaE de baz a PHP i r9Ane ca e>erci:iu=
Scoaterea Date%or
Acu9 ave9 ;n baza de date cel pu:Ein o ;nregistrare, dac nu 9ai 9ulte= !e pune proble9a cu9 vizualiz9, cu9 scoate9 aceste date 3olosind PHP= Cunoaterea ele9entelor de progra9are din PHP este necesar, reco9andabil 3iind parcurgerea Mini)cursului de PHP ;naintea acestuia= Pri9a co9and la care vo9 apela este co9anda !@#@C$ din !"#, 3olosit ;ntr)o cerere M !"# ;n 3or9a.
!@#@C$ ] BDFM contacts
Aceasta este o co9and de baz din M !"#, care va spune script)ului s selecteze toate ;nregistrrile din tabela contacts= Dar, de data aceasta, co9anda 3urnizeaz un rezultat, ea va trebui e>ecutat atribuin rezultatele unei variabile.
WYuer XP!@#@C$ ] BDFM contactsPK WrezultatX9 sYlTYuer %WYuer -K
/n acest caz, ;ntregul con:inut al bazei de date va 3i atribuit variabilei cu nu9ele Wrezultat %care va 3i deci o 9atrice, un tablou-= Mai ;nainte de a putea scoate aceste date va trebui s le e>trage9 ca variabile si9ple, separate= Pentru asta trebuie s ti9 cAte ;nregistrri ave9 ;n tabel %deci i ;n variabila Wrezultat -=
,um!rarea %inii%or
Ave9 o co9and special ;n M !"# pentru calculul nu9rului de linii din tabel= @ste i9portant pentru c ;n baza de date se 3ac uzual nu9eroase actualizri, co9pletri, tergeri=
'1
PHP/MySQL
Wnu9X9 sYlTnu9rows%Wrezultat-K
Ast3el, variabila Wnu9 va cpta ca valoare nu9rul de linii din Wrezultat %adic toc9ai din baza de date-= Acest nu9r va putea 3i 3olosit ;n continuare pentru ciclul ;n care se vor analiza i des3ace ;n variable separate cA9purile 3iecrei linii=
Construirea cic%u%ui
Ave9 de scris un ciclu pentru a selecta din tabel %din rezultat- linie cu linie==== De3ini9 un indice, o variabil Wi care va parcurge %cu incre9entarevalorile de la ' la Wnu9=
WiX+K while %Wi I Wnu9- U FP@DA$//#@ A!CPDA #/Q/@/ ^^WiK V
Acesta este un ciclu tipic ;n PHP i va e>ecuta ansa9blul nu9it FP@DA$//#@ A!CPDA #/Q/@/ de e>act Wnu9 ori, adic de atAtea ori cAt trebuie= #a 3iecare reluare Wi 3iind 9rit cu o unitate= Ast3el Wi poate 3i 3olosit i pentru a preciza nu9rul liniei care se prelucreaz=
Ast3el, pentru a e>trage 3iecare co9ponent din baza noastr de date, vo9 3olosi ur9toarele instruc:iuni.
Wnu9eX9 sYlTresult%Wresult,Wi,Pnu9eP-K Wprenu9eX9 sYlTresult%Wresult,Wi,Pprenu9eP-K Wtele3onX9 sYlTresult%Wresult,Wi,Ptele3onP-K W9obilX9 sYlTresult%Wresult,Wi,P9obilP-K W3a>X9 sYlTresult%Wresult,Wi,P3a>P-K We9ailX9 sYlTresult%Wresult,Wi,Pe9ailP-K WwebX9 sYlTresult%Wresult,Wi,PwebP-K '2
PHP/MySQL
Qu ne)a9 ocupat aici de cA9pul /D %dei o putea9 3ace- pentru c nu ne este necesar la a3iare datelor=
Combinarea Script-u%ui
Acu9 pute9 scrie script)ul co9plet pentru scoaterea datelor= 6n acest script datele nu sunt 3or9atate, adic vor 3i a3iate toate cu acelai font, prede3init=
IJ Wuserna9eXPuserna9ePK WpasswordXPpasswordPK WdatabaseXPbazaTnoastraTdeTdatePK 9 sYlTconnect%localhost,Wuserna9e,Wpassword-K Z9 sYlTselectTdb%Wdatabase- or die% P0aza de date nu poate 3i selectataP-K WYuer XP!@#@C$ ] BDFM contactsPK WrezultatX9 sYlTYuer %WYuer -K Wnu9X9 sYlTnu9rows%Wrezultat-K 9 sYlTclose%-K echo PIbLIcenterLDatabase FutputI/centerLI/bLIbrLIbrLPK WiX+K while %Wi I Wnu9- U Wnu9eX9 sYlTresult%Wrezultat,Wi,Pnu9eP-K Wprenu9eX9 sYlTresult%Wresult,Wi,Pprenu9eP-K Wtele3onX9 sYlTresult%Wresult,Wi,Ptele3onP-K W9obilX9 sYlTresult%Wresult,Wi,P9obilP-K W3a>X9 sYlTresult%Wresult,Wi,P3a>P-K We9ailX9 sYlTresult%Wresult,Wi,Pe9ailP-K WwebX9 sYlTresult%Wresult,Wi,PwebP-K echo PIbLWnu9e Wprenu9eI/bLIbrL$ele3on. Wtele3onIbrLMobil. W9obilIbrLBa>. W3a>IbrL@)9ail. We9ailIbrL?eb. WwebIbrLIhrLIbrLPK ^^WiK V JL
n lecNia urmOtoare (Partea 5-a) vom vedea cum realizOm scoaterea datelor \i cum selectOm diferite date din baza de date.
II #a cuprins
'4
PHP/MySQL
1ormatarea scoaterii
6n ulti9a parte a lec:iei precedente a9 scos o list cu toate persoanele ;nregistrate ;n baza de date= De 3apt a9 a<uns s ave9 de3inite variabilele care per9it scoaterea sau a3iarea, ;ncheind cu o co9and destul de si9pl de a3iare %echo- 3r a o e>plica= Desigur, datele din tabel ar trebui prezentate pe ecran tot ;n 3or9a unui tabel= /ar asta nu)i prea co9plicat= 6n 3ond dac ti9 cu9 s a3i9 %scoate93iecare variabil ;n parte, atunci tot restul privind 3or9atarea, organizarea ca tabel, etc=, este doar legat de cunoaterea H$M#= $ot ce ave9 de 3cut deci este s 3olosi9 PHP pentru scoaterile H$M# incluzAnd variabilele ;n zonele corecte= Cel 9ai si9plu este s ;nchide9 tagul PHP i s introduce9 liniile nor9ale din H$M#= FridecAte ori a<unge9 la o variabil o vo9 include 3olosind o secven: de 3or9a.
IJ echo PWnu9eleTvariabileiPK JL
Pute9 atunci s 3olosi9 un ciclu PHP pentru a repeta o secven: de cod ca cea de 9ai sus, la includerea variabilelor ;ntr)un tablou= !pre e>e9plu, 3olosind secven:a de cod din lec:ia precedent cu ciclul corespunztor, pute9 3or9ata scoaterile pentru ca s apar ;ntr)o tabel 9are.
Itable borderXP+P cellspacingXP*P cellpaddingXP*PL ItrL IthLI3ont 3aceXPArial, Helvetica, sans)seri3PLQu9eI/3ontLI/thL IthLI3ont 3aceXPArial, Helvetica, sans)seri3PL$ele3onI/3ontLI/thL IthLI3ont 3aceXPArial, Helvetica, sans)seri3PLMobilI/3ontLI/thL IthLI3ont 3aceXPArial, Helvetica, sans)seri3PLBa>I/3ontLI/thL IthLI3ont 3aceXPArial, Helvetica, sans)seri3PL@)9ailI/3ontLI/thL IthLI3ont 3aceXPArial, Helvetica, sans)seri3PL?ebsiteI/3ontLI/thL I/trL WiX+K while %Wi I Wnu9- U Wnu9eX9 sYlTresult%Wrezultat,Wi,Pnu9eP-K Wprenu9eX9 sYlTresult%Wresult,Wi,Pprenu9eP-K '5
PHP/MySQL
Wtele3onX9 sYlTresult%Wresult,Wi,Ptele3onP-K W9obilX9 sYlTresult%Wresult,Wi,P9obilP-K W3a>X9 sYlTresult%Wresult,Wi,P3a>P-K We9ailX9 sYlTresult%Wresult,Wi,Pe9ailP-K WwebX9 sYlTresult%Wresult,Wi,PwebP-K JL
ItrL ItdLI3ont 3aceXPArial, Helvetica, sans)seri3PLIJ echo PWnu9e Wprenu9ePK J LI/3ontLI/tdL ItdLI3ont 3aceXPArial, Helvetica, sans)seri3PLIJ echo PWtele3onPK J LI/3ontLI/tdL ItdLI3ont 3aceXPArial, Helvetica, sans)seri3PLIJ echo PW9obilPK J LI/3ontLI/tdL ItdLI3ont 3aceXPArial, Helvetica, sans)seri3PLIJ echo PW3a>PK J LI/3ontLI/tdL ItdLI3ont 3aceXPArial, Helvetica, sans)seri3PLIa hre3XP9ailto.IJ echo PWe9ailPK JLPL@)9ailI/aLI/3ontLI/tdL ItdLI3ont 3aceXPArial, Helvetica, sans)seri3PLIa hre3XPIJ echo PWwebPK J LPL?ebsiteI/aLI/3ontLI/tdL I/trL IJ ^^WiK V
echo PI/tableLPK
Aceast secven: va a3ia antetul tabelului, apoi va aduga o l inie supli9entar pentru 3iecare ;nregistrare din baza de date, 3or9atAnd datele la scoatere= Dac sunte:i de<a 3a9iliariza:i cu PHP i H$M#, atunci lucrurile sunt probabil destul de clare ) de uor de ;n:eles= F s e>plic9 doar una din liniile din tabel, spre e>e9plu.
Ia hre3XP9ailto.IJ echo PWe9ailPK JLPL@)9ailI/aL
care construiete o legtur e9ail la adresa trans9is de variabila We9ail = Asta arat una dintre calit:ile i9portante i utile ale 3olosirii PHP pentru includerea datelor M !"# = Adic prin ast3el de scoateri pute9 3ace paginile ?eb dina9ice=
'7
PHP/MySQL
Dac vre9 ;ns s select9 doar pe acele persoane care au prenu9ele EMihaiE vo9 3olosi o cerere de 3or9a.
!@#@C$ ] BDFM contacts ?H@D@ prenu9eXE9ihaiE
Ca i la alte cereri ) co9enzi !"#, ave9 de 3apt propozi:ii 3oarte apropiate de 3or9ularea curent din li9ba englez= 6ntr)un 9od ase9ntor vo9 putea selecta ;nregistrrile pe baza oricrui cA9p din baza de date= Dar se poate selecta o ;nregistrare 3olosind 9ai 9ulte cA9puri, adugAnd ;n 3or9ularea cererii clauza.
3ieldXEvalueE
Br a intra ;n prea 9ulte detalii, vo9 9ai spune c pute9 3olosi variabilele pentru a trans9ite criteriul dorit pentru selec:ie= !pre e>e9plu, dac dintr)un 3or9ular de cutare pri9i9 a variabil nu9it Wnu9eTcautat pute9 i9agina ur9toarea secven:.
WYuer XP!@#@C$ ] BDFM contacts ?H@D@ nu9eXEWnu9eTcautatEPK WresultX9 sYlTYuer %WYuer -K
n lecNia urmOtoare (Partea 6-a) vom vedea cteva moduri de a scoate date din baza de date, precum \i cum putem sO controlOm erorile prin numOrarea liniilor.
II #a cuprins
'8
PHP/MySQL
Interceptarea /rori%or
Prin scoaterea tuturor in3or9a:iilor dintr)o baz de date, este pu:in probabil s a<unge9 la situa:ia cAnd nu 9ai sunt date= Dar dac a9 per9is a<ustri i, tergeri i actualizri ale ;nregistrrilor, atunci se prea poate s a<unge9 la o eroare= Din 3ericire, cu PHP i M !"#, ave9 un 9od si9plu de a evita o ast3el de situa:ie 3olosind.
Wnu9X9 sYlTnu9rows%Wrezultat-K
unde Wrezultat con:ine rezultatul unei cereri ) interogri a bazei de date %precu9 selectarea tuturor ;nregistrrilor-= Aa cu9 a9 discutat 9ai sus, aceasta va atribui variabilei Wnu9 nu9rul de linii din rezultat %care s)a utilizat ;ntr)un ciclu, ;n lec:ia a 2)a-= Pute9 insera ;n ciclu o co9and de captare/tratare a erorilor 3olosind o instruc:iune /B .
i3 %Wnu9XX+- U echo P0aza de date nu con:ine nici o ;nregistrarePK V else U Futput #oop V
Pute9 dezvolta ra9ura asta 3cAnd)o 9ai prietenoas= !pre e>e9plu, o3erind o legtur la pagina Add Data, de introducere de in3or9a:ii ;n baza de date, atunci cAnd ea este vid=
;rdonarea date%or
Qu nu9ai c pute9 scoate datele ;n 3unc:ie de con:inutul unui cA9p, dar pute9 ordona aceste date pe baza unei reguli aplicat con:inutului unei coloane %spre e>e9plu aran<And utilizatorii ;n ordine al3abetic-= /n 9od nor9al, a3iarea ;n ur9a unei interogri se 3ace ;n ordinea stabilit de identi3icatorul /D, pornind de la ' ;n sus= Pute9 ;ns alege 9odul de ordonare %sortarea- dup oricare coloan din tabel= !pre e>e9plu, o ordonare util ar putea 3i dup nu9ele de botez= Asta ;nse9nAnd ;n ordine ascendent %cresctoare, de la A la _ i de la ' la
'(
PHP/MySQL
'+===-=
Pute9 3olosi, desigur i ordonarea descendent, speci3icAnd D@!C ;n locul lui A!C =
C+mpu% ID
Atunci cAnd, ;n pri9ele lec:ii a9 creat baza de date %cartea de adrese-, a9 inclus un cA9p nu9eric nu9it id= Pe care l)a9 stabilit ca auto#increment i i)a9 dat rolul de cA9p pri9ar= A9 discutat cu9 acesta are rolul de identi3icator unic pentru 3iecare ;nregistrare din baza de date= Acu9 3ace9 un pas ;nainte, 3olosind acest cA9p pentru a selecta anu9ite ;nregistrri din baza de date=
*+
PHP/MySQL
Atunci, 3olosind unicitatea cA9pului /D pute9 selecta orice ;nregistrare din baza de date, 3olosind.
!@#@C$ ] BDFM contacts ?H@D@ idXEWidE
unde Wid este o variabil con:inAnd nu9rul unei ;nregistrri= !pre e>e9plu, dac dori9 s ave9 o pagin ?eb generat dina9ic dintr)o baz de date cu un singur script PHP, pute9 scrie script)ul ca s includ pagini ?eb distincte ca ;nregistrri ale bazei de date= Atunci, 3olosind cA9pul id, pute9 selecta 3iecare pagin individual plasAnd)o la soatere= Pute9 chiar 3olosi chiar CD#)ul paginii pentru a speci3ica ;nregistrarea dorit
http.//www=centrulTpropriu=ro/stiri/ite9s=phpJite9X4275
/ar script)ul PHP s caute ;nregistrarea care are nu9rul de ordine %id)ulcare corespunde valorii variabilei Wite9, care ;n acest caz este 4275
CptAnd identi3icatorul id al ;nregistrrii, secven:a aceasta va crea o legtur la 3iecare din ;nregistrri=
n lecNia urmOtoare (Partea 7-a) vom vedea cum creem pagina pentru actualizarea informaNiilor din baza de date.
II #a cuprins
*'
PHP/MySQL
PHP/MySQL
Cnde E_ona de cod supli9entarE 9archeaz por:iunea din script unde vor apare co9enzile de actualizare= Adic 3or9atarea H$M# pentru scoatere.
I3or9 actionXPupdated=phpP 9ethodXPpostPL Iinput t peXPhiddenP na9eXPudTidP valueXPIJ echo PWidPK JLPL Qu9ele de Ba9ilie. Iinput t peXPte>tP valueXPudT3irstP valueXPIJ echo PWnu9ePJLPLIbrL Qu9ele de 0otez. Iinput t peXPte>tP valueXPudTlastP valueXPIJ echo PWprenu9ePJLPLIbrL Qu9rul de $ele3on. Iinput t peXPte>tP valueXPudTphoneP valueXPIJ echo PWtele3onPJLPLIbrL Qu9rul de Mobil. Iinput t peXPte>tP valueXPudT9obileP valueXPIJ echo PW9obilPJLPLIbrL Qu9rul de Ba>. Iinput t peXPte>tP valueXPudT3a>P valueXPIJ echo PW3a>PJ LPLIbrL Adresa @)9ail. Iinput t peXPte>tP valueXPudTe9ailP valueXPIJ echo PWe9ailPJLPLIbrL Adresa ?eb. Iinput t peXPte>tP valueXPudTwebP valueXPIJ echo PWwebPJ LPLIbrL Iinput t peXP!ub9itP valueXPCpdatePL I/3or9L
Aa cu9 se poate vedea, aceast secven: construiete %scoate- un 3or9ular standard, dar ;n locul zonelor goale, aa cu9 apreau ;n 3or9ularul pentru introducerea datelor, de data asta ave9 con:inutul cA9pului respectiv din ;nregistrarea ;n cauz %care)i de actualizat-= Asta ;l 3ace 9ai adaptat scopului, 9ai co9od de 3olosit=
Aceast cerere spune siste9ului de gestiune de baze de date s actualizeze tabela contacts ;n acele linii ;n care /D coincide cu valoarea din WudTid %care, aa cu9 se poate vedea din 3or9ularul anterior, a pri9it valoarea id a ;nregistrrii pe care o actualiz9-, 9odi3icAnd ur9toarele cA9puri cu valorile speci3icate %care au 3ost introduse cu
*1
PHP/MySQL
@ter-erea nre-istr!ri%or
Clti9a parte a acestei lec:ii privete 9odul cu9 terge9 o ;nregistrare din baza de date= Ca i cu pagina de actualizare, vo9 construi o pagin pentru a terge una sau 9ai 9ulte linii din baza de date= $rebuie s)i trans9ite9 pozi:ia %/D)ul- ;nregistrrii, printr)un CD#, spre e>e9plu.
delete=phpJidX(
!criptul care va 3ace asta, nu9it delete.php, este aproape identic cu cel de actualizare a bazei de date, cu e>cep:ia co9enzii M !"# %9odului ;n care este construit cererea-= /n locul co9enzii !"# CPDA$@ , vo9 3olosi.
D@#@$@ BDFM contacts ?H@D@ idXEWidE
Cic%uri%e
#a acest punct este 9o9entul s 9en:ion9 i un alt 9od de 3olosire a ciclurilor cu o baz de date= Pute9 3olosi un ciclu pentru a e>ecuta un ir de cereri= !pre e>e9plu, dac trebuie s schi9b9 ) e>trage9 toate ;nregistrrile dintr)o baz de date ;n care apare ca prenu9e Gerban pentru a realiza un ?ebsite www=serban=ro.
*2
PHP/MySQL
Partea !tandard de Conectare la 0aza de Date WYuer XP !@#@C$ ] BDFM contacts ?H@D@ prenu9eXE!erbanEPK WrezultatX9 sYlTYuer %WYuer -K Wnu9X9 sYlTnu9rows%Wrezultat-K WiX+K while %Wi I Wnu9- U WidX9 sYlTresult%Wrezultat,Wi,PidP-K WYuer 'XPCPDA$@ contacts !@$ webXEhttp.//www=serban=roE ?H@D@ idXEWidEPK 9 sYlTYuer %WYuer -K ^^WiK V 9 sYlTclose%-K
n lecNia urmOtoare (Partea 8-a), ultima din acest curs, vom vedea cum sO punem grOmadO toate componentele script-ului creat \i ncO cteva alte amOnunte privind folosirea MySQL.
II #a cuprins
*4
PHP/MySQL
6n care preciz9 datele concrete potrivite ) %nu9eleTdeTutilizatorTalTbazeiTdeTdate, parola, nu9eTbazaTdeTdate-= Atunci ;n 3iierele php vo9 3olosi, chiar la ;nceput, ur9toarea secven:, care va include scriptul de 9ai sus.
include%Pdbin3o=inc=phpP-K
Atunci, vo9 putea 3olosi ;n continuare variabilele Wuserna9e, Wpassword i Wdatabase ;n script)ul nostru, 3r a avea nevoie s le de3ini9 de 3iecare dat= De ase9eni, dac vo9 9odi3ica cAndva aceste in3or9a:ii, spre e>e9plu trecAnd pe alt server web, tot ce va 3i de schi9bat va 3i ;n acest unic 3iier= Aceeai sche9 o pute9 3olosi pentru conectarea la baza de date, plasAnd i co9anda de conectare ;n 3iier= Atunci va trebui, ;ns, s ne
*5
PHP/MySQL
C!utarea
!e poate realiza i o cutare li9itat ;n baza de date 3olosind 3unc:ia special din M !"#= Adic prin 3olosirea 3unc:iei #/[@ , ;n 3or9a. !@#@C$ ] BDFM nu9eTtabela ?H@D@ nu9eTca9p #/[@ EbWstringbE Asta ;nse9n c #/[@ va spune bazei de date s 3oloseasc posibilit:ile proprii de cutare= !e9nele b au se9ni3ica:ia c orice alte date pot s apar ;n pozi:ia lor i variabila Wstring va con:ine cererea de cutare= Adic pute9 avea acolo un cuvAnt, sau un nu9r, spre e>e9plu.
#/[@ EbpianbE
ceea ce va conduce la scoaterea liniilor care includ cuvAntul pian ;n cA9pul speci3icat= !i9ilar, pute9 renun:a la unul din se9nele b ast3el ca s preciz9 pozi:ia irului de caractere. #/[@ EpianbE Ast3el vo9 putea selecta doar liniile ;n care cA9pul speci3icat ;ncepe cu pre3i>ul pian, caz ;n care, spre e>e9plu, e>presia ur9toare va 3i evitat.
Cn pian se a3l pe scen=
Conc%u ii
Acu9, ;ncheind acest curs, ar trebui s ti:i s 3olosi:i PHP i M !"# ;9preun pentru a crea o baz de date ) accesibil pe ?eb, precu9 i pentru a scrie progra9e de acces la baza de date= Bolosirea bazelor de date pe ?eb deschide noi i 9ari posibilit:i de lucru ;n /nternet i poate 3ace 9ult 9ai puternic un centru ?eb, econo9isind ti9pul de actualizare, per9i:And utilizatorilor s interac:ioneze %s rspund- i 9ulte altele=
II #a ;nceput
*7