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:
1
PHP/MySQL
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.
2
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.
3
PHP/MySQL
nleciaurmtoare(Partea2a)vomvedeacumproiectmcumrealizmobazdedatenMySQL.
<< La cuprins
4
PHP/MySQL
5
PHP/MySQL
Cmpuri
Exist o larg varietate de cmpuri i de atribute disponibile n
MySQL i vom discuta doar cteva din ele:
Tipul cmpului Descriere
TINYINT Numr ntreg mic
SMALLINT Numr ntreg mic
MEDIUMINT Numr ntreg
INT Numr ntreg
VARCHAR Text (maximum 256 caractere)
TEXT Text
Fields
6
PHP/MySQL
<?
$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();
?>
nleciaurmtoare(Partea3a)vomvedeacumneconectmlaobazdedatefolosindPHPivom
nvacumsadugminformaiinnouanoastrbazdedate.
<< La cuprins
8
PHP/MySQL
$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);
mysql_close();
9
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
nleciaurmtoare(Partea4a)vomvedeacumfolosimformulareleivariabilelepentruainsera
informaiiicumafiminformaiiledinbazadedate.
<< La cuprins
11
PHP/MySQL
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.
<?
$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");
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 PHP-
ului.
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:
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) {
++$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.
$variable=mysql_result($rezultat,$i,"numele_campului");
$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
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();
$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");
++$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:
$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>";
17
PHP/MySQL
field='value'
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);
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
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
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
nleciaurmtoare(Partea7a)vomvedeacumcreempaginapentruactualizareainformaiilordin
bazadedate.
<< La cuprins
21
PHP/MySQL
Introducere
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:
$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");
++$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.
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);
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
$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
Introducere
<?
$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");
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
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%'
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