Șef lucr. dr. ing. Ioan Emeric K öles [611879]
UNIVERSITATEA „ AUREL VLAICU ” ARAD
FACULTATEA DE INGINERIE
SECȚIA:
AUTOMATICĂ ȘI INFORMATICĂ INDUSTRIALĂ
PROIECT DE DIPLOMĂ
SITEBUILDER
Coordonator științific:
Șef lucr. dr. ing. Ioan Emeric K öles
Absolvent:
Kálmán Zsolt
2009
Universitatea “Aurel Vlaicu” Arad 2 CUPRINS
Capitolul 1. Introducere …………………………………………………………………………………………….. 4
1.1 Comerțul electronic. Aspecte generale. Contextul actual …………………………………. 4
1.2 Tema și obiectivele lucrării ………………………………………………………………………….. 7
1.3 Structura lucrării ………………………………………………………………………………………… 9
Capitolul 2. Fundame ntare teoretică ………………………………………………………………………….. 11
2.1 Programarea orientată spre obiecte……………………………………………………………….. 11
2.1.1 Încapsularea ………………………………………………………………………………… 11
2.1.2 Polimorfismul ……………………………………………………………………………… 12
2.1.3 M oștenirea ……………………………………………………………… 13
2.2 Limba jul PHP. Aspecte generale…………………………………………………. 13
2.2.1 Sintaxa limbajului……………………………………………………… 16
2.2.2 Variabile și constante în PHP …..……………………………………… 17
2.2.3 Tipuri de date în PHP…………………………………………………… 19
2.2.4 Structuri de decizie……………………………………………………… 21
2.2.4.1 Instrucțiunea IF………………………………………………. 21
2.2.4.2 Instrucțiunea SWITCH………………………………………. 22
2.2.4.3 Cicluri FOR…………………………………………………… 23
2.2.4.4 Cicluri WHILE……………………………………………….. 24
2.2.4.5 Cicluri DO..WHILE………………………………………….. 25
2.2.4.6 Cicluri FOREACH …………………………………………… 25
2.3 MySQL…………………………………………………………………………….. 26
2.3.1 Structura bazelor de date………………………………………………… 27
2.3.2 Tabele de acordare a privilegiilor……………………………………….. 27
2.3.3 Tipuri de date și coloane utilizate în MySQL…………………………… 28
2.3.3.1 Tipuri de date…………………………………………………. 28
2.3.3.2 Tipuri de coloane……………………………………………… 29
2.3.4 Operații frecvente în MySQL…………………………………………… 32
Universitatea “Aurel Vlaicu” Arad 3 2.4 Smarty PHP………………………………………………………………………… 34
2.4.1 Sintaxa limbajului ..…………………………………………………….. 35
2.4.2 Variabilele Smarty ……………………………………………………… 35
2.4.2.1 Variabile atribuite din limbajul PHP ………………………… 35
2.4.2.2 Variabile încărcate din fișiere config ……………………….. 38
2.4.2.3 Variabila rezervată {$smarty}. Variabile de request ……….. 40
2.4.3 Modificatori de variabile ……………………………………………… 41
2.4.4 Func ții implicite ………………………………………………………. 44
2.4.4.1 {capture} …………………………………………………… 44
2.4.4.2 {config_load} ……………………………………………… 44
2.4.4.3 {foreach}, {foreachelse} …………………………………… 44
2.4.4.4 {if}, {elseif}, {else} ……………………………………….. 45
2.4.4.5 {include} …………………………………………………… 45
2.4.4.6 {include_php} …………………………………………….. . 46
2.4.4.7 {literal} ……………………………………………………. 46
2.4.4.8 {php} ……………………………………………………… 46
2.4.4.9 {section}, {se ctionelse} …………………………………… 46
2.4.4.10 {strip} …………………………………………………… 48
2.4.5 Funcții customizabile ……………………………………………….. 48
2.4.5.1 {assign} ………………………………………………….. 48
2.4.5.2 {html_options} …………………………………………… 49
2.4.5.3 {html_radios} ……………………………………………. 50
2.4.5.4 {math} …………………………………………………… 51
2.4.5.5 {popup}, {popup_init} …………………………………… 52
2.4.6 Constante Smarty …………………………………………………… 52
2.4.7 Variabile de clase …………………………………………………… 53
2.4.8 Metode de clase …………………………………………………….. 54
2.4.8.1 assign() …………………………………………………… 54
2.4.8.2 display( ) ………………………………………………… … 55
Universitatea “Aurel Vlaicu” Arad 4 2.4.8.3 clear_all_assign() …………………………………………. 56
2.5 HTML ……………………………………………………………… ………. …. 56
2.5.1 Elemente de marcare ……………………………………… ……… … 57
2.5.2 XHTML …………………………………………………… ………… 58
2.6 CSS ………………………………………………………………… ……… ….. 59
2.6.1 Stiluri interne ……………………………………………………..… .. 59
2.6.2 Stiluri externe ……………………………………………………………. 59
Capitolul 3 . Documentația tehnică a aplicației …………………………………………………………… 61
3.1 Arhitectura a plicației ……………………………………………………… …….. 61
3.2 Structura funcțională a aplicației Sitebuilder ……………………………………. 63
3.2.1 Interfața de administrare (extranet) …………………………………… 64
3.2.2 Interfața de client ……………………………………………………… 65
3.3 Structura funcțională a aplic ației Fshop …………………………………………. 68
3.3.1 Interfața de administrare ……………………………………………… 70
3.3.2 Interfața de client ……………………………………………………… 76
3.4 Arhitectura bazelor de date ………………………………………………………. 78
Capitolul 4 . Utilizarea aplicației ………………………………………………………………………………… 88
4.1 Aplicația Sitebuilder ………………………………………………………………. 88
4.1.1 Interfața de administrare ………………………………………………. 88
4.1.2 Interfața de client ……………………………………………………… 90
4.1.3 Funcții se mnificative ………………………………………………….. 95
4.2 Aplicația Fshop …………………………………………………………………… 109
Capitolul 5 . Realizarea, punerea în funcțiune și rezultatele experimentale ………………. 112
5.1 Realizarea aplicației ………………………………………………………………. 112
5.2 Rezult ate experimentale ………………………………………………………….. 113
Capitolul 6 . Concluzii ……………………………………………………… ………………. 114
6.1 Obiective realizate ………………………………………………………………. 114
6.2 Direcții de dezvoltare ….……………………………………………………….. 114
Bibliografie ………….………………………… …………………………… ………………. 115
Introducere
Universitatea “Aurel Vlaicu” Arad 4
Capitolul 1. Introducere
1.1 Comerțul electronic. Aspecte generale. Contextul actual
În cadrul economiei globale, eCommerce- ul e pe cale de a dev eni o parte din ce în ce mai
importantă în strategia de afaceri . Deasemenea, poate fi considerat un catalizator puternic pentru
dezvoltarea economică. Integrarea tehnologiei informaționale și de comunicare în afaceri
(information and communications technology ICT) a revoluționat relațiile dintre organizații și
relațiile dintre organizații și oameni . Mai concret, fol osirea ICT în afaceri a dus la sporirea
productivității și a făcut posibilă , pe lângă reducerea costurilor, customizarea în masă.
Customizarea în masă presupune producția în masă a produselor cu specificații individuale
diferite, prin folosirea unor componente care pot fi asamblate într -un număr de configurații
diferite.
Cu ajutorul programatorilor în domeniul Internetului și al tehnologiilor de rețele,
distincțiile dintre magazinele tradiționale și cele bazate exclusiv pe eCommerce – cum ar fi
capitalul, p rintre altele – sunt din ce în ce mai mici. Cu efectul lui de uniformizare, eCommerce –
ul împreună cu o strategie și o abordare politică potrivită permite companiilor de scară mică și
medie să concureze cu companii cu capital mult mai mare.
Termenul de comerț electronic (sau eCommerce) se referă la un spectru larg de activități
de afaceri online cu produse și servicii.1 Comerțul electronic poate fi văz ut și ca și „orice demers
de vânzare sau cumpărare prin care părțile interacționează pe cale electronică și nu prin
schimburi fizice sau contact direct fizic”2
ECommerce- ul este deseori asociat cu vânzarea și cumpărarea cu ajutorul Internetului,
sau demersul oricărei tranzacții care implică transferul dreptului de proprietate sau a dreptului de folosire a unor produse sau servicii printr -o rețea de calculatoare..
3 Deși răspândită, această
abordare nu cuprinde ultimele dezvoltări în domeniul Ecommerce -ului. O definiție mai completă
ar fi: Ecommerce este folosirea comunicării electronice și a tehnologiei de procesa re a informației
Introducere
Universitatea “Aurel Vlaicu” Arad 5 digitale în tranzacțiile de afaceri pentru a crea, a transforma și a redefini relațiile dintre
organizații și dintre organizații și oameni .
Ce este Internet Economy? Internet Economy este un concept mai cuprinzător decât
Ecommerce- ul și Ebusiness -ul. De fapt, le include pe acestea. 4
Internet Economy este alcătuit din trei segmente majore: infrastructura fizică (ICT),
infrastructura de afaceri și comerțul.
CREC (Center of Research and Electronic Commerce) din University of Texas a
dezvoltat o schemă conceptuală pentru ilustrarea modului în care funcționează Internet Economy .
Schema este bazată pe patru segmente economice – cele trei menționate mai sus și al patrulea
segment, numit segment intermediar.
Segmente
majore ale
Internet
Economy Segmentul I.
Infrastructura
Internetului: Segmentul II.
Infrastructura
aplicațiilor: Segmentul III.
Intermediari: Segmentul IV.
Comerțul:
Companii care
furnizează
componentele
hardware și
software și
echipamentele de
rețea pentru
Internet și World
Wide Web . Companii care
produc softurile
care facilitează
tranzacțiile online;
companii care
furnizează servicii
de dezvoltare și de
consultanță. Companii care
realizează legătura
între vânzători și
cumpărători.
Aceste companii
furnizează spațiul
(virtual) în care se
pot desfășura
tranzacțiile online. Companii care
vând produse sau
servicii direct
consumatorilor
sau altor
companii.
Tipuri de
companii Companii de
rețelistică,
Fabricanți de PC
și servere,
Furnizori de
backbone -uri de
rețele,
Furnizori de
servicii de Internet
(ISP-uri),
Vendori de
securitate online, Aplicații de
comerț on- line,
Software de
dezvoltare web,
Internet
Consultant,
Training online,
Motoare de
căutare,
Baze de date,
Aplicații Market Makeri in
industria verticală,
Agențiile de
turism online,
Brokerage online,
Companii de
publicitate online. E-Taileri,
Entertainment
online,
Furnizori de
servicii
profesionale,
Bilete online,
Companii cu
înregistrare
gratuită sau cu
plată.
Introducere
Universitatea “Aurel Vlaicu” Arad 6 Fabricanți de fibre
optice multimedia.
Exemple CISCO
AOL
AT&T
Qwest Adobe
Microsoft
IBM
Oracle e-STEEL
Travelocity
e-Trade
Yahoo!
ZDNet Amazon.com
Dell
Bazat pe lucrarea “Measuring the Internet Economy”, Center of Research in Electronic Commerce, University of Texas
Există cinci tipuri majore de comerț electronic:
1. Business -to-business (B2B)
2. Business -to-consumer (B2C)
3. Business -to-government (B2G)
4. Consumer -to-consumer (C2C)
5. Mobile Commerce.
Lucrarea de față se axează preponderent pe B2B eCommerce care se definește ca fiind un
tip de eCommerce care se realizează între companii. Acest tip de eCommerce se ocupă cu
relațiile dintre companii. La ora actual ă, aproximativ 80% din eCommerce este de tip B2B, și
experții prezic că acest procent este încă în creștere, și continuă să se dezvolte mai repede decât
segmentul B2C.
Acest tip de eCommerce reduce timpul necesar pentru realizarea unei tranzacții ,
inventarele și prețurile . Permite în același timp partenerilor de afaceri să transmită informații
relevante, exacte și în timp real. Rezultatul final fiind un lanț de aprovizionare îmbunătă țit între
partenerii de afaceri. Următorul paragraf prezintă o descriere scurtă a acestor avantaje.
B2B micșorează costurile de producție prin eliminarea unor etape costisitoare și
îndelungate. Prin conecțiunea directă cu lanțul de aprovizionare, și acurat ețea informațiilor crește.
Creșterea acurateței se datorează și num ărului scăzut de pași pentru obținerea informațiilor,
întregul proces fiind în mare măsură automatizat. Și timpul necesar pentru realizarea unei
Introducere
Universitatea “Aurel Vlaicu” Arad 7 tranzacții se micșorează, deoarece flux ul de informații dintre partenerii de afaceri este mai scurt și
mai simplu. Cu alte cuvinte informațiile cu privire la cerințele clientului sunt transferate mai
repede și produsele ajung mai repede la client.
1.2 Tema și o biectivele lucrării
În condițiile ac tuale de recesiune economică, tendința utili zării comerțului electronic fiind
în creștere continuă , obiectivul lucrării vine cu o soluție oportună în vederea dezvoltării
vânzărilor pe cale electronică.
Se dorește dezvoltarea unei aplicații eCommerce care să facă posibilă abordarea mai
ușoară a comerțului electronic de către companiile de scară mică și mijlocie din România.
Aplicația, cu ajutorul sistemului de vânzare eCommerce, pune la dispoziție utilizatorilor
pachete de magazine virtuale. Aceste pachete au la bază o aplicație „schelet” care, în funcție de
pachetul ales, poate avea mai multe sau mai puține funcționalități.
În varianta finală a Sitebuilder -ului vom avea o aplicație care va rula pe un server Web și
va face posibilă închiri erea de magazine v irtuale într -un timp foarte scurt, parcurgând doar 4 pași
simpli:
1. Primul pas constă în alegerea pachetului dorit. Aici utilizatorul are posibilitatea de -a
vedea diferențele dintre cele două pachete existente.
2. După alegerea pachetului utilizatorul poate ve dea cum va arăta site- ul. Aici el are
posibilitatea de -a modifica aspectul vizual al magazinului, alegând între șabloanele
existente în pachetul ales.
3. La pasul 3 apare fereastra de înregistrare , unde utilizatorul își introduce datele și alege
perioada de închiriere.
4. La apăsarea butonului de trimitere a datelor , se creează subdomeniul cu denumirea
aleasă de utilizator . În același timp se trimite la adresa specificată la înscriere un e –
Introducere
Universitatea “Aurel Vlaicu” Arad 8 mail cu adresa de URL unde utilizatorul poate accesa magazinul ales și d atele de
acces la extranet.
Site-ul va fi administrat de un administrator pe care în cursul lucrării îl vom numi
administrator SB (Sitebuilder) . Acesta va avea acces la următoarele acțiuni:
• Setarea abonamentelor: prețul și durata abonamentelor, pe lângă ca re poate adăuga
abonamente noi;
• Acces la lista utilizatorilor înregistrați (care au magazine virtuale de Sitebuilder);
• Adăugarea, modificarea sau ștergerea utilizatorilor;
• Acces la lista de template -uri (active și inactive);
• Adăugarea sau ștergerea templat e-urilor;
• Acces la lista utilizatorilor abonați la newsletter;
• Formularea și trimiterea newsletter -elor.
În această aplicație avem două tipuri de utilizatori.
Proprietarul magazinului este utilizatorul care beneficiază de serviciile oferite de
Sitebuilder și, în același timp, administrează magazinul virtual. El va avea acces la următoarele
secțiuni din site -ul Sitebuilder:
• Vizualizarea și alegerea pachetelor
• Înscriere la newsletter
După cumpărarea aplicației Fshop, ca și administrator Fshop e l va avea acces la
următoarele secțiuni din extranet ul magazinului său virtual :
• Panou administrare
• Setări site
• Catalog produse
Introducere
Universitatea “Aurel Vlaicu” Arad 9 • Conținut site
• Newsletter
• Comenzi
• Rapoarte
• Conținut static
Cumpărătorul produselor oferite prin magazinul virtual este utilizatorul de PC care
vizitează site -ul. El va avea acces la următoarele acțiuni de pe site:
• Căutare produse
• Înregistrare
• Autentificare
• Newsletter
• Vizualizarea produselor (detalii, alarmă preț, recomandare produse, solicitare
informații suplimentare, comparare produse , comentare produse )
• Cumpărare produse
Aplicația va fi împărțită în două părți: aplicația Sitebuilder (aplicația prin care utilizatorul
poate cumpăra magazinul virtual) și aplicația Fshop (aplicația din spatele magazinului virtual
cumpărat de utilizator ).
1.3 Structura l ucrării
Lucrarea de față este organizată în șase capitole, fiecare conținând mai multe subcapitole
reprezentând detalierea subiectului respectiv.
Primul capitol, “Introducerea” surprinde contextul actual în domeniul comerțului
electronic, punctând avantajele acestui tip de comerț. De asemenea, sunt prezentate obiectivele
Introducere
Universitatea “Aurel Vlaicu” Arad 10 lucrării, cel mai important fiind u șurarea procesului de configurare a magazinului virtual printr -o
alternativă rapidă și convenabilă. Tot în acest capitol se detaliază specificațiile de pr oiectare, at ât
din punct de vedere funcțional , cât și din punct de vedere al interfeței cu utilizatorul. În finalul
capitolului este prezentată structura acestei lucrări.
Capitolul 2 tratează aspecte teoretice, folosite la implementarea aplicației. Sunt s urprinse
elemente de PHP , MySql, Smarty , (X)HTML și CSS precum și detalii pentru fiecare din acestea.
În capitolul 3 sunt tratate asp ecte legate de arhitectura programului și modul de
funcționare pentru fiecare utilizator .
În capitolul 4 este prezentat mod ul de utilizare al aplicației pentru fiecare tip de utilizator
și sunt descrise acțiunile pe care le poate efectua fiecare dintre aceș tia.
Capitolul 5 tratează aspecte legate de realizare aplicației, probleme întâmpinate în
decursul implementării și modul de testare și rezultatele obținute la testele practice.
Ultimul capitol surprinde obiectivele realizate precum și direcții de dezvoltare ale
aplicației ce constituie subiectul lucrării de față.
1 Anita Rosen, The E -commerce Question and Answer Book ( USA: American Management Association,
2000), 5
2 MK, Euro Info Correspondence Centre (Belgrade, Serbia), “E -commerce- Factor of Economic Growth;”
3Thomas L. Mesenbourg, Measuring Electronic Business: Definitions, Underlying Concepts and
Measurement Plans.
4Definiție adaptată după Emmanuel Lallana, Rudy Quimbo, Zorayda Ruth Andam, ePrimer: An
Introduction to eCommerce (Philippines: DAI -AGILE, 2000), 2.
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 11
Capitolul 2. Fundamentare teoretică
Aplicația este realizată folosind limbajul de programare PHP, și este accesibilă în mod
Web. În spatele aplicaței stă o bază de date MySQL în care sunt stocate informațiile care apoi
sunt prelucrate și afișate prin int ermediul limbajului PHP și XHTML.
2.1 Programarea orientată spre obiecte
Programarea orientată spre obiecte (POO) nu este absolut necesară pentru a face să
funcționeze paginile web create în PHP. Totuși, pentru dezvoltarea unor aplicații web substanțiale, programarea orientată spre obiecte oferă câteva avantaje importante.
Programarea orientată spre obiecte a fost creată pentru rezolvarea problemelor apărute în
cazul programelor de dimensiuni mari. Funcțiile permit împărțirea codului în secțiuni mai mici,
ceea ce ajută foarte mult. Programarea orientată spre obiecte face următorul pas în această
direcție, permițând împachetarea funcțiilor și datelor în obiecte. Astfel codul poate fi fragmentat și mai mult, deoarece un obiect poate conține nu doar un grup de func ții, ci și datele de care au
nevoie acele funcții.
Pentru a implementa principiile programării orientate pe obiecte, toate limbajele POO,
inclusiv PHP, au trei caracteristici comune: încapsularea, polimorfismul și moștenirea.
2.1.1 Încapsularea
Încapsularea este un mecanism de programare care combină codul și datele pe care
acestea le manipulează, menținând integritatea acestora față de interferența cu lumea exterioară și utilizarea necorespunzătoare. Într -un limbaj orientat pe obiecte, codul și datele pot fi leg ate
împreună în așa fel încât se creeze o cutie neagră. Datele și codul se găsesc în interiorul cutiei.
Atunci când codul și datele sunt combinate în această manieră, se creează un obiect. Cu alte
cuvinte, un obiect este un dispozitiv care implementează încapsularea.
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 12
În cadrul unui obiect, datele, codul, sau amândouă pot fi private sau publice. Codul sau
datele private sunt cunoscute și totodată accesibile numai dintr -o altă parte a aceluiași obiect. Prin
urmare, codul sau datele private nu vor fi accesibi le dintr -o parte a programului care există în
afara acelui obiect. Atunci când codul sau datele sunt publice, celelalte părții ale programului le
pot utiliza, chiar dacă ele sunt definite în interiorul unui obiect. De regulă, părțile publice ale unui
obiec t sunt utilizate pentru a furniza o interfață controlată cu elementele private ale obiectului.
Unitatea fundamentală de încapsulare în PHP o reprezintă clasa. O clasă definește forma
unui obiect. Clasa specifică atât datele, cât și codul care operează asu pra acestor date. Specificația
unei clase este utilizată de PHP pentru a construi obiecte. Obiectele reprezintă instanțe ale clasei.
În concluzie, o clasă reprezintă o mulțime de planuri care precizează cum se construiesc
obiectele.
Codul și datele care constituie o clasă sunt denumite membri ai clasei. Mai precis, datele
definite în cadrul clasei sunt denumite variabile membru, sau variabile instanță. Codul care
operează asupra datelor este denumit prin termenul de metode membru sau pe scurt metode.
“Meto da” este termenul folosit în PHP pentru subrutină.
2.1.2 Polimorfismul
Polimorfismul (derivat de la un termen grecesc cu semnificația “cu mai multe forme”)
este calitatea care permite unei interfețe să aibă acces la o clasă genetică de acțiuni. Un exemplu simplu de polimorfism îl putem întâlni la volanul unui automobil. Volanul (interfața) este același,
indiferent de tipul de mecanism de direcția utilizată efectiv. Această înseamnă că volanul funcționează la fel, indiferent dacă mașina are direcție manuală, servo direcție sau mecanism cu
cremalieră și pion. În consecință, întoarcerea volanului spre stânga determină mașina să se deplaseze la stânga indiferent de tipul mecanismului de direcție. Beneficiul inferenței uniforme
este că, desigur, de îndată ce învățăm să manevrăm volanul, putem conduce orice tip de mașină.
Același principiu se poate aplica și în programare. De exemplu, se consideră o stivă (care
este o listă cu disciplina “primul sosit, ultimul servit”). Este posibil ca un program să necesite trei
tipuri diferite de stive . O stivă poate să fie utilizată pentru valori întregi, o alta pentru valori în
virgulă mobilă, iar cea de -a treia formă pentru caractere. În acest caz, algoritmul care
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 13
implementează fiecare stivă este același, chiar dacă datele memorate d iferă. Într -un limbaj care
nu este orientat pe obiecte, este necesar să creăm trei seturi distincte de metode cu stive, metodele
din fiecare set având nume proprii. Datorită polimorfismului, în PHP putem crea un singur set
generic de metode de lucru cu sti ve, care funcționează în toate cele trei cazuri particulare. În acest
fel, de îndată ce știm să utilizăm o stivă, vom putea utiliza orice stivă.
Mai general, conceptul de polimorfism este exprimat adeseori prin sintagma “o singură
interfață mai multe meto de”. Această înseamnă că este posibil să stabilim o interfață generică
pentru un întreg grup de activități înrudite. Polimorfismul ajută la reducerea complexității
permițând aceleiași interfețe să fie folosită pentru a specifica o clasă generică de acțiuni . Selecția
acțiunii specifice care să se aplice în fiecare situație în parte este misiunea compilatorului.
2.1.3 Moștenirea
Moștenirea este procesul prin care un anumit obiect poate dobândi proprietățile altui
obiect. Aceasta este important, deoarece implementează conceptul de clasificare ierarhică. De
exemplu, un măr ionatan face parte din categoria măr, care este o parte a clasei fruct, care este
subordonată clasei mai mari aliment. În consecință, clasa aliment posedă anumite caracteristici care în mod logic se transmit și subclasei sale fruct. În afară de aceste caracteristici, clasa fruct
are și alte particularități, care o disting de alte alimente. Clasa măr definește însușiri specifice unui măr. Un măr ionatan va moșteni prin urmare caracteristicile tuturor claselor precedente,
definind numai acele trăsături care îl identifică în mod unic.
Fără utilizarea ierarhiilor , fiecare obiect ar trebui să- și definească în mod explicit toate
caracteristicile. Utilizând moștenirea, un obiect trebuie să definească numai acele trăsături care îl
identifică în mod unic în cadrul clasei. Atributele generice pot fi moștenite de la obiectul părinte.
În concluzie, mecanismul moștenirii este cel care face posibil ca un obiect să fie o instanță a unui
caz mai general.
2.2 Limbajul PHP. Aspecte generale
Acest paragraf tratează aspecte teoretice legate de structura și utilizarea limbajului de
programare PHP.
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 14
PHP este un limbaj de scripting pentru server. Este un limbaj interpretat, adică
instrucțiunile incluse în programele scrise (num ite scripturi) sunt translatate într -un format intern
și prelucrate una câte una, în loc ca programul să fie translatat în întregime (compilat) înainte de
execuție. Din acest punct de vedere PHP este identic cu JavaScript, care este un limbaj de
scripting pentru client.
Diferența dintre cele două tipuri de limbaje de scripting (pentru client și pentru server)
constă în aceea că, în timp ce browserul Web interpretează un script scris într -un limbaj care
aparține primului tip (așa cum este JavaScript) după ce pagina care îl conține a fost descărcată pe
calculatorul utilizatorului, un script scris într -un limbaj care aparține celui de -al doilea tip (așa
cum este PHP) este interpretat pe server, iar pagina XHTML generată este trimisă browserului.
Odată interpret at, codul scris în PHP este înlocuit în pagina Web cu rezultate furnizate de
script, astfel încât browserul primește o pagină XHTML standard. Astfel, scriptul este procesat în
întregime pe serverul Web.
Utilizarea programării pe server are mai multe avantaje. În continuare sunt analizate pe
scurt câteva dintre acestea:
• Nu apar probleme legate de compatibilitatea cu browserul, deoarece scripturile
scrise într -un astfel de limbaj sunt interpretate pe server;
• Este permis accesul la resursele aflate pe server ( resurse reprezentate în special de
fișiere și baze de date);
• Se reduce “încărcarea” calculatorului client; acest avantaj este important în cazul în care acest calculator are resurse reduse.
Limbajul structurat de interogare SQL folosit de bazele de date relaționale este un limbaj
neprocedural: specifică care sunt informațiile dorite, nu cum se obțin acestea. Cu alte cuvinte,
SQL nu cere să fie specificată metoda de acces la date. De asemenea SQL nu conține structuri de
control al fluxului. Utilizarea limbajelor de programare care dețin astfel de structuri și care sunt capabile să trimită interogări SQL serverului pentru baze de date constituie o modalitate foarte
eficientă de extindere a funcționalităților limbajului SQL. Integrarea în paginile XHTML trimise
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 15
clientului a rezultatelor obținute după execuția scripturilor permite vizualizarea conținutului
bazelor de date.
Deoarece vom folosi MySQL ca server de baze de date, alegem PHP ca limbaj de
programare pentru server (sunt utilizate împreună foarte des). Al egem PHP și nu Perl deoarece
PHP este dedicat programării Web, iar Perl nu. În raport cu ASP (Acive Server Pages),
principalul avantaj este acela că, dacă ASP poate fi utilizat mai ales pe platforme Windows cu
serverul IIS (Microsoft), PHP poate fi exploat at pe o mulțime de platforme, cu mai multe servere
Web. PHP este un instrument extrem de util pentru crearea unor aplicații Web dinamice și puternice în domeniile eBusiness și eCommerce, dar nu numai.
Limbajul PHP are posibilități extrem de mari în ceea ce privește procesarea textului, de la
standardul POSIX extins și expresii regulate Perl până la accesarea, analiza sintactică (parsarea)
și transformarea documentelor XML. În acest sens, PHP suportă standardele SAX (Simple API
for XML), DOM (Document Object Model) și XSLT (Extensible Stylesheet Language
Transformation).
PHP include suport pentru instanțierea claselor Java (și utilizarea lor ca obiecte PHP) și
pentru servlet -uri. De asemenea, limbajul PHP oferă suport pentru gestiunea sesiunilor, funcții
pentru generarea și prelucrarea imaginilor în diverse formate, pentru crearea animațiilor Flash, a
documentelor PDF etc. Limbajul PHP include suport pentru comerțul electronic, oferind
posibilitatea efectuării de plăți online (PayPal, Cybercash, Verisign etc.)
• În general limbajul PHP este utilizat în manierele descrise în continuare:
• Programare pentru server. Este modalitatea în care limbajul PHP se utilizează cel mai des. Pentru a fi utilizat în această manieră sunt necesare trei programe: un
server Web, inter pretorul PHP (lucrând ca procesor CGI, ca modul compilat sau
inclus în server) și un browser (client Web) utilizat pentru vizualizarea
rezultatelor.
Programare în linie de comandă. Se poate executa un script PHP fără server Web
și fără browser. Este necesar numai interpretorul PHP. Acest tip de utilizare este
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 16
indicat pentru scripturi care sunt executate în mod sistematic (e.g., pentru
întreținerea sistemului).
• Scrierea aplicațiilor GUI (Graphical User Interface) client. Pentru ca PHP să poată
fi utilizat în acest scop, trebuie descărcată și utilizată extensia PHP -GTK de la
adresa http://gtk.php.net .
2.2.1 Sintaxa limbajului În cele ce urmează voi descrie utilizarea PHP ca limbaj de programare pentru server.
Pentru executarea scripturilor prezentate în această lucrare am folosit vers iunea PHP 5, care
rulează ca modul legat dinamic în procesul server Apache.
La fel ca și pentru crearea unei pagini XHTML, scrierea unui script PHP necesită un
simplu editor ASCII (e.g., Notepad in Windows, respectiv vi, vim, gedit etc. In UNIX/Linux).
Pentru scrierea scripturilor PHP din această lucrare am utilizat un editor mai complex.
Zend Development Environment este un mediu de dezvoltare (Integrated Development
Environment IDE) dedicat PHP care printre alte funcționalități importan te asigură colorarea
elementelor de sintaxă specifice.
Ca orice limbaj de programare, PHP se caracterizează prin sintaxă și semantică. Prin
sintaxa limbajului se înțelege totalitatea regulilor de scriere a programelor, astfel încât acestea să
fie acceptat e de către parser -ul (analizorul sintactic) PHP. PHP folosește un vocabular format din
următoarele elemente: caractere utilizate, identificatori, separatori și comentarii.
Identificatorii reprezintă modalitățile de denumire a datelor, funcțiilor, claselor,
cuvintelor -cheie etc.; ei sunt, de fapt șiruri formate din următoarele caractere: cifre, litere și
caracterul special „_”. Regula de construire a identificatorilor precizează că un identificator
începe întotdeauna cu o literă sau cu o liniuță de sublinier e.
Separatorii delimitează între ei identificatorii; în PHP se utilizează ca separatori: spațiul
(blank), caracterul „;” (punct și virgulă) și „,” (virgulă – în listele de argumente ale funcțiilor).
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 17
Comentariile sunt folosite pentru a facilita înțelegerea programelor, mai ales a celor care
au dimensiuni mari.
Întotdeauna codul php este delimitat cu etichetele <?php și respectiv ?> sau <? și
respectiv ?>. Un exemplu de program php care face afișarea unui text oarecare este:
Aces t cod trebuie scris într -un fișier php (ex. exemplu.php). Cu acest fișier se accesează
adresa http://localhost/exemplu.php cu ajutorul unui browser Internet, pe ecran va apărea textul
“hello world”. Un script PHP poate fi ușor înglobat într -o pagină HTML p entru a crea pagini web
de complexități mai mari.
2.2.2 Variabile și constante în PHP
Scriptul de mai sus nu face altceva decât să afișeze un text și nimic mai mult. Însă scopul
limbajului PHP este de a permite mai mult: manipularea dinamică a datelor cu ajutoru l
variabilelor.
Variabilele sunt containere pentru date care se pot schimba în cursul execuției scriptului
care le conține. Valorile variabilelor sunt accesate în PHP cu ajutorul semnului dolar ($) urmat de
numele variabilei. Numele variabilelor sunt case sensitive. Cu alte cuvinte $nume și $Nume sunt
diferite.
În PHP sunt mai multe tipuri de variabile. Ele sunt următoarele:
• Variabile server: sunt create de serverul Web. Dacă serverul Web este Apache,
variabilele server se numesc variabile Apache. Câteva v ariabile server utilizate de
PHP atunci când se folosește Apache ca server Web:
– $SERVER_NAME: indică numele serverului pe care rulează scriptul PHP; <?php
echo ‘hello world’;
?>
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 18
– $SERVER_PROTOCOL: indică numele și versiunea protocolului prin
intermediul căruia a fost cerută pagina;
– $REQUEST_METHOD: indică metoda folosită pentru accesul la
pagină;
– $DOCUMENT_ROOT: indică numele directorului rădăcină al sitului Web. Acest director este precizat în fișierul de configurare al serverului
Web (httpd.conf pentru Apache);
– $HTTP_USER_AGENT: indic ă agentul utilizator (browserul) utilizat
pentru accesul la resursa Web;
– $REMOTE_ADDR: indică adresa IP a calculatorului de pe care clientul a solicitat o resursă;
– $REMOTE_PORT: indică portul folosit de calculatorul utilizatorului pentru comunicarea cu ser verul Web;
– $SCRIPT_FILENAME:indică numele căii absolute a scriptului curent ;
– $SERVER_ADMIN: indică valoarea directivei server_admin din
fișierul de configurare al serverului Web;
– $SERVER_PORT: indică portul calculatorului server utilizat de serverul Web; i mplicit acesta este portul 80;
– $SERVER_SIGNATURE: indică versiunea serverului Web și numele gazdei;
– $REQUEST_URI: indică URI -ul paginii care conține comanda de acces
la pagina curentă.
• Variabile de mediu: sunt importate de PHP din mediul în care funcționea ză. O
parte dintre aceste variabile sunt furnizate de shell -ul sistemului de operare sub
care rulează PHP și, deoarece există multe shell -uri care furnizează diverse
variabile de mediu, nu se poate realiza o listă completă a acestor variabile. O altă
parte a variabilelor de mediu este reprezentată de variabilele CGI.
• Variabile PHP: sunt create de preprocesorul PHP. Aceste variabile sunt
enumerate în continuare:
– Variabile globale (de tipul tablou asociativ) de forma $HTTP_*_VARS,
unde * poate fi GET, POST, E NV, COOKIE, SERVER și SESSION.
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 19
Variabilele conținute în tabloul $HTTP_SERVER_VARS, tablou care
include variabilele transmise scriptului curent de serverul HTTP, sunt
similare variabilelor server. De exemplu, elementul $HTTP_SERVER_VARS[‘REMOTE_ADDR’] conți ne adresa IP a
calculatorului care a trimis cererea pentru scriptul curent . Aceeași adresă
este conținută de variabila server (Apache) $REMOTE_ADDR;
– $HTTP_POST_FILES (tablou asociativ), care include informații despre fișierele încărcate pe server prin meto da POST.
– $HTTP_SELF, care conține numele scriptului curent (aflat în execuție)
relativ la rădăcină, fiind extreme de utilă la autoreferirea scripturilor
PHP;
– Variabile superglobale sau supervectori (de tip tablou asociativ): $_ENV, $_GET, $_POST, $_SESSION , $COOKIE, $_SERVER,
$_REQUEST și $_FILES.
Începând cu PHP 4.2.0 directiva register_globals (din php.ini ) are valoarea implicită Off.
Păstrând această valoare, datele trimise prin metodele $_POST și $_GET și al tablourilor $HTTP_GET_VARS și $HTTP_POST_VARS .
Constantele sunt identificatori a căror valoare, odată setată nu mai poate fi schimbată pe
parcursul execuției unui script. În PHP, o constantă se definește cu ajutorul funcției define().
Constantele nu sunt precedate de semnul “$” așa cum se întâmplă în cazul variabilelor.
Constantele se definesc cu funcția al cărei prototip este următorul:
bool define(string nume_const,mixed valoare [,bool case_insensitive])
Termenul mixed inseamnă oricare dintre tipurile scalare. Dacă parametrul opțional
case_insensit ive este prezent și are valoarea TRUE, constantele vor fi considerate case
insensitive. În cazul implicit, constantele sunt considerate ca fiind case sensitive.
2.2.3 Tipuri de date în PHP
În PHP există opt tipuri interne de date: 4 tipuri scalare (boolean, inte ger, float, string), 2
tipuri compuse (array, object) și 2 tipuri speciale (resource, null).
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 20
• Boolean : Acest tip de date poate avea două valori: TRUE și FALSE . În afară de
specifica rea explicită a acestora, se pot converti la Boolean diferite tipuri de date.
Astfel, numărul întreg 0, numărul real 0.0, șirul vid, o variabila de tip null sau o
variabilă nedefinită sunt interpretate ca având valoarea booleană FALSE . Orice altă
valoare este interpretată ca fiind TRUE .
• Integer: Conține mulțimea numerelor întregi. Acestea pot fi prezentate zecimal,
octal (valoarea trebuie precedată de 0) sau hexazecimal. Mărimea unui întreg
depinde de platforma utilizată, dar în principiu are dimensiunea de 32 de biți.
• Float : Variabilele de tip float pot fi definite folosind fie fo rma zecimală, fie cea
științifică (cu exponent). Precizia variabilelor este și la float dependentă de
platforma utilizată. De obicei se folosește standardul IEEE64.
• String : O variabilă de tip String reprezintă un șir de caractere. Un caracter se
reprezintă pe un octet, ceea ce înseamnă că sunt exact 256 de caractere posibile.
• Array : Un array în PHP este o hartă ordonată care mapează valorile unor chei.
Cheile pot fi întregi sau de tip string. O variabilă de tip array se definește astfel:
PHP dispune de numeroase funcții pentru lucrul cu vectori, pentru a realiza
intersecția, reuniunea , extragerea de elemente sau sortarea vectorilor.
• Obiect : Un obiect se inițializ ează folosind sintaxa new:
nume_clasa este clasa al cărei obiect dorim sa îl folosim. Astfel prin variabila
$var se obține accesul la metodele clasei nume_clasa și variabilele sale.
• Resource: Variabilele de tip Resouce sunt variabile speciale, care conțin referințe spre obiecte externe. Acestea sunt create și folosite de funcții speciale. Din această
cauză, nici un alt tip nu poate fi convertit la tipul Resource.
$var =new nume_clasa; <?php
$array = array(“foo”=>”bar”, 12 =>true);
echo $array[“foo”]; // va afisa bar
echo $array[12]; // 1
?>
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 21
• Null: Este un tip special care arată că unei variabile nu i -a fost atribuit nici o
valoare. O valoare este considerată null dacă i s -a atribuit constanta null , dacă
nu i s -a atribuit nici o valoare sau dacă s -a folosit asupra ei funcția unset() .
PHP determină tipul unei variabile în funcție de datele pe care i le atribuim.
2.2.4 Structuri de decizie
Limbajul PHP dispune de un set bogat de inst rucțiuni care permit scrierea unor programe
structurate complexe.
Orice limbaj de nivel înalt, inclusiv PHP, dispune de structuri de control care vin în
sprijinul programatorului. Aceste structuri de control sunt implementate prin următoarele
instrucțiuni :
• Structura alternativă: prin intermediul instrucțiunilor condiționale if..else și
if..elseif..else ;
• Structura repetitivă: prin intermediul instrucțiunilor while și for;
• Structura repetitivă condițională posterior: prin intermediul instrucțiunii
do..while ;
• Structura selectivă: prin intermediul instrucțiunii switch ;
În cele ce urmează vom prezenta instrucțiunile utilizate pentru implementarea structurilor
de control, precum și alte instrucțiuni utilizate în limbajul PHP.
2.2.4.1 Instrucțiunea IF
Cu ajutorul instrucț iunii if se implementează structura alternativă. Sintaxa instrucțiunii
este următoarea:
if(expresie)
{instructiuni1;}
else {instructiuni2;}
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 22
În sintaxa de mai sus, expresie este o expresie care poate fi evaluată la o valoare
booleană adevărat/fals. Dacă expresie este adevărat , sunt executate instrucțiuni1 , dacă
este falsă, sunt executate instrucțiuni2 .
Instrucțiunea if este foarte utilă, deoarece permite scripturilor să ia decizii în timpul
rulării, pe baza valorii din timpul execuției a datelor, care pot fi text introdus de utilizator într -o
pagină Web (cum ar fi o parolă), valori obținute dintr -o bază de date (cum ar fi inventarul
disponibil) sau chiar date obținute de la un alt server Web (cum ar fi cotații de bursă).
PHP include o serie de funcții numite is_int , is_float , is_array și așa mai
departe, folosite pentru a returna tipul unei variabile. Cu ajutorul acestor funcții se pot verifica
tipul variabilelor înainte de a le folosi, ca în exemplul următor:
2.2.4.2 Instrucțiunea SWITCH
În situațiile în care trebuie verificate mai multe condiții, chiar și instrucțiunile
if..elseif..else devin complicate. În aceste cazuri este indicat folosirea instrucțiunii
switch.
O instrucțiune switch începe cu cuvântul cheie switch , după care sunt specificate, între
paranteze, valoarea pentru care se verifică condițiile. Se pot crea mai multe condiții folosind
instrucțiunea case , specificând o valoare pentru fiecare instrucțiune. Dacă valoarea de test a
instrucțiunii switch corespunde valorii unei instrucțiuni case , sunt exe cutate instrucțiunile
interne ale clauzelor case, până la prima instrucțiune break , care încheie instrucțiunea case .
Dacă nici una dintre valorile case nu se potrivește cu valoarea testată, este executată
instrucțiunea default, dacă este prezentă. Iată un exemplu, care afișează diferite texte, în funcție
de valoarea variabilei $temperatura . if(is_int($variabila))
$variabila=$variabila+10;
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 23
2.2.4.3 Cicluri FOR
Ciclul for
execută în mod repetat o instrucțiune (sau o instrucțiune compusă):
În această instrucț iune, expresie1 permite inițializarea ciclului, de cele mai multe ori
prin inițializarea unui contor de ciclare (numit și index de ciclare) care va memora de câte ori va
fi executat ciclul. Această expresie este executată o singură dată , înainte de intrar ea în ciclu.
expresie2 , următoarea în sintaxă, este expresia de test – ciclul continuă atât timp c ât această
expresie este adevărată. Această expresie este executată de fiecare dată când ciclul revine la
început. De obicei, aici se testează valoarea contor ului de ciclare. Ultima expresie, expresie3 , for (expresie1; espresie2; expresie3) instructiune <?php
$temperatura=24;
switch($temperatura){
case 24: echo “Vremea e buna.”; break; case 26: echo “E inca vreme buna.”;
break;
case 30:
echo “E prea cald pentru o excursie.”; break; default: echo “Temperatura e in afara spectrului”
}
?>
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 24
este executată după fiecare executare a instrucțiunii, adică de fiecare dată când este parcurs
ciclul. De obicei, în această expresie este incrementat contorul de ciclare.
Utilizarea ciclului for
Cicluri este ilustrată în exemplul următor:
for
2.2.4.4 Cicluri WHILE pot fi îmbinate, unul în interiorul celuilalt. Tehnica aceasta va fi extrem de
utilă la matrici.
Un alt tip important de cicluri sunt ciclurile while
În acest caz, . În loc să folosească un inde x de
ciclare, aceste cicluri sunt parcurse atât timp cât este îndeplinită o anumită condiție, executând iar
și iar instrucțiunile incluse:
instructiune poate fi o instrucțiune compusă, încadrată de acolade. Acest
ciclu este executat încontinuu, atât timp cât condiția expresie rămâne adevărată.
Utilizarea ciclului while
este ilustrată în exemplul următor:
<?php
$valoare=1;
while($valoare<10){ echo “valoare noua:”, $valoare, “<br/>”;
$valoare*=2;
while (expresie) instructiune <?php
for($contor=0; $contor<5; $contor++){
echo “Facem asta de 5 ori.<br/>”
}
?>
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 25
Acest tip de ciclu este folosit atunci când nu există un contor explicit de ciclare. De
exemplu, atunci când se citesc date dintr -un fișier, se pot folosi funcții pentru testarea poziției în
cadrul fișierului în care se face citirea.
2.2.4.5 Cicluri DO..WHILE
Pe lângă ciclurile while , în PHP se pot folosi și ciclur i do..while . Acestea sunt
identice cu ciclurile while
, dar condiția este verificată la sfârșitul ciclului, nu la începutul
acestuia:
2.2.4.6 Cicluri FOREACH
Există un tip special de ciclu, foreach , care simplifică lucrul cu variabile complexe
precum matricele. Matricele stochează elemente multiple de date, iar acest tip de ciclu permite
parcurgerea matricelor fără folosirea unui index de ciclare. Iată cum este utilizat ciclul foreach
Utilizarea ciclului .
foreach este ilustrată în exemplul următor, în care este folosit pentru
parcurgerea matricei $fructe
și afișarea fiecărui element. }
?>
<?php
$arr=array(“mere”,”piersici”,”banane”);
foreach($arr as $valoare){
echo “Acest fruct este: $valoare<br/>”;
foreach (expresie_matriceala as $valoare) instructiune
foreach (expresie_matriceala as $cheie=>$valoare) instructiune do instructiune while (expresie)
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 26
2.3 MySQL
MySQL este un sistem de gestiune a bazelor de date, foarte rapi d și robust. O bază de date
organizează datele pentru accesul și manipularea sub controlul programelor sau aplicațiilor.
Sistemul software care permite gestionarea bazelor de date relaționale se numește sistem de
gestiune a bazelor de date relaționale – SGBDR (sau, în limba engleză, Relational DataBase
Management System – RDBMS).
MySQL este scris în C și este testat cu numeroase compilatoare, pe numeroase platforme.
Are implementat suportul pentru următoarele tipuri de date: numeric, șir de caractere, dată și
timp.
Figura 2.3.1 MySQL utilizează arhitectura client -server
Ca și alte SGBDR -uri, și MySQL utilizează arhitectura client server (figura 2.3.1). O
mașină care dorește să proceseze interogări asupra bazelor de date MySQL trebuie să ruleze un server My SQL care este responsabil cu traficul de tip incoming/outgoing în bazele de date.
Serverul MySQL „ascultă” posibilele cereri de conexiune ale clienților.
Prin client MySQL se înțelege orice aplicație capabilă să trimită interogări serverului
MySQL. }
?>
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 27
MySQL este un server de baze de date SQL multi -fir (multi- threaded, i.e., utilizează fire
de execuție concurente) și multi -utilizator (multi- user, i.e., poate deservi simultan mai multe
conexiuni cu utilizatorii), fiind recomandat – datorită acestor caracteristi ci – să furnizeze un
back -end în aplicațiile Web dinamice.
2.3.1 Structura bazelor de date
Bazele de date MySQL sunt localizate în directorul data, numit director de date. Fiecare
bază de date este organizată ca un subdirector al directorului de date, acesta avâ nd același nume
cu baza de date. Subdirectorul respectiv se numește directorul bazei de date. Deci, în MySQL
obază de date este, de fapt, un simplu director. Dacă baza de date nu conține tabele, directorul
este vid.
Fiecare tabel al unei baze de date este reprezentat de trei fișiere situate în directorul bazei
de date. Acestea sunt:
• Fișierul formular (are extensia frm): conține structura tabelului , adică numele
coloanelor, tipurile și atributele acestora etc.;
• Fișierul de date (are extensia MYD): conține datele înscrise în tabel.
• Fișierul index (are extensia MYI): conține indexurile asociate datelor stocate în fișierul de date.
De remarcat că fișierele de date și index sunt create automat, o dată cu crearea structurii
tabelului (cu comanda CREATE TABLE) co nținut în fișierul formular, chiar dacă acesta nu
conține încă înregistrări sau indexuri definite.
2.3.2 Tabele de acordare al privilegiilor
Tabelele de acordare al privilegiilor (grant tables) fac parte din baza de date mysql (creată
automat la instalarea siste mului MySQL). Aceste tabele controlează, prin conținutul lor, accesul
utilizatorilor la bazele de date MySQL.
În mod obișnuit, gestionarea privilegiilor se realizează cu ajutorul comenzilor GRANT și
REVOKE. Aceste comenzi modifică automat tabelele de acordare al privilegiilor.
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 28
Aceste tabele au următorul conținut:
• Tabelul db conține privilegiile la nivel de bază de date; el conține numele bazelor
de date și utilizatori care au privilegii de acces la acestea;
• Tabelul column_priv conține privilegiile la nivel de coloană;
• Tabelul host este folosit pentru controlul accesului la nivel de bază de date, de la
anumite gazde, împreună cu db;
• Tabelul user conține lista utilizatorilor, a parolelor și a privilegiilor globale (de
super -utilizator) de care dispun aceștia ( privilegiile conținute în acest tabel se
aplică tuturor bazelor de date situate pe server);
• Tabelul tables_priv conține privilegiile la nivel de tabel.
2.3.3 Tipuri de date și coloane utilizate în MySQL
2.3.3.1 Tipuri de date
In MySQL spațiul alocat pe discul serverului este funcție de tipul de date. Câteva din
tipurile de date folosite în bazele de date MySQL sunt:
Tipul numeric Numerele pot fi întregi (aceste numere pot fi scrise în format
zecimal sau în format hexazecimal) sau în virgulă mobilă. De
asemenea, în MySQL poate fi folosită notația științifică, așa cum
este prezentat și în exemplul următor: 5.789e+4
Tipul șir de caractere Un șir de caractere este o secvență de caractere încadrată de
ghilimele; acestea pot fi simple sau duble
Tipul dată și oră În MySQL, da tele sunt specificate în ordinea an -lună-zi, conform
standardului SQL ANSI92. Iată un exemplu: “2009- 05-10”. Ora
este reprezentată ca în exemplul următor: „12:28:45”. Cele două
pot fi reprezentate împreună.
Valoarea NULL Valoarea NULL este o valoare fără tip. Are semnificația: “fără
valoare”
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 29
2.3.3.2 Tipuri de coloane
Un tabel este alcătuit din una sau mai multe coloane. La crearea unui tabel trebuie
specificat tipul fiecărei coloane. Ceea ce deosebește un tip de coloană de un tip de date în
MySQL este faptul că un tip de coloană este mai specific decât tipul de dată corespunzător, în
sensul că tipul de dată precizează nu numai tipul de dată, dar și categoria de valori pe care o poate
avea aceasta.
Sistemul MySQL suportă mai multe tipuri de coloane, care pot fi gr upate în trei categorii
(acestea sunt tipurile de date MySQL): tipuri numerice, tipuri dată și oră și tipuri de șir de caractere. Voi prezenta aceste tipuri în continuare, indicând între paranteze drepte [] atributele
opționale ale fiecărui tip.
Tipurile n umerice de coloane utilizate în MySQL sunt următoarele:
Denumire Valori Spațiu alocat
TINYINT [(M)] [UNSIGNED]
[ZEROFILL] între – 128 și 127 (sau 0 -255 cu atributul
UNSIGNED) 8 biți
SMALLINT [(M)]
[UNSIGNED] [ZEROFILL] între – 32 768 și 32 767 (sau 0 -65 535 cu
atributul UNSIGNED) 16 biți
MEDIUMINT [(M)]
[UNSIGNED] [ZEROFILL] între – 8 388 608 și 8 388 607 (sau 0 -16 777
215 cu atributul UNSIGNED) 24 biți
INT [(M)] [UNSIGNED]
[ZEROFILL] între – 2 147 483 648 și 2 147 483 647 (sau
0-4 294 967 295 cu atributul UNSIGNED) 32 biți
INTEGER [(M)] [UNSIGNED]
[ZEROFILL] între – 2 147 483 648 și 2 147 483 647 (sau
0-4 294 967 295 cu atributul UNSIGNED) 32 biți
BIGINT [(M)] [UNSIGNED]
[ZEROFILL] mărime mare 64 biți
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 30
FLOAT [(M, D)] [ZEROFILL] număr în virgulă mobilă cu simplă precizie 32 biți
DOUBLE [(M, D)]
[ZEROFILL] număr în virgulă mobilă cu dublă precizie 64 biți
FLOAT [(M, D)] [ZEROFILL] număr în virgulă mobilă cu simplă precizie 32 biți
DOUBLE PRECIZION [(M,
D)] [ZEROFILL]
REAL [(M, D)] [ZEROFILL]
DEC IMAL [(M, D)]
[ZEROFILL]
Valorile numerice de acest tip sunt stocate sub formă de șiruri. Domeniul maxim de valori
este același ca și pentru DOUBLE. Există un domeniu efectiv în funcție de valorile parametrilor
M și D.
În reprezentarea folosită de mai sus (cu excepția tipului DECIMAL), M indică lungimea
maximă de afișare (valoarea maximă este 255), iar D (folosit pentru tipurile FLOAT și
DOUBLE) indică numărul maxim de cifre care urmează după punctul zecimal (valoarea maximă
posibilă este 30, iar valoarea efectiv precizată nu poate depăși M -2).
Atributul ZEROFILL determină completarea implicită cu zerouri a valorilor coloanelor
tabelului (în absența altor valori precizate explicit).
Pe lângă atributele precizate anterior, mai poate fi specificat și atributul
AUTO_INCREMENT. Acest atribut este utilizat atunci când se dorește generarea automată a
unei serii de valori întregi, începând cu 1, fiecare valoare fiind mai mare cu o unitate decât cea
precedentă.
Tipurile dată și oră utilizate de coloanele MyS QL sunt următoarele:
• DATE
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 31
• DATETIME
• TIMESTAMP [(N)]
• TIME
• YEAR [(2|4)]
Tipurile de coloane dată și oră nu au atribute specifice. Pentru oricare tip dată și oră pot fi
specificate atributele generale NULL sau NOT NULL. Atributul implicit este NULL. Se poate
specifica o valoare prestabilită cu ajutorul atributului DEFAULT.
Tipurile de șir de caractere utilizate de coloanele MySQL sunt:
• CHAR (N): desemnează șir de caractere de lungime fixă care poate conține maximum N caractere. Necesită un spațiu de stocare de N octeți (cuprins între 1 și
255)
• VARCHAR (N): desemnează un șir de caractere de lungime variabilă. Ocupă maximum N octeți (între 1 și 255). Efectiv, ocupă o+1 octeți (o este lungimea șirului, o<=N), un octet fiind necesar pentru stocarea lungimii șirului. Acest tip
este indicat atunci când stocați șiruri a căror lungime este variabilă.
• BLOB: denumește un obiect binar mare (binary large object). Poate stoca aproape orice “obiect” (fișier) dorește utilizatorul (imagini, documente etc.) Acest “obiect”
poate avea o dimensiune aproape oricât de mare (maximum 2
32
• TEXT: tipurile TEXT sun t practice identice cu cele BLOB, cu excepția faptului
că, la sortare și comparare, valorile BLOB sunt case sensitive, iar valorile TEXT
sunt case insensitive. -1 octeți). Tipul
BLOB cuprinde, de fapt, o familie de tipuri care diferă numai în ceea ce privește mărimea informației pe care o pot stoca (după cum se poate constata și în tabel)
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 32
Tip Dimensiune maximă (în octeți)
TINYBLOB, TINYTEXT 28-1 (255)
BLOB, TEXT 216-1 (64k -1)
MED IUMBLOB, MEDIUMTEXT 224-1 (16M -1)
LONGBLOB, LONGTEXT 232-1 (4G -1)
Coloanele de tip BLOB și TEXT pot stoca informații a căror lungime poate să difere mult
de la o înregistrare la alta (imagini, sunete, documente etc.). Mărimea unui obiect BLOB sau
TEXT este determinată de tipul său, dar cea mai mare valoare care poate fi transferată între client
și server este determinată de cantitatea de memorie disponibilă și de mărimea buffer -ului de
comunicație cu programele client.
2.3.4 Operații frecvente în MySQL
Pentru ca un utilizator să poată crea o bază de date trebuie să dețină privilegiul CREATE.
Administratorul poate crea un cont de utilizator care să aibă privilegiul amintit.
Exemplu:
Pentru a defini această bază de date ca prestabilită pentru lucru, folosim comanda USE
produse : Pentru a stoca date despre o varietate de fructe și legume, putem crea o bază d e
date, numită, produse , folosind comanda CREATE DATABASE :
Mysql> USE produse;
Database changed mysql>CREATE DATABASE produse;
Query OK, 1 row affected (0.01 sec)
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 33
Nu există încă nici un tabel în baza de dat e produse . Pentru a crea un tabel fruct ,
trebuie să creăm câmpurile de date ale acestuia. Creăm tabelul fruct , cu câmpurile nume și
număr , stocate ca șiruri de caractere:
Mai departe deschidem baza de date produse și, folosind comanda INSERT , încărcăm
datele în tabelul fruit :
După încărcarea datelor, acestea se pot afișa folosind comanda SELECT :
mysql> SELECT*FROM fruit;
+––––+ ––––+
| Nume | Numar |
+––––+ ––––+
| mere | 1024 |
Mysql> USE produse;
Database changed
mysql> INSERT INTO fruct VALUES (‘mere’, ‘1024’); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO fruct VALUES (‘portocale’, ‘640’); Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO fruct VALUES (‘pere’, ‘224’);
Query OK, 1 row affected (0.00 sec) mysql> CREATE TABLE fruit (name VARCHAR(20), number
VARCHAR(20));
Query OK, 0 rows affected (0.13 sec)
mysql> SHOW TABLES;
+––––––-+
| Tables_in_produse |
+––––––-+
| fruit | +––––––-+
1 row in set (0.00 sec)
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 34
2.4 Smarty PHP
Smarty este un “template engine” pentru PHP, adică o unealtă care permite separarea
aplicației logice și conținutul de prezentare. Astfel, Smarty face posibilă situația în care
programatorul PHP și designer -ul web sunt persoane diferite.
Un exemplu ar fi r ealizarea unei pagini web care să afișeze articole dintr -un ziar:
Variabilele $titlu , $autor și $articol sunt elemente de conținut, ele nu conțin informații
despre modul în care acestea vor fi prezentate. Ele sunt transmise în Smarty de către aplicație.
După aceea designerul editează șabloanele (template- urile) și folosește o combinație de taguri
HTML și taguri Smarty pentru modificarea prezentării acestor variabile cu ajutorul unor elemente
cum ar fi tabelele, divurile, style -sheet -urile, imaginile SVG ș .a.
Într-o zi programatorul trebuie să schimbe modul în care conținutul articolului este preluat, și
anume o schimbare în aplicația logică. Această schimbare nu afectează designerul, conținutul va ajunge în aceeași manieră în template.
Deasemenea, în cazul în care designerul vrea să reediteze în totalitate template- urile, acesta nu ar
implica nici o schimbare în logica aplicației.
Prin urmare, programatorul poate face schimbări în aplicație fără a fi nevoie să restructureze
șabloanele, și designerul poate s chimba șabloanele fără să creeze conflicte sau erori în aplicație.
Unul dintre aspectele unice Smarty este compilarea template -urilor (șabloanelor ), și
anume citirea de că tre Smarty a fișierelor .tpl (fișierelor de template) și generarea scripturilor
PHP. Odată ce acestea sunt generate, ele sunt exec utate.
| portocale | 640 |
| banane | 2018 |
| pere | 224 |
+––––+ ––––+
4 rows in set (0.00 sec)
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 35
2.4.1 Sintaxa limbajului
Toate tagurile de template Smarty sunt încadrate între delimitatori. Implicit acești
delimitatori sunt { și }
2.4.2 Variabilele Smarty , dar pot fi schimbate.
În Smarty tot ce e în afara delimitatorilor este af ișat ca și conținut static (conținut care,
spre deosebire de conținutul dinamic, nu conține date preluate dintr -o bază de date, datele
predefinite apar în browserul utilizatorului așa cum au fost stocate pe server ). Tagurile de
template sunt interpretate ș i înlocuite cu outputul potrivit.
Toate tagurile Smarty afișează variabile sau apelează funcții. Aceste funcții sunt procesate
și rulate dacă sunt încadrate între delimitatori .
Smarty folosește diferite tipuri de variabile. Tipul de va riabilă depinde de simbolul
prefixat și/sau de delimitatorii care o încadrează.
Variabilele în Smarty pot fi afișate direct sau folosite ca argumente ale unor funcții,
atribute sau modificatori, în expresii condiționale, etc. Pentru afișarea în pagină a un ei variabile
este suficient încadrarea ei între acolade {}
2.4.2.1 Variabile atribuite din limbajul PHP .
Acele variabile care sunt atribuite din PHP sunt accesate cu ajutorul semnului dolar ( $)
urmat de numele variabilei (ca și în PHP). Variabilele atribuite dintr -un template cu funcția
{assign}
sunt afișa te ca în exemplul următor:
<?php
$smarty = new Smarty();
$smarty- >assign('firstname', 'Doug');
$smarty- >assign('lastname', 'Evans');
$smarty- >assign('meetingPlace', 'New York');
$smarty- >display( 'index.tpl');
?>
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 36
Conținutul fișierului index.tpl
Outputul conținutului de sus ar fi: este:
Array -uri asociative
Se p ot accesa variabile ale array -urilor asociative atribuite din PHP prin scrierea cheii
după caracterul punc t „.
Conținutul fișierului ”. Exemplul de mai jos ilustrează accesarea unei astfel de variabile.
index.tpl
este:
{$Contacts.fax}<br />
{$Contacts.email}<br />
<?php
$smarty- >assign('Contacts',
array('fax' => '555-222-9876',
'email' => 'zaphod@slartibartfast.example.com',
'phone' => array('home' => '555-444-3333',
'cell' => '555-111-1234')
)
);
$smarty- >display( 'index.tpl');
?> Hello Doug Evans, glad to see you can make it.<br />
This weeks meeting is in New York . Hello {$firstname} {$lastname}, glad to see you can make it.
<br />
This weeks meeting is in {$meetingPlace}.
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 37
Va rezulta outputul:
Conținutul fișierului Indexarea elementelor:
Arrayurile pot fi accesate și prin indexare:
index.tpl
: {* you can print arrays of arrays as well *}
{$Contacts.phone.home}<br />
{$Contacts.phone.cell}<br />
{$Contacts[0]}<br />
{$Contacts[1]}<br />
{$Contacts[2][0]}<br />
{$Contacts[2][1]}<br /> <?php
$smarty- >assign('Contacts',
array('555- 222-9876',
'zaphod@slartibartfast.example.com',
array('555- 444-3333',
'555- 111-1234')
));
$smarty- >display( 'index.tpl');
?> 555-222-9876<br />
zaphod@slartibartfast.example.com<br />
555-444-3333<br />
555-111-1234<br />
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 38
Outputul rezultat va fi identic cu cel din cazul precedent.
Obiecte:
Datele din obiecte (proprietățile) atribuite din PHP pot fi accesate specificând numele
proprietății după simbolul ->
Acesta va avea ca rezultat outputul : .
2.4.2.2 Variabilele încărcate din fișierele config
Fișierele config sunt utile pentru designeri deoarece cu ajutorul lor pot administra
variabile de template globale dintr -un singur fișier. În mod normal, schimbarea schemei de culori
a unei aplicații, necesita parcurgerea fiecărui template pentru acea modificare de culoare. Cu
fișierul config, culorile pot fi stocate într -un singur loc, și astfel doar un singur fișier trebuie
updatat.
Un exemplu de fișier config poate fi văzut mai jos :
# global variables
pageTitle = "Main Menu"
bodyBgColor = #000000
tableBgColor = #000000
rowBgColor = #00ff00
name: Zaphod Beeblebrox
email: zaphod@slartibartfast.example.com name: {$person ->name}<br />
email: {$person ->email}<br />
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 39
Valorile variabilelor din fișierele config pot fi încadrate între ghilimele, dar acesta nu este
obligatoriu. În fișierele config sunt interpretate doar sintaxele valide, astfel conținutul care nu
respectă sintaxa fișierului config, poate fi folosit ca și comment. Totuși se recomandă folosirea
simbolului # diez la începutul comentariilor.
Fișierul are două secțiuni denumirea cărora este încadrată în paranteze drepte. Denumirile
de secțiuni însă pot fi și șiruri de caractere care nu conțin [ sau ]. Primele patru variabile de la
început sunt variabile globale care nu sunt incluse în nici o secțiune. Aceste variabile sunt
încărcate din fișierul config de fiecare dată când fișierul este accesat. În cazu l în care este accesat
doar o secțiune din fișier, vor fi încărcate atât variabilele acelei secțiuni cât și variabilele globale.
Fișierele config sunt încărcate în template -uri cu ajutorul funcției implicite
{config_load} sau funcția API config_load() .
Variabilele din încărcate din fișiere config în template -uri sunt încadrate între simboluri #
diez sau precedate variabila smarty $smarty.config . În exemplul următor este ilustrată
metoda prin care se preiau variabile cu $smarty.config
din fișierul foo.conf : [Customer]
pageTitle = "Customer Info"
[Login]
pageTitle = "Login"
focus = "username"
Intro = """This is a value that spans more than one line. you must enclose
it in triple quotes."""
{config_load file='foo.conf'}
<html>
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 40
2.4.2.3 Variabila rezervată {$smarty} . Variabile de request
Variabilele de request cum sunt $_GET , $_POST , $_COOKIE , $_SERVER , $_ENV și
$_SESSION
pot fi accesate în modul ilustrat mai jos:
<title>{$smarty.config.pageTitle}< /title>
<body bgcolor="{$smarty.config.bodyBgColor}">
<table border="{$smarty.config.tableBorderSize}"
bgcolor="{$smarty.config.tableBgColor}">
<tr bgcolor="{$smarty.config.rowBgColor}"> <td>First</td>
<td>Last</td>
<td>Address</td> </tr> </table> </body>
</html>
{* afișarea valorii paginii din URL ($_GET)
http://www.example.com/index.php?page=foo *}
{$smarty.get.page}
{* afișarea variabilei "page" dintr- un form ($_POST['page']) *}
{$smarty.post.page}
{* afișarea valorii cookie- ului "username"
($_COOKIE['username']) *}
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 41
Observație: Valoarea {$NUMELE_SCRIPTULUI} poate fi accesat ă direct, cu toate că modul
propus de accesării a acestei valori este {$smarty.server.NUMELE_SCRIPTULUI}
.
2.4.3 Modificatori de varia bile
Modificatorii de variabile pot fi aplicate atât variabilelor cât și funcțiilor sau șirurilor de
caractere. Pentru a aplica un modificator , se specifică valoarea urmată de simbolul “ |” (pipe) și
numele modificatorului. Un modificator poate avea paramet ri adiționali care pot afecta
comportarea lui. Acești parametri se scriu după denumirea modificatorului și sunt separate între
ele cu “:
Mai jos sunt câteva exemple de modificatori: ”(colon) . Deasemenea, toate funcțiile php pot fi folosite ca și modificatori în mod
implicit și modificatorii pot fi com binați. {$smarty.cookies.username}
{* afișarea variabilei de server "SERVER_NAME"
($_SERVER['SERVER_NAME'])*}
{$smarty.server.SERVER_NAME} {* afișarea variabilei de mediu "PATH" *} {$smarty.env.PATH}
{* afișarea variabilei de sesiuni php "id" ($_SESSION['id']) *}
{$smarty.session.id}
{* afișarea variabilei "username" din
get/post/cookies/server/env *}
{$smarty.request.username}
<a href="{$SCRIPT_NAME}?page=smarty">click me</a>
<a href="{$smarty.server.SCRIPT_NAME}?page=smarty">click me</a>
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 42
Denumire
modificator Descriere modificator Tip
parametru Valoare
implicită
Capitalize Transformă primul caracter în majusculă. boolean TRUE
Cat Concatenează valoarea param etrului cu
valoarea variabilei cărei este aplicat. string Empty
count_characters Numără caracterele dintr -o variabilă. boolean TRUE
date_format Modifică data și ora în formatul dat
strftime() . Datele pot fi trimise în
Smarty ca timestamp -uri UNIX , timestamp –
uri MySQL sau orice alt string compus din
an, lună, zi, parsabile de strtotime(). string %b %e,
%Y
Default Setează valoarea implicită a unei variabile. string Empty {* modificator cu parametru *}
{$title|truncate:40:'…'}
{* aplicarea unui modificator unei funcții *}
{html_table loop=$myvar|upper}
{* cu parametrii *}
{html_table loop=$myvar|truncate:40:'…'} (*transforma în majuscule și va trunchia întregul array *}
<select name="name_id">
{html_options output=$myArray|upper|truncate:20}
</select>
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 43
Escape Face ca elemente din valoare variabilei să
nu fie parsate. Mai este folosit și la
encodarea variabilelor. string html
Indent Determină numărul de caractere indentate.
Al doilea parametru adițional (string)
specifică caracterul care va fi folosit pentru
indentare. integer 4
regex_replace Caută și înlocuiește un string din valoarea
variabilei. Se specifică în mod obligatoriu
atât valoare care se înlocuiește cât și
valoarea cu care se înlocuiește. string N/A
Strip Înlocuiește fiecare spațiu repetat, newline
sau tab cu un singur spațiu, sau cu string- ul
din parametru. boolean TRUE
Truncate Trunchiază o variabilă la un număr de
caractere. Opțional se poate specifica un
string care să fie afișat la sfârșitul variabilei,
după ce acesta a fost trunchiată. Implicit
caracterele stringului sunt incluse în
lungimea trunchiată.
1. Primul p arametru determină la câte
caractere să fie trunchiată variabila. integer 80
2. Al doilea parametru este un string care
înlocuiește porțiunea trunchiată. string …
3. Al treilea parametru determină unitatea
de trunchiere : cuvânt sau caracter. boolean FALSE
(cuvânt)
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 44
4. Al patrulea parametru determină locul
unde de unde se va face trunchierea. boolean FALSE
(la sfârșit
de cuvânt)
2.4.4 Funcții implicite (built-in)
Smarty dispune de mai multe funcții implicite. Aceste funcții sunt parte integrală a
template engine -ului Smarty. Nu se pot crea funcții customizate cu aceeași denumire ca și
denumirea funcțiilor implicite și acestea nici nu se pot modifica .
Unele din aceste funcții posedă atributul assign care colectează rezultatul returnat de
funcție într -o var iabilă de template, asemănător funcției {assign}
2.4.4.1 {capture} .
Funcția {capture} colectează outputul porțiunii din template încadrat între tagurile sale
într-o variabilă, astfel outputul nu este afișat în mod direct. Orice conținut încadrat între
{capture name=’foo’} și {/content} este colectat în variabila specificată în atributul
name, adică în foo.
Conținutul colectat poate fi folosit oriunde în template prin accesându- l prin
$smarty.capture.foo , unde foo este valoarea preluată din atributul name.
Funcțiile {capture}
2.4.4.2 {config_load} pot fi incluse una în alta (nesting).
Această funcție este folosită pentru încărcarea variabilelor din fișierele config.
2.4.4.3 {foreach }, {foreachelse}
{foreach} este folosit pentru parcurgerea array -urilor asociative indexate numeric sa u
non-numeric. Sintaxa este mai ușoară decât pentru {section} care parcurge doar array -urile
indexate numeric.
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 45
Nume atribut: Tip: Obligatoriu: Val. implicită: Descriere:
from array Da N/A Arrayul parcurs.
item string Da N/A Elementul curent.
key string Nu N/A Cheia.
item string Nu N/A Bucla foreach.
2.4.4.4 {if}, {elseif}, {else}
Structurile de decizie {if} au aceeași flexibilitate în Smarty ca și în PHP cu câteva
caracteristici adiționale pentru template -uri. Fiecare {if} trebuie să fie însoțit de un {/if} ,
{else} și {elseif} sunt deasemenea permise. Toți operatorii și funcțiile PHP sunt
recunoscute, cum ar fi ||, sau, &&, și, is_array()
2.4.4.5 {include} , etc.
Tag-urile {include} sunt folosite pentru includerea altor template -uri. Orice variabilă
din template -ul în care se face includerea este accesabilă și din template -ul care este inclus.
Nume atribut: Tip: Obligatoriu: Val. implicită: Descriere:
file string Da N/A Numele template -ului inclus.
assign string Nu N/A Numele variabilei în care va fi
salvat outputul f uncției
{include} .
[var ..] [tip var] Nu N/A Variabila trimisă în template.
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 46
2.4.4.6 {include_php}
{include_php} este folosit pentru includerea unui script php în template. Dacă
$security are valoarea enabled , atunci scriptul php trebuie să fie localizat în pat h-ul
$trusted_dir . La fel ca și varianta Smarty {include_php}
2.4.4.7 {literal} trebuie să aibă atributul file care
conține calea scriptului inclus.
{literal} permite ca blocuri de date să fie parcurse literal. Acesta este folosit de obicei
la JavaScripturi sau St ylesheet -uri care au în componența lor acolade care pot crea conflicte de
sintaxă în Smarty. Tot ce e cuprins între tagurile {literal} și {/literal}
2.4.4.8 {php} nu va fi interpretat
de Smarty ci va fi afi șat așa cum este scris.
Tagurile {php} permit includerea c odului PHP în template în mod direct. Pentru
accesarea variabilelor din blocurile {php}
2.4.4.9 {section}, {sectionelse} trebuie folosit keywordul global.
{section} este folosit pentru parcurgerea arrayurilor de date .
Nume atribut: Tip: Obligatoriu: Val. implicită : Descriere:
name string Da N/A Numele secțiunii.
loop mixed Da N/A Determină numărul de iterații.
start integer Nu 0 Indexul de la care începe
parcurgerea buclei.
step integer Nu 1 Valoarea pasului cu care va fi
parcursă bucla.
max integer Nu N/A Num ărul maxim de bucle.
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 47
show boolean Nu TRUE Afișează sau nu această
secțiune.
Parcurgerea unui array simplu cu
Template -ul care preia array -ul: {section}
Exemplul de sus va afișa:
id: 1000<br />
id: 1001<br />
{* this example will print out all the values of the $custid
array *}
{section name=customer loop=$custid}
id: {$custid[customer]}<br />
{/section}
<hr /> {* print out all the values of the $custid array reversed *} {section name=foo loop=$custid step=- 1}
{$custid[foo]}<br />
{/section} <?php
$data = array(1000, 1001,1002);
$smarty- >assign('custid', $data);
?>
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 48
{section}
2.4.4.10 {strip} -urile pot fi incluse una în alta. Astfel pot fi accesate structuri de date de o
complexitate ridicată, cum ar fi array -urile multidimensionale.
Orice conținut care este inclus între tagurile {strip} {/strip} este “curățat” de
space- uri inutile și carriage return -uri (\n
2.4.5 Funcții custom izabile ) înainte să fie afișate. Astfel template -urile sunt citibile
în orice browser și dispar spațiile albe care pot cauza probleme de design.
Smarty dispune de mai multe funcții customizabile care pot fi folosite în template -uri.
Dintre acestea amintim doar cele mai uzuale (folosite și în lucrarea de față) :
2.4.5.1 {assign}
Funcția {assign}
atribuie variabile de template în timpul execuției unui template. Un
exemplu de bază al acestei funcții poate fi văzut mai jos:
Exemplul de mai sus va avea ca output: id: 1000<br />
id: 1001<br />
id: 1002<br />
<hr />
id: 1002<br />
id: 1001<br />
id: 1000<br />
{assign var='name' value='Bob'}
The value of $name is {$name}.
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 49
Pentru accesarea variabilei atribuite dintr -un script PHP se folosește funcția
get_template_vars() . Template -ul ca re creează variabila $foo
Variabila de template este accesibilă doar după sau în timpul execuției, așa cum vedem și
în următorul script: :
2.4.5.2 {html_options}
{html_options} este o funcție customizabilă care creează grupuri <select>
<option> cu datele atribuite. Deasemenea, s pecifică și care opțiune să fie selectată implicit.
Dintre atributele obligatorii amintim values (un array de valori care vor fi listate în dropown) și
output (un array de outputuri) , care pot lipsi doar dacă se folosește options (un array asociativ
de valori și outputuri ).
În exemplul de mai jos este ilustrat cazul unui array asociativ cu atributul options : <?php
// acesta nu va afișa nimic deoarece template- ul încă nu a fost
executat
echo $smarty- >get_template_vars( 'foo');
// aduce (fetch) template- ul într- o variabilă
$whole_page = $smarty- >fetch('index.tpl');
// acesta va afișa smarty deoarece template- ul a fost executat
echo $smarty- >get_template_vars( 'foo');
$smarty- >assign('foo','Even smarter');
// acesta va afișa Even smarter
echo $smarty- >get_template_vars( 'foo');
?> {assign var='foo' value='Smarty'}
The value of $name is Bob.
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 50
Un exemplu cu baze de date poate fi urmărit în râ ndurile de mai jos:
Template -ul arată astfel:
2.4.5.3 {html_radios}
{html_radios} este o funcție customizabilă care creează grupuri de butoane radio și
specifică butonul care va fi selectat implicit. Dintre atributele obligatorii amintim value (arrayul
cu valori ), output (arrayul de output) și options (arrayul asociativ de valori și outputuri ). La <select name="type_id">
<option value='null'>– none –</option>
{html_options options=$contact_types|truncate:20
selected=$contact.type_id}
</select> <?php
$sql = 'select type_id, types from contact_types order by type'
;
$smarty- >assign('contact_types', $db->getAssoc( $sql));
$sql = 'select contact_id, name, email, contact_type_id
from contacts where contact_id='. $contact_id;
$smarty- >assign('contact', $db->getRow($sql));
?> <?php
$smarty- >assign('myOptions', array(
1800 => 'Joe Schmoe',
9904 => 'Jack Smith',
2003 => 'Charlie Brown')
);
$smarty- >assign('mySelect', 9904);
?>
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 51
fel ca în cazul {html_options} și {html_radios} poate avea ca atribute obligatorii value și
output sau options
2.4.5.4 {math} .
{math} permite designerului să folosească ecuații matematice în template. Astfel, este
permisă folosirea oricărei variabile numerice, rezultatul ecuației fiind afișate în locul tag -ului.
Variabilele folosite în ecuații sunt considerate parametri.
Nume atribut: Tip: Obligatoriu: Val. implicită: Descriere:
equation string Da N/A Ecuația care vrem să o
executăm.
format mixed Da N/A Formatul rezultatului.
var numeric Da N/A Valoarea variabilei din ecuație.
assign string Nu N/A Variabila de template î n care va
fi salvată rezultatul ecuației.
[var ..] numeric Da N/A Valoarea variabilei din ecuație.
2.4.5.5 {popup} și {popup_init}
{popup} este folosit pentru crearea layerelor și ferestrelor popup Java. Înainte trebuie
apelată funcția {popup_init}
.
În exemplul următor sunt folosite ambele funcții:
{* popup_init trebuie apelată la începutul paginii *}
{popup_init src='/javascripts/overlib.js'}
{* crearea unui link cu popup *}
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 52
2.4.6 Constante Smarty
Există două constante Smarty: SMARTY_DIR și SMARTY_CORE_DIR .
SMARTY_DIR este calea completă de sistem către locația fișierelor de clasă. Dacă acesta
nu este definit ă în script, atunci Smarty va determina valoarea în mod automat. Dacă este definit ă
însă, calea trebuie să se termine cu slash “ /
”.
<?php
// set path to Smarty directory *nix style
define('SMARTY_DIR', '/usr/local/lib/php/Smarty- v.e.r/libs/');
// path to Smarty windows style
define('SMARTY_DIR', 'c:/webroot/libs/Smarty- v.e.r/libs/');
// include the smarty class, note 'S' is upper case
require_once(SMARTY_DIR . 'Smarty.class.php');
?>
<a href="mypage.html" {popup text='This link takes y ou to my
page!'}>mypage</a>
{* popupul poate conține elemente de html *}
<a href="mypage.html" {popup sticky=true caption='mypage
contents'
text="<ul><li>links</li><li>pages</li><li>images</li></ul>" snapx=10 snapy=10 trigger='onClick'}>mypage</a>
{* un popup aplicat unei celule din tabel *}
<tr><td {popup caption='Part details'
text=$part_long_description}>{$part_number}</td></tr>
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 53
SMARTY_CORE_DIR este calea completă de sistem către locația fișierelor nu cleului
Smarty. Dacă nu este definită, Smarty va folosi valoarea implicită, care este subdirectorul sub
SMARTY_DIR . Dacă este definită, calea trebuie să se termine cu slash “/
”. Se folosește pentru
includerea manuală a fișierelor core.*.
2.4.7 Variabile de clase
Dintre variabilele de clase amintim:
$template_dir : dire ctorul implicit de template -uri.
$compile_dir : numele directorului unde se găsesc template -urile compilate.
$config_dir : directorul unde se stochează fișierele config.
$plugins_dir : directorul cu pluginuri.
$debugging : activează consola de debuggi ng.
$debug_tpl : fișierul tpl care este supus debuggingului.
$debugging_ctrl : activează diferite moduri de debugging.
$compile_check : după fiecare apelare a unei aplicații PHP, Sma rty verifică dacă nu s -a
schimbat template -ul curent.
$caching : activează sau dezactivează caching -ul outputului templatului în $cache_dir.
$config_overwrite : setează suprasrierea variabilelor config, atunci când sunt
încărcate în template. <?php
// load core.get_microtime.php
require_once(SMARTY_CORE_DIR . 'core.get_microtime.php');
?>
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 54
$default_template_handler_func : Funcție apelată când template -ul nu poate fi
găsit .
$secure_dir : un array de fișiere și directoare locale care sunt considerate securizate.
$security_setting : folosit pentru a trece peste sau a specifica setările de securitate
când $securi ty este activat.
$compile_class : specifică numele clasei de compiler pe care Smarty îl va folosi pentru
compilarea template- urilor.
$request_vars_order : ordinea în care variabilele de request sunt înregistrate.
$request_use_auto_globals : dacă e FALSE Smart y folosește $HTTP_*_VARS[]
din PHP, dacă e TRUE folosește $_*[] .
$error reporting : implicit este folosit ca și nivelul de error_reporting din PHP în
funcțiile display() și fech ().
$use_sub_dirs : Smarty va crea subdirectoare sub template- urile compilate și adaugă în
cache directoarele dacă acesta este setat pe TRUE.
$default_modifiers
2.4.8 Metode de clase : un array de modificatori pentru aplicarea implicită la fiecare
variabilă din template.
2.4.8.1 assign()
assign()
este folosit pentru atribuirea valorilor în template. Se pot transmite explicit
perechi de nume/valoare, sau array -uri asociative care conțin perechile de nume/valoare.
<?php
$smarty- >assign('Name', 'Fred');
$smarty- >assign('Address', $address);
$smarty->assign(array('city'=>'Lincoln' ,'state'=>'Nebraska' ));
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 55
Acestea sunt accesate în template cu:
2.4.8.2 display()
Aceas tă metodă afișează template- ul dacă are specificată un tip de sursă și o cale validă.
Ca și parametru opțional poate avea un $cache_id . Un alt parametru opțional este
$compile_id
, în cazul în care se dorește comilarea diferitelor versiuni al aceluiași template.
<?php
include(SMARTY_DIR. 'Smarty.class.php');
$smarty = new Smarty();
$smarty- >caching = true;
// only do db calls if cache doesn't exist
if(!$smarty- >is_cached( 'index.tpl')) {
// dummy up some data
$address = '245 N 50th';
{$Name}
{$Address}
{$city} {$state}
{$foo.no}, {$foo.label}
{$contact.id}, {$contact.name},{$contact.email} $myArray = array('no' => 10, 'label' => 'Peanuts' );
$smarty- >assign('foo',$myArray);
$sql = 'select id, name, email from contacts where contact ='.$
id;
$smarty- >assign('contact', $db->getRow($sql));
?>
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 56
2.4.8.3 clear_all_assign()
Șterge valoarea atribuită a variabilelor :
2.5 HTML
HyperText Markup Language (HTML) este un limbaj de marcare utilizat pentru crearea
paginilor web ce pot fi afișate într -un browser (sau navigator). Scopul HTML este mai degrabă
prezentarea informațiilor – paragrafe, fonturi, tabele etc. – decât descrierea semanticii
documentului. <?php
// passing name/value pairs
$smarty- >assign('Name', 'Fred');
$smarty- >assign('Address', $address);
// will output above
print_r( $smarty- >get_template_vars() );
// clear all assigned variables
$db_data = array(
'City' => 'Lincoln',
'State' => 'Nebraska',
'Zip' => '68502'
);
$smarty- >assign('Name', 'Fred');
$smarty- >assign('Address', $address);
$smarty- >assign('data', $db_data);
}
// display the output
$smarty- >display( 'index.tpl');
?>
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 57
Specificațiile HTML sunt dictate de World Wide Web Consortium (W3C).
HTML este o formă de marcare orientată către prezentarea documentelor text pe o singura
pagină, utilizând un software de redare specializat, numit agent utilizator HTML, cel mai bun
exemplu de astfel de software fiind browserul web. HTML furnizează mijloacel e prin care
conținutul unui document poate fi adnotat cu diverse tipuri de metadate și indicații de redare.
Indicațiile de redare pot varia de la decorațiuni minore ale textului, cum ar fi specificarea faptului
că un anumit cuvânt trebuie subliniat sau că o imagine trebuie introdusă, până la scripturi
sofisticate, hărți de imagini și formulare. Metadatele pot include informații despre titlul și autorul documentului, informații structurale despre cum este împărțit documentul în diferite segmente,
paragrafe, liste, titluri etc. și informații cruciale care permit ca documentul să poată fi legat de
alte documente pentru a forma astfel hiperlink- uri (sau web -ul).
HTML este un format text proiectat pentru a putea fi citit și editat de oameni utilizând un
editor de text simplu. Totuși scrierea și modificarea paginilor în acest fel solicită cunoștințe solide
de HTML. Editoarele grafice (de tip WYSIWYG) cum ar fi Macromedia Dreamweaver, Adobe
GoLive sau Microsoft FrontPage permit ca paginile web sa fie tratate asemănă tor cu documetele
Word.
HTML se poate genera direct utilizând tehnologii de codare din partea serverului cum ar
fi PHP, JSP sau ASP. Multe aplicații ca sistemele de gestionare a conținutului, wiki –
uri și forumuri web generează pagini HTML.
2.5.1 Elemente de marcare
Mai jos sunt tipurile de elemente de marcare în HTML:
• Marcare structurală. Descrie scopul unui text. De exemplu: <h1>Fotbal</h1>
Direcționeaz ă browserul pentru a reda "Fotbal" ca pe cel mai important titlu. Marcarea
structurală nu are un anumit stil pr edefinit, dar cele mai multe browsere web au
standardizat modul în care acestea sunt afișate. De exemplu, titlurile importante ( h1, h2,
etc.) sunt aldine și mai mari decât restul textului. De notat că h1 este folosit doar o
singură dată per pagină deoarece cu el este marcat titlul ei.
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 58
• Marcare pentru prezentare. Descrie cum apare un text, indiferent de funcțiile sale. De
exemplu: <strong>îngroșat</strong>
• Marcare pentru hiperlink. Leagă părți ale unui document cu alt e documente. De
exemplu: va afișa textul cu litere groase, aldine.
<a href="http://ro.wikipedia.org/">Wikipedia
Românească</a>
• Elemente speciale (widget). Creează obiecte, cum ar fi butoanele și listele. Doar
marcatorii de prezentare (împreună cu foile de stiluri – CSS) determină cum conținutul din
interiorul marcatorului va fi prezentat. Ceilalți marcatori spun browserului ce obiecte să
redea sau ce funcții să execute. va reda Wikipedia românească ca hiperlink către un URL specificat.
TAG -uri
Orice fișier HTML are următoarea stuctură:
2.5.2 XHTML
eXtensible HyperText Markup Language, sau XHTML, este un limbaj de marcare ce are
aceleași capabilități expresive ca și HTML, dar cu o sintaxă mai strictă. XHTML 1.0 a devenit o recomandare World Wide Web Consortium (W3C) pe data de 26 ianuarie 2000.
Practic XHTML este un înlocuitor modern al mai vechiului limbaj HTML, fiind aproape
identic cu standardul HTML 4.01, o versiune îmbunătățită , mult mai strictă și mai curat ă a
standardului HTML 4.0. Abstractiz ând puț in, afirm ăm că XHTML re prezint ă o definire de tip <html>
<head>
<title>Titlul</title>
</head>
<body>
</body>
</html>
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 59
XML a unui document HTML, pe scurt o combina ție între HTML ș i XML. Avantajele unei
aplicații XHTML sunt multiple: pot fi citite de toate dispozitivele XML, în timp ce p ăstreaz ă
compatibilitatea cu toate browserele de Internet mai vechi sau mai noi f ără a necesita specificaț ii
suplimentare.
Suport pentru scripting : Limbajele script JavaScript sau VBScript permit ș i mai mult
extinderea flexibilităț ii și interactivităț ii elementelor temporale din cadrul paginilor Web.
2.6 CSS
Fișierul C SS (cascading style sheet) permite separarea con ținutului (X)HTML de stilul de
afișare în pagină . Astfel (X)HTML este folosit pentru aranjarea con ținutului în pagină , și
prezentarea (fonturi, culori, fundaluri, borduri, etc.) se realizeaz ă din fi șierul CSS . În acest
moment, se pot folosi CSS -urile î n două moduri, ș i anume interne sau externe.
2.6.1 Stiluri interne
Stilurile interne sunt coduri CSS plasate în interiorul fiecărei pagini HTML , între tagurile
<head> și </head>
Folosind această metodă fiecare fișier (X)HTML va conține codul CSS folosit la stilizare.
Asta înseamnă că atunci când doriți să faceți o schimbare de stil (mărimea fontului, culoare, etc.)
va trebui s ă opera ți modificarea î n toate paginile ce con țin acel stil. . Acest lucru poate fi văzut și în exempl ul care urmează:
2.6.2 Stiluri externe
Un fișier CSS extern poate fi realizat cu orice editor simplu de text sau cu editoare
avansate gen Dreamweaver. Fișierul CSS nu conține sub nici o formă cod (X)HTML, ci doar cod
CSS. Fișie rul trebuie salvat cu extensia .css. Inserarea fișierului extern în paginile (X)HTML se
face prin plasarea unui link în secțiunea <head> </head> a fiecărei pagini pe care dorim să <head>
<title>titlu pagina</title>
<style type="text/css">Aici se definesc stilurile CSS</style>
</head>
Fundamentare teoretic ă
Universitatea “Aurel Vlaicu” Arad 60
folosim stilul respectiv. Iată un exemplu de inserare a unui fișier extern . css într -o pagină
(X)HTML:
Folosind metoda fișierelor CSS externe, toate paginile (X)HTML vor folosi același fișier
de stil. Asta înseamnă că dacă doriți să faceți o schimbare care să aibă efect în toate paginile, este
de ajuns să modificați un singur fișier, și anume cel de stil (.css), și efectul se va observa pe toate
paginile (X)HTML ce folosesc acel fișier. <link rel="stylesheet" type="text /css" href="Calea catre file .css" />
Documentația tehnică a aplicației
Univer sitatea “Aurel Vlaicu” Arad 61
Capitolul 3. Documentația tehnică a aplicației
În cadrul acestui capitol se detaliază modul în care aplicația interacționează cu utilizator ii,
respectiv sistemele cu care programul întra în contact.
3.1 Arhitectura aplicației
Lucrarea conține două părți: aplicația Sitebuilder, care va rula pe un server Web și
aplicația Fshop care va rula pe un subdomeniu de pe serverul Web pe care rulează aplicația
Sitebuilder .
Aplicația Sitebuilder este aplicația de bază prin care utilizatorul își poate crea magazin ul
virtual Fshop pe un subdomeniu ales de el (în procesul de înregistrare) . Astfel va fi posibilă
crearea mai multor magazine virtuale pe mai multe subdomenii (în limita numărului de
subdomenii alocate de serverul web) care vor fi conectate la baze de date distincte (create odată
cu crearea subdomeniilor) .
Pentru o mai bună înțelegere a grupelor de utilizatori care interacționează cu aplicația, am
introdus următoarele denumiri:
Administrator SB: proprietarul Sitebuilderului, cel care administrează aplicația de bază.
Administrator Fshop : proprietarul magazinului virtual Fshop.
Cumpărătorul: Client care vizitează magazinul virtual pentru a face cumpărături.
De menționat faptul că există un singur Administrator, spre deosebire de Utilizatori și
Cumpărători, num ărul cărora poate varia.
Documentația tehnică a aplicației
Univer sitatea “Aurel Vlaicu” Arad 62
Figura 3.1.1 Arhitectura aplicației
Figura 3.1.1 ilustrează modul în care Administratorul și Utilizatorul interacționează cu
aplicația Sitebuilder.
Figura 3.1.2 Arhitectura aplicației (vedere detaliată )
Documentația tehnică a aplicației
Univer sitatea “Aurel Vlaicu” Arad 63
În Figura 3.1.2 putem urmări arhitectura detaliată a aplicației . Se observă că Utilizatorul
are acces la baza de date Fshop doar prin aplicația Fshop.
3.2 Structura funcțională a aplicației Sitebuilder
Aplica ția Sitebuilder este administrată de administratorul SB, care în mod normal este
proprietarul aplicației Sitebuilder. Cel care beneficiază de serviciile oferite de Sitebuilder este
proprietarul magazinului . Administratorul SB va avea acces la toate tipurile de acțiuni, în timp ce
proprietarul magazinului doar la unele. F igura 3.2.1.1 ilustrează cele de mai sus:
Figura 3. 2 Schema bloc funcțională
În continuare se detaliază figura de mai sus, arătând acțiunile pe care le poate efectua
fiecare tip de utilizator și modulele de acces.
Documentația tehnică a aplicației
Univer sitatea “Aurel Vlaicu” Arad 64
3.2.1 Interfața de administrare (extranet)
Pentru partea de administrare figura este prezentată mai jos:
Figura 3. 2.1 Schema bloc funcțională a interfeței de administrare
Documentația tehnică a aplicației
Univer sitatea “Aurel Vlaicu” Arad 65
Administratorul SB va putea efectua diferite tipuri de setări și configurări. Modulul de
autentificare realizează autentificarea utilizatorului în punctul de acces al interfeței de
administrare. După confirmarea datelor introduse administratorul SB are acces la toate modulele
din extranet .
Primul este modulul de perioade abonamente. Aici administratorul SB poate schimba
perioadele d e abonare, precum și prețurile acestora. Pe lângă acestea mai poate șterge sau adăuga
abonamente noi.
Modulul de utilizatori servește la edita rea listei de utilizatori. Aici se pot edita informațiile
referitoare la userii înregistrați (proprietarii de maga zine) . De asemenea se pot activa sau
dezactiva utilizatori sau chiar șterge .
Următorul modul, modulul de template -uri face posibilă upload- ul sau ștergerea template –
urilor din site. Template -uri ce apar în template- switcherul din front -end-ul aplicației.
Ultimul modul din extranet este modulul de newsletter. Administratorul SB are
posibilitatea să modifice informațiile despre userii înregistrați la newsletter sau să -i șteargă din
lista abonaților. Deasemenea acesta este modulul prin care se pot trimite news lettere la adresele
înregistrate în lista abonaților , și pe lângă aceasta se pot vedea versiuni mai vechi de newsletter
apăsând butonul Arhive.
De menționat este faptul că toate modulele (inclusiv cel de autentificare) sunt conectate la
o bază de date com ună: _sitebuilder
• care are următoarele 7 tabele:
• sb_extranet_admin
sb_newsletter_archive
Documentația tehnică a aplicației
Univer sitatea “Aurel Vlaicu” Arad 66
•
• sb_newsletter_users
• sb_offers_period
• sb_templates
• sb_users
sb_users_subdomains
3.2.2 Interfața de client
Interfața de client , evident, permite mai puține acțiuni decât cea de administrare. Este de
fapt secțiunea “vizibilă” a aplicației, pe care o vede clientul (proprietarul magazinului î n cazul de
față).
Clientul va avea posibilitatea să creeze un subdomeniu cu magazinul personal prin 4 pași
simpli:
1. Alegerea pachetului dorit (pachetele se diferențiază între ele în primul rând prin
numărul de template -uri incluse)
2. Template -switcher: clientul poate naviga printre variantele de șabloane disponibile în
pachetul ales
3. Înregistrare: introducerea datelor: numele magazinului, perioada de închiriere și
informații de contact.
Documentația tehnică a aplicației
Univer sitatea “Aurel Vlaicu” Arad 67
4. Trimiterea datelor: după apăsarea butonului, datele sunt trimise serverului web unde
aplicația Sitebuilder crează un subdomeniu cu numele magazinului, după care trimite
un e-mail la adresa specificată de client cu d atele de acces la noul lui magazin virtual.
Figura de mai jos reprezintă schematizarea interfeței de client :
Figura 3. 2.2 Schema bloc funcțională a interfeței client
Prin accesarea siteului clienții au acces la modulele interfeței client. Pot alege un pa chet
din actualele două pachete. După care, prin modulul template -switcher pot alege din actualele 4
variante de șabloane pentru magazinul online. Șabloanele sunt niște pachete de fișiere .tpl și .css
Documentația tehnică a aplicației
Univer sitatea “Aurel Vlaicu” Arad 68
care, executate, au ca rezultat codul .html al site- ului care, împreună cu stilurile .css afișează
interfețe de magazin diferite ca și design. Aceste interfețe, însă, ca și structură funcțională sunt
identice deoarece au în spate aceeași aplicație Fshop.
Un alt modul este completarea datelor. Este de fapt fron t-end-ul aplicației prin care se
introduc datele de le client în baza de date. După apăsarea butonului se crează un subdomeniu cu
denumirea magazinului și se tre ce la ultimul pas al procesuluim, după care se trimite e -mail- ul cu
datele de acces clientului.
Newsletter -ul este un alt modul care poate fi accesat din aproape fiecare modul din site,
mai puțin din modulul template -switcher.
În figura 3.2.2 sunt afișate cu verde deschis cazurile în care sunt introduse date în baza de
date și cu verde închis cazuri le în care sunt apelate tabele și valori din baza de date. Vorbim de
aceeași bază de date ca și la interfața de administrare, însă aici sunt folosite doar 5 tabele.
3.3 Structura funcțională a aplicației Fshop
La fel ca și la aplicația Sitebuilder și în cazu l magazinului virtual Fshop avem două tipuri
de utilizatori. Primul, administratorul Fshop este proprietarul magazinului care are acces la
secțiunea extranet a siteului . Cum părătorul care vizitează magazinul virtual are acces doar la zona
“vizibilă” a site -ului, adică la interfața de client.
În figurile 3.3.a și 3.3.b sunt illustrate interf ața de client respectiv interfața de administrare
a aplicației Fshop .
Documentația tehnică a aplicației
Univer sitatea “Aurel Vlaicu” Arad 69
Figura 3. 3.a Interfața de client a aplicației Fshop
Documentația tehnică a aplicației
Univer sitatea “Aurel Vlaicu” Arad 70
Figura 3. 3.b Interfața de administrare a apl icației Fshop
3.3.1 Interfața de administrare
După parcurgerea procesului de închiriere a magazinului virtual, proprietarul magazinului
va avea acces la interfața de administrare a acestuia.
Unul dintre elementele definitorii pentru o interfața de administrare Fshop este simplitatea
în utilizare. Interfața de administrare Fshop este concepută în așa fel , să poată fi utilizată cu
ușurință de că tre orice persoan ă care a folosit deja un editor de text și are un minim de experien ță
în navigarea pe Internet, cu sigura nță nu va î ntâmpina nici o problem ă în cadrul interfe ței de
administrare. Structura funcțională poate fi urmărită în figura 3.3.1 de pe următoarea pagină .
Documentația tehnică a aplicației
Univer sitatea “Aurel Vlaicu” Arad 71
Documentația tehnică a aplicației
Univer sitatea “Aurel Vlaicu” Arad 72
În continuare se detaliază figura 3.3.1, arătând acțiunile pe care le poate efectua
administratorul Fshop cu ajutorul modulel or funcționale . De menționa este faptul că, datorită
complexității aplicației Fshop, schema funcțională ilustrată în figură conține doar modulele cele
mai importante a interfeței de administrare .
Extranetul aplicației Fshop este împărțit în 8 secțiuni. Prima secțiune este intitulată Panou
administrare și conține setări le extranet :
• Secțiuni extranet
• Câmpuri secțiuni extranet
• Filtrări secțiuni extranet
• Tab-uri secțiuni extranet
• Operații adiționale
• Utilizatori admin
• Utilizatori înre gistrați
Cea de -a doua secțiune extranet este dedicat setărilor de site. Lista următoare conține
aceste setări :
• Setări generale
• Informații de contact
• Setări comenzi
Documentația tehnică a aplicației
Univer sitatea “Aurel Vlaicu” Arad 73
• Setări catalog produse
• Setări coș de cumpărături
• Setări transport
• Setări paypal
• Setări pay ment
• Setări news
Catalog produse este secțiunea de extranet care se ocupă cu modulele de produse. Aici se
găsesc setările care se referă la produsele adăugate în baza de date.
• Categorii produse
• Firme producătoare
• Produse
• Documente produse
• Bannere promoționale
• CSV export /import
• Definire caracteristici adiționale
Următoarea secțiune este secțiunea Conținut site. Aici administratorul Fshop poate
modifica partea de conținut al site -ului. Lista completă de setări poate fi urmărită mai jos:
Documentația tehnică a aplicației
Univer sitatea “Aurel Vlaicu” Arad 74
• Prima pagină
• Termeni și condiții
• Boxuri laterale
• Sondaje
• Review -uri noi
• Editare footer
• Sitemap
• News
Cea de -a cincea secțiune este dedicată newsletterelor. Conține setări referitoare la
newsletter. Acestea sunt următoarele:
• Newsletter înscriși
• Trimite newsletter
• Arhiva newslett er
• CSV export /import utilizatori newsletter
• Grupuri newsletter
Secțiunea de Comenzi conține următoarele:
• Comenzi utilizatori
Documentația tehnică a aplicației
Univer sitatea “Aurel Vlaicu” Arad 75
• Comenzi telefonice
• Export comenzi utilizatori
Secțiunea Rapoarte conține o listă cu rapoarte și statistici care se efecuează în mag azinul
virtual și rezultatele acestora:
• Stocuri
• Statistici comenzi
• Produse vizualizate
• Produse cumpărate
• Clienți
• Raport vânzări
• Statistici magazin
• Raport căutare cuvinte
• Comenzi
• Transport
• Produse
• Utilizatori
Ultima secțiune conține lista paginilor statice cu posibilitatea de modificare a acestora.
Documentația tehnică a aplicației
Univer sitatea “Aurel Vlaicu” Arad 76
3.3.2 Interfața de client
Interfața de client este acea parte a aplicației care poate fi văzută de vizitatorul site- ului.
Aplicația Fshop oferă diferite module funcționale specifice acestei secțiuni (Fig. 3.3.2)
Documentația tehnică a aplicației
Univer sitatea “Aurel Vlaicu” Arad 77
Prin accesarea adresei URL a magazinului virtual, vizitatorul site- ului are acces la
modulele de client. Acestea sunt detaliate în următoarele rânduri î n ordinea importanței lor în
cadrul structur ii funcțional e a magazinului .
Cel mai important modul funcționa l reprezintă afișarea produselor. Este important datorită
faptului că din acest modul începe procesul de cumpărare. De menționat este faptul că afișarea
produselor poate fi de două tipuri: afișarea sub formă de listă (în pagina de home și browse, unde
sunt afișate mai multe produse) și afișarea detaliată. În figura 3.3.2 este ilustrată situația afișării
detaliate. În acest caz avem și funcționalități adiționale pentru a mări interactivitatea dintre site și client. Aceste funcționalități apar la afișarea det aliată a fiecărui produs . Vom detalia ulterior
aceste funcționalități (vezi Capitolul 4.) .
Din modulul de afișare putem ajunge în modulul de cumpărare prin apăsarea butonului de
adăugare a produsului în coșul de cum părături. Coșul de cumpărături este o pa rte extrem de
importantă din punctul de vedere al funcționalității întregului site. Din acest motiv este
implementat a.î. clientul să poată cumpăra produsul dorit în cel mai scurt timp posibil. Datorită
technologiei AJAX folosite, introducerea și procesare a datelor este mai ușoară și mai rapidă, fapt
care mărește accesibilitatea site- ului.
Modulul de căutare produse este de asemenea foarte important din punctul de vedere al
accesibilității. Este foarte importantă poziționarea acestui modul deoarece este de s folosită de
cumpărători și pe lângă acesta furnizează date statistice despre cerințele clienților (în secțiunea Rapoarte din extranet pot fi văzute căutările efectuate, în felul acesta proprietarul magazinului vede care produs este cel mai căutat) . Pentr u a mări accesibilitatea acestui modul, am atașat un
script de “auto -sugestie” care afi șează sub imputul de căutare denumirea produselor care încep cu
Documentația tehnică a aplicației
Univer sitatea “Aurel Vlaicu” Arad 78
caracterul sau șirul de caractere introdus. Vom detalia ulterior funcționarea acestui script (vezi
Capito lul 4.).
Modulul de autentificare, Login, poate fi accesat atât prin adăugarea unui produs în coș
cât și din oricare altă pagină a site -ului, cum mențiunea că în primul caz completarea datelor este
obligatorie (dacă clientul nu este încă utilizator înregistra t, completează datele sub tabul de
Înregistrare ).
Modulul de contact este importantă deoarece conține datele de contact ale firmei care
deține magazinul virtual. De asemenea, tot din acest modul clientul are posibilitatea de a trimite
un email firmei prin formularul online.
Modulul de newsletter, asemănător celui de pe Fshop (ca și funcționalitate) poate fi
accesat din toate secțiunile magazinului.
3.4 Arhitectura bazelor de date
În acest paragraf se prezintă structura bazelor de date folosite în aplicațiile Sitebuilder și
Fshop, cu accent pe Sitebuilder. Am văzut în paragraful 3.2 că toate modulele funcționale ce se găsesc în structura
funcțională a aplicației Sitebuilder sunt conectate la o bază de date comună
_sitebuilder.
Această bază de date este alcătuită din 7 tabele.
PhpMyAdmin este o aplicație web opensource scrisă în php care folosește o interfață web
modulară pentru administrarea bazelor de date MySQL. Este cea mai recunoscută aplicație în
acest domeniu.
Documentația tehnică a aplicației
Univer sitatea “Aurel Vlaicu” Arad 79
Și baza de date _sitebuilder
a fost creat prin phpMyAdmin, structura ei poate fi
urmărită în următoarea figură.
Figura 3. 4.1 Structura bazelor de date văzută din phpMyAdmin
Figura 3. 4.2 Structura unui tabel din baza de date _sitebuilder
Documentația tehnică a aplicației
Univer sitatea “Aurel Vlaicu” Arad 80
În figura 3.4.2 este prezentată structura unui tabel din baza de date. În următoarele rânduri
vom detalia cele șapte tabele din _sitebuilder .
Primul tabel este cel ilustrat în figura 3.4.2 și anume sb_extranet_admin . Acest tabel
stochează datele de acces la extranetul (interfața de administrare) aplicați ei Sitebuilder. Conține
următoarele câmpuri:
aid Conține identificator ii ID ai utilizatorilor . Acest câmp este de
tip int și are proprietatea auto-increment activată .
username Este un câmp de tip varchar care conține numele de utilizatori .
password Acest câmp de tip varchar conține parolele utilizatorilor.
level Acest câmp este de tip int și în el se introduce nivelul de acces al
utilizatorilor modulului web (admin sau clienți).
flag_status Reprezintă statusul activ /inactive al utiliyatorului. Acest câm p este
de tip int.
date_last_login În acest câmp de tip varchar sunt memorate datele ultimelor
loginuri efectuate de utilizatorii înregistrați
Cel de -al doilea tabel este sb_newsletter_archive și conține newsletterelor trimise
de pe acest site. El are următoarele câmpuri .
Naid Conține identificatorii ID ale newsletterelor . Acest câmp este de
tip int și are proprietatea auto- increment activată.
Message Mesajul emailului care este corpul newsletterului de tip text .
Subject Subiectul emailului de tip varchar .
from_email Adresa de email al expeditorului de tip varchar .
date_sent Data în care a fost trimis newsletter -ul. Acest câmp este de
tip varchar .
Result Rezultatul de tip text .
Documentația tehnică a aplicației
Univer sitatea “Aurel Vlaicu” Arad 81
Cel de -al treilea tabel se numește sb_newsletter_users și are următoarele câmpuri:
Nuid Conține identificatorii ID a i utilizatorilor abonați la newsletter.
Acest câmp este de tip int și are proprietatea auto -increment
activată.
newsletter_user Numele de utilizator de tip varchar .
flag_unsubscribe Flag-ul de dezabonare de la newsletter. Dacă este activ înseamnă
că userul s -a dezabonat de la newsletter . Câmpul este de
tip tinyint.
flag_subscribe Flag-ul de abonare la newsletter. Dacă este activ înseamnă că
userul este abonat la newsletter. Câmpul este de tip tinyint.
date_register Data de tip varchar în care s -a abonat utilizatorul.
result Rezultatul de tip text .
sb_offers_period este tabelul care conține date referitoare la abonamentele
Sitebuilder. T abelul are următoarea structură:
sopid Conține identificatorii ID ale perioadelor de abonare pentru
magazinele virtuale . Acest câmp este de tip int și are proprietatea
auto-increment activată.
period_name Denumirea abonamentului este de tip varchar .
period_cost Prețul abonamentului este de asemenea de tip varchar .
period_cost_unit Reprezintă moneda în care sunt calculate prețurile abonamentelor
și este de tip varchar .
Următorul tabel , sb_templates conține date despre template- urile uploadate (încărcate)
pe Sitebuilder.
stid Conține identificatorii ID ale șabloanelor (sa u template -urilor)
încărcate pe Sitebuilder. Acest câmp este de tip int și are
proprietatea auto -increment activată.
Documentația tehnică a aplicației
Univer sitatea “Aurel Vlaicu” Arad 82
template_name Denumirea template -ului de tip varchar .
template_short_
description Descrierea scurtă a template -ului de tip text .
template_description Descrierea completă template -ului de tip text .
template_type Tipul template -ului (din care pachet face parte), câmp de tip int.
template_file Câmpul care conține calea la template -ul decomprimat. Este de
tip text .
template_date_
registered Data încărcării template -ului de tip varchar .
flag_status Statusul template -ului activ sau inactiv. Câmp de tip int.
Cel de -al șaselea tabel este sb_users și conține date despre utilizatorii care au magazine
virtuale prin site -ul Sitebuilder.
suid Conține identificatorii ID ale șabloanelor (sau template -urilor)
încărcate pe Sitebuilder. Acest câmp este de tip int și are
proprietatea auto -increment activată.
email Aceste câmpuri conțin datele de contact ale clienților Sitebuilder.
Ele sunt confidențial e și pot fi accesate doar de proprietarul
Sitebuilderului. password
date_register
cont_type
title
full_name
l_name
cnp_cui
identity
adress
country
state
city
phone
Documentația tehnică a aplicației
Univer sitatea “Aurel Vlaicu” Arad 83
Fax
flag_status Status -ul utilizatorului activ sau inactiv de t ip int.
date_last_login Data ultimei logări de tip varchar .
Terms Acceptarea sau neacceptarea termenilor și condițiilor. Câmp de
tip text .
Ultimul tabel este sb_users_subdomains și conține date despre subdomeniile create de
utilizatorii Sitebuilder (proprietarii magazinelor virtuale) .
susdid Conține identificatorii ID ale subdomeniilor creeate de proprietarii
magazinelor virtuale. Acest câmp este de tip int și are
proprietatea auto -increment activată.
suid Conține identificatorii ID ale șabloanelor (s au template -urilor)
încărcate pe Sitebuilder. Acest câmp este de tip int și are
proprietatea auto -increment activată.
subdomain_name Denumirea subdomeniilor de tip varchar .
offer_name Perioada de abonare cu care s -au creat subdomeni ile. Câmp de
tip varchar .
sopid Conține identificatorii ID ale perioadelor de abonare pentru
magazinele virtuale. Acest câmp este de tip int și are proprietatea
auto-increment activată.
date_create Conține data creării subdomeniilor. Câmp de tip varchar .
flag_status Statusul subdomeniului de tip int.
observatii Observații, câmp de tip text .
db Denumirea bazei de date de pe subdomeniul subdomain_name .
Câmp de tip varchar .
db_user Datele de acces la baza de date db. Câmpuri de tip varchar .
db_pass
Arhitectura bazei de da te _sitebuilder este prezentată în figura 3.4.3.
Documentația tehnică a aplicației
Univer sitatea “Aurel Vlaicu” Arad 84
Figura 3. 4.3 Arhitectura bazei de date
Baza de date Fshop
Următorul tabel conține principalele tabele ale bazei de date a magazin ului virtual creat cu
Sitebuilder. Datorită complexității acestuia, vom afi șa doar tabelele care au importanță ridicată.
Câmpurile tabelor sunt afișate în coloana din dreapta.
ef_catalog_firms cfid
firm_name
firm_description
firm_logo
flag_status
Documentația tehnică a aplicației
Univer sitatea “Aurel Vlaicu” Arad 85
flag_home
ef_catalog_products pcid
url
master_flag
master_pcid
name
short_description
description
code
price_for_conversion
price
vat
flag_discount
discount_amount
flag_special_offer
homepage_flag
banner_flag
warranty
photo_thumb
flag_product_type
flag_order
flag_status
cfid
related_pcid_1
related_pcid_2
related_pcid_3
related_pcid_4
rating_no_votes
rating_no_total
flag_rating
stock
flag_available
flag_new
flag_recommend
Documentația tehnică a aplicației
Univer sitatea “Aurel Vlaicu” Arad 86
timbru_verde
meta_description
meta_keywords
ef_catalog_products_categories pcid
ccid
ef_catalog_products_comments cpcid
pcid
flag_status
rating
nume
localitate
comentariu
date_added
email
ef_catalog_products_fields pcfid
ccfid
pcid
value
price
ef_catalog_oa pcid
aid
aoid
value
ef_catalog_searches sid
stid
ip_adress
date
ef_catalog_subcategories csid
ccid
name
meta_keywords
meta_description
field_display_order
flag_status
Documentația tehnică a aplicației
Univer sitatea “Aurel Vlaicu” Arad 87
ef_cms_newsletter_users nltid
email
f_name
l_name
date_subscribe
flag_confirmation
flag_unsubscribe
ip_adress
nltgid
ef_eshop_basket_ip biid
ip
uip
pcid
qty
ef_extranet_admin aid
username
password
level
date-login
type
gid
ef_extranet_sections esid
type
section
library
name
ef_settings_product_catalog spcid
catalog_price_type
catalog_browse_category_extended
catalog_pagination
catalog_default_photo
catalog_products_comments, etc.
Utilizarea aplicației
Universitatea “Aurel Vlaicu” Arad 88
Capitolul 4. Utilizarea aplicației
Acest capitol prezintă modul în care utilizatorii (administratorul SB, administratorul
Fshop și cumpărătorul) interacționează cu aplicația Sitebuilder și cu aplicația Fshop și prezentă
aspecte de interfață într -un mod m ai detaliat. În continuare, voi prezenta modul de utilizare al
aplicației.
4.1 Aplicația Sitebuilder
După cum am văzut și în capitolul 3, lucrarea de față constă din 2 aplica ții, cea de bază
fiind aplicația Sitebuilder.
4.1.1 Interfața de administrare
Sitebuilder e ste administrat de administratorul SB care are acces, prin extranetul aplicației
la următoarele module funcționale:
Modulul de autentificare: este modulul care verifică identitatea utilizatorului care
folosește modulul de administrare Sitebuilder. Aces t modul folosește tabelul
sb_extranet_admin din baza de date , în care sunt stocate informațiile de acces ai
administratorilor (dacă sunt mai mulți) la extranet.
Modulul de abonamente comunică cu tabelul sb_offers_period
• afișarea abonamentelor existente din baza de date și
permite efectuarea următoarelor acțiuni asupra abonamentelor Sitebuilder:
• adăugarea de noi abonamente
• editarea abonamentelor: administratorul SB poate schimba denumirea, prețul și
moneda în care sunt prezentate prețurile.
• ștergerea abonamentelor
Utilizarea aplicației
Universitatea “Aurel Vlaicu” Arad 89
Modulul de utilizatori folosește tabelul sb_users și sb_users_subdomains
• activarea/dezactivarea utilizatorilor și este un
modul prin care administratorul are acces la lista de utilizatori înregistrați pe site -ul Sitebuilder.
Aceștia sunt de fapt proprietarii de magazine virtuale. Administr atorul SB poate efectua
următoarele modificări:
• editarea utilizatorilor: constă în modificarea datelor personale ale utilizatorilor.
• ștergerea utilizatorilor
• afișarea subdomeniilor pe care le au închiriate utilizatorii
Modulul de template -uri este deosebit de important în structura funcțională a aplicației
Sitebuilder. Administratorul SB poate adăuga noi template -uri prin formularul de adăugare
conectat la tabelul sb_templates
• Nume template din baza de date a aplicației . Acest formu lar conține
următoarele câmpuri:
• Tip: pachetul din care face parte
• Descriere scurtă
• Descriere
• Fișier: fișierul comprimat în care sunt stocate fișierele template -ului
• Status: activ sau inactiv
Prin accesarea modulului de newsletter administrat orul poate vedea lista utilizatorilor
abonați la newsletter. Și aici avem o serie de acțiuni ce pot fi efectuate asupra utilizatorilor:
• afișarea utilizatorilor abonați la newsletter
• modificarea datelor: email, confirmare, ștergere din listă
Utilizarea aplicației
Universitatea “Aurel Vlaicu” Arad 90
• ștergerea utilizatorilor
• trimiterea newsletterelor: prin specificarea următoarelor câmpuri: numele
expeditorului, adresa email al expeditorului, subiectul newsletterului, mesajul de
dezabonare, mesajul newsletterului
• arhiva de newsletter: o listă cu newsletterele deja tr imise
4.1.2 Interfața de client
După accesarea adresei URL a site- ului Sitebuilder, vizitatorii site -ului au acces la
interfața de client a site -ului.
Figura 4.1.a Prima pagină a site -ului Sitebuilder
Utilizarea aplicației
Universitatea “Aurel Vlaicu” Arad 91
Funcția principală a interfeței client este aceea de a conv inge și a ghida utilizatorul pe
parcursul procesului de închiriere a magazinului virtual, în consecință layoutul interfeței se
axează pe elementele care facilitează aceste lucruri.
Pagina de început are ca element principal legătura sub formă de buton la pagina de
alegere a pachetelor (pasul 1 din proces) ilustrată în figura 4.1.b.
Figura 4.1.b Pasul 1
Pagina de început are ca element principal legătura sub formă de buton la pagina de
alegere a pachetelor (pasul 1 din proces) ilustrată în figura 4.1.b. Această pagină conține
specificațiile pachetelor ilustrate sub formă tabelară, pentru o înțelegere mai bună a serviciilor
incluse în pachetele disponibile.
Utilizarea aplicației
Universitatea “Aurel Vlaicu” Arad 92
În josul paginii avem câte un buton pentru fiecare pachet care face legătura la următorul
pas, care es te template -switcher -ul prezentat în figura următoare:
Figura 4.1.c Pasul 2: template -switcher
Pagina ilustrată mai sus este compusă din două secțiuni, din punctul de vedere al codului
html: secțiunea de switcher (aflată în partea superioară a paginii) ș i secțiunea de prezentare (în
partea inferioară a paginii, ocupând un loc semnificativ în layoutul paginii) . Realizarea acestei
aranjări ale elementelor este posibilă cu ajutorul folosirii iframe -urilor.
Funcționarea acestui template -switcher este foarte s implă: utilizatorul poate schimba
modul de afișare al magazinului virtual alegând dintre opțiunile select- box-ului din secțiunea de
switcher. În momentul în care este selectată o opțiune din box, automat se schimbă layout -ul
secțiunii de prezentare în conf ormitate cu șablonul selectat. De menționat este faptul că în select –
Utilizarea aplicației
Universitatea “Aurel Vlaicu” Arad 93
box apar doar șabloanele care sunt incluse în pachetul de servicii ales. Iar, în cazul în care
utilizatorul nu găsește un șablon care să -i placă în pachetul respectiv, el are posibilitate a să- și
aleagă alt pachet apăsând butonul de „Alege alt pachet” care îl trimite înapoi la pasul 1.
Butonul din dreapta paginii face legătura dintre pasul 2 și pasul 3. Pasul trei arată astfel:
Figura 4.1.d Pasul 3: completarea datelor
Formul de înregist rare aflat la pasul 3 este unul simplificat și foarte intuitiv. În prima
parte utilizatorul completează câmpurile care se referă la magazinul virtual: numele magazinului
(câmp alfanumeric: nu poate conține caractere speciale) și perioada de închiriere. Iar în cea de -a
doua parte trebuie completate datele de contact a per soanei care cumpără abonamentul: nume,
prenume, adresa email, număr telefon, compania reprezentanta, CNP /CUI și adresa.
Ultimul câmp este un Captcha. Acesta este un sistem de prevenire a sp amului. Există
multe programe de calculator, denumite boți, care adună adrese de email . Această metodă
automată determin ă dacă utilizatorul un ei aplicații este o persoană sau un program de calculator .
Forma cea mai răspîndită de C aptcha se prezintă sub for ma unei imagini care conține litere
Utilizarea aplicației
Universitatea “Aurel Vlaicu” Arad 94
distorsionate pe care utilizatorul trebuie să le recunoască și să le reintroducă de la tastatură,
pentru a dovedi că el este o persoană, și nu un program. În cazul Sitebuilderului avem o adunare
simplă al cărei rezultat trebuie introdus în câmpul alăturat pentru a putea avansa la pasul următor.
Am introdus această măsură de siguranță datorită faptului că la apăsarea butonului de
avansare se crează un subdomeniu. Numărul subdomeniilor aprobate de serverul web fiind
limita t, această măsură de siguranță nu poate lipsi din Sitebuilder .
La apăsarea butonului de “Mergi la pasul următor” datele sunt trimise către aplicația
Siteb uilder și se crează subdomeniul cu magazinul virtual (Fshop + baza de date) pe acel
subdomeniu. După care apare următoarea pagină:
Figura 4.1.e Pasul 4: A fișarea datelor de acces la sit -ul creat
Toate datele de contact afișate în pagina de mai sus, la pasul 4, vor fi trimise la adresa de
email specificată în câmpul de email.
Utilizarea aplicației
Universitatea “Aurel Vlaicu” Arad 95
4.1.3 Funcții semnificative
Aplicația este implementată în PHP. În acest paragraf voi prezent a modul ele (secvențe de
cod) PHP imporante și voi explica funcționarea lor. Pentru o înțelegere mai bună a procesului de
creeare a magazinului virtual, mai jos sunt enumerați p așii prin care se ajunge la un subdomeniu
cu un nou magazinul virtual Sitebuilder :
1. Se creează un director pe domeniul aplicației Sitebuilder (ex.
http://sitebuilder.ro/magazinulmeu/)
2. Se creeaz ă baza de date și fișierul de configurare
3. Baza de date, împreună cu fișierul de c onfigurare sunt introduse în directorul creat
4. Se decomprimează pachetul de tpl -uri în interiorul directorului (în subdirectorul
templates)
5. Se creaza subdomeniul (ex. http://magazinulmeu.sitebuilder.ro/ )
6. Se copiază datele din director în subdomeniu.
Cele mai importante clase de funcții se găsesc în directorul classes:
Figura 4.1.3 Funcții semnificative
Utilizarea aplicației
Universitatea “Aurel Vlaicu” Arad 96
Pentru crearea bazelor de date trebuie accesat aplicația Cpanel care este o aplicație prin
care se pot accesa și administra date și informații cum ar fi spa țiul alocat pe server, căsuțele de
email, subdomeniile, bazele de date ș.a. Pentru a crea o bază de date , trebuie accesată secțiunea
MySQL Databases din Cpanel , iar acolo completate câmpurile necesare.
Pentru automatizarea acestui procedeu am folosit un sc ript predefinit care accesează
aplicația Cpanel și creează o bază de date. Funcția care face acest lucru se află în curl.class.php .
Cele mai importante funcții din această clasă pot fi văzute mai jos:
public function setCurl($theURL=null) {
if (!function_exists('curl_init')) {
trigger_error('PHP was not built with –with- curl,
rebuild PHP to use the curl class.', E_USER_ERROR); }
$this- >m_handle = curl_init();
$this- >m_caseless = null;
$this- >m_header = null;
$this- >m_options = null;
$this- >m_status = null;
$this- >m_followed = null;
if (!empty($theURL)) {
$this- >setopt(CURLOPT_URL, $theURL);
}
$this->setopt(CURLOPT HEADER, false);
Utilizarea aplicației
Universitatea “Aurel Vlaicu” Arad 97
$this->setopt(CURLOPT_RETURNTRANSFER, true);
}
public function post($url,$post) {
$this- >setCurl($url);
$this- >setopt(CURLOPT_FOLLOWLOCATION, true);
$this- >setopt(CURLOPT_POST, true);
$this- >setopt(CURLOPT_POSTFIELDS, $this-
>asPostString($post));
$results = array();
$results['exec'] = $this- >exec();
$results['error'] = $this- >hasError();
$this- >close();
return $results; }
function get($url,$get) { $this- >setCurl(urldecode($url . '?' . $this-
>asPostString($get)));
$this- >setopt(CURLOPT_FOLLOWLOCATION, true);
$this- >setopt(CURLOPT_HTTPHEADER, array("Accept:
text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,
Utilizarea aplicației
Universitatea “Aurel Vlaicu” Arad 98
text/plain;q=0.8,image/png,*/*;q=0.5",
"Accept-
Language: ru- ru,ru;q=0.7,en- us;q=0.5,en;q=0.3",
"Accept-
Charset: windows- 1251,utf- 8;q=0.7,*;q=0.7",
"Keep- Alive:
300")
);
$this- >setopt(CURLOPT_REFERER,
$_SERVER['HTTP_REFERER']);
$this- >setopt(CURLOPT_USERAGENT,
$_SERVER['HTTP_USER_AGENT']);
$results = array();
$results['exec'] = $this- >exec();
$results['error'] = $this- >hasError();
$this- >close();
return $results;
}
public function exec() {
$theReturnValue = curl_exec($this- >m_handle);
$this- >m_status = curl_getinfo($this- >m_handle);
$this- >m_status['errno'] = curl_errno($this-
>m_handle);
$this- >m_status['error'] = curl_error($this-
>m_handle);
Utilizarea aplicației
Universitatea “Aurel Vlaicu” Arad 99
De menționat este faptul că modulul cURL (librăria a fost creată de Daniel Stenberg) este
componentă a php -ului și poate fi folosită pentru conectarea la servere web prin diferite
protocoale. Eu am folosit acest modul pentru crearea bazelor de date. Putem observa în cele de
mai sus că sunt folosite funcțiile POST și GET pentru trimterea variabilelor la un url specificat. $this->m_header = null;
if ($this- >m_status['errno']) {
return '';
}
if ($this- >getOption(CURLOPT_HEADER)) {
$this- >m_followed = array();
$rv = $theReturnValue; while (count($this- >m_followed) <= $this-
>m_status['redirect_count']) {
$theArray = preg_split("/(\ r\n){2,2}/",
$rv, 2);
$this- >m_followed[] = $theArray[0];
$rv = $theArray[1];
}
$this- >parseHeader($theArray[0]);
return $theArray[1];
}
else { return $theReturnValue;
}
}
Utilizarea aplicației
Universitatea “Aurel Vlaicu” Arad 100
Această clasă cURL este apelată din functions.lib.php la crearea bazelor de date. Funcția are ca
parametri variabilele sub formă de array pentru completarea formularului de creare de baze de
date din aplicația Cpanel. Mai jos este afișat codul care face acest lucru:
function create_database($db,$db_user,$db_pass){
include('../classes/curl.class.php');
$curl = new Curl();
//cPanel Info
//$box_num = 000;
$sPanet_domain = 'tadelos.ro';
$cPanel_user = 'tadelos';
$cPanel_pass = 'palarii*20|09*';
$cPanel_theme = 'x3';
//Database to create
$db = $db;
$db_user = $db_user;
$db_pass = $db_pass;
//Permission must stay in uppercase. This will give the
user full permissions. Remove the ones that you don't want.
$permissions = array('SELECT' => 'SELECT', 'INSERT' =>
'INSERT', 'UPDATE' => 'UPDATE', 'DELETE' => 'DELETE',
'CREATE' => 'CREATE', 'ALTER' =>
'ALTER', 'DROP' => 'DROP', 'LOCKTABLES' => 'LOCK',
'INDEX' => 'INDEX', 'REFERENCES' =>
'REFERENCES', 'CREATETEMPORARYTABLES' => 'TEMPORARY', 'CREATEROUTINE' => 'CREATEROUTINE');
//Do It
Utilizarea aplicației
Universitatea “Aurel Vlaicu” Arad 101
$host = 'http://' . $cPanel_user . ':' . $cPanel_pass .
'@' . $sPanet_domain;
$url = $host .
':2082/frontend/'.$cPanel_theme.'/sql/addb.html';
$data = array('db' => $db);
$results = $curl- >post($url,$data);
if (empty($results['error'])) {
//echo 'Database created<br/>';
$url = $host .
':2082/frontend/'.$cPanel_theme.'/sql/adduser.html'; $data = array('user' => $db_user, 'pass' => $db_pass,
'pass2' => $db_pass); $results = $curl- >post($url,$data);
if (empty($results['error'])) {
//echo 'User created<br/>';
$url = $host .
':2082/frontend/'.$cPanel_theme.'/sql/addusertodb.html';
$data_user = array('user' => $cPanel_user . '_' .
$db_user,'db' => $cPanel_user . '_' . $db); $data = array_merge($data_user,$permissions);
$results = $curl- >post($url,$data);
if (empty($results['error'])) {
//echo 'User added to database';
}else{
die('ERROR: There was and error adding the user
to the database'); }
}else{
Utilizarea aplicației
Universitatea “Aurel Vlaicu” Arad 102
După crearea bazei de date, aplicația Fshop folosește anumite constante pentru conectarea
la baza de date, aceste constante sunt stocate în fișierul config_sub.php.
Următoarea clasă care este de asemenea foarte importantă este clasa zipArch . Aceast ă
clasă are mai multe metode dar metoda care ne interesează în momentul de față este metoda
unzip
.
function unzip($src_file, $dest_dir=false,
$create_zip_name_dir=true, $overwrite=true)
{
if(function_exists("zip_open"))
{
if(!is_resource(zip_open($src_file)))
{
$src_file=dirname($_SERVER['SCRIPT_FILENAME'])."/".$src_fi
le;
}
if (is_resource($zip = zip_open($src_file)))
{
die('ERROR: There was and error creating the user');
}
}else{
die('ERROR: There was and error creating the
database');
}
}
Utilizarea aplicației
Universitatea “Aurel Vlaicu” Arad 103
$splitter = ($create_zip_name_dir === true) ?
"." : "/";
if ($dest_dir === false) $dest_dir =
substr($src_file, 0, strrpos($src_file, $splitter))."/";
// Create the directories to the
destination dir if they don't already exist
$this->create_dirs($dest_dir);
// For every file in the zip- packet
while ($zip_entry = zip_read($zip))
{
// Now we're going to create the
directories in the destination directories
// If the file is not in the root
dir
$pos_last_slash =
strrpos(zip_entry_name($zip_entry), "/");
if ($pos_last_slash !== false)
{
// Create the directory where
the zip- entry should be saved (with a "/" at the end)
$this-
>create_dirs($dest_dir.substr(zip_entry_name($zip_entry), 0,
$pos_last_slash+1));
}
// Open the entry
if
Utilizarea aplicației
Universitatea “Aurel Vlaicu” Arad 104
if
(zip_entry_open($zip,$zip_entry,"r"))
{
// The name of the file to save
on the disk
$file_name =
$dest_dir.zip_entry_name($zip_entry);
// Check if the files should be
overwritten or not
if ($overwrite === true ||
$overwrite === false && !is_file($file_name)) {
// Get the content of the
zip entry $fstream =
zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
if(!is_dir($file_name))
file_put_contents($file_name, $fstream );
// Set the rights
if(file_exists($file_name))
{
chmod($file_name,
0777);
//echo "<span
style=\"color:#1da319;\ ">file saved: </span>".$file_name."<br
/>";
}
Utilizarea aplicației
Universitatea “Aurel Vlaicu” Arad 105
else
{
//echo "<span
style=\"color:red;\ ">file not found: </span>".$file_name."<br
/>";
}
}
// Close the entry
zip_entry_close($zip_entry);
}
}
// Close the zip- file
zip_close($zip);
}
else
{
echo "No Zip Archive Found.";
return false;
}
return true;
}
else
{
if(version_compare(phpversion(), "5.2.0", "<"))
$infoVersion="(use PHP 5.2.0 or later)";
Utilizarea aplicației
Universitatea “Aurel Vlaicu” Arad 106
Parametri funcției unzip sunt $src_file : sursa fi șierului zip uploadat din admin,
$dest_dir : destina ția, $create_zip_name_dir : poate fi TRUE sau FALSE ( se creează sau
nu directorul cu numele zipului ), $overwrite : pentru rescrierea fișierelor acest pa rametru se
pune TRUE . Php- ul are și el funcții zip implicite. Verifică dacă fișierul zip există în sursă și dacă
există îl deschide cu zip_open
. După ce- l deschide, îl parcurge, adică intră în fiecare folder.
Este o funcție recursivă care citește fiecare f older și îl creează la destinația din parametru. După
care intră în acel folder și îl parcurge.
Clasa de subdomenii folosește metode similare cu cele din clasa cURL. Mai jo s pot fi
urmărite aceste metode :
//definding main class
class cpsubdomain{
//declare public variables
var $cpuser; // cPanel username
var $cppass; // cPanel password
var $cpdomain; // cPanel domain or IP
var $cpskin; // cPanel skin. Mostly x or x2.
//defining constructor
function cpsubdomain($cpuser,$cppass,$cpdomain,$cpskin='x'){
$this- >cpuser=$cpuser;
$this->cppass=$cppass;
echo "You need to install/e nable the
php_zip.dll extension $infoVersion";
}
}
Utilizarea aplicației
Universitatea “Aurel Vlaicu” Arad 107
$this->cpdomain=$cpdomain;
$this->cpskin=$cpskin;
// See following URL to know how to determine your cPanel
skin
// http://www.zubrag.com/articles/determine- cpanel-
skin.php }
//function for creating subdomain
function createSD($esubdomain){
//checking whether the subdomain is exists
$subdomain=$esubdomain.".".$this- >cpdomain;
$path="http://".$this- >cpuser.":".$this- >cppass."@".$this-
>cpdomain.":2082/frontend/".$this-
>cpskin."/subdomain/index.html";
$f = fopen($path,"r");
if (!$f) {
return('Can\ 't open cPanel');
}
//check if the account exists
while (!feof ($f)) {
$line = fgets ($f, 1024);
if (ereg ($subdomain, $line, $out)) {
return('Such subdomain already exists.');
}
}
fclose($f); //close the file resource
//subdomain does not already exist. So proceed to creating
it
Utilizarea aplicației
Universitatea “Aurel Vlaicu” Arad 108
Observăm că în această clasă, în loc de funcțiile POST și GET sunt folosite funcțiile
fopen și fgets . Fopen deschide calea care i -o dăm, iar fgets
returnează fiecare linie din calea
respectivă.
$path="http://".$this ->cpuser.":".$thi s->cppass."@".$this –
>cpdomain.":2082/frontend/".$this-
>cpskin."/subdomain/doadddomain.html?domain=".$esubdomain."&rootdomain=".$this- >cpdomain;
$f = fopen($path,"r");
if (!$f) {
return('Can\ 't open cPanel.');
}
//check if the subdomain added
while (!feof ($f)) {
$line = fgets ($f, 1024);
if (ereg ("has been added.", $line, $out)) {
return('Subdomain created successfully');
}
}
fclose($f); //close the file resource
//return success message
return "There may be some error while creating
subdomain."; }
}
Utilizarea aplicației
Universitatea “Aurel Vlaicu” Arad 109
4.2 Aplicația Fshop
După parcurgerea procesului de închiriere prezentat în subcapitolul precedent , noii
administratori Fshop vor putea accesa magazinul virtual creat la adresa specificată în email -ul
trimis de către site .
Figura 4.2.a Prima pagină a magazinului virtual Fshop. A ccesarea interfeței de administrare în bara de
adrese a browserului.
Utilizarea aplicației
Universitatea “Aurel Vlaicu” Arad 110
Figura 4.2.c Prima pagină a magazinului virtual Fshop. Accesarea interfeței de administrare în bara de
adrese a browserului.
Utilizarea aplicației
Universitatea “Aurel Vlaicu” Arad 111
În cazul în care s -a selectat template -ul „Galant”, proprie tarul magazinului va vedea o
pagină asemănătoare cu cea d in figura 4.2.a . El va putea intra în interfața de administrare sciind
în bara de adrese „ /extranet ” imediat după adresa actuală.
Figura 4.2.b Interfața de administrare Fshop
Înainte de accesarea i nterfeței de administrare, proprietarul magazinului trebuie să
introducă datele de acces pe care le- a primit în emailul primit de pe site -ul Sitebuilder. După
acesta el are acces la interfața de administrare. Interfața de administrare (Figura 4.2.b), așa c um
am văzut în capitolul precedent, este împărțită în 8 secțiuni.
Realizarea, punerea în funcțiune și rezultatele experimentale
Universitatea “Aurel Vlaicu” Arad 112
Capitolul 5. Realizarea, punerea în funcțiune și rezultatele experimentale
5.1 Realizarea aplicației
Aplicația ce constituie tema lucrării de față este alcătuită din două părți: aplicația
Sitebuilder, care reprezintă aplicația de bază a lucrării și aplicați a Fshop. Aceste două aplicații
sunt realizate în PHP. Pentru stocarea datelor și informațiilor s -a folosit baza de date MySQL.
Realizarea aplicației a început prin stabilirea tipurilor de utilizatori ai aplicației, acțiunile
pe care fiecare utilizator le va putea face și cum vor fi aceste acțiuni organizate în aplicație. Apoi
au fost stabilite informațiile ce urmau să fie transmise.
După stabilirea datelor și informațiilor care trebuiau transmise, am trecut la partea de
implementare a interfeței cu utiliz atorul în PHP. Implementarea fișierelor PHP a început cu
modulul de autentificare. A urmat realizarea bazei de date în phpMyAdmin.
Implementarea HTML a site -ului a durat câteva zile, după un layout făcut în prealabil în
Photoshop. Dar înainte de asta a tre buit să implementez interfața de extranet, care nu conține
foarte multe elemente de design. Nu am acordat mare importanță designului acestei părți datorită
faptului că nici end -user-ul și nici cumpărătorul magazinului virtual nu va interacționa cu această
interfață.
După realizarea implementării de layout am studiat platforma Fshop, care stă la baza
magazinelor virtuale care urmau să fie create.
Am implementat modulul de creare a directoarelor pe domeniul aplicației Sitebuilder.
Acest modul este foarte important pentru că datele necesare creării magazinului virtual sunt
stocate temporar în aceste directoare. Au urmat modulele de creare a bazelor de date și a
subdomeniilor, ambele detaliate în capitolul precedent.
Pe urmă, am creat modulul încărcare și modulul despachetare a template- urilor
(șabloanelor).
Realizarea, punerea în funcțiune și rezultatele experimentale
Universitatea “Aurel Vlaicu” Arad 113 După crearea modulelor, m -am asigurat că procesul de creare a subdomeniilor și de
copiere a fiși erelor merge fără să apăra probleme.
5.2 Rezultate experimentale
Atăt în cursul dezvoltării aplicației cât și la finalul acesteia a fost testată permanent
funcționarea corectă a modulelor acesteia. După efectuarea unei acțiuni, am verificat dacă
rezultatul din baza de date este cel preconizat. În caz contrat, am încercat să găsesc și să remediez
problema.
După finalizarea aplicației, aceasta a fost testată. Testarea programului a fost facută cu
succes, rezultatele fiind cele așteptate.
Concluzii
Universitatea “Aurel Vlaicu” Arad 114
Capitolul 6. Concluzii
6.1 Obiective realizate
În cadrul acestui subcapitol se vor detalia obiectivele reali zate în cadrul acestei lucrări.
Aplicația, cu ajutorul sistemului de vânzare eCommerce, pune la dispoziție utilizatorilor
pachete de magazine virtuale. Sitebuilder rul ează pe un server Web și face posibilă închirierea de
magazine virtuale într -un timp foarte scurt, parcurgând cei 4 pași, detaliați în capitolele
precedente.
Atât aplicația Sitebuilder (care constituie tema lucrării) cât și aplicația Fshop lucrează cu
două tipuri de utilizatori. Site-ul Sitebuilder este administrat de A dministrator ul SB (SiteBuilder)
și proprietarul magazinului este cel care beneficiază de ser viciile oferite de Sitebuilder.
După realizarea magazinului virtual Fshop, însă rolul administratorului este al
proprietarului magazinului, el devenind administratorul Fshop. Cumpărătorul este cel de -al doilea
tip de utilizator, și anume vizitatorul siteului.
Se observă și în capitolele precedente că, atât arhitectura aplicației cât și designul
interfeței face ca proprietarii de magazine să poată administra magazinul fără dificultăți majore.
Același lucru se poate spune și despre clienții acestora care vor putea găsi produsele căutate în cel
mai scurt timp datorită layoutu lui axat p e funcționalitatea de cumpărare, care stă la baza
template -urilor folosite.
6.2 Direcții de dezvoltare
Momentan, modificările care sunt făcute pe platforma Fshop trebuie făcute separat pe
fiecare subdomeniu, deoarece fiecare subdomeniu conține o aplicație Fsh op care periodic trebuie
upgradat. Aceasta poate deveni o problemă în cazul în care se creează mai mult de 20
subdomenii. Pentru a îmbunătăți această aplicație, se poate găsi o cale pentru centralizarea
funcționalităților a.î. modificările acestea să trebu iască făcute doar într -un singur loc .
Universitatea “Aurel Vlaicu” Arad 115 BIBLIOGRAFIE
[1] Zorayda Ruth Adams (2003) e -Commerce and e -Business
[2] Steven Holzner (2005) Ini țiere în PHP5
[3] Traian Anghel (2005 ) Dezvoltarea aplicațiilor web folosind XHTML, PHP și MySQL
[4] Monte Ohrt, Andrei Zmievski (2007) Smarty Manual
[5] Ma rc Delisle (2006) Mastering phpMyAdmin For Effectiv e MySQL Management, 3rd Edition
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Șef lucr. dr. ing. Ioan Emeric K öles [611879] (ID: 611879)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
