Sunteți pe pagina 1din 66

Universitatea Politehnica Timișoara

Facultatea de Automatică și Calculatoare


Programul de Licență: Ingineria Sistemelor

CREAREA UNUI MAGAZIN VIRTUAL


FOLOSIND TEHNOLOGII WEB ACTUALE

Lucrare de licență

Student:

Sebastian Flavius Șorobetea

Conducător științific:
Prof. Dr. Ing. Ioan FILIP

Timișoara, 2021

1
CUPRINS

CAPITOLUL 1. INTRODUCERE ...........................................................................................................................3


1.1. Importanța WEB-ului în dezvoltarea comerțului electronic .................................................................3
1.2. Internet și WWW ...................................................................................................................................4
1.2.1. Internetul........................................................................................................................................4
1.2.2. Serviciul WWW ...............................................................................................................................6
1.3. Specificații de proiectare ale aplicațiilor web .......................................................................................7
1.4. Structura lucrării....................................................................................................................................9
CAPITOLUL 2. TEHNOLOGII ȘI MEDII DE PROGRAMARE PENTRU CREAREA MAGAZINELOR ELECTRONICE ..10
2.1. Comerțul electronic, prezent și viitor..................................................................................................10
2.2. Limbajul HTML, limbajul specific realizării paginilor web pentru comerțul online .............................12
2.2.1. Prezentare HTML ..........................................................................................................................12
2.2.2. Caracteristici ale HTML .................................................................................................................12
2.3. Limbajul PHP........................................................................................................................................13
2.4. Limbajul MySQL ...................................................................................................................................15
2.5. Tehnologii actuale și de viitor în comerțul electronic .........................................................................16
CAPITOLUL 3. REALIZAREA APLICAȚIEI PRACTICE MAGAZIN IT SHOP ............................................................18
3.1. Descrierea componentelor aplicației ..................................................................................................18
3.1.1. Structura generală a aplicației......................................................................................................18
3.1.2. Funcțiile aplicației.........................................................................................................................19
3.1.3. Injectarea SQL...............................................................................................................................19
3.1.4. Scriptul de accesare al aplicației (index.php ................................................................................20
3.2. Componenta Client..............................................................................................................................23
3.2.1. Funcții de ansamblu .....................................................................................................................23
3.2.2. Tabelele componentei client ........................................................................................................24
3.2.3. Scripturile componentei Client.....................................................................................................31
3.3. Componenta Administrare ..................................................................................................................46
3.3.1. Funcții generale ............................................................................................................................46
CAPITOLUL 4. MANUAL DE UTILIZARE ...........................................................................................................55
CAPITOLUL 5. CONCLUZII ...............................................................................................................................59
BIBLIOGRAFIE .................................................................................................................................................61
ANEXA.............................................................................................................................................................62

2
CAPITOLUL 1. INTRODUCERE

1.1. Importanța WEB-ului în dezvoltarea comerțului electronic


Comerțul electronic, din punct de vedere informatic, poate fi definit ca ansamblul proceselor
software și aplicațiilor și tehnologiilor de rețea care sunt necesare ca o afacere să poată funcționa în
mediul online prin transmiterea unor fluxuri de date care să poată fi utilizate de către un utilizator
potențial.
Comerțul electronic presupune, în primul rând, utilizarea mediului Internet și tehnologiilor
din domeniul comunicațiilor digitale. Aplicațiile de comerț electronic sunt orientate, în primul rând
către client și sunt aplicații Business To Consumer (B2C) dar și spre comercianții revânzători , adică
aplicații Business To Business (B2B), vezi figura 1.

Figură 1 B2C versus B2B


Principalele cerințe necesare aplicațiilor de comerț online sunt [Ivan, 2002)>
- realizarea de interfețe prietenoase, ușor de utilizat pentru necunoscători în tehnologia informației;
- realizarea de aplicații fiabile, dinamice, ușor de navigat în ele, cu orice browser;
- crearea unui nivel de securitate ridicat, atât pentru utilizator cât și pentru administrator;
- viteză mare de prelucrare și transmitere a datelor introduse de client.
Prin intermediul platformelor de comerț electronic relațiile dintre producători și clienți se
schimbă radical și se globalizează. De exemplu, un vânzător care are un sait de cmpărături în
România, vinde produse prin licitație pe eBay, cu transportul lor de la furnizorul chinez, care
primește produsul de la producătorul japonez.
Participanții principali ai unei activități e-Commerce, bazată pe web și internet sunt
prezentați în figura 2:

3
Figura 2. Participanții la o activitate de comerț electronic
O aplicație de comerț electronic trebuie să conțină, printre altele, aplicații informatice pentru:
- gestiunea produselor de pe sait, prin gestiunea catalogului de produse;
- gestiunea clienților care se loghează pe platformă
- gestiunea comenzilor efectuate de clienți;
- gestiunea plăților care pot fi efectuate prin diverse metode.

1.2. Internet și WWW

1.2.1. Internetul
Internetul este o rețea de rețele de calculatoare, interconectate în vederea partajării
resurselor acestor rețele. Comunicarea prin Internet, comunicarea între calculatoarele din rețelele
internet se bazează pe protocoale. Comunicarea prin Internet implică o comunicare posibilă între
oricare dintre calculatoarele conectate la rețeaua de calculatoare. Aceste calculatoare, dispozitive
mobile, aparatura casnică, etc. sunt identificate în rețeaua Internet prin intermediul unei adrese
speciale, unică pentru fiecare device, numită adresă IP
Funcționarea fizică a Internetului se bazează pe conexiuni, care reprezintă servicii generate
de către ISP (Internet Service Provider) și care pot fi:
- conexiuni DSL (Digital Subscriber Line);
- conexiuni ASDL (Asymetric Digital Subscriber Line);
- conexiuni Wireless (Wi0Fi);
- conexiuni prin fibră optică;
Comunicarea între dispozitivele conectate la Internet are loc printr-un limbaj de
comunicare care, prin intermediul protocoalelor, permite ineteroperabilitatea între dispozitivele
eterogene, membre ale rețelei Internet.
Rețeaua Internet oferă servicii, precum:
- transferul fișierelor de la un dispozitiv la altul;
- partajarea fișierelor. Se permite ca un fișier stocat pe un dispozitiv de stocare de pe un calculator
din rețea să fie utilizat de pe un alt calculator din rețea;
4
- mesagerie electronică, comunicare live și comunicare media;
- controlul unui calculator din rețea de pe alt calculator din rețea;
- acces la diverse baze de date din Internet;
- administrare și gestiunea rețelei:
-etc.

Figura 2. Arhitectura de asnsamblu a Internetului


Sursa: http://docshare03.docshare.tips/files/25802/258028444.pdf

Figura 3 Ierarhia structurală a Internetului


Sursa: http://cristina-bogdan.blogspot.com/p/arhitectura-internetului.html

5
Figura 4. Componente ale rețelei internet locale
Sursa: http://telecom.etti.tuiasi.ro:81/telecom/staff/lscripca/RCSO%20curs/1.pdf

Atunci când trimitem un mesaj de email, atunci când discutăm online cu cineva folosind
rețeaua mondială, atunci când accesăm un apel video, vorbim despre Internet.

1.2.2. Serviciul WWW

Atunci când deschidem un sait pentru informații sau căutăm informații, folosind de exemplu
motorul de căutare google.com utilizăm o rețea de servere fizice și servere web aflate în rețele de
calculatoare din toată lumea, care stochează pagini cu informații. Această rețea de servere care
stochează informație în toată lumea și de unde se poate accesa o pagină a unui sait web, prin
intermediul unui browser, formează serviciul World Wide Web , adică WWW.
Nevoia de a schimba informații în timp real, nevoia de colaborare în timp real – la început
de către cercetători, armată, sau universități – a dus la crearea serviciului World Wide Web.
Abia de 30 ani Tim Berners-Lee și Robert Cailliau au porpuse un proiect e hipertext numit
World Wide Web, prin care documente electronice (documente hipertext) stocate pe un server web
puteau să fie vizualizate prin intermediul unui browser, prin utilizarea a trei tehnologii esențiale
pentru viitorul WWW și Internetului și anume: HTML (Hyper Text Markup Language), HTTP
(Hyper Text Transfer Protocol) , URL (Uniform Resource Locator) . Deci cu 30 ani în urmă a fost
creat primul sait web și primul server de web.
Funcționarea World Wide Web este simplă, în principiu. Serverele de documente stochează
pagini web cu informații diverse. Serverele web sunt programe speciale care livrează paginile din
saiturile web solicitate de un client. Când este solicitată o pagină web se folosește o aplicație
software numită browser. Clientul (calculatorul care solicită informația) poate vizualiza informația
solicitată prin browser-ul instalat pe aceste calculator.
În principiu, pentru a putea utiliza WWW este nevoie de:

6
- HTML. Hyper Text Markup Language este un limbaj de marcare standard folosit la crearea
paginilor web, structurate, dinamice, moderne. A ajuns la versiunea 5. Se bazează pe etichete prin
care textul, grafica, imaginile, etc. sunt organizate într-o pagină dinamică, ușor de accesat. Prin
intermediul HTML se afișează textul, imagininile și diverse resurse din pagina web creată, prin
intermediul browser-uli web.
- Browser-ul web. Este un soft creat pentru afișarea textului, imaginilor, sunetului , construcțiilor
video, datelor, animației, etc. Afișează o interfață prin care utilizatorul se conectează și accesează
rețeaua de servicii www.
Browsere utilizate în lume: Google Chrome, Mozilla Firefox, Edge (noul Internet Explorer),
Safari, Yandex, Opera, Baidu, UC Browser.
- HTTP. Hypertext Transfer Protocol este un protocol (un set de reguli) care folosește un model de
relație client-server și care permite www să funcționeze rapid și bine.
Clientul este reprezentat prin browser-ul web prin care acesta interacționează cu serverul
care stochează saitul. Protocolul știe ce acțiuni trebuie să intreprindă pentru formatarea mesajelor
transmise și ce trebuie să facă atât clientul cât și serverul pentru a trasnmite pagina web solicitată.
Elementele fundamentale ale www sunt prezentate în figura 6.

Figura 6. Schema elementelor WWW


Sursa: www.w3schools.com

1.3. Specificații de proiectare ale aplicațiilor web


Proiectarea unei aplicații web implică mai multe etape, care trebuie elaborate și anume:
- elaborarea structurii logice a aplicației;
- definirea structurală a aplicației informatice
- elaborarea schemei funcționale a aplicației informatice
Aceste etape se stabilesc în funcție de obiectivele propuse pentru funcționare aplicației informatice
și presupun, în principiu:
- analiza și stabilirea datelor de intrare;
- analiza și stabilirea ieșirilor;
- analiza și stabilirea componentelor aplicației;
- stabilirea documentelor și interfețelor necesare utilizării aplicației;

7
- stabilirea modului de codificare;
- stabilirea limbajelor utilizate;
- elaborarea caietului de utilizare.
În ultimii ani vânzările online au cunoscut o dezvoltare de nivel exponențial, mai ales că au
fost create firme de curierat performante, capabile să transporte produsele în toată lumea, la un preț
acceptabil și în timp util. Aceste activități au cunoscut un boom extraordinar pe timpul pandemiei
de virus SARS-COV 2, deoarece accesul consumatorului la magazinele fizice a fost drastic
restricționat.
Având în vedere cererea mare de produse de toate felurile, din mediul online, magazinele de
vânzări online au cunoscut o dezvoltare accentuată. Așa cum un magazin fizic este amplasat într-o
clădire fizică, orice magazin online, creat sub formă de pagină web trebuie amplasat pe un server
Web. Deci, un server web este spațiul virtual în care clientul se plimbă și caută produsele dorite.
Desigur că un magazin web trebuie să dispună de cele cele două componente, esențiale
pentru funcționarea sa și anume:
- zona de client, unde se face prezentarea produselor oferite spre vânzare, inițierea vânzării, plata
online securizată, etc.
- zona de administrare a magazinului, unde se face administrarea conținutului care să permită
operațiuni asupra produsului căutat, cum sunt:
- adăugarea unui produs;
- modificarea caracteristicilor;
- ștergerea produselor;
- înregistrarea comenzilor;
- înregistrarea datelor necesare despre clienți, cu respectarea protecției datelor personale;
- actualizarea permanentă a caracteristicilor produselor, a imaginilor acestora;
- posibilitatea accesării de pe device-uri mobile
-etc.
Aplicația .IT Shop., magazin online de prezentare și vânzare produse IT, are drept scop
promovare și distribuția – vânzarea online de produse și servicii IT, deocamdată în spațiul cibernetic
românesc.
Pentru realizarea aplicației am utilizat aplicații informatice importante, cum sunt:
- limbajul de scripting PHP;
- serverul de baze de date MySQL;
- limbajul HTML.
Aplicația .IT Shop asigură două servicii esențiale ale saitului și anume:
- un serviciu public, cu o interfață prietenoasă și dinamică, serviciul client.
Acest serviciu este destinat clientului final care caută produse sau servicii IT. Are o interfață
dinamică și, ca obiectiv, preluarea prin intermediul Internetului a comenzilor clientului.
Prin accesarea unui browser Web, orice client poate să acceseze catalogul de produse și
servicii al saitului, poate să selecteze produsele dorite, să le adauge în coșul virtual de cumpărături,
să le șteargă din coș, să modifice numărul de produse de același fel, să acceseze promoțiile posibile,
să vadă totalul cumpărăturilor, etc.
- un serviciu pentru administrarea saitului, serviciul administrator, cu rol privat.
Acest serviciu permite, în principal:

8
- gestiunea magaziei de produse (catalogului cu produse), permițând administratorului
operațiuni precum: adăugare, modificare caracteristici, ștergere, vizualizare, etc.
- gestiunea bazei de clienți (tabela de clienți), care permite ca administratorul să vizualizeze
un client, să vizualizeze coșul de cumpărături al acestuia, să șteargă clientul, să asigure accesul
clientului la produsele oferite, dacă acesta este valid (are datele de identificare corecte).
Baza de date prin care se gestionează cele două servicii oferite și care asigură mediul de
stocare este o bază de date MySQL. Pentru o gestionare și administrare eficientă și rapidă, baza de
date MySQL grupează datele în tabele, între care există legături bine stabilite.
Asigurarea administrării saitului în condiții de securitate deplină, care să nu permită accesul
neautorizat la sait și să nu permită accesul la zona de administrator decât pentr persoanele autorizate,
implică implementarea unui mecanism de protecție specializat, capabil să asigure navigarea în sait
doar după o autentificare prealabilă, folosind un user și o parolă corespunzătoare.
Serviciul prin care coșul de cumpărături virtual este menținut la dispoziția clientului, pe
parcursul explorării saitului, sau serviciul de supraveghere de către adminsitrator a autentificării și
navigării prin sait al clientului sunt asigurate prin mecanismul “sesiune”, oferit de către limbajul
PHP. Acest lucru funcționează pe baza unui fișier text temporar în care, în timpul sesiunii de logare
a clientului, sunt stocate date esențiale pentru navigarea prin pagina web.
Securizarea accesului la sait este esențială pe timpul sesiunii de lucru. Administratorul
saitului trebuie ă se asigure că accesul în sait se face de pe pagina de intrare securizată și nu de
accesare din linia de comandă a unui browser intrus. Serviciul de protecție se asigură prin utilizarea
unui fișier care asigură navigarea, pe timpul logării, între paginile saitului și o tabelă MySQL în care
se stochează exclusiv user-ul și parola, criptate.

1.4. Structura lucrării


În capitolul 1, INTRODUCERE, am făcut o prezentare sintetică a noțiunilor de Internet,
World Wide Web, Browser, etc. Prezint pe scurt importanța magazinelor electronice în etapa
actuală, specificațiile de proiectare ale unei aplicații informatice de tip magazin electronic și softul
utilizat pentru realizarea aplicației informatice.
În capitolul 2, TEHNOLOGII ȘI MEDII DE PROGRAMARE FOLOSITE, fac o prezentare
a noțiunii de comerț electroni și importanța sa în perioada actuală și realizez o prezentare sintetică a
principalelor limbaje folosite: HTML, MySQL, PHP.
În capitolul 3, DOCUMENTAȚIA TEHNICĂ A MAGAZINULUI VIRTUAL, descriu
structura generală și modul de funcționare al aplicației Magazin electronic pentru prezentare și
comercializare produse și servicii IT. Pentru componentele client și administrator, descriu codul
sursă al scripturilor utilizate precum și funcțiunile fiecăruia. De asemenea, prezint bazele de date
care le-am utilizat în lucrare.
În capitolul 4, MANUAL DE UTILIZARE AL APLICAȚIEI DE PREZENTARE ȘI
COMERCIALIZARE A PRODUSELOR IT, fac o prezentare explicită a modului în care se
utilizează saitul creat, pe componente.
Capitolul 5, CONCLUZII, prezintă câteva importanța internetului în comerțul electronic,
actualmente și în viitor și noile tendințe în dezvoltarea paginilor web de coerț electronic.
Anexa conține câteva scheme structurale și scheme de flux informațional ale aplicației.
Lucrarea se încheie cu prezentarea bibliografiei minimale studiată pentru realizarea
aplicației.
9
CAPITOLUL 2. TEHNOLOGII ȘI MEDII DE PROGRAMARE PENTRU CREAREA
MAGAZINELOR ELECTRONICE

2.1. Comerțul electronic, prezent și viitor

Precum în toate domeniile de activitate, Internetul a schimbat și fața comerțului mondial


actual și va avea o importanță covârșitoare în comerțul viitorului. Internetul, Web-ul au dus la o
dinamică accentuată în evoluția comerțului electronic la nivel global. Evoluția globală a comerțului
electronic are influență considerabilă și asupra comerțului electronic din România, deci asupra
dezvoltării aplicațiilor și portalurilor web în acest domeniu atât de dinamic.
Orice cumpărător actual poate accesa o pagină de magazin electronic, cu condiția să dispună
de o conexiune de Internet.
În momentul actual, comerțul electronic are un impact deosebit în dezvoltarea comerțului la
nivel global, prin1:
 Redefinirea managementului firmelor producătoare, cu accent pe comunicare interactivă, în
rețea;
 Posibilitatea practicării marketing-ului specific nevoilor personale, pe individ;
 Posibilitatea colabărării interactivă, atât în crearea și realizarea produselor, cât și în
desfacerea acestora;
 Reducerea la minim a barierelor geografice și temporare prin iteractivitatea comercianților
și clienților potențiali;
 Reducerea costurilor de prezentare-publicitate în același timp cu extinderea masei
potențialilor clienți;
În dezvoltarea afacerilor la nivel mondial, comerțul electronic, prin creșterea sa explozivă,
devine un instrument esențial al companiilor producătoare2, doearece permite:
 Diferențierea live față de companiile concurente;
 Accesul live al clienților la nivel global;
 Reducerea costurilor prin vânzare și expediție directă, fără apel la magazine fizice care
implică costuri mult mai mari;
 Accesarea magazinului online oricând, oriunde și de pe orice dispozitiv fix sau mobil
conectat la Internet;
 Colectarea de date privind preferințele de shoping ale clienților virtuali și prezentarea, cu
prioritate, a produselor preferate;
 Testarea, cu costuri mici, a produselor și serviciilor noi;
 Reducerea personalului, prin posibilitatea clientului să se autoservească direct din magazinul
virtual.

Câteva dezavantaje ale comerțului electronic3:

1
https://www.amfiteatrueconomic.ro/temp/Articol_304.pdf
2
https://www.oracle.com/ro/cx/ecommerce/what-is-ecommerce/
3
https://www.actualidadecommerce.com/ro/cuales-las-ventajas-desventajas-del-ecommerce/
10
 Concurență accentuată pentru fiecare produs, deoarece pot fi accesate saituri din toată lumea,
care oferă același produs;
 Mulți consumatori doresc să privească fizic produsul, să-l “pipăie” și care nu au încredere în
plățile online. Acest lucru s-a rezolvat parțial prin posibilitatea deschiderii pachetului la
destinație și returnarea acestuia;
 Costurile de expediție pot fi mari și depind de distanță, greutatea coletului, sau valoarea
acestuia;
 Unele produse sunt greu vandabile pe Internet;
 Riscul atacurilor cibernetice este mare, mai ales pentru necunoscători;
 Un client virtual nu poate, în general, să primească un răspuns profesional instantaneu.
Saituile de cumpărături sunt prevăzute cu roboți care răspund, de multe ori nesatisfăcător, la
întrebări standard;
Viitorul comerțului electronic este foarte promițător, în principal, datorită:
automatizării saiturilor prin introducerea elementelor de Inteligență Artificială (AI);
extinderii majore spre piețele emergente;
posibilității personalizării ofertelor spre clientul final individual, prin intermediul AI
posibilității livării rapide a produsului prin crearea de depozite în regiuni strategice;
posibilității achizițiilor personalizate, bazate pe abonament;
posibilității accesării magazinului online de pe orice dispozitiv electronic dotat cu internet;
implementării roboților de chat și a roboților asistenți capabili să ghideze cumpărătorul;
introducerii realității virtuale și a imaginilor 3D sau realitate augmentată, pentru a simula
experiențe realistice în utilizarea produsului.
Plata pentru produsele sau serviciile comandate poate fie efectuată prin diferite metode: card
de credit, ordin de plată, online banking prin telefon, tichete cadou, PayPal, carduri inteligente,
monede virtuale, etc.
Accentul se pune, în acest moment, pe securizarea transzacțiilor efectuate prin saiturile de
comerț electronic. Această securizare se poate face prin certificatul SSL (Secure Socket Layers),
prin intermediul https4, care reprezintă unul dintre protocoalele de securitate de tip criptografic, pe
128, 256 sau 512 bit. Decriptarea informațiilor poate fi efectuată doar pe serverul destinație.
Arhitectura unei aplicații e-commerce este prezentată în figura7:

Figura 7. Componentele unei aplicații e-commerce [Ivan , 2019]

4
https://hosterion.ro/client/index.php?rp=/knowledgebase/26/Ce-este-certificatul-SSL-HTTPS.html
11
2.2. Limbajul HTML, limbajul specific realizării paginilor web pentru comerțul
online
2.2.1. Prezentare HTML
Limbajul HTML (Hyper Text Markup Language) este limbajul de descriere a conținutului
unei pagini web. Este utilizat împreună cu tehnologii precum CSS și Javascript. Internetul, ca să
poată explicita și permite citirea documentelor din www, trebuie să dispună de un limbaj universal
de descriere a informațiilor din document, care să fie înțeles de toate computerele din internet. Acest
limbaj este limbajul HTML.
Un document HTML conține cod HTML. Documentul, salvat cu una dintre extensiile .htm
sau .html trebuie încărcat într-un browser care funcționează pe calculatorul client (local) sau pe
Internet. Conținutul documentului HTML este interpretat de către browser. Browser-ul încarcă, de
asemenea, alte fișiere care completează și întregesc pagina web și care sunt precizate în documentul
HTML, cum sunt imagini, scheme, video, audio, etc. După ce au fost încărcate toate acestea,
browserul afișează conținutul paginii web.
Documentul HTML este un document text care poate fi creat într-un editor de texte simplu,
de exemplu NotePad, sau cu un editor specializat pentru documente HTML: Notepad++, TextEditor,
Sublime, Komodo, etc.
Limbajul este utilizat de World Wide Web pentru formatarea adecvată a paginii web.
HTML conține doar text în format ASCII. De aceea un document HTML poate fi interpretat
și prezentat de diverse browsere web
Limbajul HTML permite :
- publicarea de documente complexe, completate cu text, tabele, liste, scheme,, forografii, audio,
video, etc.
- regăsirea informațiilor în online printr-un click pe hyperlink-ul accesat;
- crearea formularelor necesare activităților specifice saiturilor de comer electronic, sau pentru alte
tranzacții;
- innserarea în documentul HTML de clipuri audio-video și altor aplicații, precum și a hyperlink-
urilor.

2.2.2. Caracteristici ale HTML

HTML este versiunea structurată și îmbunătățită a unui limbaj mai vechi, Standard
Generalized Markup Language (SGML) care descrie documentele bazat pe elementelor lor comune:
titluri, paragrafe, liste, etc. și care le marchează cu ajutorul tag-urilor.
Cele mai importante caracteristici ale limbajului HTML sunt:
1. Utilizarea marcajelor care vor indica instrucțiuni din cod vor fi executate. Exemple:
<HEAD> .... </HEAD>, <TITLE> ... </TITLE>, etc. Se execută proțiunea de comenzi dintre
croșete.
2. Lucrează cu structuri ierarhice de documente, folosind hyperlegături intradocumente și
interdocumente. Aceste hyperlegături între elementele documentului se găsesc în structura
documentului.
3. Specificațiile formale privind sintaxa limbajului, tipul documentului, descrierea
elementelor și atributelor permise pentru fiecare element sunt descrise de către Document Type
Definition (DTD).
12
4. Sepcificațiile limbajului pot fi interpretate de de către computer și de către utilizatorul
uman.
Majoritatea tag-urilor HTML au forma generală:
<NumeTag> Entitatea ce va fi prelucrată de tag </NumeTag>
HTML separă, deci, structura documentului de modul de afișare, deoarece documentul poate
fi vizualizat pe diferite pltaforme, cu monitoare li performanțe foarte diferite. Modul de afișare și
formatare a documentului HTML depinde de programul care interpretează HTML și de posibilitățile
platformei pe care rulează.
Navigatorul web încarcă documentul HTML și scanează documentul cu scopul de a găsi tag-
urile existente în document. Pe baza lor, formatează textul, imaginea, etc și le afișează.
Versiunea actuală a HTML, versiunea 5, integrează facilități media importante, adaugă noi
tag-uri în raport cu vechea versiune și crează o mai bună adaptare a funcționalității documentului la
desktop-ul folosit.
Pentru realizarea saiturilor dinamice, la care browser-ul este capabil să schimbe aspectul și
stilul paginii web, la încărcarea paginii este folosit limbajul DHTML5 (Dynamic HTML). DHTML6
este o combinație între HTML clasic, limbajul JavaScript (limbaj client-side scripting), AJAX și
ActiveX, un limbaj de prezentare stil, cum este Cascading Style Sheets (CSS), XML (eXtended
Markup Language), Document Object Model (DOM), etc. Această combinație de limbaje duce la
crearea unor pagini web dinamice.
DHTML are următoarele caracteristici:
- posibilitatea schimbării efectului unui tag HTML dependent de un eveniment exterior din afara
browser-ului, cum ar fi : click cu mouse-ul, trecerea mouse-lui deaspura unui link sau text, etc.
- posibilitatea schimbării proprietăților unui tag;
- posibilitatea deplasării și mutării unui text, imagine, obiect în cadrul unei pagini web în timp real
- posibilitatea utilizării fonturilor dinamice, specifice fiecărei platforme a utilizatorului;
DHTML are dezavantajul că funcționarea sa depinde în mare măsură de performanțele
calculatorului, deoarece este independent de server.
Internetul conține numeroase saituri de unde se poate învăța limbajul HTML. Cele mai
importante sunt7:
- W3Schools – platformă cu tutoriale prezentate simplu și clar, pentru începători;
- Khan Academy – conține lecții interactive pentru învățare secvențială a HTML;
- MDN Web Docs – Conține tuoriale HTML și nu numai
- etc.

2.3. Limbajul PHP


Limbajul PHP (Hypertext Preprocesor) este un limbaj de scripting, open source și server-
side, care se poate integra ușor în HTML, utilizat cu precădere la crearea paginilor web8.
Integrarea în HTML se face ca în exemplul din figura 9, care reprezintă unul dintre modurile
de implementare în HTML9

5
https://ro.wikipedia.org/wiki/DHTML
6
http://interfeteevoluate-fils.blogspot.com/2008/01/ce-este-dynamic-html-dhtml.html
7
https://www.pbinfo.ro/articole/21591/limbajul-html-introducere
8
https://www.php.net/manual/ro/intro-whatis.php
9
http://www.pmtgv.ro/RUmPMT/Bibliografie/5.%20Programare%20web/curs04.pdf
13
Figura 9. Integrarea comenzilor PHP în documentul HTML
PHP este executat pe server și generează cod HTML care se transmite clientului, care nu va
cunoaște codul sursă executat.
Pachetul PHP se poate instala și sub Windows atât ca interpretor, cât și ca modul pentru
serverul Web (Apache).
Moduri de utilizare ale scripturilor PHP:
1. Scripring pe server, când este necesar să existe instalate un analizor PHP, un server web și un
navigator web. Pentru ca scriptul PHP să funcționeze trebuie rulat serverul web și activat PHP;
2. Scripting pe linia de comandă. În acest caz scriptul PHP va rula fără instalarea unui server sau
navigator web. Este necesar doar analizorul PHP;
3. Scripting pentru aplicații rulate pe calculator, cu interfață grafică proprie
Variabilele PHP10 nu se declară, acesta fiind un limbaj interpretat, și împrumută tipul valorii
stocate în momentul executării. Variabila se crează în momentul în care este depusă o valoare în ea
și își poate schimba tipul în timpul execuției scriptului.
Numele unei variabile trebuie precedat de simbolul $ (marcaj de variabilă).
Una dintre cele mai importante facilități11 ale limbajului PHP este faptul că se adaptează la
bazele de date relaționale MySQL, Oracle, DB2, etc. De asemenea, PHP rulează pe sisteme de
operare cum sunt: Unix/Linux, Windows, OSX și interacționează cu majoritatea serverelor web.
Serverul web încarcă o pagină aflată în sistemul de fișiere al acestuia și o trimite
interpretorului care execută instrucțiunile PHP și generează codul HTML care este retransmis către
server, de unde este preluat prin browser.
Limbajul PHP dispune de un set de funcții și variabile de bibliotecă, incluse – unele dintre
ele- în interpretor. Cele mai importante sunt: suportul pentru MySQL, suportul pentru FTP, suportul
pentru XML.

10
http://www.php.net/docs.php
11
https://web.ceiti.md/lesson.php?id=7#c1
14
2.4. Limbajul MySQL
MySQL este unul dintre cele mai utilizate sisteme de gestiune a bazelor de date relaționale,
de tip client-server, utilizat împreună cu scripturi PHP.
Bazele de date MySQL sunt utilizate pentru stocare unor cantități mari de date bazate pe
aplicații web. Bazele de date MySQL sunt utilizate, pentru saiturile lor de către 12 WordPress,
GitHub, Facebook, NASA, Tesla, Spotify, Netflix, etc.
Pentru a utiliza MySQL este nevoie de următoarele instrumente software:
- un server pentru instalarea bazei de date;
- un instrument pentru introducerea datelor;
- un instrument pentru vizualizarea și utilizarea datelor;
- un instrument pentru introducerea comenzilor de la tastatură.
MySQL și PHP sunt folosite împreună. Dau câteva exemple în cadrul unui sait web:
- schimbarea imaginilor pe ecran, la vizitarea unui sait. PHP rulează un script care alege o imagine
dintr-o bază de date;
- crearea unui forum web, prin rularea unui script PHP dintr-o bază de date care stochează paginile
cu mesajele utilizator;
- într-un sait web, PHP și MySQL conlucrează pentru accesarea bazei de date MySQL din care prin
rularea unor scripturi extrage informații pentru paginile saitului.
Accesarea bazei de date MySQL prin rularea unor scripturi PHP sunt necesare următoarele:
- Un server web, care poate fi calculatorul personal. Serverul web cel mai utilizat pentru aceasta este
Apache;
- Instalarea pachetului PHP pe server
- Instalarea pachetului de programe care va realiza gestiunea bazei de date MySQL.
Cea mai simplă metodă de a instala și a testa baza de date este instalarea pachetului de
aplicații XAMPP, sau a pachetului WAMPP.
Pachetul XAMPP conține serverul web Apache, MySQL, PHP, PERL, serverul FTP,
phpMyAdmin și are panoul de control din figura 10.

Figura 10. Interfața XAMPP

12
https://www.nav.ro/blog/ce-este-mysql/
15
2.5. Tehnologii actuale și de viitor în comerțul electronic

Tehnologiile și tehnicile care să creeze saituri de comerț supraspecializate și care să fie


capabile să influiențeze clientul final sunt într-o continuă dezvoltare. Pe piață au început să intre li
marile firme de retail sau de producție din întreaga lume. Printre cele mai recente tehnologii de
creare și prezentare ale magazinele e-commerce sunt:

1. Magazine electronice digitalizate. Metoda se folosește atât în vânzări cît și în producție și constă
în digitalizarea și automatixâzarea majorității documentelor actuale și stocarea lor în cloud, de unde
pot fi utilizate automat de către magazinul virtual. Astfel de magazine sunt utilizate de Amazon,
Alibaba, eBay, Walmart și încep să fie implementate și de către saituri de comerț mai mici.

2. Chatbot. Chatbot sunt interfețe13 prin care se generează convorbiri clienți-platformă, utilizând
aplicațiile de inteligență artificială. Cumpărătorul este ghidat pas cu pas prin paginile saitului și
interlocutorul virtual este capabil să răspundă – inteligent ! – la întrebările clientului virtual. Bot-ul
învață în timp ce conversează cu clientul, folosnd informațiile stocate din convorbirea cu clientul.
Desigur că bot-ul va fi capabil să facă propuneri de oferte similare cu cele căutate de client .
Pentru navigarea pe o platformă de cumpărături, clientul folosește un navigator web și o
aplicație Java Server Pages (JSP) care este capabilă să realizeze interfețe dinamice, pentru pagini
web executate cu o mașină virtuală Java (JVM) care este capabilă să ruleze pe un server de aplicații.
Informațiile extrase sunt generate în formatul HTML și sunt încărcate pe un server web (figura 80

Figura 8. Aplicație e-commerce bazată pe JSP

3. Beacon Technology. Permite conectarea dispozitivelor mobile și laptop-urilor prin intermediul


unei tehnologii numită Bluetooth Low Energy. Tehnologia este capabilă să transmită oferte și
promoții de la un dispozitiv conectate la internet, către alte dispozitive aflate într-o rază de cel mult
50 m (teoretic).
4. Direct Social Media. Este o tehnologie prin care saiturile de socializare, precum Facebook,
Twiter, Instagram, Pinterest, etc. includ în paginile lor link-uri către saituri de cumpărături dinamice
sau chiar includ saiturile, utilizatorul putându-se loga direct din Social Media

13
https://www.todaysoftmag.ro/article/2645/ce-este-un-chatbot
16
5. Asistenții vocali. Este tehologia bazată pe aplicații de inteligență artificială și IoT (Internet of
Tings), pin intermediul cărora sunt ascultate și executate comenzile vocale ale utilizatorului. Acesta
se poate afla la distanță față de dispozitivul pe care îl comandă, comenzile putându-se da și prin
Internet. Exemple de asistenți vocali: Echo Alexa, al aplicației Amazon, WeChat, aplicație din
China, etc.

6. Tehnologii care permit achiziționarea de servicii de pe saiturile de comerț electronic. Printre


tehnologiile cele mai importante dezvoltate actualmente de marii retaleri și de către uni producători,
menționez14: Buy Now, Pay Later (BNPL); Live Shopping; Comerțul compozabil; Tehnologii e-
commerce bazate pe API; Platforme D2C (Direct to consumer); Marketplace-uri supraspecializate,
pe categorii de produse (de exemplu, IT, grădinărit); Shopping prin AR (Realitate augmentată);
Comerț converațional și vocal, bazat pe comenzi vocale înțelese de către o entitate de Inteligență
Artificială; etc.

14
https://vtex.com/ro/blog/trenduri/trend-in-ecommerce/
17
CAPITOLUL 3. REALIZAREA APLICAȚIEI PRACTICE MAGAZIN IT SHOP

3.1. Descrierea componentelor aplicației

3.1.1. Structura generală a aplicației

Scopul prezentei aplicaţii este acela de a implementa un magazin virtual de IT Shop,


utilizând limbajul de script PHP şi serverul de baze de date MySQL, liantul cu mediul WEB fiind
clasicul limbaj HTML.

Aplicaţia este structurată in două parți principale (Figura A1):

1) Un magazin client (având un rol public), care permite vizualizarea produselor precum
și cumpărarea lor

2) Un magazin administrator (cu rol privat), implementat prin componenta


ADMINISTRARE, care curpinde următoarele module :
a. ADMINISTRARE PRODUCĂTORI
b. ADMINISTRARE CATEGORII
c. ADMINISTRARE SUBCATEGORII
d. ADMINISTRARE PRODUSE
e. ADMINISTRARE UTILIZATORI
f. ADMINISTRARE COMENZI
g. ADMINISTRARE PROMOTII
h. ADMINISTRARE CUPOANE

Modulele care realizează fiecare dintre cele două mari componente sunt grupate în foldere
separate.

Schimbul de informaţii între componente se realizează prin intermediul unei baze de


date MySQL, având 13 tabele (TADMINS, TCATEGORII, TCOMENTRII, TCOMENZI, TCOS,
TCUPOANE, TPRODUCATORI, TPRODUSE, TPRODUSECOMENZI, TROMOTII,
TSUBCATEGORII, TUTILIZATORI și TVOTURI).

Componenta PUBLICĂ este destinată preluării (recepţionării) prin Internet a comenzilor


clienţilor care accesează magazinl virtual folosind un browser WEB (nivel COMANDA). În plus,
această componentă asigură un nivel VIZITARE, care permite oricărui client o accesare a
catalogului de produse expus, fără nicio obligaţie din partea acestuia, selecţia unor produse,
cu realizarea online a unor totaluri privind preţurile, sau cu alte cuvinte realizarea unui “coş
virtual” care să-i ofere o imagine asupra preţurilor de cost privind achiziţionarea diverselor
produse asupra cărora se arată interesat.

Componenta ADMINISTRARE, după cum îi spune şi numele, permite o gestionare fie a


tabelei de produse (privită ca o magazie, în care se fac operaţii de adăugare, modificare, ştergere,
vizualizare), fie a tabelei de clienţi (vizualizarea unui client sau ştergerea celor cu date de
identificare invalide).

18
După cum s-a mai menţionat, fundamentul de stocare al informaţiilor în cadrul aplicaţiei îl
constituie o bază de date MySQL, cu numele ESTORE. În cadrul ei, datele sunt grupate în 13
tabele, fiecare cu un rol bine definit. De menţionat faptul că, între cele 13 tabele (care vor fi
detaliate structural şi funcţional în paragrafele următoare) există diverse legături referenţial-
informaţionale.

3.1.2. Funcțiile aplicației


Deşi fiecare din componente funcţionează aparent independent, între ele există o strânsă
condiţionare realizată prin intermediul bazei de date. Astfel, spre exemplu o acţiune de
adăugare a unui nou produs în catalog (realizată cu componenta ADMINISTRARE), va
avea un efect ulterior imediat în pagina de afişare a catalogului pentru selecţia unor produse De
asemenea, realizarea unor comenzi ferme de către un client nou, va conduce imediat la influenţarea
informaţională a componentei ADMINISTRARE (prin înregistrarea unui nou client).
Dacă magazinl client are un rol public, putând fi accesat de către orice persoană care
navighează pe Internet, magazinl administrator are un caracter privat, accesul fiind făcut din altă
adresa url.
În cadrul aplicaţiei s-a utilizat mecanismul sesiune (SESSION) oferit de limbajul PHP.
Acesta a permis rezolvarea elegantă a unor probleme relativ delicate, legate de stocarea temporară
a unor date nepersistente:
- disponibilitatea unui “coş virtual” pe parcursul navigării prin diversele pagini ale
componentei client
- disponibilitatea unui administrator autentificat pentru navigarea prin paginile
componentelor de administrare (acest principiu fiind de fapt cheia implementării
mecanismului de securizare împotriva acceselor neautorizate).
Mecanismul sesiune are la bază un fişier temporar de tip text în care se memorează pe
parcursul unei sesiuni de lucru anumite date considerate a fi necesare în timpul navigării prin
paginile aplicaţiei. Detalii suplimentare asupra acestui mecanism vor fi prezentate într-un paragraf
ulterior.

3.1.3. Injectarea SQL


Mulţi dezvoltatori web nu ştiu cum pot fi manipulate interogările SQL şi acordă toată
încrederea unei asemenea comenzi. Interogările SQL pot ocoli controalele de acces şi în
consecinţă pot să treacă peste metodele de autentificare şi verificările de autorizaţie, iar
câteodată pot chiar să faciliteze accesul la comenzile de sistem.

Injectarea directă a comenzilor SQL este o tehnică în care atacatorul crează sau
modifică comenzile SQL pentru a scoate la iveală datele sensibile, pentru a suprascrie o anumită
valoare sau chiar pentru a executa comenzi periculoase la nivel de sistem. Acest lucru este
înfăptuit de către aplicaţia care preia inputul utilizatorului, îl combină cu parametrii statici
pentru a forma o interogare SQL. Datorită lipsei validării inputului şi conectării la baza de date cu
drepturi de superuser, sau a unui user care poate crea la rândul lui alţi useri, atacatorul poate crea
un superuser în baza de date.
Se poate spune că un atacator trebuie să deţină informaţii despre baza de date şi schema
acesteia în majoritatea cazurilor de atac. Dacă se foloseşte un soft open source, sau alt pachet
disponibil publicului larg (Content Management System (CMS) sau forum), atacatorii pot duplica
cu uşurinţă codul. De asemenea un risc îl reprezintă şi designul necorespunzător al bazei de date.
Atacurile sunt de obicei bazate pe exploatarea codului scris de dezvoltatori fără a lua în
calcul securitatea lui. Niciodată nu trebuie avut încredere în niciun fel de input, mai ales când
acesta provine din partea clientului, chiar dacă acesta vine dintr-un câmp select sau ascuns.
Niciodată nu se execută conectarea la baza de date ca superuser sau ca utilizator care poate
19
manipula mai multe baze de date decât cea folosită. Se folosesc întotdeauna useri cu privilegii
limitate.
Se verifică dacă un input conţine tipul de date corect. PHP are o varietate de
funcţii de validare, de la cele mai simple şi până la expresii regulate compatibile Perl.
Dacă aplicaţia aşteaptă un input numeric, se vor verifica datele cu funcţia
is_numeric(), se schimbă tipul variabilei utilizând funcţia settype() sau se foloseşte
reprezentaţia numerică prin sprintf().
Se va aplica asupra fiecărei valori non-numerice furnizate de utilizator, ce va fi
transmisă bazei de date, funcţia 'string escape' specifică fiecărei baze de date (de ex.
mysqli_real_escape_string(), sqlite_escape_string(), etc.). Dacă baza de date nu
posedă un mecanism specific de 'string escape', pot fi utile funcţiile addslashes() şi
str_replace() (în funcţie de tipul bazei de date).
În afară de acestea, se pot loga interogările în interiorul scriptului şi în baza de
date, dacă aceasta susţine acest lucru. Logarea nu poate preveni atacurile sau încercările de
a vătăma baza de date, dar poate fi utilă în depistarea aplicaţiei în care a avut loc incidentul.
Log-ul nu este util prin sine, ci prin informaţia pe care o conţine. Mai multă detaliere este
de obicei mai bună decât lipsa detaliilor.
În cadrul aplicaţiei din prezenta lucrare a fost folosită o combinaţie de funcţii PHP
pentru “curăţarea” inputurilor utilizator ($t), având următoarea structură:
preg_replace('/[^A-Za-z0-9_@ .-]/', '', strip_tags($t))

3.1.4. Scriptul de accesare al aplicației (index.php


Accesul în aplicaţie se face prin pagina principală (index.php). Observăm că acesta
face referire ,prin comanda “include_once("./include/functions.inc.php");”, la un fișier
"functions.inc.php" unde sunt definite o serie de funcții care for fi folosite de mai multe module.
Rolul acestui fișier este de a grupa într-un singur loc toate funcțiile ce vor fi apelate de toate
scripturile, concept care permite o urmărire mai ușoară a codului și o mai ușoară remediere a
disfuncționalităților.

Figura 3.1 Pagina de intrare în aplicaţie

Codul sursă pentru al scriptului, care constituie accesul în aplicaţie, este prezentat în
continuare:
20
21
22
3.2. Componenta Client

3.2.1. Funcții de ansamblu


Componenta publică are două roluri de bază:
1. rolul de a asigura un “nivel vizitare”, permiţând oricărui client Web un acces la
catalogul de produse afişat şi în plus, permiţând selecţia unor produse din catalog
(cu precizarea cantităţilor acestora), în vederea constituirii unui “coş virtual” al
clientului, cu realizarea unui total de plată pe acest coş, fără nicio obligaţie din
partea clientului (vizând componenta financiară asociată unei comenzi ferme
confirmate).
2. rolul de a implementa un “nivel cumpărare”, care asigură transferul comenzilor
unui client existent (valid) spre tabela TCOMENZI (înregistrarea unor comenzi
ferme), respectiv înregistrarea unui nou client în vederea realizării unor
comenzi ferme.

Implementarea acestei componente client s-a realizat prin scripturi PHP, care comunică
între ele, între ele şi mediul extern (browser client), precum şi cu “nivelul bază de date”. O
23
prezentare a unei scheme structurale şi de flux informaţional descriind această componentă
(la care vom face în continuare referire sub denumirea componenta-client) este prezentată în
Figura A2.
Nivelul “bază de date” constituie practic fundamentul acestei componente. S-a utilizat o
bază de date MySQL cu numele ESTORE, având mai multe tabele care vor fi detaliate la
momentul oportun.
De asemenea, funcţionarea acestei componente are la bază un mecanism special, bazat
pe lucrul cu sesiuni (mecanismul SESSION oferit de limbajul de implementare folosit).
Ideea de bază în proiectarea acestei componente constă într-o “automatizare” a modului de
actualizare dinamică, pe baza informaţiilor conţinute de baza de date. Practic, o modificare a
conţinutului bazei de date, conduce la o actualizare automată a conţinutului afişat de scripturile
Web componente.
Spre exemplificare, în cadrul componentei client, imaginea catalogului afişată în
vederea selecţiei/cumpărării unor produse de către un client, este construită dinamic, pe baza
informaţiilor din două tabele ale bazei de date. Adăugarea unui nou produs, nu necesită nicio
intervenţie în codul sursă al scripturilor, componenta client constituindu-se ca o aplicaţie integrată
end-user pentru o firmă care ar dori să o folosească în vederea desfacerii produselor ei pe
Internet. O simplă adăugare a unui nou articol în tabelă conduce automat la reactualizarea
catalogului afişat pe Web (această operaţie de adăugare realizându-se cu o altă componentă – “
modulul ADMINISTRARE” – detaliată într-un paragraf distinct).
Înainte de a se descrie modul de implementare a scripturilor PHP, se va face o descriere a
tabelelor MySQL referite în cadrul acestei componente, precum şi a mecanismului SESSION,
utilizat ca nucleu central al schimbului informaţional între scripturile componentei client.

3.2.2. Tabelele componentei client


După cum s-a mai precizat, se utilizează o bază de date MySQL, cu numele
ESTOTRRE. Considerentele acestei alegeri sunt motivate de faptul că utilizarea serverului de
baze de date MySQL este liberă (free) şi este un server de baze de date multi-platformă,
rulând atât pe sistemele din familia Windows, cât şi pe cele din familia Linux-Unix (de altfel
caracteristici pe care le are şi limbajul PHP).
În baza de date se pot face referiri (a se vedea în continuare) la fişiere de tip imagine. Pentru
o reducere a dimensiunii bazei de date, nu este memorată toată calea fişierului, ci doar componenta
„nume.tip”, considerându-se că imaginile referite de toate componentele aplicaţiei sunt
păstrate în subdirectorul „img” al aplicaţiei.
Proiectarea adecvată a bazei de date a impus utilizarea a cinci tabele, fiecare cu un rol
bine definit, între ele existând legături impuse de specificul aplicaţiei.
Tabela TADMINS
În această tabela se vor stoca datele privind credențialele contului de administrator.
Comanda SQL prin care se crează tabela este:
mysql> CREATE TABLE `tadmins` (
`fIdAdmin` int(11) UNSIGNED NOT NULL,
`fUsername` varchar(32) DEFAULT NULL,
`fPassword` varchar(32) DEFAULT NULL
)
Câmpurile acestei tabele sunt :

fIdAdmin – de tip intreg, este cimpul care reprezintă id-ul administratorului


fUsername- de tip text, conține numele de user al administratorului
fPassword- de tip text, conține parola administratorului

24
Adăugarea de date în această tabela se face cu ajutorul unei comenzi SQL :
mysql> INSERT INTO `tadmins` (`fIdAdmin`, `fUsername`, `fPassword`) VALUES
(1, 'admin', 'admin');

Tabela TCATEGORII
Rolul acestei tabele este cel de a stoca informaţiile aferente categoriilor în care se încadrează
produsele, pentru o mai uşoară identificare de către utilizator a produselor.
Comanda SQL de creare a tabelei este:
mysql>
CREATE TABLE `tcategorii` (
`fIdCategorie` int(11) UNSIGNED NOT NULL,
`fNumeCategorie` varchar(50) NOT NULL DEFAULT ''
)

Câmpurile acestei tabele (conform structurii realizate cu comanda SQL de mai sus) sunt:

fIdCategorie – de tip întreg, cu autoincrementare (definit ca şi cheie primară), pe baza


acestui câmp făcându-se legătura oricărui produs cu categoria din care face parte), reprezentând
id-ul categoriei, ca şi cod unic de identificare al unei categorii din tabela CATEGORII
fNumeCategorie – denumirea categoriei.

Categoriile stabilite iniţial (în număr de 6, şi anume: Software, Imprimante, Monitoare,


Scanere, Laptopuri, Retelistica) au fost încărcate cu comenzi SQL de forma următoare:

mysql>
INSERT INTO `tcategorii` (`fIdCategorie`, `fNumeCategorie`) VALUES
(1, 'Software'),
(2, 'Imprimante'),
(3, 'Monitoare'),
(4, 'Scanere'),
(5, 'Laptopuri'),
(6, 'Retelistica');

Tabela TCOMENTARII
Această tabela este folosită pentru a memora comentarile care sunt făcute pentru produsele
prezentate.
Comanda SQL de creare a tabelei este:
mysql>
CREATE TABLE `tcomentarii` (
`fIdComentariu` int(11) UNSIGNED NOT NULL,
`fIdProdus` int(11) UNSIGNED NOT NULL DEFAULT '0',
`fIdUtilizator` int(11) NOT NULL DEFAULT '0',
`fComentariu` blob,
`fData` date NOT NULL DEFAULT '0000-00-00',
`fAprobat` tinyint(1) UNSIGNED NOT NULL DEFAULT '0'
)

Câmpurile tabelei TCOMENTARII sunt :


fIdComentariu – de tip intreg, reprezintă id-ul unui comentariu,
25
fIdProdus – de tip intreg, reprezintă id-ul prodului pentru care se face comentariu, prin
acest câmp se face legătura cu tabela TPRODUSE,
fIdUtilizator – de tip întreg, reprezintă id-ul utilizatorului care a făcut respectivul
comentariu, prin acest câmp se face legătura cu tabela TUTILIZATORI,
fComentariu – de tip BLOB, reprezintă comentariu,
fData – de tip dată calendaristică, reprezinta data la care a fost făcut comentariu,
fAprobat – de tip intreg, un câmp folosit pentru a nu permite afișarea unor comentarii
nepotrivite

Tabela TCOMENZI
În tabela TCOMENZI sunt stocate toate comenzile făcute prin intermediul site-ului. Rolul
acestei tabele este de a stoca informaţiile pe care clienţii le transmit ca şi comenzi ferme. Un
client poate comanda simultan mai multe produse, în cantităţi diferite. Practic, în cele ce
urmează vom numi “comandă” o linie din tabela COMENZI (linie evident corespunzătoare unui
anumit client). Deci, un client poate realiza printr-un singur apel mai multe comenzi (materializate
prin mai multe linii în tabela COMENZI) şi de asemenea, un produs poate apărea în mai
multe comenzi aferente aceluiaşi client sau unor clienţi diferiţi.

Comanda SQL de creare a tabelei este:


mysql>
CREATE TABLE `tcomenzi` (
`fIdComanda` int(11) UNSIGNED NOT NULL,
`fIdUtilizator` int(11) UNSIGNED NOT NULL DEFAULT '0',
`fIdCupon` int(11) DEFAULT NULL,
`fNumeCumparator` varchar(100) DEFAULT NULL,
`fEmailCumparator` varchar(100) DEFAULT NULL,
`fAdresaCumparator` text,
`fDataComanda` date DEFAULT NULL
)
Câmpurile acestei tabele sunt :
fIdComanda – de tip intreg, reprezintă id-ul comenzii, fiecare comanda fiind identificată în
mod unic pe baza acestui id,
fIdUtilizator – de tip intreg, reprezintă id-ul utilizatorului care a făcut comanda, prin acest
câmp se face legătura cu tabela TUTILIZATORI,
fIdCupon – de tip întreg, reprezintă id-ul unui eventual cupon de reducere, prin acest câmp
se face legătura cu tabela TCUPOANE,
fNumeCumparator – de tip text, reprezintă numele cumpărătorului,
fEmailCumparator– de tip text, reprezintă adresa de email a cumpărătorului,
fAdresaCumparator– de tip text, reprezintă adresa cumpărătorului,
fDataComanda – de tip dată calendaristică, reprezintă data la care a fost efectuată comanda

Datele se încarcă în tabela TCOMENZI prin comanda SQL :

mysql> INSERT INTO `tcomenzi` (`fIdComanda`, `fIdUtilizator`, `fIdCupon`,


`fNumeCumparator`, `fEmailCumparator`, `fAdresaCumparator`, `fDataComanda`) VALUES
(5, 2, 0, 'utilizator', 'utilizator@domeniu.ro', 'Str. Revolutiei , Nr 2 Arad', '2021-07-29');

26
Tabela TCOS

În această tabela sunt stocate produsele pe care fiecare utilizator le are în coșul de cumpărărturi în
cadrul unei sesiuni de vizitare a site-ului.
Comanda SQL de creare a tabelei este:
mysql>
CREATE TABLE `tcos` (
`fIdItem` int(11) UNSIGNED NOT NULL,
`fIdUtilizator` int(11) UNSIGNED NOT NULL DEFAULT '0',
`fIdProdus` int(11) UNSIGNED NOT NULL DEFAULT '0',
`fCantitate` int(11) UNSIGNED NOT NULL DEFAULT '0',
`fIdSesiune` varchar(50) NOT NULL DEFAULT ''
)

Câmpurile acestei tabele sunt :


fIdItem – de tip întreg, reprezintă id-ul unei înregistrări din această tabelă,
fIdUtilizator – de tip întreg, reprezintă id-ul utilizatorului care a adăugat ceva în coș, prin
acest câmp se face legătura cu tabela TUTILIZATORI,
fIdProdus de tip întreg, reprezintă id-ul produsului aflat în coș, prin acest câmp se face
legătura cu tabela TPRODUSE,
fCantitate – de tip între, reprezintă cantitatea dintr-un produs care a fost adăugată în coș,
fIdSesiune – de tip text, reprezintă id-ul sesiunii în care a fost adăugat produsul în coș.

Tabela TCUPOANE

Tabela TCUPOANE este folosită pentru a stoca datele despre cupoanele de reducere care pot fi
folosite de către cumpărători.
Comanda SQL de creare a tabelei este:
mysql>
CREATE TABLE `tcupoane` (
`fIdCupon` int(11) UNSIGNED NOT NULL,
`fCodCupon` varchar(10) DEFAULT NULL,
`fValoareCupon` varchar(10) DEFAULT NULL
)

Câmpurile acestei tabele sunt :

fIdCupon – de tip întreg, rprezintă id-ul cuponului,


fCodCupon – de tip text conține codul cuponului,
fValoareCupon – de tip text, conține valoare cuponului

Tabela TPRODUCĂTORI

Rolul acestei tabele este de a stoca datele despre producatorii produselor aflate la vânzare
pe site.
Comanda SQL de creare a tabelei este:
mysql>
CREATE TABLE `tproducatori` (
27
`fIdProducator` int(11) UNSIGNED NOT NULL,
`fNumeProducator` varchar(255) NOT NULL DEFAULT '',
`fUrl` varchar(255) DEFAULT NULL,
`fDescriere` blob
)
Câmpurile aceste tabele sunt :
fIdProducator – de tip întreg, reprezintă id-ul fiecărui producator,
fNumeProducator – de tip text, reprezintă numele producătorului,
fUrl – de tip text, reprezinta adresa site-ului producătorului,
fDescriere – de tip BLOB, reprezintă o descriere a producătorului

Tabela TPRODUSE

Rolul acestei tabele este de a conţine catalogul de produse, catalog al cărui conţinut
este afişat în pagina iniţială accesată de client.
Comanda SQL prin care se crează tabela este:
mysql>
DROP TABLE IF EXISTS `tproduse`;
CREATE TABLE IF NOT EXISTS `tproduse` (
`fIdProdus` int(11) unsigned NOT NULL AUTO_INCREMENT,
`fIdSubcategorie` int(11) unsigned NOT NULL DEFAULT '0',
`fIdProducator` int(11) unsigned NOT NULL DEFAULT '0',
`fNumeProdus` varchar(255) NOT NULL DEFAULT '',
`fCodProdus` varchar(50) DEFAULT NULL,
`fImagine` varchar(100) DEFAULT NULL,
`fDescriere` varchar(255) DEFAULT NULL,
`fSpecificatii` blob,
`fPret` varchar(50) NOT NULL DEFAULT '0',
`fLuniGarantie` varchar(25) NOT NULL DEFAULT '0',
PRIMARY KEY (`fIdProdus`),
UNIQUE KEY `fIdProdus` (`fIdProdus`),
KEY `fIdProdus_2` (`fIdProdus`)
)
Câmpurile prevăzute pentru această tabelă (conform structurii realizate cu comanda
SQL anterioară) sunt:

fIdProdus – de tip întreg, cu autoincrementare (definit ca şi cheie primară), pe baza acestui câmp
făcându-se referirea online a oricărui produs, precum şi legătura cu alte tabele), reprezentând id-
ul produsului, ca şi cod unic de identificare al unui produs din tabela TPRODUSE

.fIdSubcategorie – de tip intreg care face legatura cu tabela TSUBCATEGORII prin câmpul cu
același nume
fIdProducator – de tip întreg car face legatura cu tabela TPRODUCATORI prin câmpul cu
același nume
fNumeProdus – de tip text conține denumirea prodului
fCodProdus – de tip text contșine codul produsului
fImagine- de tip text conțne denumirea fisierului imagine asociat produsului
fDescriere – de tip text conține descrierea produsului
fSpecificatii – de tip blob conține o descrire amănunțită a produsului, cuprinzând specificațiile
fPret - de tip text conține prețul produsului
fLuniGarantie – de tip text conține numărul de luni de garanție

Adăugarea unor produse în tabelă (pentru primele teste efectuate asupra componentei
client) s-a făcut cu o comandă SQL de forma următoare (spre exemplificare):

28
mysql>INSERT INTO `tproduse` (`fIdProdus`, `fIdSubcategorie`, `fIdProducator`,
`fNumeProdus`, `fCodProdus`, `fImagine`, `fDescriere`, `fSpecificatii`, `fPret`, `fLuniGarantie`)
VALUES (NULL, '8', '11', 'Router Asus', 'AC3500', 'router_asus.jpg', 'Router dual band', NULL,
'1200', '24')

Aceste categorii acoperă majoritatea ofertelor existente în domeniu.

Tabela TPRODUSECOMENZI

În tabela TPRODUSECOMNEZI se regăsesc produsele care au fost comandate în cadrul


unei anumit comenzi .
Comanda SQL de creare a tabelei este:
mysql>
CREATE TABLE `tprodusecomenzi` (
`fIdArticol` int(11) UNSIGNED NOT NULL,
`fIdComanda` int(11) DEFAULT NULL,
`fIdProdus` int(11) DEFAULT NULL,
`fCantitate` int(11) DEFAULT NULL
)

Cîmpurile tabelelei sunt :


fIdArticol – de tip întreg, reprezintă id-ul fiecărei înregistrari din acestă tabelă,
fIdComanda – de tip întreg, reprezintă id-ul comenzii așa cum este ea în tabela TCOMENZI,
fIdProdus– de tip întreg, reprezintă id-ul prodului și pe baza acestui câmp se face legătura cu
tabela TPRODUSE,
fCantitate– de tip întreg, reprezintă cantitatea din fiecare produs.

Date se introduc prin intermediu unei comenzi SQL :


INSERT INTO `tprodusecomenzi` (`fIdArticol`, `fIdComanda`, `fIdProdus`, `fCantitate`)
VALUES(7, 3, 21, 1);

Tabela TPROMOTII

În tabela TPROMOTII se regăsesc produsele care sunt in promotie pentru o anumita perioadă.

Comanda SQL de creare a tabelei este:


mysql>
CREATE TABLE `tpromotii` (
`fIdPromotie` int(11) UNSIGNED NOT NULL,
`fIdProdus` int(11) NOT NULL DEFAULT '0',
`fDataInceput` date NOT NULL DEFAULT '0000-00-00',
`fDataSfarsit` date NOT NULL DEFAULT '0000-00-00',
`fPretRedus` varchar(50) NOT NULL DEFAULT '0'
)

Cîmpurile tabelelei sunt :


fIdPromotie – de tip intreg, reprezintă id-ul fiecărei promoții,
fIdProdus – de tip intreg, reprezintă id-ul produsului care este in promoție și este câmpul pe
baza căruia se face legătura cu tabela TPRODUSE,
fDataInceput – de tip dată calendaristică, conșine date de început a promoției pentru un
anumit produs,
fDataSfarsit fDataInceput – de tip dată calendaristică, conșine date de sfârșit a promoției
pentru un anumit produs ,
29
fPretRedus – de tip text, reprezinta pretul pe care îl are un produs aflat în promoție.

Tabela TSUBCATEGORII

Rolul tabelei TSUBCATEGORII este de a defalca ( dacă este cazul ) o categorie în mai
multe subcategorii pentru o mai bună organizare a produselor și o mai ușoară regăsire a
produselor listate pe site . De exemplu categoria “Imprimante” poate avea subcategoria
“imprimante monocolor” și “imprimante color”.

Comanda SQL de creare a tabelei este:


mysql>
CREATE TABLE `tsubcategorii` (
`fIdSubcategorie` int(11) UNSIGNED NOT NULL,
`fIdCategorie` int(11) UNSIGNED NOT NULL DEFAULT '0',
`fNumeSubcategorie` varchar(100) NOT NULL DEFAULT ''
)

Cîmpurile tabelelei sunt :


fIdSubcategorie – de tip intreg, reprezintă id-ul subcategoriei,
fIdCategorie – de tip întreg, reprezintă id-ul categoriei din care face parte subcategoria și este
câmpul pe baza căruia se face legătura cu tabela TCATEGORII,
fNumeSubcategorie – de tip text, reprezintă numele subcategoriei

Tabela TUTILIZATORI

Rolul tabelei TUTILIZATORI este de a stoca datele fiecarui utilizator care se autentifica pe
site .
Comanda SQL de creare a tabelei este:
mysql>
CREATE TABLE `tutilizatori` (
`fIdUtilizator` int(11) UNSIGNED NOT NULL,
`fNumeUtilizator` varchar(32) NOT NULL DEFAULT '',
`fParola` varchar(32) NOT NULL DEFAULT '',
`fEmail` varchar(150) NOT NULL DEFAULT '',
`fAdresa` text,
`fDataInregistrare` date DEFAULT NULL
)

Câmpurile acestei tabele sunt cele comune pentru a avea date minime despre un utilizator.

fIdUtilizator – de tip întreg, reprezintă id-ul fiecărui user,


fNumeUtilizator – de tip text, reprezintă numele sub care s-a inregistrat vizitatorul site-ului',
fParola – de tip text, reprezintă parola aleasa de utilizator pentru a se putea autentifica pe site,
fEmail – de tip text, reprezinta adresa de email a utilizatorului,
fAdresa – de tip text, reprezintă adresa utilizatorului. Aceasta poate fi folosită pentru livrarea
comenzilor,
fDataInregistrare – de tip data calendaristică , reprezintă data la care s-a autentificat vizitatorul
Tabela TVOTURI

30
În tabela voturi se regăsesc numarul de voturi pe care un produs l-a primit de la cei care au vizitat
site-ul. Este util pentru a face anumite clasamente sau pentru o îndrumare a celor care cauta
produse apreciate și de alții.

Comanda SQL de creare a tabelei este:


mysql>
CREATE TABLE `tvoturi` (
`fIdVot` int(11) UNSIGNED NOT NULL,
`fIdProdus` int(11) UNSIGNED NOT NULL DEFAULT '0',
`fIdUtilizator` int(11) UNSIGNED NOT NULL DEFAULT '0',
`fValoareVot` int(11) UNSIGNED NOT NULL DEFAULT '0'
)

Câmpurile tabelei sunt :

fIdVot – de tip întreg, reprezintă id-ul fiecărui vot,


fIdProdus – de tip întreg, reprezinta id-ul produsului care a fost votat și face legătura cu tabela
TPRODUSE,
fIdUtilizator – de tip întreg, reprezintă id-ul utilizatorului care a votat respectivul produs. Pe
baza lui se face legătura cu tabela TUTILIZATORI,
fValoareVot – de tip întreg, reprezinta valoare votului dată de utilizator produsului

3.2.3. Scripturile componentei Client

Scriptul CATALOG (index.php)

Rolul acestui script este de a realiza afişarea produselor selectabile (oferta curentă) de
către un client Web (Figura 3.2). În plus, scriptul asigură reactualizarea dinamică automată a
paginii afişate (în funcţie de conţinutul tabelei TPRODUSE, TCATEGORII
,TSUBCATEGORII,), permite navigarea în interiorul site-ului, accesare informațiilor despre
condițiile în care se face achiziția unor produse, metodele de plată și de transport precum și despre
promoțiile și cupoanele disponibile. La fiecare accesare a site-ului sunt afișate trei produse alese
aleatoriu din tabela TPRODUSE.
Totodată permite , prin secțiunea de cautare, o filtrare a produselor și implicit o regăsire
mai rapida a celor căutate . Detaliile fiecărui produs sunt afisate prin selectarea imaginii acelui
produs .
Din schema structurală şi de flux informaţional (Figura A2), se poate observa că acest script
extrage date din tabelele MySQL TPRODUSE, TCATEGORII, TSUBCATEGORII.
Așa cum am precizat, acest script folosește o serie de funcții care se regăsesc în
fișierul functions.inc.php . Conținutul acestui fișier este următorul (prezint fragmente) :

31
32
33
Evidențiem funcția fInsertCategLeftMenu(), funcție ce preia categoriile din baza de date,
din tabela tcategorii si le afiseaza sub forma unui meniu .

Operaţiile principale asigurate (din punct de vedere tehnic) de acest script sunt:
- interogarea şi extragerea din tabela T PRODUSE a întregului conţinut necesar, în
vederea afişării a trei produse.
- construirea unei secțiuni care să permită o cautare rapidă
- prezentarea unui meniu ce permite afișarea produselor care fac part dintr-o anumită
categorie. De remarcat că, în funcţie de numărul de categorii (tabela TCATEGORII),
structura acestui meniu este variabilă (numărul de linii ale meniului afişat este
variabil). În funcţie de selecţa efectuate de către client, valoarea parametrului transferat
mai departe spre scriptul următor, este la rândul ei variabilă.

Figura 3.2 Catalog selecţie produse din categori Software

După cum se poate observa din codul sursă al scriptului, pentru fiecare categorie aleasă
din meniu se extrag din tabela TPRODUSE datele despre produsele din respectiva categorie.
Totodată se verifică dacă produsul este la promoție, se afișează prețul și asociat fiecărui produs
un buton “Adauga in cos”.

Codul sursă pentru acest script, care constituie pentru un client intrarea pe site şi
alegerea unei categorii, este prezentat în continuare:
<?php
session_start();
include_once("./include/functions.inc.php");
$myConn = fDBConnect();
fSetProductOfTheDayID();
if(isset($_GET['intIdCategorieCautare'])){
$intIdCategorieCautare = $_GET['intIdCategorieCautare'];
}
else{
$intIdCategorieCautare = 0;
}
34
if(isset($_GET['mode'])){
$mode = $_GET['mode'];
}
else{
$mode = "";
}

35
</td>
</tr>
<tr>
<td>
<table class="contenttable">
<tr>

36
Scriptul COȘ DE CUMPĂRĂTURI

Acest script, după cum rezultă şi din numele lui, implementează pe baza selecţiilor
anterioare (făcute în scriptul apelant) coşul virtual al clientului curent (Figura 3.3). Accesarea
acestui script, cât şi al celui anterior, nu presupune nicio obligaţie din partea clientului,
momentan el aflându-se doar la “nivelul vizitare”.

Rolul scriptului este de a afişa “coşul virtual” al clientului cu produsele selectate,


cantitatea, valoarea acestora per bucată, subtotaluri şi totalul general şi de a-i permite o
eventuală trecere la nivelul următor -“nivel cumpărare”- dacă doreşte, sau o revenire la
catalogul de produse, fără a face o comandă fermă. Este posibil de asemenea să modifice cantitatea
fiecărui produs sau să golească coșul .

Figura 3.3 Coş virtual

Elementul esenţial care apare în acest script constă în crearea unei ‘sesiuni de lucru’,
specifice fiecărui client Web, individual. Crearea unei sesiuni (‘sesiune client’ în componenta
de faţă) este asigurată de către limbajul PHP prin utilizarea în script a unui aşa numit mecanism
SESSION, pus în funcţiune prin linia de program:
session_start();

Modul de lucru sesiune şi utilitatea lui în aplicaţia de faţă sunt prezentate în continuare.

În momentul executării liniei de cod session_start(); interpretorul PHP iniţiază


o sesiune de lucru valabilă pentru clientul Web curent, atâta timp cât acesta nu închide browserul
din care a apelat respectivul script conţinând această linie de cod (sau dacă setările
interpretorului PHP prevăd o anumită durată de viaţă pentru o sesiune de lucru, atâta timp cât
este prevăzută această durată de viaţă). Fizic, iniţierea unei sesiuni înseamnă crearea unui
fişier sesiune (implicit în calea relativă PHP\SESSIONDATA de pe server), cu un nume aleator,
unic, pentru fiecare sesiune pornită, spre exemplificare, de forma:
sess_1b308801f20323d771ee80f38af2489e
37
În cadrul comenzii global $global; parametrul cu numele (în cazul particular de
faţă) global este practic o variabilă (sau şir, tablou, etc.) ale cărei/cărui valori (iniţializate
prin comenzi PHP uzuale) sunt vizibile şi deci apelabile/utilizabile în orice alt script referit de
browser pe parcursul sesiunii de lucru. Cu alte cuvinte, conţinutul acestei variabile (de regulă
şir, tablou monodimensional sau tablou bidimensional) devine public pentru orice script
apelat pe parcursul duratei de viaţă a sesiunii, cu condiţia ca fiecare astfel de script să conţină,
obligatoriu la începutul codului lui, linia de iniţiere a sesiunii.
O sesiune de lucru se încheie în momentul închiderii browserului sau prin cod script
(comanda session_destroy()). La oprirea browserului, datele din fişierul sesiune
rămân stocate, iar o încheiere prin cod script a sesiunii conduce la ştergerea fişierului sesiune.
Primul script startează o sesiune, creându-se un fişier sesiune, în care se va memora
conţinutul unei variabile $var (atribuit explicit ulterior startării sesiunii în cadrul scriptului).
În acest moment, fişierul sesiune va conţine (vezi tabelul anterior): numele variabilei (var),
tipul şi lungimea conţinutului (s:4) – string 4 –, precum şi conţinutul efectiv: stringul „ceva”.
În scriptul a.php este prevăzut un hyperlink către un al doilea script b.php, în care, sesiunea
fiind în continuare activă (comanda session_register("var")), se asigură
disponibilitatea conţinutului variabilei $var (care de altfel este şi afişat pe ecran). La finalul
scriptului b.php sesiunea este distrusă – fişierul sesiune fiind şters – (comanda
session_destroy()) . De asemenea, în al doilea script este prevăzut un hyperlink de
revenire spre scriptul apelant (a.php), care restartează aceeaşi sesiune (şi crează un fişier sesiune
cu acelaşi nume) şi întreg procesul se reia. Cu alte cuvinte, cele două scripturi
implementează o buclă repetitivă de (re)creare/distrugere succesivă a unei sesiuni.

Exemplu: Fie următoarele două fişiere script PHP, prezentate în tabelul următor:

Script a.php Script b.php


<?php <?php
session_start(); session_ start();
$_SESSION['var'] = "ceva"; echo $var;

38
Menţinerea disponibilităţii şi a accesabilităţii unor informaţii (date) pe toată durata
navigării prin mai multe pagini Web constituind o aplicaţie unitară (în diverse scopuri
particularizate la specificul aplicaţiei) constituie principalul beneficiu conferit de lucrul cu
sesiuni.
Observaţie: Transferul de parametri de la un script spre altul, în vederea asigurării
disponibilităţii acestora în mai multe pagini Web, se poate realiza şi utilizând casete
de tip INPUT cu atributul type=’hidden’. Metoda este eficientă atunci când trebuie
transferat un număr fix, redus de parametri, dar devine greoaie atunci când numărul
parametrilor de transferat creşte.

În cazul aplicaţiei de faţă, se pune problema păstrării disponibilităţii datelor


(informaţiilor) care constituie coşul virtual al unui client pe parcursul navigării prin mai multe
pagini Web ale aplicaţiei (pagina de autentificare a clientului, pagina de înregistrare a unui
client nou, etc.). Aceste informaţii se constituie ca date nepersistente (din punct de vedere al
stocării lor utile într-o tabelă a bazei de date), până în momentul realizării unei comenzi ferme
(situaţie în care se realizează stocarea lor în tabela COMENZI).

O variantă alternativă ar fi utilizarea unei tabele suplimentare pentru stocarea


coşului
virtual. În acest caz apar probleme de genul următor:
- Clientul, după ‘construirea coşului’, părăseşte site-ul. Evident că toate aceste
comenzi nevalidate rămân ca un ‘rebut’ în tabela respectivă. Ceea ce ar fi
echivalent cu următorul caz din realitatea fizică: un client intră într-un magazin,
umple coşul, îl abandonează undeva fără a ajunge cu el la casă şi părăseşte
magazinul. Repetarea unor astfel de acţiuni (foarte probabile în cazul aplicaţiilor
de vânzări online) poate conduce la necesitatea unor acţiuni suplimentare de
“curăţenie”, uneori deranjante prin frecvenţa lor. Tabela respectivă ar creşte în
dimensiune neîncetat şi fără nicio utilitate. De asemenea, accesul repetat la un
server de baze de date este un mare consumator de resurse (mai ales în cazul unor
baze de date/tabele de mari dimensiuni).
- Din punct de vedere strict al complexităţii codului program, soluţia cu sesiuni
de lucru este mult mai simplă, mai elegantă şi mai eficientă. Accesul la o tabelă
suplimentară (care să stocheze coşul virtual, chiar temporar) conduce la o creştere
a complexităţii programului, cu riscurile aferente ce decurg de aici (o rată
mai mare de apariţie a erorilor, mentenanţă mai greoaie a produsului software,
viteză mai mică în special în cazul unui număr mare de accesări concurente).
- De asemenea apare problema accesului concurent al mai multor clienţi, situaţie
conformă cu ceea ce se întâmplă în realitate (se doreşte implementarea unui
magazin virtual accesat simultan de către o mulţime de clienţi la un moment dat
şi nu a unei gherete care poate deservi la un moment dat un singur client).
Utilizarea mecanismului sesiune de lucru rezolvă această dilemă, pentru fiecare
client creându-se un fişier sesiune separat (o identitate unică). Accesul concurent
de tip scriere/citire al mai multor clienţi la o aceeaşi tabelă creşte de asemenea
complexitatea problemelor de rezolvat. Chiar dacă nu s-ar opta pentru o stocare
a
’coşului virtual’ într-o bază de date (tabelă), ci într-un fişier text oarecare, faptul

39
la un moment dat mai mulţi clienţi ar încerca să acceseze acest fişier (atât
pentru citire cât şi pentru scriere) crează probleme extrem de complexe de
implementare.

Dimensiunea acestor fişiere sesiune (depinzând doar de complexitatea datelor stocate


în ele) este oricum extrem de redusă. În aplicaţia de faţă, dimensiunea unui astfel de fişier
este de ordinul a zeci, maxim sute, de bytes (crescând odată cu dimensiunea catalogului).
Probabil că lista de argumente ar putea continua. Oricum, un lucru rezultă cu
certitudine: utilizarea mecanismului de lucru cu sesiuni oferă avantaje de necontestat:
simplitate, siguranţă, viteză şi eficienţă.

Fişierul sesiune este creat automat la deschiderea unei sesiuni, realizată prin
comanda
session_start() de la începutul scriptului.

Dacă clientul nu a selectat niciun produs din catalog, sesiunea este distrusă, fişierul
sesiune fiind şters. În acest caz, singurul mod de continuare normală este revenirea în pagina
principală (cea cu catalogul). În situaţia în care clientul realizează o selecţie a unor produse,
urmată de afişarea coşului virtual, apoi închide browserul (ieşire forţată), sesiunea se încheie
fără a se şterge fişierul sesiune.

Codul sursă al acestui script este următorul:

<?php
session_start();
include_once("./include/functions.inc.php");
$myConn = fDBConnect();
fSetProductOfTheDayID();
if(isset($_GET['intIdCategorieCautare'])){
$intIdCategorieCautare = $_GET['intIdCategorieCautare'];
}
else{
$intIdCategorieCautare = 0;
}
$intIdUtilizator = $_SESSION['intIdUtilizator'];

?>
<?php fInsertDocType(); ?>
<head>
<title>Cosul meu de cumparaturi</title>
<?php fInsertMetaTags(); ?>
<?php fInsertCSS(); ?>
<?php fInsertJS(); ?>
</head>
<body>

<table class="maintable">
<tr style="height: 132px;">
<td id="header">
<?php fInsertCartLink(); ?>
<!--START TOP MENU-->
<?php fInsertLoginArea(); ?>
<?php fInsertTopMenu(); ?>
<!--END TOP MENU-->
</td>
</tr>
<tr>
<td>
<table class="contenttable">
<tr>
<td class="leftcolcontainer">
<!--start left column-->
<table class="leftcoltable">

40
<tr>
<td>
<!--START QUICK
SEARCH-->
<?php
fInsertQuickSearch($intIdCategorieCautare); ?>
<!--END QUICK
SEARCH-->
</td>
</tr>
<tr style="height:
5px;"><td></td></tr>
<!--START MENU CATEGORII-->
<?php
fInsertCategLeftMenu(); ?>
<!--END MENU CATEGORII-->
<tr style="height:
5px;"><td></td></tr>
<!--START MENU INFORMATII-->
<?php fInsertInfoLeftMenu();
?>
<!--END MENU INFORMATII-->
<tr style="height:
5px;"><td></td></tr>
<!--START MENU ALTELE-->
<?php
fInsertOthersLeftMenu(); ?>
<!--END MENU ALTELE-->
</table>
<!--end left column-->
</td>
<td id="maincontent">
<!--START MAIN CONTENT-->
<table style="width: 100%;">
<tr><td>
<!--START CONTENT-->
<h1 class="pageheader">Continutul cosului
de cumparaturi</h1>
<?php

$intIdUtilizator =
$_SESSION['intIdUtilizator'];
if ($intIdUtilizator > 0) { //
userul este logat

$strIdSesiune = session_id();
$strSQL = "SELECT tcos.*,
tproduse.fNumeProdus, tproduse.fPret FROM tcos, tproduse WHERE
tcos.fIdProdus=tproduse.fIdProdus AND fIdUtilizator=$intIdUtilizator AND
fIdSesiune='$strIdSesiune'";
$result =
mysqli_query($myConn,$strSQL);
$itemsno =
mysqli_num_rows($result);
if ($itemsno > 0) { // utilizatorul
are produse in cos
echo "<table style=\"width:
100%; background-color: #FFFFFF; border: 2px #B1C9B1 solid; font-size:
9pt;\"><tr><td>\n";
echo "<form
action=\"execute.php?action=updatecart\" method=\"post\" style=\"display:
inline;\">\n";
echo "<fieldset
style=\"border: 0px;\">\n";
echo "<table style=\"width:
100%; border: 0px;\"><tr><td>\n";
echo "<tr style=\"font-size:
9pt; font-weight: bold;\">\n";
echo "<td>Nume
produs</td>\n";
echo "<td>Cantitate</td>\n";
echo "<td>Pret
unitar</td>\n";
echo "<td>Total</td>\n";
echo "</tr>\n";
$intIndex = 1;
$intTotalCos = 0;

41
while ($row =
mysqli_fetch_array($result)) {
$intTotalProdus = 0;
$intIndex = 3 -
$intIndex;
$intIdProdus =
$row['fIdProdus'];
$strNumeProdus =
$row['fNumeProdus'];
$intCantitate =
$row['fCantitate'];

//start check for


promo
Scriptul PREVIZUALIZARE COMANDĂ (comanda.php)

Rolul acestui script e st e d e a p r e l u a d a t e l e d e l i v r a r e a c o m e nz i i si d e a d a


p o p s i bi l i t a t e a i nt r od u c e r i i u n ui c u p o n d e r e d u c e r e .

Codul sursă pentru scriptul curent tratat este


următorul:
<?php
session_start();
include_once("./include/functions.inc.php");
$myConn = fDBConnect();
fSetProductOfTheDayID();
if(isset($_GET['intIdCategorieCautare'])){
$intIdCategorieCautare =
$_GET['intIdCategorieCautare'];
}
else{
$intIdCategorieCautare =0;
}
$intIdUtilizator =
$_SESSION['intIdUtilizator'];
?>
<?php fInsertDocType(); ?>
<head>
<title>Cosul meu de cumparaturi</title>
<?php fInsertMetaTags(); ?>

42
<?php fInsertCSS(); ?>
<?php fInsertJS(); ?>
</head>
<body>

<table class="maintable">
<tr style="height: 132px;">
<td id="header">
<?php fInsertCartLink(); ?>
<!--START TOP MENU-->
<?php fInsertLoginArea(); ?>
<?php fInsertTopMenu(); ?>
<!--END TOP MENU-->
</td>
</tr>
<tr>
<td>
<table
class="contenttable">
<tr>
<td
class="leftcolcontainer">
<!-
-start left column-->

<table class="leftcoltable">

<tr>

<td>

<!--START QUICK SEARCH-->

<?php
fInsertQuickSearch($intIdCategorieCautare); ?>

<!--END QUICK SEARCH-->

</td>

</tr>

<tr style="height: 5px;"><td></td></tr>

<!--START MENU CATEGORII-->

<?php fInsertCategLeftMenu(); ?>

<!--END MENU CATEGORII-->

<tr style="height: 5px;"><td></td></tr>

<!--START MENU INFORMATII-->

<?php fInsertInfoLeftMenu(); ?>

<!--END MENU INFORMATII-->

<tr style="height: 5px;"><td></td></tr>

<!--START MENU ALTELE-->

<?php fInsertOthersLeftMenu(); ?>

<!--END MENU ALTELE-->

</table>
<!-
-end left column-->
</td>
<td
id="maincontent">
<!--START
MAIN CONTENT-->
<table
style="width: 100%;">
<tr><td>

43
<!--START
CONTENT-->
<h1
class="pageheader">Continutul cosului de
cumparaturi</h1>
<?php if
($intIdUtilizator > 0) { // userul este logat

$intIdUtilizator =
$_SESSION['intIdUtilizator'];

$strIdSesiune = session_id();

$strSQL = "SELECT tcos.*, tproduse.fNumeProdus,


tproduse.fPret FROM tcos, tproduse WHERE
tcos.fIdProdus=tproduse.fIdProdus AND
fIdUtilizator=$intIdUtilizator AND
fIdSesiune='$strIdSesiune'";

Scriptul VALIDARE COMANDA (confirmare.php)

Rolul acestui script este de a face o verificare a datelor de autentificare furnizate de


client, validând şi înregistrând o noua comandă.

Figura 3.5 Preluare şi Confirmare comandă

Codul acestui script este


următorul:
<?php
session_start();
include_once("./include/functions
.inc.php");
$myConn = fDBConnect();
fSetProductOfTheDayID();
if
(isset($_GET['intIdCategorieCauta
re'])){
$intIdCategorieCautare =
$_GET['intIdCategorieCautare'];
}
else{
$intIdCategorieCautare =
0;

44
}

$intIdUtilizator =
$_SESSION['intIdUtilizator'];
$strNumeCumparator =
$_POST['txtNumeCumparator'];
$strEmailCumparator =
$_POST['txtEmailCumparator'];
$strAdresaCumparator =
$_POST['txtAdresaCumparator'];
$strCupon =
$_POST['txtCuponCumparator'];
?>
<?php fInsertDocType(); ?>
<head>
<title>Cosul meu de
cumparaturi</title>
<?php fInsertMetaTags(); ?>
<?php fInsertCSS(); ?>
<?php fInsertJS(); ?>
</head>
<body>

<table class="maintable">
<tr style="height:
132px;">
<td id="header">
<?php
fInsertCartLink(); ?>
<!--START TOP
MENU-->
<?php
fInsertLoginArea(); ?>
<?php
fInsertTopMenu(); ?>
<!--END TOP MENU--
>
</td>
</tr>
<tr>
<td>
<table
class="contenttable">

<tr>

<td class="leftcolcontainer">

<!--start left column-->

<table
class="leftcoltable">

<tr>

<td>

<!--START
QUICK SEARCH-->

<?php
fInsertQuickSearch($intIdCategori
eCautare); ?>

<!--END
QUICK SEARCH-->

</td>

</tr>

<tr style="height:
5px;"><td></td></tr>

<!--START MENU
CATEGORII-->

45
<?php
fInsertCategLeftMenu(); ?>

<!--END MENU
CATEGORII-->

<tr style="height:
5px;"><td></td></tr>

<!--START MENU
INFORMATII-->

<?php
fInsertInfoLeftMenu(); ?>

<!--END MENU
INFORMATII-->

<tr style="height:
5px;"><td></td></tr>

<!--START MENU
ALTELE-->

3.3. Componenta Administrare

3.3.1. Funcții generale


Componenta „ADMINSTRARE” asigură întreținerea și gestionarea site-ului.

Această componentă este destinată exclusiv unui administrator din firmă, care
se ocupă de procesarea comenzilor, nu şi publicului larg. De altfel, scripturile aferente
acestei componente sunt grupate intr-un folder separat.
Datorită caracterului privat al acestei componente, aplicaţia trebuie astfel proiectată
încât orice încercare de accesare directă a unei pagini a acestei componente să fie stopată din
start. Realizarea unui mecanism de securizare adecvat, conduce implicit la o creştere
semnificativă a complexităţii componentei. Într-o primă etapă, componenta a fost proiectată
şi implementată pentru a asigura doar funcţiunile de bază (gestionarea tabelelor), fără a se lua
în calcul un mecanism de protecţie (securizare).
Schema structurală şi de flux informaţional a componentei “procesare comenzi clienţi”,
neprevăzută cu un mecanism de securizare, este prezentată în Figura A3. Comparativ,
adăugarea unui mecanism de securizare a acestei componente, conduce la a schemă
structurală şi de flux informaţional de forma celei din Figura A4.
În primul rând, o derulare în condiţii (funcţionale şi de securitate) normale a acţiunii
componentei se poate face doar dacă se startează un acces pornind de pe pagina portal intrare
securizat (scriptul index.php din folderul “admin” . Orice încercare de accesare directă a
unei pagini/script a componentei (din linia de comandă a unui browser client) este sortită
eşecului. Asigurarea unei protecţii pentru astfel de accese directe neautorizate, conduce
la o securizare care implică o reproiectare inclusiv a acţiunilor administratorului însuşi,
de navigare-revenire între scripturi (realizarea unui BACK securizat).
În plus, în cadrul acestei componente se utilizează şi o tabelă MySQL, cu numele
TADMINS, care stochează exclusiv informaţiile LOGIN şi PAROLA administrator (tabela
are un singur rând).

46
Scriptul ADMINISTRARE PRODURE (produse.php)

Pagina de start a modului de adminstrare oferă opțiuni pentru gestionarea tuturor


tabelelor bazei de date .

Figura 3.6 Portal intrare administrator

Modul de funcționare a scripturilor pentru fiecare opțiune este asemănător, fiind


posibilă editarea sau stergerea unei inregistrări.
Pentru exemplificare vom prezenta mecanismul din spatele opțiunii administrare
produse.
Acesta prezintă sub formă tabelară tpate produsele din tabela TPRODUSE, având ca și cap de
tabel Nume produs, Producător,Categorie,Subcategorie, iar în dreptul fiecărui produs există
trei butoane ce permit vizualizarea detaliilor, editarea produsului sau stergerea sa .

47
Codul acestuia este următorul:

<?php
<tr
style="height: 50px; width: 100%;">
<td
colspan="2" style="font-weight:
bold; text-align: center; height:
50px; width: 100%; font-family:
Tahoma, Verdana, Arial; font-size:
10pt;">Panou de Administrare</td>
</tr>
<tr>
<td
style="width: 200px;" valign="top">

<?php
fPrintLoginAreaAdmin($bIsLoggedIn,
$strError); ?>
</td>
<td
style="width: 700px;" valign="top"
align="center">

<br> &nbsp; &nbsp; &nbsp; <a


class="genLinkReverse"
href="adaugaprodus.php">Adauga
produs</a><hr>

<?php

$strSQL = "SELECT
tproduse.*,
tsubcategorii.fNumeSubcategorie,
tproducatori.fNumeProducator,
tcategorii.fIdCategorie,
tcategorii.fNumeCategorie FROM
tproduse, tproducatori, tcategorii,
tsubcategorii WHERE
tproduse.fIdProducator=tproducatori
.fIdProducator AND
tproduse.fIdSubcategorie=tsubcatego
rii.fIdSubcategorie AND
tcategorii.fIdCategorie=tsubcategor
ii.fIdCategorie ";

if ($intIdProducator
> 0) {

$strSQL .= "
AND
tproduse.fIdProducator=$intIdProduc
ator ";

if
($intIdSubcategorie > 0) {

$strSQL .= "
AND
tproduse.fIdSubcategorie=$intIdSubc
ategorie ";

$result =
mysqli_query($myConn,$strSQL);

echo "<table
cellpadding=\"3\" cellspacing=\"0\"
border=\"0\" width=\"1100\"
class=\"modelspecs\">\n";

48
De remarcat aici faptul că orice modificare ce se face asupra datelor din baza de date
este efectuată prin intermediul fisierului execute.php, care în funcție de parametrul pe
care îl primește execută anumite operațiuni specifice. În acest caz fișierul execute.php
este apelat prin comanda <a onclick=\"return confirmSubmit('Confirmati stergerea
produsului?')\"
href=\"execute.php?action=stergereprodus&intIdProdus=$intIdProdus\"> și îi sunt
transmiși doi parametrii ( action= stergereprodus și intIdProdus=$intIdProdus) .
Codul acestui script execute.php este următorul:

<?php
session_start();
include_once("../include/mysql.inc.php");
include_once("../include/functions.inc.php");
include_once("../include/adminfunctions.inc.php");
$bIsLoggedIn = fCheckAdminLogin();
$myConn = fDBConnect();
$aActions = array('default', 'login', 'logout', 'chpass', 'adaugareproducator',
'modificareproducator', 'stergereproducator', 'adaugarecategorie', 'modificarecategorie',
'stergerecategorie', 'adaugaresubcategorie', 'modificaresubcategorie', 'stergeresubcategorie',
'adaugareprodus', 'modificareprodus', 'stergereprodus', 'adaugarecupon', 'modificarecupon',
'stergerecupon', 'aprobacomentariu', 'dezaprobacomentariu', 'stergerecomentariu',
'adaugarepromotie', 'modificarepromotie', 'stergerepromotie', 'stergereutilizator',
'stergerecomanda');
$strAction = htmlspecialchars(trim($_GET['action']));

$key = array_search($strAction, $aActions);


if ($key > 0) { // valid action specified
//Login
if ($strAction == "login") {
$strUsername = htmlspecialchars(trim($_POST['txtUsername']));
$strPassword = htmlspecialchars(trim($_POST['txtPassword']));
if (fCheckUserPassAdmin($strUsername, $strPassword)) {
$intIdAdmin = $_SESSION['intIdAdmin'];
Header('location:index.php');
} else {
Header('location:index.php?error=loginerror');
}
}
//-----------------------------------------------------------------------------
----
// CHECK IF THE ADMIN IS LOGGED IN FOR THE FOLLOWING
FUNCTIONS
if (!$bIsLoggedIn) {
Header("Location:index.php");
}
//-----------------------------------------------------------------------------
---
//Logout
if ($strAction == "logout") {
$_SESSION['intIdAdmin'] = "";
$_SESSION['strUsername'] = "";
session_destroy();

49
Scriptul EDITARE PRODUSE (editare produs.php)

Acest script m o d i f i c a r e a d a t e l o r u n u i p r o d u s

Figura 3.7 Modifcare produs

Observăm că produsul permite modific area tuturor caracteristicilor


unui produs (categorie,subcategorie, producător, nume, cod,
imagine, descriere,specificații, preț și perioada de garanție ).

Codul scriptului este :


<?php
session_start();
include_once("../include/mysql.inc.php");
include_once("../include/functions.inc.php");
include_once("../include/adminfunctions.inc.php");
$bIsLoggedIn = fCheckAdminLogin();
$bIsLoggedIn=true;
if (!$bIsLoggedIn) {
Header("Location:index.php");
}
$myConn = fDBConnect();
if(isset($_GET['error'])){
$strError = $_GET['error'];
}
else{
$strError = '';
}

$intIdProdus = $_GET['intIdProdus'];

if(isset($_GET['mode'])){
$mode = $_GET['mode'];
}
else{
$mode="";
}
if ($mode == "error") {
$intIdCategorie = $_GET['intIdCategorie'];
$intIdSubcategorie = $_GET['intIdSubcategorie'];
$intIdProducator = $_GET['intIdProducator'];
$strNume = $_GET['strNume'];
$strCod = $_GET['strCod'];
$strDescriere = $_GET['strDescriere'];

50
$strSpecificatii = $_GET['strSpecificatii'];
$strPret = $_GET['strPret'];
$strGarantie = $_GET['strGarantie'];

$strSQL = "SELECT fImagine FROM tproduse WHERE


tproduse.fIdProdus=$intIdProdus";
$result = mysqli_query($myConn,$strSQL);
$row = mysqli_fetch_array($result);
$strImagine = $row['fImagine'];
} else {
$strSQL = "SELECT tproduse.*, tsubcategorii.fIdCategorie
FROM tproduse, tsubcategorii WHERE
tproduse.fIdSubcategorie=tsubcategorii.fIdSubcategorie AND
tproduse.fIdProdus=$intIdProdus";
$result = mysqli_query($myConn,$strSQL);
$row = mysqli_fetch_array($result);
$intIdCategorie = $row['fIdCategorie'];
$intIdSubcategorie = $row['fIdSubcategorie'];
$intIdProducator = $row['fIdProducator'];
$strNume = $row['fNumeProdus'];
$strCod = $row['fCodProdus'];
$strImagine = $row['fImagine'];
$strDescriere = $row['fDescriere'];
$strSpecificatii = $row['fSpecificatii'];
$strPret = $row['fPret'];
$strGarantie = $row['fLuniGarantie'];
}
if ($mode == "refresh") {
$intIdCategorie = $_GET['intIdCategorie'];
}
?>
<html>
<head>
<title> Sectiunea de administrare</title>
<link rel="stylesheet" href="../css/admin.css"
type="text/css">
<script language="javascript"
src="../js/functions.js"></script>
</head>
<script language="javascript">
function PageChanger(intIdCategorie) {
document.location =
'editareprodus.php?mode=refresh&intIdProdus=<?php echo
$intIdProdus; ?>&intIdCategorie=' + intIdCategorie;
}
</script>
<body>
<table cellpadding="0" cellspacing="0" border="1"
width="100%" height="100%">
<tr style="height: 50px; width: 100%;">
<td colspan="2" style="font-weight: bold;
text-align: center; height: 50px; width: 100%; font-family:
Tahoma, Verdana, Arial; font-size: 10pt;">Panou de
Administrare </td>
</tr>
<tr>
<td style="width: 200px;" valign="top">
<?php fPrintLoginAreaAdmin($bIsLoggedIn,
$strError); ?>
</td>
<td style="width: 700px;" valign="top"
align="center">
<form enctype="multipart/form-data"
name="frmModificaProdus" id="frmModificaProdus" method="post"
action="execute.php?action=modificareprodus" onSubmit="return
fValidareAdaugareProdus();">
<input type="hidden"
name="intIdProdus" id="intIdProdus" value="<?php echo
$intIdProdus; ?>">
<table cellpadding="5"
cellspacing="0" border="0" width="700" class="modelspecs">
<tr>
<td align="center"
colspan="2" style="font-family: Tahoma, Verdana, Arial; font-
weight: bold; font-size: 11pt;"><br>Modificare
produs<br><br></td>
</tr>

51
<tr bgcolor="#F0E7D8">
<td align="right"
width="250">Categorie:</td>
<td width="450">
<select
onChange="PageChanger(this.options[this.selectedIndex].value);
" name="selCategorie" id="selCategorie" style="width: 300px;"
class="text">
<option
value="select">Selecteaza categorie</option>
<?php
$strSQL = "SELECT *
FROM tcategorii";
$result =
mysqli_query($myConn,$strSQL);
while ($row =
mysqli_fetch_array($result)) {
$intIdCateg =
$row['fIdCategorie'];

$strNumeCategorie = $row['fNumeCategorie'];
echo "<option
value=\"$intIdCateg\"";
if
($intIdCategorie == $intIdCateg) {
echo "
selected ";
}
echo
">$strNumeCategorie</option>";
}
?>
</select>
</td>
</tr>
<tr bgcolor="#F0E7D8">
<td align="right"
width="250">Subcategorie:</td>
<td width="450">
<select
name="selSubcategorie" id="selSubcategorie" style="width:
300px;" class="text">
<option
value="select">Selecteaza subcategorie</option>
<?php
$strSQL = "SELECT *
FROM tsubcategorii WHERE fIdCategorie=$intIdCategorie";
$result =
mysqli_query($myConn,$strSQL);
while ($row =
mysqli_fetch_array($result)) {
$intIdSubcateg
= $row['fIdSubcategorie'];

$strNumeSubcategorie =
$row['fNumeSubcategorie'];
echo "<option
value=\"$intIdSubcateg\"";
if
($intIdSubcategorie == $intIdSubcateg) {
echo "
selected ";
}
echo
">$strNumeSubcategorie</option>";
}
?>
</select>
</td>
</tr>
<tr bgcolor="#F0E7D8">
<td align="right"
width="250">Producator:</td>
<td width="450">
<select
name="selProducator" id="selProducator" style="width: 300px;"
class="text">

52
<option
value="select">Selecteaza producator</option>
<?php
$strSQL = "SELECT *
FROM tproducatori";
$result =
mysqli_query($myConn,$strSQL);
while ($row =
mysqli_fetch_array($result)) {
$intIdProd =
$row['fIdProducator'];

$strNumeProducator = $row['fNumeProducator'];
echo "<option
value=\"$intIdProd\"";
if
($intIdProducator == $intIdProd) {
echo "
selected ";
}
echo
">$strNumeProducator</option>";
}
?>
</select>
</td>
</tr>
<tr bgcolor="#F0E7D8">
<td align="right"
width="250">Nume Produs:</td>
<td width="450"><input
type="text" value="<?php echo $strNume; ?>" name="txtNume"
id="txtNume" class="text" maxlength="255" style="width:
300px;"></td>
</tr>
<tr bgcolor="#F0E7D8">
<td align="right"
width="250">Cod Produs:</td>
<td width="450"><input
type="text" value="<?php echo $strCod; ?>" name="txtCod"
id="txtCod" class="text" maxlength="255" style="width:
300px;"></td>
</tr>
<tr bgcolor="#F0E7D8">
<td align="right"
width="250" valign="top">Imagine:</td>
<td width="450">
<?php
if
(trim($strImagine) == "") {
echo "Imaginea
nu a fost incarcata.";
} else {

$strCaleImagine =
"../images/produse/$strImagine";
if
(file_exists($strCaleImagine)) {
echo
"<img src=\"$strCaleImagine\" border=\"0\">";
} else {
echo
"Imaginea nu a fost incarcata.";
}
}
?>
<br><input type="file"
name="imagineprodus" class="field"/><br>Fisiere acceptate:
GIF/JPG<br />Marime maxima: 500kb<br />Dimensiuni maxime:
200px/200px</td>
</tr>
<?php
if ($mode == "error") {
echo "<tr
bgcolor=\"#F0E7D8\">";
echo "<td
colspan=\"2\">";

53
echo "<p
style=\"width: 90%; text-align: center; color: red; padding:
5px; border: red 2px dotted; font-family: Verdana; font-size:
10pt; font-weight: bold;\">";
$error =
$_GET['error'];
echo "<img
alt=\"Eroare\" src=\"../images/icon_error.gif\" border=\"0\"
align=\"middle\"> &nbsp; ";
echo "Eroare
incarcare imagine.<br>Motivul: $error";
echo
"</p></td></tr>";
}
?>
<tr bgcolor="#F0E7D8">
<td align="right"
width="250">Descriere Produs:</td>
<td width="450"><input
type="text" value="<?php echo $strDescriere; ?>"
name="txtDescriere" id="txtDescriere" class="text"
maxlength="255" style="width: 300px;"></td>
</tr>
<tr bgcolor="#F0E7D8">
<td align="right"
width="250" valign="top">Specificatii:</td>
<td width="450"><textarea
name="txtSpecificatii" id="txtSpecificatii" class="text"
style="width: 300px; height: 100px;"><?php echo
$strSpecificatii; ?></textarea></td>
</tr>
<tr bgcolor="#F0E7D8">
<td align="right"
width="250">Pret (RON):</td>
<td width="450"><input
value="<?php echo $strPret; ?>" type="text" name="txtPret"
id="txtPret" class="text" maxlength="255" style="width:
300px;"></td>
</tr>
<tr bgcolor="#F0E7D8">
<td align="right"
width="250">Garantie (nr. luni):</td>
<td width="450"><input
value="<?php echo $strGarantie; ?>" type="text"
name="txtGarantie" id="txtGarantie" class="text"
maxlength="255" style="width: 300px;"></td>
</tr>

<tr bgcolor="#F0E7D8">
<td align="center"
colspan="2">
<input class="buttons"
type="reset" name="cmdReset" id="cmdReset" value="Anuleaza
modificari"> &nbsp;
<input class="buttons"
type="submit" name="cmdGo" id="cmdGo" value="Modifica">
</td>
</tr>
</table>
</form>
</td>
</tr>
</table>
</body>
</html>

54
CAPITOLUL 4. MANUAL DE UTILIZARE

Nr Pagina Web Explicații


.
1 Pagina
principală de
intrare în
aplicaţie. Se
prezinta trei
produse alese in
mod aleastoriu.
Se observa
sseciunea de
cautare, precum
si meniul care
permite agerea
produselor
aparținând unei
anumite
categorii .

2 Prezentarea
produselor unei
categorii. Sunt
selecate și
prezentate toate
produsele care
aparțin unei
categoriei alese .
Fiecărui produs
îi este atasat un
buton Adauga in
cos

3 Dind click pe
imaginea
corespunzătoar
e unui produs
avem acces la o
pagina care
prezinta
detaliile
respectivului
produs, cu
posibilitatea de
a vota si de a
lasa un
comentariu
referitor la
respectivul
produs. Este
prezent butonul
de Adauga in
cos.

55
4 În momntul în
care se apasă pe
butonul Adauga
in cos, ni se
prezinta o noua
pagina in care se
poate schimba
cantitatea din
produsul ales sau
se poate sterge
din cos.

5 Continuin prin
apasarea
butonului
Comanda
produsele
ajungem in
pagina in care se
introduc datele
pentru livrare
(nume si adresa)
precum si
eventualele
cupoane de
reducere.
6 Dupa ce toate
datele pentru
finalizarea
comenzii au fost
completate in
pagina anterioara
si s-a apasat pe
butonul Comanda
produsele se
ajunge in pagina
de confirmare a a
comenzii. Acesta
este ultimul pas
inainte de a lansa
o comanda ferma.
Aici ne sunt
prezentate toate
datele privind
produsele alese,
cantitatea, pretul,
reducerile,
precum si numele
si adresa de
livrare.

56
7
Continuind cu
butonul Comanda
produsele,
suntem invitati,
pentru siguranta,
sa confirmam
comanda sau sa
renutam.

Componenta de administrare

Nr Pagina Web Explicatii


.
1 Pagina de start a modulului
de administrare. În partea
stîngă este prezentat meniul
cu opțiunile ce permit
adminstrarea tuturor
tabelelor .

57
2 Alegân opțiunea administrare
produse, se prezintă sub
formă de tabel toate
produsele inclusiv cu date
despre
producător,categorie,subcate
gorie. În dreptul fiecărui
produs există trei opțiuni :
detalii, editare,stergere.

3 Alegând opțiunea detalii din


pagina anterioară ni se oferă
informații detaliate despre
respectivul produs, dar fără a
avea posibilitatea de a face
vreo modificare.

4 Dacă alegem, în schimb,


butonul editare, avem
posibilitatea de a modifica
toate detaliile respectivului
produs. Evident există și
posibilitatea de a renunța la
modificări.

5 Dacă se alege butonul de


șterge a produsului, acesta nu
este imediat șterg, ci se
afișează o fereastră în care ni
se cere să cofirmăm că dorim
ștergerea produsului.

58
CAPITOLUL 5. CONCLUZII

Rata de creștere a comerțului electronic a crscut exponețial, mai ales în perioada


pandemiei de Covid 19, inclusiv în România. Astfel, dacă, în trecutul apropiat, se considera că
un sait de cumpărături este doar un sait care face reclamă unor produse dintr-o anumită
categorie, în ultimii ani populația a constatat faptul că este mai simplu să cumperi anumite
produse online, fără deplasare la magazin, aceste produse putând fi livrate la domiciliu.

De asemenea se constată că plățile pentru produsele comandate online se pot face tot
online, iar aceste prețuri sunt, de obicei mai mici decât produsele similare din magazinele fizice.
Aceasta, datorită faptului că un magazin de vânzări are costuri mai reduse de exploatare, ceea
ce permite până și firmelor mici, fără mulți angajați, să aibă propriulș sait.

Explozia saiturilor de cumpărături online a fot posibilă datorită devzoltării performante


a Internetului, vitezelor de transfer și a tehnologiilor de comunicații pe Internet, în condiții de
siguranță. De asemenea, interesul programatorilor pentru astfel de produse informatice a crescut
mult, datorită dezvoltării tehnologiilor informatice simple, relativ ușor de învățat. Toate acestea
au dus la extinderea controlului dispozitivelor fizice prin comenzi directe date pe internet.
Vânzările online de produse IT au avut o creștere substanțială în ultimii ani, datorate și
exploziei învățământului online, precum și faptului că timpul liber a fost petrecut mai mult în
casă, în această perioadă. Din această cauză comenzile de tenică performantă în domeniul IT
au crescut foarte mult.
Aplicația creată răpsunde cerințelor actuale privint daiturile de cumpărături, fiind o
soluție modernă de efieciență mare, comodă, de informare asupra produselor IT actuale și, dacă
este cazul de cumpărare online a acestora.
Aplicația se caracterizează prin câteva trăsături, cum sunt:
 Baza de date a fost proiectată ca o bază de date relațională, datorită avantajelor sale
pentru domeniul online. Este bazată pe tabele cu o structură complexă, cu o organizare
logică a informațiilor, care să fie ușor de înțeles pentru un utilizator.
 Aspectul grafic al aplicației este modern, bazat pe meniuri orizontale și verticale și pe
categorii de produse. Folosirea codului CSS în formatarea stilurilor a îmbunătățit și mai
mult calitatea paginii web.

59
 Autentificarea clienților și a administratorului oferă mecanisme de securitatea specifice,
actuale, bazate pe criptare și pe nereținerea parolelor la destinatar. Dacă își uită parola,
clientul trebuie să o șteargă și să își creeze alta, fără posibilitatea intervenției
administratorului.
 Interfața client și administrator oferă un mod de accesare plăcut și simplu, eficient, cu
posibilitatea informării rapide și selectării comode a produselor accesate.
 Utilizatorul nu trebuie să aibă nici un fel de pregătire de specialitate în informatică,
aplicația fiind foarte accesibilă.
 Aplicația reține activitățile comerciale efectuate dînd posibilitatea creierii unui inventar
zilnic al vânzărilor, aprovizionării, clienților, produselor, etc.
 Fluxul de lucru al aplicației este creat pentru evitarea erorilor posibile ale utilizatorilor
umani.
Aplicația urmează să fie extinsă pentru a putea fi utilizată de pe dispozitive mobile.

60
BIBLIOGRAFIE

[1] Buraga, S. C, Programare web cu mediul PHP, https://profs.info.uaic.ro/~busaco/teach/


[2] Filip, Ioan, Tehnologii de programare a aplicațiilor Internet cu baze de date, Ed.
Orizonturi Universitare, Timișoara, 2003
[3] Filip, Ioan, Sisteme de gestiune a bazelor de date, Editura Orizonturi Univesitare,
Timișoara, 2007
[4] Holotescu, Carmen; Naaji Antoanela, Tehnologii Web, Arad, 2007
[5] MySQL Reference Manual, 2020
[6] Roșca, Ion Ghe ș.a, Comerțul electronic. Concepte, tehnologii și aplicații, Editura ASE
București, 2019
[7] Welling, L; Thomson, L , PHP and MySQL Web Development, Fourth Edition, 2008
[8] Manual PHP, https://www.php.net/docs.php
[9] www.php.net
[10] www.w3schools.com
[11] www.xamppserver.com
[12] https://www.jweb.ro/ro_mysql.html
[13] https://profs.info.uaic.ro/~busaco/teach/courses/net/docs/mysql-ro.pdf
[14] https://web.ceiti.md/lesson.php?id=7#c1, Limbajul PHP
[15] https://www.pbinfo.ro/articole/21591/limbajul-html-introducere
[16] https://vtex.com/ro/blog/trenduri/trend-in-ecommerce/
[17] https://www.actualidadecommerce.com/ro/cuales-las-ventajas-desventajas-del-
ecommerce/
[18] https://www.tutorialspoint.com/javascript/ (Javascript Basics Tutorial)

61
ANEXA

62
63
64
65
Figura A4 . Schema de flux informațiaonal

66

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