Aplicatie Web cu Baza de Date Pentru O Firma Comercializanta de Pietre Decorative

LUCRARE DE LICENTA

Aplicatie Web cu baza de date pentru o firma comercializanta de pietre decorative

1.Introducere

1.1.Prezentarea lucrarii

Cel mai accesibil si eficient mod de a prezenta o firma consumatorilor este prin intermediul unui website profesional. Prin utlilzarea tehnologiilor web se poate realiza o legatura stransa intre producatori, distribuitori si clienti prin prezentarea produselor si/sau serviciilor, avand ca rezultat cresterea reputatiei si a veniturilor firmei. De aceea am ales sa fac un site de prezentare al unei firme al carei obiect de activitate este comercializarea si prelucrarea pietrelor naturale pentru folosirea lor in amenajari interioare si exterioare.

Situl este format din 3 pagini statice (Home, Servicii si Contact), doua pagini dinamice (Produse si Cosul meu), un panou de administrare, o baza de date cu 5 tabele, fisiere .css si .js externe, totul fiind foarte bine organizat pe directoare.

1.2 Tehnologii folosite

Tehnologii folosite pentru dezvoltarea aplicatiei:

HTML (Hyper Text Markup Language)

CSS (Cascading Style Sheets)

JavaScript (Limbaj de programare folosit de navigatoarele web) + libraria jQuery

AJAX (Asynchronous JavaScript and XML)

PHP (limbaj de programare ce ruleaza pe serverele Apache)

MySQL (sistem de gestiune a bazelor de date relational)

Programe folosite pentru dezvoltarea aplicatiei:

phpDesigner 7 (editor PHP, HTML si CSS)

HeidiSQL (program pentru gestionarea bazei de date MySQL)

Google Chrome (browserul in care a fost testat situl)

HTML – HyperText Markup Language este un limbaj de marcare utilizat pentru crearea paginilor web ce pot fi afisate intr-un navigator.

HTML este o forma de marcare orientata catre prezentarea documentelor text pe o singura pagina, utilizand un software de redare specializat, numit agent utilizator HTML, cel mai bun exemplu de astfel de software fiind browserul web. HTML furnizeaza mijloacele prin care continutul unui document poate fi adnotat cu diverse tipuri de metadate si indicatii de redare. Indicatiile de redare pot varia de la decoratiuni minore ale textului, cum ar fi specificarea faptului ca un anumit cuvant trebuie subliniat sau ca o imagine trebuie introdusa, pana la scripturi sofisticate, harti de imagini, formulare etc.

CSS – Cascading Style Sheets este un standard pentru formatarea elementelor unui document HTML. Stilurile se pot atasa elementelor HTML prin intermediul unor fisiere externe sau in cadrul documentului, prin elementul <style> si/sau atributul style.

JavaScript – este un limbaj de programare orientat obiect bazat pe conceptul prototipurilor. Este folosit mai ales pentru introducerea unor functionalitati in paginile web, codul Javascript din aceste pagini fiind rulat de catre browser. Limbajul este binecunoscut pentru folosirea sa in construirea siturilor web, dar este folosit si pentru acesul la obiecte incastrate (embedded objects) in alte aplicatii. jQuery este o platforma de dezvoltare JavaScript, conceputa pentru a usura si imbunatati procese precum traversarea arborelui DOM in HTML, managementul inter-browser al evenimentelor, animatii si cereri tip AJAX.

AJAX – este o tehnica de programare pentru crearea de aplicatii web interactive. Intentia este sa faca paginile web sa devina mai rapide si, deci, mai acceptate, prin schimbul in fundal al unor cantitati mici de date cu serverul, astfel incat sa nu fie nevoie ca pagina sa fie reincarcata la fiecare actiune a utilizatorului. Aceasta are ca scop cresterea interactivitatii, vitezei si usurintei in utilizare a aplicatiilor web. Ajax nu este o tehnologie in sine. Termenul este folosit pentru definirea aplicatiilor web ce folosesc un ansamblu de tehnologii.

PHP – este un limbaj de programare folosit initial pentru a produce pagini web dinamice, folosit pe scara larga in dezvoltarea paginilor si aplicatiilor web. Se foloseste in principal inglobat in codul HTML, dar incepand de la versiunea 4.3.0 se poate folosi si in mod „linie de comanda” (CLI), permitand crearea de aplicatii independente. Este unul din cele mai importante limbaje de programare web open-source si server-side, existand versiuni disponibile pentru majoritatea web serverelor si pentru toate sistemele de operare.

MySQL – este un sistem de gestiune a bazelor de date relational, produs de compania suedeza MySQL AB si distribuit sub Licenta Publica Generala GNU. Este cel mai popular SGBD open-source la ora actuala.

1.3.Aspectul sitului

Situl este alcatuit din header, sidebar, content si footer. Partea de content este singura care se schimba in functie de pagina pe care ne aflam, restul ramanand neschimbate.

1.3.1.Header

Headerul este partea de sus a sitului unde se afla logo-ul firmei, cu un link catre site, un numar de telefon pentru a-i fi utilizatorului cat mai usor sa contacteze telefonic firma respectiva si meniul principal, de unde poate accesa prima pagina (unde este prezentata firma), pagina de servicii (unde sunt prezentate serviciile oferite), pagina de contact (unde utilizatorul poate completa un formular care se trimite automat pe email-ul administratorul sitului si unde gaseste mai multe date de contact), si cosul sau unde se afla produsele comandate.

1.3.2.Sidebar

Sidebarul este amplasat in partea stanga, continand un meniu cu toate produsele disponibile pe site, structurat pe categorii. Categoriile pot fi deschise si inchise cu un click pe titlul lor.

1.3.3.Content

In partea de content se afla continutul paginii pe care ne aflam, fie descrierea firmei, fie prezentarea produselor, fie formularul de contact.

1.3.4.Footer

Footerul se afla in partea de jos a sitului si contine date despre autorul sitului, copyright si linkurile din meniul principal, pentru a fi la indemana clientului fara a fi nevoie sa dea scroll pana la inceputul sitului pentru a schimba pagina.

1.3.5.Imaginea sitului

-figura 1.3.5.1-

2.Structura bazei de date

2.1.Descrierea bazei de date

O baza de date reprezinta mai mult decat o lista sau un tabel. Baza de date ofera un real control asupra datelor, permitand regasirea, sortarea, analizarea si rezumarea datelor, precum si raportarea imediata a rezultatelor.

Aplicatia dezvoltata de mine foloseste o baza de date MySQL, care contine 5 tabele, urmand a fi descrise mai jos. Cu ajutorul bazei de date stocam toate informatiile despre produse, categoriile de produse etc, ceea ce permite administratorului sitului adaugarea noilor informatii fara a fi nevoit sa creeze manual pagini noi. Baza de date este cea care asigura dinamica sitului si care il face atat de usor de intretinut.

2.2.Descrierea Tabelelor

2.2.1.Tabelul “categorii”

-figura 2.2.1-

In acest tabel sunt stocate categoriile de produse. Este legat de tabelul ‘produse’ prin campul ‘id’; cu ajutorul lui putem determina carei categorie apartine un produs.

‘id’ este de tip int cu lungimea 10 si este definit ca si cheie primara cu autoincrementare.

‘nume’ este de tip varchar cu lungimea 100 si contine numele categoriei.

‘url’ este tot de tip varchar cu lungimea 100 si contine numele categoriei in format url-friendly, adica fara caractere speciale, cu ‘-‘ in loc de spatii si doar litere mici.

Codul folosit pentru crearea tabelului ‘categorii’ este urmatorul:

CREATE TABLE `categorii` (

`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,

`nume` VARCHAR(100) NULL DEFAULT NULL,

`url` VARCHAR(100) NULL DEFAULT NULL,

PRIMARY KEY (`id`)

)

2.2.2.Tabelul “produse”

-figura 2.2.2.1-

In tabelul ‘produse’ sunt stocate toate produsele care apar in site. Produsele pot fi adaugate de catre administratorul sitului din panoul de administrare.

‘id’ care este de tip int cu lungimea 10, este definit ca si cheie primara cu autoincrementare si reprezinta numarul unic de indentificare al fiecarui produs.

‘categoria’ este de tip int cu lungimea 10 si contine id-ul categoriei careia apartine produsul respectiv.

‘poza’ este de tip varchar cu lungimea 100 si contine linkul catre imaginea mare a produsului care este folosita in descrierea acestuia.

‘thumbnail’ este de tip varchar cu lungimea 100 si contine linkul catre imaginea mica a produsului care este folosita intr-un meniu cu lateral.

‘titlu’ este de tip tinytext si contine titlul produsului.

‘tara’ este de tip tinytext si contine tara de provenienta a produsului.

‘dimensiuni’ este de tip text si contine dimensiunile disponibile la comandarea produsului.

Codul folosit pentru crearea tabelului ‘produse’ este urmatorul:

CREATE TABLE `produse` (

`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,

`categoria` INT(10) NULL DEFAULT NULL,

`poza` VARCHAR(100) NULL DEFAULT NULL,

`thumbnail` VARCHAR(100) NULL DEFAULT NULL,

`titlu` TINYTEXT NULL,

`tara` TINYTEXT NULL,

`dimensiuni` TEXT NULL,

PRIMARY KEY (`id`)

)

2.2.3.Tabelul “comentarii”

-figura 2.2.3.1-

Tabelul ‘comentarii’ contine comentariile scrise de utilizatorii sitului referitoare la produsele de pe site. Este legat de tabelul ‘produse’ prin campul ‘id_produs’.

‘id’ este de tip int cu lungimea 10, definit ca si cheie primara cu autoincrementare.

‘id_produs’ este de tip int cu lungimea 10 si contine ID-ul produsului la care utilizatorul a scris comentariul.

‘nume’ este de tip varchar cu lungimea 100 si contine numele utilizatorului care a scris comentariul.

‘email’ este de tip varchar cu lungimea 100 si contine adresa de email a utilizatorului care a scris comentariul.

‘mesaj’ este de tip text si contine mesajul scris de catre utilizator.

Codul folosit pentru crearea tabelului ‘comentarii’ este urmatorul:

CREATE TABLE `comentarii` (

`id` INT(10) NOT NULL AUTO_INCREMENT,

`id_produs` INT(10) NOT NULL DEFAULT '0',

`nume` VARCHAR(100) NULL DEFAULT NULL,

`email` VARCHAR(100) NULL DEFAULT NULL,

`mesaj` TEXT NULL,

PRIMARY KEY (`id`)

)

2.2.4.Tabelul “vot”

-figura 2.2.4.1-

Tabelul ‘vot’ contine notele acordate de utilizatori fiecarui produs. Este legat de tabelul ‘produse’ prin campul ‘id_produs’.

‘id’ este de tip int cu lungimea 10, definit ca si cheie primara cu autoincrementare.

‘id_produs’ este de tip int cu lungimea 10 si contine ID-ul produsului caruia ii apartine votul.

‘nota’ este de tip int cu lungimea 10 si contine nota acordata produsului de catre utilizator.

‘ip’ este de tip varchar cu lungimea 15 si contine adresa de IP a utilizatorului pentru a nu permite votarea aceluiasi produs de mai multe ori.

Codul folosit pentru crearea tabelului ‘vot’ este urmatorul:

CREATE TABLE `vot` (

`id` INT(10) NOT NULL AUTO_INCREMENT,

`id_produs` INT(10) NULL DEFAULT NULL,

`nota` INT(10) NULL DEFAULT NULL,

`ip` VARCHAR(15) NULL DEFAULT NULL,

PRIMARY KEY (`id`)

)

2.2.5.Tabelul “comenzi”

-figura 2.2.5.1-

Tabelul ‘comenzi’ contine toate comenzile efectuate de utilizatorii sitului, adresa de livrare si observatii suplimentare.

‘id’ este de tip int cu lungimea 10, definit ca si cheie primara cu autoincrementare.

‘nume’ este de tip varchar cu lungimea 100 si contine numele utilizatorului care a facut comanda.

‘adresa’ este de tip text si contine adresa de livrare a utilizatorului.

‘observatii’ este de tip text si contine observatii suplimentare referitoare la comanda.

‘comanda’ este de tip text si contine produsele comandate, separate de o virgula.

Codul folosit pentru crearea tabelului ‘comenzi’ este urmatorul:

CREATE TABLE `comenzi` (

`id` INT(10) NOT NULL AUTO_INCREMENT,

`nume` VARCHAR(100) NULL DEFAULT NULL,

`adresa` TEXT NULL,

`observatii` TEXT NULL,

`comanda` TEXT NULL,

PRIMARY KEY (`id`)

)

3.Partea Publica

3.1.Descriere generala

Partea publica a aplicatiei este partea la care are acces utilizatorul sitului. In momentul accesarii se deschide pagina “Home”, adica fisierul index.php din radacina aplicatiei. Adresa este http://localhost/stone-expert/

Fiecare pagina a sitului are fisierul situat intr-un director. De exemplu, pentru pagina cu servicii, fisierul index.php se afla in directorul ‘servicii’ iar adresa este http://localhost/stone-expert/servicii/. Aceasta metoda este echivalenta mod_rewrite-ului.

Ce este mod_rewrite-ul? Este o metoda de rescriere a URL-urilor, iar mod_rewrite este modulul din Apache care ne permite acest lucru. mod_rewrite este folosit pentru rescrierea URL-urilor la nivel de server. Avantajele acestuia sunt:

imbunatateste gradul de securitate al aplicatiei;

estetica URL-urilor;

indexarea mai usoara de catre motoarele de cautare;

URL-urile vor fi “search engine friendly”;

URL-urile sunt mai usor de retinut de catre utilizatori.

Aceasta tehnica am folosit-o la pagina de produse. Cand un utilizator face o cerere pentru http://localhost/stone-expert/marmura/verona-cream-93/, de fapt, serverul ii va returna http://localhost/stone-expert/produse/index.php?categoria=marmura&id=93 . Bineinteles ca utilizatorului ii va fi ascuns acest aspect.

In fiecare pagina a sitului sunt incluse doua fisiere: include.php si meniu.php.

include.php – contine intializarea unei sesiuni cu functia session_start(); datele de conectare la baza de date (figura 3.1.1) precum si cateva functii create de mine pentru a-mi usura munca.

-figura 3.1.1-

Una dintre functii este base_url();(figura 3.1.2) care se apeleaza fara parametri si returneaza adresa de baza a sitului. Toate linkurile din site au la inceput aceasta functie. De exemplu <a href=”<?= base_url(); ?>servicii/”>Servicii</a>, iar in codul html se va afisa <a href=”http://localhost/stone-expert/servicii/”>Servicii</a>. Aceasta este foarte utila in cazul in care se va muta situl de pe localhost pe un server deoarece, in loc sa schimbam toate linkurile din site, schimbam doar adresa din functia base_url() si se va schimba automat in tot situl. Functia redirect();(figura 3.1.2) face o redirectare de tip header. Primeste ca parametru pagina destinatie, si se foloseste de functia base_url(). O alta functie este functia db();(figura 3.1.2) care inlocuieste functia mysql_query();

-figura 3.1.2-

meniu.php – este deasemenea inclus in fiecare pagina a sitului si contine functia meniu();(figura 3.1.3) care la apelare genereaza meniul cu valorile din baza de date. Deasemenea, categoriile meniului se pot inchide si deschide printr-un simplu click, afisandu-se doar produsele din categoria respectiva. Acest lucru a fost realizat cu ajutorul CSS-ului si a JavaScript-ului. In CSS, fiecare categorie are doua clase, deschis, care afiseaza produsele din caterogie si inchis, care le ascunde. Intre aceste doua clase se oscileaza cu ajutorul JavaScript-ului (figura 3.1.4), fara a se reincarca pagina.

-figura 3.1.3-

-figura 3.1.4-

3.2.Pagina “Home” si pagina “Servicii”

Prima pagina a sitului, pagina “Home”, precum si pagina “Servicii” sunt pagini statice care contin doua paragrafe despre firma, respectiv despre serviciile oferite.

3.3.Pagina “Produse”

Pagina “Produse” este o pagina dinamica si este impartita in 2 parti. Partea din stanga contine poza produsului, detalii despre produs, un link de adaugare a produsului in cos, un sistem de votare, comentariile utilizatorilor si un formular pentru adaugarea comentariilor. Partea din dreapta contine un meniu cu thumbnailurile produselor din categoria din care face parte produsul curent.

La accesarea paginii se face o verificare a parametrilor id si categorie. Daca este accesata fara parametri (http://localhost/stone-expert/produse/), categoria implicita este ‘marmura’ iar id-ul va fi id-ul primului produs din categoria respectiva. (figura 3.3.1)

-figura 3.3.1-

Categoria este transmisa prin link sub forma de text, adica numele categoriei. Pentru a determina id-ul categoriei am folosit o functie categorie_id(); (figura 3.1.2) care returneaza id-ul in urma interogarii bazei de date.

-figura 3.3.2-

3.3.1.Meniul cu thumbnailuri

Meniul este generat de functia meniu_thumbnailuri(); (figura 3.3.1.1). Aceasta interogheaza baza de date pentru toate produsele din categoria curenta. Intr-o structura repetitiva de tip while sunt afisate toate produsele si se verifica daca id-ul produsului din baza de date este egal cu id-ul produsului curent. In cazul in care sunt egale, link-ului i se va atribui clasa ‘active’ care va distinctiona produsul curent de restul.

-figura 3.3.1.1-

3.3.2.Detaliile despre produse

Detaliile despre produse se obtin prin interogarea bazei de date folosind ca parametru id-ul unic al produselor care se ia din link. De exemplu id-ul produsului la accesarea sitului cu linkul http://localhost/stone-expert/marmura/biskala-beige-96/ este 96. Am creat o functie numita produs();(figura 3.3.2.1) care este apelata pentru fiecare camp al tabelului ‘produse’ care il dorim afisat (figura 3.3.2.2).

-figura 3.3.2.1-

-figura 3.3.2.2-

Se face o verificare daca produsul are poza. Daca aceasta exista se afiseaza poza respectiva, in caz contrar se afiseaza o poza implicita numita ‘fara-foto.jpg’. Functia ucwords(); transforma prima litera a ficarui cuvant in majuscula.

3.3.3.Votarea produselor

Utilizatorii pot vota produsele de pe site cu o nota de la 1 la 5 facand click pe una din cele 5 stelute (figura 3.3.3.1). Prima steluta reprezinta nota 1, a doua steluta nota 2 si asa mai departe. Fiecare steluta are 2 pozitii, una aprinsa si una stinsa. De exmplu daca mutati cursorul pe a treia steluta, primele 3 vor fi aprinse iar ultimele doua vor fi stinse.

-figura 3.3.3.1-

Fiecare produs se poate vota o singura data de catre un utilizator. Aceasta verificare se face dupa IP.

Sistemul de votare are 2 stadii, cel activ, in cazul in care nu s-a votat, iar cel inactiv, in cazul in care IP-ul utilizatorului se afla in baza de date la produsul respectiv.

-figura 3.3.3.2-

Interogarea bazei de date ne returneaza media voturilor inregistrate la un produs. Se rotunjeste valoarea cu functia round(); si se aprinde numarul necesar de stelute.

Animatia stelutelor la actiunea hover (la asezarea cursorului peste stelute) este realizata cu javascript, cu libraria jquery. (figura 3.3.3.3)

-figura 3.3.3.3-

La asezarea cursorului deasupra unei stelute i se atribuie ei si stelutelor precedente clasa ‘on’. La mutarea cursorului in afara stelutelor se sterge clasa ‘on’, iar la click se atribuie clasa ‘stay-on’.

Inregistrarea notei in baza de date se face cu ajutorul AJAX-ului, nefiind necesara reincarcarea paginii. Functia ajax (figura 3.3.3.4) apeleaza scriptul php (figura 3.3.3.5) care introduce in baza de date nota, ip-ul utilizatorului si id-ul produsului caruia ii apartine nota.

-figura 3.3.3.4-

-figura 3.3.3.5-

3.3.4.Comentariile + Adaugarea comentariilor

Utilizatorii isi pot exprima parerile despre calitatea unui produs prin aceasta sectiune.

Afisarea comentariilor (figura 3.3.4.1) se face prin interogarea bazei de date, unde id-ul produsului este acelasi cu produsul respectiv.

Se numara rezultatele cu mysql_num_rows(). In cazul in care se returneaza zero se afiseaza mesajul “Nici un comentariu”, iar in caz contrar se afiseaza comentariile.

-figura 3.3.4.1-

Formularul de adaugare (figura 3.3.4.3 si figura 3.3.4.3) a unui comentariu este situat chiar sub sectiunea unde se afiseaza comentariile.

-figura 3.3.4.3-

-figura 3.3.4.3-

In momentul in care utilizatorul completeaza formularul si apasa pe butonul adauga, informatiile sunt trimise la scriptul php care le introduce in baza de date (figura 3.3.4.4). Id-ul produsului este transmis ca si parametru prin tag-ul action al formularului.

-figura 3.3.4.4-

In urma introducerii comentariului in baza de date utilizatorul este redirectat la pagina precedenta.

3.3.5.Comandarea produselor

Utilizatorii pot sa comande produsele dorite prin simpla apasare a unui buton (figura 3.3.5.1). In urma comandarii unui produs sunt redirectati la pagina “Cosul meu”.

-figura 3.3.5.1-

Produsele comandate sunt adaugate intr-un array (un vector) care este pastrat intr-o sesiune (figura 3.3.5.2).

Sesiunea reprezinta o modalitate prin care PHP retine informatii de la o pagina la alta. Odata cu initializarea unei sesiuni se pot pastra anumite variabile chiar daca in continuare se viziteaza si alte pagini ale site-ului. In principiu informatia se pastreaza pana la inchiderea browser-ului, sau pana cand se distruge in mod intentionat sesiunea curenta.

-figura 3.3.5.2-

Se trimite ca si parametru prin link id-ul produsului si categoria din care face parte. In urma unei interogari a bazei de date care returneaza numele produsului ($row[‘titlu’]), in sesiune se pastreaza in cheia ‘nume’ valoarea ‘categorie – nume produs’ iar in cheia ‘id_produs’ pastram id-ul produsului.

In pagina ‘Cosul meu’ utilizatorul are optiunea de a sterge un produs din cos apasand pe linkul ‘sterge’ care se afla in dreapta produsului sau de a finaliza comanda, apasand pe butonul ‘Comanda’.

Stergerea unui produs (figura 3.3.5.3) se face prin stergerea din sesiune a valorilor produsului respectiv.

-figura 3.3.5.3-

Daca utilizatorul apasa butonul “Comanda” este dus la pagina finalizare-comanda.php unde va trebui sa completeze un formular (figura 3.3.5.4 si figura 3.3.5.5) cu numele si prenumele sau, adresa de livrare si observatii.

-figura 3.3.5.4-

-figura 3.3.5.5-

In urma trimiterii comenzii datele sunt prelucrate si introduse in baza de date, cosul este golit iar utilizatorul este redirectat la pagina cu produse (figura 3.3.5.6). Vectorul este transformat intr-un sir de caractere de forma produs-id-1_nume-produs-1,produs-id-2_nume-produs-2, etc. Aceasta formatare permite reintroducerea datelor din baza de date intr-un vector pentru afisarea corecta a lor.

-figura 3.3.5.6-

In orice moment, indiferent unde s-ar afla utilizatorul pe site, in coltul dreapta sus al sitului ii apare butonul “Cosul Meu” si in paranteza cate produse are in cos (figura 3.3.5.7).

-figura 3.3.5.7-

3.4.Pagina “Contact”

In pagina de contact se gasesc datele de contact ale firmei (numar de telefon, adresa precum si o harta cu locatia sediului firmei) si un formular de contact (figura 3.4.1 si figura 3.4.2).

-figura 3.4.1-

-figura 3.4.2-

La apasarea butonului ‘trimite’ valorile din formular sunt trimise la pagina mail.php (figura 3.4.3) unde datele sunt trimise la adresa de email a administratorului sitului cu functia mail(). Functia mail() primeste ca parametri adresa de email la care se va trimite emailul, subiectul emailului, continutul emailului si headere aditionale. Ca si header aditional am adaugat “From: adresa de email din formular”, pentru ca emailul sa arate ca si cum ar fi trimis de utilizator, nu de server.

-figura 3.4.3-

Dupa trimiterea emailului sesiunea ‘sent’ ia valoarea true si utilizatorul este redirectat inapoi la pagina de contact. In pagina de contact se verifica valoarea sesiunii ‘sent’.

In cazul in care ea este false se afiseaza formularul de contact, iar in caz contrar cand este true se afiseaza mesajul de confirmare “Mesajul a fost trimis” dupa care sesiunea ia din nou valoarea false; ca urmare, la reincarcarea paginii va aparea din nou formularul de contact.

4.Partea de administrare

4.1.Descriere generala

Panoul de administrare este de tip front-end, adica administrarea se face din interfata sitului. Administratorul navigheaza prin site la fel ca si utilizatorul singura diferenta fiind linkurile de adaugare, modificare, stergere al produselor care apar in pagina fiecarui produs (figura 4.1.1).

-figura 4.1.1-

Autentificarea ca administrator a sitului se face de la adresa http://localhost/stone-expert/admin/, linkul nefiind afisat nicaieri in site el trebuie introdus manual in bara de adresa a browserului. Aceasa creste securitatea sitului. Odata ajuns la pagina de autentificare, administratorul ii este ceruta o parola (figura 4.1.2).

-figura 4.2.1-

Dupa ce introduce parola si apasa pe butonul autentificare se face o verificare a parolei (figura 4.2.3). In cazul in care parola este buna, se memoreaza in sesiunea ‘logged’ valoarea true si se face o redirectare la pagina cu produse iar in caz contrat valoarea false si este afisat un mesaj de eroare.

-figura 4.2.3-

Pentru iesirea din contul de administrator se va face click pe butonul ‘logout’ care atribuie sesiunii ‘logged’ valoarea false.

Afisarea meniului din figura 4.2.1 se face printr-o functie numita admin();(figura 4.2.3). Primul pas este verificarea valorii sesiunii ‘logged’ pentru a afla daca administratorul este logat, caz in care se vor afisa linkurile. Variabila $id este id-ul produsului curent iar $categoria este id-ul categoriei din care face parte produsul.

-figura 4.2.3-

4.2.Adaugarea produselor

Pentru a adauga un produs nou in baza de date administratorul va face click pe linkul ‘Adauga produs’ si va ajunge la pagina adauga.php unde se afla formularul de adaugare (figura 4.2.1 si figura 4.2.2).

-figura 4.2.1-

-figura 4.2.2-

Categoria in care se afla administratorul va fi transmisa prin parametru si in formular, campul ‘Categorie’ va selecta automat categoria respectiva.

Valorile campului ‘Categorie’ sunt generate cu ajutorul functiei optiuni(); (figura 4.2.3). Este interogata baza de date pentru afisarea tuturor categoriilor si in cazul in care categoria transmisa ca parametru este egala cu categoria din baza de date, optinuii i se va da atributul ‘selected’.

-figura 4.2.3-

Administratorul va completa toate campurile cu date despre produs dupa care va apasa pe butonul “Adauga”, dupa care datele vor fi introduse in baza de date si imaginea produsului va fi incarcata pe server (figura 4.2.4)

-figura 4.2.4-

Scriptul care adauga produsul incepe cu o verificare daca utilizatorul este logat ca administrator. Aceasta verificare se face cu functia isAdmin(); (figura 4.2.5) care returneaza un mesaj de eroare in cazul in care administratorul nu este logat.

-figura 4.2.5-

Apoi se determina id-ul ultimului produs din baza de date, la care se adauga 1 si obtinem id-ul urmatorului produs. Acest id este stocat in variabila $id si este folosit la numele imaginii pentru a nu se suprapune cu alta imagine, id-ul fiind unic.

Numele imaginii este format din categoria produsului, titlul produsului, tara de provenienta si id, care sunt transformate intr-un format prietenos si usor de citit de catre functia url_title();(figura 4.2.6). Functia url_title inlocuieste spatiile si caracterele speciale cu “-“.

-figura 4.2.6-

Dupa pregatirea imaginii, ea se pune pe server cu functia upload();(figura 4.2.7).

-figura 4.2.7-

Functia upload incarca imaginea, o redimensioneaza la 94×70 de pixeli, imagine care va fi folosita in meniul de thumbnailuri si apoi la 314×243 de pixeli, care va fi imaginea mare din descrierea produsului. Numele si calea catre poze sunt stocate in doua sesiuni. Sesiunea ‘thumb’ pentru poza mica si respectiv sesiunea ‘photo’ pentru poza mare.

Dupa toate acestea sunt introduse in baza de date valorile din formulat precum si calea catre poze iar apoi se face o redirectare la pagina cu produsul adaugat.

4.3.Modificarea produselor

Modificarea produselor functioneaza destul de asemanator cu procesul de adaugare. In momentul in care administratorul face click pe modifica produs este dus la pagina modifica.php unde formularul apare gata completat (figura 4.3.1).

-figura 4.3.1-

Sunt transmise prin parametru id-ul si categoria din care face parte produsul. Campul ‘Categoria’ este generat la fel ca si la pagina de adaugare, cu functia optiuni();(figura 4.2.3).

Formularul are doua campuri hidden, primul cu valoarea id-ului si al doilea cu valoarea categoriei. Acestea sunt folosite pentru modificarea in baza de date a produsului (figura 4.3.2). Deasemenea pentru adaugarea valorilor in formular este folosita functia produs(); care am folosit-o si la detaliile produselor (figura 3.3.2.1).

-figura 4.3.2-

Dupa efectuarea modificarilor dorite se face click pe butonul “Modifica” si se executa scriptul php care face modificarea in baza de date (figura 4.3.3). Se incepe cu verificarea utilizatorului cu functia isAdmin(); Apoi se verifica daca s-a ales o noua poza sau nu.

In cazul in care s-a ales o poza noua pentru produs se face o interogare a bazei de date pentru a afla numele pozei curente si se sterge cu functia unlink(); dupa care se incarca pozele noi cu functia upload(); si se modifica numele pozei si a thumbnailului in baza de date.

In caz contrar pozele vechi se redenumesc pentru ca numele lor sa coincida cu numele produsului in cazul in care acesta s-a modificat din formular.

-figura 4.3.3-

Dupa modificarea pozelor se face si modificarea datelor in baza de date iar apoi administratorul este redirectat la pagina produsului respectiv.

4.4.Stergerea produselor

Stergerea unui produs se face prin linkul “Sterge produs”. Se transmite prin link ca parametru id-ul produsului catre scriptul php care va face stergera (figura 4.4.1).

-figura 4.4.1-

Se face verificarea utilizatorului daca este administrator cu functia isAdmin(); dupa care se interogheaza paza de date pentru numele pozelor. In cazul in care produsul are poze, acestea se sterg, pe rand. Dupa stergerea pozelor se sterge si produsul din baza de date iar administratorul este redirectat inapoi la pagina cu produse.

4.5.Comenzile utilizatorilor

Administratorul poate accesa sectiunea “Comenzi” pentru a vedea toate comenzile efectuate de utilizatori (figura 4.5.1).

-figura 4.5.1-

In partea din stanga apare numarul comenzii (dat de identificatorul unic din baza de date), numele utilizatorului, adresa si observatii iar in dreapta se afla produsele comandate. Se interogheaza baza de date pentru toate comenzile facute si se afiseaza intr-un tabel (figura 4.5.2).

Comenzile din baza de date sunt insiruite si despartite cu o virgula. Pentru a le afisa corect trebuie sa le punem intr-un vector. Pentru asta vom folosi functia explode(); care primeste ca parametru un caracter de de delimitare in functie de care se va imparti sirul. In cazul acesta parametrul va fi ‘,’.

-figura 4.5.2-

5.Concluzii

Secolul XXI poate fi definit cel mai bine printr-un singur cuvant: “viteza”. Lumea in care traim evolueaza atat de repede incat uneori ne este greu sa tinem pasul cu ritmul sau nebun. Si pentru ca intreaga lume si-a marit limita de viteza, primul lucru pe care trebuie sa-l facem este sa ne adaptam cat mai repede la noile cerinte, pentru ca numai astfel vom putea tine pasul cu acest “Maraton al Evolutiei”.

Internetul poate fi considerat un competitor serios impotriva timpului. Prin intermediul internetului si, implicit, a site-urilor web, economisim timp important, atat din perspectiva clientilor cat si a firmelor, acesta reprezentand un mod eficient de a prezenta produsele ori serviciile oferite. Mai mult, odata cu crearea unui site de prezentare creste si reputatia firmei si, implicit, veniturile acesteia. Astfel, ambele parti (cumparator-vanzator) au de castigat.

Prin aceasta lucrare am incercat sa realizez un site care sa reprezinte practicitatea si simplicitatea cumparaturilor online. Siteul are un aspect simplu, ‘curat’, usor de folosit atat de client cat si de administrator, fiind foarte bine organizat. Se observa o atentie sporita pentru satisfacerea clientului la un nivel cat mai inalt, acest lucru rezultand din posibilitatea vizualizarii produselor si cumpararii online a acestora.

Deasemenea, interesul pentru parerea clientului este foarte bine exprimat prin optiunea de vot si cea de comentarii la adresa produsului. Astfel se realizeaza comunicarea dintre client si firma, aceasta din urma putandu-si adapta paleta de produse in functie de cerere.

Cateva directii de dezvoltare pentru lucrarea de fata ar fi:

imprementarea unei galerii foto pentru fiecare produs in locul unei singure imagini;

oferirea utilizatorilor posibilitatea de a isi crea un cont unde sa poata salva comenzile si si datele personale;

implementarea unui sistem de plati online prin PayPal;

adaugarea comentariilor sa fie facuta cu AJAX, eliminand astfel inconvenienta de a reincarca pagina la fiecare adaugare;

adaugarea unei sectiuni de comparare a produselor;

adaugarea de continut dinamic pe paginile “Home” si “Servicii”.

6.Bibliografie

[LWLT2005] Luke Welling, Laura Thomson “Dezvoltarea aplicatiilor WEB cu PHP si MySQL, Editia a II-a” , Editura Teoram

[RDLA2004] Robert Dollinger, Luciana Andron “Baze de date si gestiunea tranzactiilor” Editura Albastra, Cluj Napoca 2004

[TA2005] Traian Anghel, “Programarea in PHP”, Polirom, Bucuresti 2005

*** “jQuery post()” – http://api.jquery.com/jQuery.post/

*** “Sesiunea in PHP” – http://www.marplo.net/php-mysql/sesiuni.html

*** “mod_rewrite” – http://www.dobre.name/apache-articles/ce-este-url-rewriting-mod_rewrite-din-apache.html

Bibliografie

[LWLT2005] Luke Welling, Laura Thomson “Dezvoltarea aplicatiilor WEB cu PHP si MySQL, Editia a II-a” , Editura Teoram

[RDLA2004] Robert Dollinger, Luciana Andron “Baze de date si gestiunea tranzactiilor” Editura Albastra, Cluj Napoca 2004

[TA2005] Traian Anghel, “Programarea in PHP”, Polirom, Bucuresti 2005

*** “jQuery post()” – http://api.jquery.com/jQuery.post/

*** “Sesiunea in PHP” – http://www.marplo.net/php-mysql/sesiuni.html

*** “mod_rewrite” – http://www.dobre.name/apache-articles/ce-este-url-rewriting-mod_rewrite-din-apache.html

Similar Posts