You are on page 1of 44

UNIVERSITATEA DE VEST TIMIOARA FACULTATEA DE MATEMATIC I INFORMATIC DEPARTAMENTUL DE INFORMATIC

LUCRARE DE LICEN

STUDENT: OLARU NICULINA BIANCA

COORDONATOR: LECT. HORIA POPA

TIMIOARA IUNIE 2007

Cuprins
Introducere..............................................................................................................4 ......................................................................................................................5 Capitolul 1........................................................................................................................6 1.1 Avantajele limbajului PHP......................................................................................6 1.2 Sintaxa PHP...............................................................................................................7 1.3 Comentarii.................................................................................................................8 ...............................................................................................................................8 1.4 Tipuri de date n PHP.................................................................................................8 1.5 Variabile.....................................................................................................................9 1.6 Constante..................................................................................................................11 1.7 Operatori.................................................................................................11 1.8 Expresii..............................................................................................14 1.9 Tablouri...................................................................................15 1.10 Structuri de control...................................................................................16 1.10.1 Instruciuni conditionale..................................................................16 1.10.2 Instruciuni repetitive...................................................................................18 1.11 Funcii....................................................................................................19 1.11.1 Funcii predefinite .....................................................................20 1.11.2 Funcii utilizator .................................................................20 ............................................................................................................21 1.11.3 Transmiterea parametrilor............................................................21 1.11.4 Funcii recursive..............................................................................................21 1.12 Clase i obiecte.......................................................................................................21 1.12.1 Definirea unei clase.........................................................................................21 1.12.2 Constructori.....................................................................................................22 1.12.3 Motenire........................................................................................................23 1.13 Reutilizarea codului ............................................................................................23 ..................................................................................................................................23 1.13.1 Instruciunea require.......................................................................................23 1.13.2 Instruciunea include.....................................................................................24 1.14 Controlul sesiunilor................................................................................................24 Capitolul 2......................................................................................................................26 2.1 Noiuni generale.......................................................................................................26 2.2 Proiectarea unei baze de date...................................................................................27 Normalizarea unei baze de date relaionale.....................................................27 2.3 Elemente de limbaj ..................................................................................................28 2.3.1 Comentarii ..........................................................................28 2.3.2 Tipuri de date....................................................................................................28 .......................................................................................................................30 2.3.3 Operatori .....................................................................................................30 .......................................................................................................................................31 ....................................................................................................................................31 2.4 Crearea unei baze de date i gestiunea acesteia.......................................................31 2.4.1 Crearea unei tabele............................................................................................31

2.4.2 tergerea unei tabele.........................................................................................32 2.4.3 Inserarea datelor n tabele....................................................................32 2.4.4 tergerea datelor din tabele.................................................................34 2.4.5 Extragerea informaiilor din tabele.......................................................34 2.5 Folosirea alias-urilor................................................................................................36 2.6 Accesul la o baz de date................................................................................36 2.6.1 Utilizatori i parole .....................................................................................36 ..................................................................................................................37 2.6.2 Privilegii MySQL..........................................................................37 ....................................................................................................................................39 ...................................................................................................................................39 ................................................................................................................................40 Capitolul 3......................................................................................................................40 3.1 Conectarea la serverul MySQL................................................................40 3.2 Interogri.................................................................................41 3.3 Cutarea i afiarea rezultatelor........................................................................42 Concluzii........................................................................................................................43 ......................................................................................................................................43 Bibliografie....................................................................................................................44

Introducere
ntr-o epoc modern ca aceasta n care trim, poi rezolva totul cu ajutorul internetului printr-un simplu click o singur apsare a mouse-ului i ai cumprat rochia pe care i-o doreai sau ai aflat ultimele tiri. Nu ai mai intrat demult ntr-o librrie, dar ai acas toat colecia semnat Coelho, fie c trieti ntr-un mare ora sau ntr-un orael provincial, dac ai acces la internet poi face orice. Totui, pentru ca aceste lucruri s se ntample muli oameni lucreaz la actualizarea paginilor, la meninerea 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 crete. Ce ar fi dac pentru un magazin online, de exemplu, ar trebui modificate preurile sptmnal? 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 coninutul unui site sunt realizate de persoane total diferite, ceea ce ngreuneaz i mai tare realizarea de actualizri ale paginilor web. Prin proiectarea unui site fundamentat pe o baz de date se poate rezolva aceast problem. Se realizeaz separarea dintre design i coninut, astfel c este suficient s scrii o pagin pentru un anumit tip de informaie, fr a fi nevoie s copiezi mereu n vechile pagini coninutul cel nou. Implementarea unui sistem de gestiune a coninutului le va permite celor ce au modificri de facut s le realizeze singuri fr s fie nevoie de cunotine HTML. Pentru proiectarea unui astfel de site exist mai multe opiuni n ceea ce priveste limbajul de programare, ct 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 aplicaii web, prin integrarea codului PHP n documente HTML. Acestea nu vor mai fi simple pagini web, iar serverul care le ncarc vznd c este vorba despre pagini php le va trimite interpretorului PHP i va primi napoi transformat prin interpretarea codului PHP. Acest fiier va conine doar cod HTML (eventual i JavaScript) dar nu i cod PHP. MySQL este un limbaj de interogare standard pentru interaciunea cu bazele de date, un pachet software care se ocup de organizarea i gestiunea cantitilor mari de informaie. 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 perfomanelor excepionale.

Prin intermediul acestei lucrri voi prezenta avantajele combinrii celor doua tehnici de programare (PHP i MySQL) i tehnica de creare a unor pagini web cu coninut dinamic i actualizat, implementate cu ajutorul acestora. Aplicaia realizat n scopul susinerii acestei lucrri este o pagin de poezii online. Lucrarea de fa este structurat n mai multe capitole astfel : Primul capitol cuprinde noiuni fundamentale despre limbajul PHP specificnd avantajele acestuia, tipurile de baz, proprietile de baz, operatori, structuri de control, tablouri, funcii, clase, obiecte, refolosirea codului si controlul sesiunilor. Capitolul doi prezint bazele de date relaionale, ncepnd cu informaii introductive despre sistemul de gestiune a bazelor de date MySQL : utilitatea, caracteristicile i avantajele sale i continund cu procesul de concepere i de proiectare a unei baze de date relaionale, normalizarea unei baze de date, relaiile ntre tabele i tipuri de date. Urmeaz prezentarea serverul de baze de date MySQL mpreun cu noiuni SQL legate de operatori i funcii, 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 operaii efectuate asupra bazei de date. Capitolul patru prezint dezvoltarea aplicaiei, 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 seciune de Concluzii i o list cuprinztoare de referine bibliografice.

Capitolul 1
Limbajul PHP

Limbajul PHP este o modaliatate eficient de dezvoltare a aplicaiilor Web, n mod dinamic. El a fost implementat n 1994 de ctre Rasmus Lerdorf, la nceput fiind vorba numai de un proiect personal, care cuprindea cteva 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 funcionalitate 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, depind cu mult scopul su iniial. Numele s-a pstrat, dar semnificaia 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, fr 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 fr 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, incluznd Linux, multe variante de Unix (incluznd 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 putnd s lucreze ca un procesor CGI. Una dintre cele mai puternice i importante faciliti n PHP este suportul su 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 afiare de imagine, fiiere PDF i chiar filmulee Flash (folosind librriile libswf i Ming) toate generate instant. Deasemeanea, rezultatul poate s fie orice fiier text, cum ar fi XHTML sau orice alte fiiere XML.

PHP poate genera automat aceste fiiere i s le salveze n sistemul de fiiere n loc s le afieze, formnd un cache de partea serverului pentru coninutul dinamic. Deoarece PHP a fost scris special pentru crearea de pagini Web dinamice, poate efectua mult mai rapid i mai eficient unele operaii, n comparaie cu competitorii si Perl ,VCScript, Java, care nu au fost creai 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 uor de nvaat i de utilizat fa, spre exemplu , de ASP.NET care necesit cunoasterea unor noiuni de VCScript, C# ,sau fa de CGI care necesit cunostine de Perl sau de C. PHP nu are probleme de compatibilitate cu browserul. Scripturile PHP sunt interpretate de server i nimic mai mult, asadar nu trebuie s ne facem griji dac limbajul n care dezvoltam este recunoscut de browserele utilizate de clienti. PHP permite o ncarcare mai rapid pe partea clientului. JavaScript ar incetini afiarea unei pagini web pe calculatoare mai slabe, deoarece browserul trebuie s ruleze scriptul mai nti ; n cazul interpretrii de catre server, sarcina aceasta este transferat mainii 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 librrii de cod i aplicaii mari (incluznd i librria PEAR) sunt scrise folosind doar cod POO.

1.2 Sintaxa PHP


Pentru generarea dinamic de coninut pentru paginile web, scripturile sunt incluse n pagini HTML.Cnd primete un script de la serverul web, interpretorul PHP caut anumite tag-uri speciale care anun existena codului PHP, pe care o interpreteaz, lsnd nemodificat codul HTML existent. Exist mai multe modalitai 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 obinuii 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 posibiliti doar doua (<?php. . .?> i <script language="php"> . . .</script>) sunt ntotdeauna valabile; celelalate pot fi oprite din fiierul de configurare php.

n dezvoltarea aplicaiei am folosit stilul XML care tinde s fie utilizat tot mai des. La scrierea codului, instruciunile PHP din script vor fi terminate printr-un separator punct i virgul ';' asemntor celor din limbajul C, C++ sau Java. Omiterea acestui separator va genera o eroare de sintax. Interpretorul de PHP va ingnora n schimb spaiile dintre instruciuni sau dintre elementele unei instruciuni. Exemplu : 1 : <?php echo "Hello"; echo "world !"; ?> 2 :<?php echo "Hello"; echo "world !" ;?> Rezultatul va fi acelai.

1.3 Comentarii
Pentru claritatea codului programatorii obinuiesc s explice rolul anumitor linii din cadrul programului incluznd anumite comentarii. Interpretorul de PHP va ignora textul din comentarii. O modalitate de a insera un comentariu este cea n stilul C, cnd 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 pn la sfaritul liniei curente exist dou posibiliti : 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 conine o valoare de adevar. Poate conine unul din urmatoarele cuvinte cheie : TRUE sau FALSE. Integer ia valori din mulimea Z= {,-2,-1, 0, 1, 2,}, adic sunt numere fr parte fracionar. Double reprezint numerele reale, valori numerice care includ fracii zecimale. Numerele duble sunt stocate folosindu-se standardul IEEE-64, pe 64 de bii. Acest format permite valori care pot merge pn 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 conin cu precdere cifre, irurile (datele de tip string) pot conine 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 alctuiesc 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 secvene escape. Caracterele sunt cele utilizate n C, C++ sau Java.

Pentru a specifica un ir mai pot fi folosite i apostroafe. Diferena 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 acelai identificator pentru a nchide citatul. Identificatorul de nchidere trebuie s nceap n prima coloan a liniei. De asemenea trebuie s urmeze aceeai regul de numire ca orice alt etichet PHP: trebuie s conin 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 : 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, aa ncat poate fi folosit ca o list efectiv, ca un vector, un tablou hash, mulime, stiv, coad etc. Object este utilizat pentru a reine obiecte instante ale claselor n PHP mai exist doua tipuri speciale : resource i NULL Tipul resource desemneaz o variabil special, care reine o referin la o resurs extern. Resursele sunt create i utilizate de funcii 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 locaii 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 oricte 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 cnd 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 ctre variabila original i schimbrile asupra noii variabile afecteaz originalul i reciproc. Pentru a determina aceast practic s aib loc, trebuie doar s atam simbolul & la nceputul variabilei care este asignat (variabila surs). Variabilele dinamice sunt o alternativ la folosirea irurilor.Se utilizeaz atunci cnd este necesar un numr 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. 9

Indirectarea se realizeaz prin utilizarea marcajului dolar '$' n faa numelui variabilei referin. De exemplu: <?php $var1 = 5; $var2 = "var1"; echo "Valoarea din var1 este "; echo $var1; echo " sau "; echo $$var2; ?> Notaia $$var2 a fost folosit pentru a desemna valoarea reinut de variabila $var1. Exist mai multe tipuri de variable n funcie 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 funcii nu va putea fi accesat dect de instruciunile din interiorul acelei funcii. Variabile globale: o variabil definit n exteriorul unei funcii nu va putea fi accesat n interiorul funciei. Variabile globale n interiorul unei funcii: o variabil definit n afara unei funcii trebuie redeclarat ca variabil global n interiorul funciei. Fiecrui 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 msur sunt create i depind de serverul Web care ruleaz, sau sunt variabile proprii PHP. Ele sunt de fapt o mulime de tablouri predefinite ce conin 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 conine variabile disponibile prin intermediul mediului n care este executat. $_SESSION conine variabile care corespund sesiunii curente a script-ului. $_GET si $_POST conin 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 cmpurilor 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 - conine o serie de variabile ale cror valori sunt setate de serverul Web; majoritatea valorilor variabilelor din acest vector depind de mediul de execuie al scriptului curent. $_COOKIE conine valorile variabilelor ce conin informaii referitoare la cookie-urile pstrate pe calculatorul utilizatorului care acceseaz pagina Web. $_FILES conine variabile primite de script prin intermediul ncrcrilor de fiiere prin metoda POST.

10

1.6 Constante
O constant este un nume dat unei valori. O constant nu i poate modifica valoarea de-a lungul execuiei scriptului. Numele de constante sunt case-sensitive. O diferena notabil fa de variabile este aceea c numele constantelor nu sunt precedate de semnul $.Prin convenie constantele sunt scrise cu litere mari. Definirea unei constante se face folosind funcia define(). Exemplu :
<?php define("CONSTANT", "o_constanta"); echo CONSTANT; // afiseaza "o_constanta" echo Constant; // afiseaza "Constant" ?>

O constant odat definit nu poate fi modificat sau dealocat.Vizibilitatea unei constante este global.

1.7 Operatori
Pentru a putea efectua operaii asupra unor varibile i constante de diverse tipuri se folosesc anumite simboluri numite operanzi. Entitile asupra crora 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 clasificai n funcie de tipul datelor asupra crora acioneaz. Exist : Operatori aritmetici - provin din matematic i acioneaz asupra datelor de tip numeric. Acetia sunt prezentai n tabelul urmator: Exemplu Nume -$a Negaia $a + $b Adunarea $a - $b Scaderea $a * $b nmulirea $a / $b mparirea $a % $b Modulul Rezultat Opusul lui $a. Suma lui $a i $b. Diferena dintre $a i $b. Produsul dintre $a i $b. Ctul mparirii lui $a la $b. Restul mparirii lui $a la $b.

Operatorul de mparire ("/") 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 creterea/descreterea cu o unitate a varibilei opernd asupra creia 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

11

$c = ++$a; // c =3, a = 3 $d = 4 + --$a; // d = 6, a = 2 $e = 4 + $c--; // e =7 , c = 2 Dac operatorii aritmetici se aplic asupra unor valori de tip string, PHP va ncerca conversia acestora n numere. Dac conversia nu reuete, 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 stnga ia valoarea expresiei din dreapta. Valoarea expresiei este evaluat, apoi atribuit variabilei din partea stanga i, n final, returnat de operator. Valoarea unei expresii de asignare este valoarea asignat; de exemplu valoarea lui "$a = 3" este 3. Deoarece = nu este o instruciune 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 combinai care permit folosirea unei valori ntr-o expresie i apoi setarea valorii la rezultatul acelei expresii. Acetia sunt : Operator Utilizare Semnificaie += $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 bii-ajut la prelucrarea numerelor ntregi considerate ca iruri de biti. Acetia sunt : Exemplu $a & $b $a | $b $a ^ $b ~ $a $a << $b Nume i Sau Xor Negare Rezultat Biii sunt setai dac sunt setai att n $a ct i n $b Biii sunt setai dac sunt setai fie n $a fie n $b Biii care sunt setai n $a sau $b dar nu n ambele Biii care sunt setai n $a nu sunt setai n rezultat, i viceversa la Deplaseaz biii lui $a cu $b poziii spre stanga (fiecare pas nseamn nmulire cu doi) la Deplaseaz biii lui $a cu $b poziii spre dreapta (fiecare pas nseamn mparire cu doi)

Deplasare stanga Deplasare $a >> $b dreapta

Operatori logici - sunt utilizai pentru a combina valori logice n expresii.

12

Exemplu Nume Rezultat $a and $b And TRUE dac atat $a si $b sunt TRUE. $a or $b ! $a $a || $b Or Not Or
TRUE TRUE TRUE TRUE TRUE

dac fie $a fie $b sunt TRUE. dac fie $a fie $b sunt TRUE, dar nu ambele dac $a nu este TRUE. dac atat $a cat si $b sunt TRUE. dac fie $a fie $b sunt TRUE.

$a xor $b Xor $a && $b And

Operatori de comparare - sunt operatori binari care au ca scop compararea valorilor operanzilor. Rezultatul acestor operatori este unul logic, avnd valoarea true (adevarat) sau flase (fals). Operatori pe iruri de caractere- exist un singur operator pe iruri de caractere, restul operaiilor fiind efectuate prin intermediul unor funcii 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, avnd 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" => "capuni", "c" => "ciree" ) ; $c = $a + $b ; Var_dump($c) ; Va fi afisat :
array(3) { ["a"]=> string(5) "mere" ["b"]=> string(6) "banane" ["c"]=> string(6) "ciree" }

Operatori de execuie - poate fi folosit pentru a executa o comand pe interpretorul de comenzi al serverului. El const n doua apostroafe inverse '`'ntre care

13

este plasat comanda. PHP va ncerca s execute coninutul apostroafelor inverse ca o comand shell ; rezultatul va fi returnat (poate fi asignat unei variabile). Folosirea operatorului de execuie este identic utilizrii comenzii shell_exec(). Operatorul de execuie acioneaz doar dac opiunea 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 oricrei expresii, caz n care orice mesaje de eroare ce ar putea fi generate de acea expresie vor fi ignorate. Exemplu : $a = (2 / 0); // genereaz avertisment de mpartire la zero $a = @(2 / 0 ); // nu genereaza avertisment Dac opiunea track_errors este activat, orice mesaj de eroare generat de expresie va fi reinut n variabila $php_errormsg. Aceast variabil va fi suprascris la fiecare eroare. Operatorul @ se aplic doar expresiilor. Nu poate fi adugat n faa funciilor sau definiiilor de clase, sau n faa structurilor condiionale de tipul if i foreach . ternar -are sintaxa : condiie ? valoare_adevarat : valoare_fals. Operatorul evalueaz mai nti expresia logic din condiie. Se aseaman cu structura condiional if-else. Dac condiia este adevrat va ntoarce valoare_adevarat iar n caz contrar valoare_fals. Exemplu: echo ($varsta < 18) ? "minor" : "adult"; Operatorul condiional sau

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 funcii. Dac scriem $a=3, i atribuim lui $a valoarea 3. Alte exemple de expresii sunt prezentate mai jos: $condiie ? $operand1 : $operand2; $b = $a = 3; $i++; Dup atribuirea $a=3 ne ateptm ca valoarea lui $a s fie 3; aadar dac scriem $b = $a, ne ateptm s se comporte ca i cum am fi scris $b = 3. Cu alte cuvinte, $a este o expresie care are valoarea 3. Dac totul funcioneaz corect, comportamentul descris mai sus este cel ce va avea loc. n cazul irurilor de caractere ntre ghilimele trebuie acordat o mare atenie. 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!"; 14

$sir2 = '$nume are mere!'; echo $sir1; // va afisa Ina are mere echo $sir2; // va afia $nume are mere

1.9 Tablouri
Tabloul, aa 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 fiecrei intrri o cheie prin care aceasta poate fi regsita. Cheile pot fi numerice (n acest caz indicii creai implicit vor fi 0,1,2 ...) sau pot fi iruri de caractere (caz n care tabloul se numete asociativ). Valorile reinute pot avea orice tip dar sunt de acelai 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 ("capuni", "pere", "mere", "gutui", "portocale"); Accesul la elementele tabloului se face prin indecsi numerici (cu semnificaia de numere de ordine n tablou). Spre exemplu $fructe[0] are valoarea "capuni", $fructe[3] are valoarea "gutui" etc. Pentru a afla numarul curent de elemente ale unui tablou se face cu ajutorul funciei count($tablou). n PHP dimensiunea unui tablou este variabila. Pentru a aduga 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 sfritul tabloului $fructe. Tablourile n care valorilor coninute le sunt asociate chei prin care acestea pot fi regsite 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, "zahr" => 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 aduga elementul 30000 cu cheia "miere 500g" la tabloul $pret, acesta avnd acum patru elemente. Ambele tipuri de tablouri rein intern o referin (pointer) catre elementul curent de prelucrat. Acest lucru permite scrierea secvenelor pentru parcurgerea i prelucrarea elementelor lor. Instruciunea foreach este asemanatoare cu instruciunea for (combin instruciunea FOR cu funcia EACH) dar este destinat exclusiv parcurgerii de tablouri, n special a celor asociative Sintaxa acestei instruciuni are dou forme alternative: foreach (tablou as cheie => valoare_element_curent)

15

{ //instruciuni } foreach (tablou as valoare_element_curent) { //instruciuni } Prima form permite i extargerea i prelucrarea cheilor asociate, pe cnd cea de a doua form permite extragerea tuturor valorilor din tablou i prelucrarea lor individual.

1.10 Structuri de control


Pentru a putea controla fluxul de execuie al unui program sau script sunt folosite structurile de control. Ele pot fi grupate n structuri condiionale (n care codul ia decizii) i structuri repetitive, sau cicluri. Toate scripturile PHP sunt construite dintr-o serie de instruciuni. O instruciune poate fi o atribuire, un apel de funcie, un ciclu, o expresie condiional sau o instruciune vid.

1.10.1 Instruciuni conditionale


Instruciunile condiionale permit execuia condiionat a secvenelor de program. n lipsa unor astfel de instruciuni ar fi practic imposil de implementat o mare parte dintre problemele din luma real. Instruciunea IF Instruciunea if permite luarea de decizii privind execuia unei alte instruciuni sau a unui bloc de instruciuni inclus ntre acolade ('{' i '}'). Cea mai simpl sintax a instruciunii if este: if (expr) instruciune Expresia expr este o expresie (condiie) logic ce se evalueaz la true sau false. Dac evaluarea condiiei are ca rezultat o valoare adevarat se va executa instruciunea specificat, dac nu, instruciunea 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 opiuni trebuie testate mai multe condiii. Limbajul PHP pune la dispoziia programatorilor clauza elseif. Aa cum i spune i numele aceast instruciune este o combinaie ntre instruciunile else i if. n acest caz sintaxa instruciunii este:

16

if (expr1) instruciune1 elseif (expr2) instruciune2 ... elseif (exprN) instruciune Ambele variante elseif si else if (cu spatiu si fr spatiu) sunt corecte. Instruciunea SWITCH Instruciunea switch este similar cu o serie de instruciuni if care testeaz mai multe valori posibile pentru o anumit expresie. ntr-o instruciune if, condiia poate fi adevarat sau fals; ntr-o instruciune switch condiia poate avea orice numr de valori, diferite, atta timp ct se evalueaz la un tip de baz (integer, string sau double). Este necesar o instruciune case pentru a se ocupa de fiecare valoare la care trebuie s reacioneze i opional, o instruciune default pentru restul situaiilor pentru care nu sunt descrise comportamente. Se folosete n situaiile cnd dorim s comparm aceeai variabil cu diferite valori i s executm buci de cod diferite pentru fiecare caz n parte.Avantajul instruciunii switch este o scriere mai concis i mai simplu de neles i depanat. Sintaxa acestei instruciuni este: switch (expr) { case valoare_1: instruciune_1; break; case valoare_2: instruciune_2; break; ... case valoare_n: instruciune_n; break; defaut: instruciune_default; } Dupa evaluarea expresiei, valoarea obinut este comparat cu valorile din clauzele case. Dac se ntlneste o potrivire se va continua cu execuia instruciunilor din clauzele case urmtoare, pn la ntlnirea instruciunii break. Consecina este c, dac instruciunile dintr-o clauz case nu se termin cu break, se va continua execuia cu instruciunile clasei urmtoare. Observaie : Instruciunea continue aplicat n cadrul switch-ului acioneaz similar cu break. Dac avem un switch ntr-un ciclu i dorim s continum de la urmtoarea iteraie a ciclului, se folosete continue 2.

17

1.10.2 Instruciuni repetitive


Instruciunile repetitive permit implementarea algoritmilor care necesit repetarea unei secvene de calcul. Instruciunea FOR Instruciunea for este cea mai complex instruciune n PHP. Permite execuia unei instruciuni sau a unui bloc de instruciuni inclus ntre acolade ('{' i '}') i are sintaxa: for (expr1; expr2; expr3) instruciune Prima expresie (expr1) este numit expresie de iniializare i este executat necondiionat o singur data la intrarea n ciclu. Ea stabilete valoarea iniial a contorului. La nceputul fiecrei iteraii se evalueaz expr2, o condiie logic. Dac expresia este evaluat TRUE, ciclul continu prin executarea instruciunii. Dac expr2 este evaluat ca fiind FALSE execuia ciclului se termin. Aici se compar de obicei contorul cu o limit anume. La sfritul fiecrei iteraii este executat expr3 (expresie de iterare). Aceasta va ajusta la fiecare valoarea contorului ; are rolul de a asigura trecerea la pasul urmtor (incrementarea contoarelor, citirea datelor urmtoare etc.). Oricare dintre cele trei expresii pot lipsi. . Dac expr2 lipsete, ciclul ruleaz la infinit. Pentru a iei forat din ciclu se poate folosi instruciunea break.Dac expr3 este vida PHP o va considera adevrat i va cicla la infinit. n acest caz trebuie asigurat o ieire forat din bucla utiliznd una dintre instruciunile de control pentru repetiii. Instruciunea WHILE Ciclurile while sunt cele mai simple structuri repetitive n limbajul PHP. La fel ca instruciunile if, se bazeaza pe o condiie. Diferena dintre un ciclu while i o instruciune if este aceea c instruciunea if execut codul ce urmeaz odat n cazul n care condiia pe care o evalueaz este adevarat. Un ciclu while execut blocul n mod repetat, atta timp ct condiia este adevrat. De regul, se foloseste ciclul while cnd nu se cunoate n prealabil cate iteraii vor fi necesare. Cnd este necesar un numr fix de iteraii de folosete ciclul for. Structura de baz a instruciunii este: While (expr) instruciune Expresia expr este o expresie (condiie) logic ce se evalueaz nainte de fiecare repetiie. Dac rezultatul evalurii condiiei este adevrat, se va executa instruciunea specificat apoi secvena se va relua. Dac rezultatul evalurii este fals, instruciunea va fi ignorat i se va trece la instruciunea de dupa while. Instruciunea DO .. WHILE Instruciunea do-while este asemntoare cu instruciunea while dar se foloseste pentru a implementa o bucl repetitiv cu test final (evaluarea expresiei se

18

afl la sfritul ciclului). Diferena fundamental const n faptul c ciclul este executat cel puin o dat. Se iese din ciclu n momentul n care expresia este evaluat ca fiind FALSE.Ca i while, ea permite execuia unei instruciuni sau a unui bloc de instruciuni inclus ntre acolade ('{' i '}') i are sintaxa: do instruciune while (expr); Expresia expr este o expresie (condiie) logic ce se evalueaz dup fiecare repetiie. Dac, dup executarea instruciunii condiia este adevarat se va relua secvena de la nceput. n cazul n care condiia devine fals, repetiia se va ncheia i se va trece la instruciunea de dup do-while. n cazul buclei do-while, instruciunea din bucla se va executa cel puin o dat chiar i n cazul n care condiia nu este adevarat de la nceput. Instruciuni de control pentru repetiii Pentru a simplifica implementarea unoeri este necesar s se ias forat dintr-o iteraie.n PHP exist instruciuni speciale: continue, break i return. Instruciunea continue permite terminarea forata a iteraiei curente i trecerea la urmatoarea iteraie. Ea poate fi folosit cu instruciunile for, foreach, while sau do..while. Continue are rolul de a sri peste restul iteraiei curente i de a continua execuia de la nceputul urmatoarei iteraii. Continue accept opional un argument numeric ce specific din cte structuri trebuie s iese forat. Instruciunea break permite ntreruperea forata a buclei curente. Ea poate fi folosit cu instruciunile for, foreach, while, do..while sau switch. Accept opional un argument numeric ce specific din cte structuri trebuie s iese forat. Instruciunea return permite terminarea forata a funciei sau programului curent. Ea poate fi folosit n instruciunile for, foreach, while sau do..while unde, prin terminarea scriptului, termin n mod evident i bucla curent. Dac este apelat dintro funcie, return ncheie imediat execuia aesteia i returneaz argumentul su ca valoare a apelului de funcie. Dac se dorete generarea unui mesaj n pagin nainte de ncheierea scriptului, n loc de return se pot folosi funciile exit(mesaj) sau die(mesaj) die fiind un alias al funciei exit.

1.11 Funcii
O funcie este un modul de cod care ofer o interfaa de apel, rezolv un anumit algoritm i opional, returneaz o valoare.Ea grupeaz instruciunile care execut un anumit algoritm i permite refolosirea codului ori de cate ori este nevoie de acel 19

algoritm ntr-un program. Funciile reprezint pri identificabile prin nume ale unui program, care se pot lansa n execuie la cerere prin intermediul acestor nume. Funciile pot fi predefinite (existente n biblioteca de baz a limbajului) sau definite de utilizator.

1.11.1 Funcii predefinite


Funciile predefinite(de biblioteca) rezolv cele mai comune probleme legate de scopul n care a fost dezvoltat un limbaj i reprezint poriuni de cod gata scrise care pot fi reutilizate de catre toi programatorii care folosesc acel limbaj. Exemplu : echo(). PHP are un numr mare de funcii i construcii predefinite, majoritatea funciilor de bibliotec referindu-se la prelucrarea de texte, lucrul cu protocoalele internet i comunicarea cu servere de baze de date. Numele funciei identific unic codul care va fi apelat n acel loc. Spre deosebire de variabile, numele funciilor nu sunt "case-sensitive" deci pot fi scrise cu orice combinaii de litere mari/mici. Unele funcii PHP au argumente opionale, care pot fi specificate sau omise: nume_funcie( parametrul1, parametrul2, ... parametrul_n); Majoritatea funciilor returneaz valori. Se poate folosi ntr-o expresie valoarea returnat de o funcie. O situaie foarte frecvent n care se procedeaz astfel o constituie utilizarea valorii returnate de o funcie ntr-o expresie de atribuire, astfel nct valoarea s fie accesibil n mod repetat fr a se invoca funcia de mai multe ori. Valorile sunt returnate folosind opional instruciunea return. Poate fi returnat orice tip de rezultat, inclusiv tablouri i obiecte. Nu se pot returna valori multiple dintr-o funcie, dar rezultate asemntoare pot fi obinute prin returnarea unui tablou. PHP susine conceptul de funcii variabile. Aceasta nseamn c dac numele unei variabile este urmat de paranteze, PHP va cauta o funcie cu acelai nume i va ncerca s o execute.

1.11.2 Funcii utilizator


Funciile de bibliotec sunt limitate ca numr, de multe ori este necesar s se defineasc. Funcii specifice acelei aplicaii, anumite funcii utilizator. Acestea au sintaxa: Funcion nume_funcie( $arg1, $arg2, ..., $argN) { //linii de cod return $retval; } Funciile utilizator sunt disponibile doar n fiierul unde sunt declarate. Este posibil ca o funcie s nu aib argumente, la fel de bine cum o funcie poate avea mai multe argumente. Argumentele unei funcii sunt separate ntre ele prin virgule. Dac se dorete ca funcia s ntoarc o anumit valoare, trebuie determinat ca funcia s execute o instruciune return.

20

1.11.3 Transmiterea parametrilor


O problem important legat de transmiterea parametrilor o reprezint felul n care aceasta are loc: prin referina sau prin valoare. Implicit toi 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 conine valoarea de apel. Orice modificare asupra parametrului efectuat n interiorul funciei nu va fi vizibil n exteriorul acesteia. Dac dorim s permitem unei funcii s modifice argumentele sale, acestea trebuie transmise prin referin. n felul acesta nu se mai realizeaz o copie a parametrului ci, dimpotriv, la parametrii transmii prin referin numele parametrului din funcie (numit parametru formal) va referi aceeai zon de memorie ca i cea a parametrului transmis. Pentru ca un argument al unei funcii s fie transmis prin referin, trebuie s precedm cu un '&' numele argumentului n definiia funciei, ca n exemplul de mai jos. La apel, parametrilor transmii prin referin le pot corespunde doar nume de variabile nu i expresii sau constante.

1.11.4 Funcii recursive


O Funcie recursiv este o funcie care se auto-apeleaz direct sau indirect, prin intermediul altor funcii. Limbajul PHP ofer suport complet pentru funcii recursive. Utilitatea funciilor 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 nlanuite sau arbori. La aplicaiile Web utilitatea funciilor recursive este mai restrns. 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 colecie de variabile i de funcii care utilizeaz aceste variabile. Principiul de baz al orientrii 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 funcii i un set de variabile globale utilizate de acele funcii. Orice funcie poate opera folosind orice variabil global, deci structura programului este oarecum haotic. Prin contrast, un program orientat spre obiecte combin funcii i 21

variabile conexe ntr-o unitate, cunoscut sub numele de clas. Accesul la datele dintrun obiect este posibil prin intermediul operaiilor obiectului, care alctuiesc interfaa sa. Multe din proiectele Web evolueaz de la o mulime de hyperlink-uri la o aplicaie complex. Aceste aplicaii, fie prezentate prin cutii de dialog i ferestre, fie prin pagini HTML generate dinamic, au nevoie de o metodologie de dezvoltare gndit ndeaproape. O clas poate fi asimilat cu un tip definit de utilizator. Proprietile unei clase sunt variabile care descriu membrii clasei, iar metodele clasei sunt operaii 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 instane sau membri ai clasei, care sunt cunoscui sub numele de obiecte. O clas se definete utiliznd urmtoarea sintax: class nume_clas { var nume_varibilaX ;//pot fi oricte variabile funcion nume_funcieX { //corpul funciei ; pot fi oricte funcii } } n exteriorul claselor, instruciunea var este rareori folosit, deoarece PHP definete n mod automat o variabil n momentul atribuirii unei valori. Cu toate acestea, proprietile claselor trebuie definite folosind instruciunea var. Metodele sunt definite folosind cuvntul cheie funcion, ceea ce este normal, deoarece metodele, ca i funciile, execut aciuni. Diferena dintre metode i funcii este legat de amplasarea acestora; metodele sunt definite n interiorul claselor, n timp ce funciile sunt definite n exteriorul acestora. Pentru a obine accesul la un membru al clasei metodele vor folosi sintaxa $this->, care are o semnificaie similar cu aceea a pronumelui posesiv din limba romn, persoana I singular (meu). Cnd o metod face o referire de forma $this-> item, se consider c referina face trimitere la proprietatea $item a obiectului curent. PHP stabilete valoarea variabilei speciale $this la fiecare invocare a unei metode. Clasele sunt tipuri. Pentru a crea o variabil de tipul dorit se folosete operatorul new. Instanierea unei clase nseamna crearea unui obiect de tipul clasei respective.

1.12.2 Constructori
Un constructor este apelat atunci cnd este creat un obiect, i are de obicei rolul de a iniializa i seta atribute la valori de pornire sau de a crea obiecte de care are nevoie obiectul curent. Constructorul are proprietatea c posed acelai nume cu clasa n care este definit i nu ntoarce nici o valoare. PHP apeleaz automat constructorul la invocarea operatorului new.

22

1.12.3 Motenire
Motenirea permite specificarea unei clase folosind o alt clas ca punct de plecare. Clasa original se numete clas de baz sau clas printe, iar clasa specificat mai recent se numete clas derivat sau clas copil. Motenirea funcioneaz n sens unic, clasa copil motenete proprieti i metode ale clasei printe, dar clasa printe nu preia trsturi de la copil. Clasa copil sau derivat posed toate variabilele i funciile clasei de baz alturi de variabilele i funciile proprii, definite n extensie. Acest lucrul se realizeaz utiliznd cuvntul cheie extends. Motenirea multipl nu este acceptat. Exemplu: class clasa_copil extends clasa_parinte { var nume_varibilaX ; funcion nume_funcieX { //corpul funciei } }

1.13 Reutilizarea codului


Posibilitatea reutilizrii codului n locul scrierii de cod nou duce la reducerea costurilor, reducerea erorilor i creterea standardizrii 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 instruciunile require, require_once i include.

1.13.1 Instruciunea require


Instruciunea require permite includerea unui fiier extern n interiorul unui fiier script. Ea funcioneaz asemntor clauzei #include din limbajele C i C++. Sintaxa de apel este: require ( "nume_fiier_reutilizat.php" ); Aceasta instruciune require este prelucrat la ncrcarea scriptului PHP asociat, naintea legrii valorilor la variabilele corespunztoare. Dei extensia fiierului care se include nu este obligatorie, prin convenie ea este fie .php fie .inc. n momentul interpretrii scriptului, apelul instruciunii require va fi nlocuit de coninutul fiierului transmis ca i parametru i apoi acesta va fi interpretat. Fiierul poate conine orice

23

conine un script n mod normal, incluznd instruciuni PHP, tag-uri HTML, funcii sau clase PHP. Se poate observa necesitatea introducerii codului ntre taguri PHP. n absena acestor taguri, codul este interpretat ca i text (codificat HTML) i afiat ca atare la ieire. Instruciunea corelat require_once asigur faptul c fiierul specificat este inclus o singur dat ntr-un script dat. n cazul crerii de fiiere de includere care folosesc instruciunea require pentru a include coninutul altor fiiere de includere, instruciunea require_once poate fi util.

1.13.2 Instruciunea include


Instruciunea include este asemntoare cu require. O deosebire important se refer ns la modul n care se face includerea i interpretarea codului din fiierul inclus. Instruciunea require este nlocuit cu fiierul referit la ncrcarea paginii, indiferent dac execuia codului va ajunge sau nu la aceast instruciune. Instruciunea include va fi nlocuit doar n momentul n care execuia a ajuns n acel punct. O instruciune include este evaluat de fiecare data cnd este executat instruciunea i nu este evaluat deloc dac instruciunea nu este executat. Din acest punct de vedere se prefer folosirea acestei instruciuni, ea genernd o ncrcare mai mic pe server.

1.14 Controlul sesiunilor


Dupa cum se tie, protocolul HTTP este un protocol lipsit de informaii de stare. Acest lucru se traduce prin faptul c acest protocol nu are nici un mecanism propriu prin care s trasmit datele ntre dou tranzacii. La cererea succesiv a doua pagini de ctre un utilizator ctre un server de Web, nu exist nici o posibilitate de transmitere spre cea de a doua pagin faptul c este vorba despre acelai utilizator. Ideea de la care pleac controlul sesiunilor este tocmai acela de a permite urmrirea aciunilor unui utilizator pe parcursul unei sesiuni de accese ctre 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 informaii confideniale, respectiv de a pezenta coninutul paginilor personalizat dup preferinele 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 ctre PHP i meninut de ctre 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 ctre PHP prin intermediul unui scrip, aa numit mecanism session, startat prin linia de program: session_register(global)

24

Suportul pentru sesiuni n PHP const din modalitatea de a pstra anumite date n vederea accesului ulterior. Un vizitator ce acceseaz website-ul primete un id unic, aanumit id de sesiune. Acest id este fie reinut ntr-o cookie , fie propagat prin URL. Sesiunile permit nregistrarea unui numar aleator de variabile pentru a fi pstrate pentru cereri. Cnd 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. Paii care se fac la utilizarea unei sesiuni sunt urmtorii: crearea unei sesiuni nregistrarea variabilelor sesiune utilizarea variabilelor sesiune pentru controlul accesului su personalizarea paginii tergerea variabilelor sesiune i distrugerea sesiunii nainte de a utiliza o sesiune aceasta trebuie creat. Cel mai simplu mod de a porni o sesiune este acela de a apela funcia session_start(). Apelul acestei funcii creeaz automat un numr de sesiune i permite apoi utilizarea variabilelor de sesiune. Aceast funcie trebuie apelat nainte de antetul "<HTML>". O alt metod, mai puin recomandat, este metoda creri implicite a unei sesiuni n momentul n care se nregistreaz forat o variabil de sesiune. Funcia 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 funciei session_register(nume_variabila). De exemplu: $varSesiune1 = 10; session_register( "varSesiune1"); Trebuie remarcat c numele variabilei se transmite funciei ca i un ir de caractere, fr a include i semnul $. Variabila va rmne vizibil pn cnd este tears sau pn cnd sesiunea curent se incheie. Dac se dorete, se pot nregistra mai multe variabile printrun singur apel de session_register prin sintaxa: session_register( "v1", "v2" ...); Pentru a utiliza variabilele sesiune n alte pagini din aceeai sesiune exist dou metode, asemntor cu accesul la datele unui formular. Dac opiunea register_globals din php.ini este setat pe On, n toate paginile sesiunii variabila va fi accesibila direct prin nume. Dac opiunea 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 funcia session_is_registered("numeVariabila"). Aceast funcie ntoarce o valoare logic care poate fi ulterior testat. Dac se dorete la un moment dat tergerea unei variabile sesiune se poate apela la funcia session_unregister(numeVariabila). 25

Pentru a ncheia sesiunea curet i a terge toate variabilele sesiune asociate se va apela funcia session_destroy(). Aceast funcie nu primete nici un parametru i va distruge sesiunea curent mpreuna cu toate informaiile asociate. Observaie! Pentru a Funciona corect mecanismul de control al sesiunii trebuie ca n fiierul php.ini s existe setrile: session.save_path = c:/temp ; setare valabil pentru Windows (pt. Unix: session.save_path = /tmp) session.cache_limiter = private

Capitolul 2
Baze de date MySQL
2.1 Noiuni generale
O baz de date este o colecie de informaii organizate n aa fel ncat un program poate selecta rapid anumite pri din acea informaie.Pentru a putea accesa informaiile 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 relaii i constrngeri de intergritate. Pentru gestiunea datelor foloseste limbajul SQL (Structured Query Language) care este un standard n acest domeniu. 26

MySQL este un sistem client-server, serverul MySQL suportand o palet larg de programe client, scrise n diverse limbaje de programare.De obicei, serverul de date este separat logic i fizic de programele client care asigur interfaa operaiilor cu baza de date. MySQL este un sistem de gestiune al bazelor de date relaional. Principiile algebrei relaionale au fost stabilite de F. C. Codd n 1970. Ea reprezint fundamentarea matematic a bazelor de date relaionale. n concepia relaional o baz de date este format dintr-o colecie de relaii (tabele, fiiere de date) asupra crora se aplic o colecie de operatori pentru a gestiona datele coninute de relaii. Un operator relaional se aplic asupra unor tabele i va avea ca i rezultat tot o tabel. Potrivit algebrei relaionale nu este permis accesul direct asupra nregistrarilor dintr-o tabel. Avantaje ale utilizarii bazelor de date relaionale: facilitarea partajrii datelor, asigurarea independenei datelor, interogarea ad-hoc, organizarea datelor, securitatea datelor, reducerea la minimum a experienei necesare n domeniul programrii, eficien n prelucrarea datelor.

2.2 Proiectarea unei baze de date


Proiectarea unei baze de date este foarte important pentru succesul aplicaiei pentru care este realizat. Primul pas const n analiza aplicaiei, iar cel de-al doilea n normalizarea bazei de date, un proces complex i de durat care contribuie esenial la evitarea problemelor i complicaiilor ulterioare. Normalizarea unei baze de date relaionale Normalizarea unei baze de date const n descompunerea modelului bazei de date n mai multe relaii astfel nct s se reduc la maxim redundana datelor i implicit s elimine anomaliile de actualizare. Normalizarea bazei de date presupune aducerea relaiilor gradual pe diverse forme normale. Exist apte forme normale.Fiecare form normal preia constrngerile formei anterioare la care adaug noi condiii. Prima form normal O relaie este n prima form normal dac i numai dac fiecare atribut din fiecare linie poate conine numai o singur valoare. A doua form normal O relaie este n a doua form normal dac i numai dac ea este n prima form normal i orice atribut non cheie este dependent funcional complet de cheia primar. A treia form normal O relaie 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 relaie este n forma normal Boyce-Codd dac fiecare deteminant este cheie candidat. A patra form normal O relaie este n a patra form normal dac i numai dac ori de cte ori exist o dependen multivaloric de un determinant, toate atributele sunt dependente funcional de determinant. 27

A cincea form normal O relaie este n a cincea form normal dac i numai dac ea nu poate fi spart n relaii mai mici si apoi reunit fr a-i schimba faptele i semnificaiile. A sasea form normal Cea de-a sasea form normal a fost definit de curnd i este definit doar cand este luat n considerare i dimensiunea temporal. Factori care influeneaz, de asemenea, proiectarea sunt de cutare a informaiilor, factor esenial care cere uneori repetarea datelor n tabele i deci, nclcarea unor forme normale i viteza de adugare i modificare a datelor, care cere uneori reorganizarea datelor. Nu n ultimul rnd spaiul pe disc este i el un criteriu important n cadrul proiectrii unei baze de date. Chiar dac n zilele noastre discurile au capaciti foarte mari, o baz de date cu redundan mare, pe lang ca ocup inutil foarte mult spaiu, este i foarte greu de accesat (viteza de cautare n tabele este n general proporional cu dimensiunea acesteia). Proiectarea bazei de date se face folosind procedeul cunoscut sub numele de modelare entitate-relaie sau modelare E-R. n acest context, o entitate este similar cu un tablou relaional. Modelarea E-R este un proces n cadrul cruia coloanele, entitile i relaiile ntre entiti sunt descoperite i organizate. Un model E-R poate fi folosit cu uurin, pentru a genera o structur a bazei de date, care poate fi transformat ntr-o baz de date relaional 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 sfaritul liniei: comentarii care ncep cu semnul # sau comentarii care ncep cu semnul ( este necesar cel puin un spaiu 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 mprite 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 numr ntreg foarte mic. Intervalul de valori posibile este [-128..127]. 2. SMALLINT : repezint un numr ntreg mic. Intervalul de valori posibile este [-32768..32767]. 3. MEDIUMINT : reprezint un numr ntreg mediu. Intervalul de valori posibile este [-8388608..8388607].

28

4. INT sau INTEGER: reprezint un numr ntreg normal. Intervalul de valori posibile este [-2147483648..2147483647]. 5. BIGINT : reprezint un numr ntreg mare. Intervalul de valori posibile este [9223372036854775808..9223372036854775807]. 6. FLOAT : reprezint un numr n virgul flotant, simpl precizie (numr 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 numr real n virgula flotant, dubl precizie. 8. DECIMAL (L) sau NUMERIC (L): reprezint un numr n virgul flotant nempachetat. L- lungimea, care spre deosebire de celelalte tipuri la care nu trebuie specificat.

Tipuri de date de tip dat calendaristic i timp 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 combinaie 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 reine 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 delaraia 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. 29

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 mulime de elemente de tip ir de caracter. Un obiect de acest tip poate conine la un moment dat mai multe valori distincte dintre cele definite sau poate fi gol (nu conine nici o valoare). Un tip mulime poate defini maxim 65 de valori membru.

2.3.3 Operatori
Operatori aritmetici : opereaz asupra numerelor ntregi cu precizia BIGINT (pe 64 biti). Sunt disponibili urmatorii operatori: + : adunare; - : scdere; * : nmulire; / : mprire; dac se mparte la 0 rezultatul va fi NULL. Operatori logici : ntorc 1 pentru adevarat i 0 pentru fals. 1. NOT: ! - Negaie logic. ntoarce 1 dac argumentul este 0, altfel ntoarce 0. Excepie: NOT NULL ntoarce NULL. 2. OR: || - SAU logic. ntoarce 1 dac cel puin un argument nu este 0 sau NULL 3. AND : && - I logic. ntoarce 0 sau NULL dac cel puin un argument este 0 sau NULL, altfel ntoarce 1. Operatori de comparare : returneaz 1 pentru adevrat, 0 pentru fals i NULL dac nu se poate efectua comparaia. 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;

30

<= - mai mic sau egal; > - mai mare; >= - mai mare sau egal; <=> - echivalen; la compararea cu NULL ntoarce 0 sau 1 (1 doar la NULL <=> NULL); dac ambii operanzi sunt diferii de NULL se comport ca i =;

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 instruciune USE: USE nume_bd ; Aceast instruciune este una din puinele care nu necesit caracterul punct i virgul ca terminare a instruciunii, dei poate fi adugat.

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 aceleai nume, ele nu vor interfera. 31

IF NOT EXISTS - inhib mesajul de eroare care se genereaz dac la ncercarea de a crea o tabel care mai exist. NOT NULL / NULL - nu se permit valori NULL n acest camp (campul trebuie completat n orice situaie) /permite valori NULL n camp (opiune implicit dac nu se specific nimic) DEFAULT default_value - completeaz cmpul lasat liber cu valoarea implicit default_value AUTO_INCREMENT - dac nu se insereaz nimic n cmp, se va genera automat o valoare mai mare cu o unitate fa de cea mai mare valoare din acel cmp. Poate fi specificat o singur coloan cu acest parametru ntr-o tabel. Coloanele specificate astfel trebuie indexate. PRIMARY KEY - specific cheia primar pentru tabel. Un singur cmp 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), vrst 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 (adugarea) de noi nregistrri ntr-o tabel. Deoarece sistemul mySQL este pur relaional, nu exist nici o diferen ntre 32

inserarea de noi date sau adugarea lor. n ambele situaii, locul n care se face adugarea 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 ntrzia scrierea efectiv a datelor n tabela pn cnd ali utilizatori nu mai citesc date din tabel. Acest lucru avantajeaz citirea dar ntrzie, semnificativ pentru o tabel foarte utilizat, scrierea. Efectul este blocarea execuiei pn cnd se reuete scrierea efectiv. DELAYED - are aciune opus parametrului precedent. nregistrarea care trebuie adugat este pus ntr-o coad de ateptare pe server i controlul revine la client, ca i cum scrierea ar fi fost fcut efectiv. Avantajul const n timpul mic de execuie a comenzii INSERT pe o tabel utilizat intensiv. Dezavantajul const n ncrcarea serverului cu o operaie n plus i n pierderea datelor dac serverul se oprete neateptat. Din aceast cauz parametrul este folosit doar cnd este cu adevrat necesar. IGNORE - este util dac se insereaz mai multe nregistrari simultan (n acest caz lista de dup VALUES va conine mai multe seturi de date n paranteze, desprite prin virgul). De obicei, MySQL raporteaz eroare i nu execut comanda care ncearc adugarea a cel puin unei nregistrri care duplic cheia primar sau cmpuri cu valori unice. Prin folosirea parametrului IGNORE nregistrrile greite sunt ignorate, dar restul sunt adugate fr raportarea unei erori. Dup execuia comenzii se va raporta doar numrul de nregistrri a cror adugare a reuit. INTO - este opional, se folosete pentru compatibilitate cu alte sisteme SQL. Datorit claritii mai mari a interogrii se prefer totui utilizarea lui. col_nume,... - este o list de coloane care specific ordinea n care se vor aduga datele n tabel. Prin aceasta se pot insera doar datele considerate eseniale, restul primind valorile implicite specificate la declararea tabelei. Dac lista lipsete, setul de date furnizat trebuie s aib valori pentru toate cmpurile, n ordinea din declararea tabelei. VALUES (expresie, ...),(...) - specific datele ce vor fi adugate n tabel. Ele trebuie s respecte numarul i ordinea coloanelor de la declararea tabelei sau, dac e specificat, numarul i ordinea cmpurilor din lista de coloane (col_nume,...) prezentat anterior. Exemplu: INSERT INTO persoan VALUES ("Olaru", "Niculina",22) ;

33

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 condiie] [LIMIT NUMBER] LOW PRIORITY - este folosit pentru a ntarzia scrierea efectiv a datelor n tabel pn cnd ali utilizatori nu mai citesc date din tabel. IGNORE - este util dac se insereaz mai multe nregistrri simultan (n acest caz lista de dup VALUES va conine mai multe seturi de date n paranteze, desprite 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 lipsete, vor fi actualizate toate nregistrrile. LIMIT permite setarea numrului de nregistrri 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 condiie_tergere] [LIMIT NUMBER] Parametri au aceeai semnificaie 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 informaiilor din tabele


Comanda SELECT este cea mai utilizat comand SQL, deoarece permite att regsirea i vizualizarea datelor din tabelele bazei de date ct i calcularea unor expresii care nu au legtur cu datele din tabele. Sintaxa de baz a comenzii este:

34

SELECT itemi FROM nume_tabel [ WHERE condiie ] [ GROUP BY {colan | expresie} ] [ HAVING condiie_includere_grup] [ ORDER BY tip_ordonare ] [LIMIT criteriu_de_limitare ] ; FROM - specific tabela sau tabelele din care se selecteaz datele. n cazul n care referina cuprinde mai multe tabele operaia este una de JOIN. WHERE - specific condiia de includere a datelor n selecie. Permite selecia doar a datelor care intereseaz la un moment dat. n cazul operaiunii de JOIN aici se vor aduga i constrngerile date de relaiile dintre tabele. Condiia de selecie const dintr-o expresie logic simpl sau complex. 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 (ncepnd cu 1). Ordonarea se face dup prima coloan din list. n cazul n care dou nregistrri au aceiai valoare pentru coloana respectiva se va lua n considerare a doua coloan din list (dac este specificat) etc. Parametrii ASC i DESC specific ordonarea cresctoare, respectiv descresctoare a nregistrrilor n rezultat. Pentru a selecta toate nregistrrile dintr-o tabel se va folosi * : SELECT * FROM nume_tabel ; Dac se dorete enumerarea tuturor nregistrrilor ce satisfac o anumit condiie se va proceda n felul urmator : SELECT * FROM nume_tabela WHERE condiie ; Clauza GROUP BY specific dupa ce valoare se va face gruparea. n majoritatea cazurilor expresia de grupare este reprezentat de o singur coloan. Toate nregistrrile cu aceeai valoare pentru expresia de grupare vor fi considerate ca fcnd parte din acelai grup. Clauza HAVING permite selectarea grupurilor care sunt luate n considerare. Condiia din HAVING se aplic dup constituirea grupului, pe cnd condiia din clauz WHERE n timpul selectrii nregistrrilor. n plus, acest clauz poate cuprinde doar referine la cmpuri i aliasuri de cmpuri din lista de cmpuri a comenzii SELECT sau funcii de sumarizare pe grup. MySQL include funcii care permit raportarea valorilor agregate, precum un numr al rndurilor tabelului. Exemple de funcii de agregare: -count(*) = numrul rndurilor din tabel -avg(coloana) = valoarea medie a coloanei numerice specificate -min(coloana) = valoarea minim pentru coloana specificat

35

-sum(coloana) = suma valorilor din coloana respectiv

2.5 Folosirea alias-urilor


Scrierea instruciunilor poate fi simplificat prin folosirea unor denumiri prescurtate, numite alias-uri. Adesea este de ajutor i uneori chiar esenial s ne putem referi la tabele folosind alte nume. Alias-urile pot fi folosite att pentru a desemna tabele ct i coloane. Ele pot fi create la nceputul unei interogari i folosite pe tot parcursul ei. Sintaxa de definire a unui alias este urmtoarea: SELECT nume_tabel.col_nume [AS] alias_c1,... FROM nume_tabel ORDER BY alias_c1 ...; 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 cnd dorim s efectum un JOIN ntre o tabel i ea inssi. Acest lucru suna dificil, dar nu este chiar aa. Este folositor, de exmplu, dac dorim s regsim nregistrri dintr-o aceeai 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 diferene 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 cnd n majoritatea implementrilor UNIX aceast valoare este de 8 caractere. O alt diferen ar fi aceea ca numele utilizatorilor i parolele sunt pstrate separat de mySQL i nu au nimic n comun cu cele din sistemul de operare. Nu n ultimul rnd, 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 interaciona cu serverul trebuie creat un utilizator. Un sistem MySQL poate avea mai muli 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).

36

2.6.2 Privilegii MySQL


Privilegiile n MySQL se refer n principal la autentificarea i autorizarea utilizatorilor conectai la server. Autorizarea se refer la permisiunea de a rula interogri precum SELECT, INSERT, UPDATE sau DELETE. Pentru a spori securitatea oricrui calculator, nu numai a serverului MySQL se aplic principiul "minimului de privilegii necesare".Dei este foarte simplu, este foarte important : Un utilizator (sau proces) trebuie s aib cel mai sczut nivel de privilegii, suficient pentru a putea executa sarcinile care i-au fost alocate. Informaiile despre privilegii sunt stocate n tabelele user, db, host, tables_prv i columns_priv din baza de date mysql. Serverul va citi coninutul acestor tabele ori de cte ori sistemul de privilegii trebuie s acioneze. Exist trei tipuri de baz de privilegii: privilegii pentru utilizatorii obinuii, privilegii pentru administratori i cteva privilegii speciale. Privilegiile pentru utilizatorii obinuii 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 nregistrri 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 nregistrri din tabele. INDEX - se aplic tabelelor i permite utilizatorilor s creeze i s insereze indeci n tabele. ALTER - se aplic tabelelor i permite utilizatorilor s modifice structura tabelelor exsiente prin adugare 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 ctre un alt utilizator. Drepturile administratorului sunt :

37

PROCESS - permite administratorului s vad procesele care ruleaz pe server i s le opreasc. Este utilizat pentru a vedea coninutul interogarilor ce se executa n acel moment, inclusiv cele de setare a parolei. De asemenea el d posibilitatea opririi forate a conexiunilor altor utilizatori. RELOAD - permite administratorului s rencarce 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. USAGE - nu ofer nici un privilegiu. Va fi creat un utilizator cruia 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 obinuiete s se restricioneze 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 desparite 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 crora 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 obine prin folosirea unei liste de coloane nevide.

38

nume_utilizator - este numele utilizatorului cruia i se atribuie privilegiile. El poate conine i un nume de staie de pe care are dreptul s se conecteze. parola - specific parola cu care utilizatorul se va conecta. Parola trebuie n general s nu fie uor de ghicit (s nu fie chiar numele contului sau un cuvnt din dicionar). Opiunea IDENTIFIED BY este obligatorie deoarece dac lispsete, utilizatorul se va putea conecta fr parol. WITH GRANT OPTION - d dreptul utilizatorului s dea privilegii echivalente cu ale sale altor utilizatori. Acest opiune poate fi utilizat pentru a delega dreptul de administrare, inclusiv creare de utilizatori, unor administratori ale unor baze de date particulare de pe server. Aceti administratori nu vor putea ns s interacioneze cu alte baze de date. Exist posibilitatea vizualizrii privilegiilor. Aceasta se realizeaz cu ajutorul comenzii: 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

39

Capitolul 3
PHP i MySQL
n PHP sunt implementate o serie de funcii pentru conectarea i comunicarea cu server-ul MySQL. Folosind aceste funcii, un program PHP poate obine accesul la bazele de date rezidente ntr-o baz de date MySQL i le poate modifica. Pentru a utiliza cu success funcii PHP pentru a comunica cu serverul MySQL, trebuie ca MySQL s ruleze pe o locaie la care serverul web folosit s se poat conecta (nu neaprat aceeai maina 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 conectm.

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 comunicaie prin care programul transmite cereri SQL, iar serverul returneaz raspunsurile corespunztoare. Din PHP se pot stabili dou tipuri de conexiuni ctre un server MySQL: persistente i nepersistente. O conexiune persistent se pstreaz dup prima utilizare chiar i dup terminarea paginii curente sau dup apelul mysql_close. Orice deschidere a unei noi conexiuni cu aceiai parametrii va reutiliza pe cea veche n locul crerii uneia noi. Ele se realizeaz prin apelul funciei mysql_pconnect. Un avantaj al conexiunilor pemanente este viteza de stabilirea a conexiunilor, resimit n timpi de rspuns mai buni ctre utilizatori. Ca dezavantaj putem meniona blocarea ndelungat a unei conexiuni ctre server, afectnd numrul de clieni care sunt acceptai spre a fi servii.

40

O conexiune nepersistent va fi distrus la terminarea paginii sau la apelul mysql_close. Se realizeaz prin apelul mysql_connect. Avantajele conexiunilor temporare: nu blocheaz conexiunea dect pe perioada interpretrii scriptului, iar dezavantajul este timpul mai mare de rspuns datorat crerii unei noi conexiuni la fiecare apel. Ambele tipuri de conexiuni asigur aceiai funcionalitate. Singura diferen dintre ele const n eficiena cu care se trateaz deschiderea unei conexiuni raportat la cantitatea de resurse blocate. Sintaxa lor este asemntoare: resource mysql_pconnect ( string server , string utilizator , string parol ) resource mysql_connect ( string server , string utilizator , string parol ) Parametri au urmtoarea semnificaie: server - specific numele mainii pe care ruleaz serverul de mySQL. Dac serverul de Web i cel de mySQL ruleaz pe aceiai main, numele poate fi "localhost". n cazul n care serverul de mysQL s-a instalat pe alt port dect 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 crete securitatea siteului. parola - este un ir de caractere cuprinznd parola n clar a utilizatorului specificat. Deoarece liniile php nu traversez serverul Web, aceast parola nu poate fi citit de utilizator prin comanda View Source a navigatorului Web. Singura problem apare dac cineva neautorizat are acces local la sistemul de fiiere de pe server i poate citi direct fiierul 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 ); Funcia returneaz false n caz de eec.

3.2 Interogri
n cadrul limbajului PHP interogrile sunt emise cu ajutorul comenzii:

41

resource mysql_query ( string query ); i exist dou categorii de interogri: interogrile SELECT, i interogrile UPDATE, INSERT i DELETE. Pentru a aduga informaii n baza de date trebuie transmis din pagina de PHP o interogare INSERT spre serverul de mySQL. Transmiterea unei interogri SQL spre server se poate face cu ajutorul funciei mysql_query. Aceasta funcie presupune existena unei conexiuni deschise spre server, selecia prealabil a bazei de date i existena unor drepturi suficiente pentru rularea interogrii. Dac interogarea transmite napoi un rezultat (SELECT, DESCRIBE, EXPLAIN sau SHOW), funcia returneaz un identificator spre resursa reprezentat de rezultat. n cazul interogrilor aciune (INSERT, DELETE, UPDATE etc.) funcia va retura TRUE dac s-a executat corect interogarea. n ambele situaii funcia returneaz FALSE dac interogarea nu a putut fi executat de server. Spre deosebire de interogrile UPDATE, INSERT i DELETE, interogrile SELECT returneaz rnduri de tabel. Rndurile unui tabel sunt incluse ntr-o structur numit set de rezultate. Prelucrarea setului de rezultate returnat de o interogare SELECT implic parcurgerea prin iteraie a rndurilor setului de rezultate. Pentru a obine valoarea numrului de rnduri se folosete funcia mysql_num_rows(). Funcia mysql_fetch_row() se poate folosi pentru a obine urmtorul rnd din secvena setului de rezultate. Pentru a evita problemele care apar din cauza caracterelor speciale interpretate diferit de mySQL i PHP, valorile variabilelor trebuie transformate corespunztor prin utilizarea funciei addslashes: string addslashes ( string parametru) .Pentru a afla numarul nregistrrilor afectate de o interogare aciune se poate folosi funcia mysql_affected_rows: int mysql_affected_rows ( );

3.3 Cutarea i afiarea rezultatelor


Pentru a cuta informaii ntr-o baz de date se vor utiliza interogri SELECT. Procedura de transmitere a unor astfel de interogri este asemntoare cu cea pentru interogri aciune. Diferena major la interogrile de tip SELECT const n necesitatea de a afia rezultatul interogrii. n urma rulrii unei interogri de cutare se va folosi funcia mysql_num_rows() pentru a afla numrul de nregistrri din rezultat. Acestei funcii i se va transmite ca i parametru referina rezultata n urma apelului funciei mysql_query(). Exist trei metode diferite de a interpreta i prelucra rezultatul unei interogri SELECT: Rezultatul este preluat prin funcia 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 funciei

42

mysql_fetch_array() va returna urmatoarea nregistrare din rezultat. Cnd nu mai sunt disponibile nregistrri, funcia va retuna valoarea FALSE. Rezultatul este preluat prin funcia 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 poziiile respective din rezultat. Fiecare apel succesiv al funciei mysql_fetch_row() va returna urmatoarea nregistrare din rezultat. Cnd nu mai sunt disponibile nregistrri, funcia va retuna valoarea FALSE. Rezultatul este preluat prin funcia 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 funciei mysql_fetch_object va returna urmatoarea nregistrare din rezultat. Cnd nu mai sunt disponibile nregistrari, funcia va retuna valoarea FALSE.

Concluzii
Prima ntrebare pe care cititorul acestei lucrri ar gndi-o, probabil, este referitoare la faptul c prin intermediul aplicaiei nu poi cumpra nimic i poate prea fr folos. Dar nainte de a ntreba i-ar da seama c majoritatea aplicaiilor dezvoltate cu ajutorul tehnologiilor PHP i MySQL sunt magazinele online i bibliotecile-librrii virtuale, de unde poi cumpra orice. Dei exist multe cri ce pot fi cumprate, nu mereu ne permitem s cumprm; i dac ne permitem s cumprm, nu avem timp s le rsfoim. Prin intermediul acestei lucrri am ncercat s evideniez utilitatea combinrii 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 uor de invat. 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 relaional i este distribuit in regim gratuit, ca i PHP-ul. Alegerea a fost influenat i de facilitatea realizrii unei intefee prietenoase i uor de inteles. Aplicaia este realizat pentru a folosi tuturor, att celor care vor deveni membrii fideli i vor ajuta la imbuntirea paginii de internet, ct i celor care, pentru a evada din rutin, se vor relaxa pentru cteva minute citind o poezie. Bine nteles, pe internet exist multe pagini pe care se pot gsi poezii, dar aceasta pagin va destinat ntru totul domeniului literar. Membrii vor putea s i mprteasc gndurile, s i spun prerea despre o anumit poezie, vor putea veni cu noi idei pentru aceast pagin. Sistemul de notare existent are rolul de a spori interesul i dorina membrilor de a posta noi poezii care s fie printre primele n topul poeziilor. Urmtorul pas in cadrul paginii va fi realizarea unui forum unde utilizatorii s poat discuta pe baza poeziilor, i nu numai. Prerile si ideile utilizatorilor vor fi importante pentru dezvoltarea continu a acestei pagini.

43

Bibliografie

Nr. crt.
1 2 3 4

Titlu
PHP-Portal Dynamic site with PHP_MySQL PHP 4 A BEGINNER'S GUIDE PHP Manual

Autor
http://www.php.maelvi.ro/pgs/tut_mysql_date.php Ashraful Anam Bill McCarty, traducere de Mihai Mnstireanu 2002 Teora Stig Sther Bakken, Alexander Aulbach, Egon Schmid, Jim Winstead Lars Torben Wilson Rasmus Lerdorf Andrei Zmievski Jouni Ahto or http://www.php.net/docs.php Graeme Merral Luke Welling and Laura Thomson Michael Glass, Yann Le Scouarnec, Elizabeth Naramore, Gary Mailer, Jeremy Stolz, Jason Gerner Build your own database driven website using PHP and MySql SitePoint, August 2001

5 6 7 8

PHP/MySQL Tutorial PHP and MySQL. Web Development Beginning PHP, Apache, MySQL Web Development Kevin Yank

44

You might also like