PROIECT Va trebui să creaţi un proiect folosind PHP şi MySql apoi să îl publicaţi pe un server. Proiectul trebuie să fie un magazin virtual sau o organizaţie virtuală care să promoveze ceva şi să aibă clienţi. Bazele dvs de date vor trebui să fie legate de partea de administrator(useri), de clienţi şi produsele promovate şi comenzi.
Exemplu: magazin virtual O aplicaţie este în principiu o colecţie software consolidată cu scopul de a rezolva un set dat de probleme. Rezolvarea problemelor prin punerea în practică a software-ului se numeste software engineering. Deşi de multe ori nu ne dăm seama, folosim în permanenţă bazele de date. Ori de câte ori selectăm un produs, sau dacă efectuăm o căutare (de la un magazin virtual) folosim o bază de date. Baza de date care este interogată (cu ajutorul instrucţiunilor limbajului SQL) şi se face o selecţie dupa nişte criterii ( transmise prin anumite metode GET, POST din PHP etc.) Noţiunea de bază de date este strâns legată de noţiunea de date, care referă „fapte culese din lumea reală”. Baza de date se referă la un volum mare de date, care sunt stocate pe suport fizic; ea reprezintă, în cazul sistemului computerizat, echivalentul arhivei din viaţa reală. Poate fi asemanată cu un biblioraft care este pur şi simplu un loc fizic în care pot fi stocate date, indiferent care ar fi ele, sau cum ar fi structurate. Pentru o bază de date cel mai important lucru este manipularea datelor conţinute în acea bază de date. Această „manipulare” se referă la operaţiile care se pot efectua asupra datelor: operaţii de adăugare a unor date noi, operaţii de regăsire, de modificare, de ştergere a datelor existente (care se realizează cu ajutorul instrucţiunilor limbajului SQL). În continuare vom rezuma argumentele care au stat la temelia alegerii pe care am facut-o : alegerea unei aplicaţii centrată pe baze de date. Aveam nevoie ca aplicaţia să permită stocarea unui volum mare de date (categorii, tipuri de produse; produse; informaţii despre clienţi, comenzi etc), la care sa existe acces tot timpul. Se ştie că în cazul bazelor de date, accentul este pus pe operaţiile de memorare şi regăsire, efectuate asupra unor volume mari de date şi mai puţin asupra operaţiilor de prelucrare a datelor, care este domeniul altor categorii de aplicare a informaticii. Avantaje folosire baze de date în MySql: - posibilitatea stocării unui volum relativ mare de informaţii, precum şi accesul ulterior la aceste informaţii; - remanenţa informaţiei, care în cazul unei aplicaţii standard, fără baze de date, era incertă. Astfel, utilizatorul aplicaţiei va avea posibilitatea să verifice la un moment dat comenzile efectuate la o anumită dată, clienţii care au comandat ceva. - simplificarea procesului de calcul, care în cazul calculului tabelar ar fi avut o complexitate ridicată, fără a avea un control real asupra fluxului de informaţie gestionat; - transparenţa totală a implementării, utilizatorul aplicaţiei nu trebuie să cunoască modalitaţile efective de implementare, modul de stocare a datelor, verificările de corectitudine a informaţiilor introduse. Utilizatorul nu trebuie să cunoască ce se întâmplă cu o informaţie introdusă în sistem, dar în acelaşi timp acesta trebuie să aibă acces la informaţia respectivă; - fiind vorba de sume de bani, securitatea metodelor de calcul trebuie să fie ridicată, trebuie să fie eliminată pe cât posibil posibilitatea introducerii de erori în rezultatul final, iar o aplicaţie care utilizează baze de date reuşeşte să atingă acest obiectiv. În acest sens sunt necesare o serie de verificări la introducerea de informaţii în sistem, care să evite aceste erori(cum ar fi de exemplu verificarea ca la introducerea unui produs în coş sau să nu poată fi introduse valori negative). ABORDAREA METODICĂ A ACŢIUNII DE PROIECTARE A APLICAŢIEI Dezvoltarea unui sistem este o activitate laborioasă ce cuprinde o multitudine de sub-activităţi("tasks") desfăşurate într-o manieră metodică. Aceste sub-activităţi pot fi grupate în etape importante. Fiecare etapă are definite clar elementele livrate (adică ce produse finale sunt obţinute la încheierea etapei) etapelor ulterioare. În cadrul fiecărei etape (stadiu) sub-activităţile tind să fie de scurtă durată şi pot fi estimate cu uşurinţă. Fiecare sub-activitate este divizată în mai multe sub-sub-activităţi. O anumită sub-sub-activitate se poate repeta de un număr de ori din diferite motive. Vom discuta despre dezvoltarea pe baza modelului CASE(Computer-Aided Systems Engineering).
1
Prezentăm în mare etapele importante de dezvoltare, conform acestui model, fără a insista cu detalii asupra metodelor şi sub-activităţilor corespunzătoare fiecărei etape :
- etapa de strategie – obiectivul este de a produce un set de modele de business, un set de recomandări şi un plan agreat pentru dezvoltarea sistemelor de informaţii ce vor servi nevoilor curente şi viitoare ale organizaţiei, ţinând cont de constrângerile financiare şi tehnice ale organizaţiei. Este analizată problema care trebuie rezolvată, pe baza specificaţiilor de definiţie. Aceste specificaţii sunt obţinute în urma analizării cerinţelor aplicaţiei, în acest caz este vorba de studierea unui pagini de Internet care se ocupă cu realizarea unor aplicaţii pentru magazine virtuale. - etapa de analiză – Preia şi verifică lucrurile obţinute în etapa strategie şi le expandează în detaliu suficient pentru a asigura acurateţea de business, fezabilitatea şi un fundament sănătos pentru proiectare, în cadrul domeniului organizaţiei şi având în minte sisteme existente. - etapa de proiectare – pe baza etapei de analiză, se realizează proiectarea aplicaţiei, în urma căreia rezultă directive concrete pentru etapa de implementare, de exemplu se realizează proiectarea schemei bazei de date, stabilirea funcţiilor de business necesare în sistem, etc. - etapa de implementare – realizarea efectivă a aplicaţiei, scrierea codului, realizarea bazei de date, compilarea aplicaţiei sub forma unui program executabil; - etapa de testare – produsul software este testat în condiţii normale de utilizare şi se rezolvă eventualele probleme; - etapa de documentare – se scrie documentaţia aplicaţiei(sub forma tiparită şi/sau online), se face instruirea viitorilor utilizatori ai aplicaţiei.
Etapa analiză. Entităţi şi atribute Pentru a ajunge la baza de date existentă, utilizaţi o „schiţă”, pe care o creaţi în baza specificaţiilor de definiţie. Vor fi redate mai jos listele cu entităţile şi cu atributele care constituie fundamentul descrierii schemei bazei de date.
LISTA CU ENTITĂŢI ŞI ATRIBUTE PENTRU CONSTRUIREA DIAGRAMEI E-R
ENTITATE (E) / ATRIBUT(A) Categorii produse( id_categorie, denumire) Element comanda (id_elem_com, id_comanda, cantitate, pret) Tipuri produse(id_tip, id_cat, denumire, poza) Produse(id_produs, pret, caracteristici, poza_mare) Comenzi(id_comanda, id_client, pret_total) ENTITATE (E) / ATRIBUT(A) Livrari(id_livrare, data_livrarii) Clienti(nume, prenume, id_adresa, email, telefon) Adresa(strada, nr_strada, apartament, cod_postal, oras, judet) Cereri aprovizionare(id_cerere, cantitate, data_cererii, data_rezolvarii)
users de bază
2
ATRIBUT NUME UTILIZAT ÎN BD TIP DE DATE LUNGIME ENTITATEA DE CARE APARŢINE Număr de identificare adresa id_ adresa int 11 adresa Strada strada varchar 255 adresa Numar strada numar_str int 11 adresa Apartament apartament int 11 adresa Cod Postal cod_postal varchar 100 adresa Oras oras varchar 100 adresa Judet judet varchar 100 adresa Numar de identificare categorie id_categorie int 11 categorii_produs Denumire denumire varchar 255 categorii_produs Numar de identificare cerere id_cerere int 11 cerere_aprovizionare Numar de identificare produs id_ produs int 11 cerere_aprovizionare Numar de bucati (cantitate) cantitate double cerere_aprovizionare Data efectuarii cererii data_cererii date cerere_aprovizionare ATRIBUT NUME UTILIZAT ÎN BD TIP DE DATE LUNGIME ENTITATEA DE CARE APARŢINE Data rezolvarii cererii data_rezolvarii date cerere_aprovizionare Numar de identificare client id_client int 11 clienti Nume nume varchar 255 clienti Prenume prenume varchar 255 clienti E-mail email varchar 100 clienti Telefon telefon int 11 clienti Numar de identificare comanda id_comanda int 11 comanda Suma de achitat pret_total double comanda Data efecuarii comenzii data_comenzii date comanda Numar de identificare element de comanda nr_elem_com int 11 element de comanda Cantitate (nr. buc.) produs cantitate int 11 element de comanda Pret (pe elem. comanda) pret double element de comanda Numar de identificare livrare id_livrare int 11 livrare Data efectuarii livrarii data_livrare date livrare Numar de identificare categorie id_cat int 11 produse Numar de identificare tip produs id_ tip int 11 produse Denumire produs denumire varchar 255 produse Descriere (produs) caracteristici longtext produse ATRIBUT NUME UTILIZAT ÎN BD TIP DE DATE LUNGIME ENTITATEA DE CARE APARŢINE Poza poza varchar 255 produse Poza mare poza_mare varchar 255 produse Numar de identificare administratori ID int 11 users Nume (folosit) administrator UserName varchar 255 users Parola administrator UserPassword varchar 255 users Relaţiile pentru cazul de faţă vor fi următoarele: ENTITATE 1 ENTITATE 2 TIP DE RELATIE Categorii produse – Produse 1:N* Categorii produse – Tipuri produse 1:N Tipuri produse – Produse 1:N* Cereri aprovizionare – Produse 1:N Produse – Element de comanda 1:N Comenzi – Element de comanda 1:N Comenzi – Livrari 1:1 Clienti – Comenzi 1:N Adresa – Clienti 1:N Relaţiile notate cu * sunt obligatorii.
3
Evenimente şi funcţii Principala funcţie de business pe care trebuie să o rezolve această aplicaţie ar fi efectuarea unei comenzi. Această funcţie se împarte de fapt în mai multe funcţii mai mici care în final vor realiza comanda de produse.
• Adăugare produs în coş:
• Modificare cantitate (produs) sau stergere (daca e nevoie) : Pentru fiecare produs se creează un formular cu denumirea ModificareCant + produsid care conţine un textfield cu noua cantitate şi o imagine care face trimiterea formularului (făcând click pe imagine se lansează funcţia gogo() ). La trimiterea formularului se face verificarea pentru noua cantitate şi apoi se face trimiterea. while (list ($key, $val) = each ($_SESSION)) { $_SESSION[‘Produs1’] = “30” ; $key = “Produs1”; $val = “30”; $_SESSION[‘utitlizator’] = “ion” ; $key = “utilizator”; $val = “ion”; } session_start(); // porneste sesiunea if(isset($_POST['newCant'])) // daca a fost transmisa noua cantitate( a fost click pe imagine ) {$_SESSION["Produs".$_POST['idprodus']] = $_POST['newCant'];} // daca noua cantitate a fost 0 atunci produsul este sters din sesiune unset($_SESSION["Produs".$_POST['idprodus']]);
Etapa proiectare. Diagrama Entitate-Rela’ie În etapa de proiectare vom utiliza informaţiile obţinute la faza de analiză pentru a realiza diagrama EntitateRelaţie, pe baza listelor cu entităţi, atribute şi relaţii dintre acestea, precum şi diagrama de funcţii, pe baza listei de evenimente şi funcţii. Diagrama Entitate-Relaţie este o formă generalizată şi abstractizată a listei de entităţi şi atribute şi este utilizată apoi pentru realizarea schemei bazei de date. Această diagramă este independentă de sistemul de gestiune a bazelor de date utilizat în etapa de implementare. Prezentăm în continuare câteva elemente de notaţie ale diagramei Entitate-Relatie. pentru entităţi, există următoarele notaţii: Dreptunghiul cu colturile rotunjite reprezintă entitatea, în care cu litere mari se notează denumirea entităţii şi cu litere mici se notează atributele. Linia dintre entităţi indică existenta unei relaţii între acestea. Astfel, linia continuă indică o relaţie obligatorie, linia întreruptă(punctată), pentru specificarea atributelor, există 3 simboluri distincte: # (diez) indică faptul ca atributul respectiv este un element de identificare a entităţii, numit şi cheie, sau ID. * (asterisc) indică faptul ca atributul este unul obligatoriu. ? (grad) indică faptul ca atributul este opţional. Diagrama entitate-relaţie este: Citirea diagramei E/R: Cuvintele din apropierea liniilor sunt cuvinte cheie care definesc relaţia şi se citesc astfel: <ENTITATE 1> <cuvant cheie><ENTITATE 2> Cuvintele cheie care sunt deasupra liniei sunt pentru citirea în direcţia de la stânga la dreapta, iar cele care sunt sub linie pentru citirea în sens invers, de la dreapta la stânga.
Fiecare categorie de produse poate fi compusă din unul sau mai multe produse şi fiecare produs trebuie să aparţină unei categorii şi numai uneia. Fiecare categorie de produse poate avea unul sau mai multe tipuri de produse şi fiecare tip de produs trebuie să aibă o
4
categorie şi numai una. Fiecare tip de produs trebuie să conţină unul sau mai multe produse ţi fiecare produs poate să aparţină unui tip de produs şi numai unuia. Fiecare produs poate fi inclus într-una sau mai multe cereri de aprovizionare şi fiecare cerere de aprovizionare trebuie să fie compusă din unul sau mai multe produse. Fiecare produs poate fi inclus într-unul sau mai multe elemente de comandă şi fiecare element de comandă trebuie să conţină un produs şi numai unul. Fiecare element de comandă trebuie să aparţină unei comenzi şi numai uneia şi fiecare comandă poate fi compusă din unul sau mai multe elemente de comandă. Fiecare comandă aparţine unei livrări şi fiecare livrare corespunde unei comenzi. Fiecare comandă trebuie să aparţină unui client şi numai unuia şi fiecare client poate deţine una sau mai multe comenzi. Fiecare client trebuie să aibă o adresă şi numai una şi fiecare adresă poate avea unul sau mai mulţi clienţi. Se poate observa în diagrama Entitate-Relaţie existenţa unor atribute de identificare, identificatori unici sau de tip cheie, acestea sunt necesare pentru stabilirea legăturilor dintre entităţi în faza de implementare a schemei bazei de date. În continuare vom enumera aceste atribute: ATRIBUT ENTITATEA DE CARE APARTINE TIP ATRIBUT id_categorie Categorii produse Not null, primary key, autoincrement id_tip Tipuri produse Not null, primary key, autoincrement id_produs Produse Not null, primary key, autoincrement id_cerere Cereri aprovizionare Not null, primary key, autoincrement id_elem_com Element comanda Not null, primary key, autoincrement id_comanda Comenzi Not null, primary key, autoincrement id_client Clienti Not null, primary key, autoincrement id_adresa Adresa Not null, primary key, autoincrement id_livrare Livrari Not null, primary key, autoincrement
Etapa proiectare. Diagrama Funcţională Căutare avansată şi ştergere există pentru toate tabelele din baza de date. Adăugare există pentru următoarele tabele: - categorii produse; - produse; - tipuri produse; - users; Modificare există pentru tabelele: - categorii produse; - cerere aprovizionare; - comanda; - produse; - users;
5
Etapa implementare Pentru implementarea aplicaţiei aveţi nevoie de mediul de programare PHP şi MySql. Proiectarea şi implementarea bazei de date Baza de date contine un numar de 9 tabele, 8 dintre ele sunt cele corespunzătoare entităţilor prezentate. - categorii_produse - tip_produs - produse - cerere_aprovizionare - element_comanda - comanda - clienti - livrari - adresa - users Celelălt tabel este auxiliar, nu rezultă în urma analizei, ci au fost introduse ca elemente ajutătoare pentru administrare. Acesta este: - user – conţine userii care au dreptul să administreze site-ul cu numele şi parola user-ului.
Proiectarea interfeţei utilizator Meniul aplicaţiei ar trebui să arate astfel:
Categorii produse Tipuri produse Produse Home Informatii Cautare produs Cautare tip produs Continutul cosului Golire cos Meniul este pus în fiecare pagină, pagina CSS-izată, iar pagina principală home arată în felul următor:
În partea stângă se află categoriile de produse, iar dacă este selectată categoria, va apărea (se va încărca) tot în aceeaşi pagină tipurile de produse corespunzătoare categoriei selectate. O categorie de produse poate conţine atât tipuri de produse cât şi produse fără tip (adică id_tip “null” când sunt introduse în baza de date). Deci sunt produse care aparţin acelei categorii dar nu au tip. La căutarea unui produs sau unui tip se vor afişa în mijloc rezultatele căutarii (produsele sau tipurile găsite) : În cazul în care textul introdus nu a fost găsit printre denumire şi caracteristici se va afişa mesajul: “Produsul cautat nu a fost găsit în baza de date”. La introducerea unui produs în coş va apare produsul selectat singur în pagină. Pentru a face comanda produselor selectate se face click pe Conţinutul coşului din orice pagină şi se vor afişa toate produsele din coş. Tot aici se pot modifica cantitatea unui produs sau se poate şterge prin introducerea valorii “0” în căsuţă Modificare cantitate.
6
După aceea dacă doriţi să comandaţi produsele completaţi formularul cu datele personale şi faceţi click pe butonul Facturează iar dacă doriţi să mai adăugaţi şi alte produse la comandă puteţi să navigaţi în continuare şi să selectaţi produsele dorite. După ce faceţi click pe butonul Facturează în pagină va apărea mesajul : “Comanda a fost efectuată”.
Spor la lucru la proiectele dvs.
BAFTĂ MULTĂ!
7