Realizarea Unei Aplicatii Web Pentru Gestionarea Clientilor Unei Firme
Cuprins
1.Introducere
Lucrarea de față are ca scop realizarea unei aplicații web pentru gestionarea clienților unei firme. Această aplicație permite gestionarea mai ușoară a clienților în funcție de drepturile și privilegiile pe care fiecare utilizator le are.
Aplicația a fost realizată în PHP [1] un limbaj de programare folosit inițial pentru a produce pagini web dinamice, este folosit pe scară largă în dezvoltarea paginilor și aplicațiilor web. Se folosește în principal înglobat în codul HTML. Aplicația este conectată la o bază de date MySql [2] un sistem de gestiune a bazelor de date relațional, produs de compania suedeza MySQL AB și distribuit sub Licența Publică Generală GNU. Este cel mai popular SGBD open-source la ora actuală[1], fiind o componentă cheie a stivei LAMP(Linux, Apache, MySQL, PHP).
Această aplicație permite gestionarea clienților unor firme. Administratorul de sistem sau administratorii de firme pot introduce clienți în baza de date. Aceștia pot efectua operații de inserare, ștergere, modificare în baza de date, de asemenea ei pot vizualiza istoricul facturilor dintre firme. Adminstratorul de sistem poate vizualiza toate firmele, poate insera, șterge sau face update la toate firmele respectiv la toți clienții firmelor, poate să vizualizeze istoricul tuturor facturilor , poate crea firme noi, poate insera produse. Aplicația permite ca o firmă să fie clienta altei firme. Administratorul de sistem poate adăuga sau retrage drepturile utilizatorilor.
În capitolul 2 este prezentată tehnologia utilizată pentru realizarea acestei aplicații și anume Php,MySql și Apache. De asemenea capitolul 2 prezintă limbajele de programare utilizate acestea fiind : HTML, PHP, MySQL, JavaScript, jQuery. În capitolul 3 se prezintă programele utilizate pentru realizarea aplicației. Programele descrise în acest capitol sunt Adobe Dreamweaver și Apache Web Server(Xampp).
În capitolul 4 este cuprinsă prezentarea aplicației. Acesta constă din descrierea implementării aplicației și a tuturor funcționalităților posibile în această aplicație. Prezentarea aplicației este însoțită de o serie de imagini pentru o exemplificare mai amănunțită a funcționalităților aplicației și pentru o mai bună familiarizare cu modul de utilizare al acesteia.
2. Tehnologii utilizate
2.1 MySQL + PHP + Apache
Crearea unui site web reprezintă o sarcină a cărei dificultate variază în funcție de complexitatea site-ului vizat. Ideal ar fi sa se lucreze cu un program de editare HTML/PHP. Acest lucru faciliteaza crearea paginilor web prin adăugarea cu ușurință și în cunoștință de cauză a elementelor PHP/HTML de machetare și formatare vizuală a paginilor site-ului. Ulterior etapei HTML urmează abordarea unor aspecte mai subtile și implementarea unor funcții extinse de rafinare a structurii atât vizuale cât și funcționale precum: CSS, JavaScript, Java, XML,XSL,XHTML, PHP, etc.[3]
În dezvoltarea și implementarea aplicației am optat pentru avantajele oferite de combinația Apache – server web, MySQL – server baze de date si PHP – limbaj de programare pentru server .
PHP și MySQL reprezintă cea mai bună metoda actuala pentru crearea unor site-uri care folosesc baze de date.Această combinație a primit și titlul de "Database of the Year" la Webcon98.[3]
MySQL este un server de baze de date mic și compact, ideal atât pentru aplicații mici, cât și pentru dezvoltarea marilor proiecte. În afara faptului ca suportă standardul SQL (ANSI-92), poate rula pe mai multe platforme și permite sisteme multithreading pentru serverele Unix, ceea ce aduce o creștere importantă a performanței. Sub WindowsNT, 2000 sau XP, MySQL este lansat ca un serviciu, pe când sub Windows95/98, ca un proces normal.[2]
PHP este un limbaj de programare pentru partea de server. Codul PHP poate fi înglobat în interiorul codului HTML. Scriptul PHP va fi apoi procesat de către server care va returna un fisier HTML. Acest tip de interacțiune permite executarea unor operații destul de complexe. Aplicațiile WEB reprezintă atât prezentul cât și viitorul, ele funcționând pe baza unei arhitecturi client/server.
Aplicațiile realizate cu PHP și MySQL utilizează un singur client si anume browser-ul WEB. Limbajul de bază al browser-ului WEB este HTML. Acest limbaj dispune de o serie de tag-uri care descriu modul în care va arăta o pagină WEB. Majoritatea prelucrărilor efectuate de aplicațiile Web au loc pe sever. O aplicație specifică, numită server Web, va asigura comunicarea cu browser-ul. Serverul de baze de date relaționale MySql stochează informațiile pe care le va accesa aplicația. În final mai este nevoie de un limbaj care să intermedieze interogările ce apar între serverul Web și serverul de baze de date. Acest limbaj va fi utilizat și pentru a executa anumite operații asupra informațiilor care vin spre si dinspre serverul Web.
2.1 Limbajul HTML
HTML( HyperText Markup Language) este un limbaj de programare utilizat în crearea și marcarea unui document astfel încât acesta sa poată fi afișat într-un browser(navigator).
HTML oferă autorilor mijloace pentru:
publicarea de documente online conținând antet, text, tabele, liste, fotografii, etc.
obținerea de informații online printr-un simplu clic de maus, prin intermediul legăturilor hipertext
crearea de formulare pentru a realiza schimb de date cu servicii de la distanță, utilizate pentru a căuta informații, a face rezervări, a comanda produse, etc.
includerea de foi de calcul, videoclipuri, clipuri audio și alte formate direct în documentele online
A fost dezvoltat cu ajutorul unor experți în materie de internaționalizare. Versiunea aceasta de HTML permite scrierea documentelor în aproape orice limbă și transportarea acestora cu ușurință peste tot în lume. Un mare pas a fost adoptarea standardului ISO10646 ca și set de caractere pentru HTML, acesta fiind standardul cel mai cuprinzător din lume, tratând printer altele probleme ca reprezentarea caracterelor internaționale, direcția textului, punctuație și alte aspecte ale limbilor lumii. Această versiune de HTML oferă suport mai mare pentru diversele limbaje aflate într-un document, ceea ce permite indexări mai eficiente ale documentelor de către motoarele de căutare, o tipografie de o calitate mai bună, o conversie de text mai bună, etc.
HTML 5 extinde limbajul cu mecanisme pentru foi de stil, scripting, frame-uri, obiecte înglobate, suport îmbunătățit pentru text scris de la dreapta la stânga sau mixt, tabele îmbogățite și îmbunătățiri pentru formulare, oferind accesabilitate crescută pentru persoanele cu probleme.
Datorită creșterii comunității web și a diversificării abilităților și îndemânărilor membrilor săi, a devenit crucial ca tehnologiile de bază să devină adecvate nevoilor lor specifice. Astfel HTML a fost dezvoltat astfel încât să facă paginile web mai accesibile pentru cei cu limitări fizice. Versiunea 5 include multiple aspecte ce țin de accesabilitate, printre care pot fi amintite:
distincția mai bună între structura documentului și prezentarea acestuia, încurajându-se astfel folosirea foilor de stil în locul atributelor HTML
formulare mai bune, incluzând printer altele adăugarea tastelor de acces, abilitatea de a grupa opțiunile SELECT semantic
se oferă posibilitatea de a marca descrierea text a unui obiect inclus
imaginile trebuie să fie însoțite de text descriptiv
tabele mai bune care includ legendă, grupuri de coloane și mecanisme pentru a facilita redarea non-vizuală
Cei care creează pagini care au în vedere aspectele legate de accesibilitate nu numai că sunt apreciați de comunitatea celor vizați de aceste aspecte, dar vor avea beneficii și în alte moduri: documentele bine create, care disting între conținut și prezentare se vor adapta mai ușor la noile tehnologii.
De asemenea, în această versiune HTML oferă un mecanism standard de a insera obiecte și aplicații media generice în paginile web. Există elemente care oferă mecanismul necesar pentru a include imagini, video, sunet, aplicații specializate și alte obiecte într-un document. Acestea le permit autorilor să specifice o ierarhie clară de opțiuni de afișare pentru browsere care nu suportă un mod anume de afișare.
O caracteristică foarte importantă a limbajului o reprezintă foile de stil. Acestea simplifică foarte mult codul HTML și îl eliberează astfel de responsabilitățile de prezentare a datelor. Acestea dau atât autorilor cât și utilizatorilor control mai mare asupra prezentării documentelor.
Informațiile referitoare la stil pot fi specificate atât individual pentru elemente cât și pentru grupuri, într-un document HTML ori în foi de stil externe. Mecanismul de asociere a foilor de stil fiind independent față de limbajul acestora.
Prin noul model de tabel, autorii au un control mai mare asupra structurii și înfățișării, de exemplu asupra grupurilor de coloane. Posibilitatea de a recomanda lățimea coloanelor permite browsere-lor să afișeze datele din tabel treptat, fără a mai aștepta încărcarea întregului tabel.
Înainte să apară foile de stil, autorii aveau un control limitat asupra afișării. HTML 3 includea un număr de atribute și elemente care oferea control asupra alinierii, dimensiunii fontului sau a culorii textului. De asemenea ei exploatau atât tabelele cât și imaginile ca și mijloace de aranjare în pagină. Având în vedere faptul că foile de stil oferă un mecanism de prezentare mai puternic , World Wide Web va elimina în cele din urmă multe dintre elementele de prezentare și atributele HTML. Acestea sunt marcate ca și „depricated”, iar documentația oferă exemple de obținere a aceluiași efect cu alte elemente sau prin intermediul foilor de stil.
Un caz deosebit de util este acela de a folosi scripturi în documentele HTML, autorii putând astfel crea pagini web dinamice (ex.: „formularele inteligente” care interacționează cu utilizatorul la completare). Aceasta permite de asemenea ca folosind pagini web să se realizeze aplicații în rețea. Mecanismele de includere a scripturilor în HTML sunt, de asemenea, independente de limbajul de scripting.
2.2 JavaScript
JavaScript este unul din cele mai populare limbaje de programare. Este limbajul pentru HTML, web, servere, PC-uri, tablete, smart phone-uri, laptopuri , etc. JavaScript este un limbaj de programare care poate fi inserat în paginile HTML și poate fi executat de toate browser-ele modern.[5]
JavaScript a fost creat de către firma Netscape, cu numele de Live Script, un limbaj pentru scripting care extindea capacitățile HTML și oferea o alternative la utilizarea unui număr mare de scripturi CGI pentru prelucarea informațiilor din formulare și adauga un plus de dinamism în paginile web.
După ce firma Netscape a lansat limbajul Java , aceasta a început să lucreze cu firma Sun , cu scopul de a crea un limbaj de scripting care sa aibe o sintaxă și o semantică asemănătoare cu a limbajului Java. Din motive de marketing acest nou limbaj de scripting a fost denumit “JavaScript”.
JavaScript a apărut din cauză necesității ca logica și inteligența sa fie și pe partea de client, nu doar pe partea de server.Dacă toată logica este pe partea de server,întreaga prelucrare este făcută la server, chiar și pentru lucrurile banale cum ar fi validarea datelor.Astfel,JavaScript acordă anumite privilegii clientului și face ca toată această relație sa fie un adevărat sistem client-server.
Următoarele sunt câteva aspect fundamentale ale limbajului JavaScript pe care orice programator în acest limbaj ar trebui să le cunoască:
JavaScript poate fi introdus în HTML – de obicei codul JavaScript se află în documentele HTML și este executat în interiorul acestora. Majoritatea obiectelor JavaScript au etichete(tag-uri) HTML pe care le reprezintă astfel încat programul este inclus pe partea de client a limbajului. JavaScript folosește HTML pentru a intra în cadrul de lucru al aplicațiilor web.
JavaScript este dependent de mediu fiind un limbaj de scripting.Soft-ul care rulează de fapt programul este browser- browser-ul web.
JavaScript este un limbaj care este interpretat în totalitate , codul scriptului va fi interpretat de browser înainte de a fi executat.Dezavantajul este că rularea durează ceva mai mult deoarece comenzile JavaScript sunt citite de navigatorul web și procesate doar atunci când user-ul apelează la acele funcții.Avantajul major este faptul ca programatorii pot mult mai ușor sa modifice și să actualizeze codul sursă.
JavaScript este flexibil, în această privință limbajul diferă radical de C# sau Java.În JavaScript putem declara o variabilă de un anume tip sau putem lucre cu o variabilă chiar dacă nu îi cunoaștem tipul specificat înainte de rulare.
JavaScript este un limbaj bazat pe obiecte.JavaScript nu este un limbaj de programare orientat pe obiecte , ci spus mai correct “bazat pe obiecte”, asta deoarece modelul de obiect al JavaScript este bazat pe instanță și nu pe moștenire.
JavaScript este condus de evenimente.Marea parte a codului JavaScript răspunde la evenimentele generate de către utilizator sau de către sistem.Obiectele HTML, de exemplu butoanele, sunt îmbunătățite pentru a accepta un handler de eveniment.
JavaScript nu se aseamană cu Java. Cele două limbaje au denumiri asemănatoare din motive strict legate de marketing.
JavaScript este mutifunțional , acesta putând fi folosit într-o multitudine de contexte pentru a rezolva diferite probleme.
JavaScript este un limbaj ce evoluează continuu , fapt pozitiv care poate însa sa genereze și probleme , programatorii trebuie sa verifice permanent ce versiune să folosească pentru ca aplicațiile să poată fi folosite de un număr cât mai mare de utilizatori de browser-e diferite.
JavaScript acopera contexte diverse , programarea cu acest limbaj este îndreptată în special către partea de client, dar poate fi folosit și pentru partea de server.[6]
2.3 jQuery
jQuery este un proiect open-source creat de către John Resig cu o echipă de bază formată din dezvoltatori JavaScript de elită.Librăria oferă registru larg de caracteristici, o sintaxă simplă și ușor de învățat și o compatibilitate foarte bună între platforme într-un singur fișier compact. Există peste 100 de plug-in-uri care au fost dezvoltate pentru a extinde funcționalitatea jQuery, făcând această librărie o unelta esențială pentru partea de scripting pe partea de client.
jQuery este o librărie JavaScript care simplifică managementul unui document HTML (navigarea,animațiile,interacțiunile,development,etc).Ținta acestei librarii este de a schimba modul cum JavaScript interacționează și își lasă amprenta asupra muncii noastre. Practic s-ar putea obține aceleași efecte și cu JavaScript doar că ar dura mult mai mult pentru a face o implementare care să realizeze acest lucru.
Librăria jQuery pune la dispoziție un nivel de abstractizare pentru operațiile de scripting generale și de aceea este folositoare în marea majoritate a situațiilor de scripting. Natura sa extensibilă înseamnă că nu s-ar putea acoperi toate funcțiile posibile într-un singur fișier și de aceea în mod constant sunt dezvoltate plug-in-uri pentru a adăuga noi caracteristici.
jQuery folosește un concept numit “Builder” pentru a face codul cât mai scurt posibil și simplu. Șablonul builder este un șablon de proiectare orientat pe obiect care a câștigat popularitate. Atfel, orice metodă din jQuery returnează însuți obiectul asupra căruia a fost aplicată metoda, acest lucru permițând înlăturarea unei metode asupra obiectului returnat.[7]
jQuery utilizează câteva strategii cu scopul de a menține o gamă largă de caracteristici în același timp fiind cât mai compact :
Oferă suport pentru extensii.Metodele de creare de noi plug-in-uri sunt simple și bine documentate ceea ce a dus la apariția unei largi game de module inventive.
Influențează cunoașterea CSS. Datorită faptului că își bazează mecanismul de căutare a elementelor din pagină pe selectori CSS, jQuery are o metodă clară de a exprima structura unui document.
Permite multiple acțiuni într-o singură linie pentru a evita folosirea excesivă a anumitor variabile temporare, cât și a repetițiilor.jQuery folosește un șablon numit înlănțuire pentru majoritatea metodelor.
2.4 CSS
Denumirea de CSS provine din engleză de la Cascading Style Sheets, tradus simplu ar fi “foi de stil în cascadă”. Practic este un standard de formatare a elementelor unui document HTML. Aceste stiluri pot fi atașate elementelor HTML prin intermediul unor fișiere externe, aceasta fiind și varianta recomandată , sau în cadrul documentului HTML prin intermediul elementului <style >. [8]
CSS se ocupă în general de aspectul și de contrulul grafic al elemenetelor din pagina , de exemplu textul , fondul , culorile , modul cum sunt dispuse acestea în interiorul paginii.
CSS folosește stiluri care înglobează atributele de formatare care se aplică asupra unui element individual din pagină, asupra unui grup de elemente sau chiar la nivelul întregului document.
CSS funcționează ca si HTML, dar nu este același lucru cu HTML.CSS extinde funcționalitățile HTML, atfel el permite redefinirea unor etichete HTML existente. Prin folosirea CSS aspectul documentului(paginii) pe ansamblu sau a unui element din interiorul acestuia poate fi controlat mult mai simplu. Stilurile pot fi aplicate asupra unui element , asupra unui document sau asupra intregului site web. Dezavantajul ar fi că nu toate browser-ele sunt compatibile cu CSS astfel unele documente HTML vor fi afișate ca și cum nu ar conține CSS, dar majoritatea browser-elor moderne , cum ar fi: Mozilla Firefox,Google Chrome , Safari, Opera , sunt compatibile cu CSS.
2.5 PHP
PHP (Hypertext Prepocessor), cunoscut în versiunile mai vechi și sub numele de PHP/FI (Personal Homepage/Form Interpreter), a fost creat inițial ca și o simplă aplicație pentru a interpreta formularele definte prin HTML și procesate de un program scris într-un limbaj Perl, script shell, executat pe un server. În interfeța CGI era necesară permisiune pentru a rula niște programe pe server, lucru care ducea la breșe în securitate și mai mult ducea la o disociere față de documentul HTML a programului care procesa datele.
PHP (în versiunea curentă PHP 5.5) reprezintă un puternic pachet care oferă un limbaj de programare accesibil din cadrul fișierelor HTML, limbaj foarte asemănător cu Perl sau C, plus un suport pentru manipularea bazelor de date într-un limbaj SQL (ex: MySQL, mSQL, Oracle, PostgreSQL, Solid, etc) și de asemenea acces la sisteme hipermedia. De asemeni, PHP oferă suport pentru incărcarea fișierelor de pe calculatorul client: upload (standard propus de E. Nebel și L. Masinter de la Xerox, descris în RFC 1867) și oferă suport pentru cookies (mecanism de stocare a datelor în navigatorul client pentru identificarea utilizatorilor, propus de Netscape). [9]
Această aplicație este disponibilă gratuit pe Internet, pentru medii Unix și mai nou pentru medii Windows (inclusiv sursele), integriându-se în popularul server Apache.
Istoria PHP-ului începe la sfârșitul anului 1994, când Rasmus Lerdorf dezvoltă prima versiune, ca și proiect personal. PHP-ul a fost făcut public la începutul anului 1995 sub numele de Personal Home Page Tools, fiind considerat la acea vreme un analizor simplu care interpreta câteva macrouri care puteau fi incluse în cadrul documentelor HTML, permițând contorizarea accesului la paginile Web sau accesarea unei carți de oaspeți (guestbook). Analizorul a fost refăcut la mijlocul aceluiași an și denumit PHP/FI 2.0, unde FI era o altă aplicație scrisă de Rasmus Lenford, un interpretor de formulare HTML. A fost adăugat suportul pentru bazele de date mSQL și de aici PHP/FI a început să aibă succes, fiind disponibil gratuit pe Web. Se estimează că la sfârșitul lui 1996 cel puțin 15 mii de site.uri Web utilizau PHP/FI, iar în anul 1997 numărul acestora era de 50 de mii.[9]
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 facută publică versiunea PHP 4.0, utilizând puternicul motor de scriptare Zend și oferind suport nu numai pentru servrul Apache ci și pentru alte servere Web. De asemeni, PHP 4.0 oferă posibilitatea accesării documentelor XML via DOM. [9]
Potrivit unor estimări numărul site-urilor care folosesc în prezent PHP este de peste cinci milioane. Pe Web, există deja o multitudine de aplicații și utilitare create în PHP, care se regăsesc grupate și în așa-numitul PEAR (PHP Extension and Add-on Repository).
PHP este un limbaj de script care funcționează alături de un server Web.
Este de notat diferența cu alte limbaje script CGI scrise în limbaje precum Perl sau C: în loc de a scrie un program cu o multitudine de linii de comanda afișate în final într-o pagină HTML, veți scrie o pagină HTML cu codul inclus pentru a realiza o acțiune precisă.
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".
Diferența față de alte limbaje de scripting, precum Javascript, este că la PHP codul se execută pe serverul Web, nu în navigator(client Web). În consecință, PHP poate obține accesul la fișiere , baze de date și alte resurse inaccesibile programului JavaScript. Acestea conțin bogate surse de conținut dinamic care atrag vizitatorii.
Dacă pe serverul Web se află un script similar, clientul nu va primi deciât rezultatul execuției scriptului, fără a avea nici o posibilitate de acces la codul care a produs rezultatul. Vă puteți configura 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 posedă aceleași funcții ca alte limbaje permițâind să se scrie scripturi CGI, să colecteze date și să genereze dinamic pagini web sau să trimită și să primească cookies.
Marea calitate și cel mai mare avantaj al limbajului PHP este suportul cu un număr mare de baze de date. A realiza o pagină web dinamic cu o baza de date este extrem de simplu. Următoarele baze de date sunt suportate de către PHP:
Limbajul PHP are deasemenea suport pentru diverse servicii server utiliziând protocoale precum IMAP, SNMP, NNTP, POP3 și HTTP.[9]
Fiecare program PHP include doua linii speciale, care indica serverului PHP că textul cuprins între cele doua linii este alcătuit din instrucțiuni PHP. <?php ?>
Practic aceste linii pot fi asimilate copertelor unei carți, care păstrează unitatea programului PHP.
Programele PHP execută trei categorii de operații elementare:
obțin date de la un utilizator
execută prelucrări ale datelor, respectiv obțin accesul la datele stocate în fișiere și baze de date și le manipulează
afișează date astfel încit un utilizator să le poata vizualiză.
Pentru executarea unui script trebuie mai întâi încărcat scriptul într-un server unde este instalat PHP. Accesul la distanță la un server Linux sau Unix se poate face prin intermediul protocoalelor Telnet sau SSH, dacă în prealabil se primește autorizare de folosire a acestor protocoale de la administatorul de sistem pentru un anumit utilizator. Dacă se folosește un server Microsoft Windows situat în aceeași rețea locală ca și stația de lucru atunci este posibilă alocarea de către adimistratorul de rețea a unei partiții de fișiere în acest scop.
În vederea încărcării scriptului prin intermediul protocolului FTP adimistratorul de sistem trebuie să furnizeze utilizatorilor autorizați următoarele informații:
numele serverului gazda
numele de utilizator și parola pentru deschiderea sesiunii de lucru prin intermediul protocolului FTP
catalogul în care trebuie să se găsească scripturile PHP
localizatorul uniform de resurse(URL), pe care trebuie să-l folosiți pentru a obține acces la scripturile PHP
După ce încarcarea scriptului PHP a fost realizată cu succes acesta se lansează în execuție prin dechiderea unui navigator Web(client) cu adresa URL asociată scriptului PHP.
2.6 Limbajul SQL
În 1970 a fost dezvoltat un model pentru un tip nou de baze de date numit baze de date relaționale. Acest tip de baze de date a eliminate câteva dintre problemele care erau asociate cu fișierele standard și desing-ul altor baze de date.Utilizând un model relational se poate reduce redundanța datelor , ceea ce salvează spațiu pe disk și conduce spre o recuperare eficientă a datelor.De asemenea, datele se pot vedea și manipula într-un mod intuitive și efficient,Astăzi bazele de date relaționale sunt standardul pentru aplicațiile cu baze de date.
Modelul pentru o bază de date relațională constă din date stocate în unul sau mai multe tabele. De asemenea constă în faptul ca fiecare table poate fi văzut ca și o matrice bidimensională, formată din rânduri și coloane.
În general , fiecare table este modelat după o entitate reală, cum ar fi un vânzător sau o adresă.Coloanele unui table reprezintă atributele acelei entități, cum ar fi nume, prenume , CNP, iar fiecare rând din table reprezintă o instant a entității respective. Celula reprezintă valoarea stocată la intersecția dintre un rând și o coloană. De asemenea se pot utiliza se pot utiliza chei primare (primary key) care reprezintă identificarea unică a fiecărui rând din tabel. O cheia primară poate fi totuși compusă din două sau chiar mai multe coloane, caz în care se va numi cheie primară compusă (composite primary key). Totodată indecșii(index) furnizează un mod efficient de a accesa rândurile dintr-un table bazându-se pe valorile dintr-una sau mai multe coloane. Deoarece aplicațiile în mod tipic accesează rândurile pentru fiecare cheie definite de programator. La fel ca și o cheie , un index poate include una sau mai multe coloane.
Tabelele dintr-o bază de date relațională pot fi legate de alte tabele prin valori din coloane specific.De exemplu , dacă am avea un tabel Clienți și unul Produse , fiecărui rând din tabelul Clienți , îi va corespunde unul sau mai multe rânduri din tabelul Produse. Această relație este denumită unul la mai mulți (one-to-many relationship). În general relațiile se crează prin cheile primare dintr-un tabel și cheile externe (foreign key) drint-un alt tabel.Aceste chei externe sunt de fapt una sau mai multe coloane dintr-un tabel și au o referință către o cheie primară dintr-un alt tabel.
De asemenea pot exista relații unul la unul (one-to-one relationship).Dacă un tabel are o relație de unul la unul cu alt tabel, datele din aceste două tabele ar putea fi stocate într-un singur tabel.În particular aceasta este utilă dacă este nevoie să fie stocate obiecte mari, cum ar fi imagini,sunete,etc.
În contrast , există relația de mai mulți la mai mulți(many-to-many relationship).De obicei este implementată utilizând un tabel intermediar care va avea relații de unul la mai mulți cu cele două tabele care se află în relație de mai multi la mai mulți.[10]
2.7 MySQL
Dezvoltat de firma suedeză MySQL AB, MySQL este un server de baze de date disponibil gratuit, cu sursa deschisă(open-source) care oferă fiabilitate și avantaje reale.
Frumusețea serverului MySQL este simplitatea sa fundamentală. Administrarea bazei de date se face folosind peste o duzină de utilitare în linia de comandă, cel mai important fiind mysql, un shell interactiv pentru controlul și interogarea bazei de date. Utilitarele rulează cel mai bine pe sistemul Linux, platforma pe care MySQL a fost dezvoltat inițial. Alte două utilitare cu sursă deschisă, oferite pe platforma Windows, care oferă un set de comenzi de administrare sunt MySqlManager, un utilitar de interogare în mod grafic similar cu mysql și WinMySQL admin, o consolă pentru administrarea detaliilor configurării lui MySQL.
MySQL realizează cu ușurință importarea diverselor baze de date și exportarea sub forma fisșerelor sql. Tranzacțiile nu sunt parte a tabelelor implicite(ISAM) ale lui MySQL, dar sunt incluse două tipuri noi de tabele . Berkley DB(BDB) si InnoDB care au fost dezvoltate de alte firme.
Administratorii de firme și dezvoltatorii de baze de date au ajuns la concluzia că MySQL are o dezvoltare energică și loială, ca să nu mai menționăm reputația câștigată cu truda, de bază de date sigură.
MySQL operează în baza unui model client/server. Orice mașina care dorește să proceseze interogări asupra unei baze de date MySQL trebuie să ruleze MySQL server(mysqld), care este responsabil de tot traficul de tip intrări/ieșiri(incoming/outgoing) cu baza de date. Ca orice server, mysql "ascultă" pe un port particular (3306) eventualele cereri de conexiune ale unui "client" – orice aplicație care trimite cereri către o bază de date via mysql. Acest client poate fi un simplu script PHP care poate trimite o cerere către baza de date prin intermediul serverului MySQL sau chiar clientului mysql. Clientul mysql este o interfață interactivă pentru transmiterea de comenzi către server.
Modelul de securitate folosit de MySQL se bazează pe nume de utilizator, parolă, nume server(hostname) sau adresa de IP și privilegii, fiind similar celui generic folosit de sistemele Unix. Prin privilegii se ințeleg în cazul MySQL operațiunile ce vor fi permise asupra bazei/bazelor de date, tabelelor sau indecșilor, cum sunt de exemplu SELECT, INSERT, UPDATE, DELETE, CREATE, DROP.
Datele sunt obiectul celor mai multe operații de prelucrare, iar sistemele de gestiune a bazelor de date furnizează cele mai complexe și puternice facilități pentru lucrul cu datele. PHP include o bibliotecă de funcții care furnizează o interfață cu sistemul MySQL de gestiune a bazelor de date. Folosind aceste funcții, un program PHP poate obține accesul la datele rezidente într-o baza de date MySQL și le poate modifica.
Majoritatea interacțiunilor cu o bază de date MySQL se poate desfășura după un model secvențial simplu:
se deschide o conexiune cu serverul MySQL
se specifică baza de date la care se obține accesul
se emit interogări SQL, se obține accesul la rezultatele interogării și se execută= operații non-SQL
se închide conexiunea cu serverul MySQL
Din punct de vedere al limbajului PHP, există două categorii de interogări SQL:
interogările SELECT, care returnează rânduri ale unui tabel
interogările UPDATE, INSERT și DELETE, care nu returnează rânduri ale unui tabel
Ambele categorii de interogări sunt emise folosind functia mysql_query(), dar verificarea și prelucrarea celor două categorii de rezultate ale interogărilor sunt procesate destul de diferit.
3. Programe utilizate
3.1 Serverul Web Apache(Xampp)
Serverul de Web Apache stă la baza a peste 60% din domenii, potrivit unui studiu Netcraft Web Server. Providerii de Internet și companiile de găzduire de aplicații pe Web apelează deseori la Apache din cauza suportului său pentru numeroase platforme, capabilităților de găzduire virtuală ușor de implementat și modulelor sale care îi extind capabilitățile.[11]
Caracteristica Apache Portable Routine(APR) optimizează capabilitățile precum administrarea proceselor pentru fiecare sistem de operare, dar permite serverului propriu-zis să ignore distincțiile specifice fiecărei platforme. Acest lucru a îmbunătățit performanța și stabilitatea implementărilor Windows, prin eliminarea emulatorului. Mai mult APR este accesibil și dezvoltatorilor Web care scriu programe multi-platforme în C, care este mai rapid decât limbajele interpretative, precum PHP și Perl, folosite de obicei pentru dezvoltare Web.
La acest lucru se adaugă faptul că serverul propriu-zis este independent de protocoale. Cu toate că este în principal un server HTTP(Web), este proiectat să suporte alternative cum ar fi FTP. O astfel de structură simplifică administrarea și reduce riscurile de securitate. O parte însemnată din atractivitatea Apache o constituie versabilitatea sa. API-ul său deschis a permis dezvoltatorilor să scrie diferite module care i-au schimbat comportamentul. Dacă serverului ăi lipsește o funcție de care are nevoie un site, sunt mari șanse ca undeva să fie disponibil un modul plug-in.
Serverele de Web au ca funcționalitate de bază recepționarea de cereri anonime de la clienți și furnizarea de informații într-o manieră dorită a fi eficientă și rapidă. De fapt un server Web este un daemon care acceptă conexiuni conforme protocolului HTTP, răspunzând cererilor recepționate de la clienți. Pentru a asigura servicii HTTP, serverul Apache trebuie să fie instalat în sistem(în mod uzual, fiind vorba de un pachet RPM în Linux sau de un program executabil .exe în Windows), iar daemon-ul httpd pornit. Apache este un sistem modular, alcătuit dintr-un server de bază și mai multe module care sunt încărcate dinamic într-un mod similar cu funcționarea modulelor din nucleul Linux.[11]
Apache poate fi configurat cu ajutorul interfeței grafice apacheconf(Apache Configuration Tool). Fișierul de configurare principal este http-conf și este de obicei localizat în directorul /etc/httpd (in versiunile de Linux sau Unix).
În anumite cazuri, este necesar să se restricționeze accesul la anumite documente, prin intermediul autentificării prin nume de utilizator și parola sau în funcție de adresa calculatorului clientului Web.
Pentru autentificarea utilizatorilor, vom parcurge doi pași:
se creează un fișier conținând numele și parolele utilizatorilor care vor avea acces la anumite date de pe serverul Web(în particular Apache)
se configurează serverul pentru a seta care resurse vor fi protejate și care sunt utilizatorii având permisiunea accesării lor, după introducerea unei parole valide
Configurarea serverului se poate realiza fie prin fișierul httpd-conf, fie prin .htacces, indicând o zonă protejată, de obicei în funcție de directoarele dorite a fi accesate pe bază de autentificare. Fișierul .htaccess va fi stocat în directorul asupra căruia dorim să modificăm comportamentul implicit al serverului Web. Înainte de a modifica maniera de autentificare din fișierul .htaccess, administratorul serverului Apache va specifica în httpd.conf ca autentificările să se realizeze via .htaccess.
De asemenea, Apache oferă posibilitatea de a servi mai multe site-uri Web simultan, altfel spus, găzduire virtuală(virtual hosting). Există două metode de implementare a găzduirii virtuale: prima bazată pe nume și a doua bazată pe adrese IP. Mașinile virtuale bazate pe adresă utilizează adresa IP a conexiunii pentru a determina mașina virtuală corectă. Astfel pentru fiecare găzduire virtuală bazată pe nume, determinarea mașinii virtuale se face pe baza numelui acestuia.
Găzduirea virtuală bazată pe nume este mai simplu de implementat, și este recomandată utilizarea acesteia. Pentru a utiliza serviciul de găzduire virtuală, trebuie mai întâi stabilite adresa IP și portul pentru serverul care va accepta cereri pentru respectiva masină virtuală.[12]
3.2 Adobe Dreamweaver
Adobe Dreamweaver (cunoscut și sub numele de Macromedia Dreamweaver) este o aplicație de dezvoltare web a companiei americane Adobe Systems, disponibilă atât pentru MS Windows, cât și pentru Apple Mac OS. Versiunile recente includ suport pentru tehnologii web cum ar fi CSS, JavaScript, PHP, Cold Fusion, cât și cadre ASP.[13]
Dreamweaver a fost un succes încă din anii 1997 și deține momentan aproximativ 70 % din piața editoarelor HTML. Produsul poate fi rulat pe multiple platforme software: Mac OS, Windows, dar suportă în același timp și platformele UNIX cu ajutorul unor emulatoare software cum ar fi Wine.
O parte din creatori de pagini web critică aceste tipuri de editoare deoarece aceste produc pagini de dimensiuni mai mari decât ar fi necesar, lucru care duce la o funcționare neperformantă, din punct de vedere a vitezei, a browserelor web. Acest lucru este în mare parte adevarat deoarece paginile web produse folosesc designul pe bază de tabel. În plus, produsul a mai fost criticat în trecut și pentru producerea unor coduri care adesea nu erau conform standardelor W3C, dar acest aspect a fost mult îmbunătățit în versiuni mai recente. Cu toate acestea, compania Macromedia a îmbunătățit suportul pentru tehnologia CSS precum și alte modalități de design, fără a fi necesară folosirea designului pe bază de tabel.[14]
Dreamweaver permite folosirea majorității browserelor instalate pe calculatorul utilizatorului, pentru a previzualiza situl web creat. De asemenea conține și câteva utilitare pentru administrarea siturilor, cum ar fi cele pentru a găsi și modifica un paragraf sau o linie de cod, în întregul sit, pe baza oricăror parametri specificați de către utilizator. Cu ajutorul panourilor de stare se poate crea cod JavaScript fără a avea cunoștințe de programare.[14]
Odată cu apariția versiunii MX, Macromedia a încorporat utilitare de generare dinamică a conținutului. De asemenea este oferit suport pentru conectarea la baze de date (cum ar fi cele de tip MySQL și Microsoft Access) pentru a filtra și afișa conținutul folosind scripturi de genul PHP, ColdFusion, Active Server Pages (ASP) și ASP.NET, fără a avea nevoie de o prealabilă experiență în programare.[14]
Un aspect foarte lăudat al Dreamweaver-ului îl reprezintă arhitectura sa extensibilă. Extensiile sunt mici programe pe care orice dezvoltator le poate scrie (de obicei în HTML și JavaScript) și pe care oricine le poate descărca și instala, acestea aducând un spor de performanță și funcționalitate îmbunătățită programului. Există o comunitate de dezvoltatori care produc aceste extensii și le publică (atât comercial cât și gratuit) pentru probleme de dezvoltare web, de la simple efecte rollover până la soluții complete de vânzare online, în Internet.[14]
4. Prezentarea aplicației
Aplicația descrisă în această lucrare este destinată pentru a fi utilizată de clienții firmelor , de către administratorii firmelor sau de către administratorul de sistem. În funcție de drepturile fiecărui client se pot realiza anumite operații în baza de date.
4.1 Structura bazei de date
Baza de date mySQL are 6 tabele: utilizatori, companii și companii_clienți,facturi , facturi_produse , produse.
Tabela utilizatori reține numele utilizatorilor din aplicație și are următoare structură:
CREATE TABLE IF NOT EXISTS `utilizatori` (
`id_utilizator` int(11) NOT NULL AUTO_INCREMENT,
`id_companie` int(11) NOT NULL,
`email` varchar(100) NOT NULL,
`parola` varchar(100) NOT NULL,
`numele` varchar(100) NOT NULL,
`prenumele` varchar(100) NOT NULL,
`pozitia_companie` varchar(100) NOT NULL,
`este_admin_sistem` int(11) NOT NULL DEFAULT '0',
`este_admin_companie` int(11) NOT NULL DEFAULT '0',
`adaugat_de` int(11) NOT NULL,
`modificat_de` int(11) NOT NULL,
`adaugat_la` datetime NOT NULL,
`modificat_la` datetime NOT NULL,
PRIMARY KEY (`id_utilizator`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=8;
Câmpul id_utilizator este cheia principală iar id_companie reprezintă ID-ul companiei de care aparține acel utilizator. Cele două câmpuri este_admin_sistem și este_admin_companie pot lua în cadrul aplicației valori 0 sau 1 în funcție de caz, dacă utilizatorul respectiv este sau nu administrator în aplicație sau în cadrul companiei. În funcție de aceste aspecte, utilizatorul are acces sau nu la anumite meniuri și funcții.
Tabela companii retine lista companiilor din cadrul aplicatiei cu toate coordonatele lor financiare și poștale.
CREATE TABLE IF NOT EXISTS `companii` (
`id_companie` int(11) NOT NULL AUTO_INCREMENT,
`denumire` varchar(255) NOT NULL,
`CUI` varchar(255) NOT NULL,
`NRREGCOM` varchar(255) NOT NULL,
`telefon` varchar(255) NOT NULL,
`email` varchar(100) NOT NULL,
`fax` varchar(100) NOT NULL,
`web` varchar(255) NOT NULL,
`adresa_strada` varchar(100) NOT NULL,
`adresa_nr` varchar(20) NOT NULL,
`adresa_scara` varchar(10) NOT NULL,
`adresa_bloc` varchar(20) NOT NULL,
`adresa_etaj` varchar(20) NOT NULL,
`adresa_apartament` varchar(20) NOT NULL,
`adresa_localitatea` varchar(100) NOT NULL,
`adresa_judet` varchar(100) NOT NULL,
`adresa_tara` varchar(100) NOT NULL,
`adresa_codpostal` varchar(100) NOT NULL,
`adaugata_de` int(11) NOT NULL,
`modificata_de` int(11) NOT NULL,
`adaugata_la` datetime NOT NULL,
`modificata_la` datetime NOT NULL,
PRIMARY KEY (`id_companie`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=16 ;
Tabela companii_clienti reține legăturile între companii și alte companii care reprezintă clienții lor – legături de tipul “mai mulți la mai mulți” mai multe companii pot fi clienții mai multor companii. Astfel, compania cu ID-ul id_companie va avea client compania cu ID-ul id_client, care la rândul său este o companie inclusă în tabela companii.
CREATE TABLE IF NOT EXISTS `companii_clienti` (
`id_companie_client` int(11) NOT NULL AUTO_INCREMENT,
`id_companie` int(11) NOT NULL,
`id_client` int(11) NOT NULL,
PRIMARY KEY (`id_companie_client`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ;
Tabela produse retine catalogul de produse al fiecarei companii: denumire produse, cantitate, preturi unitare.
Tabela facturi retine facturile emise de companie, mai putin produse facturate care sunt retine intr-o tabela separata, pe principiul fiecare factura poate contine mai multe produse facturate.
Structura tabelei facturi:
Structura tabelei facturi_produse:
4.2 Descrierea codului sursă
Fișierul utilizat pentru conectarea la baza de date și inclus în celelalte fișiere este connection.php
$conexiune = mysql_pconnect("localhost", "root", "") or die ("Conectarea la server nerealizata.");
$db = mysql_select_db("companydesk", $conexiune) or die("Conectarea la baza de date nerealizata.");
Un alt fișier comun în aplicație este functions.php în care sunt definite diferite funcții utilizate în aplicație, denumite cu nume sugestive pentru a fi ușor de utilizat:
function getNextAutoIncrement($tablename){
$getsql = mysql_query("SHOW TABLE STATUS LIKE '$tablename'") or die(mysql_error());
$row = mysql_fetch_array($getsql);
return $row['Auto_increment'];
}
function checkCompanyIsClientTo($id_company,$id_client){
$sql = mysql_query("SELECT * FROM companii_clienti WHERE id_companie='$id_company' AND id_client='$id_client'") or die(mysql_error());
return mysql_num_rows($sql);
}
function checkIfCompanyIsClient($id_company){
$sql = mysql_query("SELECT * FROM companii_clienti WHERE id_client='$id_company'") or die(mysql_error());
if (mysql_num_rows($sql) == 0) return false;
else return true;
}
function getCompanyOfUser($idul){
$sql = mysql_query("SELECT * FROM utilizatori WHERE id_utilizator='$idul'") or die(mysql_error());
if (mysql_num_rows($sql) == 0) return 0;
else{
while ($line = mysql_fetch_array($sql)){
return $line['id_companie'];
}
}
}
Aplicația folosește o librărie externă reader.php open-source pentru citirea fișierelor Microsoft Excel cu extensia XLS (drepturile de utilizare sunt trecute în interiorul fișierului).
Pentru JavaScript am folosit librăriile externe open-source jQuery versiunea 1.9.1 și jQuery.sticky , aceasta din urmă permițând definirea unor zone pe pagina care să rămână afișate în prim-plan în momentul derulării verticale a paginii. În fișierul styles.css am definit stiluri CSS utilizate în aplicație.
Formularul de autentificare este scris în fișierul index.php – autentificarea se face după adresa de email și parola stabilite. Validarea și procesarea formularului se de același fișier, datele trecute în formular fiind preluate prin $_POST. În cazul în care există utlizator cu aceea adresă de email și acea parola, formularul este valid și se creează o sesiunea după ID-ul utlizatorului care îndeplinește acele criterii. În momentul validării formularului, utilizatorul autentificat este redirectat către desk.php. Acest fișier conține tot codul aplicației și utilizează pentru trecerea de la un meniu/funcție /modul la altul URL-ul paginii și 3 parametrii transmiși prin acest URL:
$module = $_GET['module']; // transmis pentru a detecta modulul în care ne aflam
$action = $_GET['action']; // actiunea din cadrul acelui modul: edit/delete
$id = $_GET['id']; // id-ul elementului din modulul curent, ex: în cadrul modului
utilizatori id-ul utilizatorului selectat.
Doar în cadrul modulului utilizatori am folosit și parametrul pentru filtrarea utilizatorilor printr-un select box după companie.
$filterCompany = $_GET['filterCompany'];
De precizat, toate acțiunile au loc doar în cazul în care utilizatorul este autentificat, acest lucru verificându-se de la început înainte de a verifica valorile pentru variabilele transmise prin URL.
<?php
include "connection.php";
include "functions.php";
include "reader.php";
session_start();
if (isset($_SESSION['utilizator'])){
$module = $_GET['module'];
$action = $_GET['action'];
$filterCompany = $_GET['filterCompany'];
$id = $_GET['id'];
Definirea meniului se realizează într-un DIV cu id-ul header pentru care am definit să aibă proprietatea sticky, descrisă mai sus.
$(window).load(function(){
$("#header").sticky({ topSpacing: 0 });
});
4.3 Managementul utilizatorilor
Formularul din stânga ferestrei vă permite să adăugați dar și să editați un utilizator selectat din lista tuturor utilizatorilor, afișată în dreapta ferestrei.
În cazul în care sunteti administrator aplicație veți putea filtra utilizatorii după compania de care aparțin.
ID-ul companiei este transmis prin URL-ul paginii în momentul în care selectați o companie din select-box-ul respectiv. Acest lucru se face în JavaScript astfel:
$(function(){
$("#filtruCompanie").bind('change',function(){
if ($(this).val() != "")
var url = "desk.php?module=utilizatori&action=list&filterCompany="+$(this).val();
if (url)
window.location = url;
return false;
});
});
JavaScript preia acțiunea change pentru select-box-ul care are id-ul filtruCompanie, verifica ce valoare are acel select, daca are o valoare o adauga in URL- ul predefinit iar apoi schimba locatia ferestrei curente in acel URL.
4.4 Managementul companiilor
Structura acestei pagini este asemănătoare cu cea pentru managementul utilizatorilor. În stanga avem formularul de adăugare și de editare.
Tot aici, avem și formularul pentru importarea companiilor dintr-un fișier XLS:
Iar în dreapta, avem lista companiilor din baza de date, opțiunea pentru exportul liste și căutarea după CUI-ul firmei.
Formularul de inserare, editare conține campurile descrise în partea legată de structura bazei de date.
Formularul de Import folosește o librărie externă pentru a importa fișierul XLS conținând o lista cu companii. Lângă formular am creat și un link către un fișier care exemplifică structura capului de tabel pentru fișierul de import.
Principiul de funcționare a acestei funcții este simplu: aplicația validează formularul dacă ați selectat un fișier de tip XLS doar iar apoi va parcurge folosind clasa Spreadsheet_Excel_Reader definită în reader.php (menționată la începutul descrierii aplicației) pentru a parcurge fișierul XLS linie cu linie, pentru fiecare coloană.
Pentru fiecare linie va face o inserare în tabela companii :
$excel = new Spreadsheet_Excel_Reader();
$excel->read($import_fisier);
$x=1;
while($x<=$excel->sheets[0]['numRows']) {
$y=1;
while($y<=$excel->sheets[0]['numCols']) {
$cell = isset($excel->sheets[0]['cells'][$x][$y])? $excel->sheets[0]['cells'][$x][$y] : '';
if ($y == 1) $denumire = $cell;
if ($y == 2) $cui = $cell;
if ($y == 3) $nrregcom = $cell;
if ($y == 4) $telefon = $cell;
if ($y == 5) $email = $cell;
if ($y == 6) $fax = $cell;
if ($y == 7) $web = $cell;
$data = date("Y-m-d H:i:s");
$y++;
}
$sqlImport = mysql_query("INSERT INTO companii (denumire, CUI, NRREGCOM, adaugata_de, adaugata_la, telefon, email, fax, web) VALUES ('$denumire','$cui','$nrregcom','".$_SESSION['utilizator']."','$data','$telefon','$email','$fax','$web')") or die(mysql_error());
$x++;
}
Exportul companiilor se face prin fișierul export.php în care se definește header-ul pentru un fișier XLS .
header('Content-Encoding: UTF-8');
header("Content-Type: application/xls; text/html; charset=utf-8");
header("Pragma: no-cache");
header("Expires: 0");
header("Content-Disposition: attachment; filename=export-companii.xls");
Ultima linie de mai sus, forțează browser-ul să solicite download-ul fișierului nou generat, căruia i se da și un nume implicit filename=export-companii.xls. Apoi, se parcurg toate liniile din tabela companii și sunt afișate în acel fișier ca un tabel, exact la fel cum s-ar face afișarea pe monitor. La final se va închide fișierul XLS creat.
Căutarea companiilor după CUI se face foarte simplu printr-un formular care va verifica dacă s-a apăsat butonul submit al acelui formular și dacă câmpul pentru tastarea CUI-ului nu este lăsat liber. Dacă conția de validare este îndeplinită atunci se va face o interogare daor după CUI, în caz contrar, interogarea se va face pentru a afișa toate companiile.
if (!isset($_POST['cautare_submit']) && empty($_POST['cautare_cui'])){
$sqlListaCompanii = mysql_query("SELECT * FROM companii") or die(mysql_error());
$mesaj_rezultate = "";
} else{
$sqlListaCompanii = mysql_query("SELECT * FROM companii WHERE CUI LIKE '%".$_POST['cautare_cui']."%'") or die(mysql_error());
$mesaj_rezultate = "<h3>Rezultatele cautarii</h3>";
}
Asocierea clienților la o companie se face pe principiul “o companie poate fi clientul altor companii”. Pentru aceasta am folosit un formular care are 3 imput-uri: un select box simplu prin care se alege denumirea companiei căreia doriți să îi asociați clienți și două select box-uri care permit selectarea mai multor valori concomitent: unul care afișează companiile deja adăugate ca fiind clienți ai companiei și un alt select box care afișează restul companiilor, care nu au fost încă selectate ca fiind clienți ai companiei curente. De precizat, administratorii de aplicație pot stabili clienți pentru oricare companie, în timp ce, administratorul de companie poate stabili clienți doar pentru compania din care face parte.
Formularul are două butoane de submit. Primul, cel care “mută” compania din lista de clienti posibili în cea de clienți existenți, va face inserări în tabela companii_clienti, iar cel de-al doilea submit va face delete-uri în aceeași tabelă, va “muta clienți” din lista de clienți existenți în cea de clienți posibili, cu alte cuvinte îi va marca că nu mai sunt clienții companiei respective
// adaugarea la lista de clienti
if (isset($_POST['frmAdaugareClienti_submit_asociere'])){
$id = $_GET["id"];
foreach ($_POST["clienti-posibili"] as $client){
if (checkCompanyIsClientTo($id,$client)==0 && $client!=0){
$sqlAdaugareClient = mysql_query("INSERT INTO companii_clienti (id_companie,id_client) VALUES ('$id','".$client."')") or die(mysql_error());
}
}
}
// stergere din lista de clienti
if (isset($_POST['frmAdaugareClienti_submit_asociere_remove'])){
$id = $_GET["id"];
foreach ($_POST["clienti-existenti"] as $client){
$sqlStergereClient = mysql_query("DELETE FROM companii_clienti WHERE id_companie='$id' AND id_client='".$client."'") or die(mysql_error());
}
}
4.5 Managementul produselor
Utilizatorii au posibilitatea de a gestiona catalogul de produse al companiei de care apartin sau al tuturor companiilor in cazul in care sunt administratori de sistem. Pentru fiecare produs pot adauga denumirea, pretul unitar si cantitatea disponibila. De asemenea, pot edita sau sterge produsele din catalog.
4.6 Managementul facturilor
Utilizatorii pot emite facturi pentru clientii pe care i-au definit în secțiunea clienți. Pot stabili seria, numărul și data emiterii facturii. În cazul în care nu sunt specificate, acestea sunt stabilite implicit pentru data curentă. Alegerea furnizorului și a clientului este obligatorie înainte de adăugarea produselor pe factură.
Utilizatorul poate adăuga un număr nelimitat de produse pe factură, acest lucru realizându-se prin jQuery.Aceasta este zona pe pagina unde vor fi adăugate produsele prin jQuery:
<div id='container'>
<p id='add_field'>
<a href='#' class='LinkNormal'>
<span>Adauga inca un produs</span>
</a>
</p>
</div>
Aceasta este partea de jquery pentru adăugarea dinamica a câmpurilor pentru selectarea produselor:
var count = 0;
$(function(){
$('p#add_field').click(function(){
if ($("#client_id").val() =="" || $("#furnizor_id").val() == ""){
alert("Va rugam selectati intai furnizorul si clientul!");
}else{
count += 1;
var appendText = ' Produsul <select class="text produs" id="produsul_'+count+'"name="produse[]"> <option value=""> -selectati- </option>';
setTimeout(function(){
$.getJSON("ajax.php?id=" + $("#furnizor_id").val(),
function(data) {
var i=0;
for (i=0;i<data.length;i++){
appendText += '<option value = "'+data[i].id_produs+'">'+data[i].denumire+'</option>';
}
appendText += '</select>'
appendText = appendText + ' – Cantitate: <input type="text" name="cantitati[]" class="text" size="5"><br>';
$('#container').append(appendText);
});
},500);
}
});
});
Produsele sunt preluate prin JSON (transmiterea datelor în format java din mysql către o pagină pentru afișare) apelând scriptul de pe pagina ajax.php cu parametrul id-ul furnizorului, care tot ceea ce face este să interogheze tabela cu produse și să trimită prin JSON lista produselor companiei respective:
<?php
include "connection.php";
include "functions.php";
$id = $_GET["id"];
if (isset($id)){
$getCompanyProducs = mysql_query("SELECT * FROM produse WHERE id_companie='$id'") or die(mysql_error());
while ($lineCompanyProducs = mysql_fetch_assoc($getCompanyProducs)){
$rows[] = $lineCompanyProducs;
}
echo json_encode($rows);
}
?>
După preluarea în jQuery a datelor transmise prin JSON, acestea sunt parcurse prin function(data), unde data este un array bi-dimensional data[i].campul_din_tabela_produse, exemplu data[2].denumire va returna răspunsul JSON de pe pozia a II-a și valoarea campului denumire, cu alte cuvinte înregistrarea din tabela produse având id 2 și valoarea câmpului denumire (produs).
Aceste valori preluate din JSON sunt adăugate la finalul acelui DIV #containter sub forma unui select input combo box.
appendText += '<option value = "' + data[i].id_produs + '">' + data[i].denumire + '</option>';
Preluarea prin JSON este pusă într-un timer setTimeout care asteaptă 5 secunde pentru preluarea datelor prin JSON și afișarea efectivă a câmpului pe pagină.
După selectarea produselor și a cantităților de facturat se poate face salvarea facturii. Ulterior aceste facturi pot fi vizualizate dupa ce sunt selectate dintr-un combo box care cuprinde lista tututor facturilor emise:
5. Concluzii
Pe parcursul acestei lucrări au fost prezentate tehnologiile care au fost necesare realizării aplicației de gestiune a clientilor unei firme și anume: Php, Mysql și Apache. Prin această aplicație s-a dorit realizarea unei aplicații de gestionare a clienților unei firme cât mai ușor de înțeles și utiliza,dar și rapidă din punct de vedere al performanței și cu o vastă posibilitate de dezvoltare.
Pe viitor această aplicație poate fi dezvoltată din foarte multe puncte de vedere:
Implementarea mai multor funcționalități mai apropiate de realitate cum ar fi posibilitatea ca clienții sa poată cumpăra în rate produsele , să își calculeze aceste rate , dobânzile aferente .
Extinderea aplicației astfel încât să poată fi folosită concomitent de mai multe firme și persoane.
Salvarea bazei de date a produselor și facturilor pe un server Cloud, pentru o mai bună performanță de răspundere și un cost mai mic.
Din punct de vedere al administrării și securității s-ar putea implementa mai multe metode de securitate atât la nivel de aplicație cât și la nivel de bază de date.
Aplicația este constituită din mai multe module. În secțiunea utilizatori se pot vizualiza utilizatorii în funcție de privilegiile celui care este logat. Astfel administratorii de firmă pot vedea toți clienții firmei respective. Administratorii de sistem pot vedea toți clienții tutror firmelor, iar utilizatorii fără aceste drepturi nu pot să vadă restul clienților. În modulul companii se pot vizualiza companiile din baza de date, se pot face modificări la companiile existente sau șterge companii. Tot aici se poate face o căutare în baza de date a firmelor după cui-ul lor. De asemenea se poate face import la un fișier excel care să conțină date ale altor companii. Tot în acest modul se poate face export într-un fișier excel a datelor din baza de date ce conține detalii despre companiile înregistrate. În modulul clienți se pot transfera clienți de la o companie la clienți altei companii sau se poate vizualiza legăturile între firme.
În modulul produs se pot insera produse pentru fiecare companie , se va putea seta un preț și o cantitate a produsului respectiv.De asemenea se pot face modificări la produsele existente sau se pot șterge produse. În modulul facturi se pot crea facturi între firme și se poate vedea un istoric al facturilor între firme.
Aplicația a fost dezvoltată cu o structură modulară pentru ca adăugarea unor noi funcționalități să nu le afecteze pe cele existente, atât la nivel de PHP care permite adăugarea unor noi funcționalități în cadrul aceleiași soluții , cât și la nivel de bază de date unde este posibilă adăugarea de noi tabele, relații și scheme pentru securitate.
Bibliografie
[1] http://ro.wikipedia.org/wiki/PHP
[2] http://ro.wikipedia.org/wiki/MySQL
[3] http://www.rasfoiesc.com/business/economie/comert/TEHNOLOGII-SI-INSTRUMENTE-INFO63.php
[4] http://www.emdx.eu/2011/tehnologii-folosite-in-dezvoltarea-aplicatiilor-web/
[5] http://www.w3schools.com/js/default.asp
[6] http://www.marplo.net/javascript/introducere.html
[7]http://profs.info.uaic.ro/~alaiba/mw/index.php?title=Introbiblioteca_Javascript_jQuery
[8] http://ro.wikipedia.org/wiki/Cascading_Style_Sheets
[9] http://ro.wikipedia.org/wiki/PHP
[10] Murach’s SQL Server 2012 for developers – Bryan Syverson, Joel Murach 2012
[11] http://ro.wikipedia.org/wiki/Apache_(server)
[12] http://www.scritub.com/stiinta/informatica/Apache-HTTP-Server1513112018.php
[13] http://www.e-learn.ro/tutorial/adobe-dreamweaver/definirea-unui-site-in-dreamweaver/120/1/91.htm
[14] http://ro.wikipedia.org/wiki/Adobe_Dreamweaver
Bibliografie
[1] http://ro.wikipedia.org/wiki/PHP
[2] http://ro.wikipedia.org/wiki/MySQL
[3] http://www.rasfoiesc.com/business/economie/comert/TEHNOLOGII-SI-INSTRUMENTE-INFO63.php
[4] http://www.emdx.eu/2011/tehnologii-folosite-in-dezvoltarea-aplicatiilor-web/
[5] http://www.w3schools.com/js/default.asp
[6] http://www.marplo.net/javascript/introducere.html
[7]http://profs.info.uaic.ro/~alaiba/mw/index.php?title=Introbiblioteca_Javascript_jQuery
[8] http://ro.wikipedia.org/wiki/Cascading_Style_Sheets
[9] http://ro.wikipedia.org/wiki/PHP
[10] Murach’s SQL Server 2012 for developers – Bryan Syverson, Joel Murach 2012
[11] http://ro.wikipedia.org/wiki/Apache_(server)
[12] http://www.scritub.com/stiinta/informatica/Apache-HTTP-Server1513112018.php
[13] http://www.e-learn.ro/tutorial/adobe-dreamweaver/definirea-unui-site-in-dreamweaver/120/1/91.htm
[14] http://ro.wikipedia.org/wiki/Adobe_Dreamweaver
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: Realizarea Unei Aplicatii Web Pentru Gestionarea Clientilor Unei Firme (ID: 150333)
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.
