Sunteți pe pagina 1din 88

Analiza privind proiectarea unei solutii de comert electronic Introducere

Comertul electronic reprezinta multitudinea proceselor software si comerciale necesare proceselor business sa functioneze numai, sau n primul rnd, utiliznd fluxuri digitale de date. Comertul electronic presupune utilizarea Internetului, comunicatii digitale si aplicatii software n cadrul proceselor de vnzare/cumparare, el fiind o componenta a procesului de ebusiness. n momentul de fata exista o multitudine de firme ce utilizeaza comertul electronic, n domenii diverse ca marketing direct, vnzari, servicii pentru clienti, servicii bancare, distribuirea sigura a informatiilor etc. Noile activitati bazate pe Tehnologia informatiei si comunicatiilor (TIC) au un impact deosebit asupra societatii. Avantajele utilizarii noilor tehnologii n activitatile de comert si afaceri are un mare impact asupra afacerilor. De exemplu, se constata ca practicarea marketingului pe Internet este cu 25% mai ieftin dect prin metodele obisnuite. Aplicatiile pentru comert electronic prezinta urmatoarele riscuri: nu exista o a doua sansa, exista un control minimal asupra mediului clientilor, clientii nu sunt cunoscuti si schimbarile sunt foarte rapide n tehnologiile utilizate.

Aplicatii distribuite

Retelele de calculatoare au o extindere rapida ntr-o multitudine de domenii cum ar fi sistemul bancar, administratia publica, alocarea temporara de resurse n hoteluri, rezervarea biletelor de avion, rezervarea biletelor de tren etc. Aplicatiile moderne iau n considerare accesul unui numar ct mai mare de utilizatori, mai ales de cnd se prevede extinderea folosirii cardurilor si creste numarul personalelor care utilizeaza Internetul. Aplicatiile distribuite constau n mai multe componente ce ruleaza pe masini diferite, acestea aplicatii integrnd actiunile componentelor lor. Proiectarea aplicatiilor distribuite se axeaza numai pe detaliile partilor individuale, ci si pe realizarea unei integrari a componentelor distribuite, astfel nct acestea sa coopereze foarte bine ntre ele. Principalele cerinte pentru aplicatiile distribuite sunt:

interfete puternice fiabilitate foarte mare securitate ridicata viteza ridicata de prelucrare si transmitere a datelor. n mod traditional, aplicatiile software distribuite se bazeaza pe arhitectura client/server sau pe arhitectura multi-strat (n-tier).

Figura nr. 1 - Arhitectura client/server

Arhitectura client/server presupune existenta unui server de baze de date (server) si a unui modul software specific aplicatiei (clientul) care prelucreaza datele (logica aplicatiei) si prezinta rezultatele (logica prezentarii). n acest sistem nu exista notiunea de obiecte, partea client lucreaza direct cu tabelele de date si procedurile stocate din baza de date, figura 1. n cadrul arhitecturii multi-strat, un server de aplicatii se interpune intre aplicatia client si serverul de baze de date. Serverul de aplicatii implementeaza logica aplicatiei iar clientul implementeaza logica de prezentare a sistemului. Avantajul major al arhitecturii multi-strat fata de arhitectura client/server l reprezinta cresterea flexibilitatii.

Software pentru comert electronic

Sistemele e-business se bazeaza pe arhitectura Web, ce confera acestora o fiabilitate, scalabilitate si flexibilitate ridicate. Arhitectura Web, figura 2, difera fata de arhitectura multistrat prin doua aspecte: aplicatia client are o complexitate redusa, este un simplu navigator Web nivelul regulilor aplicatiei e-business este bazat pe componente si nu este un singur sistem ce implementeaza ntreaga logica. Componentele client sunt interfetele grafice utilizator si ruleaza n navigatoare Web precum Netscape Navigator sau Internet Explorer. Componentele server ce ruleaza intr-un server de aplicatii, furnizeaza logica procesului de business.

Figura nr. 2 - Arhitectura sistemelor de comert electronic

Software pentru e-business include componente pentru efectuarea sigura aplatilor cu ajutorul cartilor de credit, componente pentru securizarea tranzactiilor, componente pentru realizarea prezentarii. Principalele caracteristici ale unei aplicatii e-business de succes sunt: Utilizabilitatea problemele cu interfata utilizator duc la pierderea clientilor; Siguranta controlul accesului, autentificarea si integritatea sunt foarte importante pentru desfasurarea proceselor de comert electronic; Scalabilitatea - trebuie avut n vedere faptul ca succesul va aduce cresterea cererii;

Fiabilitatea defectele sunt de nenchipuit pentru un sistem business critic, testarea aplicatiilor avnd un rol foarte important; Mentenabilitatea ratele crescute de schimbare sunt fundamentale pentru comertul electronic; Disponibilitatea caderea este prea scumpa pentru a fi tolerata. Eficienta neutilizarea optima a resurselor hardware si software, duce la scaderea performantelor si a scalabilitatii aplicatiilor. Pentru proiectarea aplicatiilor de comert electronic se utilizeaza att standarde tehnologice (XML, COM+, CORBA, RMI) ct si standarde pentru procese de afaceri (OFX pentru plati, OBI, ICE pentru schimburile informationale, SWAP). Aplicatiile de comert electronic necesita specialisti pentru administrarea serverului web, a serverul de baze de date si a serverului de plati electronice.

Testarea software

Testarea software este procesul cautarii erorilor n program, indiferent daca acestea au cauze logice sau fizice. Obiectivul principal al testarii software este gasirea erorilor, altfel spus, de a identifica neconcordanta dintre ceea ce este planificat sa efectueze aplicatia si ceea ce realizeaza n realitate. Testarea nu resupune identificarea cauzei erorilor si corectia acestora, acestea fiind activitati pecifice depanarii. Testarea este privita ca o componenta majora a calitatii software. Un produs software testabil se considera ca fiind inteligibil (structurat, concis si auto-descriptibil) si masurabil (accesibil si cuantificabil). Testarea software este necesara pentru asigurarea calitatii, dar este un proces scump si laborios, ce consuma de la o treime pna la o jumatate din costul unui proiect. n procesul dezvoltarii software, exista un numar de produse care trebuie testate: modelele cerintelor; modelele analizei si proiectarii; modele arhitecturale; componentele individuale; codul integrat al sistemului. De fapt, activitatea de testare trebuie asociata cu fiecare pas n procesul de dezvoltare. Acest lucru permite descoperirea erorilor devreme n procesul de dezvoltare software avnd drept consecinta costuri mai mici de corectie. Exista doua strategii de testare: testarea functionala si testarea structurala. Testarea structurala necesita ntelegerea structurii interne a programului (codul sursa) si pune accentul pe acoperirea prin test a cailor si ramificatiilor programului. Testarea functionala nu necesita cunoasterea structurii interne a programului, cunostinte despre program, n schimb necesita cunoasterea a cum ar trebui sa fie comportamentul extern al programului, bazndu-se pe specificatiile acestuia. n cadrul ciclului de dezvoltare software exista testarea de module, testarea de integrare, testarea de sistem, testarea de acceptare. Corespondenta dintre fazele ciclului de dezvoltare software si etapele testarii este prezentata n figura 3.

Figura nr. 3 - Nivelele testarii n cadrul ciclului de dezvoltare software.

Testarea software orientat obiect are pe lnga obiectivul general al stabilirii masurii n care produsul software realizeaza sarcinile date n specificatii, obiective specifice legate de: testarea functiilor membre ale fiecarei clase testarea gradului de ncapsulare si a efectelor acestuia testarea efectelor induse de nivelele de mostenire si de derivare testarea efectelor induse de polimorfismul functiilor membre testarea interactiunilor dintre clase. Spre deosebire de software dezvoltat prin alte metode, n cazul programarii orientate obiect, testarea vizeaza si masura n care clasele sunt proiectate n vederea reutilizarii. Adica, se evidentiaza gradul de generalitate si mai ales concordanta dintre specificatiile fiecarei functii si ceea ce efectiv functia realizeaza.

Testarea aplicatiilor distribuite

Testarea aplicatiilor bazate pe arhitectura Web, n plus fata de testarea aplicatiilor clasice, necesita o serie de teste specifice cum ar fi: testarea de ncarcare, testarea de compatibilitate, testarea functionala, testarea continutului, testarea serverului Web, testarea securitatii, testarea serverului de aplicatii si testarea bazelor de date. Testarea de ncarcare se utilizeaza pentru a verifica daca site-ul Web poate gestiona un anumit numar de utilizatori care l acceseaza concurent n limite acceptabile ca timp de raspuns. Prin testarea de compatibilitate urmareste aspectul si comportamentul site-ului Web n raport cu o varietate de sisteme de operare si de navigatoare Internet. Aceasta testare scoate n evidenta problemele cu controalele ActiveX, applet-urile Java, functiile JavaScript sau VBScript si formulare din pagini. La ora actuala exista peste 100 de combinatii posibile ntre diverse sisteme de operare Windows si diverse versiuni ale navigatoarelor Netscape si Internet Explorer. Testarea functionala se realizeaza pentru a constata daca site-ul se comporta conform cu specificatiile sale. Detaliile acestui tip de testare depind de natura site-ului

Web. n general consta n verificarea legaturile paginilor, testarea formularelor, verificarea tranzactiilor pentru comertul electronic si pentru baze de date, testarea applet-urilor Java. Pentru testarea continutului se urmareste corectitudinea si asezarea n pagina a textelor, imaginilor si fisierelor de animatie si video din cadrul site-ului. Testarea serverul Web are n vedere testarea interactiunilor dintre serverul Web si serverul de aplicatii, verificarea integritatii bazei de date n cadrul serverului de baze de date, verificarea faptului ca scripturile ASP, PHP sau JSP se executa corect pe server. Testarea securitatii tranzactiilor efectuate este foarte importanta pentru aplicatiile de comert electronic avnd n vedere faptul ca sunt vehiculate date confidentiale, la care daca au acces persoane neautorizate sau rauvoitoare se pot produce pierderi materiale importante. Testarea serverului de aplicatii se realizeaza tinndu-se seama de caracteristicile functionale si structurale ale acestuia. Se testeaza componentele serverului, folosind metode clasice de testare, precum si metode de testare ce iau n considerare tranzactiile si comunicatiile asincrone dintre aceste componente. Testarea bazelor de date presupune verificarea executarii corecte a interogarilor si operatiilor de adaugare si actualizare a datelor, precum, si verificarea conexiunilor dintre site-ul Web si baza de date. Prin testarea performantelor se masoara comportamentul site-ului Web n diverse conditii de trafic. Problemele la cele trei companii prezentate anterior au aparut datorita testarii incomplete sau incorecte a functionalitatii, utilizabilitatii, performantelor, volumul, stresului si a scalabilitatii. n prezent exista o multime de instrumente pentru testarea automata a aplicatiilor distribuite bazate pe web. Astfel de aplicatii precum eValid, Rational SiteCheck, SilkPerformer, LoadRunner au urmatoarele caracteristici: ofera suport pentru testarea functionala analizeaza integritatea legaturile dintre pagini analizeaza ncarcarea si capacitatii serverului web ofera o serie de indicatii pentru reglaje fine ale site-ului. Testarea aplicatiilor de comert electronic se realizeaza fie de catre echipe specializate n testare din cadrul departamentului de asigurare a calitatii al firmei, fie de catre o firma specializata n testare din (outsourcing). Elementele care stau la baza deciziei de contractare a unei firme specializate n testare sunt: lipsa resurselor pentru realizarea pe termen lung a

testelor, dorinta de asigurare a unei obiectivitati asupra evaluarii calitatii si nu n ultimul rnd analiza cost-beneficiu realizata pe baza estimatiei costurilor privind testarea.

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 electronice/informatice) corespunzatoare urmatoarelor roluri:

- 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.

- 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.

- 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 hypertext. 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 mouseul 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 clientserver, 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/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, comunicnd 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 pna 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 renceput 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 crescnda 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 (incluznd 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 ntlnit 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, activndu-se de la sine de mai multe ori, asigurnd 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 dect 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)

1.3.1. Introducere

Scurt istoric PHP a fost conceput n anul 1994 de Rasmus Lerdorf. El folosea versiuni personale de PHP ca s monitorizeze cine i vizita pagina sa personal. Prima versiune de PHP care putea fi folosit de toat lumea a fost disponibil n anul 1995 i a fost cunoscut sub numele de Personal Home Page Tools. Aceasta consta dintr-un parser foarte simplu care recunotea cteva macro-uri i un numr limitat de utiliti care erau folosite pe paginile personale la acea vreme (cum ar fi guestbook, counter). Parserul de PHP a fost rescris la jumtatea anului 1995 i s-a numit PHP/FI Version 2. FI vine Form Interpreter, un alt pachet pe care Rasmus l-a scris pentru interpretarea formelor HTML. El a combinat scripturile din Personal Home Page Tools cu Form Interpretor i a adugat suport pentru mSQL i astfel a aprut PHP/FI. PHP/FI s-a rspndit foarte repede i a devenit foarte popular, deoarece muli programatori au contribuit cu cod la perfecionarea lui. Sunt greu de dat nite statistici exacte, dar se estimeaz c la sfritul anului 1996 PHP/FI era folosit de aproximativ 15.000 de site-uri web din toat lumea. Pe la mijlocul anului 1997 numrul acestora a crescut la 50.000. Tot n anul 1997 s-a observat o schimbare n dezvoltarea PHP-ului. PHP nu mai era proiectul propriu al lui Rasmus, ci era rezultatul eforturilor unei echipe de programatori, deoarece la perfecionarea lui contribuiser muli programatori. Parserul a fost rescris de Zeev Surasky i Andi Gutmans i noul parser a format bazele PHP Version 3. Mare parte din codul PHP/FI a fost portat n PHP3 i alt parte de cod a fost complet rescris. Ultima versiune, PHP4, folosete motorul de script Zend ca s ofere performane mai mari, suport mult mai multe biblioteci i extensii, i ruleaz ca un modul natural server-ului de web.

Ce este PHP?

PHP (oficial PHP: Hypertext Preprocesor) este un limbaj de script HTML integrat de tip server-side, deci codul se execut pe server. Este diferit de scripturile CGI scrise n alte limbaje ca Perl sau C++, n care se scrie mult cod pentru a genera HTML, deoarece se scrie script HTML cu cod de PHP ncorporat. Codul PHP este ncadrat de tag-uri speciale care ne permit s intrm sau s ieim din modul PHP.

Ce face PHP?

La o privire de ansamblu, PHP poate s fac tot ceea ce face alt programe CGI, cum ar fi: culegerea de date, generare dinamic de cuprinsuri pentru pagini, trimite i primete cookieuri. Probabil cea mai puternic i cea mai important caracteristic a PHP este suportul pentru o gam ct mai larg de baze de date . Cu PHP este foarte simplu de citit din baze de date i de scris n baze de date. PHP suport urmtoarele tipuri de baze de date: AdabasD, dBase, Empress, FilePro, HyperWave, IBM DB2, Informix, Ingres, InterBase, Frontbase, mSQl, Direct MS-SQL, MySQL, ODBC, Oracle, Ovrimos, PostgreSQL, Solid, Sysbase, Velocis, UNIX dbm. PHP prezint suport, de asemenea, i pentru alte servicii de reea folosind protocoale cum ar fi: IMAP, SNMP, NNTP, POP3, HTTP i altele mai puin importante. Se pot deschide noduri brute de comunicaie n reea care interacioneaz folosind alte protocoale de comunicaie.

1.3.2. Referine

Sintaxa limbajului

Cnd PHP ncepe s interpreteze un fiier, el doar o s afieze textul pe care l ntlnete. Aa c dac avem un fiier cu extensie .html i schimbm extensia n .php fiierul o s fie corect interpretat n continuare. Dac dorim s introducem declaraii PHP la un anumit punct din fiier, trebuie s indicm intrarea n modul PHP. Aceasta se face prin mai multe metode: 1. <? echo ("this is the simplest, an SGML processing instruction\n"); ?> <?= expression ?> This is a shortcut for "<? echo expression ?>"

2. <?php echo("if you want to serve XHTML or XML documents, do like this\n"); ?>

3. <script language="php"> echo ("some editors (like FrontPage) don't like processing instructions"); </script>

4. <% echo ("You may optionally use ASP-style tags"); %> <%= $variable; # This is a shortcut for "<%echo .." %>

PHP permite i folosirea unor structuri mai avansate: <?php

if ( boolean-expression ) { ?> <strong>This is true.</strong> <?php

} else { ?> <strong>This is false.</strong> <?php }

Separarea instruciunilor se face la fel ca n Perl sau n C, terminnd fiecare declaraie cu caracterul ;. Tag-ul de nchidere implic de asemenea sfritul unei declaraii, deci urmtoarele dou expresii sunt echivalente: 1. <?php echo "This is a test"; ?>

2. <?php echo "This is a test" ?>

Comentariile sunt la fel ca n C i ca n UNIX, folosind secvenele speciale // ... sau /* ..... */.

Tipuri

PHP suport 8 tipuri de baz: Patru tipuri scalare: boolean integer floating-point number

string Dou tipuri compuse: array object Dou tipuri speciale: resource null

Tipul boolean. Este cel mai simplu tip variabil. O expresie boolean exprim o valoare de adevr. Poate fi adevrat sau fals. Pentru a specifica valoare unei variabile booleene se folosete TRUE sau FALSE. Not: Tipul boolean a fost introdus n PHP4.

Exemplu: $foo = True; // atribuie valoarea TRUE variabilei $foo

Tipul integer. O variabil de tip integer este un numr ntreg cu semn. Variabilele de tip ntreg pot fi specificate n zecimal, n hexazecimal sau n octal, opional putnd fi precedate de semn (+ sau -). Dac se folosete notaia n octal numrul trebuie precedat de 0, iar dac se folosete notaia n hexazecimal numrul trebuie precedat de 0x.

Exemple: $a = 1234; # numr zecimal $a = -123; # numr negativ $a = 0123; # numr octal (echivalentul lui 83 zecimal) $a = 0x1A; # numr hexazecimal (echivalentul lui 26 zecimal)

Tipul floating-point number. Numerele de tip floatin-point pot fi specificate n felul urmtor:

$a = 1.234; $a = 1.2e3; $a = 7E-10;

Tipul string. irurile de caractere pot fi specificate folosind unul sau dou seturi de caractere speciale. Dac irul este nchis ntre ghilimele (), atunci variabilele vor fi expandate. Ca i n C i Perl caracterul backslash (\) poate fi folosit pentru a specifica caractere speciale. Variabilele de acest tip pot fi convertite. Al doilea mod de reprezentare a irurilor este prin nchiderea lui ntre apostrofuri (). Cnd irul este reprezentat n acest fel singurele secvene speciale care pot fi interpretate sunt \\ i \. Variabilele nu sunt expandate cnd irurile sunt reprezentate n acest mod. Alt mod reprezentare este folosind sintaxa here doc (<<<<). Aceasta trebuie s fie precedat de un identificator nainte de <<<<, dup aceea irul de caractere i la sfrit identificatorul. Exemplu: <?php $str = <<<EOD Example of string spanning multiple lines using heredoc syntax. EOD;

/* More complex example, with variables. */ class foo { var $foo; var $bar;

function foo() { $this->foo = 'Foo';

$this->bar = array('Bar1', 'Bar2', 'Bar3'); } }

$foo = new foo(); $name = 'MyName';

echo <<<EOT My name is "$name". I am printing some $foo->foo. Now, I am printing some {$foo->bar[1]}. This should print a capital 'A': \x41 EOT; ?> irurile de caractere pot fi concatenate folosind caracterul .. Exemple: <?php /* Assigning a string. */ $str = "This is a string";

/* Appending to it. */ $str = $str . " with some more text";

/* Another way to append, includes an escaped newline. */ $str .= " and a newline at the end.\n";

/* This string will end up being '<p>Number: 9</p>' */ $num = 9; $str = "<p>Number: $num</p>";

/* This one will be '<p>Number: $num</p>' */ $num = 9; $str = '<p>Number: $num</p>';

/* Get the first character of a string */ $str = 'This is a test.'; $first = $str[0];

/* Get the last character of a string. */ $str = 'This is still a test.'; $last = $str[strlen($str)-1]; ?>

Tipul array. Tipul array n PHP este de fapt o hart ordonat. O hart este un tip care atribuie valori la index. Acest tip este optimizat pentru mai multe reprezentri, astfel ca poate fi un vector, o list, o colecie, un dicionar, o stiv, o coad sau altceva. Un index poate fi o variabil integer nenegativ sau string. array( [key =>] value , ... ) // key este un integer nenegativ sau un string

// value poate fi orice

O varibil de tip array se poate modifica specificnd explicit valorile. $arr[key] = value; $arr[] = value;

Tipul object. Pentru a iniializa un obiect, se folosete declaraia new pentru a atribui o instan a obiectului unei variabile. Exemplu: <?php class foo { function do_foo() { echo "Doing foo."; } }

$bar = new foo; $bar->do_foo(); ?>

Tipul resource. Tipul resource este o variabil special, folosit pentru a referi o alt variabil resource extern. Variabilele resource sunt create cu funcii speciale.

Not: Tipul resource a fost introdus n PHP4.

Datorit sistemului de numrare a referinelor introdus de PHP4 cu motorul Zend, se detecteaz automat cnd o resurs nu mai este folosit.

Tipul Null . Valoarea special Null reprezint o variabil care nu are nici o valoare.

Not: Tipul resource a fost introdus n PHP4.

Exemplu: $var = Null;

Variabile

Variabilele n PHP sunt reprezentate prin semnul $ urmat de numele variabilei. Numele variabilelor respect aceleai reguli ca i alte etichete n PHP. Un nume valid de variabil ncepe cu o liter sau cu _, urmat de un numr oarecare de litere, cifre sau _. Variabilelor li se pot atribui valori explicit.

Exemplu: <?php $foo = 'Bob'; // Assign the value 'Bob' to $foo $bar = &$foo; // Reference $foo via $bar. $bar = "My name is $bar"; // Alter $bar... echo $foo; // $foo is altered too. echo $bar;

?>

Variabile predefinite. PHP furnizeaz un numr mare de variabile predefinite oricrui script care ruleaz la un moment dat. Multe din aceste variabile nu pot fi total documentate deoarece depind de server-ul web pe care ruleaz, de versiunea i configurrile server-ului si de ali factori. Pentru a putea vedea variabilele predefinite i alte informaii utile se poate folosi funcia phpinfo(). Variabilele predefinite pot fi variabile specifice server-ului Apache, variabile de mediu sau variabile PHP. Variabilele specifice server-ului Apache sunt: $GATEWAY_INTERFACE $SERVER_NAME $SERVER_SOFTWARE $SERVER_PROTOCOL $REQUEST_METHOD $QUERY_STRING $DOCUMENT_ROOT $HTTP_ACCEPT $HTTP_ACCEPT_CHARSET $HTTP_ACCEPT_ENCODING $HTTP_ACCEPT_LANGUAGE $HTTP_CONNECTION $HTTP_HOST $HTTP_REFERER $HTTP_USER_AGENT

$REMOTE_ADDR $REMOTE_PORT $SCRIPT_FILENAME $SERVER_ADMIN $SERVER_PORT $SERVER_SIGNATURE $PATH_TRANSLATED $SCRIPT_NAME $REQUEST_URI

Variabilele de mediu sunt importate n namespace-ul global al PHP din mediul n care ruleaz parserul de PHP. Multe din aceste variabile sunt furnizate de shell-ul sistemului unde ruleaz PHP. Variabilele PHP sunt create chiar de PHP. Variabilele $HTTP_*_VARS sunt disponibile doar dac este activat opiunea track_vars n fiierul de configurare al PHP. n continuare vom prezenta lista variabilelor PHP: $argv $argc $PHP_SELF $HTTP_COOKIE_VARS $HTTP_GET_VARS $HTTP_POST_VARS $HTTP_POST_FILES $HTTP_ENV_VARS $HTTP_SERVER_VARS

Variabile variabile . Putem avea nume de variabile variabile, adic un nume de variabil care poate fi setat i folosit dinamic. O variabil variabil poate lua valoarea unei variabile i trateaz aceast valoare ca fiind numele variabilei.

Variabile din afara PHP . Aceste variabile pot proveni din forme HTML (metodele GET i POST), variabile IMAGE SUBMIT, cookie-uri HTTP sau variabile de mediu.

Constante

PHP definete mai multe constante i furnizeaz mecanisme pentru a defini mai multe n timpul execuiei. Constantele se aseamn cu variabilele, cu excepia a dou fapte i anume: constantele trebuie definite folosind funcia define() i valoarea lor nu mai poate fi modificat. Constantele definite de PHP sunt: __FILE__ __LINE__ PHP_VERSION PHP_OS E_ERROR E_WARNING E_PARSE E_NOTICE E_ALL

Exemple: 1. <?php define("CONSTANT", "Hello world."); echo CONSTANT; // outputs "Hello world." ?>

2. <?php function report_error($file, $line, $message) { echo "An error occured in $file on line $line: $message."; }

report_error(__FILE__,__LINE__, "Something went wrong!"); ?>

Expresii

Expresiile sunt cele mai importante construcii ale PHP. n PHP, aproape orice scrii este o expresie. Modul cel mai simplu i cel mai corect de a defini o expresie este tot ceea ce are o valoare. Cele mai primitive forme de expresii sunt variabilele i constantele. Exemple mai complexe de expresii sunt funciile.

Operatori

n PHP avem urmtoarele tipuri de operatori: operatori aritmetici operatori de atribuire operatori unari operatori de comparaie operatori pentru controlul erorilor operatori de execuie operatori pentru incrementare/decrementare operatori logici operatori string

Structuri de control

Toate scripturile PHP sunt compuse dintr-o serie de declaraii. O declaraie poate fi o atribuire, apelul unei funcii, un ciclu, o declaraie condiional chiar dac declaraia nu face nimic. Declaraiile se termin de obicei cu ;. n plus, declaraiile pot fi grupate n grupuri de declaraii fiind ncadrate ntre acolade. Un grup de declaraii este la rndul lui o declaraie. Diferitele tipuri de declaraii sunt urmtoarele: if else elseif while do ... while for

foreach break continue switch declare require() include() require_once() include_once() Exemple: 1. Exemplu if if ($a > $b) { print "a is bigger than b"; $b = $a; }

2. Exemplu else if ($a > $b) { print "a is bigger than b"; } else { print "a is NOT bigger than b"; }

3. Exemplu elseif if ($a > $b) {

print "a is bigger than b"; } elseif ($a == $b) { print "a is equal to b"; } else { print "a is smaller than b"; }

4. Exemplu while 1 $i = 1; while ($i <= 10) { print $i++; /* the printed value would be $i before the increment (post-increment) */ }

5. Exemplu while 2 $i = 1; while ($i <= 10): print $i; $i++; endwhile;

6. Exemplu do ... while do { if ($i < 5) {

print "i is not big enough"; break; } $i *= $factor; if ($i < $minimum_limit) { break; } print "i is ok";

process i...

} while(0);

7. Exemplu for $i = 1; for (;;) { if ($i > 10) { break; } print $i; $i++; }

8. Exemplu foreach

reset ($arr); while (list(, $value) = each ($arr)) { echo "Value: $value<br>\n"; }

foreach ($arr as $value) { echo "Value: $value<br>\n"; }

9. Exemplu break $arr = array ('one', 'two', 'three', 'four', 'stop', 'five'); while (list (, $val) = each ($arr)) { if ($val == 'stop') { break; /* You could also write 'break 1;' here. */ } echo "$val<br>\n"; }

$i = 0; while (++$i) { switch ($i) { case 5: echo "At 5<br>\n";

break 1; /* Exit only the switch. */ case 10: echo "At 10; quitting<br>\n"; break 2; /* Exit the switch and the while. */ default: break; } }

10. Exemplu continue while (list ($key, $value) = each ($arr)) { if (!($key % 2)) { // skip odd members continue; } do_something_odd ($value); }

$i = 0; while ($i++ < 5) { echo "Outer<br>\n"; while (1) { echo " Middle<br>\n"; while (1) { echo " Inner<br>\n"; continue 3;

} echo "This never gets output.<br>\n"; } echo "Neither does this.<br>\n"; }

11. Exemplu switch if ($i == 0) { print "i equals 0"; } if ($i == 1) { print "i equals 1"; } if ($i == 2) { print "i equals 2"; }

switch ($i) { case 0: print "i equals 0"; break; case 1: print "i equals 1"; break; case 2:

print "i equals 2"; break; }

12. Exemplu declare function tick() { static $i; printf("[tick i=%d]\n", ++$i); }

register_tick_function("tick");

declare (ticks = 2) { 1; 2; 3; }

13. Exemplu require() require ("http://someserver/file.php?varone=1&vartwo=2");

$varone = 1; $vartwo = 2; require ("file.txt"); /* Works. */ require ("file.php"); /* Works. */

14. Exemplu include() $files = array ('first.inc', 'second.inc', 'third.inc'); for ($i = 0; $i < count($files); $i++) { include $files[$i]; }

Funcii

O funcie poate fi declarat folosind urmtoarea sintax:

function foo ($arg_1, $arg_2, ..., $arg_n) { echo "Example function.\n"; return $retval; }

Orice cod valid de PHP poate s apare n interiorul declaraiei unei funcii, chiar dac reprezint declaraia altei funcii sau clase. Not: n PHP3, funciile trebuie declarate nainte de a fi apelate. n PHP4 nu exist asemenea restricii. Not: PHP3 nu suport funcii cu numr variabil de argumente, dect argumentele cu care a fost declarat. PHP4 accept ambele tipuri de funcii. Informaiile sunt transmise funciilor printr-o list de argumente, care sunt variabile sau constante separate prin virgul. PHP suport transmiterea argumentelor unei funcii prin valoare, prin referin sau prin valori predefinite ale argumentelor. Prin definiie, argumentele funciilor sunt transmise prin valoare. Dac dorim s transmitem argumentele unei funcii prin referin trebuie ca numele argumentului s fie precedat de &.

Dac argumentul este transmis prin valoarea, modificarea valorii sale n corpul funciei nu afecteaz valoarea argumentului n afara funciei. Dac dorim s modificm valoarea unui argument trebuie s-l transmitem prin referin. Exemple: 1. Transmiterea argumetului prin referin function add_some_extra(&$string) { $string .= 'and something extra.'; } $str = 'This is a string, '; add_some_extra($str); echo $str; // outputs 'This is a string, and something extra.'

2. Transmiterea argumentelor prin valoare i apoi prin referin function foo ($bar) { $bar .= ' and something extra.'; } $str = 'This is a string, '; foo ($str); echo $str; // outputs 'This is a string, ' foo (&$str); echo $str; // outputs 'This is a string, and something extra.'

3. Transmiterea argumetelor prin valori predefinite

function makecoffee ($type = "cappucino") { return "Making a cup of $type.\n";

} echo makecoffee (); echo makecoffee ("espresso");

Funciile ntorc valori dac se folosete declaraia opional return.

Exemplu: function square ($num) { return $num * $num; } echo square (4); // outputs '16'.

Clase i obiecte

O clas este o colecie de variabile i funcii care lucreaz cu aceste variabile. Declararea unei clase se poate face n felul urmtor: <?php class Cart { var $items; // Items in our shopping cart

// Add $num articles of $artnr to the cart

function add_item ($artnr, $num) {

$this->items[$artnr] += $num; }

// Take $num articles of $artnr out of the cart

function remove_item ($artnr, $num) { if ($this->items[$artnr] > $num) { $this->items[$artnr] -= $num; return true; } else { return false; } } } ?>

Adesea avem nevoie de clase cu variabile i funcii similare cu ale altei clase deja existente. n fond, este o idee bun s avem o clas generic pe care s o folosim n toate proiectele i s o adaptm specificaiilor proiectului. Ca s putem face acest lucru, clasele trebuie s fie extinse din alte clase. Acesta este conceptul de motenire ntlnit n Programarea Orientat pe Obiecte. Clasa extins sau derivat are toate variabilele i funciile clasei de baz i funciile pe care le adugm n noua definiie. O clas extins este totdeauna dependent de o singur clas de baz, ceea ce nseamn c nu putem avea motenire multipl. n PHP pentru derivarea claselor se folosete cuvntul cheie extends. Exemplu: class Named_Cart extends Cart { var $owner;

function set_owner ($name) { $this->owner = $name; } }

$ncart = new Named_Cart; // Create a named cart $ncart->set_owner ("kris"); // Name that cart print $ncart->owner; // print the cart owners name $ncart->add_item ("10", 1); // (inherited functionality from cart) Constructorii sunt funcii din clas care sunt apelai automat cnd crem o nou instan a clasei cu funcia new. O funcie devine constructor n momentul n care acelai nume ca i clasa. Exemplu: // Works in PHP 3 and PHP 4. class Auto_Cart extends Cart { function Auto_Cart () { $this->add_item ("10", 1); } }

Pentru a putea referi variabile i funcii din clasa de baz trebuie folosit cuvntul cheie parent, care se refer la numele clasei de baz, acelai ca cel dat n declaraia extends a clasei folosite. Exemplu: class A { function example() { echo "I am A::example() and provide basic functionality.<br>\n";

} }

class B extends A { function example() { echo "I am B::example and provide additional functionality().<br>\n"; parent::example(); } }

$b = new B;

// This will call B::example(), which will in turn call A::example(). $b->example();

PHP permite i serializarea obiectelor n sesiuni prin funciile serialize() i unserialize().

1.3.3. Funcii Network

fsockopen deschide un soclu pentru conexiune Internet sau Unix gethostbyname ntoarce adresa IP a unui host dup nume gethostbyaddr ntoarce numele unui host dup adresa IP getprotobyname ntoarce numrul protocolului asociat cu un nume getprotobynumber ntoarce numele protocolului asociat cu un numr

getservbyname ntoarce numrul portului asociat cu un anumit serviciu i protocol getservbyport ntoarce serviciul asociat unui port i protocol socket_get_status ntoarce informaii despre soclul curent socket_set_blocking blocheaz/deblocheaz un soclu socket_set_timeout stabilete timpul de expirare a soclului

1.3.4. Funcii HTTP

header trimite un header HTTP headers_sent ntoarce valoarea TRUE dac headerele au fost trimise setcookie trimite cookie

1.3.5. Funcii String

echo afieaz unul sau mai multe iruri de caractere md5 calculeaz o parol dup algoritmul md5 pentru un ir de caractere

1.3.6. Funcii Variable

empty verific dac o variabil este setat gettype ntoarce tipul unei variabile intval ntoarce valoarea ntreag a unei variabile is_array verific dac o variabil este de tip array is_bool verific dac o variabil este boolean is_double verific dac o variabil este de tip double

is_int verific dac o variabil este de tip ntreg is_null verific dac o variabil este de tip null is_numeric verific dac o variabil este numeric is_object verific dac o variabil este de tip obiect is_resource verific dac o variabil de tip resource is_scalar verific dac o variabil scalar is_string verific dac o variabil este de tip string isset verific dac o variabil este setat settype seteaz tipul unei variabile

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 JavaScript (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 ferestre, 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 dect 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 strns legate de Java - motiv pentru care denumirea a fost schimbata n JavaScript. Dupa finalizarea limbajului, Netscape si Sun lau 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, obtinnd 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 cnd a intervenit Microsoft. ntelegnd importanta scriptarii Web, Microsoft a dorit sa ofere suport si pentru JavaScript. Cnd Netscape a preferat sa

acorde licenta de tehnologie companiei Microsoft n loc sa o vnda, Redmond a analizat JavaScript, bazndu-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 cnd au ncercat sa desfasoare site-uri 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, att Netscape ct si Microsoft au propriile lor implementari ale limbajului (JavaScript si JScript) si continua sa extinda limbajul dincolo de standardul de baza. Pe lnga 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 site-urile Internet) unde se nregistreaza o abundenta de utilizatori de Microsoft Internet Explorer. Chiar tinnd seama de VBScript, JavaScript a devenit cunoscut ca limbajul de scriptare standard pentru Web. ntruct 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, cnd 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, citirea 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 mouseului, 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, scripturile 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 altfel, 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 variabila 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-ulu - 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. definitivarea aspectului grafic al site-ului testarea functionalitatii site-ului si a facilitatilor puse la dispozitie in cadrul sau.

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.

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.

Facilitatile de 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. Utilizatorul poate ajunge in posesia acestor oferte prin e-mail. 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.

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 .

In cadrul paginii unui produs este disponibila urmatoarea facilitate: mareste imaginea - permite afisarea pozei de dimensiune mare , a produsului, prin mouseclick pe poza.

2.3 Structurarea bazei de date

Descriere generala

Baza de date folosita este o baza de date relationala de tip MySQL, denumita brainerz. Ea contine urmatoarele 23 de tabele: - categorii - tabela ce descrie categoriile de produse si relatiile dintre acestea (ierarhia de categorii)

- subcategorii - tabela ce descrie subcategoriile de produse si relatiile dintre acestea (ierarhia de categorii) - produse - tabela ce descrie produsele comercializate - clienti - tabela ce descrie/contine date despre utilizatorii inregistrati - tranzactie - tabela ce descrie caracteristicile fiecarui produs - admin - tabela ce descrie producatorii produselor ce sunt comercializate - guest - tabela ce contine datele rezultate in urma voturilor acordate de catre utilizatori in procesul de votare a calitatii site-ului. - judete - tabela ce descrie ofertantii (furnizorii) produselor ce sunt comercializate - news - tabela ce descrie/contine date despre topul de noutati produse . - statistici_web - tabela ce descrie/contine date despre cei care acceseaza pagina - transportatori - tabela ce descrie/contine date despre companiile de transport - valuta - tabela ce descrie comenzile de produse date de catre utilizatori In afara acestor 12 tabele, mai intalnim inca 6 tabele ce contin preturile de transport (in functie de greutate si de zona) a diverselor companii transportatoare (air_mail, economy_express, ems, global_express, ground_mail, wpx) si inca 4 tabele ce prezinta timpul de transport specifice fiecarei companii (zile_ee, zile_ee, zile_rp, zile_wpx).

1.Tabela categorii

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

Field Type Null id int(11) No

Default

den_cat_ro

varchar(255) No

2.Tabela subcategorii

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

Field Type Null id int(11) No

Default

categorie den_subcat_ro

int(11) No

varchar(255) No

Campul categorie corespunde valorii id-ului din tabela categorii.

3.Tabela produse

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

Field Type Null id_produs

Default No 0.00 0.00 0.00

bigint(20)

pret_vanzare decimal(8,2) No greutate lungime decimal(4,2) No decimal(4,2) No 0.00

latime decimal(4,2) No inaltime volum

decimal(4,2) No float(8,4) No

0.00 0.0000 0

categorie_produs

int(11) No

unitati_vandute

int(9) No 0 NULL

subcategorie int(11) No gen subgen den_produs_ro desc_produs_ro locatie activ varchar(25) Yes

varchar(255) Yes

NULL NULL NULL

varchar(255) Yes longtext 0 Yes

int(11) No int(11) No 0

In functie de campurile greutate, lungime, latime, inaltime, volum este calculat pretul de transport. In campurile gen si subgen poate fi introdusa o descriere ce va fi folosita de modulul de cautare. In functie de valoarea campului activ, un produs este afisat sau nu pe site.

4.Tabela clienti

Aceasta tabela contine informatii specifice despre fiecare dintre utilizatorii inregistrati.Informatiile sunt colectate in urma procesului de inregistrare a unui nou utilizator proces desfasurat in mai multe etape. Tabela are urmatoarea structura:

Field Type Null user_id user_nume user_pass f_name l_name

Default No No No No No

bigint(20) varchar(20) varchar(25) varchar(30) varchar(75)

adresa cod_tara telefon

longtext varchar(20) varchar(50)

No No No

email varchar(100) No data_nastere data_inreg date No 0000-00-00 No No 0000-00-00 00:00:00 1900 0 0 No No 0000-00-00 00:00:00 0000-00-00 00:00:00

datetime

valoare_cumparaturi float numar_achizitii media_achizitii ultima_cumparare ultima_logare advertising title

int(11) No float No

datetime datetime

int(11) No No

0 0

tinyint(4)

Campul advertising precizeaza daca utilizatorul a specificat faptul ca este de acord sa primeasca e-mailuri publicitare.

5.Tabela tranzactie

In aceasta tabela fiecare inregistrare contine toate datele corespunzatoare unei comenzi de produse facuta de catre un utilizator-client. Tabela are urmatoarea structura:

Field Type Null

Default No Yes No NULL 0

id_tranzactie bigint(20) data_tranzactie id_client_tranzactie

datetime bigint(20)

pret_total_tranzactie double No pret_transp double(4,2) No No

0 0.00

transportator varchar(50)

pret_platit_tranzactie double No produse_tranzactie mediumtext

0 No No No No 1

destinatar_tranzactie tinytext destinatie_tranzactie mediumtext mod_plata_tranzactie stare_tranzactie

tinytext tinyint(4) No

6.Tabela admin

Aceasta tabela contine parola pentru admin si data ultimei operari.

Field Type Null admin_password admin_lastlogin

Default varchar(255) No datetime No 0000-00-00 00:00:00

7.Tabela guest

Aceasta tabela descrie si contine datele corespunzatoare fiecarui mesaj din sectiunea suggestions.

Field Type Null id bigint(20)

Default No

user_id mesaj text stare data tip

int(11) No No No No No

tinyint(4) datetime tinyint(4)

0 0000-00-00 00:00:00 0 No

nickname

varchar(50)

8.Tabela judete

Field Type Null id_judet denumire 9.Tabela news

Default No No

tinyint(4) varchar(80)

Tabela contine stirile introduse de administrator.

Field Type Null id titlu bigint(20)

Default No

varchar(255) No mediumtext No No 0000-00-00 00:00:00

continut data

datetime

10.Tabela statistici_web

Aceasta tabela contin date despre sistemul de operare, versiune de browser (campul HTTP_USER_AGENT ), ip (campul REMOTE_ADDR) ale celor care intra pe site.

Field Type Null id bigint(20)

Default No varchar(200) No

HTTP_USER_AGENT REMOTE_ADDR date datetime

varchar(200) No No 0000-00-00 00:00:00

11.Tabela transportatori

Contine date despre companiile de transport.

Field Type Null idtara int(3) No tara char(30)

Default

No tinyint(1) tinyint(1) No No 0 0 No No No 0 0 0 No No 0 0

global_express economy_express ems wpx zonatnt zonarp zonadhl tinyint(1) tinyint(1)

tinyint(1) tinyint(1) tinyint(1)

12.Tabela valuta

Tabela contine informatii referitoare la paritatea leu/dolar si leu/euro.

Field Type Null id usd euro tinyint(1) int(5) No int(11) No

Default No 0 0 0

Tabele companii transportatoare

Pe baza acestor tabele se calculeaza pretul de transport, in functie de zona unde va trebui dus pachetul si de greutatea sa.

13.Tabela air_mail

Field Type Null zona pb pkg tinyint(1)

Default No 0 0.00 0.00

decimal(3,2) No decimal(3,2) No

14.Tabela economy_express

Field Type Null zona int(1) No

Default 0

pret_baza kg

float(3,2) No

No 0.00

0.00

float(3,2)

15.Tabela ems

Field Type Null greutate

Default 0.0

decimal(2,1) No 0 0 0 0 0 0

zona1 int(7) No zona2 int(7) No zona3 int(7) No zona4 int(7) No zona5 int(7) No zona6 int(7) No

16.Tabela global_express

Field Type Null zona int(1) No

Default 0 No 0.00 0.00

pret_baza kg

float(3,2) No

float(3,2)

17.Tabela ground_mail

Field Type Null zona tinyint(1)

Default No 0

pb pkg

decimal(3,2) No decimal(3,2) No

0.00 0.00

18.Tabela wpx

Field Type Null greutate

Default

char(3) No 0 0 0 0 0 0 0 0

zona1 int(4) No zona2 int(4) No zona3 int(4) No zona4 int(4) No zona5 int(4) No zona6 int(4) No zona7 int(4) No zona8 int(4) No

Tabele durata de transport

Aceste tabele contin durata de timp in care produsul ajunge la destinatie, in functie de zona in care se afla destinatarul.

19.Tabela zile_ee

Field Type Null

Default

zona zile_ee

tinyint(4)

No No 0

tinyint(4)

20.Tabela zile_ge

Field Type Null zona zile_ge tinyint(4)

Default No No 0

tinyint(4)

22.Tabela zile_rp

Field Type Null zona zile tinyint(4) tinyint(4)

Default No No 0 0

23.Tabela zile_wpx

Field Type Null zona zile tinyint(4) tinyint(4)

Default No No 0

2.4 Descrierea modulelor 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 punand 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 categorii si subcategorii Administrare Clienti se ocupa de gestionarea tabelei clienti Administrare Catalog Produse - se ocupa de gestionarea tabelei produse Administrare Stiri se ocupa de gestionarea tabelei news Administrare Statistici Web se ocupa de gestionarea tabelei statistici_web Administrare Sugestii se ocupa de gestionarea tabelei guest Administrare Tranzactii se ocupa de gestionarea tabelei tranzactii Administrare Cont Admin se ocupa de gestionarea tabelei admin

Sectiunea Administrare Categorii

In cadrul aplicatiei , ierarhia de categorii existenta este structurata pe 2 nivele: - categorii principale : ca de exemplu coolere, case modding, software, etc. - acestea contin intotdeauna mai multe subcategorii ; - subcategorii : ca de exemplu: case cooling, processor cooling, neons, leds, etc. 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 si/sau subcategorii existenta. In principiu ,la accesarea acestei sectiuni ,este afisata ierarhia de categorii si/sau subcategorii 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 tabelelor categorii si/sau subcategorii. De aceea, ca metoda de protectie suplimentara exista cod, 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 inregistrari din tabelele categorii si/sau subcategorii ce corespunde categoriei

Scripturile PHP care implementeaza sectiunea Administrare Categorii sunt urmatoarele:

Afisare_categorii.php incarca din baza de date si afiseaza ierarhia de categorii. adauga_categorie.php, sterge_categorie.php si editare_categorie.php- primind o comanda de editare a unei categorii, realizeaza efectiv modificarile cerute asupra tabelei categorii, in cadrul bazei de date. Afisare_subcategorii.php incarca din baza de date si afiseaza ierarhia de subcategorii. adauga_subcategorie.php, sterge_subcategorie.php si editare_subcategorie.php- primind o comanda de editare a unei subcategorii , realizeaza efectiv modificarile cerute asupra tabelei subcategorii, in cadrul bazei de date.

Sectiunea Administrare Clienti

In aceasta sectiune se gestioneaza tabela clienti - ce afiseaza, modifica sau sterge datele din tabela plati. In principiu , la accesarea acestei sectiuni : se afiseaza tabelat datele despre fiecare client existent in baza de date : id, username , nume, prenume, adresa e-mail si optiuni, de unde se pot vizualiza detalii despre un user sau stergerea lui.

Scripturile PHP care implementeaza aceasta sectiune sunt urmatoarele:

clienti.php incarca din baza de date si afiseaza tabelat informatiile despre fiecare user existent detalii_client.php afiseaza detaliile complete ale fiecarui user in parte.

Sectiunea Administrare Catalog Produse

La accesarea acestei sectiuni este afisat un formular prin care se cauta produsul care se doreste a fi afisat sau modificat sub forma ierarhica. Metodele de cautare sunt: dupa categorie si subcategorie, dupa nume si dupa id. Pentru fiecare produs gasit sunt afisate urmatoarele informatii: -nume , descriere, pret produs si poza - date preluate din tabela produse -optiuni prin care poate fi sters, modificat sau dezactivat produsul respectiv

Pentru fiecare produs afisat ,in dreptul acestuia , sunt disponibile urmatoarele comenzi: Modifica , Dezactiveaza , Sterge.

Comanda Modifica - se intra in modul de editare a datelor de baza ale produsului . Aceste date : nume , descriere , pret sunt incarcate in campurile unui formular, putand fi modificate/updatate sau sterse din baza de date , prin activarea butonului Modifica.

Implementare practica: La apasarea butonului de editare se paseaza scriptului editare_produs_cp.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 categorie si subcategorie exista un dropmenu - ce contine ca optiuni de selectie numele tuturor categoriilor existente in tabela categorii (la fel si pentru subcategorii).

Comanda Dezactiveaza - nu sterge produsul in baza de date dar impiedica afisarea lui pe site-ul principal (folosit in cazul in care produsul nu se mai afla pe stoc).

Comanda Sterge sterge complet produsul din baza de date.

Scripturile PHP care impementeaza sectiunea Administrare Catalog Produse sunt urmatoarele:

adauga_produs_cp.php implementeaza comanda adauga in CP. afisare_produse.php afiseaza produsele din baza de date.

editare_produs_cp.php implementeaza comanda modifica. sterge_produs_cp.php implementeaza comanda sterge. Muta_cp.php muta un produs dintr-o categorie/subcategorie intr-a alta categorie/subcategorie.

Sectiunea Administrare Stiri

La accesarea acestei sectiuni , sunt afisate tabelat , noutati despre site. Aceste informatii sunt preluate din tabela news si afisate in ordinea cronologica a introducerii lor. De-asupra informatiilor afisate tabelat se afla un buton adauga stire, care lanseaza un formular prin care poate fi introdusa stirea. In dreptul fiecarei stiri afisate sunt disponibile urmatoarele linkuri: modifica duce la modificarea inregistrarii corespunzatoare stirii respective din baza de date; sterge - duce la stergerea inregistrarii corespunzatoare.

Scripturile PHP care implementeaza aceasta sectiune sunt urmatoarele:

stiri.php - incarca din baza de date , din tabela news , si afiseaza tabelat si in ordine cronologica stirile. adauga_stire.php adauga in baza de date o noua stire editare_stire.php editeaza informatiile unei stiri sterge_stire.php - sterge toate informatiile corespunzatoare unei stiri din cadrul tabelei news, din baza de date.

Sectiunea Statistici Web

In aceasta sectiune , sunt afisate tabelat , informatii despre platforma folosita de utilizatori la accesare site-ului (in procente), sistemele de operare folosite de utilizatori (tot in procente) si numarul de accesari respective si ip-uri care au accesat site-ul. In partea de jos a paginii sunt afisate 2 grafice ce prezinta numarul de utilizatori din ultimele 7 zile, cat si lunar. Aceste informatii sunt preluate din tabela statistici_web. Aceste date sunt colectate si introduse in aceasta tabela de un script prezent in paginile principale ale site-ului.

Modulul care formeaza aceasta sectiune este:

statistici_web.php - incarca din baza de date , din tabela statistici_web , si afiseaza tabelat datele.

Sectiunea Administrare Sugestii

In aceasta sectiune se gestioneaza tabela guest afiseaza optiuni pentru aprobarea sau stergerea sugestiilor introduse de vizitatorii site-ului.

In principiu , la accesarea acestei sectiuni : se afiseaza numarul de sugestii aprobate si neaprobate prin 2 linkuri corespunzatoare. Administratorul are posibilitatea de a aproba sau nu afisarea pe site-ul principal a unei sugestii. Aceasta optiune a fost introdusa pentru a evita afisarea mesajelor continand obscenitati in cadrul site-ului. Prin apasarea linkului sugestii neaprobate sunt afisate tabelat sugestiile ce urmeaza a fi aprobate sau sterse dupa caz (prin folosirea comenzilor Activeaza sau Sterge). Prin apasarea linkului sugestii aprobate sunt afisate tabelat sugestiile ce au fost aprobate deja si care pot fi sterse (comanda Sterge).

Scripturile PHP care implementeaza aceasta sectiune sunt urmatoarele: meniu_gs.php face cererile catre baza de date si afiseaza cele 2 linkuri

sugestii.php afiseaza opereaza modificari in baza de date in tabela guest.

Sectiunea Tranzactii

Prin accesarea acestei sectiuni , se pot vizualiza starea tranzactiilor efectuate pana acum. Aceste stari sunt preluate din tabela tranzactii si sunt urmatoarele: Tranzactie care asteapta confirmarea, Tranzacite confirmata care asteapta trimiterea (efectuarea), Tranzactie refuzata (incorecta), Tranzactie trimisa (efectuata) si Tranzactie confirmata. Aceste valori pot fi modificate in functie de starea tranzactiei respective. La accesarea acestei sectiuni va fi afisat un meniu cu numarul total de tranzactii care asteapta confirmarea, de tranzactii confirmate care asteapta trimiterea (efectuarea), de tranzactii refuzate (incorecte), de tranzactii trimise (efectuate) si de tranzactii confirmate. Aici mai intalnim si posibilitatea de cautare a unei tranzactii. La apasarea oricarui link sunt afisate tabelat tranzactiile care au starea respectiva. Starile pot fi modificate in functie de efectuarea tranzactiilor. Tabelul contine: numele clientului, id-ul tranzactiei, data tranzactiei, pret total, pret platit, destinatar, destinatie si lista produselor.

Scripturile PHP care implementeaza Sectiunea Tranzactii sunt urmatoarele:

cauta_tranzactie.php - cauta in baza de date tranzactii in functie de datele introduse de administrator (id si username client). lista_tranzactii.php afiseaza tranzactiile gasite. meniu_tranzactii.php afiseaza meniul cu starea tranzactiilor pana in momentul respectiv. profil_tranzactie.php - afiseaza profilul unei tranzactii. sterge_tranzactie.php cere confirmarea administratorului pentru a sterge o tranzactie si sterge din baza de date tranzactia respectiva.

Sectiunea Cont Admin

Accesarea acestei sectiuni permite schimbarea parolei pentru administrator. Se cere administratorului parola veche si de doua ori parola noua (pentru verificare).

Scripturile PHP care implementeaza aceasta sectiune sunt urmatoarele:

do_parola_admin.php - verifica si schimba datele din tabelul admin din baza de date.

Aceste sectiuni pot fi accesate doar de administrator care se logheaza la inceputul utilizarii acestor module.

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 :username parola , corecte.

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 unui username, a unei parole (de minim 5 caractere) si reconfirmarea acesteia din urma, a numelui si prenumelui, numarul de telefon, adresa, tara de resedinta, adresa de e-mail, data de nastere si 2 confirmari (daca doreste sa primeasca pe mail informatii publicitare si daca este de acord cu conditiile site-ului . Pe baza acestui cuplu de informatii: (username, parola) se va face ulterior autentificarea utilizatorului , fiind importanta deci acuratetea acestor date. La apasarea butonului Submit este apelat scriptul validare.js care preia informatiile introduse de utilizator ,face verificarile si confirma validitatea datelor. 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 trimite automat la mail-ul specificat in cadrul unui formular toate aceste date introduse si se afiseaza un mesaj de primire.

In cazul in care datele sunt refuzate de catre script, utilizatorul este avertizat asupra datelor introduse incorect si utilizatorul are posibilitatea de a corecta informatiile gresite.

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 form-ul intitulat Login si sa introduca username-ul si parola cu care s-a inregistrat . 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 (username, 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. Daca autentificarea reuseste utilizatorul intra in cadrul contului personal. In cadrul contului personal , sunt puse la dispozitie comenzi care pot fi accesate prin apasarea linkului My Profile, prin care pot fi modificate datele utilizatorului. In acelasi timp, pot fi vizualizate tabelat tranzactiile efectuate de respectivul utilizator prin apasarea linkului Tranzaction details. Utilizatorul poate vizualiza continutul curent al cosului propriu de produse si in continuare are posibilitatea de a lansa comanda de cumparare a produselor respective.

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

new_account.php genereaza pagina web de start a modulului de inregistrare-autentificare new_account2.php este apelat in cazul dectarii de erori si afiseaza erorile respective

login.php - implementeaza procesul de autentificare al utilizatorilor , descris anterior. update_user.php - permite, din cadrul contului personal al utilizatorului , modificarea de catre acesta datelor personale. logout.php - realizeaza de-logarea utilizatorilor , in momentul in care acestia apasa butonul de logout din cadrul contului personal.

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 unui script Java 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 plasarea cursorului deasupra butonului Catalog, va aparea un meniu cu toate categoriile, iar apasarea unui buton corespunzator unei categorii 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 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.

Scripturile PHP care implementeaza aceasta sectiune sunt urmatoarele:

main.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 cinci locuri in cadrul topului de produse cele mai bine vandute si cele mai noi. vizualizare.php genereaza dinamic pagina unei categorii/subcategorii principale de produse, descrisa anterior, afiseaza produsele in functie de nevoile utilizatorului si incarca din baza de date , din tabela caracteristici, si afiseaza tabelat valorile tuturor caracteristicilor tehnice ale unui produs main2.php genereaza dinamic celelalte sectiuni ale site-ului: suggestions, news, contact si citeste din baza de date in functie de link-ul apasat. mainmenu.php genereaza menu-ul de butoane afisat in fiecare pagina

Sectiunea de facilitati ale site-ului

La nivel de site 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 .

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 e-mail.

Scriptul PHP care implementeaza Sectiunea de facilitati ale site-ului , este: search.php - script ce implementeaza la nivel de cod JavaScript facilitatile mareste imaginea descris 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 Add to cart. La apasarea butonului add to cart este apelat scriptul scriucart.php care realizeaza urmatoarea operatie: -daca produsul este pentru prima oara introdus in cosul de produse , atunci se interogheaza baza de date pentru a afla nume si pretul produsului.

Vizualizarea cosului de produse

In partea superioara a fiecarei pagini web ,generata din cadrul modulului comercial al site-ului , sigla cosului de produse link catre pagina de vizualizare rapida a cosului de produse . Prin efectuarea unui click pe sigla cosului este apelat scriptul view_cart.php care va afisa tabelat ,in cadrul unei pagini web, continutul cosului de produse si pretul total in USD. Pentru fiecare produs din cos , sunt afisate numele, pretul in USD si cantitatea in care produsul a fost achizitionat.

Preluarea comenzii de cumparare

Lansarea comenzii de cumparare a produselor se poate face din cadrul paginii de vizualizare a cosului de produse , prezentate anterior, prin actionarea butonului Continue. Daca comanda de cumparare este lansata de catre un utilizator atunci are loc preluarea si prelucrarea comenzii sale de cumparare. Acest proces are loc in 5 pasi: Pas1. Utilizatorului i se cere sa aleaga dintr-un dropbox tara de destinatie (prin apelarea scriptului country_select.php). Pas2. Dupa selectarea tarii, va apare afisat tabelat o lista cu transportatori, taxele de transport si in cate zile va ajunge produsul la destinatie, in functie de tara selectata. In dreptul fiecarei optiuni este un buton de tip radio prin care user-ul selecteaza transportatorul si metoda de transport dorita.

Pas3. Ii se cer utilizatorului date despre destinatia pachetului (nume, prenume, oras, adresa, numar de teleon si cod postal). Pas4. Utilizatorului i se vor afisa tabelat produsele, transportatorul si costurile de transport, adresa de destinatie si costurile totale. Pas5. Validarea platii se va face prin intermediul unui site specializat.

Prelucrarea comenzii de la utilizator

In momentul in care utilizatorul apasa link-ul Done, comanda si datele tranzactiei sunt introduse in baza de date. Dupa primirea confirmarii de plata, comerciantul poate livra produsele la adresa specificata.

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

scriucart.php - permite adaugarea unui nou produs, la cosul de produse. view_cart.php - permite vizualizarea cosului de produse si deasemenea modificarea continutului cosului de produse. country_select.php - implementeaza pasul 1 din procesul de preluare a comenzii lansate de catre un utilizator prin apelarea tabelei transportatori. destination_select.php - implementeaza pasul 3 din procesul de preluare a comenzii lansate de catre un utilizator. tranzaction_details.php - implementeaza pasul 4 din procesul de preluare a comenzii lansate de catre un utilizator. done.php - introduce datele tranzactiei in baza de date in tabela tranzactie.

2.4.5 Modulul de comunicare cu utilizatorii

Acest modul implementeaza o facilitate suplimentara, care vine 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: Sectiunea de sugestii - constituie o modalitate de comunicare directa intre comerciant si utilizatori . Pagina de contact - ofera informatiile necesare pentru realizarea contactului direct , intre utilizatori si comerciant. Sectiunea de sugestii

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 . Sectiunea este pastrata in baza de date in tabela guest.

Sectiunea sugestii este constituit din urmatorul script: suggest.php - genereaza dinamic pagina unde pot fi introduse username-ul (in cazul in care nu este logat) si textul sugestiei, si apar tabelat sugestiile aprobate de admin .

Capitolul 3. Exemplu de rulare

Prezentare generala a site-ului

Menu-ul principal este alcatuit din 5 butoane: Home, Catalog, Suggestions, News, Contact, iar optiunea Catalog contine 5 subcategorii: Coolers, Case Modding, Fan Grill, Others, Software.

Home duce utilizatorul in pagina principala, Catalog prezinta optiunea de browsing prin produse, fiecare subcategorie al Catalogului prezentand o cate o parte din produsele oferite spre vanzare. De exemplu prima sectiune, cea de coolere prezinta alte 2 subcategorii: Processor cooling si Case cooling, fiecare la randul ei prezentand produse insotite de poza cu posibilitatea prin simplu click pe poza de a fi marita intr-o noua pagina. Fiecare produs, in afara de poza, mai prezinta si numele produsului (Product Name) si pretul (Product price), apoi o prezentare scurta a produsului (Product description). Dedesubt o caseta permite utilizatorului sa introduca numarul de bucati ale respectivului produs pe care le doreste sa le achizitioneze, iar apoi prin apasarea butonului din dreapta casetei cumparatorul le introduce in cos (Add to cart).

In meniul principal mai intalnim si un buton unde utilizatorii pot scrie sugestii (Suggestions), un buton pentru stiri (News) si un ultim buton care directioneaza utilizatorul spre o pagina unde poate afla cum poate fi contactat cel care vinde produsele (adresa, telefon, fax, e-mail).

In cadrul site-ului mai exista o caseta ce foloseste al cautare rapida a unui produs in baza de date (Quick search).

In partea din stanga exista 2 menu-uri, unul continand topul primelor 5 produse vandute si al doilea cel mai cautat produs (Sales Top 5 si Most Wanted).

Aceste 2 meniuri raman in pagina tot timpul browserii site-ului.

In pagina principala mai intalnim un menu denumit New Products si care se refera la cele mai noi produse introduse in oferta.

Modalitatea de cumparare

Un client care doreste sa achizitioneze un produs trebuie mai intai sa se logheze, folosind sectiunea de Login. In partea dreapta intalnim un menu pentru logarea utilizatorului. Acesta trebuie sa tasteze un nume si o parola in cazul in care are deja un cont facut sau, in cazul in care nu are, trebuie sa isi faca un cont nou. Acesta poate fi facut prin apasarea butonului New User din menu.

Butonul New User duce intr-o pagina unde celui care doreste sa isi creeze un cont i se va cere sa precizeze un nume de cont, o parola si ceva date personale, cum ar fi numele si prenumele, adresa, un numar de telefon, e-mail, tara de origine sau data de nastere.

Dupa autentificarea (logarea) userului, acesta poate cauta produsul (produsele) dorit prin folosirea menu-ului principal, apoi, in cazul in care isi doreste sa il achizitioneze va introduce

in cos (Add to cart). Va apare un mesaj care va atentiona ca a fost introdus un nou produs in cos.

Apoi se va deschide o noua pagina ce precizeaza tabelat continutul cosului: numele produselor ce au fost adugate in cos, pretul si numarul de bucati al fiecaruia, precum si pretul total fara taxe de transport.

Prin apasarea link-ului Continue, cumparatorului i se va cere in continuare sa precizeze tara de destinatie, iar apoi, in functie de tara aleasa, userul va trebui sa aleaga din una sau mai multe companii de transport. Acestuia i se precizeaza atat costul, cat si durata de timp in care produsele vor ajunge.

In cazul in care nu se selecteaza nici o companie de transport va apare un mesaj care va cere utilizatorului sa aleaga o companie (You must choose a transport company). La urmatorul pas cumparatorului i se va cere sa precizeze cateva date ce vor facilita transportul, date cum ar fi adresa, nume, prenume, cod postal si, optional, numarul de telefon.

In urma completarii acestor date, userul va putea sa treaca la urmatorul pas, unde ii vor fi prezentate intr-un tabel toate datele (numele produsului, numarul de bucati, pretul fiecaruia, compania de transport, numele, prenumele, adresa) si costul total cu tot cu taxe de transport.

In acest moment cumparatorul poate trece (prin apasarea unui link) la o pagina de verificare a card-ului (www.2checkout.com, www.paypal.com) unde va efectua plata comenzii.

Trebuie precizat ca utilizatorul are oricand optiunea sa revina la pasul anterior din cadrul cumpararii prin simpla apasare a link-ului Cancel.

Magazinul virtual descris anterior se afla la adresa www.brainerz.ro si functioneaza de la sfarstiul lunii mai 2004.

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 (dialup). 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 comercializarea on-line a produselor sale.

Baza de date proiectata si utilizata este una relationala continand 23 de 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 90 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. De asemenea 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 40 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 cadrul site-ului, punand de asemenea 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. 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.

Tendinta continua de orientare a proceselor de comert si business catre Internet duce la o crestere a dezvoltarii si utilizarii aplicatiilor de comert electronic si e-business. Se constata o scadere a duratei de proiectare si implementare ale aplicatiilor e-business, datorata n principal necesitatii oportunitatilor de afaceri de a patrunde ct mai rapid pe piata. Scaderea duratei de ciclului de dezvoltare are consecinte negative asupra procesului de realizare a aplicatiilor n cazul n care nu se acorda o atentie sporita procesului de asigurare a calitatii.

Aparitia noilor tehnologii conduce la realizarea de aplicatii de comert electronic si e-business de calitate superioara si cu o fiabilitate ridicata.