Site Web Pentru Comert Electronic

Introducere

Odata cu raspandirea web-ului si atingerea unei mase critice de utilizatori, firmele cu activitate de comert, analistii, specialistii in marketing s-au gandit ca merita investit efort in punerea la punct a unor tehnologii care sa transforme surferii web in potentiali clienti.

Initial, siturile web ale acestor firme contineau doar informatii de contact, oferte promotionale sau chiar cataloage de produse sub forma unor pagini HTML statice. Lansarea unei comenzi de cumparare a unor produse se putea face eventual via fax, telefon sau email. Pentru a putea intra in posesia produselor, clientul trebuia sa plateasca contravaloarea produselor comandate iar banii sa parcurga drumul de la client la comerciant (vanzator). Plata se facea de regula prin mecanismele clasice, catre un cont deschis de comerciant la o banca; presupunea deplasarea clientului la sediul unei institutii cu profil bancar pentru a depune banii si pentru initia transferul acestora in contul comerciantului. In functie de politica adoptata de comerciant pentru a demara procesul de livrare a produselor catre client acesta cerea sau nu, confirmarea efectuari plati prin fax. Fie ca se folosea o retea de distributie proprie, fie ca se apela la un serviciu postal specializat (posta rapida, DHL, etc), teoretic aceasta ultima faza era cea mai lunga.

Exista inca putine situri web de comert care permit vizualizarea on-line a cataloagelor de produse si lansarea comenzilor; informatia ca un anumit comerciant ofera un anumit produs este obtinuta telefonic si/sau pe baza unei reclame in mass-media.

La fel ca si in comertul traditional, natura produsului vindut va determina alegerea mijloacelor.

Tehnologia "shopping cart" sta la baza oricarui proces de comert electronic. Cum functioneaza aceasta tehnologie si cum influenteaza natura produsului alegerea aplicatiei si a optiunilor incluse? Sistemul de shopping cart este cel care permite sa fie expuse imagini ale produselor, descrieri si preturi. Furnizeaza, de asemenea, mecanismele prin care consumatorul sa aleaga cantitatea de produse pe care doreste sa o cumpere, face verificarea si inregistrarea datelor, calculeaza si afiseaza valoarea totala a cumparaturilor, incluzind si taxele de transport daca este cazul. Pentru ca tot acest proces sa functioneze corect este necesar ca intre toate informatiile introduse in bazele de date, atit de catre cel care vinde cit si de catre cel care cumpara sa existe o concordanta perfecta.

Comertul electronic este una dintre solutiile complexe, "integrate" ca sa folosim un termen la moda, pe care le ofera tehnologia Internet. Asta inseamna ca o multitudine de aplicatii si de furnizori de servicii Internet trebuie sa conlucreze intr-o sincronizare perfecta pentru ca un site de comert electronic sa poata functiona.

O definitie succinta si larg acceptata este urmatoarea: Comertul electronic (e-commerce, pe scurt EC) este acea maniera de a conduce activitatile de comert care foloseste echipamente electronice pentru a mari aria de acoperire (locul in care se pot afla potentialii clienti) si viteza cu care este livrata informatia.

EC ofera oportunitatea de a comercializa produse in intreaga lume, sporind numarul de potentiali clienti in primul rand prin eliminarea barierelor geografice dintre clienti si comercianti. Pentru intelege care este rolul si locul comunicatiilor si solutiilor informatice (IT) intr-un astfel de mecanism, sa studiem putin arhitectura unui sistem EC.

Arhitectura unui sistem de comert electronic.

Pentru a construi un sistem de e-commerce, din punct de vedere arhitectural este nevoie de colaborarea a trei componente (subsisteme electonice/informatice) corespunzatoare urmatoarelor roluri:

(a) Client. Un echipament, clasic un PC, conectat direct (via un ISP) sau indirect (o retea a unei corporatii) la Internet. Cumparatorul foloseste acest echipament pentru a naviga si a face cumparaturi.

(b) Comerciant. Sistem informatic (hard & soft), situat de regula la sediul comerciantului, care gazduieste si actualizeaza catalogul electronic de produse disponibile a fi comandate on-line pe Internet.

(c) Sistemul tranzactional. Sistemul informatic (hard & soft) responsabil cu procesarea comenzilor, initierea platilor, evidenta inregistrarilor si a altor aspecte de business implicate in procesul de tranzactionare.

Pe baza acestor trei componente de baza s-au implementat diverse arhitecturi de comert electronic. Unele combina mai multe componente intr-un singur (sub)sistem informatic, pe cand altele implementeaza separat fiecare componenta in parte.

Pentru definirea arhitecturii, proiectantii de sisteme EC fac o proiectare de ansamblu a sistemului pe baza unei selectii a principalelor cerinte/functii ale unui sistem EC. Detalii cum ar fi, de exemplu, functia de agregare care permite asamblarea articolelor intr-o comanda completa sunt lasate pe seama proiectarii de detaliu. Decizia de a integra aceasta functie de agregare la nivelul componentei client, comerciant sau tranzactionale se va lua in functie de cerintele specifice ale fiecarei implementari in parte. Important este insa ca in cazul unui sistem de EC, ca de altfel in cazul oricarui sistem complex, arhitectura sa fie clar definita la toate nivelele de detaliu.

Exista mai multe optiuni pentru expunerea produselor si trimiterea comenzilor online. Cea mai obisnuita este pagina simpla HTML (pentru expunerea produselor) si un formular electronic de comanda. Daca aveti un numar mic de produse aceasta este varianta de care aveti nevoie. Daca numarul de produse pe care intentionati sa le vindeti este mai mare si clientii cumpara in mod frecvent un numar mai mare de produse aveti nevoie de un sistem de scripturi mai complex.

Majoritatea furnizorilor de web hosting ofera insa pachete speciale de aplicatii pentru comert electronic – sisteme de shopping cart. Aceste aplicatii au o interfata pentru baze de date si utilizeaza instrumente de programare complexe. Pot genera pagini dinamice pentru expunerea produselor, calcularea pretului si a taxelor (inclusiv a celor de expediere). Furnizeaza de asemenea rapoarte complete de urmarire a clientilor si nenumarate optiuni de intretinere si actualizare. Anumite componente permit chiar promotii speciale, promotii incrucisate sau personalizarea continutului in functie de preferintele clientului. Multe dintre aceste aplicatii pot fi utilizate si in site-urile comerciale de tip "Business to Business" (B2B).

Sistemul de shopping cart pe care il alegeti trebuie sa poata furniza mecanismele pentru colectarea informatiilor necesare expedierii produsului si procesarii tranzactiei (inclusiv facturare, daca este cazul).

Pentru a asigura succesul pe termen lung al unui proiect de e-commerce, arhitectura acestuia trebuie proiectata cu grija tinand cont de toate aspectele de business cu care se va confrunta sistemul, lasand totodata portite care sa permita adaptarea sa in timp, pe masura ce apar noi provocari iar tehnologiile evolueaza.

In acest sens, aplicatia dezvoltata , vine in sprijinul ,celor afirmate mai sus – fiind un sistem complex de shoping chart , implementat prin mai multe module functionale – care asigura o arhitectura flexibila si o manipulare – prelucrare facila a datelor cu care se opereaza in procesul de e-commerce.

Capitolul 1. Introducere in tehnologiile Web

1.1 WORLD WIDE WEB

* Scurt istoric

WORLD WIDE WEB (sau mai simplu WEB sau WWW) este un context arhitectural pentru accesul la documente raspandite pe mii de masini din Internet , intre care exista legaturi . In 5 ani a evoluat de la o aplicatie pentru transmiterea de date utile pentru fizica energiilor inalte la o aplicatie despre care milioane de oameni cred ca este Internetul. Popularitatea sa enorma se datoreaza faptului ca are o interfata grafica plina de culoare, usor de utilizat de catre utilizatori si in acelasi timp ofera o cantitate imensa de informatie despre orice subiect posibil

WEB-ul a aparut din necesitatea de a permite cercetatorilor raspanditi in lume sa colaboreze uytilizand colectii de rapoarte, planuri, desene, fotografii si alte tipuri de documente aflate intr-o continua modificare. Propunerea initiala pentru crearea unei colectii de documente avand legaturi intre ele (WEB) a fost facuta de fizicianul Tim Berners-Lee, fizician la CERN, in martie 1989. Primul prototip (bazat pe text) era operational 18 luni mai tarziu. In decembrie 1991 s-a facut o demonstratie publica la conferinta Hypertext '91, in San Antonio, Texas. Actiunea a continuat in anul urmator, fiind incununata cu realizarea primei interfete grafica, Mosaic, in februarie 1993.

Mosaic a fost atat de popular incat un an mai tarziu autorul sau Mark Andreessen a parasit NCSA unde Mosaic-ul a fost dezvoltat, pentru a forma o noua companie, Netscape Communication Corp. care se ocupa de dezvoltarea de software pe WEB.

In 1994 CERN si MIT au semnat o intelegere de a forma consortiul WORLD WIDE WEB, organizatie care are ca obiectiv dezvoltarea WEB-ului, standardizarea protocoalelor si incurajarea interoperabilitatii intre site-uri. De atunci, sute de universitati si companii au intrat in consortiu. MIT coordoneaza partea americana a consortiului, in timp ce centrul de cercetari INRIA coordoneaza partea europeana. Desi exista foarte multe carti despre WEB, cel mai bun loc pentru gasirea unor informatii la zi despre el este (in mod natural) chiar WEB-ul. Pagina consortiului are adresa htttp://www.w3.org. Cititorii interesati vor gasi acolo legaturi la pagini care acopera toate documentele si activitatile consortiului.

* Descriere

Din punct de vedere al utilizatorului, WEB-ul se prezinta ca o colectie imensa de documente raspandite in toata lumea, numite pagini. Fiecare pagina poate sa contina legaturi (indicatori) la alte pagini, aflate oriunde in lume. Utilizatorii pot sa aleaga o legatura (de exemplu prin executia unui click) care ii va duce la pagina indicata de legatura. Acest proces se poate repeta la nesfarsit, fiind posibil sa se traverseze in acest mod sute de pagini legate intre ele. Despre paginile care indica spre alte pagini se spune ca utilizeaza hypetext.

Paginile Web sunt vizualizate pe calculatorul client cu ajutorul unui program special numit browser. La inceput, Web-ul consta numai din pagini de text, fara nici o imagine.

Odata cu aparitia primului browser Web grafic in anul 1993, Web-ul a inceput sa se impuna cu adevarat. Nu cu mult timp in urma, browserul Navigator al firmei Netscape era cel mai popular program de navigare, insa browser-ul Internet Explorer de la Microsoft ocupa in momentul de fata mai mult de jumatate din piata.

Programul de navigare aduce pagina ceruta, interpreteaza textul si comenzile de formatare continute in text si afiseaza pagina, formatata corespunzator, pe ecran. Majoritatea paginilor de WEB incep cu titlu, contin informatii si se termina cu adresa de posta electronica a celui care mentine pagina. Sirurile de caractere care reprezinta legaturi la alte pagini se numesc hyperlegaturi, sunt afisate in mod diferit, fiind subliniate si/sau colorate cu o culoare speciala. Pentru a selecta o legatura, utilizatorul va plasa cursorul pe zona respectiva (utilizand mouse-ul sau sagetile de pe tastatura) si comanda selectia (cu ajutorul mouse-ul sau apasand tasta ENTER). Desi exista programe de navigare fara interfata grafica, ca de exemplu lynx, ele nu sunt atat de utilizate ca programele de navigare grafice.

Tehnologia folosita de Worl Wide Web este cea client–server, care presupune urmatoarele etape:

Un calculator (clientul) formuleaza o cerere

Cererea clientului este expediata unui server

Serverul analizeaza aceasta cerere, o executa, formuleaza raspunsul si il expediaza clientului

Clientul receptioneaza raspunsul la cererea solicitata

Modelul de comunicare intre serverul Wpaginilor de WEB incep cu titlu, contin informatii si se termina cu adresa de posta electronica a celui care mentine pagina. Sirurile de caractere care reprezinta legaturi la alte pagini se numesc hyperlegaturi, sunt afisate in mod diferit, fiind subliniate si/sau colorate cu o culoare speciala. Pentru a selecta o legatura, utilizatorul va plasa cursorul pe zona respectiva (utilizand mouse-ul sau sagetile de pe tastatura) si comanda selectia (cu ajutorul mouse-ul sau apasand tasta ENTER). Desi exista programe de navigare fara interfata grafica, ca de exemplu lynx, ele nu sunt atat de utilizate ca programele de navigare grafice.

Tehnologia folosita de Worl Wide Web este cea client–server, care presupune urmatoarele etape:

Un calculator (clientul) formuleaza o cerere

Cererea clientului este expediata unui server

Serverul analizeaza aceasta cerere, o executa, formuleaza raspunsul si il expediaza clientului

Clientul receptioneaza raspunsul la cererea solicitata

Modelul de comunicare intre serverul WEB si clientul care acceseaza informatia este urmatorul (sa zicem ca aceseaza http://www.w3.org/hypertext/WWW/TheProject.html) :

· Programul de navigare determina URL (pe baza selectiei)

· Programul de navigare intreaba DNS care este adresa IP pentru masina care se numeste www.w3.org.

· DNS raspunde cu 18.23.0.23

· Programul de navigare realizeaza conexiunea TCP cu portul 80 al 18.23.0.23

· Trimite o comanda GET /hypertext/WWW/TheProject.html

· Serverul www.w3.org transmite fisierul "TheProject.html"

· Conexiunea TCP este eliberata

· Programul de navigare afiseaza formatat textul din "TheProject.html"

· Programul de navigare aduce si afiseaza toate imaginile din "TheProject.html"

* HTML si URL

"Limbajul" in care sunt descrise paginile WEB se numeste HTML. El este derivat din SGML, si este format din seturi de tag-uri inserate in text, care dau directive asupra modului in care sa se formateze textul. In functie de posibilitatile hard ale sistemului pe care se vizualizeaza pagina, si de posibilitatile browserului, pagina va fi afisata cu mai multe sau mai putine caracteristici de formatare (un browser in mod text nu va putea folosi fonturi de marimi diferite). Tagurile sunt texte cuprinse intre '<' si '>'. Textul va trebui sa nu contina aceste caractere, aparitia lor trebuind inlocuita cu metacaractere inlocuitoare ("&lt;" si "&gt;") la randul lui, "&" trebuie si el inlocuit cu metasecventa "&amp;". Si alte caractere se pot specifica prin metasecvente (de exemplu caractere care nu sunt in setul standard ASCII).

Numele tagurilor nu sunt "case sensitive", doar optiunile si argumentele pot face distinctie in anumite cazuri intre literele mari si mici (de exemplu calea intr-un URL care se gaseste in tagul <a>)

Textul este cuprins intre tagurile <html> si </html>. El cuprinde o sectiune de "head" si una de "body". Sectiunea de "head" contine informatii despre document care nu se vor afisa in pagina (eventual se va afisa pe bara de titlu a ferestrei browserului). Textul din sectiunea de "body" contine descrierea paginii propriu zise. In cadrul textului caracterul de sfarsit de linie este ignorat, la fel si taburile sau aparitile multiple de spatii (se retine numai unul).

URL (Uniform Resource Location) reprezinta o conventie de localizare a unei resurse informationale. El cuprinde (de la dreapta la stanga) identificarea fisierului referit pe masina pe care se afla, numele masinii pe care se gaseste si modul (protocolul) de accesare a acesteia. De exemplu in URL-ul: http://home.ro/pclaude din exemplu protocolul este http (acces prin portul 80 prin protocolul HTTP), masina este home.ro iar identificarea paginii este "pclaude" – adica pagina personala a userului pclaude. Serverul HTTP va rezolva acest identificator la calea interna /home/pclaude/public_html/index.html. Se observa ca sarcina localizarii pe server este sarcina serverului, care cunoaste propriul mod de identificare a resurselor sale publice.

Nu toate fisierele de pe un server WEB pot fi accesate prin HTTP. De obicei paginile publice se afla in directoare speciale, identificarea lor facandu-se cu calea relativa la acel director. Daca nu se specifica decat calea relativa a unui director, serverul intoarce un fisier cu nume implicit (de obicei numit index.html). Exista si alte conventii (de exemplu /~user/ reprezinta directorul radacina al informatiilor publice ale userului "user". URL-ul este un caz particular de mai putin cunoscutul URI (Uniforme Resource Identifier) care identifica unic pe Internet resursele care se pot accesa prin diferite protocoale

Paginile WEB pot contine imagini (tagul <img>), tabele (tagul <table>) , etc. In sectiunea de "head" se pot specifica prin tagul "<meta>" informatii despre autor, firma de care apartine si chiar informatii destinate motoarelor de cautare (descriere, cuvinte cheie, etc).

* Server de Web

Serverul web este un calculator care gazduieste un site web si care e capabil sa raspunda cererilor de pagini web din partea clientilor. Pentru a realiza acest lucru, server-ul trebuie sa ruleze o aplicatie speciala numita httpd (HyperText Transfer Protocol Demon). Ca servere Web, cele mai intalnite sunt: Apache Server , Microsoft Web Server , Oracle Web Server

In momentul de fata se folosesc foarte multe tipuri de calculatoare si sisteme de operare, majoritatea oferind software server Web de buna calitate. Cele mai cunoscute sisteme de operare pentru calculatoare ce deservesc pagini Web sunt UNIX si Microsoft Windows NT/2000.

Unix este folosit de la crearea Web-ului si majoritatea serverelor Web ruleaza in continuare acest sistem. Windows NT /2000 este mai nou in domeniu, dar si-a castigat rapid popularitatea. Din punctul de vedere al designer-ului Web, server-ul utilizat pentru livrarea unei pagini este in general irelevant, cu anumite exceptii:

• UNIX este dependent de tipul de litera folosit (litera mica sau majuscula), in timp ce Windows NT nu

• UNIX este folosit de mai mult timp si este relativ stabil. Windows NT sufera actualizari majore si de aceea poate avea probleme in acest sens

• Exista foarte multe companii care au baze de date Microsoft Access pe care vor sa le integreze in site-ul lor, acest lucru putandu-se face numai in mediul Windows NT

• Furnizorii de servicii Internet (Internet Service Provider – ISP) percep in general taxe mai reduse pentru servere bazate pe UNIX, pentru ca intretinerea sistemului este mai putin costisitoare dacat Windows NT.

Intre calculatoarele interconectate informatia circula in pachete. Pachetele contin adresa expeditorului si cea a destinatarului, informatia, numele aplicatiei client care a formulat cererea si numele aplicatiei de pe server care va primi cererea. Aceste pachete sunt sunt dirijate pentru a ajunge la destinatie prin anumite mijloace de dirijare precum Internet Protocol (IP). Reteaua Internet dispune de asemenea si de mijloace de corectie a erorilor de transmitere a pachetelor. Un astfel de mijloc este Transfer Control Protocol (TCP) – Protocolul de Control al Transferului.

Site-urile Web reprezinta o serie de pagini Web care sunt interconectate. Site-urile pot contine legaturi catre alte site-uri, lucru care duce la obtinerea unor panze de informatii. Primul document dintr-un site se numeste Home Page (pagina de pornire). Ea contine legaturi catre toate celelalte documente.

Site-urile Web sunt publicate prin transferul fisierelor HTML si al fisierelor multimedia asociate pe servere Web. Protocolul de transfer al fiserelor (FTP) este un standard care permite mutarea, redenumirea sau stergerea fisierelor de pe un calculator la distanta.

1.2 Serverul de Web Apache

* Istoric si caracteristici

Unul dintre cele mai utilizate servere de web, Apache Web Server este un efort de a oferi o alternativa viabila necomerciala, în domeniul serverelor de web. Reusita acestui proiect este în mare masura legata de fenomenele initiate prin oameni ca Linus sau Stalman, ce au avut ca rezultat produse extraordinare, puternice si eficiente cum ar fi Linux, Emacs precum si toate pachetele software aparute sub licenta GNU.

Crearea unui proiect de sine statator – The Apache Project este rezultatul reunirii unui mare numar de voluntari, comunicând prin intermediul Internet-ului. Acestia sunt cunoscuti sub numele de Apache Group. În plus, sute de utilizatori din întreaga lume au contribuit la proiect prin cele mai diverse mijloace, de la cod sursa pâna la documentatie HTML.

Apache isi are originea din ideile si codul aflat in cel mai popular server HTTP al timpului NCSA . În 1995 cel mai performant server de web era practic cel dezvoltat la NCSA , University of Illinois, de catre Rob McCool. În momentul în care acesta a plecat si nu a mai continuat dezvoltarea serverului sau, au început sa apara o multime de programatori ce produceau versiuni modificate si îmbunatatite ale acestui server. Un grup de asemenea programatori au decis în februarie 1995 sa se reuneasca într-un proiect de dezvoltare si îmbunatatire a serverului initial. Pornind de la NCSA httpd 1.3 ei au construit, prin adaugarea celor mai bune patch-uri, versiunea Apache 0.6.2 care a fost lansata în aprilie 1995.

Desi NCSA si-a reînceput dezvoltarea serverului în aceeasi perioada, Apache a continuat sa devina cel mai utilizat server de web din comunitatea unix în urmatorii doi ani. Acesta a fost implicat mai departe in cele mai multe sisteme UNIX care contin servere HTTP.

Designul unei noi arhitecturi si rescrierea serverului într-o maniera extrem de modulara si eficienta a dus la o popularitate crescânda serverului. Apache este, din ianuarie 1997, cel mai utilizat server WWW de Internet. Deasemenea Apache a aratat a fi cel mai rapid dintre serverele de tip free.

Serverul ofera desigur majoritatea facilitatilor gasite în cazul oricarui server de web modern. O îndelungata perioada de timp acesta chiar a stabilit standardele în domeniu. Astfel, din punct de vedere al securitatii gasim suport SSL, protectie de tip username/password asupra directoarelor, HTTPS etc.

Server-side includes a fost o inovatie a Apache Group. Suportul modular de adaugire a unor noi facilitati la server, content handlers, persistent connections, online statistics (incluzând aici chiar si broadcastingul de informatie de logging) etc, toate acestea sunt elemente în care Apache a adus elemente mai mult sau mai putin noi.

* Detalii de instalare si configurare

În prezent serverul se prezinta sub forma unui pachet software de tip tar-gzip (exista si o versiune pentru Windows NT ) ce contine sursele complete precum si un set de documentatie pentru server. Compilarea serverului este extrem de facila si nu s-a întâlnit nici o platforma uzuala care sa aiba vreo problema la compilare. .

Rezultatul compilarii va fi în principal un fisier binar executabil numit în principal httpd, localizat în directorul src/. Se recomanda copierea acestui binar într-un loc mai sigur, eventual crearea unui director bin/ (de exemplu) si copierea în acel director. În unele versiuni mai vechi, calea (path-ul) catre locul unde este instalat serverul va trebui inserata în unele fisiere sursa, înainte de compilare. Deoarece acest fapt nu mai este de actualitate nu îl vom comenta însa se recomanda instalarea serverului la o locatie destul de comuna ,de exemplu: in /usr/local/http, /usr/http sau chiar /etc/http/. NU instalati serverul (fisierul binar) în sistemul de fisiere principal. (/usr/bin, /bin, etc.)

Dupa instalarea binarului (vom presupune /usr/http ca director principal de instalare si /usr/http/bin directorul în care se gaseste fisierul binar executabil httpd) va trebui configurat serverul prin modificarea unor fisiere de configurare. Acestea se gasesc în acest caz în /usr/http/conf. Ele sunt httpd.conf, access.conf, srm.conf. Fiecare dintre ele stabilesc parametri diferiti pentru serverul de web. Se recomanda citirea documentatiei de configurare. Nu trebuie modificate direct fisierele de configurare existente în acel director. De obicei numele acestora are o extensie ?-dist'. (Ex. httpd.conf-dist) . Se copie acestea în fisiere cu nume fara extensia respectiva (Ex. cp httpd.conf-dist httpd.conf) si abia apoi se va modifica fisierul copie.

Configurarea serverului în cazul cel mai simplu impune doar modificarea, în httpd.conf, a numelui serverului precum si, în toate fisierele, a cailor (path) ce definesc locul de instalare a serverului precum si a documentelor html.

Dupa configurarea serverului se impune pornirea acestuia. Exisa doua moduri de rulare a serverului. Modul implicit si cel mai utilizat de rulare este modul daemon. În mod daemon acesta este pornit si ruleaza în background, activându-se de la sine de mai multe ori, asigurând astfel un bun timp de raspuns la cereri HTTP. Al doilea mod ar fi rularea serverului prin intermediul daemonului inetd. În acest caz, inetd are grija de interceptarea unei cereri HTTP si pornirea unei copii a unui server de web pentru tratarea acelei cereri. Nu se recomanda acest mod de rulare decât în cazuri speciale.

Pornirea serverului (modul daemon) se rezuma la executarea binarului cu parametrii adecvati (în principal stabilirea caii fisierului primar de configurare httpd.conf) dupa care acesta va raporta orice erori sau probleme precum si accesele de web în cazul rularii, prin intermediul unor fisiere de log localizate în directorul logs/. In cazul unor erori sau porniri defectuoase se recomanda analizarea fisierului error-log din logs/.

Dupa ce ati pornit serverul exista posibilitatea accesarii unei documentatii complete chiar prin serverul proaspat instalat.

1.3 Limbajul PHP (Hypertext Preprocessor)

* Prezentare

PHP (Hypertext Preprocessor) este unul din cele mai populare limbaje de scripting folosite in dezvoltarea site-urilor de comert electronic, stiri on-line sau a site-urilor cu volume mari de informatii. Ajuns la versiunea 4.2, limbajul PHP castiga in popularitate datorita usurintei de programare, a rapiditatii codului si a multitudinii de facilitati oferite. In prezent, majoritatea site-urilor care includ diverse forme de interactiune cu utilizatorul se bazeaza pe PHP. Limbajul PHP este absolut gratuit, oferind facilitati de portare pe Windows, Linux si in majoritatea mediilor Unix.

PHP (Hypertext Preprocessor) este un mediu de programare pe server care este folosit pentru crearea paginilor Web interactive si construirea aplicatiilor Web puternice. Principiul de functionare este foarte simplu : cand serverul Web primeste o cerere pentru un fisier PHP, prelucraza scriptul continut in fisier pentru a crea pagina Web care este trimisa in cod HTML pur catre browser. Scripurile scrise in PHP sunt o cale usoara pentru a crea aplicatii Web foarte puternice.Daca ati dorit vreodata sa stocati informatia dintr-un formular HTML intr-o baza de date, sa realizati un catalog de produse sau sa oferiti acces intr-o zona a site-ului numai anumitor persoane veti gasi in PHP solutii pentru toate aceste probleme.

Este de notat diferenta cu alte limbaje script CGI scrise în limbaje precum Perl sau C: în loc de a scrie un program cu o multitudine de linii de comanda afisate în final într-o pagina HTML, se va scrie o pagina HTML cu codul inclus pentru a realiza o actiune precisa . Codul PHP este inclus între tag-urile speciale de început si de sfârsit care permit utilizatorului sa treaca din "modul HTML" în "modul PHP". Este posibila sa se configureze serverul de Web astfel incat acersta sa prelucreze (analizeze) toate fisierele HTML ca fisiere PHP. Astfel nu exista nici un mijloc de a distinge paginile care sunt produse dinamic de paginile statice.

Fata de alte limbaje scriptuale, precum Javascript, la PHP codul se executa pe server, pe când JavaScript este executat pe calculatorului clientului (de navigatorul de Internet).

Scripturile scrise in PHP sunt rulate pe server astfel codul sursa nu poate fi copiat pentru ca la client ajunge numai rezultatul ,fara a vedea în nici un fel codul din spatele acestuia. Acest lucru si multitudinea de functii care sunt inglobate in PHP fac din acesta unul din limbajele cel mai des folosite pentru realizarea aplicatiilor de tip e-commerce, e-business sau e-school. Un alt avantaj care a determinat evolutia rapida a acestui limbaj de script este documentatia foarte bogata care se afla pe Internet (manuale,tutoriale,cod sursa).

* Începuturile PHP

PHP cunoscut în versiunile mai vechi si sub numele de PHP/FI (Personal Homepage/Form Interpreter), initial a fost gândit a fi o simpla aplicatie CGI pentru interpretarea formularelor definte prin HTML si procesate de un program scris într-un limbaj Perl, script shell, executat pe server. În cazul interfetei CGI era necesara permisiunea de a rula programe pe server, ceea ce ducea la lacune în securitate si în plus la disocierea de documentul HTML a programului care procesa datele.

Istoria PHP-ului începe la sfârsitul anului 1994, când Rasmus Lerdorf dezvolta prima versiune, ca proiect personal. PHP-ul este facut public în debutul anului 1995 sub denumirea de Personal Home Page Tools, fiind considerat un analizor simplist care interpreta câteva macrouri ce puteau fi incluse în cadrul documentelor HTML, permitând contorizarea accesului la paginile Web sau accesarea unei carti de oaspeti (guestbook). Analizorul a fost rescris la mijlocul aceluiasi an si denumit PHP/FI 2.0, unde FI era o alta aplicatie scrisa de Rasmus Lenford, un interpreter de formulare HTML. A fost adaugat si suportul pentru bazele de date mSQL si astfel PHP/FI a început sa aiba succes, fiind disponibil gratuit pe Web. Se estimeaza ca la sfârsitul lui 1996 cel putin 15 mii de site-uri Web utilizau PHP/FI, iar în anul 1997 numarul acestora era de 50 de mii.

Programatorii Zeev Suraski si Andi Gutmans rescriu analizorul PHP si noua aplicatie formeaza nucleul versiunii PHP 3.0 care include o parte din vechile surse PHP/FI 2.0. Relativ recent, la începutul anului 2000, a fost facuta publica versiunea PHP 4.0, utilizând puternicul motor de scriptare Zend si oferind suport nu numai pentru serverul Apache ci si pentru alte servere Web. De asemeni, PHP 4.0 ofera posibilitatea accesarii documentelor XML via DOM.

PHP în versiunile actuale – reprezinta un pachet puternic care ofera un limbaj de programare accesibil din cadrul fisierelor HTML, limbaj asemanator cu Perl sau C, plus suport pentru manipularea bazelor de date într-un dialect SQL si acces la sisteme hipermedia precum Hyperwave. De asemeni, PHP suporta incarcarea fisierelor de pe calculatorul client: upload (standard propus de E. Nebel si L. Masinter de la Xerox, descris în RFC 1867) si ofera suport pentru cookies (mecanism de stocare a datelor în navigatorul client pentru identificarea utilizatorilor, propus de Netscape).

Aceasta aplicatie este disponibila gratuit pe Internet, pentru medii Unix si mai nou pentru medii Windows (inclusiv sursele), integrându-se în popularul sever Apache.

Se estimeaza ca numarul site-urilor care folosesc în prezent PHP este de peste un milion. Deja, pe Web, exista o multitudine de aplicatii si utilitare concepute în PHP, care se regasesc grupate si în asa-numitul PEAR (PHP Extension and Add-on Repository ).

* Aspecte generale privind instalarea

Înainte de începerea instalarii, este necesar sa se stie pentru ce anume se doreste a fi utilizat PHP-ul . Sunt trei domenii principale în care poti folosi PHP-ul :

1. Scripturi ce ruleaza pe partea de server

2. Scripturi ce ruleaza din linia de comanda

3. Aplicatii GUI ce ruleaza la client

Pentru prima si cea mai utilizata forma, sunt necesare trei lucruri:

PHP-ul insasi

un server de web

un navigator web.

Probabil , ca utilizatorul, are deja un navigator web si, depinzând de instalarea sistemului sau de operare, s-ar putea sa aiba si un server de web (ex. Apache pe Linux sau IIS pe Windows). Utilizatorul ar putea, de asemenea, sa inchirieze spatiu pe web de la o companie. În acest fel, nu trebuie sa-l seteze el personal, doar sa scrie scripturile PHP, sa le transfere pe serverul pe care s-a închiriat spatiul si sa se vada rezultatul obtinut în browser. Se poate gasi o lista cu companii care ofera hosting la http://hosts.php.net/.

Daca utilizatorul doreste sa instaleze serverul web si PHP-ul de unul singur, are la dispozitie doua metode de a conecta PHP-ul de server. Pentru majoritatea serverelor, PHP –ul are un modul direct de interfata (numit si SAPI). Aceste servere includ Apache, Microsoft Internet Information Server, Netscape si iPlanet. Multe alte servere au suport pentru ISAPI, modulul de interfata Microsoft (OmniHTTPd spre exemplu). Daca PHP-ul nu are suport de modul pentru serverul de web folosit de utilizator, atunci se poate folosi întotdeauna ca un procesor CGI. Aceasta înseamna ca trebuie sa se configureze serverul de web , astfel incat, sa foloseasca executabilul în linie de comanda a PHP-ului (php.exe în Windows) ca sa proceseze toate fisierele PHP cerute pe server.

Daca utilizatorul este deasemenea interesat sa foloseasca php în scripting linie de comanda (ex. scriearea de scripturi care sa autogenereze imagini offline, sau procesarea de fisiere text depinzând de argumentele pe care le trimite utilizatorul), întotdeauna este nevoie de executabilul în linia de comanda. Pentru mai multe informatii, poate fi citita sectiunea despre scrierea de aplicatii PHP în linia de comanda. În acest caz nu este nevoie de server si nici de navigator.

Cu PHP pot fi deasemenea sa fie scrise aplicatii GUI ce ruleaza de partea clientului folosind extensia PHP-GTK. Aceasta este o abordare total diferita decât cea a scrierii paginilor web, deoarece utilizatorul nu scoate nici un rezultat HTML, dar manevreaza ferestre si obiecte din interiorul lor. Pentru mai multe detalii despre PHP-GTK, poate fi vizitat site-ul dedicat acestei extensii. PHP-GTK nu este inclus în distributia oficiala a PHP-ului.

Se descarca PHP, codul sursa, si distributiile binare pentru Windows care pot fi gasite la http://www.php.net/. Se recomanda sa se aleaga un server care se afla mai aproape de utilizator pentru a descarca mai repede distributiile.

* Utilizarea PHP

Cele mai bune lucruri în folosirea PHP-ului sunt ca este foarte simplu pentru un începator, dar ofera o multime de facilitati avansate pentru un programator profesional.

PHP este în principal axat pe partea de scripting ce ruleaza pe server, deci se poate face orice poate face si un program CGI, cum ar fi colectarea de date de la formulare, generarea de continut dinamic sau trimitere si primire de cookie-uri. Dar PHP poate face mult mai multe.

Exista trei domenii principale unde sunt folosite scripturile PHP:

1) Scripturi ce ruleaza pe server. Acesta este cel mai traditional si cel mai important pentru PHP. Sunt necesare trei lucruri pentru a face sa mearga. Interpretorul PHP (CGI sau modul de server), un server de web si un navigator de web. E nevoie ca serverul de web sa fie pornit, cu o conexiune PHP instalata. Se poate accesa rezultatul programelor PHP cu un navigator prin intermediul serverului de web.

2) Scripting la linia de comanda. Se poate face ca PHP sa ruleze fara a fi nevoie de server si de browser, ci doar de interpretorul PHP. Aceasta metoda este ideala pentru scripturile ce se vor a fi executate regulat folosind cron (task scheduler în Windows), sau sarcini simple de procesare a textelor.

3) Scrierea de aplicatii ce ruleaza de partea clientului în mod grafic (GUI). Probabil ca PHP nu este limbajul cel mai bun de a scrie aplicatii cu ferestre pentru Windows sau alte sisteme de operare, dar daca se doreste folosirea unor facilitati avansate ale PHP-ului în aplicatiile proprii ce ruleaza de partea clientului se poate totusi folosi PHP-GTK pentru a scrie astfel de programe. Deasemenea exista posibilitatea de a scrie aplicatii ce ruleaza pe platforme diferite folosind aceasta metoda. PHP-GTK este o extensie a PHP-ului, nedisponibila în distributia principala de PHP.

PHP poate fi folosit pe aproape toate marile sisteme de operare, incluzând Linux, multe variante de Unix (incluzând HP-UX, Solaris si OpenBSD), Microsoft Windows, Mac OS X, RISC OS, probabil si altele. PHP are deasemenea suport pentru majoritatea serverelor de web din prezent. Acestea includ serverele Apache, Microsoft Internet Information Server, Personal Web Server, Netscape si iPlanet, serverul Oreillz Website Pro, Caudium, Xitami, OmniHTTPd, si multe atele. Pentru majoritatea serverelor PHP are un modul, iar pentru celelalte suporta standardul CGI, PHP putând sa lucreye ca un procesor CGI.

Deci, cu PHP, exista libertatea de a alege un sistem de operare si un server de web. Chiar mai mult, exista posibilitatea de a alege programarea procedurala sau programarea orientata obiect, sau chiar amestecarea lor. Cu toate acestea, nu orice facilitate a standardului POO este prezenta în versiunea curenta a PHP-ului, multe librarii de cod si aplicatii mari (incluzând si libraria PEAR) sunt scrise folosind doar cod POO.

* Facilitati in PHP

Una dintre cele mai puternice si importante facilitati în PHP este suportul sau pentru o gama larga de baze de date. Scrierea une pagini de web ce interactioneaza cu o baza de date este incredibil de simpla. Sunt suportate o mare varietate de formate de baze de date (dBase, Informix, MySQL, mSQL, Oracle, PostgreSQL, Solid, Sybase, ODBC etc.)

Deasemenea avem o extensie abstracta a bazei de date DBX ce îti permite într-un mod transparent folosirea oricarei bazei de date ce suporta aceasta extensie. Mai mult, PHP suporta ODBC, standardul Open Database Connectio, deci este posibila conectarea la orice alta baza de date ce suporta acest standard mondial

Cu PHP nu exista limitarea de a scoate rezultat HTML. Posibilitatile PHP-ului includ afisarea de imagine, fisiere PDF si chiar filmulete Flash (folosind librariile libswf si Ming) toate generate instant. Este posibil deasemeanea ca rezultatul sa fie orice fisier text, cum ar fi XHTML sau orice alte fisiere XML. PHP poate genera automat aceste fisiere si sa le salveze în sistemul de fisiere în loc sa le afiseze, formând un cache de partea serverului pentru continutul dinamic.

PHP are deasemeanea suport pentru a conversa cu alte servicii folosind protocoale cum ar fi LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (pe Windows) si multe altele. Se pot deasemenea deschide deasemenea socket-uri de retea si sa se interactioneze între aproape toate limbajele de programare Web. Apropo de interconectare, PHP are suport pentru instantierea obiectelor Java si utilizarea lor într-un mod transparent ca obiecte PHP. Este posibila deasemenea folosirea extensiilor CORBA pentru a accesa obiecte aflate la distanta.

PHP are capabilitati extrem de folositoare pentru procesarea textului, de la POSIX Extins sau expresii regulare Perl pâna la parsarea documentelor XML. Pentru parsarea si accesarea documentelor XML, sunt suportate standardele SAX si DOM. Este posibila in PHP folosirea extensiei XSLT pentru a transforma documentele XML.

Folosind PHP în domeniul comertului electronic, foarte folositoare pentru programe de plati online sunt functiile de plata Cybercash, CyberMUT, VeriSign Payflow Pro si CCVS.

În cele din urma, dar nu ultimul rând, exista si alte extensii interesante, cum ar fi functii ale motorului de cautare mnoGoSearch, functii pentru accesarea IRC-ului, multe utilitare de compresie (gzip, bz2), conversie de calendar, traducere si multe altele.

1.4 Serverul de baze de date MySQL

* Scurta descriere

MySQL este un server de baze de date SQL (Structured Query Language) foarte rapid. O baza de date reprezinta o colectie de date organizate dupa anumite criterii. Pentru a accesa, adauga sau procesa date continute in baza de date este nevoie de un sistem de administrare a bazelor de date precum MySQL.

MySQL este foarte rapid, dar si usor de invatat. In plus, este si gratuit; pachetul MySQL este disponibil la www.mysql.com sub forma unei arhive zip care trebuie despachetata intr-un folder, de regula – C:/MySQL. MySQL a fost dezvoltat pentru a lucra cu baze de date foarte complexe. Conectivitatea, viteza si securitatea il fac foarte potrivit pentru accesarea bazelor de date in Internet.

Server-ul MySQL poate fi gestionat manual cu urmatoarele linii de comanda:

• mysqld.exe – porneste server-ul

• mysqladmin.exe – opreste server-ul

• mysql.exe – afiseaza consola MySQL

Server-ul MySQL permite lucrul cu mai multi utilizatori, existand in mod predefinit utilizatorul:

user: root

password: ""

* Comenzi uzuale in MySQL

O baza de date este formata din mai multe tabele, acestea fiind divizate in inregistrari (records), inregistrari ce pot fi considerate liniile tabelului. O linie a unui tabel este impartita in mai multe campuri, care pot stoca diferite tipuri de date

Gestionarea tabelelor pentru a crea o baza de date la consola MySQL

create database nume_baza; – creeaza baza de date

use nume_baza; – comanda folosirea unei anumite baze de date

drop database nume_baza; – sterge o baza de date

show databases; – afiseaza bazele de date existente pe server

create table nume_tabel; – creeaza un tabel atunci cand baza de date este deschisa

show tables; – afiseaza tabelele din baza de date curenta

drop table nume_tabel; – sterge un tabel din baza de date

desc nume_tabel; – arata informatii despre structura unui tabel

Primary key este o instructiune folosita pentru definirea cheii primare. Aceasta creeaza un index pe baza coloanei al carei nume a fost specificat. Aceata coloana este considerata ca fiind cea mai importanta, des folosita, fiind vazuta drept cheia de sortare a tabelului. Primary key este o coloana de tip AUTO_INCREMENT.

insert into nume_tabel values ("val_1", "val_2",…..); – adauga date in tabel

select * from nume_tabel; – afisarea datelor dintr-un tabel specificat.

1.5 Limbajul JavaScript

* Generalitati

JavaScript este un limbaj de tip script dezvoltat de firma Netscape cu ajutorul caruia putem adauga foarte usor efecte spectaculoase paginilor de Web , codul JavaScript introducandu-se direct în pagina HTML. Pentru a rula script-uri scrise în JavaScript este necesar un browser de Web capabil sa interpreteze cod JavaScript – cum ar fi Netscape Navigator (de la versiunea 2.0 în sus) sau Microsoft Internet Explorer (de la versiunea 3.0 în sus).

Spre doesebire de scripturile CGI, care se executa pe calculatorul gazda (server), script-urile JavaScript sunt incarcate de pe server pe calculatorul local. Interpretatorul va decodifica instructiunile script-urilor si le va executa la momentul potrivit: la incarcarea paginii pe server, la apasarea unui buton, la miscarea mouse-ului, etc. Script-urile JavaScript fac parte din codul sursa HTML al paginilor Web, dandu-le acestora un aspect dinamic, interactiv si mult mai atractiv.

JavaScript este cel mai cunoscut si, urmare fireasca, cel mai folosit limbaj pentru crearea de script-uri pe web. Bineinteles, ca e vorba despre un limbaj obiectual si, foarte important, multi-platforma – idea de baza este ca acelasi cod este sau ar trebui sa fie interpretat la fel indiferent de platforma pe care ruleaza browser-ul.

Spre deosebire de limbajele C++ sau Java care sunt limbaje orientate obiect , JavaScript este un limbaj scriptual bazat pe obiecte – si aceasta deoarece obiectelor JavaScript le lipsesc 3 caracteristici ale teoriei OOP(Object Oriented Programming): mostenirea , incapsularea si abstractizarea. Corporatia Netscape Communication a definit propriul concept – cunoscut sub numele de JavaScript Object Model – ce contine totalitatea obiectelor ,proprietatilor, metodelor dar si variabilelor si functiilor din universul Netscape . Obiectele Netscape nu trebuie totusi confundate cu cele ale limbajului JavaScript

JavaScript poseda o serie de obiecte ale sale. Toate obiectele organizeaza-ierarhizeaza o serie de date, dar si functii (metode) care opereaza asupra acestor date. Aceste obiecte – unele deja existente in JavasScript (predefinite) ,altele create de utilizator explicit – pot fi cuplate, respectiv sunt legate de elementele HTML si dau posibilitatea efectuarii diverselor calcule matematice sau a crearii diferitelor resurse: text, ferestre , formulare ,cadre , etc/

Pe osatura unui document HTML recurgandu-se la facilitatile limbajului JavaScript se pot afisa o serie de ferstre , cadre , casete de dialog , unde sa apara tot felul de mesaje, resurse grafice , se pot valida sau chiar evalua expresii in care apar variabile, date numerice , literali.

* Evolutia limbajului Javascript

Ca tot ceea ce are legatura cu Web-ul, JavaScript este o tehnologie noua – mai noua chiar decât însusi limbajul Java. Initial, JavaScript a fost dezvoltat de Netscape sub denumirea LiveScript, un limbaj de scriptare care intentiona sa extinda capacitatile HTML si sa ofere o alternativa partiala la utilizarea unui numar mare de scripturi CGI pentru prelucrarea informatiilor din formulare si pentru a adauga dinamism în paginile utilizatorilor. Dupa lansarea limbajului Java, Netscape a început sa lucreze împreuna cu firma Sun pentru a oferi un limbaj de scriptare a carui sintaxa si semantica erau strâns legate de Java – motiv pentru care denumirea a fost schimbata în JavaScript. Dupa finalizarea limbajului, Netscape si Sun l-au lansat împreuna.

Una dintre motivatiile care au stat la baza limbajului JavaScript a fost recunoasterea necesitatii ca logica si inteligenta sa existe si pe partea de client, nu doar pe partea de server. Daca toata logica este pe partea de server, întreaga prelucrare este dirijata la server, chiar si pentru sarcini simple, asa cum este validarea datelor. În fapt, lipsit de suport logic pe parte de utilizator, mediul Web ar intra în arhitectura demodata „de la terminal spre calculatorul gazda", care a fost înlocuita de revolutia PC din anii '80. Asigurarea de logica în interiorul browserului îl înzestreaza pe client si face ca relatia sa fie un adevarat sistem client/server.

Java a însemnat un pas în aceasta directie dar a fost implementat ca auxiliar al HTML în sine si nu se intentionase integrarea sa din punctul de vedere al unui limbaj. Fiind un limbaj strict în privinta tipului de date, Java nu este optim ca liant pentru numeroasele tehnologii de care Webmasterii au nevoie în crearea paginilor lor si necesita capacitati de programare de nivel redus – ceva ce majoritatea programatorilor HTML prefera sa nu exercite exclusiv pentru a oferi logica în spatele elementelor unui formular. Un limbaj de scriptare de nivel ridicat, pe parte de client, parea a fi piesa lipsa din arena instrumentelor de programare pentru Web.

De la lansarea sa, în decembrie 1995, JavaScript si-a atras sprijin din partea principalilor distribuitori din domeniu, printre care Apple, Borland, Sybase, Informix, Oracle, Digital, HP si IBM. A continuat sa se dezvolte, obtinând recunoastere nu numai în majoritatea browserelor actuale, ci si în alte aplicatii pe care le-au lansat aceste companii, dar si altele.

Situatia s-a complicat însa atunci când a intervenit Microsoft. Întelegând importanta scriptarii Web, Microsoft a dorit sa ofere suport si pentru JavaScript. Când Netscape a preferat sa acorde licenta de tehnologie companiei Microsoft în loc sa o vânda, Redmond a analizat JavaScript, bazându-se pe documentatia publica, si a creat propria sa implementare, JScript, care este recunoscuta de Microsoft Internet Explorer versiunile 3.0 si ulterioare. JScript 1.0 este aproximativ compatibil cu JavaScript 1.1, care este recunoscut în Netscape Navigator 3.0 si browserele ulterioare. Totusi, numeroasele versiuni JavaScript si diversele bizarerii specifice platformelor de operare le-au dat dureri de cap programatorilor pentru Web, atunci când au încercat sa desfasoare situri Web capabile de JavaScript.

Din fericire, Netscape, Microsoft si alti distribuitori au acceptat sa predea limbajul unei organizatii internationale de standardizare, ECMA. De atunci, ECMA a finalizat o specificatie de limbaj, cunoscuta ca ECMAScript, pe care o recunosc toti distribuitorii. Desi standardul ECMA este util, atât Netscape cât si Microsoft au propriile lor implementari ale limbajului (JavaScript si JScript) si continua sa extinda limbajul dincolo de standardul de baza.

Pe lânga JScript, Microsoft are propriul sau concurent pentru JavaScript, numit VBScript, realizat pentru a usura patrunderea pe Web a actualilor programatori VB. În esenta, VBScript este un subset al limbajului Visual Basic. Deoarece Netscape nu recunoaste VBScript, principalele sale utilizari sunt pentru intraneturile (sau siturile Internet) unde se înregistreaza o abundenta de utilizatori de Microsoft Internet Explorer.

Chiar tinând seama de VBScript, JavaScript a devenit cunoscut ca limbajul de scriptare standard pentru Web. Întrucât distribuitorii produc instrumente de dezvoltare Web care necesita un limbaj de scriptare, JavaScript este frecvent folosit în acest scop; astfel, Netscape foloseste limbajul cunoscut ca Server-Side JavaScript (SSJS) pe parte de server.

Desigur, Microsoft nu a ramas în urma si, când a lansat tehnologia Active Server Pages (ASP), aceasta includea si recunoasterea motorului JScript.

* Java si JavaScript

Una dintre cele mai intilnite intrebari referitoare la Javascript este legata de "gradul de rudenie" cu limbajul Java. Afinitatile dintre cele doua limbaje se regasesc la nivelul sintaxei, al structurilor de control si, intr-o anumita masura, la securitate (nu este permisa, spre exemplu, cititea fisierelor de pe calculatorul-client). In rest, Java este un limbaj mult mai complex ( ca majoritatea limbajelor orientate-obiect). Diferente exista inclusiv in legatura cu rularea codului .

Limbajul JavaScript a fost creat de firma Netscape. Spre deosebire de Java, care este un limbaj compilat (programele sunt compilate pe server si executate apoi local pe calculatorul client), JavaScript este un limbaj interpretat ( interpretarea limbajului se face de catre browsere, care au incorporate un interpretator ce analizeaza instructiunile JavaScript si le executa pe calculatorul client). Limbajele interpretate sunt mai simple decat cele compilate si mai usor de invatat. De asemenea, modificarea si depanarea este mult mai usor de realizat pentru ca nu mai este nevoie de compilare de fiecare data.

Dupa cum s-a specificat anterior , script-urile JavaScript sunt incarcate de pe server pe calculatorul local. Interpretatorul va decodifica instructiunile script-urilor si le va executa la momentul potrivit: la incarcarea paginii pe server, la apasarea unui buton, la miscarea mouse-ului, etc. ( deci mai general la producerea unui eveniment ) .Script-urile JavaScript fac parte din codul sursa HTML al paginilor Web, dandu-le acestora un aspect dinamic, interactiv si mult mai atractiv. Acest lucru insa are un mare dezavantaj: aceste script-uri pot fi copiate, modificate si reutilizate. In cazul applet-urilor Java nu apare aceasta problema, intrucat codul sursa al acestora nu este transferat de pe server pe calculatorul client. Ambele limbaje creeaza aplicatii independente de platforma pe care se executa. Programele Java sunt executate de masina virtuala Java iar script-urile de catre interpretator, ambele fiind incluse in navigator.

In timp ce Java este un limbaj complex, orientat obiect, JavaScript este un limbaj mai putin robust; are foarte multe asemanari cu Java, insa sintaxa este mai simpla, iar regulile mai putin complexe. Chiar daca Java si JavaScript au o sintaxa asemanatoare, aceste limbaje sunt folosite in scopuri diferite. Se poate mai degraba spune ca sunt complementare decat concurente.

* Caracteristici ale limbajului JavaScript

Meritul principal al JavaScript este ca pune la dispozitia creatorilor de pagini web o metoda excelenta de "a dinamiza" paginile create. Si aceasta fara a apela la programarea pe partea de server (server-side programming). Fara a inlocui acest gen de programare mentionat, script-urile pot rezolva o serie de probleme (e drept, nu foarte complexe; cu toate aceste complexitatea e relativa, depinzind de abilitatile programatorului) cum ar fi validarea unui cimp dintr-o forma sau afisarea unui mesaj dupa un click pe un buton (in general, programarea evenimentelor). Iar avantajul integrarii complete in paginile HTML a capatat o noua dimensiune acum cu explozia interfetelor HTML .

JavaScript este "case sensitive", adica se face discriminarea intre literele mari si cele mici intilnite in numele identificatorilor (nume de variabile, functii, obiecte etc.).

JavaScript e un limbaj slab-tipizat in comparatie cu Pascal, C++ sau Java. Astfel tipul unei variabile nu este determinat in momentul crearii variabilei, iar pe parcursul executiei programului se poate schimba in functie de context. Acest fapt poate fi un avantaj, in sensul unei libertati in conceperea programului, dar si un dezavantaj legat de ambiguitatea ce poate sa apara, codul fiind mai greu de inteles. Totusi, daca la un moment dat, doriti sa aflati tipul unei variabile aveti la dispozitie operatorul typeOf. Prin aplicarea lui se obtine un string ce contine tipul variabilei (inclusiv undefined sau object, pe linga tipurile standard).

Raportat la variabile, exista asa-numita facilitate de "type-casting" (convertire automata a tipului). In acest caz, in functie de context, tipul variabilelor se modifica automat. In JavaScript casting-ul este partial. Astfel o variabila numerica se converteste automat la string , insa reciproca nu este valabila. De aceea, in multe script-uri veti intilni functia parseInt care converteste, in masura posibilului, unui string in numar.

Exista o valoare speciala in JavaScipt si anume null. Adica, dupa cum îi spune si numele, nimic. Exista diverse situatii cind o veti intilni cum ar fi folosirea de variabile nedefinite dar si unele rezultate de functii. null nu este acelasi lucru cu sirul vid (''), de pilda. De aceea, uneori trebuie sa fie testate cu grija anumite rezultate etc.

JavaScript permite folosirea expresiilor conditionale (existente, de atfel, si in alte limbaje de programare), ce se pot dovedi foarte utile. Exemplu: isNS = (document.layers) ? 1 : 0;

Daca browserul recunoaste aceasta colectie de obiecte (specifica Netscape Navigator) atunci expresia se evalueaza true si variablia noastra va lua valoarea 1, altfel 0. Aceasta este o metoda extrem de simpla de a identifica un browser. Pentru Internet Explorer: isIE = (document.all) ? 1 : 0.

Cuvintul cheie this se poate dovedi extrem de util, caci intotdeauna se refera la obiectul curent. Cred ca puteti intui si acum cit de important e sa puteti folosi o expresie de genul self.proprietate pentru a accesa proprietatea obiectului curent (ma rog, formularea suporta critici), fara a sti care obiect este efectiv.

Data fiind caracteristica multi-platforma a JavaScript este important sa dispunem de functii care sa asigure compatibilitatea in diverse situatii. Doua asemenea functii complementare sunt escape si unescape. Sirul de caractere primit ca argumet este convert la codificarea standard ISO Latin-1 si invers. Este necesara mai ales in cazul cookie-urilor pentru a converti caractere depinzind de setul de caractere (dependent, la rindul sau, de platforma).

Macrosubstitutia este facilitate puternica a unor limbaje de programare (din fericire, intilnita si la JavaScript). Poate ca in acest caz e vorba de o mini-implementare a unei asemenea facilitati (prin functia eval), insa este foarte utila. Astfel eval executa string-ul primit ca argument ca si cum ar fi o linie de cod JavaScript: eval('alert(strA)') va genera o fereastra (prompt window) care va afisa valoarea string-ului strA. Utilitatea este data si de incompatibilitatile dintre browsere la nivelul referirii obiectelor suportate. In acest caz eval() ne ajuta in scrierea unui cod elegant.

Toate variabilele si obiectele sunt distruse la reincarcarea paginii web sau la incarcarea unei pagini noi. Singura solutie in acest caz (pentru crearea unei aplicatii mai complexe) ramine folosirea frame-urilor si, in speta, a unui frame ce nu isi reincarca continutul.

Capitolul 2. Descrierea aplicatiei

2.1 Date generale

2.1.1 Detalii de utilizare si instrumente folosite in dezvoltare

Aplicatia dezvoltata reprezinta implementarea unei solutii web pentru un magazin virtual ce foloseste comertul electronic pentru comercializarea produselor sale: in cazul de fata fiind vorba de accesorii si componente de calculatoare.

Aplicatia poate rula pe un server de web Apache instalat pe unul din sistemele de operare: Linux, Unix sau Windows . Deasemenea este necesara functionarea pe serverul de web a unei versiuni mai noi de PHP – utilizat ca modul al serverului Apache si a unei versiuni recente de MySQL ca server de baze de date.

Partea executabila a aplicatiei este constituita de scripturi PHP ,care sunt rulate pe serverul de web si al caror rezultat este vizualizat de catre utilizatorul client pe calculatorul sau ,prin intermediul unui browser local.

Site-ul web a fost dezvoltat folosind urmatoarele limbaje de programare si aplicatii Web:

Pentru partea de programare s-a utilizat: PHP versiunea 4.0 , HTML 4 si JavaScript

Pentru partea de design s-a utilizat: HTML, CSS, Adobe Photoshop 6.0

– Pentru partea de baze de date s-a utilizat MySQL versiunea 3.23.38

2.1.2 Modulele aplicatiei

Din punct de vedere al functionalitatii , aplicatia este constituita din urmatoarele module :

Modulul de administrare al site-ului – are un rol crucial in intretinerea site-ului , in a asigura

buna functionare a site-ului si fluenta si coerenta datelor vehiculate in activitatea de comert

electronic desfasurata .

Modulul de inregistrare/autentificare a utilizatorilor – asigura securitatea procesului de

comercializare a produselor , prin utilizarea autentificarii utilizatorilor si a altor mecanisme

specifice. Deasemenea pune la dispozitia utilizatorului – care a parcurs procesul de

autentificare, o serie de optiuni si facilitati speciale

Modulul de interfata al site-ului – contine totalitatea scripturilor /programelor ce permit

comunicarea cu utilizatorul client , constituind o interfata prin intermediul careia utilizatorul

poate naviga prin/ vizualiza ierarhia de produse comercializate de catre magazinul web.

Modulul de preluare/prelucrare a comenzilor de la utilizator – are un rol dublu: pe de o parte permite pastrarea optiunilor de produse pentru care a optat utilizatorul la un moment dat in decursul procesului de cumparare si in acelasi timp permite preluarea si prelucrarea in conditii de securitate, a comenzii finale de cumparare lansata de catre utilizator .

Modulul de comunicare cu utilizatorii – implementeaza o serie de facilitati suplimentare, care vin in sprijinul utilizatorului ,asigurand buna comunicare intre comerciant si clienti , dezbaterea si rezolvarea problemelor acestora si nu in ultimul rand contribuind la formarea si dezvoltarea unui cerc de clienti fideli care apreciaza calitatea produselor comercializate.

2.1.3 Detalii de implementare

Aplicatia a fost dezvoltata , in mai multe etape , si anume:

proiectarea structurii si implementarea bazei de date.

proiectarea si implementarea moduluilui de administrare al site-ului , care sa gestioneze

aceasta baza de date si care sa permita – intr-un mod facil – adaugarea datelor in cadrul

tabelelor bazei de date .

introducerea datelor si a imaginilor corespunzatoare acestora in baza de date.

proiectarea si implementarea modulului de interfata al site-ului

proiectarea si implementarea modulului de inregistrare-autentificare a utilizatorilor

proiectarea si implementarea modulului de preluare si prelucrare a comenzilor de la utilizator.

implementarea facilitatilor puse la dispozitia utilizatorului si integrarea acestora in cadrul modulelor de care apartin.

Proiectarea si implementarea modulului de comunicare cu utilizatorii

Definitivarea aspectului grafic al site-ului

Testarea functionalitatii site-ului si a facilitatilor puse la dispozitie in cadrul sau .

Baza de date proiectata si utilizata este una relationala continand 17 tabele, cu o structura complexa si intre care exista legaturi complexe . S-a acordat o atentie deosebita – proiectarii bazei de date , astfel incat organizarea informatiilor sa fie cat mai logica si accesul la date sa se faca intr-um mod optim .

In total au fost scrise peste 80 de programe-script PHP si cateva programe-script JavaScript impartite in cele cinci module functionale – care conlucreaza impreuna , intr-un mod integrat , la buna functionare a site-ului.

Deasemenea s-a acordat atentie aspectului grafic al aplicatiei , prin folosirea de cod CSS intercalat in cadrul programelor-script si prin folosirea unor aplicatii specifice pentru prelucrareaa grafica a imaginilor utilizate.

Modulul de administrare al aplicatiei – prin dimensiunile si complexitatea sa – poate fi considerat ca un site-web de sine-statator, fiind implementat prin nu mai putin de 30 de scripturi PHP si alte cateva scripturi JavaScript.

Deasemenea sectiunea ‘Forum All4Shop’ din cadrul modulului de comunicare cu utilizatorii, a fost dezvoltata ca o aplicatie independenta, fiind apoi integrata in cadrul aplicatiei de baza.

Modularizarea aplicatiei – a condus la o structura flexibila a site-ului , fiind posibil astfel ca si alte componente ale aplicatiei – sectiuni ale celor cinci module principale , sa fie adaugate ulterior – in procesul de dezvoltare a aplicatiei.

2.2 Functionalitati si facilitati ale aplicatiei

Facilitatile disponibile pot fi impartite in doua categorii: facilitati la nivel de site sau generale si facilitati la nivel de produs (pagina a produsului) . Urmeaza o scurta descrierea a acestora , informatii mai detaliate si modul de implementare pentru aceste facilitati , fiind specificate in cadrul descrierii modulului comercial al site-ului – de care si apartin.

2.2.1 Functionalitati si facilitati generale (la nivel de site)

Din aceasta categorie pot fi mentionate , in ordine, urmatoarele:

Facilitati de cautare in cadrul site-ului

Rolul acestora este acela de a facilita accesul la anumite informatii mai detaliate din cadrul site-ului pe baza unor informatii de start ,mai putin detaliate, specificate de catre utilizator

Sunt posibile urmatoarele tipuri de cautari:

* cautare dupa o categorie de produse : se selecteaza o categorie si ca rezultat vor fi afisate toate produsele din categoria indicata

* cautare dupa produsele unui anumit producator : se selecteaza un producator si ca rezultat vor fi afisate toate produsele manufacturate de producatorul indicat

* cautare dupa produs : se introduce un sir text si ca rezultat sunt afisate toate produsele care contin in numele/descrierea lor sirul indicat .

Facilitatile de cerere / abonare oferte – pentru primirea diferitelor oferte /informatii privind produsele comercializate.

Rolul acestei facilitati este acela de informare prompta a utilizatorului cu privire la detaliile comerciale si tehnice ale produselor puse in vanzare.

In acest scop sunt disponibile urmatoarele tipuri de oferte:

oferta de produse in format HTML ,

oferte speciale,

liste de preturi,

liste cu noutati de produse.

Utilizatorul are la dispozitie doua modalitati de a ajunge in posesia acestor oferte:

Poate opta pentru primirea instant a acestora – pe modelul cerere- raspuns , in care utilizatorul selecteaza una sau mai multe optiuni din gama ofertelor si introduce o adresa de e-mail , adresa – pe care vor fi trimise automat informatiile solicitate.

In acest caz utilizatorul nu trebuie sa se fi inregistrat anterior .

2 . Poate opta pentru un abonament la aceste oferte – ceea ce constitue o modalitate mai avantajoasa de informare : informatiile noi fiind astfel furnizate utilizatorului cu mai multa promptitudine si fara nici un efort din partea acestuia.

In acest caz utilizatorul trebuie sa fie unul inregistrat , astfel incat , prin procesul de inregistrare si autentificare utilizatorul respectiv – sa-si poata configura / reconfigura dupa bunul plac

optiunile privitoare la acest abonament .

Facilitatea de votare a site-ului

Utilizatorii pot vota in mod direct calitatea site-ului si vizualiza apoi rezultatele votarii.

Acest lucru asigura un mecanism de feed-back din partea utilizatorilor , ajutand la ajustarea neajunsurilor si continua imbunatatire a calitatii site-ului.

O alta functionalitate utila – este permanenta informare a clientului utilizator – in cadrul procesului de navigare/cumparare (selectie produse) cu privire la valoarea totala actuala si continutul cosului de produse .

Acest lucru este asigurat prin prezenta acestor informatii ( total produse achizitionate si link la cosul de produse efectiv) in cadrul unui antet , postat in partea de sus a fiecarei pagini web generata din cadrul modulului comercial al site-ului.

In functie de actiunile clientului aceste informatii sunt in mod automat reactualizate si reafisate.

2.2.2 Facilitati la nivel de pagina a produsului

In cadrul paginii unui produs , prin intermediul butoanelor cu acelasi nume ,sunt disponibile urmatoarele facilitati:

‘mareste imaginea’ – permite afisarea pozei de dimensiune mare , a produsului.

Rolul acesteia este de a oferi o mai buna prezentare a detaliilor grafice si de constructie ale prodului – lucru important , de exemplu , in cazul placilor de baza (cand de obicei se doreste vizualizarea mai detaliata a arhitecturii acestora)

‘recomanda acest produs unui prieten’ – permite trimiterea de catre utilizator a unui email catre o alta persoana , in care poate sa recomande produsul si sa specifice observatiile si comentariile sale vizavi de produs.

Pe adresa specificata (cea a prietenului) se va trimite un e-mail in a carui corp vor fi incluse : mesajul recomandare , completat de catre utilizator , si un link catre pagina web a produsului ce este recomandat.

‘comparatie’ – permite compararea produsului curent cu orice alt produs ce face parte din aceiasi subcategorie de produse .

Acest lucru permite evidentierea atu-urilor unui produs fata de orice alt produs din aceiasi categorie , prin vizualizarea in paralel a caracteristicilor tehnice specifice fiecarui dintre cele doua produse comparate . In acest mod , utilizatorul poate face cea mai buna optiune de alegere – pentru un produs dintr-o anumita categorie de produse, in functie de doleantele sale , si de ce nu, in functie de bugetul disponibil.

2.3 Structurarea bazei de date

* Descriere generala

Baza de date folosita este o baza de date relationala de tip MySQL, denumita computershop.

Ea contine urmatoarele 11 tabele:

– tipproduse – tabela ce descrie categoriile si subcategoriile de produse si relatiile dintre acestea (ierarhia de categorii)

– produse – tabela ce descrie produsele comercializate

– sablon_caracteristici – tabela ce contine intr-o data de tip blob descrierea formatului pentru caracteristicile comune si proprii fiecarei categorii existente de produse

– caracteristici – tabela ce descrie caracteristicile fiecarui produs

– producatori – tabela ce descrie producatorii produselor ce sunt comercializate

– votare_site – tabela ce contine datele rezultate in urma voturilor acordate de catre utlizatori

in procesul de votare a calitatii site-ului.

– ofertanti – tabela ce descrie ofertantii (furnizorii) produselor ce sunt comercializate

– product_ofertanti – tabela ce descrie relatia dintre ofertanti si produsele furnizate de catre acestia

– noutati_produse – tabela ce descrie/contine date despre topul de noutati produse .

– utilizatori – tabela ce descrie/contine date despre utilizatorii inregistrati

– comenzi – tabela ce descrie comenzile de produse date de catre utilizatori

* Tabela tipproduse

Aceasta tabela descrie ierarhia categoriilor de produse si are urmatoarea structura:

Ierarhia de categorii este structurata pe 2 nivele:

– categorii principale : ca de exemplu componente principale, networking , multimedia,…

Acestea sunt caracterizate de faptul ca au campul idparinte setat la valoarea 0

– subcategorii : ca de exemplu: placi de baza, procesoare , memorii, placi video,…

Acestea sunt caracterizate de faptul ca au campul idparinte setat la o valoare egala cu valoarea id-ului unei categorii principale.

* Tabela produse

Aceasta tabela contine informatiile de baza caracteristice fiecarui produs comercializat si are urmatoarea structura:

Pentru fiecare produs exista trei poze:

– Poza mica – este poza ce apare la listarea si afisarea produselor dintr-o aceeasi categorie , produselor apartinand unui acelasi producator ,etc

– poza medie – este poza ce apare pentru un produs in pagina web corespunzatoare acestuia (pagina in care se dau informatii detaliate despre produs)

– poza mare – este poza ce apare intr-o fereastra separata , atunci cand din pagina web a produsului se activeaza butonul ‘mareste imaginea’ . Rolul acesteia este de a oferi o mai buna prezentare a detaliilor grafice si de constructie ale prodului – lucru important , de exemplu , in cazul placilor de baza (cand de obicei se doreste vizualizarea mai detaliata a arhitecturii acesteia)

* Tabela sablon_caracteristici

Aceasta tabela contine in unicul sau camp, o data de tip blob – string binar ce reprezinta serializarea unui array multidimensional ce descrie formatul caracteristicilor comune fiecarei categorii de produse

Acest array este utilizat in modulul de administrare al site-ului , facilitand in mod considerabil – in cazul operatiilor de inserare /editare a unui produs – introducerea caracteristicilor acestuia , prin furnizarea unui sablon de caracteristici ale categoriei din care face parte produsul editat .

Astfel inserarea/editarea caracteristicilor unui produs se reduce la mentionarea valorilor

specifice pentru fiecare caracteristica prezenta in sablonul de caracteristici al categoriei .

* Tabela caracteristici

Aceasta tabela contine caracteristicile specifice fiecarui dintre produsele comercializate si are urmatoarea structura:

* Tabela producatori

Aceasta tabela contine informatii despre producatorii produselor – existente in cadrul magazinului virtual si mai general despre producatorii importanti de componente si accesorii de calculatoare .

Tabela are urmatoarea structura:

* Tabela votare_site

Aceasta tabela contine datele rezultate in urma voturilor acordate de catre utlizatori

in procesul de votare a calitatii site-ului . Structura tabelei este urmatoarea:

Exista practic 4 optiuni disponibile: ‘foarte bun’ , ‘bun’ , ‘mediu’ si ‘slab’ – astfel incat in urma exprimarii unui vot este incrementata valoarea campului ‘nrvoturi’ corespunzator optiunii selectate.

* Tabela ofertanti

Aceasta tabela contine informatii despre cei mai importanti ofertanti autohtoni de accesorii si componente de calculatoare – cu care firma ALL4SHOP are sau este posibil sa aiba contracte de afaceri . Tabela are urmatoarea structura:

* Tabela product_ofertanti

Aceasta tabela descrie toti ofertantii existenti pentru fiecare produs comercializat si facilitatile si conditiile oferite de catre acestia.

Tabela are urmatoarea structura:

De remarcat ca fiecare produs poate avea unul sau mai multi ofertanti – fiecare dintre acestia oferind conditii de pret si facilitati diferite.

Aceasta tabela este una ‘invizibila’ utilizatorilor clienti – administrarea datelor de aici avand impact asupra strategiei si in final a veniturilor firmei .

In modulul de administrare al site-ului – este in sarcina administatorului site-ului aceea de a alege anumiti ofertanti pentru un produs – in functie de strategia firmei si evident in functie de conditiile de pret si facilitatile oferite de catre fiecare ofertant .

* Tabela noutati_produse

Aceasta tabela descrie si contine datele corespunzatoare topului de noutati produse.

Tabela are urmatoarea structura:

* Tabela utilizatori

Aceasta tabela contine informatii specifice despre fiecare dintre utilizatorii inregistrati.

Informatiile sunt colectate urma procesului de inregistrare a unui nou utilizator – proces desfasurat in mai multe etape. Tabela are urmatoarea structura:

Datele: ‘compania’, ‘codfiscal’ si ‘functia’ sunt optionale si trebuie introduse de catre utilizator – in cadrul procesului de inregistrare – doar in cazul in care este posibil ca unele dintre comenzile utilizatorului sa fie facute pe numele unei firme.

* Tabela comenzi

In aceasta tabela fiecare inregistrare contine toate datele corespunzatoare unei comenzi de produse facuta de catre un utilizator-client si necesare pentru intocmirea facturii proforme ce va insoti comanda respectiva.

Tabela are urmatoarea structura:

Campul ‘data_emiterii’ specifica momentul de timp al emiterii comenzii de catre utilizator

(momentul inserarii in baza de date a inregistrarii corespunzatoare acestei comenzi).

Campul ‘cosproduse’ contine un string binar ce reprezinta serializarea unui array PHP multidimensional ce descrie continutul cosului de produse:

Pentru fiecare produs din cos sunt specificate: numele acestuia , pretul sau (in USD fara TVA) si cantitatea de produs comandata .

2.4 Module ale aplicatiei

2.4.1 Modulul de administrare al bazei de date

* Descriere

Are un rol esential in buna functionarea a site-ului , dar mai ales in gestionarea eficienta a resurselor si a activitatii de comert electronic desfasurate – punind la dispozitia utilizatorilor cu drepturi de administrator o interfata de control puternica si usor de utilizat.

Modulul de administrare este format din urmatoarele sectiuni :

Administrare Categorii – se ocupa de gestionarea tabelelor tipproduse si sablon_caracteristici

Administrare Producatori – se ocupa de gestionarea tabelei producatori

Administrare Ofertanti – se ocupa de gestionarea tabelei ofertanti

Administrare Produse – se ocupa de gestionarea tabelelor: produse , caracteristici si product_ofertanti

Administrare Comenzi – se ocupa de gestionarea tabelei comenzi

* Sectiunea Administrare Categorii

In cadrul aplicatiei , ierarhia de categorii existenta este structurata pe 2 nivele:

– categorii principale : ca de exemplu componente principale, networking , multimedia,…

Acestea contin intotdeauna mai multe subcategorii

– subcategorii : ca de exemplu: placi de baza, procesoare , memorii, placi video,…

Acestea sunt caracterizate de faptul ca au ca “parinte” una din categorii principale.

Aceasta structura arborescenta de organizare a categoriilor de produse a fost preferata datorita structurarii mai organizate a informatiilor si datorita faptului ca asigura un acces mai eficient la informatiile dorite ( acestea fiind de obicei despre unul dintre produse – care pot fi astfel ‘asimilate’ ca fiind frunze ale acestui arbore).

Din cadrul acestei sectiuni se poate modifica/edita ierarhia de categorii existenta.

In principiu ,la accesarea acestei sectiuni ,este afisata ierarhia de categorii si sunt puse la dispozitie comenzi de: adaugare, de stergere si de redenumire a unei categorii.

Aceste comenzi opereaza asupra bazei de date , modificand in mod corespunzator informatiile tabelei tipproduse .De aceea , ca metoda de protectie suplimentara – exista cod JavaScript, care la lansarea unei astfel de comenzi cere confirmari/informatii suplimentare , evitand astfel lansarea eronata /nedorita acestora.

Deasemenea , pentru fiecare categorie existenta – poate fi adaugata/stearsa/updatata o poza corespunzatoare – ce este utilizata pentru a ilustra categoria respectiva in cadrul aplicatiei.

Imaginea respectiva este stocata ca data binara (camp blob) in cadrul acelei inregistrarii din tabela tipproduse ce corespunde categoriei

Mecanismul de template-uri

O alta comanda importanta – relativ la o categorie de produse – este comanda “Template” – ce permite editarea unui sablon de caracteristici comun tuturor produselor din categoria respectiva (toate produsele dintr-o subcategorie , in mod firesc, au aceleasi caracteristici tehnice, doar valorile acestor caracteristici vor diferi de la un produs la un altul) .

Rolul acestui sablon iese in evidenta – la inserarea unui nou produs , in momentul in care este necesara specificarea caracteristicilor sale tehnice. In loc sa se specifice – pentru fiecare produs – numele si valoarea fiecarei dintre caracteristicile sale , pe baza acestui sablon al categoriei va fi generat un formular cu campuri corespunzatoare fiecarei caracteristici tehnice a produsului .

Astfel, tot ce ramane de facut este completarea /setarea acestor elemente de form la o valoare dorita si corespunzator produsului editat.

– Cum a fost implementat?

Aceasta facilitate de ‘template de caracteristici’ a fost implementata astfel:

Exista practic un array PHP asociativ si multidimensional denumit ‘$template’ care contine toate sabloanele de caracteristici pentru fiecare categorie existenta si care este salvat sub forma serializata – ca string binar – in tabela sablon_caracteristici din baza de date

Structura acestui array este urmatoarea:

$template = array( id =>sablon , id=>sablon,……)

unde id reprezinta id-ul categoriei

sablon – reprezinta sablonul de caracteristici al categoriei ce are acel id (in cadrul bazei de date) , fiind la randul sau un array PHP asociativ si multidimensional:

$sablon = array(nume=> caracteristica , nume=>caracteristica,…….)

unde nume – reprezinta numele unei caracteristici din multimea de caracteristici a categoriei

caracteristica – este un array PHP asociativ ce contine informatii despre formatul caracteristicii ce are acel nume

$caracteristica = array(“nume”=> nume_caract , “tip”=>tip_caracteristica, “aditional”=>extra);

unde nume_caract – specifica numele caracteristicii

tip_caract – va specifica formatul caracteristicii

Formatul unei caracteristici specifica tipul elementului de form , ce va fi generat pentru caracteristica respectiva , in cadrul formularului de editare/inserare caracteristici pentru produsele din categoria respectiva

Formatul unei caracteristici poate fi: text (implicit), combobox , checkbox sau textarea .

extra – va specifica informatii suplimentare despre formatul caracteristicii , in cazul in care acesta este de tip ‘combobox’ . Practic aceasta valoare este un sir ce contine optiunile de selectie ale combobox-ului.

– Cum functioneaza?

La accesul sectiunii ‘Administrare Categorii’ este refacut continutul acestui array

$template , din baza de date, si apoi array-ul este inregistrat in cadrul sesiunii de administrare curenta (folosind functia session_register) , astfel incat acesta sa fie disponibil in toate paginile-script ale modulului de administrare ,in care se doreste/este necesar acest lucru .

La editarea template-ului pentru o categorie – practic, se construieste un array sablon (cu structura specificata mai sus) care este apoi salvat impreuna cu id-ul categoriei respective ca element al array-ului de sabloane ‘$template’: $template[$id]=$sablon;

Pentru a permanentiza modificarile facute in urma editarii sablonului de caracteristici ale unei categorii – din pagina sablonului editat , trebuie activat butonul ‘Save template’ – moment in care array-ul ‘$template’ ,in noua sa structura modificata este serializat si apoi salvat (updatat) in baza de date , in tabela sablon_caracteristici.

Utilizarea efectiva a array-ului de sabloane ‘$template’ se face la inserarea/editarea caracteristicilor unui produs . In acest caz se preia sablonul de caracteristici al categoriei din care face parte produsul: $sablon = $template[$id]; unde $id – este id-ul categoriei respective.

Pe baza acestui sablon – array PHP , se genereaza un formular ,in care fiecare element de form existent va corespunde unei caracteristici si va avea tipul – dat de formatul caracteristicii ce este specificat ,evident, in sablon.

Elementele de form poate fi :

– de tip text – daca pentru caracteristica asociata trebuie introdusa o valoare text

– de tip combobox – daca pentru caracteristica asociata trebuie selectata o valoare dintre mai multe valori existente . Acest tip se foloseste in cazul caracteristicilor a caror valori pot fi incadrate intr-o multime de valori cunoscute si distincte .

– de tip checkbox – daca pentru caracteristica asociata trebuie introdusa o valoare de tip selectie binara : da/nu , 0/1 , etc…

– de tip textarea – daca pentru caracteristica asociata trebuie introdusa o valoare text de lungime mare .

In acest mod editarea/inserarea caracteristicilor pentru un produs este mult mai facila si rapida.

Scripturile PHP care implementeaza sectiunea ‘Administrare Categorii’ sunt urmatoarele:

admin_categorii.php – incarca din baza de date si afiseaza ierarhia de categorii , reface din baza de date sablonul cu template-urile de caracteristici ale fiecarei categorii , valideaza prin cod JavaScript comenzile date relativ la ierarhia de categorii .

operare_categorii.php – primind o comanda de editare a unei categorii , realizeaza efectiv modificarile cerute asupra tabelei tipproduse , in cadrul bazei de date.

template.php – afiseaza si permite editarea sablonului de caracteristici al unei categorii.

Fiecare template de caracteristica din cadrul sablonului poate fi vizualizat/editat/modificat/sters.

template.php – implementeaza comanda ‘Template’ descrisa anterior

save_template.php – permite salvarea ,in cadrul bazei de date, a sablonului cu template-urile de caracteristici ale tuturor categoriilor.

poza_categorie.php – permite specificarea informatiilor referitoare la fisierului imagine pentru o categorie editata

savepoza_categorie.php – in functie de ce anume s-a specificat anterior pentru fisierul imagine al unei categorii , realizeaza updatarea/inserarea/stergerea pozei corespunzatoare categoriei respective , in cadrul bazei de date

* Sectiunea Administrare Producatori

In aceasta sectiune se gestioneaza tabela producatori – ce contine date despre producatorii acelor produse comercializate in cadrul site-ului si , mai general , date despre toti producatorii importanti de accesorii si componente de calculatoare.

In principiu , la accesarea acestei sectiuni : se afiseaza tabelat datele despre fiecare producator existent in baza de date : nume , site-web si descrierea producatorului.

Sunt disponibile urmatoarele comenzi:

Add New – pentru adaugarea unui nou producator sau

Facand click pe numele unui producator din tabel – se intra in modul de editare al acelui producator , informatiile acestuia , ce sunt afisate in cadrul unui formular ,putand fi modificate/ updatate sau sterse din baza de date , prin activarea butoanelor Save , respectiv Delete .

Scripturile PHP care implementeaza aceasta sectiune sunt urmatoarele:

admin_producatori.php – incarca din baza de date si afiseaza tabelat informatiile despre fiecare

producator existent

insert_producatori.php – permite introducerea informatiilor specifice despre un nou producator, informatii ce ulterior vor fi salvate in baza de date , ca o noua inregistrare a tabelei producatori .

edit_producatori.php – afiseaza datele corespunzatoare unui anumit producator si permite editarea/modificarea sau stergerea acestora din cadrul tabelei producatori, in baza de date.

* Sectiunea Administrare Ofertanti

In aceasta sectiune se gestioneaza tabela ofertanti – ce contine informatii despre cei mai importanti furnizori autohtoni de accesorii si componente de calculatoare.

Importanta unor informatii cat mai detaliate despre fiecare ofertant de produse este vitala in alegerea cat mai avantajoasa a unor parteneri de afaceri de calitate.

La accesarea acestei sectiuni : se afiseaza tabelat datele despre fiecare ofertant existent in baza de date : nume , site-web , informatii de contact si descrierea ofertantului

Sunt disponibile urmatoarele comenzi:

Add New – pentru adaugarea unui nou ofertant sau

Facand click pe numele unui ofertant din tabel – se intra in modul de editare al acelui ofertant , informatiile acestuia , ce sunt afisate in cadrul unui formular ,putand fi modificate/ updatate sau sterse din baza de date , prin activarea butoanelor Save , respectiv Delete .

Scripturile PHP care implementeaza aceasta sectiune sunt urmatoarele:

admin_ofertanti.php – incarca din baza de date si afiseaza tabelat informatiile despre fiecare ofertant de produse – existent.

insert_ofertanti.php – permite introducerea informatiilor specifice despre un nou ofertant, informatii ce ulterior vor fi salvate in baza de date , ca o noua inregistrare a tabelei ofertanti

edit_ofertanti.php – afiseaza datele corespunzatoare unui anumit ofertant si permite editarea/modificarea sau stergerea acestora din cadrul tabelei ofertanti, in baza de date.

* Sectiunea Administrare Produse

La accesarea acestei sectiuni sunt afisate sub forma ierarhica categoriile de produse existente.

Numele fiecarei categorii este pus intr-un link , astfel incat la selectarea acestui link-categorie , in partea de jos a paginii vor fi afisate informatiile corespunzatoare tututror produselor din acea categorie.

Pentru fiecare produs – sunt afisate urmatoarele informatii:

nume , descriere, pret produs – date preluate din tabela produse

producator – data preluata din tabela producatori

ofertanti , preturi oferite de ofertanti – date preluate din tabela product_ofertanti

Pretul produsului este pretul sau de comercializare si difera de obicei de preturile de furnizor ce insotesc numele fiecarui ofertant-furnizor pentru produsul respectiv .

Pentru fiecare produs afisat ,in dreptul acestuia , sunt disponibile urmatoarele comenzi:

‘AddNew’ , ‘Editare’ , ‘Poze ‘, ‘Caracteristici’ , ‘Ofertanti’ si ‘TopNews’.

Comanda ‘Add New’ – inserare a datelor de baza ( nume , descriere , pret , producator ) pentru un nou produs .

Se genereaza un formular in campurile caruia pot fi specificate aceste informatii.

De exemplu: pentru specificarea producatorului produsului , exista un combobox – generat din PHP , astfel incat sa contina numele tuturor producatorilor existenti , acestia fiind preluati din baza de date in urma unei interogari. Tot ce ramine de facut , este selectarea optiunii corespunzatoare producatorului acelui produs.

Comanda ‘Editare’ – se intra in modul de editare a datelor de baza ale produsului .

Aceste date : nume , descriere , pret , producator sunt incarcate in campurile unui formular,

putand fi modificate/ updatate sau sterse din baza de date , prin activarea butoanelor Save , respectiv Delete .

Implementare practica:

La apasarea butonului de editare se paseaza scriptului editare_produs.php codul corespunzator produsului editat.

Se interogheaza tabela produse folosind codul respectiv – si se preiau datele de baza ale produsului avand acel cod.

Se genereaza dinamic – din cadrul PHP – un formular , astfel incat fiecare element de form sa corespunda unei date preluata din baza de date si se seteaza apoi valoarea fiecarui camp la valoarea datei corespunzatoare lui.

De exemplu: pentru producatorul produsului exista un combobox – ce contine ca optiuni de selectie numele tuturor producatorilor existenti in tabela producatori si id-urile corespunzatoare acestora.

La generarea acestui combobox – avand la dispozitie id-ul producatorului pentru produsul curent (preluat din tabela produse) se seteaza ca selectata optiunea cu numele producatorului ce poseda acel id. Astfel la afisarea formularului , comboxul va afisa numele producatorului curent al produsului ,preluat din baza de date .

Comanda ‘Poze’ – se pot edita pozele pentru produsul curent

Pentru fiecare produs exista trei poze:

– Poza mica – este poza ce apare la listarea si afisarea produselor dintr-o aceeasi categorie , produselor apartinand unui acelasi producator ,etc.

– poza medie – este poza ce apare pentru un produs , in pagina web corespunzatoare acestuia (pagina in care se dau informatii detaliate despre produs)

– poza mare – este poza ce apare intr-o fereastra separata , atunci cand din pagina web a produsului se activeaza butonul ‘mareste imaginea’ . Rolul acesteia este de a oferi o mai buna prezentare a detaliilor grafice si de constructie ale prodului – lucru important , de exemplu , in cazul placilor de baza (cand de obicei se doreste vizualizarea mai detaliata a arhitecturii acesteia)

La accesarea acestei comenzi , va fi generat un formular cu trei campuri de tip text ,in care se vor introduce informatii – in functie de care ,se va opera asupra campurilor de tip blob din tabela produse , corespunzatoare celor trei tipuri de poza ale produsului.

In campul text corespunzator unui tip de poza se pot introduce urmatoarele informatii:

– Calea catre fisierul imagine – ce se doreste a fi incarcat in baza de date , pentru tipul respectiv de poza.

– Cuvantul ‘delete’ – daca se doreste stergerea tipului respectiv de poza pentru produsul curent.

Orice alte informatii , nu vor avea efect asupra pozelor produsului curent.

La submiterea formularului se va apela scriptul ‘savepoze_produs’ – ce va updata /insera/sterge pozele pentru produsul curent , conform indicatiilor text specificate anterior.

Comanda ‘Caracteristici’ – se intra in modul de editare al caracteristicilor produsului.

Se afiseaza o pagina web, ce contine un formular ,in campurile caruia sunt afisate caracteristicile curente ale produsului , incarcate din baza de date ,din tabela caracteristici..

In continuare – pot fi editate/sterse/updatate valorile caracteristicilor pentru produsul respectiv.

Scriptul care implementeaza aceasta comanda are doua parti:

– o prima parte: in care , pe baza sablonului de caracteristici al categoriei din care face parte produsul respectiv ,este generat formularul ce contine elemente de form corespunzatoare formatului fiecarei caracteristici a produsului.

– o a doua parte: in care ,se preiau valorile caracteristicilor produsului din baza de date ,din tabela caracteristici , si se incarca in formular – ca valori ale elementelor de form asociate fiecarei caracteristici .

Astfel , tot ce ramane de facut , din partea utlizatorului-administrator este editarea dupa bunul plac a valorilor acestor caracteristici . La submiterea formularului , catre scriptul de destinatie: ‘save_caracteristici’ va fi trimis un array asociativ (nume_caracteristica=>valoare_caracteristica) , format ce faciliteaza ulterior , salvarea in baza de date a noilor valori specificate pentru caracteristicile produsului .

Comanda ‘Ofertanti’ – se intra in modul de editare al ofertantilor pentru acel produs

Se afiseaza o pagina web , ce contine un formular ,in cadrul caruia vor apare informatii despre ofertantii curenti ai produsului .

Daca produsul – are specificat ,anterior, un numar de ofertanti – impreuna cu informatiile adiacente – acestea vor fi incarcate din baza de date si afisate corespunzator – in cadrul formularului.

Pentru fiecare ofertant exista 3 elemente de form , aranjate in linie : un combobox cu numele tuturor ofertantilor existenti in baza de date – in care va apare selectat numele ofertantului si doua campuri text ,in care vor apare specificate pretul oferit de ofertant , respectiv o descriere a ofertantului.

Sunt posibile urmatoarele operatii:

– inserare informatii despre un nou ofertant

Pentru aceasta – trebuie completata o ‘linie libera’ de elemente de form (adica un combobox si doua campuri text adiacente , aceste elemente de form trebuind sa fie needitate)

Pentru un produs poate exista un numar maxim de 5 ofertanti , astfel incat inserarea unui nou ofertant se poate face doar prin stergerea unuia vechi . Dar , oricum s-a considerat ca un numar de 5 ofertanti pentru un produs este arhi-suficient.

– modificare/editare informatii ale unui ofertant deja existent

Pentru aceasta se modifica efectiv – in ‘linia’ ocupata de ofertantul respectiv , informatiile afisate ale acestuia.

– stergere ofertant existent

Pentru aceasta trebuie sters continutul elementelor de form din ‘linia’ ocupata de ofertantul respectiv in cadrul formularului. De exemplu: pentru combobox-ul in care apare selectat numele ofertantului respectiv , trebuie selectata prima optiune a acestuia : ‘selectati un ofertant’.

Pentru salvarea modificarilor efectuate se va apasa butonul ‘Save’ din cadrul formularului.

Informatiile vor fi modificate corespunzator in tabela product_ofertanti si apoi se va reapela scriptul ce afiseaza produsele din categoria din care face parte si produsul curent editat.

La reafisarea produsului anterior editat vor apare si noile informatii update/modificate despre ofertantii curenti .

Comanda ‘TopNews’ – permite adaugarea produsului curent in cadrul topului cu noutati de produse. In urma activarii comenzii este apelat scriptul ‘noutati_produse.php’ care indeplineste urmatoarele actiuni:

– incarca din baza de date , din tabela noutati_produse – informatiile produselor aflate in top , si creaza cu aceste date un array asociativ PHP ,denumit $noutati , care permite ulterior afisarea acestor date.

– determina daca produsul curent – se afla deja in cadrul topului de noutati , cautand produsul curent in array-ul $noutati , pe baza codului produsului , furnizat la apelul scriptului.

– afiseaza tabelat – intr-o noua pagina web, generata dinamic, topul noutatilor de produse

Pentru fiecare produs din top, sunt afisate: nume, categoria din care face parte , pretul si locul ocupat in cadrul topului

– daca produsul curent nu face parte din top – acesta se poate insera in top – prin specificarea intr-un formular : a pozitiei pe care se doreste adaugarea acestuia si actionandu-se apoi butonul ‘Adauga Produs’ .

– daca produsul curent se afla deja in top , lucru determinat prin cod – la pasul anterior , se ofera posibilitatea stergerii sale din top, prin actionarea butonului ‘Sterge Produs’.

Scripturile PHP care impementeaza sectiunea ‘Administrare Produse’ sunt urmatoarele:

admin_produse.php – incarca din baza de date si afiseaza sub forma ierarhica categoriile de produse. La selectarea unei categorii- se vor incarca din baza de date si apoi afisa toate produsele din aceea categorie.

insert_produs.php – implementeaza comanda ‘Add new’ descrisa anterior.

edit_produs.php – implementeaza comanda ‘Editeaza’ descrisa anterior.

caracteristici_produs – implementeaza comanda ‘Caracteristici’ descrisa anterior.

save_caracteristici.php – implementeaza comanda ‘Caracteristici’ descrisa anterior.

ofertanti_produs.php – implementeaza comanda ‘Ofertanti’ descrisa anterior.

edit_ofertanti_produs.php – implementeaza comanda ‘Ofertanti’ descrisa anterior.

poze_produs.php – implementeaza comanda ‘Poze’ descrisa anterior.

savepoze_produs.php – implementeaza comanda ‘Poze’ descrisa anterior.

noutati_produse.php – implementeaza comanda ‘TopNews’ descrisa anterior

operare_noutati_produse.php – implementeaza comanda ‘TopNews’ descrisa anterior .

Realizeaza efectiv stergerea sau adaugarea unui produs , in topul cu noutati de produse , operand asupra bazei de date.

* Sectiunea Administrare Comenzi

La accesarea acestei sectiuni , sunt afisate tabelat , informatiile de baza – despre toate comenzile de produse facute de utilizatorii-clienti ai magazinului virtual.

Aceste informatii sunt preluate din tabela comenzi si afisate in ordinea cronologica a transmiterii comenzilor de catre utlizatori ( deci in functie de momentul inserarii inregistrarii corespunzatoare comenzii in tabela comenzi).

Informatiile afisate pentru fiecare comanda sunt urmatoarele:

Nume si prenume client , numar de produse comandate , total de plata (in USD fara TVA),

Data emiterii comenzii, optiuni de livrare si de plata si informatiile de contact ale clientului.

In dreptul fiecarei comenzi afisate sunt disponibile urmatoarele linkuri:

‘sterge’ – duce la stergerea inregistrarii corespunzatoare comenzii respective din baza de date

‘in detaliu’ – are ca efect generarea unei pagini , in care vor fi afisate toate detaliile comenzii respective , sub forma unei facturi proforme – de achitie a produselor ce fac obiectul comenzii respective.

In cadrul acestei pagini , poate fi deasemenea vizualizat continutul cosului de produse – ce face obiectul comenzii respective.

Acest lucru a fost implementat astfel:

In momentul lansarii comenzii de cumparare de catre utilizator , pe langa celelalte informatii specifice ,se salveaza in baza de date – in tabela comenzi , sub forma serializata si variabila- array $cosproduse ce implementeaza cosul de produse .

La activarea link-ului ‘in detaliu’ – se preia din tabela comenzi , data de tip blob ce contine forma serializata a cosului de produse , se deserializeaza si astfel , avem la dispozitie un array ce are exact acelasi continut ca si cel existent in cosul de produse , in momentul lansarii comenzii de cumparare de catre client.

Scripturile PHP care implementeaza aceasta sectiune sunt urmatoarele:

admin_comenzi.php – incarca din baza de date , din tabela comenzi , si afiseaza tabelat si in ordine cronologica , informatiile de baza ale tuturor comenzilor de cumparare facute de catre

utilizatorii-clienti ai magazinului virtual.

detalii_factura.php – incarca din baza de date si afiseaza toate informatiile corespunzatoare unei comenzi , inclusiv continutul cosului de produse ce face obiectul comenzii respective.

Afisarea informatiilor are loc in formatul unei facturi proforme – ce poate fi astfel printata si utilizata ca si factura – la plata produselor din comanda de cumparare data de catre utilizator.

sterge_factura.php – sterge toate informatiile corespunzatoare unei comenzi – din cadrul tabelei comenzi , din baza de date.

2.4.2 Modulul de inregistrare-autentificare al utilizatorilor

Acest modul indeplineste urmatoarele functii in cadrul aplicatiei :

asigura securitatea procesului de comercializare a produselor , prin utilizarea autentificarii

utilizatorilor ce doresc sa achizitioneze produse si a altor mecanisme specifice.

pune la dispozitia utilizatorului – care a parcurs procesul de autentificare – o serie de optiuni

si facilitati speciale – din cadrul contului personal.

Din cadrul modului de inregistrare-autentificare sunt posibile urmatoarele scenarii:

pentru userii neinregistrati – ce doresc a beneficia de toate facilitati oferite , este necesar ca acestia sa parcurga procesul de inregistrare , in urma caruia capata statutul de user inregistrat.

pentru userii inregistrati – se poate face autentificarea acestora , prin introducerea unei perechi :adresa email – parola , corecte.

pentru userii inregistrati – care doresc sa se autentifice, dar au uitat parola , este posibil

sa reintre in posesia acesteia , specificand adresa de e-mail corecta (cea cu care s-au inregistrat) .

Procesul de inregistrare al utilizatorilor

Este un proces desfasurat in trei etape – in care se strang informatii specifice despre utilizator si in care se verifica validitatea acestor informatii , inainte ca acestea sa fie introduse in baza de date. Procesul de inregistrare se deruleaza astfel:

Pasul 1 : se solicita – in cadrul unui formular – introducerea unei adrese de e-mail valide a utilizatorului , a unei parole (de minim 5 caractere) si reconfirmarea acesteia din urma .

Pe baza acestui cuplu de informatii: (adresa-email, parola) se va face ulterior autentificarea utilizatorului , fiind importanta deci acuratetea acestor date.

De aceea la submiterea formularului , prin cod Javascript , se vor face urmatoarele verificari:

se verifica validitatea adresei de e-mail introduse : mai exact, daca sintaxa acesteia respecta regulile de format a unei adrese de e-mail.

se verifica daca parola introdusa contine minimul de caractere cerut si daca coincide cu valoarea reintrodusa pentru aceasta.

Doar daca aceste conditii sunt indeplinite, formularul este submis , trecandu-se astfel la pasul urmator.

Pasul 2 – se solicita – in cadrul unui formular – introducerea urmatoarelor date:

Date personale : nume , prenume , cod numeric personal.

Adresa: Localitate , judet/sector , adresa efectiva , numar de telefon.

Firma: nume firma ,cod fiscal ,functia ocupata in cadrul firmei.

Aceste date sunt necesare in cazul in care utilizatorul face comanda de cumparae pe numele

unei firme

Optiuni : utilizatorul poate sa opteze pentru tipurile de oferte pe care doreste sa le

primeasca in mod regulat , prin abonament

Tipurile de oferte care sunt puse la dispozitie si pentru care se poate opta , sunt:

Oferta in format HTML , Oferte speciale , Lista de preturi, Lista cu noutati produse.

Ulterior din cadrul contului personal , utilizatorul poate (re)configura dupa bunul plac

aceste optiuni .

La submiterea acestui formular, prin cod JavaScript , se verifica validitatea urmatoarelor date:

cod numeric personal – se verifica ca acesta sa fie format numai din cifre si sa nu aiba mai

putin de 13 caractere.

nume , prenume , localitate , judet/sector , adresa efectiva – se verifica ca aceste campuri sa

fie completate de catre utilizator

numar de telefon – se verifica ca acesta sa fie format numai din cifre si sa aiba un numar de

cifre corespunzatoare (minim 8 si maxim 12)

Daca toate aceste conditii sunt indeplinite , formularul este submis si se trece la ultimul pas.

Pasul 3 – se afiseaza toate datele introduse si toate optiunile facute.

Utilizatorul poate opta pentru revenirea la unul din pasii anteriori – in cazul in care doreste modificarea unora dintre datele/optiunile anterioare sau , fiind de acord cu informatiile afisate, sa le confirme , apasand butonul ‘Confirmare’ .

La apasarea acestui buton – este apelat scriptul ‘crearecont_final’ care preia informatiile introduse de utilizator , face unele prelucrari asupra acestora si apoi le introduce in baza de date , inserand o noua inregistrare in tabela utilizatori.

Dupa aceste operatii , utilizatorul este redirectionat catre pagina de start a aplicatiei – de unde, are acum posibilitatea de a se autentifica si de a intra astfel, in cadrul contului personal .

Procesul de autentificare al utilizatorilor

Pentru a se autentifica – un utilizator trebuie sa acceseze pagina de logare , si in form-ul intitulat ‘Login’ sa-si introduca adresa de e-mail si parola cu care s-a inregistrat .

La acest nivel exista doua modalitati de asigurare a securitatii accesului la contul de utilizator :

Prin cod Javascript se verifica validitatea adresei de e-mail si a parolei , mai exact daca

acestea verifica regulile de format prestabilite.

Daca cuplul (adresa email ,parola) sunt corecte sintactic , atunci se interogheaza tabela utilizatori cu aceste date , in vederea identificarii utilizatorului respectiv .

In cadrul tabelei utilizatori , cuplul de coloane (email, parola) are valori unice pentru

fiecare inregistrare , deci daca aceste date introduse sunt corecte , in urma interogarii ar trebui sa rezulte o unica inregistrare – deci sa fie identificat un unic utilizator – posesor de drept al acestor date.

Daca identificarea esueaza , este reincarcata pagina de logare – in partea de sus a acesteia aparand un mesaj de avertizare corespunzator.

Este posibil ca pentru un utilizator bine intentionat, procesul de autentificare sa esueze datorita introducerii unei parole eronate sau inexacta , utilizatorul uitand parola corecta.

In acest caz, se vine in sprijinul utilizatorului – acesta avand posibilitatea de a recupera parola corecta . Pentru a realiza acest lucru – in pagina de logare , in cadrul unui al doilea formular , utilizatorul trebuie sa-si specifice adresa de e-mail corecta cu care s-a inregistrat, si apoi sa apese butonul “Trimite parola”.

Dupa verificarile de rigoare asupra adresei de email specificata , daca aceasta este corecta sintactic si daca este identificata intr-una din inregistrarile tabelei utilizatori , atunci pe aceasta adresa – este trimis un email in care se specifica parola asociata , astfel ,utilizatorul de drept reintrand in posesia acesteia.

Daca autentificarea reuseste utilizatorul “intra” in cadrul contului personal.

In cadrul contului personal , sunt puse la dispozitie urmatoarele comenzi:

‘Modificare date personale’ – prin care utilizatorul isi poate vizualiza si modifica datele personale , introduse anterior in cadrul procesului de inregistrare.

La lansarea comenzii , sunt incarcate din baza de date si afisate in cadrul unui formular urmatoarele date ale utilizatorului: nume , prenume , cod numeric personal,adresa ,numar de telefon, nume firma , cod fiscal , functia ocupata .

Utilizatorul poate edita aceste date si apoi salva in baza de date actualizarile efectuate prin apasarea butonului ‘Actualizare’.

‘Modificare adresa de e-mail’ – prin care utilizatorul isi poate modifica adresa de e-mail curenta . Noua adresa de email va fi folosita ulterior , in locul celei vechi , in cadrul procesului de autentificare. De aceea dupa reactualizarea adresei de email si salvarea ei in baza de date , utilizatorul este de-logat si redirectat catre pagina de start a aplicatiei – de unde , accesand pagina de logare se poate din nou autentifica folosind noua adresa de e-mail ,pentru a reintra astfel in cadrul contului personal .

‘Modificare parola’ – prin care utilizatorul isi poate schimba parola curenta.

Noua parola va fi utilizata ulterior, in locul celei anterioare, in cadrul procesului de autentificare . De aceea dupa reactualizarea parolei si salvarea ei in baza de date, utilizatorul este de-logat si redirectat catre pagina de start a aplicatiei – de unde , accesand pagina de logare ,se poate din nou autentifica folosind noua parola ,pentru a reintra astfel in cadrul contului personal .

‘Editare optiuni’ – prin care utilizatorul isi poate reconfigura optiunile de abonare la cele patru tipuri de oferte existente : oferta html , oferte speciale , lista de preturi si lista de nouatati produse.

‘Vizualizare comanda curenta’ – prin care utilizatorul poate vizualiza continutul curent al cosului propriu de produse si in continuare are posibilitatea de a lansa comanda de cumparare a produselor respective.

Aceasta comanda constituie ,in principiu ,o modalitate de revenire la pagina de vizualizare a cosului de produse , deoarece, daca la lansarea comenzii de cumparare , din cadrul paginii de vizualizare a cosului de produse, utilizatorul nu este autentificat sau inregistrat el va fi redirectat catre pagina de logare , de unde prin inregistrare (daca e cazul) si autentificare va ajunge apoi in cadrul contului personal.

Revenirea in cadrul paginii cu cosul de produse se va face astfel , tocmai prin intermediul acestei comenzi.

Scripturile PHP care implementeaza ‘Modulul de inregistrare-autentificare al utilizatorilor’ sunt urmatoarele:

inregistrare.php – genereaza pagina web de start a modulului de inregistrare-autentificare, in care pune la dispozitia utilizatorului trei formulare: primul pentru logare, al doilea pentru trimitere parola (in cazul in care utilizatorul inregistrat si-a uitata parola) si ultimul pentru initierea procesului de inregistrare a utilizatorului

crearecont_pas1.php – implementeaza ‘Pasul 1’ din procesul de inregistrare , descris anterior

crearecont_pas2.php – implementeaza ‘Pasul 2’ din procesul de inregistrare , descris anterior

crearecont_pas3.php – implementeaza ‘Pasul 3’ din procesul de inregistrare , descris anterior

crearecont_final.php – inregistreaza efectiv utilizatorul – introducand toate datele si optiunile acestuia – ca o noua inregistrare, inserata in tabela utilizatori , in baza de date.

trimite_parola.php – realizeaza trimiterea parolei ,uitata de catre utilizator, pe o adresa de e-mail specificata de catre aceasta anterior , si dupa ce aceasta adresa de e-mail este mai intai validata sintactic si apoi regasita in cadrul unei inregistrari a utilizatorului din cadrul tabelei utilizatori.

logare.php – implementeaza procesul de autentificare al utilizatorilor , descris anterior.

edit_email.php – permite, din cadrul contului personal al utilizatorului , modificarea de catre acesta a adresei de email – folosita in procesul de autentificare .

edit_parola.php – permite, din cadrul contului personal al utilizatorului , modificarea de catre acesta a parolei proprii – folosita in procesul de autentificare .

editdate_personale.php – permite, din cadrul contului personal al utilizatorului , modificarea de catre acesta datelor personale.

edit_optiuni.php – permite, din cadrul contului personal al utilizatorului , modificarea de catre acesta a optiunilor de abonare la diversele tipuri de oferte existente.

logout.php – realizeaza de-logarea utilizatorilor , in momentul in care acestia apasa butonul de log-off din cadrul contului personal sau in urma modificarii-reactualizarii din cadrul contului personal a adresei de e-mail sau a parolei personale.

2.4.3 Modulul de interfata al site-ului .

Contine totalitatea scripturilor /programelor ce permit

comunicarea cu utilizatorul client , constituind o interfata prin intermediul careia utilizatorul

poate naviga prin/vizualiza ierarhia de produse comercializate de catre magazinul web

punerea la dispozitia utilizatorului a diverselor facilitati ale aplicatiei

Acest modul mai este denumit si modulul comercial al site-ului

* Sectiunea de navigare\vizualizare a site-ului

Utilizatorul poate naviga prin ierarhia de categorii de produse existente ,pentru ca in final sa ajunga la destinatie: pagina unui produs ce prezinta interes .

Astfel in fiecare pagina a acestei sectiuni – prin intermediul scriptului ‘antet.php’ – este inclusa

in partea de sus a paginii , o bara de butoane – prin intermediul careia se poate vizualiza oricand continutul de subcategorii ale fiecarei categorii principale de produse.

La apasarea unui astfel de buton , se va genera dinamic o noua pagina web: pagina categoriei principale selectate . In cadrul acestei pagini ,sunt incarcate din baza de date , din tabela tipproduse ,si apoi afisate toate informatiile despre subcategoriile acelei categorii principale.

Se vor afisa tabelat numele fiecarei subcategorii insotita de poza corespunzatoare ce descrie grafic subcategoria respectiva.

Efectuarea unui click pe numele sau poza unei subcategorii afisate va duce la generarea dinamica a unei noi pagini web: pagina subcategoriei selectate .

In cadrul acestei pagini , sunt incarcate din baza de date , din tabela produse , si apoi afisate informatiile de baza despre produsele din subcategoria respectiva. Se vor afisa tabelat : numele fiecarui produs , pretul , producatorul si poza ( de dimensiune mica )corespunzatoare produsului

Efectuarea unui click pe numele sau poza unuia dintre produsele afisate va duce la generarea dinamica a unei noi pagini web: pagina produsului selectat.

In cadrul acestei pagini , sunt afisate toate informatiile existente despre produsul respectiv.

In partea de sus a paginiii sunt incarcate din baza de date , din tabela produse , si afisate : poza produsului (de dimensiune medie) , numele , pretul, producatorul si descrierea produsului.

Tot aici – incadrand imaginea produsului ,se afla butoanele ce implementeaza diverse facilitati si comenzi referitoare la produs, si anume:

‘adauga in cos’ – permite adaugarea produsului respectiv in cosul de produse al utilizatorului

‘vezi/modifica cos’ – permite vizualizarea si modificarea continutului cosului de produse

‘mareste imaginea’ – descris in sectiunea de facilitati

‘comparatie’ – descris in sectiunea de facilitati

‘recomanda acest produs unui prieten’ – descris in sectiunea de facilitati

In partea de jos a paginii produsului , sunt incarcate din baza de date, din tabela caracteristici , si afisate tabelat : toate caracteristicile tehnice ale produsului

Scripturile PHP care implementeaza aceasta sectiune sunt urmatoarele:

index.php – genereaza pagina de start a aplicatiei , in cadrul careia sunt puse la dispozitia utilizatorului facilitatile generale ale site-ului . Deasemenea , incarca din baza de date si apoi afiseaza in cadrul acestei pagini de start – informatiile de baza si pozele corepunzatoare acelor produse – ce ocupa in ordine , primele patru locuri in cadrul topului de noutati produse existent.

antet.php – script care, inclus fiind in fiecare pagina a acestei sectiuni , va afisa in partea de sus a paginii , un antet cu sigla firmei si o bara de butoane penteru accesul la categoriile principale de produse. Deasemenea mai sunt afisate o imagine-link la pagina de vizualizare rapida a cosului de produse si totalul de plata al continutului curent al cosului de produse al utilizatorului.

readimg.php – citeste din baza de date si afiseaza , in functie de parametrul primit , una dintre cele trei poze ale unui produs.

categorie_principala.php – genereaza dinamic ‘pagina unei categorii principale de produse’, descrisa anterior.

categorie.php – genereaza dinamic ‘pagina unei subcategorii de produse’ , descrisa anterior.

produs.php – genereaza dinamic ‘pagina unui produs’ , descrisa anterior.

caracteristici.php – incarca din baza de date , din tabela caracteristici, si afiseaza tabelat valorile tuturor caracteristicilor tehnice ale unui produs

* Sectiunea de cautare a site-ului

Utilizatorul are la dispozitie trei modalitati de cautare a informatiilor in cadrul site-ului:

cautare dupa numele unei subcategorii

In acest caz , utilizatorul trebuie sa selecteze intr-un combobox , numele subcategoriei dorite

Ca rezultat , este generata dinamic o noua pagina web : pagina subcategoriei selectate.

In cadrul acestei pagini , sunt incarcate din baza de date , din tabela produse , si apoi afisate, informatiile de baza despre produsele din subcategoria respectiva. Se vor afisa tabelat : numele fiecarui produs , pretul , producatorul si poza ( de dimensiune mica )corespunzatoare produsului

cautare dupa numele unui producator

In acest caz, utilizatorul trebuie sa selecteze intr-un combobox , numele producatorului dorit.

Ca rezultat este generata dinamic o noua pagina web: pagina produselor producatorului selectat.

In cadrul acestei pagini , sunt incarcate din baza de date , din tabela produse, si apoi afisate,

informatiile de baza despre toate produsele ce apartin producatorului selectat. Se vor afisa tabelat : numele fiecarui produs , pretul , poza ( de dimensiune mica )corespunzatoare produsului si subcategoria din care face parte produsul.

cautare dupa un cuvant cheie

In acest caz , utilizatorul trebuie sa specifice intr-un camp text al formularului de cautare , cuvantul cheie dupa care se va face cautarea si sa apese butonul intitulat ‘GO’ , ce declanseaza procesul de cautare .

Cautarea este ‘case insensitive’ si este o cautare dupa expresii regulate, in acest sens

folosindu-se functiile specifice oferite de limbajul PHP .

Procesul efectiv de cautare are loc printre datele de tip sir ale fiecarei inregistrari – ce

corespunde unui produs in cadrul tabelei produse .

Se vor retine acele produse care satisfac criteriul de cautare , construindu-se astfel un array

asociativ PHP , denumit ‘$produse’ , ce contine informatiile de baza ale acestor produse.

Un produs satisface criteriul de cautare daca: s-a gasit cel putin o aparitie a cuvantului cheie

specificat , in cadrul datelor de tip sir ale inregistrarii ce corespunde produsului in tabela

produse.

Dupa terminarea procesului de cautare , este generata o noua pagina web in care – pe baza

array-ului ‘$produse’ – sunt afisate tabelat rezultatele cautarii: produse care satisfac criteriul

specificat . Pentru fiecare produs sunt afisate: numele, pretul si poza corespunzatoare.

Detalii complete despre unul din produsele afisate se poate face efectuand un click pe

numele sau pe poza produsului .

Scripturile PHP care implementeaza aceasta sectiune sunt urmatoarele:

edit_cautare.php – afiseaza in cadrul paginii in care este inclus ca script , formularul ce contine cele trei optiuni de cautare: dupa numele unei categorii,dupa numele unui producator sau dupa un cuvant cheie. Initial , realizeaza cateva operatii preliminare , ca de exemplu:

Incarca din baza de date si construieste un array cu numele tuturor subcategoriilor – ce vor fi ulterior incarcate ca si optiuni de selectie ale comboxului de cautare dupa numele unei categorii.

Incarca din baza de date si construieste un array cu numele tuturor producatorilor – ce vor fi ulterior incarcati ca si optiuni de selectie ale comboxului de cautare dupa numele unui producator

cautare.php – implementeaza procesul de cautare dupa un cuvant cheie specificat. Afiseaza tabelat rezultatele cautarii

categorie.php – cauta in baza de date si afiseaza tabelat toate produsele unei subcategorii specificate

produse_producator.php – implementeaza pocesul de cautare dupa numele unui producator.

Afiseaza tabelat rezultatele cautarii.

* Sectiunea de facilitati ale site-ului

In cadrul paginii unui produs , prin intermediul butoanelor cu acelasi nume ,sunt disponibile urmatoarele facilitati:

‘mareste imaginea’ – permite afisarea pozei de dimensiune mare , a produsului.

La apasarea acestui buton este executata o functie Javascript care

creaza o noua fereastra si apoi

lanseaza in executie un script PHP ce va incarca din baza de date si ulterior afisa in aceasta fereastra , poza (de dimensiune mare) a produsului .

‘recomanda acest produs unui prieten’ – permite trimiterea de catre utilizator a unui email catre o alta persoana , in care poate sa recomande produsul si sa specifice observatiile si comentariile sale vizavi de produs.

La apasarea acestui buton , este executata o functie JavaScript care :

creaza o noua fereastra

creeaza un formular in aceasta fereastra , in care, utilizatorul este invitat sa introduca cateva date personale ( nume , prenume, adresa de email) , adresa prietenului caruia vrea sa-i recomande acest produs si un text care sa insoteasca aceasta recomandare.

La submiterea formului este apelat scriptul ‘recomanda_produs.php’ care va verifica validitatea datelor introduse de catre utilizator si , in cazul in care acestea sunt corecte , va trimite pe adresa specificata (cea a prietenului) un e-mail in a carui corp vor fi incluse : mesajul recomandare completat de catre utilizator si un link catre pagina web a produsului ce este recomandat.

‘comparatie’ – permite compararea produsului curent cu orice alt produs ce face parte din aceiasi subcategorie de produse .

La apasarea acestui buton este lansat in executie scriptul ‘compara.php’ , care efectueaza urmatoarele task-uri :

La prima rulare a scriptului (atunci cand este apasat butonul ‘compara’) se interogheaza baza de date, se determina toate produsele din categoria produsului ce se compara, si se construieste cu acestea un array PHP asociativ: $data = array(cod_produs=>nume_produs,..)

Acest array va fi serializat si deci , disponibil apoi ,in toate rularile ulterioare ale scriptului, cand se realizeaza comparatii intre produsele apartinand categoriei initiale (categoria produsului din pagina caruia a fost lansata comanda ‘compara’). Astfel , nu mai este necesar, ca la fiecare comparatie a doua produse din aceiasi categorie sa se interogheze baza de date si sa se reconstruiasca acest array , acest lucru facandu-se doar initial pentru prima comparatie a doua produse dintr-o categorie data.

Genereaza dinamic o noua pagina web: pagina comparatiei intre produse.

In cadrul acesteia , intr-un formular, vor apare alaturat doua combobox-uri , ce vor fi incarcate cu datele din array-ul $data, deci cu toate produsele din categoria data.

Combobox-ul din partea stanga va avea selectata ca optiune – produsul initial comparat (cel

din pagina caruia a fost lansata comanda ‘compara’ .Dedesubt se va afisa , dupa ce a fost

incarcata din baza de date , poza mica a produsului.

In partea de jos a paginii vor fi afisate tabelat , dupa ce au fost incarcate din baza de date ,

valorile caracteristicilor acestui produs.

In combobox-ul din partea dreapta , utilizatorul va putea selecta produsul cu care se doreste

a fi comparat produsul initial . In urma acestei selectii , formularul va fi submis si scriptul

‘compara.php’ va fi astfel reapelat .

In urma reapelarii , se va reconstrui dinamic pagina comparatiei intre produse, comboxurile din cadrul formularului, vor fi setate conform optiunilor facute anterior.

Sub fiecare combobox , se va afisa , din baza de date, poza mica corespunzatoare produsului

selectat. In partea de jos a paginii se vor afisa tabelat , dupa ce au fost incarcate din baza de

date, valorile caracteristicilor pentru fiecare dintre cele doua produse comparate.

La schimbarea selectiei din unul din cele doua combobox-uri cu produse , formularul va fi submis, scriptul ‘compara.php’ reapelat si procesul descris se repeta…

La nivel de site , pe langa facilitatile de cautare descrise anterior , mai sunt disponibile urmatoarele facilitati:

Trimiterea instant a ofertelor

Dupa cum s-a aratat anterior , un utilizator – in cadrul procesului de inregistrare sau ulterior din cadrul contului personal – are posibiliatea de a-si configura/reconfigura optiunile de trimitere a acestor oferte prin abonament.

Alternativ, orice utilizator poate opta pentru primirea instant a ofertelor existente , fara a fi nevoie ca acesta sa se inregistreze/autentifice si sa se aboneze pentru a putea primi aceste oferte.

Pentru trimiterea instant a ofertelor se foloseste modelul cerere- raspuns , in care utilizatorul , in cadrul unui formular , va selecta una sau mai multe optiuni din gama tipurilor de oferte existente si trebuie apoi sa introduca intr-un camp text al formularului o adresa de e-mail valida.

La submiterea formularului , in urma apasarii butonului “GO” , se verifica corectitudinea formatului adresei de email prin cod JavaScript. Daca aceasta este valida , imediat , pe aceasta adresa sunt trimise ,in corpul unor mesaje email , ofertele pentru care utilizatorul a optat anterior.

Scripturile PHP care implementeaza ‘Sectiunea de facilitati ale site-ului’ , sunt urmatoarele:

produs.php – script ce implementeaza la nivel de cod JavaScript facilitatile ‘mareste imaginea’ si ‘recomanda acest produs uni prieten’ , descrise anterior.

recomanda_prieten.php – implementeaza la nivel PHP facilitatea ‘recomanda acest produs unui prieten’ , descrisa anterior.

compara.php – implementeaza facilitatea ‘compara produse’ , descrisa anterior.

trimite_oferte.php – implementeaza facilitatea ‘trimitere instant oferte’ descrisa anterior.

2.4.4 Modulul de preluare/prelucrare al comenzilor de la utilizator

Are un dublu rol : pe de o parte permite pastrarea optiunilor de produse pentru care a optat utilizatorul , in diverse momente ,in decursul procesului de cumparare si in acelasi timp permite preluarea si prelucrarea in conditii de securitate , a comenzii finale de cumparare lansata de catre utilizator .

* Adaugarea unui produs in cosul de produse

Procesul de cumparare , incepe la nivelul paginii produsului , in mometul in care userul adauga produsul respectiv la cosul de produse , activand butonul ‘Adauga in cos’.

Cosul de produse este implementat printr-un array asociativ, bidimensional PHP , ce are urmatoarea structura:

$cosproduse = array(cod1=>info1 , cod2=>info2,….) unde

cod – reprezinta codul unui produs din cosul de produse ,

info – este un array asociativ PHP ce contine ca informatii despre produs: numele, pretul si

cantitatea in care produsul a fost comandat , fiind de forma:

$info= array(“nume”=>nume,”pret”=>pret, “cantitate”=>cantitate)

Acest array este serializat , astfel incat el sa poata fi mentinut ca variabila pe toata durata unei sesiuni utilizator si sa poata fi disponibil in toate paginile-script in care este necesar acest lucru.

Deasemenea – in legatura cu cosul de produse – mai exista doua variabile , ce sunt la randul lor serializate, si anume:

$nrproduse – ce indica numarul curent al produselor din csul de produse

$total – ce indica pretul total (in USD si fara TVA) a continutului curent al cosului de produse

La apasarea butonului ‘adauga in cos’ este apelat scriptul ‘adauga_cos.php’ care

realizeaza urmatoarele operatii:

daca produsul este pentru prima oara introdus in cosul de produse , atunci se interogheaza

baza de date pentru a afla nume si pretul produsului . Cu aceste informatii si setand

cantitatea la 1 – se construieste un array – de tipul $info – care este apoi adaugat ca

element al array-ului $cosproduse .

daca un produs identic a mai fost anterior adaugat in cos , atunci in elementul-array corespunzator produsului in cadrul array-ului $cosproduse , este incrementata doar variabila cantitate .

dupa adaugarea produsului in cos , prin redirectare , va fi reafisata pagina produsului

respectiv.

* Vizualizarea cosului de produse

Exista doua modalitati de vizualizare a cosului de produse:

vizualizare rapida a cosului de produse

In partea superioara a fiecarei pagini web ,generata din cadrul modulului comercial al site-ului , apare pretul total al continutului curent al cosului de produse si alaturat sigla cosului de produse – link catre pagina de vizualizare rapida a cosului de produse .

Prin efectuarea unui click pe sigla cosului – este apelat scriptul ‘rapidview_cos.php’ care va

afisa tabelat ,in cadrul unei pagini web, continutul cosului de produse si pretul total atat in

USD cat si in lei . Pentru fiecare produs din cos , sunt afisate numele, pretul in USD si in lei

si cantitatea in care produsul a fost achizitionat.

In acest caz nu se pot face modificari asupra cosului de produse.

vizualizare / modificare a cosului de produse

Se realizeaza prin apasarea butonului cu acelasi nume – din cadrul paginii unui produs.

Ca urmare , este apelat scriptul ‘vezi_cos.php’ care va afisa tabelat continutul cosului de

produse si pretul total atat in USD si in lei.

Pentru fiecare produs , pe langa informatiile uzuale:nume,pret, cantitate sunt afisate si

comenzi pentru modificarea cantitatii/stergerea produsului respectiv in/din cadrul cosului de

produse. Aceste comenzi opereaza asupra array-ului $cosproduse reactualizand in mod

corelat informatiile despre produs.

De exemplu – la stergerea unui produs – trebuie reactualizate in mod corespunzator :

numarul total de produse – in variabila $nrproduse , trebuie scazuta cantitatea in care era

prezent produsul

pretul total al cosului – in variabila $total , trebuie scazut costul total al produsului , adica

suma data de produsul cantitate x pret produs

Deasemenea , in pagina , mai sunt prezente doua butoane:

‘Goleste cosul’ – la apasarea acestuia cosul de produse este golit, i.e. variabilele

$cosproduse , $total , $nrproduse sunt setate la null

‘Inapoi la produse’ – permite reintoarcerea in cadrul paginii produsului ,de unde s-a lansat

comanda de vizualizarea a cosului.

Lucrurile nu sunt chiar atat de elementare precum par, pentru ca la activarea butoanelor de

modificare a cosului – dupa apelul unui script ‘modifica_cos.php’ ce realizeaza efectiv

modificarile asupra cosului – este reapelat scriptul curent (vezi_cos.php) prin redirectare.

Deci dupa posibila utilizare a acestor butoane – reintoarcerea in pagina produsului nu se mai

poate face prin comenzi Javascript de genul: history.back ( ) sau simple redirectari.

Solutia consta in pastrarea prin serializare a codului acelui produs – din a carui pagina

produs s-a lansat comanda de vizualizare/modificare cos. Astfel la activarea butonului

‘Inapoi la produse’ va fi posibila reintoarcerea in pagina ultimului produs vizitat , prin

redirectarea catre scriptul de generare a paginii , script ce va primi ca parametru codul

produsului respectiv .

* Lansarea comenzii de cumparare a produselor

Aceasta se poate face din cadrul celor doua pagini de vizualizare a cosului de produse , prezentate anterior , prin actionarea butonului ‘Comanda’.

Din motive ce tin de securitatea datelor , preluarea si prelucrarea comenzilor de cumparare a produselor , lansata de utilizatori – se poate face doar pentru utilizatorii inregistrati si care s-au autentificat anterior.

De aceea la activarea butonului ‘Comanda’ este apelat scriptul ‘checklogin.php’ care verifica daca utilizatorul este unul inregistrat si in acest caz daca a trecut procesul de autentificare, in caz contrar utilizatorul fiind redirectat catre sistemul de inregistrare/autentificare.

Dupa ce utilizatorul se inregistreaza si se autentifica sau inregistrat fiind , doar se autentifica , are posibilitatea din cadrul contului personal – sa revina in pagina de vizualizare a cosului de produse si sa relanseze comanda de cumparare.

* Preluarea comenzii de cumparare

Daca comanda de cumparare este lansata de catre un utilizator inregistrat si care s-a si autentificat atunci are loc preluarea si prelucrarea comenzii sale de cumparare.

Acest proces are loc in doi pasi:

Pasul 1 – este generata in mod dinamic o pagina web , ce contine un formular , in care:

sunt preluate din baza de date – din tabela utilizatori , si apoi incarcate in elemente ale

formularului: datele personale ale utilizatorului, adresa sa , numarul de telefon , adresa de e-mail . Unele dintre aceste date, cum ar fi : adresa , telefonul pot fi editate/modificate de catre

utilizator .

Ca o masura suplimentara de securitate – codul numeric personal al utilizatorului – nu este

afisat in cadrul formularului , utilizatorul trebuind sa reintroduca in mod corect aceasta data

in campul de form corespunzator.

Sunt puse la dipozitie si alte elemente de form : pentru preluarea de la utilizator a diverse informatii , cum ar fi : informatii despre firma: nume firma , cod fiscal , cont bancar si numele bancii – daca comanda se doreste a fi facuta pe numele unei firme .

Deasemenea , utilizatorul trebuie sa selecteze o modalitate de plata a comenzii si o modalitate de livrare a produselor comandate – dintre cele cinci optiuni de plata si cele cinci optiuni de livrare puse la dispozitia utilizatorilor de catre firma All4Shop

In final , utilizatorul are posibilitatea – de a-si exprima opiniile si comentariile personale

relativ la comanda facuta , date ce vor fi introduse , deasemenea intr-un camp al

formularului.

La submiterea formului , prin cod JavaScript se verifica validitatea datelor introduse :

pentru codului numeric personal introdus – se verifica ca acesta sa fie format numai din

cifre si sa nu aiba mai putin de 13 caractere

pentru numarul de telefon – se verifica ca acesta sa fie format numai din cifre si sa aiba un

numar de cifre corespunzatoare (minim 8 si maxim 12)

pentru adresa de email – se verifica daca aceasta repecta regulile de format specifice

pentru restul campurilor – daca acestea sunt obligatorii – se verifica , ca acestea sa fie

completate de catre utilizator

Daca toate datele introduse/prezente in formular sunt valide, formularul este submis si se

trece la pasul 2

Pasul 2

Intr-o prima faza , se interogheaza baza de date si se preia din tabela utilizatori codul numeric personal al utilizatorului .

Aceasta valoare este apoi comparata cu valoarea de cod numeric personal introdusa de utilizator in cadrul formularului anterior.

Daca valorile nu coincid , utilizatorul este atentionat printr-un mesaj corespunzator si poate reveni la pasul 1 – pentru a reintroduce in mod corect aceasta valoare , fara de care procesul nu poate continua.

Daca valorile coincid , se trece mai departe si va fi generata dinamic o pagina web in care sunt afisate : pe de o parte – continutul cosului de produse ce face obiectul cumpararii si totalul de plata in USD si lei , si pe de alta parte toate informatiile preluate de la utilizatorul-client in pasul anterior.

Dealtfel , utilizatorul poate reveni la acest pas anterior daca nu este de acord/doreste modificarea unora dintre datele afisate.

Daca este de acord cu datele afisate – atunci , pentru a finaliza procesul de cumparare trebuie sa activeze butonul ‘Trimite comanda’ , dupa care va fi automat redirectat catre pagina de start a aplicatiei.

* Prelucrarea comenzii de cumparare

Aceasta se face in urma activarii butonului ‘Trimite comanda’ de catre utilizator ,ce va duce la apelul scriptului ‘comanda_final.php’ .

Acest script realizeaza urmatoarele lucruri:

primeste ca variabile , toate datele si informatiile preluate de la utilizator in cadrul procesului ‘de preluare comanda de la utilizator’ si :

face unele prelucrari asupra acestor date , in vederea compatibilizarii cu structura tabelei

‘Comenzi’ in cadrul careia vor fi salvate toate aceste date – legate de comanda utilizatorului

introduce toate datele , inclusiv cosul de produse ca si campuri ale unei noi inregistrari ce este inserata in cadrul tabelei ‘Comenzi’.

Cosul de produse – reprezentat de variabila- array $cosproduse , este serializat si , sub forma unui string binar este adaugat ca si camp de tip ‘blob’ al inregistrarii corespunzatoare comenzii utilizatorului in , cadrul tabelei “Comenzi’ .

Deasemenea din inregistrarea inserata fac parte informatii ca: numarul de produse prezent in cadrul cosului de produse – reprezentata de variabila serializata $nrproduse si totalul de plata al cosului de produse – reprezentatea de variabila serializata $total .

La inserarea inregistrarii in cadrul tabelei “Comenzi’ un camp de tipul ‘timestamp’ al inregistrarii va fi setat la data si momentul curent al efectuarii acestei operatii , reprezentand astfel momentul trimiterii comenzi finale , de cumparare de catre utilizator a produselor prezente in cadrul cosului de produse.

In final , cosul de produse este resetat : prin setarea la null a variabilelor ce implementeaza cosul de produse ( deci: $cosproduse =null ; $total=null; $nrproduse = null ), astfel incat utilizatorul sa poata in cadrul unei aceleasi sesiuni , sa lanseze o noua comanda de cumparare , evident – daca doreste acest lucru.

Modulul de preluare/prelucrare al comenzilor de la utilizator este implementat de urmatoarele scripturi PHP:

adauga_cos.php – permite adaugarea unui nou produs, la cosul de produse.

rapidview_cos.php – permite vizualizarea rapida a cosului de produse, fara a putea insa sa se poata modifica continutul cosului de produse.

vezi_cos.php – permite vizualizarea cosului de produse si deasemenea modificarea continutului cosului de produse .

modifica_cos.php – realizeaza efectiv modificarea cosului de produse , in functie de comanda de modificare , data de catre utilizator din cadrul paginii de vizualizare/modificare a cosului de produse.

checklogin.php – la lansarea comenzii de cumparare, verifica daca utilizatorul respectiv este unul inregistrat si autentificat, in caz contrar , redirectand utilizatorul catre sectiunea de inregistrare- autentificare a site-ului.

comanda_pas1.php – implementeaza pasul 1 din procesul de preluare a comenzii lansate de catre un utilizator .

comanda_pas2.php – implementeaza pasul 2 din procesul de preluare a comenzii lansate de catre un utilizator .

comanda_final.php – realizeaza prelucrari asupra datelor comenzii si salveaza toate informatiile ce caracterizeaza comanda utilizatorului , in baza de date. In final reseteaza cosul de produse si redirecteaza utilizatorul catre pagina de start a aplicatiei

2.4.5 Modulul de comunicare cu utilizatorii

Acest modul implementeaza o serie de facilitati suplimentare, care vin in sprijinul utilizatorului ,asigurand buna comunicare intre comerciant si clienti , dezbaterea si rezolvarea problemelor acestora si nu in ultimul rand contribuind la formarea si dezvoltarea unui cerc de clienti fideli care apreciaza calitatea produselor comercializate.

Comunicarea cu utilizatorii- clienti este asigurata prin trei mecanisme:

Forumul All4Shop – constituie o modalitate de comunicare directa intre comerciant si utilizatori .

Votarea site-ului – constituie o modalitate de sondare a opiniei publice , a utilizatorilor ,relativ la acest site.

Pagina de contact – ofera informatiile necesare pentru realizarea contactului direct , intre utilizatori si comerciant.

Votarea site-ului

Utilizatorii au posibilitaea de a-si exprima opiniile cu privire la calitatea site-ului: functionalitate , estetica si nu in ultimul rand calitatea serviciilor si informatiilor oferite.

Acest lucru asigura un mecanism de feed-back din partea utilizatorilor , ajutand la ajustarea neajunsurilor si continua imbunatatire a site-ului.

Intr-un formular , exista mai multe campuri de tip radio-button – ce exprima optiunile de votare ce pot fi selectate: ‘foarte bun’ , ‘bun’ , ‘mediu’ si ‘slab’.

Dupa selectarea uneia dintre aceste optiuni si apasarea butonului ‘Voteaza’ , forumul respectiv este submis ,fiind astfel apelat scriptul ‘votare_site.php’ care va indeplini urmatoarele task-uri:

va reactualiza (incrementa), in baza de date , in cadrul tabelei votare_site , numarul de voturi

corespunzator optiunii de votare selectata de utilizator.

Se interogheaza baza de date si se construieste un array PHP asociativ , ce contine numarul de voturi asociate fiecarei optiuni: $voturi = array(..nume_optiune=>numar_voturi,…) .

In paralel se calculeaza numarul total de voturi exprimate pana in acel moment.

Pe baza array-ului $voturi se construieste un array ce contine procentul – din numarul total de voturi-ce corespunde fiecarei optiuni: $procent = array(nume_optiune=>procent_optiune)

Se genereaza dinamic o noua pagina web , in care, pe baza array-ului $procent , deci a procentelor calculate pentru fiecare optiune – se afiseaza in mod grafic rezultatele votarii.

Forum All4Shop

Constituie un mecanism modern de comunicare , ce ofera posibilitatea utilizatorilor de a-si exprima opiniile si ideile proprii , de-a intra in contact si a schimba informatii, nu numai cu partea reprezentata de comerciant, dar si cu ceilalti utilizatori – clienti ai magazinului virtual .

Prin complexitatea sa poate fi considerat o aplicatie de sine statatoare , integrata in cadrul aplicatiei de baza.

Aplicatia forum este multi-forum si multi-thread , supotand deci mai multe fire de executie.

Datele aplicatiei sunt pastrate in baza de date , in cadrul a 6 tabele.

Forumul poate fi accesat de catre utilizatori , din cadrul paginii de start a aplicatiei.

Aplicatia forum este constituita, in principal, din urmatoarele scripturi:

index.php – genereaza dinamic pagina subiectelor de discutie principale (forum-uri ) .

Sunt listate numele si descrierea tuturor forumurilor existente

Datele sun citite din baza de date prin interogarea tabelei boards.

Se poate selecta forum-ul dorit prin efectuarea unui click pe numele forum-ului respectiv.

forum.php – genereaza dinamic si afiseaza pagina web a forumului selectat.

In partea de sus a paginii apare numele forumului si descrierea-mesaj a acestuia.

Dedesubt sunt incarcate din baza de date si afisate, in structura ierarhica informatiile

corespunzatoare firelor de executie (Thread-uri) ale forumului curent.

Pentru fiecare thread sunt afisate numele , numele utilizatorului ce a creat thread-ul respectiv

si data crearii.

In partea de jos a paginii se afla un formular – in care utilizatorul are posibilitatea dea introduce datele ce vor fi utilizate pentru crearea unui nou thread principal in cadrul forumului curent selectat

In cadrul formularului trebuie specificate:

* numele si adresa de e-mail ale utilizatorului

* numele-subiect al thread-ului ce va fi creat

* un text-messaj corespunzator thread-ului – ce va constitui descrierea acestuia.

* optional, se pot specifica : un titlu-link de legatura la mesajul propus de thread

si adresa URL a paginii ce va fi incarcata in urma activarii acestui link.

* Deasemenea prin bifarea unui checkbox – poate fi selectata optiunea ca toate

mesajele inserate de catre alti utilizatori ca reply la mesajul- thread personal, sa fie trimise

prin e-mail pe adresa de e-mail personala specificata de utilizator mai sus.

Pentru crearea thread-ului trebuie apasat butonul de submit (‘Post Message’) al formularului .

In urma submiterii formulului:

* are loc salvarea in baza de date, in tabela messages, a datelor corespunzatoare noului thread

creat de catre utilizator

* este reapelat scriptul forum.php – care va reafiasa pagina forumului curent, in aceeasta,

aparind acum in cadrul ierarhiei de thread-uri afisate, si fiind deci disponibil si noul thread creat.

In cadrul ierarhiei de thread-uri , apare numele-subiect al fiecarui thread, sub forma unui link.

La urmarea unui astfel de link – este generata dinamic pagina thread-ului astfel selectat.

message.php – genereaza dinamic si afiseaza pagina web a unui thread al forumului curent,

thread ce a fost anterior selectat din ierarhia de thread-uri afisate in pagina forum-ului..

In partea de sus sunt afisate numelele-subiect al thread-ului , datele despre userul care a postat acest mesaj-thread, link-uri specficate de catre user la crearea thread-ului si nu in ultimul rand

mesajul-descriere al thread-ului.

In partea de jos a paginii se afla un formular , similar cu cel din pagina unui forum, in care

un alt user – altul decat utilizatorul ce a creat thread-ul , ce este acum vizualizat – are posibiliatea

de a posta un mesaj de raspuns, care impreuna cu datele adiacente specificate in cadrul

formularului vor avea ca efect crearea unui nou thread – fiu al threadului vizualizat.

In plus, in cadrul acestui formular apare facilitatea , de a insera la inceputul mesajului

ce va fi specificat de catre userul curent, a mesajului pentru care se da acest reply ( adica mesajul corespunzator thread-ului vizualizat).

La sumiterea formularului:

* are loc salvarea in baza de date, in tabela messages, a datelor corespunzatoare noului thread creat ca reply la thread-ul vizualizat

* este reapelat scriptul forum.php – care va reafisa pagina forumului curent, in aceeasta

aparind acum in cadrul ierarhiei de thread-uri si noul thread , creat ca thread-fiu al thread-ului vizualizat.

Procesul poate astfel continua , ori de cate ori din cadrul unui thread curent vizualizat ,un utilizator adauga un mesaj de reply la mesajul acestui thread..

Ca urmare va avea loc crearea unui nou thread-fiu al thread-ului curent vizualizat.

Cand se revine – in pagina forumului curent – in ierarhia de thread-uri va apare pe o pozitie

corspunzatoare si noul thread astfel creat.

Concluzii

In ultimii ani prezenta unei firme pe internet a devenit o chestiune la ordinea zilei, pentru unele din ele fiind chiar o necesitate. Costurile relativ mici (si in continua scadere) au permis chiar si firmelor mici sa aiba site-ul propriu. Dupa realizarea site-ului, in care firma se prezenta si isi descria oferta de produse si servicii, aparea imediat nevoia de a le face publice. Astfel, marketingul a fost rapid extins si adaptat chestiunilor specifice sectorului internet.

Trebuie mentionat ca toate acestea au fost posibile datorita extinderii internetului si in sectorul utilizatorilor (surfer-ilor), fara acestia site-urile pierzandu-si din importanta. Totodata a crescut spectaculos si numarul de calculatoare conectate la internet prin sistemul clasic (dial-up). In aceste conditii lumea virtuala a internetului a devenit o realitate ce tinde chiar sa se substituie metodelor clasice de a afla informatii, de a comunica, de a vinde/cumpara, etc.

In acest sens, aplicatia dezvoltata – constituie o solutie moderna si viabila pentru pentru implementarea unui magazin virtual ,ce are ca obiectiv comercialiarea on-line a produselor sale.

Ca trasaturi definitorii ale aplicatei , se pot mentiona :

Baza de date proiectata si utilizata este una relationala continand 17 tabele, cu o structura complexa si intre care exista legaturi complexe . S-a acordat o atentie deosebita – proiectarii bazei de date , astfel incat organizarea informatiilor sa fie cat mai logica si accesul la date sa se faca intr-um mod optim .

In total au fost scrise peste 80 de programe-script PHP si cateva programe-script JavaScript impartite in cinci module functionale – care conlucreaza impreuna , intr-un mod integrat , la buna functionare a site-ului.

Deasemenea s-a acordat atentie aspectului grafic al aplicatiei , prin folosirea de cod CSS intercalat in cadrul programelor-script si prin folosirea unor aplicatii specifice pentru prelucrareaa grafica a imaginilor utilizate.

Modulul de administrare al aplicatiei – prin dimensiunile si complexitatea sa – poate fi considerat ca un site-web de sine-statator, fiind implementat prin nu mai putin de 30 de scripturi PHP si alte cateva scripturi JavaScript.

Modulul de autentificare al utilizatorilor – ofera prin mecanisme specifice securitatea necesara procesului de comercializare a prodeselor.

Modulul de interfata al aplicatiei – ofera multiple modalitati de acces la informatiile si datele din cadru-l site-ului, punand deasemenea la dispozitia utilizatorului , o serie de facilitati speciale.

Modulul de comunicare cu utilizatorii – a fost dezvoltat , in ideea de a de a imbunatati complexitatea contactului intre comerciant si clienti , de a capta reactiile de feed-back de la utilizatori si nu in ultimul rand pentru a contribui la formarea si dezvoltarea unui cerc de clienti fideli care apreciaza calitatea produselor comercializate.

Deasemenea sectiunea ‘Forum All4Shop’ din cadrul modulului de comunicare cu utilizatorii, a fost dezvoltata ca o aplicatie independenta, fiind apoi integrata in cadrul aplicatiei de baza.

Modularizarea aplicatiei – a condus la o structura flexibila a site-ului , fiind posibil astfel ca si alte componente ale aplicatiei – sectiuni ale celor cinci module principale , sa fie adaugate ulterior – in procesul de dezvoltare a aplicatiei.

Bibliografie

Manualul de referinta PHP , editia 2002

Manualul de referinta MySQL 3.23.38

Manualul de referinta JavaScript 1.3

Programarea in Web – Kris Jamsa , Steve Weakley

(Editura ALL Education , 1999)

Dezvoltarea aplicatiilor Web folosind PHP 4 – Bill McCarty

(Editura Teora ,2002)

MySQL – Paul DuBois (Editura Teora ,2001)

Initiere in JavaScript si tehnologiile Netscape – Dan Somnea

(Editura Tehnica, 1998)

Specificatia de referinta pentru CSS-level1

(pusa la dispozitie pe www.w3.org)

Similar Posts