59168702 aplicatie a privind construirea intr un site dinamic utlizand tehnologiile php si mysql

61
INTRODUCERE...........................................................................................................................................3 I.1. INTRODUCERE.................................................................................................................................5  I.1.1 Internet-ul....................... ....................................................................... .............. .........................5  I.1.2. Aplicaţii pentru Inte rnet................ .............. ............................ .............. ..................................... .6  I.1.3 DNS.............. ........................................... .............. .................................................................... ....7  I.1.4. Intranets şi Extranets ............. .............. ............................ .............. ............................................. .8 I.2. WEB SERVERS ŞI WEB APPLICATION SERVERS.............................................................................................8  I.2.1. Servere Web.................... .............. .............. ........................................... .............. ............. ..... ...... 8  I.2.2. Pagini Web.................... ............................ .............. ............................ ............... .............. ............ 9  I.2.3. Browsere Web................... ........................................... .............. ..................................................9 I.3. PAGINI WEB STATICE ŞI DINAMICE............................................................................................................9  I.3.1. HTML.............. ........................................... .............. ........................................... .............. .......... .9  I.3.2. JavaScript.................... ............................ ............... .............. ............................ .......... ..... ..........10  I.3.3. Alte Tehnologii pe parte de Clien t........................................................ .............. ..................... ..10  I.3.4. URL-uri................. ............................ .............. ........................................... .............. ............. ..... 11  I.3.5. Avantajul Paginilor Web Dinamic e.............. .............. ............................ ............... .............. ...... 11  I.3.6. Înţelegerea Aplicatiil or Web.................. .................................................................................... 12 II. INTRODUCERE ÎN PHP.....................................................................................................................13 II.1. NOŢIUNI FUNDAMENTALE.......................................................................................................................13  II.1.1. Ce este PHP?................. ...........................................................................................................13  II.1.2. Ce poate face PHP?................. ........................................... .............. ............................. ..... .....14 II.2. ELEMENTE DE BAZĂ ALE SINTAXEI...........................................................................................................16  II.2.1. Ieşirea din modul HTML...................... .............. ............................ .............. ................... ..... ....16  II.2.2. Separarea instrucţiuni lor................ ............................................................................. ...... ...... 17  II.2.3. Comentariile...................... ....................................................................... .............. ........... ...... .18 II.3. TIPURI DE DATE....................................................................................................................................18 II.4 VARIABILE............................................................................................................................................19  II.4.1 Noţiuni de bază..................... ............................ .............. ........................................... ............. ...19  II.4.2 Variabile predefini te .......................................................... .............. ............................ ............. 19  II.4.3. PHP Superglobals.................... ............................................................................................. ...20  II.4.4. Folosirea variabilelor statice............................ ............... .............. ............................ ....... ...... 21  II.4.5. Variabile din afara mediului PHP.......................... ................................................. ..... ..... ...... 22  II.4.6. Cookie-uri HTTP.................... ............................ ............... .............. ............................ ........ ..... 23 III. BAZE DE DATE ŞI SQL.....................................................................................................................24 III.1. CONCEPTE ALE BAZELOR  DE DATE RELAŢIONALE.......................................................................................24  III.1.1. Structura unei baze de date rela ţionale..................... .............. .................................... ..... ..... .24  III.1.2. Normalizarea tabelelor .............. ........................................... .............. .......................... ..... ..... 25  III.1.3. Structured Query Language......................... ........................................... .............. .................. 25 III.2. IMPLEMENTAREA UNEI BAZE DE DATE......................................................................................................26  III.2.1. Proiectarea unei baze de date.......................... ........................................... .............. ..............26  III.2.2. Modelare E-R...................... ............................ .............. ........................................... ......... ......26  III.2.3. Identificarea colo anelor................. .............. ............................ .............. .................................26  III.2.4. Gruparea coloanelor în entităţi........................ ............... .............. .......................... ...... ........27  III.2.5. Identificarea che ilor primare.................. ........................................... .............. ..................... ..27  III.2.6. Identificarea che ilor externe................................................ ............... ........................... ..... ....27  III.2.7. Rafinarea modelelor E-R ........................ ............................ .............. ....................... ..... ..... ....28 IV. MYSQL.... .................................................... .......... ........... .................... ........... .....................................29 IV.1. I  NTRODUCERE ÎN MYSQL....................................................................................................................29 IV.2. CARACTERISTICILE DE BAZĂ ALE MYSQL..............................................................................................29  IV.2.1. Componente interne şi portabili tate.............................................................. .............. ........... .29  IV.2.2. Tipuri de coloane..................... .............. ............... .......................................... ...... ................ ..30  IV.2.3. Comenzi şi funcţii ...................... .............. ............... .............. ............................ ............ ..... ..... 30 1

Upload: maria-bufnea

Post on 02-Mar-2016

72 views

Category:

Documents


1 download

DESCRIPTION

pagini web

TRANSCRIPT

 

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

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

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

II. INTRODUCERE ÎN PHP.....................................................................................................................13

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

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

II.3. TIPURI DE DATE....................................................................................................................................18II.4 VARIABILE............................................................................................................................................19

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

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

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

III.2. IMPLEMENTAREA UNEI BAZE DE DATE......................................................................................................26 III.2.1. Proiectarea unei baze de date.......................... ............... .............. .............. .............. ............ ..26  III.2.2. Modelare E-R...................... .............. .............. .............. .............. ............... .............. ......... ..... .26  III.2.3. Identificarea coloanelor................. .............. .............. .............. .............. .............. ............... ....26  III.2.4. Gruparea coloanelor în entităţi........................ ............... .............. .............. ............ ...... ...... ..27  III.2.5. Identificarea cheilor primare.................. ............... .............. .............. .............. .............. ....... ..27  III.2.6. Identificarea cheilor externe.................... .............. .............. ............... .............. ............. ..... ....27  III.2.7. Rafinarea modelelor E-R ........................ .............. .............. .............. .............. ......... ..... ..... ....28

IV. MYSQL.................................................................................................................................................29

IV.1. I NTRODUCERE ÎN MYSQL....................................................................................................................29IV.2. CARACTERISTICILE DE BAZĂ ALE MYSQL..............................................................................................29

 IV.2.1. Componente interne şi portabilitate................... .............. ............... .............. .............. ........... .29 IV.2.2. Tipuri de coloane..................... .............. ............... .............. .............. .............. ...... ..... ..... ...... ..30 IV.2.3. Comenzi şi funcţii ...................... .............. ............... .............. .............. .............. ............ ..... .....30

1

 

 IV.2.4. Securitate..................... .............. .............. .............. .............. ............... .............. .............. .........30 IV.2.5. Scalabilitate şi limite............... ............... .............. .............. .............. .............. ............... ..... .....31 IV.2.6. Conectivitate ....................... .............. .............. .............. ............... .............. .............. .............. .31 IV.2.7. Localizare ................... .............. .............. ............... .............. .............. .............. .............. ....... ..31 IV.2.8. Clienţi şi unelte......................... .............. .............. .............. .............. ............... .............. ..........31

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

V. APLICAŢIE...........................................................................................................................................37

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

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

V.3. IMPLEMENTAREA FUNCŢIONALITĂŢILOR  PRINCIPALE.....................................................................................49V.3.1. Înregistrarea noilor membrii....................................................................................................50V.3.2. Căutarea membrilor.................................................................................................................53V.3.3. Afişarea mebrilor......................................................................................................................55V.3.4. Upload-ul fişierelor..................................................................................................................57 V.3.5. Managementul sesiunilor de lucru...........................................................................................58

2

 

INTRODUCERE

Dezvoltarea rapidă din ultima perioadă a resurselor software şi hardwaredin 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. Acestlucru se poate observa foarte uşor datorită sistemului World Wide Web, cuajutorul căruia, printr-un simplu click de mouse se poate naviga prin miile deresurse informaţionale din întreaga lume.

Această lucrare prezintă o aplicaţie ce constă într-un site dinamic, construitutilizând tehnologiile PHP şi MySQL. Acest site reprezintă o implementare Weba unei agenţii matrimoniale. Utilizatorii se înregistrează şi îşi pot introduceanumite informaţii personale. Se permite, de asemenea, căutarea în baza de dateasociată, folosind anumite criterii. Căutarea şi vizualizarea mebrilor înregistraţinu este permisă decât membrilor site-ului, pentru aceasta fiind implementat unmecanism de logare. Este implementat, de asemenea şi mecanismul de trimiterede 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, iarultimul capitol reprezintă descrierea plicaţiei şi modul ăn care aceasta a fostrealizată.

Capitolul 1 – Internet-ul  reprezintă o scurtă introducere a principalelornoţ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 principalelornoţiuni legate de acest limbaj. Este descris modul de includere a codului PHP încadrul codului HTML, sunt prezentate tipurile de date pe care acest limbaj lesuportă ş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ărifolosit în prezent, SQL. De asemenea, este prezentat modul de creare a unei bazede date relaţionale şi sunt definite noţiuni ca: relaţie , cheie primară, cheieexternă, normalizarea tabelelor.

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

3

 

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. Implementareaacestui 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. Deasemenea, a fost ales sistemul de gestiune a bazelor de date relaţioale MySQLdatorită faptului că şi acesta poate fi folosit gratuit şi este Open Source şi este celmai potrivit produs pentru accesarea şi administrarea bazelor de date prinInternet.

Interfaţa grafică a aplicaţiei a fost construită pe baza unui template, pe caretoate 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 elementeHTML, pentru alegerea stilului site-ului s-a folosit un fişier .css, acesta putând fimodificat 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.

4

 

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, încâteva cuvinte, poate fi definit ca cea mai mare reţea din lume. Majoritateareţelelor din prezent sunt reţele locale ( Local Area Networks  –  LAN s) şi suntformate dintr-un grup de calculatoare aflate relativ aproape unul de celălalt şiconectate 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 aschimba informaţii.

O reţea mai mare, care se întinde pe mai multe locaţii geografice este, deobicei, folosită de marile companii care au sedii în mai multe localităţi. Fiecaredintre 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 decomunicare. Legăturile pot fi de la legături de tip dial-up prin modem, până lalegături de mare viteză T1 sau T3 sau legături prin fibră optică. Grupul complet alLAN-urilor interconectate se numeşte Wide Area Network  (WAN ). WAN-urile sefolosesc 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 backbonescomplet redundante, astfel încât dacă vreo conexiune se întrerupe, ar mai fidisponibilă 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-

5

 

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 ficonectate 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 calculatorconectat la această reţea să poate comunica cu oricare altul.

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

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

Backbone-urile de mari viteze există într-adevăr. Majoritatea sunt deţinutede 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 deInternet ( ISP s – Internet Service Providers)

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

Identificatorii unici sunt adresele IP . Fiecare calculator, sau host, conectatla Internet are o adresă IP unică. Aceste adrese sunt formate din patru seturi denumere separate prin punct – de exemplu 208.193.16.100. Unele calculatoare auadrese fixe  (sau statice), în timp ce altele au adrese alocate dinamic, de fiecaredată 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 folosiaceeaş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ţinmajorităţii utilizatorilor, din acest motiv au fost necesari 20 de ani pentru caInternet-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 precumlocurile î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 carerulează pe baza sa şi ceea ce poate fi realizat cu ajutorul acestora.

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

6

 

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 dedate, 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  ( PostOffice Protocol ) este interfaţa cea mai utilizată pentru accesarea mesajelor.

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

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

-   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 sespecifică 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 returnaadresa IP actuală şi browser-ul o va folosi pentru a comunica direct cu acel host.

 Nu este obligatorie folosirea unui server DNS, utilizatorii ar puteaspecifica direct adresa IP a hostului cu care doresc să comunice, dar sunt câtevamotive 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.

7

 

I.1.4. Intranets şi Extranets

Un intranet   nu este nimic mai mult decât un Internet privat. Cu altecuvinte, este o reţea privată, de obicei un LAN sau WAN, care permite folosireaaplicaţ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 alteservicii bazate pe IP.

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

Cele două lucruri care deosebesc intranet-urile şi extranet-urile de Internetsunt cine le poate accesa şi de unde pot fi accesate. Dacă o aplicaţie poate rula peInternet, 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  HypertextTransfer Protocol ( HTTP ). HTTP este un protocol mic şi rapid care se potriveştefoarte 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 detip server  Web. Gazda este de multe ori identificată cu serverul Web, lucru carenu 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, serverulWeb încearcă să obţină acel fişier şi să-l trimită înapoi utilizatorului. Fişierulsolicitat poate fi codul sursă HTML al unei pagini Web, o imagine GIF, un fişierFlash, un document XML, sau un fişier AVI. Browserul Web este cel caredetermină 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ă prinInternet între gazda solicitantă şi gazda pe care rulează serverul Web. Pagina Webcerută 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

8

 

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 unserver Web, un server FTP, un server DNS şi un server de mail SMTP POP3 potrula î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. ServereleWeb 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 multeservere 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ă poateconţ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 declient ş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 ale 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 şiInternet 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 Languag e ( HTML). Acesta este implementat ca o mulţime de

9

 

tag-uri uşor de învăţat. Autorii paginilor Web folosesc aceste tag-uri pentru amarca paginile de text, iar browserele le folosesc pentru a randa şi afişainformaţiile pentru a putea fi vizualizate. Paginile Web pot să conţină legăturihypertext 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 şisofisticate 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 aimaginilor, crearea de meniuri drop-down şi a controalelor de navigare, se potefectua procesări de bază numerice sau asupra textelor şi multe altele.

Scripting-ul permite programatorilor să detecteze şi să procesezeevenimentele. 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şiereexterne şi legate în interiorul codului HTML.

I.3.3. Alte Tehnologii pe parte de Client

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

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

-   DHTML  ( Dynamic HTML) – o combinaţie de HTML, script-uri şi CSScare folosite împreună, pot realiza interfeţe pentru utilizator foarteatractive ş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.

10

 

I.3.4. URL-uri

Piesa care leagă între ele serverele Web, browserele Web şi paginile Webeste 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 suntconstituite din şase părţi, astfel:

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

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

-   Port  – portul calculatorului gazdă pe care rulează serverul Web. Dacă esteomis, 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 caretrebuie 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ă estenecesar ş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ţiilenecesare din alte aplicaţii. Paginile dinamice pot comunica cu bazele de date, foide calcul tabelar, sisteme de gestiune a bazelor de date client-server şi multe alteaplicaţ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 

11

 

- 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ţiisunt 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 destulde 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 unuiformular 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ă aceacerere pentru a determina dacă este o simplă pagină Web sau o pagină carenecesită prelucrări suplimentare de către un web application server. Acest lucru îlrealizează prin cecetarea extensiei sau a tipului MIME. Dacă tipul MIME indică o pagină Web simplă, atunci serverul web îndeplineşte cererea şi trimite fişierulcătre browserul clinet nemodificată. Dar dacă tipul MIME indică faptul că fişierulcerut necesită procesarea de către un web application server, atunci web serverultrimite 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.

12

 

II. INTRODUCERE ÎN PHP

 PHP , acronim care provine din " PHP:  H  ypertext  P re processor ", este unlimbaj de scripting utilizat pe scară largă, realizat şi distribuit în sistem OpenSource, care este special realizat pentru a dezvolta aplicaţii web, prin integrareacodului PHP în documente HTML. Sintaxa sa provine din C, Java şi Perl şi esteuşor de învăţat. Scopul principal al limbajului este acela de a scrie rapid paginiweb 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 înutilizare, PHP a devenit rapid un instrument de frunte pentru dezvoltareaaplicaţiilor în Web. Totuşi, spre deosebire de alte instrumente populare pentrudezvoltarea aplicaţiilor Web, cum este Perl, PHP este un limbaj de programarecomod 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 unconţinut Web dinamic, adică un conţinut Web care se modifică automat de la o zila 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 detrafic.

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

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 – înloc 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>

13

 

  <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 esteexecutat 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 felcodul 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 unutilizator să stie defapt ce există în fişiere.

II.1.2. Ce po ate face PHP?

Cu PHP se poate face orice. PHP este în principal axat pe partea descripting ce rulează pe server, deci poate face orice face şi un program CGI, cumar fi colectarea de date de la formulare, generarea de conţinut dinamic sautrimitere ş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 browserweb. E nevoie ca serverul de web să fie pornit, cu o conexiune PHPinstalată. Se poate accesa rezultatul programelor PHP cu un browser prinintermediul serverului de web.

- Scripting in linie de comandă. Se poate face ca PHP să ruleze fără a finevoie 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 procesarea 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 şise doreşte folosirea unor facilităţi avansate ale PHP-ului în aplicaţiile cerulează de partea clientului, se poate totuşi folosi PHP-GTK pentru a scrie

14

 

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

PHP poate fi folosit pe aproape toate marile sisteme de operare, incluzândLinux, multe variante de Unix (incluzând HP-UX, Solaris şi OpenBSD),Microsoft Windows, Mac OS X, RISC OS, probabil şi altele. PHP are deasemenea suport pentru majoritatea serverelor de web din prezent. Acestea includserverele 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 procesorCGI.

Deci, cu PHP, există libertatea de a alege un sistem de operare şi un serverde web. Chiar mai mult, există posibilitatea de a alege programarea proceduralăsau programarea orientată obiect, sau chiar sa se combine acestea. Cu toateacestea, 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ţeFlash (folosind librăriile libswf şi Ming) toate generate instant. Se poate deasemeanea ca rezultatul să fie orice fişier text, cum ar fi XHTML sau orice altefişiere XML. PHP poate genera autmoat aceste fişiere şi să le salveze în sistemulde fişiere în loc să le afişeze, formând un cache de partea serverului pentruconţinutul dinamic.

Una dintre cele mai puternice şi importante facilităţi în PHP este suportulsău pentru o gamă larga de baze de date. Scrierea une pagini de web ceinteracţ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ă dedate 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 (peWindows) ş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 aresuport pentru instanţierea obiectelor Java şi utilizarea lor într-un mod transparentca obiecte PHP. Se pot de asemenea folosi extensii CORBA pentru a accesaobiecte aflate la distanţă.

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

15

 

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 accesareaIRC-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ă interpretareatextului 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, dinnou. Acest mecanism permite înglobarea codului PHP în interiorul coduluiHTML: tot ceea ce este în afara tag-urilor PHP este lăsat nemodificat, în timp cetot 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 <scriptlanguage="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 coduluiPHP î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 "<? echoexpression ?>"

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

16

 

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

Prima variantă, <?php. . .?>, este metoda preferată deoarece permitefolosirea 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 prinintermediul funcţiei short_tags() (numai în PHP3), prin activarea opţiuniishort_open_tag în fişierul de configurare, sau prin compilarea scripturilorfolosind opţiunea enable-short-tags. Chiar dacă este implicit activată în fişierulphp.ini, folosirea tag-urilor prescurtate nu este recomandată.

Cea de-a patra variantă poate fi folosită numai dacă tag-urile de tip ASP aufost 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ă laapariţia unui alt tag de start. În cazul blocurilor mari de text, ieşirea din modulPHP este în general mai eficientă decât trimiterea textului folosind echo() sauprint().

II.2.2. Separarea instrucţiunilor

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

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

17

 

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

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 dinaceste 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’)- stringDouă tipuri compuse:- array- obiectDouă tipuri speciale:- resource- NULL

18

 

Tipul unei variabile, de obicei nu este stabilit de programator, ci este decisla 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 denumele variabilei. Numele variabilelor sunt case-sensitive.

În PHP3 variabilele sunt întotdeauna atribuite prin valoare. Cu altecuvinte, atunci cînd o expresie este atribuită unei variabile, întreaga valoare aexpresiei originale este copiată în variabila destinaţie. Aceasta înseamnă că, deexemplu, după atribuirea valorii unei variabile alteia, schimbarea uneia dintreaceste 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 ceainiţială, şi invers. Aceasta înseamnă de asemenea că nu sunt realizate copii şiastfel atribuirea se realizează mai rapid.

Pentru a realiza o atribuire prin referinţă trebuie doar ataşat unampersand(&) la începutul variabilei care va fi atribuită (variabila sursă), ca înexemplul 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 acestevariabile, nu pot fi documetate complet deoarece sunt dependente de serverul pecare rulează, de versiunea şi setarea acestuia precum şi de alţi factori.

19

 

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

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.

$_SERVER Reprezintă variabilele setate de serverul de web sau legate direct de mediul

de execuţie al scriptului curent.

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

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

$_POSTReprezintă variabilele oferite scritpului direct prin HTTP POST. Analog

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

$_COOKIEReprezintă variabilele oferite scritpului direct prin HTTP. Analog

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

$_FILESReprezintă 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).

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

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

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

20

 

II.4.4. Folosirea variabilelor statice

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

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

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

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

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

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

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

<?phpfunction Test(){

21

 

  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 acelformular sunt automat transmise scriptului PHP. Sunt mai multe modalităţi de aaccesa 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="Submitme!"></form>

În funcţie de setările şi preferinţele particulare, sunt multe modalităţi de aaccesa 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 longpredefined// variables can be disabled with theregister_long_arrays directive.

22

 

  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 vafolosi variabila predefinită GET în schimb. GET se poate folosi şi pentruextragerea informţiilor din QUERY_STRING (informaţiile de după semnul ? dinURL). De exemplu, URL-ul http://www.example.com/test.php?id=3 conţine dateGET 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 identificautilizetoriicare revin pe o anumită pagină. Cookie-urile se pot seta folosindfuncţia setcookie(). Cookie-urile fac parte din header-ul HTTP, deci funcţiasetcookie() 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 arfi $_COOKIE, $HTTP_COOKIE_VARS ca şi în $_REQUEST.

Dacă se doreşte atribuire unor valori multiple unei singure variabileCookie, 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 fiun singur array.

23

 

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ţiilenecesare 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 dateare loc o integrare a datelor, în sensul că mai multe fişiere sunt privite înansamblu, 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 distribuitespaţial, a mai multor persoane de pregătiri diferite, fiecare cu stilul personal delucru.

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). UnSGBD dă posibilitatea utilizatorului să aibă acces la date folosind un limbaj denivel î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 datelorimplicate şi a modului de memorare a lor. SGBD-ul este o interfaţă întreutilizatori şi sistemul de operare.

Sistemele de baze de date au în vedere mai multe tipuri de structuri dereprezentare 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 numescbaze 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 cumeste definită în teoria mulţimilor, şi anume ca o submulţime a produsuluicartezian a unei liste finite de mulţimi numite domenii. Elementele unei relaţii senumesc tupluri, iar numărul de domenii din produsul cartezian se numeştearitatea relaţiei.

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

24

 

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

Accesul la informaţii se face pe baza cheilor. O cheie este o coloană (sauun 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 maimulte clasificări, dintre acestea, cea mai frecvent utilizată fiind clasificarea înforme 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 uneirelaţ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 cinceaau fost definite de Fagin.

Principalele scopuri urmărite în procesul de normalizare sunt: eliminareaunor redundanţe, evitarea unor anomalii de reactualizare, realizarea unui proiectcare să reprezinte cât mai fidel modelul real (uşor de înţeles şi eventual demodificat), 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 careformează nucleul multor sisteme de gestiune a bezelor de date. SQL a fostdezvoltat 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 poateobţ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 dorisă obţină acces la date şi să le vizualizeze. Ca atare, nu se pot scrie programe deaplicaţie care să satisfacă fiecare potenţială necesitate de informaţii. Este aproapesigur 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 daterelaţională fără a scrie un program de aplicaţie, permiţând frecvent evitareaîntârzierilor şi a costurilor implicate de programarea personalizată. Astfel, bazelede date relaţionale permit satisfacerea tuturor cererilor ad-hoc de informaţii, carear 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.

25

 

- DQL -  Data Query Language - folosit pentru extragerea informaţiilor din bazede 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. Încontextul modelării E-R, o entitate este similară cu un tabel relaţional, cu altecuvinte, 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 suntdescoperite şi organizate. Un model E-R poate fi rafinat cu uşuinţă, pentru agenera o structură a unei baze de date, care poate fi transformată într-o bază dedate 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 identificareacoloanelor. 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?

26

 

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

De obicei este evident că unele coloane sunt corelate, în sensul că facreferire la un anumit set de individualităţi corelate. Ca atare, aceste coloane pot figrupate pentru a forma o entitate. Uneori o coloană dată este corelată cu maimulte 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ă ocheie primară. Se examinează fiecare entitate pentru a determina dacă una dintrecoloanele 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ă aentităţii.

Se pot gaăsi unele entitaţi care nu conţin nici o coloană adecvată pentrurolul de cheie primară. Într-o asemenea situaţie se poate căuta o serie de coloanecare au o valoare combinată unică. Dacă se descoperă o asemenea serie, se poateidentifica 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ă ocoloană nouă, care va conţine o identificare artificială unică, şi se identifică nouacoloană ca fiind cheia primară a entitaţii.

Se poate folosi o identificare artificială unică chiar şi atunci când una saumai multe coloane pot servi drept cheie primară. Astfel, se evită problemele careapar 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 oconstituie identificarea cheilor externe. Acestea sunt pur şi simplu coloane alecaror valori sunt corelate cu acelea ale valorilor cheilor primare ale unei entităţioarecare. Procesul de identificare a cheilor externe constă în comparareacoloanelor 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?”.

27

 

III.2.7. Rafinarea modelelor E-R

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

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

28

 

IV. MySQL

IV.1. Introducere în MySQL

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

MySQL software is Open Source. Aceasta înseamnă că MySQL poate fidescă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 rapiddecât soluţiile existente. Conectivitatea sa, viteza şi securitatea fac ca Serverul MySQLsă 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 serverMySQL multithreaded care suportă diferite programe client şi biblioteci, unelteadministrative ş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

29

 

- Funcţiile SQL sunt implementate folosind o bibliotecă de clase optimizată şisunt foarte rapide. De obicei, nu are loc alocare a memoriei după iniţializareainterogărilor.

- Serverul este disponibil ca program separat ce poate fi folosit într-un mediude 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 şi8 bytes lungime cu/fără semn, FLOAT, DOUBLE, CHAR , VARCHAR , TEXT,BLOB, DATE, TIME, DATETIME, TIMESTAMP, YEAR , SET, ENUM, şi tipurigeometrice 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 aleinterogărilor.

- Suport pentru clauzele GROUP BY şi ORDER BY, şi pentru funcţii de grup(COUNT(), COUNT(DISTINCT ...), AVG(), STD(), SUM(), MAX(), MIN(), şiGROUP_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.

30

 

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

IV.2.5. Scalabilitate şi limite

- Manipulează baze de date de dimensiuni mari. MzSQL este folosit cu baze dedate 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 constadin 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 carefolosesc conexiuni ODBC (Open DataBase Conectivity).

- Interfaţa Connector/JDBC oferă suport MySQL pentru programe client Javacare 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 decomandă prin intermediul clientului mysqlcheck.

31

 

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

IV.3. Fundamente MySQL

IV.3.1. Conectarea şi deconectarea de la server

Pentru a realiza conectarea la server trebuie specificat un nume deutilizator şi, de cele mai multe ori, o parolă. Dacă serverul rulează pe un altcalculator 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 respectivnumele unui cont MySQL, iar ******** reprezintă parola care trebuie introdusă.

Dacă conectarea se realizează cu succes în continuare sunt afişate informaţiiintroductive, 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 thebuffer.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ărilor32

 

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

mysql> SELECT VERSION(), CURRENT_DATE;+--------------+--------------+| 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ă estegata să accepte alte comenzi.

- Mysql afişează rezultatul interogărilor într-o formă tabelară. Prima linieconţ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 unsemn 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, deexemplu:mysql> SELECT  -> USER()

33

 

  -> ,  -> CURRENT_DATE;+--------------------+--------------+| USER() | CURRENT_DATE |+--------------------+--------------+| joesmith@localhost | 1999-03-18 |+--------------------+--------------+

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

Se poate întrerupe introducerea unei interogări pe linii multiple folosindsimbolurile \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 comandaSHOW:

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

Baza de date mysql este necesaă deoarece descrise privilegiile de acces aleutilizatorilor, iar baza de date test este oferită, de obicei, ca mediu de test pentruutilizatori.

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

34

 

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

mysql> CREATE DATABASE menagerie;

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, deexemplu:

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

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

Acum comanda SHOW TABLES va avea următorul rezultat:

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

35

 

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

mysql> DESCRIBE pet;+---------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+---------+-------------+------+-----+---------+-------+| 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 | |+---------+-------------+------+-----+---------+-------+

36

 

V. APLICAŢIE

V.1. Descrierea site-ului

În cadrul acestei aplicaţii prin combinarea a PHP MySQL s-a doritrealizarea unui site dinamic care dă posibilitatea vizitatorilor săi să-şi găseacă perechea potrivită. Site-ul reprezintă implementarea Web a unei agenţiimatrimoniale. 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 fitrimiterea automată de e-mail către adresele specificate de utilizatori şi încarcareade 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ţinetoate imaginile incluse în paginile site-ului, în directorul  photos  sunt stocatefotografiile membrilor înregistraţi. Directorul templates  conţine fişierele .phpfolosite ca template pentru toate paginile din site, iar directorul styles  conţinefiş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 altefiş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.phpconţin informaţii despre autorul aplicaţiei şi, respectiv, modul de contactare aacestuia. Pagina register.php conţine un formular html pe care utilizatorii trebuiesă-l completeze pentru a se putea înregistra ca membrii ai site-ului. Dacăformularul este completat corect şi înregistrarea este realizată cu succes iarutilizatorului îi este prezentat un mesaj sugestiv şi este trimis un e-mail cătreadresa specificată de acesta, respectiv, dacă înregistrarea eşuează, este afişat unmesaj de eroare corespunzător. Pagina members.php conţine lista tuturormembrilor înregistraţi, cu câteva informaţii reprezentative pentru fiecare şi culegă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 dedate folosind mai multe criterii. Rezultatele căutării sunt afişate în pagina

37

 

search_results.php, având acelaşi layout ca şi pagina member_details.php, paginacu 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 unuifiş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 tabelformat din trei rânduri ce îndeplinesc rolurile de header, content şi footer. Parteade 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 includereafişierului menubar.php, iar bara de stare este implementată în fişierulstatusbar.php. Partea de content va fi, de asemenea, setată separat pentru fiecarefişier al site-ului. Partea de footer implementată în fişierul footer.php conţineinformaţii de tip Copyright.

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01Transitional//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>

38

 

</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 încadrul paginilor. Acestea pot fi cu uşurinţă modificate şi, datorită faptului că acestStyle Sheet este aplicat tuturor paginilor, întregul layout al site-ului este modificatautomat.

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, careconţine informaţiile despre membrii, languages, care conţine o listă a limbilor pecare utilizatorii le pot selecta,  spokenlanguages, care reprezintă legăturile dintrefiecare membru şi limbile cunoscute de acesta şi  photos, care conţine informaţiiledespre fotografiile mebrilor, maximum cinci fotografii pentru fiecare membru.

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

39

 

40

 

V.2. Utilizarea bazelor de date MySQL

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

41

 

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

Majoritatea interacţiunilor cu o bază de date se desfăşoară după un modelsecvenţ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ţiamysql_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ţiareturnează 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 accesulla serverul MySQL.

Se poate omite numele gazdei, identificatorul de utilizator şi parola, sautoate cele trei argumente. Dacă se procedează astfel, vor fi luate în considerare, înmod prestabilit, următoarele valori:-numele gazdei: localhost-identificatorul de utilizator: identificatorul de utilizator al procesului serverMySQL-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 îndirectorul functions, astfel :

<?phpfunction connectdb(){

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

}?>

 

42

 

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 dedate, 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 aerorilor, şi anume mysql_errno() şi mysql_error(). Fiecare funcţie returnează unrezultat care reflectă eroarea, dacă există, asociată celei mai recente operaţii cuMySQL. Dacă programul execută o secvenţă de operaţii MySQL, iar primaoperaţ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. Functiamysql_errno()  returnează un cod numeric de eroare, în timp ce funcţiamysql_error() returnează o descriere textuală a erorii. Dacă nu s-a produs nici oeroare, 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 conexiunecu serverul MySQL, deci nu se poate folosi nici una dintre aceste funcţii pentru araporta 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

 

V.2.4. Eliminarea mesajelor de eroare

 Numeroase funcţii PHP pot produce erori sau mesaje de avertizare, darPHP furnizează funcţia error_reporting(),  care permite eliminarea mesajelornedorite. Funcţia are următoarea formă:error_reporting (masca)

unde masca specifică tipul mesajelor care vor fi raportate. Dacă se specifica zeroca valoare a atributului masca, nu va fi raportat nici un mesaj. Dacă se specificaE_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ţiamysql_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 deinterogă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ărilorsunt procese destul de diferite.

V.2.7. Funcţia mysql_query()

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

44

 

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 cazcontrar, 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 aavut efectul dorit, se poate folosi funcţia mysql_affected_rows(), care returneazănumărul rândurilor afectate de interogarea cea mai recentă. Funcţtia areurmătoarea formă:mysql_affected_rows()

În cazul în care cea mai recentă interogare UPDATE, INSERT sauDELETE 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ă încoloana care serveşte drept cheie primară a tabelului, se poate folosi indicatorulAUTO_INCREMENT.

Când se inserează un rind într-un tabel se poate folosi funcţiamysql_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 valoareAUTO_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ă numodifice 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

 

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

O modalitate de parcurgere iterativă a rândurilor unui set de rezultateconstă î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ţinevaloarea numărului de rânduri, se invocă funcţia mysql_rows(),  transferând caargument valoarea returnată de funcţia mysql_query().

Funcţia mysql_fetch_row() se poate folosi pentru a obţine următorul rânddin 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 cazcontrar. Ca atare, în general este preferabil să se omită apelarea funcţieimysql_num_rows() şi să sa se folosească în schimb o instrucţiune while.

Valoarea returnată de funcţia mysql_fetch_row()  reprezintă un tabloualcătuit din toate coloanele rândului curent din tabel. Tabloul foloseşte indexuriîntregi, unde valoarea primului index este egală cu zero. Pentru a prelucracoloanele 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ţineacces 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ţiamysql_fetch_array()  returnează false dacă nu mai există rânduri în setul derezultate.

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

 

De asemenea, biblioteca furnizează o funcţie care permite obţinereaaccesului în mod non-secvenţial la rândurile din setul de rezultate, prinspecificarea 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ţiamysql_query().

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

Funcţia mysql_field_name()  returnează numele coloanei din setul derezultate 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-unset de rezultate, având valoarea indexului dată ca argument al funcţiei. Indexulasociat 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 derezultate

Funcţia mysql_field_flags()  returnează indicatorii SQL asociaţi colaoneidin setul de rezultate al cărei index este dat ca argument al funcţiei. Indexulasociat 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

47

 

•  NOT_NULL• 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 alcarei 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 derezultate

Funcţia mysql_field_table() returnează tabelul MySQL, dacă există, asociatcoloanei 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 este1, etc. În cazul în care coloana conţine o valoare calculată sau dacă respectivacoloană nu este asociata în alt mod cu un tabel MySQL, funcţia returneaza un şirvid.

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

Funcţia mysql_fetch_field()  returnează un obiect ale cărui proprietăţiconţ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

48

 

•   not_null  – are valoarea 1 în cazul în care coloana nu poate conţinevaloarea NULL

•   numeric – are valoarea 1 în cazul în care coloana este numerică•   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ă defuncţ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 adoua 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 generalrândurile dintr-un set de rezultate în mod secvenţial. Totuşi, funcţiamysql_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_rindeste indexul rândului la care doriţi să obtineţi accesul. Primul rând al setului derezultate 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ţieimysql_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

49

 

V.3.1. Înregistrarea noilor membrii

Pentru înregistrarea unui nou membru în baza de date a aplicaţiei,utilizatorul trebuie să completeze formularul din pagina register.php. Acesta suntcuprinde 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ă selectalimbile cunoscute. Toate câmpurile sunt obligatorii, unele au furnizate valoriimplicite, iar pentru cele care necesită îndeplinirea anumitor condiţii pentru a putea fi valide a fost realizată o funcţie JavaScript. Aceasta realizează validareadatelor introduse în formular înainte ca cererea să fie trimisă spre procesareserverului.

Câmpurile de tip select din formular trebuie să aibă valori care suntobţ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ă înfişierul  showenumvalues.php, inclus în directorul  functions, funcţie care esteimplementată 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 valoriale parametrului $col , de exemplu:

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

50

 

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 apelulfuncţiei mysql_query. Dacă inserarea eşuează este afişat un mesaj de eroare şiutilizatorului îi este oferită posibilitatea de a se întoarce în pagina cu formularulde înregistrare. Dacă înregistrarea are loc cu succes, în continuare se introduc întabelul languages limbile specificate de utilizator, este trimis un e-mail informativcă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. Totacum 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, directorce 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 suntreţ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:

51

 

$insert="INSERT INTO members(name, gender, email,password, birthdate, precisedate, birthplace,height, weight, haircolor, eyescolor, smoker,maritalstatus, kids, kidslivingwith, religion,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 derezulatul acesteia:

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

$message="<br><center>Registrationfailed</center><br>".

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

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

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

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

}}chdir('photos');$dir = 'member_'.$newid;

52

 

mkdir($dir);$message="<center>Congratulations! You have been

succesfully registered!</center><br>".'<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ţiamailto($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-mailinformativ, 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 youspecified:<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ţineun formular în care utilizatorul poate specifica creiteriile de căutare. Aplicaţia

53

 

 permite căutarea membrilor folosind orice combinaţie a următoarelor coloane dintabelul members: name,  gender , height , weight , haircolor , eyescolor ,maritalstatus, smoker , country.

După introducerea informaţiilor dorite pentru căutare, formularul estetrimis 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 devalorile 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;}?>

54

 

În pagina search_results are loc apelul metodei find folosind dateleintroduse în formular şi se execută interogarea respectivă. Rezultatele căutăriisunt prezentate într-un tabel, câte o înregistrare pe fiecare linie, cuprinzând câtevadetalii pentru fiecare membru găsit, şi cu lkegături către paginile cu detalii desprefiecare.

<?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, darcare primeşte diferite valori pentru atributul detip URL gender . Astfel, pentru

55

 

 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.

În pagina members.php, construită pe baza templeate-ului, informaţiilesunt prezentate sub forma unui tabel care conţine pe fiecare linie câtevainfoormaţ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

 

V.3.4. Upload-ul fişierelor

După ce s-a înregistrat, unui membru i se dă posibilitatea de a încărca peserver maximum cinci fotografii personale. Acest lucru este implementat înfiş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 cincielemente input  de tip file. Pagina de acţiune a acestui formular este setată ca fiindtot upload.php. La accesarea paginii are loc o verificare dacă a fost apăsat butonulde 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 trecereainformaţiilor corespunzătoare în baza de date. La final, este setată o variabilă phpnumită $succes, a cărei valoare va fi afişată opentru a furniza utilizatoruluiinformaţii referitoare la succesul sau eşecul upload-ului. Mecanismul de uploadeste 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);

57

 

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

$result=mysql_query($query);}

}}

}?>

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ă adresade e-mail şi parola pe care a ales-o în momentul creării contului. Acest formulareste trimis spre prelucrare tot către pagina login.php. La începutul fişierului areloc o verificare dacă a fost apăsat butonul de login şi în caz afirmativ se preiauinformaţiile introduse în formular şi se verifică dacă acestea corespund uneia şinumai uneia dintre înregistrările din tabelul members. Dacă este găsită oasemenea înregistrare, sunt setate variabilele username  şi userid   din scopul$_SESSION  şi fişierul statusbar.php îşi modifică conţinutul pentru a afişa faptulcă 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;}

}

58

 

?>

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

Fişierul statusbar.php este cel care realizează afişarea, sub bara de meniu ainformaţiilor legate de starea utilizatorului. După ce utilizatorul este recunoscut îieste afişat un link prin care poate accesa pagina logout.php, prin care se poatedeconecta, 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 pentruutilizatorii conectaţi. Pentru aceasta, respectivele pagini trebuie să realizeze overificare a variabilelor din scope-ul $_SESSION , iar în cazul în care utilizatorulnu 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:

59

 

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

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

}

?>

60

 

CONCLUZIE

61