Sunteți pe pagina 1din 27

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

Partea 1-a: Introducere


Introducere
Pentru mult lume, principala raiune de a nva un limbaj precum
PHP ar fi interaciunea pe care o ofer cu bazele de date. n acest curs
cutm s explicm cum se folosete PHP i MySQL, pentru a memora
informaii pe Web i cum includem toate acestea pe site-ul Web. Pentru a
parcurge acest curs sunt necesare cel puin elementele de baz privind
folosirea PHP. Se recomand deci parcurgerea cursului de PHP, nainte de
a continua.

De ce mi trebuie o Baz de Date?


Este, de fapt, surprinztor ct de util poate fi o baz de date, mai
ales atunci cnd poate fi folosit ntr-un site Web. Sunt foarte multe
lucruri care se pot face ntr-un astfel de caz, de la afiarea unor simple
liste i pn la producerea integral a paginilor Web dintr-o baz de date.
Cteva exemple cu PHP i MySQL, folosite mpreun, sunt:

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

Cum aflm dac PHP i MySQL sunt instalate


Exist un test simplu, att pentru PHP ct i pentru MySQL:
Lansai - deschidei un editor de texte i scriei urmtoarele:
<?
phpinfo();
?>

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.

Gestiunea Bazelor de date


Chiar dac tot ce ine de administrarea bazelor de date poate fi
realizat prin scripturi PHP, instalarea pe server a pachetului PHPMyAdmin
poate aduce un plus de confort. Este un excelent set de scripturi care
asigur o interfa administrativ pentru bazele de date MySQL. Si mai
este i public-gratuit.
Cu el putei aduga, elimina, edita, salva i vizualiza bazele de date, fiind
deosebit de util pentru depanare.

Scopul acestui curs


Urmrim familiarizarea cursantului cu cteva din elementele de
baz ale folosirii PHP mpreun cu MySQL. Pentru asta vom urmri mereu
un exemplu. Parcurgnd cursul de fa vei nva cum s creai un
program bazat pe Web pentru a contacta colaboratorii - o variant de
caiet de adrese. Acest program v permite s memorai numele
mpreun cu adresa corespunztoare, adresa e-mail i numrul de
telefon. Vei putea s actualizai nregistrrile, s cutai n baza de date.
Existnd i opiunea de a trimite un mesaj email la toi cei din baza de
date (reinei ns: acest sistem nu va fi folosit pentru expedierea unor
mesaje nesolicitate).
Dup realizarea acestui sistem vei fi, cu siguran, n msur s creai
aproape orice tip de baz de date pe Web.

nleciaurmtoare(Partea2a)vomvedeacumproiectmcumrealizmobazdedatenMySQL.

<< La cuprins
4

PHP/MySQL

Partea 2-a: Construirea unei Baze de Date


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. n aceast lecie vom vedea cum creem o baz de date n
MySQL i cum o pregtim pentru date. Ca un exemplu, vom crea o baz
de date de tip carte de adrese de contact.

Construcia Bazei de Date


Bazele de date MySQL au un sistem de iniializare standard (un
setup). Este vorba de o baz de date, compus din tabele, oarecum
separate, coninnd diferite cmpuri, etc. chiar dac sunt parte dintr-o
baz de date. Fiecare tabel conine nregistrri care sunt fcute din
cmpuri.

Conectarea la o Baz de Date


Procesul de instalare a unei baze de date MySQL difer de la o
platform la alta. n esen este vorba peste tot de un nume al bazei de
date, un nume de utilizator (cont) i o parol. Aceste informaii sunt
cerute pentru conectarea la baza de date.
Dac avei pachetul PHPMyAdmin (sau un program similar) instalat,
atunci putei s intrai acolo i s v conectai introducnd contul
(numele de utilizator) i parola. Dac nu avei aa ceva, atunci trebuie s
facei ntreaga administrare a bazelor de date folosind script-uri PHP (i o
putei face).

Crearea unei Tabele


Mai nainte de orice altceva cu baza de date, trebuie s v creai o
tabel. O tabel este o seciune a bazei de date pentru memorarea unor
informaii structurate (legate). ntr-o tabel vom defini diferite cmpuri
care vor fi folosite n acea tabel. Din cauza acestei construcii, aproape
toate centrele cu baze de date trebuie s fie satisfcute folosind doar o
baz de date.
Crearea unei tabele n PHPMyAdmin este simpl, scriei numele,
selectai numrul de cmpuri i "apsai" butonul (click). Ajungei atunci
la un ecran setup n care trebuie s creai cmpurile pentru baza de date.
Dac folosii un script PHP pentru a crea propria baz de date, iar
completa creere i iniializarea vor fi fcute tr-o singur comand.

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.

Crearea unei Tabele cu PHP


S creem o tabel din PHP este ceva mai dificil dect cu MySQL.
Avem de parcurs urmtorii pai:
CREATE TABLE nume_tabel {
Fields
}

Cmpurile sunt definite dup cum urmeaz:


fieldname type(length) extra info,

Ultimul cmp introdus nu poate include nici o virgul.


O s dm ndat un exemplu complet privind aceste definiri.

Baza de date cu adrese de contact


Baza de date de contact va conine toate informaiile de contact ale
cunoscuilor introdui n tabel. Iar informaiile vor putea fi editate i
consultate n internet.
Urmtoarele cmpuri vor fi folosite n baza de date:

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.

Crearea Tabelei n PHP


Pentru a crea aceast tabel vom folosi urmtoarea secven de
comenzi PHP. O parte dintre comenzile de mai jos n-au fost nc
discutate, dar le vom explica n detaliu n lecia urmtoare.
<?
$user="username";
$password="password";
$database="database";
mysql_connect(localhost,$user,$password);
@mysql_select_db($database) or die( "Baza de date nu poate fi selectata");
$query="CREATE TABLE contacts (id int(6) NOT NULL auto_increment,nume
varchar(15) NOT NULL,prenume varchar(15) NOT NULL,telefon varchar(20) NOT
NULL,mobil varchar(20) NOT NULL,fax varchar(20) NOT NULL,email varchar(30)
NOT NULL,web varchar(30) NOT NULL,PRIMARY KEY (id),UNIQUE id (id),KEY id_2
(id))";
7

PHP/MySQL

mysql_query($query);
mysql_close();
?>

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

Partea 3-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. n aceast lecie vom vedea cum introducem
anumite informaii n baza noastr de date astfel nct s devin ct mai
util.

Conectarea la o baz de date


Primul lucru care trebuie fcut, mai nainte de a putea face ceva,
este conectarea la baza de date MySQL. Acesta 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 (username), parola (password) i numele bazei de date:
$username="nume_utilizator";
$password="parola";
$database="numele_bazei_de_date";

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();

Aceasta este o comand foarte important care nchide conexiunea cu


9

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.

Selectarea bazei de date


Dup ce ne-am conectat la serverul de baze de date, trebuie s
selectm baza de date pe care vrem s-o folosim. Trebuie s fie o baz de
date la care avem acces, cu respectivul nume de utilizator.
Se folosete urmtoarea comand:
@mysql_select_db($database) or die( "Baza de date nu poate fi selectata");

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: ionescughe@personal.ro
Web: http://www.cinestie.inext.ro

Toate acestea vor fi introduse cu o singur comand:


$query = "INSERT INTO contacts VALUES ('','Ionescu','Gheorghe','021
3456789','0724 334455','0264
567891','ionescughe@personal.ro','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

Partea 4-a: Afiarea datelor


Introducere
Pn acum, am creat o baz de date i am ncrcat n ea informaii.
In aceast lecie vom vedea cum se realizeaz o pagin de intrare pentru
aceast baz de date, i cum se afieaz coninutul acesteia.

Introducerea datelor dintr-o pagin HTML


Introducerea datelor din paginile HTML este aproape identic cu
inserarea lor din script-uri PHP. Avantajul const, ns, n faptul c nu
apare nevoia schimbrii script-ului pentru fiecare cmp de introdus. In
plus, putem permite "vizitatorilor" s introduc direct datele lor.
Iat mai jos cum arat o pagin HTML cu celule text pentru introducerea
detaliilor corespunztoare:
<form action="insert.php" method="post">
Nume Familie: <input type="text" name="nume"><br>
Prenume: <input type="text" name="prenume"><br>
Telefon: <input type="text" name="telefon"><br>
Mobil: <input type="text" name="mobil"><br>
Fax: <input type="text" name="fax"><br>
E-mail: <input type="text" name="email"><br>
Web: <input type="text" name="web"><br>
<input type="Submit">
</form>

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

mysql_query($query);
mysql_close();
?>

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.

Asocierea datelor la variabile


n partea pe care am numit-o OPERATIILE ASUPRA LINIEI trebuie s
separm fiecare cmp din linia - nregistrare asociindu-l unei variabile.
Folosim pentru asta urmtoarea secven:
$variable=mysql_result($rezultat,$i,"numele_campului");

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

Partea 5-a: Alte rezultate


Introducere
Pn 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. n aceast lecie vom vedea mai multe moduri de a afia - scoate
date din baza de date.

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

$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");
?>

<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

Selectarea unor date


La fel cu afiarea ntregii baze de date, PHP poate fi folosit pentru a
selecta date individuale, doar anumite nregistrri, sau nregistrrile care
verific anumite criterii. Pentru asta trebuie s folosim o variaiune a
cererii SELECT . Pentru afiarea ntregii tabele am folosit cererea:
SELECT * FROM contacts

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);

Reinei c la sfritul primei linii avem un ' urmat de " , nainte de ; .

nleciaurmtoare(Partea6a)vomvedeactevamodurideascoatedatedinbazadedate,precum
icumputemscontrolmerorileprinnumrarealiniilor.

<< La cuprins

18

PHP/MySQL

Partea 6-a: nregistrri i erori


Introducere
n ultimele dou lecii am vzut cum extragem date din baza de
date i cum le afim pe ecran. Acum vom ajunge la aspectele finale ale
afirii datelor, prin selectarea elementelor dorite i controlul erorilor
(stoparea mesajelor de eroare) atunci cnd scoatem date.

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...).

Pentru a obine un astfel de rezultat folosim urmtoarea cerere:

SELECT * FROM contacts ORDER BY prenume ASC

Putem folosi, desigur i ordonarea descendent, specificnd DESC n


locul lui ASC .

Alte variante cu mysql_numrows i Sortare


Valoarea care i se atribuie (ca mai sus) variabilei $num este foarte
important, nu numai pentru cicluri i captarea erorilor. Un exemplu
poate fi scoaterea doar a ultimelor 5 nregistrri adugate bazei de date.
Mai nti, avem ordonarea natural, stabilit de ID, (ultima nregistrare
avnd valoarea maxim a ID), dar vom alege ordinea descendent.
Astfel vom avea nregistrrile ncepnd cu cea mai recent i terminnd
cu cea mai veche. Mai trebuie doar s numrm, afind doar primele 5.
Desigur, nainte de a ncepe ciclul de cinci, trebuie s ne asigurm c
$num este mai mare dect 5 . Avem deci o secven de forma:
if ($num<5) {
$to=$num;
}else{
$to=5;
}
$i=0;
while ($i < $to) {
SECVENTA DE COMENZI mysql PENTRU SCOATERE
Cu alte cuvinte, dac avem mai mult de cinci linii n tabel atunci ciclul se
va face de la 0 la 5. In caz contrar, dac sunt mai puin de 5 linii, ciclul va
parcurge exact numrul respectiv de linii.

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

Selecia unei singure nregistrri


Iat cum putem selecta nregistrri din baza de date folosind coninutul
unui cmp particular:
SELECT * FROM contacts WHERE field='value'

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

Legturi la o singur nregistrare


Folosind aceast metod de alegere a nregistrrii folosind URL-ul,
nregistrarea poate fi extins prin generarea dinamic a URL-ului. Pare
cam complicat. Vom vedea cum realizm o pagin de aducere la zi a
bazei de date cu adresele. Cu ideea ca utilizatorul s-i poat modifica
propriile detalii din nregistrare.
Pentru asta, vom include o nou coloan cuprinznd o legtur Update .
Aceast legtur conducnd la o pagin care s permit utilizatorului s
actualizeze nregistrarea.
Pentru a selecta nregistrarea din acea pagin vom pune:

?id=$id

Cptnd identificatorul id al nregistrrii, secvena aceasta va crea o


legtur la fiecare din nregistrri.
nleciaurmtoare(Partea7a)vomvedeacumcreempaginapentruactualizareainformaiilordin
bazadedate.

<< La cuprins

21

PHP/MySQL

Partea 7-a: Actualizare i tergere


Introducere
Pn acum am nvat cum s punem informaiile n baza de date
MySQL, cum s vedem aceste informaii din baza de date, selectnd care
din ele vrem s le vedem. n aceast lecie vom vedea cum facem cele
dou aciuni finale, actualizarea bazei de date i tergerea unor
nregistrri din ea.

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:

Pagina de afiare a actualizrii


Prima parte a script-ului de actualizare folosete procedeul de selecie a
unei singure nregistrri, aa cum l-am descris n lecia precedent,
adugnd doar cteva elemente HTML pentru a-l face mai util. Mai nti,
ne conectm la baza de date i selectm nregistrarea potrivit.
$id=$_GET['id'];
$username="nume_utilizator";
$password="parola";
$database="baza_de_date";
mysql_connect(localhost,$username,$password);
$query=" SELECT * FROM contacts WHERE id='$id'";
$result=mysql_query($query);
$num=mysql_numrows($rezultat);
mysql_close();
$i=0;
while ($i < $num) {
$nume=mysql_result($rezultat,$i,"nume");
$prenume=mysql_result($rezultat,$i,"prenume");
$telefon=mysql_result($rezultat,$i,"telefon");
$mobil=mysql_result($rezultat,$i,"mobil");
$fax=mysql_result($rezultat,$i,"fax");
$email=mysql_result($rezultat,$i,"email");
22

PHP/MySQL

$web=mysql_result($rezultat,$i,"web");
Zona de cod suplimentar
++$i;
}

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.

Actualizarea bazei de date


Tot ce mai avem de fcut este actualizarea efectiv a bazei de date. Asta
este o operaie simpl care implic o nou cerere pentru baza de date:
$query = "UPDATE contacts SET nume = '$ud_first',prenume =
'$ud_last',telefon = '$ud_phone',mobil = '$ud_mobile',fax = '$ud_fax',email =
'$ud_email',web = '$ud_web' WHERE id = '$ud_id'";

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

ajutorul formularului).
Aceast cerere poate fi nglobat ntr-un script simplu:
$ud_id=$_POST['ud_id'];
$ud_first=$_POST['ud_first'];
$ud_last=$_POST['ud_last'];
$ud_phone=$_POST['ud_phone'];
$ud_mobile=$_POST['ud_mobile'];
$ud_fax=$_POST['ud_fax'];
$ud_email=$_POST['ud_email'];
$ud_web=$_POST['ud_web'];
$username="nume_utilizator";
$password="parola";
$database="baza_de_date";
mysql_connect(localhost,$username,$password);
$query="UPDATE contacts WHERE id='$ud_id' SET first='$ud_first'
last='$ud_last' phone='$ud_phone' mobile='$ud_mobile' fax='$ud_fax'
email='$ud_email' web='$ud_web'";
mysql_query($query);
echo "Actualizarea s-a fcut";
mysql_close();

Asta va actualiza baza de date transmind i o confirmare utilizatorului.

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

Partea 8-a: ncheierea Script-ului


Introducere
Pe parcursul acestui curs am vzut cum s folosim PHP-ul pentru a
interaciona cu un sistem de baze de date MySQL (sau SQL) i cum s
folosim comenzile uzuale (cele mai necesare). Am exemplificat, cu modul
de realizare a unei baze de date de tip carte de adrese (ca sistem de
management a contactelor ?). In aceast lecie final, vom vedea cteva
"trucuri" MySQL i vom scrie versiunea definitiv (final) a script-ului
construit pe parcursul acestui curs.

Pentru economia de timp


Atunci cnd construim un script complex folosind bazele de date,
apare des secvena de conectare la baza de date. De aceea, pentru a
simplifica lucrurile, se poate fie s creem un fiier cu numele de utilizator
i parola sau chiar un fiier de conectare. Spre exemplu, un fiier
"username/password" poate fi construit cu numele:
dbinfo.inc.php
cuprinznd n el:
<?
$username="numele_de_utilizator_al_bazei_de_date";
$password="parola";
$database="nume_baza_de_date";
?>

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");

sau, atunci cnd acesta se afl n alt director:


include("/[traseul complet]/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

asigurm de nchiderea conexiunii, pentru a nu avea probleme cu


serverul 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

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