+ All Categories
Home > Documents > Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

Date post: 28-Jul-2015
Category:
Upload: pollyana-cornoiu
View: 400 times
Download: 15 times
Share this document with a friend
84
INTRODUCERE...............................................3 I.1. INTRODUCERE........................................ 5 I.1.1 Internet-ul..................................................................................................... 5 I.1.2. Aplicaţii pentru Internet............................................................................. 6 I.1.3 DNS................................................................................................................ 7 I.1.4. Intranets şi Extranets.................................................................................. 7 I.2. WEB SERVERS ŞI WEB APPLICATION SERVERS...................8 I.2.1. Servere Web................................................................................................. 8 I.2.2. Pagini Web................................................................................................... 8 I.2.3. Browsere Web.............................................................................................. 9 I.3. PAGINI WEB STATICE ŞI DINAMICE..........................9 I.3.1. HTML............................................................................................................ 9 I.3.2. JavaScript..................................................................................................... 9 I.3.3. Alte Tehnologii pe parte de Client........................................................... 10 I.3.4. URL-uri....................................................................................................... 10 I.3.5. Avantajul Paginilor Web Dinamice......................................................... 10 I.3.6. Înţelegerea Aplicatiilor Web.................................................................... 11 II. INTRODUCERE ÎN PHP...................................12 II.1. NOŢIUNI FUNDAMENTALE.................................12 II.1.1. Ce este PHP?............................................................................................. 12 II.1.2. Ce poate face PHP?.................................................................................. 13 II.2. ELEMENTE DE BAZĂ ALE SINTAXEI.........................14 II.2.1. Ieşirea din modul HTML.......................................................................... 14 II.2.2. Separarea instrucţiunilor........................................................................ 16 II.2.3. Comentariile............................................................................................. 16 II.3. TIPURI DE DATE.....................................16 II.4 VARIABILE...........................................17 II.4.1 Noţiuni de bază........................................................................................ 17 II.4.2 Variabile predefinite................................................................................. 18 II.4.3. PHP Superglobals.................................................................................... 18 II.4.4. Folosirea variabilelor statice................................................................. 19 II.4.5. Variabile din afara mediului PHP.......................................................... 20 II.4.6. Cookie-uri HTTP....................................................................................... 21 III. BAZE DE DATE ŞI SQL.................................22 III.1. CONCEPTE ALE BAZELOR DE DATE RELAŢIONALE...............22 III.1.1. Structura unei baze de date relaţionale.............................................. 22 III.1.2. Normalizarea tabelelor......................................................................... 23 1
Transcript
Page 1: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

INTRODUCERE..............................................................................................................3

I.1. INTRODUCERE.....................................................................................................5I.1.1 Internet-ul..........................................................................................................5I.1.2. Aplicaţii pentru Internet....................................................................................6I.1.3 DNS....................................................................................................................7I.1.4. Intranets şi Extranets........................................................................................7

I.2. WEB SERVERS ŞI WEB APPLICATION SERVERS.......................................................8I.2.1. Servere Web......................................................................................................8I.2.2. Pagini Web........................................................................................................8I.2.3. Browsere Web...................................................................................................9

I.3. PAGINI WEB STATICE ŞI DINAMICE.........................................................................9I.3.1. HTML................................................................................................................9I.3.2. JavaScript.........................................................................................................9I.3.3. Alte Tehnologii pe parte de Client..................................................................10I.3.4. URL-uri...........................................................................................................10I.3.5. Avantajul Paginilor Web Dinamice................................................................10I.3.6. Înţelegerea Aplicatiilor Web...........................................................................11

II. INTRODUCERE ÎN PHP........................................................................................12

II.1. NOŢIUNI FUNDAMENTALE.....................................................................................12II.1.1. Ce este PHP?.................................................................................................12II.1.2. Ce poate face PHP?......................................................................................13

II.2. ELEMENTE DE BAZĂ ALE SINTAXEI.......................................................................14II.2.1. Ieşirea din modul HTML...............................................................................14II.2.2. Separarea instrucţiunilor..............................................................................16II.2.3. Comentariile..................................................................................................16

II.3. TIPURI DE DATE.....................................................................................................16II.4 VARIABILE.............................................................................................................17

II.4.1 Noţiuni de bază...............................................................................................17II.4.2 Variabile predefinite.......................................................................................18II.4.3. PHP Superglobals.........................................................................................18II.4.4. Folosirea variabilelor statice.......................................................................19II.4.5. Variabile din afara mediului PHP.................................................................20II.4.6. Cookie-uri HTTP...........................................................................................21

III. BAZE DE DATE ŞI SQL........................................................................................22

III.1. CONCEPTE ALE BAZELOR DE DATE RELAŢIONALE...............................................22III.1.1. Structura unei baze de date relaţionale.......................................................22III.1.2. Normalizarea tabelelor................................................................................23III.1.3. Structured Query Language.........................................................................23

III.2. IMPLEMENTAREA UNEI BAZE DE DATE................................................................24III.2.1. Proiectarea unei baze de date......................................................................24III.2.2. Modelare E-R...............................................................................................24III.2.3. Identificarea coloanelor...............................................................................24III.2.4. Gruparea coloanelor în entităţi..................................................................24III.2.5. Identificarea cheilor primare.......................................................................25

1

Page 2: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

III.2.6. Identificarea cheilor externe........................................................................25III.2.7. Rafinarea modelelor E-R.............................................................................25

IV. MYSQL.....................................................................................................................26

IV.1. INTRODUCERE ÎN MYSQL...................................................................................26IV.2. CARACTERISTICILE DE BAZĂ ALE MYSQL...........................................................26

IV.2.1. Componente interne şi portabilitate.............................................................26IV.2.2. Tipuri de coloane..........................................................................................27IV.2.3. Comenzi şi funcţii.........................................................................................27IV.2.4. Securitate......................................................................................................27IV.2.5. Scalabilitate şi limite....................................................................................27IV.2.6. Conectivitate.................................................................................................28IV.2.7. Localizare.....................................................................................................28IV.2.8. Clienţi şi unelte.............................................................................................28

IV.3. FUNDAMENTE MYSQL........................................................................................28IV.3.1. Conectarea şi deconectarea de la server.....................................................28IV.3.2. Introducerea interogărilor...........................................................................29IV.3.3. Crearea şi utilizarea unei baze de date........................................................31IV.3.4. Crearea şi selectarea unei baze de date.......................................................31IV.3.5. Crearea tabelelor.........................................................................................32

V. APLICAŢIE...............................................................................................................33

V.1. DESCRIEREA SITE-ULUI.........................................................................................33V.1.1. Structura site-ului..........................................................................................33V.1.2. Utilizarea template-urilor şi a Style Sheet-urilor..........................................33V.1.3. Crearea bazei de date MySQL.......................................................................35

V.2. UTILIZAREA BAZELOR DE DATE MYSQL.............................................................36V.2.1. Conectarea la serverul MySQL.....................................................................36V.2.2. Selectarea bazei de date................................................................................37V.2.3. Detectarea apariţiei erorilor.........................................................................37V.2.4. Eliminarea mesajelor de eroare....................................................................38V.2.5. Închiderea conexiunii cu serverul MySQL....................................................38V.2.6. Executarea interogărilor UPDATE, INSERT şi DELETE.............................38V.2.7. Funcţia mysql_query()...................................................................................39V.2.8. Verificarea interogărilor care nu returnează rânduri de table.....................39V.2.9. Utilizarea coloanelor de tabel cu auto-incrementare....................................39V.2.10. Prelucrarea rezultatelor interogărilor SELECT.........................................39V.1.11. Lucrul cu seturi de rezultate........................................................................40V.2.12. Obţinerea numărului coloanelor unui set de rezultate................................41V.2.13. Obţinerea numelui unei coloane din setul de rezultate..............................41V.2.14. Obţinerea lungimii unei coloane dintr-un set de rezultate.........................41V.2.15. Obţinerea indicatorilor MySQL asociaţi unei coloane a setului de rezultate..................................................................................................................................41V.2.16. Obţinerea tipului MySQL al unei coloane din setul de rezultate................42V.2.17. Determinarea tabelului MySQL asociat unei coloane din setul de rezultate..................................................................................................................................42V.2.18. bţinerea structurii complete a setului de rezultate......................................42

2

Page 3: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

V.2.19. Accesul non-secvenţial la coloanele unui set de rezultate...........................43V.3. IMPLEMENTAREA FUNCŢIONALITĂŢILOR PRINCIPALE...........................................43

V.3.1. Înregistrarea noilor membrii.........................................................................43V.3.2. Căutarea membrilor......................................................................................46V.3.3. Afişarea mebrilor...........................................................................................48V.3.4. Upload-ul fişierelor.......................................................................................49V.3.5. Managementul sesiunilor de lucru................................................................50

CONCLUZIE..................................................................................................................51

3

Page 4: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

INTRODUCERE

Dezvoltarea rapidă din ultima perioadă a resurselor software şi hardware din domeniul tehnologiei informaţiei are meritul de a oferi o mai bună comunicare şi un acces mult mai rapid la toate categoriile de informaţii. Acest lucru se poate observa foarte uşor datorită sistemului World Wide Web, cu ajutorul căruia, printr-un simplu click de mouse se poate naviga prin miile de resurse informaţionale din întreaga lume.

Această lucrare prezintă o aplicaţie ce constă într-un site dinamic, construit utilizând tehnologiile PHP şi MySQL. Acest site reprezintă o implementare Web a unei agenţii matrimoniale. Utilizatorii se înregistrează şi îşi pot introduce anumite informaţii personale. Se permite, de asemenea, căutarea în baza de date asociată, folosind anumite criterii. Căutarea şi vizualizarea mebrilor înregistraţi nu este permisă decât membrilor site-ului, pentru aceasta fiind implementat un mecanism de logare. Este implementat, de asemenea şi mecanismul de trimitere de e-mail către adresele membrilor şi de upload de fişiere pe server.

Lucrarea este structurată în cinci capitole, primele patru constând în prezentarea principalelor noţiuni şi concepte folosite în realizarea aplicaţiei, iar ultimul capitol reprezintă descrierea plicaţiei şi modul ăn care aceasta a fost realizată.

Capitolul 1 – Internet-ul reprezintă o scurtă introducere a principalelor noţiuni legate de Internet. Sunt explicate noţiuni ca Internet, protocolale, aplicaţii pentru internet, DNS, intrenet şi extranet, web servers şi web application servers, pagini web statice şi dinamice, limbaje de markup şi scripting, HTML, JavaScript, PHP.

Capitolul 2 – Introducere în PHP reprezintă o descriere a principalelor noţiuni legate de acest limbaj. Este descris modul de includere a codului PHP în cadrul codului HTML, sunt prezentate tipurile de date pe care acest limbaj le suportă şi tipurile de variabile care pot fi utilizate.

Capitolul 3 – Baze de date şi SQL prezintă noţiunile de bază legate de bazele de date relaţionale şi este descris pe scurt principalul limbaj de interogări folosit în prezent, SQL. De asemenea, este prezentat modul de creare a unei baze de date relaţionale şi sunt definite noţiuni ca: relaţie , cheie primară, cheie externă, normalizarea tabelelor.

Capitolul 4 – MySQL reprezintă o introducere în acest sistem de gestiune a bazelor de date realţionale. Sunt prezentate principalele caracteristici ţi facilităţi oferite de acesta. De asemenea, este prezentat modul de utilizare a MySQL,

4

Page 5: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

conectarea şi deconectarea de la server, crearea şi selectarea bazelor de date, crearea tabelelor şi intoducerea interogărilor.

Capitolul 5 – Aplicaţie reprezintă descrierea aplicaţiei. Implementarea acestui site a fost realizată folosind limbajul de server side scripting PHP datorită felxibilităţii acestuia şi a faptului că poate fi folosit gratuit, fără restricţii. De asemenea, a fost ales sistemul de gestiune a bazelor de date relaţioale MySQL datorită faptului că şi acesta poate fi folosit gratuit şi este Open Source şi este cel mai potrivit produs pentru accesarea şi administrarea bazelor de date prin Internet.

Interfaţa grafică a aplicaţiei a fost construită pe baza unui template, pe care toate paginile site-ului îl folosesc pentru a păstra acelaşi layout pe întregul site. De asemenea, pentru setarea modalităţilor de afişare a diferitelor elemente HTML, pentru alegerea stilului site-ului s-a folosit un fişier .css, acesta putând fi modificat sau înlocuit şi întregul site îşi schimbă automat înfăţişsarea.

Prin combinarea acestor două produse, PHP şi MySQL, aplicaţia realizată este foarte flexibile, putându-se adăuga noi funcţionalităţi dacă este necesar.

5

Page 6: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

I. INTERNET-UL

I.1. INTRODUCERE

Majoritatea site-urilor web sunt constituite din informaţii statice, dar Web-ul este un mediu puternic şi este capabil de mult mai mult şi oferă caracteristici precum: pagini Web dinamice, conectare la baze de date, pagini personalizate pentru utilizatori, colecţii şi prelucrări sofisticate ale datelor, interacţiuni de poştă electronică, interfeţe pentru utilizatori bogate şi atrăgătoare.

I.1.1 Internet-ul

Internet-ul este înconjurat de foarte multă ambiguitate şi confuzie dar, în câteva cuvinte, poate fi definit ca cea mai mare reţea din lume. Majoritatea reţelelor din prezent sunt reţele locale (Local Area Networks – LANs) şi sunt formate dintr-un grup de calculatoare aflate relativ aproape unul de celălalt şi conectate prin echipamente hardware speciale şi cabluri. Unele calculatoare îndeplinesc rolul de clienţi (cunoscute, de obicei, sub denumirea de workstations) iar altele sunt servere. Toate aceste calculatoare pot comunica între ele pentru a schimba informaţii.

O reţea mai mare, care se întinde pe mai multe locaţii geografice este, de obicei, folosită de marile companii care au sedii în mai multe localităţi. Fiecare dintre locaţii are propriul său LAN, care leagă calculatoarele locale. Aceste LAN-uri, la rândul lor, sunt interconectate prin intermediul unor medii speciale de comunicare. Legăturile pot fi de la legături de tip dial-up prin modem, până la legături de mare viteză T1 sau T3 sau legături prin fibră optică. Grupul complet al LAN-urilor interconectate se numeşte Wide Area Network (WAN). WAN-urile se folosesc pentru a conecta locaţii diferite ale unei companii.

Dacă s-ar dori conectarea tuturor calculatoarelor de oriunde s-ar începe prin rularea unor backbones de viteze foarte mari, conexiuni capabile să transmită cantităţi mari de date, între locaţii strategice – probabil mari oraşe sau ţări diferite. Aceste backbones ar fi asemănătoare autostrăzilor de mare viteză şi pe multe benzi dintre ţări.

Ar trebui definită o toleranţă la erori pentru a face aceste backbones complet redundante, astfel încât dacă vreo conexiune se întrerupe, ar mai fi disponibilă cel puţin o altă modalitate de a a atinge o destinaţie specifică.

Mai departe, ar fi create mii de legături locale care ar conecta fiecare oraş la backbone prin conexiuni mai puţin rapide. S-ar permite WAN-urilor şi LAN-

6

Page 7: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

urilor companiilor şi chiar şi utilizatorilor individuali cu modem-uri pentru dial-up să se conecteze la aceste puncte de acces locale. Unele calculatoare ar putea fi conectate tot timpul, în timp ce altele s-ar putea conecta doar la nevoie.

S-ar crea apoi un limbaj comun de comunicare astfel ca fiecare calculator conectat la această reţea să poate comunica cu oricare altul.

Şi în final ar trebui definită o schemă pentru a putea identifica în mod unic fiecare calculator conectat la reţea. Acest lucru va asigura faptul că informaţia trimisă unui anumit calculator va ajunge la destinaţia dorită.

Cu toate că aceasta este o descriere simplificată, este exact modul în care Internet-ul a fost realizat şi lucrează.

Backbone-urile de mari viteze există într-adevăr. Majoritatea sunt deţinute de marile companii de telecomunicaţii.

Punctele de acces locale, cunoscote sub numele de POP (Points of Presence) aparţin companiilor telefonice, de cablu şi furnizorilor locali de Internet (ISPs – Internet Service Providers)

Limbajul comun este IP – Internet Protocol, dar termenul de limbaj este impropriu. Un protocol reprezintă o mulţime de reguli ce guvernează comportamentul în anumite situaţii. Protocoalele permit realizarea comunicării fără întreruperi şi fără să apară neînţelegri. IP este protocolul folosit pentru comunicarea prin Internet, deci fiecare calculator trebuie să ruleze o copie a acestui protocol.

Identificatorii unici sunt adresele IP. Fiecare calculator, sau host, conectat la Internet are o adresă IP unică. Aceste adrese sunt formate din patru seturi de numere separate prin punct – de exemplu 208.193.16.100. Unele calculatoare au adrese fixe (sau statice), în timp ce altele au adrese alocate dinamic, de fiecare dată când este stabilită o conexiune. Indiferent de modul în care este este obţinută o adresă IP, oricare două calculatoare conectate la Internet nu vor putea folosi aceeaşi adresă IP în acelaşi timp.

I.1.2. Aplicaţii pentru Internet

Internet-ul în sine este o masivă reţea de comunicaţii şi oferă foarte puţin majorităţii utilizatorilor, din acest motiv au fost necesari 20 de ani pentru ca Internet-ul să devină fenomenul din prezent.

Internet-ul a fost ridicat la rangul de Information Superhighway şi această analogie este destul de precisă. Autostrăzile nu sunt aşa de atractive precum locurile în care se poate ajunge călătorind pe ele şi acest lucru este valabil şi pentru Internet. Ceea ce face Internet-ul aşa de atrăgător sunt aplicaţiile care rulează pe baza sa şi ceea ce poate fi realizat cu ajutorul acestora.

Cea mai cunoscută aplicaţie din prezent este World Wide Web. Mulţi oameni confundă Internet-ul cu World Wide Web, lucru complet greşit.

7

Page 8: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

Toate aplicaţiile pentru Internet folosesc protocolul IP pentru a comunica. Informaţia transmisă de aceste aplicaţii este împărţită în pachete, mici blocuri de date, care sunt trimise unei adrese IP destinaţie. Aplicaţia de la capătul celălalt procesează informţiile primate.

Câteva din aplicaţiile pentru Internet sunt:- Email – SMTP (Simple Mail Transfer Protocol) este cel mai cunoscut

mechanism de transmitere a mesajelor de poştă electronică, iar POP (Post Office Protocol) este interfaţa cea mai utilizată pentru accesarea mesajelor.

- FTP – File Transfer Protocol este folosit pentru trasferul fişierelor între calculatoare.

- IRC – Internet Relay Chat permite susţinerea de conferinţe în timp real, bazate pe text, prin Internet.

- NFS – Network File System este folosit pentru a partaja fişiere între diferite calculatoare.

- Newsgroups – liste de discuţii bazate pe thread-uri.- Telnet – folosit pentru conectarea la un calculator de la distanţă.- VPN – Virtual Private Networks permite accesul sigur al reţelelor private

la Internet.- WWW – World Wide Web.

I.1.3 DNS

Adresele IP reprezintă singurul mod de a specifica în mod unic un host. Când se doreşte comunicarea cu un alt host – un server de Web, de exemplu – trebuie specificată adresa IP a acestuia. Dar, după cum se ştie, foarte rar se specifică direct adresa IP, ci se specifică un hostname.

Mecanismul care asociază hostname-urile cu adresele IP se numeşte DNS (Domain Name Service). Când se specifică o adresa, cum ar fi www.yahoo.com, browser-ul trimite un o cerere de tip address resolution către un server DNS, cerând acestuia adresa IP asociată numelui specificat. Serverul DNS va returna adresa IP actuală şi browser-ul o va folosi pentru a comunica direct cu acel host.

Nu este obligatorie folosirea unui server DNS, utilizatorii ar putea specifica direct adresa IP a hostului cu care doresc să comunice, dar sunt câteva motive pentru care acest lucru nu se face:

- Adresele IP sunt greu de reţinut şi pot fi uşor scrise greşit.- Adresele IP se pot schimba. - Adresele IP trebuie să fie unice, dar numele DNS nu.- Un singur host, cu o singură adresă IP, poate avea mai multe nume DNS.

8

Page 9: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

I.1.4. Intranets şi Extranets

Un intranet nu este nimic mai mult decât un Internet privat. Cu alte cuvinte, este o reţea privată, de obicei un LAN sau WAN, care permite folosirea aplicaţiilor Internet-based într-un mediu sigur şi privat. Ca şi pe Internet-ul public, intranet-urile pot găzdui servere de Web, servere FTP sau orice alte servicii bazate pe IP.

Un extranet este o reţea de tip intranet care conectează mai multe site-uri sau organizaţii folosind tehnologii legate de intranet. Multe extranet-uri, de fapt, folosesc Intranet-ul ca backbone şi utilizează tehnici de criptare pentru a asigura securitatea datelor transmise prin reţea.

Cele două lucruri care deosebesc intranet-urile şi extranet-urile de Internet sunt cine le poate accesa şi de unde pot fi accesate. Dacă o aplicaţie poate rula pe Internet, atunci va rula cu siguranţă şi pe in intranet sau extranet.

I.2. Web Servers şi Web Application Servers

I.2.1. Servere Web

World Wide Web este construit pe baza unui protocol numit Hypertext Transfer Protocol (HTTP). HTTP este un protocol mic şi rapid care se potriveşte foarte bine sistemelor informatice multimedia şi distribuite şi salturilor între site-uri.

Web-ul constă în pagini cu informaţii de pe gazde care rulează software de tip server Web. Gazda este de multe ori identificată cu serverul Web, lucru care nu este corect. Serverul Web este un software, nu calculatorul în sine.

Un Web server este un program care furnizează pagini Web la cerere. Când un utilizator de la o adresă IP specifică solicită un anumit fişier, serverul Web încearcă să obţină acel fişier şi să-l trimită înapoi utilizatorului. Fişierul solicitat poate fi codul sursă HTML al unei pagini Web, o imagine GIF, un fişier Flash, un document XML, sau un fişier AVI. Browserul Web este cel care determină ceea ce trebuie cerut, nu serverul Web. Serverul doar procesează cererea.

Conexiunile la serverele de Web se stabilesc pe măsură ce sunt necesare. Dacă este cerută o pagină de la un server Web, o conexiune IP este stabilită prin Internet între gazda solicitantă şi gazda pe care rulează serverul Web. Pagina Web cerută este transmisă prin acea conexiune, iar aceasta este întreruptă de îndată ce pagina este primită. Dacă pagina primită conţine referinţe la alte informaţii ce

9

Page 10: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

trebuie descărcate (de exemplu, imagini GIF sau JPG), fiecare va fi obţinută folosind o nouă conexiune.

Pe un acelaşi host pot rula mai multe aplicaţii de Internet, de exemplu un server Web, un server FTP, un server DNS şi un server de mail SMTP POP3 pot rula în acelaşi timp. Fiecărui server îi este atribuit un port pentru a asigura că fiecare server va răspunde numai cererilor din partea clienţilor corespunzători.

Majoritatea serverelor folosesc un set de porturi predefinite. Serverele Web folosesc de obicei portul 80, dar acesta poate fi schimbat. Pot fi instalate pe porturi nestandard pentru a fi ascunse, şi de asemenea, pot fi instalate mai multe servere Web pe un singur calculator asociindu-le porturi diferite.

I.2.2. Pagini Web

Informaţiile din World Wide Web sunt stocate în pagini. O pagină poate conţine oricare din următoarele: text, header-e, liste, meniuri, tabele, formulare, elemente grafice, script-uri, stiluri (style sheets), obiecte multimedia.

Paginile Web sunt realizate folosind o serie de tehnologii pe partea de client şi sunt procesate şi afişate de către browsere.

I.2.3. Browsere Web

Browserele web sunt programe client folosite pentru a accesa site-uri şi pagini Web. Sarcina unui browser este de a procesa paginile Web primite şi de a le prezenta utilizatorului. Browser-ul încearcă să afişeze grafice, tabele, formulare, text formatat şi orice conţine pagina.

Cele mai cunoscute browsere web din prezent sunt Netscape Navigator şi Internet Explorer.

I.3. Pagini Web Statice şi Dinamice

I.3.1. HTML

Paginile Web sunt fişiere cu simplu text costruite folosind limbajul Hypertext Markup Language (HTML). Acesta este implementat ca o mulţime de

10

Page 11: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

tag-uri uşor de învăţat. Autorii paginilor Web folosesc aceste tag-uri pentru a marca paginile de text, iar browserele le folosesc pentru a randa şi afişa informaţiile pentru a putea fi vizualizate. Paginile Web pot să conţină legături hypertext la alte pagini.

I.3.2. JavaScript

HTML este un limbaj de markup. El permite crearea layout-ului paginilor şi a formularelor, dar nimic mai mult. Pentru a se construi interfeţe intuitive şi sofisticate este necesar şi un limbaj de scripting la nivel de client. Scripting-ul permite scrierea de cod (mici programe) care rulează în cadrul browserului.

Cel mai cunoscut limbaj de scripting pe parte de client este JavaScript, care este suportat (mau mult sau mai puţin) de aproape orice browser existent. Folosind JavaScript se poate realiza: validarea formularelor, animarea textului şi a imaginilor, crearea de meniuri drop-down şi a controalelor de navigare, se pot efectua procesări de bază numerice sau asupra textelor şi multe altele.

Scripting-ul permite programatorilor să detecteze şi să proceseze evenimentele. De exemplu, o pagină care se încarcă, un formular trimis, mişcarea pointer-ului mouse-ului asupra unei imagini sunt toate evenimente, iar script-urile pot fi executate automat de browser atunci cînd aceste evenimente au loc.

Script-urile pot fi incluse în codul HTML sau pot fi stocate în fişiere externe şi legate în interiorul codului HTML.

I.3.3. Alte Tehnologii pe parte de Client

Majoritatea browserelor noi permit folosirea şi a altor tehnologii, dintre care cele mai importante sunt:

- CSS (Cascading Style Sheets) – oferă o modalitate de a separa prezentarea de conţinut astfel încât ambele să poată fi refolosite şi modificate cu uşurinţă.

- DHTML (Dynamic HTML) – o combinaţie de HTML, script-uri şi CSS care folosite împreună, pot realiza interfeţe pentru utilizator foarte atractive şi interactive.

- Appleturi Java – mici programe care rulează în browser.- Macromedia Flash – o tehnologie inclusă în 98% din browserele existente,

care oferă un mecanism pentru crearea unor interfeţe atractive şi portabile.

11

Page 12: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

I.3.4. URL-uri

Piesa care leagă între ele serverele Web, browserele Web şi paginile Web este URL-ul.

Fiecare pagină din World Wide Web are o adresă care este introdusă în browser pentru a-i indica acestuia să încarce pagina respectivă.

Aceste adrese se numesc Uniform Resource Locators (URLs) şi sunt constituite din şase părţi, astfel:

- Protocol – protocolul care va fi folosit pentru a obţine obiectul. De obicei acesta este http pentru obiecte din World Wide Web. Dacă protocolul este specificat, atunci acesta trebuie urmat de semnele ://.

- Host – serverul Web de la care vor fi obţinute obiectele. Acesta poate fi specificat ca un nume DNS sau ca o adresă IP.

- Port – portul calculatorului gazdă pe care rulează serverul Web. Dacă este omis, atunci se foloseşte portul implicit, iar dacă este specificat, numărul portului trebuie precedat de semnul :.

- Path – calea către fişierul care se doreşte a fi primit sau scriptul care trebuie executat.

- File – numele fişierului cerut.- Query String – parametrii opţionali pentru script. Dacă este specificat,

atunci trebuie precedat de semnul ?.

I.3.5. Avantajul Paginilor Web Dinamice

Paginile dinamice sunt ceea ce dă viaţă Web-ului.Paginile statice sunt formate din text, imagini şi tag-uri HTML pentru

formatare. Aceste pagini sunt create şi întreţinute manual, astfel că dacă informaţiile se modifică şi pagina trebuie modificată. Aceasta implică încărcarea paginii într-un editor, realizarea modificărilor, reformatarea textului dacă este necesar şi apoi salvarea fişierului. Aceste operaţii necesită foarte mult timp dacă numărul paginilor care trebuie actualizate este mare.

Paginile dinamice conţin foarte puţin text. În schimb extrag informaţiile necesare din alte aplicaţii. Paginile dinamice pot comunica cu bazele de date, foi de calcul tabelar, sisteme de gestiune a bazelor de date client-server şi multe alte aplicaţii.

Crearea paginilor Web dinamice permite crearea de aplicaţii puternice, care pot include caracteristici precum următoarele:

- interogarea aplicaţiilor de baze de date existente pentru obţinerea datelor- crearea de interogări dinamice care facilitează obţinerea în mod flexibil a

datelor

12

Page 13: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

- execuţia procedurilor stocate- execuţia codului condiţional on-the-fly pentru a personaliza răspunsurile în

funcţie de situaţiile specifice- sporirea capabilităţilor formularelor HTML standard prin folosirea unor

funcţii de validare- popularea în mod dinamic a elementelor din formulare- personalizarea modului de afişare a informaţiilor legate de dată, timp şi

monedă folosind funcţii de formatare- uşurarea creării aplicaţiilor de introducere a datelor prin wizards- generarea automată de email- site-uri comerciale şi coşuri electronice de cumpărături- şi multe altele

I.3.6. Înţelegerea Aplicatiilor Web

Browserele Web trimit cereri către serverele Web, iar acestea le îndeplinesc – trimit înapoi informaţiite cerute către browser. Aceste informaţii sunt de obicei fişiere HTML, ca şi alte tipuri de fişiere.

Şi cam atât este ceea ce fac serverele Web. Ele sunt de fapt aplicaţii destul de simple – stau şi aşteaptă cererile pe care le îndeplinesc de îndată ce le primesc. Serverele Web nu permit interacţiunea cu bazele de date, nu permit personalizarea paginilor Web, nu permit procesarea rezultatelor trimiterii unui formular de către utilizator.

Un Web application Server este un software care extinde serverul Web, permiţânduţi acestuia să facă lucrurile pe care nu le poate face singur.

Când un server Web primeşte o cerere de la un browser, el cercetează acea cerere pentru a determina dacă este o simplă pagină Web sau o pagină care necesită prelucrări suplimentare de către un web application server. Acest lucru îl realizează prin cecetarea extensiei sau a tipului MIME. Dacă tipul MIME indică o pagină Web simplă, atunci serverul web îndeplineşte cererea şi trimite fişierul către browserul clinet nemodificată. Dar dacă tipul MIME indică faptul că fişierul cerut necesită procesarea de către un web application server, atunci web serverul trimite fişierul către web application server-ul corespunzător şi trimite browserului rezultatul pe care îl primeşte de la web application server.

Cu alte cuvinte web application serverele sunt preprocesoare pentru pagini. Acestea procesează pagina cerută înainte ca aceasta să fie trimisă înapoi la client.

13

Page 14: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

II. INTRODUCERE ÎN PHP

PHP, acronim care provine din "PHP: Hypertext Preprocessor", este un limbaj de scripting utilizat pe scară largă, realizat şi distribuit în sistem Open Source, care este special realizat pentru a dezvolta aplicaţii web, prin integrarea codului PHP în documente HTML. Sintaxa sa provine din C, Java şi Perl şi este uşor de învăţat. Scopul principal al limbajului este acela de a scrie rapid pagini web dinamice, dar cu PHP se pot realiza mult mai multe.

PHP este una dintre cele mai interesante tehnologii existente în prezent. Deoarece îmbină caracteristici dintre cele mai complexe cu simplitatea în utilizare, PHP a devenit rapid un instrument de frunte pentru dezvoltarea aplicaţiilor în Web. Totuşi, spre deosebire de alte instrumente populare pentru dezvoltarea aplicaţiilor Web, cum este Perl, PHP este un limbaj de programare comod pentru începători, chiar şi pentru cei care nu au mai desfăşurat activităţi de programare în trecut.

Ca şi alte limbaje de scripting pentru Web, PHP vă permite să furnizaţi un conţinut Web dinamic, adică un conţinut Web care se modifică automat de la o zi la alta sau chiar de la un minut la altul. Conţinutul Web este un element important în susţinerea traficului unui sit Web; de regulă, vizitatorii nu vor mai reveni la o pagină Web care conţine aceleaşi informaţii ca şi cele prezentate la ultima vizită. Pe de altă parte, siturile Web frecvent actualizate pot atrage cantităţi enorme de trafic.

Mai mult, spre deosebire de limbajele de scripting, precum JavaScript, PHP rulează pe serverul Web, nu în browserul Web. În consecinţă, PHP poate obţine accesul la fişiere, baze de date şi alte resurse inaccesibile programului JavaScript. Acestea constituie bogate surse de conţinut dinamic, care atrag vizitatorii.

II.1. Noţiuni Fundamentale

II.1.1. Ce este PHP?

Spre deosebire de un script scris în alte limbaje cum ar fi Perl sau C – în loc de a scrie un program cu o mulţime de comenzi pentru a produce un HTML, folosind PHP se poate scrie un script HTML, ca cel de mai jos, ce include cod pentru a realiza ceva. Codul PHP este delimitat de coduri de start şi de sfârşit ce permit intrarea şi ieşirea din "modul PHP".

<html>14

Page 15: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

<head> <title>Exemplu</title> </head> <body> <?php echo "Salut, sunt un script PHP!"; ?> </body></html>

Diferenţa dintre PHP şi altceva cum ar fi JavaScript este acela că PHP este executat pe server pe când JavaScript este executat pe calculatorului clientului (de browserul Web). Pentru un script similar celui de mai jos sus pe un server, clientul ar primi doar rezultatele scriptului ce este rulat, fără a vedea în nici un fel codul din spatele acestuia. Se poate chiar configura serverul de web ca acesta să proceseze toate fisierele HTML cu PHP şi astfel nu exită nici o metodă ca un utilizator să stie defapt ce există în fişiere.

II.1.2. Ce poate face PHP?

Cu PHP se poate face orice. PHP este în principal axat pe partea de scripting ce rulează pe server, deci poate face orice face şi un program CGI, cum ar fi colectarea de date de la formulare, generarea de conţinut dinamic sau trimitere şi primire de cookie-uri. Dar PHP poate face mult mai multe.

Există trei domenii principale unde sunt folosite scripturile PHP. - Scripturi ce ruleaza pe server. Acesta este cel mai tradiţional şi cel mai

important pentru PHP. Este nevoie de trei lucrui pentru a face să meargă: interpretorul PHP (CGI sau modul de server), un server web şi un browser web. E nevoie ca serverul de web să fie pornit, cu o conexiune PHP instalată. Se poate accesa rezultatul programelor PHP cu un browser prin intermediul serverului de web.

- Scripting in linie de comandă. Se poate face ca PHP să ruleze fără a fi nevoie de server şi de browser, ci doar de interpretorul PHP. Această metodă este ideală pentru script-urile ce se vor a fi executate de regulă folosind cron (task scheduler în Windows), sau sarcini simple de procesare a textelor.

- Scrierea de aplicaţii ce rulează de partea clientului în mod grafic (GUI). Probabil că PHP nu este limbajul cel mai bun de a scrie aplicaţii cu ferestre pentru Windows sau alte sisteme de operare, dar dacă este bine cunocut şi se doreşte folosirea unor facilităţi avansate ale PHP-ului în aplicaţiile ce rulează de partea clientului, se poate totuşi folosi PHP-GTK pentru a scrie

15

Page 16: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

astfel de programe. De asemenea, există posibilitatea de a scrie aplicaţii ce rulează pe platforme diferite folosind această metodă. PHP-GTK este o extensie a PHP-ului, nedisponibila în distribuţia principală de PHP.

PHP poate fi folosit pe aproape toate marile sisteme de operare, incluzând Linux, multe variante de Unix (incluzând HP-UX, Solaris şi OpenBSD), Microsoft Windows, Mac OS X, RISC OS, probabil şi altele. PHP are de asemenea suport pentru majoritatea serverelor de web din prezent. Acestea includ serverele Apache, Microsoft Internet Information Server, Personal Web Server, Netscape şi iPlanet, serverul Oreillz Website Pro, Caudium, Xitami, OmniHTTPd, şi multe atele. Pentru majoritatea serverelor PHP are un modul, iar pentru celelalte suportă standardul CGI, PHP putând să lucreze ca un procesor CGI.

Deci, cu PHP, există libertatea de a alege un sistem de operare şi un server de web. Chiar mai mult, există posibilitatea de a alege programarea procedurală sau programarea orientată obiect, sau chiar sa se combine acestea. Cu toate acestea, nu orice facilitate a standardului POO este prezentă în versiunea curentă a PHP-ului, multe librării de cod şi aplicaţii mari (incluzând şi librăria PEAR) sunt scrise folosind doar cod POO.

Cu PHP programatorul nu este limitat să scoată rezultat HTML. Posibilităţile PHP-ului includ afişarea de imagine, fişiere PDF şi chiar filmuleţe Flash (folosind librăriile libswf şi Ming) toate generate instant. Se poate de asemeanea ca rezultatul să fie orice fişier text, cum ar fi XHTML sau orice alte fişiere XML. PHP poate genera autmoat aceste fişiere şi să le salveze în sistemul de fişiere în loc să le afişeze, formând un cache de partea serverului pentru conţinutul dinamic.

Una dintre cele mai puternice şi importante facilităţi în PHP este suportul său pentru o gamă larga de baze de date. Scrierea une pagini de web ce interacţioneaza cu o bază de date este incredibil de simplă. PHP suportă şi ODBC, standardul Open Database Connection, deci se poate conecta la orice altă bază de date ce suporta acest standard mondial.

PHP are deasemeanea suport pentru a conversa cu alte servicii folosind protocoale cum ar fi LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (pe Windows) şi multe altele. Se pot, de asemenea, deschide socket-uri de reţea şi se poate interacţiona între aproape toate limbajele de programare Web. PHP are suport pentru instanţierea obiectelor Java şi utilizarea lor într-un mod transparent ca obiecte PHP. Se pot de asemenea folosi extensii CORBA pentru a accesa obiecte aflate la distanţă.

PHP are capabilităţi extrem de folositoare pentru procesarea textului, de la POSIX Extins sau expresii regulare Perl, până la parsarea documentelor XML. Pentru parsarea şi accesarea documentelor XML, suportă standardele SAX şi DOM.

16

Page 17: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

Folosind PHP în domeniul comerţului electronic, sunt foarte folositoare pentru programul tău de plaţi online funcţii de plată Cybercash, CyberMUT, VeriSign Payflow Pro şi CCVS.

În cele din urmă, dar nu ultimul rând, PHP are şi alte extensii interesante, cum ar fi funcţii ale motorului de căutare mnoGoSearch, funcţii pentru accesarea IRC-ului, multe utilitare de compresie (gzip, bz2), conversie de calendar, traducere...

II.2. Elemente de bază ale sintaxei

II.2.1. Ieşirea din modul HTML

Când PHP interpretează un fişier trece prin textul acestuia până când întâlneşte unul din tag-urile speciale care îi spun să pornească interpretarea textului ca fiind cod PHP. Mai departe, parser-ul execută tot codul întâlnit, până la întâlnirea unui tag PHP de închidere, care anunţă trecerea normală prin text, din nou. Acest mecanism permite înglobarea codului PHP în interiorul codului HTML: tot ceea ce este în afara tag-urilor PHP este lăsat nemodificat, în timp ce tot ceea ce este în interior este interpretat ca fiind cod.

Există patru categorii de tag-uri care pot fi folosite pentru a marca bolcurile de cod PHP. Dintre acestea, doar două (<?php. . .?> şi <script language="php">. . .</script>) sunt întotdeauna disponibile. Cu toate ca tag-urile în format scurt şi cele de tip ASP par a fi convenabile, ele nu sunt la fel de portabile ca cele în format lung. De asemenea, dacă se doreşte includerea codului PHP în XML sau XHTML, este necesar să se folosească tag-urile în forma <?php. . .?> pentru a corespunde standardului XML

Cele patru tipuri de tag-uri sunt:1. <?php echo("if you want to serve XHTML or XML

documents, do like this\n"); ?>2. <? echo ("this is the simplest, an SGML processing

instruction\n"); ?><?= expression ?> This is a shortcut for "<? echo expression ?>"

3. <script language="php"> echo ("some editors (like FrontPage) don't like processing instructions"); </script>4. <% echo ("You may optionally use ASP-style tags"); %>

17

Page 18: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

<%= $variable; # This is a shortcut for "<% echo . . ." %>

Prima variantă, <?php. . .?>, este metoda preferată deoarece permite folosirea PHP-ului în cod corform standardului XML, cum ar fi XHTML.

Cea de-a doua variantă nu este întotdeauna posibilă. Tag-urile prescurtate pot fi folosite doar dacă au fost activate. Acest lucru poate fi făcut prin intermediul funcţiei short_tags() (numai în PHP3), prin activarea opţiunii short_open_tag în fişierul de configurare, sau prin compilarea scripturilor folosind opţiunea enable-short-tags. Chiar dacă este implicit activată în fişierul php.ini, folosirea tag-urilor prescurtate nu este recomandată.

Cea de-a patra variantă poate fi folosită numai dacă tag-urile de tip ASP au fost activate folosind setarea asp_tags din fişierul de configurare.

PHP permite folosirea unor structuri ca cea de mai jos:

<?phpif ($expression) { ?> <strong>This is true.</strong> <?php } else { ?> <strong>This is false.</strong> <?php }?>

Aceasta funcţionează exact cum este de aşteptat, deoarece când PHP întâlneşte tag-ul de închidere ?> începe afişarea a ceea ce întâlneşte până la apariţia unui alt tag de start. În cazul blocurilor mari de text, ieşirea din modul PHP este în general mai eficientă decât trimiterea textului folosind echo() sau print().

II.2.2. Separarea instrucţiunilor

Instrucţiunile sunt separate la fel ca în C sau Perl – fiecare instrucţiune este terminată cu un semn punct şi virgulă.

Tag-ul de închidere implică şi sfârşitul instrucţiunii, deci următoarele două exemple sunt echivalente:

18

Page 19: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

<?php echo "This is a test";?><?php echo "This is a test" ?>

II.2.3. Comentariile

PHP suportă comentarii de tip 'C', 'C++' şi Unix shell. De exemplu:

<?php echo "This is a test"; // This is a one-line c++ style comment /* This is a multi line comment yet another line of comment */ echo "This is yet another test"; echo "One Final Test"; # This is shell-style style comment?>

Comentariul pe o sigură linie, de fapt realizează comentarea codului până la sfârşitul liniei curente sau până la terminarea blocului curent PHP, oricare din aceste două cazuri apare primul.

II.3. Tipuri de date

PHP suportă opt tipuri primitive de date. Patru tipuri scalare: - boolean . integer - float (numere în virgulă mobilă, sau ‘double’) - string Două tipuri compuse: - array - obiect Două tipuri speciale: - resource - NULL

19

Page 20: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

Tipul unei variabile, de obicei nu este stabilit de programator, ci este decis la rulare de PHP, în funcţie de contextul în care acea variabilă este folosită.

II.4 Variabile

II.4.1 Noţiuni de bază

În PHP variabilele sunt reprezentate folosind un semn dollar urmat de numele variabilei. Numele variabilelor sunt case-sensitive.

În PHP3 variabilele sunt întotdeauna atribuite prin valoare. Cu alte cuvinte, atunci cînd o expresie este atribuită unei variabile, întreaga valoare a expresiei originale este copiată în variabila destinaţie. Aceasta înseamnă că, de exemplu, după atribuirea valorii unei variabile alteia, schimbarea uneia dintre aceste variabile nu are nici un efect asupra celeilalte.

PHP4 oferă şi un alt mod de a atribui valori valiabilelor: prin referinţă. Aceasta înseamnă că noua variabilă referă (devine un alias pentru, sau indică către) variabila originală. Schimbări în variabila nouă o afectează şi pe cea iniţială, şi invers. Aceasta înseamnă de asemenea că nu sunt realizate copii şi astfel atribuirea se realizează mai rapid.

Pentru a realiza o atribuire prin referinţă trebuie doar ataşat un ampersand(&) la începutul variabilei care va fi atribuită (variabila sursă), ca în exemplul următor:

<?php$foo = 'Bob'; // Assign the value 'Bob' to $foo$bar = &$foo; // Reference $foo via $bar.$bar = "My name is $bar"; // Alter $bar...echo $bar;echo $foo; // $foo is altered too.?>

II.4.2 Variabile predefinite

PHP furnizează un număr larg de variabile predefinite. Multe din aceste variabile, nu pot fi documetate complet deoarece sunt dependente de serverul pe care rulează, de versiunea şi setarea acestuia precum şi de alţi factori.

20

Page 21: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

Unele din aceste variabile nu vor fi folosite când PHP rulează în linie de comandă.

II.4.3. PHP Superglobals

$GLOBALS Conţine o referinţă la fiecare variabilă care este în mod curent valabilă în

scopul global al script-ului. Cheile acestui şir sunt numele variabilelor globale.

$_SERVERReprezintă variabilele setate de serverul de web sau legate direct de mediul

de execuţie al scriptului curent.

$_GET Reprezintă variabilele oferite scritpt-ului direct prin HTTP GET. Analog

vechiului şir $HTTP_GET_VARS (care încă este valabil, dar depreciat).

$_POST Reprezintă variabilele oferite scritpului direct prin HTTP POST. Analog

vechiului şir $HTTP_POST_VARS (care încă este valabil, dar depreciat).

$_COOKIE Reprezintă variabilele oferite scritpului direct prin HTTP. Analog

vechiului şir $HTTP_COOKIE_VARS (care încă este valabil, dar depreciat).

$_FILES Reprezintă variabilele oferite scritpului prin upload-ul de fişiere folosind

modul POST din HTTP. Analog vechiului şir $HTTP_POST_FILES (care încă este valabil, dar depreciat).

$_ENV Reprezintă variabilele oferite scritpt-ului prin mediu. Analog vechiului şir

$HTTP_ENV_VARS (care încă este valabil, dar depreciat). $_REQUEST

Reprezintă variabilele oferite scritpt-ului prin mecanismele de input GET, POST, şi COOKIE, deci care nu pot fi de încredere.

$_SESSION Reprezintă variabilele registrate unei sesiuni a script-ului. Analog

vechiului şir $HTTP_SESSION_VARS (care încă este valabil, dar depreciat).

21

Page 22: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

II.4.4. Folosirea variabilelor statice

O importantă caracteristică a scope-ului variabilei o reprezintă variabila statică. O variabilă statică există în scope-ul funcţiei locale, dar nu îşi pierde valoarea când execuţia programului părăseşte acest scope. Să considerăm următorul exemplu:

<?phpfunction Test () { $a = 0; echo $a; $a++;} ?>

Această funcţie este destul de nefolositoare deoarece de fiecare dată este apelată să seteze valorea 0 variabilelei $a şi să printeze "0".

Instrucţiunea $a++ care incrementează variabila nu serveşte nici unui scop deoarce, de îndată ce funcţia iese, variabila dispare. Pentru folosirea unei funcţii de numărare care nu va mai pierde număratoarea curentă, variabiala $a este declarată statică.

<?phpfunction Test(){ static $a = 0; echo $a; $a++;}?>

Astfel, de fiecare dată când funcţia Test() este apelată, aceasta va afişa valoarea variabilei $a şi o va incrementa.

Variabilele statice oferă, de asemenea, un mod de a lucra cu funcţiile recursive. O funcţie recursivă este o funcţie care se autoapelează. Trebuie avută grijă la scrierea unei funcţii recursive, deoarece este posibilă realizarea unei recursii infinite. Trebuie asigurat un mod de a termina recursia. Următoarea funcţie recursivă simplă numără până la 10, folosind variabila statică $count pentru a ştii când să se oprească:

<?phpfunction Test(){

22

Page 23: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

static $count = 0;

$count++; echo $count; if ($count < 10) { Test (); } $count--;}?>

II.4.5. Variabile din afara mediului PHP

Formulare HTML (GET şi POST)

Când un formular este trimis unui scrip PHP, informaţiile din acel formular sunt automat transmise scriptului PHP. Sunt mai multe modalităţi de a accesa informaţia, de exemplu:<form action="foo.php" method="POST"> Name: <input type="text" name="username"><br> Email: <input type="text" name="email"><br> <input type="submit" name="submit" value="Submit me!"></form>

În funcţie de setările şi preferinţele particulare, sunt multe modalităţi de a accesa datele din formulare HTML. Câteva exemple:

<?php // Available since PHP 4.1.0

print $_POST['username']; print $_REQUEST['username'];

import_request_variables('p', 'p_'); print $p_username;

// Available since PHP 3. As of PHP 5.0.0, these long predefined// variables can be disabled with the register_long_arrays directive.

23

Page 24: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

print $HTTP_POST_VARS['username'];

// Available if the PHP directive register_globals = on. As of // PHP 4.2.0 the default value of register_globals = off.// Using/relying on this method is not preferred.

print $username;?>

Folosirea unui formular de tip GET este similară, cu deosebirea că se va folosi variabila predefinită GET în schimb. GET se poate folosi şi pentru extragerea informţiilor din QUERY_STRING (informaţiile de după semnul ? din URL). De exemplu, URL-ul http://www.example.com/test.php?id=3 conţine date GET care sunt accesibile prin $_GET['id'].

II.4.6. Cookie-uri HTTP

PHP oferă un suport transparent pentru Cookies. Cookie-urile reprezintă un mecanism pentru stocarea datelor în browser şi astfel se pot identifica utilizetoriicare revin pe o anumită pagină. Cookie-urile se pot seta folosind funcţia setcookie(). Cookie-urile fac parte din header-ul HTTP, deci funcţia setcookie() trebuie apelată înainte de trimiterea oricărui conţinut către browser. Informaţiile de tip Cookie sun apoi stocate în array-urile corespunzătoare, cum ar fi $_COOKIE, $HTTP_COOKIE_VARS ca şi în $_REQUEST.

Dacă se doreşte atribuire unor valori multiple unei singure variabile Cookie, aceasta poate fi tratată ca un array. De exemplu:

<?php setcookie("MyCookie[foo]", "Testing 1", time()+3600); setcookie("MyCookie[bar]", "Testing 2", time()+3600);?>

Aceasta va crea două variabile cookie separate, cu toate că MyCookie va fi un singur array.

24

Page 25: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

III. BAZE DE DATE ŞI SQL

III.1. Concepte ale bazelor de date relaţionale

III.1.1. Structura unei baze de date relaţionale

O bază de date este o colecţie de date organizată astfel încât acestea să poată fi uşor găsite şi actualizate. O bază de date conţine toate informaţiile necesare despre obiectele ce intervin într-o mulţime de aplicaţii, relaţiile logice între aceste informaţii şi tehnicile de prelucrare corespunzătoare. În bazele de date are loc o integrare a datelor, în sensul că mai multe fişiere sunt privite în ansamblu, eliminându-se pe cât posibil informaţiile redundante. De asemenea, se permite accesul simultan la aceleaşi date, situate în acelaşi loc, sau distribuite spaţial, a mai multor persoane de pregătiri diferite, fiecare cu stilul personal de lucru.

Sistemul de programe care permite construirea unei baze de date, introducerea informaţiilor în bazele de date şi dezvoltarea de aplicaţii privind bazele de date se numeşte Sistem de Gestiune a Bazelor de Date (SGBD). Un SGBD dă posibilitatea utilizatorului să aibă acces la date folosind un limbaj de nivel înalt, apropiat de modul obişnuit de exprimare, pentru a obţine informaţii, utilizatorul făcând abstracţtie de algoritmii aplicaţi pentru selecţionarea datelor implicate şi a modului de memorare a lor. SGBD-ul este o interfaţă între utilizatori şi sistemul de operare.

Sistemele de baze de date au în vedere mai multe tipuri de structuri de reprezentare a informaţiilor la nivel logic şi de operare cu ele dintre acestea, modelul relaţional fiind cel mai folosit.

Acest model a fost dezvoltat de un matematician de la IBM, E.F. Codd, prin anii 1960, iar bazele de date organizate be baza acestui model se numesc baze de date relaţionale.

Un model relaţional de baze de date cuprinde trei componente principale:- Structura datelor - prin definirea unor domenii şi a relaţiilor n-are.- Integritatea datelor - prin impunerea unor restricţii.- Prelucrarea datelor - prin operaţii din algebra relaţională sau calculul relaţional.

Modelul relaţional se bazează pe noţiunea matematică de relaţie, aşa cum este definită în teoria mulţimilor, şi anume ca o submulţime a produsului cartezian a unei liste finite de mulţimi numite domenii. Elementele unei relaţii se numesc tupluri, iar numărul de domenii din produsul cartezian se numeşte aritatea relaţiei.

De obicei relaţiile sunt reprezentate sub forma unor tabele în care fiecare rând reprezintă un tuplu şi fiecare coloană reprezintă valorile tuplurilor dintr-un

25

Page 26: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

domeniu dat al produsului cartezian. Coloanelor şi, respectiv, domeniilor corespunzătoare lor li se asociază nume intitulate atribute.

Accesul la informaţii se face pe baza cheilor. O cheie este o coloană (sau un grup de coloane) care identifică în mod unic un rând dintr-un tabel.

III.1.2. Normalizarea tabelelor

Pentru a deosebi anumite calităţi specifice ale unor relaţii, s-au făcut mai multe clasificări, dintre acestea, cea mai frecvent utilizată fiind clasificarea în forme normale. Se spune că o relaţie (un tabel) este într-o formă normală particulară dacă satisface o mulţime dată de constrângeri. Transformarea unei relaţii într-o mulţime de relaţii de un anumit tip se numeşte normalizare. Există cinci forme normale, primele trei au fost definite de Codd, iar a patra şi a cincea au fost definite de Fagin.

Principalele scopuri urmărite în procesul de normalizare sunt: eliminarea unor redundanţe, evitarea unor anomalii de reactualizare, realizarea unui proiect care să reprezinte cât mai fidel modelul real (uşor de înţeles şi eventual de modificat), stabilirea unor constrângeri de integritate simple şi altele.

III.1.3. Structured Query Language

SQL (Structured Query Language) este un limbaj relaţional de cereri care formează nucleul multor sisteme de gestiune a bezelor de date. SQL a fost dezvoltat de IBM în anii '70 - '80 şi standardizat la sfârşitul anilor '80.

În ciuda simplităţii sale, SQL este un limbaj foarte puternic, care poate obţine accesul la date stocate în mai multe tabele, poate filtra datele dorite şi poate sorta, rezuma şi afişa rezultatele.

În general, nu se pot anticipa toate modalităţile în care utilizatorii pot dori să obţină acces la date şi să le vizualizeze. Ca atare, nu se pot scrie programe de aplicaţie care să satisfacă fiecare potenţială necesitate de informaţii. Este aproape sigur că vor apărea unele cereri de date neprevăzute (sau ad-hoc).

Utilizând SQL, este posibil accesul la datele stocate într-o bază de date relaţională fără a scrie un program de aplicaţie, permiţând frecvent evitarea întârzierilor şi a costurilor implicate de programarea personalizată. Astfel, bazele de date relaţionale permit satisfacerea tuturor cererilor ad-hoc de informaţii, care ar rămâne fără răspuns în alte situaţii.

În funcţie de întrebuinţarea sa, SQL poate fi împărţit în trei componente:- DDL - Data Definition Language – folosit pentru a crea bazele de date.- DML - Data Manipulation Language - folosit la actualizarea datelor.

26

Page 27: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

- DQL - Data Query Language - folosit pentru extragerea informaţiilor din baze de date.

III.2. Implementarea unei baze de date

III.2.1. Proiectarea unei baze de date

Un instrument frecvent utilizat de proiectare a bazelor de date constă din procedeul cunoscut sub numele de modelare entitate-relaţie sau modelare E-R. În contextul modelării E-R, o entitate este similară cu un tabel relaţional, cu alte cuvinte, conţine date care descriu un set de individualităţi corelate. Modelarea E-R este un proces în cadrul căruia coloanele, entităţile şi relaţiile între entităţi sunt descoperite şi organizate. Un model E-R poate fi rafinat cu uşuinţă, pentru a genera o structură a unei baze de date, care poate fi transformată într-o bază de date relaţională efectivă.

III.2.2. Modelare E-R

Procesul de modelare E-R costă în patru faze principale:1. Identificarea coloanelor.2. Gruparea coloanelor în entităţi.3. Identificarea cheilor primare.4. Identificarea cheilor externe

III.2.3. Identificarea coloanelor

Prima operaţie din cadrul procesului de modelare E-R este identificarea coloanelor. Coloanele înregistrează o singură caracteristică a unei entităţi. În încercarea de identificare a coloanelor în general este util să se răspundă la unele întrebări conexe, cum sunt următoarele:- Care sunt deciziile pe care sistemul trebuie să le ia sau să le susţină?- Care sunt operaţiile pe care sistemul trebuie să le execute sau să le susţină?- Care sunt datele necesare pentru a lua aceste decizii şi pentru a efectua aceste

operaţii?

27

Page 28: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

III.2.4. Gruparea coloanelor în entităţi

De obicei este evident că unele coloane sunt corelate, în sensul că fac referire la un anumit set de individualităţi corelate. Ca atare, aceste coloane pot fi grupate pentru a forma o entitate. Uneori o coloană dată este corelată cu mai multe entităţi; în acest caz, coloana poate apărea de mai multe ori pe listă.

III.2.5. Identificarea cheilor primare

Fiecare entitate va deveni un tabel relaţional şi ca atare va trebui să aibă o cheie primară. Se examinează fiecare entitate pentru a determina dacă una dintre coloanele sale asociate are o valoare unică pentru fiecare din apariţiile entităţii. Dacă o asemenea coloană există, aceasta va fi identificată drept cheie primară a entităţii.

Se pot gaăsi unele entitaţi care nu conţin nici o coloană adecvată pentru rolul de cheie primară. Într-o asemenea situaţie se poate căuta o serie de coloane care au o valoare combinată unică. Dacă se descoperă o asemenea serie, se poate identifica drept cheie primară compusă a entitaţii.

S-ar putea să nu se descopere nici o coloană sau serie de coloane care să identifice în mod unic fiecare apariţie a unei entitaăţi. În acest caz, se creează o coloană nouă, care va conţine o identificare artificială unică, şi se identifică noua coloană ca fiind cheia primară a entitaţii.

Se poate folosi o identificare artificială unică chiar şi atunci când una sau mai multe coloane pot servi drept cheie primară. Astfel, se evită problemele care apar când identificatori presupuşi unici se dovedesc a nu fi unici.

III.2.6. Identificarea cheilor externe

Operaţia finală şi cea mai dificilă din cadrul activitaţii de modelare E-R o constituie identificarea cheilor externe. Acestea sunt pur şi simplu coloane ale caror valori sunt corelate cu acelea ale valorilor cheilor primare ale unei entităţi oarecare. Procesul de identificare a cheilor externe constă în compararea coloanelor cu cheile primare şi, pentru fiecare combinaţie posibilă, în raspunsul la întrebarea: “Există o relaţie între valoarea acestei coloane şi valoarea acestei chei primare?”.

28

Page 29: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

III.2.7. Rafinarea modelelor E-R

Ultima operţie de fineţe aplicată unui model E-R, după normalizarea bazei de date, constă în specificarea unui tip de date pentru fiecare coloană.

Majoritatea bazelor de date relaţionale acceptă urmatoarele tipuri de date generale:- caracter - întreg - zecimal - dată şi oră- binar

29

Page 30: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

IV. MySQL

IV.1. Introducere în MySQL

MySQL este un sistem de getiune a bazelor de date. Mai mult chiar, MySQL este un sistem de gestiune a bezelor de date relaţionale şi este distribuit în regim Open Source.

MySQL software is Open Source. Aceasta înseamnă că MySQL poate fi descărcat de pe Internet, poate fi folosit fără a plăti ceva şi, dacă se doreşte, codul sursă poate fi studiat şi I se pot aduce modificări necesare.

Serverul de baze de date MySQL este foarte rapid, fiabil şi uşor de utilizat. Iniţial a fost dezvoltat pentru a manipula baze de date de dimensiuni mari mult mai rapid decât soluţiile existente. Conectivitatea sa, viteza şi securitatea fac ca Serverul MySQL să fie potrivit pentru accesarea bazelor de date prin Internet.Why use the MySQL Database Server?

MySQL Database Software este un sistem client/server ce constă într-un server MySQL multithreaded care suportă diferite programe client şi biblioteci, unelte administrative şi o gamă largă de interfeţe pentru programarea aplicaţiilor (Application Programming Interfaces – APIs)

IV.2. Caracteristicile de bază ale MySQL

IV.2.1. Componente interne şi portabilitate

Câteva dintre caracteristicile de bază ale MySQL sunt:- Scris în C şi C++- Testat cu o gamă largă de compilatoare diferite- Funcţionează pe diferite platforme- Dispune de API pentru C, C++, Eiffel, Java, Perl, PHP, Pyton, Ruby şi Tcl- Complet multi-threaded folosind thread-uri de kernel. Acest lucru înseamnă că

poate lucra cu uşuinţă pe mai multe procesoare dacă sunt disponibile- Oferă motoare tranzacţionale şi non-tranzacţionale de stocare a datelor- Un sistem de alocare a memoriei foarte rapid şi bazat pe thread-uri- Join-uri ale tabelelor foarte rapide- Foloseşte tabele temporare stocate în memorie- Funcţiile SQL sunt implementate folosind o bibliotecă de clase optimizată şi

sunt foarte rapide. De obicei, nu are loc alocare a memoriei după iniţializarea interogărilor.

30

Page 31: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

- Serverul este disponibil ca program separat ce poate fi folosit într-un mediu de reţea de tip client/server. De asemenea, este disponibil şi ca bibliotecă ce poate fi inclusă în aplicaţii de sine stătătoare

IV.2.2. Tipuri de coloane

- MySQL dispune de multe tipuri de date pentru coloane: numere întregi de 1,2,3,4 şi 8 bytes lungime cu/fără semn, FLOAT, DOUBLE, CHAR, VARCHAR, TEXT, BLOB, DATE, TIME, DATETIME, TIMESTAMP, YEAR, SET, ENUM, şi tipuri geometrice OpenGIS

- Înregistrări cu lungime fixă şi cu lungime variabilă

IV.2.3. Comenzi şi funcţii

- Suport complet pentru operatori şi funcţii în clauzele SELECT şi WHERE ale interogărilor.

- Suport pentru clauzele GROUP BY şi ORDER BY, şi pentru funcţii de grup (COUNT(), COUNT(DISTINCT ...), AVG(), STD(), SUM(), MAX(), MIN(), şi GROUP_CONCAT()).

- Suport pentru LEFT OUTER JOIN and RIGHT OUTER JOIN.- Suport pentru alias-uri de tabele şi coloane.- DELETE, INSERT, REPLACE şi UPDATE returnează numărul de rânduri

modificate.- Comanda SHOW specifică pentru MzSQL poate fi folosită pentru a obţine

informaţii despre bazele de date, tabele şi indecşi.- Numele funcţiilor nu intră în conflict cu numele tabelelor sau ale coloanelor.- Într-o acceaşi interogare se pot folosi tabele din baze de date diferite

IV.2.4. Securitate

- Un sistem de privilegii şi parole foarte flexibil şi sigur care permite verificarea pe baza host-ului.

- Parolele sunt sigure deoarece tot traficul legat de parole este criptat când are loc conectarea la server.

31

Page 32: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

IV.2.5. Scalabilitate şi limite

- Manipulează baze de date de dimensiuni mari. MzSQL este folosit cu baze de date care conţin 50 de milioane de înregistrări.

- Sunt permişi până la 32 de indecşi pentru un tabel. Fiecare index poate consta din una până la 16 coloane sau părţi de coloane.

IV.2.6. Conectivitate

- Clienţii se pot conecta la serverul MySQL folosind socket-uri TCP/IP pe orice platformă.

- Interfaţa Connector/ODBC oferă suport MySQL pentru programe client care folosesc conexiuni ODBC (Open DataBase Conectivity).

- Interfaţa Connector/JDBC oferă suport MySQL pentru programe client Java care folosesc conexiuni JDBC (Java DataBase Conectivity).

IV.2.7. Localizare

- Serverul poate să prezinte mesaje de eroare clienţilor în multe limbi.- Suport complet pentru diferit seturi de caractere.- Toate datele sunt salvate folosind un set de caractere specificat. Toate

comparaţiile pentru coloane de tip şir obişnuit de caractere sunt case-insensitive.

- Sortarea este realizată în concordanţă cu setul de caractere ales.

IV.2.8. Clienţi şi unelte

- Serverul MySQL are suport inclus pentru instrucţiuni SQL care verifică, optimizează şi repară tabelele. Aceste instrucţiuni sunt disponibile în linia de comandă prin intermediul clientului mysqlcheck.

- Toate programele MySQL pot fi invocate cu opţiunea –help sau -? Pentru a obţine suport online.

32

Page 33: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

IV.3. Fundamente MySQL

IV.3.1. Conectarea şi deconectarea de la server

Pentru a realiza conectarea la server trebuie specificat un nume de utilizator şi, de cele mai multe ori, o parolă. Dacă serverul rulează pe un alt calculator trebuie specificat şi un hostname. Conectarea se realizează astfel:

shell> mysql -h host -u user -pEnter password: ********

unde host şi user reprezintă hostname-ul unde rulează serverul MySQL şi respectiv numele unui cont MySQL, iar ******** reprezintă parola care trebuie introdusă.

Dacă conectarea se realizează cu succes în continuare sunt afişate informaţii introductive, urmate de prompt-ul mysql>

shell> mysql -h host -u user -pEnter password: ********Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 25338 to server version: 4.0.14-logType 'help;' or '\h' for help. Type '\c' to clear the buffer.mysql>

Aceasta înseamnă că mysql este gata pentru a primi comenzile introduse.Deconectarea de la serverul MySQL se poate realiza oricând prin

introducerea comenzii QUIT (sau \a) la prompt-ul mysql.

mysql> QUITbye

IV.3.2. Introducerea interogărilor

Următoarea comandă este o interogare simplă care cere serverului informaţii precum versiunea curentă şi data curentă:

mysql> SELECT VERSION(), CURRENT_DATE;

33

Page 34: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

+--------------+--------------+| VERSION() | CURRENT_DATE |+--------------+--------------+| 3.22.20a-log | 1999-03-19 |+--------------+--------------+1 row in set (0.01 sec)mysql>

Această interogare ilustrează câteva lucruri despre mysql- În mod normal, o comandă constă într-o declaraţie SQL urmată de semnul

puct şi virgulă.- Cât se lansează o comandă, mysql o trimite serverului spre execuţie şi afişează

rezultatele, apoi afişează din nou prompt-ul mysql> pentru a indica că este gata să accepte alte comenzi.

- Mysql afişează rezultatul interogărilor într-o formă tabelară. Prima linie conţine etichetele coloanelor, iar liniile următoare sunt rezultatele interogării.

- Mysql afişează şi numărul de rânduri returnate şi cît timp a fost necesar pentru execuţia interogării

Pe o singură linie pot fi introduse mai mule comenzi, separate cu câte un semn punct şi virgulă, de exemplu:

mysql> SELECT VERSION(); SELECT NOW();+--------------+| VERSION() |+--------------+| 3.22.20a-log |+--------------+

+---------------------+| NOW() |+---------------------+| 1999-03-19 00:15:33 |+---------------------+

O comandă nu trebuie neapărat să fie introdusă pe o singură linie, de exemplu: mysql> SELECT -> USER() -> , -> CURRENT_DATE;+--------------------+--------------+| USER() | CURRENT_DATE |+--------------------+--------------+| joesmith@localhost | 1999-03-18 |+--------------------+--------------+

34

Page 35: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

Prompt-ul se schimbă din mysql> în -> după introducerea primei linii a unei interogări pe mai multe linii. Aceasta indică faptul că respectiva interogare este incompletă şi mysql aşteaptă introducerea restului interogării.

Se poate întrerupe introducerea unei interogări pe linii multiple folosind simbolurile \c

mysql> SELECT -> USER() -> \cmysql>

IV.3.3. Crearea şi utilizarea unei baze de date

Pentru a vedea bazele de date existente pe un server se foloseşte comanda SHOW:

mysql> SHOW DATABASES;+----------+| Database |+----------+| mysql || test || tmp |+----------+

Baza de date mysql este necesaă deoarece descrise privilegiile de acces ale utilizatorilor, iar baza de date test este oferită, de obicei, ca mediu de test pentru utilizatori.

Dacă baza de date test există, aceasta ar putea fi accesată astfel:

mysql> USE testDatabase changed

IV.3.4. Crearea şi selectarea unei baze de date

Comanda pentru a crea o nouă bază de date este CREATE DATABASE, de exemplu:

mysql> CREATE DATABASE menagerie;

35

Page 36: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

Crearea unei baze de date nu implică şi selectarea acesteia pentru utilizare, aceasta trebuie selectată folosind comanda USE:

mysql> USE menagerieDatabase changed

Selectarea bazei de date pe care se doreşte să se lucreze se poate realiza şi în momentul desciderii unei sesiuni mysql, la conectarea la server, astfel:

shell> mysql -h host -u user -p menagerieEnter password: ********

IV.3.5. Crearea tabelelor

După ce a fost creată, o bază de date nu conţine nici un table, după cum se poate observa introducând comanda SHOW TABLES:

mysql> SHOW TABLES;Empty set (0.00 sec)

Pentru a crea un tabel se foloseşte comanda CREATE TABLE, de exemplu:

mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),

species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);

Acum comanda SHOW TABLES va avea următorul rezultat:

mysql> SHOW TABLES;+---------------------+| Tables in menagerie |+---------------------+| pet |+---------------------+

Pentru a vedea detaliile unui tabel se foloseşte comanda DESCRIBE:

mysql> DESCRIBE pet;+---------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+---------+-------------+------+-----+---------+-------+

36

Page 37: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

| name | varchar(20) | YES | | NULL | || owner | varchar(20) | YES | | NULL | || species | varchar(20) | YES | | NULL | || sex | char(1) | YES | | NULL | || birth | date | YES | | NULL | || death | date | YES | | NULL | |+---------+-------------+------+-----+---------+-------+

37

Page 38: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

V. APLICAŢIE

V.1. Descrierea site-ului

În cadrul acestei aplicaţii prin combinarea a PHP MySQL s-a dorit realizarea unui site dinamic care dă posibilitatea vizitatorilor săi să-şi găseacă perechea potrivită. Site-ul reprezintă implementarea Web a unei agenţii matrimoniale. Utilizatorii se pot înregistra, pentru a-şi introduce mai multe date personale. Pot vizualiza informaţiile celorlaţi membrii şi căuta anumite persoane în funcţie de ccriteriil selectate.

Aplicaţia implementează şi unele funcţionalităţi avansate, cum ar fi trimiterea automată de e-mail către adresele specificate de utilizatori şi încarcarea de fişiere pe server.

V.1.1. Structura site-ului

Pentru o mai bună organizare a aplicaţiei fişierele au fost incluse, pe cât posibil, în directoare cu denumiri semnificative. Astfel, directorul images conţine toate imaginile incluse în paginile site-ului, în directorul photos sunt stocate fotografiile membrilor înregistraţi. Directorul templates conţine fişierele .php folosite ca template pentru toate paginile din site, iar directorul styles conţine fişierele .css (Cascading Style Sheet) folosite pentru realizarea layout-ului site-ului. În directorul functions sunt conţinute fişiere .php care vor fi incluse în alte fişiere şi în ele sunt definite mai multe funcţii utile.

Paginile principale ale aplicaţiei sunt următoarele: index.php, members.php, register.php, search.php, contact.php şi about.php. Astfel, index.php reprezintă pagina home a site-ului, paginile contact.php şi about.php conţin informaţii despre autorul aplicaţiei şi, respectiv, modul de contactare a acestuia. Pagina register.php conţine un formular html pe care utilizatorii trebuie să-l completeze pentru a se putea înregistra ca membrii ai site-ului. Dacă formularul este completat corect şi înregistrarea este realizată cu succes iar utilizatorului îi este prezentat un mesaj sugestiv şi este trimis un e-mail către adresa specificată de acesta, respectiv, dacă înregistrarea eşuează, este afişat un mesaj de eroare corespunzător. Pagina members.php conţine lista tuturor membrilor înregistraţi, cu câteva informaţii reprezentative pentru fiecare şi cu legături către paginile personale care conţin informaţii detaliate ale acestora. Pagina search.php cuprinde un formular html care permite căutarea în baza de date folosind mai multe criterii. Rezultatele căutării sunt afişate în pagina

38

Page 39: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

search_results.php, având acelaşi layout ca şi pagina member_details.php, pagina cu informaţii detaliate despre fiecare membru.

V.1.2. Utilizarea template-urilor şi a Style Sheet-urilor

Pentru păstrarea aceluiaşi layout pentru toate paginile, ca şi pentru a-l putea modifica sau înlocui cu uşurinţă, paginile au fost implementate pe baza unui fişier folosit ca template, căruia i-a fost ataşat un fişier .css.

Fişierul template folosit pe care este structurat site-ul conţine un tabel format din trei rânduri ce îndeplinesc rolurile de header, content şi footer. Partea de header constă într-un nou tabel, care la rândul său conţine trei rânduri, folosite pentru titlu, bară de meniu şi bara de stare. Titlul va fi setat pentru fiecare pagină care implementează acest template. Bara de meniuri este realizată prin includerea fişierului menubar.php, iar bara de stare este implementată în fişierul statusbar.php. Partea de content va fi, de asemenea, setată separat pentru fiecare fişier al site-ului. Partea de footer implementată în fişierul footer.php conţine informaţii de tip Copyright.

Codul complet al fişierului template.php este prezentat în continuare:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>template</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><link href="styles(css)/style.css" rel="stylesheet" type="text/css"></head>

<body><table width="800" align="center"><tr>

<td><table width="100%" align="center"><tr>

<td align="center">title</td></tr><tr>

<td><?php include "menubar.php"; ?></td>

39

Page 40: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

</tr><tr>

<td><?php include "statusbar.php"; ?></td>

</tr></table>

</td></tr><tr>

<td align="center">content</td></tr><tr>

<td><?php

include "footer.php";?>

</td></tr></table>

</body></html>

Fişierul .css conţine declaraţiile de stil pentru elementele HTML folosite în cadrul paginilor. Acestea pot fi cu uşurinţă modificate şi, datorită faptului că acest Style Sheet este aplicat tuturor paginilor, întregul layout al site-ului este modificat automat.

V.1.3. Crearea bazei de date MySQL

Pentru stocarea informaţiilor despre membrii aplicaţiei s-a folosit o bază de date MySQL. Aceasta este formată din patru tabele, şi anume members, care conţine informaţiile despre membrii, languages, care conţine o listă a limbilor pe care utilizatorii le pot selecta, spokenlanguages, care reprezintă legăturile dintre fiecare membru şi limbile cunoscute de acesta şi photos, care conţine informaţiile despre fotografiile mebrilor, maximum cinci fotografii pentru fiecare membru.

Structura tabelului members, cel mai complex dintre tabele bazei de date folosite, este descrisă în figura următoare, precum şi tabelele languages, spokenlanguages şi photos:

40

Page 41: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

V.2. Utilizarea bazelor de date MySQL

PHP include o bibliotecă de funcţii care furnizează o interfaţă cu sistemul MySQL de gestiune a bazelor de date. Folosind aceste funcţii, un program PHP

41

Page 42: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

poate obţine accesul la datele rezidente într-o bază de date MySQL şi le poate modifica.

Majoritatea interacţiunilor cu o bază de date se desfăşoară după un model secvenţial simplu:1. Se deshide o conexiune cu serverul MySQL.2. Se specifică baza de date la care se va obţine accesul.3. Se emit interogări SQL, se obţine accesul la rezultatele interogărilor şi se

execută operaţii non-SQL.4. Se închide conexiunea cu serverul MySQL.

V.2.1. Conectarea la serverul MySQL

Pentru a se realiza conectarea la un server MySQL, se invocă funcţia mysql_connect(), a cărei sintaxă este următoarea:mysql_connect(nume_gazda, nume_utilizator, parola) unde nume_gazda este numele gazdei pe care rulează serviciul MySQL, nume_utilizator este identificatorul de utilizator MySQL care va fi folosit, iar parola este parola MySQL asociată identificatorului de utilizator. Funcţia returnează false în caz de eşec, iar în caz contrar returnează o valoare, denumită identificator de legătură, care serveşte ca instrument de manipulare pentru accesul la serverul MySQL.

Se poate omite numele gazdei, identificatorul de utilizator şi parola, sau toate cele trei argumente. Dacă se procedează astfel, vor fi luate în considerare, în mod prestabilit, următoarele valori:-numele gazdei: localhost-identificatorul de utilizator: identificatorul de utilizator al procesului server MySQL -parolă: o parola vidă

În realizarea acestui site, conectarea la serverul MySQL a fost posibilă folosind funcţia connectdb(), implementată în fişierul connection.php, inclus în directorul functions, astfel :

<?phpfunction connectdb(){

$server=mysql_connect("localhost","root","");//…..

}?>

42

Page 43: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

V.2.2. Selectarea bazei de date

După ce programul a obţinut o conexiune cu serverul MySQL, programul poate specifica baza de date la care va avea acces. Pentru aceasta, se invocă funcţia mysql_select_db(), care are următoarea formămysql_select_db(baza_de_date)unde baza_de_date este un şir care conţine numele bazei de date la care urmează a se obţine acces. Funcţia returnează true dacă poate obţine accesul la baza de date, respectiv false în caz contrar.

Selectarea bazei de date a fost implementată tot în funcţia connectdb() prezentată mai sus, astfel:

$db=mysql_select_db("adylic");

V.2.3. Detectarea apariţiei erorilor

Biblioteca MySQL din PHP furnizează două funcţii de verificare a erorilor, şi anume mysql_errno() şi mysql_error(). Fiecare funcţie returnează un rezultat care reflectă eroarea, dacă există, asociată celei mai recente operaţii cu MySQL. Dacă programul execută o secvenţă de operaţii MySQL, iar prima operaţie generează o eroare, informaţiile despre erorile respective sunt pierdute în momentul iniţierii celei de a doua operaţii.

Nici una din cele două funcţii nu necesită argumente. Functia mysql_errno() returnează un cod numeric de eroare, în timp ce funcţia mysql_error() returnează o descriere textuală a erorii. Dacă nu s-a produs nici o eroare, codul numeric al erorii este zero şi descrierea are ca valoare un şir vid.

Informaţiile de eroare sunt disponibile numai dacă este activă o conexiune cu serverul MySQL, deci nu se poate folosi nici una dintre aceste funcţii pentru a raporta erorile asociate funcţiei mysql_connect().

Incluzând şi mecanismul de detectare a erorilor, funcţia connectdb() arată astfel :

<?phpfunction connectdb(){

$server=mysql_connect("localhost","root","");$db=mysql_select_db("adylic");if(mysql_errno())

die("nu s a conectat");}?>

43

Page 44: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

V.2.4. Eliminarea mesajelor de eroare

Numeroase funcţii PHP pot produce erori sau mesaje de avertizare, dar PHP furnizează funcţia error_reporting(), care permite eliminarea mesajelor nedorite. Funcţia are următoarea formă:error_reporting (masca)unde masca specifică tipul mesajelor care vor fi raportate. Dacă se specifica zero ca valoare a atributului masca, nu va fi raportat nici un mesaj. Dacă se specifica E_ALL ca valoare a atributului masca, vor fi raportate toate mesajele.

V.2.5. Închiderea conexiunii cu serverul MySQL

Pentru a închide o conexiune cu serverul MySQL se invoca funcţia mysql_close(). Funcţia returnează true în caz de reusită; în caz contrar returnează false. În general nu este necesară invocarea funcţiei mysql_close(), deoarece PHP închide automat conexiunile deschise cu bazele de date atunci când un script îşi încheie execuţia.

V.2.6. Executarea interogărilor UPDATE, INSERT şi DELETE

Din punctul de vedere al limbajului PHP, există două categorii de interogări SQL:

Interogările SELECT, care returnează rânduri ale unui tabel. Interogările UPDATE, INSERT şi DELETE, care nu returnează rânduri

ale unui tabel.

Ambele categorii de interogări sunt emise folosind funcţia mysql_query(), dar verificarea şi prelucrarea celor două categorii de rezultate ale interogărilor sunt procese destul de diferite.

V.2.7. Funcţia mysql_query()

Funcţia mysql_query() execută o interogare specificată. Funcţia are următoarea formă:

44

Page 45: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

mysql_query(interogare)unde interogare este un şir care conţine intergoarea care urmează a fi executată. Funcţia returnează true dacă serverul a reuşit să execute interogarea; în caz contrar, returnează false.

V.2.8. Verificarea interogărilor care nu returnează rânduri de table

Pentru a verifica dacă o interogare UPDATE, INSERT sau DELETE a avut efectul dorit, se poate folosi funcţia mysql_affected_rows(), care returnează numărul rândurilor afectate de interogarea cea mai recentă. Funcţtia are următoarea formă:mysql_affected_rows()

În cazul în care cea mai recentă interogare UPDATE, INSERT sau DELETE a eşuat, funcţia returnează valoarea -1.

V.2.9. Utilizarea coloanelor de tabel cu auto-incrementare

Pentru a preciza că MySQL va repartiza o valoare secvenţială unică în coloana care serveşte drept cheie primară a tabelului, se poate folosi indicatorul AUTO_INCREMENT.

Când se inserează un rind într-un tabel se poate folosi funcţia mysql_insert_id() pentru a determina valoarea cheii primare atribuite de MySQL. Funcţia are forma:mysql_insert_id() şi returnează valoarea zero dacă interogarea precedentă nu a generat o valoare AUTO_INCREMENT. Ca atare, funcţia trebuie apelată la puţin timp după interogarea care a inserat rândul din tabel, astfel încât o interogare ulterioară să nu modifice rezultatul.

V.2.10. Prelucrarea rezultatelor interogărilor SELECT

Spre deosebire de interogările UPDATE, INSERT şi DELETE, interogările SELECT returnează rânduri de tabel ca rezultate. Rândurile unui

45

Page 46: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

tabel sunt incluse într-o structură de date numită set de rezultate. Prelucrarea setului de rezultate returnat de o interogare SELECT implică parcurgerea prin iteraţie a rândurilor setului de rezultate.

O modalitate de parcurgere iterativă a rândurilor unui set de rezultate constă în obţinerea numărului de rânduri, urmată de deplasarea prin iteraţie, folosind numărul de rânduri ca limită pentru o instrucţiune for. Pentru a obţine valoarea numărului de rânduri, se invocă funcţia mysql_rows(), transferând ca argument valoarea returnată de funcţia mysql_query().

Funcţia mysql_fetch_row() se poate folosi pentru a obţine următorul rând din secvenţa setului de rezultate. Totuşi, funcţia mysql_fetch_row() returnează true dacă un set de rezultate conţine rânduri neprelucrate, respectiv false în caz contrar. Ca atare, în general este preferabil să se omită apelarea funcţiei mysql_num_rows() şi să sa se folosească în schimb o instrucţiune while.

Valoarea returnată de funcţia mysql_fetch_row() reprezintă un tablou alcătuit din toate coloanele rândului curent din tabel. Tabloul foloseşte indexuri întregi, unde valoarea primului index este egală cu zero. Pentru a prelucra coloanele stocate în tablou, se foloseşte o instrucţiune foreach, care elimină necesitatea existenţei unui index explicit al buclei.

Daca se doreşte obţinerea accesului la valoarea unei anumite coloane, se poate face referire la elementul din tablou folosind un index. De exemplu, dacă rezultatul funcţiei mysql_fetch_row() este stocat în variabila $rind, se poate obţine acces la prima coloană din setul de rezultate folosind sintaxa $rind[0], la a două coloană folosind sintaxa $rind[1], etc.

Pentru a obţine rândurile tabelului se paote folosi mysql_fetch_array(), care returnează un tablou asociativ. Valorile indecşilor din tablou le reprezintă numele coloanelor din setul de rezultate. Ca şi funcţia mysql_fetch_row(), funcţia mysql_fetch_array() returnează false dacă nu mai există rânduri în setul de rezultate.

V.1.11. Lucrul cu seturi de rezultate

Biblioteca de funcţii MySQL a limbajului PHP include un set de funcţii prin care se pot obţine informaţii despre un set de rezultate, inclusiv:

Numărul coloanelor din setul de rezultate. Numărul fiecărei coloane. Lungimea fiecărei coloane. Indicatorii MySQL asociaţi coloanei. Tipul MySQL al fiecărei coloane. Numele tabelului MySQL care conţine coloana, dacă este cazul.

46

Page 47: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

De asemenea, biblioteca furnizează o funcţie care permite obţinerea accesului în mod non-secvenţial la rândurile din setul de rezultate, prin specificarea numărului unui rând.

V.2.12. Obţinerea numărului coloanelor unui set de rezultate

Pentru a obţine numărul coloanelor dintr-un set de rezultate se invocă funcţia mysql_num_fields(), transferând ca argument valoarea returnată de funcţia mysql_query().

V.2.13. Obţinerea numelui unei coloane din setul de rezultate

Funcţia mysql_field_name() returnează numele coloanei din setul de rezultate având valoarea indexului dată ca argument al funcţiei. Indexul asociat cu prima coloană este 0, indexul asociat celei de a doua coloane este 1, etc.

V.2.14. Obţinerea lungimii unei coloane dintr-un set de rezultate

Funcţia mysql_field_len() returnează lungimea maximă a coloanei dintr-un set de rezultate, având valoarea indexului dată ca argument al funcţiei. Indexul asociat primei coloane este 0, indexul asociat celei de a doua coloane este 1 etc.

V.2.15. Obţinerea indicatorilor MySQL asociaţi unei coloane a setului de rezultate

Funcţia mysql_field_flags() returnează indicatorii SQL asociaţi colaonei din setul de rezultate al cărei index este dat ca argument al funcţiei. Indexul asociat primei coloane este 0, indexul asociat celei de a doua coloane este 1, etc. Funcţia mysql_field_flags() raportează următorii indicatori :

AUTO_INCREMENT BINARY BLOB ENUM MULTIPLE_KEY NOT_NULL

47

Page 48: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

PRIMARY_KEY TIMESTAMP UNIQUE_KEY UNSIGNED ZEROFILLDacă la o coloană sunt asociaţi mai multi indicatori, fiecare indicator este

separat de vecinii săi prin intermediul unui singur spatiu.

V.2.16. Obţinerea tipului MySQL al unei coloane din setul de rezultate

Funcţia mysql_field_type() returnează tipul MySQL al unei coloane al carei index este dat ca argument al funcţiei. Indexul asociat primei coloane este 0, indexul asociat celei de a doua coloane este 1, etc.

V.2.17. Determinarea tabelului MySQL asociat unei coloane din setul de rezultate

Funcţia mysql_field_table() returnează tabelul MySQL, dacă există, asociat coloanei din setul de rezultate al cărei index este dat de argumentul funcţiei. Indexul asociat primei coloane este 0, indexul asociat celei de a doua coloane este 1, etc. În cazul în care coloana conţine o valoare calculată sau dacă respectiva coloană nu este asociata în alt mod cu un tabel MySQL, funcţia returneaza un şir vid.

V.2.18. bţinerea structurii complete a setului de rezultate

Funcţia mysql_fetch_field() returnează un obiect ale cărui proprietăţi conţin o varietate de informaţii cu privire la coloana unui set de rezultate. Proprietăţiile sunt următoarele:

blob – are valorea 1 în cazul în care coloana este de tip BLOB max_length – lungimea maximă a coloanei; multiple_key – are valoarea 1 în cazul în care coloana este o cheie non-

unică name – numele coloanei not_null – are valoarea 1 în cazul în care coloana nu poate conţine

valoarea NULL numeric – are valoarea 1 în cazul în care coloana este numerică

48

Page 49: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

primary_key – are valoarea 1 în cazul în care coloana este o cheie primară

table – numele tabelului MySQL căruia îi aparţine coloana type – tipul MySQL al coloanei unique_key – are valoarea 1 în cazul în care coloana este o cheie unică unsigned – are valoarea 1 în cazul în care coloana este de tip

UNSIGNED zerofill – are valoarea 1 în cazul în care coloana este completată cu

zerouri

Funcţia mysql_fetch_field() preia două argumente: valoarea returnată de funcţia mysql_query() şi indexul coloanei din setul de rezultate care va fi descris. Ca de obicei, indexul asociat primei coloane este 0, indexul asociat celei de a doua coloane este 1, etc.

V.2.19. Accesul non-secvenţial la coloanele unui set de rezultate

Funcţiile mysql_fetch_row() şi mysql_fetch_array() returnează, în general rândurile dintr-un set de rezultate în mod secvenţial. Totuşi, funcţia mysql_data_seek() permite obţinerea accesului la rândurile unui set de rezultate într-o manieră non-secvenţială. Funcţia are forma :mysql_data_seek(rezultat, numar_rind)unde rezultat este valoarea returnată de funcţia mysql_query(), iar numar_rind este indexul rândului la care doriţi să obtineţi accesul. Primul rând al setului de rezultate este numerotat cu 1, al doilea cu 2 etc. Funcţia returnează true dacă execuţia reuşeşte, respectiv false în caz contrar. O invocare ulterioară a funcţiei mysql_fetch_row() sau a funcţiei mysql_fetch_array() va returna rândul din poziţia specificată a setului de rezultate.

V.3. Implementarea funcţionalităţilor principale

V.3.1. Înregistrarea noilor membrii

49

Page 50: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

Pentru înregistrarea unui nou membru în baza de date a aplicaţiei, utilizatorul trebuie să completeze formularul din pagina register.php. Acesta sunt cuprinde toate câmpurile din tabelul members al bazei de date, precum şi o listă cu toate înregistrările din tabelul languages, pentru ca utilizatorul să poată selecta limbile cunoscute. Toate câmpurile sunt obligatorii, unele au furnizate valori implicite, iar pentru cele care necesită îndeplinirea anumitor condiţii pentru a putea fi valide a fost realizată o funcţie JavaScript. Aceasta realizează validarea datelor introduse în formular înainte ca cererea să fie trimisă spre procesare serverului.

Câmpurile de tip select din formular trebuie să aibă valori care sunt obţinute din valorile posibile ale anumitor coloane de tip enum din baza de date, iar acestea sunt obţinute prin apelarea funcţiei showenumvalues($col), definită în fişierul showenumvalues.php, inclus în directorul functions, funcţie care este implementată astfel:

<?phpfunction showenumvalues($col){

$column=$col;$query="SHOW COLUMNS FROM members

LIKE '{$column}'";$result=mysql_query($query); if(mysql_num_rows($result)>0){

$row=mysql_fetch_row($result);

$options=explode("','",preg_replace("/(enum|set)\('(.+?)'\)/","\\2",$row[1]));

}foreach($options as $val){

echo '<option value="'.$val.'">'.$val.'</option>'; }

}?>

Această funcţie este apelată în fişierul register.php pentru diferite valori ale parametrului $col, de exemplu:

<?php showenumvalues("haircolor"); ?>

Dacă datele au fost completate corect, formularul este trimis spre procesare. De acest lucru se ocupă fişierul register_action.php. Se încearcă inserarea elementelor din formular folosind o interogare de tip insert şi prin apelul funcţiei mysql_query. Dacă inserarea eşuează este afişat un mesaj de eroare şi

50

Page 51: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

utilizatorului îi este oferită posibilitatea de a se întoarce în pagina cu formularul de înregistrare. Dacă înregistrarea are loc cu succes, în continuare se introduc în tabelul languages limbile specificate de utilizator, este trimis un e-mail informativ către adresa specificată de acesta şi i se oferă posibilitatea de a trece într-o nouă pagină în care îşi poate upload-a până la maximum cinci fotografii personale. Tot acum este creat pe server un director al cărui nume este format din stringul “member_” concatenat cu id-ul noului membru introdus în baza de date, director ce va fi folosit pentru stocarea fotografiilor membrului respectiv.

Pentru a nu permite execuţia interogărilor din pagina register_action.php în cazul în care aceasta ar fi introdusă direct în bara de adresă a browser-ului, întreg codul este cuprins într-o instrucţiune if în care se verifică dacă a fost apăsat butonul sumbit din formularul de înregistrare astfel:

if(isset($_POST["submit"])){//….

}

Pentru introducerea datelor din formular în baza de date, acestea sunt reţinute în prealabil în variabile php corespunzătore:

$haircolor=$_POST["haircolor"];$eyescolor=$_POST["eyescolor"];$smoker=$_POST["smoker"];$maritalstatus=$_POST["maritalstatus"];$kids=$_POST["kids"];$kidslivingwith=$_POST["kidslivingwith"];$religion=$_POST["religion"];$education=$_POST["education"];$occupation=$_POST["occupation"];$income=$_POST["income"];$city=$_POST["city"];$state=$_POST["state"];$country=$_POST["country"];$hobby=$_POST["hobby"];$personaldescription=$_POST["personaldescription"];$relationship=$_POST["relationship"];$person=$_POST["person"];apoi are loc crearea string-ului care va fi folosit în funcţia mysql_query:

$insert="INSERT INTO members(name, gender, email, password, birthdate, precisedate, birthplace, height, weight, haircolor, eyescolor, smoker, maritalstatus, kids, kidslivingwith, religion,

51

Page 52: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

education, occupation, income, city, state, country, hobby, presentation, relationship, person) VALUES ('".$name."', '".$gender."', '".$email."', '".

$password."', '".$birthdate."', '".$precisedate."', '".

$birthplace."', ".$height.", ".$weight.", '".$haircolor."', '".$eyescolor."', '".$smoker."', '".

$maritalstatus."', ".$kids.", ".$kidslivingwith.", '".$religion."', '".$education."', '".$occupation."', ".$income.", '".$city."', '".$state."', '".$country."', '".

$hobby."', '".$personaldescription."', '".$relationship."', '".$person."')";

şi se continuă cu execuţia interogării şi a celorlalţi paşi necesari, în funcţie de rezulatul acesteia:

$result=mysql_query($insert);if(mysql_affected_rows()!=1){

$message="<br><center>Registration failed</center><br>".

"<center>Click the <i>back</i> button to try again! </center>";}else{

$newid = mysql_insert_id();if(isset($_POST["languages"])){

$languages=$_POST["languages"];for($i=0;$i<count($languages);$i++){

$insert2="INSERT INTO spokenlanguages VALUES(". $newid.",".$languages[$i].")";$result2=mysql_query($insert2);

}}chdir('photos');$dir = 'member_'.$newid;mkdir($dir);$message="<center>Congratulations! You have been

succesfully registered!</center><br>".

52

Page 53: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

'<center>You can upload up to <b>5</b> photos <a href="upload.php?id='.$newid.'">here</a></center><br><br>';

mailto($email,$password);}

Pentru realizarea trimiterii automate de e-mail a fost realizată funcţia mailto($to, $pass), implementată în fişierul mail.php din directorul functions. Această funcţie primeşte ca parametrii adresa de e-mail a noului membru înregistrat şi parola introdusă de acesta şi trimite la acea adresă un e-mail informativ, folosind funcţia PHP mail, astfel:

<?phpfunction mailto($to,$pass){

$TO=$to;$FROM = "[email protected]";$SUBJECT = "Welcome to my agency";$HEADER = "MIME-Version: 1.0\r\n";$HEADER = $HEADER . "Content-type: text/html;

charset=iso-8859-1\r\n";$HEADER = $HEADER . "From: " . $FROM . "\r\

n";$MESSAGE = 'Thank you for your registration

at '.'<a href="http://www.bobeanu.as.ro">my

agency</a>.<br>'.'You can login to your personal page

using this e-mail address and the password you specified:<br>'.

'Your password is: '.$pass;mail($TO, $SUBJECT, $MESSAGE, $HEADER);

}?>

V.3.2. Căutarea membrilor

Pentru căutarea în baza de date a fost creat pagina search.php care conţine un formular în care utilizatorul poate specifica creiteriile de căutare. Aplicaţia permite căutarea membrilor folosind orice combinaţie a următoarelor coloane din tabelul members: name, gender, height, weight, haircolor, eyescolor, maritalstatus, smoker, country.

53

Page 54: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

După introducerea informaţiilor dorite pentru căutare, formularul este trimis spre procesare către pagina search_result.php. Aceasta include fişierul find.php, din directorul functions, în care este definită funcţia find(). Aceasta primeşte ca parametrii toate variabilele din formularul de căutare şi, ăn fucţie de valorile acestora, formează stringul care va fi folosit ăn interogare, astfel:

<?phpfunction find($name, $gender, $height, $weight,

$haircolor, $eyescolor, $maritalstatus, $smoker, $country){

$query="SELECT * FROM members WHERE gender='".$gender."' ";

if($name!="")$query=$query." AND name LIKE '%".$name."%'

";if($height!=0)

$query=$query." AND height=".$height;if($weight!=0)

$query=$query." AND weight=".$weight;if($haircolor!="")

$query=$query." AND haircolor='".$haircolor."'";

if($eyescolor!="")$query=$query." AND eyescolor='".

$eyescolor."'";if($maritalstatus!="")

$query=$query." AND maritalstatus='". $maritalstatus."'";

if($smoker!="")$query=$query." AND smoker='".$smoker."'";

if($country!="")$query=$query." AND country='".$country."'";

$query=$query." ORDER BY name";

return $query;}?>

În pagina search_results are loc apelul metodei find folosind datele introduse în formular şi se execută interogarea respectivă. Rezultatele căutării

54

Page 55: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

sunt prezentate într-un tabel, câte o înregistrare pe fiecare linie, cuprinzând câteva detalii pentru fiecare membru găsit, şi cu lkegături către paginile cu detalii despre fiecare.

<?php$findresults=find($_POST["name"],

$_POST["gender"], $_POST["height"], $_POST["weight"], $_POST["haircolor"], $_POST["eyescolor"], $_POST["maritalstatus"], $_POST["smoker"], $_POST["country"]);

$result=mysql_query($findresults);echo "<table><tr><td>Name</td> <td>Gender</td>

<td>Height</td> <td>Weight</td> <td>Haircolor</td>"."<td>Eyescolor</td> <td>Marital Status</td> <td>Smoker</td> <td>Country</td>";

while($row=mysql_fetch_array($result)){?>

<tr><td><?php echo $row["name"]; ?></td><td><?php echo $row["gender"]; ?></td><td><?php echo $row["height"]; ?></td><td><?php echo $row["weight"]; ?></td><td><?php echo $row["haircolor"]; ?></td><td><?php echo $row["eyescolor"]; ?></td><td><?php echo $row["maritalstatus"]; ?></td><td><?php echo $row["smoker"]; ?></td><td><?php echo $row["country"]; ?></td>

</tr><?php }?></table>

V.3.3. Afişarea mebrilor

Pentru afişarea tuturor membrilor înregistraţi în baza de date există două legături specificate în fişierul menubar.php, respectiv pentru Men şi Women. Ambele legături indică, însă, către aceeaşi pagină, şi anume members.php, dar care primeşte diferite valori pentru atributul detip URL gender. Astfel, pentru Men legătura se face către pagina members.php?gender=male, şi respectiv, pentru Women, legătura este către members.php?gender=female.

55

Page 56: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

În pagina members.php, construită pe baza templeate-ului, informaţiile sunt prezentate sub forma unui tabel care conţine pe fiecare linie câteva infoormaţii semnificative pentru fiecare membru şi legătura către pagina detaliată a acestuia. Înainte de afişarea informaţiilor are loc o verificare a valorii parametrului gender din URL şi se formează astfel interogarea corespunzătoare:

<table><tr>

<td>Name</td><td>Gender</td><td>Height</td><td>Weight</td><td>Haircolor</td><td>Eyescolor</td><td>Marital status</td><td>Smoker</td><td>Country</td>

</tr><?php

if(isset($_GET["gender"])){$query="SELECT * FROM members WHERE

gender='". $_GET['gender']. "' ORDER BY NAME ";$result=mysql_query($query);while($row=mysql_fetch_array($result)){

?><tr>

<td><?php echo $row["name"]; ?></td><td><?php echo $row["gender"]; ?></td><td><?php echo $row["height"]; ?></td><td><?php echo $row["weight"]; ?></td><td><?php echo $row["haircolor"]; ?></td><td><?php echo $row["eyescolor"]; ?></td><td><?php echo $row["maritalstatus"]; ?></td><td><?php echo $row["smoker"]; ?></td><td><?php echo $row["country"]; ?></td>

</tr><?php

}}

?></table>

56

Page 57: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

V.3.4. Upload-ul fişierelor

După ce s-a înregistrat, unui membru i se dă posibilitatea de a încărca pe server maximum cinci fotografii personale. Acest lucru este implementat în fişierul upload.php. Acest fişier are ca parametru de tip URL id-ul noului membru înregistrat, pentru a putea determina în care subdirector din directorul photos să salveze fotografiile. Pagina upload.php costă într-un formular HTML cu cinci elemente input de tip file. Pagina de acţiune a acestui formular este setată ca fiind tot upload.php. La accesarea paginii are loc o verificare dacă a fost apăsat butonul de Submit, adică dacă au fost selectate fişierele pentru upload. În caz afirmativ, se încearcă upload-ul fişierelor pe server şi, în acelaşi timp, are loc şi trecerea informaţiilor corespunzătoare în baza de date. La final, este setată o variabilă php numită $succes, a cărei valoare va fi afişată opentru a furniza utilizatorului informaţii referitoare la succesul sau eşecul upload-ului. Mecanismul de upload este implementat astfel:

<?php $id=$_GET["id"];if(isset($_POST["submit"])){

if(!empty($_FILES["photos"])){//$status="not ok";chdir('photos');chdir("member_".$id);$uploaddir="C:\Inetpub\wwwroot\licady\

photos\member_".$id;for($i=0;$i<count($_FILES["photos"]);$i+

+){if

(move_uploaded_file($_FILES["photos"]["tmp_name"][$i], $uploaddir . '/' . $_FILES["photos"]["name"][$i])) {

$status="ok";$query_del = "DELETE FROM

photos WHERE memberid = ".$id." AND photonr = ".($i+1);

$result_del = mysql_query($query_del);

$query="INSERT INTO photos VALUES(".$id.", ".($i+1).", '".$_FILES["photos"]["name"][$i]."')";

$result=mysql_query($query);}

}

57

Page 58: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

}}

?>

V.3.5. Managementul sesiunilor de lucru

Pentru managementul utizatorilor care logaţi pe site, PHP oferă mecanismul variablelor din scope-ul $_SESSION. Pagina login.php realizează logarea unui utilizator. Într-un formular HTML acesta trebuie să introducă adresa de e-mail şi parola pe care a ales-o în momentul creării contului. Acest formular este trimis spre prelucrare tot către pagina login.php. La începutul fişierului are loc o verificare dacă a fost apăsat butonul de login şi în caz afirmativ se preiau informaţiile introduse în formular şi se verifică dacă acestea corespund uneia şi numai uneia dintre înregistrările din tabelul members. Dacă este găsită o asemenea înregistrare, sunt setate variabilele username şi userid din scopul $_SESSION şi fişierul statusbar.php îşi modifică conţinutul pentru a afişa faptul că utilizatorul a fost recunoscut şi logat în sistem:

<?phpif(isset($_POST["submit"])){

$email=$_POST["email"];$password=$_POST["password"];

$login="SELECT * FROM members WHERE email='".$email."' AND password='".$password."'";

$result=mysql_query($login);if($result && mysql_num_rows($result)==1){

$row=mysql_fetch_array($result);$_SESSION['username']=$row['name'];$_SESSION['userid']=$row['id'];

}else{

$error=1;}

}?>

În caz contrar, este setată o variabilă php numită $error şi este afişat un mesaj de eroare, iar utilizatorul poate încerca din nou.

Fişierul statusbar.php este cel care realizează afişarea, sub bara de meniu a informaţiilor legate de starea utilizatorului. După ce utilizatorul este recunoscut îi

58

Page 59: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

este afişat un link prin care poate accesa pagina logout.php, prin care se poate deconecta, iar dacă nici un utilizator nu este conectat, este afişată o legătură către pagina login.php.

<table width="800"><tr>

<td align="left"><?php

if(isset($_SESSION['username']) && isset($_SESSION['userid']))echo "Welcome, ".$_SESSION['username']."!";

else echo "Welcome, Visitor!";?></td><td align="right"><?php

if(isset($_SESSION['username']) && isset($_SESSION['userid']))echo '<a href="logout.php">Logout</a>';

else echo '<a href="login.php">Login</a>';?></td>

</tr></table>

Toate paginile folosite pentru navigare în cadrul site-ului trebuie să apeleze funcţia session_start(). Aceasta permite determinarea stării utilizatorului: conectat sau neconectat. Anumite pagini ale site-ului permit accesul numai pentru utilizatorii conectaţi. Pentru aceasta, respectivele pagini trebuie să realizeze o verificare a variabilelor din scope-ul $_SESSION, iar în cazul în care utilizatorul nu este conectat, este redirectat către pagina login.php, astfel:

session_start();if( !isset($_SESSION['username'])||

isset($_SESSION['userid']) ){header("Location: login.php");

}

Pagina logout.php realizează distrugerea variabilelor din scope-ul $_SESSION, şi redirectarea către pagina de start a site-ului, index.php, astfel:

<?phpsession_start();if( isset($_SESSION['username']) &&

isset($_SESSION['userid']) ){unset($_SESSION['username']);unset($_SESSION['userid']);

59

Page 60: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

header("Location: index.php");}

?>

60

Page 61: Aplicatie a Privind Construirea Intr-un Site Dinamic Utilizand Tehnologiile PHP Si Mysql

CONCLUZIE

61


Recommended