118
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 rând, utilizând fluxuri digitale de date. Comertul electronic presupune utilizarea Internetului, comunicatii digitale si aplicatii software în cadrul proceselor de vânzare/cumparare, el fiind o componenta a procesului de e- business. În momentul de fata exista o multitudine de firme ce utilizeaza comertul electronic, în domenii diverse ca marketing direct, vânzari, 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 decât 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

Analiza Privind Proiectarea Unei Solutii de Comert Electronic

Embed Size (px)

DESCRIPTION

Analiza privind proiectarea unei solutii de comert electronic

Citation preview

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 rând, utilizând fluxuri digitale de date. Comertul electronic presupune utilizarea Internetului, comunicatii digitale si aplicatii software în cadrul proceselor de vânzare/cumparare, el fiind o componenta a procesului de e-business.

În momentul de fata exista o multitudine de firme ce utilizeaza comertul electronic, în domenii diverse ca marketing direct, vânzari, 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 decât 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 cât mai mare de utilizatori, mai ales de când 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 integrând actiunile componentelor lor. Proiectarea aplicatiilor distribuite se axeaza numai pe detaliile partilor individuale, ci si pe realizarea unei integrari a componentelor distribuite, astfel încât 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 multi-strat 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 neînchipuit pentru un sistem business critic, testarea

aplicatiilor având 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 atât standarde tehnologice (XML, COM+, CORBA, RMI) cât 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 pâna 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 având 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, bazându-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 lânga 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 având î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 tinându-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 rând 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 mouse-ul sau sagetile de pe tastatura) si comanda selectia (cu ajutorul mouse-ul sau apasand tasta ENTER). Desi exista programe de navigare fara interfata grafica, ca de exemplu lynx, ele nu sunt atat de utilizate ca programele de navigare grafice.

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

-Un calculator (clientul) formuleaza o cerere

-Cererea clientului este expediata unui server

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

-Clientul receptioneaza raspunsul la cererea solicitata

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

• Programul de navigare determina URL (pe baza selectiei)

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

• DNS raspunde cu 18.23.0.23.

• Programul de navigare realizeaza conexiunea TCP cu portul 80 al 18.23.0.23.

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

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

• Conexiunea TCP este eliberata.

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

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

HTML si URL

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

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

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

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

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

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

Server de Web

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

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

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

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

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

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

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

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

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

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

1.2 Serverul de Web Apache

Istoric si caracteristici

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

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

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

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

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

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

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

Detalii de instalare si configurare

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

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

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

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

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

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

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

1.3 Limbajul PHP (Hypertext Preprocessor)

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 recunoştea câteva macro-uri şi un număr limitat de utilităţi care erau folosite pe paginile personale la acea vreme (cum ar fi guestbook, counter).

Parserul de PHP a fost rescris la jumătatea 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 adăugat suport pentru mSQL şi astfel a apărut PHP/FI. PHP/FI s-a răspândit foarte repede şi a devenit foarte popular, deoarece mulţi programatori au contribuit cu cod la perfecţionarea lui.

Sunt greu de dat nişte statistici exacte, dar se estimează că la sfârşitul anului 1996 PHP/FI era folosit de aproximativ 15.000 de site-uri web din toată lumea. Pe la mijlocul anului 1997 numărul 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 perfecţionarea lui contribuiseră mulţi 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, foloseşte motorul de script Zend ca să ofere performanţe 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ă intrăm sau să ieşim 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 primeşte cookie-uri.

Probabil cea mai puternică şi cea mai importantă caracteristică a PHP este suportul pentru o gamă cât 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ă următoarele 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 reţea folosind protocoale cum ar fi: IMAP, SNMP, NNTP, POP3, HTTP şi altele mai puţin importante. Se pot deschide noduri brute de comunicaţie în reţea care interacţionează folosind alte protocoale de comunicaţie.

1.3.2. Referinţe

Sintaxa limbajului

Când PHP începe să interpreteze un fişier, el doar o să afişeze textul pe care îl întâlneşte. Aşa că dacă avem un fişier cu extensie .html şi schimbăm extensia în .php fişierul o să fie corect interpretat în continuare.

Dacă dorim să introducem declaraţii PHP la un anumit punct din fişier, trebuie să indicăm 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 instrucţiunilor se face la fel ca în Perl sau în C, terminând fiecare declaraţie cu caracterul ;.

Tag-ul de închidere implică de asemenea sfârşitul unei declaraţii, deci următoarele 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 secvenţele 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 adevăr. Poate fi adevărată sau falsă. Pentru a specifica valoare unei variabile booleene se foloseşte 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 număr întreg cu semn. Variabilele de tip întreg pot fi specificate în zecimal, în hexazecimal sau în octal, opţional putând fi precedate de semn (+ sau -). Dacă se foloseşte notaţia în octal numărul trebuie precedat de 0, iar dacă se foloseşte notaţia în hexazecimal numărul trebuie precedat de 0x.

Exemple:

$a = 1234; # număr zecimal

$a = -123; # număr negativ

$a = 0123; # număr octal (echivalentul lui 83 zecimal)

$a = 0x1A; # număr hexazecimal (echivalentul lui 26 zecimal)

Tipul floating-point number. Numerele de tip floatin-point pot fi specificate în felul următor:

$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 (“’”). Când şirul este reprezentat în acest fel singurele secvenţe speciale care pot fi interpretate sunt “\\” şi “\’”. Variabilele nu sunt expandate când ş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 sfârşit 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 reprezentări, astfel ca poate fi un vector, o listă, o colecţie, un dicţionar, 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 specificând explicit valorile.

$arr[key] = value;

$arr[] = value;

Tipul object. Pentru a iniţializa un obiect, se foloseşte declaraţia 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 funcţii speciale.

Notă: Tipul resource a fost introdus în PHP4.

Datorită sistemului de numărare a referinţelor introdus de PHP4 cu motorul Zend, se detectează automat când 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ă aceleaşi reguli ca şi alte etichete în PHP. Un nume valid de variabilă începe cu o literă sau cu _, urmată de un număr 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 număr mare de variabile predefinite oricărui 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 configurările server-ului si de alţi factori.

Pentru a putea vedea variabilele predefinite şi alte informaţii utile se poate folosi funcţia 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ă opţiunea track_vars în fişierul 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 defineşte mai multe constante şi furnizează mecanisme pentru a defini mai multe în timpul execuţiei.

Constantele se aseamănă cu variabilele, cu excepţia a două fapte şi anume: constantele trebuie definite folosind funcţia 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 construcţii 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 funcţiile.

Operatori

În PHP avem următoarele tipuri de operatori:

operatori aritmetici

operatori de atribuire

operatori unari

operatori de comparaţie

operatori pentru controlul erorilor

operatori de execuţie

operatori pentru incrementare/decrementare

operatori logici

operatori string

Structuri de control

Toate scripturile PHP sunt compuse dintr-o serie de declaraţii. O declaraţie poate fi o atribuire, apelul unei funcţii, un ciclu, o declaraţie condiţională chiar dacă declaraţia nu face nimic. Declaraţiile se termină de obicei cu ;. În plus, declaraţiile pot fi grupate în grupuri de declaraţii fiind încadrate între acolade. Un grup de declaraţii este la rândul lui o declaraţie. Diferitele tipuri de declaraţii sunt următoarele:

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];

}

Funcţii

O funcţie poate fi declarată folosind următoarea 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 declaraţiei unei funcţii, chiar dacă reprezintă declaraţia altei funcţii sau clase.

Notă: În PHP3, funcţiile trebuie declarate înainte de a fi apelate. În PHP4 nu există asemenea restricţii.

Notă: PHP3 nu suportă funcţii cu număr variabil de argumente, decât argumentele cu care a fost declarată. PHP4 acceptă ambele tipuri de funcţii.

Informaţiile sunt transmise funcţiilor printr-o listă de argumente, care sunt variabile sau constante separate prin virgulă.

PHP suportă transmiterea argumentelor unei funcţii prin valoare, prin referinţă sau prin valori predefinite ale argumentelor.

Prin definiţie, argumentele funcţiilor sunt transmise prin valoare. Dacă dorim să transmitem argumentele unei funcţii prin referinţă trebuie ca numele argumentului să fie precedat de &.

Dacă argumentul este transmis prin valoarea, modificarea valorii sale în corpul funcţiei nu afectează valoarea argumentului în afara funcţiei. Dacă dorim să modificăm 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");

Funcţiile întorc valori dacă se foloseşte declaraţia opţională return.

Exemplu:

function square ($num) {

return $num * $num;

}

echo square (4); // outputs '16'.

Clase şi obiecte

O clasă este o colecţie de variabile şi funcţii care lucrează cu aceste variabile. Declararea unei clase se poate face în felul următor:

<?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 funcţii 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 adaptăm specificaţiilor proiectului. Ca să putem face acest lucru, clasele trebuie să fie extinse din alte clase. Acesta este conceptul de moştenire întâlnit în Programarea Orientată pe Obiecte. Clasa extinsă sau derivată are toate variabilele şi funcţiile clasei de bază şi funcţiile pe care le adăugăm în noua definiţie. O clasă extinsă este totdeauna dependentă de o singură clasă de bază, ceea ce înseamnă că nu putem avea moştenire multiplă. În PHP pentru derivarea claselor se foloseşte cuvântul 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 funcţii din clasă care sunt apelaţi automat când creăm o nouă instanţă a clasei cu funcţia new. O funcţie devine constructor în momentul în care acelaşi 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 funcţii din clasa de bază trebuie folosit cuvântul cheie parent, care se referă la numele clasei de bază, acelaşi ca cel dat în declaraţia 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 funcţiile serialize() şi unserialize().

1.3.3. Funcţii 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 numărul protocolului asociat cu un nume

getprotobynumber – întoarce numele protocolului asociat cu un număr

getservbyname – întoarce numărul portului asociat cu un anumit serviciu şi protocol

getservbyport – întoarce serviciul asociat unui port şi protocol

socket_get_status – întoarce informaţii despre soclul curent

socket_set_blocking – blochează/deblochează un soclu

socket_set_timeout – stabileşte timpul de expirare a soclului

1.3.4. Funcţii HTTP

header – trimite un header HTTP

headers_sent – întoarce valoarea TRUE dacă headerele au fost trimise

setcookie – trimite cookie

1.3.5. Funcţii String

echo – afişează unul sau mai multe şiruri de caractere

md5 – calculează o parolă după algoritmul md5 pentru un şir de caractere

1.3.6. Funcţii 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 decât însusi limbajul Java. Initial, JavaScript a fost dezvoltat de Netscape sub denumirea LiveScript, un limbaj de scriptare care intentiona sa extinda capacitatile HTML si sa ofere o alternativa partiala la utilizarea unui numar mare de scripturi CGI pentru prelucrarea informatiilor din formulare si pentru a adauga dinamism în paginile utilizatorilor. Dupa lansarea limbajului Java, Netscape a început sa lucreze împreuna cu firma Sun pentru a oferi un limbaj de scriptare a carui sintaxa si semantica erau strâns legate de Java - motiv pentru care denumirea a fost schimbata în JavaScript. Dupa finalizarea limbajului, Netscape si Sun l-au lansat împreuna.

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

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

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

Situatia s-a complicat însa atunci când a intervenit Microsoft. Întelegând importanta scriptarii Web, Microsoft a dorit sa ofere suport si pentru JavaScript. Când Netscape a preferat sa

acorde licenta de tehnologie companiei Microsoft în loc sa o vânda, Redmond a analizat JavaScript, bazându-se pe documentatia publica, si a creat propria sa implementare, JScript, care este recunoscuta de Microsoft Internet Explorer versiunile 3.0 si ulterioare. JScript 1.0 este aproximativ compatibil cu JavaScript 1.1, care este recunoscut în Netscape Navigator 3.0 si browserele ulterioare. Totusi, numeroasele versiuni JavaScript si diversele bizarerii specifice platformelor de operare le-au dat dureri de cap programatorilor pentru Web, atunci când au încercat sa desfasoare 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, atât Netscape cât si Microsoft au propriile lor implementari ale limbajului (JavaScript si JScript) si continua sa extinda limbajul dincolo de standardul de baza.

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

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

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

Java si JavaScript

Una dintre cele mai intilnite intrebari referitoare la Javascript este legata de "gradul de rudenie" cu limbajul Java. Afinitatile dintre cele doua limbaje se regasesc la nivelul sintaxei, al structurilor de control si, intr-o anumita masura, la securitate (nu este permisa, spre exemplu, 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 mouse-ului, etc. (deci mai general la producerea unui eveniment). Script-urile JavaScript fac parte din codul sursa HTML al paginilor Web, dandu-le acestora un aspect dinamic, interactiv si mult mai atractiv. Acest lucru insa are un mare dezavantaj: aceste script-uri pot fi copiate, modificate si reutilizate. In cazul applet-urilor Java nu apare aceasta problema, intrucat codul sursa al acestora nu este transferat de pe server pe calculatorul client. Ambele limbaje creeaza aplicatii independente de platforma pe care se executa. Programele Java sunt executate de masina virtuala Java iar script-urile de catre interpretator, ambele fiind incluse in navigator.

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

Caracteristici ale limbajului JavaScript

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

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

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

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

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

JavaScript permite folosirea expresiilor conditionale (existente, de 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 mouse-click 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 Default

id int(11) No

den_cat_ro varchar(255) No

2.Tabela subcategorii

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

Field Type Null Default

id int(11) No

categorie int(11) No 0

den_subcat_ro 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 Default

id_produs bigint(20) No

pret_vanzare decimal(8,2) No 0.00

greutate decimal(4,2) No 0.00

lungime decimal(4,2) No 0.00

latime decimal(4,2) No 0.00

inaltime decimal(4,2) No 0.00

volum float(8,4) No 0.0000

categorie_produs int(11) No 0

unitati_vandute int(9) No 0

subcategorie int(11) No 0

gen varchar(25) Yes NULL

subgen varchar(255) Yes NULL

den_produs_ro varchar(255) Yes NULL

desc_produs_ro longtext Yes NULL

locatie int(11) No 0

activ 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 Default

user_id bigint(20) No

user_nume varchar(20) No

user_pass varchar(25) No

f_name varchar(30) No

l_name varchar(75) No

adresa longtext No

cod_tara varchar(20) No

telefon varchar(50) No

email varchar(100) No

data_nastere date No 0000-00-00

data_inreg datetime No 0000-00-00 00:00:00

valoare_cumparaturi float No 1900

numar_achizitii int(11) No 0

media_achizitii float No 0

ultima_cumparare datetime No 0000-00-00 00:00:00

ultima_logare datetime No 0000-00-00 00:00:00

advertising int(11) No 0

title tinyint(4) No 0

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

id_tranzactie bigint(20) No

data_tranzactie datetime Yes NULL

id_client_tranzactie bigint(20) No 0

pret_total_tranzactie double No 0

pret_transp double(4,2) No 0.00

transportator varchar(50) No

pret_platit_tranzactie double No 0

produse_tranzactie mediumtext No

destinatar_tranzactie tinytext No

destinatie_tranzactie mediumtext No

mod_plata_tranzactie tinytext No

stare_tranzactie tinyint(4) No 1

6.Tabela admin

Aceasta tabela contine parola pentru admin si data ultimei operari.

Field Type Null Default

admin_password varchar(255) No

admin_lastlogin 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 Default

id bigint(20) No

user_id int(11) No 0

mesaj text No

stare tinyint(4) No 0

data datetime No 0000-00-00 00:00:00

tip tinyint(4) No 0

nickname varchar(50) No

8.Tabela judete

Field Type Null Default

id_judet tinyint(4) No

denumire varchar(80) No

9.Tabela news

Tabela contine stirile introduse de administrator.

Field Type Null Default

id bigint(20) No

titlu varchar(255) No

continut mediumtext No

data datetime No 0000-00-00 00:00:00

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 Default

id bigint(20) No

HTTP_USER_AGENT varchar(200) No

REMOTE_ADDR varchar(200) No

date datetime No 0000-00-00 00:00:00

11.Tabela transportatori

Contine date despre companiile de transport.

Field Type Null Default

idtara int(3) No

tara char(30) No

global_express tinyint(1) No 0

economy_express tinyint(1) No 0

ems tinyint(1) No 0

wpx tinyint(1) No 0

zonatnt tinyint(1) No 0

zonarp tinyint(1) No 0

zonadhl tinyint(1) No 0

12.Tabela valuta

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

Field Type Null Default

id tinyint(1) No 0

usd int(5) No 0

euro int(11) No 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 Default

zona tinyint(1) No 0

pb decimal(3,2) No 0.00

pkg decimal(3,2) No 0.00

14.Tabela economy_express

Field Type Null Default

zona int(1) No 0

pret_baza float(3,2) No 0.00

kg float(3,2) No 0.00

15.Tabela ems

Field Type Null Default

greutate decimal(2,1) No 0.0

zona1 int(7) No 0

zona2 int(7) No 0

zona3 int(7) No 0

zona4 int(7) No 0

zona5 int(7) No 0

zona6 int(7) No 0

16.Tabela global_express

Field Type Null Default

zona int(1) No 0

pret_baza float(3,2) No 0.00

kg float(3,2) No 0.00

17.Tabela ground_mail

Field Type Null Default

zona tinyint(1) No 0

pb decimal(3,2) No 0.00

pkg decimal(3,2) No 0.00

18.Tabela wpx

Field Type Null Default

greutate char(3)No

zona1 int(4) No 0

zona2 int(4) No 0

zona3 int(4) No 0

zona4 int(4) No 0

zona5 int(4) No 0

zona6 int(4) No 0

zona7 int(4) No 0

zona8 int(4) No 0

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 tinyint(4) No

zile_ee tinyint(4) No 0

20.Tabela zile_ge

Field Type Null Default

zona tinyint(4) No

zile_ge tinyint(4) No 0

22.Tabela zile_rp

Field Type Null Default

zona tinyint(4) No 0

zile tinyint(4) No 0

23.Tabela zile_wpx

Field Type Null Default

zona tinyint(4) No

zile tinyint(4) 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 (dial-up). In aceste conditii lumea virtuala a internetului a devenit o realitate ce tinde chiar sa se substituie metodelor clasice de a afla informatii, de a comunica, de a vinde/cumpara, etc.

In acest sens, aplicatia dezvoltata – constituie o solutie moderna si viabila pentru pentru implementarea unui magazin virtual ,ce are ca obiectiv 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 cât 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.