Sunteți pe pagina 1din 65

Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Construirea unui site dinamic folosind o aplicatie informatica

INTRODUCERE

Dezvoltarea rapidă din ultima perioadă a resurselor software şi hardware din


domeniul tehnologiei informaţiei are meritul de a oferi o mai bună comunicare şi un acces
mult mai rapid la toate categoriile de informaţii. Acest lucru se poate observa foarte uşor
datorită sistemului World Wide Web, cu ajutorul căruia, printr-un simplu click de mouse se
poate naviga prin miile de resurse informaţionale din întreaga lume.
Această lucrare prezintă o aplicaţie ce constă într-un site dinamic, construit utilizând
tehnologiile PHP şi MySQL. Acest site reprezintă o implementare Web a unei agenţii
matrimoniale. Utilizatorii se înregistrează şi îşi pot introduce anumite informaţii personale.
Se permite, de asemenea, căutarea în baza de date asociată, folosind anumite criterii.
Căutarea şi vizualizarea mebrilor înregistraţi nu este permisă decât membrilor site-ului,
pentru aceasta fiind implementat un mecanism de logare. Este implementat, de asemenea şi
mecanismul de trimitere de e-mail către adresele membrilor şi de upload de fişiere pe server.
Lucrarea este structurată în cinci capitole, primele patru constând în prezentarea
principalelor noţiuni şi concepte folosite în realizarea aplicaţiei, iar ultimul capitol reprezintă
descrierea plicaţiei şi modul ăn care aceasta a fost realizată.

Capitolul 1 – Internet-ul reprezintă o scurtă introducere a principalelor noţiuni legate


de Internet. Sunt explicate noţiuni ca Internet, protocolale, aplicaţii pentru internet, DNS,
intrenet şi extranet, web servers şi web application servers, pagini web statice şi dinamice,
limbaje de markup şi scripting, HTML, JavaScript, PHP.

Capitolul 2 – Introducere în PHP reprezintă o descriere a principalelor noţiuni legate


de acest limbaj. Este descris modul de includere a codului PHP în cadrul codului HTML, sunt
prezentate tipurile de date pe care acest limbaj le suportă şi tipurile de variabile care pot fi
utilizate.

Pagina 1 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

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

Capitolul 4 – MySQL reprezintă o introducere în acest sistem de gestiune a bazelor de


date realţionale. Sunt prezentate principalele caracteristici ţi facilităţi oferite de acesta. De
asemenea, este prezentat modul de utilizare a MySQL, conectarea şi deconectarea de la
server, crearea şi selectarea bazelor de date, crearea tabelelor şi intoducerea interogărilor.

Capitolul 5 – Aplicaţie reprezintă descrierea aplicaţiei. Implementarea acestui site a


fost realizată folosind limbajul de server side scripting PHP datorită felxibilităţii acestuia şi a
faptului că poate fi folosit gratuit, fără restricţii. De asemenea, a fost ales sistemul de gestiune
a bazelor de date relaţioale MySQL datorită faptului că şi acesta poate fi folosit gratuit şi este
Open Source şi este cel mai potrivit produs pentru accesarea şi administrarea bazelor de date
prin Internet.
Interfaţa grafică a aplicaţiei a fost construită pe baza unui template, pe care toate
paginile site-ului îl folosesc pentru a păstra acelaşi layout pe întregul site. De asemenea,
pentru setarea modalităţilor de afişare a diferitelor elemente HTML, pentru alegerea stilului
site-ului s-a folosit un fişier .css, acesta putând fi modificat sau înlocuit şi întregul site îşi
schimbă automat înfăţişsarea.
Prin combinarea acestor două produse, PHP şi MySQL, aplicaţia realizată este foarte
flexibile, putându-se adăuga noi funcţionalităţi dacă este necesar.

Pagina 2 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

I. INTERNET-UL

I.1. INTRODUCERE

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

I.1.1 Internet-ul

Internet-ul este înconjurat de foarte multă ambiguitate şi confuzie dar, în câteva


cuvinte, poate fi definit ca cea mai mare reţea din lume. Majoritatea reţelelor din prezent sunt
reţele locale (Local Area Networks – LANs) şi sunt formate dintr-un grup de calculatoare
aflate relativ aproape unul de celălalt şi conectate prin echipamente hardware speciale şi
cabluri. Unele calculatoare îndeplinesc rolul de clienţi (cunoscute, de obicei, sub denumirea
de workstations) iar altele sunt servere. Toate aceste calculatoare pot comunica între ele
pentru a schimba informaţii.
O reţea mai mare, care se întinde pe mai multe locaţii geografice este, de obicei,
folosită de marile companii care au sedii în mai multe localităţi. Fiecare dintre locaţii are
propriul său LAN, care leagă calculatoarele locale. Aceste LAN-uri, la rândul lor, sunt
interconectate prin intermediul unor medii speciale de comunicare. Legăturile pot fi de la
legături de tip dial-up prin modem, până la legături de mare viteză T1 sau T3 sau legături prin
fibră optică. Grupul complet al LAN-urilor interconectate se numeşte Wide Area Network
(WAN). WAN-urile se folosesc pentru a conecta locaţii diferite ale unei companii.
Dacă s-ar dori conectarea tuturor calculatoarelor de oriunde s-ar începe prin rularea
unor backbones de viteze foarte mari, conexiuni capabile să transmită cantităţi mari de date,
între locaţii strategice – probabil mari oraşe sau ţări diferite. Aceste backbones ar fi
asemănătoare autostrăzilor de mare viteză şi pe multe benzi dintre ţări.

Pagina 3 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Ar trebui definită o toleranţă la erori pentru a face aceste backbones complet


redundante, astfel încât dacă vreo conexiune se întrerupe, ar mai fi disponibilă cel puţin o altă
modalitate de a a atinge o destinaţie specifică.
Mai departe, ar fi create mii de legături locale care ar conecta fiecare oraş la backbone
prin conexiuni mai puţin rapide. S-ar permite WAN-urilor şi LAN-urilor companiilor şi chiar
şi utilizatorilor individuali cu modem-uri pentru dial-up să se conecteze la aceste puncte de
acces locale. Unele calculatoare ar putea fi conectate tot timpul, în timp ce altele s-ar putea
conecta doar la nevoie.
S-ar crea apoi un limbaj comun de comunicare astfel ca fiecare calculator conectat la
această reţea să poate comunica cu oricare altul.
Şi în final ar trebui definită o schemă pentru a putea identifica în mod unic fiecare
calculator conectat la reţea. Acest lucru va asigura faptul că informaţia trimisă unui anumit
calculator va ajunge la destinaţia dorită.
Cu toate că aceasta este o descriere simplificată, este exact modul în care Internet-ul a
fost realizat şi lucrează.
Backbone-urile de mari viteze există într-adevăr. Majoritatea sunt deţinute de marile
companii de telecomunicaţii.
Punctele de acces locale, cunoscote sub numele de POP (Points of Presence) aparţin
companiilor telefonice, de cablu şi furnizorilor locali de Internet (ISPs – Internet Service
Providers)
Limbajul comun este IP – Internet Protocol, dar termenul de limbaj este impropriu.
Un protocol reprezintă o mulţime de reguli ce guvernează comportamentul în anumite
situaţii. Protocoalele permit realizarea comunicării fără întreruperi şi fără să apară neînţelegri.
IP este protocolul folosit pentru comunicarea prin Internet, deci fiecare calculator trebuie să
ruleze o copie a acestui protocol.
Identificatorii unici sunt adresele IP. Fiecare calculator, sau host, conectat la Internet
are o adresă IP unică. Aceste adrese sunt formate din patru seturi de numere separate prin
punct – de exemplu 208.193.16.100. Unele calculatoare au adrese fixe (sau statice), în timp
ce altele au adrese alocate dinamic, de fiecare dată când este stabilită o conexiune. Indiferent
de modul în care este este obţinută o adresă IP, oricare două calculatoare conectate la Internet
nu vor putea folosi aceeaşi adresă IP în acelaşi timp.

I.1.2. Aplicaţii pentru Internet

Pagina 4 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Internet-ul în sine este o masivă reţea de comunicaţii şi oferă foarte puţin majorităţii
utilizatorilor, din acest motiv au fost necesari 20 de ani pentru ca Internet-ul să devină
fenomenul din prezent.
Internet-ul a fost ridicat la rangul de Information Superhighway şi această analogie
este destul de precisă. Autostrăzile nu sunt aşa de atractive precum locurile în care se poate
ajunge călătorind pe ele şi acest lucru este valabil şi pentru Internet. Ceea ce face Internet-ul
aşa de atrăgător sunt aplicaţiile care rulează pe baza sa şi ceea ce poate fi realizat cu ajutorul
acestora.
Cea mai cunoscută aplicaţie din prezent este World Wide Web. Mulţi oameni
confundă Internet-ul cu World Wide Web, lucru complet greşit.
Toate aplicaţiile pentru Internet folosesc protocolul IP pentru a comunica. Informaţia
transmisă de aceste aplicaţii este împărţită în pachete, mici blocuri de date, care sunt trimise
unei adrese IP destinaţie. Aplicaţia de la capătul celălalt procesează informţiile primate.
Câteva din aplicaţiile pentru Internet sunt:
Email – SMTP (Simple Mail Transfer Protocol) este cel mai cunoscut mechanism de
transmitere a mesajelor de poştă electronică, iar POP (Post Office Protocol) este interfaţa cea
mai utilizată pentru accesarea mesajelor.
FTP – File Transfer Protocol este folosit pentru trasferul fişierelor între calculatoare.
IRC – Internet Relay Chat permite susţinerea de conferinţe în timp real, bazate pe
text, prin Internet.
NFS – Network File System este folosit pentru a partaja fişiere între diferite
calculatoare.
Newsgroups – liste de discuţii bazate pe thread-uri.
Telnet – folosit pentru conectarea la un calculator de la distanţă.
VPN – Virtual Private Networks permite accesul sigur al reţelelor private la Internet.
WWW – World Wide Web.

I.1.3 DNS

Pagina 5 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Adresele IP reprezintă singurul mod de a specifica în mod unic un host. Când se


doreşte comunicarea cu un alt host – un server de Web, de exemplu – trebuie specificată
adresa IP a acestuia. Dar, după cum se ştie, foarte rar se specifică direct adresa IP, ci se
specifică un hostname.
Mecanismul care asociază hostname-urile cu adresele IP se numeşte DNS (Domain
Name Service). Când se specifică o adresa, cum ar fi www.yahoo.com, browser-ul trimite un
o cerere de tip address resolution către un server DNS, cerând acestuia adresa IP asociată
numelui specificat. Serverul DNS va returna adresa IP actuală şi browser-ul o va folosi pentru
a comunica direct cu acel host.
Nu este obligatorie folosirea unui server DNS, utilizatorii ar putea specifica direct
adresa IP a hostului cu care doresc să comunice, dar sunt câteva motive pentru care acest
lucru nu se face:
Adresele IP sunt greu de reţinut şi pot fi uşor scrise greşit.
Adresele IP se pot schimba.
Adresele IP trebuie să fie unice, dar numele DNS nu.
Un singur host, cu o singură adresă IP, poate avea mai multe nume DNS.

I.1.4. Intranets şi Extranets

Un intranet nu este nimic mai mult decât un Internet privat. Cu alte cuvinte, este o
reţea privată, de obicei un LAN sau WAN, care permite folosirea aplicaţiilor Internet-based
într-un mediu sigur şi privat. Ca şi pe Internet-ul public, intranet-urile pot găzdui servere de
Web, servere FTP sau orice alte servicii bazate pe IP.
Un extranet este o reţea de tip intranet care conectează mai multe site-uri sau
organizaţii folosind tehnologii legate de intranet. Multe extranet-uri, de fapt, folosesc
Intranet-ul ca backbone şi utilizează tehnici de criptare pentru a asigura securitatea datelor
transmise prin reţea.
Cele două lucruri care deosebesc intranet-urile şi extranet-urile de Internet sunt cine le
poate accesa şi de unde pot fi accesate. Dacă o aplicaţie poate rula pe Internet, atunci va rula
cu siguranţă şi pe in intranet sau extranet.

Pagina 6 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

I.2. Web Servers şi Web Application Servers

I.2.1. Servere Web

World Wide Web este construit pe baza unui protocol numit Hypertext Transfer
Protocol (HTTP). HTTP este un protocol mic şi rapid care se potriveşte foarte bine sistemelor
informatice multimedia şi distribuite şi salturilor între site-uri.
Web-ul constă în pagini cu informaţii de pe gazde care rulează software de tip server
Web. Gazda este de multe ori identificată cu serverul Web, lucru care nu este corect. Serverul
Web este un software, nu calculatorul în sine.
Un Web server este un program care furnizează pagini Web la cerere. Când un
utilizator de la o adresă IP specifică solicită un anumit fişier, serverul Web încearcă să obţină
acel fişier şi să-l trimită înapoi utilizatorului. Fişierul solicitat poate fi codul sursă HTML al
unei pagini Web, o imagine GIF, un fişier Flash, un document XML, sau un fişier AVI.
Browserul Web este cel care determină ceea ce trebuie cerut, nu serverul Web. Serverul doar
procesează cererea.
Conexiunile la serverele de Web se stabilesc pe măsură ce sunt necesare. Dacă este
cerută o pagină de la un server Web, o conexiune IP este stabilită prin Internet între gazda
solicitantă şi gazda pe care rulează serverul Web. Pagina Web cerută este transmisă prin acea
conexiune, iar aceasta este întreruptă de îndată ce pagina este primită. Dacă pagina primită
conţine referinţe la alte informaţii ce trebuie descărcate (de exemplu, imagini GIF sau JPG),
fiecare va fi obţinută folosind o nouă conexiune.
Pe un acelaşi host pot rula mai multe aplicaţii de Internet, de exemplu un server Web,
un server FTP, un server DNS şi un server de mail SMTP POP3 pot rula în acelaşi timp.
Fiecărui server îi este atribuit un port pentru a asigura că fiecare server va răspunde numai
cererilor din partea clienţilor corespunzători.
Majoritatea serverelor folosesc un set de porturi predefinite. Serverele Web folosesc
de obicei portul 80, dar acesta poate fi schimbat. Pot fi instalate pe porturi nestandard pentru
a fi ascunse, şi de asemenea, pot fi instalate mai multe servere Web pe un singur calculator
asociindu-le porturi diferite.

Pagina 7 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

I.2.2. Pagini Web

Informaţiile din World Wide Web sunt stocate în pagini. O pagină poate conţine
oricare din următoarele: text, header-e, liste, meniuri, tabele, formulare, elemente grafice,
script-uri, stiluri (style sheets), obiecte multimedia.
Paginile Web sunt realizate folosind o serie de tehnologii pe partea de client şi sunt
procesate şi afişate de către browsere.

I.2.3. Browsere Web

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

I.3. Pagini Web Statice şi Dinamice

I.3.1. HTML

Paginile Web sunt fişiere cu simplu text costruite folosind limbajul Hypertext Markup
Language (HTML). Acesta este implementat ca o mulţime de tag-uri uşor de învăţat. Autorii
paginilor Web folosesc aceste tag-uri pentru a marca paginile de text, iar browserele le
folosesc pentru a randa şi afişa informaţiile pentru a putea fi vizualizate. Paginile Web pot să
conţină legături hypertext la alte pagini.

Pagina 8 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

I.3.2. JavaScript

HTML este un limbaj de markup. El permite crearea layout-ului paginilor şi a


formularelor, dar nimic mai mult. Pentru a se construi interfeţe intuitive şi sofisticate este
necesar şi un limbaj de scripting la nivel de client. Scripting-ul permite scrierea de cod (mici
programe) care rulează în cadrul browserului.
Cel mai cunoscut limbaj de scripting pe parte de client este JavaScript, care este
suportat (mau mult sau mai puţin) de aproape orice browser existent. Folosind JavaScript se
poate realiza: validarea formularelor, animarea textului şi a imaginilor, crearea de meniuri
drop-down şi a controalelor de navigare, se pot efectua procesări de bază numerice sau asupra
textelor şi multe altele.
Scripting-ul permite programatorilor să detecteze şi să proceseze evenimentele. De
exemplu, o pagină care se încarcă, un formular trimis, mişcarea pointer-ului mouse-ului
asupra unei imagini sunt toate evenimente, iar script-urile pot fi executate automat de browser
atunci cînd aceste evenimente au loc.
Script-urile pot fi incluse în codul HTML sau pot fi stocate în fişiere externe şi legate
în interiorul codului HTML.

I.3.3. Alte Tehnologii pe parte de Client

Majoritatea browserelor noi permit folosirea şi a altor tehnologii, dintre care cele mai
importante sunt:
CSS (Cascading Style Sheets) – oferă o modalitate de a separa prezentarea de conţinut
astfel încât ambele să poată fi refolosite şi modificate cu uşurinţă.
DHTML (Dynamic HTML) – o combinaţie de HTML, script-uri şi CSS care folosite
împreună, pot realiza interfeţe pentru utilizator foarte atractive şi interactive.
Appleturi Java – mici programe care rulează în browser.
Macromedia Flash – o tehnologie inclusă în 98% din browserele existente, care oferă
un mecanism pentru crearea unor interfeţe atractive şi portabile.

Pagina 9 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

I.3.4. URL-uri

Piesa care leagă între ele serverele Web, browserele Web şi paginile Web este URL-
ul.
Fiecare pagină din World Wide Web are o adresă care este introdusă în browser
pentru a-i indica acestuia să încarce pagina respectivă.
Aceste adrese se numesc Uniform Resource Locators (URLs) şi sunt constituite din
şase părţi, astfel:
Protocol – protocolul care va fi folosit pentru a obţine obiectul. De obicei acesta este
http pentru obiecte din World Wide Web. Dacă protocolul este specificat, atunci acesta
trebuie urmat de semnele ://.
Host – serverul Web de la care vor fi obţinute obiectele. Acesta poate fi specificat ca
un nume DNS sau ca o adresă IP.
Port – portul calculatorului gazdă pe care rulează serverul Web. Dacă este omis,
atunci se foloseşte portul implicit, iar dacă este specificat, numărul portului trebuie precedat
de semnul :.
Path – calea către fişierul care se doreşte a fi primit sau scriptul care trebuie executat.
File – numele fişierului cerut.
Query String – parametrii opţionali pentru script. Dacă este specificat, atunci trebuie
precedat de semnul ?.

I.3.5. Avantajul Paginilor Web Dinamice

Paginile dinamice sunt ceea ce dă viaţă Web-ului.


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

Pagina 10 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Paginile dinamice conţin foarte puţin text. În schimb extrag informaţiile necesare din
alte aplicaţii. Paginile dinamice pot comunica cu bazele de date, foi de calcul tabelar, sisteme
de gestiune a bazelor de date client-server şi multe alte aplicaţii.
Crearea paginilor Web dinamice permite crearea de aplicaţii puternice, care pot
include caracteristici precum următoarele:
interogarea aplicaţiilor de baze de date existente pentru obţinerea datelor
crearea de interogări dinamice care facilitează obţinerea în mod flexibil a datelor
execuţia procedurilor stocate
execuţia codului condiţional on-the-fly pentru a personaliza răspunsurile în funcţie de
situaţiile specifice
sporirea capabilităţilor formularelor HTML standard prin folosirea unor funcţii de
validare
popularea în mod dinamic a elementelor din formulare
personalizarea modului de afişare a informaţiilor legate de dată, timp şi monedă
folosind funcţii de formatare
uşurarea creării aplicaţiilor de introducere a datelor prin wizards
generarea automată de email
site-uri comerciale şi coşuri electronice de cumpărături
şi multe altele

I.3.6. Înţelegerea Aplicatiilor Web

Browserele Web trimit cereri către serverele Web, iar acestea le îndeplinesc – trimit
înapoi informaţiite cerute către browser. Aceste informaţii sunt de obicei fişiere HTML, ca şi
alte tipuri de fişiere.
Şi cam atât este ceea ce fac serverele Web. Ele sunt de fapt aplicaţii destul de simple –
stau şi aşteaptă cererile pe care le îndeplinesc de îndată ce le primesc. Serverele Web nu
permit interacţiunea cu bazele de date, nu permit personalizarea paginilor Web, nu permit
procesarea rezultatelor trimiterii unui formular de către utilizator.
Un Web application Server este un software care extinde serverul Web, permiţânduţi
acestuia să facă lucrurile pe care nu le poate face singur.

Pagina 11 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Când un server Web primeşte o cerere de la un browser, el cercetează acea cerere


pentru a determina dacă este o simplă pagină Web sau o pagină care necesită prelucrări
suplimentare de către un web application server. Acest lucru îl realizează prin cecetarea
extensiei sau a tipului MIME. Dacă tipul MIME indică o pagină Web simplă, atunci serverul
web îndeplineşte cererea şi trimite fişierul către browserul clinet nemodificată. Dar dacă tipul
MIME indică faptul că fişierul cerut necesită procesarea de către un web application server,
atunci web serverul trimite fişierul către web application server-ul corespunzător şi trimite
browserului rezultatul pe care îl primeşte de la web application server.
Cu alte cuvinte web application serverele sunt preprocesoare pentru pagini. Acestea
procesează pagina cerută înainte ca aceasta să fie trimisă înapoi la client.

Pagina 12 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

II. INTRODUCERE ÎN PHP

PHP, acronim care provine din "PHP: Hypertext Preprocessor", este un limbaj de
scripting utilizat pe scară largă, realizat şi distribuit în sistem Open Source, care este special
realizat pentru a dezvolta aplicaţii web, prin integrarea codului PHP în documente HTML.
Sintaxa sa provine din C, Java şi Perl şi este uşor de învăţat. Scopul principal al limbajului
este acela de a scrie rapid pagini web dinamice, dar cu PHP se pot realiza mult mai multe.
PHP este una dintre cele mai interesante tehnologii existente în prezent. Deoarece
îmbină caracteristici dintre cele mai complexe cu simplitatea în utilizare, PHP a devenit rapid
un instrument de frunte pentru dezvoltarea aplicaţiilor în Web. Totuşi, spre deosebire de alte
instrumente populare pentru dezvoltarea aplicaţiilor Web, cum este Perl, PHP este un limbaj
de programare comod pentru începători, chiar şi pentru cei care nu au mai desfăşurat
activităţi de programare în trecut.
Ca şi alte limbaje de scripting pentru Web, PHP vă permite să furnizaţi un conţinut
Web dinamic, adică un conţinut Web care se modifică automat de la o zi la alta sau chiar de
la un minut la altul. Conţinutul Web este un element important în susţinerea traficului unui sit
Web; de regulă, vizitatorii nu vor mai reveni la o pagină Web care conţine aceleaşi informaţii
ca şi cele prezentate la ultima vizită. Pe de altă parte, siturile Web frecvent actualizate pot
atrage cantităţi enorme de trafic.
Mai mult, spre deosebire de limbajele de scripting, precum JavaScript, PHP rulează
pe serverul Web, nu în browserul Web. În consecinţă, PHP poate obţine accesul la fişiere,
baze de date şi alte resurse inaccesibile programului JavaScript. Acestea constituie bogate
surse de conţinut dinamic, care atrag vizitatorii.

II.1. Noţiuni Fundamentale

II.1.1. Ce este PHP?

Spre deosebire de un script scris în alte limbaje cum ar fi Perl sau C – în loc de a scrie
un program cu o mulţime de comenzi pentru a produce un HTML, folosind PHP se poate

Pagina 13 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

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>
<head>
<title>Exemplu</title>
</head>
<body>
<?php
echo "Salut, sunt un script PHP!";
?>
</body>
</html>

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

II.1.2. Ce poate face PHP?

Cu PHP se poate face orice. PHP este în principal axat pe partea de scripting ce
rulează pe server, deci poate face orice face şi un program CGI, cum ar fi colectarea de date
de la formulare, generarea de conţinut dinamic sau trimitere şi primire de cookie-uri. Dar
PHP poate face mult mai multe.
Există trei domenii principale unde sunt folosite scripturile PHP.
Scripturi ce ruleaza pe server. Acesta este cel mai tradiţional şi cel mai important
pentru PHP. Este nevoie de trei lucrui pentru a face să meargă: interpretorul PHP (CGI sau
modul de server), un server web şi un browser web. E nevoie ca serverul de web să fie pornit,

Pagina 14 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

cu o conexiune PHP instalată. Se poate accesa rezultatul programelor PHP cu un browser prin
intermediul serverului de web.
Scripting in linie de comandă. Se poate face ca PHP să ruleze fără a fi nevoie de
server şi de browser, ci doar de interpretorul PHP. Această metodă este ideală pentru script-
urile ce se vor a fi executate de regulă folosind cron (task scheduler în Windows), sau sarcini
simple de procesare a textelor.
Scrierea de aplicaţii ce rulează de partea clientului în mod grafic (GUI). Probabil că
PHP nu este limbajul cel mai bun de a scrie aplicaţii cu ferestre pentru Windows sau alte
sisteme de operare, dar dacă este bine cunocut şi se doreşte folosirea unor facilităţi avansate
ale PHP-ului în aplicaţiile ce rulează de partea clientului, se poate totuşi folosi PHP-GTK
pentru a scrie astfel de programe. De asemenea, există posibilitatea de a scrie aplicaţii ce
rulează pe platforme diferite folosind această metodă. PHP-GTK este o extensie a PHP-ului,
nedisponibila în distribuţia principală de PHP.

PHP poate fi folosit pe aproape toate marile sisteme de operare, incluzând Linux,
multe variante de Unix (incluzând HP-UX, Solaris şi OpenBSD), Microsoft Windows, Mac
OS X, RISC OS, probabil şi altele. PHP are de asemenea suport pentru majoritatea serverelor
de web din prezent. Acestea includ serverele Apache, Microsoft Internet Information Server,
Personal Web Server, Netscape şi iPlanet, serverul Oreillz Website Pro, Caudium, Xitami,
OmniHTTPd, şi multe atele. Pentru majoritatea serverelor PHP are un modul, iar pentru
celelalte suportă standardul CGI, PHP putând să lucreze ca un procesor CGI.
Deci, cu PHP, există libertatea de a alege un sistem de operare şi un server de web.
Chiar mai mult, există posibilitatea de a alege programarea procedurală sau programarea
orientată obiect, sau chiar sa se combine acestea. Cu toate acestea, nu orice facilitate a
standardului POO este prezentă în versiunea curentă a PHP-ului, multe librării de cod şi
aplicaţii mari (incluzând şi librăria PEAR) sunt scrise folosind doar cod POO.
Cu PHP programatorul nu este limitat să scoată rezultat HTML. Posibilităţile PHP-
ului includ afişarea de imagine, fişiere PDF şi chiar filmuleţe Flash (folosind librăriile libswf
şi Ming) toate generate instant. Se poate de asemeanea ca rezultatul să fie orice fişier text,
cum ar fi XHTML sau orice alte fişiere XML. PHP poate genera autmoat aceste fişiere şi să
le salveze în sistemul de fişiere în loc să le afişeze, formând un cache de partea serverului
pentru conţinutul dinamic.
Una dintre cele mai puternice şi importante facilităţi în PHP este suportul său pentru o
gamă larga de baze de date. Scrierea une pagini de web ce interacţioneaza cu o bază de date

Pagina 15 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

este incredibil de simplă. PHP suportă şi ODBC, standardul Open Database Connection, deci
se poate conecta la orice altă bază de date ce suporta acest standard mondial.
PHP are deasemeanea suport pentru a conversa cu alte servicii folosind protocoale
cum ar fi LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (pe Windows) şi multe altele.
Se pot, de asemenea, deschide socket-uri de reţea şi se poate interacţiona între aproape toate
limbajele de programare Web. PHP are suport pentru instanţierea obiectelor Java şi utilizarea
lor într-un mod transparent ca obiecte PHP. Se pot de asemenea folosi extensii CORBA
pentru a accesa obiecte aflate la distanţă.
PHP are capabilităţi extrem de folositoare pentru procesarea textului, de la POSIX
Extins sau expresii regulare Perl, până la parsarea documentelor XML. Pentru parsarea şi
accesarea documentelor XML, suportă standardele SAX şi DOM.
Folosind PHP în domeniul comerţului electronic, sunt foarte folositoare pentru
programul tău de plaţi online funcţii de plată Cybercash, CyberMUT, VeriSign Payflow Pro
şi CCVS.
În cele din urmă, dar nu ultimul rând, PHP are şi alte extensii interesante, cum ar fi
funcţii ale motorului de căutare mnoGoSearch, funcţii pentru accesarea IRC-ului, multe
utilitare de compresie (gzip, bz2), conversie de calendar, traducere...

II.2. Elemente de bază ale sintaxei

II.2.1. Ieşirea din modul HTML

Când PHP interpretează un fişier trece prin textul acestuia până când întâlneşte unul
din tag-urile speciale care îi spun să pornească interpretarea textului ca fiind cod PHP. Mai
departe, parser-ul execută tot codul întâlnit, până la întâlnirea unui tag PHP de închidere, care
anunţă trecerea normală prin text, din nou. Acest mecanism permite înglobarea codului PHP
în interiorul codului HTML: tot ceea ce este în afara tag-urilor PHP este lăsat nemodificat, în
timp ce tot ceea ce este în interior este interpretat ca fiind cod.
Există patru categorii de tag-uri care pot fi folosite pentru a marca bolcurile de cod
PHP. Dintre acestea, doar două (<?php. . .?> şi <script language="php">. . .</script>) sunt
întotdeauna disponibile. Cu toate ca tag-urile în format scurt şi cele de tip ASP par a fi

Pagina 16 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

convenabile, ele nu sunt la fel de portabile ca cele în format lung. De asemenea, dacă se
doreşte includerea codului PHP în XML sau XHTML, este necesar să se folosească tag-urile
în forma <?php. . .?> pentru a corespunde standardului XML
Cele patru tipuri de tag-uri sunt:
<?php echo("if you want to serve XHTML or XML documents, do like this\n"); ?>
2. <? echo ("this is the simplest, an SGML processing instruction\n"); ?>
<?= expression ?> This is a shortcut for "<? echo expression ?>"
3. <script language="php">
echo ("some editors (like FrontPage) don't
like processing instructions");
</script>
4. <% echo ("You may optionally use ASP-style tags"); %>
<%= $variable; # This is a shortcut for "<% echo . . ." %>

Prima variantă, <?php. . .?>, este metoda preferată deoarece permite folosirea PHP-
ului în cod corform standardului XML, cum ar fi XHTML.
Cea de-a doua variantă nu este întotdeauna posibilă. Tag-urile prescurtate pot fi
folosite doar dacă au fost activate. Acest lucru poate fi făcut prin intermediul funcţiei
short_tags() (numai în PHP3), prin activarea opţiunii short_open_tag în fişierul de
configurare, sau prin compilarea scripturilor folosind opţiunea enable-short-tags. Chiar dacă
este implicit activată în fişierul php.ini, folosirea tag-urilor prescurtate nu este recomandată.
Cea de-a patra variantă poate fi folosită numai dacă tag-urile de tip ASP au fost
activate folosind setarea asp_tags din fişierul de configurare.

PHP permite folosirea unor structuri ca cea de mai jos:

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

Pagina 17 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

<?php
}
?>

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

II.2.2. Separarea instrucţiunilor

Instrucţiunile sunt separate la fel ca în C sau Perl – fiecare instrucţiune este terminată
cu un semn punct şi virgulă.
Tag-ul de închidere implică şi sfârşitul instrucţiunii, deci următoarele două exemple
sunt echivalente:

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

Pagina 18 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

echo "One Final Test"; # This is shell-style style comment


?>

Comentariul pe o sigură linie, de fapt realizează comentarea codului până la sfârşitul


liniei curente sau până la terminarea blocului curent PHP, oricare din aceste două cazuri
apare primul.

II.3. Tipuri de date

PHP suportă opt tipuri primitive de date.


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

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

II.4 Variabile

II.4.1 Noţiuni de bază

Pagina 19 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

În PHP variabilele sunt reprezentate folosind un semn dollar urmat de numele


variabilei. Numele variabilelor sunt case-sensitive.
În PHP3 variabilele sunt întotdeauna atribuite prin valoare. Cu alte cuvinte, atunci
cînd o expresie este atribuită unei variabile, întreaga valoare a expresiei originale este copiată
în variabila destinaţie. Aceasta înseamnă că, de exemplu, după atribuirea valorii unei
variabile alteia, schimbarea uneia dintre aceste variabile nu are nici un efect asupra celeilalte.
PHP4 oferă şi un alt mod de a atribui valori valiabilelor: prin referinţă. Aceasta
înseamnă că noua variabilă referă (devine un alias pentru, sau indică către) variabila
originală. Schimbări în variabila nouă o afectează şi pe cea iniţială, şi invers. Aceasta
înseamnă de asemenea că nu sunt realizate copii şi astfel atribuirea se realizează mai rapid.
Pentru a realiza o atribuire prin referinţă trebuie doar ataşat un ampersand(&) la
începutul variabilei care va fi atribuită (variabila sursă), ca în exemplul următor:

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

II.4.2 Variabile predefinite

PHP furnizează un număr larg de variabile predefinite. Multe din aceste variabile, nu
pot fi documetate complet deoarece sunt dependente de serverul pe care rulează, de versiunea
şi setarea acestuia precum şi de alţi factori.
Unele din aceste variabile nu vor fi folosite când PHP rulează în linie de comandă.

II.4.3. PHP Superglobals

Pagina 20 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

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

$_GET
Reprezintă variabilele oferite scritpt-ului direct prin HTTP GET. Analog vechiului şir
$HTTP_GET_VARS (care încă este valabil, dar depreciat).

$_POST
Reprezintă variabilele oferite scritpului direct prin HTTP POST. Analog vechiului şir
$HTTP_POST_VARS (care încă este valabil, dar depreciat).

$_COOKIE
Reprezintă variabilele oferite scritpului direct prin HTTP. Analog vechiului şir
$HTTP_COOKIE_VARS (care încă este valabil, dar depreciat).

$_FILES
Reprezintă variabilele oferite scritpului prin upload-ul de fişiere folosind modul POST
din HTTP. Analog vechiului şir $HTTP_POST_FILES (care încă este valabil, dar depreciat).

$_ENV
Reprezintă variabilele oferite scritpt-ului prin mediu. Analog vechiului şir
$HTTP_ENV_VARS (care încă este valabil, dar depreciat).

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

$_SESSION

Pagina 21 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Reprezintă variabilele registrate unei sesiuni a script-ului. Analog vechiului şir


$HTTP_SESSION_VARS (care încă este valabil, dar depreciat).
II.4.4. Folosirea variabilelor statice

O importantă caracteristică a scope-ului variabilei o reprezintă variabila statică. O


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

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

Această funcţie este destul de nefolositoare deoarece de fiecare dată este apelată să
seteze valorea 0 variabilelei $a şi să printeze "0".
Instrucţiunea $a++ care incrementează variabila nu serveşte nici unui scop deoarce,
de îndată ce funcţia iese, variabila dispare. Pentru folosirea unei funcţii de numărare care nu
va mai pierde număratoarea curentă, variabiala $a este declarată statică.

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

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

Pagina 22 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Variabilele statice oferă, de asemenea, un mod de a lucra cu funcţiile recursive. O


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

<?php
function Test()
{
static $count = 0;

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

II.4.5. Variabile din afara mediului PHP

Formulare HTML (GET şi POST)

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

Pagina 23 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

În funcţie de setările şi preferinţele particulare, sunt multe modalităţi de a accesa


datele din formulare HTML. Câteva exemple:

<?php
// Available since PHP 4.1.0

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

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

// Available since PHP 3. As of PHP 5.0.0, these long predefined


// variables can be disabled with the register_long_arrays directive.

print $HTTP_POST_VARS['username'];

// Available if the PHP directive register_globals = on. As of


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

print $username;
?>

Folosirea unui formular de tip GET este similară, cu deosebirea că se va folosi


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

II.4.6. Cookie-uri HTTP

Pagina 24 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

PHP oferă un suport transparent pentru Cookies. Cookie-urile reprezintă un mecanism


pentru stocarea datelor în browser şi astfel se pot identifica utilizetoriicare revin pe o anumită
pagină. Cookie-urile se pot seta folosind funcţia setcookie(). Cookie-urile fac parte din
header-ul HTTP, deci funcţia setcookie() trebuie apelată înainte de trimiterea oricărui
conţinut către browser. Informaţiile de tip Cookie sun apoi stocate în array-urile
corespunzătoare, cum ar fi $_COOKIE, $HTTP_COOKIE_VARS ca şi în $_REQUEST.
Dacă se doreşte atribuire unor valori multiple unei singure variabile Cookie, aceasta
poate fi tratată ca un array. De exemplu:

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

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


array.

Pagina 25 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

III. BAZE DE DATE ŞI SQL

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

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

O bază de date este o colecţie de date organizată astfel încât acestea să poată fi uşor
găsite şi actualizate. O bază de date conţine toate informaţiile necesare despre obiectele ce
intervin într-o mulţime de aplicaţii, relaţiile logice între aceste informaţii şi tehnicile de
prelucrare corespunzătoare. În bazele de date are loc o integrare a datelor, în sensul că mai
multe fişiere sunt privite în ansamblu, eliminându-se pe cât posibil informaţiile redundante.
De asemenea, se permite accesul simultan la aceleaşi date, situate în acelaşi loc, sau
distribuite spaţial, a mai multor persoane de pregătiri diferite, fiecare cu stilul personal de
lucru.
Sistemul de programe care permite construirea unei baze de date, introducerea
informaţiilor în bazele de date şi dezvoltarea de aplicaţii privind bazele de date se numeşte
Sistem de Gestiune a Bazelor de Date (SGBD). Un SGBD dă posibilitatea utilizatorului să
aibă acces la date folosind un limbaj de nivel înalt, apropiat de modul obişnuit de exprimare,
pentru a obţine informaţii, utilizatorul făcând abstracţtie de algoritmii aplicaţi pentru
selecţionarea datelor implicate şi a modului de memorare a lor. SGBD-ul este o interfaţă între
utilizatori şi sistemul de operare.
Sistemele de baze de date au în vedere mai multe tipuri de structuri de reprezentare a
informaţiilor la nivel logic şi de operare cu ele dintre acestea, modelul relaţional fiind cel mai
folosit.
Acest model a fost dezvoltat de un matematician de la IBM, E.F. Codd, prin anii
1960, iar bazele de date organizate be baza acestui model se numesc baze de date relaţionale.
Un model relaţional de baze de date cuprinde trei componente principale:
- Structura datelor - prin definirea unor domenii şi a relaţiilor n-are.
- Integritatea datelor - prin impunerea unor restricţii.
- Prelucrarea datelor - prin operaţii din algebra relaţională sau calculul relaţional.

Pagina 26 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Modelul relaţional se bazează pe noţiunea matematică de relaţie, aşa cum este definită
în teoria mulţimilor, şi anume ca o submulţime a produsului cartezian a unei liste finite de
mulţimi numite domenii. Elementele unei relaţii se numesc tupluri, iar numărul de domenii
din produsul cartezian se numeşte aritatea relaţiei.
De obicei relaţiile sunt reprezentate sub forma unor tabele în care fiecare rând
reprezintă un tuplu şi fiecare coloană reprezintă valorile tuplurilor dintr-un domeniu dat al
produsului cartezian. Coloanelor şi, respectiv, domeniilor corespunzătoare lor li se asociază
nume intitulate atribute.
Accesul la informaţii se face pe baza cheilor. O cheie este o coloană (sau un grup de
coloane) care identifică în mod unic un rând dintr-un tabel.

III.1.2. Normalizarea tabelelor

Pentru a deosebi anumite calităţi specifice ale unor relaţii, s-au făcut mai multe
clasificări, dintre acestea, cea mai frecvent utilizată fiind clasificarea în forme normale. Se
spune că o relaţie (un tabel) este într-o formă normală particulară dacă satisface o mulţime
dată de constrângeri. Transformarea unei relaţii într-o mulţime de relaţii de un anumit tip se
numeşte normalizare. Există cinci forme normale, primele trei au fost definite de Codd, iar a
patra şi a cincea au fost definite de Fagin.
Principalele scopuri urmărite în procesul de normalizare sunt: eliminarea unor
redundanţe, evitarea unor anomalii de reactualizare, realizarea unui proiect care să reprezinte
cât mai fidel modelul real (uşor de înţeles şi eventual de modificat), stabilirea unor
constrângeri de integritate simple şi altele.

III.1.3. Structured Query Language

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

Pagina 27 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

În ciuda simplităţii sale, SQL este un limbaj foarte puternic, care poate obţine accesul
la date stocate în mai multe tabele, poate filtra datele dorite şi poate sorta, rezuma şi afişa
rezultatele.
În general, nu se pot anticipa toate modalităţile în care utilizatorii pot dori să obţină
acces la date şi să le vizualizeze. Ca atare, nu se pot scrie programe de aplicaţie care să
satisfacă fiecare potenţială necesitate de informaţii. Este aproape sigur că vor apărea unele
cereri de date neprevăzute (sau ad-hoc).
Utilizând SQL, este posibil accesul la datele stocate într-o bază de date relaţională
fără a scrie un program de aplicaţie, permiţând frecvent evitarea întârzierilor şi a costurilor
implicate de programarea personalizată. Astfel, bazele de date relaţionale permit satisfacerea
tuturor cererilor ad-hoc de informaţii, care ar rămâne fără răspuns în alte situaţii.
În funcţie de întrebuinţarea sa, SQL poate fi împărţit în trei componente:
- DDL - Data Definition Language – folosit pentru a crea bazele de date.
- DML - Data Manipulation Language - folosit la actualizarea datelor.
- DQL - Data Query Language - folosit pentru extragerea informaţiilor din baze de
date.

III.2. Implementarea unei baze de date

III.2.1. Proiectarea unei baze de date

Un instrument frecvent utilizat de proiectare a bazelor de date constă din procedeul


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

III.2.2. Modelare E-R

Pagina 28 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Procesul de modelare E-R costă în patru faze principale:


Identificarea coloanelor.
Gruparea coloanelor în entităţi.
Identificarea cheilor primare.
Identificarea cheilor externe

III.2.3. Identificarea coloanelor

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

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

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

III.2.5. Identificarea cheilor primare

Fiecare entitate va deveni un tabel relaţional şi ca atare va trebui să aibă o cheie


primară. Se examinează fiecare entitate pentru a determina dacă una dintre coloanele sale

Pagina 29 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

asociate are o valoare unică pentru fiecare din apariţiile entităţii. Dacă o asemenea coloană
există, aceasta va fi identificată drept cheie primară a entităţii.
Se pot gaăsi unele entitaţi care nu conţin nici o coloană adecvată pentru rolul de cheie
primară. Într-o asemenea situaţie se poate căuta o serie de coloane care au o valoare
combinată unică. Dacă se descoperă o asemenea serie, se poate identifica drept cheie primară
compusă a entitaţii.
S-ar putea să nu se descopere nici o coloană sau serie de coloane care să identifice în
mod unic fiecare apariţie a unei entitaăţi. În acest caz, se creează o coloană nouă, care va
conţine o identificare artificială unică, şi se identifică noua coloană ca fiind cheia primară a
entitaţii.
Se poate folosi o identificare artificială unică chiar şi atunci când una sau mai multe
coloane pot servi drept cheie primară. Astfel, se evită problemele care apar când identificatori
presupuşi unici se dovedesc a nu fi unici.

III.2.6. Identificarea cheilor externe

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

III.2.7. Rafinarea modelelor E-R

Ultima operţie de fineţe aplicată unui model E-R, după normalizarea bazei de date,
constă în specificarea unui tip de date pentru fiecare coloană.
Majoritatea bazelor de date relaţionale acceptă urmatoarele tipuri de date generale:
caracter
întreg

Pagina 30 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

zecimal
dată şi oră
binar

Pagina 31 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

IV. MySQL

IV.1. Introducere în MySQL

MySQL este un sistem de getiune a bazelor de date. Mai mult chiar, MySQL este un
sistem de gestiune a bezelor de date relaţionale şi este distribuit în regim Open Source.
MySQL software is Open Source. Aceasta înseamnă că MySQL poate fi descărcat de
pe Internet, poate fi folosit fără a plăti ceva şi, dacă se doreşte, codul sursă poate fi studiat şi I
se pot aduce modificări necesare.
Serverul de baze de date MySQL este foarte rapid, fiabil şi uşor de utilizat. Iniţial a
fost dezvoltat pentru a manipula baze de date de dimensiuni mari mult mai rapid decât
soluţiile existente. Conectivitatea sa, viteza şi securitatea fac ca Serverul MySQL să fie
potrivit pentru accesarea bazelor de date prin Internet.
Why use the MySQL Database Server?
MySQL Database Software este un sistem client/server ce constă într-un server
MySQL multithreaded care suportă diferite programe client şi biblioteci, unelte
administrative şi o gamă largă de interfeţe pentru programarea aplicaţiilor (Application
Programming Interfaces – APIs)

IV.2. Caracteristicile de bază ale MySQL

IV.2.1. Componente interne şi portabilitate

Câteva dintre caracteristicile de bază ale MySQL sunt:


Scris în C şi C++
Testat cu o gamă largă de compilatoare diferite
Funcţionează pe diferite platforme
Dispune de API pentru C, C++, Eiffel, Java, Perl, PHP, Pyton, Ruby şi Tcl

Pagina 32 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Complet multi-threaded folosind thread-uri de kernel. Acest lucru înseamnă că poate


lucra cu uşuinţă pe mai multe procesoare dacă sunt disponibile
Oferă motoare tranzacţionale şi non-tranzacţionale de stocare a datelor
Un sistem de alocare a memoriei foarte rapid şi bazat pe thread-uri
Join-uri ale tabelelor foarte rapide
Foloseşte tabele temporare stocate în memorie
Funcţiile SQL sunt implementate folosind o bibliotecă de clase optimizată şi sunt
foarte rapide. De obicei, nu are loc alocare a memoriei după iniţializarea interogărilor.
Serverul este disponibil ca program separat ce poate fi folosit într-un mediu de reţea
de tip client/server. De asemenea, este disponibil şi ca bibliotecă ce poate fi inclusă în
aplicaţii de sine stătătoare

IV.2.2. Tipuri de coloane

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

IV.2.3. Comenzi şi funcţii

Suport complet pentru operatori şi funcţii în clauzele SELECT şi WHERE ale


interogărilor.
Suport pentru clauzele GROUP BY şi ORDER BY, şi pentru funcţii de grup
(COUNT(), COUNT(DISTINCT ...), AVG(), STD(), SUM(), MAX(), MIN(), şi
GROUP_CONCAT()).
Suport pentru LEFT OUTER JOIN and RIGHT OUTER JOIN.
Suport pentru alias-uri de tabele şi coloane.
DELETE, INSERT, REPLACE şi UPDATE returnează numărul de rânduri
modificate.

Pagina 33 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Comanda SHOW specifică pentru MzSQL poate fi folosită pentru a obţine informaţii
despre bazele de date, tabele şi indecşi.
Numele funcţiilor nu intră în conflict cu numele tabelelor sau ale coloanelor.
Într-o acceaşi interogare se pot folosi tabele din baze de date diferite

IV.2.4. Securitate

Un sistem de privilegii şi parole foarte flexibil şi sigur care permite verificarea pe


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

IV.2.5. Scalabilitate şi limite

Manipulează baze de date de dimensiuni mari. MzSQL este folosit cu baze de date
care conţin 50 de milioane de înregistrări.
Sunt permişi până la 32 de indecşi pentru un tabel. Fiecare index poate consta din una
până la 16 coloane sau părţi de coloane.

IV.2.6. Conectivitate

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


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

Pagina 34 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

IV.2.7. Localizare

Serverul poate să prezinte mesaje de eroare clienţilor în multe limbi.


Suport complet pentru diferit seturi de caractere.
Toate datele sunt salvate folosind un set de caractere specificat. Toate comparaţiile
pentru coloane de tip şir obişnuit de caractere sunt case-insensitive.
Sortarea este realizată în concordanţă cu setul de caractere ales.

IV.2.8. Clienţi şi unelte

Serverul MySQL are suport inclus pentru instrucţiuni SQL care verifică, optimizează
şi repară tabelele. Aceste instrucţiuni sunt disponibile în linia de comandă prin intermediul
clientului mysqlcheck.
Toate programele MySQL pot fi invocate cu opţiunea –help sau -? Pentru a obţine
suport online.

IV.3. Fundamente MySQL

IV.3.1. Conectarea şi deconectarea de la server

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

shell> mysql -h host -u user -p


Enter password: ********

Pagina 35 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

unde host şi user reprezintă hostname-ul unde rulează serverul MySQL şi respectiv
numele unui cont MySQL, iar ******** reprezintă parola care trebuie introdusă.
Dacă conectarea se realizează cu succes în continuare sunt afişate informaţii
introductive, urmate de prompt-ul mysql>

shell> mysql -h host -u user -p


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

Aceasta înseamnă că mysql este gata pentru a primi comenzile introduse.


Deconectarea de la serverul MySQL se poate realiza oricând prin introducerea
comenzii QUIT (sau \a) la prompt-ul mysql.

mysql> QUIT
bye

IV.3.2. Introducerea interogărilor

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

mysql> SELECT VERSION(), CURRENT_DATE;


+--------------+--------------+
| VERSION() | CURRENT_DATE |
+--------------+--------------+
| 3.22.20a-log | 1999-03-19 |
+--------------+--------------+

Pagina 36 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

1 row in set (0.01 sec)


mysql>

Această interogare ilustrează câteva lucruri despre mysql


În mod normal, o comandă constă într-o declaraţie SQL urmată de semnul puct şi
virgulă.
Cât se lansează o comandă, mysql o trimite serverului spre execuţie şi afişează
rezultatele, apoi afişează din nou prompt-ul mysql> pentru a indica că este gata să accepte
alte comenzi.
Mysql afişează rezultatul interogărilor într-o formă tabelară. Prima linie conţine
etichetele coloanelor, iar liniile următoare sunt rezultatele interogării.
Mysql afişează şi numărul de rânduri returnate şi cît timp a fost necesar pentru
execuţia interogării

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

mysql> SELECT VERSION(); SELECT NOW();


+--------------+
| VERSION() |
+--------------+
| 3.22.20a-log |
+--------------+

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

O comandă nu trebuie neapărat să fie introdusă pe o singură linie, de exemplu:


mysql> SELECT
-> USER()
-> ,

Pagina 37 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

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

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

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

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

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

mysql> SHOW DATABASES;


+----------+
| Database |
+----------+
| mysql |
| test |
| tmp |
+----------+

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

Pagina 38 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

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

mysql> USE test


Database changed

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

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

mysql> CREATE DATABASE menagerie;


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

mysql> USE menagerie


Database 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 menagerie


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

Pagina 39 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

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

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


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

Acum comanda SHOW TABLES va avea următorul rezultat:

mysql> SHOW TABLES;


+---------------------+
| Tables in menagerie |
+---------------------+
| pet |
+---------------------+

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

mysql> DESCRIBE pet;


+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| 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 | |
+---------+-------------+------+-----+---------+-------+

Pagina 40 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

V. APLICAŢIE

V.1. Descrierea site-ului

În cadrul acestei aplicaţii prin combinarea a PHP MySQL s-a dorit realizarea unui site
dinamic care dă posibilitatea vizitatorilor săi să-şi găseacă perechea potrivită. Site-ul
reprezintă implementarea Web a unei agenţii matrimoniale. Utilizatorii se pot înregistra,
pentru a-şi introduce mai multe date personale. Pot vizualiza informaţiile celorlaţi membrii şi
căuta anumite persoane în funcţie de ccriteriil selectate.
Aplicaţia implementează şi unele funcţionalităţi avansate, cum ar fi trimiterea
automată de e-mail către adresele specificate de utilizatori şi încarcarea de fişiere pe server.

V.1.1. Structura site-ului

Pentru o mai bună organizare a aplicaţiei fişierele au fost incluse, pe cât posibil, în
directoare cu denumiri semnificative. Astfel, directorul images conţine toate imaginile incluse
în paginile site-ului, în directorul photos sunt stocate fotografiile membrilor înregistraţi.
Directorul templates conţine fişierele .php folosite ca template pentru toate paginile din site,
iar directorul styles conţine fişierele .css (Cascading Style Sheet) folosite pentru realizarea
layout-ului site-ului. În directorul functions sunt conţinute fişiere .php care vor fi incluse în
alte fişiere şi în ele sunt definite mai multe funcţii utile.
Paginile principale ale aplicaţiei sunt următoarele: index.php, members.php,
register.php, search.php, contact.php şi about.php. Astfel, index.php reprezintă pagina home a
site-ului, paginile contact.php şi about.php conţin informaţii despre autorul aplicaţiei şi,
respectiv, modul de contactare a acestuia. Pagina register.php conţine un formular html pe
care utilizatorii trebuie să-l completeze pentru a se putea înregistra ca membrii ai site-ului.
Dacă formularul este completat corect şi înregistrarea este realizată cu succes iar
utilizatorului îi este prezentat un mesaj sugestiv şi este trimis un e-mail către adresa
specificată de acesta, respectiv, dacă înregistrarea eşuează, este afişat un mesaj de eroare
corespunzător. Pagina members.php conţine lista tuturor membrilor înregistraţi, cu câteva

Pagina 41 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

informaţii reprezentative pentru fiecare şi cu legături către paginile personale care conţin
informaţii detaliate ale acestora. Pagina search.php cuprinde un formular html care permite
căutarea în baza de date folosind mai multe criterii. Rezultatele căutării sunt afişate în pagina
search_results.php, având acelaşi layout ca şi pagina member_details.php, pagina cu
informaţii detaliate despre fiecare membru.

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

Pentru păstrarea aceluiaşi layout pentru toate paginile, ca şi pentru a-l putea modifica
sau înlocui cu uşurinţă, paginile au fost implementate pe baza unui fişier folosit ca template,
căruia i-a fost ataşat un fişier .css.
Fişierul template folosit pe care este structurat site-ul conţine un tabel format din trei
rânduri ce îndeplinesc rolurile de header, content şi footer. Partea de header constă într-un
nou tabel, care la rândul său conţine trei rânduri, folosite pentru titlu, bară de meniu şi bara de
stare. Titlul va fi setat pentru fiecare pagină care implementează acest template. Bara de
meniuri este realizată prin includerea fişierului menubar.php, iar bara de stare este
implementată în fişierul statusbar.php. Partea de content va fi, de asemenea, setată separat
pentru fiecare fişier al site-ului. Partea de footer implementată în fişierul footer.php conţine
informaţii de tip Copyright.
Codul complet al fişierului template.php este prezentat în continuare:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"


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

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

Pagina 42 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

<tr>
<td>
<table width="100%" align="center">
<tr>
<td align="center">title</td>
</tr>
<tr>
<td><?php include "menubar.php"; ?></td>
</tr>
<tr>
<td><?php include "statusbar.php"; ?></td>
</tr>
</table>
</td>
</tr>
<tr>
<td align="center">content</td>
</tr>
<tr>
<td>
<?php
include "footer.php";
?>
</td>
</tr>
</table>

</body>
</html>

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

Pagina 43 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

V.1.3. Crearea bazei de date MySQL

Pentru stocarea informaţiilor despre membrii aplicaţiei s-a folosit o bază de date
MySQL. Aceasta este formată din patru tabele, şi anume members, care conţine informaţiile
despre membrii, languages, care conţine o listă a limbilor pe care utilizatorii le pot selecta,
spokenlanguages, care reprezintă legăturile dintre fiecare membru şi limbile cunoscute de
acesta şi photos, care conţine informaţiile despre fotografiile mebrilor, maximum cinci
fotografii pentru fiecare membru.
Structura tabelului members, cel mai complex dintre tabele bazei de date folosite, este
descrisă în figura următoare, precum şi tabelele languages, spokenlanguages şi photos:

Pagina 44 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

V.2. Utilizarea bazelor de date MySQL

PHP include o bibliotecă de funcţii care furnizează o interfaţă cu sistemul MySQL de


gestiune a bazelor de date. Folosind aceste funcţii, un program PHP poate obţine accesul la
datele rezidente într-o bază de date MySQL şi le poate modifica.
Majoritatea interacţiunilor cu o bază de date se desfăşoară după un model secvenţial
simplu:
Se deshide o conexiune cu serverul MySQL.
Se specifică baza de date la care se va obţine accesul.
Se emit interogări SQL, se obţine accesul la rezultatele interogărilor şi se execută
operaţii non-SQL.
Se închide conexiunea cu serverul MySQL.

V.2.1. Conectarea la serverul MySQL

Pentru a se realiza conectarea la un server MySQL, se invocă funcţia


mysql_connect(), a cărei sintaxă este următoarea:
mysql_connect(nume_gazda, nume_utilizator, parola)
unde nume_gazda este numele gazdei pe care rulează serviciul MySQL,
nume_utilizator este identificatorul de utilizator MySQL care va fi folosit, iar parola este
parola MySQL asociată identificatorului de utilizator. Funcţia returnează false în caz de eşec,

Pagina 45 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

iar în caz contrar returnează o valoare, denumită identificator de legătură, care serveşte ca
instrument de manipulare pentru accesul la serverul MySQL.
Se poate omite numele gazdei, identificatorul de utilizator şi parola, sau toate cele trei
argumente. Dacă se procedează astfel, vor fi luate în considerare, în mod prestabilit,
următoarele valori:
-numele gazdei: localhost
-identificatorul de utilizator: identificatorul de utilizator al procesului server MySQL
-parolă: o parola vidă

În realizarea acestui site, conectarea la serverul MySQL a fost posibilă folosind


funcţia connectdb(), implementată în fişierul connection.php, inclus în directorul functions,
astfel :

<?php
function connectdb(){
$server=mysql_connect("localhost","root","");
//…..
}
?>

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($db_name, $connection);
unde baza_de_date este un şir care conţine numele bazei de date la care urmează a se
obţine acces. Funcţia returnează true dacă poate obţine accesul la baza de date, respectiv false
în caz contrar.

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

Pagina 46 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

$db=mysql_select_db("adylic");

V.2.3. Detectarea apariţiei erorilor

Biblioteca MySQL din PHP furnizează două funcţii de verificare a erorilor, şi anume
mysql_errno() şi mysql_error(). Fiecare funcţie returnează un rezultat care reflectă eroarea,
dacă există, asociată celei mai recente operaţii cu MySQL. Dacă programul execută o
secvenţă de operaţii MySQL, iar prima operaţie generează o eroare, informaţiile despre
erorile respective sunt pierdute în momentul iniţierii celei de a doua operaţii.
Nici una din cele două funcţii nu necesită argumente. Functia mysql_errno()
returnează un cod numeric de eroare, în timp ce funcţia mysql_error() returnează o descriere
textuală a erorii. Dacă nu s-a produs nici o eroare, codul numeric al erorii este zero şi
descrierea are ca valoare un şir vid.
Informaţiile de eroare sunt disponibile numai dacă este activă o conexiune cu serverul
MySQL, deci nu se poate folosi nici una dintre aceste funcţii pentru a raporta erorile asociate
funcţiei mysql_connect().
Incluzând şi mecanismul de detectare a erorilor, funcţia connectdb() arată astfel :

<?php
function connectdb(){
$server=mysql_connect("localhost","root","");
$db=mysql_select_db("adylic");
if(mysql_errno())
die("nu s a conectat");
}
?>

V.2.4. Eliminarea mesajelor de eroare

Pagina 47 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

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

V.2.5. Închiderea conexiunii cu serverul MySQL

Pentru a închide o conexiune cu serverul MySQL se invoca funcţia mysql_close().


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

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

Din punctul de vedere al limbajului PHP, există două categorii de interogări SQL:
Interogările SELECT, care returnează rânduri ale unui tabel.
Interogările UPDATE, INSERT şi DELETE, care nu returnează rânduri ale unui
tabel.

Ambele categorii de interogări sunt emise folosind funcţia mysql_query(), dar


verificarea şi prelucrarea celor două categorii de rezultate ale interogărilor sunt procese destul
de diferite.

V.2.7. Funcţia mysql_query()

Pagina 48 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

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


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

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

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

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

Pentru a preciza că MySQL va repartiza o valoare secvenţială unică în coloana care


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

V.2.10. Prelucrarea rezultatelor interogărilor SELECT

Pagina 49 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Spre deosebire de interogările UPDATE, INSERT şi DELETE, interogările SELECT


returnează rânduri de tabel ca rezultate. Rândurile unui tabel sunt incluse într-o structură de
date numită set de rezultate. Prelucrarea setului de rezultate returnat de o interogare SELECT
implică parcurgerea prin iteraţie a rândurilor setului de rezultate.
O modalitate de parcurgere iterativă a rândurilor unui set de rezultate constă în
obţinerea numărului de rânduri, urmată de deplasarea prin iteraţie, folosind numărul de
rânduri ca limită pentru o instrucţiune for. Pentru a obţine valoarea numărului de rânduri, se
invocă funcţia mysql_rows(), transferând ca argument valoarea returnată de funcţia
mysql_query().
Funcţia mysql_fetch_row() se poate folosi pentru a obţine următorul rând din
secvenţa setului de rezultate. Totuşi, funcţia mysql_fetch_row() returnează true dacă un set de
rezultate conţine rânduri neprelucrate, respectiv false în caz contrar. Ca atare, în general este
preferabil să se omită apelarea funcţiei mysql_num_rows() şi să sa se folosească în schimb o
instrucţiune while.
Valoarea returnată de funcţia mysql_fetch_row() reprezintă un tablou alcătuit din
toate coloanele rândului curent din tabel. Tabloul foloseşte indexuri întregi, unde valoarea
primului index este egală cu zero. Pentru a prelucra coloanele stocate în tablou, se foloseşte o
instrucţiune foreach, care elimină necesitatea existenţei unui index explicit al buclei.
Daca se doreşte obţinerea accesului la valoarea unei anumite coloane, se poate face
referire la elementul din tablou folosind un index. De exemplu, dacă rezultatul funcţiei
mysql_fetch_row() este stocat în variabila $rind, se poate obţine acces la prima coloană din
setul de rezultate folosind sintaxa $rind[0], la a două coloană folosind sintaxa $rind[1], etc.
Pentru a obţine rândurile tabelului se paote folosi mysql_fetch_array(), care
returnează un tablou asociativ. Valorile indecşilor din tablou le reprezintă numele coloanelor
din setul de rezultate. Ca şi funcţia mysql_fetch_row(), funcţia mysql_fetch_array()
returnează false dacă nu mai există rânduri în setul de rezultate.

V.1.11. Lucrul cu seturi de rezultate

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

Pagina 50 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

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

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

Pentru a obţine numărul coloanelor dintr-un set de rezultate se invocă funcţia


mysql_num_fields(), transferând ca argument valoarea returnată de funcţia mysql_query().

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

Funcţia mysql_field_name() returnează numele coloanei din setul de rezultate având


valoarea indexului dată ca argument al funcţiei. Indexul asociat cu prima coloană este 0,
indexul asociat celei de a doua coloane este 1, etc.

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

Funcţia mysql_field_len() returnează lungimea maximă a coloanei dintr-un set de


rezultate, având valoarea indexului dată ca argument al funcţiei. Indexul asociat primei
coloane este 0, indexul asociat celei de a doua coloane este 1 etc.

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

Pagina 51 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

Funcţia mysql_field_flags() returnează indicatorii SQL asociaţi colaonei din setul de


rezultate al cărei index este dat ca argument al funcţiei. Indexul asociat primei coloane este 0,
indexul asociat celei de a doua coloane este 1, etc. Funcţia mysql_field_flags() raportează
următorii indicatori :
AUTO_INCREMENT
BINARY
BLOB
ENUM
MULTIPLE_KEY
NOT_NULL
PRIMARY_KEY
TIMESTAMP
UNIQUE_KEY
UNSIGNED
ZEROFILL
Dacă la o coloană sunt asociaţi mai multi indicatori, fiecare indicator este separat de
vecinii săi prin intermediul unui singur spatiu.

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

Funcţia mysql_field_type() returnează tipul MySQL al unei coloane al carei index


este dat ca argument al funcţiei. Indexul asociat primei coloane este 0, indexul asociat celei
de a doua coloane este 1, etc.

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

Funcţia mysql_field_table() returnează tabelul MySQL, dacă există, asociat coloanei


din setul de rezultate al cărei index este dat de argumentul funcţiei. Indexul asociat primei

Pagina 52 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

coloane este 0, indexul asociat celei de a doua coloane este 1, etc. În cazul în care coloana
conţine o valoare calculată sau dacă respectiva coloană nu este asociata în alt mod cu un tabel
MySQL, funcţia returneaza un şir vid.

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

Funcţia mysql_fetch_field() returnează un obiect ale cărui proprietăţi conţin o


varietate de informaţii cu privire la coloana unui set de rezultate. Proprietăţiile sunt
următoarele:
blob – are valorea 1 în cazul în care coloana este de tip BLOB
max_length – lungimea maximă a coloanei;
multiple_key – are valoarea 1 în cazul în care coloana este o cheie non-unică
name – numele coloanei
not_null – are valoarea 1 în cazul în care coloana nu poate conţine valoarea NULL
numeric – are valoarea 1 în cazul în care coloana este numerică
primary_key – are valoarea 1 în cazul în care coloana este o cheie primară
table – numele tabelului MySQL căruia îi aparţine coloana
type – tipul MySQL al coloanei
unique_key – are valoarea 1 în cazul în care coloana este o cheie unică
unsigned – are valoarea 1 în cazul în care coloana este de tip UNSIGNED
zerofill – are valoarea 1 în cazul în care coloana este completată cu zerouri

Funcţia mysql_fetch_field() preia două argumente: valoarea returnată de funcţia


mysql_query() şi indexul coloanei din setul de rezultate care va fi descris. Ca de obicei,
indexul asociat primei coloane este 0, indexul asociat celei de a doua coloane este 1, etc.

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

Funcţiile mysql_fetch_row() şi mysql_fetch_array() returnează, în general rândurile


dintr-un set de rezultate în mod secvenţial. Totuşi, funcţia mysql_data_seek() permite

Pagina 53 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

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

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

V.3.1. Înregistrarea noilor membrii

Pentru înregistrarea unui nou membru în baza de date a aplicaţiei, utilizatorul trebuie
să completeze formularul din pagina register.php. Acesta sunt cuprinde toate câmpurile din
tabelul members al bazei de date, precum şi o listă cu toate înregistrările din tabelul
languages, pentru ca utilizatorul să poată selecta limbile cunoscute. Toate câmpurile sunt
obligatorii, unele au furnizate valori implicite, iar pentru cele care necesită îndeplinirea
anumitor condiţii pentru a putea fi valide a fost realizată o funcţie JavaScript. Aceasta
realizează validarea datelor introduse în formular înainte ca cererea să fie trimisă spre
procesare serverului.
Câmpurile de tip select din formular trebuie să aibă valori care sunt obţinute din
valorile posibile ale anumitor coloane de tip enum din baza de date, iar acestea sunt obţinute
prin apelarea funcţiei showenumvalues($col), definită în fişierul showenumvalues.php, inclus
în directorul functions, funcţie care este implementată astfel:

<?php
function showenumvalues($col){
$column=$col;
$query="SHOW COLUMNS FROM members LIKE '{$column}'";
$result=mysql_query($query);

Pagina 54 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

if(mysql_num_rows($result)>0){
$row=mysql_fetch_row($result);
$options=explode("','",preg_replace("/(enum|set)\('(.+?)'\)/","\\2",$row[1]));
}
foreach($options as $val){
echo '<option value="'.$val.'">'.$val.'</option>';
}
}
?>
Această funcţie este apelată în fişierul register.php pentru diferite valori ale
parametrului $col, de exemplu:

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

Dacă datele au fost completate corect, formularul este trimis spre procesare. De acest
lucru se ocupă fişierul register_action.php. Se încearcă inserarea elementelor din formular
folosind o interogare de tip insert şi prin apelul funcţiei mysql_query. Dacă inserarea eşuează
este afişat un mesaj de eroare şi utilizatorului îi este oferită posibilitatea de a se întoarce în
pagina cu formularul de înregistrare. Dacă înregistrarea are loc cu succes, în continuare se
introduc în tabelul languages limbile specificate de utilizator, este trimis un e-mail informativ
către adresa specificată de acesta şi i se oferă posibilitatea de a trece într-o nouă pagină în
care îşi poate upload-a până la maximum cinci fotografii personale. Tot acum este creat pe
server un director al cărui nume este format din stringul “member_” concatenat cu id-ul
noului membru introdus în baza de date, director ce va fi folosit pentru stocarea fotografiilor
membrului respectiv.
Pentru a nu permite execuţia interogărilor din pagina register_action.php în cazul în
care aceasta ar fi introdusă direct în bara de adresă a browser-ului, întreg codul este cuprins
într-o instrucţiune if în care se verifică dacă a fost apăsat butonul sumbit din formularul de
înregistrare astfel:

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

Pagina 55 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

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

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

$insert="INSERT INTO members(name, gender, email, password, birthdate,


precisedate, birthplace, height, weight, haircolor, eyescolor, smoker, maritalstatus, kids,
kidslivingwith, religion, 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."')";

Pagina 56 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

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


rezulatul acesteia:

$result=mysql_query($insert);
if(mysql_affected_rows()!=1){
$message="<br><center>Registration failed</center><br>".
"<center>Click the <i>back</i> button to try again! </center>";
}
else{
$newid = mysql_insert_id();
if(isset($_POST["languages"])){
$languages=$_POST["languages"];
for($i=0;$i<count($languages);$i++){
$insert2="INSERT INTO spokenlanguages VALUES(". $newid.",".
$languages[$i].")";
$result2=mysql_query($insert2);
}
}
chdir('photos');
$dir = 'member_'.$newid;
mkdir($dir);
$message="<center>Congratulations! You have been succesfully
registered!</center><br>".
'<center>You can upload up to <b>5</b> photos <a href="upload.php?id='.
$newid.'">here</a></center><br><br>';
mailto($email,$password);
}

Pentru realizarea trimiterii automate de e-mail a fost realizată funcţia mailto($to,


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

<?php

Pagina 57 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

function mailto($to,$pass){
$TO=$to;
$FROM = "bobeanul@yahoo.com";
$SUBJECT = "Welcome to my agency";
$HEADER = "MIME-Version: 1.0\r\n";
$HEADER = $HEADER . "Content-type: text/html; charset=iso-8859-1\r\n";
$HEADER = $HEADER . "From: " . $FROM . "\r\n";
$MESSAGE = 'Thank you for your registration at '.
'<a href="http://www.bobeanu.as.ro">my agency</a>.<br>'.
'You can login to your personal page using this e-mail address and the password you
specified:<br>'.
'Your password is: '.$pass;
mail($TO, $SUBJECT, $MESSAGE, $HEADER);
}
?>

V.3.2. Căutarea membrilor

Pentru căutarea în baza de date a fost creat pagina search.php care conţine un
formular în care utilizatorul poate specifica creiteriile de căutare. Aplicaţia permite căutarea
membrilor folosind orice combinaţie a următoarelor coloane din tabelul members: name,
gender, height, weight, haircolor, eyescolor, maritalstatus, smoker, country.
După introducerea informaţiilor dorite pentru căutare, formularul este trimis spre
procesare către pagina search_result.php. Aceasta include fişierul find.php, din directorul
functions, în care este definită funcţia find(). Aceasta primeşte ca parametrii toate variabilele
din formularul de căutare şi, ăn fucţie de valorile acestora, formează stringul care va fi folosit
ăn interogare, astfel:

<?php
function find($name, $gender, $height, $weight, $haircolor, $eyescolor,
$maritalstatus, $smoker, $country){

Pagina 58 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

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

if($name!="")
$query=$query." AND name LIKE '%".$name."%' ";
if($height!=0)
$query=$query." AND height=".$height;
if($weight!=0)
$query=$query." AND weight=".$weight;
if($haircolor!="")
$query=$query." AND haircolor='".$haircolor."'";
if($eyescolor!="")
$query=$query." AND eyescolor='".$eyescolor."'";
if($maritalstatus!="")
$query=$query." AND maritalstatus='". $maritalstatus."'";
if($smoker!="")
$query=$query." AND smoker='".$smoker."'";
if($country!="")
$query=$query." AND country='".$country."'";

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

return $query;
}
?>

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

<?php
$findresults=find($_POST["name"], $_POST["gender"], $_POST["height"],
$_POST["weight"], $_POST["haircolor"], $_POST["eyescolor"], $_POST["maritalstatus"],
$_POST["smoker"], $_POST["country"]);

Pagina 59 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

$result=mysql_query($findresults);
echo "<table><tr><td>Name</td> <td>Gender</td> <td>Height</td>
<td>Weight</td> <td>Haircolor</td>".
"<td>Eyescolor</td> <td>Marital Status</td> <td>Smoker</td> <td>Country</td>";
while($row=mysql_fetch_array($result)){
?>
<tr>
<td><?php echo $row["name"]; ?></td>
<td><?php echo $row["gender"]; ?></td>
<td><?php echo $row["height"]; ?></td>
<td><?php echo $row["weight"]; ?></td>
<td><?php echo $row["haircolor"]; ?></td>
<td><?php echo $row["eyescolor"]; ?></td>
<td><?php echo $row["maritalstatus"]; ?></td>
<td><?php echo $row["smoker"]; ?></td>
<td><?php echo $row["country"]; ?></td>
</tr>
<?php }?>
</table>

V.3.3. Afişarea mebrilor

Pentru afişarea tuturor membrilor înregistraţi în baza de date există două legături
specificate în fişierul menubar.php, respectiv pentru Men şi Women. Ambele legături indică,
însă, către aceeaşi pagină, şi anume members.php, dar care primeşte diferite valori pentru
atributul detip URL gender. Astfel, pentru Men legătura se face către pagina members.php?
gender=male, şi respectiv, pentru Women, legătura este către members.php?gender=female.
În pagina members.php, construită pe baza templeate-ului, informaţiile sunt
prezentate sub forma unui tabel care conţine pe fiecare linie câteva infoormaţii semnificative
pentru fiecare membru şi legătura către pagina detaliată a acestuia. Înainte de afişarea
informaţiilor are loc o verificare a valorii parametrului gender din URL şi se formează astfel
interogarea corespunzătoare:

Pagina 60 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

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

Pagina 61 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

?>
</table>

V.3.4. Upload-ul fişierelor

După ce s-a înregistrat, unui membru i se dă posibilitatea de a încărca pe server


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

<?php
$id=$_GET["id"];
if(isset($_POST["submit"])){
if(!empty($_FILES["photos"])){
//$status="not ok";
chdir('photos');
chdir("member_".$id);
$uploaddir="C:\Inetpub\wwwroot\licady\photos\member_".$id;
for($i=0;$i<count($_FILES["photos"]);$i++){
if (move_uploaded_file($_FILES["photos"]["tmp_name"][$i], $uploaddir . '/' .
$_FILES["photos"]["name"][$i])) {
$status="ok";
$query_del = "DELETE FROM photos WHERE memberid = ".$id." AND photonr =
".($i+1);
$result_del = mysql_query($query_del);

Pagina 62 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

$query="INSERT INTO photos VALUES(".$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ă adresa de e-mail şi parola pe care a ales-o
în momentul creării contului. Acest formular este trimis spre prelucrare tot către pagina
login.php. La începutul fişierului are loc o verificare dacă a fost apăsat butonul de login şi în
caz afirmativ se preiau informaţiile introduse în formular şi se verifică dacă acestea
corespund uneia şi numai uneia dintre înregistrările din tabelul members. Dacă este găsită o
asemenea înregistrare, sunt setate variabilele username şi userid din scopul $_SESSION şi
fişierul statusbar.php îşi modifică conţinutul pentru a afişa faptul că utilizatorul a fost
recunoscut şi logat în sistem:

<?php
if(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);

Pagina 63 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

$_SESSION['username']=$row['name'];
$_SESSION['userid']=$row['id'];
}
else{
$error=1;
}
}
?>

În caz contrar, este setată o variabilă php numită $error şi este afişat un mesaj de
eroare, iar utilizatorul poate încerca din nou.
Fişierul statusbar.php este cel care realizează afişarea, sub bara de meniu a
informaţiilor legate de starea utilizatorului. După ce utilizatorul este recunoscut îi este afişat
un link prin care poate accesa pagina logout.php, prin care se poate deconecta, iar dacă nici
un utilizator nu este conectat, este afişată o legătură către pagina login.php.

<table width="800">
<tr>
<td align="left">
<?php
if(isset($_SESSION['username']) && isset($_SESSION['userid']))
echo "Welcome, ".$_SESSION['username']."!";
else echo "Welcome, Visitor!";
?></td>
<td align="right">
<?php
if(isset($_SESSION['username']) && isset($_SESSION['userid']))
echo '<a href="logout.php">Logout</a>';
else echo '<a href="login.php">Login</a>';
?></td>
</tr>
</table>

Pagina 64 din 65
Vizitati www.tocilar.ro ! Arhiva online cu diplome, cursuri si referate postate de utilizatori.

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

session_start();
if( !isset($_SESSION['username'])|| isset($_SESSION['userid']) ){
header("Location: login.php");
}

Pagina logout.php realizează distrugerea variabilelor din scope-ul $_SESSION, şi


redirectarea către pagina de start a site-ului, index.php, astfel:

<?php
session_start();
if( isset($_SESSION['username']) && isset($_SESSION['userid']) ){
unset($_SESSION['username']);
unset($_SESSION['userid']);
header("Location: index.php");
}
?>

Pagina 65 din 65

S-ar putea să vă placă și