-php.html. mysql

download -php.html. mysql

of 46

Transcript of -php.html. mysql

  • 8/18/2019 -php.html. mysql

    1/46

    UNIVERSITATEA DE VEST TIMIŞOARA FACULTATEA DE MATEMATICĂ ŞI INFORMATICĂ DEPARTAMENTUL D INFORMATICĂ

    LUCRARE DE LICENŢĂ

    STUDENTĂ: OLARU NICULINA BIANCA

    COORDONATOR: LECT. HORIA POPA

    TIMIŞOARA IUNIE 2007

    1

  • 8/18/2019 -php.html. mysql

    2/46

    CuprinsIntroducere..............................................................................................................4 ......................................................................................................................5 Capitolul 1........................................................................................................................6 1.1 Avantajele limbajului PHP......................................................................................6 1.2 Sintaxa PHP...............................................................................................................7 1.3 Comentarii.................................................................................................................8 ..................................................

    .............................................................................8 1.4 Tipuri de date în PHP..........................................................

    .......................................8 1.5 Variabile..........................

    ................................................................................

    ...........9 1.6 Constante......................................................

    ............................................................11 1.7 Operatori....

    ................................................................................

    .............11 1.8 Expresii....................................................

    ..........................................14 1.9 Tablouri.......................

    ............................................................15 1.10 Structuri de control...................................................................................16 1.10.1 Instrucţiuni conditionale..................................................................16 1.10.2 Instrucţiuni repetitive...................

    ................................................................18 1.11 Funcţii...................................................................................

    .................19 1.11.1 Funcţii predefinite ...................................

    ..................................20 1.11.2 Funcţii utilizator ...................

    ..............................................20 ...............................

    .............................................................................211.11.3 Transmiterea parametrilor............................................................21 1.11.4 Funcţii recursive..............................................................................................21 1.12 Clase şi obiecte.......................................................................................................21 1.12.1 Definirea unei clase.........................................................................................21 1.12.2 Constructori...................................................................................

    ..................22 1.12.3 Moştenire........................................................................................................23 1.13 Reutilizareacodului ............................................................................................23 ..................................................................................................................................23 1.13.1 Instrucţiunea require.......................................................................................23 1.13.2 Instrucţiunea include.....................................................................................24 1.14 Controlul sesiunilor................................................................................................24 Capitolul 2......................................................................................................................26 2.1 Noţiuni generale.......................................................................................................26 2.2 Proiectarea unei baze de date.

    ..................................................................................27 Normalizarea unei baze de date relaţionale...................................

    ..................27 2.3 Elemente de limbaj ....................................

    ..............................................................28 2.3.1 Comentarii ..........................................................................28 2.3.2 Tipuri de date....................................................................................................28 .......................................................................................................................30 2.3.3 Operatori .....................................................................................................30 ....................................

  • 8/18/2019 -php.html. mysql

    3/46

    ................................................................................

    ...................31 ..........................................................

    ..........................................................................31 2.4 Crearea unei baze de date şi gestiunea acesteia.......................................................31 2.4.1 Crearea unei tabele............................................................................................31

    2

  • 8/18/2019 -php.html. mysql

    4/46

    2.4.2 Ştergerea unei tabele.........................................................................................32 2.4.3 Inserarea datelor în tabele....................................................................32 2.4.4 Ştergerea datelor din tabele.................................................................34 2.4.5 Extragerea informaţiilor din tabele.......................................................34 2.5 Folosirea alias-urilor................................................................................................36 2.6 Accesul la o bază de date................................................................................36 2.6.1 Utilizatori şi parole .....................................................................................36 ..................................................................................................................3

    7 2.6.2 Privilegii MySQL..........................................................................37 ....................................................................................................................................39 ...................................................................................................................................39 ................................................................................................................................40 Capitolul 3......................................................................................................................40 3.1 Conectarea la serverul MySQL................................................................40 3.2 Interogări.................................................................................41 3.3 Căutarea şi afişarea rezultatelor........................................................................42 Concluzii.................................................................................................

    .......................43 ......................................................................................................................................43 Bibliografie....................................................................................................................44

    3

  • 8/18/2019 -php.html. mysql

    5/46

    IntroducereÎntr-o epocă modernă ca aceasta în care trăim, poţi rezolva totul cu ajutorul interneturintr-un simplu `click' ± o singură apăsare a mouse-ului şi ai cumpărat rochia pe care ai sau ai aflat ultimele ştiri. Nu ai mai intrat demult într-o librărie, dar ai acasă tată colecţia semnată Coelho, fie că trăieşti într-un mare oraş sau într-un oraşel proviacces la internet poţi face orice. Totuşi, pentru ca aceste lucruri să se întample mulţameni lucrează la actualizarea paginilor, la menţinerea acestora sub o formă interesantă, care să atragă mereu vizitatori. Cum internetul este într-o continuă dezvoltare, şiia de a implementa pagini web dinamice creşte. Ce ar fi dacă pentru un magazin online, de exemplu, ar trebui modificate preţurile săptămânal? Asta ar însemna rescrierea suor de resurse HTML, şi un timp exagerat de mare. Şi la aceasta se mai adaugă şi faptul

    designul şi conţinutul unui site sunt realizate de persoane total diferite, ceea ce îngreunează şi mai tare realizarea de actualizări ale paginilor web. Prin proiectarea unui site fundamentat pe o bază de date se poate rezolva această problemă. Se realizează epararea dintre design şi conţinut, astfel că este suficient să scrii o pagină pentru unumit tip de informaţie, fără a fi nevoie să copiezi mereu în vechile pagini conţinutulnou. Implementarea unui sistem de gestiune a conţinutului le va permite celor ce au modificări de facut să le realizeze singuri fără să fie nevoie de cunoştinţe HTML. Peoiectarea unui astfel de site există mai multe opţiuni în ceea ce priveste limbajul de programare, cât şi sistemul de management al bazei de date. Trebuie avut în vedere faptul că nu toate limbajele de programare se pot conecta la toate bazele de date. Cea mai potrivită alegere pentru realizarea unui web site dinamic este utilizarea PHP şi MySQL . PHP este un limbaj de scripting utilizat pe scară largă, realizat şi distibuit în sistem Open Source, care este special realizat pentru a dezvolta aplicaţii

    web, prin integrarea codului PHP în documente HTML. Acestea nu vor mai fi simple pagini web, iar serverul care le încarcă văzând că este vorba despre pagini php le va trte interpretorului PHP şi va primi înapoi transformat prin interpretarea codului PHP. Acest fişier va conţine doar cod HTML (eventual şi JavaScript) dar nu şi cod PHP. MySL este un limbaj de interogare standard pentru interacţiunea cu bazele de date, un pachet software care se ocupă de organizarea şi gestiunea cantităţilor mari de informa. Apache este un server web open-source pentru UNIX, Windows 2000 sau alte platforme. Apache a devenit în prezent cel mai popular şi des folosit Web server, datorităcaracteristicilor puternice şi a perfomanţelor excepţionale.

    4

  • 8/18/2019 -php.html. mysql

    6/46

    Prin intermediul acestei lucrări voi prezenta avantajele combinării celor doua tehnici de programare (PHP şi MySQL) şi tehnica de creare a unor pagini web cu conţinut dinamic şi actualizat, implementate cu ajutorul acestora. Aplicaţia realizată în scopul sunerii acestei lucrări este o pagină de poezii online. Lucrarea de faţă este structuratăai multe capitole astfel :  Primul capitol cuprinde noţiuni fundamentale despre limbajul PHP specificând avantajele acestuia, tipurile de bază, proprietăţile de bază, opeori, structuri de control, tablouri, funcţii, clase, obiecte, refolosirea coduluisi controlul sesiunilor.  Capitolul doi prezintă bazele de date relaţionale, începând informaţii introductive despre sistemul de gestiune a bazelor de date MySQL : utilitatea, caracteristicile şi avantajele sale şi continuând cu procesul de concepere şi d proiectare a unei baze de date relaţionale, normalizarea unei baze de date, relaţii

    le între tabele şi tipuri de date. Urmează prezentarea serverul de baze de date MySQL îpreună cu noţiuni SQL legate de operatori şi funcţii, implementarea, crearea, ştergereaodificarea, sortarea în baze de date.  Capitolul trei combină cele două tehnici de proramare PHP şi MySQL si prezintă modul de conectare la baza de date prin intermediullimbajului PHP şi diverse operaţii efectuate asupra bazei de date.  Capitolul patru prezintă dezvoltarea aplicaţiei, pagina de poezii online, de la crearea bazei de date şi conectarea la aceasta, la forma finală în care utilizatorul poate accesa pagina de internet.

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

    5

  • 8/18/2019 -php.html. mysql

    7/46

    Capitolul 1Limbajul PHP

    Limbajul PHP este o modaliatate eficientă de dezvoltare a aplicaţiilor Web, în mod dinamic. El a fost implementat în 1994 de către Rasmus Lerdorf, la început fiind vorba numai de un proiect personal, care cuprindea câteva scripturi PERL ce monitorizau accesul la pagina web a acestuia. În 1995 este disponibil sub numele de Personal Home Page. Pentru a-i oferi mai multă funcţionalitate el a implementat o varianta în C care permitea accesul la baze de date oferind astfel posibilitatea de creare a paginilor web dinamice. Începand cu versiunea 3, din 1997, acest limbaj a început să fiedezvoltat de o echipă de programatori, iar versiunea 4 dispune de engine-ul de scr

    ipting al firmei Zend Techologies. Programul a fost corectat, dezvoltat şi extins în regim open source, depăşind cu mult scopul său iniţial. Numele s-a păstrat, dar semnifa este alta, şi anume : Hypertext Preprocessor. Pentru a crea şi testa documente PHP este nevoie de instalarea lor pe un server de web, deoarece dacă un fisier PHP este încarcat direct în navigator de pe discul local, prin comanda File/Open, fără a apel un server de web, documentul afisat va contine codul PHP neinterpretat.

    1.1 Avantajele limbajului PHPUn mare avantaj al limbajului PHP este faptul că este un limbaj inter-platformă şi este gratuit.Poate fi utilizat pe orice calculator fără nici un fel de costuri. PHP oferă programatorului libertatea de a alege un sistem de operare şi un server de web. El poate fi folosit pe aproape toate marile sisteme de operare, incluzând Linux, multe variante de Unix (incluzând HP-UX, Solaris şi OpenBSD), Microsoft Windows, Mac O

    S X. PHP are deasemenea suport pentru majoritatea serverelor de web din prezent: Apache, Microsoft Internet Information Server, Personal Web Server, Netscape şi iPlanet şi altele. Pentru majoritatea serverelor PHP are un modul, iar pentru celelalte suportă standardul CGI, PHP putând să lucreze ca un procesor CGI. Una dintre cele mai puternice şi importante facilităţi în PHP este suportul său pentru o gama largă deeme 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 driverde ODBC (Open Database Connectivity standard). PHP oferă posibilitatea de afişare de imagine, fişiere PDF şi chiar filmuleţe Flash (folosind librăriile libswf şi Ming) toagenerate instant. Deasemeanea, rezultatul poate să fie orice fişier text, cum ar fiXHTML sau orice alte fişiere XML.

    6

  • 8/18/2019 -php.html. mysql

    8/46

    PHP poate genera automat aceste fişiere şi să le salveze în sistemul de fişiere în loc fişeze, formând un cache de partea serverului pentru conţinutul dinamic. Deoarece PHPa fost scris special pentru crearea de pagini Web dinamice, poate efectua mult mai rapid şi mai eficient unele operaţii, în comparaţie cu competitorii săi Perl ,VCScri Java, care nu au fost creaţi special pentru crearea de pagini Web .Cu toate acestea, nu înseamnă că PHP este un limbaj de programare mai bun decat celelalte, deoareceexistă actiuni pe care Java, Perl le pot efectua si PHP nu este capabil să le efectueze,însă PHP este mult mai bun pentru domeniul pentru care a fost creat. Unul din principalele avantaje PHP este faptul că e relativ simplu şi direct, de aceea PHP este mult mai uşor de învaţat şi de utilizat faţă, spre exemplu , de ASP.NET care necesită erea unor noţiuni de VCScript, C# ,sau faţă de CGI care necesită cunostinţe de Perl sau

     C. PHP nu are probleme de compatibilitate cu browserul. Scripturile PHP sunt interpretate de server şi nimic mai mult, asadar nu trebuie să ne facem griji dacă limbajul în care dezvoltam este recunoscut de browserele utilizate de clienti. PHP permite o încarcare mai rapidă pe partea clientului. JavaScript ar incetini afişarea uneipagini web pe calculatoare mai slabe, deoarece browserul trebuie să ruleze scriptul mai întâi ; în cazul interpretării de catre server, sarcina aceasta este transferată ii serverului web. Un alt mare avantaj alt limbajului PHP este acela că oferă posibilitatea de a alege programarea procedurală sau programarea orientată obiect, sau chiar ambele. Cu toate acestea, nu orice facilitate a standardului POO este prezentă în versiunea curentă PHP-ului, multe librării de cod şi aplicaţii mari (incluzând şi librAR) sunt scrise folosind doar cod POO.

    1.2 Sintaxa PHP

    Pentru generarea dinamică de conţinut pentru paginile web, scripturile sunt incluse în pagini HTML.Când primeşte un script de la serverul web, interpretorul PHP caută anumite tag-uri speciale care anunţă existenţa codului PHP, pe care o interpretează, lăsând ificat codul HTML existent. Există mai multe modalitaţi de a insera codul PHP într-o pagina HTML. Cea mai simplă varianta este cea scurtă, care oferă o viteză mai mare de sciere a codului : O altă posibilitate este cea în stil XML, acesta fiind compatibilă cu documentele XML (Extensible Markup Language) : O a treia variantă este cea a stilului SCRIPT, destinată în special celor obişnuiţi cu serea de cod JavaScript sau VBScript. Cod_PHP Ultima posibilitate este cea în stil ASP, şi este utilă doar dacă se foloseste un editorHTML care genereaza cod ASP pentru serverele Microsoft: Din toateaceste posibilităţi doar doua ( şi . . .) sunt întotdeauna valabile; celelalate pot fi oprite din fişierul de configurare php

    .7

  • 8/18/2019 -php.html. mysql

    9/46

    În dezvoltarea aplicaţiei am folosit stilul XML care tinde să fie utilizat tot mai des. La scrierea codului, instrucţiunile PHP din script vor fi terminate printr-un separator punct şi virgulă

     

     asemănător celor din limbajul C, C++ sau Java. Omiterea acstui separator va genera o eroare de sintaxă. Interpretorul de PHP va ingnora în schimb spaţiile dintre instrucţiuni sau dintre elementele unei instrucţiuni. Exemplu : 1: 2 : Rezultatul va fi acelaşi.

    1.3 ComentariiPentru claritatea codului programatorii obişnuiesc să explice rolul anumitor linii din cadrul programului incluzând anumite comentarii. Interpretorul de PHP va ignora

     textul din comentarii. O modalitate de a insera un comentariu este cea în stilulC, când comentariul se poate întinde pe mai multe linii şi este cuprins între semnele  *

     

     şi 

    */ 

    . El se poate insera chiar şi în mijlocul unei expresii dar nu poate fi imbricat în alt comentariu. Exemplu : < ?php /* linii de cod*/ ?> Pentru un comentariu care se întinde până la sfarşitul liniei curente există două posibilităţi : stilul C++Shell. Exemplu : < ?php //linie de cod ?> < ?php #linie de cod ?>

    1.4 Tipuri de date în PHPFiecare limbaj de programare are diferite tipuri de date.Limbajul PHP suportă opttipuri primitive de date, dintre care patru scalare : Boolean este cel mai simplu şi conţine o valoare de adevar. Poate conţine unul din urmatoarele cuvinte cheie : TRUE sau FALSE. Integer ia valori din mulţimea Z= {¼,-2,-1, 0, 1, 2,¼}, adică sunt numer fără parte fracţionară. Double reprezintă numerele reale, valori numerice care includ

    cţii zecimale. Numerele duble sunt stocate folosindu-se standardul IEEE-64, pe 64de biţi. Acest format permite valori care pot merge până la 1,8 x 10308 şi furnizează aximativ 14 cifre semnificative după virgulă. String reprezintă un sir de caractere. Spre deosebire de datele numerice care conţin cu precădere cifre, şirurile (datele de tip string) pot conţine orice caracter. Ca atare şirurile sunt utile pentru stocarea datelor care nu pot fi calculate, precum nume, adrese, comentarii, etc.Nu este oproblemă dacă un string devine prea mare. Nu există practic nici o limită de dimensiuneimpusă de PHP.Pentru a specifica un şir PHP, caracterele care alcătuiesc şirul sunt incuse între ghilimele duble. PHP permite includerea în şiruri a unor caractere speciale, precum caracterele de salt la linie nouă sau de retur de caracter, prin furnizarea de secvenţe escape. Caracterele sunt cele utilizate în C, C++ sau Java.

    8

  • 8/18/2019 -php.html. mysql

    10/46

    Pentru a specifica un şir mai pot fi folosite şi apostroafe. Diferenţa în acest caz contă în faptul că se inhibă evaluarea variabilelor. O altă modalitate de a delimita un stg este folosirea sintaxei « heredoc ». Trebuie furnizat un identificator după

  • 8/18/2019 -php.html. mysql

    11/46

    Indirectarea se realizează prin utilizarea marcajului dolar 

     în faţa numelui variabilei referinţă. De exemplu: Notaţia $$var2 a fost folosită pentru a desemna valoarea reţinută de variabila $var1. Există mai multe tipuri de variable în funcţie de domeniul de valabilitate al acesteia, adică de locul în care poate fi olosită după ce a fost creată: Variabile locale: o variabilă definită în interiorul unecţii nu va putea fi accesată decât de instrucţiunile din interiorul acelei funcţii. Varile globale: o variabilă definită în exteriorul unei funcţii nu va putea fi accesată înriorul funcţiei. Variabile globale în interiorul unei funcţii: o variabilă definită în  unei funcţii trebuie redeclarată ca variabilă globală în interiorul funcţiei. Fiecărui pe care îl ruleaza, PHP îi furnizează o serie de variabile predefinite folosite pentr

    u a afla starea serverului Web, numite variabile de mediu. Acestea în mare măsură sunt create şi depind de serverul Web care rulează, sau sunt variabile proprii PHP. Elesunt de fapt o mulţime de tablouri predefinite ce conţin variabile de pe serverul web, mediul şi input-ul utilizatorului. Aceste tablouri sunt speciale prin faptul că sunt automate, adică disponibile în orice punct al scriptului. Aceste variabile predefinite sunt urmatoarele : · · · $_ENV conţine variabile disponibile prin intermediul meiului în care este executat. $_SESSION conţine variabile care corespund sesiunii curente a script-ului. $_GET si $_POST conţin variabile primite de script prin intermediul unor transferuri care folosesc metodele HTTP get, respectiv post. De exemplu, prin intermediul acestor vectori pot fi accesate valorile câmpurilor dintr-unformular care a fost completat şi transmis folosind una dintre cele două metode. $GLOBALS - pot fi accesate toate variabilele globale care sunt accesibile script-ului PHP curent; acest vector este indexat chiar prin numele variabilelor globale.

     $SERVER - conţine o serie de variabile ale căror valori sunt setate de serverul Web; majoritatea valorilor variabilelor din acest vector depind de mediul de execuţie al scriptului curent. $_COOKIE conţine valorile variabilelor ce conţin informaţii referitoare la cookie-urile păstrate pe calculatorul utilizatorului care accesează pagina Web. $_FILES conţine variabile primite de script prin intermediul încărcărilor de fire prin metoda POST.

    · · · ·

    10

  • 8/18/2019 -php.html. mysql

    12/46

    1.6 ConstanteO constantă este un nume dat unei valori. O constantă nu îşi poate modifica valoarea dea lungul execuţiei scriptului. Numele de constante sunt case-sensitive. O diferenţanotabilă faţă de variabile este aceea că numele constantelor nu sunt precedate de semnu $.Prin convenţie constantele sunt scrise cu litere mari. Definirea unei constante se face folosind funcţia define(). Exemplu :

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

    1.7 OperatoriPentru a putea efectua operaţii asupra unor varibile şi constante de diverse tipurise folosesc anumite simboluri numite operanzi. Entităţile asupra cărora se aplică un oprator se numesc operanzi. Un operator poate avea unul, doi sau chiar trei operanzi. Majoritatea operatorilor sunt binari (au doi operanzi). În general operatoriisunt clasificaţi în funcţie de tipul datelor asupra cărora acţionează. Există : Operatometici - provin din matematică ţi acţionează asupra datelor de tip numeric. Aceştia sunrezentaţi în tabelul urmator: Exemplu Nume -$a Negaţia $a + $b Adunarea $a - $b Scaderea $a * $b Înmulţirea $a / $b Împarţirea $a % $b Modulul Rezultat Opusul lui $a. Suma li $a şi $b. Diferenţa dintre $a şi $b. Produsul dintre $a şi $b. Câtul împarţirii lui $. Restul împarţirii lui $a la $b.

    Operatorul de împarţire ("/") returnează o valoare întreagă de fiecare dată, chiar dacăi operanzi sunt întregi (sau string-uri convertite la întregi). Operatorii de incrementare/decrementare sunt operatori unari care au ca rezultat creşterea/descreştereacu o unitate a varibilei operând asupra căreia se aplică. Operatorii post se aplică dupe valoarea este evaluată în expresia din care face parte iar operatorii pre se aplică îainte de evaluarea expresiei. Exemplu: $a = 1; $b = $a++; // b = 1, a = 2

    11

  • 8/18/2019 -php.html. mysql

    13/46

    $c = ++$a; // c =3, a = 3 $d = 4 + --$a; // d = 6, a = 2 $e = 4 + $c--; // e =7, c = 2 Dacă operatorii aritmetici se aplică asupra unor valori de tip string, PHP va încerca conversia acestora în numere. Dacă conversia nu reuşeşte, şirurile sunt conve la valoarea 0. Operatori de asignare - permit atribuirea de valori varibilelor. Operatorul de asignare de bază este operatorul

     

    , care înseamnă operatorul din stâng ia valoarea expresiei din dreapta. Valoarea expresiei este evaluată, apoi atribuită variabilei din partea stanga şi, în final, returnată de operator. Valoarea unei exprsii de asignare este valoarea asignată; de exemplu valoarea lui "$a = 3" este 3. Deoarece = nu este o instrucţiune PHP ci un operator, el poate intra în expresii complexe de genul: $a = $b = 4 + ($c = 3); // a = 7, b = 7, c=3 Pe langă operatorul de bază de asignare, există şi ªoperatori combinaţiº care permit folosirea unei valori în

    presie şi apoi setarea valorii la rezultatul acelei expresii. Aceştia sunt : Operator Utilizare Semnificaţie += $a += $b $a = $a + $b -= $a -= $b $a = $a - $b *= $a *= $b $a = $a * $b /= $a /= $b $a = $a / $b %= $a %= $b $a = $a % $b .= $s1 .= $s2 $s1 = $s1 . $s2 Operatori pe biţi-ajută la prelucrarea numerelor întregi considerate ca şiruri de biti. Aceştia sunt : Exemplu $a & $b $a | $b $a ^ $b ~ $a $a > $b dreapta

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

  • 8/18/2019 -php.html. mysql

    14/46

    Exemplu Nume Rezultat $a and $b And TRUE dacă atat $a si $b sunt TRUE. $a or $b !$a $a || $b Or Not OrTRUE 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, având valoarea true

     (adevarat) sau flase (fals). Operatori pe şiruri de caractere- există un singur operator pe şiruri de caractere, restul operaţiilor fiind efectuate prin intermediul unor funcţii din biblioteca standard a limbajului. Acest operator este operatorul de concatenare - punct

     

    . Exemplu: $s1="Ina"; $s2=$s1."are mere";// in $s2 vom avea "Ina are mere" Operatori de referire - este un operator unar, având ca operand o variabilă şi permite legarea unui nume de variabila de zonă de memorie a variabilei operand. Exemplu : $a = 2; $b = $a; // a = 2, b = 2 $c=&$a; // a=2, c=2 $c=4; // c=4, a=4, b=2 Operatori asupra tablourilor ± există un singur operator asupra tablourilor în PHP şi anume operatorul +. Adaugă tabloul din dreapta la cel din stanga, iar cheile duplicate nu sunt suprascrise. Exemplu : $a = array ("a" => "mere", "b" => "banane") ; $b = array ("a" => "pere", "b" => "capşuni", "c" => "cireşe" ) ; $c= $a + $b ; Var_dump($c) ; Va fi afisat :array(3) { ["a"]=> string(5) "mere" ["b"]=> string(6) "banane" ["c"]=> string(6)

     "cireşe" }Operatori de execuţie - poate fi folosit pentru a executa o comandă pe interpretorul de comenzi al serverului. El constă în doua apostroafe inverse

         

    între care

    13

  • 8/18/2019 -php.html. mysql

    15/46

  • 8/18/2019 -php.html. mysql

    16/46

    $sir2 = 

    $nume are mere! 

    ; echo $sir1; // va afisa Ina are mere echo $sir2; // va afişa $nume are mere

    1.9 TablouriTabloul, aşa cum spuneam la tipul de date array, este cel care mapează valorile în chei. Adică el reprezintă o variabilă ce stochează mai multe valori . Aceste valori indiviuale se numesc elementele tabloului. În PHP tabloul va asocia fiecărei intrări o cheie prin care aceasta poate fi regăsita. Cheile pot fi numerice (în acest caz indicii creaţi implicit vor fi 0,1,2 ...) sau pot fi şiruri de caractere (caz în care tabloul se numeşte asociativ). Valorile reţinute pot avea orice tip dar sunt de acelaşi fel pentru un tablou dat. Variabilele care au o singură valoare se numesc scalare. O vari

    abila de tip tablou poate fi creată prin constructorul array(). Sintaxa pentru crearea unui tablou indexat numeric este: $tablou = array (el0, el1, ... el_n); Exemplu : $fructe= array ("capşuni", "pere", "mere", "gutui", "portocale"); Accesul la elementele tabloului se face prin indecsi numerici (cu semnificaţia de numere de ordine în tablou). Spre exemplu $fructe[0] are valoarea "capşuni", $fructe[3] are valoarea "gutui" etc. Pentru a afla numarul curent de elemente ale unui tablou se face cu ajutorul funcţiei count($tablou). În PHP dimensiunea unui tablou este variabila. Pentru a adăuga un nou element se va atribui pur şi simplu variabilei cu urmatorul indice o anumită valoare. Spre exemplu $fructe[5]="banane" va adauga un nou element ("banane") la sfârşitul tabloului $fructe. Tablourile în care valorilor conţinut le sunt asociate chei prin care acestea pot fi regăsite se numesc tablouri asociative. Sintaxa pentru crearea unui astfel de tablou este: $tablou = array( "cheie1" => el1, "cheie2" => el2, ... "cheie_n" => el_n); Exemplu : $pret = array ("pa

    ine albă" => 7000, "ou" => 3000, "zahăr" => 24000); Accesul la un element se face prin cheia asociată. Spre exemplu $pret ["paine albă"] are valoarea 7000. Şi în acest caztabloul poate fi extins dinamic prin adaugarea unui nou element a carei cheie nu exista în tablou. Spre exemplu $pret["miere 500g"] = 30000 va adăuga elementul 30000 cu cheia "miere 500g" la tabloul $pret, acesta având acum patru elemente. Ambele tipuri de tablouri reţin intern o referinţă (pointer) catre elementul curent de prelucrat. Acest lucru permite scrierea secvenţelor pentru parcurgerea şi prelucrarea elementelor lor. Instrucţiunea foreach este asemanatoare cu instrucţiunea for (combină instrucţiunea FOR cu funcţia EACH) dar este destinată exclusiv parcurgerii de tablouri, î special a celor asociative Sintaxa acestei instrucţiuni are două forme alternative: foreach (tablou as cheie => valoare_element_curent)

    15

  • 8/18/2019 -php.html. mysql

    17/46

    { //instrucţiuni } foreach (tablou as valoare_element_curent) { //instrucţiuni } Prima formă permite şi extargerea şi prelucrarea cheilor asociate, pe când cea de a doua frmă permite extragerea tuturor valorilor din tablou şi prelucrarea lor individual.

    1.10 Structuri de controlPentru a putea controla fluxul de execuţie al unui program sau script sunt folosite structurile de control. Ele pot fi grupate în structuri condiţionale (în care codulia decizii) şi structuri repetitive, sau cicluri. Toate scripturile PHP sunt construite dintr-o serie de instrucţiuni. O instrucţiune poate fi o atribuire, un apel de funcţie, un ciclu, o expresie condiţională sau o instrucţiune vidă.

    1.10.1 Instrucţiuni conditionaleInstrucţiunile condiţionale permit execuţia condiţionată a secvenţelor de program. În lor astfel de instrucţiuni ar fi practic imposil de implementat o mare parte dintre problemele din luma reală. Instrucţiunea IF Instrucţiunea if permite luarea de decizii privind execuţia unei alte instrucţiuni sau a unui bloc de instrucţiuni inclus între colade (

     

     şi 

    ). Cea mai simplă sintaxă a instrucţiunii if este: if (expr) instrucţe Expresia expr este o expresie (condiţie) logică ce se evaluează la true sau false. Dacă evaluarea condiţiei are ca rezultat o valoare adevarată se va executa instrucţiuneaspecificată, dacă nu, instrucţiunea va fi ignorată şi se va trece mai departe. Exemplu ($varsta < 18) echo

     

    Esti minor ! 

    ; În cazul în care la luarea unei decizii există mai multe opţiuni trebuie testate mai multe condiţii. Limbajul PHP pune la dispoziţia programatorilor clauza elseif. Aşa cum îi spune şi numele această instrucţiune este o comaţie între instrucţiunile else şi if. În acest caz sintaxa instrucţiunii este:

    16

  • 8/18/2019 -php.html. mysql

    18/46

    if (expr1) instrucţiune1 elseif (expr2) instrucţiune2 ... elseif (exprN) instrucţiuneAmbele variante elseif si else if (cu spatiu si fără spatiu) sunt corecte. Instrucţiunea SWITCH Instrucţiunea switch este similară cu o serie de instrucţiuni if care testează mai multe valori posibile pentru o anumită expresie. Într-o instrucţiune if, condiţioate fi adevarată sau falsă; într-o instrucţiune switch condiţia poate avea orice număralori, diferite, atâta timp cât se evaluează la un tip de bază (integer, string sau doule). Este necesară o instrucţiune case pentru a se ocupa de fiecare valoare la caretrebuie să reacţioneze şi opţional, o instrucţiune default pentru restul situaţiilor pecare nu sunt descrise comportamente. Se foloseşte în situaţiile când dorim să comparăm  variabilă cu diferite valori şi să executăm bucăţi de cod diferite pentru fiecare caz e.Avantajul instrucţiunii switch este o scriere mai concisă şi mai simplu de înţeles şi

    nat. Sintaxa acestei instrucţiuni este: switch (expr) { case valoare_1: instrucţiune _1; break; case valoare_2: instrucţiune_2; break; ... case valoare_n: instrucţiune_n; break; defaut: instrucţiune_default; } Dupa evaluarea expresiei, valoarea obţinută este comparată cu valorile din clauzele case. Dacă se întâlneste o potrivire se va contiua cu execuţia instrucţiunilor din clauzele case următoare, până la întâlnirea instrucţak. Consecinţa este că, dacă instrucţiunile dintr-o clauză case nu se termină cu break,a continua execuţia cu instrucţiunile clasei următoare. Observaţie : Instrucţiunea conte aplicată în cadrul switch-ului acţionează similar cu break. Dacă avem un switch într-clu şi dorim să continuăm de la următoarea iteraţie a ciclului, se foloseşte continue 2

    17

  • 8/18/2019 -php.html. mysql

    19/46

    1.10.2 Instrucţiuni repetitiveInstrucţiunile repetitive permit implementarea algoritmilor care necesită repetareaunei secvenţe de calcul. Instrucţiunea FOR Instrucţiunea for este cea mai complexă instucţiune în PHP. Permite execuţia unei instrucţiuni sau a unui bloc de instrucţiuni incltre acolade (

     

     şi 

    ) şi are sintaxa: for (expr1; expr2; expr3) instrucţiune Primaexpresie (expr1) este numită expresie de iniţializare şi este executată necondiţionat ongură data la intrarea în ciclu. Ea stabileşte valoarea iniţială a contorului. La începfiecărei iteraţii se evaluează expr2, o condiţie logică. Dacă expresia este evaluată TRlul continuă prin executarea instrucţiunii. Dacă expr2 este evaluată ca fiind FALSE exeuţia ciclului se termină. Aici se compară de obicei contorul cu o limită anume. La sfâr fiecărei iteraţii este executată expr3 (expresie de iterare). Aceasta va ajusta la fi

    ecare valoarea contorului ; are rolul de a asigura trecerea la pasul următor (incrementarea contoarelor, citirea datelor următoare etc.). Oricare dintre cele trei expresii pot lipsi. . Dacă expr2 lipseşte, ciclul rulează la infinit. Pentru a ieşi forţdin ciclu se poate folosi instrucţiunea break.Dacă expr3 este vida PHP o va considera adevărată şi va cicla la infinit. În acest caz trebuie asigurată o ieşire forţată dinilizând una dintre instrucţiunile de control pentru repetiţii. Instrucţiunea WHILE Ciclrile while sunt cele mai simple structuri repetitive în limbajul PHP. La fel ca instrucţiunile if, se bazeaza pe o condiţie. Diferenţa dintre un ciclu while şi o instrucne if este aceea că instrucţiunea if execută codul ce urmează odată în cazul în care co care o evaluează este adevarată. Un ciclu while execută blocul în mod repetat, atâta t cât condiţia este adevărată. De regulă, se foloseste ciclul while când nu se cunoaşte bil cate iteraţii vor fi necesare. Când este necesar un număr fix de iteraţii de folose ciclul for. Structura de bază a instrucţiunii este: While (expr) instrucţiune Expresi

    a expr este o expresie (condiţie) logică ce se evaluează înainte de fiecare repetiţie. rezultatul evaluării condiţiei este adevărat, se va executa instrucţiunea specificată a secvenţa se va relua. Dacă rezultatul evaluării este fals, instrucţiunea va fi ignoratse va trece la instrucţiunea de dupa while. Instrucţiunea DO .. WHILE Instrucţiunea do-while este asemănătoare cu instrucţiunea while dar se foloseste pentru a implementa o buclă repetitivă cu test final (evaluarea expresiei se

    18

  • 8/18/2019 -php.html. mysql

    20/46

    află la sfârşitul ciclului). Diferenţa fundamentală constă în faptul că ciclul este exepuţin o dată. Se iese din ciclu în momentul în care expresia este evaluată ca fiind FA.Ca şi while, ea permite execuţia unei instrucţiuni sau a unui bloc de instrucţiuni incus între acolade (   {   şi   }   ) şi are sintaxa: do instrucţiune while (expr); Expresia exr este o expresie (condiţie) logică ce se evaluează după fiecare repetiţie. Dacă, după rea instrucţiunii condiţia este adevarată se va relua secvenţa de la început. În cazul  condiţia devine falsă, repetiţia se va încheia şi se va trece la instrucţiunea de dupăle. În cazul buclei do-while, instrucţiunea din bucla se va executa cel puţin o dată char şi în cazul în care condiţia nu este adevarată de la început. Instrucţiuni de controu repetiţii Pentru a simplifica implementarea unoeri este necesar să se iasă forţat dinr-o iteraţie.În PHP există instrucţiuni speciale: continue, break şi return. Instrucţiu

    ontinue permite terminarea forţata a iteraţiei curente şi trecerea la urmatoarea iteraţe. Ea poate fi folosită cu instrucţiunile for, foreach, while sau do..while. Continue are rolul de a sări peste restul iteraţiei curente şi de a continua execuţia de la înutul urmatoarei iteraţii. Continue acceptă opţional un argument numeric ce specifică di câte structuri trebuie să iese forţat. Instrucţiunea break permite întreruperea forţatuclei curente. Ea poate fi folosită cu instrucţiunile for, foreach, while, do..while sau switch. Acceptă opţional un argument numeric ce specifică din câte structuri trebue să iese forţat. Instrucţiunea return permite terminarea forţata a funcţiei sau prograui curent. Ea poate fi folosită în instrucţiunile for, foreach, while sau do..while unde, prin terminarea scriptului, termină în mod evident şi bucla curentă. Dacă este apelintro funcţie, return încheie imediat execuţia aesteia şi returnează argumentul său ca re a apelului de funcţie. Dacă se doreşte generarea unui mesaj în pagină înainte de înc scriptului, în loc de return se pot folosi funcţiile exit(mesaj) sau die(mesaj) die

     fiind un alias al funcţiei exit.1.11 FuncţiiO funcţie este un modul de cod care oferă o interfaţa de apel, rezolvă un anumit algorim şi opţional, returnează o valoare.Ea grupează instrucţiunile care execută un anumit atm şi permite refolosirea codului ori de cate ori este nevoie de acel 19

  • 8/18/2019 -php.html. mysql

    21/46

    algoritm într-un program. Funcţiile reprezintă părţi identificabile prin nume ale unui gram, care se pot lansa în execuţie la cerere prin intermediul acestor nume. Funcţiile pot fi predefinite (existente în biblioteca de bază a limbajului) sau definite de utilizator.

    1.11.1 Funcţii predefiniteFuncţiile predefinite(de biblioteca) rezolvă cele mai comune probleme legate de scopul în care a fost dezvoltat un limbaj şi reprezintă porţiuni de cod gata scrise care po fi reutilizate de catre toţi programatorii care folosesc acel limbaj. Exemplu : echo(). PHP are un număr mare de funcţii şi construcţii predefinite, majoritatea funcţii de bibliotecă referindu-se la prelucrarea de texte, lucrul cu protocoalele intern

    et şi comunicarea cu servere de baze de date. Numele funcţiei identifică unic codul care va fi apelat în acel loc. Spre deosebire de variabile, numele funcţiilor nu sunt"case-sensitive" deci pot fi scrise cu orice combinaţii de litere mari/mici. Unele funcţii PHP au argumente opţionale, care pot fi specificate sau omise: nume_funcţie(parametrul1, parametrul2, ... parametrul_n); Majoritatea funcţiilor returnează valori. Se poate folosi într-o expresie valoarea returnată de o funcţie. O situaţie foarte fecventă în care se procedează astfel o constituie utilizarea valorii returnate de o funcţie într-o expresie de atribuire, astfel încât valoarea să fie accesibilă în mod repese invoca funcţia de mai multe ori. Valorile sunt returnate folosind opţional instrucţiunea return. Poate fi returnat orice tip de rezultat, inclusiv tablouri şi obiecte. Nu se pot returna valori multiple dintr-o funcţie, dar rezultate asemănătoare pot fi obţinute prin returnarea unui tablou. PHP susţine conceptul de funcţii variabile. Aceasta înseamnă că dacă numele unei variabile este urmat de paranteze, PHP va cauta o fu

    cţie cu acelaşi nume şi va încerca să o execute.1.11.2 Funcţii utilizatorFuncţiile de bibliotecă sunt limitate ca număr, de multe ori este necesar să se defineacă. Funcţii specifice acelei aplicaţii, anumite funcţii utilizator. Acestea au sintaxa:Funcţion nume_funcţie( $arg1, $arg2, ..., $argN) { //linii de cod return $retval; }Funcţiile utilizator sunt disponibile doar în fişierul unde sunt declarate. Este posibil ca o funcţie să nu aibă argumente, la fel de bine cum o funcţie poate avea mai multeargumente. Argumentele unei funcţii sunt separate între ele prin virgule. Dacă se doreşe ca funcţia să întoarcă o anumită valoare, trebuie determinat ca funcţia să execute o une return.

    20

  • 8/18/2019 -php.html. mysql

    22/46

    1.11.3 Transmiterea parametrilorO problemă importantă legată de transmiterea parametrilor o reprezintă felul în care acta are loc: prin referinţa sau prin valoare. Implicit toţi parametrii sunt parametri transmisi prin valoare. La transmiterea unui astfel de parametru, în momentul apelului se va crea o copie a parametrului transmis, copie ce va conţine valoarea deapel. Orice modificare asupra parametrului efectuată în interiorul funcţiei nu va fi vizibilă în exteriorul acesteia. Dacă dorim să permitem unei funcţii să modifice argumensale, acestea trebuie transmise prin referinţă. În felul acesta nu se mai realizează o opie a parametrului ci, dimpotrivă, la parametrii transmişi prin referinţă numele paramtrului din funcţie (numit parametru formal) va referi aceeaşi zonă de memorie ca şi ceaa parametrului transmis. Pentru ca un argument al unei funcţii să fie transmis prin

    referinţă, trebuie să precedăm cu un 

     numele argumentului în definiţia funcţiei, ca ul de mai jos. La apel, parametrilor transmişi prin referinţă le pot corespunde doar nume de variabile nu şi expresii sau constante.

    1.11.4 Funcţii recursiveO Funcţie recursivă este o funcţie care se auto-apelează direct sau indirect, prin intemediul altor funcţii. Limbajul PHP oferă suport complet pentru funcţii recursive. Utilitatea funcţiilor recursive iese în evidenţă mai ales la implementarea algoritmilor car prin natura lor sunt recursivi. Exemple de astfel de algoritmi sunt calculul seriilor matematice recursive sau navigarea prin structuri de date dinamice gen liste înlanţuite sau arbori. La aplicaţiile Web utilitatea funcţiilor recursive este mai estrânsă. Totusi, o serie de algoritmi repetitivi de prelucrare a textelor sau de prelucrarea a tablourilor asociative pot profita de această tehnică.

    1.12 Clase şi obiecte1.12.1 Definirea unei claseO clasă este o colecţie de variabile şi de funcţii care utilizează aceste variabile. Pripiul de bază al orientării spre obiecte îl reprezintă încapsularea sau ascunderea date, cum mai este cunoscută. Un program care nu este orientat spre obiecte este organizat ca un set de funcţii şi un set de variabile globale utilizate de acele funcţii. Orice funcţie poate opera folosind orice variabilă globală, deci structura programuluieste oarecum haotică. Prin contrast, un program orientat spre obiecte combină funcţii ş 21

  • 8/18/2019 -php.html. mysql

    23/46

    variabile conexe într-o unitate, cunoscută sub numele de clasă. Accesul la datele dintrun obiect este posibil prin intermediul operaţiilor obiectului, care alcătuiesc interfaţa sa. Multe din proiectele Web evoluează de la o mulţime de hyperlink-uri la o aplicaţie complexă. Aceste aplicaţii, fie prezentate prin cutii de dialog şi ferestre, fi prin pagini HTML generate dinamic, au nevoie de o metodologie de dezvoltare gândită îndeaproape. O clasă poate fi asimilată cu un tip definit de utilizator. Proprietăţiei clase sunt variabile care descriu membrii clasei, iar metodele clasei sunt operaţii pe care membrii clasei le pot efectua. O clasă poate include o metodă specială, umită metodă constructor sau pur şi simplu constructor. Constructorul unei clase estefolosit pentru a crea instanţe sau membri ai clasei, care sunt cunoscuţi sub numelede obiecte. O clasă se defineşte utilizând următoarea sintaxă: class nume_clasă { var n

    aribilaX ;//pot fi oricâte variabile funcţion nume_funcţieX { //corpul funcţiei ; pot f oricâte funcţii } } În exteriorul claselor, instrucţiunea var este rareori folosită, drece PHP defineşte în mod automat o variabilă în momentul atribuirii unei valori. Cu tote acestea, proprietăţile claselor trebuie definite folosind instrucţiunea var. Metodele sunt definite folosind cuvântul cheie funcţion, ceea ce este normal, deoarece metodele, ca şi funcţiile, execută acţiuni. Diferenţa dintre metode şi funcţii este legatăsarea acestora; metodele sunt definite în interiorul claselor, în timp ce funcţiile sunt definite în exteriorul acestora. Pentru a obţine accesul la un membru al clasei metodele vor folosi sintaxa $this->, care are o semnificaţie similară cu aceea a pronumelui posesiv din limba română, persoana I singular (meu). Când o metodă face o referie de forma $this-> item, se consideră că referinţa face trimitere la proprietatea $item a obiectului curent. PHP stabileşte valoarea variabilei speciale $this la fiecare invocare a unei metode. Clasele sunt tipuri. Pentru a crea o variabilă de tipul

    dorit se foloseşte operatorul new. Instanţierea unei clase înseamna crearea unui obiect de tipul clasei respective.

    1.12.2 ConstructoriUn constructor este apelat atunci când este creat un obiect, şi are de obicei rolulde a iniţializa şi seta atribute la valori de pornire sau de a crea obiecte de careare nevoie obiectul curent. Constructorul are proprietatea cî posedî acelaşi nume cu clasa în care este definit şi nu întoarce nici o valoare. PHP apelează automat constructrul la invocarea operatorului new.

    22

  • 8/18/2019 -php.html. mysql

    24/46

    1.12.3 MoştenireMoştenirea permite specificarea unei clase folosind o altă clasă ca punct de plecare.Clasa originală se numeşte clasă de bază sau clasă părinte, iar clasa specificată mai re numeşte clasă derivată sau clasă copil. Moştenirea funcţionează în sens unic, clasa ceşte proprietăţi şi metode ale clasei părinte, dar clasa părinte nu preia trăsături de  Clasa copil sau derivată posedă toate variabilele şi funcţiile clasei de bază alături riabilele şi funcţiile proprii, definite în extensie. Acest lucrul se realizează utiliz cuvântul cheie extends. Moştenirea multiplă nu este acceptată. Exemplu: class clasa_coil extends clasa_parinte { var nume_varibilaX ; funcţion nume_funcţieX { //corpul funcţiei } }

    1.13 Reutilizarea coduluiPosibilitatea reutilizării codului în locul scrierii de cod nou duce la reducerea costurilor, reducerea erorilor şi creşterea standardizării programelor produse. În mod idal un proiect nou se crează prin combinarea componentelor reutilizabile în locul scrierii altora noi, timpul de dezvoltare fiind redus drastic. Acest mecanism esteimplementat în PHP prin instrucţiunile require, require_once şi include.

    1.13.1 Instrucţiunea requireInstrucţiunea require permite includerea unui fişier extern în interiorul unui fişier sript. Ea funcţionează asemănător clauzei #include din limbajele C şi C++. Sintaxa de apeste: require ( "nume_fişier_reutilizat.php" ); Aceasta instrucţiune require este prelucrată la încărcarea scriptului PHP asociat, înaintea legării valorilor la variabilelorespunzătoare. Deşi extensia fişierului care se include nu este obligatorie, prin con

    venţie ea este fie .php fie .inc. În momentul interpretării scriptului, apelul instrucţunii require va fi înlocuit de conţinutul fişierului transmis ca şi parametru şi apoi ata va fi interpretat. Fişierul poate conţine orice

    23

  • 8/18/2019 -php.html. mysql

    25/46

  • 8/18/2019 -php.html. mysql

    26/46

    Suportul pentru sesiuni în PHP constă din modalitatea de a păstra anumite date în vedera accesului ulterior. Un vizitator ce accesează website-ul primeşte un id unic, aşanumit id de sesiune. Acest id este fie reţinut într-o « cookie », fie propagat prin URL. Ssiunile permit înregistrarea unui numar aleator de variabile pentru a fi păstrate pentru cereri. Când un vizitator aceesează site-ul, PHP va verifica automat (dacă session.auto_start este setat pe 1) sau la cerere (explicit prin session_start() sau implicit prin session_register()) dacă un anume id de sesiune a fost trimis împreunacu cererea. În acest caz, este recreat mediul salvat anterior. Paşii care se fac lautilizarea unei sesiuni sunt următorii:  crearea unei sesiuni  înregistrarea variabillor sesiune  utilizarea variabilelor sesiune pentru controlul accesului său  personalizarea paginii  ştergerea variabilelor sesiune şi distrugerea sesiunii Înainte de a u

    iliza o sesiune aceasta trebuie creată. Cel mai simplu mod de a porni o sesiune este acela de a apela funcţia session_start(). Apelul acestei funcţii creează automat un număr de sesiune şi permite apoi utilizarea variabilelor de sesiune. Această funcţie tebuie apelată înainte de antetul "". O altă metodă, mai puţin recomandată, este m creări implicite a unei sesiuni în momentul în care se înregistrează forţat o variabilsiune. Funcţia session_start va fi apelată la începutul tuturor paginilor care compunsesiunea curentă. Pentru a folosi valori transmise între pagini diferite se vor folosi variabile sesiune. Variabilele sesiune se înregistrază ca atare prin apelul funcţiei session_register(nume_variabila). De exemplu: $varSesiune1 = 10; session_register( "varSesiune1"); Trebuie remarcat că numele variabilei se transmite funcţiei ca şi un şir de caractere, fără a include şi semnul $. Variabila va rămâne vizibilă până cânu până când sesiunea curentă se incheie. Dacă se doreşte, se pot înregistra mai multe ve printrun singur apel de session_register prin sintaxa: session_register( "v1",

     "v2" ...); Pentru a utiliza variabilele sesiune în alte pagini din aceeaşi sesiuneexistă două metode, asemănător cu accesul la datele unui formular. Dacă opţiunea registobals din php.ini este setată pe On, în toate paginile sesiunii variabila va fi accesibila direct prin nume. Dacă opţiunea este Off se poate apela variabila prin intermediul tabloului asociativ $HTTP_SESSION_VARS. De exemplu: $n = 4 * $HTTP_SESSION

     _VARS["varSesiune1"]; Pentru a testa într -o pagină dacă o variabilă a fost sau nu înretrata în sesiunea curentă se va folosi funcţia session_is_registered("numeVariabila"). Această funcţie întoarce o valoare logică care poate fi ulterior testată. Dacă se doreun moment dat ştergerea unei variabile sesiune se poate apela la funcţia session_unregister(numeVariabila). 25

  • 8/18/2019 -php.html. mysql

    27/46

  • 8/18/2019 -php.html. mysql

    28/46

    MySQL este un sistem client-server, serverul MySQL suportand o paletă largă de programe client, scrise în diverse limbaje de programare.De obicei, serverul de date este separat logic şi fizic de programele client care asigură interfaţa operaţiilor cu baa de date. MySQL este un sistem de gestiune al bazelor de date relaţional. Principiile algebrei relaţionale au fost stabilite de F. C. Codd în 1970. Ea reprezintă fundamentarea matematică a bazelor de date relaţionale. În concepţia relaţională o bază de de formată dintr-o colecţie de relaţii (tabele, fişiere de date) asupra cărora se aplicălecţie de operatori pentru a gestiona datele conţinute de relaţii. Un operator relaţionl se aplică asupra unor tabele şi va avea ca şi rezultat tot o tabelă. Potrivit algebre relaţionale nu este permis accesul direct asupra înregistrarilor dintr-o tabelă. Avantaje ale utilizarii bazelor de date relaţionale: facilitarea partajării datelor, asi

    gurarea independenţei datelor, interogarea ad-hoc, organizarea datelor, securitatea datelor, reducerea la minimum a experienţei necesare în domeniul programării, eficienţă în prelucrarea datelor.

    2.2 Proiectarea unei baze de dateProiectarea unei baze de date este foarte importantă pentru succesul aplicaţiei pentru care este realizată. Primul pas constă în analiza aplicaţiei, iar cel de-al doilea îormalizarea bazei de date, un proces complex şi de durată care contribuie esenţial laevitarea problemelor şi complicaţiilor ulterioare. Normalizarea unei baze de date relaţionale Normalizarea unei baze de date constă în descompunerea modelului bazei de date în mai multe relaţii astfel încât să se reducă la maxim redundanţa datelor şi implicne anomaliile de actualizare. Normalizarea bazei de date presupune aducerea relaţiilor gradual pe diverse forme normale. Există şapte forme normale.Fiecare formă normală

    preia constrângerile formei anterioare la care adaugă noi condiţii. Prima formă normalărelaţie este în prima formă normală dacă şi numai dacă fiecare atribut din fiecare lini conţine numai o singură valoare. A doua formă normală O relaţie este în a doua formă ncă şi numai dacă ea este în prima formă normală şi orice atribut non cheie este dependeonal complet de cheia primară. A treia formă normală O relaţie este în a treia formă noacă şi numai dacă ea este în a doua forma normală şi nici un atribut non cheie nu este dent tranzitiv de cheia primară. Forma normala Boyce-Codd O relaţie este în forma normală Boyce-Codd dacă fiecare deteminant este cheie candidată. A patra formă normală O re este în a patra formă normală dacă şi numai dacă ori de câte ori există o dependenţă m un determinant, toate atributele sunt dependente funcţional de determinant. 27

  • 8/18/2019 -php.html. mysql

    29/46

    A cincea formă normală O relaţie este în a cincea formă normală dacă şi numai dacă ea nspartă în relaţii mai mici si apoi reunită fără a-şi schimba faptele şi semnificaţiilermă normală Cea de-a sasea formă normală a fost definită de curând şi este definită doate luată în considerare şi dimensiunea temporală. Factori care influenţează, de asemeneoiectarea sunt de căutare a informaţiilor, factor esenţial care cere uneori repetareadatelor în tabele şi deci, încălcarea unor forme normale şi viteza de adăugare şi modifdatelor, care cere uneori reorganizarea datelor. Nu în ultimul rând spaţiul pe disc este şi el un criteriu important în cadrul proiectării unei baze de date. Chiar dacă în ele noastre discurile au capacităţi foarte mari, o bază de date cu redundanţă mare, pe gă ca ocupă inutil foarte mult spaţiu, este şi foarte greu de accesat (viteza de cautar în tabele este în general proporţională cu dimensiunea acesteia). Proiectarea bazei de

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

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

    2.3.2 Tipuri de dateTipurile de date în MySQL pot fi împărţite în mai multe categorii : numerice, logice, dalendaristică, timp, şiruri de caractere şi date binare mari (BLOB - binary large object). Tipuri de date numerice 1. TINYINT : reprezintă un număr întreg foarte mic. Intervalul de valori posibile este [-128..127]. 2. SMALLINT : repezintă un număr întreg mic. Intervalul de valori posibile este [-32768..32767]. 3. MEDIUMINT : reprezintă un număr întreg mediu. Intervalul de valori posibile este [-8388608..8388607].

    28

  • 8/18/2019 -php.html. mysql

    30/46

    4. INT sau INTEGER: reprezintă un număr întreg normal. Intervalul de valori posibile este [-2147483648..2147483647]. 5. BIGINT : reprezintă un număr întreg mare. Intervalul de valori posibile este [9223372036854775808..9223372036854775807]. 6. FLOAT :reprezintă un număr în virgulă flotantă, simplă precizie (număr real). Intervalul de vasibile este [-3.402823466E+38.. -1.175494351E-38, 0,1.175494351E-38..3.402823466E+38]. 7. REAL sau DOUBLE : reprezintă un număr real în virgula flotantă, dublă precizi8. DECIMAL (L) sau NUMERIC (L): reprezintă un număr în virgulă flotantă neîmpachetat. Lgimea, 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ă calendarică stocată în formatul

     

    YYYY-MM-DD 

     (an-luna-zi). Intervalul de valori posibile este [ 

    1000-01-01 

    .. 

    9999-12-31 

    ]. 2. DATETIME : reprezintă o combinaţie de dată calendaristică şi timp stocată în formatul   YYYY-MM-DD HH:MM:SS    (an-luna-zi ora:minut:secundă). Irvalul 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 po fi 14, 12, 8 sau 6 : YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD sau YYMMDD. 4. TIME : reprezintă ora, minutul şi secunda. Intervalul de valori posibile este [838:59:59 

    .. 

    838:59:59 

    ]. Poate reţine intervalul de timp dintre două evenimente, de aceea poate fi şi negativ. 5. YEAR : reprezintă anul calendaristic pe doua sau patru cifre.Intervalul de valori posibile este [1901..2155] pentru 4 cifre, respectiv [1970..2069] pentru 2 cifre (70-99..00-69). Tipuri de date şir de caractere 1. CHAR (L): reprezintă un şir de caractere de lungime fixă. Lungimea L a şirului poate lua valori intervalul [1..255]. 2. BIT, BOOL, CHAR ±sinonime cu delaraţia CHAR(1). 3. VARCHAR(L) : reprezintă un şir de caractere de lungime variabilă.Lungimea L a şirului poate lu

     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

  • 8/18/2019 -php.html. mysql

    31/46

    4. LONGBLOB, LONGTEXT : reprezintă valori BLOB, TEXT cu lungime de maxim 4294967295 (4 TB) elemente. Tipuri de date speciale 1. ENUM (

     

    value1 

    value2 

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

     

    value1 

    value2 

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

    2.3.3 Operatori

    Operatori aritmetici : operează asupra numerelor întregi cu precizia BIGINT (pe 64 biti). Sunt disponibili urmatorii operatori: + : adunare; - : scădere; * : înmulţire; / : împărţire; dacă se împarte la 0 rezultatul va fi NULL. Operatori logici : întorc 1 p adevarat şi 0 pentru fals. 1. NOT: ! - Negaţie logică. Întoarce 1 dacă argumentul este altfel întoarce 0. Excepţie: NOT NULL întoarce NULL. 2. OR: || - SAU logic. Întoarce 1dacă cel puţin un argument nu este 0 sau NULL 3. AND : && - ŞI logic. Întoarce 0 sau NUL dacă cel puţin un argument este 0 sau NULL, altfel Întoarce 1. Operatori de comparare : returnează 1 pentru adevărat, 0 pentru fals şi NULL dacă nu se poate efectua compara. 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

  • 8/18/2019 -php.html. mysql

    32/46

    - mai mare; >= - mai mare sau egal; - echivalenţă; la compararea cu NULL întoarce 0 sau 1 (1 doar la NULL NULL); dacă ambii operanzi sunt diferiţi de NULL se comportă ca şi =;

    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ă date şi de a o alege ca fiind bază de date curentă.Crearea unei baze de date se realizează cu ajutorul unui sub-limbaj SQL care se numeste DDL (Data Definition Language). Comanda care realizează crearea unei baze de date este: CREATE DATABASE nume_bd; Pentru ca baza de date db_name să devină curentă, se emite o instrucţiune USE: USE nue_bd ; Această instrucţiune este una din puţinele care nu necesită caracterul punct şi

    gulă ca terminare a instrucţiunii, deşi poate fi adăugat.2.4.1 Crearea unei tabeleCrearea 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 conexiunot crea doua tabele temporare cu aceleaşi nume, ele nu vor interfera. 31

  • 8/18/2019 -php.html. mysql

    33/46

    IF NOT EXISTS - inhibă mesajul de eroare care se generează dacă la încercarea de a creao tabelă care mai există. NOT NULL / NULL - nu se permit valori NULL în acest camp (campul trebuie completat în orice situaţie) /permite valori NULL în camp (opţiune implicidacă nu se specifică nimic) DEFAULT default_value - completează câmpul lasat liber cu vloarea implicită default_value AUTO_INCREMENT - dacă nu se inserează nimic în câmp, se genera automat o valoare mai mare cu o unitate faţă de cea mai mare valoare din acel câmp. Poate fi specificată o singură coloană cu acest parametru într-o tabelă. Coloaneecificate astfel trebuie indexate. PRIMARY KEY - specifică cheia primară pentru tabelă. Un singur câmp din tabelă poate avea acest parametru. Coloana declarată ca şi cheieimară este indexată automat. UNSIGNED ± precizat dupa un tip întreg înseamnă că poate aaloare pozitivă sau 0. Exemplu : CREATE TABLE persoană ( nume CHAR(30), prenume CHAR

    (30), vârstă INT(3))2.4.2 Ştergerea unei tabeleŞtergerea unei tabele se realizează cu comanda: DROP TABLE [IF EXISTS] nume_tabelă IFEXISTS ± este un parametru care va inhiba mesajul de eroare care apare dacă tabela nu există.

    2.4.3 Inserarea datelor în tabeleComanda INSERT : permite inserarea (adăugarea) de noi înregistrări într-o tabelă. Deoar sistemul mySQL este pur relaţional, nu există nici o diferenţă între 32

  • 8/18/2019 -php.html. mysql

    34/46

    inserarea de noi date sau adăugarea lor. În ambele situaţii, locul în care se face adăuea nu este precizat, nefiind relevant. Sintaxa comenzii INSERT este urmatoarea : INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] nume_tabelă [(col_nume,...)] VALUES (expresie,...),(...),... LOW_PRIORITY ± este folosit pentru a întârzia scrierea efectivă a datelor în tabela până când alţi utilizatori nu mai citesc date din tabelă. Aceu avantajează citirea dar întârzie, semnificativ pentru o tabelă foarte utilizată, scria. Efectul este blocarea execuţiei până când se reuşeşte scrierea efectivă. DELAYED - ae opusă parametrului precedent. Înregistrarea care trebuie adăugată este pusă într-o coaşteptare pe server şi controlul revine la client, ca şi cum scrierea ar fi fost făcutăectiv. Avantajul constă în timpul mic de execuţie a comenzii INSERT pe o tabelă utilizaintensiv. Dezavantajul constă în încărcarea serverului cu o operaţie în plus şi în pier

    elor dacă serverul se opreşte neaşteptat. Din această cauză parametrul este folosit doad este cu adevărat necesar. IGNORE - este util dacă se inserează mai multe înregistrarisimultan (în acest caz lista de după VALUES va conţine mai multe seturi de date în parateze, despărţite prin virgulă). De obicei, MySQL raportează eroare şi nu execută comande încearcă adăugarea a cel puţin unei înregistrări care duplică cheia primară sau câmpui unice. Prin folosirea parametrului IGNORE înregistrările greşite sunt ignorate, darrestul sunt adăugate fără raportarea unei erori. După execuţia comenzii se va raporta d numărul de înregistrări a căror adăugare a reuşit. INTO - este opţional, se foloseşte mpatibilitate cu alte sisteme SQL. Datorită clarităţii mai mari a interogării se preferotuşi utilizarea lui. col_nume,... - este o listă de coloane care specifică ordinea în are se vor adăuga datele în tabelă. Prin aceasta se pot insera doar datele considerate esenţiale, restul primind valorile implicite specificate la declararea tabelei. Dacă lista lipseşte, setul de date furnizat trebuie să aibă valori pentru toate câmpuril

     ordinea din declararea tabelei. VALUES (expresie, ...),(...) - specifică datele ce vor fi adăugate în tabelă. Ele trebuie să respecte numarul şi ordinea coloanelor de leclararea tabelei sau, dacă e specificat, numarul şi ordinea câmpurilor din lista de coloane (col_nume,...) prezentată anterior. Exemplu: INSERT INTO persoană VALUES ("Olaru", "Niculina",22) ;

    33

  • 8/18/2019 -php.html. mysql

    35/46

    Comanda UPDATE - permite actualizarea valorilor dintr-o tabelă. Sintaxa acestei comenzi este: UPDATE [LOW_PRIORITY] [IGNORE] nume_tabelă SET col_nume1=expr1, col_nume2=expr2,... [WHERE condiţie] [LIMIT NUMBER] LOW PRIORITY - este folosit pentru a întarzia scrierea efectivă a datelor în tabelă până când alţi utilizatori nu mai citesn tabelă. IGNORE - este util dacă se inserează mai multe înregistrări simultan (în aces lista de după VALUES va conţine mai multe seturi de date în paranteze, despărţite prinrgulă). SET col_nume1=expr1, col_nume2=expr2,... atribuie noile valori expr1, expr2.. la col_nume1, col_nume2 unde (WHERE) are loc conditie. Dacă clauza WHERE lipseşte, vor fi actualizate toate înregistrările. LIMIT permite setarea numărului de înregisti care vor fi afectate de comanda UPDATE. Exemplu : UPDATE persoană SET nume="Popescu" ;

    2.4.4 Ştergerea datelor din tabeleComanda DELETE ± este folosită pentru ştergerea anumitor date dintr-o tabelă. Aceasta ae sintaxa : DELETE [LOW_PRIORITY] FROM nume_tabelă [WHERE condiţie_ştergere] [LIMIT NUMBER] Parametri au aceeaşi semnificaţie ca şi în cazul comenzilor INSERT şi UPDATE. Folnd comanda DELETE simplş, sub forma ªdelete from nume_tabelşº, se vor şterge toate înrearile din tabela nume_tabelă. Pentru a prezica care valori să fie şterse se va folosiclauza WHERE. Exemplu: DELETE FROM persoană WHERE nume="Popescu";

    2.4.5 Extragerea informaţiilor din tabeleComanda SELECT este cea mai utilizată comandă SQL, deoarece permite atât regăsirea şi valizarea datelor din tabelele bazei de date cât şi calcularea unor expresii care nuau legătură cu datele din tabele. Sintaxa de bază a comenzii este:

    34

  • 8/18/2019 -php.html. mysql

    36/46

    SELECT itemi FROM nume_tabelă [ WHERE condiţie ] [ GROUP BY {colană | expresie} ] [ HAVING condiţie_includere_grup] [ ORDER BY tip_ordonare ] [LIMIT criteriu_de_limitare ] ; FROM - specifică tabela sau tabelele din care se selectează datele. În cazul în cre referinţa cuprinde mai multe tabele operaţia este una de JOIN. WHERE - specifică condiţia de includere a datelor în selecţie. Permite selecţia doar a datelor care interesază la un moment dat. În cazul operaţiunii de JOIN aici se vor adăuga şi constrângerile de relaţiile dintre tabele. Condiţia de selecţie constă dintr-o expresie logică simplă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 (începând cu 1). Ordonarea se face după prima coloană din listă. În

     care două înregistrări au aceiaşi valoare pentru coloana respectiva se va lua în consiare a doua coloană din listă (dacă este specificată) etc. Parametrii ASC şi DESC specifrdonarea crescătoare, respectiv descrescătoare a înregistrărilor în rezultat. Pentru a ecta toate înregistrările dintr-o tabelă se va folosi * : SELECT * FROM nume_tabelă ; Dcă se doreşte enumerarea tuturor înregistrărilor ce satisfac o anumită condiţie se va pa în felul urmator : SELECT * FROM nume_tabela WHERE condiţie ; Clauza GROUP BY specifică dupa ce valoare se va face gruparea. În majoritatea cazurilor expresia de grupare este reprezentată de o singură coloană. Toate înregistrările cu aceeaşi valoare penxpresia de grupare vor fi considerate ca făcând parte din acelaşi grup. Clauza HAVINGpermite selectarea grupurilor care sunt luate în considerare. Condiţia din HAVING se aplică după constituirea grupului, pe când condiţia din clauză WHERE în timpul selectăistrărilor. În plus, acestă clauză poate cuprinde doar referinţe la câmpuri şi aliasuriri din lista de câmpuri a comenzii SELECT sau funcţii de sumarizare pe grup. MySQL i

    nclude funcţii care permit raportarea valorilor agregate, precum un număr al rândurilor tabelului. Exemple de funcţii de agregare: -count(*) = numărul rândurilor din tabel-avg(coloana) = valoarea medie a coloanei numerice specificate -min(coloana) = valoarea minimă pentru coloana specificată

    35

  • 8/18/2019 -php.html. mysql

    37/46

    -sum(coloana) = suma valorilor din coloana respectivă

    2.5 Folosirea alias-urilorScrierea instrucţiunilor poate fi simplificată prin folosirea unor denumiri prescurtate, numite alias-uri. Adesea este de ajutor şi uneori chiar esenţial să ne putem referi la tabele folosind alte nume. Alias-urile pot fi folosite atât pentru a desemna tabele cât şi coloane. Ele pot fi create la începutul unei interogari şi folosite pe tt parcursul ei. Sintaxa de definire a unui alias este următoarea: SELECT nume_tabelă.col_nume [AS] alias_c1,... FROM nume_tabelă ORDER BY alias_c1 ...; 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 tr

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

    2.6 Accesul la o bază de date2.6.1 Utilizatori şi paroleMySQL suportă un sistem de privilegii sofisticat, există diferenţe semnificative între istemul 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 caracteresemnificative pe când în majoritatea implementărilor UNIX această valoare este de 8 carctere. O altă diferenţă ar fi aceea ca numele utilizatorilor şi parolele sunt păstrate arat de mySQL şi nu au nimic în comun cu cele din sistemul de operare. Nu în ultimul râd, MySQL criptează parolele folosind un algoritm diferit de cel utilizat de UNIX s

    au Windows. Algoritmul de criptare este ireversibil. La instalarea sistemului este creat implicit un utilizator numit "root" care are toate drepturile activate. Acest utilizator trebuie folosit, din motive de securitate, doar pentru administrare. Pentru fiecare utilizator care va interacţiona cu serverul trebuie creat un utilizator. Un sistem MySQL poate avea mai mulţi utilizatori. Utilizatorul « root » ar trebui folosit în principiu doar pentru scopuri administrative, din motive de securitate. Pentru fiecare utilizator care are nevoie să folosească sistemul, acesta trebuie să creeze un cont cu parola. O idee bună ar fi ca acestea să fie diferite de username-ul şi parola folosite în afara MySQL (de exemplu cele pentru UNIX sau Windows).

    36

  • 8/18/2019 -php.html. mysql

    38/46

    2.6.2 Privilegii MySQLPrivilegiile în MySQL se referă în principal la autentificarea şi autorizarea utilizatoilor conectaţi la server. Autorizarea se referă la permisiunea de a rula interogări precum SELECT, INSERT, UPDATE sau DELETE. Pentru a spori securitatea oricărui calculator, nu numai a serverului MySQL se aplică principiul "minimului de privilegii necesare".Deşi este foarte simplu, este foarte important : Un utilizator (sau proces) trebuie să aibă cel mai scăzut nivel de privilegii, suficient pentru a putea executa sarcinile care i-au fost alocate. Informaţiile despre privilegii sunt stocate în tabelele user, db, host, tables_prv şi columns_priv din baza de date mysql. Serverul va citi conţinutul acestor tabele ori de câte ori sistemul de privilegii trebuie să acţioneze. Există trei tipuri de bază de privilegii: privilegii pentru utilizatorii obiş

    uiţi, privilegii pentru administratori şi câteva privilegii speciale. Privilegiile pentru utilizatorii obişnuiţi se leagă direct de comenzile SQL şi de dreptul de a le execua. Acestea sunt: SELECT ±care se aplică la tabele şi coloane şi permite utilizatorilor selecteze înregistrări din tabele. INSERT - se aplică la tabele şi coloane şi permite uizatorilor să insereze date în tabele. UPDATE - se aplică la tabele şi coloane şi permiutilizatorilor să modifice valorile existente în tabele. DELETE - se aplică tabelelor ş permite utilizatorilor să şteargă înregistrări din tabele. INDEX - se aplică tabelelormite utilizatorilor să creeze şi să insereze indecşi în tabele. ALTER - se aplică tabel permite utilizatorilor să modifice structura tabelelor exsiente prin adăugare de coloane, redenumire de coloane ori tabele, schimbarea tipului de date al coloanelor. CREATE - se aplică bazelor de date şi tabelelor şi permite utilizatorilor să creeze aze 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 tabe

     şi permite utilizatorilor delegarea privilegiilor către un alt utilizator. Drepturile administratorului sunt :

    37

  • 8/18/2019 -php.html. mysql

    39/46

    PROCESS - permite administratorului să vadă procesele care rulează pe server şi să le oască. Este utilizat pentru a vedea conţinutul interogarilor ce se executa în acel moment, inclusiv cele de setare a parolei. De asemenea el dă posibilitatea opririi forţate a conexiunilor altor utilizatori. RELOAD - permite administratorului să reîncarce tabele alocate şi să actualizeze privilegiile, gazdele, logurile şi tabelele. SHUTDOWN - permite administratorului să opreasca serverul de MySQL de la distanţă. FILE - permite administratorului să citească informatii sensibile de pe server; să insereze date în tabele din fisiere şi reciproc. Privilegiile speciale sunt doua : ALL - oferă toate privilegiile. Se poate folosi ALL PRIVILEGES în loc de ALL. USAGE - nu oferă niciun privilegiu. Va fi creat un utilizator căruia i se va permite să se logheze dar nu va avea nici un drept. De obicei se adaugă pe parcurs privilegii. Orice utilizato

    r poate avea oricare din aceste privilegii, dar se obişnuieşte să se restricţioneze cel proprii administratorului doar acestuia. Comanda GRANT - permite crearea utilizatorilor şi/sau stabilirea, respectiv codificarea privilegiilor acestora pe patrunivele de privilegii:Global ± este aplicată tuturor bazelor de date existente pe un server Database - este aplicată tuturor tabelelor dintr-o bază de date Table - este aplicată tuturor coloanelor dintr-o tabelă Column - este aplicată doar coloanelor specificate explicit

    Sintaxa comenzii GRANT este: GRANT privilegii [coloane] ON componentă TO nume_utilizator [IDENTIFIED BY

     

    parolă 

    ] [WITH GRANT OPTIONS] Unde: privilegii - peprezintă o listă de privilegii desparţite prin virgulă, ce pot fi alese dintre cele prezentate anterior plus clauza specială ALL are specifică toate privilegiile posibile. coloane- o listă optională de una sau mai multe coloane. Permite stabilirea privilegiilor l

    a nivel de coloane. componenta - este numele unei baze de date sau tabele asupra cărora vor fi stabilite privilegiile. Toate bazele de date se pot specifica prin*.*, şi este nivelul Global. Nivelul Database se poate specifica prin nume_bd.*, iar nivelul Table prin nume_bd.nume_tabelă. Dacă se specifică doar nume_tabelă se va intrpreta ca fiind o tabelă a bazei de date selectate. Nivelul Column se va obţine prin folosirea unei liste de coloane nevide.

    38

  • 8/18/2019 -php.html. mysql

    40/46

    nume_utilizator - este numele utilizatorului căruia i se atribuie privilegiile. El poate conţine şi un nume de staţie de pe care are dreptul să se conecteze. parola - spcifică parola cu care utilizatorul se va conecta. Parola trebuie în general să nu fieuşor de ghicit (să nu fie chiar numele contului sau un cuvânt din dicţionar). Opţiunea NTIFIED BY este obligatorie deoarece dacă lispseşte, utilizatorul se va putea conecta fără parolă. WITH GRANT OPTION - dă dreptul utilizatorului să dea privilegii echivale cu ale sale altor utilizatori. Acestă opţiune poate fi utilizată pentru a delega dreptul de administrare, inclusiv creare de utilizatori, unor administratori ale unor baze de date particulare de pe server. Aceşti administratori nu vor putea însă să intracţioneze cu alte baze de date. Există posibilitatea vizualizării privilegiilor. Aceasta se realizează cu ajutorul comenzii: SHOW GRANTS FOR utilizator; Deasemenea, ex

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

  • 8/18/2019 -php.html. mysql

    41/46

    Capitolul 3PHP şi MySQLÎn PHP sunt implementate o serie de funcţii pentru conectarea şi comunicarea cu server-ul MySQL. Folosind aceste funcţii, un program PHP poate obţine accesul la bazele de date rezidente într-o bază de date MySQL şi le poate modifica. Pentru a utiliza cu success funcţii PHP pentru a comunica cu serverul MySQL, trebuie ca MySQL să ruleze pe o locaţie la care serverul web folosit să se poată conecta (nu neapărat aceeaşi maşinaea a serverului web). De asemenea e necesar un cont de utilizator (protejat de o parolă) şi trebuie să ştim numele bazei de date la care vrem să ne conectăm.

    3.1 Conectarea la serverul MySQL

    O pagină PHP nu poate interoga o bază de date dacă nu este conectată la aceasta. O coneiune poate fi privită ca un canal de comunicaţie prin care programul transmite cereri SQL, iar serverul returnează raspunsurile corespunzătoare. Din PHP se pot stabilidouă tipuri de conexiuni către un server MySQL: persistente şi nepersistente. O conexiune persistentă se păstrează după prima utilizare chiar şi după terminarea paginii cureau după apelul mysql_close. Orice deschidere a unei noi conexiuni cu aceiaşi parametrii va reutiliza pe cea veche în locul creării uneia noi. Ele se realizează prin apelul funcţiei mysql_pconnect. Un avantaj al conexiunilor pemanente este viteza de stabilirea a conexiunilor, resimţită în timpi de răspuns mai buni către utilizatori. Ca deantaj putem menţiona blocarea îndelungată a unei conexiuni către server, afectând număr clienţi care sunt acceptaţi spre a fi serviţi.

    40

  • 8/18/2019 -php.html. mysql

    42/46

    O conexiune nepersistentă va fi distrusă la terminarea paginii sau la apelul mysql_close. Se realizează prin apelul mysql_connect. Avantajele conexiunilor temporare:nu blochează conexiunea decât pe perioada interpretării scriptului, iar dezavantajul este timpul mai mare de răspuns datorat creării unei noi conexiuni la fiecare apel. Ambele tipuri de conexiuni asigură aceiaşi funcţionalitate. Singura diferenţă dintre elenstă în eficienţa cu care se tratează deschiderea unei conexiuni raportată la cantitatee resurse blocate. Sintaxa lor este asemănătoare: resource mysql_pconnect ( string server , string utilizator , string parolă ) resource mysql_connect ( string server , string utilizator , string parolă ) Parametri au următoarea semnificaţie: server -specifică numele maşinii pe care rulează serverul de mySQL. Dacă serverul de Web şi cel mySQL rulează pe aceiaşi maşină, numele poate fi "localhost". În cazul în care serveru

    mysQL s-a instalat pe alt port decât cel standard (3306), numarul portului se specifică după numele serverului, spre exemplu "loalhost:3371". utilizator - specifică numele utilizatorului pentru care se realizează conexiunea. Deoarece prin nume serverul va stabili drepturile pe care programul le are asupra unei anumite baze de date, acest parametru poate fi folosit pentru a creşte securitatea siteului. parola- este un şir de caractere cuprinzând parola în clar a utilizatorului specificat. Deoarece liniile php nu traverseză serverul Web, această parola nu poate fi citită de utilizator prin comanda View Source a navigatorului Web. Singura problemă apare dacă cineva neautorizat are acces local la sistemul de fişiere de pe server şi poate citi direct fişierul php. Pentru închiderea conexiunii, după ce nu mai este necesară, se va utliza comanda: bool mysql_close ( resource identificatorBD ); Parametrul identificatorBD trebuie să fie un identificator valid de conexiune returnat în prealabil decomada mysql_connect (sau mysql_pconnect). Pentru a putea accesa datele din tabe

    lele unei anumite baze de date de pe server, după realizarea conexiunii, aceasta trebuie selectată prin comanda mysql_select_db: bool mysql_select_db ( string numeBazaDeDate ); Funcţia returnează false în caz de eşec.

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

    41

  • 8/18/2019 -php.html. mysql

    43/46

    resource mysql_query ( string query ); şi există două categorii de interogări: interogăe SELECT, şi interogările UPDATE, INSERT şi DELETE. Pentru a adăuga informaţii în baza te trebuie transmisă din pagina de PHP o interogare INSERT spre serverul de mySQL. Transmiterea unei interogări SQL spre server se poate face cu ajutorul funcţiei mysql_query. Aceasta funcţie presupune existenţa unei conexiuni deschise spre server, selecţia prealabilă a bazei de date şi existenţa unor drepturi suficiente pentru rulareainterogării. Dacă interogarea transmite înapoi un rezultat (SELECT, DESCRIBE, EXPLAINsau SHOW), funcţia returnează un identificator spre resursa reprezentată de rezultat. Πcazul interogărilor acţiune (INSERT, DELETE, UPDATE etc.) funcţia va retura TRUE dacă -a executat corect interogarea. În ambele situaţii funcţia returnează FALSE dacă interoea nu a putut fi executată de server. Spre deosebire de interogările UPDATE, INSERT şi

     DELETE, interogările SELECT returnează rânduri de tabel. Rândurile unui tabel sunt incuse într-o structură numită set de rezultate. Prelucrarea setului de rezultate returnat de o interogare SELECT implică parcurgerea prin iteraţie a rândurilor setului de rezultate. Pentru a obţine valoarea numărului de rânduri se foloseşte funcţia mysql_num_ro). Funcţia mysql_fetch_row() se poate folosi pentru a obţine următorul rând din secvenţetului de rezultate. Pentru a evita problemele care apar din cauza caracterelorspeciale interpretate diferit de mySQL şi PHP, valorile variabilelor trebuie transformate corespunzător prin utilizarea funcţiei addslashes: string addslashes ( string parametru) .Pentru a afla numarul înregistrărilor afectate de o interogare acţiune se poate folosi funcţia mysql_affected_rows: int mysql_affected_rows ( );

    3.3 Căutarea şi afişarea rezultatelorPentru a căuta informaţii într-o bază de date se vor utiliza interogări SELECT. Procedu

    de transmitere a unor astfel de interogări este asemănătoare cu cea pentru interogări aune. Diferenţa majoră la interogările de tip SELECT constă în necesitatea de a afişa retul interogării. În urma rulării unei interogări de căutare se va folosi funcţia mysql_ows() pentru a afla numărul de înregistrări din rezultat. Acestei funcţii i se va transite ca şi parametru referinţa rezultata în urma apelului funcţiei m