Documente Academic
Documente Profesional
Documente Cultură
FACULTATEA DE MATEMATICĂ ŞI
INFORMATICĂ
DEPARTAMENTUL DE INFORMATICĂ
LUCRARE DE LICENŢĂ
STUDENTĂ: COORDONATOR:
OLARU NICULINA BIANCA LECT. HORIA POPA
TIMIŞOARA
IUNIE 2007
1
Cuprins
Introducere..............................................................................................................4
......................................................................................................................5
Capitolul 1........................................................................................................................6
1.1 Avantajele limbajului PHP......................................................................................6
1.2 Sintaxa PHP...............................................................................................................7
1.3 Comentarii.................................................................................................................8
...............................................................................................................................8
1.4 Tipuri de date în PHP.................................................................................................8
1.5 Variabile.....................................................................................................................9
1.6 Constante..................................................................................................................11
1.7 Operatori.................................................................................................11
1.8 Expresii..............................................................................................14
1.9 Tablouri...................................................................................15
1.10 Structuri de control...................................................................................16
1.10.1 Instrucţiuni conditionale..................................................................16
1.10.2 Instrucţiuni repetitive...................................................................................18
1.11 Funcţii....................................................................................................19
1.11.1 Funcţii predefinite .....................................................................20
1.11.2 Funcţii utilizator .................................................................20
............................................................................................................21
1.11.3 Transmiterea parametrilor............................................................21
1.11.4 Funcţii recursive..............................................................................................21
1.12 Clase şi obiecte.......................................................................................................21
1.12.1 Definirea unei clase.........................................................................................21
1.12.2 Constructori.....................................................................................................22
1.12.3 Moştenire........................................................................................................23
1.13 Reutilizarea codului ............................................................................................23
..................................................................................................................................23
1.13.1 Instrucţiunea require.......................................................................................23
1.13.2 Instrucţiunea include.....................................................................................24
1.14 Controlul sesiunilor................................................................................................24
Capitolul 2......................................................................................................................26
2.1 Noţiuni generale.......................................................................................................26
2.2 Proiectarea unei baze de date...................................................................................27
Normalizarea unei baze de date relaţionale.....................................................27
2.3 Elemente de limbaj ..................................................................................................28
2.3.1 Comentarii ..........................................................................28
2.3.2 Tipuri de date....................................................................................................28
.......................................................................................................................30
2.3.3 Operatori .....................................................................................................30
.......................................................................................................................................31
....................................................................................................................................31
2.4 Crearea unei baze de date şi gestiunea acesteia.......................................................31
2.4.1 Crearea unei tabele............................................................................................31
2
2.4.2 Ştergerea unei tabele.........................................................................................32
2.4.3 Inserarea datelor în tabele....................................................................32
2.4.4 Ştergerea datelor din tabele.................................................................34
2.4.5 Extragerea informaţiilor din tabele.......................................................34
2.5 Folosirea alias-urilor................................................................................................36
2.6 Accesul la o bază de date................................................................................36
2.6.1 Utilizatori şi parole .....................................................................................36
..................................................................................................................37
2.6.2 Privilegii MySQL..........................................................................37
....................................................................................................................................39
...................................................................................................................................39
................................................................................................................................40
Capitolul 3......................................................................................................................40
3.1 Conectarea la serverul MySQL................................................................40
3.2 Interogări.................................................................................41
3.3 Căutarea şi afişarea rezultatelor........................................................................42
Concluzii........................................................................................................................43
......................................................................................................................................43
Bibliografie....................................................................................................................44
3
Introducere
Într-o epocă modernă ca aceasta în care trăim, poţi rezolva totul cu ajutorul
internetului printr-un simplu ‘click’ – o singură apăsare a mouse-ului şi ai cumpărat
rochia pe care ţi-o doreai sau ai aflat ultimele ştiri. Nu ai mai intrat demult într-o librărie,
dar ai acasă toată colecţia semnată Coelho, fie că trăieşti într-un mare oraş sau într-un
oraşel provincial, dacă ai acces la internet poţi face orice. Totuşi, pentru ca aceste lucruri
să se întample mulţi oameni lucrează la actualizarea paginilor, la menţinerea acestora sub
o formă interesantă, care să atragă mereu vizitatori.
4
Prin intermediul acestei lucrări voi prezenta avantajele combinării celor doua
tehnici de programare (PHP şi MySQL) şi tehnica de creare a unor pagini web cu
conţinut dinamic şi actualizat, implementate cu ajutorul acestora. Aplicaţia realizată în
scopul susţinerii acestei lucrări este o pagină de poezii online.
5
Capitolul 1
Limbajul PHP
6
PHP poate genera automat aceste fişiere şi să le salveze în sistemul de fişiere în loc să
le afişeze, formând un cache de partea serverului pentru conţinutul dinamic.
Deoarece PHP a fost scris special pentru crearea de pagini Web dinamice, poate
efectua mult mai rapid şi mai eficient unele operaţii, în comparaţie cu competitorii săi
Perl ,VCScript, Java, care nu au fost creaţi special pentru crearea de pagini Web .Cu
toate acestea, nu înseamnă că PHP este un limbaj de programare mai bun decat celelalte,
deoarece există actiuni pe care Java, Perl le pot efectua si PHP nu este capabil să le
efectueze,însă PHP este mult mai bun pentru domeniul pentru care a fost creat.
Unul din principalele avantaje PHP este faptul că e relativ simplu şi direct, de
aceea PHP este mult mai uşor de învaţat şi de utilizat faţă, spre exemplu , de ASP.NET
care necesită cunoasterea unor noţiuni de VCScript, C# ,sau faţă de CGI care necesită
cunostinţe de Perl sau de C.
PHP nu are probleme de compatibilitate cu browserul. Scripturile PHP sunt
interpretate de server şi nimic mai mult, asadar nu trebuie să ne facem griji dacă limbajul
în care dezvoltam este recunoscut de browserele utilizate de clienti. PHP permite o
încarcare mai rapidă pe partea clientului. JavaScript ar incetini afişarea unei pagini web
pe calculatoare mai slabe, deoarece browserul trebuie să ruleze scriptul mai întâi ; în
cazul interpretării de catre server, sarcina aceasta este transferată maşinii serverului web.
Un alt mare avantaj alt limbajului PHP este acela că oferă posibilitatea de a
alege programarea procedurală sau programarea orientată obiect, sau chiar ambele. Cu
toate acestea, nu orice facilitate a standardului POO este prezentă în versiunea curentă
PHP-ului, multe librării de cod şi aplicaţii mari (incluzând şi librăria PEAR) sunt scrise
folosind doar cod POO.
7
În dezvoltarea aplicaţiei am folosit stilul XML care tinde să fie utilizat tot mai
des.
La scrierea codului, instrucţiunile PHP din script vor fi terminate printr-un
separator punct şi virgulă ';' asemănător celor din limbajul C, C++ sau Java. Omiterea
acestui separator va genera o eroare de sintaxă. Interpretorul de PHP va ingnora în
schimb spaţiile dintre instrucţiuni sau dintre elementele unei instrucţiuni.
Exemplu :
1 : <?php echo "Hello"; echo "world !"; ?>
2 :<?php echo "Hello";
echo "world !" ;?>
Rezultatul va fi acelaşi.
1.3 Comentarii
Pentru claritatea codului programatorii obişnuiesc să explice rolul anumitor linii
din cadrul programului incluzând anumite comentarii. Interpretorul de PHP va ignora
textul din comentarii.
O modalitate de a insera un comentariu este cea în stilul C, când comentariul se
poate întinde pe mai multe linii şi este cuprins între semnele '/*' şi '*/'. El se poate insera
chiar şi în mijlocul unei expresii dar nu poate fi imbricat în alt comentariu.
Exemplu : < ?php /* linii de cod*/ ?>
Pentru un comentariu care se întinde până la sfarşitul liniei curente există două
posibilităţi : stilul C++ şi stilul Shell.
Exemplu : < ?php //linie de cod ?>
< ?php #linie de cod ?>
Boolean este cel mai simplu şi conţine o valoare de adevar. Poate conţine unul
din urmatoarele cuvinte cheie : TRUE sau FALSE.
Integer ia valori din mulţimea Z= {…,-2,-1, 0, 1, 2,…}, adică sunt numere fără
parte fracţionară.
Double reprezintă numerele reale, valori numerice care includ fracţii zecimale.
Numerele duble sunt stocate folosindu-se standardul IEEE-64, pe 64 de biţi. Acest
format permite valori care pot merge până la 1,8 x 10308 şi furnizează aproximativ 14
cifre semnificative după virgulă.
String reprezintă un sir de caractere. Spre deosebire de datele numerice care
conţin cu precădere cifre, şirurile (datele de tip string) pot conţine orice caracter. Ca
atare şirurile sunt utile pentru stocarea datelor care nu pot fi calculate, precum nume,
adrese, comentarii, etc.Nu este o problemă dacă un string devine prea mare. Nu există
practic nici o limită de dimensiune impusă de PHP.Pentru a specifica un şir PHP,
caracterele care alcătuiesc şirul sunt incluse între ghilimele duble. PHP permite
includerea în şiruri a unor caractere speciale, precum caracterele de salt la linie nouă
sau de retur de caracter, prin furnizarea de secvenţe escape. Caracterele sunt cele
utilizate în C, C++ sau Java.
8
Pentru a specifica un şir mai pot fi folosite şi apostroafe. Diferenţa în acest caz
constă în faptul că se inhibă evaluarea variabilelor.
O altă modalitate de a delimita un string este folosirea sintaxei « heredoc ».
Trebuie furnizat un identificator după <<<, apoi string-ul, apoi acelaşi identificator
pentru a închide citatul. Identificatorul de închidere trebuie să înceapă în prima coloană
a liniei. De asemenea trebuie să urmeze aceeaşi regulă de numire ca orice altă etichetă
PHP: trebuie să conţină doar caractere alfanumerice şi underscore şi trebuie să inceapă
cu un character diferit de o cifră sau cu underscore. Exemplu de astfel de identificatori
sunt EOD, EOT.
1.5 Variabile
9
Indirectarea se realizează prin utilizarea marcajului dolar '$' în faţa numelui variabilei
referinţă. De exemplu:
<?php
$var1 = 5;
$var2 = "var1";
echo "Valoarea din var1 este ";
echo $var1;
echo " sau ";
echo $$var2;
?>
Notaţia $$var2 a fost folosită pentru a desemna valoarea reţinută de variabila $var1.
10
1.6 Constante
O constantă este un nume dat unei valori. O constantă nu îşi poate modifica
valoarea de-a lungul execuţiei scriptului. Numele de constante sunt case-sensitive. O
diferenţa notabilă faţă de variabile este aceea că numele constantelor nu sunt precedate
de semnul $.Prin convenţie constantele sunt scrise cu litere mari. Definirea unei
constante se face folosind funcţia define().
Exemplu :
<?php
define("CONSTANT", "o_constanta");
echo CONSTANT; // afiseaza "o_constanta"
echo Constant; // afiseaza "Constant"
?>
O constantă odată definită nu poate fi modificată sau dealocată.Vizibilitatea
unei constante este globală.
1.7 Operatori
Pentru a putea efectua operaţii asupra unor varibile şi constante de diverse
tipuri se folosesc anumite simboluri numite operanzi. Entităţile asupra cărora se aplică
un operator se numesc operanzi. Un operator poate avea unul, doi sau chiar trei
operanzi. Majoritatea operatorilor sunt binari (au doi operanzi). În general operatorii
sunt clasificaţi în funcţie de tipul datelor asupra cărora acţionează. Există :
Operatori aritmetici - provin din matematică ţi acţionează asupra datelor de tip
numeric. Aceştia sunt prezentaţi în tabelul urmator:
Operatorul de împarţire ("/") returnează o valoare întreagă de fiecare dată, chiar dacă
cei doi operanzi sunt întregi (sau string-uri convertite la întregi).
Exemplu:
$a = 1;
$b = $a++; // b = 1, a = 2
11
$c = ++$a; // c =3, a = 3
$d = 4 + --$a; // d = 6, a = 2
$e = 4 + $c--; // e =7 , c = 2
Dacă operatorii aritmetici se aplică asupra unor valori de tip string, PHP
va încerca conversia acestora în numere. Dacă conversia nu reuşeşte,
şirurile sunt convertite la valoarea 0.
12
Exemplu Nume Rezultat
$a and $b And TRUE dacă atat $a si $b sunt TRUE.
$a or $b Or TRUE dacă fie $a fie $b sunt TRUE.
$a xor $b Xor TRUE dacă fie $a fie $b sunt TRUE, dar nu ambele
! $a Not TRUE dacă $a nu este TRUE.
$a && $b And TRUE dacă atat $a cat si $b sunt TRUE.
$a || $b Or TRUE dacă fie $a fie $b sunt TRUE.
13
este plasată comanda. PHP va încerca să execute conţinutul apostroafelor inverse ca o
comandă shell ; rezultatul va fi returnat (poate fi asignat unei variabile). Folosirea
operatorului de execuţie este identică utilizării comenzii shell_exec().
Operatorul de execuţie acţionează doar dacă opţiunea safe_mode din php.ini
este dezactivată (Off). În general acest operator nu se foloseste datorită breselor de
securitate pe care le deschide pe server.
1.8 Expresii
Expresiile sunt foarte importante în PHP. Aproape tot ceea ce scriem în limbajul
PHP reprezintă o expresie. Expresiile combina operanzi şi operatori de diverse tipuri :
constante, variabile şi nume de funcţii. Dacă scriem „$a=3”, îi atribuim lui $a valoarea
3. Alte exemple de expresii sunt prezentate mai jos:
După atribuirea $a=3 ne aşteptăm ca valoarea lui $a să fie 3; aşadar dacă scriem
$b = $a, ne aşteptăm să se comporte ca şi cum am fi scris $b = 3. Cu alte cuvinte, $a
este o expresie care are valoarea 3. Dacă totul funcţionează corect, comportamentul
descris mai sus este cel ce va avea loc.
$nume = "Ina";
$sir1 = "$nume are mere!";
14
$sir2 = '$nume are mere!';
echo $sir1; // va afisa Ina are mere
echo $sir2; // va afişa $nume are mere
1.9 Tablouri
Tabloul, aşa cum spuneam la tipul de date array, este cel care mapează valorile
în chei. Adică el reprezintă o variabilă ce stochează mai multe valori . Aceste valori
individuale se numesc elementele tabloului. În PHP tabloul va asocia fiecărei intrări o
cheie prin care aceasta poate fi regăsita. Cheile pot fi numerice (în acest caz indicii
creaţi implicit vor fi 0,1,2 ...) sau pot fi şiruri de caractere (caz în care tabloul se
numeşte asociativ). Valorile reţinute pot avea orice tip dar sunt de acelaşi fel pentru un
tablou dat.
Variabilele care au o singură valoare se numesc scalare. O variabila de tip
tablou poate fi creată prin constructorul array(). Sintaxa pentru crearea unui tablou
indexat numeric este:
$tablou = array (el0, el1, ... el_n);
Exemplu :
$fructe= array ("capşuni", "pere", "mere", "gutui", "portocale");
Accesul la elementele tabloului se face prin indecsi numerici (cu semnificaţia de
numere de ordine în tablou). Spre exemplu $fructe[0] are valoarea "capşuni", $fructe[3]
are valoarea "gutui" etc.
Pentru a afla numarul curent de elemente ale unui tablou se face cu ajutorul
funcţiei count($tablou). În PHP dimensiunea unui tablou este variabila. Pentru a
adăuga un nou element se va atribui pur şi simplu variabilei cu urmatorul indice o
anumită valoare. Spre exemplu $fructe[5]="banane" va adauga un nou element
("banane") la sfârşitul tabloului $fructe.
Tablourile în care valorilor conţinute le sunt asociate chei prin care acestea pot fi
regăsite se numesc tablouri asociative. Sintaxa pentru crearea unui astfel de tablou este:
$tablou = array( "cheie1" => el1, "cheie2" => el2, ... "cheie_n" => el_n);
Exemplu :
$pret = array ("paine albă" => 7000, "ou" => 3000, "zahăr" => 24000);
Accesul la un element se face prin cheia asociată. Spre exemplu $pret ["paine
albă"] are valoarea 7000. Şi în acest caz tabloul poate fi extins dinamic prin adaugarea
unui nou element a carei cheie nu exista în tablou. Spre exemplu $pret["miere 500g"] =
30000 va adăuga elementul 30000 cu cheia "miere 500g" la tabloul $pret, acesta având
acum patru elemente.
Ambele tipuri de tablouri reţin intern o referinţă (pointer) catre elementul
curent de prelucrat. Acest lucru permite scrierea secvenţelor pentru parcurgerea şi
prelucrarea elementelor lor. Instrucţiunea foreach este asemanatoare cu instrucţiunea
for (combină instrucţiunea FOR cu funcţia EACH) dar este destinată exclusiv
parcurgerii de tablouri, în special a celor asociative Sintaxa acestei instrucţiuni are
două forme alternative:
15
{
//instrucţiuni
}
foreach (tablou as valoare_element_curent)
{
//instrucţiuni
}
Prima formă permite şi extargerea şi prelucrarea cheilor asociate, pe când cea de a doua
formă permite extragerea tuturor valorilor din tablou şi prelucrarea lor individual.
Pentru a putea controla fluxul de execuţie al unui program sau script sunt
folosite structurile de control. Ele pot fi grupate în structuri condiţionale (în care codul
ia decizii) şi structuri repetitive, sau cicluri. Toate scripturile PHP sunt construite
dintr-o serie de instrucţiuni. O instrucţiune poate fi o atribuire, un apel de funcţie, un
ciclu, o expresie condiţională sau o instrucţiune vidă.
Instrucţiunea IF
Expresia expr este o expresie (condiţie) logică ce se evaluează la true sau false.
Dacă evaluarea condiţiei are ca rezultat o valoare adevarată se va executa instrucţiunea
specificată, dacă nu, instrucţiunea va fi ignorată şi se va trece mai departe.
Exemplu:
În cazul în care la luarea unei decizii există mai multe opţiuni trebuie testate mai
multe condiţii. Limbajul PHP pune la dispoziţia programatorilor clauza elseif. Aşa cum
îi spune şi numele această instrucţiune este o combinaţie între instrucţiunile else şi if.
În acest caz sintaxa instrucţiunii este:
16
if (expr1)
instrucţiune1
elseif (expr2)
instrucţiune2
...
elseif (exprN)
instrucţiune
Ambele variante elseif si else if (cu spatiu si fără spatiu) sunt corecte.
Instrucţiunea SWITCH
switch (expr) {
case valoare_1:
instrucţiune_1;
break;
case valoare_2:
instrucţiune_2;
break;
...
case valoare_n:
instrucţiune_n;
break;
defaut:
instrucţiune_default;
}
17
1.10.2 Instrucţiuni repetitive
Instrucţiunile repetitive permit implementarea algoritmilor care necesită
repetarea unei secvenţe de calcul.
Instrucţiunea FOR
Instrucţiunea for este cea mai complexă instrucţiune în PHP. Permite execuţia
unei instrucţiuni sau a unui bloc de instrucţiuni inclus între acolade ('{' şi '}') şi are
sintaxa:
for (expr1; expr2; expr3)
instrucţiune
Instrucţiunea WHILE
Ciclurile while sunt cele mai simple structuri repetitive în limbajul PHP. La fel
ca instrucţiunile if, se bazeaza pe o condiţie. Diferenţa dintre un ciclu while şi o
instrucţiune if este aceea că instrucţiunea if execută codul ce urmează odată în cazul în
care condiţia pe care o evaluează este adevarată. Un ciclu while execută blocul în mod
repetat, atâta timp cât condiţia este adevărată. De regulă, se foloseste ciclul while când
nu se cunoaşte în prealabil cate iteraţii vor fi necesare. Când este necesar un număr fix
de iteraţii de foloseşte ciclul for. Structura de bază a instrucţiunii este:
While (expr)
instrucţiune
Instrucţiunea DO .. WHILE
18
află la sfârşitul ciclului). Diferenţa fundamentală constă în faptul că ciclul este executat
cel puţin o dată. Se iese din ciclu în momentul în care expresia este evaluată ca fiind
FALSE.Ca şi while, ea permite execuţia unei instrucţiuni sau a unui bloc de
instrucţiuni inclus între acolade ('{' şi '}') şi are sintaxa:
do
instrucţiune
while (expr);
1.11 Funcţii
O funcţie este un modul de cod care oferă o interfaţa de apel, rezolvă un anumit
algoritm şi opţional, returnează o valoare.Ea grupează instrucţiunile care execută un
anumit algoritm şi permite refolosirea codului ori de cate ori este nevoie de acel
19
algoritm într-un program. Funcţiile reprezintă părţi identificabile prin nume ale unui
program, care se pot lansa în execuţie la cerere prin intermediul acestor nume.
Funcţiile pot fi predefinite (existente în biblioteca de bază a limbajului) sau definite de
utilizator.
20
1.11.3 Transmiterea parametrilor
O problemă importantă legată de transmiterea parametrilor o reprezintă felul în
care aceasta are loc: prin referinţa sau prin valoare.
Implicit toţi parametrii sunt parametri transmisi prin valoare. La transmiterea
unui astfel de parametru, în momentul apelului se va crea o copie a parametrului
transmis, copie ce va conţine valoarea de apel. Orice modificare asupra parametrului
efectuată în interiorul funcţiei nu va fi vizibilă în exteriorul acesteia. Dacă dorim să
permitem unei funcţii să modifice argumentele sale, acestea trebuie transmise prin
referinţă. În felul acesta nu se mai realizează o copie a parametrului ci, dimpotrivă, la
parametrii transmişi prin referinţă numele parametrului din funcţie (numit parametru
formal) va referi aceeaşi zonă de memorie ca şi cea a parametrului transmis.
Pentru ca un argument al unei funcţii să fie transmis prin referinţă, trebuie să
precedăm cu un '&' numele argumentului în definiţia funcţiei, ca în exemplul de mai
jos. La apel, parametrilor transmişi prin referinţă le pot corespunde doar nume de
variabile nu şi expresii sau constante.
O Funcţie recursivă este o funcţie care se auto-apelează direct sau indirect, prin
intermediul altor funcţii. Limbajul PHP oferă suport complet pentru funcţii recursive.
Utilitatea funcţiilor recursive iese în evidenţă mai ales la implementarea
algoritmilor care prin natura lor sunt recursivi. Exemple de astfel de algoritmi sunt
calculul seriilor matematice recursive sau navigarea prin structuri de date dinamice gen
liste înlanţuite sau arbori. La aplicaţiile Web utilitatea funcţiilor recursive este mai
restrânsă. Totusi, o serie de algoritmi repetitivi de prelucrare a textelor sau de
prelucrarea a tablourilor asociative pot profita de această tehnică.
21
variabile conexe într-o unitate, cunoscută sub numele de clasă. Accesul la datele dintr-
un obiect este posibil prin intermediul operaţiilor obiectului, care alcătuiesc interfaţa
sa.
Multe din proiectele Web evoluează de la o mulţime de hyperlink-uri la o
aplicaţie complexă. Aceste aplicaţii, fie prezentate prin cutii de dialog şi ferestre, fie
prin pagini HTML generate dinamic, au nevoie de o metodologie de dezvoltare gândită
îndeaproape.
O clasă poate fi asimilată cu un tip definit de utilizator. Proprietăţile unei
clase sunt variabile care descriu membrii clasei, iar metodele clasei sunt operaţii pe
care membrii clasei le pot efectua.
O clasă poate include o metodă specială, numită metodă constructor sau pur şi
simplu constructor. Constructorul unei clase este folosit pentru a crea instanţe sau
membri ai clasei, care sunt cunoscuţi sub numele de obiecte. O clasă se defineşte
utilizând următoarea sintaxă:
class nume_clasă
{
var nume_varibilaX ;//pot fi oricâte variabile
funcţion nume_funcţieX
{
//corpul funcţiei ; pot fi oricâte funcţii
}
}
În exteriorul claselor, instrucţiunea var este rareori folosită, deoarece PHP
defineşte în mod automat o variabilă în momentul atribuirii unei valori. Cu toate
acestea, proprietăţile claselor trebuie definite folosind instrucţiunea var. Metodele sunt
definite folosind cuvântul cheie funcţion, ceea ce este normal, deoarece metodele, ca şi
funcţiile, execută acţiuni. Diferenţa dintre metode şi funcţii este legată de amplasarea
acestora; metodele sunt definite în interiorul claselor, în timp ce funcţiile sunt definite
în exteriorul acestora.
Pentru a obţine accesul la un membru al clasei metodele vor folosi sintaxa
$this->, care are o semnificaţie similară cu aceea a pronumelui posesiv din limba
română, persoana I singular (meu). Când o metodă face o referire de forma $this->
item, se consideră că referinţa face trimitere la proprietatea $item a obiectului curent.
PHP stabileşte valoarea variabilei speciale $this la fiecare invocare a unei metode.
Clasele sunt tipuri. Pentru a crea o variabilă de tipul dorit se foloseşte operatorul new.
Instanţierea unei clase înseamna crearea unui obiect de tipul clasei respective.
1.12.2 Constructori
Un constructor este apelat atunci când este creat un obiect, şi are de obicei rolul
de a iniţializa şi seta atribute la valori de pornire sau de a crea obiecte de care are
nevoie obiectul curent. Constructorul are proprietatea cî posedî acelaşi nume cu clasa
în care este definit şi nu întoarce nici o valoare. PHP apelează automat constructorul la
invocarea operatorului new.
22
1.12.3 Moştenire
funcţion nume_funcţieX
{
//corpul funcţiei
}
}
1.13 Reutilizarea codului
Posibilitatea reutilizării codului în locul scrierii de cod nou duce la reducerea
costurilor, reducerea erorilor şi creşterea standardizării programelor produse. În mod
ideal un proiect nou se crează prin combinarea componentelor reutilizabile în locul
scrierii altora noi, timpul de dezvoltare fiind redus drastic.
Acest mecanism este implementat în PHP prin instrucţiunile require, require_once şi
include.
require ( "nume_fişier_reutilizat.php" );
23
conţine un script în mod normal, incluzând instrucţiuni PHP, tag-uri HTML, funcţii sau
clase PHP. Se poate observa necesitatea introducerii codului între taguri PHP. În
absenţa acestor taguri, codul este interpretat ca şi text (codificat HTML) şi afişat ca
atare la ieşire.
Instrucţiunea corelată require_once asigură faptul că fişierul specificat este
inclus o singură dată într-un script dat. În cazul creării de fişiere de includere care
folosesc instrucţiunea require pentru a include conţinutul altor fişiere de includere,
instrucţiunea require_once poate fi utilă.
session_register(“global”)
24
Suportul pentru sesiuni în PHP constă din modalitatea de a păstra anumite date în
vederea accesului ulterior. Un vizitator ce accesează website-ul primeşte un id unic, aşa-
numit id de sesiune. Acest id este fie reţinut într-o « cookie », fie propagat prin URL.
Sesiunile permit înregistrarea unui numar aleator de variabile pentru a fi păstrate pentru
cereri. Când un vizitator aceesează site-ul, PHP va verifica automat (dacă
session.auto_start este setat pe 1) sau la cerere (explicit prin session_start() sau implicit
prin session_register()) dacă un anume id de sesiune a fost trimis împreuna cu cererea.
În acest caz, este recreat mediul salvat anterior.
$varSesiune1 = 10;
session_register( "varSesiune1");
Pentru a utiliza variabilele sesiune în alte pagini din aceeaşi sesiune există două
metode, asemănător cu accesul la datele unui formular. Dacă opţiunea register_globals
din php.ini este setată pe On, în toate paginile sesiunii variabila va fi accesibila direct
prin nume. Dacă opţiunea este Off se poate apela variabila prin intermediul tabloului
asociativ $HTTP_SESSION_VARS. De exemplu:
$n = 4 * $HTTP_SESSION_VARS["varSesiune1"];
Pentru a testa într -o pagină dacă o variabilă a fost sau nu înregistrata în sesiunea
curentă se va folosi funcţia session_is_registered("numeVariabila"). Această funcţie
întoarce o valoare logică care poate fi ulterior testată.
Dacă se doreşte la un moment dat ştergerea unei variabile sesiune se poate apela
la funcţia session_unregister(numeVariabila).
25
Pentru a încheia sesiunea curet şi a şterge toate variabilele sesiune asociate se va apela
funcţia session_destroy(). Această funcţie nu primeşte nici un parametru şi va distruge
sesiunea curentă împreuna cu toate informaţiile asociate.
Capitolul 2
Baze de date MySQL
2.1 Noţiuni generale
26
MySQL este un sistem client-server, serverul MySQL suportand o paletă largă
de programe client, scrise în diverse limbaje de programare.De obicei, serverul de date
este separat logic şi fizic de programele client care asigură interfaţa operaţiilor cu baza
de date.
MySQL este un sistem de gestiune al bazelor de date relaţional. Principiile
algebrei relaţionale au fost stabilite de F. C. Codd în 1970. Ea reprezintă
fundamentarea matematică a bazelor de date relaţionale. În concepţia relaţională o bază
de date este formată dintr-o colecţie de relaţii (tabele, fişiere de date) asupra cărora se
aplică o colecţie de operatori pentru a gestiona datele conţinute de relaţii. Un operator
relaţional se aplică asupra unor tabele şi va avea ca şi rezultat tot o tabelă. Potrivit
algebrei relaţionale nu este permis accesul direct asupra înregistrarilor dintr-o tabelă.
Avantaje ale utilizarii bazelor de date relaţionale: facilitarea partajării datelor,
asigurarea independenţei datelor, interogarea ad-hoc, organizarea datelor,
securitatea datelor, reducerea la minimum a experienţei necesare în domeniul
programării, eficienţă în prelucrarea datelor.
27
A cincea formă normală
O relaţie este în a cincea formă normală dacă şi numai dacă ea nu poate fi spartă în
relaţii mai mici si apoi reunită fără a-şi schimba faptele şi semnificaţiile.
A sasea formă normală
Cea de-a sasea formă normală a fost definită de curând şi este definită doar cand este
luată în considerare şi dimensiunea temporală.
28
4. INT sau INTEGER: reprezintă un număr întreg normal. Intervalul de valori
posibile este [-2147483648..2147483647].
5. BIGINT : reprezintă un număr întreg mare. Intervalul de valori posibile este [-
9223372036854775808..9223372036854775807].
6. FLOAT : reprezintă un număr în virgulă flotantă, simplă precizie (număr real).
Intervalul de valori posibile este [-3.402823466E+38.. -1.175494351E-38,
0,1.175494351E-38..3.402823466E+38].
7. REAL sau DOUBLE : reprezintă un număr real în virgula flotantă, dublă
precizie.
8. DECIMAL (L) sau NUMERIC (L): reprezintă un număr în virgulă flotantă
neîmpachetat. L- lungimea, care spre deosebire de celelalte tipuri la care nu
trebuie specificată.
29
4. LONGBLOB, LONGTEXT : reprezintă valori BLOB, TEXT cu lungime de
maxim 4294967295 (4 TB) elemente.
2.3.3 Operatori
30
<= - mai mic sau egal;
> - mai mare;
>= - mai mare sau egal;
<=> - echivalenţă; la compararea cu NULL întoarce 0 sau 1 (1 doar la
NULL <=> NULL); dacă ambii operanzi sunt diferiţi de NULL se comportă ca şi =;
USE nume_bd ;
Această instrucţiune este una din puţinele care nu necesită caracterul punct şi
virgulă ca terminare a instrucţiunii, deşi poate fi adăugat.
31
IF NOT EXISTS - inhibă mesajul de eroare care se generează dacă la încercarea
de a crea o tabelă care mai există.
NOT NULL / NULL - nu se permit valori NULL în acest camp (campul trebuie
completat în orice situaţie) /permite valori NULL în camp (opţiune implicită dacă nu se
specifică nimic)
PRIMARY KEY - specifică cheia primară pentru tabelă. Un singur câmp din
tabelă poate avea acest parametru. Coloana declarată ca şi cheie primară este indexată
automat.
Exemplu :
IF EXISTS – este un parametru care va inhiba mesajul de eroare care apare dacă
tabela nu există.
32
inserarea de noi date sau adăugarea lor. În ambele situaţii, locul în care se face
adăugarea nu este precizat, nefiind relevant.
Sintaxa comenzii INSERT este urmatoarea :
IGNORE - este util dacă se inserează mai multe înregistrari simultan (în acest
caz lista de după VALUES va conţine mai multe seturi de date în paranteze, despărţite
prin virgulă). De obicei, MySQL raportează eroare şi nu execută comanda care încearcă
adăugarea a cel puţin unei înregistrări care duplică cheia primară sau câmpuri cu valori
unice. Prin folosirea parametrului IGNORE înregistrările greşite sunt ignorate, dar
restul sunt adăugate fără raportarea unei erori. După execuţia comenzii se va raporta
doar numărul de înregistrări a căror adăugare a reuşit.
col_nume,... - este o listă de coloane care specifică ordinea în care se vor adăuga
datele în tabelă. Prin aceasta se pot insera doar datele considerate esenţiale, restul
primind valorile implicite specificate la declararea tabelei. Dacă lista lipseşte, setul de
date furnizat trebuie să aibă valori pentru toate câmpurile, în ordinea din declararea
tabelei.
Exemplu:
INSERT INTO persoană
VALUES ("Olaru", "Niculina",22) ;
33
Comanda UPDATE - permite actualizarea valorilor dintr-o tabelă. Sintaxa acestei
comenzi este:
UPDATE persoană
SET nume="Popescu" ;
Comanda DELETE – este folosită pentru ştergerea anumitor date dintr-o tabelă.
Aceasta are sintaxa :
Exemplu:
Comanda SELECT este cea mai utilizată comandă SQL, deoarece permite atât
regăsirea şi vizualizarea datelor din tabelele bazei de date cât şi calcularea unor expresii
care nu au legătură cu datele din tabele. Sintaxa de bază a comenzii este:
34
SELECT itemi FROM nume_tabelă
[ WHERE condiţie ]
[ GROUP BY {colană | expresie} ]
[ HAVING condiţie_includere_grup]
[ ORDER BY tip_ordonare ]
[LIMIT criteriu_de_limitare ] ;
FROM - specifică tabela sau tabelele din care se selectează datele. În cazul în
care referinţa cuprinde mai multe tabele operaţia este una de JOIN.
35
-sum(coloana) = suma valorilor din coloana respectivă
36
2.6.2 Privilegii MySQL
Un utilizator (sau proces) trebuie să aibă cel mai scăzut nivel de privilegii,
suficient pentru a putea executa sarcinile care i-au fost alocate.
Informaţiile despre privilegii sunt stocate în tabelele user, db, host, tables_prv şi
columns_priv din baza de date mysql. Serverul va citi conţinutul acestor tabele ori de
câte ori sistemul de privilegii trebuie să acţioneze. Există trei tipuri de bază de
privilegii: privilegii pentru utilizatorii obişnuiţi, privilegii pentru administratori şi
câteva privilegii speciale.
37
PROCESS - permite administratorului să vadă procesele care rulează pe server
şi să le oprească. Este utilizat pentru a vedea conţinutul interogarilor ce se executa în
acel moment, inclusiv cele de setare a parolei. De asemenea el dă posibilitatea opririi
forţate a conexiunilor altor utilizatori.
RELOAD - permite administratorului să reîncarce tabele alocate şi să
actualizeze privilegiile, gazdele, logurile şi tabelele.
SHUTDOWN - permite administratorului să opreasca serverul de MySQL de la
distanţă.
FILE - permite administratorului să citească informatii sensibile de pe server; să
insereze date în tabele din fisiere şi reciproc.
Orice utilizator poate avea oricare din aceste privilegii, dar se obişnuieşte să se
restricţioneze cele proprii administratorului doar acestuia.
Unde:
privilegii - peprezintă o listă de privilegii desparţite prin virgulă, ce pot fi alese
dintre cele prezentate anterior plus clauza specială ALL are specifică toate privilegiile
posibile.
coloane - o listă optională de una sau mai multe coloane. Permite stabilirea
privilegiilor la nivel de coloane.
componenta - este numele unei baze de date sau tabele asupra cărora vor fi
stabilite privilegiile. Toate bazele de date se pot specifica prin *.*, şi este nivelul
Global. Nivelul Database se poate specifica prin nume_bd.*, iar nivelul Table prin
nume_bd.nume_tabelă. Dacă se specifică doar nume_tabelă se va interpreta ca fiind o
tabelă a bazei de date selectate. Nivelul Column se va obţine prin folosirea
unei liste de coloane nevide.
38
nume_utilizator - este numele utilizatorului căruia i se atribuie privilegiile. El
poate conţine şi un nume de staţie de pe care are dreptul să se conecteze.
parola - specifică parola cu care utilizatorul se va conecta. Parola trebuie în
general să nu fie uşor de ghicit (să nu fie chiar numele contului sau un cuvânt din
dicţionar). Opţiunea IDENTIFIED BY este obligatorie deoarece dacă lispseşte,
utilizatorul se va putea conecta fără parolă.
WITH GRANT OPTION - dă dreptul utilizatorului să dea privilegii echivalente
cu ale sale altor utilizatori. Acestă opţiune poate fi utilizată pentru a delega dreptul de
administrare, inclusiv creare de utilizatori, unor administratori ale unor baze de date
particulare de pe server. Aceşti administratori nu vor putea însă să interacţioneze cu
alte baze de date.
39
Capitolul 3
PHP şi MySQL
40
O conexiune nepersistentă va fi distrusă la terminarea paginii sau la apelul
mysql_close. Se realizează prin apelul mysql_connect. Avantajele conexiunilor
temporare: nu blochează conexiunea decât pe perioada interpretării scriptului, iar
dezavantajul este timpul mai mare de răspuns datorat creării unei noi conexiuni la
fiecare apel.
Ambele tipuri de conexiuni asigură aceiaşi funcţionalitate. Singura diferenţă
dintre ele constă în eficienţa cu care se tratează deschiderea unei conexiuni raportată la
cantitatea de resurse blocate. Sintaxa lor este asemănătoare:
3.2 Interogări
41
resource mysql_query ( string query );
Pentru a adăuga informaţii în baza de date trebuie transmisă din pagina de PHP
o interogare INSERT spre serverul de mySQL. Transmiterea unei interogări SQL spre
server se poate face cu ajutorul funcţiei mysql_query. Aceasta funcţie presupune
existenţa unei conexiuni deschise spre server, selecţia prealabilă a bazei de date şi
existenţa unor drepturi suficiente pentru rularea interogării.
Dacă interogarea transmite înapoi un rezultat (SELECT, DESCRIBE,
EXPLAIN sau SHOW), funcţia returnează un identificator spre resursa reprezentată de
rezultat. În cazul interogărilor acţiune (INSERT, DELETE, UPDATE etc.) funcţia va
retura TRUE dacă s-a executat corect interogarea. În ambele situaţii funcţia returnează
FALSE dacă interogarea nu a putut fi executată de server.
int mysql_affected_rows ( );
Pentru a căuta informaţii într-o bază de date se vor utiliza interogări SELECT.
Procedura de transmitere a unor astfel de interogări este asemănătoare cu cea pentru
interogări acţiune. Diferenţa majoră la interogările de tip SELECT constă în necesitatea
de a afişa rezultatul interogării. În urma rulării unei interogări de căutare se va folosi
funcţia mysql_num_rows() pentru a afla numărul de înregistrări din rezultat. Acestei
funcţii i se va transmite ca şi parametru referinţa rezultata în urma apelului funcţiei
mysql_query().
Există trei metode diferite de a interpreta şi prelucra rezultatul unei interogări SELECT:
42
mysql_fetch_array() va returna urmatoarea înregistrare din rezultat. Când nu
mai sunt disponibile înregistrări, funcţia va retuna valoarea FALSE.
Rezultatul este preluat prin funcţia mysql_fetch_row() şi interpretat ca un tablou
indexat numeric. Acest tablou are ca şi indexi numerele 0,1,2 etc. iar ca şi valori,
valorile corespondente coloanelor de pe poziţiile respective din rezultat. Fiecare
apel succesiv al funcţiei mysql_fetch_row() va returna urmatoarea înregistrare
din rezultat. Când nu mai sunt disponibile înregistrări, funcţia va retuna valoarea
FALSE.
Rezultatul este preluat prin funcţia mysql_fetch_object() şi interpretat ca un
obiect. Acest obiect are ca şi atribute numele coloanelor selectate iar ca şi valori
ale acestora, valorile corespondente din rezultat. Fiecare apel succesiv al funcţiei
mysql_fetch_object va returna urmatoarea înregistrare din rezultat. Când nu mai
sunt disponibile înregistrari, funcţia va retuna valoarea FALSE.
Concluzii
Aplicaţia este realizată pentru a folosi tuturor, atât celor care vor deveni membrii
fideli şi vor ajuta la imbunătăţirea paginii de internet, cât şi celor care, pentru a evada
din rutină, se vor relaxa pentru câteva minute citind o poezie. Bine înteles, pe internet
există multe pagini pe care se pot găsi poezii, dar aceasta pagină va destinată întru totul
domeniului literar. Membrii vor putea să îşi împărtăşească gândurile, să îşi spună
părerea despre o anumită poezie, vor putea veni cu noi idei pentru această pagină.
Sistemul de notare existent are rolul de a spori interesul şi dorinţa membrilor de
a posta noi poezii care să fie printre primele în topul poeziilor. Următorul pas in cadrul
paginii va fi realizarea unui forum unde utilizatorii să poată discuta pe baza poeziilor, şi
nu numai. Părerile si ideile utilizatorilor vor fi importante pentru dezvoltarea continuă a
acestei pagini.
43
Bibliografie
44