Documente Academic
Documente Profesional
Documente Cultură
Lucrare de licență
Student:
Conducător științific:
Prof. Dr. Ing. Ioan FILIP
Timișoara, 2021
1
CUPRINS
2
CAPITOLUL 1. INTRODUCERE
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.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.
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.
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.
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
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:
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.
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.
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.
12
https://www.nav.ro/blog/ce-este-mysql/
15
2.5. Tehnologii actuale și de viitor în comerțul electronic
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
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.
14
https://vtex.com/ro/blog/trenduri/trend-in-ecommerce/
17
CAPITOLUL 3. REALIZAREA APLICAȚIEI PRACTICE MAGAZIN IT SHOP
1) Un magazin client (având un rol public), care permite vizualizarea produselor precum
și cumpărarea lor
Modulele care realizează fiecare dintre cele două mari componente sunt grupate în foldere
separate.
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.
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))
Codul sursă pentru al scriptului, care constituie accesul în aplicaţie, este prezentat în
continuare:
20
21
22
3.2. Componenta Client
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.
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:
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'
)
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.
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 ''
)
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
)
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')
Tabela TPRODUSECOMENZI
Tabela TPROMOTII
În tabela TPROMOTII se regăsesc produsele care sunt in promotie pentru o anumita perioadă.
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”.
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.
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.
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ă.
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”.
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.
Exemplu: Fie următoarele două fişiere script PHP, prezentate în tabelul următor:
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.
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.
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.
<?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'];
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>
<?php
fInsertQuickSearch($intIdCategorieCautare); ?>
</td>
</tr>
</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();
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">
<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-->
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)
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">
<?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']));
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
$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'];
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\"> ";
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">
<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
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
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.
58
CAPITOLUL 5. CONCLUZII
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.
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
61
ANEXA
62
63
64
65
Figura A4 . Schema de flux informațiaonal
66