Dezvoltarea Unui Sistem DE Comert Electronic

1. CONCEPTE GENERALE DE COMERȚ ELECTRONIC

1.1 Revoluția Internet

Societatea spre care ne îndreptăm este sau va fi Societatea Informațională – Societatea Cunoașterii. Acestei societăți în continuă formare îi este proprie o economie mult schimbată față de cea actuală, denumită „noua economie”. Din diferite motive, noua economie se identifică în limbajul curent cu „economia bazată pe internet” și de aceea mai este denumită „digital economy”, „network economy” sau „e-economy”.

„Noua economie” reprezintă o sinteză complexă între economia digitală ( bazată pe Internet, bunuri și servicii digitale, noi modele de afaceri, noi moduri de muncă ), globalizare, inovare și dezvoltare durabilă.

Procesele principale care au loc în noua economie sunt următoarele:

dezvoltarea accelerată a comunicațiilor avansate;

„explozia” Internet;

dezvoltarea comerțului electronic;

apariția unor noi modele de realizare a afacerilor și restructurarea / re-ingineria firmelor;

promovarea de noi reguli și forme de organizare, bazate pe inovare;

extinderea formelor de activitate și de muncă la distanță.

Trebuie menționat faptul că noua economie se bazează pe trei principii definitorii:

acces ( și răspuns ) instantaneu;

servicii personalizate;

prezența simultană în mai multe locuri ( ubicuitate ).

Noua economie marchează o transformare fundamentală în istoria dezvoltării societății omenești, și se estimează că durata tranziției de la societatea industrială la societatea globală rețelizată,  bazată pe cunoștințe, va fi între 20 și 30 ani.

Informația este resursa principală în noua economie și de aceea suportul și nucleul acesteia sunt tehnologiile informaționale și comunicațiile avansate, iar motorul ei este Internetul. De aceea se spune că noua economie este o economie a tuturor tipurilor de afaceri construite în jurul Internetului.

Internetul are un rol cheie în furnizarea de informații privind disponibilitatea de produse și servicii și prețurile acestora în toată economia. Noile tehnologii Internet contribuie direct la expansiunea comerțului electronic, a noilor modele de afaceri și e-business și la dematerializarea produselor și serviciilor.

Piața Internetului rămâne o piață de cucerit de către întreprinderi, o posibilitate pentru noi oportunități, inclusiv prin diversificarea serviciilor oferite și promovarea de servicii noi, personalizate și atractive, pe care tehnologiile informaționale și de comunicații le fac posibile, ceea ce stimulează concurența și competitivitatea prin apariția de noi actori pe piețele tradiționale.

Internetul reduce importanța distanței și timpului. „Moartea distanței” și „comprimarea timpului”, unele din „efectele Internetului”, pot fi considerate printre cele mai importante schimbări care modelează în prezent societatea omenească.

Apariția Internet-ului este, probabil, cel mai important eveniment de la sfârșitul secolului XX din punct de vedere al impactului în economie și societate.

După unii autori prezența pe Internet a firmelor poate fi realizată în șase stadii:

„Conectare on-line” – în această fază, compania are o simplă pagină web, în spatele căreia nu există o structură reală.

„WebSite structurat” – website-ul are o structură mai elaborată, se poate folosi un motor de căutare după cuvinte cheie, se pot vizualiza informații despre companie și se pot schimba mesaje în mod interactiv cu aceasta.

„Încercări de e-commerce” – compania încearcă să vândă on-line informații, mărfuri, etc. Sistemul nu este conectat la bazele de date interne de pe Intranet. Este lent, costisitor și nu este sigur. Nu există posibilitatea trecerii de la sistemul „back-end” al companiei proprii la sistemul „back-end” al altei firme.

„Realizarea de e-business” – Website-ul are o legătură directă cu sistemul de pe Intranet, permite extragerea de informații din bazele de date interne și folosește protocoale securizate de transmitere a datelor între compania proprie și client sau către o altă organizație. Se pot face economii și poate începe obținerea de profit bazat pe utilizarea tehnologiilor on-line.

„E-business extensiv” – Folosind orice dispozitiv care conține un cip ( telefon celular, mașină, etc. ) personalul companiei, clienții și furnizorii se pot conecta la datele companiei și pot transmite sau primi informațiile dorite pentru e-business.

„O lume – Un calculator” – Toate dispozitivele bazate pe cipuri vor fi interconectate și se va crea o resursă de informații uriașă. Dispozitivele sunt capabile să schimbe între ele orice tip de informații.

1.2 Afaceri electronice. Comerț electronic.

Mediul de afaceri modern este caracterizat prin creșterea fără precedent a ofertei furnizorilor, a competiției globale și a exigenței clienților. Firmele din toate sectoarele economice au început să adopte noua paradigmă economică – orientarea către „e-business” sau noile modele de afaceri.

„E-business-ul” poate fi definit ca transformarea proceselor (operațiilor,componentelor) constitutive ale unei afaceri cu ajutorul tehnologiilor „Web + Internet”, ceea ce permite ca afacerile să fie active 24 de ore pe zi.

Alegerea modelului de afacere este prima decizie care trebuie luată în momentul în care se pornește o afacere on-line. Noul model de afaceri se realizează sub forma unui lanț de servicii electronice, compus din:

furnizorul de produse sau servicii căutate;

furnizorul de servicii Internet care poate oferi orice, de la spațiu pe web, la integrarea de e-mall și la diferite tipuri de servicii;

clientul, cu o anumită profesie, interese personale și preferințe;
acest client poate fi un consumator (B2C), o altă afacere (B2B), o administrație publică (B2A) sau un angajat (B2E).

Scopul modelelor de e-business este de a reprezenta într-un mod cât mai accesibil tipul de  afacere și arhitectura sistemului (topologia aplicației și topologia de rulare) pentru diferite clase de aplicații. Aceste modele descriu interacțiunea dintre participanții la o soluție de e-business. 

În momentul de față sunt definite șase modele de e-business:

Modelul User-to-Business (U2B): Este cazul general în care un utilizator (intern sau extern) interacționează asupra datelor și tranzacțiilor unei întreprinderi. În caz particular se poate aplica la o întreprindere care oferă servicii sau bunuri care nu pot fi prezentate și vândute prin catalog. Poate fi văzut ca acoperind toate interacțiunile de tip User-to-Business care nu sunt acoperite de modelul User-to-Online Buying.

Modelul User-to-Online Buying (U2OB): Este folosit pentru a descrie un caz special (un subset al modelului User-to-Business) în care bunurile sunt vândute printr-un catalog folosind un card de cumpărări, un portofel, etc. Acest model include ambele cazuri de consumatori: care cumpără bunuri și care se aprovizionează de la un singur furnizor. Poate cuprinde legături cu sisteme de gestiune, de verificare de cărți de credit, de livrare etc.

Modelul Business-to-Business (B2B): Este folosit pentru a descrie două tipuri de interacțiune între două întreprinderi:

tipul (B2Bi) – este cazul în care există un contract de parteneriat între întreprinderi, un  exemplu în acest sens fiind o aplicație pentru un lanț de desfacere;

tipul (B2M2B) – este cazul unui e-MarketPlace, deci existența unei piețe electronice în care interacționează mai mulți cumpărători și mai mulți furnizori.

Modelul User-to-User (U2U): Descrie cazul colaborării diferiților utilizatori prin intermediul documentelor partajate, prin e-mail, etc.

Modelul User-to-Data (U2D): Descrie cazul în care utilizatorii au nevoie de cantități însemnate de date, text, imagini, etc. și folosesc diverse instrumente pentru a extrage informații.

Modelul Application Integration: Este folosit pentru integrarea diverselor aplicații într-o soluție de afacere și poate fi utilizat atât în cadrul unui singur tip de afacere, cât și între mai multe tipuri de afaceri.

Noile modele de afaceri au un rol catalizator pentru modificări organizaționale, noi modele de organizare a producției și de tranzacționare a afacerilor, ce permit firmelor mici și mari să intre pe piața electronică națională și internațională.

Comerțul electronic se referă la desfășurarea activităților specifice mediului de afaceri ( tranzacții ) într-un sistem automatizat integrat pentru schimbul de informații utilizând mijloace electronice ( rețele de calculatoare ).

În comerțul electronic informația circulă între agenții implicați în afacere (vânzător, cumpărător, bancă, transportator, agent de service), fără a utiliza suportul de hârtie ( imprimantă sau fax ).

În cazul comerțului electronic, se întâlnesc aceleași componente ca și în cazul comerțului clasic, dar cu modificări specifice, și anume:

un produs – material sau digital;

un loc de vânzare – în acest caz un website în rețea care să prezinte produsele sau serviciile oferite;

o modalitate de a atrage oamenii să vină la un anumit website;

o modalitate de a primi comenzi – în mod normal un formular on-line;

o modalitate de a încasa bani – de regulă un cont bancar cu plăți prin card de credit. Aceasta cere o pagină sigură pentru comenzi și conexiunea la o bancă, dar se poate folosi și metoda clasică a facturării, on-line sau prin poștă;

o modalitate de livrare; dacă marfa este de tip software sau informație, livrarea se poate face direct prin rețea;

o modalitate de a accepta returnări ( formulare on-line );

o modalitate de a accepta eventuale reclamații ( formulare on-line );

o modalitate de a oferi service ( prin email, formulare on-line, baze de cunoștințe on-line etc. );

În afacerile tradiționale vânzarea este încă văzută și organizată ca fiind subordonată producției, sau „vindem ce producem”. În e-commerce, firmele vând „ce pot livra” deoarece oferă consumatorului o gamă largă de produse, indiferent cine le produce.

1.3 Modele de comerț electronic

Analizând aplicațiile curente dezvoltate pe Internet, identificăm următoarele modele de afaceri în comerțul electronic:

– magazin electronic (e-shop): un magazin electronic se implementează prin intermediul unui site Web; acesta este gestionat de companie, pentru marketingul și vânzările propriilor produse și servicii. Minimal, conține catalogul de produse sau servicii cu descrieri tehnice și comerciale pentru fiecare poziție din catalog. Aceste descrieri sunt gestionate în general de un Sistem de Gestiune a Bazelor de Date (SGBD). Sistemul de Gestiune a Bazelor de Date se va ocupa cu stocarea și manipularea datelor și cu oferirea posibilităților de acces la date. Varianta medie conține facilități pentru preluarea comenzilor ( prin e-mail sau formulare interactive pe care le vor completa clienții ), iar varianta extinsă cuprinde și posibilitatea efectuării on-line a plății ( prin cărți de credit sau alte variante electronice ); 

– aprovizionarea electronică (eProcurement): pentru procurarea bunurilor și serviciilor, marile companii și autorități publice organizează licitații. Prin publicarea pe Web a specificațiilor ofertei, scade atât timpul cât și costul de transmisie, mărindu-se și numărul de firme care iau parte la licitație. Astfel, crește concurența și scade prețul;

– magazin electronic universal (eMall): ca și în lumea reală, magazinul electronic universal este o colecție de magazine electronice, reunite sub o umbrelă comună și care, în general, acceptă metode de plată comune;

– piața unui terț (3rd party marketplace): se apelează la o interfață utilizator pentru catalogul de produse al companiei, interfață ce aparține unui terț ( în general, un furnizor de servicii Internet sau o bancă ). Această metodă are avantajul că interfața este unică pentru mai mulți producători, utilizatorii fiind familiarizați cu utilizarea ei;

– comunități virtuale (virtual communities): valoarea cea mai importantă a unei comunități virtuale este dată de către membrii săi ( clienți sau parteneri ), care adaugă informații proprii peste un mediu de bază furnizat de companie. Fiecare membru poate oferi sprparte la licitație. Astfel, crește concurența și scade prețul;

– magazin electronic universal (eMall): ca și în lumea reală, magazinul electronic universal este o colecție de magazine electronice, reunite sub o umbrelă comună și care, în general, acceptă metode de plată comune;

– piața unui terț (3rd party marketplace): se apelează la o interfață utilizator pentru catalogul de produse al companiei, interfață ce aparține unui terț ( în general, un furnizor de servicii Internet sau o bancă ). Această metodă are avantajul că interfața este unică pentru mai mulți producători, utilizatorii fiind familiarizați cu utilizarea ei;

– comunități virtuale (virtual communities): valoarea cea mai importantă a unei comunități virtuale este dată de către membrii săi ( clienți sau parteneri ), care adaugă informații proprii peste un mediu de bază furnizat de companie. Fiecare membru poate oferi spre vânzare produse sau servicii sau poate adresa cereri de cumpărare a unor produse sau servicii. Calitatea de membru al unei comunități virtuale presupune plata unei taxe;

– furnizor de servicii cu valoare adăugată pentru canalele de comerț electronic (value chain service provider): furnizorii de servicii sunt specializați pe funcții specifice, cum ar fi asigurarea logisticii, plata electronică sau expertiza în managementul producției și a stocurilor. Plata acestor servicii se face pe baza unor tarife sau a unei cote procentuale;

– platforme de colaborare: platformele de colaborare cuprind un set de instrumente și un mediu informațional pentru colaborarea între companii. Acestea pot adresa funcții specifice, cum ar fi concepția sau proiectarea în colaborare. Câștigurile provin din managementul platformei ( taxa de membru sau taxa de utilizare ), și din vânzări de instrumente specializate ( pentru design, workflow și gestiunea de documente ). Prin workflow se înțelege fluxul de documente, care implică două entități: o parte pasivă ( documentele) și o parte activă ( deplasarea acestor documente );

– brokeraj de informații și alte servicii: exemplele cuprind cataloage de clienți clasificați pe profil, vânzarea de oportunități de afaceri, consultanță în domenii specializate. O categorie specială o constituie serviciile de încredere furnizate de autoritățile de certificare sau de notariatele electronice.

1.4 Avantajele și dezavantajele comerțului electronic

Principiile de bază ale unei afaceri electronice sunt aceleași ca la orice afacere tradițională, desfășurată în mediul economic real: avem de-a face cu un public țintă și un produs sau serviciu oferit spre vânzare. În urma întâlnirii dintre cerere și ofertă consumatorul va primi produsul, iar producătorul va încasa contravaloarea acestuia, respectiv producătorul va factura contravaloarea serviciului prestat către consumator, urmând să încaseze suma aferentă.

Diferența majoră în cazul afacerilor electronice constă în faptul că acestea permit automatizarea proceselor de vânzare și cumpărare. Într-un magazin normal există angajați care să ajute consumatorul să cumpere. În cazul magazinelor virtuale, angajatul este reprezentat de site-ul în sine, care lucrează 24 de ore din 24, 7 zile pe săptămână, pe parcursul întregului an, fără nici un fel de întrerupere, și toate acestea în vederea maximizării profitului afacerii.

Din poziția cumpărătorului, avantajele comerțului electronic sunt legate de: 

timp: cumpărătorul poate vizita mai multe magazine virtuale într-un timp foarte scurt ( mult mai scurt decât timpul pe care îl implică prezența fizică a unei persoane într-un magazin real );

libertatea de a alege: datorită numărului mare de magazine pe care clientul le poate vizita, acesta va avea posibilitatea de a alege un produs în funcție de un număr mult mai mare de opțiuni ( preț, data livrării, etc. ). 

Din punctul de vedere al companiilor ce utilizează comerțul electronic, se disting următoarele avantaje:

creșterea semnificativă a vitezei de comunicare, în special pentru comunicațiile internaționale: mai multe companii pot stabili o platformă de colaborare, prin intermediul căreia să poată concepe și dezvolta diverse produse împreună; comunicarea prin telefon sau fax ar însemna o încetinire drastică a acestor procese de concepție sau dezvoltare;

reducerea unor costuri: de exemplu, utilizând e-mail ( poșta electronică ) se reduc costurile cu poșta sau mesageria, dar și costurile referitoare la deplasarea documentelor ( circa 7% din cheltuielile făcute cu comerțul tradițional se datorează deplasării documentelor );

întărirea relațiilor cu furnizorii și clienții: printr-un site Web, clienții companiei vor fi puși la curent cu ultimele produse apărute, li se va oferi suport tehnic pentru produsele cumpărate, putând chiar să ofere sugestii pentru eventuale îmbunătățiri ale produselor, serviciilor etc.; pe unele site-uri cumpărătorii pot „construi” produsul pe care vor să îl cumpere ( culori, materiale, înscrisuri etc. ); furnizorilor li se poate oferi în cadrul acestui site un domeniu special în care își pot prezenta și ei la rândul lor ultimele noutăți;

existența unei căi rapide și comode de furnizare a informațiilor despre companie: prin intermediul unor site-uri Web, a intranet-urilor și a extranet-urilor;

canale alternative de vânzare: desfășurarea afacerilor prin intermediul unui astfel de site.

Deși pare o afacere de vis, există totuși câteva greșeli de majore care ar putea-o transforma într-un coșmar:

lipsa unui plan de acțiune: antreprenorii se lasă ghidați doar de entuziasm;

estimarea eronată a investiților: se pornește de la ideea falsă că pentru o afacere electronică, de tipul comerț electronic, investițiile trebuie să fie întotdeauna foarte mici;

neglijarea aspectelor concurențiale: ideea că o afacere electronică trebuie să aibă ca principal avantaj competitiv prețul mic al produselor;

neglijarea aspectelor de promovare a produselor: accentul se pune mai mult pe vânzări, decât pe strategia de marketing.

1.5 Aspecte critice privind dezvoltarea comerțului electronic

Există șase piedici majore care frânează dezvoltarea comerțului electronic: 

securitatea: Internetul a fost conceput ca un mediu deschis, dar nu neapărat și sigur, protocolului TCP/IP ( care stă la baza comerțului electronic ) lipsindu-i serviciile de securitate de bază. Un element de bază pentru securitatea comerțului prin Internet îl constituie criptarea, care permite atât autentificarea, cât mai ales siguranța transmisiei informațiilor;

acceptarea noilor modalități de plată (bani electronici / digitali): problema majoră care se pune este cea a caracterului privat în care se cheltuiesc banii în mod normal. Este problema urmăririi (trace) tranzacțiilor. Un sistem electronic, care realizează înregistrarea tuturor tranzacțiilor care se fac în ciberspațiu, prezintă dezavantajul că tot ceea ce faci este înregistrat;

existența unei infrastructuri de telecomunicații adecvate: pe măsură ce tehnologia avansează, apar noi metode de comunicație celulare; 

costurile investiției: de exemplu, un comerciant care vrea să ofere un magazin pe Internet, va face următoarele investiții: servere ( calculatoare puternice care să poată evolua odată cu creșterea volumului tranzacțiilor ), tehnologie de comunicații ( care să poată crește odată cu creșterea afacerii ), software de comerț electronic precum și tehnologii care să asigure securitatea, de exemplu firewall-urile;

cadrul legislativ și normativ: se referă la aspectele legate de cadrul fiscal, drepturile asupra proprietății intelectuale, protecția datelor consumatorului;

aspecte lingvistice și culturale: rețeaua Web tinde să devină din ce în ce mai mult un „turn Babel” al națiunilor, pe măsura adoptării pe scară din ce în ce mai largă a tehnologiilor legate de Internet.

1.6 Comerțul electronic în România: evoluție și tendințe

Sistemele de vânzari online în România sunt abia la începutul dezvoltării, potențialul general al pieții fiind mult mai mare decât fluctuațiile din prezent. România probează că produsele care se vând bine la nivel internațional, sunt cele care se vând bine și la nivel național (excepția serviciilor de ticketing și rent-a-car). Primele poziții sunt dominate de magazine virtuale care vând produse IT, cărți, foto, electronice, cadouri, telefonie mobilă, farmaceutice și articole pentru copii. Aceste magazine reprezintă cam 70% din magazinele românești. La capătul celălalt, magazine de nisă, nu gasim decât 5% din magazine și se constată o mai mare grijă și pasiune a posesorilor față de afacerilor lor. Cele mai multe magazine comercializează produse IT (18.36%), urmând în ordine cărți (10.63%), foto (7.49%), electronice (6.04%), GSM (5.31%), bazar (5.07%), cadouri (4.59%).

Conform unui studiu realizat de revista “Link” pe o populație statistică de 414 magazine virtuale care au adresabilitate românilor (adică sunt pe domenii .ro sau în limba romana), majoritatea magazinelor online în România sunt destul de prost concepute și realizate. Lipsa majoră a funcționalităților și a elementelor de bază, principiale într-un magazin online, duce la un fenomen generator de multe magazine și de puțini bani din încasări. Lipsa de specificații se poate vedea cu ochiul liber și majoritatea soluțiilor sunt ieftine.

Magazinele care tind să arate frumos sunt cele care se adresează direct vizualului sau sunt făcute de oameni cu o experiență mai îndelungată în tehnologie: flori, cadouri, foto, software, jocuri, IT, electronice. În România, pe piața magazinelor virtuale există o tendință de rebranding a magazinelor care au început să aibă profit, însă această strategie este periculoasă și specifică modului românesc de a face afaceri: întâi să vândă și apoi să investească bani.

O altă problemă a magazinelor virtuale românești este că nu știu să își facă reclamă. În politicile de promovare a magazinului, numai 1 din 5 magazine se poate lauda că măcar are de unde să o pornească. Aceasta înseamnă firme deja consacrate la nivel național, branduri celebre, firme care au propria rețea de distribuție și forța financiară, firme care au propriile rețele web sau acces facil în rețelele partenerilor. 80% din magazine nu beneficiază de nici unul dintre aceste avantaje și nici nu fac eforturi de marketing online pentru a le compensa. Produsele proprii magazinelor virtuale nu sunt bine promovate nici măcar pe site-urile proprii. Concluzia este că lipsesc aproape cu desăvarșire oamenii de marketing din spatele acestor magazine.

Din punct de vedere al vizibilității, 50% din magazine au între 100 și 500 de vizitatori pe zi, ceea ce nu este deloc rău. Doar 5% din magazine au un număr de peste 5.000 de vizitatori pe zi. Însă cum se masoara succesul? Teoretic, se calculează rata de conversie care spune câți dintre vizitatori devin și clienți. Rata de conversie este dovedit că este maximă în cazul magazinelor de nișă… aproape inexistente la noi. Într-adevăr, magazinele mari și cele care vând cel mai mult au și cei mai mulți vizitatori. Însă și costurile lor sunt pe măsură. Efortul depus de un magazin pentru a fi vizibil ar trebui să fie egal la cel mare cu cel mic. Concluzia e că cel mare are îndeajuns de mulți bani să își ia un consultant să facă treaba asta pentru că în 99% din cazuri nici el nu se pricepe. Cât despre magazinul mic… rămâne, în continuare, ignorant până când își va da seama că face într-adevăr afaceri.

2. DEZVOLTAREA UNUI SISTEM DE COMERȚ ELECTRONIC

2.1 Arhitectura unui sistem de comerț electronic

Pentru a construi un sistem de e-commerce, din punct de vedere arhitectural este nevoie de colaborarea a patru componente (subsisteme electronice/ informatice) corespunzătoare următoarelor roluri:

Client: un echipament clasic, un PC, conectat direct (via un ISP ) sau indirect ( o rețea a unei corporații ) la Internet. Cumpărătorul folosește acest echipament pentru a naviga și a face cumpărături.

Comerciant: sistem informatic (hard & soft), situat de regulă la sediul comerciantului, care găzduiește și actualizează catalogul electronic de produse disponibile a fi comandate on-line pe Internet.

Sistemul tranzacțional: sistemul informatic (hard & soft) responsabil cu procesarea comenzilor, inițierea plăților, evidența înregistrărilor și a altor aspecte de business implicate în procesul de tranzacționare.

Dispecer plăți (Payment Gateway): sistem informatic responsabil cu rutarea instrucțiunilor de plată în interiorul rețelelor financiar-bancare, cu verificarea cărților de credit și autorizarea plăților; acest sistem joacă rolul unei porți care face legătura dintre rețeaua globală Internet și subrețeaua financiar-bancară ( supusă unor cerințe de securitate sporite ), poartă prin care accesul este controlat de un „portar” ( gatekeeper ); pe baza informațiilor specifice cărții de credit ( tip_card, nr_card ) din instrucțiunile de plată „portarul” redirecționează informația către un centru de carduri ( CC – un server certificat în acest scop și agreat de banca emitentă ); în acest loc este identificată banca emitentă a cardului, iar instrucțiunile de plată sunt trimise mai departe către serverul acestei bănci conectat în rețeaua interbancară; odată informațiile ajunse în rețeaua băncii cu care lucrează cumpărătorul, sunt efectuate ( automat ) o serie de verificări privind autenticitatea și soldul disponibil în contul cardului implicat în tranzacție; în funcție de rezultatul acestor verificări, banca decide fie efectuarea plății ( transfer bancar – către contul comerciantului care poate fi deschis la orice altă bancă ), fie refuză să facă această plată; în ambele cazuri, rezultatul deciziei ( confirmare plată sau refuz ) este trimis în timp real, parcurgând acest lanț de servere în sens invers, către client; cu alte cuvinte, în câteva secunde cumpărătorul află dacă banca sa a operat plata sau nu.

2.2 Etapele implementării unui sistem de comerț electronic

Realizarea unui sistem de comerț electronic, indiferent de modelul pe care îl implementează (business-to-consumer B2C sau business-to-business B2B) implică mai multe etape:

Dezvoltarea site-ului și promovarea produselor

Această etapă este la rândul său împărțită în patru pași: proiectarea, dezvoltarea, găzduirea, promovarea și optimizarea site-ului.

Proiectarea site-ului 

Înainte de a trece la crearea efectivă a unui site de comerț electronic, compania care va deține acest site trebuie să poată da un răspuns la următoarele întrebări:

Ce tipuri de produse vinde site-ul?

Ce tipuri de informații va găzdui? 

Răspunsurile la aceste întrebări vor determina domeniile din care va fi alcătuit site-ul. De exemplu, respectiva companie poate vinde produse care vor fi livrate clienților prin poștă, produse software care vor fi încărcate direct de pe site, sau ambele categorii de produse. În cazul în care se dorește vânzarea ambelor tipuri de produse, se vor construi domenii specifice fiecărui tip în parte. Un alt exemplu l-ar constitui construirea unui domeniu dedicat discuțiilor on-line: o companie poate decide să ofere clienților un forum de discuții dedicat unor probleme care prezintă un anume interes pentru companie.

Ce persoane din cadrul companiei vor fi responsabile pentru administrarea site-ului? 

Site-ul companiei poate avea un singur administrator (suficient pentru site-uri de dimensiuni mici) sau mai mulți, pentru situațiile neprevăzute în care unul dintre administratori este indisponibil. De asemenea, trebuie să se aibă în vedere stabilirea unei structuri de aprobatori (organizată ierarhic), care să se ocupe de aprobarea conținutului nou care va fi adăugat în cadrul diferitelor domenii ale site-ului. Conținutul va fi adăugat de către utilizatori interni (aparținând intranetului companiei) sau externi (din Internet, de exemplu).

Care este tipul de interfață pe care doriți să îl propuneți clienților? 

În timp ce răspunsurile la primele două întrebări rezolvau în principal probleme legate de structura internă a site-ului, răspunsul la această întrebare va determina aspectul său exterior. Trebuie să se stabilească ce imagini vor fi prezentate în cadrul paginilor (de exemplu logo-ul companiei), culorile folosite în cadrul paginilor (ar putea fi culorile din logo), stilul de adresare, etc. 

Dezvoltarea site-ului 

După ce s-au stabilit toate detaliile de la punctul precedent, urmează o altă etapă la fel de importantă: determinarea cerințelor necesare pentru dezvoltarea site-ului. Cerințele se referă atât la hardware-ul și software-ul necesar pentru implementarea sistemului de comerț electronic, cât și la infrastructura de comunicații:

cerințe hard: caracteristicile mașinilor folosite ca server (memorie, spațiu pe hard-disk, viteză procesor, etc. )

cerințe soft: sistem de operare, server de Web, firewall, pachete de programe opționale ( programe de calcul al taxelor, etc.) 

comunicații: se referă la lărgimea bandei de comunicație, topologii de rețea, etc. 

În urma completării acestei etape, se va determina mai mult de 80% din costul pe care îl implică realizarea unui site de comerț electronic. 

Găzduirea site-ului 

Site-ul de comerț electronic poate fi găzduit pe un sistem care aparține clientului, dar există de asemenea posibilitatea închirierii de spațiu pe server-ele furnizorului de servicii Internet. Soluția cea mai ieftină se obține în prima variantă. În cel de-al doilea caz, clientul trebuie să se conecteze la Internet fie prin linii închiriate (acces mai rapid, dar mai scump), fie prin linii telefonice (acces mai lent, dar mai ieftin). 

Promovarea și optimizarea site-ului

Sintagma „Construiește-l și vor veni” nu este valabilă nici pentru site-urile tradiționale, așa cum s-a spus multă vreme, și nici pentru magazinele virtuale. Strategiile de marketing și publicitate sunt absolut necesare pentru a obține succesul dorit pe Internet.

Printre modalitățile de promovare pe care o organizație virtuală le poate folosi în cadrul strategiei de promovare, se numără:

Promovarea în rețea: Anunțurile publicitare de pe motoarele de căutare sau de pe site-uri, au ca obiectiv principal atragerea publicului țintă, astfel încât acesta să viziteze site-ul. Prima etapă o constituie crearea de bannere, apoi studierea aspectelor demografice a diverselor site-uri pentru a fi găsite cele mai potrivite, după care se recurge la negocierea costurilor.

Promovarea în media tradițională: Multe firme își afișează adresa URL în secțiuni speciale ale ziarelor cotidiene, ale publicațiilor de afaceri și ale mediei comerciale. Chiar și reclamele TV conțin adrese de Web. Concluzia ar fi că este necesară tipărirea URL-ului pe toate materialele de comunicare și de marketing.

Promovare încrucișată cu site-uri complementare: Dacă un site vinde un produs complementar unui produs furnizat de un alt site, acestea pot ajunge la un acord care constă în transmiterea unor cupoane cu discount-uri care să atragă clienții către site-ul celuilalt. Acest lucru se poate realiza prin acordarea unei reduceri la produsele prezentate pe unul din site-uri la fiecare achiziție de produse complementare prezentate pe celălalt site.

Plătirea de comisioane altor site-uri pentru a oferi referințe vizitatorilor și pentru a-i direcționa spre site-ul promovat: Dacă un site complementar a reușit să atragă un număr mare de cumpărători, aceștia pot fi dirijați către site-ul respectiv dacă se plătește pentru plasarea unei legături sau a unui anunț publicitar pe site-ul complementar. Prețurile pentru acest tip de serviciu sunt foarte elastice.

Oferta de produse gratuite: Atragerea vizitatorilor și satisfacerea acestora se transmite informal și către alții. Oamenii pot fi atrași către site prin simplu fapt că li se oferă mostre sau informații gratuite. Firmele care se bazează pe informații, cum sunt cele care tipăresc rapoarte, pot da un comunicat de presă prin care anunță un important produs informațional. Firmele care nu activează în sectorul informațional pot de asemenea să transmită informații care să se adreseze consumatorilor și clienților potențiali. Cumpărătorii și potențialii clienți pot citi aceste articole gratis, iar dacă știu că site-ul este actualizat în mod regulat, ei se vor întoarce periodic și își vor anunța și cunoscuții despre această caracteristică a siteului.

Informarea utilizatorilor prin e-mail, atunci când se actualizează conținutul site-ului: Se recomandă ca site-urile să își înștiințeze clienții la fiecare actualizare a conținutului lor pentru ca vizita pe care au repetat-o să capete valoare și să rezulte o încurajare a revenirii lor pe site. Site-ul poate furniza clienților săi informații în legătură cu modificările efectuate prin intermediul adreselor de e-mail pe care le dobândește, de regulă, în momentul în care clienții subscriu la site. Utilizarea unei astfel de tactici ajută la crearea unei baze de date cu ajutorul căreia se vor determina nevoile și cerințele clienților, fapt ce va conduce în final la creșterea vânzărilor.

Dintre metodele consacrate de marketing pe Internet si reclamă on-line, promovarea site-urilor Web prin intermediul motoarelor de căutare s-a impus la ora actuală ca fiind cea mai profitabilă variantă de publicitate pe Internet, în primul rând datorită costurilor zero, în al doilea rând datorită vizitatorilor de calitate pe care ii garantează această metodă de ridicare a audienței site-urilor Web.

Motoarele de căutare sunt programe special proiectate să exploreze Web-ul, deplasându-se automat de la un site la altul pe calea legăturilor existente între acestea. Nu avem de-a face cu intervenția operatorului uman, în general întregul proces de investigare a Web-ului, culegere de informații și clasificare a acestora realizându-se prin mijlocirea robotului.

Directoarele Web diferă de motoarele de căutare prin aceea că se constituie în fapt ca și colecții de site-uri investigate și clasificate de operatori umani.

În condițiile în care se optează pentru aceste metode de promovare, ar fi bine ca mai întâi să se efectueze înscrierea în directoarele Web și după aceea în motoarele de căutare. Explicația constă în faptul că este total nerecomandată utilizarea oricăror tehnici de optimizare mai mult sau mai puțin artificiale atunci când site-ul urmează să fie revizuit de un operator uman.

Managementul bazelor de date

Produsele și serviciile pe care site-ul de comerț electronic le oferă spre vânzare clienților, indiferent de modul în care vor fi livrate (prin poștă sau direct prin Internet), vor fi stocate în cadrul site-ului în baze de date. Tot în baze de date (dar nu în cadrul acelorași baze de date ca și produsele) vor fi stocate și comenzile pe care clienții le adresează către site. Aceste comenzi pot fi păstrate chiar și după onorarea lor, pentru a oferi clienților un istoric al produselor pe care le-au comandat sau pentru studii de piață efectuate chiar de către compania ce deține site-ul. 

Este foarte importantă alegerea SGBD-ului (Sistemului de Gestiune a Bazelor de Date), cel puțin din următoarele motive:

– pe măsură ce afacerea va crește, crește și numărul de produse oferite spre vânzare, și, implicit, dimensiunea site-ului (a bazelor de date care corespund domeniilor din care este alcătuit site-ul); rezultă deci necesitatea stringentă ca bazele de date să fie scalabile (să poată fi posibilă creșterea dimensiunii lor);

– pentru baze de date de dimensiuni foarte mari, este importantă problema vitezei de acces la informațiile stocate în aceste baze de date. Dacă motorul de căutare în cadrul bazelor de date nu este foarte performant, atunci, chiar și pentru cel mai simplu acces la informațiile din bază, timpul de căutare poate deveni prohibitiv.

Plata și procesarea tranzacțiilor

Autorizările sigure de cărți de credit și procesarea comenzilor prin Internet sunt elemente de bază. Pentru a realiza în deplină siguranță un transfer care implică numere de cărți de credit prin Internet, este nevoie să se ia măsuri de securitate referitoare la autorizarea plăților. Informațiile referitoare la cărțile de credit (numărul cărții, nume deținător, telefon, etc.), care sunt transmise în momentul efectuării plății trebuie validate de către un organism de autorizare. De aceea, companiile care doresc să accepte efectuarea plăților prin Internet prin cărți de credit trebuie să ia legătura cu un astfel de organism. Aceasta, la rândul lui, se află în legătură cu instituția financiară care a eliberat cartea de credit, și, după un schimb de mesaje criptate cu respectiva instituție, va aviza sau nu transferul de fonduri. Dacă primește acceptul din partea organismului, vânzătorul va efectua livrarea produselor către client și va înregistra comanda ca fiind onorată. Suma plătită de client pentru aceste produse va fi adăugată la contul vânzătorului.

Managementul produselor și al comenzilor

Transportul produselor: În cazul în care site-ul de comerț electronic al companiei oferă spre vânzare clienților produse care se livrează prin poștă, compania trebuie să ia în considerare necesitatea de a stabili o colaborare cu un serviciu de distribuție prin poștă. În funcție de serviciul de poștă ales, compania poate să pună la dispoziția clienților servicii suplimentare, cum ar fi urmărirea on-line a traseului pe care îl parcurg produsele din momentul plecării de la vânzător și până în momentul sosirii la client. 

Urmărirea comenzilor și a stării acestora: În cadrul site-ului de comerț electronic există persoane care se ocupă cu monitorizarea comenzilor, în cazul în care compania care deține site-ul a hotărât astfel. O comanda se poate găsi în trei stări:

capturat: comanda a fost preluată de către sistemul vânzătorului, însă metoda de plată aleasă de către client nu a fost încă validată

reglat: autoritatea care se ocupă de autorizarea plăților a dat vânzătorului un răspuns pozitiv referitor la certificarea metodei de plată a clientului

respins: comanda este respinsă, întrucât nu a fost autorizată metoda de plată a clientului.

Centru specializat de servicii

Suport post-vânzări prin Internet: Compania poate decide să ofere suport tehnic clienților pentru produsele pe care aceștia le-au cumpărat de pe site. În acest scop, pe site poate exista un domeniu separat, dedicat întrebărilor și răspunsurilor, unde clienților care întâmpină probleme să li se poată răspunde de către personalul tehnic al companiei. Chiar mai mult, în cadrul site-ului, poate exista un forum de discuții on-line, cu moderator sau nu, în cadrul căruia clienții să își poată împărtăși între ei experiența acumulată în folosirea produselor respective. Dacă nu se dorește adoptarea nici uneia dintre soluțiile propuse, trebuie să ne asigurăm că există măcar o legătură prin care clienții să poată trimite un mesaj prin poșta electronică administratorului site-ului.

2.3 Sistem Electronic de Plăți

Arhitectura unui Sistem Electronic de Plăți (SEP)

Un sistem electronic de plăți se referă la totalitatea obiectelor care conlucrează pentru asigurarea plății tranzacțiilor ce se efectuează. Sunt implicate, în general, trei entități care interacționează: o bancă B, un cumpărător C și un vânzător V. Sistemul electronic de plăți conține și o mulțime de protocoale care permit cumpărătorului C să facă plăți către vânzătorul V.

Un Sistem Electronic de Plăți este format din două nivele:

nivelul utilizator, care constituie nivelul ierarhic superior

nivelul sistem, care constituie nivelul ierarhic inferior. 

În continuare, vor fi descrise foarte pe scurt cele două nivele:

nivelul utilizator: constă din mulțimea utilizatorilor și a tranzacțiilor care au loc între aceștia. Utilizatorii sunt grupați după diverse roluri, după modul în care interacționează în relațiile de afaceri dintre ei: cumpărătorul, vânzătorul, emitentul de bani electronici ( banca ), etc.;

nivelul sistem: constă din mulțimea entităților fizice și a relațiilor care se stabilesc între ele. Entitățile pot juca unul dintre următoarele roluri: purtător de bani electronici sau registru de casă.

Dispozitive folosite într-un Sistem Electronic de Plăți

Există mai multe tipuri principale de dispozitive folosite:

portofelul electronic: este folosit de către cumpărător pentru a stoca banii electronici. Există următoarele configurații fundamentale:

calculator „de mână” (hand-held computer): reprezintă un calculator de dimensiuni reduse aflat în posesia clientului. Băncile sunt neliniștite de controlul total al utilizatorului asupra resurselor dispozitivului de plată. Conectarea la punctele de acces ale SEP se face de obicei printr-o legătură serială în infraroșu;

cartela inteligentă (smartcard): constă dintr-un cip încorporat într-o cartelă de plastic. Spre deosebire de o cartelă de credit obișnuită, un smartcard dispune de un microprocesor. Comunicația cu punctul de acces se face prin contact direct cu cititorul de cartelă. Utilizatorul nu are acces la resursele hard și soft, fapt care avantajează băncile. Este imposibilă „deschiderea” smartcard-ului și efectuarea unui „reverse-engineering” ( adică o metodă de a afla modul în care a fost construită cartela prin dezasamblarea sa și parcurgerea în sens invers a pașilor care se presupune că s-au urmat la creare );

portofel electronic cu observator: structură formată din două calculatoare: calculatorul clientului, prin care acesta comunică cu punctul de acces al SEP, și un calculator al băncii, încorporat în cel al clientului, care previne dubla cheltuire a banilor electronici;

punctul de vânzare (POS): este folosit de către vânzător pentru a stoca banii electronici temporar. Din punct de vedere tehnic, are interfețe atât serială, prin infraroșu sau wireless ( local sau prin GSM/GPRS sau CDMA ) cât și un cititor de smartcard/card magnetic;

distribuitorul de bani electronici: dispozitivul prin care se încarcă bani electronici în portofelul electronic al cumpărătorilor. Moduri de implementare: 

distribuitor cont-bani electronici: soluție care permite incrementarea valorii din portofel pe baza retragerii unei sume de bani reali din contul deschis de cumpărător;

distribuitor carte de credit-bani electronici: permite incrementarea valorii din portofel pe baza creditării cumpărătorului de către o casă de credit; 

distribuitor numerar-bani electronici: permite incrementarea valorii portofelului prin colectarea de la cumpărător a unei sume cash.

Tipuri de tranzacții într-un Sistem Electronic de Plăți

Tranzacțiile reprezintă schimburile de mesaje, sub forma unor protocoale, care se desfășoară între entitățile care joacă diverse roluri într-un Sistem Electronic de Plăți.

Exemple de tranzacții:

tranzacția de identificare a utilizatorilor: O entitate verificator V verifică dacă altă entitate aprobator P este cea care pretinde că este. Pentru aceasta, V creează în mod aleator un mesaj de provocare, pe care îl criptează cu cheia publică a lui P și îl trimite lui P. Acesta, folosind cheia sa secretă, decriptează mesajul, și îl trimite înapoi, în clar, lui V. V știe cheia publică a lui P ca urmare a tranzacției;

tranzacția de obținere a unui certificat: toate cheile publice folosite într-un SEP sunt certificate de către unul sau mai multe centre de certificare. Astfel: informații specifice utilizatorului ( credite ) + cheie publică a utilizatorului + cheie secretă a centrului duc la obținerea unui certificat. În general, certificatele au o perioadă de valabilitate redusă;

tranzacția de control al accesului: furnizează protecție împotriva folosirii neautorizate a unor entități la nivelul sistem; poate folosi și în operații de monitorizare ( de exemplu, când un utilizator dorește să afle suma pe care o deține în cont );

tranzacția de încărcare: se desfășoară între bancă și distribuitor, după o autentificare mutuală prealabilă;

tranzacția de retragere: se desfășoară între distribuitor și cumpărător, tot după autentificarea mutuală prealabilă;

tranzacția de plată: se desfășoară între vânzător și cumpărător; poate fi off-line sau on-line. La cele on-line, este implicată și banca;

tranzacția de anulare: se referă la ultima tranzacție de plată între cumpărător și vânzător;

tranzacția de depunere: implică vânzătorul și colectorul;

tranzacția de clearing: se desfășoară între colector și bancă sau între două bănci. 

Modalități de plată

Sistemele electronice de plăți trebuie să atingă nivele ridicate de securitate, viteză, caracter privat și confidențial, descentralizare și internaționalizare și să fie unanim acceptate de comercianți și oameni de afaceri. O trăsătură comună a majorității acestor soluții o constituie utilizarea tehnicilor criptografice care asigură confidențialitatea, autenticitatea și integritatea mesajelor transferate între entitățile implicate. 

În continuare sunt analizate câteva dintre cele mai cunoscute metode de plată electronică: 

Plata prin carduri bancare 

Sistemul de carduri a fost creat cu intenția de a-i permite cumpărătorului să-și satisfacă imediat dorința de cumpărare de bunuri și servicii. Prin cartea de credit, riscul este transferat de la vânzător la instituția financiară care a emis cartea de credit. Procesul cuprinde următorii pași: 

cumpărătorul prezintă vânzătorului cartea de credit;

vânzătorul trimite numărul cărții de credit și detaliile tranzacției la un sistem de autorizare;

acesta fie autorizează direct tranzacția, fie o direcționează la banca emitentă a cărții de credit, pentru aprobare;

periodic ( de exemplu zilnic ), vânzătorul trimite detaliile tranzacțiilor aprobate către banca sa;

aceste informații sunt trimise la asociația emițătorilor de cărți de credit după ce au fost procesate tranzacțiile pentru care banca respectiva este și colectoare și emițătoare de cărți de credit;

la sfârșitul lunii, consumatorul primește facturile pe care trebuie să le achite, altfel va plăti dobânda pentru creditul acordat de banca emitentă a cărtii de credit.

Plata prin SoftNet ePay 

În România plata directă prin card pe Internet este periculoasă datorită nivelului potențial ridicat de fraudă. Băncile nu acceptă în general plăți prin card-uri pe Internet decât, eventual, cu asumarea totală a riscului de către comerciant. Se folosește mai mult plata prin ATM, dar aceasta nu are aceleași beneficii cu plata on-line. 

ePay este un sistem românesc realizat de către SoftNet, care permite reducerea nivelului de fraudă cât mai aproape de zero astfel:

a fost introdus un model de plată cu trei actori: magazinul electronic, posesorul de card (clientul) și banca ce a emis cardul și al cărei client este posesorul de card;

posesorul de card semnează electronic la bancă fiecare tranzacție. Doar tranzacțiile acceptate de către acesta și marcate ca atare de către bancă sunt autorizate;

plata efectivă se efectuează doar după ce datele privind plata transmise de magazinul electronic sunt comparate cu cele înregistrate de client și se constată o corespondență perfectă. 

Plata prin CyberCash 

Pentru a efectua plăți prin CyberCash ( adresa de Internet: www.cybercash.com ), consumatorul are nevoie de un software care simulează „portofelul”, face criptarea mesajelor și memorează tranzacțiile. Ca și portofelul obișnuit, acest portofel-software poate înregistra mai multe cărți de credit. La instalarea software-ului, se generează o pereche de cheie publică – cheie privată. Cheia publică se transmite la CyberCash care o memorează într-o bază de date, alături de toate cheile publice ale vânzătorilor și clienților. Vânzătorul are un software similar. Cumpărătorul și vânzătorul trebuie să facă schimb de chei înainte de a ști cu ce cheie publică să cripteze mesajul adresat unui anumit corespondent.

Derularea unei tranzacții este compusă din următorii pași:

utilizând un navigator Web, consumatorul selectează ce vrea să cumpere;

serverul vânzătorului trimite „portofelului Software” o cerere de plată semnată prin care dă detalii despre cumpărătură și transmite tipul cărților de credit acceptate. „Portofelul” deschide o fereastră și afișează suma și lista cărților de credit disponibile pentru selecție;

„portofelul” trimite un mesaj criptat și semnat cu numărul cărții de credit și detalii privind tranzacția și acceptarea plății;

serverul vânzătorului trimite acest mesaj împreună cu un mesaj propriu semnat și criptat către Gateway. Gateway-ul este operat de către un agent al băncii colectoare al vânzătorului. Aici mesajele sunt decriptate și comparate, iar dacă se potrivesc, se trimite o cerere de autorizare convențională;

Gateway-ul reîntoarce un răspuns către vânzător; informațiile privind tranzacția și numărul cartelei de credit sunt criptate cu cheia publică a lui CyberCash, astfel încât vânzătorul nu poate utiliza ilegal, ulterior, cartea de credit a cumpărătorului;

vânzătorul trimite un răspuns „carte de credit” către software-ul „portofel”.

Plata prin SmartCard (cartela „inteligentă”) 

SmartCardul este, în esență, înlocuitorul portofelului obișnuit. Tot conținutul unui portofel actual ( acte, cărți de credit, bani gheață ), va fi înlocuit de una sau mai multe SmartCarduri. Din punct de vedere fizic, SmartCard arată ca o carte de credit, cu unul sau mai multe microcircuite de tip „microcontroller” înglobate. O cartelă inteligentă poate păstra de 10-100 de ori mai multă informație decât o cartelă magnetică, fiind totodată mult mai sigură. Conectată la un terminal de citire-scriere, SmartCard poate efectua funcții complexe de luare a deciziilor, proceduri sofisticate de autentificare pentru a preveni frauda. Deci beneficiile oferite de SmartCard sunt: siguranța, capabilități active anti-fraudă, flexibilitate în aplicații, posibilitatea de validare off-line.

Pentru a efectua operații cu SmartCard, aceasta se introduce într-un dispozitiv de citire/ scriere care poate fi cu sau fără contact. Acest cititor poate fi sub forma unui portofel care poate comunica cu alt portofel similar sau cu banca, pentru efectuarea de transferuri multivalutare. Astfel, SmartCard memorează direct echivalentul digital al sumelor de bani în loc să indice un cont la bancă sau un credit acordat de bancă. Când o astfel de cartelă este folosită pentru a cumpăra ceva, echivalentul sumei respective este efectiv transferat vânzătorului și apoi mai departe către o instituție financiară. SmartCard poate fi reîncărcabilă sau nu. În acest ultim caz, cartela va fi aruncată atunci când suma înscrisă pe ea a fost epuizată. 

Transferul electronic de fonduri 

Pe Internet, cecul de hârtie poate fi înlocuit de un cec electronic, semnat digital de emitent. Un consorțiu de bănci, FSTC – Financial Services Technology Consortium a statuat un model de cec electronic foarte asemănător cecurilor clasice pe hârtie. Plătitorul folosește un procesor, de tipul unui SmartCard PC, pentru a genera și semna digital un cec electronic ce va fi transmis prin poștă electronică sau Web. El se trimite fie băncii cumpărătorului – care-l va onora după verificarea semnăturii digitale, trimițând banii către banca vânzătorului, fie direct vânzătorului – care va verifica semnătura, îl va semna la rândul său, și îl va trimite băncii sale. Sistemul FSTC se bazează pe folosirea sistemelor criptografice cu chei publice pentru semnătură digitală și pleacă de la premisa ca toate cheile publice ale participanților și certificatele lor sunt cunoscute pretutindeni în sistem. 

Plata prin eCash 

Este prima soluție totalmente software pentru plățile electronice. Tranzacțiile se desfășoară între vânzător și cumpărător, care trebuie să aibă conturi la aceeași bancă. Cumpărătorii trebuie să înștiințeze banca asupra faptului că doresc să transfere bani din conturile lor în așa-numitul cont eCash Mint. În orice moment, cumpărătorul poate interacționa de la distanță, prin calculatorul său și utilizând un client software, cu contul Mint și poate retrage fonduri de aici pe discul calculatorului său. Formatul acestor fonduri este electronic, suite de zero și unu protejate criptografic. Ca urmare, discul cumpărătorului devine un veritabil „portofel electronic”. Apoi se pot executa plăți între persoane individuale sau către firme, prin intermediul acestor eCash. 

eCash are un caracter privat: deși banca ține o evidență a fiecărei retrageri eCash și a fiecărui depozit Mint, este imposibil ca banca să stabilească utilizarea ulterioară a eCash. Această proprietate este posibilă datorită folosirii unor criptosisteme cu chei publice RSA, cu o lungime a cheii de 768 biți. 

Banii electronici (digicash): reprezintă echivalentul electronic al banilor reali, și pot lua diferite forme, precum cartelele obișnuite, a SmartCard-urilor, etc.

3. TEHNOLOGII ȘI INSTRUMENTE INFORMATICE UTILIZATE ÎN DEZVOLTAREA APLICAȚIEI

3.1 Arhitectura Client/Server

Problema proiectării aplicațiilor a suferit de-a lungul timpului multe modificări dictate de necesitate și eficiență și a dus la apariția unei palete variate de paradigme de programare. Una dintre cele mai răspândite la ora actuală este programarea client / server.

Arhitectura aplicației client/server este o infrastructură versatilă, bazată pe mesaje și modulară, care are scopul clar de a îmbunătăți flexibilitatea, interoperabilitatea, scalabilitatea și ușurința în utilizare de care duc lipsă tradiționalele arhitecturi mainframe și server de fișiere. În cadrul arhitecturii mainframe toată procesarea necesară obținerii răspunsului la o cerere lansată de o stație se făcea pe calculatorul central (mainframe-ul) care stoca și toate resursele la care avea acces clientul. Încă unul din neajunsurile arhitecturii îl reprezenta problema dificilă a implementării unei interfețe cu utilizatorul. Arhitectura serverului de fișiere se bazează pe o arhitectură de fișiere distribuite, care sunt transmise de către server, la cerere, clientului, spre modificare sau interogare, și returnate apoi server-ului, spre stocare, la încheierea operației.

Limitările celor două arhitecturi tradiționale în contextul actual al unei rețele de calculatoare și în special al Internetului (văzut ca o rețea mare de resurse distribuite) au dus la răspândirea arhitecturii client / server.

Arhitectura unei aplicații client / server este fundamentată pe principiul separării aplicației în module independente care pot fi executate în spații de memorie diferite. În acest tip de arhitectură, modulul care face interogările joacă rolul de „client” (cel care cere un anumit serviciu), iar modulul care este interogat devine „server” (cel care satisface acel serviciu).

Deși interacțiunea între cele două module se poate desfășura în cadrul aceluiași calculator (ceea ce ne duce cu gândul la o asemănare cu programarea structurată ), raportată la o rețea, arhitectura oferă o modalitate convenabilă de interconectare a serviciilor distribuite eficient în rețea. Astfel, clientul și server-ul sunt, de regulă, două calculatore diferite în cadrul aceleiași rețele. Mai mult, oricare din calculatoarele rețelei poate acționa atât ca și client, cât și ca server, pe principiul conform căruia orice calculator din rețea reprezintă un potențial ofertant de resurse (informații sau servicii, vezi fig. 3.1).

Fig. 3.1 Arhitectura generică client/server

În acest tip de arhitectură a fost înlocuit serverul de fișiere cu serverul de baze de date. Toate datele sunt reținute într-o bază de date și se află sub administrarea unui server de date care procesează orice modificare asupra bazei de date. Acest sistem reduce foarte mult traficul în rețea, deoarece comunicarea client / server se reduce la comunicarea cerințelor în format cât mai simplu din partea clientului ( de ex. o comandă SQL ) și respectiv comunicarea doar a rezultatelor din partea server-ului.

Ca reguli de funcționare a unei relații client / server trebuie subliniate:

serverul comunică cu clientul după un protocol dinainte stabilit;

un server trebuie să fie capabil să deservească mai mulți clienți;

serverul trebuie să fie găsit de către client la aceeași adresă;

clienții pot lansa cererile de oriunde din rețea;

serverul răspunde cererilor pentru resurse făcute de clienți într-un mod transparent relativ la locația, managementul sau distribuția resurselor;

serverul funcționează ca o interfață de acces la anumite resurse;

Următoarea diagramă pe 4 nivele detaliază arhitectura unei aplicații generice client/sever:

Fig. 3.2 Arhitectura unei aplicații client / server generice

la nivelul de preluare a informațiilor datele sunt preluate de la utilizator și transformate din format „uman” în format accesibil calculatorului și invers; este important de subliniat că în această etapă nu este verificată corectitudinea datelor transmise, ele fiind doar adaptate necesităților de utilizare;

la nivelul regulilor de business se stabilesc „regulile jocului”, adică se validează datele; la acest nivel nu se procesează nici un fel de cerere venită de la client, ci doar se stabilește corectitudinea datelor venite de la client și necesare serverului, sau invers;

interfața aplicației este nivelul care răspunde de transformarea datelor din formatul transmis de client în formatul necesar serverului pentru a putea da un răspuns clientului; ca să luăm un exemplu, această etapă va transpune cererea clientului într-o instrucțiune SQL pe care o va transmite etapei finale;

serverul de aplicație este nivelul final, acela de procesare a datelor și de obținere a rezultatelor cerute de client;

Aplicațiile client / server sunt structurate pe patru nivele. Cum se împarte aplicația între client și server, cu alte cuvinte care nivel va fi situat pe partea de client a aplicației și care va fi situat pe partea de server, rămâne la latitudinea dezvoltatorului.

3.2 Tehnologii și instrumente informatice utilizate în implementarea aplicației

Acest magazin virtual a fost implementat folosind limbajele de programare PHP, XHTML, CSS, JS, serverul Web APACHE, serverul de baze de date MySQL, si aplicatia ADOBE PHOTOSHOP pentru grafică.

Soluțiea Apache + PHP + MySQL

Internet-ul este în al treilea stadiu de dezvoltare, iar dinamic și interactiv sunt atributele esențiale ale oricărui site de succes.

Conform lui Graeme, PHP și MySQL reprezintă cea mai bună metodă actuală pentru crearea unor site-uri care folosesc baze de date. Acest fapt este demonstrat de un studiu de cercetare al companiei Netcraft care arată că dacă în iunie 1998 existau 7.500 de host-uri care utilizau PHP în martie 1999 numărul acestora a crescut la 410.000. Această combinație a primit și titlul de „Database of the Year” la Webcon98.

MySQL este un server de baze de date mic și compact, ideal atât pentru aplicații mici, cât și pentru dezvoltarea marilor proiecte. În afara faptului că suportă standardul SQL ( ANSI-92 ), poate rula pe mai multe platforme și permite sisteme multithreading pentru serverele Unix, ceea ce aduce o creștere importantă a performanței. Sub WindowsNT, 2000 sau XP, MySQL este lansat ca un serviciu, pe când sub Windows95/98, ca un proces normal.

PHP este un limbaj de programare pentru server. Codul PHP poate fi integrat în interiorul codului HTML. Scriptul PHP va fi apoi procesat de către server care va returna un fișier HTML. Acest tip de interacțiune permite executarea unor operații destul de complexe.

Aplicațiile WEB reprezintă atât prezentul cât și viitorul, ele funcționând pe baza unei arhitecturi client/server. Aplicațiile realizate cu PHP și MySQL utilizează un singur client și anume browser-ul WEB. Limbajul de bază al browser-ului WEB este HTML. Acest limbaj dispune de o serie de tag-uri care descriu modul în care va arăta o pagină WEB. Majoritatea prelucrărilor efectuate de aplicațiile Web au loc pe sever. O aplicație specifică, numită server Web, va asigura comunicarea cu browser-ul. Un server de baze de date relaționale stochează informațiile pe care le va accesa aplicația. În final mai este nevoie de un limbaj care să intermedieze interogările ce apar între serverul Web și serverul de baze de date. Acest limbaj va fi utilizat și pentru a executa anumite operații asupra informațiilor care vin spre și dinspre serverul Web.

PHP: Hypertext Preprocessor

Internet-ul a intrat deja în al treilea stadiu de dezvoltare, iar noțiuni și facilități precum site-uri web dinamice și interactive au devenit atributele esențiale ale oricarei afaceri online de succes implicând comerț electronic ( dar nu numai ). Un studiu al Cyberatlas cu privire la comerțul prin Internet releva faptul că activitățile de vânzări online au cel mai mare potențial de dezvoltare din întreg sectorul economic.

Principalul avantaj al unui site dinamic asupra unuia static este ușurinta în administrare ( actualizare ). Adăugarea sau modificarea de conținut este foarte simplă datorită faptului că acest conținut este stocat într-o bază de date sau în fișiere text, astfel încat cei care se ocupă de conținut nu au nevoie să posede cunostințe de HTML, CSS, JavaScript sau alte tehnologii specifice domeniului "web design" și utilizate intens la construirea paginilor de prezentare. De asemenea, daca trebuie să schimbam logo-ul pe fiecare pagina a site-ului, este de ajuns să facem modificarea intr-un singur fișier în loc să luam fiecare pagina în parte, să o modificăm și să o uploadam înapoi pe server.

Scurt istoric.

PHP a fost început în 1994 ca o extensie a limbajului server-side Perl, și apoi de o serie de CGI-uri compilate de către Rasmus Lerdorf, pentru a genera un curriculum vitae și pentru a urmări numărul de vizitatori al unui site. Apoi a evoluat în PHP/FI 2.0, dar proiectul open-source a început să ia amploare după ce Zeev Suraski și Andi Gutmans, de la Technion au lansat o nouă versiune a interpretorului PHP în vara anului 1998, această versiune primind numele de PHP 3.0. Tot ei au schimbat și numele în acronimul recursiv de acum, până atunci PHP fiind cunoscut ca Personal Home Page Tools. Apoi Suraski și Gutmans au rescris baza limbajului, producând astfel și Zend Engine în 1999. În mai 2000 a fost lansat PHP 4.0, având la bază Zend Engine 1.0. Pe 13 iulie 2004 a fost lansat PHP 5, cu Zend Engine II, ce a adus și o orientare obiect mai pronunțată și suportând mai multe caracteristici ale acestui tip de programare.

Principiul de funcționare

PHP este un limbaj de programare pe parte de server (în engleza "server-side") care poate, printre altele, să interacționeze cu o bază de date pentru a afișa sau a modifica informațiile din ea. Mai exact, serverul știe să furnizeze browser-ului clientului doar pagini HTML. Paginile HTML pot fi deja pe server sau create tot acolo de către alte aplicații la cererea server-ului de web, fiind apoi servite ca HTML browser-ului clientului.

În momentul în care cerem pagina "test.html" de pe server, acesta o servește imediat. Dacă în schimb cerem o pagina cu altă extensie, ".php" în cazul de față, serverul caută să vadă dacă este configurat să serveasca pagini cu această extensie și ce program (din cele pe care le gestionează) se ocupă de ele. Astfel, atunci când cerem o pagină cu extensia ".php", serverul va trimite mai departe cererea către PHP, de tipul "Se cere un fisier PHP; accesează-l, analizează-l si execută-i conținutul după care dă-mi înapoi o pagina HTML pe care să o afișez clientului". PHP preia cererea, rulează codul din programul PHP și dacă vede că se cer informații din baza de date MySQL, o accesează, extrage informațiile cerute și construiește cu ele o pagină HTML pe care o va trimite serverului ( de obicei este vorba de un server Apache) pentru ca acesta să o poată servi clientului.

Ca limbaj de programare web, PHP este foarte ușor de învățat dacă elementele programării sunt explicate pe înțelesul tuturor. Datorită similarității între limbajele de programare de uz comun, cunoscând PHP va fi mai ușor să trecem apoi la VBScript, Java sau C.

Din toata gama de tehnologii web, PHP este limbajul ideal pentru construirea de pagini web dinamice și interactive. Este relativ simplu, open-source, poate fi rulat pe mai multe platforme ( Linux, Windows, precum și pe o mulțime de alte sisteme de operare mai rar intâlnite ) și se poate conecta la mai multe tipuri de baze de date.

Cel mai important aspect al limbajului este posibilitatea de a fi imbricat cu cod HTML. Putem crea astfel pagini HTML statice și, din loc în loc, acolo unde este nevoie, să introducem dinamism cu ajutorul PHP. Spre exemplu, o mare parte din structura unei pagini web cum ar fi meniurile, tabelele, aranjamentul în pagină, poate fi compusă din cod HTML static. Din loc în loc codul HTML va fi intercalat cu cod PHP care extrage din baza de date cele mai noi știri. În momentul în care accesăm pagina, acest cod este parsat ( analizat linie cu linie și executat ) pe server astfel încât este afișată o pagina HTML fară să știm că pentru crearea ei s-a facut o conexiune la baza de date, s-au extras informațiile de acolo și au fost ordonate pentru afișare.

În istoria tehnologiilor utilizate la realizarea site-urilor web, limbajul PHP a aparut în 1994 din nevoia lui Rasmus Lerdof de a afla câte persoane îi vizualizează CV-ul online. El a denumit setul de scripturi create "PHP", acronimul pentru Personal Home Page. Pe parcursul urmatorilor 3 ani limbajul a evoluat dar adevăratul succes a început să îl cunoască de când Zeev Suraski și Andi Gutmans au rescris motorul PHP de la cap la coadă, motor care poartă de la versiunea 4 a PHP numele Zend, o combinație de litere din prenumele creatorilor săi: Zeev și Andi.

Fiind open source, PHP beneficiază de suport activ din partea comunității online, acesta fiind și motivul creșterii explozive a numărului de site-uri bazate pe PHP. Între 2000 și 2002 numărul lor a crescut de peste 130 de ori, în timp ce numărul site-urilor bazate pe tehnologia ASP a crescut de 3 ori, Java Server Pages (JSP) de 16 ori, iar Cold Fusion de 4 ori.

Pe lângă manipularea conținutului paginilor web, PHP poate trimite headere HTTP pentru autentificare, seta cookie-uri, redirecționa utilizatorii. Mai mult, cu ajutorul bibliotecilor externe de funcții poate parsa fișiere XML, crea și manipula imagini, animații Shockwave, Flash, PDF-uri sau se poate conecta la un server de mail. Îar acestea sunt doar câteva din funcțiile pe care le poate îndeplini.

Dezvoltarea explozivă a limbajului PHP din ultimii ani este în cea mai mare parte datorată ușurinței cu care acesta lucrează cu bazele de date în Internet. Din multitudinea de soluții de dezvoltare a site-urilor web, PHP oferă programatorului o mulțime de funcții predefinite pentru lucrul cu bazele de date în Internet. Aceasta înseamnă că din cadrul PHP putem executa toate operațiunile aferente comenzilor MySql.
O primă pagină atractivă este vitală pentru succesul unui site. Menirea ei este să ofere utilizatorului motivele pentru a continua să vadă mai mult și eventual să fie imediat interesat să cumpere un produs. Spre exemplu, vitrina unei librării virtuale ar putea prezenta utilizatorului domeniile de carte disponibile, cele mai noi cărți adăugate, precum și cele mai populare cărți din librărie sub aspectul vânzărilor sau al interesului publicului. În orice astfel de magazin virtual, prima pagina este de fapt o combinație de mai multe module de pagină. Unele elemente-modul sunt prezente pe toate paginile site-ului, ca de exemplu header-ul ( capul de pagină ) în care specificăm titlul, setul de caractere folosit, stilul CSS generic al paginii, apoi instrucțiunile de conectare la baza de date și, nu în ultimul rând, nota de copyright din subsol.

Structura fiecărei pagini dintr-un astfel de site – indiferent că este prima pagină, pagina cu date de contact sau pagina cu detalii despre carte – ar putea arăta astfel:

Partea de conectare la baza de date ;

Header ( titlu, specificații stil, set de caractere ) ;

Meniul ( butoanele de navigare ) ;

Conținutul paginii;

Footer-ul paginii ( partea de jos conținând nota de copyright, etc… ) .

Această structură se va putea folosi pentru toate paginile site-ului și, în afară de partea reprezentând conținutul, care diferă de la pagină la pagină, celelalte elemente-modul rămân practic neschimbate. Așadar le putem refolosi scriindu-le pe fiecare din ele într-un fișier separat și apoi incluzându-le în pagina finală, livrată la utilizator atunci când avem nevoie. Vom putea modifica direct din baza de date conținutul oricăreia dintre ele, fiecare parte putându-se actualiza independent una de cealaltă, reușindu-se astfel dintr-o singură mișcare operarea modificărilor dorite în toate paginile site-ului.

Per ansamblu, proiectarea site-urilor web ( crearea de pagini și administrarea acestora din punct de vedere al conținutului ) a început să se identifice în mod aproape universal cu tehnologia PHP. Dincolo de multitudinea de biblioteci de funcții și facilități oferite, PHP și MySql sunt foarte ușor de invățat chiar și pentru cei nefamiliarizați cu programarea sau bazele de date. În prezent, PHP este atât de puternic și de versatil încât până și liderul portalurilor, Yahoo, a renunțat cu ceva timp în urmă la limbajul sau proprietar, yscript, în favoarea PHP.

MySQL

Bazele de date au devenit o parte integrantă din viață de zi cu zi a fiecărui om. Fără o structurare a datelor în baze de date, nu ar exista o anumită ordine între lucruri, gestiunea datelor devenind un lucru foarte greu, poate chiar imposibil. Băncile, universitățile și bibliotecile sunt doar trei exemple de organizații care depind în mare măsură de bazele de date și de gestiunea acestora. Pe Internet motoarele de căutare, procesele de cumpărături on-line, și chiar convențiile de denumire a tuturor site-urilor Web sunt activități care nu s-ar putea desfășura fără utilizarea bazelor de date.

După T.Conolly, o bază de date reprezintă o colecție partajată de date, între care există relații logice ( și o descriere a acestor date ), proiectată pentru a satisface necesitățile informaționale ale unei organizații.

Un Sistem de Gestiune a Bazelor de Date sau SGBD ( în limba engleză DBMS – Data Base Management System ) reprezintă un ansamblu de programe pentru gestiunea datelor sau un mediu de programare destinat gestiunii datelor din baza de date, care asigură:

încărcarea bazei de date,

actualizarea și interogarea acesteia,

interfața cu sistemul de operare în vederea simplificării accesului la date.

Un sistem de gestiune a bazelor de date care este implementat pe calculator și care gestionează interfața cu aceste date, formează ceea ce se numește un server de baze de date.

Arhitecturii client-server realizată de perechea de aplicații browser – server de web ( de obicei Internet Explorer – Apache ) i se adaugă încă o pereche de aplicații, script asociat formularului – server de baze de date. În acest tandem scriptul asociat formularului ( scris în PHP, C, C++, Perl, etc. ) este client, iar serverul de baze de date ( MySQL, Oracle, etc. ) are rolul de server. Scriptul formulează comenzi SQL, iar serverul SQL le execută.

MySQL este un sistem de gestiune a bazelor de date relaționale foarte rapid și robust, fiind cel mai popular din clasa sa. MySQL Server a fost creat pentru a lucra cu baze de date mai rapid decât soluțiile deja existente la ora actuală pe piață. Serverul MySQL controlează accesul la datele utilizatorului, accesul este permis mai multor utilizatori autorizați. MySQL este un server multi-user și multi-thread și utilizează limbajul standard de interogare a bazelor de date ( SQL – Standard Query Language ).

MySQL este disponibil în mod public din 1996, dar istoria dezvoltării sale începe încă din 1979 și a câștigat de mai multe ori premiul cititorilor – Linux Journal Readers' Choice Award. MySQL este disponibil sub o licență Open Source, dar există și sub licențe comerciale. Este rapid, iar costul său este nul, fiind distribuit gratuit sau foarte mic, distribuit sub o licență comercială, dacă aceasta este necesară aplicației utilizatorului și este mult mai ușor de configurat decât multe alte produse asemănătoare.

Popularitatea MySQL se datorează în primul rând multiplelor facilități oferite de acesta, dintre care vom aminti:

viteza de execuție: programatorii susțin că MySQL este cel mai rapid sistem de gestiune a bazelor de date care se găsește la ora actuală pe piață;

ușurința în utilizare: MySQL este un sistem de gestiune a bazelor de date cu performanțe ridicate dar relativ simplu de utilizat, a cărui configurare și administrare sunt mult mai simple decât în cazul sistemelor mai mari;

accesul concurent la date de către un număr nelimitat de utilizatori: la server-ul MySQL se pot conecta mai mulți clienți simultan; clienții pot folosi mai multe baze de date simultan; se poate obține acces la MySQL în mod interactiv, folosind numeroase interfețe care permit introducerea de interogări și vizualizarea rezultatelor: clienți în linie de comandă, browsere Web sau clienți Window System; de asemenea este posibilă o varietate de interfețe de programare pentru limbaje precum PHP, C, Perl, Java;

conectivitatea și securitatea: MySQL poate fi folosit integral în rețele, iar bazele de date sunt accesibile de oriunde din internet, oferind astfel posibilitatea partajării datelor cu oricine, oriunde; MySQL are controlul accesului astfel încât persoanele care nu au dreptul să citească datele nu vor avea această posibilitate

distribuția liberă: MySQL este gratuit, fapt ce a atras extinderea fără precedent a folosirii acestui server de baze de date.

Distribuția MySQL include următoarele:

un server SQL: acesta ce reprezintă motorul care activează MySQL și furnizează accesul la bazele de date;

programe client pentru accesul la server: acestea sunt reprezentate de programe interactive care permit introducerea de interogări în mod direct și vizualizarea rezultatelor; de asemenea există numeroase programe administrative și utilitare ce permit rularea site-ului;

o bibliotecă client: cu ajutorul acesteia se pot scrie propriile programe client în C; în același timp, biblioteca furnizează baza de date pentru terțe asocieri pentru alte limbaje.

MySQL este un sistem client-server alcătuit dintr-un server SQL multi-thread care are facilități pentru mai mulți utilizatori, mai multe programe și biblioteci client, instrumente de administrare și un număr mare de interfețe de programare. Server-ul de baze de date este un program localizat pe calculatorul responsabil cu stocarea datelor, care ascultă cererile clienților sosite prin rețea și obține acces la conținutul bazei de date în funcție de aceste cereri, în scopul de a furniza clienților informațiile solicitate. Clienții reprezintă programe care se conectează la server-ul de baze de date și efectuează interogări pentru a-i indica acestuia informațiile pe care le doresc.

Având în vedere că MySQL suportă o gamă variată de produse software, există posibilitatea ca multe din limbajele de programare deja folosite de anumiți utilizatori să suporte deja interfața cu acest produs.

Orice mașină care dorește să proceseze interogări asupra unei baze de date MySQL trebuie să ruleze MySQL server – MySQLd –, care este responsabil de tot traficul de tip „incoming” sau „outgoing” cu baza de date. Ca orice server, MySQLd primește pe un port particular (3306) eventualele cereri de conexiune ale unui client care trimite cereri către o bază de date via MySQLd. Acest client poate fi un script în PHP care, grație modelului DBI, poate trimite o cerere către baza de date prin intermediul serverului MySQL, sau chiar clientului command-line MySQL. Clientul MySQL este o interfață interactivă pentru trimiterea de comenzi către server.

Principalele motive pentru folosirea pe scară largă a MySQL sunt viteza, stabilitatea și facilitatea în utilizare. De asemenea MySQL are o serie de caracteristici care au fost dezvoltate prin colaborarea foarte apropiată cu utilizatorii acestui limbaj. Aceste caracteristici ale limbajului se datorează faptului că a fost proiectat încă de la început pentru gestionarea unui volum foarte mare de date, iar experiența în folosirea sa acumulată de-a lungul anilor și-a spus cuvântul. MySQL oferă astăzi un set complet și util de funcții. Conectivitatea, viteza și securitatea fac ca MySQL să fie unul din cele mai potrivite produse pentru gestiunea bazelor de date pe Internet.

Apache

Un server Web este un daemon care acceptă conexiuni conform protocolului HTTP, răspunzând cererilor recepționate de la clienți. Ca și alte protocoale utilizate în Internet, protocolul HTTP ( HyperText Transfer Protocol ) este un protocol de tip cerere-răspuns, bazat pe TCP / IP, destinat transferurilor de informații hypermedia.

Serverul Web Apache este un proiect al Apache Software Foundation și constă într-un efort colectiv cu scopul declarat de a dezvolta și întreține un server Web care oferă servicii HTTP pentru sistemele de operare moderne precum UNIX și Windows, caracterizat de calitățile: open-source, securizat, eficient și extensibil.

Proiectul Apache este dezvoltat de o comunitate de dezvoltatori și utilizatori cunoscută sub denumirea de Apache Group, care în procesul de dezvoltare se bazează pe consens și colaborare. Acestui număr mare de dezvoltatori i se adaugă o comunitate substanțială de programatori și / sau simpli utilizatori care contribuie cu idei, documentație, cod și mai ales feed-back-ul necesar unei dezvoltări complete.

Devenit cel mai popular server Web încă din aprilie 1996, Apache ajungea în noiembrie 2005 într-un top al serverelor Web făcut de Netcraft Web Server Survey, serverul fiind folosit de 70% din totalitatea site-urilor de pe Internet, mai mult decât toate celelalte servere la un loc.

Ajuns la versiunea 2.2.2, Apache depășește servere comerciale ale unor firme de prestigiu, prin:

– opțiunile de configurare și design-ul modular: este foarte ușoară scrierea de module care să satisfacă o funcționalitate particulară, în cazul în care acestea nu sunt deja implementate în librăria proprie.

– portabilitate: versiunea originală a serverului Apache a fost dezvoltată pentru UNIX, dar există acum și versiuni care rulează sub OS/2, Windows și alte platforme.

Dorința creatorilor Apache, după cum se specifică în site-ul Grupului Apache, este ca platforma sa să fie folosită de cât mai multă lume ( companii mari sau mici, instituții de cercetare, școli, Intranet-uri ) și să se acopere cât mai multe domenii de activitate.

Câteva caracteristici ale serverului Apache sunt:

are foarte multe facilități: Apache are suport XML, incluziune de fișiere pe parte de server, rescrierea URL-urilor, găzduire virtuală, pentru a enumera doar câteva dintre ele;

este modular: dacă se dorește folosirea unei facilități care nu este implementată în nucleul Apache sunt foarte mari șanse să existe un modul care poate adăuga serverului acea facilitate;

este extensibil: după cum am menționat codul sursă fiind gratis, dacă nu se găsește un modul care să ofere funcțiile de care este nevoie la un moment dat, este posibilă crearea unuia nou, care să servească nevoilor personale;

este popular: în acest moment, serverele web Apache acoperă aproximativ 60% din piața serverelor web;

este gratuit: nu în ultimul rând, faptul că este distribuit în mod gratuit este un atu foarte mare pentru Apache.

XHTML

În primul rând XHTML reprezintă prescurtarea de la EXtensible HyperText Markup Language ( denumirea oficiala a standardului ). Practic este un înlocuitor modern al mai vechiului limbaj HTML, fiind aproape identic cu standardul HTML 4.01, o versiune îmbunatațită, mult mai strictă și mai curată a standardului HTML 4.0. Abstractizând puțin, afirmăm că XHTML reprezintă o definire de tip XML a unui document HTML, pe scurt o combinație între HTML și XML.

Avantajele unei aplicații XHTML sunt multiple: pot fi citite de toate dispozitivele XML, în timp ce păstrează compatibilitatea cu toate browserele de Internet mai vechi sau mai noi fără a necesita specificații suplimentare.

XHTML + TIME este o extensie a limbajului XHTML, oferind documentelor Web suport pentru temporizare și sincronizare multimedia. Astfel, folosind câteva elemente și atribute noi, unei pagini XHTML i se poate adăuga conținut grafic, audio sau video, care poate fi sincronizat cu alte elemente de-a lungul unui cadru temporal precizat de autorul acelei pagini.

Beneficii

• Pagini Web care au conținut dinamic

XHTML + TIME poate fi utilizat pentru a adauga paginilor Web conținut interactiv, dinamic. De exemplu, pot fi create prezentări Web sub forma de slide-show, în cadrul lor fiind sincronizate fluxuri de date textuale, audio, video sau grafice. Aceste prezentări pot fi temporizate, interactive sau combinate.

Utilizare facilă

Facilitățile oferite de XHTML + TIME aduc un set de atribute și elemente noi celor deja existente în limbajul XHTML, astfel că, toate noțiunile anterioare de XHTML rămân utile pentru proiectarea de pagini Web in XHTML + TIME.

Pentru a permite utilizarea facilă a mai multor elemente XHTML, acestea pot fi grupate în relații ierarhice. Gruparea poate fi utilă și pentru a preciza dacă obiectele multimedia apar și dispar în mod secvențial în cadrul paginii Web, sau fiecare are o temporizare independentă de a celorlalte.

Suport pentru scripting

Limbajele script JavaScript sau VBScript permit și mai mult extinderea flexibilității și interactivității elementelor temporale din cadrul paginilor Web. XHTML + TIME oferă un model de obiecte complet, care extinde actualul model DHTML, ce constă dintr-un set de proprietăți, metode și evenimente pentru adăugarea de trăsături interactive paginilor Web.

 Elementele XHTML + TIME se comportă în mod diferit la adaugarea atributelor temporale, în funcție de tipul elementului respectiv. Astfel, distingem două tipuri de elemente în limbajul XHTML + TIME:

– elemente de continuț : toate elementele care descriu conținutul ce urmează a fi afișat în pagină, inclusiv elementele noi introduse de XHTML + TIME, care se referă la obiecte multimedia ( t:animation, t:audio, t:img, t:media și t:video) . Cele mai utilizate elemente de conținut din XHTML sunt p, div, span, precum și elementele pentru descrierea de tabele.

Prin adaugarea de atribute XHTML + TIME unui element de conținut, poate fi definită o apariție periodică a elementului respectiv.

Elemente de stil : descriu stilul de afișare pentru un element. Dintre cele mai utilizate elemente de stil amintim: b, i și em. Atributele aplicate unui element de stil determină atașarea și înlăturarea unor stiluri de afișare pe parcursul timpului.

CSS

De ce CSS și nu pur și simplu HTML? Simplu, CSS a fost creat pentru a separa conținutul ( HTML ) de infățișare a siteului ( CSS ).

CSS ( cascading style sheet – foi de stil în cascadă ) poate fi folosit in 2 feluri, CSS intern sau CSS extern. Desigur cel extern este folosit mai des pentru simplu fapt că, fișierul CSS poate fi destul de lung.

Daca folosiți CSS intern va trebui să operați modificările în fiecare pagină.

În acest caz codul CSS va fi plasat ca în exemplul următor:

<head>

<style type="text/css">

cod css </style></head> .

CSS EXTERN

Fișierele CSS se salvează cu extensia .css .Dacă folosim un fișier CSS pentru tot site-ul, când vom face o modificare la o culoare, la un div, modificarea va fi aplicată la toate paginile, automat. Introducerea fisierului CSS în codul HTML se face astfel:

<link rel="stylesheet" type="text/css" xhref="nume-fisier.css" />

sau:

<style type="text/css">@import url( nume-fisier.css )</style>.

Acest cod se aplică între <head> si </head>.

Javascript

JavaScript reprezintă un limbaj de script utilizat la ora actuală de majoritatea paginilor web din Internet pentru a îmbunatăți design-ul general, pentru a valida datele utilizator din formulare, adaugă interacțiune cu utilizatorul prin efecte speciale aplicabile elementelor de pagina în funcție de evenimentele generate de utilizator. La ora actuală este cel mai important limbaj de script de pe Internet.

Ca tot ceea ce are legătură cu Web-ul, JavaScript este o tehnologie nouă – mai nouă chiar decât însuși limbajul Java. Inițial, JavaScript a fost dezvoltat de Netscape sub denumirea LiveScript, un limbaj de scriptare care intenționa să extindă capacitățile HTML și să ofere o alternativă parțială la utilizarea unui număr mare de scripturi CGI pentru prelucrarea informațiilor din formulare și pentru a adăuga dinamism în paginile utilizatorilor. După lansarea limbajului Java, Netscape a început să lucreze împreună cu firma Sun pentru a oferi un limbaj de scriptare a cărui sintaxă și semantică erau strâns legate de Java – motiv pentru care denumirea a fost schimbată în JavaScript. După finalizarea limbajului, Netscape și Sun l-au lansat împreună.

Una dintre motivațiile care au stat la baza limbajului JavaScript a fost recunoașterea necesității ca logica și inteligența să existe și pe partea de client, nu doar pe partea de server. Dacă toată logica este pe partea de server, întreaga prelucrare este dirijată la server, chiar și pentru sarcini simple, așa cum este validarea datelor. În fapt, lipsit de suport logic pe parte de utilizator, mediul Web ar intra în arhitectura demodată „de la terminal spre calculatorul gazdă", care a fost înlocuită de revoluția PC din anii '80. Asigurarea de logică în interiorul browserului îl înzestrează pe client și face ca relația să fie un adevărat sistem client/server.

Java a însemnat un pas în această direcție dar a fost implementat ca auxiliar al HTML în sine și nu se intenționase integrarea sa din punctul de vedere al unui limbaj. Fiind un limbaj strict în privința tipului de date, Java nu este optim ca liant pentru numeroasele tehnologii de care Webmasterii au nevoie în crearea paginilor lor și necesită capacități de programare de nivel redus – ceva ce majoritatea programatorilor HTML preferă să nu exercite exclusiv pentru a oferi logică în spatele elementelor unui formular. Un limbaj de scriptare de nivel ridicat, pe parte de client, părea a fi piesa lipsă din arena instrumentelor de programare pentru Web.

De la lansarea sa, în decembrie 1995, JavaScript și-a atras sprijin din partea principalilor distribuitori din domeniu, printre care Apple, Borland, Sybase, Informix, Oracle, Digital, HP și IBM. A continuat să se dezvolte, obținând recunoaștere nu numai în majoritatea browserelor actuale, ci și în alte aplicații pe care le-au lansat aceste companii, dar și altele.

Situația s-a complicat însă atunci când a intervenit Microsoft. Înțelegând importanța scriptării Web, Microsoft a dorit să ofere suport și pentru JavaScript. Când Netscape a preferat să acorde licența de tehnologie companiei Microsoft în loc să o vândă, Redmond a analizat JavaScript, bazându-se pe documentația publică, și a creat propria sa implementare, JScript, care este recunoscută de Microsoft Internet Explorer versiunile 3.0 și ulterioare. JScript 1.0 este aproximativ compatibil cu JavaScript 1.1, care este recunoscut în Netscape Navigator 3.0 și browserele ulterioare. Totuși, numeroasele versiuni JavaScript și diversele bizarerii specifice platformelor de operare le-au dat dureri de cap programatorilor pentru Web, atunci când au încercat să desfășoare situri Web capabile de JavaScript. (Pentru mai multe informații privind lucrul cu diverse versiuni JavaScript, consultați capitolele 26, „Garantarea funcționării scripturilor dumneavoastră în browserele de la Nestcape și Microsoft ", și 27, „Tehnici de detectare a browserului".)

Din fericire, ajutorul se îndrepta deja spre programatorii JavaScript frustrați. Netscape, Microsoft și alți distribuitori au acceptat să predea limbajul unei organizații internaționale de standardizare, ECMA. De atunci, ECMA a finalizat o specificație de limbaj, cunoscută ca ECMAScript, pe care o recunosc toți distribuitorii. Deși standardul ECMA este util, atât Netscape cât și Microsoft au propriile lor implementări ale limbajului (JavaScript și JScript) și continuă să extindă limbajul dincolo de standardul de bază.

Pe lângă JScript, Microsoft are propriul său concurent pentru JavaScript, numit VBScript, realizat pentru a ușura pătrunderea pe Web a actualilor programatori VB. În esență, VBScript este un subset al limbajului Visual Basic. Deoarece Netscape nu recunoaște VBScript, principalele sale utilizări sunt pentru intraneturile (sau siturile Internet) unde se înregistrează o abundență de utilizatori de Microsoft Internet Explorer.

Chiar ținând seama de VBScript, JavaScript a devenit cunoscut ca limbajul de scriptare standard pentru Web. Întrucât distribuitorii produc instrumente de dezvoltare Web care necesită un limbaj de scriptare, JavaScript este frecvent folosit în acest scop; astfel, Netscape folosește limbajul cunoscut ca Server-Side JavaScript (SSJS) pe parte de server. Aspectul acesta va fi examinat mai târziu, în capitolul 12, „JavaScript pe parte de server".

4. DEZVOLTAREA APLICAȚIEI

4.1 Structura bazei de date

Proiectul folosește o baza de date MySQL, create cu phpMyadmin pentru stocarea informațiilor.

Baza de date conține 8 tabele : admins, billingcompany, billingperson, cats, op, order, producs,

users.

Fig. 4.1 Schema fizică a bazei de date

Tabela admins:

Este folosită pentru stocarea user & password ale administratorilor site-ului.

Câmpuri:

– admin: Id-ul înregistrării;

– username: numele utilizator al administratorului;

– pass: parola administratorului.

Structura de tabel pentru tabelul pentru `admins`

CREATE TABLE IF NOT EXISTS `admins` (

`adminId` int(11) NOT NULL AUTO_INCREMENT,

`username` varchar(20) NOT NULL,

`pass` varchar(50) NOT NULL,

PRIMARY KEY (`adminId`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

Prima inregistrare in tabelă:

INSERT INTO `admins` (`adminId`, `username`, `pass`) VALUES

(1, 'admin', 'd033e22ae348aeb5660fc2140aec35850c4da997');

Tabela billingcompany:

Este folosită pentru stocarea persoanelor juridice (firme) care achiziționează produse.

Câmpuri:

– billingco: Id-ul înregistrării;

– uid: numarul de ordine la înregistrare;

– companyname: denumirea companiei;

– regnumber: numarul de inregistrare (J);

– fiscalCode: codul fiscal;

– bank: banca la care are cont compania;

– bankBranch: sucursala bancii;

– address: adresa sucursalei;

– city: orasul;

– county: sectorul;

Structura de tabel pentru tabelul pentru `billingcompany`

CREATE TABLE IF NOT EXISTS `billingcompany` (

`billingCompanyId` int(11) NOT NULL AUTO_INCREMENT,

`uid` int(11) NOT NULL,

`companyName` varchar(100) NOT NULL,

`regNumber` varchar(20) NOT NULL,

`fiscalCode` char(12) NOT NULL,

`bank` varchar(50) NOT NULL,

`bankBranch` varchar(50) NOT NULL,

`iban` char(24) NOT NULL,

`address` varchar(100) NOT NULL,

`city` varchar(25) NOT NULL,

`county` varchar(25) NOT NULL,

PRIMARY KEY (`billingCompanyId`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Prima inregistrare in tabelă:

INSERT INTO `billingcompany` (`billingCompanyId`, `uid`, `companyName`, `regNumber`, `fiscalCode`, `bank`, `bankBranch`, `iban`, `address`, `city`, `county`) VALUES

(1, 3, 'GiadServ', 'j22/22/58645', '4000', 'raiffeisen', 'sucursala rahova', 'RO69RZBR0000000010681082', 'Str rahova 45', 'bucuresti', 'sector5');

Tabela billingperson:

Este folosită pentru stocarea persoanelor fizice care achiziționează produse.

Câmpuri:

– billingperson: Id-ul înregistrării;

– uid: numarul de ordine la înregistrare;

– bFirstName: Nume;

– bLastName: Prenume;

– address: adresa de domiciliu;

– city: orasul;

– county: sectorul;

– cnp;

Structura de tabel pentru tabelul pentru `billingperson`

CREATE TABLE IF NOT EXISTS `billingperson` (

`billingPersonId` int(11) NOT NULL AUTO_INCREMENT,

`uid` int(11) NOT NULL,

`bFirstName` varchar(50) NOT NULL,

`bLastName` varchar(50) NOT NULL,

`address` varchar(100) NOT NULL,

`city` varchar(50) NOT NULL,

`county` varchar(50) NOT NULL,

`cnp` char(13) NOT NULL,

PRIMARY KEY (`billingPersonId`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

Primele înregistrări în tabelă:

INSERT INTO `billingperson` (`billingPersonId`, `uid`, `bFirstName`, `bLastName`, `address`, `city`, `county`, `cnp`) VALUES

(1, 1, 'Dan', 'Ionescu', 'Sos Mihai Bravu nr 303', 'Bucuresti', 'Bucuresti', '1801502440033'),

(2, 2, 'Marius', 'Panait', 'ion iriceanu', 'bucuresti', 'sector4', '1720200442050');

Tabela cats:

Tabela este folosită pentru stocarea categoriilor de produse.

Câmpuri:

– catId: Id-ul înregistrării categoriei de produse;

– catNume: Numele categoriei;

– sort order: nr de ordine la sortare;

Structura de tabel pentru tabelul pentru `cats`

CREATE TABLE IF NOT EXISTS `cats` (

`catId` int(11) NOT NULL AUTO_INCREMENT,

`catName` varchar(100) NOT NULL DEFAULT '',

`sortOrder` int(11) NOT NULL DEFAULT '0',

PRIMARY KEY (`catId`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

Primele înregistrări în tabelă:

INSERT INTO `cats` (`catId`, `catName`, `sortOrder`) VALUES

(1, 'Cafea Espresso Point', 1),

(4, 'Ceai Espress Point', 2),

(5, 'Aparate Espresso Point', 3),

(6, 'Complementare', 4);

Tabela op:

Este folosită pentru stocarea operațiilor de comenzi si produse.

Câmpuri:

– opId: Id-ul înregistrării operatiei;

– orderId: Id-ul înregistrării comenzii;

– productId: nr de înregistrării al produsului;

– price: pretul per produs;

-qty: cantitate

Structura de tabel pentru tabelul pentru `op`

CREATE TABLE IF NOT EXISTS `op` (

`opId` int(11) NOT NULL AUTO_INCREMENT,

`orderId` int(11) NOT NULL,

`productId` int(11) NOT NULL,

`price` decimal(10,2) NOT NULL,

`qty` int(11) NOT NULL,

PRIMARY KEY (`opId`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;

Înregistrări în tabelă:

INSERT INTO `op` (`opId`, `orderId`, `productId`, `price`, `qty`) VALUES

(1, 1, 11, '110.00', 1),

(2, 1, 10, '55.00', 1),

(3, 1, 9, '0.00', 1),

(4, 1, 23, '0.00', 50),

(5, 3, 11, '110.00', 1),

(6, 3, 21, '55.00', 50),

(7, 3, 14, '0.00', 1),

(8, 3, 8, '0.00', 1);

Tabela orders:

Este folosită pentru stocarea produselor aflate în coșul de cumpărături.

Câmpuri:

– orderId: Id-ul înregistrării comenzii;

– uid: Id-ul utilizatorului care efectuează cumpărăturile;

– phpsessid: Id-ul sesiunii utilizatorului. Acesta este asigurat de server și este unic pentru fiecare vizită.;

– orderValue: valoarea comezii;

– orderVat: valoare TVA a comenzii;

– orderSent: livrarea comenzii;

– dateAdded: data la care sa emis comanda;

Structura de tabel pentru tabelul pentru `orders`

CREATE TABLE IF NOT EXISTS `orders` (

`orderId` int(11) NOT NULL AUTO_INCREMENT,

`uid` int(11) DEFAULT NULL,

`phpsessid` varchar(60) NOT NULL,

`orderValue` decimal(10,2) NOT NULL,

`orderVat` decimal(10,2) NOT NULL,

`orderSent` tinyint(1) NOT NULL,

`dateAdded` datetime NOT NULL,

PRIMARY KEY (`orderId`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

Înregistrări în tabelă:

INSERT INTO `orders` (`orderId`, `uid`, `phpsessid`, `orderValue`, `orderVat`, `orderSent`, `dateAdded`) VALUES

(1, 2, '', '165.00', '31.35', 1, '2014-06-02 14:43:34'),

(2, 2, '', '0.00', '0.00', 0, '2014-06-02 14:43:34'),

(3, 1, '', '2860.00', '543.40', 1, '2014-06-02 14:47:12'),

(4, 1, '', '0.00', '0.00', 0, '2014-06-02 14:47:12'),

(5, 3, '', '0.00', '0.00', 0, '2014-06-11 23:04:39');

Tabela products:

Tabela este folosită pentru stocarea tuturor produselor.

Câmpuri:

– productId: Id-ul înregistrării produsului;

– catId: Id-ul înregistrării categoriei de produse;

– productName: numele produsului;

– price: preț;

– color: culoare;

– productDesc: descrierea detaliată a produsului;

– picSmall: pozele la dimensiuni mici;

– picLarge: pozele la dimensiuni mari;

Structura de tabel pentru tabelul pentru `products`

CREATE TABLE IF NOT EXISTS `products` (

`productId` int(11) NOT NULL AUTO_INCREMENT,

`catId` int(11) NOT NULL,

`productName` varchar(255) NOT NULL DEFAULT '',

`price` decimal(10,2) NOT NULL DEFAULT '0.00',

`color` enum('red','black','white','gray-metal') DEFAULT 'red',

`productDesc` text NOT NULL,

`picSmall` varchar(255) DEFAULT NULL,

`picLarge` varchar(255) DEFAULT NULL,

PRIMARY KEY (`productId`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=24 ;

Înregistrări în tabelă:

INSERT INTO `products` (`productId`, `catId`, `productName`, `price`, `color`, `productDesc`, `picSmall`, `picLarge`) VALUES

(8, 6, 'Cesti lavazza', '0.00', 'white', 'Cesti din portelan de calitate cu farfuriute, culoare alba, disponibile in doua variante: 160 ml si 60 ml.', 'ceasca-espresso-lavazzam_mic.jpg', 'ceasca-espresso-lavazzam.jpg'),

(9, 5, 'Ep850', '0.00', 'red', 'Modelul Lavazza Espresso Point 850 se recomanda ca aparatul ideal pentru o utilizare casnica, gratie eficientei, manevrabilitatii si dimensiunilor reduse ce ii permit sa se incadreze chiar si in cele mai mici spatii.\r\nCalitatea bauturilor preparate (cafea, ceai, cappuccino) este mereu aceeasi multumita sistemului Espresso Point.\r\n\r\nCaracteristici:\r\n functioneaza exclusiv cu capsule Lavazza Point\r\n intrerupator principal\r\n eliminare manuala a capsulelor utilizate\r\n tava de reziduuri\r\n tub de distributie vapori\r\n Alimentare: 230 V\r\n Frecventa: 50 Hz\r\n Putere: 860 W\r\n Dimensiuni: 16 x 31 x 25 cm\r\n Greutate: 4,5 kg\r\n Capacitate conteiner apa: 1,2 l', 'Ep850_mic.jpg', 'Ep850.jpg'),

–––––––––––––––––––

Tabela users:

Este folosită pentru stocarea informațiilor referitoare la utilizatorii înregistrați pe site. Înregistrarea este necesară pentru a putea comanda produse.

.

Câmpuri:

– uid: numarul de ordine la înregistrare;

– username: numele de logare la site;

– pass: parola;

– firstName: Nume;

– lastName: Prenume;

– phone: telefon;

– email: adresă email;

– billingtype: tipul utilizatorului pf/ pj;

– dateAdded: data la care a creat contul:

Structura de tabel pentru tabelul pentru `users`

CREATE TABLE IF NOT EXISTS `users` (

`uid` int(11) NOT NULL AUTO_INCREMENT,

`username` varchar(20) NOT NULL,

`pass` varchar(50) NOT NULL,

`firstName` varchar(100) NOT NULL,

`lastName` varchar(100) NOT NULL,

`phone` varchar(10) NOT NULL,

`email` varchar(50) NOT NULL,

`billingType` enum('pf','pj') NOT NULL,

`dateAdded` datetime NOT NULL,

PRIMARY KEY (`uid`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

Înregistrări în tabelă:

INSERT INTO `users` (`uid`, `username`, `pass`, `firstName`, `lastName`, `phone`, `email`, `billingType`, `dateAdded`) VALUES

(1, 'dan', '83592796bc17705662dc9a750c8b6d0a4fd93396', 'Dan', 'Ionescu', '0722123123', '[anonimizat]', 'pf', '2009-06-01 10:26:23'),

(2, 'robert', '12e9293ec6b30c7fa8a0926af42807e929c1684f', 'Marius', 'Panait', '0727316333', '[anonimizat]', 'pf', '2014-06-02 09:21:44');

4.2 Structura proiectului

4.2.1 Structura fisierelor si directoarelor proiectului

Structura proiectului este urmatoarea: coffee

logs

sessions

site

common

css

img

js

lib

products

templates

fisiere .php

x

css

lib

templates

fisiere .php

Directorul aplicației este coffee.

Directorul logs va conține logurile de erori.

Directorul sessions va conține fișierele de sesiune.

Aceste două directoare nu trebuie să fie in interiorul Document Root. Document Root, rădăcina aplicației web, este directorul site (echivalent cu public_html sau www). De exemplu, pentru cererea www.example.com/index.php , index.php va fi căutat în directorul site. Aplicația este deci în interiorul folderului site. css va conține fișierul/fișierele css, js va conține eventuale fișiere javascript, img conține imaginile websiteului, însă nu imaginile produselor, ce vor fi ținute separat, în products. Paginile website-ului, sunt fișiere .php direct in folderul site. Ex: index.php, about.php, orderView.php, etc. Insă, codul sursă din interiorul acestor scripturi este destul de redus cantitativ, el fiind distribuit în clasele sau alte fișiere din interiorul directoarelor lib si common. 

Scopul urmărit este pastrarea majoritații codului sursă în clase (sau funcții), astfel încat, să pot organiza propriile librării, si să refolosesc cât mai mult cod de la un proiect la altul. In general, în lib se păstrează codul sursă specific aplicației actuale, iar în common sunt librării ce pot fi folosite și la alte proiecte. Un motiv în plus pentru care fișierele .php din site au cod putin, este ca partea de afișare este păstrată integral in șabloane, fișierele din folderul templates.

Rolul scripturilor rămâne deci de a apela metodele potrivite din clasele potrivite pentru a îndeplini sarcinile necesare, și de a trimite mai departe rezultatele șabloanelor, prin intermediul variabilelor. 

Aplicația poate fi de fapt impartită în două aplicații: aplicația principală (pe care o denumim pe scurt front, si aplicația de administrare ce este în interiorul folderului x, și o denumim simplu x. Aceasta denumire o folosim de fapt în clasele specifice unei aplicații sau celeilalte: FrontSite vs XSite, FrontLogin, vs XLogin, etc.

În directorul radăcină al aplicației se găsesc fișierele principale ale site-ului.

În directorul x sunt păstrate fișierele panoului de administrare. Acest panou este accesibil numai unui administrator, după autentificare.

În directorul img sunt stocate doar imaginile layout-ului aplicației.

Imaginile produselor se regasec in directorul products. Aici regăsindu-se toate pozele produselor, atît la dimnesiuni mici cât și dimensiuni mari.

În directorul css sunt stocate fișierele ce definesc stilurile CSS (Cascading Style Sheets) folosite pentru formatarea layout-ului. Acest fisier .css se regăsește si in directorul x al administratorului din cadrul site-ului.

În directorul js sunt păstrate fișierele javascript folosite de aplicație pentru interacțiunea client ( în special validări ale formularelor ), dar și sursele unui calendar tip pop-up utilizat la definirea datelor de început și sfârșit ale promoțiilor.

În directorul templates sunt păstrate fișierele folosite de aplicație pentru layout-ului site-ului.

În directorul common și lib sunt păstrate fișierele ce conțin funcții folosite de majoritatea celorlalte fișiere. Acestea sunt importate la începutul fișierelor în care urmează a fi folosite.

start.php

Fiecare script din aplicație include fișierul start.php. Acest fișier are rolul de a oferi prin funcția __autoload() locațiile în care se află clasele site-ului. Astfel încat, la folosirea unei clase, __autoload() se ocupă de găsirea acesteia. In plus, se includ si eventuale alte librării organizate în funcții (situate de obicei în common). Pe de altă parte, în acest fișier se creează obiectul $site, din clasa FrontSite (respectiv XSite) a cărei metodă – start() – va fi apelată la începutul fiecărui script. 

<?php

include("lib/start.php");

$site->start();

?>

MySite

Principalul scop al acestei clase este de a iniția aplicația, prin: configurarea aplicației ( doConfig() ), managementul erorilor ( handleErrors() ), conexiunea la baza de date ( dbConnect() ), și inițializarea obiectului $login, (din clasa MyLogin sau o clasă parinte) ce va porni sesiunea și eventual se va ocupa de login-ul efectiv și autorizare. Această clasă este abstractă, avand metoda abstracta doConfig() deci o vom extinde prin clasa FrontSite, astfel incat sa punem la dispozitia aplicatiei proprietatea config avand toate datele de configurare. 
Clasa MySite nu se ocupa in mod direct nici de conexiunea la baza de date, nici de managementul erorilor, nici de managementul sesiunii (login) sau de astfel de activitati specializate. In schimb, deleaga aceste activitati catre clasele specializate. Conexiunea se realizeaza printr-un obiect $db din clasa MyDb, managementul erorilor este realizat prin clasa MyErrorHandler, iar login-ul prin clasa MyLogin. Clasa MySite implementeaza interfata ArrayAccess, astfel incat sa pot accesa valorile din proprietatea $config, prin intermediul obiectului ($site) folosind sintaxa pentru array – []. O metoda utila din aceasta clasa este isOnline(), metoda ce verifica daca aplicatia este rulata online (in productie) sau offline. In functie de acest lucru, cativa parametri de configurare se schimba, si in plus proprietatea $debug este implicit 1 offline. Aceasta proprietate este folosita de clasele de management al erorilor pentru a regla modul de afisare a erorilor. 

abstract protected function doConfig();

private function handleErrors()

{

$eh = new MyErrorHandler($this->debug);

$eh->init();

}

function start()

{

$this->doConfig();

$this->handleErrors();

$this->dbConnect();

} /// start()

function dbConnect()

{

global $db;

$cf = $this->config;

$db = MyDb::getInstance();

$db->connect($cf["db_host"], $cf["db_user"], $cf["db_pass"], $cf["db_name"]);

}

FrontSite

FrontSite este clasa ce extinde MySite, și inițializează paginile aplicației. Aici au fost suprascrise metodele doConfig() pentru configurare, și checkLogin() ce creează un obiect de tip FrontLogin, ce va fi apoi păstrat ca proprietate a obiectelor FrontSite, proprietate numită $login.

class FrontSite extends MySite {

function checkLogin()

{

$login = new FrontLogin('site', 7200, '/', $this->config["session_path"]);

$this->login = $login;

}

MyDb

MyDb este o clasă ce conține ca principale metode connect() si query() și ca principală proprietate o instanță a clasei MySQLi. Scopul acestei clase este de a trata erorile la conectare sau la executarea unui query, și de a pune în evidență o strategie OOP (un design pattern) ce forțeaza o clasă să fie instanțiata o singura dată, iar instanta respectivă să poată fi accesată de oriunde din aplicație (oarecum similar cu o variabilă globală). Acest design pattern se numeste Singleton și este obținut în primul rând prin declararea constructorului ca fiind private, și printr-o metodă statică, pe care o numim de exemplu getInstance() ce este responsabilă de crearea obiectului acestei clase. În plus, se folosește proprietatea statică $instance, în care este ținut singurul obiect creat din această clasă.

Instanțierea (din exteriorul clasei) se va face prin metoda getInstance() ce returnează obiectul existent, sau dacă nu există, îl creează.Astfel, în loc să folosim variabila globală $db, voi obține de oriunde din aplicație un obiect al clasei MyDb folosind MyDb::getInstance()

function connect($db_host, $db_user, $db_pass, $db_name)

{

$mysqli = @new MySQLi($db_host, $db_user, $db_pass, $db_name);

if (!$mysqli) {

throw new MyException(mysqli_connect_error());

}

$this->mysqli = $mysqli;

}

function query($sql)

{

$mysqli = $this->mysqli;

$result = $mysqli->query($sql);

if (!$result) throw new MyErrorException($mysqli->error, 1);

return $result;

}

MyTable

MyTable este o clasă ce reprezintă un tabel în baza de date, cu care am realizat "scurtături" către operațiile de lucrul cu MySQL din php:

operațiile de insert și update – metoda doData() generează și execută un query pentru insert sau update, având ca principal parametru ($data) un array cu chei – numele coloanelor , și cu valori – valorile de inserat sau actualizat

function doData($data, $action = 'insert', $parameters = '')

{

$tableName = $this->tableName;

$bk_data = $data;

extragerea coloanei – cheie primară – în cazul cel mai frecvent întalnit, în care cheia primară este compusă dintr-o singură coloană, în metoda setPkName(), executată încă din constructorul clasei, este determinată cheia primara a acestui tabel si pastrată in proprietatea $pkName

delete – metoda delete() ce primește ca argument o valoare a unei coloane de tip cheie primară, va șterge din tabel rândul respective

function delete($pkValue)

{

$sql = ' delete from '.$this->tableName.' where ' . $this->getPkName() .'=' . $pkValue;

self::$db->query($sql);

}

extragerea datelor dintr-un singur rând, pe baza unei condiții. Acest rând este returnat într-un array de metodafetchSingle() pe baza condiției $condition, primită ca parametru

function fetchSingle($condition, $cols = '*', $fetchingCol = null)

{

$sql = 'select '.$cols.' from ' . $this->tableName . ' where ' . $condition;

$data = $this->fetchAll($sql);

if (isset($data[0]))

$single = $data[0];

else

return null;

if (!empty($fetchingCol) && isset($single[$fetchingCol])) return $single[$fetchingCol];

return $single;

}

extragerea datelor din mai multe rânduri, și returnarea acestora într-un tablou ce conține la rândul lui cate un tablou pentru fiecare rand. Metoda este fetchAll() și primește ca parametru query-ul ce se execută pentru extragerea datelor.

function fetchAll($sql)

{

try {

$res = self::$db->query($sql);

if ($res->num_rows > 0) {

while ($d = $res->fetch_assoc()) {

$data[] = $d;

}

return $data;

} else {

return null;

}

} catch (MyErrorException $e) {

$e->doError();

}

extragerea datelor unui rând pe baza valorii unei chei primare – fetch()

extragerea unui array format din valorile a două coloane – ce conține ca și chei valorile primei coloane, iar ca valori valorile celei de-a doua coloane. Această metodă este utilă în general când avem nevoie de un array, o listă, (de exemplu de categorii) ce are ca și chei valoarile cheii primare pentru fiecare element din listă.

MyLogin. FrontLogin

MyLogin este clasa cu urmatoarele atribuții:

pornirea sesiunii

ștergerea sesiunii

administrarea formularului de login

procesarea formularului de login: autentificarea si login-ul efectiv

Un obiect din clasa MyLogin (respectiv FrontLogin sau XLogin) este creat în metoda start() a clasei MySite. În constructorul clasei MyLogin, se setează proprietăți ale clasei ce reprezintă opțiuni ale sesiunii (și cookie-ului de sesiune) ($this->name – numele sesiunii, $this->seconds – durata sesiunii, etc) și apoi pornesc sesiunea cu ajutorul metodei sessionStart(). În plus, dacă utilizatorul nu este logat, realizez un obiect din clasa LoginForm, ce reprezintă un obiect de tip MyForm, util pentru crearea formularelor, și îl setez ca proprietate obiectului curent. Apelez apoi metoda make() ce actionează doar dacă formularul a fost apăsat, și în acest caz, realizează o validare a formularului. Dacă validarea nu reușește, reținem eroarea în proprietatea $this->error. Altfel, încercăm autentificarea folosind metoda authenticate() ce verifică existența unui utilizator cu parola respectivă în baza de date. Dacă autentificarea eșuează, salvăm eroarea tot în proprietatea $this->error. Dacă autentificarea reușește, apelăm metoda login() folosind ca parametru, datele extrase pentru acel utilizator ($udata), și setăm variabilele de sesiune. Variabilele de sesiune pe care le setăm vor fi obținute de fapt prin clasa FrontLogin, ce extinde MyLogin. Metoda getMainVar() va returna numele variabilei principale pe care o setăm în sesiune, variabilă pe care o folosim și în metoda isLogged() pentru a verifica dacă utilizatorul curent este logat. Metoda getVarsToSet() va furniza restul variabilelor de care e posibil să avem nevoie în sesiune. Bineînteles, numele acestor variabile, trebuie sa corespundă cu numele unor coloane din tabelul users, astfel incat sa poata fi extrasa corect informatia. 
Metoda logout() va realiza ștergerea sesiunii, și redirectarea către o anumită pagină, după ce utilizatorul va fi delogat.

De asemenea anumite funcții sunt folosite pentru a insera în restul documentelor a altor fișiere ce conțin funcții javascript sau stiluri CSS. Avantajul constă în posibilitatea de a adauga rapid un alt document CSS la lista celor deja folosite, în cazul în care este necesar, modificarea fiind necesară într-un singur loc dar propagându-se în toate fișierele.

De asemenea modificarea unei parți a interfeței site-ului sau doar a aspectului acesteia se poate realiza modificând doar cateva linii de cod.

Layout-ul site-ului este practic definit de fisierele CSS, în acestea fiind stocate informațiile referitoare la formatarea textului și a layout-ului, poziționarea acestora pe ecran, etc.

Doar prin editarea fișierelor CSS se poate obține un aspect complet diferit al interfeței.

De asemenea, stilurile CSS permit o mult mai detaliată definire a formatului textelor și poziționarii acestora decât conferă limbajele HTML/XHTML.

În plus, stocarea separată a fișierelor javascript și CSS permite o mult mai rapidă încărcare a site-ului deoarece aceste funcții sunt încarcate o singură dată, practic odată cu încarcarea primei pagini a site-ului. Apoi aceste pagini sunt folosite din cache-ul browserului.

5. PREZENTAREA PRODUSULUI SOFTWARE IMPLEMENTAREA SI EXPLOATAREA APLICATIEI

5.1 Interfața utilizator (client)

Layout-ul aplicației este foarte usor de folosit, toate intrumentele aflându-se la

îndemână și fiind accesibile din orice pagină.

Structura principală a interfeței este urmatoarea:

În partea de sus este afișat headerul aplicației. Sub header se regăsește meniul site-ului precum și obțiunea de înregistrare. De asemenea în partea dreaptă superioară se află poziționată legatura către coșul de cumpărături, fiind ușor accesibilă.

În partea din atânga este afișată secțiunea de autentificare și categoriile de produse.

În partea din dreapta se regăsec cele trei pagini ale site-ului: Contact, Despre noi, Acasă. În cazul în care utilizatorul dorește sa facă o comandă el trebuie să se autentifice sau să-și creeze cont.

Secțiunea Acasă

Aici se regăsește o mică prezentare a produselor de cafea, o prezentare a serviciului, către cine se indreaptă produsele și o prezentare a aparatelor ce vor folosi produsele de cafea.

Secțiunea Despre Noi

Secțiunea prezintă o descriere a modului de achiziționare a produselor, atît al cafelei cât și al aparatelor. Tot în această secțiune se regăsesc și tipurile de clasificare după gradul de maăcinare al cafelelor.

Secțiunea Contact

În această secțiune este afișat formularul de contact, precum și alte modalități de legătură cu firma distribuitoare.

Secțiunea autentificare utilizator

Dacă utilizatorul nu este autentificat, acesta are la dispoziție un formularul de mai jos pentru autentificare. Pentru aceasta trebuie completate câmpurile utilizator și parolă.

Apoi se poate realiza autentificarea cu ajutorul butonului Login.

În cazul în care utilizatorul este la prima vizită pe site sau încă nu și-a creat cont poate folosi butonul Înregistreză-te, ce va afișa formularul de înscriere a unui nou utilizator.

După autentificare secțiunea va arăta ca în imaginea de mai jos:

Este afișat mesajul de logare Login (Esti logat ca:…, împreuna cu opțiunea de Logout

Accesarea opțiunii Logout are ca efect delogarea utilizatorului de la site.

Secțiunea creare cont nou

Câmpurile necesare crearii unui cont nou sunt:

– Username – numele de utilizator.

– Parola – necesară autentificării.

– Prenume

– Nume

– email (adresa de email) ce poate fi folosit de către administrator pentru comunicarea cu utilizatorul. Aceasta nu este vizibilă celorlalți utilizatori ai site-ului.

– Forma juridică cu cele 2 opțiuni fizică sau juridică.

După completarea primului formular și apasarea butonului înainte clientul este introdus în al doilea formular, care conține datele de identificare pentru facturare ale produselor comandate.

Câmpurile necesare crearii unui cont nou pentru facturare sunt:

– Prenume – rămân din primul formular

– Nume – rămân din primul formular

– Cnp

– Adresa utilizatorului

– Oraș

– Județ

Câmpurile referitoare la informațiile personale pot fi modificate după înregistrare și autentificare, cu excepția numelui utilizatorului.

Acestea sunt folosite și în procesul comenzii produselor, fiind însă doar sugerate utilizatorului: ele sunt înscrise în formular, însă acesta le poate actualiza înainte de confirmarea comenzii, de exemplu pentru a expedia produsele la o alta adresă decât cea personală.

În cele mai multe cazuri însă utilizatorii folosesc aceleași informații înscrise la crearea contului și la comandă.

Butonul Trimite date trimite datele câtre scriptul ce le va insera în baza de date.

În cazul în care utilizatorul nu a completat toate câmpurile, acesta este atenționat prin mesaje, cu ajutorul funcțiilor de validate PHP.

Secțiunea Categorii

Categoriile de produse sunt definite în baza de date de către administrator cu ajutorul modulului de administrare. Prin accesarea unei opțiuni a acestui meniu se afișează produsele din categoria selectată.

În pagina se poate naviga ușor către produse și spre detaliile despre produs.

La apăsarea pe categorie vor aparea imaginile produselor. Dacă se dorește un anumit produs, se apasă pe imaginea produsului dorit, și clientul este trimis într-o pagină spre acel produs cu descrierea lui, specificațiile tehnice, numele și imaginea mărită.

De asemenea produsul se poate adăuga în coșul de cumpărături prin introducerea cantității dorite și accesarea opțiunii Add to cart și numai dacă clintul este logat în acel moment.

Pagina care urmează oferă detalii acestuia despre prețul fără TVA al produsului, valoarea comenzii și valoarea comenzii cu TVA.

Dacă clientul dorește adăugarea de alte produse din alte categorii se alege opțiunea Actualizează, iar dacă comanda este finală ea este trimisă cu butonul Trimite comanda.

Secțiunea de administrare a site-ului

În această secțiune administratorul are drepturi de configurare ale categoriilor de produse, subcategoriile acestora, de actualizare a produselor, a producătorilor, a promoțiilor, gestionarea comenzilor, utilizatorilor, întroducerea de detalii despre produse.

Pagina de început este următoarea:

Aici administratorul trebuie să se autentifice pentru a avea acces la opțiunile de administrare.

După autentificare administratorul va avea disponibil următorul meniu:

– Categorii

– Produse

– Caută utilizator

– Comenzi

– Logout

Următoarea opțiune este folosită pentru a defini categoriile de produse.

Pentru a introduce evenrualele categorii avem opțiunea Adaugă înregistrare. După introducerea categoriei sau subcategoriei dorite, se poate modifica aceasta cu opțiunile Edit și Delete.

Adăugarea unei noi categorii presupune doar completarea numelui categoriei și numărul ei de ordine. De asemenea modificarea unei categorii presupune modificarea numelui categoriei.

Adăugarea sau editarea unei produs presupune completarea denumirii produsului, alegerea categoriei din care face parte, introducerea prețului la rubrica Preț, descrierea produsului și specificațiile tehnice la rubrica Descriere, alegerea imaginilor la dimensiuni mici 150px/150px și dimensinuni mari 500px/500px.

Necompletarea acestor câmpuri duce la afișarea unor mesaje de eroare:

La opțiunea Caută utilizator, administratorul poate vizionarea datele unui utilizator, datele la care se poate facturea precum si detalii despre comanda pe care utilizatorul a făcut-o.

Pentru opțiune Comenzi, administratorul poate viziona toate comenzile în anumite intervale de timp, sau pentru ziua în curs. După procesarea comenzilor acestea pot fi șterse.

Cu ajutorul opțiunii Logout administratorul se poate dez-autentifica pentru a preveni accesul neautorizat la panoul de administrare al site-ului.

6. CONCLUZII

Sistemele de vânzări online sunt în plină dezvoltare pe plan mondial, dovedindu-și capacitatea extraordinară de a genera profituri, având costuri minime. Comerțul electronic, ca un complex de articole atinge toate aspectele majore ale vieții economice: dimensiunea tehnologică, reproiectarea modului de a face comerț, necesită noi cunoștințe și forme de organizare industrială.

În țara noastră, această piață trebuie sa mai aștepte cel puțin doi-trei ani de zile până când românii vor avea suficient acces la internet și suficientă încredere că produsele pe care le comandă plătind cu cartea de credit vor ajunge în cel mai scurt timp în posesia lor. Dar chiar și atunci, întreprinzătorii vor trebui să conștientizeze faptul că nu se poate genera profit și stabilitate a afacerii fără a investi în realizarea unui sistem de vânzări online care să-i confere clientului încredere și dorința de a reveni pentru a mai cumpăra și cu altă ocazie. De asemenea, o bună promovare și investiție în oameni specializați în marketing este esențială pentru succesul magazinului online.

Însă, dezvoltarea unor noi tipuri de activități comerciale în mediul electronic se ancorează în securitatea serviciilor acordate consumatorilor și oamenilor de afaceri în utilizarea rețelei. Consumatorii doresc controlul deplin asupra datelor personale, în timp ce oamenii de afaceri au nevoie de un cadru de lucru care să fie aplicat în tranzacții pe scara globală. Crearea unui nivel de încredere cere un mix între tehnologii de încredere, reguli adecvate de taxare, educație publică, legislație clară.

Ca tehnici de realizare a sistemelor de vânzări online este extrem de comodă folosirea “așa-numitei” axe LAMP (Linux, Apache, MySQL, Perl/PHP/Python), deoarece toate aceste aplicații sunt gratuite, au un grad înalt grad de securitate și există mulți programatori cu un grad avansat de cunoaștere a acestor aplicații. De altfel, aceasta este combinația cea mai uzuală și la nivel mondial, așa cum am văzut în capitolul II.

Pentru securitatea canalului de comunicație privat între server-ul de WEB și browser-ul client și totodată pentru a asigura clienții că serverul la care sunt conectați este cel adevărat, este indicat să se foloseasca protocolul SSL, bazat pe certificatul SSL care este un certificat semnat digital.

Analiza și proiectarea inițială a sistemului de vânzări online sunt extrem de necesare pentru a oferi programatorilor specificații exacte asupra a ceea ce va trebui să rezulte și a nu se face greșeli majore de realizare. O proiectare deficitară poate însemna depășirea bugetului alocat realizării sistemului de vânzări online, pierderea unui timp prețios și, în final, obținerea unui produs ineficient sau chiar abandonarea proiectului.

Sistemul de vânzări online “PointCoffee” reprezintă o modalitate de comandare online a produselor de către clienții care au un cont de acces activ. Acest sistem oferă un bun început pentru stadiul actual în care se află piața de ecommerce în România, însă acesta poate fi îmbunătățit prin realizarea unui design mai atractiv, prin dezvoltarea sistemului de plați online, prin introducerea de promoții atractive, și a securității realizării acestora. Sigur că mai trebuie investit și în promovarea site-ului propriu-zis și al produselor sale, în cazul implementării sale de către o firmă interesată.

7. ANEXE Cod sursa

Anexa A: Codul sursă al fișierului „index.php” Client

MyDb.php

class MyDb {

public $mysqli;

static $instance;

private function __construct()

{

}

static function getInstance() {

if ( empty( self::$instance ) ) {

self::$instance = new MyDb();

}

return self::$instance;

} // getInstance

public function prepare($s) {

$s = mysqli_real_escape_string($this->mysqli, $s);

return $s;

}

function connect($db_host, $db_user, $db_pass, $db_name)

{

$mysqli = @new MySQLi($db_host, $db_user, $db_pass, $db_name);

if (!$mysqli) {

throw new MyException(mysqli_connect_error());

}

$this->mysqli = $mysqli;

}

function query($sql)

{

$mysqli = $this->mysqli;

$result = $mysqli->query($sql);

if (!$result) throw new MyErrorException($mysqli->error, 1);

return $result;

}

} /// class Mydb

?>

mainsite.tpl

<table border="0" align="center" width="980" cellspacing="0" cellpadding="0">

<tr>

<td colspan="2"><?php echo $header ?></td>

</tr>

<tr>

<td colspan="2" align="center"><?php echo $menu ?></td>

</tr>

<tr>

<td width="224"><?php echo $leftCol ?></td>

<td valign="top">

<div id="main">

<?php echo $content ?>

</div>

</td>

</tr>

<tr>

<td colspan="2"><?php echo $footer ?></td>

</tr>

</table>

FrontSite.php

<?php

class FrontSite extends MySite {

function checkLogin()

{

$login = new FrontLogin('site', 7200, '/', $this->config["session_path"]);

$this->login = $login;

}

protected function doConfig()

{

$this->config["os_user"] = '';

$this->config["domain"] = '';

$this->config["host"] = 'www.' . $this->config["domain"];

$this->config["url"] = 'http://' . $this->config["host"] . '/';

if ($this->isOnline()) {

$this->debug = 0;

$this->config['fs_site'] = $fs_site = '/home/'.$this->config["os_user"].'/public_html/';

$this->config["ws_site"] = $ws_site = '/';

$this->config["db_host"] = 'localhost';

$this->config["db_user"] = 'onlineuser';

$this->config["db_pass"] = 'onlinepassword';

$this->config["db_name"] = 'coffee';

} else {

if (!isset($this->debug)) $this->debug = 1;

$this->config['fs_site'] = $fs_site = 'c:/wamp/www/coffee/site/';

$this->config["ws_site"] = $ws_site = '/coffee/site/';

$this->config["db_host"] = 'localhost';

$this->config["db_user"] = 'root';

$this->config["db_pass"] = '';

$this->config["db_name"] = 'coffee';

}

$this->config['session_path'] = $fs_site . '../sessions/';

$this->config['ws_products'] = $ws_site . 'products/';

$this->config['fs_products'] = $fs_site . 'products/';

$this->config["error_log1"] = $fs_site . '../logs/error_log1.txt';

$this->config["error_log2"] = $fs_site . '../logs/error_log2.txt';

$this->config['fs_templates'] = $fs_site . 'templates/';

$this->config['fs_x_templates'] = $fs_site . 'x/templates/';

} /// doConfig()

}

?>

authPage.php

<?php

include("../lib/start.php");

$site->skipAuth(true);

$site->start();

$login = $site->login;

if ($login->isLogged()) redirect('index.php');

$form = $login->form;

echo $login->outputError('style="color: red"');

echo $form->begin();

?>

<table cellpadding="4">

<tr>

<td>User</td>

<td><?php echo $form->text('username'); ?></td>

</tr>

<tr>

<td>Parola</td>

<td><?php echo $form->password('pass') ?></td>

</tr>

<tr>

<td></td>

<td><?php echo $form->button('btnSubmit', 'Login'); ?></td>

</tr>

</table>

<?php echo $form->end(); ?>

8. BIBLIOGRAFIE

BIBLIOGRAFIE

ANEXE Cod sursa

Anexa A: Codul sursă al fișierului „index.php” Client

MyDb.php

class MyDb {

public $mysqli;

static $instance;

private function __construct()

{

}

static function getInstance() {

if ( empty( self::$instance ) ) {

self::$instance = new MyDb();

}

return self::$instance;

} // getInstance

public function prepare($s) {

$s = mysqli_real_escape_string($this->mysqli, $s);

return $s;

}

function connect($db_host, $db_user, $db_pass, $db_name)

{

$mysqli = @new MySQLi($db_host, $db_user, $db_pass, $db_name);

if (!$mysqli) {

throw new MyException(mysqli_connect_error());

}

$this->mysqli = $mysqli;

}

function query($sql)

{

$mysqli = $this->mysqli;

$result = $mysqli->query($sql);

if (!$result) throw new MyErrorException($mysqli->error, 1);

return $result;

}

} /// class Mydb

?>

mainsite.tpl

<table border="0" align="center" width="980" cellspacing="0" cellpadding="0">

<tr>

<td colspan="2"><?php echo $header ?></td>

</tr>

<tr>

<td colspan="2" align="center"><?php echo $menu ?></td>

</tr>

<tr>

<td width="224"><?php echo $leftCol ?></td>

<td valign="top">

<div id="main">

<?php echo $content ?>

</div>

</td>

</tr>

<tr>

<td colspan="2"><?php echo $footer ?></td>

</tr>

</table>

FrontSite.php

<?php

class FrontSite extends MySite {

function checkLogin()

{

$login = new FrontLogin('site', 7200, '/', $this->config["session_path"]);

$this->login = $login;

}

protected function doConfig()

{

$this->config["os_user"] = '';

$this->config["domain"] = '';

$this->config["host"] = 'www.' . $this->config["domain"];

$this->config["url"] = 'http://' . $this->config["host"] . '/';

if ($this->isOnline()) {

$this->debug = 0;

$this->config['fs_site'] = $fs_site = '/home/'.$this->config["os_user"].'/public_html/';

$this->config["ws_site"] = $ws_site = '/';

$this->config["db_host"] = 'localhost';

$this->config["db_user"] = 'onlineuser';

$this->config["db_pass"] = 'onlinepassword';

$this->config["db_name"] = 'coffee';

} else {

if (!isset($this->debug)) $this->debug = 1;

$this->config['fs_site'] = $fs_site = 'c:/wamp/www/coffee/site/';

$this->config["ws_site"] = $ws_site = '/coffee/site/';

$this->config["db_host"] = 'localhost';

$this->config["db_user"] = 'root';

$this->config["db_pass"] = '';

$this->config["db_name"] = 'coffee';

}

$this->config['session_path'] = $fs_site . '../sessions/';

$this->config['ws_products'] = $ws_site . 'products/';

$this->config['fs_products'] = $fs_site . 'products/';

$this->config["error_log1"] = $fs_site . '../logs/error_log1.txt';

$this->config["error_log2"] = $fs_site . '../logs/error_log2.txt';

$this->config['fs_templates'] = $fs_site . 'templates/';

$this->config['fs_x_templates'] = $fs_site . 'x/templates/';

} /// doConfig()

}

?>

authPage.php

<?php

include("../lib/start.php");

$site->skipAuth(true);

$site->start();

$login = $site->login;

if ($login->isLogged()) redirect('index.php');

$form = $login->form;

echo $login->outputError('style="color: red"');

echo $form->begin();

?>

<table cellpadding="4">

<tr>

<td>User</td>

<td><?php echo $form->text('username'); ?></td>

</tr>

<tr>

<td>Parola</td>

<td><?php echo $form->password('pass') ?></td>

</tr>

<tr>

<td></td>

<td><?php echo $form->button('btnSubmit', 'Login'); ?></td>

</tr>

</table>

<?php echo $form->end(); ?>

Similar Posts