PHP Mysql
PHP Mysql
Curs PHP/MySQL
Acest curs este o traducere i adaptare realizat de Mihai Jalobeanu, a ghidului lui David Cowans intitulat PHP/MySQL Tutorial ( 1999 - 2001 David Gowans)
Cuprins:
Partea 1-a: Introducere Partea 2-a: Construirea unei Baze de Date Partea 3-a: Introducerea datelor Partea 4-a: Afiarea datelor Partea 5-a: Alte rezultate Partea 6-a: nregistrri i erori Partea 7-a: Actualizare i tergere Partea 8-a: ncheierea Script-ului
PHP/MySQL
Schimbarea - rotaia Banner-elor. Pentru a realiza schimbarea pe ecran a imaginilor la diferitele vizitri ale unei pagini i a asigura astfel un interes mai mare al vizitatorilor, se poate folosi un script PHP care deschide o baz de date i extrage aleator o imagine sau un set de imagini, pentru a o(a-l) include ntr-un set de pagini Web. Scriptul PHP va contoriza deasemeni numrul de cte ori a fost vzut banner-ul, putnd, cu modificri minore, s urmreasc chiar i numrul de click-uri. Pentru a aduga, schimba sau edita bannerele, tot ce avem de fcut este s schimbm baza de date iar scriptul va ncrca banner-ul corect n toate paginile site-ului Web. Forumurile Web. Sute de forumuri de dezbatere sunt acum realizate i ruleaz n PHP i MySQL. Acestea s-au dovedit mult mai eficiente dact alte sisteme, creind cte o pagin pentru fiecare mesaj i oferind o larg varietate de opiuni. Toate paginile forumului pot fi actualizate prin schimbarea unui script PHP. Bazele de Date. Un astfel de exemplu (edificator) l ofer site-urile care dau toate informaiile dintr-o baz de date. Spre exemplu, Script Avenue este rulat de cteva scripturi, care furnizeaz toate informaiile dintr-o baz de date ampl. Toate categoriile de scripturi diferite pot fi accesate ntr-un singur script exact prin schimbarea URL-ului pentru a accesa diferite pri ale bazei de date.
PHP/MySQL
Site-urile Web. Cnd avem un site de mari dimensiuni - cu multe pagini, i dorim s modificm aspectul general sau s schimbm proiectul, chestiune care ar cere foarte mult timp pentru aducere la zi i ncrcare. Cu PHP i MySQL ntregul site Web se poate reduce la unul sau dou scripturi PHP care s acceseze o baz de date MySQL pentru a obine informaiile pentru paginile Web. Pentru a actualiza sau a modifica proiectul centrului Web nu trebuie s schimbm dect o pagin.
De ce e nevoie?
Sunt necesare trei componente pentru a putea rula scripturi PHP care s acceseze baze de date cu MySQL. 1. n primul rnd, este nevoie de un server Web. Acesta poate fi sau pe calculatorul personal sau pe o 'gazd' Web. Oricare pachet oricare tip de server Web este acceptat i va lucra cu PHP i MySQL, dar cel mai recomandat este Apache, care e public i gratis. 2. PHP trebuie s fie instalat pe server. Dac nu este deja instalat, putei s o facei sau s apelai la administratorul serverului Web, n acest sens. Pachetul de instalare poate fi descrcat - preluat de la http://PHP.net i este deasemeni public - gratuit. Dac nu suntei sigur dac este sau nu instalat, o s vedei mai jos cum v putei lmuri.
3. n fine, avei nevoie de MySQL. Acesta este de fapt pachetul de
programe pentru gestiunea bazelor de date. Putei folosi deasemeni multe alte sisteme de baze de date (SQL, Oracle etc.) dar aici discutm despre PHP/MySQL, deci avem nevoie de MySQL (cu toate c se folosesc comenzi care in de limbajul SQL i 'merg' la oricare din sistemele de baze de date SQL). i pachetul MySQL este public gratuit, putnd fi preluat din pagina oficial a firmei MySQL. Dar i n cazul MySQL trebuie s verificm mai nti dac nu cumva este deja instalat.
Dac nu putei instala PHP i MySQL, sau dac gazda Web nu v-o permite, putei apela la alt server Web, la alt gazd. Spre exemplu, Freedom2Surf este un server Web public, care acord acces liber i suport PHP, avnd MySQL instalat. HostRocket este un alt server excelent care ofer spaiu de pn la 300 MO, i include PHP, MySQL i multe altele, dar percepe o tax de abonament de 10 USD pe lun.
PHP/MySQL
salvnd fiierul cu un nume precum phpinfo.php Apoi ncrcai acest fiier n spaiul web, pe server, apelndu-l, dup aceea, din navigator. Dac PHP-ul este deja instalat vei cpta o pagin plin cu toate detaliile instalrii respective. Parcurgei atunci aceste informaii. Dac gsii o seciune despre MySQL atunci nseamn c MySQL este i el deja instalat.
nleciaurmtoare(Partea2a)vomvedeacumproiectmcumrealizmobazdedatenMySQL.
<< La cuprins
4
PHP/MySQL
PHP/MySQL
Cmpuri
Exist o larg varietate de cmpuri i de atribute disponibile n MySQL i vom discuta doar cteva din ele: Tipul cmpului TINYINT SMALLINT MEDIUMINT INT VARCHAR TEXT Descriere Numr ntreg mic Numr ntreg mic Numr ntreg Numr ntreg Text (maximum 256 caractere) Text
Acestea sunt doar cteva dintre cmpurile disponibile. O cutare pe Internet ne poate furniza lista cu toate tipurile de cmpuri permise.
Ultimul cmp introdus nu poate include nici o virgul. O s dm ndat un exemplu complet privind aceste definiri.
PHP/MySQL Nume id Nume prenume telefon mobil fax email web Tipul INT VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR Lungimea 6 15 15 20 20 20 30 30 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 fax Adresa e-mail Pagina Web personal
Poate v mirai c am folosit un tip de cmp VARCHAR pentru coloana mumr_telefon/fax, chiar dac acestea sunt formate din cifre. Chiar dac am putea folosi tipul INT, este preferabil s folosim VARCHAR pentru c astfel vor fi permise spaii i cratime, precum i poriuni de text, la fel ca numerele scrise ca text (exemplu 1800-COMPANY) i cum nu vom iniia apeluri telefonice de pe Web, totul e n ordine. Exist nc ceva de care trebuie s avem grij n aceast baz de date. Cmpul id va fi pus ca PRIMARY, INDEX, UNIQUE i iniializat ca auto_increment (poziie ce apare n Extra n PHPMyAdmin). Raiunea pentru asta este c acesta va fi cmpul identificator (primar sau index) i deci trebuie s fie unic. Definirea sa ca auto increment nseamn c la adugarea fiecrei nregistrri, ct vreme nu specificm acolo un id, acesta va primi ca valoare urmtorul numr. Dac folosim PHPMyAdmin sau un program de management, putem crea o tabel numit contacte.
PHP/MySQL
Introducei numele bazei de date, contul MySQL i parola MySQL n poziiile corespunztoare din primele 3 linii de mai sus.
nleciaurmtoare(Partea3a)vomvedeacumneconectmlaobazdedatefolosindPHPivom nvacumsadugminformaiinnouanoastrbazdedate.
<< La cuprins
8
PHP/MySQL
Desigur, aici s-ar putea discuta dac nu-i riscant s pstrm parola ntr-un fiier. Nu trebuie s v alarmai ns, deoarece sursa PHP este prelucrat de server nainte de a fi trimis navigatorului, astfel nct este imposibil pentru orice utilizator s vad scriptul. Mai apoi, avem nevoie de o comand care s lanseze conexiunea la baza de date:
mysql_connect(localhost,$username,$password);
Aceast linie spune PHP-ului s se conecteze la serverul de baze de date MySQL la 'localhost' (localhost se numete serverul pe care ruleaz PHPul. n afara cazului n care gazda Web indic altceva, vom folosi localhost) folosind numele de cont memorat n $username i parola din $password. Mai nainte de a discuta cum lucrm cu baza de date, vom vedea nc o comand:
mysql_close();
PHP/MySQL
serverul de baze de date. Scriptul va rula nc, dac nu includem aceast comand, iar prea multe conexiuni MySQL deschise pot cauza probleme serverului web. Este un obicei bun s includem comanda de nchidere de mai sus dup ce am introdus toate comenzile ctre baza de date, pentru a menine platforma n bun stare.
Aceasta spune PHP-ului s selecteze baza de date specificat n variabila $database (pe care am definit-o mai nainte). Dac conexiunea nu se poate realiza procesul (execuia script-ului) se oprete afind textul:
Baza de date nu poate fi selectata
Aceast parte suplimentar 'or die' este bun pentru ieire, chiar dac nu asigur dect un minim control al erorii.
Execuia comenzilor
Dup conectarea la server i selecia bazei de date dorite, putem ncepe execuia comenzilor pe server. Exist dou moduri de a executa o comand. Prima revine pur i simplu la introducerea comenzii n PHP. Asta merge atunci cnd nu apar rezultate ca urmare a execuiei comenzii. Cea de a doua variant este s definim comanda ca o variabil. Asta va atribui variabilei rezultatele operaiei. n aceast lecie vom folosi prima cale, deoarece nu ateptm rspuns de la baze de date. Comanda va arta cam aa:
mysql_query($query);
Folosirea acestei forme a comenzii este util pentru c repetm pur i simplu aceiai comand iari i iari fr a fi nevoie s memorm altele. Tot ce avem de fcut este s schimbm variabila.
10
PHP/MySQL
Introducerea datelor
Acum 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:
Nume: Ionescu Prenume: Gheorghe Telefon: 021 3456789 Mobil: 0724 334455 Fax: 0264 567891 E-mail: [email protected] Web: http://www.cinestie.inext.ro
Pare puin cam confuz la prima vedere. S lmurim puin lucrurile. Mai nti, apare variabila $query creia i atribuim o comand (vezi paragraful precedent). Urmtoarea parte, adic: INSERT INTO contacts VALUES este destul de uor de neles. Ea spune PHP-ului s insereze n tabela numit contacts valorile care urmeaz (scrise ntre paranteze). Acolo, ntre paranteze, avem toate cmpurile de adugat. Apar toate cmpurile n ordine i sunt inserate informaiile dintre ghilimele. Spre exemplu: Ionescu va fi inserat n al 2-lea cmp, care, n aceast tabel este cmpul 'nume'. Poate ai reinut c nu am inserat nimic n primul cmp din baza de date (id). Asta din cauz c acest cmp va fi un cmp index, elementul unic de identificare. Fiecare nregistrare din baza de date va avea un unic ID. Din aceast cauz, cnd ncrcm baza de date, vom pune ID pe 'Auto Increment'. Asta nseamn c, ne-atribuindu-i nici o valoare, el va lua la fiecare nregistrare urmtoarea valoare din ir. Iar prima nregistrare va avea valoarea ID=1 .
nleciaurmtoare(Partea4a)vomvedeacumfolosimformulareleivariabilelepentruainsera informaiiicumafiminformaiiledinbazadedate.
<< La cuprins
11
PHP/MySQL
Aceast pagin poate fi, desigur, formatat i pot apare diferite schimbri - variante. Este doar un formular de pornire, ilustrativ. Va 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:
<? $username="username"; $password="password"; $database="baza_mea_de_date"; mysql_connect(localhost,$username,$password); @mysql_select_db($database) or die( "Baza de date nu poate fi selectata"); $query = "INSERT INTO contacts VALUES ('','$nume','$prenume','$telefon','$mobil','$fax','$email','$web')"; 12
PHP/MySQL
Acest script trebuie salvat ca fiier cu numele insert.php, astfel ca s poat fi apelat de formularul HTML. Treaba va merge ntruct, 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 PHPului. Putem s adugm script-ului un mesaj care s confirme preluarea datelor. Asta face parte din 'oferta' de baz a PHP i rmne ca exerciiu.
Scoaterea Datelor
Acum avem n baza de date cel pu'in o nregistrare, dac nu mai multe. Se pune problema cum vizualizm, cum scoatem aceste date folosind PHP. Cunoaterea elementelor de programare din PHP este necesar, recomandabil fiind parcurgerea Mini-cursului de PHP naintea acestuia. Prima comand la care vom apela este comanda SELECT din SQL, folosit ntr-o cerere MySQL n forma:
SELECT * FROM contacts
Aceasta este o comand de baz din MySQL, care va spune script-ului s selecteze toate nregistrrile din tabela contacts. Dar, de data aceasta, comanda furnizeaz un rezultat, ea va trebui executat atribuin rezultatele unei variabile:
$query="SELECT * FROM contacts"; $rezultat=mysql_query($query);
In acest caz, ntregul coninut al bazei de date va fi atribuit variabilei cu numele $rezultat (care va fi deci o matrice, un tablou). Mai nainte de a putea scoate aceste date va trebui s le extragem ca variabile simple, separate. Pentru asta trebuie s tim cte nregistrri avem n tabel (deci i n variabila $rezultat ).
Numrarea liniilor
Avem o comand special n MySQL pentru calculul numrului de linii din tabel. Este important pentru c n baza de date se fac uzual numeroase actualizri, completri, tergeri.
13
PHP/MySQL
$num=mysql_numrows($rezultat);
Astfel, variabila $num va cpta ca valoare numrul de linii din $rezultat (adic tocmai din baza de date). Acest numr va putea fi folosit n continuare pentru ciclul n care se vor analiza i desface n variable separate cmpurile fiecrei linii.
Construirea ciclului
Avem de scris un ciclu pentru a selecta din tabel (din rezultat) linie cu linie.... Definim un indice, o variabil $i care va parcurge (cu incrementare) valorile de la 1 la $num.
$i=0; while ($i < $num) { OPERATIILE ASUPRA LINIEI ++$i; }
Acesta este un ciclu tipic n PHP i va executa ansamblul numit OPERATIILE ASUPRA LINIEI de exact $num ori, adic de attea ori ct trebuie. La fiecare reluare $i fiind mrit cu o unitate. Astfel $i poate fi folosit i pentru a preciza numrul liniei care se prelucreaz.
Astfel, pentru a extrage fiecare component din baza noastr de date, vom folosi urmtoarele instruciuni:
$nume=mysql_result($result,$i,"nume"); $prenume=mysql_result($result,$i,"prenume"); $telefon=mysql_result($result,$i,"telefon"); $mobil=mysql_result($result,$i,"mobil"); $fax=mysql_result($result,$i,"fax"); $email=mysql_result($result,$i,"email"); $web=mysql_result($result,$i,"web"); 14
PHP/MySQL
Nu ne-am ocupat aici de cmpul ID (dei o puteam face) pentru c nu ne este necesar la afiare datelor.
Combinarea Script-ului
Acum putem scrie script-ul complet pentru scoaterea datelor. n acest script datele nu sunt formatate, adic vor fi afiate toate cu acelai font, predefinit.
<? $username="username"; $password="password"; $database="baza_noastra_de_date"; mysql_connect(localhost,$username,$password); @mysql_select_db($database) or die( "Baza de date nu poate fi selectata"); $query="SELECT * FROM contacts"; $rezultat=mysql_query($query); $num=mysql_numrows($rezultat); mysql_close(); echo "<b><center>Database Output</center></b><br><br>"; $i=0; while ($i < $num) { $nume=mysql_result($rezultat,$i,"nume"); $prenume=mysql_result($result,$i,"prenume"); $telefon=mysql_result($result,$i,"telefon"); $mobil=mysql_result($result,$i,"mobil"); $fax=mysql_result($result,$i,"fax"); $email=mysql_result($result,$i,"email"); $web=mysql_result($result,$i,"web"); echo "<b>$nume $prenume</b><br>Telefon: $telefon<br>Mobil: $mobil<br>Fax: $fax<br>E-mail: $email<br>Web: $web<br><hr><br>"; ++$i; } ?>
nleciaurmtoare(Partea5a)vomvedeacumrealizmscoatereadateloricumselectmdiferite datedinbazadedate.
<< La cuprins
15
PHP/MySQL
Formatarea scoaterii
n ultima parte a leciei precedente am scos o list cu toate persoanele nregistrate n baza de date. De fapt am ajuns s avem definite variabilele care permit scoaterea sau afiarea, ncheind cu o comand destul de simpl de afiare (echo) fr a o explica. Desigur, datele din tabel ar trebui prezentate pe ecran tot n forma unui tabel. Iar asta nu-i prea complicat. n fond dac tim cum s afim (scoatem) fiecare variabil n parte, atunci tot restul privind formatarea, organizarea ca tabel, etc., este doar legat de cunoaterea HTML. Tot ce avem de fcut deci este s folosim PHP pentru scoaterile HTML incluznd variabilele n zonele corecte. Cel mai simplu este s nchidem tagul PHP i s introducem liniile normale din HTML. Oridecte ori ajungem la o variabil o vom include folosind o secven de forma:
<? echo "$numele_variabilei"; ?>
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. Spre exemplu, folosind secvena de cod din lecia precedent cu ciclul corespunztor, putem formata scoaterile pentru ca s apar ntr-o tabel mare:
<table border="0" cellspacing="2" cellpadding="2"> <tr> <th><font face="Arial, Helvetica, sans-serif">Nume</font></th> <th><font face="Arial, Helvetica, sans-serif">Telefon</font></th> <th><font face="Arial, Helvetica, sans-serif">Mobil</font></th> <th><font face="Arial, Helvetica, sans-serif">Fax</font></th> <th><font face="Arial, Helvetica, sans-serif">E-mail</font></th> <th><font face="Arial, Helvetica, sans-serif">Website</font></th> </tr> $i=0; while ($i < $num) { $nume=mysql_result($rezultat,$i,"nume"); $prenume=mysql_result($result,$i,"prenume"); 16
PHP/MySQL
<tr> <td><font face="Arial, Helvetica, sans-serif"><? echo "$nume $prenume"; ? ></font></td> <td><font face="Arial, Helvetica, sans-serif"><? echo "$telefon"; ? ></font></td> <td><font face="Arial, Helvetica, sans-serif"><? echo "$mobil"; ? ></font></td> <td><font face="Arial, Helvetica, sans-serif"><? echo "$fax"; ? ></font></td> <td><font face="Arial, Helvetica, sans-serif"><a href="mailto:<? echo "$email"; ?>">E-mail</a></font></td> <td><font face="Arial, Helvetica, sans-serif"><a href="<? echo "$web"; ? >">Website</a></font></td> </tr> <? ++$i; }
echo "</table>";
Aceast secven va afia antetul tabelului, apoi va aduga o l inie suplimentar pentru fiecare nregistrare din baza de date, formatnd datele la scoatere. Dac suntei deja familiarizai cu PHP i HTML, atunci lucrurile sunt probabil destul de clare - de uor de neles. O s explicm doar una din liniile din tabel, spre exemplu:
<a href="mailto:<? echo "$email"; ?>">E-mail</a>
care construiete o legtur email la adresa transmis de variabila $email . Asta arat una dintre calitile importante i utile ale folosirii PHP pentru includerea datelor MySQL . Adic prin astfel de scoateri putem face paginile Web dinamice.
17
PHP/MySQL
Dac vrem ns s selectm doar pe acele persoane care au prenumele 'Mihai' vom folosi o cerere de forma:
SELECT * FROM contacts WHERE prenume='mihai'
Ca i la alte cereri - comenzi SQL, avem de fapt propoziii foarte apropiate de formularea curent din limba englez. ntr-un mod asemntor vom putea selecta nregistrrile pe baza oricrui cmp din baza de date. Dar se poate selecta o nregistrare folosind mai multe cmpuri, adugnd n formularea cererii clauza:
field='value'
Fr a intra n prea multe detalii, vom mai spune c putem folosi variabilele pentru a transmite criteriul dorit pentru selecie. Spre exemplu, dac dintr-un formular de cutare primim a variabil numit $nume_cautat putem imagina urmtoarea secven:
$query="SELECT * FROM contacts WHERE nume='$nume_cautat'"; $result=mysql_query($query);
nleciaurmtoare(Partea6a)vomvedeactevamodurideascoatedatedinbazadedate,precum icumputemscontrolmerorileprinnumrarealiniilor.
<< La cuprins
18
PHP/MySQL
Interceptarea Erorilor
Prin scoaterea tuturor informaiilor dintr-o baz de date, este puin probabil s ajungem la situaia cnd nu mai sunt date. Dar dac am permis ajustri i, tergeri i actualizri ale nregistrrilor, atunci se prea poate s ajungem la o eroare. Din fericire, cu PHP i MySQL, avem un mod simplu de a evita o astfel de situaie folosind:
$num=mysql_numrows($rezultat);
unde $rezultat conine rezultatul unei cereri - interogri a bazei de date (precum selectarea tuturor nregistrrilor). Aa cum am discutat mai sus, aceasta va atribui variabilei $num numrul de linii din rezultat (care s-a utilizat ntr-un ciclu, n lecia a 4-a). Putem insera n ciclu o comand de captare/tratare a erorilor folosind o instruciune IF :
if ($num==0) { echo "Baza de date nu conine nici o nregistrare"; } else { Output Loop }
Putem dezvolta ramura asta fcnd-o mai prietenoas. Spre exemplu, oferind o legtur la pagina Add Data, de introducere de informaii n baza de date, atunci cnd ea este vid.
Ordonarea datelor
Nu numai c putem scoate datele n funcie de coninutul unui cmp, dar putem ordona aceste date pe baza unei reguli aplicat coninutului unei coloane (spre exemplu aranjnd utilizatorii n ordine alfabetic). In mod normal, afiarea n urma unei interogri se face n ordinea stabilit de identificatorul ID, pornind de la 1 n sus. Putem ns alege modul de ordonare (sortarea) dup oricare coloan din tabel. Spre exemplu, o ordonare util ar putea fi dup numele de botez. Asta nsemnnd n ordine ascendent (cresctoare, de la A la Z i de la 1 la
19
PHP/MySQL
10...).
Putem folosi, desigur i ordonarea descendent, specificnd DESC n locul lui ASC .
Cmpul ID
Atunci cnd, n primele lecii am creat baza de date (cartea de adrese), am inclus un cmp numeric numit id. Pe care l-am stabilit ca auto_increment i i-am dat rolul de cmp primar. Am discutat cum acesta are rolul de identificator unic pentru fiecare nregistrare din baza de date. Acum facem un pas nainte, folosind acest cmp pentru a selecta anumite nregistrri din baza de date.
20
PHP/MySQL
Atunci, folosind unicitatea cmpului ID putem selecta orice nregistrare din baza de date, folosind:
SELECT * FROM contacts WHERE id='$id'
unde $id este o variabil coninnd numrul unei nregistrri. Spre exemplu, dac dorim s avem o pagin Web generat dinamic dintr-o baz de date cu un singur script PHP, putem scrie script-ul ca s includ pagini Web distincte ca nregistrri ale bazei de date. Atunci, folosind cmpul id, putem selecta fiecare pagin individual plasnd-o la soatere. Putem chiar folosi chiar URL-ul paginii pentru a specifica nregistrarea dorit
http://www.centrul_propriu.ro/stiri/items.php?item=5476
Iar script-ul PHP s caute nregistrarea care are numrul de ordine (id-ul) care corespunde valorii variabilei $item, care n acest caz este 5476
Cptnd identificatorul id al nregistrrii, secvena aceasta va crea o legtur la fiecare din nregistrri.
nleciaurmtoare(Partea7a)vomvedeacumcreempaginapentruactualizareainformaiilordin bazadedate.
<< La cuprins
21
PHP/MySQL
Script-ul de actualizare
Am vzut n lecia anterioar cum creem o legtur pentru fiecare nregistrare pentru a ne poziiona n scriptul de actualizare. Prin folosirea variabilei $id , legturile respective pot transmite valoarea corect a identificatorului ID ctre script, astfel ca acesta s poat actualiza baza de date. Vom realiza deci un script de actualizare, care va avea dou pri:
PHP/MySQL
Unde 'Zona de cod suplimentar' marcheaz poriunea din script unde vor apare comenzile de actualizare. Adic formatarea HTML pentru scoatere:
<form action="updated.php" method="post"> <input type="hidden" name="ud_id" value="<? echo "$id"; ?>"> Numele de Familie: <input type="text" value="ud_first" value="<? echo "$nume"?>"><br> Numele de Botez: <input type="text" value="ud_last" value="<? echo "$prenume"?>"><br> Numrul de Telefon: <input type="text" value="ud_phone" value="<? echo "$telefon"?>"><br> Numrul de Mobil: <input type="text" value="ud_mobile" value="<? echo "$mobil"?>"><br> Numrul de Fax: <input type="text" value="ud_fax" value="<? echo "$fax"? >"><br> Adresa E-mail: <input type="text" value="ud_email" value="<? echo "$email"?>"><br> Adresa Web: <input type="text" value="ud_web" value="<? echo "$web"? >"><br> <input type="Submit" value="Update"> </form>
Aa cum se poate vedea, aceast secven construiete (scoate) un formular standard, dar n locul zonelor goale, aa cum apreau n formularul pentru introducerea datelor, de data asta avem coninutul cmpului respectiv din nregistrarea n cauz (care-i de actualizat). Asta l face mai adaptat scopului, mai comod de folosit.
Aceast cerere spune sistemului de gestiune de baze de date s actualizeze tabela contacts n acele linii n care ID coincide cu valoarea din $ud_id (care, aa cum se poate vedea din formularul anterior, a primit valoarea id a nregistrrii pe care o actualizm), modificnd urmtoarele cmpuri cu valorile specificate (care au fost introduse cu
23
PHP/MySQL
tergerea nregistrrilor
Ultima parte a acestei lecii privete modul cum tergem o nregistrare din baza de date. Ca i cu pagina de actualizare, vom construi o pagin pentru a terge una sau mai multe linii din baza de date. Trebuie s-i transmitem poziia (ID-ul) nregistrrii, printr-un URL, spre exemplu:
delete.php?id=9
Scriptul care va face asta, numit delete.php, este aproape identic cu cel de actualizare a bazei de date, cu excepia comenzii MySQL (modului n care este construit cererea). In locul comenzii SQL UPDATE , vom folosi:
DELETE FROM contacts WHERE id='$id'
Ciclurile
La 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. Spre exemplu, dac trebuie s schimbm extragem toate nregistrrile dintr-o baz de date n care apare ca prenume erban pentru a realiza un Website www.serban.ro:
24
PHP/MySQL
Partea Standard de Conectare la Baza de Date $query=" SELECT * FROM contacts WHERE prenume='Serban'"; $rezultat=mysql_query($query); $num=mysql_numrows($rezultat); $i=0; while ($i < $num) { $id=mysql_result($rezultat,$i,"id"); $query1="UPDATE contacts SET web='http://www.serban.ro' WHERE id='$id'"; mysql_query($query); ++$i; } mysql_close();
nleciaurmtoare(Partea8a),ultimadinacestcurs,vomvedeacumspunemgrmadtoate componentelescriptuluicreatincctevaalteamnunteprivindfolosireaMySQL.
<< La cuprins
25
PHP/MySQL
n care precizm datele concrete potrivite (numele_de_utilizator_al_bazei_de_date, parola, nume_baza_de_date). Atunci n fiierele php vom folosi, chiar la nceput, urmtoarea secven, care va include scriptul de mai sus:
include("dbinfo.inc.php");
Atunci, vom putea folosi n continuare variabilele $username, $password i $database n script-ul nostru, fr a avea nevoie s le definim de fiecare dat. De asemeni, dac vom modifica cndva aceste informaii, spre exemplu trecnd pe alt server web, tot ce va fi de schimbat va fi n acest unic fiier. Aceeai schem o putem folosi pentru conectarea la baza de date, plasnd i comanda de conectare n fiier. Atunci va trebui, ns, s ne
26
PHP/MySQL
Cutarea
Se poate realiza i o cutare limitat n baza de date folosind funcia special din MySQL. Adic prin folosirea funciei LIKE , n forma: SELECT * FROM nume_tabela WHERE nume_camp LIKE '%$string%' Asta nsemn c LIKE va spune bazei de date s foloseasc posibilitile proprii de cutare. Semnele % au semnificaia c orice alte date pot s apar n poziia lor i variabila $string va conine cererea de cutare. Adic putem avea acolo un cuvnt, sau un numr, spre exemplu:
LIKE '%pian%'
ceea ce va conduce la scoaterea liniilor care includ cuvntul pian n cmpul specificat. Similar, putem renuna la unul din semnele % astfel ca s precizm poziia irului de caractere: LIKE 'pian%' Astfel vom putea selecta doar liniile n care cmpul specificat ncepe cu prefixul pian, caz n care, spre exemplu, expresia urmtoare va fi evitat:
Un pian se afl pe scen.
Finalizarea Script-ului
Pe parcursul acestui mini-curs am prezentat diferite poriuni de cod ale script-ului pentru construcia bazei de date contacts. Putei descrca script-ul complet ca un fiier comprimat zip, pentru a examina ntreaga aplicaie (vezi legturile).
Concluzii
Acum, ncheind acest curs, ar trebui s tii s folosii PHP i MySQL mpreun pentru a crea o baz de date - accesibil pe Web, precum i pentru a scrie programe de acces la baza de date. Folosirea bazelor de date pe Web deschide noi i mari posibiliti de lucru n Internet i poate face mult mai puternic un centru Web, economisind timpul de actualizare, permind utilizatorilor s interacioneze (s rspund) i multe altele.
<< La nceput
27