Prezentarea Magazinului Virtual
Prezentarea magazinului virtual
Cuprins
Introducere
Capitolul 1
Studiul, analiza și prezentarea sistemului actual
1.1 Rolul și poziția agenției în sistemul economico-social național și în ramura de activitate
1.2. Studiul și analiza sistemului existent.
1.2.1. Prezentarea activității de desfacere la.
1.2.2. Activitatea societatii.
1.2.3. Studiul sistemului de conducere
1.2.4. Alcătuirea sistemului informațional condus din cadrul.
1.3. Analiza sistemului informațional decizional al agentului economic
1.3.1. Principalele fluxuri informaționale și proceduri de prelucrare
1.3.2. Fluxul documentelor
1.4. Dotare tehnică
1.5. Analiza critică și direcții de perfecționare a sistemului actual
1.5.1. Analiza Critică
1.5.2. Direcții de perfecționare
Capitolul 2
Proiectarea de ansamblu a sistemului informatic
2.1. Definirea obiectivelor
2.2. Estimarea necesarului de resurse
2.2.1. Resurse umane
2.2.2. Resurse financiare
2.3. Modelarea prelucrărilor
2.4. Diagrama Entitate – Asociere
2.5. Stabilirea platformei hardware și software și de comunicații
2.6. Componente soft pentru realizarea aplicației
2.6.1. PHP Hypertext Preprocessor
2.6.2. MySQL – My Structured Query Language
2.7. Normalizarea bazei de date
2.8. Calendarul de realizare
Capitolul 3
Proiectarea și programarea în PHP a magazinului virtual
3.1. Proiectarea de ansamblu
3.2. Modelul relațional al bazei de date
3.3. Schema conceptuală a bazei de date
3.4. Structura bazei de date
3.5. Definirea documentelor de ieșire
3.6. Definirea documentelor de intrare
3.7. Descrierea funcțiilor utilizate în aplicație
Capitolul 4
Prezentarea aplicației – Ghid de utilizare al magazinului virtual creat
4.1. Funcții ale aplicației
4.2. Structura magazinului
4.2.1. Secțiunea de prezentare
4.2.2 Secțiunea de client
4.2.3. Secțiunea de administrare
4.3. Implementarea aplicației
4.4. Instalarea aplicației
Concluzii
Bibliografie
ANEXA
Introducere
Proiectul cu tema: „Prezentarea magazinului virtual Music Shop” a fost realizat în urma analizei asupra sistemului de activitate a S.C. Music Shop S.R.L. care are nevoie de o pagină pentru comenzi online.
Fără îndoială, Internetul are în prezent un impact extraordinar asupra lumii afacerilor. Aceasta se datorează avantajelor evidente pe care le prezintă atât comercianților, cât și cumpărătorilor, în comparație cu mijloacele tradiționale de desfășurare a activităților comerciale.
Comerțul electronic se referă la desfășurarea activităților specifice mediului de afaceri (tranzacții) într-un sistem automatizat integrat pentru schimbul de informații utilizând mijloace electronice (rețele de calculatoare).
În comerțul electronic informația circulă între agenții implicați în afacere (vânzător, cumpărător, bancă, transportator, agent de service), fără a utiliza suportul de hârtie (imprimantă sau fax).
Prin costurile reduse pe care le implică deschiderea unui magazin virtual, firmele mici se confruntă cu o barieră mai puțin în calea intrării pe piețele dominate până acum de firme mari. Mai mult, o firmă mică, prin flexibilitatea și deschiderea la nou de care poate da dovadă, se bucură de un mare avantaj față de o firmă mare, dominată de birocrație și conservatorism.
Spre deosebire de angajații obișnuiți, care au nevoie de salarii, un program de lucru, concediu, a căror productivitate variază și sunt subiectivi, un website oferă informații despre firmă și produsele sale sau preia și procesează comenzi 24 de ore din 24, 7 zile din 7, oferind costuri minime. Aceasta mai aduce un avantaj și in cazul extinderii pe piețele externe, când diferența de fus orar ar fi putut îngreuna contactele dintre firme. De asemenea, îmbunătățește comunicarea cu clienții, care nu mai sunt obligați să respecte un anume program, putând obține informații sau lansa comenzi oricând doresc.
Costurile de funcționare pot fi reduse drastic prin automatizarea procesului de comandă. De asemenea există posibilitatea automatizării complete printr-o integrare cu sistemul de gestiune, ceea ce poate duce la o creștere a productivității generale a firmei.
Spre deosebire de o ființă umană, calculatorul poate reține nu numai numele și datele personale ale tuturor clienților, dar și preferințele acestora, fiind capabil să adapteze oferta și modul de prezentare al produselor după profilul fiecărui client. Studiul clienților pe Internet poate fi realizat fără ca aceștia să-și dea măcar seama, fiind disponibile informații ca: localizarea, tipul browserului și al sistemului de operare, site-ul de unde vine, obiceiuri de navigare. Din aceasta cauza, mulți văd acest lucru ca pe o încălcare a intimității persoanei.
Deși, prin comparație cu deschiderea unui magazin obișnuit, costurile lansării unui magazin virtual sunt mult mai reduse, de multe ori nu pot fi totuși evaluate corect. O firmă care nu are implementat deja un sistem informatic de gestiune, sau ai cărei angajați nu au cunoștințe tehnice minime, se poate confrunta cu creșterea costului de lansare peste așteptări, datorate necesității achiziționării de sisteme sau de training pentru angajați. Cu toate acestea, numărul magazinelor virtuale autohtone este în continuă creștere, sumele tranzacționate crescând și ele.
Acest proiect prezintă realizarea unui site web ce va avea rolul unui magazin virtual, punând în valoare avantajele comerțului electronic amintite anterior. În plus, utilizarea site-ului nu va presupune nici un fel de cunoștiințe tehnice din partea utilizatorului, acesta putând fi utilizat cu ușurință atât de utilizatorii experimentați cât și de cei începători.
Capitolul 1
Studiul, analiza și prezentarea sistemului actual
S.C. MusicShop S.R.L. s-a înființat în luna aprilie, anul 2006 cu obiectivul principal axat pe vânzările de instrumente muzicale pe internet, pe plan național. S.C. Music Shop S.R.L. este înregistrată la Oficiul Registrului Comerțului sub nr. 40/9032/02.04.2007 și este plătitoare de TVA. Sediul social al firmei, precum și depozitul sunt localizate în Ploiești, str. Cristian Petrescu nr.52. Societatea deține un punct de lucru la adresa: Bld. Unirii nr.12, Ploiești.
Societatea a pornit în anul 2006 de la ideea de a promova alt tip de comerț decat cel clasic, într-un mediu propice afacerilor, în plină dezvoltare precum este Internetul.
Datorită răspândirii continue a accesului la Internet către utilizatorii deopotrivă casnici și corporații, societatea a continuat să îmbunătățească accesibilitatea în cadrul site-ului pentru a facilita o comunicare cât mai eficientă cu potențialii clienți. Această strategie de conlucrare eficientă cu clienții continuă să modeleze și felul cum S.C. Music Shop S.R.L. se dezvoltă ca organizare internă.
1.1 Rolul și poziția agenției în sistemul economico-social național și în ramura de activitate
Obiectul de activitate al societății este : “Comerț cu amănuntul prin corespondență” Cod C.A.E.N. – 5621.
Această clasă include:
vânzarile cu amănuntul ale oricaror feluri de produse, prin corespondență, alese de cumpărători pe bază de cataloage sau orice alt tip de ofertă;
vânzarile directe, prin intermediul televiziunii, radioului, telefonic, sau prin
Internet.
S.C. Music Shop S.R.L. comercializează o gamă diversificată de instrumente muzicale, și oferă servicii de service.
Obiectivele urmărite de către societatea Music Shop prin intermediul ferestrei către piața online și anume site-ul http://www.musicshop.ro sunt două:
maximizarea profitului în condițiile susținerii unei strategii de preț echitabilă față de clienți;
susținerea de campanii publicitare prin intermediul înregistrării la un motor de căutare (e.g.Google) și bannere publicitare pe alte site-uri de profil ale partenerilor de afaceri.
De asemeni societatea MusicShop colaboreaza cu diverse societăți și companii dezvoltatoare de instrumente muzicale și firme de distribuție pe plan național.
1.2. Studiul și analiza sistemului existent al S.C. Music Shop S.R.L.
Comerțul electronic se referă la desfășurarea activităților specifice mediului de afaceri (tranzacții) într-un sistem automatizat integrat pentru schimbul de informații utilizând mijloace electronice (rețele de calculatoare). O definiție posibilă a Comerțului Electronic ar fi: “orice formă de tranzacții în afaceri în cadrul căreia părțile interacționează electronic în loc de realizarea de schimburi fizice sau contact fizic direct.”
În comerțul electronic informația circulă între agenții implicați în afacere (vânzător, cumpărător, bancă, transportator, agent de service), fără a utiliza suportul de hârtie (imprimantă sau fax).
Conceptul de distribuție nu trebuie confundat cu mișcarea produselor, în timp ce mișcarea produselor are în vedere deplasarea fizică a produselor de la producție la consum, conceptul de distribuție are în vedere un proces mai larg, care începe în momentul în care produsul este gata pentru a fi lansat pe piață și se sfârșește odată cu consumarea actului de vânzare la consumatorul final. În acest interval de timp și spațiu au loc o serie de activități economice, cum ar fi: livrarea produselor, transportul acestora, depozitarea și conservarea lor, stocarea, vânzarea cu ridicata și cu amănuntul; mobilizarea resurselor materiale, financiare și umane necesare realizării procesului respectiv; stabilirea modalităților de transfer a titlului de proprietate și asigurarea practică a acestor titluri.
Toate acestea au drept satisfacerea corespunzătoare a nevoilor consumatorilor și, prin acestea, creșterea cifrei de afaceri, generatoare de profit, a fiecărei firme implicate în tranzacțiile comerciale.
Prin politica de distribuție trebuie să se asigure livrarea produselor către clienți în următoarele condiții, care, de altfel, sunt și componente ale calității:
produsele trebuie să ajungă la clienți în stare bună;
în cantitatea comandată;
la locul stabilit;
la timpul stabilit.
1.2.1. Prezentarea activității de desfacere la S.C. Music Shop S.R.L.
Activitatea de desfacere în cadrul firmei S.C Music Shop S.R.L. se desfășoară pe două ramuri:
Desfacere en-gros;
Desfacere en-detail.
Desfacerea en-gros este realizată cu ajutorul unei echipe de angajați ai firmei cu contract de colaborare pe o perioadă determinată, care are ca scop:
Asigurarea cererii, din punct de vedere cantitativ, calitativ și structural;
Desfacerea en-gros a produselor comandate în urma achitării acestora la destinația finală din București.
Desfacerea en-detail este realizată prin intermediul magazinului on-line al firmei.
Managementul desfacerii produselor cuprinde activitățile prin care se asigură vânzarea produselor, implicând stabilirea formelor de distribuție reprezentate de ridicarea produselor de la sediul firmei sau livrearea lor la client si prin desfacerea produselor se încheie ciclul economic al firmei.
În componența managementului desfacerii produselor se cuprind următoarele activități specifice:
Efectuarea unor studii de piață pentru a cunoaște mărimea cererii de produse sau de servicii, respectiv poziția pe piață a concurenților;
Asigurarea unui portofoliu de comenzi primite de la consumatori și încheierea contractelor de livrare cu aceștia;
Elaborarea planului de desfacere al firmei și a programelor operative de livrări;
Crearea unor rețele proprii de desfacere a produselor pe piața internă, acestea având avantajul că permit o cunoaștere directă a reacției consumatorilor și în consecință măresc flexibilitatea firmei;
Organizarea unor rețele proprii de service a produselor, prin aceasta urmărindu-se mărirea satisfacției consumatorilor, respectiv fidelizarea lor;
Stabilirea nivelului optim al stocurilor de produse, în concordanță cu clauzele contractelor economice încheiate cu beneficiarii produselor;
Formarea loturilor de livrare potrivit clauzelor fiecărui contract de livrare;
Organizarea activității operative de livrare a produselor finite către beneficiari;
Urmărirea continuă a nivelului stocului de produsi S.C Music Shop S.R.L. se desfășoară pe două ramuri:
Desfacere en-gros;
Desfacere en-detail.
Desfacerea en-gros este realizată cu ajutorul unei echipe de angajați ai firmei cu contract de colaborare pe o perioadă determinată, care are ca scop:
Asigurarea cererii, din punct de vedere cantitativ, calitativ și structural;
Desfacerea en-gros a produselor comandate în urma achitării acestora la destinația finală din București.
Desfacerea en-detail este realizată prin intermediul magazinului on-line al firmei.
Managementul desfacerii produselor cuprinde activitățile prin care se asigură vânzarea produselor, implicând stabilirea formelor de distribuție reprezentate de ridicarea produselor de la sediul firmei sau livrearea lor la client si prin desfacerea produselor se încheie ciclul economic al firmei.
În componența managementului desfacerii produselor se cuprind următoarele activități specifice:
Efectuarea unor studii de piață pentru a cunoaște mărimea cererii de produse sau de servicii, respectiv poziția pe piață a concurenților;
Asigurarea unui portofoliu de comenzi primite de la consumatori și încheierea contractelor de livrare cu aceștia;
Elaborarea planului de desfacere al firmei și a programelor operative de livrări;
Crearea unor rețele proprii de desfacere a produselor pe piața internă, acestea având avantajul că permit o cunoaștere directă a reacției consumatorilor și în consecință măresc flexibilitatea firmei;
Organizarea unor rețele proprii de service a produselor, prin aceasta urmărindu-se mărirea satisfacției consumatorilor, respectiv fidelizarea lor;
Stabilirea nivelului optim al stocurilor de produse, în concordanță cu clauzele contractelor economice încheiate cu beneficiarii produselor;
Formarea loturilor de livrare potrivit clauzelor fiecărui contract de livrare;
Organizarea activității operative de livrare a produselor finite către beneficiari;
Urmărirea continuă a nivelului stocului de produse aflat în depozit pentru a preîntâmpina situațiile de insuficiență a produselor, care ar afecta ritmicitatea livrărilor la beneficiari.
1.2.2. Activitatea societatii S.C. Music Shop S.R.L.
Societatea comercializează următoarele produse și oferă servicii:
Componente hardware: procesoare, plăci de bază, subsisteme multimedia (audio/video), memorii (flash și non-volatile), dispozitive de stocare optice și magnetice, dispozitive de afișare: proiectoare, display-uri (CRT și TFT), dispozitive periferice de control, componente pentru achizitionarea semnalului video și audio (tuner tv, plăci captură), carcase și surse de alimentare;
Componente software: sisteme de operare (Microsoft Windows, Linux, BeOS, Solaris), pachete profesionale de editare text (Microsoft Office, Quark eXpress, Adobe Pagemaker), pachete profesionale pentru editarea multimedia și mediu web (Pinnacle Studio Pro 10, Sonic Foundry Vegas, Macromedia Flash), software antivirus (Kaspersky, BitDefender, McAfee, Nod32), software destinat entertainment-ului;
Consumabile: cartușe și tonere destinate imprimantelor, hârtie imprimantă, cabluri și conectori;
Birotică: imprimante, faxuri, medii de stocare optice sau magnetice (CD, DVD, DVD-RAM, FloppyDisk etc.);
Service post garanție și transport în regim de urgență.
1.2.3. Studiul sistemului de conducere S.C. Music Shop S.R.L.
Organigrama
Figura 1.1. – Organigrama S.C. Music Shop S.R.L.
Director general
ATRIBUȚII ȘI OBLIGAȚII:
Evaluează și aprobă împreună cu echipa managerială a departamentelor planuri de dezvoltare și retehnologizare pentru anul următor, analizează și evaluează noi oportunități de marketing adresate pieței formate din clienții și partenerii firmei, definește planurile de dezvoltare și capacitățile de adaptare a departamentelor la noile cerințe și nevoi ale pieței cu ținta clientelă actuală și potențială;
Face parte din echipa managerială;
Aprobă sau respinge unele măsuri, în funcție de necesitățile societății și informațiile provenite din cadrul departamentelor, încheie cu alte firme contracte de colaborare și alte documente oficiale la nivelul societății comerciale;
Se ocupă cu raportările și analiza economicã a societății;
Încheie cu alte firme contracte de colaborare, contracte de servicii, contracte de sponsorizări și alte documente oficiale la nivelul societății comerciale.
CERINȚE DE COMPETENȚĂ PROFESIONALĂ:
Studii superioare de lunga durata in domeniu;
Experienta profesionala minim 5 ani (3 ani in domeniu);
Coordonarea departamentelor : tehnic, economic și vânzări.
ATRIBUȚIILE POSTULUI:
Analizează cerințele clientului și stabilește factorii implicați în procesul de analiză;
Negociază și aprobă condițiile generale de contractare;
Analizează și aprobă modificările aduse ulterior contractului incheiat;
Decide ce activitătii fac obiectul subcontractarii;
Program de lucru – 8 ore.
Manager Vanzari
ATRIBUȚII SI OBLIGATII:
Analizează realizările serviciului de proiectare cu privire la produse noi;
Raportează directorului general situația vînzărilor, realizările serviciului de Proiectare și evoluția sistemului informatic;
Coordoneaza în mod direct serviciul informatic;
Primește rapoarte zilnice cu privire la evoluția pietei;
Întocmește rapoarte zilnice despre evoluția vânzărilor și realizările tuturor compartimentelor pe baza constatărilor și a rapoartelor pe care le primește de la departamentele aflate în subordine.
1.2.4. Alcătuirea sistemului informațional condus din cadrul S.C. Music Shop S.R.L.
Departamentul financiar-contabil
Departamentul de vânzări
Departament de aprovizionare/transport
Departamentul financiar-contabil
Serviciul Financiar
ATRIBUȚII ȘI OBLIGAȚII:
întocmește registru de casă zilnic pentru operațiile de plăți și încasările în numerar;
raportează directorului economic situația financiară;
pe baza fișei de pontaj lunare primită de la departamentul resurse umane întocmește statele de plată;
urmărește buna încasare a obligațiilor de plată de la clienți și planifică și onorează obligațiile față de furnizor;
înregistrează în evidența contabilă extrasele de cont ridicate zilnic de la bancă unde sunt evidențiate încasări și plăți cu ajutorul mijloacelor de plată electronice.
Serviciul contabil
ATRIBUȚII ȘI OBLIGAȚII:
urmăresc și înregistrează încasările de la clienți;
întocmește lunar rapoarte de activitate;
întocmește balanța de verificare și date cu privire la situația economico-financiară
înregistreaza în contabilitate amortizările mijloacelor fixe, uzura obiectelor de inventar;
asigură înregistrarea corectă și cronologică a tuturor achizițiilor produse;
raportează directorului economic situația contabilă;
analizează zilnic bugetul de venituri și cheltuieli.
Departamentul de vânzări
Este condus de un manager de vânzări care se ocupă de activitatea de desfacere a firmei.
ATRIBUȚII SI OBLIGAȚII:
prelucrarea comenzilor primite de la clienți;
centralizează comenzile pe fiecare client în parte în fișa clientului;
solicită directorului de marketing aprobare pentru acordarea de termene de plată flexibile în funcție de particularitățile fiecărui client;
totalizează comenzile la fiecare sfârșit de zi operând scăderea din stocuri a fiecărui produs;
raportează directorului de marketing evoluția clienților.
Departamentul de aprovizionare/transport
Are ca angajați șoferii care se ocupă cu aprovizionarea de la furnizori și distribuirea propriu-zisă a produselor la beneficiari.
ATRIBUȚII ȘI OBLIGAȚII:
achiziționează produsele în funcție de comenzile primite de la managerul de vânzări;
achiziționează produse destinate vânzării în funcție de comenzile primite de la departamentul de vânzări;
analizează prețurile oferite de diverși furnizori;
negociază cu furnizorii termenele de plată;
emit documente de plată la achizițiile de produse, document înregistrat într-un registru special și transmis zilnic serviciului financiar – contabil pentru a fi incluse în bugetul de venituri și cheltuieli;
raportează directorului de producție evoluția prețurilor pentru materiile prime și analizează calitatea materiilor prime ce urmează a fi achiziționate;
să nu părăsească programul de lucru fără aprobare;
să completeze corect foile de parcurs, și să le predea la termenul stabilit;
răspunde pentru pagubele produse societății sau terților din vina sa;
să cunoască legea privind circulatia pe drumurile publice;
îndeplinește orice altă sarcină ce îi este încredințată de către superiorii săi.
1.3. Analiza sistemului informațional decizional al agentului economic
1.3.1. Principalele fluxuri informaționale și proceduri de prelucrare
Descrierea documentelor necesare:
Comanda
Listă a produselor cerute unui furnizor, în care se specifică produsul, unitatea de măsură, cantitatea, prețul de achiziție, valoarea fără TVA și data solicitată pentru livrare
Registru de evidență comenzi
Document de evidență a comenzilor în care se specifică un număr curent, numele clientului, data la care s-a făcut comanda și valoarea produselor comandate.
Fisa client
Document anexat la registrul de evidentă comenzi în care se specifică numarul comenzii, data și valoarea comenzii.
Registru de predare-primire comenzi
Document folosit de agenții de vânzări la primirea comenzilor în care se specifică numele clientului, numărul comenzii, numele și prenumele agentului care a preluat comanda și semnătura de primire a acestuia.
Fisa depozit
Document de gestiune a produselor din stoc, în care se specifică date despre produs (intrări, ieșiri, stoc) și tipul și numărul documentelor pe baza cărora s-au făcut operațiile.
Factura
Document fiscal întocmit în trei exemplare (pentru cumpărător, înregistrare în contabilitate, arhivare) la vânzarea sau cumpărarea unor produse
Este reprezentată în prima fază prin antetul firmei cu data despre adresă, nr. de telefon și e-mail, codul unic de înregistrare, capitalul social, cont IBAN, banca; în cea de-a doua numărul facturii și avizului de însoțire a mărfii și data emiterii, fiind urmată de o a treia cu date despre cumpărător. În continuare se descriu: denumirea produselor, unitatea de măsură, cantitatea și valoarea fără TVA și TVA-ul, semnătura furnizorului în stânga, la mijloc vom avea date privind expediția și semnătura de primire, iar în dreapta acestuia avem totalul de plată și semnătura de primire .
Aviz de însoțire a mărfii
Document de gestiune ce însoțește produsul și marchează schimbarea gestiunii și în care se specifică date despre produse, unitatea de măsură, cantitatea livrată, prețul unitar și valoarea produsului.
Analiza contractului
Activități sistematice efectuate înainte de semnarea contractului pentru a se asigura că sunt definite în mod corespunzător, fără ambiguități, condițiile referitoare la realizarea și calitatea produsului și că acestea sunt documentate și pot fi îndeplinite.
Contract
Document cu caracter juridic încheiat între S.C. Music Shop S.R.L și client cu privire la comercializarea de produse sau prestarea unor activități.
1.3.2. Fluxul documentelor
Contractul de Muncă:
CONTRACT INDIVIDUAL DE MUNCĂ
încheiat și înregistrat sub nr. ..…/…….. în registrul general de evidență a salariaților*)
A. Părțile contractului
Angajator Persoana juridică/fizică …………………………………………………, cu sediul/domiciliul ………………………………/………………………………………, înregistrată la registrul comerțului/autoritățile administrației publice din …………………, sub numărul……………., cod fiscal……………………………, telefon ……………….., reprezentată legal prin …………………………, în calitate de ……………………………, și salariatul/salariata–Dl/Dna …………………………………, domiciliat(ă) în localitatea ………………………….., str. ……………… nr. ……, județul ……………………, posesor al actului de identitate BI/CI/Pașaport seria ………, nr …………………, eliberat/eliberată de ………………………… la data de ……………, CNP ……………………………………, /permis de munca seria …… nr. …………… din data ……………… am încheiat prezentul contract individual de muncă în următoarele condiții asupra cărora am convenit:
B. Obiectul contractului ……………………………………………………………
C. Durata contractului:
a) nedeterminată, salariatul/salariata ………………………………… urmând să înceapă activitatea la data de ……………;
b) determinată, de …………… luni, pe perioada cuprinsă între data de …………… și data de …………… pe perioada suspendării contractului individual de muncă al titularului de post;
D. Locul de muncă
1. Activitatea se desfășoară la ………………………………………………………
2. În lipsa unui loc de muncă fix salariatul va desfășura activitatea astfel ………………………………………………………………………………………………
E. Felul muncii
Funcția/meseria …………………… conform Clasificării Ocupațiilor din România;
F. Atribuțiile postului
Atribuțiilepostului sunt prevăzute în fișa postului, anexă la contractul individual de muncă*).
G. Condiții de muncă:
1. Activitatea se desfășoară în conformitate cu prevederile Legii nr. 31/1991
2. Activitatea prestată se desfășoară în condiții normale /deosebite/speciale de muncă potrivit Legii nr. 19/2000 privind sistemul public de pensii și alte drepturi de asigurări sociale, cu modificările și completările ulterioare
H. Durata muncii:
1. O normă întreagă, durata timpului de lucru fiind de …… ore/zi …… ore/săptămână
a) Repartizarea programului de lucru se face după cum urmează ……/……/…… (ore zi/ore noapte / inegal);
b) Programul de lucru se poate modifica în condițiile regulamentului intern/contractului colectiv de muncă aplicabil.
2. O fracțiune de normă de …… ore/zi (cel puțin 2 ore/zi), …… ore / săptămână;
a) Repartizarea programului de lucru se face după cum urmează ……/…… (ore zi/ore noapte);
b) Programul de lucru se poate modifica în condițiile regulamentului intern/contractului colectiv de muncă aplicabil
c) Nu se vor efectua ore suplimentare,cu excepția cazurilor de forță majoră sau pentru alte lucrări urgente destinate prevenirii producerii unor accidente sau înlăturării consecințelor acestora.
I. Concediul
Durata concediului anual de odihnă este de ……………………………. zile lucrătoare, în raport cu durata muncii ( normă întreagă, fracțiune de normă).
De asemenea, beneficiază de un concediu suplimentar de …………………………
J. Salariul:
1. Salariul de bază lunar brut …………………………………… lei.
2. Alte elemente constitutive :
a) sporuri ……………………….………………;
b) indemnizații …………………………..…;
c) alte adaosuri…………………….;
3. Orele suplimentare prestate în afara programului normal de lucru sau în zilele în care nu se lucrează ori în zilele de sărbători legale se compensează cu ore libere plătite sau se plătesc cu un spor la salariu, conform contractului colectiv de muncă aplicabil sau Legii nr. 53/2003 Codul muncii.
4. Data/datele la care se plătește salariul este/sunt ……………………. .;
K. Drepturi și obligații ale părților privind sănătatea și securitatea în muncă:
a) echipament individual de protecție …………………………………;
b) echipament individual de lucru ………………………………………;
c) materiale igienicosanitare………………………………;
d) alimentație de protecție ……………………………….…;
e) alte drepturi și obligații privind sănătatea și securitatea în muncă ……………………………………………………………………………………………………………………………………………………………………………………………;
L. Alte clauze:
a) perioada de proba este de ………………………………………………………;
b) perioada de preaviz, în cazul concedierii, este de ………………………zile lucrătoare, conform Legii nr. 53/2003Codul Muncii sau contractului colectiv de muncă;
c) perioada de preaviz în cazul demisiei este de …… zile calendaristice, conform Legii nr. 53/2003 Codul Muncii sau contractului colectiv de muncă;
d) în cazul în care salariatul urmează să își desfășoare activitatea în străinătate, informațiile prevăzute de art. 18 alin. (1) din Legea nr. 53/2003 Codul Muncii se vor regăsi și în contractul individual de muncă;
e) alte clauze;
M. Drepturi și obligații generale ale părților:
1. Salariatul are, în principal, următoarele drepturi:
a) dreptul la salarizare pentru munca depusă;
b) dreptul la repaus zilnic și săptămânal;
c) dreptul la concediu de odihnă anual;
d) dreptul la egalitate de șanse și de tratament;
e) dreptul la securitate și sănătate în muncă;
f) dreptul la formare profesională, în condițiile actelor adiționale;
2. Salariatului îi revin, în principal, următoarele obligații:
a) obligația de a realiza norma de muncă sau, după caz, de a îndeplini atribuțiile ce îi revin conform fișei postului;
b) obligația de a respecta disciplina muncii;
c) obligația de fidelitate față de angajator în executarea atribuțiilor de serviciu;
d) obligația de a respecta măsurile de securitate și sănătate a muncii în unitate;
e) obligația de a respecta secretul de serviciu.
3. Angajatorul are, în principal, următoarele drepturi:
a) să dea dispoziții cu caracter obligatoriu pentru salariat, sub rezerva legalității lor;
b) să exercite controlul asupra modului de îndeplinire a sarcinilor de serviciu;
c) să constate săvârșirea abaterilor disciplinare și să aplice sancțiunile corespunzătoare, potrivit legii, contractului colectiv de muncă aplicabil și regulamentului intern.
4. Angajatorului în revin, în principal, următoarele obligații:
a) să acorde salariatului toate drepturile ce decurg din contractele individuale de muncă, din contractul colectiv de muncă aplicabil și din lege;
b) să asigure permanent condițiile tehnice și organizatorice avute în vedere la elaborarea normelor de muncă și condițiile corespunzătoare de muncă;
c) să informeze salariatul asupra condițiilor de muncă și asupra elementelor care privesc desfășurarea relațiilor de muncă;
d) să elibereze, la cerere, toate documentele care atestă calitatea de salariat a solicitantului;
e) să asigure confidențialitatea datelor cu caracter personal a acestuia;
N. Dispoziții finale
Prevederile prezentului contract individual de muncă se completează cu dispozițiile Legii nr. 53/2003 Codul
Muncii și ale contractului colectiv de muncă aplicabil încheiat la nivelul angajatorului / grup de angajatori / ramură / național, înregistrat sub nr. ………………/…………… la D.G.M.S.S a județului/municipiului ……………/M.M.S.S.
Orice modificare privind clauzele contractuale în timpul executării contractului individual de muncă impune încheierea unui act adițional la contract, conform dispozițiilor legale.
Prezentul contract s-a încheiat în ____ exemplare, câte unul pentru fiecare parte.
O. Conflictele în legătură cu încheierea, executarea, modificarea, suspendarea sau încetarea prezentului contract individual de muncă sunt soluționate de către instanța judecătorească competentă material și teritorial, potrivit legii.
Angajator,
……………………………..
Reprezentant legal,
………………………………
Salariat,
………………………..
Pe data de ………………………………….. prezentul contract încetează in temeiul art. …………….. din Legea nr. 53/2003Codul Muncii, în urma îndeplinirii procedurii legale.
Angajator,
……………………
Registru de evidență comenzi:
Model Factură:
S.C. Music Shop SRL FACTURĂ
Str. Cristian Petrescu nr.52
Ploiești
VAT: RO 1136432
e-mail: [anonimizat]
Tel/Fax: 021/246562 Factura #1
Mobil: 07243234211 Data:3.01.2009
Cumpărător:
S.C. BINDU SRL
Ploiești 505700 PH
Str. Românescu Nr. 32
Tel:
Fax:
e-mail:
Model Factură
Banca: BCR – Sucursala Ploiești
IBAN: RO62RNCB0060002329310002
Aviz de însoțire a mărfii:
Figura 1.2. – Aviz de însoțire a Mărfi – S.C. Music Shop S.R.L.
1.4. Dotare tehnică
Societatea deține 11 computere folosite în cadrul fiecărui departament. Acestea au următoarea configurație:
Model Procesor: Intel Core 2 Quad Q9650 @ 3,06MHz;
Memorie RAM: 1024MB DDR II / 667MHz;
Placa video: nVidia GeForce 8600GT 256MB GDDR3;
HDD: 500GB @ 7200rpm;
Sistem de Operare: Microsoft Windows XP En OEM;
Monitor LCD: Samsung SyncMaster 17”;
Imprimantă: EPSON LX-1170+II (Matriceala).
1.5. Analiza critică și direcții de perfecționare a sistemului actual
1.5.1. Analiza Critică
În momentul actual S.C. Music Shop S.R.L. nu deține o pagină web unde să aibă expuse produsele pentru vânzare, de aceea se dorește implentarea unei aplicații web pentru listarea produselor dar și pentru a facilita comanda lor online în mod rapid.
1.5.2. Direcții de perfecționare
Pentru ca afacerea să fie de succes, trebuie ca ea să fie cunoscută. Prin accesarea internetului, vizitatorul are acces mai rapid la date, informații doar prin apăsarea unui click.
Am ales acest mod de prezentare deoarece în zilele noastre internetul este la baza oricărei afaceri, el oferind o gamă variată de informație.
Acest site va avea un rol foarte important în politica de dezvoltare a societății, în primul rând pe site vor fi prezentate toate produsele distribuite de S.C. Music Shop S.R.L., dar și posibilitatea de comandă online într-un mod foarte rapid și ușor.
Trimiterea de newslettere, oferte promoționale, cu alte cuvinte interacțiunea cu vizitatorul poate crește rata vizitării site-ului, și implicit creșterea vânzărilor.
Capitolul 2
Proiectarea de ansamblu a sistemului informatic
2.1. Definirea obiectivelor
Obiectivele sistemului informatic au fost stabilite în urma unor investigații complexe a stării și comportării sistemului economic efectuate împreună cu cadrele de conducere de la toate nivelurile ierarhice ale unității.
Principalele obiective ce trebuie urmărite în dezvoltarea aplicației sunt:
Posibilitatea vizitatorilor site-ului companiei de a efectua comenzi online;
Monitorizarea în timp real a comenzilor efectuate;
Generarea unor rapoarte referitoare la numărul și valoarea comenzilor efectuate într-o perioadă de timp;
Posibilitatea afișării unor prețuri diferite în funcție de discountul acordat unui client;
Ușurința în folosire a aplicației;
Flexibilitatea aplicației pentru a asigura o implementare rapidă a unor noi funcții;
Implementarea într-un interval de timp redus.
2.2. Estimarea necesarului de resurse
2.2.1. Resurse umane
Pentru realizarea acestui site este nevoie de 1 programator, 1 designer, 1 administrator Linux, 2 operatori pentru introducerea datelor, care să se asigure că la sfârșitul termenului de realizare a site-ului acesta poate fi pus online, deși pentru o perioadă de probă este de dorit de a merge cu ambele sisteme în paralel.
2.2.2. Resurse financiare
Pentru realizarea acestui site se estimează o suma de 2550 EURO, ce includ:
Costul serverului;
Instalarea și buna funcționare a sistemului de operare ce va susține site-ul;
Costul propriu-zis al site-ului.
Toate prețurile sunt exprimate fără TVA. Se va calcula prețul in RON la cursul BNR din ziua facturării.
2.3. Modelarea prelucrărilor
Orice abordare a sistemului informațional trebuie să se concentreze în principal asupra fluxului de date și asupra secvenței de prelucrări care se efectuează asupra acestor date, în scopul fundamentării deciziilor pentru factorii de conducere, prin oferirea de informații corecte și în timp util.
Modelarea logică a prelucrărilor își propune să repartizeze activitățile pe posturi de lucru și să proiecteze tipul de prelucrări.
În cadrul modelului prelucrărilor fiecare operație se descompune în faze de lucru, iar o succesiune de faze aparținând aceluiași proces va forma o procedură.
2.4. Diagrama Entitate – Asociere
Acest model de proiectare a unei baze de date este folosit în momentul de concepere generală a unei baze de date.
Etapele proiectării:
Analiza de sistem – se scot în evidență componentele principale ale sistemului, se clasifică și se pun în evidență relațiile dintre aceste componente;
Proiectarea logică a bazei de date în modelul entitate-asociere. Se subliniază mulțimile și asocierile.
Obiectivele acestui pas sunt următoarele:
Determinarea datelor ce trebuiesc stocate în contextul aplicației;
Descrierea informațiilor necesare despre obiectele respective și legăturile între diversele clase de obiecte;
Determinarea tipurilor de prelucrări care se vor executa asupra bazei de date.
2.5. Stabilirea platformei hardware și software și de comunicații
Principala caracteristică a noului sistem propus este faptul că nu necesită resurse hardware deosebite. Fiind proiectat ca un sistem client/server, singurul calculator care necesită dotări deosebite este serverul.
Calculatoarele client au nevoie decât de un browser instalat și o conexiune la server fie prin internet fie prin rețeaua locală.
Deși aplicația poate rula și pe un server foarte puțin competitiv din punct de vedere al vitezei de procesare, pentru un timp de acces cât mai mic și pentru a putea susține nu număr mare de vizitatori conectați simultan se recomandă folosirea unui server cu următoarea configurație hardware:
Procesor: Intel Celeron 2 / Pentium 4, 2 Ghz;
Memorie RAM: minim 1024 MB;
Capacitate Hard Disk: minim 60 GB;
Placă rețea: 10/100 Mbps;
Placă video cu o memorie de cel putin 2 MB.
Platforma software necesară pentru server este următoarea:
Sistemul de operare de tip UNIX/LINUX;
Limbajul de programare PHP;
Serverul MySQL;
Serverul Apache;
Serverul BIND (Berkeley Internet Name Domain).
Platforma software necesară pentru calculatoarele client este următoarea:
Sistemul de operare Microsoft Windows 98/2000/XP/Vista;
Browserul pentru internet Mozilla Firefox sau Internet Explorer cu suport JavaScript.
2.6. Componente soft pentru realizarea aplicației
PHP – MySQL constituie una dintre cele mai bune soluții pentru site-urile web ce folosesc baze de date. Un raport neoficial arată că în perioada iunie 1998 – martie 1999 numărul calculatoarelor gazdă ce foloseau PHP a crescut de la 7.500 la 410.000.
MySQL este un server de baze de date, mic, compact, ideal pentru aplicațiile mici – și nu numai. Ca o completare a suportului standard SQL, MySQL este compatibil cu un număr mare de platforme, deținând abilități multifir pentru server UNIX, rezultând astfel performanțe ridicate. MySQL poate rula și pe sisteme non-Unix, pe sistemele de tip Windows NT rulând ca un serviciu, în timp ce pe cele Windows 9x rulează ca un proces normal.
PHP este un limbaj de script pe partea de server. Asemeni scripturilor ASP, scripturile PHP sunt procesate de către un server web. După ce serverul interpretează codul PHP, returnează rezultatul către browser sub formă de cod HTML.
Ca o completare a caracterului liber (deși MySQL are totuși unele restricții privind licența), combinația PHP – MySQL este de asemenea independentă de, ceea ce înseamnă că aplicații dezvoltate pentru sisteme Windows vor rula la fel de bine pe sisteme Unix. De asemenea, PHP poate fi rulat ca un proces CGI extern, ca un interpretor independent de scripturi sau ca un modul al serverului web Apache.
PHP suportă, de asemenea, un număr mare de tipuri de baze de date, inclusiv Informix, Oracle, Sybase, Solid, și PostgreSQL – cât și ODBC.
PHP suportă o mulțime de facilități, în concordanță cu dezvoltarea tehnologică a internet-ului. Acestea includ mecanisme de autentificare, XML, crearea dinamică de imagini, suportul pentru partajarea memoriei, crearea dinamică de documente PDF fiind doar câteva dintre acestea. Trebuie menționat de asemenea că la PHP pot fi ușor adăugate module suplimentare, oricine putând realiza și adăuga propriile sale soluții.
2.6.1. PHP Hypertext Preprocessor
Fig 2.2. – PHP – Web
PHP (PHP: Hypertext Prepocessor), cunoscut în versiunile mai vechi și sub numele de PHP/FI (Personal Homepage/Form Interpreter), a fost gândit inițial a fi o simplă aplicație CGI pentru interpretarea formularelor definite prin HTML și procesate de un program scris într-un limbaj Perl, script shell, executat pe server. În cazul interfeței CGI era necesară permisiunea de a rula programe pe server, ceea ce ducea la lacune în securitate și în plus la disocierea de documentul HTML a programului care procesa datele.
PHP reprezintă un pachet puternic care oferă un limbaj de programare accesibil din cadrul fișierelor HTML, limbaj asemănător cu Perl sau C, plus suport pentru manipularea bazelor de date într-un dialect SQL (dBase, Informix, MySQL, mSQL, Oracle, PostgreSQL, Solid, Sybase, ODBC etc.) și acces la sisteme hipermedia precum Hyperwave. De asemeni, PHP suportă încărcarea fișierelor de pe calculatorul client: upload și oferă suport pentru cookies (mecanism de stocare a datelor în navigatorul client pentru identificarea utilizatorilor, propus de Netscape).
Istoria PHP-ului începe la sfârșitul anului 1994, când Rasmus Lerdorf dezvoltă prima versiune, ca proiect personal. PHP-ul este făcut public la începutul anului 1995 sub denumirea de Personal Home Page Tools, fiind considerat un analizor simplist care interpreta câteva macrouri ce puteau fi incluse în cadrul documentelor HTML, permițând contorizarea accesului la paginile Web sau accesarea unei cărți de oaspeți (guestbook). Analizorul a fost rescris la mijlocul aceluiași an și denumit PHP/FI 2.0, unde FI era o alta aplicație scrisă de Rasmus Lerdorf, un interpretor de formulare HTML. A fost adăugat și suportul pentru bazele de date mSQL și astfel PHP/FI a început să aibă succes, fiind disponibil gratuit pe Web.
Programatorii Zeev Suraski și Andi Gutmans rescriu analizorul PHP și noua aplicație formează nucleul versiunii PHP 3.0 care include o parte din vechile surse PHP/FI 2.0. Relativ recent, la începutul anului 2000, a fost făcută publică versiunea PHP 4.0, utilizând puternicul motor de scriptare Zend și oferind suport nu numai pentru serverul Apache ci și pentru alte servere Web. De asemeni, PHP 4.0 oferă posibilitatea accesării documentelor XML via DOM.
Se estimează că numărul site-urilor care folosesc în prezent PHP este de peste un milion. Deja, pe Web, exista o multitudine de aplicații și utilitare concepute în PHP, care se regăsesc grupate și în așa-numitul PEAR (PHP Extension and Add-on Repository).
Ce este PHP?
PHP este o unealtă care permite crearea de pagini web în mod dinamic. Paginile web care conțin cod PHP sunt tratate exact ca o pagină HTML obișnuită, putând fi create și editate asemeni acesteia.
PHP este un limbaj de script care funcționează alături de un server Web.
<html>
<head>
<title>Exemplu</title>
</head>
<body>
<?php
echo("Exemplu de script PHP");
?>
</body>
</html>
Este de notat diferența față de alte limbaje script CGI scrise în limbaje precum Perl sau C: în loc de a scrie un program cu o multitudine de linii de comandă afișate în final într-o pagină HTML, se scrie o pagină HTML cu codul inclus pentru a realiza o acțiune precisă (în cazul nostru se va afișa un text).
Codul PHP este inclus între tag-urile speciale de început și de sfârșit care permit utilizatorului să treacă din "modul HTML" în "modul PHP".
Față de alte limbaje script, precum Javascript, la PHP codul se execută pe server. Dacă pe serverul Web se află un script similar celui anterior, clientul nu va primi decât rezultatul execuției scriptului, fără a avea nici o posibilitate de acces la codul care a produs rezultatul. Poate fi configurat serverul de Web să prelucreze (analizeze) toate fișierele HTML ca fișiere PHP. Astfel nu există nici un mijloc de a distinge paginile care sunt produse dinamic de paginile statice.
Limbajul PHP are de asemenea suport pentru diverse servicii server utilizând protocoale precum IMAP, SNMP, NNTP, POP3 și HTTP.
2.6.2. MySQL – My Structured Query Language
Figura 2.3. – Fluxul MySQL – Server – PHP – Web
MySQL este cel mai popular suport de baze de date SQL, Open Source, fiind conceput și dezvoltat de MySQL AB, o companie ce furnizează servicii pentru bazele de date MySQL.
MySQL este un sistem de gestionare a bazelor de date.
O bază de date este o colecție structurată de date. Pentru a accesa, adăuga sau prelucra datele stocate într-o bază de date este necesar un sistem de gestiune a bazelor de date, cum este MySQL Server. Deoarece calculatoarele nu au probleme în privința volumului mare de date, sistemul de gestiune joacă un rol central în prelucrarea lor, atât ca parte a altor aplicații, cât și ca aplicație de sine stătătoare.
MySQL este un sistem relațional de gestionare a bazelor de date.
O bază de date relațională nu stochează informațiile într-o singură tabelă, ci în mai multe tabele separate. Aceasta duce la o flexibilitate și o viteză sporită. Tabelele sunt legate între ele prin relații definite, făcând posibilă astfel combinarea datelor din mai multe tabele, la cerere.
MySQL este Open Source.
Open Source înseamnă că oricine are posibilitatea de a folosi MySQL sau de a-l modifica. Codul sursă poate fi deci studiat și modificat în funcție de necesitățile proprii.
De ce serverul de baze de date MySQL?
Serverul MySQL a fost inițial creat pentru lucrul cu baze de date mari, fiind mult mai rapid decât soluțiile existente. Și-a demonstrat calitățile în practică, fiind folosit cu succes ani la rând în medii cu cerințe deosebite. Dezvoltarea constantă a MySQL a făcut ca azi acesta să poată oferi un set de funcții bogat și util. Conectivitatea, viteza și securitatea fac din MySQL Server cea mai potrivită soluție pentru accesarea bazelor de date pe Internet.
Tipuri de tabele MySQL
Începând cu MySQL versiunea 3.23.6 se poate alege între trei formate de tabele de bază (ISAM, HEAP și MyISAM). Versiunile mai noi suportă și alte tipuri de tabele, ca InnoDB sau BDB.
La crearea unei tabele trebuie specificat tipul acesteia. MySQL va crea întotdeauna un fișier cu extensia „frm” pentru a păstra structura tabelei. Indecșii și datele vor fi stocate în alte fișiere, în funcție de tipul tabelei.
Dacă nu se specifică tipul tabelei, va fi creată o tabelă de tipul MyISAM. De asemenea, același tip de tabelă va fi creat în cazul în care tipul specificat nu a aparținut sistemului MySQL. Aceasta reprezintă un avantaj în cazul în care se copiază tabele de la o versiune de MySQL la alta, diferită.
O tabelă poate fi convertită de la un tip la altul cu ajutorul instrucțiunii ALTER TABLE. MySQL suportă două categorii de tabele: tabele securizate (InnoDB și BDB) și nesecurizate (HEAP, ISAM, MERGE și MyISAM).
2.7. Normalizarea bazei de date
Normalizarea este formalizarea procesului de proiectare pentru realizarea unei baze de date care să fie în concordanță cu conceptul de formă normală. Se adresează diferitelor feluri în care căutăm valorile duplicat în baza de date. Există mai multe nivele ale formei normale, fiecare dintre ele necesită ca cel precedent să fie satisfăcut.
Procesul de normalizare se bazează pe colectarea exhaustivă a unei liste de elemente care să fie menținute în baza de date. Teoretic este posibil, deși nu este foarte practic, să plasăm toate atributele într-o singură tabelă. Pentru cele mai bune rezultate se începe cu o dezasamblare a bazei de date.
Prima formă normală. Se reduc entitățile la prima formă normală prin eliminarea atributelor repetitive și a celor cu valori multiple către entități copil. Trebuie îndeplinite următoarele condiții:
înregistrările din coloane sunt de o singură valoare;
înregistrările din coloane sunt de același tip;
fiecare înregistrare este unică;
ordinea coloanelor este nesemnificativă;
ordinea înregistrărilor este nesemnificativă;
fiecare coloană are un nume unic.
A doua formă normală. Se reduce prima formă normală la cea de-a doua formă normală prin eliminarea atributelor care nu depind în mod direct de întreaga cheie primară. Scopul acestei forme normale este acela de a asigura că fiecare coloană este definită în tabela care trebuie. Folosirea unor nume mai formale s-ar putea să clarifice această declarație. Trebuie să se asigure că fiecare atribut se ține în entitatea pe care o descrie.
A treia formă normală. Se reduc entitățile celei de-a doua forme normale la cea de-a treia formă normală prin eliminarea atributelor care depind de altele, atribute ne-cheie. În principiu aceasta înseamnă că nu trebuie stocate date care pot fi derivate din alte coloane sau care aparțin altei tabele.
2.8. Calendarul de realizare
Realizare design + configurare server: 7 zile;
Realizarea structurii conceptuale a bazei de date: 3 zile;
Programarea site-ului și implementarea designului: 25 zile;
Testarea site-ului și aducerea lui la un conținut cât mai apropiat cu cel ce rulează: 7 zile.
În concluzie, termenul aproximativ de predare a lucrării este de 40 de zile lucrătoare și va fi respectat dacă nu intervin alte dispoziții din partea clientului și dacă informațiile necesare pentru o bună desfășurare a proiectului sunt difuzate la timp.
Capitolul 3
Proiectarea și programarea în PHP a magazinului virtual
Aplicația proiectată are ca obiectiv promovarea și comanda on-line de produse IT. Fiecare vânzare va fi precedată de o comandă, care va trebui confirmată pentru ca livrarea să aibă loc. Confirmarea se va face telefonic dar și prin e-mail, astfel că serverul pe care magazinul va fi instalat va trebui să fie capabil să trimită și să recepționeze e-mail-uri.
3.1. Proiectarea de ansamblu
Proiectarea de ansamblu a sistemului informatic și succesiunea activităților din cadrul proiectărilor este următoarea:
definirea obiectivelor;
locul aplicației în sistem;
definirea ieșirilor;
definirea intrărilor.
Obiectivele sistemului
Proiectarea sistemului trebuie să corespundă de următoarele cerințe:
Flexibilitate;
Fiabilitate;
Ușurința în folosire;
Implementarea cât mai rapidă;
Cost redus;
Eficiența ridicată.
Proiectarea sistemului va realiza:
Proiectarea sistemului integrat al cererilor și ofertelor de muncă;
Proiectarea paginilor web care va avea la bază informații despre procesul activităților;
Reproiectarea unei părți a sistemului existent.
Sistemul de înregistrare a cererilor și ofertelor de muncă trebuie să realizeze următoarere informații:
Asigură securitatea și confidențialitatea datelor;
Stocarea datelor;
Transmiterea datelor.
Proiectarea bazei de date trebuie să aibă urmatoarele cerințe tehnice:
Să fie în formă normală 3;
Să raspunda restricțiilor de:
Unicitate a cheii;
Integritate a domeniului;
Integritate a relației;
Integritate de referință.
3.2. Modelul relațional al bazei de date
Modelul relațional este un model logic al bazei de date care s-a impus datorită naturaleții sale și simplității în înțelegerea și manipularea structurilor de date. Prezentarea unei baze de date sub formă de relații se numește model relațional al bazei de date.
O relație este formată dintr-un tabel bidimensional în care coloanele corespund atributelor iar fiecare linie corespunde unei entități.
Fiecare relație se identifică printr-un nume unic în cadrul unei baze de date.
Fiecare atribut are un nume unic și trebuie să sugereze semnificația acestuia.
O linie a relației se numește tuplu al relației. Prin relație materializăm o clasă de entități în care fiecare tuplu reprezintă o entitate.
3.3. Schema conceptuală a bazei de date
Figura 3.1. – Schema bazei de date
3.4. Structura bazei de date
Baza de date folosită este cea aparținând serverului MySQL și conține 13 tabele principale: categorii, clienți, comenzi, comenzi_produse, configurare_magazin, coș_cumpărături, monezi, producători, produse, utilizatori.
Figura 3.2. – Tabelele bazei de date
Tabela utilizatori conține următoarele câmpuri:
Figura 3.3. – Tabela Utilizatori
utilizator_id – id utilizator;
utilizator_nume – nume utilizator;
utilizator_parola – parolă utilizator;
utilizator_data_inregistrare – dată de înregistrare utilizator;
utilizator_ultima_autentificare – ultima autentificare efectuată de un utilizator.
Tabela categorii conține următoarele câmpuri:
Figura 3.4. – Tabela Categorii
cat_id – id categorie cheie primară;
cat_parent_id – id categorie principală;
cat_nume – nume categorie;
cat_descriere – descriere categorie;
cat_imagine – imagine categorie.
Tabela clienți conține următoarele câmpuri:
Figura 3.5. – Tabela Clienți
client_ id – id client;
client_email – adresa de e-mail a clientului;
client_parola – parola clientului;
client_nume – numele clientului;
client_prenume – prenumele clientului;
client_adresa_1 – adresa clientului (Linia 1);
client_adresa_2 – adresa clientului (Linia 2);
client_telefon – numărul de telefon al clientului;
client_judet – județul clientului;
client_localitate – localitatea clientului;
client_cod – codul poștal al clientului.
Tabela comenzi conține următoarele câmpuri:
Figura 3.6. – Tabela Comenzi
comanda_id – id comandă;
comanda_data – data când a fost făcută comanda;
comanda_status – status comandă;
comanda_transport_nume r – nume pentru transport;
comanda_transport_prenume – prenume pentru transport;
comanda_transport_adresa1 – adresă transport;
comanda_transport_adresa2 – adresă transport;
comanda_transport_telefon – nr. telefon transport;
comanda_transport_localitate – localitate pentru transport;
comanda_transport_judet – județ pentru transport;
comanda_transport_codpostal – cod poștal ;
comanda_cost_transport – cost transport;
comanda_plata_nume – nume plată;
comanda_plata prenume – prenume plată;
comanda_plata_adresa1 – adresă plată ;
comanda_plata_adresa2 – adresă plată;
comanda_plata_telefon – nr telefon;
comanda_plata_localitate – localitate.
Tabela comenzi_produse conține următoarele câmpuri:
Figura 3.7. – Tabela Comenzi_produse
comanda_id – id comandă;
produs_id – id produs;
comanda_cantitate – cantitate produse comandate.
Tabela configurare_magazin conține următoarele câmpuri:
Figura 3.8. – Tabela Configurare_magazin
cm_nume – setare nume magazin ;
cm_adresa – setare adresă magazin ;
cm_telefon – setare nr. telefon ;
cm_email – setare adresă e-mail ;
cm_cost_transport – setare costuri transport;
cm_moneda – setare monedă;
cm_comanda_email – setare e-mail.
Tabela coș_cumpărături conține următoarele câmpuri:
Figura 3.9. – Tabela Coș_cumpărături
cod_id – id coș cumpărături;
produs_id – id produse comandate;
cantitate_cos – cantitate produse aflate în coș;
cos_id_sesiune – sesiune coș cumpărături;
cos data – data.
Tabela monedă contine următoarele câmpuri:
Figura 3.10. – Tabela Monedă
moneda_id – id monedă;
moneda_cod – cod monedă;
moneda_simbol – simbol monedă.
Tabela producători conține următoarele câmpuri:
Figura 3.11. – Tabela Producători
id_producator – nr. identificare producător;
producator_denumire – nume producător.
Tabela produse conține următoarele câmpuri:
Figura 3.12. – Tabela Produse
produs_id – nr identificare produs;
cat_id – id categorie ;
produs_nume – nume produs;
produs_descriere – descriere produs;
produs_pret – preț produs;
produs_cantitate – cantitate produs;
produs_imagine – poză produs;
produs_imagine_mica – poză mică;
produs_data – data când a fost adăugat produsul;
produs_ultimul_update – ultima actualizare;
producator_id – id producător.
3.5. Definirea documentelor de ieșire
Prin ieșirile unui subsistem informatic se va înțelege totalitatea informațiilor furnizate de acesta beneficiarilor interni și externi, respectiv rapoarte, note de informare-rapoatre, etc.
Definirea ieșirilor fiecărui subsistem informatic, presupune, în primul rând, stabilirea la nivel global, a informațiilor necesare conducerilor de pe diferite trepte ierarhice ale sistemului, specificând pentru fiecare în parte: aspectele programatice (legate de utilitate) și aspectele semantice (legate de conținut).
La nivel global, se vor prezenta toate caracteristicile ieșirilor sistemului proiectat, cum ar fi, de exemplu: periodicitatea, numărul de exemplare, destinația fiecărui exemplar și tipul de exemplar.
Din panoul de administrator se pot prelua datele necesare pentru procesarea comenzii și eliberarea facturii:
Date
„Id Comanda” – Nr. identificare comandă;
„Nume si Adresa” – Numele si Adresa necesare la facturare și livrare;
„Email” – Adresa e-mail client;
„Telefon” – Nr. Telefon;
„Metoda de Plata” – Metoda de plată.
Produse
„Model” – Model produs comandat;
„Cantitate” – Cantitate produse comandate;
„Moneda” – Moneda în care se face plata;
„Total” – Total comandă.
Istoric Comanda
„Data” – Data efectuării comenzii;
„Status” – Starea actuală a comenzii;
3.6. Definirea documentelor de intrare
Prin ”intrările” sistemului vom înțelege totalitatea datelor care reflectă starea și dinamica fenomenelor și proceselor economice din domeniul analizat, care sunt necesare creării, actualizării bazei de date și obținerii situațiilor de ”ieșire”.
Pentru proiectarea videoformatelor de intrare, există două moduri de desfășurare a dialogului operator-calculator și anume:
Întrebare-răspuns cu defilarea liniilor ecranului;
Afișarea machetei de introducere a datelor de intrare.
Înregistrare Utilizator
Pentru înregistrarea unui utilizator este necesară introducerea următoarelor date :
Date Utilizator:
„Nume” – nume client;
„Prenume” – prenume client;
„E-mail” – adresă e-mail (folosită la login ca user);
„Telefon” – nr. telefon client;
„Fax” – nr. fax client.
Adresa:
„Companie” – companie (doar dacă este cazul);
„Adresa” – Adresa de reședință;
„Cod Postal” – cod poștal;
„Oras” – orașul unde va fi livrată comanda;
„Tara” – țara unde va fi livrată comanda.
Parola:
„Parola” – parola de acces;
„Confirmare parola” – confirmare parolă de acces.
Trimite Comanda
Imediat după ce utilizatorul a adăugat în coșul de cumpărături produsele dorite urmează completarea formularului de trimitere a comenzii. Pentru a putea trimite comanda utilizatorul trebuie să completeze următoarele câmpuri:
„Nume” – Numele Utilizatorului;
„Prenume” – Prenumele Utilizatorului;
„Email” – Adresa e-mail;
„Telefon” – Număr de Telefon;
„Adresă” – Adresa unde vor fi livrate produsele comandate;
„Oraș” – Orașul unde vor fi livrate produsele;
„Cod Poștal” – Codul Orașului;
„Tara” – Țara unde vor fi livrare produsele.
Odată ce câmpurile sunt completate se apasă butonul trimite, iar comanda va fi trimisă către un administrator.
Adaugă Categorie
Pentru adăugarea unei noi categorii de produse este necesară completarea a 3 câmpuri:
„Nume Categorie” – Numele Categoriei;
„Ordine Categorie” – Ordinea în care va apărea categoria;
„Imagine” – Adăugarea unei imagini.
După completarea acestor câmpuri se apasă butonul „Salveaza”.
Adaugă Produs
Adăugarea unui nou produs în baza de date de către administrator se face completând un formular .
„Denumire” – Nume produs;
„Descriere” – Descrierea produsului respectiv;
„Preț” – Prețul produsului;
„Cantitate” – Cantitate Produs;
„Poza” – Upload fotografie produs;
„Stare” – Activ / Inactiv;
„Categorie” – Categoria unde apare produsul.
După completarea acestor câmpuri se apasă butonul „Salveaza”.
Setări Generale
Shop
„Nume Magazin” – Nume Magazin;
„Nume Propietar” – Numele propietarului;
„Adresa ShowRoom” – Setare adresă showroom;
„Telefon” – Număr telefon;
„Fax” – Număr fax;
Editare Clienți
„Nume” – Editare nume client;
„Prenume” – Editare prenume client;
„Email” – Editare adresă e-mail;
„Telefon” – Editare nr. de telefon;
„Fax” – Editare nr.de fax;
„Parola” – Editare parolă (schimbare);
„Stare” – Editare stare: Activ/Inactiv.
Pagini Site – Editare Pagini
„Pg. Despre Noi” – Editare pagină Despre Noi;
„Pg. Plata si Livrare” – Editare pagină Plată și Livrare.
3.7. Descrierea funcțiilor utilizate în aplicație
isset() – funcție care verifică dacă a fost setată o valoare a unei variabile;
strlen() – funcție ce returnează lungimea unui șir de caractere;
require() – funcție care include în scriptul curent conținutul unui fișier cu verificarea de a fi introdus o singură dată (spre deosebire de funcția include() – care permite includerea fișierului de mai multe ori);
printf() – funcție care afișeaza un șir de caractere formatat;
crypt($pass, "BB") – funcție care criptează un șir de caractere ($pass) după o cheie de criptare (BB);
mail($to, $subject, $message, $headers) – funcție folosită pentru a trimite un e-mail (de la $to, cu subiectul $subiect, având ca mesaj $message cu headerele adiționale $header);
strcmp() – funcție care compară două șiruri de caractere (asemănător funcției standard în C);
trim()– funcție care elimină spațiile goale de la începutul și sfârșitul unui șir de caractere specificat ca parametru (asemănător funcției standard în C);
mysql_query() – trimite o comandă MySQL bazei de date active de pe server;
mysql_fetch_array() – returnează o linie din rezultatul comenzii;
mysql_error() – returnează mesajul de eroare sub formă de șir de caractere generat de baza de date MySQL dacă este cazul;
mysql_num_rows() – returnează numărul de linii din rezultatul unei cereri MySQL;
mysql_connect('localhost', $user, $pass) – deschide o conexiune către un server MySQL (numele serverului – ‚localhost’, $user – username-ul și parola – $pass);
mysql_select_db($dbname) – alege o bază de date MySQL după conectarea la un server MySQL;
session_start() – inițializează o secțiune de date bazată pe ID-ul de sesiune trimis printr-o cerere GET sau POST;
session_destroy() – distruge toate datele asociate cu sesiunea curentă;
ob_start() – oprește afișarea bufferului până la terminarea execuției scriptului;
function draw_data_form($prefix, $an, $luna, $zi, $an_min, $an_max) – funcție definită de programator care generează codul HTML pentru afișarea datei calendaristice sub forma a trei elemente combo-box;
function verifica() – funcția folosită foarte des în proiect, care verifică datele trimise de un formular în vederea introducerii acestora într-un tabel (într-o bază de date);
function afis_next($p, $total) – funcție care afișează lista paginilor dintr-un meniu de afișare a anumitor informații.
Capitolul 4
Prezentarea aplicației – Ghid de utilizare al magazinului virtual creat
4.1. Funcții ale aplicației
Se pot vizualiza produsele după categoria din care fac parte;
Căutare produse;
Vizualizare shopping cart, posibilitate de modificare număr de produse, ștergere produse din cart;
Posibilitate de adăugare comentarii pentru un produs;
Înregistrare utilizator nou, formular de logare în cont;
Opțiune de modificare a datelor introduse la înregistrare;
Vizualizare listă de produse comandate;
Panou de administrator.
4.2. Structura magazinului
Structural, magazinul este compus din trei secțiuni:
Secțiunea de prezentare;
Secțiunea de client;
Secțiunea de administrare.
4.2.1. Secțiunea de prezentare
Prin intermediul acestei secțiuni utilizatorul poate vedea catalogul de produse disponibile la S.C. Music Shop S.R.L., acesta poate vedea detaliile produsului respectiv, prețul și nu în ultimul rând poate adăuga produsul în coșul de cumpărături pentru a efectua o comandă online.
Prima Pagină
În această pagină este disponibil catalogul de produse aflate în stocul S.C. Music Shop S.R.L., se pot gasi ofertele speciale, informații despre societatea noastra dar și condițiile de plata și livrare a produselor comandate.
Figura 4.1. – Prima Pagină
Pagina – Creare cont
În această pagină se gasește un formular cu ajutorul căruia clientul iși poate crea un user, campurile care trebuiesc completate sunt următoarele: Nume, Prenume, E-mail, Telefon, Adresă, Cod Poștal, Oraș, Țară.
Figura 4.2. – Creare cont
Pagina – Login
Prin intermediul acestei pagini utilizatorul se poate loga după ce în prealabil și-a creat un cont.
Figura 4.3. – Pagina Logare în Cont
Pagina – Listare Produse dintr-o categorie
Figura 4.4. – Listare Produse din Categoria Instrumente cu Clape
Pagina – Listare Produs Detaliat
În această pagină clientul / vizitatorul poate vedea specificațiile detaliate ale produslui, poate efectua adăugarea produsului în coș, și poate lăsa un comentariu daca este logat.
Figura 4.5. – Listare Produs Detaliat
4.2.2 Secțiunea de client
Este disponibilă utilizatorilor înregistrați. Aceștia au posibilitatea, pe lângă facilitățile obișnuite oferite unui oaspete, să comande produse. Pentru aceasta ei au la dispoziție un coș de cumpărături în care pot adăuga sau din care pot scoate produse pe parcursul navigării. La sfârșit pot trimite comanda printr-un singur click.
Pagina de Înregistrare – Formular Înregistrare
Utilizatorul își poate creea un user, cu care poate începe comanda produselor.
Figura 4.6. – Formular înregistrare client.
Pagina – Coșul de Cumpărături
Această pagină arată produsele adaugate de client în coș, permite stabilirea cantitătii produselor comandate, permite ștergerea unui produs care nu mai este dorit, este afișat prețul pe care clientul îl are de plătit pentru produsele comandate și nu în ultimul rând are posibilitatea de a trimite comanda.
Figura 4.7. – Coșul de Cumpărături
Pagina – Finalizarea Comenzii – Verificare date
Figura 4.8. – Formular date Client
4.2.3. Secțiunea de administrare
Este accesibilă administratorului magazinului virtual, care poate fi un angajat cu acces la produsele magazinului, nu neaparat programatorul magazinului. Un administrator are acces la toate paginile magazinului, în plus el putând adăuga sau modifica produse, vizualiza comenzi și formulare de contact ale utilizatorilor, modifica date, niveluri de acces ale utilizatorilor ori ștergere utilizatori, răspunde la mesaje sau ștergerea lor, prelucrare comenzi sau ștergere manuală a acestora în cazul în care nu sunt confirmate.
Pagina – Panou de Administrare
Prin intermediul acestui panou de administrare pot fi modificate toate datele afișate în acest magazin virtual. Pot fi văzute comenzile făcute de client, pot fi modificate produsele, categoriile cât și alte setări aferente acestei aplicații.
Figura 4.9. – Panou de Administrare
Listare Administratori Magazin
Listarea administratorilor magazinului virtual:
Figura 4.10 – Administratori
Listare Comenzi
Prin listarea comenzilor, administratorul preia comanda si o trimite către livrare, și poate modifica statusul comenzii având două opțiuni:
de acceptare a comenzii;
de refuzare a comenzii.
Figura 4.11. – Listare Comenzi
Listare Produse Comandate
Figura 4.12. – Listare Comandă
Listare Categorii
Administratorul poate vizualiza și modifica categoriile siteuluiȘ
Figura 4.13. – Listare Categorii
Adăugare Categorie
Pentru adăugarea unei noi categorii de produse este necesară completarea a 3 câmpuri: „Nume Categorie”, „Ordine Categorie”, „Imagine Categorie”. După completarea acestor câmpuri se accesează butonl „Salvează”.
Figura 4.14. – Inserare Categorie
Pagina – Listare Produse Adăugate
Figura 4.15. – Listare Produse
Adăugare Produs
Pentru adăugarea unei noi categorii de produse este necesară completarea următoarelor câmpuri:
„Categorie” – nume categorie;
„Producator” – producătorul produsului;
„ Denumirel „ – numele produsului;
„Descriere” – descrierea produsului;
„Pret” – preț;
„Cantitate” – cantitate produse disponibile;
„Imagine” – poza cu produsul;
Figura 4.16. – Adăugare Produse
Listare Producători
Figura 4.17. – Listare Producători
Formular Adăugare Producător
Figura 4.18. – Adăugare Producător
Configurare Magazin Virtual
Figura 4.19. – Setări Magazin Virtual
4.3. Implementarea aplicației
Pentru implementarea rapidă a aplicației se vor respecta următoarele norme:
Se vor difuza instrucțiunile de executare a procedurilor manuale și automate;
Se va instrui personalul utilizator al aplicației;
Se vor asigura condițiile organizatorice necesare funcționării sistemului;
Se vor asigura resursele hardware și spațiul corespunzător desfășurării lucrărilor de informatică (asigurarea materialelor consumabile; asigurarea integrității, securității și confidențialității datelor);
Se va asigura fondul informațional (pregătirea bazei de date inițiale atât manual cât și cu ajutorul programelor de conversie).
4.4. Instalarea aplicației
1. Instalați serverul de Apache (WAMP), (Nu modificați nimic din setările implicite ale procesului de instalare – aplicația trebuie instalată în „C:\wamp”);
2. Copiați aplicația trimisă în directorul: „C:\wamp\www\magazin-muzica”;
3. După instalarea wamp-ului, veți vedea o pictogramă mică, sub forma unui semicerc alb negru, în colțul din dreapta jos, acolo unde apare și ceasul de Windows;
4. Dați click pe pictograma WAMP-ului și undeva în meniul afișat, sus, o să vedeți opțiunea phpMyAdmin (pe a doua poziție de sus);
5. Se va deschide într-o fereastră panoul de administrare phpMyAdmin. Introduceți textul „muzica” acolo unde apare „Create new database” și apăsați butonul Create;
6. Dați click pe tabul de sus unde scrie „SQL” (al doilea, imediat după „Structure”);
7. Duceți-vă în „c:\wamp\www\magazin-muzica” și deschideți cu Notepad fișierul „baza-de-date.txt”;
8. Copiați conținutul acestui fișier (tot textul > Ctrl+A si apoi Ctrl+C);
9. Reveniți în fereastra phpMyAdmin-ului, și mutați cursorul acolo unde scrie „Run SQL query/queries on database muzica” și apoi apăsați Ctrl+V (Paste);
10. Apăsați pe butonul „Go” de jos și apoi un OK pentru confirmare;
11. Deschideți o nouă fereastră de Internet Explorer și introduceți adresa:
http://localhost/magazin-muzica (pentru interfața utilizator);
http://localhost/magazin-muzica/admin (pentru interfața de administrare a aplicației, user: admin, pass: admin).
Concluzii
În ultimii ani prezența unei firme pe internet a devenit o chestiune la ordinea zilei, pentru unele din ele fiind chiar o necesitate. Costurile relativ mici (și în continuă scădere) au permis chiar și firmelor mici să aibă site-ul propriu. După realizarea site-ului, în care firma se prezintă și iși descrie oferta de produse și servicii, apărea imediat nevoia de a le face publice. Astfel, marketingul a fost rapid extins și adaptat chestiunilor specifice sectorului internet.
Trebuie menționat că toate acestea au fost posibile datorită extinderii internetului și în sectorul utilizatorilor, fără acestia site-urile pierzandu-și din importanța. Totodată a crescut spectaculos și numarul de calculatoare conectate la internet. În aceste condiții lumea virtuală a internetului a devenit o realitate ce tinde chiar să se substituie metodelor clasice de a afla informații, de a comunica, de a vinde/cumpăra, etc.
În acest sens, aplicația dezvoltată – constituie o soluție modernă și viabilă pentru implementarea unui magazin virtual, ce are ca obiectiv comanda on-line a produselor sale.
Baza de date proiectată și utilizată este una relațională conținând 14 tabele, cu o structură complexă și între care există legături complexe. S-a acordat o atenție deosebită proiectării bazei de date, astfel încât organizarea informațiilor să fie cât mai logică și accesul la date să se facă într-un mod optim.
În total au fost scrise peste 50 de programe-script PHP și câteva programe-script JavaScript împărțite în cinci module funcționale – care conlucrează împreună, într-un mod integrat, la buna funcționare a site-ului.
De asemenea s-a acordat atenție asupra aspectului grafic al aplicației, prin folosirea de cod CSS intercalat în cadrul programelor-script și prin folosirea unor aplicații specifice pentru prelucrarea grafică a imaginilor utilizate.
Modulul de administrare al aplicației – prin dimensiunile și complexitatea sa – poate fi considerat un website de sine stătător, fiind implementat prin nu mai puțin de 40 de scripturi PHP și alte câteva scripturi JavaScript.
Modulul de interfață al aplicației oferă multiple modalitați de acces la informațiile și datele din cadrul site-ului.
Modularizarea aplicației a condus la o structură flexibilă a site-ului, fiind posibil astfel ca și alte componente ale aplicației – secțiuni ale celor cinci module principale – să fie adăugate ulterior în procesul de dezvoltare al aplicației.
Tendința continuă de orientare a proceselor de comerț și business către Internet duce la o creștere a dezvoltării și utilizării aplicațiilor de comerț electronic și e-business.
Se constată o scădere a duratei de proiectare și implementare ale aplicațiilor e-business, datorată în principal necesității oportunităților de afaceri de a pătrunde cât mai rapid pe piață. Scăderea duratei ciclului de dezvoltare are consecinte negative asupra procesului de realizare a aplicațiilor în cazul în care nu se acorda o atenție sporită procesului de asigurare a calității.
Apariția noilor tehnologii conduce la realizarea de aplicații de comerț electronic și e-business de calitate superioară și cu o fiabilitate ridicată.
Bibliografie
1. „Proiectarea Sistemelor Informatice” – Metode de realizare de V. Chichernea, C.Botezatu , Edit. Sylvi, București 2002;
2. „Proiectarea sistemelor informatice” – de V. Stanciu și colectiv, Edit. DualTech, 2002;
3. „Proiectarea obiectuală a sistemelor informatice” – de Prof. dr. Dorin Zaharie și alții, Edit. DualTech;
4. „Proiectarea sistemelor informatice prin limbajul Unified modeling language” – de Niculae Davidescu , Edit. ALL Beck , 2003;
5. „Baze de date – proiectare, implementare, gestionare” – de T. Connolly, C. Begg, A. Strachan, Edit. Teora, București 2001;
6. „Bazele Informaticii – Sisteme informatice pentru birou” – de Virgil Chichernea, Edit. Sylvi, București 1998;
7. „Object Oriented Modeling and design for Database Applications” – de Blaha M. și Premerlani W., Edit. Prentice Hall, 1997;
8. „Data mining and Knowledge discovery in databases” – de Fayyad U., Edit. Communication of the ACM (Special issue), 1996;
9. „Query processing in databases systems” – de Kim W., Reiner D., Batory S., Edit. Springer Verlag, 1985;
10. „Object Oriented Concepts, databases and applications” – de Kim W., Lochovskz F. H., Edit. Addison-Wesley, 1989;
11. „Sisteme informaționale economice” – de Oprea D., Edit. Economică, București 1997;
12. „SQL fără profesor, în 14 zile” – de J. Perkins, B. Morgan, Edit. Teora, București 1998;
13. „Aplicatii Web la cheie. Studii de caz implementate in PHP” – de Buraga Sabin, Edit. Polirom 2003;
14. „PHP pentru World Wide Web in imagini” – de Ullman Larry, Edit. Teora 2004;
15. „Invata singur PHP, MySQL si Apache” – de Julie C. Meloni, Edit. Corint 2005
16. „PHP4” – de Bill McCarty, Editura: Teora 2004;
17. „Dezvoltarea aplicatiilor WEB cu PHP si MySQL” – Laura Thomson, Editura: Teora 2004;http://www.inno.ro/wd/webd.htmhttp://www.nd.ro/
18. http://www.php.net/
19. http://www.php.net/quickref.php/
20. http://www.phpromania.net/
21. http://php.resourceindex.com/
22. http://www.phpmyadmin.net/
23. http://www.mysql.com/
ANEXA
Codul sursă al site-ului
Index.php
<?php
require_once 'library/config.php';
require_once 'library/category-functions.php';
require_once 'library/product-functions.php';
require_once 'library/cart-functions.php';
$_SESSION['shop_return_url'] = $_SERVER['REQUEST_URI'];
$catId = (isset($_GET['c']) && $_GET['c'] != '1') ? $_GET['c'] : 0;
$pdId = (isset($_GET['p']) && $_GET['p'] != '') ? $_GET['p'] : 0;
$producator = (isset($_GET['producator']) && $_GET['producator']!= '') ? $_GET['producator'] : 0;
$cauta = (isset($_GET['string']) && $_GET['string']!= '') ? $_GET['string'] : 0;
require_once 'include/header.php';
?>
<?php require_once 'include/top.php'; ?>
<center><span class="pageTitle"> </span></center>
<table width="960" border="0" align="center" cellpadding="0" cellspacing="0">
<tr valign="top">
<td width="200" height="400" id="leftnav">
<?php
require_once 'include/leftNav.php';
?>
</td>
<td style="padding-top:30px">
<?php
if ($pdId) {
require_once 'include/productDetail.php';
} else if ($catId || $producator || $cauta) {
require_once 'include/productList.php';
} else {
require_once 'include/categoryList.php';
}
?>
</td>
<td width="250" id="rightNav"><?php require_once 'include/miniCart.php'; ?></td>
</tr>
</table>
<?php
require_once 'include/footer.php';
?>
Cont.php
<?php
require_once 'library/config.php';
require_once 'library/cart-functions.php';
require_once 'library/checkout-functions.php';
$step = $_GET['step'];
$includeFile = '';
if ($step == 'contNou') {
$includeFile = 'contNou.php';
$pageTitle = 'Cont nou';
} else if ($step == 'contEdit') {
$includeFile = 'contEdit.php';
$pageTitle = 'Contul meu';
} else if ($step == 'login') {
$includeFile = 'contLogin.php';
$pageTitle = 'Autentificare';
} else if ($step == 'logout') {
$includeFile = 'contLogout.php';
$pageTitle = 'Iesire';
}
require_once 'include/header.php';
require_once 'include/top.php';
require_once "include/$includeFile";
require_once 'include/footer.php';
?>
Cart.php
<?php
require_once 'library/config.php';
require_once 'library/cart-functions.php';
$action = (isset($_GET['action']) && $_GET['action'] != '') ? $_GET['action'] : 'view';
switch ($action) {
case 'add' :
adaugaInCos();
break;
case 'update' :
actualizeazaCos();
break;
case 'delete' :
stergeDinCos();
break;
case 'view' :
}
$cartContent = preiaContinutCos();
$numItem = count($cartContent);
$pageTitle = 'Shopping Cart';
require_once 'include/header.php';
require_once 'include/top.php';
?>
<center><span class="pageTitle">Cosul de cumparaturi</span></center>
<?php
afiseazaErorile();
if ($numItem > 0 ) {
?>
<form action="<?php echo $_SERVER['PHP_SELF'] . "?action=update"; ?>" method="post" name="frmCart" id="frmCart">
<table width="780" border="0" align="center" cellpadding="5" cellspacing="1" class="entryTable">
<tr class="entryTableHeader">
<td colspan="2" align="center">Produs</td>
<td align="center">Pret unitar</td>
<td width="75" align="center">Cantitate</td>
<td align="center">Total</td>
<td width="75" align="center"> </td>
</tr>
<?php
$subTotal = 0;
for ($i = 0; $i < $numItem; $i++) {
extract($cartContent[$i]);
$productUrl = "index.php?c=$cat_id&p=$produs_id";
$subTotal += $produs_pret * $cos_cantitate;
?>
<tr class="content">
<td width="80" align="center"><a href="<?php echo $productUrl; ?>"><img src="<?php echo $produs_imagine_mica; ?>" border="0"></a></td>
<td><a href="<?php echo $productUrl; ?>"><?php echo $produs_nume; ?></a></td>
<td align="right"><?php echo afiseazaPret($produs_pret); ?></td>
<td width="75"><input name="txtQty[]" type="text" id="txtQty[]" size="5" value="<?php echo $cos_cantitate; ?>" onKeyUp="checkNumber(this);">
<input name="hidCartId[]" type="hidden" value="<?php echo $cos_id; ?>">
<input name="hidProductId[]" type="hidden" value="<?php echo $produs_id; ?>">
</td>
<td align="right"><?php echo afiseazaPret($produs_pret * $cos_cantitate); ?></td>
<td width="75" align="center"> <input name="btnDelete" type="button" id="btnDelete" value="Sterge" onClick="window.location.href='<?php echo $_SERVER['PHP_SELF'] . "?action=delete&cid=$cos_id"; ?>';" class="box">
</td>
</tr>
<?php
}
?>
<tr class="content">
<td colspan="4" align="right">Subtotal</td>
<td align="right"><?php echo afiseazaPret($subTotal); ?></td>
<td width="75" align="center"> </td>
</tr>
<tr class="content">
<td colspan="4" align="right">Taxa transport </td>
<td align="right"><?php echo afiseazaPret($shopConfig['shippingCost']); ?></td>
<td width="75" align="center"> </td>
</tr>
<tr class="content">
<td colspan="4" align="right">Total </td>
<td align="right"><?php echo afiseazaPret($subTotal + $shopConfig['shippingCost']); ?></td>
<td width="75" align="center"> </td>
</tr>
<tr class="content">
<td colspan="5" align="right"> </td>
<td width="75" align="center">
<input name="btnUpdate" type="submit" id="btnUpdate" value="Actualizeaza cosul" class="box"></td>
</tr>
</table>
</form>
<?php
} else {
?>
<p> </p><table width="550" border="0" align="center" cellpadding="10" cellspacing="0">
<tr>
<td><p align="center">Cosul de cumparaturi este gol</p></td>
</tr>
</table>
<?php
}
$shoppingReturnUrl = isset($_SESSION['shop_return_url']) ? $_SESSION['shop_return_url'] : 'index.php';
?>
<table width="550" border="0" align="center" cellpadding="10" cellspacing="0">
<tr align="center">
<td><input name="btnContinue" type="button" id="btnContinue" value="<< Continua cumparaturile" onClick="window.location.href='<?php echo $shoppingReturnUrl; ?>';" class="box"></td>
<?php
if ($numItem > 0) {
?>
<td><input name="btnCheckout" type="button" id="btnCheckout" value="Cumpara >>" onClick="window.location.href='checkout.php?step=1';" class="box"></td>
<?php
}
?>
</tr>
</table>
<?php
require_once 'include/footer.php';
?>
Config.php
<?php
//ini_set('display_errors', 'On');
//ob_start("ob_gzhandler");
//error_reporting(E_ALL);
session_start();
// =============================
// = config conexiune database =
// =============================
$dbHost = 'localhost';
$dbUser = 'sql_magazin';
$dbPass = '123456';
$dbName = 'magazin';
// ===================================
// = Setari web root & document root =
// ===================================
$thisFile = str_replace('\\', '/', __FILE__);
$docRoot = $_SERVER['DOCUMENT_ROOT'];
$webRoot = str_replace(array($docRoot, 'library/config.php'), '', $thisFile);
$srvRoot = str_replace('library/config.php', '', $thisFile);
define('WEB_ROOT', "http://".$_SERVER['SERVER_ADDR']."/web/magazin/");
//define('WEB_ROOT', "http://localhost/web/magazin/");
//define('WEB_ROOT', $webRoot);
define('SRV_ROOT', $srvRoot);
// =====================================================================
// = Definirea cailor pentru stocarea imaginilor: categorii si produse =
// =====================================================================
define('CATEGORY_IMAGE_DIR', 'images/category/');
define('PRODUCT_IMAGE_DIR', 'images/product/');
// =========================================
// = Limitari de dimensiune pentru imagini =
// =========================================
// imagine categorie latime MAX 75px
define('MAX_CATEGORY_IMAGE_WIDTH', 75);
// limitam dimensiunile pentru imaginea produsului? true sau false
define('LIMIT_PRODUCT_WIDTH', true);
// imagine produs latime MAX 250px
define('MAX_PRODUCT_IMAGE_WIDTH', 250);
// imagine mica produs latime MAX 75px
define('THUMBNAIL_WIDTH', 75);
if (!get_magic_quotes_gpc()) {
if (isset($_POST)) {
foreach ($_POST as $key => $value) {
$_POST[$key] = trim(addslashes($value));
}
}
if (isset($_GET)) {
foreach ($_GET as $key => $value) {
$_GET[$key] = trim(addslashes($value));
}
}
}
// =========================================================
// = accesarea fisierelor aditionale: DB si functii common =
// =========================================================
require_once 'database.php';
require_once 'common.php';
$shopConfig = configurareMagazin();
?>
ContNou.php
<?php
if ( !defined('WEB_ROOT') || !isset($_GET['step']) ) {
exit;
}
$errorMessage = ' ';
require_once 'include/top.php';
if (isset($_POST['procesare']) && @$_POST['procesare']==1) {
$email = $_POST['txtEmail'];
$parola = $_POST['txtParola'];
$parola1 = $_POST['txtParola1'];
$nume = $_POST['txtNume'];
$prenume = $_POST['txtPrenume'];
$adresa1 = $_POST['txtAdresa1'];
$adresa2 = $_POST['txtAdresa2'];
$telefon = $_POST['txtTelefon'];
$judet = $_POST['txtJudet'];
$localitate = $_POST['txtLocalitate'];
$zip = $_POST['txtZip'];
if (strlen($email)<5) {
$form = 1;
$eroare ="Adresa de email este obligatorie!";
} else if ( strlen($parola) < 5 ) {
$form = 1;
$eroare = "Parola trebuie sa contina minim 5 caractere!";
} else if ($parola != $parola1) {
$form = 1;
$eroare = "Parola este obligatorie si trebuie sa fie identica in ambele campuri!";
} else if (strlen($nume) < 3 || strlen($prenume) < 3 || strlen($telefon) < 3) {
$form = 1;
$eroare = "Toate campurile marcate cu <strong>*</strong> sunt obligatorii";
}
// procesare si inregistrare in DB
if ( @$form != 1 ) {
$sql = "SELECT client_email FROM clienti WHERE client_email='$email'; ";
$rez = mysql_query($sql);
$num = mysql_num_rows($rez);
// Adresa de email exista deja in baza si returnam eroare
if ($num>0) {
$form = 1;
$eroare = "Adresa de email exista deja in baza de date!";
} else {
$sql = "INSERT into clienti
(client_email, client_parola, client_nume, client_prenume, client_adresa1, client_adresa2, client_telefon, client_judet, client_localitate, client_zip)
VALUES
('$email', '$parola', '$nume', '$prenume', '$adresa1', '$adresa2', '$telefon', '$judet', '$localitate', '$zip');
";
$rez=mysql_query($sql);
$succes = 1;
}
}
} else {
$form = 1;
}
if (@$form == 1) {
?>
<center><span class="pageTitle">Cont nou</span></center>
<?php
if (isset($eroare)) echo "<br /><br /><center>Eroare: " . $eroare . "</center>";
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>?step=contNou" method="POST" name="cont" id="cont">
<input type="hidden" name="procesare" value="1" />
<table width="550" border="0" align="center" cellpadding="5" cellspacing="1" class="entryTable">
<tr class="entryTableHeader">
<td colspan="2">Date autentificare</td>
</tr>
<tr>
<td width="150" class="label">Email*</td>
<td class="content"><input name="txtEmail" type="text" class="box1" size="30" maxlength="50" value="<?=@$email?>"></td>
</tr>
<tr>
<td width="150" class="label">Parola*</td>
<td class="content"><input name="txtParola" type="password" class="box1" size="15" maxlength="50"></td>
</tr>
<tr>
<td width="150" class="label">Confirmare parola*</td>
<td class="content"><input name="txtParola1" type="password" class="box1" size="15" maxlength="50"></td>
</tr>
</table>
<p> </p>
<table width="550" border="0" align="center" cellpadding="5" cellspacing="1" class="entryTable">
<tr class="entryTableHeader">
<td colspan="2">Date personale</td>
</tr>
<tr>
<td width="150" class="label">Nume*</td>
<td class="content"><input name="txtNume" type="text" class="box1" size="30" maxlength="50" value="<?=@$nume?>"></td>
</tr>
<tr>
<td width="150" class="label">Prenume*</td>
<td class="content"><input name="txtPrenume" type="text" class="box1" size="30" maxlength="50" value="<?=@$prenume?>"></td>
</tr>
<tr>
<td width="150" class="label">Adresa1</td>
<td class="content"><input name="txtAdresa1" type="text" class="box1" size="50" maxlength="100" value="<?=@$adresa1?>"></td>
</tr>
<tr>
<td width="150" class="label">Adresa2</td>
<td class="content"><input name="txtAdresa2" type="text" class="box1" size="50" maxlength="100" value="<?=@$adresa2?>"></td>
</tr>
<tr>
<td width="150" class="label">Telefon*</td>
<td class="content"><input name="txtTelefon" type="text" class="box1" size="30" maxlength="32" value="<?=@$telefon?>"></td>
</tr>
<tr>
<td width="150" class="label">Judet</td>
<td class="content"><input name="txtJudet" type="text" class="box1" size="30" maxlength="32" value="<?=@$judet?>"></td>
</tr>
<tr>
<td width="150" class="label">Localitate</td>
<td class="content"><input name="txtLocalitate" type="text" class="box1" size="30" maxlength="32" value="<?=@$localitate?>"></td>
</tr>
<tr>
<td width="150" class="label">Cod postal</td>
<td class="content"><input name="txtZip" type="text" class="box1" size="10" maxlength="10" value="<?=@$zip?>"></td>
</tr>
</table>
<p> </p>
<p align="center">
<input class="box" name="contNou" type="submit" id="contNou" value="Cont nou" />
</p>
</form>
<?php
} else if (@$succes==1) {
?>
<center><span class="pageTitle">Cont nou</span></center>
<br /><br />
<center>
Contul a fost creeat cu succes.<br /><br />
<a href="<?php echo $_SERVER['PHP_SELF']; ?>?step=login">Click aici</a> pentru autentificare!
</center>
<?php
}
?>
ContLogin.php
<?php
if ( !defined('WEB_ROOT') || !isset($_GET['step']) ) {
exit;
}
if (isset($_POST['procesare']) && @$_POST['procesare']==1) {
$email = $_POST['txtEmail'];
$parola = $_POST['txtParola'];
if (strlen($email) < 3 || strlen($parola) < 3) {
$form = 1;
$eroare = "Toate campurile marcate cu <strong>*</strong> sunt obligatorii";
}
// preluare date din DB
if ( @$form != 1 ) {
$sql = "SELECT * FROM clienti WHERE client_email='$email' AND client_parola='$parola'; ";
$rez = mysql_query($sql);
$num = mysql_num_rows($rez);
if ($num == 0) {
$form = 1;
$eroare = "Adresa de email nu exista sau parola este incorecta!";
} else {
$client = mysql_fetch_array($rez);
$_SESSION['client_id'] = $client['client_id'];
$_SESSION['client_email'] = $client['client_email'];
$_SESSION['client_nume'] = $client['client_nume'];
$_SESSION['client_prenume'] = $client['client_prenume'];
$succes = 1;
}
}
} else {
$form = 1;
}
if (@$form == 1) {
require_once 'include/top.php';
?>
<center><span class="pageTitle">Autentificare</span></center>
<?php
if (isset($eroare)) echo "<br /><br /><center>Eroare: " . $eroare . "</center>";
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>?step=login" method="POST" name="cont" id="cont">
<input type="hidden" name="procesare" value="1" />
<table width="550" border="0" align="center" cellpadding="5" cellspacing="1" class="entryTable">
<tr class="entryTableHeader">
<td colspan="2">Date autentificare</td>
</tr>
<tr>
<td width="150" class="label">Email*</td>
<td class="content"><input name="txtEmail" type="text" class="box1" size="30" maxlength="50" value="<?=@$email?>"></td>
</tr>
<tr>
<td width="150" class="label">Parola*</td>
<td class="content"><input name="txtParola" type="password" class="box1" size="15" maxlength="50"></td>
</tr>
</table>
<p> </p>
<p align="center">
<input class="box" name="autentificare" type="submit" id="autentificare" value="Autentificare" />
</p>
</form>
<?php
} else if (@$succes==1) {
require_once 'include/top.php';
?>
<center><span class="pageTitle">Bun venit!</span></center>
<br /><br />
<center>
Bun venit <?=$_SESSION['client_nume'] . " " .$_SESSION['client_prenume']?>. <br /><br />
<a href="index.php">Click aici</a> pentru a te intoarce in magazin!
</center>
<?php
}
?>
ContLogout.php
<?php
if ( !defined('WEB_ROOT') || !isset($_GET['step']) ) {
exit;
}
$_SESSION['client_id'] = "";
$_SESSION['client_email'] = "";
$_SESSION['client_nume'] = "";
$_SESSION['client_prenume'] = "";
unset($_SESSION['client_id']);
unset($_SESSION['client_email']);
unset($_SESSION['client_nume']);
unset($_SESSION['client_prenume']);
require_once 'include/top.php';
?>
<center><span class="pageTitle">La revedere!</span>
<br /><br />
Ai fost deconectat. Iti multumim pentru vizita!<br /><br />
<a href="index.php">Click aici</a> pentru a te intoarce in magazin!
</center>
Header.php
<?php
if (!defined('WEB_ROOT')) {
exit;
}
// titlu pagina
$pageTitle = 'Magazin online';
if (isset($_GET['p']) && (int)$_GET['p'] > 0) {
$pdId = (int)$_GET['p'];
$sql = "SELECT produs_nume
FROM produse
WHERE produs_id = $pdId";
$result = dbQuery($sql);
$row = dbFetchAssoc($result);
$pageTitle = $row['produs_nume'];
} else if (isset($_GET['c']) && (int)$_GET['c'] > 0) {
$catId = (int)$_GET['c'];
$sql = "SELECT cat_nume
FROM categorii
WHERE cat_id = $catId";
$result = dbQuery($sql);
$row = dbFetchAssoc($result);
$pageTitle = $row['cat_nume'];
}
?>
<html>
<head>
<title><?php echo $pageTitle; ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="include/shop.css" rel="stylesheet" type="text/css">
<script language="JavaScript" type="text/javascript" src="library/common.js"></script>
</head>
<body>
ContEdit.php
<?php
if ( !defined('WEB_ROOT') || !isset($_GET['step']) ) {
exit;
}
$errorMessage = ' ';
require_once 'include/top.php';
$sql= " SELECT * FROM clienti WHERE client_id = $_SESSION[client_id]; ";
$rez = mysql_query($sql);
$client_autentificat = mysql_fetch_array($rez);
$clientId = $_SESSION['client_id'];
$email = $_SESSION['client_email'];
$parola = $client_autentificat['client_parola'];
$parola1 = $client_autentificat['client_parola'];
$nume = $client_autentificat['client_nume'];
$prenume = $client_autentificat['client_prenume'];
$adresa1 = $client_autentificat['client_adresa1'];
$adresa2 = $client_autentificat['client_adresa2'];
$telefon = $client_autentificat['client_telefon'];
$judet = $client_autentificat['client_judet'];
$localitate = $client_autentificat['client_localitate'];
$zip = $client_autentificat['client_zip'];
if (isset($_POST['procesare']) && @$_POST['procesare']==1) {
$parola = $_POST['txtParola'];
$parola1 = $_POST['txtParola1'];
$nume = $_POST['txtNume'];
$prenume = $_POST['txtPrenume'];
$adresa1 = $_POST['txtAdresa1'];
$adresa2 = $_POST['txtAdresa2'];
$telefon = $_POST['txtTelefon'];
$judet = $_POST['txtJudet'];
$localitate = $_POST['txtLocalitate'];
$zip = $_POST['txtZip'];
if ( strlen($parola) < 5 ) {
$form = 1;
$eroare = "Parola trebuie sa contina minim 5 caractere!";
} else if ($parola != $parola1) {
$form = 1;
$eroare = "Parola este obligatorie si trebuie sa fie identica in ambele campuri!";
} else if (strlen($nume) < 3 || strlen($prenume) < 3 || strlen($telefon) < 3) {
$form = 1;
$eroare = "Toate campurile marcate cu <strong>*</strong> sunt obligatorii";
}
// procesare si inregistrare in DB
if ( @$form != 1 ) {
$sql = "UPDATE clienti
SET
client_parola = '$parola',
client_nume = '$nume',
client_prenume = '$prenume',
client_adresa1 = '$adresa1',
client_adresa2 = '$adresa2',
client_telefon = '$telefon',
client_judet = '$judet',
client_localitate = '$localitate',
client_zip = '$zip'
WHERE client_id = $clientId; ";
$rez = mysql_query($sql);
$succes = 1;
}
} else {
$form = 1;
}
if (@$form == 1) {
?>
<center><span class="pageTitle">Contul meu</span></center>
<?php
if (isset($eroare)) echo "<br /><br /><center>Eroare: " . $eroare . "</center>";
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>?step=contEdit" method="POST" name="cont" id="cont">
<input type="hidden" name="procesare" value="1" />
<table width="550" border="0" align="center" cellpadding="5" cellspacing="1" class="entryTable">
<tr class="entryTableHeader">
<td colspan="2">Date autentificare</td>
</tr>
<tr>
<td width="150" class="label">Email*</td>
<td class="content"><input name="txtEmail" type="text" class="box1" size="30" maxlength="50" value="<?=@$email?>" readonly></td>
</tr>
<tr>
<td width="150" class="label">Parola*</td>
<td class="content"><input name="txtParola" type="password" class="box1" size="15" maxlength="50" value="<?=@$parola?>"></td>
</tr>
<tr>
<td width="150" class="label">Confirmare parola*</td>
<td class="content"><input name="txtParola1" type="password" class="box1" size="15" maxlength="50" value="<?=@$parola1?>"></td>
</tr>
</table>
<p> </p>
<table width="550" border="0" align="center" cellpadding="5" cellspacing="1" class="entryTable">
<tr class="entryTableHeader">
<td colspan="2">Date personale</td>
</tr>
<tr>
<td width="150" class="label">Nume*</td>
<td class="content"><input name="txtNume" type="text" class="box1" size="30" maxlength="50" value="<?=@$nume?>"></td>
</tr>
<tr>
<td width="150" class="label">Prenume*</td>
<td class="content"><input name="txtPrenume" type="text" class="box1" size="30" maxlength="50" value="<?=@$prenume?>"></td>
</tr>
<tr>
<td width="150" class="label">Adresa1</td>
<td class="content"><input name="txtAdresa1" type="text" class="box1" size="50" maxlength="100" value="<?=@$adresa1?>"></td>
</tr>
<tr>
<td width="150" class="label">Adresa2</td>
<td class="content"><input name="txtAdresa2" type="text" class="box1" size="50" maxlength="100" value="<?=@$adresa2?>"></td>
</tr>
<tr>
<td width="150" class="label">Telefon*</td>
<td class="content"><input name="txtTelefon" type="text" class="box1" size="30" maxlength="32" value="<?=@$telefon?>"></td>
</tr>
<tr>
<td width="150" class="label">Judet</td>
<td class="content"><input name="txtJudet" type="text" class="box1" size="30" maxlength="32" value="<?=@$judet?>"></td>
</tr>
<tr>
<td width="150" class="label">Localitate</td>
<td class="content"><input name="txtLocalitate" type="text" class="box1" size="30" maxlength="32" value="<?=@$localitate?>"></td>
</tr>
<tr>
<td width="150" class="label">Cod postal</td>
<td class="content"><input name="txtZip" type="text" class="box1" size="10" maxlength="10" value="<?=@$zip?>"></td>
</tr>
</table>
<p> </p>
<p align="center">
<input class="box" name="contNou" type="submit" id="contNou" value="Modifica" />
</p>
</form>
<?php
} else if (@$succes==1) {
?>
<center><span class="pageTitle">Contul meu</span></center>
<br /><br />
<center>
Modificarile au fost inregistrate.<br /><br />
<a href="index.php">Click aici</a> pentru a te intoarce in magazin!
</center>
<?php
}
?>
Detail.php
<?php
if (!defined('WEB_ROOT')) {
exit;
}
if (!isset($_GET['oid']) || (int)$_GET['oid'] <= 0) {
header('Location: index.php');
}
$orderId = (int)$_GET['oid'];
$sql = "SELECT produs_nume, produs_pret, comanda_cantitate
FROM comenzi_produse oi, produse p
WHERE oi.produs_id = p.produs_id and oi.comanda_id = $orderId
ORDER BY comanda_id ASC";
$result = dbQuery($sql);
$orderedItem = array();
while ($row = dbFetchAssoc($result)) {
$orderedItem[] = $row;
}
$sql = "SELECT comanda_data, comanda_ultimul_update, comanda_status, comanda_transport_nume, comanda_transport_prenume, comanda_transport_adresa1,
comanda_transport_adresa2, comanda_transport_telefon, comanda_transport_judet, comanda_transport_localitate, comanda_transport_codpostal, comanda_cost_transport,
comanda_plata_nume, comanda_plata_prenume, comanda_plata_adresa1, comanda_plata_adresa2, comanda_plata_telefon,
comanda_plata_judet, comanda_plata_localitate , comanda_plata_codpostal,
comanda_memo
FROM comenzi
WHERE comanda_id = $orderId";
$result = dbQuery($sql);
extract(dbFetchAssoc($result));
$orderStatus = array('ComandaNoua','Platita','Transportata','Finalizata','Anulata');
$orderOption = '';
foreach ($orderStatus as $status) {
$orderOption .= "<option value=\"$status\"";
if ($status == $comanda_status) {
$orderOption .= " selected";
}
$orderOption .= ">$status</option>\r\n";
}
?>
<p> </p>
<form action="" method="get" name="frmOrder" id="frmOrder">
<table width="550" border="0" align="center" cellpadding="5" cellspacing="1" class="detailTable">
<tr>
<td colspan="2" align="center" id="infoTableHeader">Detalii comanda</td>
</tr>
<tr>
<td width="150" class="label">Numar comanda</td>
<td class="content"><?php echo $orderId; ?></td>
</tr>
<tr>
<td width="150" class="label">Data</td>
<td class="content"><?php echo $comanda_data; ?></td>
</tr>
<tr>
<td width="150" class="label">Ultima actualizare</td>
<td class="content"><?php echo $comanda_ultimul_update; ?></td>
</tr>
<tr>
<td class="label">Status</td>
<td class="content"> <select name="cboOrderStatus" id="cboOrderStatus" class="box">
<?php echo $orderOption; ?> </select> <input name="btnModify" type="button" id="btnModify" value="Modifica Status" class="box" onClick="modifyOrderStatus(<?php echo $orderId; ?>);"></td>
</tr>
</table>
</form>
<p> </p>
<table width="550" border="0" align="center" cellpadding="5" cellspacing="1" class="detailTable">
<tr id="infoTableHeader">
<td colspan="3">Produse comandate</td>
</tr>
<tr align="center" class="label">
<td>Produs</td>
<td>Pret unitar</td>
<td>Total</td>
</tr>
<?php
$numItem = count($orderedItem);
$subTotal = 0;
for ($i = 0; $i < $numItem; $i++) {
extract($orderedItem[$i]);
$subTotal += $produs_pret * $comanda_cantitate;
?>
<tr class="content">
<td><?php echo "$comanda_cantitate X $produs_nume"; ?></td>
<td align="right"><?php echo afiseazaPret($produs_pret); ?></td>
<td align="right"><?php echo afiseazaPret($comanda_cantitate * $produs_pret); ?></td>
</tr>
<?php
}
?>
<tr class="content">
<td colspan="2" align="right">Sub-total</td>
<td align="right"><?php echo afiseazaPret($subTotal); ?></td>
</tr>
<tr class="content">
<td colspan="2" align="right">Taxa transport</td>
<td align="right"><?php echo afiseazaPret($comanda_cost_transport); ?></td>
</tr>
<tr class="content">
<td colspan="2" align="right">Total</td>
<td align="right"><?php echo afiseazaPret($comanda_cost_transport + $subTotal); ?></td>
</tr>
</table>
<p> </p>
<table width="550" border="0" align="center" cellpadding="5" cellspacing="1" class="detailTable">
<tr id="infoTableHeader">
<td colspan="2">Informatii transport</td>
</tr>
<tr>
<td width="150" class="label">Nume</td>
<td class="content"><?php echo $comanda_transport_nume; ?> </td>
</tr>
<tr>
<td width="150" class="label">Prenume</td>
<td class="content"><?php echo $comanda_transport_prenume; ?> </td>
</tr>
<tr>
<td width="150" class="label">Adresa 1</td>
<td class="content"><?php echo $comanda_transport_adresa1; ?> </td>
</tr>
<tr>
<td width="150" class="label">Adresa 2</td>
<td class="content"><?php echo $comanda_transport_adresa2; ?> </td>
</tr>
<tr>
<td width="150" class="label">Telefon</td>
<td class="content"><?php echo $comanda_transport_telefon; ?> </td>
</tr>
<tr>
<td width="150" class="label">Judet</td>
<td class="content"><?php echo $comanda_transport_judet; ?> </td>
</tr>
<tr>
<td width="150" class="label">Localitate</td>
<td class="content"><?php echo $comanda_transport_localitate; ?> </td>
</tr>
<tr>
<td width="150" class="label">Cod postal</td>
<td class="content"><?php echo $comanda_transport_codpostal; ?> </td>
</tr>
</table>
<p> </p>
<table width="550" border="0" align="center" cellpadding="5" cellspacing="1" class="detailTable">
<tr id="infoTableHeader">
<td colspan="2">Informatii plata</td>
</tr>
<tr>
<td width="150" class="label">Nume</td>
<td class="content"><?php echo $comanda_plata_nume; ?> </td>
</tr>
<tr>
<td width="150" class="label">Prenume</td>
<td class="content"><?php echo $comanda_plata_prenume; ?> </td>
</tr>
<tr>
<td width="150" class="label">Adresa 1</td>
<td class="content"><?php echo $comanda_plata_adresa1; ?> </td>
</tr>
<tr>
<td width="150" class="label">Adresa 2</td>
<td class="content"><?php echo $comanda_plata_adresa2; ?> </td>
</tr>
<tr>
<td width="150" class="label">Telefon</td>
<td class="content"><?php echo $comanda_plata_telefon; ?> </td>
</tr>
<tr>
<td width="150" class="label">Judet</td>
<td class="content"><?php echo $comanda_plata_judet; ?> </td>
</tr>
<tr>
<td width="150" class="label">Localitate</td>
<td class="content"><?php echo $comanda_plata_localitate; ?> </td>
</tr>
<tr>
<td width="150" class="label">Cod postal</td>
<td class="content"><?php echo $comanda_plata_codpostal; ?> </td>
</tr>
</table>
<p> </p>
<table width="550" border="0" align="center" cellpadding="5" cellspacing="1" class="detailTable">
<tr id="infoTableHeader">
<td colspan="2">Comentarii client</td>
</tr>
<tr>
<td colspan="2" class="label"><?php echo nl2br($comanda_memo); ?> </td>
</tr>
</table>
<p> </p>
<p align="center">
<input name="btnBack" type="button" id="btnBack" value="Inapoi" class="box" onClick="window.history.back();">
</p>
<p> </p>
<p> </p>
ProcesCategory.php
<?php
require_once '../../library/config.php';
require_once '../library/functions.php';
checkUser();
$action = isset($_GET['action']) ? $_GET['action'] : '';
switch ($action) {
case 'add' :
addCategory();
break;
case 'modify' :
modifyCategory();
break;
case 'delete' :
deleteCategory();
break;
case 'deleteImage' :
deleteImage();
break;
default :
// if action is not defined or unknown
// move to main category page
header('Location: index.php');
}
/*
Add a category
*/
function addCategory()
{
$name = $_POST['txtName'];
$description = $_POST['mtxDescription'];
$image = $_FILES['fleImage'];
$parentId = $_POST['hidParentId'];
$catImage = uploadImage('fleImage', SRV_ROOT . 'images/category/');
$sql = "INSERT INTO categorii (cat_parent_id, cat_nume, cat_descriere, cat_imagine)
VALUES ($parentId, '$name', '$description', '$catImage')";
$result = dbQuery($sql) or die('Cannot add category' . mysql_error());
header('Location: index.php?catId=' . $parentId);
}
/*
Upload an image and return the uploaded image name
*/
function uploadImage($inputName, $uploadDir)
{
$image = $_FILES[$inputName];
$imagePath = '';
// if a file is given
if (trim($image['tmp_name']) != '') {
// get the image extension
$ext = substr(strrchr($image['name'], "."), 1);
// generate a random new file name to avoid name conflict
$imagePath = md5(rand() * time()) . ".$ext";
// check the image width. if it exceed the maximum
// width we must resize it
$size = getimagesize($image['tmp_name']);
if ($size[0] > MAX_CATEGORY_IMAGE_WIDTH) {
$imagePath = createThumbnail($image['tmp_name'], $uploadDir . $imagePath, MAX_CATEGORY_IMAGE_WIDTH);
} else {
// move the image to category image directory
// if fail set $imagePath to empty string
if (!move_uploaded_file($image['tmp_name'], $uploadDir . $imagePath)) {
$imagePath = '';
}
}
}
return $imagePath;
}
/*
Modify a category
*/
function modifyCategory()
{
$catId = (int)$_GET['catId'];
$name = $_POST['txtName'];
$description = $_POST['mtxDescription'];
$image = $_FILES['fleImage'];
$catImage = uploadImage('fleImage', SRV_ROOT . 'images/category/');
// if uploading a new image
// remove old image
if ($catImage != '') {
_deleteImage($catId);
$catImage = "'$catImage'";
} else {
// leave the category image as it was
$catImage = 'cat_imagine';
}
$sql = "UPDATE categorii
SET cat_nume = '$name', cat_descriere = '$description', cat_imagine = $catImage
WHERE cat_id = $catId";
$result = dbQuery($sql) or die('Cannot update category. ' . mysql_error());
header('Location: index.php');
}
/*
Remove a category
*/
function deleteCategory()
{
if (isset($_GET['catId']) && (int)$_GET['catId'] > 0) {
$catId = (int)$_GET['catId'];
} else {
header('Location: index.php');
}
// find all the children categories
$children = getChildren($catId);
// make an array containing this category and all it's children
$categories = array_merge($children, array($catId));
$numCategory = count($categories);
// remove all product image & thumbnail
// if the product's category is in $categories
$sql = "SELECT produs_id, produs_imagine, produs_imagine_mica
FROM produse
WHERE cat_id IN (" . implode(',', $categories) . ")";
$result = dbQuery($sql);
while ($row = dbFetchAssoc($result)) {
@unlink(SRV_ROOT . PRODUCT_IMAGE_DIR . $row['produs_imagine']);
@unlink(SRV_ROOT . PRODUCT_IMAGE_DIR . $row['produs_imagine_mica']);
}
// delete the products
$sql = "DELETE FROM produse
WHERE cat_id IN (" . implode(',', $categories) . ")";
dbQuery($sql);
// then remove the categories image
_deleteImage($categories);
// finally remove the category from database;
$sql = "DELETE FROM categorii
WHERE cat_id IN (" . implode(',', $categories) . ")";
dbQuery($sql);
header('Location: index.php');
}
/*
Recursively find all children of $catId
*/
function getChildren($catId)
{
$sql = "SELECT cat_id ".
"FROM categorii ".
"WHERE cat_parent_id = $catId ";
$result = dbQuery($sql);
$cat = array();
if (dbNumRows($result) > 0) {
while ($row = dbFetchRow($result)) {
$cat[] = $row[0];
// call this function again to find the children
$cat = array_merge($cat, getChildren($row[0]));
}
}
return $cat;
}
/*
Remove a category image
*/
function deleteImage()
{
if (isset($_GET['catId']) && (int)$_GET['catId'] > 0) {
$catId = (int)$_GET['catId'];
} else {
header('Location: index.php');
}
_deleteImage($catId);
// update the image name in the database
$sql = "UPDATE categorii
SET cat_imagine = ''
WHERE cat_id = $catId";
dbQuery($sql);
header("Location: index.php?view=modify&catId=$catId");
}
/*
Delete a category image where category = $catId
*/
function _deleteImage($catId)
{
// we will return the status
// whether the image deleted successfully
$deleted = false;
// get the image(s)
$sql = "SELECT cat_imagine
FROM categorii
WHERE cat_id ";
if (is_array($catId)) {
$sql .= " IN (" . implode(',', $catId) . ")";
} else {
$sql .= " = $catId";
}
$result = dbQuery($sql);
if (dbNumRows($result)) {
while ($row = dbFetchAssoc($result)) {
// delete the image file
$deleted = @unlink(SRV_ROOT . CATEGORY_IMAGE_DIR . $row['cat_imagine']);
}
}
return $deleted;
}
?>
Bibliografie
1. „Proiectarea Sistemelor Informatice” – Metode de realizare de V. Chichernea, C.Botezatu , Edit. Sylvi, București 2002;
2. „Proiectarea sistemelor informatice” – de V. Stanciu și colectiv, Edit. DualTech, 2002;
3. „Proiectarea obiectuală a sistemelor informatice” – de Prof. dr. Dorin Zaharie și alții, Edit. DualTech;
4. „Proiectarea sistemelor informatice prin limbajul Unified modeling language” – de Niculae Davidescu , Edit. ALL Beck , 2003;
5. „Baze de date – proiectare, implementare, gestionare” – de T. Connolly, C. Begg, A. Strachan, Edit. Teora, București 2001;
6. „Bazele Informaticii – Sisteme informatice pentru birou” – de Virgil Chichernea, Edit. Sylvi, București 1998;
7. „Object Oriented Modeling and design for Database Applications” – de Blaha M. și Premerlani W., Edit. Prentice Hall, 1997;
8. „Data mining and Knowledge discovery in databases” – de Fayyad U., Edit. Communication of the ACM (Special issue), 1996;
9. „Query processing in databases systems” – de Kim W., Reiner D., Batory S., Edit. Springer Verlag, 1985;
10. „Object Oriented Concepts, databases and applications” – de Kim W., Lochovskz F. H., Edit. Addison-Wesley, 1989;
11. „Sisteme informaționale economice” – de Oprea D., Edit. Economică, București 1997;
12. „SQL fără profesor, în 14 zile” – de J. Perkins, B. Morgan, Edit. Teora, București 1998;
13. „Aplicatii Web la cheie. Studii de caz implementate in PHP” – de Buraga Sabin, Edit. Polirom 2003;
14. „PHP pentru World Wide Web in imagini” – de Ullman Larry, Edit. Teora 2004;
15. „Invata singur PHP, MySQL si Apache” – de Julie C. Meloni, Edit. Corint 2005
16. „PHP4” – de Bill McCarty, Editura: Teora 2004;
17. „Dezvoltarea aplicatiilor WEB cu PHP si MySQL” – Laura Thomson, Editura: Teora 2004;http://www.inno.ro/wd/webd.htmhttp://www.nd.ro/
18. http://www.php.net/
19. http://www.php.net/quickref.php/
20. http://www.phpromania.net/
21. http://php.resourceindex.com/
22. http://www.phpmyadmin.net/
23. http://www.mysql.com/
ANEXA
Codul sursă al site-ului
Index.php
<?php
require_once 'library/config.php';
require_once 'library/category-functions.php';
require_once 'library/product-functions.php';
require_once 'library/cart-functions.php';
$_SESSION['shop_return_url'] = $_SERVER['REQUEST_URI'];
$catId = (isset($_GET['c']) && $_GET['c'] != '1') ? $_GET['c'] : 0;
$pdId = (isset($_GET['p']) && $_GET['p'] != '') ? $_GET['p'] : 0;
$producator = (isset($_GET['producator']) && $_GET['producator']!= '') ? $_GET['producator'] : 0;
$cauta = (isset($_GET['string']) && $_GET['string']!= '') ? $_GET['string'] : 0;
require_once 'include/header.php';
?>
<?php require_once 'include/top.php'; ?>
<center><span class="pageTitle"> </span></center>
<table width="960" border="0" align="center" cellpadding="0" cellspacing="0">
<tr valign="top">
<td width="200" height="400" id="leftnav">
<?php
require_once 'include/leftNav.php';
?>
</td>
<td style="padding-top:30px">
<?php
if ($pdId) {
require_once 'include/productDetail.php';
} else if ($catId || $producator || $cauta) {
require_once 'include/productList.php';
} else {
require_once 'include/categoryList.php';
}
?>
</td>
<td width="250" id="rightNav"><?php require_once 'include/miniCart.php'; ?></td>
</tr>
</table>
<?php
require_once 'include/footer.php';
?>
Cont.php
<?php
require_once 'library/config.php';
require_once 'library/cart-functions.php';
require_once 'library/checkout-functions.php';
$step = $_GET['step'];
$includeFile = '';
if ($step == 'contNou') {
$includeFile = 'contNou.php';
$pageTitle = 'Cont nou';
} else if ($step == 'contEdit') {
$includeFile = 'contEdit.php';
$pageTitle = 'Contul meu';
} else if ($step == 'login') {
$includeFile = 'contLogin.php';
$pageTitle = 'Autentificare';
} else if ($step == 'logout') {
$includeFile = 'contLogout.php';
$pageTitle = 'Iesire';
}
require_once 'include/header.php';
require_once 'include/top.php';
require_once "include/$includeFile";
require_once 'include/footer.php';
?>
Cart.php
<?php
require_once 'library/config.php';
require_once 'library/cart-functions.php';
$action = (isset($_GET['action']) && $_GET['action'] != '') ? $_GET['action'] : 'view';
switch ($action) {
case 'add' :
adaugaInCos();
break;
case 'update' :
actualizeazaCos();
break;
case 'delete' :
stergeDinCos();
break;
case 'view' :
}
$cartContent = preiaContinutCos();
$numItem = count($cartContent);
$pageTitle = 'Shopping Cart';
require_once 'include/header.php';
require_once 'include/top.php';
?>
<center><span class="pageTitle">Cosul de cumparaturi</span></center>
<?php
afiseazaErorile();
if ($numItem > 0 ) {
?>
<form action="<?php echo $_SERVER['PHP_SELF'] . "?action=update"; ?>" method="post" name="frmCart" id="frmCart">
<table width="780" border="0" align="center" cellpadding="5" cellspacing="1" class="entryTable">
<tr class="entryTableHeader">
<td colspan="2" align="center">Produs</td>
<td align="center">Pret unitar</td>
<td width="75" align="center">Cantitate</td>
<td align="center">Total</td>
<td width="75" align="center"> </td>
</tr>
<?php
$subTotal = 0;
for ($i = 0; $i < $numItem; $i++) {
extract($cartContent[$i]);
$productUrl = "index.php?c=$cat_id&p=$produs_id";
$subTotal += $produs_pret * $cos_cantitate;
?>
<tr class="content">
<td width="80" align="center"><a href="<?php echo $productUrl; ?>"><img src="<?php echo $produs_imagine_mica; ?>" border="0"></a></td>
<td><a href="<?php echo $productUrl; ?>"><?php echo $produs_nume; ?></a></td>
<td align="right"><?php echo afiseazaPret($produs_pret); ?></td>
<td width="75"><input name="txtQty[]" type="text" id="txtQty[]" size="5" value="<?php echo $cos_cantitate; ?>" onKeyUp="checkNumber(this);">
<input name="hidCartId[]" type="hidden" value="<?php echo $cos_id; ?>">
<input name="hidProductId[]" type="hidden" value="<?php echo $produs_id; ?>">
</td>
<td align="right"><?php echo afiseazaPret($produs_pret * $cos_cantitate); ?></td>
<td width="75" align="center"> <input name="btnDelete" type="button" id="btnDelete" value="Sterge" onClick="window.location.href='<?php echo $_SERVER['PHP_SELF'] . "?action=delete&cid=$cos_id"; ?>';" class="box">
</td>
</tr>
<?php
}
?>
<tr class="content">
<td colspan="4" align="right">Subtotal</td>
<td align="right"><?php echo afiseazaPret($subTotal); ?></td>
<td width="75" align="center"> </td>
</tr>
<tr class="content">
<td colspan="4" align="right">Taxa transport </td>
<td align="right"><?php echo afiseazaPret($shopConfig['shippingCost']); ?></td>
<td width="75" align="center"> </td>
</tr>
<tr class="content">
<td colspan="4" align="right">Total </td>
<td align="right"><?php echo afiseazaPret($subTotal + $shopConfig['shippingCost']); ?></td>
<td width="75" align="center"> </td>
</tr>
<tr class="content">
<td colspan="5" align="right"> </td>
<td width="75" align="center">
<input name="btnUpdate" type="submit" id="btnUpdate" value="Actualizeaza cosul" class="box"></td>
</tr>
</table>
</form>
<?php
} else {
?>
<p> </p><table width="550" border="0" align="center" cellpadding="10" cellspacing="0">
<tr>
<td><p align="center">Cosul de cumparaturi este gol</p></td>
</tr>
</table>
<?php
}
$shoppingReturnUrl = isset($_SESSION['shop_return_url']) ? $_SESSION['shop_return_url'] : 'index.php';
?>
<table width="550" border="0" align="center" cellpadding="10" cellspacing="0">
<tr align="center">
<td><input name="btnContinue" type="button" id="btnContinue" value="<< Continua cumparaturile" onClick="window.location.href='<?php echo $shoppingReturnUrl; ?>';" class="box"></td>
<?php
if ($numItem > 0) {
?>
<td><input name="btnCheckout" type="button" id="btnCheckout" value="Cumpara >>" onClick="window.location.href='checkout.php?step=1';" class="box"></td>
<?php
}
?>
</tr>
</table>
<?php
require_once 'include/footer.php';
?>
Config.php
<?php
//ini_set('display_errors', 'On');
//ob_start("ob_gzhandler");
//error_reporting(E_ALL);
session_start();
// =============================
// = config conexiune database =
// =============================
$dbHost = 'localhost';
$dbUser = 'sql_magazin';
$dbPass = '123456';
$dbName = 'magazin';
// ===================================
// = Setari web root & document root =
// ===================================
$thisFile = str_replace('\\', '/', __FILE__);
$docRoot = $_SERVER['DOCUMENT_ROOT'];
$webRoot = str_replace(array($docRoot, 'library/config.php'), '', $thisFile);
$srvRoot = str_replace('library/config.php', '', $thisFile);
define('WEB_ROOT', "http://".$_SERVER['SERVER_ADDR']."/web/magazin/");
//define('WEB_ROOT', "http://localhost/web/magazin/");
//define('WEB_ROOT', $webRoot);
define('SRV_ROOT', $srvRoot);
// =====================================================================
// = Definirea cailor pentru stocarea imaginilor: categorii si produse =
// =====================================================================
define('CATEGORY_IMAGE_DIR', 'images/category/');
define('PRODUCT_IMAGE_DIR', 'images/product/');
// =========================================
// = Limitari de dimensiune pentru imagini =
// =========================================
// imagine categorie latime MAX 75px
define('MAX_CATEGORY_IMAGE_WIDTH', 75);
// limitam dimensiunile pentru imaginea produsului? true sau false
define('LIMIT_PRODUCT_WIDTH', true);
// imagine produs latime MAX 250px
define('MAX_PRODUCT_IMAGE_WIDTH', 250);
// imagine mica produs latime MAX 75px
define('THUMBNAIL_WIDTH', 75);
if (!get_magic_quotes_gpc()) {
if (isset($_POST)) {
foreach ($_POST as $key => $value) {
$_POST[$key] = trim(addslashes($value));
}
}
if (isset($_GET)) {
foreach ($_GET as $key => $value) {
$_GET[$key] = trim(addslashes($value));
}
}
}
// =========================================================
// = accesarea fisierelor aditionale: DB si functii common =
// =========================================================
require_once 'database.php';
require_once 'common.php';
$shopConfig = configurareMagazin();
?>
ContNou.php
<?php
if ( !defined('WEB_ROOT') || !isset($_GET['step']) ) {
exit;
}
$errorMessage = ' ';
require_once 'include/top.php';
if (isset($_POST['procesare']) && @$_POST['procesare']==1) {
$email = $_POST['txtEmail'];
$parola = $_POST['txtParola'];
$parola1 = $_POST['txtParola1'];
$nume = $_POST['txtNume'];
$prenume = $_POST['txtPrenume'];
$adresa1 = $_POST['txtAdresa1'];
$adresa2 = $_POST['txtAdresa2'];
$telefon = $_POST['txtTelefon'];
$judet = $_POST['txtJudet'];
$localitate = $_POST['txtLocalitate'];
$zip = $_POST['txtZip'];
if (strlen($email)<5) {
$form = 1;
$eroare ="Adresa de email este obligatorie!";
} else if ( strlen($parola) < 5 ) {
$form = 1;
$eroare = "Parola trebuie sa contina minim 5 caractere!";
} else if ($parola != $parola1) {
$form = 1;
$eroare = "Parola este obligatorie si trebuie sa fie identica in ambele campuri!";
} else if (strlen($nume) < 3 || strlen($prenume) < 3 || strlen($telefon) < 3) {
$form = 1;
$eroare = "Toate campurile marcate cu <strong>*</strong> sunt obligatorii";
}
// procesare si inregistrare in DB
if ( @$form != 1 ) {
$sql = "SELECT client_email FROM clienti WHERE client_email='$email'; ";
$rez = mysql_query($sql);
$num = mysql_num_rows($rez);
// Adresa de email exista deja in baza si returnam eroare
if ($num>0) {
$form = 1;
$eroare = "Adresa de email exista deja in baza de date!";
} else {
$sql = "INSERT into clienti
(client_email, client_parola, client_nume, client_prenume, client_adresa1, client_adresa2, client_telefon, client_judet, client_localitate, client_zip)
VALUES
('$email', '$parola', '$nume', '$prenume', '$adresa1', '$adresa2', '$telefon', '$judet', '$localitate', '$zip');
";
$rez=mysql_query($sql);
$succes = 1;
}
}
} else {
$form = 1;
}
if (@$form == 1) {
?>
<center><span class="pageTitle">Cont nou</span></center>
<?php
if (isset($eroare)) echo "<br /><br /><center>Eroare: " . $eroare . "</center>";
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>?step=contNou" method="POST" name="cont" id="cont">
<input type="hidden" name="procesare" value="1" />
<table width="550" border="0" align="center" cellpadding="5" cellspacing="1" class="entryTable">
<tr class="entryTableHeader">
<td colspan="2">Date autentificare</td>
</tr>
<tr>
<td width="150" class="label">Email*</td>
<td class="content"><input name="txtEmail" type="text" class="box1" size="30" maxlength="50" value="<?=@$email?>"></td>
</tr>
<tr>
<td width="150" class="label">Parola*</td>
<td class="content"><input name="txtParola" type="password" class="box1" size="15" maxlength="50"></td>
</tr>
<tr>
<td width="150" class="label">Confirmare parola*</td>
<td class="content"><input name="txtParola1" type="password" class="box1" size="15" maxlength="50"></td>
</tr>
</table>
<p> </p>
<table width="550" border="0" align="center" cellpadding="5" cellspacing="1" class="entryTable">
<tr class="entryTableHeader">
<td colspan="2">Date personale</td>
</tr>
<tr>
<td width="150" class="label">Nume*</td>
<td class="content"><input name="txtNume" type="text" class="box1" size="30" maxlength="50" value="<?=@$nume?>"></td>
</tr>
<tr>
<td width="150" class="label">Prenume*</td>
<td class="content"><input name="txtPrenume" type="text" class="box1" size="30" maxlength="50" value="<?=@$prenume?>"></td>
</tr>
<tr>
<td width="150" class="label">Adresa1</td>
<td class="content"><input name="txtAdresa1" type="text" class="box1" size="50" maxlength="100" value="<?=@$adresa1?>"></td>
</tr>
<tr>
<td width="150" class="label">Adresa2</td>
<td class="content"><input name="txtAdresa2" type="text" class="box1" size="50" maxlength="100" value="<?=@$adresa2?>"></td>
</tr>
<tr>
<td width="150" class="label">Telefon*</td>
<td class="content"><input name="txtTelefon" type="text" class="box1" size="30" maxlength="32" value="<?=@$telefon?>"></td>
</tr>
<tr>
<td width="150" class="label">Judet</td>
<td class="content"><input name="txtJudet" type="text" class="box1" size="30" maxlength="32" value="<?=@$judet?>"></td>
</tr>
<tr>
<td width="150" class="label">Localitate</td>
<td class="content"><input name="txtLocalitate" type="text" class="box1" size="30" maxlength="32" value="<?=@$localitate?>"></td>
</tr>
<tr>
<td width="150" class="label">Cod postal</td>
<td class="content"><input name="txtZip" type="text" class="box1" size="10" maxlength="10" value="<?=@$zip?>"></td>
</tr>
</table>
<p> </p>
<p align="center">
<input class="box" name="contNou" type="submit" id="contNou" value="Cont nou" />
</p>
</form>
<?php
} else if (@$succes==1) {
?>
<center><span class="pageTitle">Cont nou</span></center>
<br /><br />
<center>
Contul a fost creeat cu succes.<br /><br />
<a href="<?php echo $_SERVER['PHP_SELF']; ?>?step=login">Click aici</a> pentru autentificare!
</center>
<?php
}
?>
ContLogin.php
<?php
if ( !defined('WEB_ROOT') || !isset($_GET['step']) ) {
exit;
}
if (isset($_POST['procesare']) && @$_POST['procesare']==1) {
$email = $_POST['txtEmail'];
$parola = $_POST['txtParola'];
if (strlen($email) < 3 || strlen($parola) < 3) {
$form = 1;
$eroare = "Toate campurile marcate cu <strong>*</strong> sunt obligatorii";
}
// preluare date din DB
if ( @$form != 1 ) {
$sql = "SELECT * FROM clienti WHERE client_email='$email' AND client_parola='$parola'; ";
$rez = mysql_query($sql);
$num = mysql_num_rows($rez);
if ($num == 0) {
$form = 1;
$eroare = "Adresa de email nu exista sau parola este incorecta!";
} else {
$client = mysql_fetch_array($rez);
$_SESSION['client_id'] = $client['client_id'];
$_SESSION['client_email'] = $client['client_email'];
$_SESSION['client_nume'] = $client['client_nume'];
$_SESSION['client_prenume'] = $client['client_prenume'];
$succes = 1;
}
}
} else {
$form = 1;
}
if (@$form == 1) {
require_once 'include/top.php';
?>
<center><span class="pageTitle">Autentificare</span></center>
<?php
if (isset($eroare)) echo "<br /><br /><center>Eroare: " . $eroare . "</center>";
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>?step=login" method="POST" name="cont" id="cont">
<input type="hidden" name="procesare" value="1" />
<table width="550" border="0" align="center" cellpadding="5" cellspacing="1" class="entryTable">
<tr class="entryTableHeader">
<td colspan="2">Date autentificare</td>
</tr>
<tr>
<td width="150" class="label">Email*</td>
<td class="content"><input name="txtEmail" type="text" class="box1" size="30" maxlength="50" value="<?=@$email?>"></td>
</tr>
<tr>
<td width="150" class="label">Parola*</td>
<td class="content"><input name="txtParola" type="password" class="box1" size="15" maxlength="50"></td>
</tr>
</table>
<p> </p>
<p align="center">
<input class="box" name="autentificare" type="submit" id="autentificare" value="Autentificare" />
</p>
</form>
<?php
} else if (@$succes==1) {
require_once 'include/top.php';
?>
<center><span class="pageTitle">Bun venit!</span></center>
<br /><br />
<center>
Bun venit <?=$_SESSION['client_nume'] . " " .$_SESSION['client_prenume']?>. <br /><br />
<a href="index.php">Click aici</a> pentru a te intoarce in magazin!
</center>
<?php
}
?>
ContLogout.php
<?php
if ( !defined('WEB_ROOT') || !isset($_GET['step']) ) {
exit;
}
$_SESSION['client_id'] = "";
$_SESSION['client_email'] = "";
$_SESSION['client_nume'] = "";
$_SESSION['client_prenume'] = "";
unset($_SESSION['client_id']);
unset($_SESSION['client_email']);
unset($_SESSION['client_nume']);
unset($_SESSION['client_prenume']);
require_once 'include/top.php';
?>
<center><span class="pageTitle">La revedere!</span>
<br /><br />
Ai fost deconectat. Iti multumim pentru vizita!<br /><br />
<a href="index.php">Click aici</a> pentru a te intoarce in magazin!
</center>
Header.php
<?php
if (!defined('WEB_ROOT')) {
exit;
}
// titlu pagina
$pageTitle = 'Magazin online';
if (isset($_GET['p']) && (int)$_GET['p'] > 0) {
$pdId = (int)$_GET['p'];
$sql = "SELECT produs_nume
FROM produse
WHERE produs_id = $pdId";
$result = dbQuery($sql);
$row = dbFetchAssoc($result);
$pageTitle = $row['produs_nume'];
} else if (isset($_GET['c']) && (int)$_GET['c'] > 0) {
$catId = (int)$_GET['c'];
$sql = "SELECT cat_nume
FROM categorii
WHERE cat_id = $catId";
$result = dbQuery($sql);
$row = dbFetchAssoc($result);
$pageTitle = $row['cat_nume'];
}
?>
<html>
<head>
<title><?php echo $pageTitle; ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="include/shop.css" rel="stylesheet" type="text/css">
<script language="JavaScript" type="text/javascript" src="library/common.js"></script>
</head>
<body>
ContEdit.php
<?php
if ( !defined('WEB_ROOT') || !isset($_GET['step']) ) {
exit;
}
$errorMessage = ' ';
require_once 'include/top.php';
$sql= " SELECT * FROM clienti WHERE client_id = $_SESSION[client_id]; ";
$rez = mysql_query($sql);
$client_autentificat = mysql_fetch_array($rez);
$clientId = $_SESSION['client_id'];
$email = $_SESSION['client_email'];
$parola = $client_autentificat['client_parola'];
$parola1 = $client_autentificat['client_parola'];
$nume = $client_autentificat['client_nume'];
$prenume = $client_autentificat['client_prenume'];
$adresa1 = $client_autentificat['client_adresa1'];
$adresa2 = $client_autentificat['client_adresa2'];
$telefon = $client_autentificat['client_telefon'];
$judet = $client_autentificat['client_judet'];
$localitate = $client_autentificat['client_localitate'];
$zip = $client_autentificat['client_zip'];
if (isset($_POST['procesare']) && @$_POST['procesare']==1) {
$parola = $_POST['txtParola'];
$parola1 = $_POST['txtParola1'];
$nume = $_POST['txtNume'];
$prenume = $_POST['txtPrenume'];
$adresa1 = $_POST['txtAdresa1'];
$adresa2 = $_POST['txtAdresa2'];
$telefon = $_POST['txtTelefon'];
$judet = $_POST['txtJudet'];
$localitate = $_POST['txtLocalitate'];
$zip = $_POST['txtZip'];
if ( strlen($parola) < 5 ) {
$form = 1;
$eroare = "Parola trebuie sa contina minim 5 caractere!";
} else if ($parola != $parola1) {
$form = 1;
$eroare = "Parola este obligatorie si trebuie sa fie identica in ambele campuri!";
} else if (strlen($nume) < 3 || strlen($prenume) < 3 || strlen($telefon) < 3) {
$form = 1;
$eroare = "Toate campurile marcate cu <strong>*</strong> sunt obligatorii";
}
// procesare si inregistrare in DB
if ( @$form != 1 ) {
$sql = "UPDATE clienti
SET
client_parola = '$parola',
client_nume = '$nume',
client_prenume = '$prenume',
client_adresa1 = '$adresa1',
client_adresa2 = '$adresa2',
client_telefon = '$telefon',
client_judet = '$judet',
client_localitate = '$localitate',
client_zip = '$zip'
WHERE client_id = $clientId; ";
$rez = mysql_query($sql);
$succes = 1;
}
} else {
$form = 1;
}
if (@$form == 1) {
?>
<center><span class="pageTitle">Contul meu</span></center>
<?php
if (isset($eroare)) echo "<br /><br /><center>Eroare: " . $eroare . "</center>";
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>?step=contEdit" method="POST" name="cont" id="cont">
<input type="hidden" name="procesare" value="1" />
<table width="550" border="0" align="center" cellpadding="5" cellspacing="1" class="entryTable">
<tr class="entryTableHeader">
<td colspan="2">Date autentificare</td>
</tr>
<tr>
<td width="150" class="label">Email*</td>
<td class="content"><input name="txtEmail" type="text" class="box1" size="30" maxlength="50" value="<?=@$email?>" readonly></td>
</tr>
<tr>
<td width="150" class="label">Parola*</td>
<td class="content"><input name="txtParola" type="password" class="box1" size="15" maxlength="50" value="<?=@$parola?>"></td>
</tr>
<tr>
<td width="150" class="label">Confirmare parola*</td>
<td class="content"><input name="txtParola1" type="password" class="box1" size="15" maxlength="50" value="<?=@$parola1?>"></td>
</tr>
</table>
<p> </p>
<table width="550" border="0" align="center" cellpadding="5" cellspacing="1" class="entryTable">
<tr class="entryTableHeader">
<td colspan="2">Date personale</td>
</tr>
<tr>
<td width="150" class="label">Nume*</td>
<td class="content"><input name="txtNume" type="text" class="box1" size="30" maxlength="50" value="<?=@$nume?>"></td>
</tr>
<tr>
<td width="150" class="label">Prenume*</td>
<td class="content"><input name="txtPrenume" type="text" class="box1" size="30" maxlength="50" value="<?=@$prenume?>"></td>
</tr>
<tr>
<td width="150" class="label">Adresa1</td>
<td class="content"><input name="txtAdresa1" type="text" class="box1" size="50" maxlength="100" value="<?=@$adresa1?>"></td>
</tr>
<tr>
<td width="150" class="label">Adresa2</td>
<td class="content"><input name="txtAdresa2" type="text" class="box1" size="50" maxlength="100" value="<?=@$adresa2?>"></td>
</tr>
<tr>
<td width="150" class="label">Telefon*</td>
<td class="content"><input name="txtTelefon" type="text" class="box1" size="30" maxlength="32" value="<?=@$telefon?>"></td>
</tr>
<tr>
<td width="150" class="label">Judet</td>
<td class="content"><input name="txtJudet" type="text" class="box1" size="30" maxlength="32" value="<?=@$judet?>"></td>
</tr>
<tr>
<td width="150" class="label">Localitate</td>
<td class="content"><input name="txtLocalitate" type="text" class="box1" size="30" maxlength="32" value="<?=@$localitate?>"></td>
</tr>
<tr>
<td width="150" class="label">Cod postal</td>
<td class="content"><input name="txtZip" type="text" class="box1" size="10" maxlength="10" value="<?=@$zip?>"></td>
</tr>
</table>
<p> </p>
<p align="center">
<input class="box" name="contNou" type="submit" id="contNou" value="Modifica" />
</p>
</form>
<?php
} else if (@$succes==1) {
?>
<center><span class="pageTitle">Contul meu</span></center>
<br /><br />
<center>
Modificarile au fost inregistrate.<br /><br />
<a href="index.php">Click aici</a> pentru a te intoarce in magazin!
</center>
<?php
}
?>
Detail.php
<?php
if (!defined('WEB_ROOT')) {
exit;
}
if (!isset($_GET['oid']) || (int)$_GET['oid'] <= 0) {
header('Location: index.php');
}
$orderId = (int)$_GET['oid'];
$sql = "SELECT produs_nume, produs_pret, comanda_cantitate
FROM comenzi_produse oi, produse p
WHERE oi.produs_id = p.produs_id and oi.comanda_id = $orderId
ORDER BY comanda_id ASC";
$result = dbQuery($sql);
$orderedItem = array();
while ($row = dbFetchAssoc($result)) {
$orderedItem[] = $row;
}
$sql = "SELECT comanda_data, comanda_ultimul_update, comanda_status, comanda_transport_nume, comanda_transport_prenume, comanda_transport_adresa1,
comanda_transport_adresa2, comanda_transport_telefon, comanda_transport_judet, comanda_transport_localitate, comanda_transport_codpostal, comanda_cost_transport,
comanda_plata_nume, comanda_plata_prenume, comanda_plata_adresa1, comanda_plata_adresa2, comanda_plata_telefon,
comanda_plata_judet, comanda_plata_localitate , comanda_plata_codpostal,
comanda_memo
FROM comenzi
WHERE comanda_id = $orderId";
$result = dbQuery($sql);
extract(dbFetchAssoc($result));
$orderStatus = array('ComandaNoua','Platita','Transportata','Finalizata','Anulata');
$orderOption = '';
foreach ($orderStatus as $status) {
$orderOption .= "<option value=\"$status\"";
if ($status == $comanda_status) {
$orderOption .= " selected";
}
$orderOption .= ">$status</option>\r\n";
}
?>
<p> </p>
<form action="" method="get" name="frmOrder" id="frmOrder">
<table width="550" border="0" align="center" cellpadding="5" cellspacing="1" class="detailTable">
<tr>
<td colspan="2" align="center" id="infoTableHeader">Detalii comanda</td>
</tr>
<tr>
<td width="150" class="label">Numar comanda</td>
<td class="content"><?php echo $orderId; ?></td>
</tr>
<tr>
<td width="150" class="label">Data</td>
<td class="content"><?php echo $comanda_data; ?></td>
</tr>
<tr>
<td width="150" class="label">Ultima actualizare</td>
<td class="content"><?php echo $comanda_ultimul_update; ?></td>
</tr>
<tr>
<td class="label">Status</td>
<td class="content"> <select name="cboOrderStatus" id="cboOrderStatus" class="box">
<?php echo $orderOption; ?> </select> <input name="btnModify" type="button" id="btnModify" value="Modifica Status" class="box" onClick="modifyOrderStatus(<?php echo $orderId; ?>);"></td>
</tr>
</table>
</form>
<p> </p>
<table width="550" border="0" align="center" cellpadding="5" cellspacing="1" class="detailTable">
<tr id="infoTableHeader">
<td colspan="3">Produse comandate</td>
</tr>
<tr align="center" class="label">
<td>Produs</td>
<td>Pret unitar</td>
<td>Total</td>
</tr>
<?php
$numItem = count($orderedItem);
$subTotal = 0;
for ($i = 0; $i < $numItem; $i++) {
extract($orderedItem[$i]);
$subTotal += $produs_pret * $comanda_cantitate;
?>
<tr class="content">
<td><?php echo "$comanda_cantitate X $produs_nume"; ?></td>
<td align="right"><?php echo afiseazaPret($produs_pret); ?></td>
<td align="right"><?php echo afiseazaPret($comanda_cantitate * $produs_pret); ?></td>
</tr>
<?php
}
?>
<tr class="content">
<td colspan="2" align="right">Sub-total</td>
<td align="right"><?php echo afiseazaPret($subTotal); ?></td>
</tr>
<tr class="content">
<td colspan="2" align="right">Taxa transport</td>
<td align="right"><?php echo afiseazaPret($comanda_cost_transport); ?></td>
</tr>
<tr class="content">
<td colspan="2" align="right">Total</td>
<td align="right"><?php echo afiseazaPret($comanda_cost_transport + $subTotal); ?></td>
</tr>
</table>
<p> </p>
<table width="550" border="0" align="center" cellpadding="5" cellspacing="1" class="detailTable">
<tr id="infoTableHeader">
<td colspan="2">Informatii transport</td>
</tr>
<tr>
<td width="150" class="label">Nume</td>
<td class="content"><?php echo $comanda_transport_nume; ?> </td>
</tr>
<tr>
<td width="150" class="label">Prenume</td>
<td class="content"><?php echo $comanda_transport_prenume; ?> </td>
</tr>
<tr>
<td width="150" class="label">Adresa 1</td>
<td class="content"><?php echo $comanda_transport_adresa1; ?> </td>
</tr>
<tr>
<td width="150" class="label">Adresa 2</td>
<td class="content"><?php echo $comanda_transport_adresa2; ?> </td>
</tr>
<tr>
<td width="150" class="label">Telefon</td>
<td class="content"><?php echo $comanda_transport_telefon; ?> </td>
</tr>
<tr>
<td width="150" class="label">Judet</td>
<td class="content"><?php echo $comanda_transport_judet; ?> </td>
</tr>
<tr>
<td width="150" class="label">Localitate</td>
<td class="content"><?php echo $comanda_transport_localitate; ?> </td>
</tr>
<tr>
<td width="150" class="label">Cod postal</td>
<td class="content"><?php echo $comanda_transport_codpostal; ?> </td>
</tr>
</table>
<p> </p>
<table width="550" border="0" align="center" cellpadding="5" cellspacing="1" class="detailTable">
<tr id="infoTableHeader">
<td colspan="2">Informatii plata</td>
</tr>
<tr>
<td width="150" class="label">Nume</td>
<td class="content"><?php echo $comanda_plata_nume; ?> </td>
</tr>
<tr>
<td width="150" class="label">Prenume</td>
<td class="content"><?php echo $comanda_plata_prenume; ?> </td>
</tr>
<tr>
<td width="150" class="label">Adresa 1</td>
<td class="content"><?php echo $comanda_plata_adresa1; ?> </td>
</tr>
<tr>
<td width="150" class="label">Adresa 2</td>
<td class="content"><?php echo $comanda_plata_adresa2; ?> </td>
</tr>
<tr>
<td width="150" class="label">Telefon</td>
<td class="content"><?php echo $comanda_plata_telefon; ?> </td>
</tr>
<tr>
<td width="150" class="label">Judet</td>
<td class="content"><?php echo $comanda_plata_judet; ?> </td>
</tr>
<tr>
<td width="150" class="label">Localitate</td>
<td class="content"><?php echo $comanda_plata_localitate; ?> </td>
</tr>
<tr>
<td width="150" class="label">Cod postal</td>
<td class="content"><?php echo $comanda_plata_codpostal; ?> </td>
</tr>
</table>
<p> </p>
<table width="550" border="0" align="center" cellpadding="5" cellspacing="1" class="detailTable">
<tr id="infoTableHeader">
<td colspan="2">Comentarii client</td>
</tr>
<tr>
<td colspan="2" class="label"><?php echo nl2br($comanda_memo); ?> </td>
</tr>
</table>
<p> </p>
<p align="center">
<input name="btnBack" type="button" id="btnBack" value="Inapoi" class="box" onClick="window.history.back();">
</p>
<p> </p>
<p> </p>
ProcesCategory.php
<?php
require_once '../../library/config.php';
require_once '../library/functions.php';
checkUser();
$action = isset($_GET['action']) ? $_GET['action'] : '';
switch ($action) {
case 'add' :
addCategory();
break;
case 'modify' :
modifyCategory();
break;
case 'delete' :
deleteCategory();
break;
case 'deleteImage' :
deleteImage();
break;
default :
// if action is not defined or unknown
// move to main category page
header('Location: index.php');
}
/*
Add a category
*/
function addCategory()
{
$name = $_POST['txtName'];
$description = $_POST['mtxDescription'];
$image = $_FILES['fleImage'];
$parentId = $_POST['hidParentId'];
$catImage = uploadImage('fleImage', SRV_ROOT . 'images/category/');
$sql = "INSERT INTO categorii (cat_parent_id, cat_nume, cat_descriere, cat_imagine)
VALUES ($parentId, '$name', '$description', '$catImage')";
$result = dbQuery($sql) or die('Cannot add category' . mysql_error());
header('Location: index.php?catId=' . $parentId);
}
/*
Upload an image and return the uploaded image name
*/
function uploadImage($inputName, $uploadDir)
{
$image = $_FILES[$inputName];
$imagePath = '';
// if a file is given
if (trim($image['tmp_name']) != '') {
// get the image extension
$ext = substr(strrchr($image['name'], "."), 1);
// generate a random new file name to avoid name conflict
$imagePath = md5(rand() * time()) . ".$ext";
// check the image width. if it exceed the maximum
// width we must resize it
$size = getimagesize($image['tmp_name']);
if ($size[0] > MAX_CATEGORY_IMAGE_WIDTH) {
$imagePath = createThumbnail($image['tmp_name'], $uploadDir . $imagePath, MAX_CATEGORY_IMAGE_WIDTH);
} else {
// move the image to category image directory
// if fail set $imagePath to empty string
if (!move_uploaded_file($image['tmp_name'], $uploadDir . $imagePath)) {
$imagePath = '';
}
}
}
return $imagePath;
}
/*
Modify a category
*/
function modifyCategory()
{
$catId = (int)$_GET['catId'];
$name = $_POST['txtName'];
$description = $_POST['mtxDescription'];
$image = $_FILES['fleImage'];
$catImage = uploadImage('fleImage', SRV_ROOT . 'images/category/');
// if uploading a new image
// remove old image
if ($catImage != '') {
_deleteImage($catId);
$catImage = "'$catImage'";
} else {
// leave the category image as it was
$catImage = 'cat_imagine';
}
$sql = "UPDATE categorii
SET cat_nume = '$name', cat_descriere = '$description', cat_imagine = $catImage
WHERE cat_id = $catId";
$result = dbQuery($sql) or die('Cannot update category. ' . mysql_error());
header('Location: index.php');
}
/*
Remove a category
*/
function deleteCategory()
{
if (isset($_GET['catId']) && (int)$_GET['catId'] > 0) {
$catId = (int)$_GET['catId'];
} else {
header('Location: index.php');
}
// find all the children categories
$children = getChildren($catId);
// make an array containing this category and all it's children
$categories = array_merge($children, array($catId));
$numCategory = count($categories);
// remove all product image & thumbnail
// if the product's category is in $categories
$sql = "SELECT produs_id, produs_imagine, produs_imagine_mica
FROM produse
WHERE cat_id IN (" . implode(',', $categories) . ")";
$result = dbQuery($sql);
while ($row = dbFetchAssoc($result)) {
@unlink(SRV_ROOT . PRODUCT_IMAGE_DIR . $row['produs_imagine']);
@unlink(SRV_ROOT . PRODUCT_IMAGE_DIR . $row['produs_imagine_mica']);
}
// delete the products
$sql = "DELETE FROM produse
WHERE cat_id IN (" . implode(',', $categories) . ")";
dbQuery($sql);
// then remove the categories image
_deleteImage($categories);
// finally remove the category from database;
$sql = "DELETE FROM categorii
WHERE cat_id IN (" . implode(',', $categories) . ")";
dbQuery($sql);
header('Location: index.php');
}
/*
Recursively find all children of $catId
*/
function getChildren($catId)
{
$sql = "SELECT cat_id ".
"FROM categorii ".
"WHERE cat_parent_id = $catId ";
$result = dbQuery($sql);
$cat = array();
if (dbNumRows($result) > 0) {
while ($row = dbFetchRow($result)) {
$cat[] = $row[0];
// call this function again to find the children
$cat = array_merge($cat, getChildren($row[0]));
}
}
return $cat;
}
/*
Remove a category image
*/
function deleteImage()
{
if (isset($_GET['catId']) && (int)$_GET['catId'] > 0) {
$catId = (int)$_GET['catId'];
} else {
header('Location: index.php');
}
_deleteImage($catId);
// update the image name in the database
$sql = "UPDATE categorii
SET cat_imagine = ''
WHERE cat_id = $catId";
dbQuery($sql);
header("Location: index.php?view=modify&catId=$catId");
}
/*
Delete a category image where category = $catId
*/
function _deleteImage($catId)
{
// we will return the status
// whether the image deleted successfully
$deleted = false;
// get the image(s)
$sql = "SELECT cat_imagine
FROM categorii
WHERE cat_id ";
if (is_array($catId)) {
$sql .= " IN (" . implode(',', $catId) . ")";
} else {
$sql .= " = $catId";
}
$result = dbQuery($sql);
if (dbNumRows($result)) {
while ($row = dbFetchAssoc($result)) {
// delete the image file
$deleted = @unlink(SRV_ROOT . CATEGORY_IMAGE_DIR . $row['cat_imagine']);
}
}
return $deleted;
}
?>
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Prezentarea Magazinului Virtual (ID: 123107)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
