poezii online

66
UNIVERSITATEA DE VEST TIMIŞOARA FACULTATEA DE MATEMATICĂ ŞI INFORMATICĂ DEPARTAMENTUL DE INFORMATICĂ LUCRARE DE LICENŢĂ STUDENTĂ: COORDONATOR: OLARU NICULINA BIANCA LECT. HORIA POPA 1

Upload: mana85

Post on 24-Jun-2015

590 views

Category:

Documents


8 download

TRANSCRIPT

Page 1: Poezii Online

UNIVERSITATEA DE VEST TIMIŞOARAFACULTATEA DE MATEMATICĂ ŞI INFORMATICĂ

DEPARTAMENTUL DE INFORMATICĂ

LUCRARE DE LICENŢĂ

STUDENTĂ: COORDONATOR:OLARU NICULINA BIANCA LECT. HORIA POPA

TIMIŞOARAIUNIE 2007

1

Page 2: Poezii Online

Cuprins Introducere..................................................................................................................4Capitolul 1....................................................................................................................61.1 Avantajele limbajului PHP...............................................................................61.2 Sintaxa PHP..........................................................................................................71.3 Comentarii............................................................................................................81.4 Tipuri de date în PHP........................................................................................81.5 Variabile................................................................................................................91.6 Constante...........................................................................................................111.7 Operatori.............................................................................................................111.8 Expresii................................................................................................................141.9 Tablouri................................................................................................................151.10 Structuri de control......................................................................................16

1.10.1 Instrucţiuni conditionale.....................................................................161.10.2 Instrucţiuni repetitive..........................................................................18

1.11 Funcţii................................................................................................................201.11.1 Funcţii predefinite.................................................................................201.11.2 Funcţii utilizator.....................................................................................201.11.3 Transmiterea parametrilor.................................................................211.11.4 Funcţii recursive....................................................................................21

1.12 Clase şi obiecte..............................................................................................221.12.1 Definirea unei clase..............................................................................221.12.2 Constructori.............................................................................................231.12.3 Moştenire..................................................................................................23

1.13 Reutilizarea codului......................................................................................231.13.1 Instrucţiunea require...........................................................................241.13.2 Instrucţiunea include...........................................................................24

1.14 Controlul sesiunilor.......................................................................................24Capitolul 2..................................................................................................................272.1 Noţiuni generale...............................................................................................272.2 Proiectarea unei baze de date....................................................................27

Normalizarea unei baze de date relaţionale.............................................282.3 Elemente de limbaj.........................................................................................29

2.3.1 Comentarii..................................................................................................292.3.2 Tipuri de date............................................................................................292.3.3 Operatori.....................................................................................................31

2.4 Crearea unei baze de date şi gestiunea acesteia...............................322.4.1 Crearea unei tabele................................................................................322.4.2 Ştergerea unei tabele.............................................................................332.4.3 Inserarea datelor în tabele...................................................................332.4.4 Ştergerea datelor din tabele...............................................................352.4.5 Extragerea informaţiilor din tabele...................................................35

2.5 Folosirea alias-urilor........................................................................................362.6 Accesul la o bază de date.............................................................................37

2.6.1 Utilizatori şi parole...................................................................................372.6.2 Privilegii MySQL........................................................................................37

2

Page 3: Poezii Online

Capitolul 3..................................................................................................................413.1 Conectarea la serverul MySQL...................................................................413.2 Interogări...........................................................................................................423.3 Căutarea şi afişarea rezultatelor...............................................................43Concluzii......................................................................................................................44Bibliografie.................................................................................................................45

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

3

Page 4: Poezii Online

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.

Cum internetul este într-o continuă dezvoltare, şi nevoia de a implementa pagini web dinamice creşte. Ce ar fi dacă pentru un magazin online, de exemplu, ar trebui modificate preţurile săptămânal? Asta ar însemna rescrierea sutelor de resurse HTML, şi un timp exagerat de mare. Şi la aceasta se mai adaugă şi faptul că designul şi conţinutul unui site sunt realizate de persoane total diferite, ceea ce îngreunează şi mai tare realizarea de actualizări ale paginilor web.

Prin proiectarea unui site fundamentat pe o bază de date se poate rezolva această problemă. Se realizează separarea dintre design şi conţinut, astfel că este suficient să scrii o pagină pentru un anumit tip de informaţie, fără a fi nevoie să copiezi mereu în vechile pagini conţinutul cel nou. Implementarea unui sistem de gestiune a conţinutului le va permite celor ce au modificări de facut să le realizeze singuri fără să fie nevoie de cunoştinţe HTML.

Pentru proiectarea unui astfel de site există mai multe opţiuni în ceea ce priveste limbajul de programare, cât şi sistemul de management al bazei de date. Trebuie avut în vedere faptul că nu toate limbajele de programare se pot conecta la toate bazele de date. Cea mai potrivită alegere pentru realizarea unui web site dinamic este utilizarea PHP şi MySQL .

PHP este un limbaj de scripting utilizat pe scară largă, realizat şi distribuit în sistem Open Source, care este special realizat pentru a dezvolta aplicaţii web, prin integrarea codului PHP în documente HTML. Acestea nu vor mai fi simple pagini web, iar serverul care le încarcă văzând că este vorba despre pagini php le va trimite interpretorului PHP şi va primi înapoi transformat prin interpretarea codului PHP. Acest fişier va conţine doar cod HTML (eventual şi JavaScript) dar nu şi cod PHP.

MySQL este un limbaj de interogare standard pentru interacţiunea cu bazele de date, un pachet software care se ocupă de organizarea şi gestiunea cantităţilor mari de informaţie.

Apache este un server web open-source pentru UNIX, Windows 2000 sau alte platforme. Apache a devenit în prezent cel mai popular şi des folosit Web server, datorită caracteristicilor puternice şi a perfomanţelor excepţionale.

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.

Lucrarea de faţă este structurată în mai multe capitole astfel :

Primul capitol cuprinde noţiuni fundamentale despre limbajul PHP specificând avantajele acestuia, tipurile de bază, proprietăţile de bază, operatori, structuri de control, tablouri, funcţii, clase, obiecte, refolosirea codului si controlul sesiunilor.

4

Page 5: Poezii Online

Capitolul doi prezintă bazele de date relaţionale, începând cu informaţii introductive despre sistemul de gestiune a bazelor de date MySQL : utilitatea, caracteristicile şi avantajele sale şi continuând cu procesul de concepere şi de proiectare a unei baze de date relaţionale, normalizarea unei baze de date, relaţiile între tabele şi tipuri de date. Urmează prezentarea serverul de baze de date MySQL împreună cu noţiuni SQL legate de operatori şi funcţii, implementarea, crearea, ştergerea, modificarea, sortarea în baze de date.

Capitolul trei combină cele două tehnici de programare PHP şi MySQL si prezintă modul de conectare la baza de date prin intermediul limbajului PHP şi diverse operaţii efectuate asupra bazei de date.

Capitolul patru prezintă dezvoltarea aplicaţiei, pagina de poezii online, de la crearea bazei de date şi conectarea la aceasta, la forma finală în care utilizatorul poate accesa pagina de internet.

În încheiere, există o secţiune de Concluzii şi o listă cuprinzătoare de referinţe bibliografice.

Capitolul 1

Limbajul PHP

5

Page 6: Poezii Online

Limbajul PHP este o modaliatate eficientă de dezvoltare a aplicaţiilor Web, în mod dinamic. El a fost implementat în 1994 de către Rasmus Lerdorf, la început fiind vorba numai de un proiect personal, care cuprindea câteva scripturi PERL ce monitorizau accesul la pagina web a acestuia. În 1995 este disponibil sub numele de Personal Home Page. Pentru a-i oferi mai multă funcţionalitate el a implementat o varianta în C care permitea accesul la baze de date oferind astfel posibilitatea de creare a paginilor web dinamice. Începand cu versiunea 3, din 1997, acest limbaj a început să fie dezvoltat de o echipă de programatori, iar versiunea 4 dispune de engine-ul de scripting al firmei Zend Techologies. Programul a fost corectat, dezvoltat şi extins în regim open source, depăşind cu mult scopul său iniţial. Numele s-a păstrat, dar semnificaţia este alta, şi anume : Hypertext Preprocessor.

Pentru a crea şi testa documente PHP este nevoie de instalarea lor pe un server de web, deoarece dacă un fisier PHP este încarcat direct în navigator de pe discul local, prin comanda File/Open, fără a apela un server de web, documentul afisat va contine codul PHP neinterpretat.

1.1 Avantajele limbajului PHP

Un mare avantaj al limbajului PHP este faptul că este un limbaj inter-platformă şi este gratuit.Poate fi utilizat pe orice calculator fără nici un fel de costuri.

PHP oferă programatorului libertatea de a alege un sistem de operare şi un server de web. El poate fi folosit pe aproape toate marile sisteme de operare, incluzând Linux, multe variante de Unix (incluzând HP-UX, Solaris şi OpenBSD), Microsoft Windows, Mac OS X. PHP are deasemenea suport pentru majoritatea serverelor de web din prezent: Apache, Microsoft Internet Information Server, Personal Web Server, Netscape şi iPlanet şi altele. Pentru majoritatea serverelor PHP are un modul, iar pentru celelalte suportă standardul CGI, PHP putând să lucreze ca un procesor CGI.

Una dintre cele mai puternice şi importante facilităţi în PHP este suportul său pentru o gama largă de sisteme de baze de date, cum ar fi : MySQL, Oracle, Informix, Sybase, PostgreSQL. De asemenea se pot realiza conexiuni practic cu orice sistem care ofera un driver de ODBC (Open Database Connectivity standard).

PHP oferă posibilitatea de afişare de imagine, fişiere PDF şi chiar filmuleţe Flash (folosind librăriile libswf şi Ming) toate generate instant. Deasemeanea, rezultatul poate să fie orice fişier text, cum ar fi XHTML sau orice alte fişiere XML. 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.

6

Page 7: Poezii Online

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.

1.2 Sintaxa PHP

Pentru generarea dinamică de conţinut pentru paginile web, scripturile sunt incluse în pagini HTML.Când primeşte un script de la serverul web, interpretorul PHP caută anumite tag-uri speciale care anunţă existenţa codului PHP, pe care o interpretează, lăsând nemodificat codul HTML existent. Există mai multe modalitaţi de a insera codul PHP într-o pagina HTML.

Cea mai simplă varianta este cea scurtă, care oferă o viteză mai mare de scriere a codului : <? Cod_PHP ?>

O altă posibilitate este cea în stil XML, acesta fiind compatibilă cu documentele XML (Extensible Markup Language) : <?php Cod_PHP ?>

O a treia variantă este cea a stilului SCRIPT, destinată în special celor obişnuiţi cu scrierea de cod JavaScript sau VBScript. <SCRIPT LANGUAGE='php'> Cod_PHP </SCRIPT>

Ultima posibilitate este cea în stil ASP, şi este utilă doar dacă se foloseste un editor HTML care genereaza cod ASP pentru serverele Microsoft: <% Cod_PHP %>

Din toate aceste posibilităţi doar doua (<?php. . .?> şi <script language="php"> . . .</script>) sunt întotdeauna valabile; celelalate pot fi oprite din fişierul de configurare php.

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

7

Page 8: Poezii Online

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 ?>

1.4 Tipuri de date în PHP

Fiecare limbaj de programare are diferite tipuri de date.Limbajul PHP suportă opt tipuri primitive de date, dintre care patru scalare :

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.

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.

PHP mai suportă şi două tipuri de date compuse :

8

Page 9: Poezii Online

Array : un tablou în PHP este de fapt un tip care mapează în mod ordonat. Un astfel de tip mapează valorile în chei. Tipul array este optimizat în cateva moduri, aşa încat poate fi folosit ca o listă efectivă, ca un vector, un tablou hash, mulţime, stivă, coadă etc.

Object este utilizat pentru a reţine obiecte – instante ale claselor

În PHP mai există doua tipuri speciale : resource şi NULLTipul resource desemnează o variabilă specială, care reţine o referinţă la o

resursă externă. Resursele sunt create şi utilizate de funcţii speciale.Valoarea specială NULL reprezintă o variabilă care nu are nici o valoare, iar

NULL este singura valoare posibilă a tipului. O variabilă este considerată NULL dacă : a fost asignată cu constanta NULL nu a fost setată la nici o valoare înca a fost “dealocată” folosind “unset”

1.5 Variabile

Variabilele sunt locaţii de memorie desemnate printr-un identificator care începe cu semnul $. Numele variabilelor sunt case-sensitive şi pot începe cu o litera sau undescrore (_), urmat de oricâte cifre, litere sau caractere underscore. Variabilele permit memorarea valorilor de diverse tipuri. PHP procesează automat tipul variabilei. O variabilă se consideră declarată implicit prima dată când este folosită.

Pentru a atribui o valoare unei variabile este folosit semnul “egal” (=). Exemplu: $nume = "Ina"

Mai există o metodă pentru asignarea de valori variabilelor, aparută în cadrul PHP 4 : asignarea prin referinţă. Aceasta înseamnă că noua variabilă doar pointează către variabila originală şi schimbările asupra noii variabile afectează originalul şi reciproc. Pentru a determina această practică să aibă loc, trebuie doar să ataşăm simbolul & la începutul variabilei care este asignată (variabila sursă).

Variabilele dinamice sunt o alternativă la folosirea şirurilor.Se utilizează atunci când este necesar un număr mare, variabil, necunoscut dinainte de variabile. Variabilele pot avea nume variabile, care pot fi setate şi folosite/schimbate dinamic. Acest lucru se face prin utilizarea valorii unei varibile pe post de nume de variabilă. 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.

9

Page 10: Poezii Online

Există mai multe tipuri de variable în funcţie de domeniul de valabilitate al acesteia, adică de locul în care poate fi folosită după ce a fost creată:

Variabile locale: o variabilă definită în interiorul unei funcţii nu va putea fi accesată decât de instrucţiunile din interiorul acelei funcţii.

Variabile globale: o variabilă definită în exteriorul unei funcţii nu va putea fi accesată în interiorul funcţiei.

Variabile globale în interiorul unei funcţii: o variabilă definită în afara unei funcţii trebuie redeclarată ca variabilă globală în interiorul funcţiei.

Fiecărui script pe care îl ruleaza, PHP îi furnizează o serie de variabile predefinite folosite pentru a afla starea serverului Web, numite variabile de mediu. Acestea în mare măsură sunt create şi depind de serverul Web care rulează, sau sunt variabile proprii PHP. Ele sunt de fapt o mulţime de tablouri predefinite ce conţin variabile de pe serverul web, mediul şi input-ul utilizatorului. Aceste tablouri sunt speciale prin faptul că sunt automate, adică disponibile în orice punct al scriptului.

Aceste variabile predefinite sunt urmatoarele :

$_ENV conţine variabile disponibile prin intermediul mediului în care este executat.

$_SESSION conţine variabile care corespund sesiunii curente a script-ului. $_GET si $_POST conţin variabile primite de script prin intermediul unor

transferuri care folosesc metodele HTTP get, respectiv post. De exemplu, prin intermediul acestor vectori pot fi accesate valorile câmpurilor dintr-un formular care a fost completat şi transmis folosind una dintre cele două metode.

$GLOBALS - pot fi accesate toate variabilele globale care sunt accesibile script-ului PHP curent; acest vector este indexat chiar prin numele variabilelor globale.

$SERVER - conţine o serie de variabile ale căror valori sunt setate de server-ul Web; majoritatea valorilor variabilelor din acest vector depind de mediul de execuţie al scriptului curent.

$_COOKIE conţine valorile variabilelor ce conţin informaţii referitoare la cookie-urile păstrate pe calculatorul utilizatorului care accesează pagina Web.

$_FILES conţine variabile primite de script prin intermediul încărcărilor de fişiere prin metoda POST.

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"

10

Page 11: Poezii Online

?>

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:

Exemplu Nume Rezultat

-$a Negaţia Opusul lui $a.

$a + $b Adunarea Suma lui $a şi $b.

$a - $b Scaderea Diferenţa dintre $a şi $b.

$a * $b Înmulţirea Produsul dintre $a şi $b.

$a / $b Împarţirea Câtul împarţirii lui $a la $b.

$a % $b Modulul Restul împarţirii lui $a la $b.

Operatorul de împarţire ("/") returnează o valoare întreagă de fiecare dată, chiar dacă cei doi operanzi sunt întregi (sau string-uri convertite la întregi).

Operatorii de incrementare/decrementare sunt operatori unari care au ca rezultat creşterea/descreşterea cu o unitate a varibilei operând asupra căreia se aplică. Operatorii post se aplică după ce valoarea este evaluată în expresia din care face parte iar operatorii pre se aplică înainte de evaluarea expresiei.

Exemplu:$a = 1; $b = $a++; // b = 1, a = 2 $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.

Operatori de asignare - permit atribuirea de valori varibilelor. Operatorul de asignare de bază este operatorul '=', care înseamnă operatorul din stânga ia valoarea expresiei din dreapta. Valoarea expresiei este evaluată, apoi atribuită variabilei din partea stanga şi, în final, returnată de operator.

11

Page 12: Poezii Online

Valoarea unei expresii de asignare este valoarea asignată; de exemplu valoarea lui "$a = 3" este 3. Deoarece = nu este o instrucţiune PHP ci un operator, el poate intra în expresii complexe de genul: $a = $b = 4 + ($c = 3); // a = 7, b = 7, c=3

Pe langă operatorul de bază de asignare, există şi “operatori combinaţi” care permit folosirea unei valori într-o expresie şi apoi setarea valorii la rezultatul acelei expresii. Aceştia sunt :Operator Utilizare Semnificaţie+= $a += $b $a = $a + $b-= $a -= $b $a = $a - $b*= $a *= $b $a = $a * $b/= $a /= $b $a = $a / $b%= $a %= $b $a = $a % $b.= $s1 .= $s2 $s1 = $s1 . $s2

Operatori pe biţi-ajută la prelucrarea numerelor întregi considerate ca şiruri de biti. Aceştia sunt :

Exemplu Nume Rezultat

$a & $b Şi Biţii sunt setaţi dacă sunt setaţi atât în $a cât şi în $b

$a | $b Sau Biţii sunt setaţi dacă sunt setaţi fie în $a fie în $b

$a ^ $b Xor Biţii care sunt setaţi în $a sau $b dar nu în ambele

~ $a NegareBiţii care sunt setaţi în $a nu sunt setaţi în rezultat, şi vice-versa

$a << $bDeplasare la stanga

Deplasează biţii lui $a cu $b poziţii spre stanga (fiecare pas înseamnă înmulţire cu doi)

$a >> $bDeplasare la dreapta

Deplasează biţii lui $a cu $b poziţii spre dreapta (fiecare pas înseamnă împarţire cu doi)

Operatori logici - sunt utilizaţi pentru a combina valori logice în expresii.

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.

12

Page 13: Poezii Online

Operatori de comparare - sunt operatori binari care au ca scop compararea valorilor operanzilor. Rezultatul acestor operatori este unul logic, având valoarea true (adevarat) sau flase (fals).

Operatori pe şiruri de caractere- există un singur operator pe şiruri de caractere, restul operaţiilor fiind efectuate prin intermediul unor funcţii din biblioteca standard a limbajului. Acest operator este operatorul de concatenare - punct '.'. Exemplu:$s1="Ina";$s2=$s1."are mere";// in $s2 vom avea "Ina are mere"

Operatori de referire - este un operator unar, având ca operand o variabilă şi permite legarea unui nume de variabila de zonă de memorie a variabilei operand. Exemplu :$a = 2; $b = $a; // a = 2, b = 2 $c=&$a; // a=2, c=2$c=4; // c=4, a=4, b=2

Operatori asupra tablourilor – există un singur operator asupra tablourilor în PHP şi anume operatorul +. Adaugă tabloul din dreapta la cel din stanga, iar cheile duplicate nu sunt suprascrise. Exemplu :$a = array ("a" => "mere", "b" => "banane") ;$b = array ("a" => "pere", "b" => "capşuni", "c" => "cireşe" ) ;$c = $a + $b ;Var_dump($c) ; Va fi afisat :array(3) { ["a"]=> string(5) "mere" ["b"]=> string(6) "banane" ["c"]=> string(6) "cireşe"}

Operatori de execuţie - poate fi folosit pentru a executa o comandă pe interpretorul de comenzi al serverului. El constă în doua apostroafe inverse '`'între care 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.

Operatorul de inhibare a erorilor- are sintaxa @(expresie) şi rolul de a suprima erorile şi avertismentele generate de expresia operand. Poate fi folosit înaintea oricărei expresii, caz în care orice mesaje de eroare ce ar putea fi generate de acea expresie vor fi ignorate. Exemplu :

13

Page 14: Poezii Online

$a = (2 / 0); // generează avertisment de împartire la zero $a = @(2 / 0 ); // nu genereaza avertisment

Dacă opţiunea track_errors este activată, orice mesaj de eroare generat de expresie va fi reţinut în variabila $php_errormsg. Această variabilă va fi suprascrisă la fiecare eroare. Operatorul @ se aplică doar expresiilor. Nu poate fi adăugat în faţa funcţiilor sau definiţiilor de clase, sau în faţa structurilor condiţionale de tipul if şi foreach .

Operatorul condiţional sau ternar -are sintaxa : condiţie ? valoare_adevarată : valoare_falsă. Operatorul evaluează mai întâi expresia logică din condiţie. Se aseamană cu structura condiţională if-else. Dacă condiţia este adevărată va întoarce valoare_adevarată iar în caz contrar valoare_falsă.Exemplu: echo ($varsta < 18) ? "minor" : "adult";

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:

$condiţie ? $operand1 : $operand2; $b = $a = 3; $i++;

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.

În cazul şirurilor de caractere între ghilimele «  » trebuie acordată o mare atenţie. La evaluarea expresiei în care acestea apar, toate numele de variabile care apar în interiorul lor sunt înlocuite cu valorile corespunzatoare. De exemplu:

$nume = "Ina"; $sir1 = "$nume are mere!"; $sir2 = '$nume are mere!'; echo $sir1; // va afisa Ina are mereecho $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

14

Page 15: Poezii Online

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:

foreach (tablou as cheie => valoare_element_curent) { //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.

15

Page 16: Poezii Online

1.10 Structuri de control

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

1.10.1 Instrucţiuni conditionale

Instrucţiunile condiţionale permit execuţia condiţionată a secvenţelor de program. În lipsa unor astfel de instrucţiuni ar fi practic imposil de implementat o mare parte dintre problemele din luma reală.

Instrucţiunea IF

Instrucţiunea if permite luarea de decizii privind execuţia unei alte instrucţiuni sau a unui bloc de instrucţiuni inclus între acolade ('{' şi '}'). Cea mai simplă sintaxă a instrucţiunii if este: if (expr) instrucţiune

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:

if ($varsta < 18) echo 'Esti minor !';

Î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:

if (expr1) instrucţiune1 elseif (expr2) instrucţiune2 ... elseif (exprN) instrucţiuneAmbele variante elseif si else if (cu spatiu si fără spatiu) sunt corecte.

Instrucţiunea SWITCH

16

Page 17: Poezii Online

Instrucţiunea switch este similară cu o serie de instrucţiuni if care testează mai multe valori posibile pentru o anumită expresie. Într-o instrucţiune if, condiţia poate fi adevarată sau falsă; într-o instrucţiune switch condiţia poate avea orice număr de valori, diferite, atâta timp cât se evaluează la un tip de bază (integer, string sau double). Este necesară o instrucţiune case pentru a se ocupa de fiecare valoare la care trebuie să reacţioneze şi opţional, o instrucţiune default pentru restul situaţiilor pentru care nu sunt descrise comportamente. Se foloseşte în situaţiile când dorim să comparăm aceeaşi variabilă cu diferite valori şi să executăm bucăţi de cod diferite pentru fiecare caz în parte.Avantajul instrucţiunii switch este o scriere mai concisă şi mai simplu de înţeles şi depanat. Sintaxa acestei instrucţiuni este:

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

Dupa evaluarea expresiei, valoarea obţinută este comparată cu valorile din clauzele case. Dacă se întâlneste o potrivire se va continua cu execuţia instrucţiunilor din clauzele case următoare, până la întâlnirea instrucţiunii break. Consecinţa este că, dacă instrucţiunile dintr-o clauză case nu se termină cu break, se va continua execuţia cu instrucţiunile clasei următoare. Observaţie : Instrucţiunea continue aplicată în cadrul switch-ului acţionează similar cu break. Dacă avem un switch într-un ciclu şi dorim să continuăm de la următoarea iteraţie a ciclului, se foloseşte continue 2.

1.10.2 Instrucţiuni repetitiveInstrucţ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

17

Page 18: Poezii Online

Prima expresie (expr1) este numită expresie de iniţializare şi este executată necondiţionat o singură data la intrarea în ciclu. Ea stabileşte valoarea iniţială a contorului. La începutul fiecărei iteraţii se evaluează expr2, o condiţie logică. Dacă expresia este evaluată TRUE, ciclul continuă prin executarea instrucţiunii. Dacă expr2 este evaluată ca fiind FALSE execuţia ciclului se termină. Aici se compară de obicei contorul cu o limită anume. La sfârşitul fiecărei iteraţii este executată expr3 (expresie de iterare). Aceasta va ajusta la fiecare valoarea contorului ; are rolul de a asigura trecerea la pasul următor (incrementarea contoarelor, citirea datelor următoare etc.). Oricare dintre cele trei expresii pot lipsi. . Dacă expr2 lipseşte, ciclul rulează la infinit. Pentru a ieşi forţat din ciclu se poate folosi instrucţiunea break.Dacă expr3 este vida PHP o va considera adevărată şi va cicla la infinit. În acest caz trebuie asigurată o ieşire forţată din bucla utilizând una dintre instrucţiunile de control pentru repetiţii.

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

Expresia expr este o expresie (condiţie) logică ce se evaluează înainte de fiecare repetiţie. Dacă rezultatul evaluării condiţiei este adevărat, se va executa instrucţiunea specificată apoi secvenţa se va relua. Dacă rezultatul evaluării este fals, instrucţiunea va fi ignorată şi se va trece la instrucţiunea de dupa while.

Instrucţiunea DO .. WHILE

Instrucţiunea do-while este asemănătoare cu instrucţiunea while dar se foloseste pentru a implementa o buclă repetitivă cu test final (evaluarea expresiei se 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);

Expresia expr este o expresie (condiţie) logică ce se evaluează după fiecare repetiţie. Dacă, după executarea instrucţiunii condiţia este adevarată se va relua secvenţa de la început. În cazul în care condiţia devine falsă, repetiţia se va încheia şi se va trece la instrucţiunea de după do-while.

18

Page 19: Poezii Online

În cazul buclei do-while, instrucţiunea din bucla se va executa cel puţin o dată chiar şi în cazul în care condiţia nu este adevarată de la început.

Instrucţiuni de control pentru repetiţii

Pentru a simplifica implementarea unoeri este necesar să se iasă forţat dintr-o iteraţie.În PHP există instrucţiuni speciale: continue, break şi return.

Instrucţiunea continue permite terminarea forţata a iteraţiei curente şi trecerea la urmatoarea iteraţie. Ea poate fi folosită cu instrucţiunile for, foreach, while sau do..while. Continue are rolul de a sări peste restul iteraţiei curente şi de a continua execuţia de la începutul urmatoarei iteraţii. Continue acceptă opţional un argument numeric ce specifică din câte structuri trebuie să iese forţat.

Instrucţiunea break permite întreruperea forţata a buclei curente. Ea poate fi folosită cu instrucţiunile for, foreach, while, do..while sau switch. Acceptă opţional un argument numeric ce specifică din câte structuri trebuie să iese forţat.

Instrucţiunea return permite terminarea forţata a funcţiei sau programului curent. Ea poate fi folosită în instrucţiunile for, foreach, while sau do..while unde, prin terminarea scriptului, termină în mod evident şi bucla curentă. Dacă este apelată dintr-o funcţie, return încheie imediat execuţia aesteia şi returnează argumentul său ca valoare a apelului de funcţie. Dacă se doreşte generarea unui mesaj în pagină înainte de încheierea scriptului, în loc de return se pot folosi funcţiile exit(mesaj) sau die(mesaj) - die fiind un alias al funcţiei exit.

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

1.11.1 Funcţii predefinite Funcţiile predefinite(de biblioteca) rezolvă cele mai comune probleme legate

de scopul în care a fost dezvoltat un limbaj şi reprezintă porţiuni de cod gata scrise care pot fi reutilizate de catre toţi programatorii care folosesc acel limbaj. Exemplu : echo().

PHP are un număr mare de funcţii şi construcţii predefinite, majoritatea funcţiilor de bibliotecă referindu-se la prelucrarea de texte, lucrul cu protocoalele internet şi comunicarea cu servere de baze de date.

19

Page 20: Poezii Online

Numele funcţiei identifică unic codul care va fi apelat în acel loc. Spre deosebire de variabile, numele funcţiilor nu sunt "case-sensitive" deci pot fi scrise cu orice combinaţii de litere mari/mici. Unele funcţii PHP au argumente opţionale, care pot fi specificate sau omise:

nume_funcţie( parametrul1, parametrul2, ... parametrul_n);

Majoritatea funcţiilor returnează valori. Se poate folosi într-o expresie valoarea returnată de o funcţie. O situaţie foarte frecventă în care se procedează astfel o constituie utilizarea valorii returnate de o funcţie într-o expresie de atribuire, astfel încât valoarea să fie accesibilă în mod repetat fără a se invoca funcţia de mai multe ori.Valorile sunt returnate folosind opţional instrucţiunea return. Poate fi returnat orice tip de rezultat, inclusiv tablouri şi obiecte. Nu se pot returna valori multiple dintr-o funcţie, dar rezultate asemănătoare pot fi obţinute prin returnarea unui tablou.

PHP susţine conceptul de funcţii variabile. Aceasta înseamnă că dacă numele unei variabile este urmat de paranteze, PHP va cauta o funcţie cu acelaşi nume şi va încerca să o execute.

1.11.2 Funcţii utilizator

Funcţiile de bibliotecă sunt limitate ca număr, de multe ori este necesar să se definească. Funcţii specifice acelei aplicaţii, anumite funcţii utilizator. Acestea au sintaxa:

Funcţion nume_funcţie( $arg1, $arg2, ..., $argN){ //linii de cod return $retval;}

Funcţiile utilizator sunt disponibile doar în fişierul unde sunt declarate. Este posibil ca o funcţie să nu aibă argumente, la fel de bine cum o funcţie poate avea mai multe argumente. Argumentele unei funcţii sunt separate între ele prin virgule. Dacă se doreşte ca funcţia să întoarcă o anumită valoare, trebuie determinat ca funcţia să execute o instrucţiune return.

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

20

Page 21: Poezii Online

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.

1.11.4 Funcţii recursive

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

1.12 Clase şi obiecte

1.12.1 Definirea unei clase

O clasă este o colecţie de variabile şi de funcţii care utilizează aceste variabile. Principiul de bază al orientării spre obiecte îl reprezintă încapsularea sau ascunderea datelor, cum mai este cunoscută. Un program care nu este orientat spre obiecte este organizat ca un set de funcţii şi un set de variabile globale utilizate de acele funcţii. Orice funcţie poate opera folosind orice variabilă globală, deci structura programului este oarecum haotică. Prin contrast, un program orientat spre obiecte combină funcţii şi 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ă:

21

Page 22: Poezii Online

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.

1.12.3 Moştenire

Moştenirea permite specificarea unei clase folosind o altă clasă ca punct de plecare. Clasa originală se numeşte clasă de bază sau clasă părinte, iar clasa specificată mai recent se numeşte clasă derivată sau clasă copil. Moştenirea funcţionează în sens unic, clasa copil moşteneşte proprietăţi şi metode ale clasei părinte, dar clasa părinte nu preia trăsături de la copil. Clasa copil sau derivată posedă toate variabilele şi funcţiile clasei de bază alături de variabilele şi funcţiile proprii, definite în extensie. Acest lucrul se realizează utilizând cuvântul cheie extends. Moştenirea multiplă nu este acceptată.

Exemplu: class clasa_copil extends clasa_parinte { var nume_varibilaX ;

22

Page 23: Poezii Online

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.

1.13.1 Instrucţiunea require

Instrucţiunea require permite includerea unui fişier extern în interiorul unui fişier script. Ea funcţionează asemănător clauzei #include din limbajele C şi C++. Sintaxa de apel este:

require ( "nume_fişier_reutilizat.php" );

Aceasta instrucţiune require este prelucrată la încărcarea scriptului PHP asociat, înaintea legării valorilor la variabilele corespunzătoare. Deşi extensia fişierului care se include nu este obligatorie, prin convenţie ea este fie .php fie .inc. În momentul interpretării scriptului, apelul instrucţiunii require va fi înlocuit de conţinutul fişierului transmis ca şi parametru şi apoi acesta va fi interpretat. Fişierul poate conţine orice 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ă.

1.13.2 Instrucţiunea include

Instrucţiunea include este asemănătoare cu require. O deosebire importantă se referă însă la modul în care se face includerea şi interpretarea codului din fişierul inclus.

23

Page 24: Poezii Online

Instrucţiunea require este înlocuită cu fişierul referit la încărcarea paginii, indiferent dacă execuţia codului va ajunge sau nu la această instrucţiune.

Instrucţiunea include va fi înlocuită doar în momentul în care execuţia a ajuns în acel punct. O instrucţiune include este evaluată de fiecare data când este executată instrucţiunea şi nu este evaluată deloc dacă instrucţiunea nu este executată. Din acest punct de vedere se preferă folosirea acestei instrucţiuni, ea generând o încărcare mai mică pe server.

1.14 Controlul sesiunilor

Dupa cum se ştie, protocolul HTTP este un protocol lipsit de informaţii de stare. Acest lucru se traduce prin faptul că acest protocol nu are nici un mecanism propriu prin care să trasmită datele între două tranzacţii. La cererea succesivă a doua pagini de către un utilizator către un server de Web, nu există nici o posibilitate de transmitere spre cea de a doua pagină faptul că este vorba despre acelaşi utilizator. Ideea de la care pleacă controlul sesiunilor este tocmai acela de a permite urmărirea acţiunilor unui utilizator pe parcursul unei sesiuni de accese către respectivul server de Web.

Acest lucru permite implementarea unui mecanism de tip "logging in" pentru un utilizator, şi, implicit, posibilitatea de a limita accesul la anumite pagini cu informaţii confidenţiale, respectiv de a pezenta conţinutul paginilor personalizat după preferinţele utilizatorului respectiv.

Sesiunile PHP sunt gestionate prin intermediul unui numar unic (session ID) generat aleator pe baza unui algoritm criptografic. Acest numar este generat de către PHP şi menţinut de către clientul de Web care accesează pagini pe tot parcursul sesiunii de lucru. Numarul de sesiune (session ID) permite înregistrarea variabilelor de sesiune stocate pe server. Aceste variabile sunt apoi vizibile în toate paginile acelei sesiuni. Crearea unei sesiuni este asigurată de către PHP prin intermediul unui scrip, aşa numit mecanism “session”, startat prin linia de program:

session_register(“global”)

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.

Paşii care se fac la utilizarea unei sesiuni sunt următorii: crearea unei sesiuni înregistrarea variabilelor sesiune utilizarea variabilelor sesiune pentru controlul accesului său personalizarea paginii ştergerea variabilelor sesiune şi distrugerea sesiunii

24

Page 25: Poezii Online

Înainte de a utiliza o sesiune aceasta trebuie creată. Cel mai simplu mod de a porni o sesiune este acela de a apela funcţia session_start(). Apelul acestei funcţii creează automat un număr de sesiune şi permite apoi utilizarea variabilelor de sesiune. Această funcţie trebuie apelată înainte de antetul "<HTML>". O altă metodă, mai puţin recomandată, este metoda creări implicite a unei sesiuni în momentul în care se înregistrează forţat o variabilă de sesiune. Funcţia session_start va fi apelată la începutul tuturor paginilor care compun sesiunea curentă. Pentru a folosi valori transmise între pagini diferite se vor folosi variabile sesiune. Variabilele sesiune se înregistrază ca atare prin apelul funcţiei session_register(nume_variabila). De exemplu:

$varSesiune1 = 10; session_register( "varSesiune1");

Trebuie remarcat că numele variabilei se transmite funcţiei ca şi un şir de caractere, fără a include şi semnul $. Variabila va rămâne vizibilă până când este ştearsă sau până când sesiunea curentă se incheie. Dacă se doreşte, se pot înregistra mai multe variabile printr-un singur apel de session_register prin sintaxa:

session_register( "v1", "v2" ...);

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

Observaţie! Pentru a Funcţiona corect mecanismul de control al sesiunii trebuie ca în fişierul php.ini să existe setările:

session.save_path = c:/temp ; setare valabilă pentru Windows (pt. Unix:session.save_path = /tmp)session.cache_limiter = private

25

Page 26: Poezii Online

Capitolul 2

Baze de date MySQL

2.1 Noţiuni generale

O bază de date este o colecţie de informaţii organizate în aşa fel încat un program poate selecta rapid anumite părţi din acea informaţie.Pentru a putea accesa informaţiile stocate într-o bază de date este nevoie de un sistem de gestiune a bazelor de date (SGBD). Unul dintre cele mai populare sisteme de gestine a bazelor de date este MySQL.

Ca şi PHP, MySQL este distribuit în formula Open Source, deci permite oricarui utilizator să modifice programul care să poate fi luat gratuit de pe internet. Datele sunt organizate în tabele, între care sunt stabilite relaţii şi constrângeri de intergritate. Pentru gestiunea datelor foloseste limbajul SQL (Structured Query Language) care este un standard în acest domeniu.

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.

26

Page 27: Poezii Online

2.2 Proiectarea unei baze de date

Proiectarea unei baze de date este foarte importantă pentru succesul aplicaţiei pentru care este realizată. Primul pas constă în analiza aplicaţiei, iar cel de-al doilea în normalizarea bazei de date, un proces complex şi de durată care contribuie esenţial la evitarea problemelor şi complicaţiilor ulterioare.

Normalizarea unei baze de date relaţionaleNormalizarea unei baze de date constă în descompunerea modelului bazei de

date în mai multe relaţii astfel încât să se reducă la maxim redundanţa datelor şi implicit să elimine anomaliile de actualizare. Normalizarea bazei de date presupune aducerea relaţiilor gradual pe diverse forme normale. Există şapte forme normale.Fiecare formă normală preia constrângerile formei anterioare la care adaugă noi condiţii.

Prima formă normală O relaţie este în prima formă normală dacă şi numai dacă fiecare atribut din fiecare linie poate conţine numai o singură valoare. A doua formă normală O relaţie este în a doua formă normală dacă şi numai dacă ea este în primaformă normală şi orice atribut non cheie este dependent funcţional complet de cheia primară. A treia formă normală O relaţie este în a treia formă normală dacă şi numai dacă ea este în a doua forma normală şi nici un atribut non cheie nu este dependent tranzitiv de cheia primară. Forma normala Boyce-Codd O relaţie este în forma normală Boyce-Codd dacă fiecare deteminant este cheie candidată. A patra formă normală O relaţie este în a patra formă normală dacă şi numai dacă ori de câte ori există o dependenţă multivalorică de un determinant, toate atributele sunt dependente funcţional de determinant. 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ă.

Factori care influenţează, de asemenea, proiectarea sunt de căutare a informaţiilor, factor esenţial care cere uneori repetarea datelor în tabele şi deci, încălcarea unor forme normale şi viteza de adăugare şi modificare a datelor, care cere uneori reorganizarea datelor. Nu în ultimul rând spaţiul pe disc este şi el un criteriu important în cadrul proiectării unei baze de date. Chiar dacă în zilele noastre discurile au capacităţi foarte mari, o bază de date cu redundanţă mare, pe langă ca ocupă inutil foarte mult spaţiu, este şi foarte greu de accesat (viteza de cautare în tabele este în general proporţională cu dimensiunea acesteia).

27

Page 28: Poezii Online

Proiectarea bazei de date se face folosind procedeul cunoscut sub numele de modelare entitate-relaţie sau modelare E-R. În acest context, o entitate este similară cu un tablou relaţional. Modelarea E-R este un proces în cadrul căruia coloanele, entităţile şi relaţiile între entităţi sunt descoperite şi organizate. Un model E-R poate fi folosit cu uşurinţă, pentru a genera o structură a bazei de date, care poate fi transformată într-o bază de date relaţională efectivă.

2.3 Elemente de limbaj

2.3.1 Comentarii

Comentariile pentru explicarea codului în MySQL sunt de doua feluri: pentru comentarea codului pana la sfarşitul liniei: comentarii care încep cu semnul # sau comentarii care încep cu semnul – ( este necesar cel puţin un spaţiu după semnul --) şi comentarii pe mai multe linii care încep cu /* şi se încheie cu */ .

2.3.2 Tipuri de date

Tipurile de date în MySQL pot fi împărţite în mai multe categorii : numerice, logice, dată calendaristică, timp, şiruri de caractere şi date binare mari (BLOB - binary large object).

Tipuri de date numerice

1. TINYINT : reprezintă un număr întreg foarte mic. Intervalul de valori posibile este [-128..127].

2. SMALLINT : repezintă un număr întreg mic. Intervalul de valori posibile este [-32768..32767].

3. MEDIUMINT : reprezintă un număr întreg mediu. Intervalul de valori posibile este [-8388608..8388607].

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

Tipuri de date de tip dată calendaristică şi timp

28

Page 29: Poezii Online

1. DATE : reprezintă o dată calendaristică stocată în formatul 'YYYY-MM-DD' (an-luna-zi). Intervalul de valori posibile este ['1000-01-01'..'9999-12-31'].

2. DATETIME : reprezintă o combinaţie de dată calendaristică şi timp stocată în formatul 'YYYY-MM-DD HH:MM:SS' (an-luna-zi ora:minut:secundă). Intervalul de valori posibile este ['1000-01-01 00:00:00'..'9999-12-31 23:59:59'].

3. TIMESTAMP : reprezintă o semnatură de timp stocată după lungimea specificată, care poate fi 14, 12, 8 sau 6 : YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD sau YYMMDD.

4. TIME : reprezintă ora, minutul şi secunda. Intervalul de valori posibile este [-838:59:59'..'838:59:59']. Poate reţine intervalul de timp dintre două evenimente, de aceea poate fi şi negativ.

5. YEAR : reprezintă anul calendaristic pe doua sau patru cifre. Intervalul de valori posibile este [1901..2155] pentru 4 cifre, respectiv [1970..2069] pentru 2 cifre (70-99..00-69).

Tipuri de date şir de caractere

1. CHAR (L) : reprezintă un şir de caractere de lungime fixă. Lungimea L a şirului poate lua valori în intervalul [1..255].

2. BIT, BOOL, CHAR –sinonime cu delaraţia CHAR(1).3. VARCHAR (L) : reprezintă un şir de caractere de lungime variabilă.Lungimea

L a şirului poate lua valori între [1..255].

Tipuri de date binare mari (BLOB)

1. TINYBLOB, TINYTEXT : reprezintă valori BLOB, TEXT cu lungime maximă de 255 elemente. 2. BLOB, TEXT : reprezintă valori BLOB, TEXT cu lungime maximă de 65535 (64K) elemente. 3. MEDIUMBLOB, MEDIUMTEXT : reprezintă valori BLOB, respectiv TEXT cu lungime de max. 16777215 (16 MB) elemente. 4. LONGBLOB, LONGTEXT : reprezintă valori BLOB, TEXT cu lungime de maxim 4294967295 (4 TB) elemente.

Tipuri de date speciale

1. ENUM ('value1','value2',...) : reprezintă o enumerare de elemente de tip şir de caracter. Un obiect de acest tip poate avea la un moment dat o singură valoare dintre cele enumerate sau valoarea NULL. Valoarea " " (şir vid) este considerată valoare de eroare. Un tip enumerare poate defini maxim 65535 de valori distincte.

2. SET ('value1','value2',...) : reprezintă o mulţime de elemente de tip şir de caracter. Un obiect de acest tip poate conţine la un moment dat mai multe valori distincte dintre cele definite sau poate fi gol (nu conţine nici o valoare). Un tip mulţime poate defini maxim 65 de valori membru.

29

Page 30: Poezii Online

2.3.3 Operatori

Operatori aritmetici : operează asupra numerelor întregi cu precizia BIGINT (pe 64 biti). Sunt disponibili urmatorii operatori: + : adunare; - : scădere; * : înmulţire; / : împărţire; dacă se împarte la 0 rezultatul va fi NULL. Operatori logici : întorc 1 pentru adevarat şi 0 pentru fals. 1. NOT: ! - Negaţie logică. Întoarce 1 dacă argumentul este 0, altfel întoarce 0.

Excepţie: NOT NULL întoarce NULL. 2. OR:

|| - SAU logic. Întoarce 1 dacă cel puţin un argument nu este 0 sau NULL

3. AND : && - ŞI logic. Întoarce 0 sau NULL dacă cel puţin un argument este 0 sau NULL, altfel Întoarce 1.

Operatori de comparare : returnează 1 pentru adevărat, 0 pentru fals şi NULL dacă nu se poate efectua comparaţia. La compararea a doua şiruri nu se va ţine cont de litere mari/mici.

= egalitate; la compararea cu NULL întoarce NULL; <> sau != inegalitate; < - mai mic; <= - 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 =;

30

Page 31: Poezii Online

2.4 Crearea unei baze de date şi gestiunea acesteia

Înainte de a putea crea tabele şi de a introduce date în acestea trebuie creată o bază de date şi de a o alege ca fiind bază de date curentă.Crearea unei baze de date se realizează cu ajutorul unui sub-limbaj SQL care se numeste DDL (Data Definition Language). Comanda care realizează crearea unei baze de date este:

CREATE DATABASE nume_bd;

Pentru ca baza de date db_name să devină curentă, se emite o instrucţiune USE:

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.

2.4.1 Crearea unei tabele

Crearea unei tablele se realizează cu comanda :

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(nume_campX tipX [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [PRIMARY KEY])]

TEMPORARY - specifică crearea unei tabele temporare care va fi ştearsă automat la închiderea conexiunii în care a fost creată; doua conexiuni pot crea doua tabele temporare cu aceleaşi nume, ele nu vor interfera.

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)

DEFAULT default_value - completează câmpul lasat liber cu valoarea implicită default_value

AUTO_INCREMENT - dacă nu se inserează nimic în câmp, se va genera automat o valoare mai mare cu o unitate faţă de cea mai mare valoare din acel câmp. Poate fi specificată o singură coloană cu acest parametru într-o tabelă. Coloanele specificate astfel trebuie indexate.

31

Page 32: Poezii Online

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.

UNSIGNED – precizat dupa un tip întreg înseamnă că poate avea o valoare pozitivă sau 0.

Exemplu :

CREATE TABLE persoană (nume CHAR(30),prenume CHAR(30),vârstă INT(3))

2.4.2 Ştergerea unei tabele

Ştergerea unei tabele se realizează cu comanda:

DROP TABLE [IF EXISTS] nume_tabelă

IF EXISTS – este un parametru care va inhiba mesajul de eroare care apare dacă tabela nu există.

2.4.3 Inserarea datelor în tabele

Comanda INSERT : permite inserarea (adăugarea) de noi înregistrări într-o tabelă. Deoarece sistemul mySQL este pur relaţional, nu există nici o diferenţă între 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 :

INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] nume_tabelă [(col_nume,...)] VALUES (expresie,...),(...),...

LOW_PRIORITY – este folosit pentru a întârzia scrierea efectivă a datelor în tabela până când alţi utilizatori nu mai citesc date din tabelă. Acest lucru avantajează citirea dar întârzie, semnificativ pentru o tabelă foarte utilizată, scrierea. Efectul este blocarea execuţiei până când se reuşeşte scrierea efectivă.

32

Page 33: Poezii Online

DELAYED - are acţiune opusă parametrului precedent. Înregistrarea care trebuie adăugată este pusă într-o coadă de aşteptare pe server şi controlul revine la client, ca şi cum scrierea ar fi fost făcută efectiv. Avantajul constă în timpul mic de execuţie a comenzii INSERT pe o tabelă utilizată intensiv. Dezavantajul constă în încărcarea serverului cu o operaţie în plus şi în pierderea datelor dacă serverul se opreşte neaşteptat. Din această cauză parametrul este folosit doar când este cu adevărat necesar.

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.

INTO - este opţional, se foloseşte pentru compatibilitate cu alte sisteme SQL.

Datorită clarităţii mai mari a interogării se preferă totuşi utilizarea lui.

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.

VALUES (expresie, ...),(...) - specifică datele ce vor fi adăugate în tabelă. Ele trebuie să respecte numarul şi ordinea coloanelor de la declararea tabelei sau, dacă e specificat, numarul şi ordinea câmpurilor din lista de coloane (col_nume,...) prezentată anterior.

Exemplu: INSERT INTO persoană VALUES ("Olaru", "Niculina",22) ;

Comanda UPDATE - permite actualizarea valorilor dintr-o tabelă. Sintaxa acestei comenzi este:

UPDATE [LOW_PRIORITY] [IGNORE] nume_tabelă SET col_nume1=expr1, col_nume2=expr2,... [WHERE condiţie] [LIMIT NUMBER]

LOW PRIORITY - este folosit pentru a întarzia scrierea efectivă a datelor în tabelă până când alţi utilizatori nu mai citesc date din tabelă.

IGNORE - este util dacă se inserează mai multe înregistrări simultan (în acest caz lista de după VALUES va conţine mai multe seturi de date în paranteze, despărţite prin virgulă).

SET col_nume1=expr1, col_nume2=expr2,... atribuie noile valori expr1, expr2.. la col_nume1, col_nume2 unde (WHERE) are loc conditie. Dacă clauza WHERE lipseşte, vor fi actualizate toate înregistrările.

33

Page 34: Poezii Online

LIMIT permite setarea numărului de înregistrări care vor fi afectate de comanda UPDATE. Exemplu :

UPDATE persoană SET nume="Popescu" ;

2.4.4 Ştergerea datelor din tabele

Comanda DELETE – este folosită pentru ştergerea anumitor date dintr-o tabelă. Aceasta are sintaxa :

DELETE [LOW_PRIORITY] FROM nume_tabelă [WHERE condiţie_ştergere] [LIMIT NUMBER]

Parametri au aceeaşi semnificaţie ca şi în cazul comenzilor INSERT şi UPDATE. Folosind comanda DELETE simplş, sub forma “delete from nume_tabelş”, se vor şterge toate înregistrarile din tabela nume_tabelă. Pentru a prezica care valori să fie şterse se va folosi clauza WHERE. Exemplu:

DELETE FROM persoană WHERE nume="Popescu";

2.4.5 Extragerea informaţiilor din tabele

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:

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.

WHERE - specifică condiţia de includere a datelor în selecţie. Permite selecţia doar a datelor care interesează la un moment dat. În cazul operaţiunii de JOIN aici se vor adăuga şi constrângerile date de relaţiile dintre tabele. Condiţia de selecţie constă dintr-o expresie logică simplă sau complexă.

34

Page 35: Poezii Online

ORDER BY tip_ordonare {intreg_pozitiv | nume_col | formula} [ASC | DESC] - permite ordonarea rezultatului dupa anumite coloane sau formule. Dacă se specifică o listă de numere, acestea vor fi interpretate ca numere de ordine a coloanelor specificate în SELECT (începând cu 1). Ordonarea se face după prima coloană din listă. În cazul în care două înregistrări au aceiaşi valoare pentru coloana respectiva se va lua în considerare a doua coloană din listă (dacă este specificată) etc. Parametrii ASC şi DESC specifică ordonarea crescătoare, respectiv descrescătoare a înregistrărilor în rezultat.

Pentru a selecta toate înregistrările dintr-o tabelă se va folosi * : SELECT * FROM nume_tabelă ;

Dacă se doreşte enumerarea tuturor înregistrărilor ce satisfac o anumită condiţie se va proceda în felul urmator : SELECT * FROM nume_tabela WHERE condiţie ;

Clauza GROUP BY specifică dupa ce valoare se va face gruparea. În majoritatea cazurilor expresia de grupare este reprezentată de o singură coloană. Toate înregistrările cu aceeaşi valoare pentru expresia de grupare vor fi considerate ca făcând parte din acelaşi grup.

Clauza HAVING permite selectarea grupurilor care sunt luate în considerare. Condiţia din HAVING se aplică după constituirea grupului, pe când condiţia din clauză WHERE în timpul selectării înregistrărilor. În plus, acestă clauză poate cuprinde doar referinţe la câmpuri şi aliasuri de câmpuri din lista de câmpuri a comenzii SELECT sau funcţii de sumarizare pe grup. MySQL include funcţii care permit raportarea valorilor agregate, precum un număr al rândurilor tabelului. Exemple de funcţii de agregare:

-count(*) = numărul rândurilor din tabel -avg(coloana) = valoarea medie a coloanei numerice specificate -min(coloana) = valoarea minimă pentru coloana specificată -sum(coloana) = suma valorilor din coloana respectivă

2.5 Folosirea alias-urilor

Scrierea instrucţiunilor poate fi simplificată prin folosirea unor denumiri prescurtate, numite alias-uri. Adesea este de ajutor şi uneori chiar esenţial să ne putem referi la tabele folosind alte nume. Alias-urile pot fi folosite atât pentru a desemna tabele cât şi coloane. Ele pot fi create la începutul unei interogari şi folosite pe tot parcursul ei.

Sintaxa de definire a unui alias este următoarea:

SELECT nume_tabelă.col_nume [AS] alias_c1,... FROM nume_tabelăORDER BY alias_c1 ...;

35

Page 36: Poezii Online

Alias-urile definite pentru tabele pot fi folosite în partea de specificare a coloanelor, iar alias-urile coloanelor pot fi folosite în clauze ORDER BY sau HAVING.

Alias-urile trebuie folosite şi atunci când dorim să efectuăm un JOIN între o tabelă şi ea insăsi. Acest lucru suna dificil, dar nu este chiar aşa. Este folositor, de exmplu, dacă dorim să regăsim înregistrări dintr-o aceeaşi tabelă care au valori în comun.

2.6 Accesul la o bază de date

2.6.1 Utilizatori şi parole

MySQL suportă un sistem de privilegii sofisticat, există diferenţe semnificative între sistemul de utilizatori şi parole MySQL şi sistemul Unix-ului sau Windows-ului. Una dintre acestea este faptul că numele unui utilizator MySQL poate avea 16 caractere semnificative pe când în majoritatea implementărilor UNIX această valoare este de 8 caractere. O altă diferenţă ar fi aceea ca numele utilizatorilor şi parolele sunt păstrate separat de mySQL şi nu au nimic în comun cu cele din sistemul de operare.

Nu în ultimul rând, MySQL criptează parolele folosind un algoritm diferit de cel utilizat de UNIX sau Windows. Algoritmul de criptare este ireversibil.

La instalarea sistemului este creat implicit un utilizator numit "root" care are toate drepturile activate. Acest utilizator trebuie folosit, din motive de securitate, doar pentru administrare. Pentru fiecare utilizator care va interacţiona cu serverul trebuie creat un utilizator.

Un sistem MySQL poate avea mai mulţi utilizatori. Utilizatorul « root » ar trebui folosit în principiu doar pentru scopuri administrative, din motive de securitate. Pentru fiecare utilizator care are nevoie să folosească sistemul, acesta trebuie să creeze un cont cu parola. O idee bună ar fi ca acestea să fie diferite de username-ul şi parola folosite în afara MySQL (de exemplu cele pentru UNIX sau Windows).

2.6.2 Privilegii MySQL

Privilegiile în MySQL se referă în principal la autentificarea şi autorizarea utilizatorilor conectaţi la server. Autorizarea se referă la permisiunea de a rula interogări precum SELECT, INSERT, UPDATE sau DELETE.

Pentru a spori securitatea oricărui calculator, nu numai a serverului MySQL se aplică principiul "minimului de privilegii necesare".Deşi este foarte simplu, este foarte important :

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.

36

Page 37: Poezii Online

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.

Privilegiile pentru utilizatorii obişnuiţi se leagă direct de comenzile SQL şi de dreptul de a le executa. Acestea sunt:

SELECT –care se aplică la tabele şi coloane şi permite utilizatorilor să selecteze înregistrări din tabele.

INSERT - se aplică la tabele şi coloane şi permite utilizatorilor să insereze date în tabele.

UPDATE - se aplică la tabele şi coloane şi permite utilizatorilor să modifice valorile existente în tabele.

DELETE - se aplică tabelelor şi permite utilizatorilor să şteargă înregistrări din tabele.

INDEX - se aplică tabelelor şi permite utilizatorilor să creeze şi să insereze indecşi în tabele.

ALTER - se aplică tabelelor şi permite utilizatorilor să modifice structura tabelelor exsiente prin adăugare de coloane, redenumire de coloane ori tabele, schimbarea tipului de date al coloanelor.

CREATE - se aplică bazelor de date şi tabelelor şi permite utilizatorilor să creeze baze de date sau tabele.

DROP - se aplică tabelelor şi bazelor de date şi permite utilizatorilor să şteargă baze de date sau tabele.

GRANT – se aplică bazelor de date şi tabelelor şi permite utilizatorilor delegarea privilegiilor către un alt utilizator.

Drepturile administratorului sunt :

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.

Privilegiile speciale sunt doua :

ALL - oferă toate privilegiile. Se poate folosi ALL PRIVILEGES în loc de ALL.

37

Page 38: Poezii Online

USAGE - nu oferă nici un privilegiu. Va fi creat un utilizator căruia i se va permite să se logheze dar nu va avea nici un drept. De obicei se adaugă pe parcurs privilegii.

Orice utilizator poate avea oricare din aceste privilegii, dar se obişnuieşte să se restricţioneze cele proprii administratorului doar acestuia.

Comanda GRANT - permite crearea utilizatorilor şi/sau stabilirea, respectiv codificarea privilegiilor acestora pe patru nivele de privilegii:

Global – este aplicată tuturor bazelor de date existente pe un server Database - este aplicată tuturor tabelelor dintr-o bază de date Table - este aplicată tuturor coloanelor dintr-o tabelă Column - este aplicată doar coloanelor specificate explicit

Sintaxa comenzii GRANT este:

GRANT privilegii [coloane] ON componentă TO nume_utilizator [IDENTIFIED BY 'parolă'] [WITH GRANT OPTIONS]

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.

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.

Există posibilitatea vizualizării privilegiilor. Aceasta se realizează cu ajutorul comenzii:

38

Page 39: Poezii Online

SHOW GRANTS FOR utilizator;

Deasemenea, există posibilitatea de a retrage drepturile cuiva. Sintaxa acestei comenzi este:

REVOKE privilegii [coloane] ON componenta FROM nume_utilizator

Pentru a retrage privilegiul acordat prin clauza WITH GRANT OPTION, se va utiliza sintaxa:

REVOKE GRANT OPTIONS ON componenta FROM nume_utilizator

Capitolul 3

PHP şi MySQL

În PHP sunt implementate o serie de funcţii pentru conectarea şi comunicarea cu server-ul MySQL. Folosind aceste funcţii, un program PHP poate obţine accesul

39

Page 40: Poezii Online

la bazele de date rezidente într-o bază de date MySQL şi le poate modifica. Pentru a utiliza cu success funcţii PHP pentru a comunica cu serverul MySQL, trebuie ca MySQL să ruleze pe o locaţie la care serverul web folosit să se poată conecta (nu neapărat aceeaşi maşina cu cea a serverului web). De asemenea e necesar un cont de utilizator (protejat de o parolă) şi trebuie să ştim numele bazei de date la care vrem să ne conectăm.

3.1 Conectarea la serverul MySQL

O pagină PHP nu poate interoga o bază de date dacă nu este conectată la aceasta. O conexiune poate fi privită ca un canal de comunicaţie prin care programul transmite cereri SQL, iar serverul returnează raspunsurile corespunzătoare. Din PHP se pot stabili două tipuri de conexiuni către un server MySQL: persistente şi nepersistente.

O conexiune persistentă se păstrează după prima utilizare chiar şi după terminarea paginii curente sau după apelul mysql_close. Orice deschidere a unei noi conexiuni cu aceiaşi parametrii va reutiliza pe cea veche în locul creării uneia noi. Ele se realizează prin apelul funcţiei mysql_pconnect. Un avantaj al conexiunilor pemanente este viteza de stabilirea a conexiunilor, resimţită în timpi de răspuns mai buni către utilizatori. Ca dezavantaj putem menţiona blocarea îndelungată a unei conexiuni către server, afectând numărul de clienţi care sunt acceptaţi spre a fi serviţi.

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:

resource mysql_pconnect ( string server , string utilizator , string parolă )resource mysql_connect ( string server , string utilizator , string parolă )

Parametri au următoarea semnificaţie:

server - specifică numele maşinii pe care rulează serverul de mySQL. Dacă serverul de Web şi cel de mySQL rulează pe aceiaşi maşină, numele poate fi "localhost". În cazul în care serverul de mysQL s-a instalat pe alt port decât cel standard (3306), numarul portului se specifică după numele serverului, spre exemplu "loalhost:3371".

utilizator - specifică numele utilizatorului pentru care se realizează conexiunea. Deoarece prin nume serverul va stabili drepturile pe care programul le are asupra unei anumite baze de date, acest parametru poate fi folosit pentru a creşte securitatea site-ului.

parola - este un şir de caractere cuprinzând parola în clar a utilizatorului specificat. Deoarece liniile php nu traverseză serverul Web, această parola nu poate fi

40

Page 41: Poezii Online

citită de utilizator prin comanda View Source a navigatorului Web. Singura problemă apare dacă cineva neautorizat are acces local la sistemul de fişiere de pe server şi poate citi direct fişierul php.

Pentru închiderea conexiunii, după ce nu mai este necesară, se va utiliza comanda:

bool mysql_close ( resource identificatorBD );

Parametrul identificatorBD trebuie să fie un identificator valid de conexiune returnat în prealabil de comada mysql_connect (sau mysql_pconnect).

Pentru a putea accesa datele din tabelele unei anumite baze de date de pe server, după realizarea conexiunii, aceasta trebuie selectată prin comanda mysql_select_db:

bool mysql_select_db ( string numeBazaDeDate ); Funcţia returnează false în caz de eşec.

3.2 Interogări

În cadrul limbajului PHP interogările sunt emise cu ajutorul comenzii:

resource mysql_query ( string query );

şi există două categorii de interogări: interogările SELECT, şi interogările UPDATE, INSERT şi DELETE.

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.

Spre deosebire de interogările UPDATE, INSERT şi DELETE, interogările SELECT returnează rânduri de tabel. Rândurile unui tabel sunt incluse într-o structură numită set de rezultate. Prelucrarea setului de rezultate returnat de o interogare SELECT implică parcurgerea prin iteraţie a rândurilor setului de rezultate. Pentru a obţine valoarea numărului de rânduri se foloseşte funcţia mysql_num_rows(). Funcţia mysql_fetch_row() se poate folosi pentru a obţine următorul rând din secvenţa setului de rezultate.

Pentru a evita problemele care apar din cauza caracterelor speciale interpretate diferit de mySQL şi PHP, valorile variabilelor trebuie transformate corespunzător prin

41

Page 42: Poezii Online

utilizarea funcţiei addslashes: string addslashes ( string parametru) .Pentru a afla numarul înregistrărilor afectate de o interogare acţiune se poate folosi funcţia mysql_affected_rows:

int mysql_affected_rows ( );

3.3 Căutarea şi afişarea rezultatelor

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:

Rezultatul este preluat prin funcţia mysql_fetch_array() şi interpretat ca un tablou asociativ. Acest tablou are ca şi chei numele coloanelor selectate iar ca şi valori, valorile corespondente din rezultat. Fiecare apel succesiv al funcţiei 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

Prima întrebare pe care cititorul acestei lucrări ar gândi-o, probabil, este referitoare la faptul că prin intermediul aplicaţiei nu poţi cumpăra nimic şi poate părea fără folos. Dar înainte de a întreba şi-ar da seama că majoritatea aplicaţiilor dezvoltate cu ajutorul tehnologiilor PHP şi MySQL sunt magazinele online şi bibliotecile-librării virtuale, de unde poţi cumpăra orice. Deşi există multe cărţi ce pot fi cumpărate, nu

42

Page 43: Poezii Online

mereu ne permitem să cumpărăm; şi dacă ne permitem să cumpărăm, nu avem timp să le răsfoim.

Prin intermediul acestei lucrări am încercat să evidenţiez utilitatea combinării celor două tehnologii PHP si MySQL pentru obtinerea de pagini Web cu continut dinamic. Am ales limbajul PHP deoarece este special conceput pentru crearea de pagini Web şi este un limbaj inter-platformă, sursă gratuită şi uşor de invăţat. De asemenea el oferă suport pentru o gama largă de sisteme de baze de date. Am ales sistemul MySQL deorece este un sistem de gestiune al bazelor de date relaţional şi este distribuit in regim gratuit, ca şi PHP-ul. Alegerea a fost influenţată şi de facilitatea realizării unei intefeţe prietenoase şi uşor de inteles.

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.

Bibliografie

Nr.crt.

Titlu Autor

1 PHP-Portal http://www.php.maelvi.ro/pgs/tut_mysql_date.php

2 Dynamic site with PHP_MySQL Ashraful Anam3 PHP 4 A BEGINNER'S GUIDE Bill McCarty, traducere de Mihai Mănăstireanu

43

Page 44: Poezii Online

2002 Teora4 PHP Manual Stig Sæther Bakken, Alexander Aulbach, Egon

Schmid, Jim WinsteadLars Torben Wilson

Rasmus LerdorfAndrei Zmievski

Jouni Ahtoor http://www.php.net/docs.php

5 PHP/MySQL Tutorial Graeme Merral6 PHP and MySQL. Web

DevelopmentLuke Welling and Laura Thomson

7 Beginning PHP, Apache, MySQL Web Development

Michael Glass, Yann Le Scouarnec, Elizabeth Naramore, Gary Mailer, Jeremy Stolz, Jason Gerner

8 Kevin Yank Build your own database driven website using PHP and MySql

SitePoint, August 2001

44