Documente Academic
Documente Profesional
Documente Cultură
MYSQL and PHP PDF
MYSQL and PHP PDF
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:
PHP/MySQL
PHP/MySQL
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
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
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
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
PHP/MySQL
mysql_query($query);
mysql_close();
?>
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);
PHP/MySQL
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);
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
<< La cuprins
11
PHP/MySQL
PHP/MySQL
mysql_query($query);
mysql_close();
?>
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
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);
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;
}
PHP/MySQL
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"; ?>
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>";
17
PHP/MySQL
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);
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...).
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
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
?id=$id
<< 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
$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>
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();
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
nleciaurmtoare(Partea8a),ultimadinacestcurs,vomvedeacumspunemgrmadtoate
componentelescriptuluicreatincctevaalteamnunteprivindfolosireaMySQL.
<< La cuprins
25
PHP/MySQL
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%'
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