SPECIALIZAREA: ………………. ………….. ……. Lucrare de licență Baze de date relaționale – aspecte teoretice și practice Coordonator… [631080]
1
UNIVERSITATEA …………………. ……………………….. ……….
FACULTATEA …………………………….. …….. ……………
SPECIALIZAREA: ………………. ………….. …….
Lucrare de licență
Baze de date relaționale – aspecte
teoretice și practice
Coordonator științific,
Prof. dr. ……………………….. ….
Student,
……………………. …
Sesiunea 2019
2
Cuprins
Listă de figuri ………………………….. ………………………….. ………………………….. …………………. 3
Listă de secven țe de cod sursă ………………………….. ………………………….. ………………………. 3
Listă de tabele ………………………….. ………………………….. ………………………….. ………………… 4
1. INTRODUCERE ………………………….. ………………………….. ………………………….. ……… 5
2. ASPECTE TEORETICE ………………………….. ………………………….. ……………………….. 6
2.1 Noțiuni de bază ………………………….. ………………………….. ………………………….. ……. 6
2.2 Sistem informatic și baze de date ………………………….. ………………………….. ………… 6
2.3 Baza de date ………………………….. ………………………….. ………………………….. ………… 7
2.4 Modelul relațional ………………………….. ………………………….. ………………………….. . 12
2.5 Proiectarea modelului relațional – Transformarea entităților ………………………….. 16
2.6 Transformarea relațiilor ………………………….. ………………………….. …………………… 16
2.7 Normalizarea relațiilor ………………………….. ………………………….. …………………….. 17
2.8 Dependențe funcționale ………………………….. ………………………….. …………………… 18
2.9 Forma normală (FN1) ………………………….. ………………………….. ……………………… 20
2.10 Forma normală 2 (FN2) ………………………….. ………………………….. …………………. 22
2.11 Forma normală 3 (FN3) ………………………….. ………………………….. …………………. 23
3. ASPECTE TEHNOLOGICE ………………………….. ………………………….. ………………… 24
3.1 Tehnologii bazate pe… ………………………….. ………………………….. …………………….. 24
3.2 Descrierea mediilor de programare și a softwarelor utilizate …………………………. 24
3.3 Limbajul HTML ………………………….. ………………………….. ………………………….. …. 24
3.4 Fundamente ………………………….. ………………………….. ………………………….. ……….. 25
3.5 CSS (Cascading Style Sheets) ………………………….. ………………………….. ………….. 28
3.6 Instalarea pachetului de programe xampp (utilizat in cazul aplicației) ……………. 28
3.7 Instalare și setare ………………………….. ………………………….. ………………………….. … 29
3.8 Scrierea programelor PHP ………………………….. ………………………….. ……………….. 31
3.9 Limitari și reguli ale variabilelor ………………………….. ………………………….. ………. 32
3.10 Tipuri de date in PHP ………………………….. ………………………….. ……………………. 32
3.11 Sistemul de baze de date MySQL ………………………….. ………………………….. …… 33
3.12 Serverul Apache ………………………….. ………………………….. ………………………….. . 34
4. PROIECT INFORMATIC ………………………….. ………………………….. ………………… 43
3
4.1 Cerințele aplicației ………………………….. ………………………….. ………………………….. 43
4.2 Proiectarea aplicației ………………………….. ………………………….. ……………………….. 49
4.3 Exemple de utilizare ………………………….. ………………………….. ……………………….. 51
4.4 Implementarea și testarea aplicatiei ………………………….. ………………………….. …… 57
4.5 Validarea aplicatiei ………………………….. ………………………….. …………………………. 61
5. CONCLUZII ………………………….. ………………………….. ………………………….. ………….. 63
BIBLIOGRAFIE ………………………….. ………………………….. ………………………….. …………… 65
Listă de figuri
Figura 1 – Structura bazei de date ………………………….. ………………………….. ………………… 50
Figura 2 – Pagina de start și meniul principal ………………………….. ………………………….. … 51
Figura 3 – Lista cărților din categoria aleasă ………………………….. ………………………….. …. 51
Figura 4 – Informații detaliate despre cartea selectată ………………………….. …………………. 52
Figura 5 – Coșul de cumpărături ………………………….. ………………………….. ………………….. 52
Figura 6 – Formularul pentru datele personale și datele de livrare ………………………….. … 53
Figura 7 – Formularul pentru plata cu cardul ………………………….. ………………………….. … 54
Figura 8 – Finalizarea plății si trimiterea cu succes a co menzii ………………………….. ……. 54
Figura 9 – Logare administrator ………………………….. ………………………….. ………………….. 55
Figura 10 – Meniul principal al administratorului ………………………….. ………………………. 55
Figura 11 – Formular pentru a adăuga a nouă carte ………………………….. …………………….. 56
Figura 12 – Adăugarea cu succes a unei cărți ………………………….. ………………………….. … 56
Figura 13 – Crearea bazei de date si a tabelului de clienți ………………………….. ……………. 57
Listă de secven țe de cod sursă
Fragment de cod sursă 1 – Afișarea coșului de cumpărături ………………………….. ………… 58
4
Fragment de cod sursă 2 – Funcția de inserare a unei noi categorii în baza de date …….. 59
Fragment de cod sursă 3 – Func ția de inserare a unei noi cărți în baza de date …………… 59
Fragment de cod sursă 4 – Funcția de actualizare a unei categorii ………………………….. … 60
Fragment de cod sursă 5 – Funcția de actualizare a unei cărți ………………………….. ………. 60
Fragment de cod sursă 6 – Funcția de ștergere a unei categori ………………………….. …….. 61
Fragment de cod sursă 7 – Funcția de ștergere a unei cărți ………………………….. ………….. 61
Listă de tabele
Tabel 1 – Tabel de cerin țe ………………………….. ………………………….. ………………………….. . 47
Tabel 2 – Detaliere caz de utilizare – Utilizator Guest ………………………….. ………………… 48
Tabel 3 – Detaliere caz de utilizare – Administrator ………………………….. …………………… 48
Tabel 4 – Caz de testare – Logare cu succes ………………………….. ………………………….. …. 61
Tabel 5 – Caz de testare – Logare fără succes ………………………….. ………………………….. .. 62
5
1. INTRODUCERE
Acest proiect tratează aspecte teoretice ale proiectării bazelor de date relaționale
și transpune aceste aspecte în practică prin crearea unei aplicații web utilizând limbajele
PHP, CSS, HTML pentru a realiza scripturi și coduri HTML vizibile printr -un browser.
Pentru proiectarea bazei de date s -a folosit sistemul de gestiune a bazalor de date
MySQL.
În capitolul I am descris sistemul informatic, utilizarea lui și etape le ciclului de
viață ale unui sistem informatic, reușind să integrez și să implementez ideea ce a stat la
bază aplicației construite.
În capitolul II am exemplificat mediile de programare și software -lor utilizate în
crearea aplicației, despre menirea și semnificația limbajului HTML.
În capitolul III am făcut referire la proiectul informatic realizat (aplicație de
librărie electronică, cum se adaugă în aplicație categoriile de produse, exemple de
utilizare, am descris cerințele pentru fiecare opțiune în p arte și am demonstrat validarea
aplicației.
Programul asigură mai multe funcționalități folosite în administrarea și
gestionarea unei librării electronice cât și pentru vânzarea cărților și achitarea lor prin
intermediul cardurilor de credit.
Funcții p entru utilizatori
Vizualizarea titlurilor cărților existente în stoc, grupate pe tematici;
Posibilitatea selectării cărții dorite în vederea aflării mai multor informații despre
aceasta;
Adăugarea cărții selectate în coșul de cumpărături și continuarea cumpărăturilor, dacă
este cazul;
Achitarea cărților selectate prin completarea câmpurilor necesare autentificării
precum și completarea informațiilor legate de cardul de credit;
Vizualizarea în permanență a totalului produselor din coș.
Funcții pentru ges tionare :
Logarea ca administrator numele de utilizator admin și parola admin ;
Introducerea de noi categorii/tematici de cărți;
Posibilitatea modificării sau eliminării categoriilor de cărți deja existente;
6
Adăugarea de cărți noi corespunzătoare categoriilor introduse: ISBN, titlu, autorul,
categoria, prețul, descrierea cărții;
Posibilitatea modificării sau eliminării informațiilor legate de cărțile deja existente pe
stoc;
Facilitatea de a modifica parola administratorului.
2. ASPECTE TEORETICE
2.1 Noțiuni de baz ă
2.2 Sistem informatic și baze de date
Sistem informatic (S I)
Sistem informatic este un sistem informațional automatizat reprezentat prin
ansamblul de echipamente (hardware), programele (software) și procedurile
organizaționale (orgware) pentru prelucrarea informației.
Utilizarea sistemului informatic
Sistemul informatic permite introducerea de informație, stocarea informației,
prelucrarea informației și extragerea informației sub formă de rapoarte.
Etapele ciclului de via ță al unui sistem informatic
Există mai multe modele ale ciclului de viață, multe dintre ele cunoscând o
evoluție în timp. Din analiza acestora putem desprinde ca elemente comune următoarele
faze:
definirea cerințelor utilizatorilor: utilizatorii vor preciza obiectivele, criteriile de
eficiență, securitate pe care urmează să le îndeplinească viitorul sistem informatic.
specificația cerințelor sistemului: prezentarea detaliată a rezultatelor pe care
sistemul informatic urmează sa le asigure.
proiectarea generală: se stabileste arhitectura viitorului sistem informatic și
interacțiunile între componentele sale, se face o primă schiță legată de viitoarea
bază de date.
proiectarea de detaliu: în cadrul acesteia se realizează definirea bazei de date în
conformitate cu un SGBD (sistem de gestiune a bazelor de date) ales, definirea
prelucrărilor până la nivel de proceduri elementare, toate aceste soluții având în
vedere platforma hardware pe care se va lucra testarea componentelor: verificarea
modului de funcționare.
7
integrarea componentelor și testarea finală a sistemului: reunirea componentelor
în cadrul produsului final și verificarea funcționării lui în ansamblu.
implementarea și testarea produsului la beneficiar u rmat de acceptarea produsului
de către acesta.
exploatarea și întreținerea sistemului: utilizarea curentă a sistemului informatic și
gestiunea acestuia.
dezvoltarea sistemului informatic: realizarea și integrarea de noi componente care
să imbunătățească și / sau dezvolte funcționalitatea și performanțele sistemului.
2.3 Baza de date
O bază de date, uneori numită și "bancă de date", reprezintă o modalitate de
stocare a unor informații și date pe un suport extern (un dispozitiv de stocare), cu
posibili tatea regăsirii rapide a acestora .
Sistem de gestiune a bazei de date (SGBD) – reprezintă totalitatea programelor
utilizate pentru crearea, interogarea și întreținerea unei baze de date.
Clasificare SGBD
ierarhice ( fișiere adânci, structuri arborescente )
reticulare ( fișiere adânci, structuri de tip rețea, Conference on Data System
Lauquages, cod ASyL, 1971 )
relaționale ( fișiere plate, tabele, structuri de tip rețea, Cod D 1970 )
SGBDR: MS Access 2.0, dBase, FoxPro, Paradox, MS SQL, MySQL
Arhitectur a unui SGBD
Datele din bază pot fi descriese în trei nivele: extern, conceptual și intern.
Nivelul extern –corespunde modului în care utilizatorii percep baza de date. La
acest nivel se descriu părțile relevante fiecărui utilizator în parte. Există entit ăți care deși
sunt reprezentate în baza de date nu apar în acest nivel deoarece sunt irelevante pentru un
anumit utilizator.
Nivelul conceptual – descrie ce date sunt stocate în baza si relațiile dintre
date.Conține structura logică a bazei de date descrisă prin conceptele de :
– entitate,attribute si relații.
– constrângeri referitoare la date.
– informații de securitate si integritate.
8
Nivelul intern – descrie reprezentarea fizică a bazei de date în calculator. Aici
e specificat cum anume sunt stocate datele din baza. Structuri de date, organizarea
fișierelor și spațiul de stocare aparțin acestui nivel.
Funcțiile SGBD
Gestiunea dicționa rului de date :
Programele aplicative accesează datele prin intermediul SGBD, care caută în
dicționarul de date structura datelor și a legăturilor necesare rezolvării problemei
utilizatorului.
Gestiunea fișierelor de date :
Colecția de date (BD) se mater ializează printr -un fișier sau colecție de fișiere de
date, fișiere index, etc.
Transformarea datelor :
Datele introduse de utilizator nu au întotdeauna structura identică cu cea definită
în baza de date.
Gestiunea aplicațiilor
– Limbaj de descriere a d atelor;
– Limbaj de manipulare a datelor;
– Limbaj pentru afișarea datelor (pe ecran sau la imprimantă).
Importul si exportul datelor
Conversia datelor pentru prelucrarea cu alt SGBD sau cu aplicații terțe (de ex. Excel).
Controlul securității datelor
– Utilizatorii au acces la date;
– La ce date are acces fiecare utilizator;
– Ce operații se pot efectua de fiecare utilizator cu datele la care are acces.
Asigurarea integrității datelor
Restricții de integritate, de ex. SGBD -ul poate asigura că vâ rsta unei persoane
la introducerea în BD este cuprinsă între x si y.
Modalitatea de interacționare cu baza de date
Cea mai răspândită modalitate de interacționare cu baza de date este un limbaj
standard denumit Structured Query Language (SQL). Comenzile SQL pot fi împarțite în
două sub -limbaje principale:
Data Definition Language (DDL) conține comenzi folosite pentru a crea sau
distruge baza de date sau obiecte din baza de date.
9
După c e structura Bazei de Date este definită de DDL, utilizatorii pot folosi, în
continuare, sub -limbajul.
Data Manipulation Language pentru a înregistra, extrage sau modifica datele din
conținutul Bazei de Date.
În prezent, se folosesc, pe scară largă, interfe țe grafice (Graphical User Interface) care
simplifică mult administrarea Bazei de date dar familiarizarea cu limbajul SQL este
esențială, aceasta reprezentând fundamentul Bazelor de Date.
În concluzie, baza de date, prezintă, în principal, următoarele avan taje:
posibilitatea extragerii înregistrărilor ce corespund anumitor criterii ;
actualizarea simultană a înregistrarilor ;
interconectarea datelor din diferite tabele ;
realizarea de calcule complexe ;
Diagrama entitate -relație
Diagrama entitate relație E/R este modelul neformalizat pentru reprezentarea unui
sistem din lumea reală. Este un model de date conceptual de nivel înalt dezvoltat de Chen
(1976) pentru a facilita proiectarea bazelor de date.
Modelul de date conceptual es te independent de:
tipul SGBD -ului (sistem de gestiune a bazelor de date);
platforma hardware utilizată.
Modelul conceptual este constituit din concepte care descriu:
structura bazei de date;
tranzacții de regăsire si reactualizare asociate.
Mai jos se prezintă principalele elemente necesare realizării unei diagrame E -R.
Entitatea poate reprezenta o persoană, un loc, un concept, o activitate, un
eveniment care este semnificativ pentru ceea ce modelăm.
Observații:
Entitățile devin tabele în modelele relaționale.
În general, entitățile se scriu cu litere mari.
Entitățile sunt substantive, dar nu orice substantiv este o entitate.
Pentru fiecare entitate este obligatoriu să se dea o descriere detaliată.
Nu pot exista, în aceeași diagr amă, două entități cu același nume, sau o
aceeași entitate cu nume diferite.
Cheia primară este un identificator unic în cadrul entității, făcând distincție între
valori diferite ale acesteia.
10
Cheia primară:
trebuie să fie unică și cunoscută la orice mo ment;
trebuie să fie controlată de administratorul bazei;
trebuie să nu conțină informații descriptive, să fie simplă, fără ambiguități;
să fie stabilă;
să fie familiară utilizatorului.
Prin relație (asociere) se înțelege o comunicare între două sau mai m ulte entități.
Existența unei relații este subordonată existenței entităților pe care le leagă. Gradul (tipul)
unei relații este dat de numărul entităților participante la relația respectivă.
Observații :
În modelul relațional, relațiile devin tabele speciale sau coloane speciale care
referă chei primare.
Relațiile sunt verbe, dar nu orice verb este o relație.
Pentru fiecare relație este important să se dea o descriere detaliată.
În aceeași diagramă pot exista relații diferite cu același nume. În acest caz, le
diferențiază entitățile care sunt asociate prin relația respectivă.
Pentru fiecare relație trebuie stabilită cardinalitatea (maximă și minimă)
relației, adică numărul de tupluri ce aparțin relației.
poate (cardinalitate maximă) trebuie ( cardinalitate minimă)
Exemplu:
Câți salariați pot lucra într -un departament? Mulți!
În câte departamente poate lucra un salariat? În cel mult unu!
Relația SALARIAT_lucrează_în_DEPARTAMENT are cardinalitatea maximă
many -one (n:1).
Exemplu:
Câți salariați trebuie să conducă un departament? Cel puțin unul!
Câte departamente trebuie să conducă un salariat? Zero!
Relația SALARIAT_conduce_DEPARTAMENT are cardinalitatea minimă one-
zero (1:0).
Atribut : proprietate descriptivă a unei entități sau a unei relații. Atributele pot fi
simple, compuse, cu valori multiple, derivate.
Observații :
Trebuie făcută distincția între tipul atributului (devine coloană în modelele
relaționale) și valoarea acestuia (devine valoare în coloane).
Atributele sunt substantive, dar nu o rice substantiv este atribut.
11
Fiecărui atribut trebuie să i se dea o descriere completă (exemple,
contraexemple, caracteristici).
Pentru fiecare atribut trebuie specificat numele, tipul fizic ( integer , float, char
etc.), valori posibile, valori implicite, reguli de validare, tipuri compuse.
Pentru proiectarea diagramei entitate -relație au fost stabilite anumite reguli (nu
sunt unice):
1. entitățile sunt reprezentate prin dreptunghiuri;
2. relațiile dintre entități sunt reprezentate prin arce neorientate;
3. atributele care reprezintă chei primare trebuie subliniate sau marcate prin
simbolul „#“, plasat la sfârșitul numelui acestor atribute;
4. cardinalitatea minimă este indicată în paranteze, iar cardinalitatea maximă se
scrie fără paranteze;
5. nu trebuie specific ate toate atributele.
Fig. 1 D
iagrama E/R a
unei baze de
date ce
gestionează
proiectele
departamentelo
r unei instituții
Cazuri
speciale de entități, relații, atribute și modul lor de reprezentare în cadrul diagramei
entitate -relație
1. Entitate dependentă – nu poate exista în mod independent (SARCINA
depinde de PROIECT). Cheia primară a unei entități dependente include cheia primară a
sursei ( nr_proiect ) și cel puțin o descriere a ent ității ( nr_sarcina ). Entitatea dependentă se
desenează prin dreptunghiuri cu linii mai subțiri.
1. Moștenirea atributelor. Subentitate (subclasă) – submulțime a unei alte entități,
numită superentitate (superclasă) (SALARIAT < –– > PROGRAMATOR). Subentitatea
se desenează prin dreptunghiuri incluse în superentitate. Există o relație între o
subentitate și o superentitate, numită ISA, care are cardinalitatea maximă 1:1 și minimă
1:0. Cheile primare, atributele și relațiile unei superentități sunt valabile pentru orice
subentitate. Afirmația reciprocă este falsă.
conduce
lucreaza_in
apartine_la
SALARIAT
cod_salariat
nume
prenume
sex
salariu
PROIECT
nr_proiect
descriere
buget_alocat
DEPARTAMENT
cod_departament
nume
nr_cladire
SARCINA
nr_proiect
nr_sarcina
data_inceperii
stare
atasat_la
data_initiala
functia
1
1
M(0)
1(0)
M
1
M(0)
M(0)
12
2. Generalizare. Din entități similare care au mai multe atribute comune se pot crea
superentități. Aceste superentități conțin atributele comune, iar atributele speciale sunt
asignate la subentități. Pentru noile superentități se introduc chei primare artificiale.
3. Specializare. După valorile unor atribute clasificatoare se pot determina clase . Un
grup de subentități reciproc exclusive definește o clasă. Clasele se aliniază în desen
vertical.
4. Într-o diagramă E/R se pot defini relații recursive.
5. Unele relații sunt relative la două entități și le numim de tip 2, iar dacă relațiile
implică mai mult de două entități, le vom numi de tip 3. Trei relații de tip 2 sunt diferite
de o relație de tip 3. Rupând o relați e de tip 3 în trei relații de tip 2, pot apărea informații
incorecte.
6. Trebuie excluse din model relațiile indirecte deoarece ele pot conduce la
redundanță în baza de date.
7. Atributele derivabile trebuie eliminate și introduse expresii prin care aceste
atribute pot fi calculate.
8. Relație sau atribut? Dacă un atribut al unei entități reprezintă cheia primară a unei
alte entități, atunci el referă o relație ( cod_departament în tabelul SALARIAT).
9. Entitate sau relație? Se cercetează cheia primară,iar dacă aceasta combină cheile
primare a două entități, atunci este vorba de o relație. (cheia primară a relației asociat_la
combină cod_salariat cu nr_proiect , prin urmare, SALARIAT_asociat la_PROIECT va
defini o relație și nu o entitate).
10. Un atribut indirect este inop ortun. El nu descrie real relația sau entitatea. Prin
urmare, atributele indirecte trebuie reasignate. De fapt, un atribut indirect este un caz
special de relație indirectă care trebuie eliminată pentru că introduce redundanță în date
(numărul clădirii în care lucrează un salariat este un atribut al entității DEPARTAMENT
și nu este o caracteristică a entității SALARIAT).
11. Există atribute opționale, a căror valoare este uneori necunoscută, alteori
neaplicabilă. Aceste atribute trebuie introduse la subentităț i (comisionul pentru deplasare
și zona de lucru sunt atribute specifice unui agent teritorial și trebuie introduse la
subentitatea AGENT_TERITORIAL).
2.4 Modelul relațional
Modelul relațional a fost conceput și dezvoltat de E.F. Codd . El este un model
formal de organizare conceptuală a datelor, destinat reprezentării legăturilor dintre date,
bazat pe teoria matematică a relațiilor. Modelul relațional este alcătuit numai din relații și
prin urmare, orice interogare asupra bazei de date este tot o relație.
Calități:
este simplu;
riguros din punct de vedere matematic;
nu este orientat spre sistemul de calcul.
13
Modalități pentru definirea unui SGBD relațional :
prezentarea datelor în tabele supuse anumitor operații de tip proiecție,
selecție, reun iune, compunere, intersecție etc.
un sistem de baze de date ce suportă un limbaj de tip SQL – Structured Query
Language ;
un sistem de baze de date care respectă principiile modelului relațional introdus de
E.F. Codd.
Caracteristicile unui model relațional:
structura relațională a datelor;
operatorii modelului relațional;
regulile de integritate care guvernează folosirea cheilor în model.
Aceste trei elemente corespund celor trei componente ale ingineriei software : informație,
proces, integritate.
Structura datelor
În continuare se definesc noțiunile de domeniu, relație, schemă relațională,
valoare null și tabel vizualizare ( view).
Conceptele utilizate pentru a descrie formal, uzual sau fizic elementele de bază
ale organizării date lor sunt date în următorul tabel:
Formal Uzual Fizic
relație
tuplu
atribut
Domeniu tablou
linie
coloană
tip de dată fișier
înregistrare
câmp
tip de dată
Fig. 2 Tabelul conceptelor elementelor unei baze de date
Domeniu – mulțime de valori care poate fi definită fie enumerând elementele
componente, fie definind o proprietate distinctivă a domeniului valorilor.
Fie D1, D2, …, Dn domenii finite, nu neapărat disjuncte. Produsul cartezian D1
D2 … Dn al domeniilor D1, D2, …, Dn este definit de mulțimea tuplurilor ( V1, V2,
…, Vn), unde V1 D1, V2 D2, …, Vn Dn. Numărul n definește aritatea tuplului .
O relație R pe mulțimile D1, D2, …, Dn este o submulțime a produsului cartezian
D1 D2 … Dn, deci este o mulțime de tupluri.
Caracteristicile unei relații:
14
are o denumire unică;
fiecare celulă conține o valoare atomică;
fiecare atribut are nume unic;
toate valorile unui atribut aparțin aceluiași domeniu;
ordinea atributelor nu are impor tantă;
nu există dubluri ale tuplurilor;
teoretic, ordinea tuplurilor nu are importanță.
Definirea unei relații se referă la mulțimi care variază în timp. Pentru a caracteriza
o relație este necesară existența un element invariant în timp: structura relaț iei (schema
relațională). Mulțimea numelor atributelor corespunzătoare unei relații R definește
schema relațională a relației respective. Vom nota schema relațională prin R(A1, A2, …,
An).
O relație se poate reprezenta printr -un tabel bidimensional în care fiecare linie
corespunde unui tuplu și fiecare coloană corespunde unui domeniu din produsul
cartezian. O coloană corespunde de fapt unui atribut. Numărul atributelor definește
gradul (aritatea) relației, iar numărul de tupluri din relație definește cardinalitatea
relației.
Exemplu (crearea unui tabel în SQL):
CREATE TABLE salariat (
cod_salariat SMALLINT,
nume VARCHAR(25),
prenume VARCHAR(20),
sex CHAR(1),
salariu INTEGER,
sot SMALLINT,
job_cod VARCHAR(6),
cod_departament SMALLINT );
Când se inserează tupluri într -o relație, de multe ori un atribut este necunoscut sau
neaplicabil. Pentru a reprezenta acest atribut a fost introdusă o valoare convenționa lă în
relație, și anume valoarea null.
Multe din echivalențele adevărate în logică cu 2 valori nu mai sunt adevărate în
această logică (3VL). De exemplu comparația x = x nu are in mod necesar valoarea true;
expresia p OR NOT (p) nu are in mod necesar val oarea true; expresia t JOIN t nu este
evaluată neapărat ca fiind egală cu t, deoarece join-ul, spre deosebire de reuniune, se
bazează pe verificarea egalității în „stil de găsire“, nu în „stil de duplicat“.
Se observă că null-urile ruinează modelul relați onal. Logica 3VL nu corespunde
realității, adică rezultatele care sunt corecte conform acestei logici sunt uneori eronate în
15
lumea reală. Modelul relațional a funcționat perfect fără null în perioada 1969 -1979. Este
preferabil (în multe cazuri) utilizarea unor valori speciale pentru a reprezenta informațiile
lipsă. De exemplu, se poate utiliza valoarea specială „?“ pentru a indica numărul de ore
lucrate de un salariat.În SQL, tratarea informatiilor lipsa se bazează substanțial pe logica
3VL.
Tabelul vizual izare (view, filtru, relație virtuală, vedere) constituie un filtru
relativ la unul sau mai multe tabele, care conține numai informația necesară unei anumite
abordări sau aplicații. Consultarea vizualizărilor funcționează perfect.
Vizualizarea este virtu ală deoarece datele pe care le conține nu sunt în realitate
memorate într -o bază de date. Este memorată numai definiția vizualizării. Vizualizarea
nu este definită explicit, ca relațiile de bază, prin mulțimea tuplurilor componente, ci
implicit, pe baza al tor relații prin intermediul unor expresii relaționale. Stabilirea efectivă
a tuplurilor care compun vizualizarea se realizează prin evaluarea expresiei atunci când
utilizatorul se referă la acest tabel.
Exemplu (crearea unei vizualizări în SQL):
CREATE V IEW programator(nume,departament)
AS SELECT nume,cod_departament
FROM salariat
WHERE job_cod=’programator’;
Regulile de integritate reprezintă aserțiuni pe care datele conținute în baza de
date trebuie să le satisfacă.
Trebuie făcută distincția între:
regulile structurale inerente modelării datelor;
regulile de funcționare specifice unei aplicații particulare.
Există trei tipuri de constrângeri structurale (de cheie, de referință, de entitate) ce
constituie mulțimea minimală de reguli de integritate pe care trebuie să le respecte un
SGBD relațional. Restricțiile de integritate minimale sunt definite în raport cu noțiunea
de cheie a unei relații.
O mulțime minimală de atribute ale căror valori identifică unic un tuplu într -o
relație re prezintă o cheie pentru relația respectivă.
Fiecare relație are cel puțin o cheie. Una dintre cheile candidat va fi aleasă pentru
a identifica efectiv tupluri și ea va primi numele de cheie primară . Cheia primară nu
poate fi reactualizată. Atributele care reprezintă cheia primară sunt fie subliniate, fie
urmate de semnul #.
O cheie identifică linii și este diferită de un index care localizează liniile. O cheie
secundară este folosită ca index pentru a accesa tupluri. Un grup de atribute din cadrul
unei re lații care conține o cheie a relației poartă numele de supercheie .
16
Fie schemele relaționale R1(P1, S1) și R2(S1, S2), unde P1 este cheie primară pentru R1,
S1 este cheie secundară pentru R1, iar S1 este cheie primară pentru R2. În acest caz, vom
spune că S1 este cheie externă (cheie străină) pentru R1.
Modelul relațional respectă trei reguli de integritate structurală.
Regula 1 – unicitatea cheii. Cheia primară trebuie să fie unică și minimală.
Regula 2 – integritatea entității. Atributele cheii primare trebuie să fie diferite de
valoarea null.
Regula 3 – integritatea referirii. O cheie externă trebuie să fie ori null în
întregime, ori să corespundă unei valori a cheii primare asociate.
2.5 Proiectarea modelului relațional – Transformarea entităților
Entitățile independente devin tabele independente . Cheia primară nu conține
chei externe.
Entitățile dependente devin tabele dependente . Cheia primară a entităților
dependente conține cheia primară a entită ții de care depinde (cheie externă) plus unul sau
mai multe atribute adiționale.
Subentitățile devin subtabele . Cheia externă se referă la supertabel, iar cheia
primară este această cheie externă (cheia primară a subentității PROGRAMATOR este
cod_salariat care este o cheie externă).
2.6 Transformarea relațiilor
Relațiile 1:1 și 1: n devin chei externe. Relația conduce devine coloană în
tabelul DEPARTAMENT, iar relația lucreaza_in devine coloană în tabelul SALARIAT.
Simbolul „ “ indică plasamentul cheii externe, iar simbolul „ “ exprimă faptul că această
cheie externă este conținută în cheia primară. Relația 1:1 plasează cheia externă în tabelul
cu mai puține linii.
Relația m:n devine un tabel special, numit tabel asociativ , care are două chei
externe pentru cele două tabele asociate. Cheia primară este compunerea acestor două
chei externe plus eventuale coloane adiționale. Tabelul se desenează punctat.
Relațiile de tip trei devin tabele asociative. Cheia primară este compunerea a
trei chei externe plus eventuale coloane adiționale.
Transformarea atributelor
Un atribut singular devine o coloană.
Atributele multiple devin tabele dependendente ce conțin cheia primară a
entității și atributul multiplu. Cheia primară este o cheie externă, plus una sau mai multe
coloane adiționale.
Entitățile devin tabele, iar atributele lor devin coloane în aceste tabele. Ce
devin atributele relațiilor? Pentru relații 1:1 și 1: n, atributele relațiilor vor aparține
tabelului care conține c heia externă, iar pentru relații m:n și de tipul trei, atributele vor fi
plasate în tabelele asociative.
17
Fig. 3 Diagrama Entitate -Relație a bazei de date book_sc ce gestionează o
librărie electronică
2.7 Normalizarea relațiilor
În procesul modelării unei baze de date relaționale, o etapă importantă o reprezintă
normalizarea relațiilor conceptuale (Codd, 1972), adică obținerea de relații
„moleculare“fără a pierde nimic din informație pentru a elimina:
redundanța;
anomal iile reactualizării informațiilor.
Tehnica normalizării permite obținerea unei scheme conceptuale rafinate printr -un
proces de ameliorare progresivă a unei scheme conceptuale inițiale a bazei de date
relaționale. După fiecare etapă de ameliorare , relațiile bazei de date ating un anumit grad
de perfecțiune, deci se află într -o anumită formă normală. Trecerea unei relații dintr -o
formă normală în alta, presupune eliminarea unei anumit tip de dependențe nedorite, care
sunt transformate în dependențe admisibile, adică dependențe care nu provoacă anomalii.
Procesul de ameliorare a schemei conceptuale trebuie :
18
să garanteze conservarea datelor , adică în schema conceptuală finală trebuie să
figureze toate datele din cadrul schemei inițiale;
să garanteze conservarea dependențelor dintre date, adică în schema finală fiecare
dependență trebuie să aibă determinantul și determinatul în schema aceleiași relații;
să reprezinte o descompunere minimală a relațiilor inițiale, adică nici una din
relațiile care comp un schema finală nu trebuie să fie conținută într -o altă relație din
această schemă.
Există două metode pentru a modela baze de date relaționale fără anomalii sau
pierderi de informație.
Schema descompunerii pleacă de la o schemă relațională universală ce conține
toate atributele BD. Schema se descompune prin proiecții succesive în subrelații.
Descompunerea se oprește când continuarea ei ar duce la pierderi de informație.
Algoritmii de descompunere se bazează , în general, pe descrierea formală a dependenței
dintre atribute.
Schema sintezei pleacă de la o mulțime de atribute independente. Utilizând
proprietăți de semantică și legături între atribute se pot compune noi relații, astfel încât,
acestea să nu sufere de anumite anomalii. Algoritmii se bazează, în general, pe teoria
grafurilor pentru a reprezenta legătura între atribute.
2.8 Dependențe funcționale
O relație universală este o relație ce grupează toate atributele care modelează
sistemul real cercet at. Fie E, mulțimea dependențelor considerate de proiectantul bazei
pentru o schemă relațională sau pentru o relație universală. Plecând de la o mulțime de
proprietăți formale ale dependențelor, proprietăți considerate drept reguli de deducție
(axiome), po ate fi obținută mulțimea maximală de dependențe asociate lui E. Această
mulțime definește închiderea lui E.
Fie E mulțimea dependențelor unei relații și p1, p2, …, pr, r 1, proprietăți formale
ale acestor dependențe. Dacă există o mulțime E, astfel încât orice dependență a mulțimii
E este derivabilă din E prin aplicarea proprietăților p1, p2, …, pr, atunci mulțimea E
definește acoperirea lui E pentru proprietățile p1, p2, …, pr.
E este o acoperire minimală pentru E, dacă nu există n ici o submulțime proprie,
nevidă a lui E care să fie o acoperire pentru E. Evident, E și E au închideri identice,
deci dispun de același potențial informațional.
Fie R(A1, A2, …, An) o schemă relațională și fie X, Y submulțimi de atribute ale
lui R. X determină funcțional Y sau Y depinde funcțional (FD) de X, dacă pentru orice
relație r (valoare curentă a lui R) nu există două tupluri care să aibă aceleași valori pentru
atributele lui X și să aibă valori diferite pentru cel puțin un atribut din Y. Cu a lte cuvinte,
o valoare a lui X, determină unic o valoare a lui Y.
19
Notația utilizată pentru desemnarea dependenței funcționale este X Y. X este
numit determinant, iar Y este numit determinat (sau dependent). Dependența
funcțională X Y este trivială dacă Y X.
Comparând toate submulțimile de atribute ale unei relații și determinând
legăturile dintre ele, se pot obține toate dependențele funcționale pe care o relație le
satisface. Această abordare nu este eficientă, consumând mult timp.
Există posibilitatea ca, știind anumite dependențe funcționale și utilizând reguli de
deducție, să fie obținute toate dependențele funcționale.
Fie X, Y, Z, W mulțimi de atribute ale unei scheme relaționale R și fie următoarele
axiome:
Ax1 – reflexivitate. X X. Mai general, dacă Y X, atunci X Y.
Ax2 – creșterea determinantului. Pot fi considerate următoarele formulări echivalente
pentru această axiomă.
1. Dacă X Y și X Z, atunci Z Y.
2. Dacă X Y și W Z, atunci X Z Y W.
3. Dacă X Y atunci X Z Y Z.
4. Dacă X Y atunci X Z Y.
Ax3 – tranzitivitate. Dacă X Y și Y Z, atunci X Z.
O mulțime de axiome este completă dacă și numai dacă plecând de la o mulțime
de dependențe E se pot obține toate dependențele închiderii lui E, utilizând axiomele
mulțimii.
O mulțime de axiome este închisă dacă și numai dacă plecând de la o mulțime de
dependențe E, nu poate fi dedusă cu ajutorul axiomelor o dependență care nu aparține
închiderii lui E. (nu obțin altele).
Ullman a demonstrat că axiomele Ax1 – Ax3, numite axiomele lui Amstrong,
reprezintă o mulțime închisă și completă de axiome. Consecința acestui rezultat este că
închiderea lui E reprezintă mulțimea dependențelor deduse din E, prin aplicarea
axiomelor lui Amstrong.
Nu toate dependențele funcționale sunt folositoare pentru modelarea relațională.
O dependență funcțională X Y se numește dependență funcțională totală (FT), dacă
și numai dacă nu există nici o submulțime proprie X X, astfel încât X Y. Dacă
există o submulțime proprie X X, astfel încât X Y, atunci dependența funcțională X
Y este parțială . În axioma Ax2, dependența Z Y este o dependență funcțională
parțială.
În cazul dependenței funcționale totale, axiomele lui Amstrong se re duc la o
axiomă unică și anume pseudo -tranzitivitatea:
dacă X Y și W Y Z, atunci W X Z.
Această axiomă este o regulă de deducție completă pentru total dependențe:
20
pseudo -tranzitivitatea implică tranzitivitatea ( W = );
reflexivitatea nu poate fi utilizată pentru a obține dependențe totale;
reflexivitatea și pseudo -tranzitivitatea implică creșterea.
Dacă F este o mulțime de dependențe funcționale totale, atunci închiderea
pseudo -tranzitivă F+ a acestei mulțimi este reuniunea mulțimilor dependenț elor
funcționale totale care pot fi obținute din F folosind axioma de pseudo -tranzitivitate.
Două mulțimi de dependențe funcționale totale sunt echivalente dacă au închideri
pseudo -tranzitive identice. Pentru a modela scheme relaționale se consideră mulț imi
minimale de dependențe funcționale totale, capabile să genereze toate închiderile pseudo –
tranzitive. Aceste mulțimi definesc acoperiri minimale.
O mulțime de dependențe funcționale totale F* asociată unei mulțimi de atribute
A definește o acoperire mi nimală dacă satisface următoarele proprietăți:
nici o dependență funcțională din F* nu este redundantă;
toate dependențele funcționale totale între submulțimi ale lui A sunt în
închiderea pseudo -tranzitivă a lui F*.
Orice mulțime de dependențe totale are cel puțin o acoperire minimală. Alegerea
acoperirii minimale este punctul de start în modelarea schemelor relaționale.
Dependențele funcționale între atributele bazei pot fi reprezentate grafic. Fie A =
{A1, A2, …, An} o mulțime de atribute și fie o mulțime de dependențe funcționale { Xi
Aj}, unde Xi este o submulțime a lui A.
Graful dependențelor funcționale este un graf direcționat bipartit, definit astfel:
1. pentru fiecare atribut Aj există un singur nod având et icheta Aj;
2. pentru fiecare dependență funcțională de forma Ai Aj, există un arc de la
Ai la Aj;
3. pentru fiecare dependență funcțională de forma Xi Aj, unde mulțimea Xi
este definită de Xi = {Ai1, …, Aip} cu p > 1, există un nod auxiliar etichetat
prin Xi și o mulțime de arce plecând de la Ai1, …, Aip pentru a obține pe Xi și
printr -un arc adițional de la Xi la Aj. Nodurile Xi se reprezintă prin
dreptunghiuri.
2.9 Forma normală (FN1)
O relație este în prima formă normală dacă fiecărui atribut care o compune îi
corespunde o valoare indivizibilă (atomică).
Exemplu: variante pentru a implementa FN1 pentru tabelul MASINA:
Persoana Vehicul
21
Eu R25 – W14 – R21
Tu 205
El R5 – 305
noi BX – 305 – R12 – R25
Varianta 1
Persoana Vehicul
Eu R25
Eu W14
Eu R21
Tu 205
El R5
El 305
Noi BX
Noi 305
Noi R12
Noi R25
Varianta 2
Persoana Prima Doi Trei Patru
Eu R25 W14 R21
Tu 205
El R5 305
Noi BX 305 R12 R25
Varianta 3 (4 tabele)
Masina 31 (similar se definesc Masina_32, Masina_33, Masina_34)..
Persoana Vehicul
Eu R25
Tu 205
El R5
Noi BX
Masina_34
Persoana Vehicul
22
Noi R25
Fig. 4 Forma normala 1 pentru tabelul MASINA
2.10 Forma normală 2 (FN2)
O relație R este în a doua formă normală dacă și numai dacă:
relația R este în FN1;
fiecare atribut care nu este cheie (nu participă la cheia primară) este
dependent de întreaga cheie primară.
atasat_la
Cod_salariat# Job_cod Nr_proiect# Functia Suma
S1 Programator P1 Supervizor 60
S1 Programator P2 Cercetator 25
S1 Programator P3 Auxiliar 10
S3 V vanzator P3 Supervizor 60
S5 In inginer P3 Supervizor 60
atasat_2a
C
cod_salariat# Nr _proiect# Fufunctia Suma
S1 P1 Supervizor 60
S1 P2 Cercetator 25
S1 P3 A auxiliar 10
S3 P3 Supervizor 60
S5 P3 Supervizor 60
atasat_2b
cod_salariat# Job_cod
S1 Pr
programator
S3 V vanzator
S5 Inginer
Fig. 5 Forma normală 2
A doua condiție exprimă necesitatea totală a dependenței de cheia primară.
Această formă normală interzice manifestarea unor dependențe funcționale parțiale în
cadrul relației R.
Pentru a obține o relație FN2 se poate aplica regula Casey -Delobel. Fie relația
R(K1, K2, X, Y), unde K1 și K2 definesc cheia primară, iar X și Y sunt mulțimi de atribute,
23
astfel încât K1 X. Din cauza dependenței funcționale K1 X care arată că R nu este în
FN2, se înlocuiește R (fără pierdere de informație) prin două proiecții R1(K1, K2, Y) și
R2(K1, X). K1 K2
X
Y
Fig. 6 Regula Casey -Delobel pentru FN2
2.11 Forma normală 3 (FN3)
Intuitiv , o relație R este în a treia formă normală dacă și numai dacă:
relația R este în FN2;
fiecare atribut care nu este cheie (nu participă la o cheie) depinde direct de
cheia primară.
Fie R o relație, X o submulțime de atribute ale lui R și A un atribut al relației R. A este
dependent tranzitiv de X dacă există Y astfel încât X Y și Y A (A nu aparține lui Y
și Y nu determină pe X). X nu este dependent funcțional de Y sau A!
De exemplu, dacă K1, K2, K3 A1 și dacă K1, K2, A1 A2, atunci K1, K2, K3 K1,
K2, A1 și K1, K2, A1 A2. Prin urmare, A2 este dependent tranzitiv de K1, K2, K3.
Formal , o relație R este în a treia formă normală dacă și numai dacă:
relația R este în FN2;
fiecare atribut care nu este cheie (nu participă la o cheie) nu este dependent
tranzitiv de nici o cheie a lui R.
O rela ție este în FN3 dacă și numai dacă fiecare atribut (coloană) care nu este
cheie, depinde de cheie, de întreaga cheie și numai de cheie.
Pentru a obține o relație FN3 se poate aplica regula Casey -Delobel.
Fie relația R(K, X1, X2, X3), unde atributul X2 depinde tranzitiv de K, iar K este
cheia primară a lui R. Presupunem că K X1 X2. Din cauza dependenței funcționale
X1 X2 care arată că R nu este în FN3, se înlocuiește R (fără pierdere de informație)
prin două proiecții R1(K, X1, X3) și R2(X1, X2).
Exemplu: Tabelul atasat_2a nu este in FN3.
atasat_3a
Cod_salariat# Nr_proiect# Functia
S1 P1 Supervizor
S1 P2 Cercetator
24
S1 P3 Auxiliar
S3 P3 Supervizor
S5 P3 Supervizor
atasat_3b
Functia Suma
Supervizor 60
Cercetator 25
Auxiliar 10
Fig. 7 Forma normala 2
Schema de sinteză pentru obținerea lui FN3
Algoritmul de sinteză construiește o acoperire minimală F a dependențelor
funcționale totale. Se elimină atributele și dependențele funcționale redundante.
Mulțimea F este partiționată în grupuri Fi, astfel încât în fiecare grup Fi sunt dependențe
funcționale care au același membru stâng și nu există două grupuri având același membru
stâng. Fiecare grup Fi produce o schemă FN3. Algoritmul realizează o descompunere ce
conservă dependențele.
3. ASPECTE TEHNOLOGICE
3.1 Tehnologii bazate pe…
3.2 Descrierea mediilor de programare și a softwarelor utilizate
Sistemul informatic de gestiune a fost realizat folosind limbajele : HTML, PHP
v5.2.8, MySQL 5.1.30,CSS (Cascading Style Sheets), Apache HTTPD 2.2.11. Aceste
tehnologii au avantajul ca sunt ușor de utilizat și gestionat, respectiv sunt gratuite și,
astfel, nu necesită un cost suplimentar nici pentru achiziționarea produsul ui, nici ulterior
pentru achiziționarea unei licențe de către companiile comerciale.
Toate aceste aplicații sunt conținute de catre mediul de programare XAMPP.
3.3 Limbajul HTML
Origini
Unul din primele elemente, fundamentale de altfel, ale WWW (World Wide Web)
este HTML ( HyperText Markup Language ) , standard ce descrie formatul primar în
care documentele sunt distribuite și văzute pe Web. Multe din trăsăturile lui, cum ar fi
independenț a fața de platformă, structurarea formatării și legăturile hipertext, fac din el
un foarte bun format pentru documentele Internet și Web. Primele specificații de bază ale
Web -ului au fost HTML, HTTP și URL.
25
Menire si semnificatii
HTML a fost dezvoltat inițial de Tim Berners -Lee la CERN in 1989. HTML este
un limbaj bazat pe SGML (Standard Generalized Markup Language), o așa -numită
aplicație a acestuia. SGML este un standard internațional (ISO -8879) aprobat în 1982.
HTML a fost inițial văzut ca o posibili tate pentru fizicienii care utilizează computere
diferite să schimbe între ei informație prin mijlocirea Internetului. Erau prin urmare
necesare câteva condiții esențiale: independența de platformă, posibilitați hipertext și
structurarea documentelor. Inde pendența de platformă semnifică faptul că un document
poate fi afișat în mod asemănator (sau aproape identic) de computere diferite (deci cu
font, grafică și culori aidoma), lucru vital pentru o audientă numeroasă și extrem de
variată. Hipertext se traduce prin faptul că orice cuvânt, frază, imagine sau element al
documentului văzut de un utilizator (client) poate face referintă la un alt document sau
chiar la paragrafe din interiorul aceluiasi document, ceea ce ușurează mult navigarea între
parțile compone nte ale unui document sau între multiple documente. Structurarea
riguroasă a documentelor permite convertirea acestora dintr -un format în altul precum și
interogarea unor baze de date înglobând aceste documente.
Standardizarea
Standardul oficial HTML es te dat de World Wide Web Consortium (W3C), care
este afiliat la Internet Engineering Task Force (IETF). W3C a enunțat câteva versiuni ale
specificației HTML, printre care și HTML 2.0, HTML 3.0, HTML 3.2, HTML 4.0 și, cel
mai recent, HTML 4.01. În același t imp, autorii de browsere cum ar fi Netscape și
Microsoft, au dezvoltat adesea propriile "extensii" HTML în afara procesului standard și
le-au încorporat în browserele lor. În unele cazuri (cum ar fi tagul Netscape), aceste
extensii au devenit standarde de facto adoptate de autorii de browsere. Când navigatorul
încarcă un document HTML, el "citeste" documentul în cautarea tag -urilor HTML,
formatează textul și imaginea și le afisează pe ecran. Este motivul pentru care acelasi
document HTML apare ușor diferit când este privit utilizând navigatoare diferite.
3.4 Fundamente
Orice document HTML începe cu notația <html> și se termină cu notația </html>.
Astfel de perechi de marcaje sau etichete (acolo unde sunt perechi) se numesc în
literatura de specialitate TAG -uri. Prin convenție, toate marcajele HTML încep cu o
paranteză unghiulară deschisă " <" și se termină cu o paranteză unghiulară inchisă " >".
Marcajele dintre aceste paranteze transmit comenzi către browser pentru a afisa pagina
intr-un anumit mod. Unele blocuri prezintă delimitator de sfârsit de bloc, in timp ce
pentru alte blocuri acest delimitator este opțional sau chiar interzis.
Între cele două marcaje <html> și </html> vom introduce două secțiuni:
secțiunea de antet: <head>…</head>
corpul documentului: <body>…</body>
Blocul <body>…</body> cuprinde conținutul propriu -zis al paginii HTML, adică ceea ce
va fi afișat în ferastra browser -ului. Un marcaj poate fi scris atât cu litere mici, cât și cu
litere mari. De exemplu <BODY> = <BodY> = <body> . Caracterele "spațiu" și "CR/LF"
ce apar între taguri sunt ignorate de catre browser.
Un prim document HTML ar fi ceva de genul acesta:
26
<html>
<head> </head>
<body> </body>
</html>
Adăugarea primelor elemente de text
În primul rând, titlul unei p agini se obține inserând în secțiunea <head>…</head>
următoarea linie:
<title>Aceasta este titlul unei pagini de Web</title>
În plus, în secțiunea <body>…</body> putem scrie texte cât dorim. Dacă nu întalnim nici
un marcaj "<" sau ">", atunci interpret orul HTML le va lua ca texte simple și le va afișa
pe ecran. Să vedem o nouă versiune a paginii noastre:
<html>
<head>
<title>Aceasta este prima mea pagina de Web</title>
</head>
<body>
Bine ati venit in pagina mea de Web!
</body>
</html>
Conținutul bloc ului <title>…</title> va apărea în bara de titlu a ferestrei browser –
ului. Dacă acest bloc lipsește intr -o pagină HTML, atunci în bara de titlu a ferestrei
browser -ului va apărea numele fișierului.
Trecerea pe o linie nouă – se face în HTML cu o comandă explicită, care trebuie
să apară în codul sursa html. Această comandă este marcajul <br> (de la "line break" –
întrerupere de linie). Folosind aceleași operații ca mai sus, vizualizați noua pagină. Veți
vedea textul ce apare în fereastra browserului. În p lus, pagina dvs. va avea un titlu nou,
cel introdus de dvs.. Ex.:
<html>
<head>
<title> titlul paginii</title>
</head>
<body> Bine ati venit in <br> pagina mea de Web!
</body>
</html>
Culoarea de fond
O culoare poate fi precizată în două moduri:
1. Printr -un nume de culoare. Sunt disponibile cel puțin 16 nume de culori: aqua,
black, fuchsia, gray, green lime, maroon, navy, olive, purple, red, silver, teal,
white și yellow.
2. Prin construcția "#RRGGBB" unde R(red), G(green), sau B(blue) sunt cifre
hexaz ecimale și pot lua valorile: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, A, b, B, c, C, d, D, e,
E, f, F; se pot defini astfel 65536 de culori.
27
Culoarea fundalului unei pagini se precizează prin intermediul unui atribut al
tagului BODY. mai exact cu atributul "bgcol or" din cadrul etichetei <body>. De
exemplu: <body bgcolor = culoare>.
Culoarea textului
Acest lucru se setează prin intermediul atributului "text" al tagului BODY, după
sintaxa <body text=culoare>. În urmatorul exemplu textul are culorea rosie:
<html>
<head>
<title>culoarea textului </title>
</head>
<body text=red>
Un text de culoare rosie.
</body>
</html>
O etichetă poate avea mai multe atribute. De exemplu, o etichetă cu trei atribute
arată astfel: <eticheta atribut1 = valoare1 atribut2 = valoare2 a tribut3 = valoare3>.
Urmatorul exemplu prezintă o pagină cu fondul de culoare albastră și textul de culoare
galbenă:
<html>
<head>
<title>atribute multiple </title>
</head>
<body bgcolor=blue text=yellow>
Fond de culoare albastra si text de culoare galbe na.
</body>
</html>
Textul afișat este caracterizat de urmatoarele atribute: Marime (font size) – aici
implicită, Culoare (font color) – aici implicită, Font (font family) – aici implicit.
Poziționarea conținutului paginii Web față de marginile ferestrei browserului se
poate face cu ajutorul a două atribute ale etichetei <body>:
1. "Leftmargin" (stabileste distanța dintre marginea stangă a ferestrei browserului și
marginea stangă a conținutului paginii)
2. "Topmargin" (stabileste distanța dintre margin ea de sus a ferestrei browserului și
marginea de sus a conținutului paginii)
<html>
<head>
<title>Configurarea textului si stabilirea marginii </title>
</head>
<body leftmargin="100" topmargin="50">
Textul are atribute implicite. <br><basefont style="Arial " color="blue" size="6">
28
Textul este scris cu fontul "Arial", culoare albastru si marime 2. </body>
</html>
3.5 CSS (Cascading Style Sheets)
CSS, prescurtarea de la Cascading Style Sheets , sunt etichete folosite pentru
formatarea paginilor web (de exemplu formatare text, background sau aranjare în pagină,
etc.).
Beneficiile sintaxei CSS sunt:
formatarea este introdusă intr -un singur loc pentru tot documentul
editarea rapidă a etichetelor
datorită introducerii într -un singur loc a etichetelor se obține o micșorare a
codului paginii, implicit încarcarea mai rapidă a acesteia
Sintaxa CSS este structurată pe trei nivele:
nivelul 1 fiind proprietațile etichetelor din documentul HTML, tip inline
nivelul 2 este informația introdusă în blocul HEAD, tip embedded
nivelul 3 este reprezentat de comenzile aflate în pagini separate, tip externe
Cea mai mare importanță (suprascrie orice alt parametru) o are sintaxă de nivelul
1 iar cea mai mică importanță o are cea de nivelul 3.
Folosirea unui fișier extern sau nivel 3 care să conțină comenzi CSS este foarte
practic deoarece poate fi utilizat în mai multe situații (mai multe fisiere HTML pot folosi
același fișier extern CSS) eliminând timpul necesar introducerii codului corespunzator în
fiecare pagină și totodată editar ea lor intr -un singur loc pentru mai multe fișiere.
Extensia acestor fișiere este .css.
Legătura paginilor HTML cu fișierele externe CSS se face prin introducerea
urmatoarei linii:
<link rel="stylesheet" type="text/css" href="fisier_css.css">
Atributele indică urmatoarele:
rel – fișierul este tip stylesheet
type – tip text ce conține comenzi CSS
href – fișierul sau adresa fișierului CSS.
3.6 Instalarea pachetului de programe xampp (utilizat in cazul aplicației)
Înainte de a prezenta limbajul PHP și MySQL, se va descrie modul de instalre a
serverului Apache și aplicația phpMyAdmin. În continuare se prezintă un mic ghid de
instalare a acestui pachet de programe.
29
3.7 Instalare și setare
Acest pachet nu necesită d ecât o instalare simplă (ca a oricărui program) și îl puteți
descărca de la adresa: http://www.apachefriends.org/en/xampp.html
După descărcarea pachetului XAMPP, acesta se execută pentru a porni in stalarea.
Se alege limba “English”.
Fig. 8 Selectarea limbii în vederea instalării pachetului XAMPP
În urmatoarea fereastra, după o serie de “ Next > ”, “Next > ”, se bifează opțiunile
“Install Apache as service” și “Install MySQL as service” pentru că atât serverul
Apache cât și cel de MySQL să pornească odată cu Windows -ul.
S
e
acce
seaz
ă “Install” și procesul de instalare sa se încheie. pentru a termina instalarea se apasă
buton
ul
“Fini
sh” .
30
Fig. 9 FFig. 9 Finalizarea instalării pachetului XAMPP
Se va observa un
mesaj prin care se întreabă
dacă se dorește lansarea
panoului de control ; se
alege “Yes”.
Fig. 10 Fereas
tra de vizualizare a rulării serverului și aplicației
Se observă că în dreptul serverului Apache apare un text cu verde pe care scrie
“Running” (Ruleaza), la fel și in dreptul serverului MySQL.
Dacă dintr -un oarecare motiv, unul din servere nu a pornit, veti observa că în acel
loc nu este afișat nicio informație, precum urmează în poza de mai jos. Dacă totuș i se
întâmplă ca unul din servere să se manifeste așa, apasați pe butonul “Start” din dreptul
fiecăruia.
Precizez faptul că versiunea de XAMPP 1.2.3a și folosește următoarele versiuni:
Apache HTTPD 2.2.4
MySQL 5.0.45
PHP 5.2.3
phpMyAdmin 2.10.3
31
După finalizarea instalarii pachetului, cele trei servicii și anume, Serverul Apache,
PHP și MySQL ( phpmyadmin ) sunt gata de rulare.
Testarea instalării Web Server + PHP
Se poate realiza cu ajutorul unui browser web, unde pe câmpul adresei url ta stați
http://localhost . Dacă apare pagina de inceput a pachetului de programe xampp, atunci
totul este instalat și merge corespunzător.
2.4 Limbajul PHP
Ce este PHP ?
PHP este abrevierea de la PHP – Hypertext Preprocessor (similar cu GNU ce
reprezintă abrevierea de la GNU‟s Not Unix).
PHP este un limbaj de programare pentru creerea site –urilor dinamice și interactive și a
fost introdus de Rasmus Lerdorf în 1994. De atunci PHP a suferit numeroase schimbări.
În termeni tehnici PHP5 este un limbaj tip script, cross platform, HTML embedded si
server side.
Cross platform – puteți rula PHP pe sisteme de operare diferite, în majoritatea
cazurilor fară modificări.
HTML embedded – codul PHP este o mixtură de instrucțiuni PHP și cod HTML.
Server side – programele scrise în PHP rulează pe un server (în general un Web
Server cum ar fi Apache, IIS, etc..).
PHP5 este ultima implementare stabilă de PHP și ea rulează pe serverele unui
număr ma re de ISP, ceea ce înseamnă că odată ce scrieți o aplicație în PHP5, o puteți cu
ușurință găzdui pe Web.
3.8 Scrierea programelor PHP
Programele PHP sunt o mixtură de trei elemente : text, cod HTML și script PHP.
Pentru ca paginile ce conțin script PHP să poată fi procesate de modulul PHP
implementat în Apache sau alt server de pagini Web este necesar ca paginile sa aibă acea
extensie pe care ați specificat -o la încarcarea modulului în serverul de web (standard,
extensia implicită este .php).
Funcționarea codului php
Fișierul test.php este trimis modulului de php încarcat în serverul de web. Modulul
prelucrează NUMAI ce se află între tagurile <?php și ?> restul fiind trimis către serverul
web fără a fi prelucrat sau interpretat. Rezultatul prelucrar ii este și el trimis serverului de
web care trimite mai departe către client (browser).
32
Comanda echo este folosită pentru trimiterea către serverul de web a textului
înscris între cele două ghilimele.
Fiecare linie de cod PHP (dupa terminare) trebuie înc hisă de semnul punct – și-
virgulă (;).
Prezentarea limbajului
Variabila reprezintă un identificator la o locație de memorie și se folosește pentru
stocarea, prelucrarea și ștergerea datelor.
Variabilele în PHP sunt apelate folosind prefixul „$‟.
Ex: $num e=“Raducan Adrian” ;
Dupa ce s -a inițializat o variabilă atribuindu -i o valoare putem folosi acea
variabilă.
Ex: print $nume;
Rezultatul afisat va fi:” Raducan Adrian”
3.9 Limitari și reguli ale variabilelor
În multe limbaje de programare există o limitare a numarului de caractere din
numele variabilei (între 255 -1000 caractere).
În PHP nu există astfel de limitari. O regulă a variabilelor este că ele trebuie să
înceapă cu o literă sau cu un underscore (dupa prefixul „$‟).
O altă regulă este ca în corpul numelui variabilei sunt acceptate litere, numere și
underscore, simboluri precum +,-,* și & nefiind admise.
Variabilele în PHP sunt case -sensitive, adică $student este diferit de $Student
3.10 Tipuri de date in PHP
PHP cuprinde mai multe tipuri de variabile, dintre care cele mai importante sunt
cele ce conțin valori de tip text și numeric.
string (text)
integer (numeric)
double (numeric)
array
object
Tipurile de date nu sunt stabilite de programator; PHP decide asupra lor atunci
când interpretează codul.
Tipul de data string – tot ce este cuprins între ghilimele la inițializare se
consideră string (chiar și numerele).
33
Ex:$nume=”Adrian”;
$nr=”11”;
Date de tip numeric – în PHP există 2 tipuri de date numerice : integer și double .
Integer sunt numere fără virgulă
double reprezintă numere cu zecimale.
Array – tipul de date array reprezintă matricele
Object – reprezintă datele de tip obiect
Constante – o variabilă iși poate modifica conținutul de mai multe ori pe
parcursul unui pro gram. Dacă dorim ca o locație de memorie să nu poată fi schimbată pe
parcursul unui program putem folosi instrucțiunea define.
Ex: define(“PI”,”3.1416”);
Constantele sunt scrise prin convenție cu MAJUSCULE, iar la afișare trebuie să
aveți grijă sa nu folos iți semnul $.
3.11 Sistemul de baze de date MySQL
De ce MySQL?
Există mai multe opțiuni de a alege sisteme gratuite sau necostisitoare de gestiune
a bazelor de date: MySQL, mSQL, Postgres, unul din motoarele gratuite (dar fără suport)
furnizate de producătorii comerciali și așa mai departe. Pentru compararea MySQL cu
alte sisteme de baze de date, se are în vedere ceea ce este cel mai important pentru scopul
final : performanță, suport, caracteristici (conformantă cu SQL, extensii etc.), condiții si
restricții de licențiere, preț. Date fiind aceste considerații, MySQL are de oferit
numeroase caract eristici atractive:
Viteză. MySQL este rapid. Programatorii pretind că MySQL este cel mai rapid
sistem de baze de date pe care îl puteți găsi. Puteți verifica această afirmație vizitând
http://www.mysql.c om/benchmark.html , o pagină de comparație a performanțelor.
Ușurință în utilizare. MySQL este un sistem de baze de date cu performanțe
ridicate, dar relativ simplu, a cărui configurare și administrare sunt mult mai simple
decât în cazul sistemelor mai mari.
Cost zero. MySQL este gratuit pentru majoritatea utilizărilor interne.
MySQL nu este un pro dus Open Source, dar, în general, poate fi folosit gratuit. Trebuie
să consultați manualul de referință MySQL pentru detalii privind licența, dar principiile
de bază sunt următoarele:
Programele client și biblioteca de programare a clienților sunt gratuite , pe
toate plat formele.
Pentru UNIX si alte platforme non -Windows, serverul MySQL poate fi
folosit gra tuit, cu excepția situațiilor când doriți să vindeți serverul sau alte
programe sau servicii care impun utilizarea acestuia, în această situație, trebui e
34
să obțineți licență pentru server. Ideea este că, dacă obțineți un profit din
MySQL, este normal ca dezvoltatorii sistemului să primească o parte din acesta.
(200 de dolari este o nimica toată pentru un specialist SGBDR care vă ajută să
obțineți un profi t și există o mulțime de programe gratuite pe care vi le puteți
procura pentru a folosi eficient sistemul.)
Versiunea Windows a serverului MySQL impune obținerea unei licențe.
Versiunile mai vechi de MySQL sunt disponibile în condițiile licenței
publice GN U (GPL) și pot fi folosite în orice scopuri, fără nici o plată. MySQL
3.20.32a este disponibil în condițiile GPL.
Suport pentru limbaje de interogare. MySQL înțelege SQL (Structured Query
Language – limbaj de interogare structurat), limbajul preferat al tu turor sistemelor
moderne de baze de date. De asemenea, puteți avea acces la MySQL folosind aplicații
care acceptă ODBC (Open Database Connectivity), un protocol de comunicație cu bazele
de date creat de Microsoft.
La server se pot conecta mai mulți clienț i simultan. Clienții pot folosi mai
multe baze de date simultan. Puteți obține acces la MySQL în mod interactiv, folosind
numeroase interfețe care vă permit să introduceți interogări și să vizualizați rezultate:
clienți în linie de comandă, browsere Web sa u clienți X Window System. De asemenea,
este disponibilă o varietate de interfețe de programare pentru limbaje pre cum C, Perl,
Java, PHP și Python. Astfel, aveți opțiunea de a folosi programe client preambalate sau
de a vă scrie propriile programe client pentru aplicații personalizate.
Conectivitate și securitate. MySQL poate fi folosit integral în rețele, iar bazele
de date sunt accesibile de oriunde din Internet, deci vă puteți partaja datele cu oricine,
oriunde. Dar MySQL are controlul accesului, astfel încât persoanele care nu au drep tul să
vă citească datele nu vor avea această posibilitate.
Portabilitate. MySQL rulează pe numeroase varietăți de UNIX, precum și pe alt e
sisteme non -UNIX, ca Windows și OS/2. MySQL rulează pe echipamente de la calcu –
latoare de birou la servere cu performanțe ridicate.
Distribuție liberă. MySQL este ușor de obținut; pentru aceasta, folosiți -vă
browserul de Web. Dacă nu înțelegeți funcțion area unei componente sau sunteți curios cu
privire la un algoritm, vă puteți procura codul sursă si îl puteți examina. Dacă nu vă place
modul de funcționare a unei componente, îl puteți modifica.
3.12 Serverul Apache
Apache este un web server open -source pen tru UNIX, Windows 2000 ori alte
platforme. Apache a devenit în prezent cel mai popular și des folosit Web server, datorită
caracteristicilor puternice și a perfomanțelor excepționale. Deoarece codul sursă Apache
35
și documentația pentru Apache sunt gratuite, serverul poate fi setat pentru sarcini
specifice.
Pentru apelarea serverului local printr -un browser, trebuie să introducem adresa
url al “Document root” care este http://localhost .
În cazul de față, serverul local Apache are setată ca document root adresa:
F:\Program Files \xampp \htdocs \aplicatie
Funcții MySQL
Exemplul 1. Se da o tabela cu structura de mai jos :
id page_title user_agent date_accessed
int
(3)
not_null primary_key auto_increment string
(50) blob
(65535)
blob date
(10)
Fig. 11 Tabelul TITLURI
<?php
//sa dea informatii despre structura unei tabele
$db = mysql_connect("localhost","root")
or die ("nu m am conectat");
mysql_select_db("testdb", $db)
or die ("testez dar nu pot sa fac conectarea la tabela");
$db_name ="access_tracker ";
$query = "select * from $db_name";
$result = mysql_query($query);
$num_fields = mysql_num_fields($result);
//create table header
echo "<table border = 1>";
echo "<tr>";
for ($i=0; $i<$num_fields; $i++)
{
echo "<th>";
echo mysql_field_name ($result, $i);
echo "</th>";
}
echo "</tr>";
36
//end table header
//create table body
echo "<tr>";
for ($i=0; $i<$num_fields; $i++)
{
echo "<td valign = top>";
echo mysql_field_type ($result, $i) . "<br> \n";
echo "(" . mysql_field_len ($re sult, $i) . ")<br> \n";
echo mysql_field_flags ($result, $i) . "<br> \n";
echo "</td>";
}
echo "</tr>";
echo "</table>";
?>
Exemplul 2. Aceeiasi tabela dar vrem sa preluam date din ea :
<?php
//sa se prezinte preluarea datelor dintr o tabela
$link = mysql_connect("localhost", "root")
or die("nu m am conectat : " . mysql_error());
print "s a facut conexiunea la baza de date";
mysql_select_db("baza1") or die(" nu s a facut conexiunea la baza de date");
$query = "SELECT * FROM tabela1";
$result = mysql_query($query) or die("Query failed : " . mysql_error());
print "<table> \n";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
print " \t<tr> \n";
foreach ($line as $co l_value) {
print " \t\t<td>$col_value</td> \n";
}
print " \t</tr> \n";
}
print "</table> \n";
mysql_free_result($result);
37
mysql_close($link);
?>
Exemplul 3. Fie tabela cu următoarele inregis trari:
nume salariu impozit
xx 2 2
xxx 3 3
kossu 0 0
Fig. 12 Tabelul IMPOZITE
Sa se stearga informatii care indeplinesc o conditie :
<?php
//sa se dea un exemplu prin care se sterg inregistrari dintr o tabela
mysql_pconnect("localhost", "root") or
die("nu m am conectat: " . mysql_error());
mysql_select_db("baza1");
mysql_query ("DELETE FROM tabela1 WHERE impozit < 3");
printf ("inregistrarile afectate sunt: %d \n", mysql_affected_rows());
mysql_query ("DELETE FROM tabela1");
printf ("s au sters urmatoarele inregistrari ca numar de orine: %d \n",
mysql_affected_rows());
?>
Exemplul 4. Actualizarea unei tabele :
<?php
//sa se dea un exemplu prin care se actualizeaza inregistrari dintr o tabela cu conditie
mysql_pconnect("localhos t", "root") or
die("nu m am conectat: " . mysql_error());
mysql_select_db("baza1");
mysql_query(" UPDATE tabela1 SET salariu=55 WHERE impozit < 4");
printf ("Updated records: %d \n", mysql_affected_rows());
mysql_query("tabela2");
?>
Exem plul 5. <?php
//sa se determine tipul de conectare la baza de date
mysql_connect("localhost", "root") or
38
die("nu m am conectat: " . mysql_error());
printf ("MySQL are tipul de conectare: %s \n", mysql_get_host_info());
?>
Exemplul 6. <?php
//sa se determine tipul de protocol folosit
mysql_connect("localhost", "root") or
die("nu mam conectat: " . mysql_error());
printf ("MySQL protocolul folosit: %s \n", mysql_get_proto_info());
?>
Exemplul 7. <?php
//sa se determine v ersiunea de server al Mysql
mysql_connect("localhost", "root") or
die("Could not connect: " . mysql_error());
printf ("MySQL server versiunea este: %s \n", mysql_get_server_info());
?>
Exemplul 8. <?php
//sa se realizeze conectarea la sever
$link = mysql_connect("localhost", "root")
or die("m am conectat: " . mysql_error());
print ("Conectarea s a facut");
mysql_close($link);
?>
Exemplul 9. <?php
//sa se afiseze continutul unei baze de date
$link = mysql_pconnect("loca lhost", "root")
or die("Could not connect: " . mysql_error());
mysql_select_db("baza1")
or die("Could not select database: " . mysql_error());
$query = "SELECT nume,salariu FROM tabela1";
$result = mysql_query($query)
or die("nu pot face filtrarea datelor: " . mysql_error());
for ($i = mysql_num_rows($result) – 1; $i >= 0; $i –) {
if (!mysql_data_seek($result, $i)) {
39
echo "avem linia $i: " . mysql_error() . " \n";
continue;
}
if(!($row = mysql_fetch_object($result)))
continue;
echo "$row ->nume $row ->salariu<br /> \n";
}
mysql_free_result($result);
?>
Exemplul 10. <?php
//sa se afiseze foarte simplu bazele de date
$link = mysql_connect('localhos t', 'root');
$db_list = mysql_list_dbs($link);
while ($row = mysql_fetch_object($db_list)) {
echo $row ->Database . " \n";
}
?>
Exemplul 11. <?php
//sa se afiseze tabelele dintr o baza de date
mysql_connect("localhost", "root");
$result = mysql_ list_tables("baza1");
for ($i = 0; $i < mysql_num_rows($result); $i++)
printf ("Tabelele: %s \n", mysql_tablename($result, $i));
mysql_free_result($result);
?>
Exemplul 12. <?php
//sa se determine tabele dintr o baza de date etapizat
$dbname = 'baza1';
if (!mysql_connect('localhost', 'root')) {
print 'nu m am conectat la mysql';
exit;
}
$result = mysql_list_tables($dbname);
40
if (!$result) {
print "nu are tabele \n";
print 'MySQL Error: ' . mysql_error();
exit;
}
while ($row = mysql_fetch_row($result)) {
print "Tabelele: $row[0] \n";
}
mysql_free_result($result);
?>
Exemplul 13. <?php
//să se determine starea serverului mysql
$link = mysql_connect('localhost', "root");
$status = explode(' ', mysql_stat($link));
print_r($status);
?>
Exemplul 14. Să se insereze(adauge)date într -o tabelă creată
<?php
mysql_connect("localhost", "root") or
die("nu a am conectat: " . mysql_ error());
mysql_select_db("baza1");
mysql_query("INSERT INTO tabela1 (nume) values ('kossu')");
printf ("Last inserted record has id %d \n", mysql_insert_id());
?>
Exemplul 15. <?
//să se listeze tabelele dintr -o bază de date
mysql_connect(" localhost", "root", "");
$result = mysql_list_tables("test");
while($row = mysql_fetch_array($result))
{
echo $row[0] . "<br> \n";
}
?>
41
Exemplul 16. <?php
//să se afișeze o tabelă
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_err ormsg);
echo ("e bine ");
@mysql_select_db("baza1",$id) or die ("selectare esuata");
$id_rez=mysql_query("select * from tabela1 ",$id);
while ($rand=mysql_fetch_array($id_rez,MYSQL_BOTH))
{
foreach($rand as $nume=>$col)
echo "$nume=>$col < br / >";
echo "<br />";
}
@mysql_close();
?>
Exemplul 17. <?php
//conectare/deconectare de la o bază de date
$msqlconc = mssql_connect("localhost", "root");
mssql_close($msqlconc);
?>
Exemplul 18. <?php
// să se dea exemplu de adăugare date în tabelă
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_errormsg);
echo ("e bine ");
@mysql_select_db("baza1",$id) or die ("baza de date neselectata ."."eroare :
".mysql_error ());
echo "baza de date a fost selectata ";
$id_rez=mysql_query("select * from tabela1 ",$id);
$interogare="insert into tabela1 values " . " ('ff',66,6)";
@mysql_query($interogare,$id);
if (mysql_errno());
if (mysql_affected_rows()!=1)
echo "adaugare ratata ";
else
42
echo "AM FACUT ADAUGAREA ";
@mysql_close();
?>
Exemplul 19. <?php
// să se dea exemplu de adăugare date în tabela dată
$id=@mysql_pconnect("localhost","root") or die ("fara conectare ".$php_errormsg);
echo ("e bine ");
@mysql_select_db("baza1",$id) or die ("baza de date neselectata ."."eroare :
".mysql_error());
echo "baza de date a fost selectata ";
$id_rez=mysql_query("select * from tabela1 ",$id);
$interogare="insert into tabel a1 values " . " ('ff',66,6)";
@mysql_query($interogare,$id);
if (mysql_errno());
if (mysql_affected_rows()!=1)
echo "adaugare ratata ";
else
echo "AM FACUT ADAUGAREA ";
@mysql_close();
?>
43
4. PROIECT INFORMATIC
In ultimii ani comerțul electronic cunoaș te o dezvolate din ce in ce mai mare în toate
domeniile. Cartile, alături de aparatrele electronice, se numara printre cele m ai bine
vandute produse online, iar acest lucru se intampla datorita faptului ca este mai comod
pentru m ulte persoane să iși comande direct acasa produsele de care au nevoie, este mult
mai rapida cautarea intr -o baza de date online prin simpla introducere a unor cuvinte
cheie, pot fi citite mai multe detalii despre carte, despre autor sau recenzii, multe din tre
librariile online ofera recomandari personalizate in functie de cartile cautate sau
cumparate, cartile se pot afisa pe categorii, se pot sorta dupa diferite criterii, dupa pret,
autor, nume, anul aparitie, etc. Iar avantajele librariilor online nu se o presc aici, fiecare
site a incercat sa fie cat mai interesant si mai usor de folosit de catre clienti.
4.1 Cerințele aplicaț iei
Aplicația Book -O-Rama este foarte utilă pentru utilizatorii care doresc să cumpere
cărti online, scopul său principal fiind cel de a facilita vânzările electronice ale cărților.
1. Afișare categoriilor
a. Aplicația va afișa o listă de categorii de carti. Acestea vor fi disponibile t uturor
utilizatorilor, nu este nevoie ca utilizatorii sa fie logati pentru a vedea aceste cateorii.
b. Utilizatorul are posibilitatea de a alege categorii. In momentul in care utilizatorul
face click pe una dintre categorii, se vor afisa cartile care fac part e din categoria
respectiva.
c. Pentru a se intoarce la pagina anterioara, utilizatorul, poate face click pe butonul
“Continue Shopping”.
2. Afisarea cartilor
a. Afisarea cartilor dintr -o categorie se face sub forma unei liste in care se afiseaza
in partea stanga o imagine cu coperta cartii , iar in partea drapta a imaginii titlul cartii.
b. Din lista de carti dintr -o categori, utilizatorul poate selecta orice carte, dand click
pe imaginea sau pe titlul cartii pentru a vedea detalii despre aceasta.
44
c. Pentru a se intoarce la pagina anterioara, cea in care sunt afisate categoriile,
utilizatorul, poate face click pe butonul “Continue Shopping”.
3. Afisarea detaliilor despre o carte
a. In momentul in care utilizatorul face click pe o carte dintr -o categorie, se vor
afisa detalii despre aceasta. In partea de sus se va afisa mare titlul cartii. In partea stanga
se va afisa o imagine cu coperta cartii, iar in partea stanga a imagini, sub fo rma unei liste
se vor afisa: autorul, ISBN -ul, pretul, si descrierea cartii.
b. Utilizatorul poate adauga cartea afisata in cosul de cumparaturi, dand click pe
butonul: “Add To Cart”.
c. Pentru a se intoarce la pagina anterioara, cea in care sunt afisate cartil e din
categoria selectata, utilizatorul , poate f ace click pe butonul “Continue S hopping”.
4. Afisarea cosului de cumparaturi
a. Din pagina in care sunt afisate detalii despre o carte, utilizatorul poate da click pe
butonul “Add to Cart” pentru a adauga o carte, pe care isi doreste sa o cumpere, cosul de
cumparaturi. Dupa ce va da click pe butonul “Add To Cart” cartea va fi adauga si va fi
afisat cosul de cumparaturi.
b. De asemenea, cosul de cumparaturi poate fi afisat in orice moment, facand click
pe butonul “View Cart” din partea dreapta din bara de sus a aplicatitei.
c. Cantitatea dorita poate fi actualizata scriind in campul Quantity cantitatea dorita,
apoi facand click pe butonul “Save Changes” pentru a modifica numarul de elemente din
cosul de cu mparaturi si pretul acestora.
d. Pentru a sterge o carte din cosul de cumparturi, se seteaza cantitatea 0, si se apasa
butonul “Save Changes”, dupa aceasta, carte va disparea automat din cosul de
cumparaturi.
e. In bara de titlu a aplicatiei, in partea de sus, d reapta, se afiseaza numarul de
elemente care sunt adaugate in cosul de cumparaturi si costul acestora, in momentul
curent.
45
f. Pentru a se intoarce la pagina anterioara, si pentru a continua cumparaturile,
utilizatorul, poate face click pe butonul “Continue Sh opping”.
5. Plasarea comenzii
a. Dupa ce utilizatorul a adaugat in cosul de cumparaturi toate cartile pe care
doreste sa le cumpere, acesta poate sa finalizeze comanda apasand butonul “Go To
Checkout”.
b. Se va afisa o lista cu elementele care sunt adaugate in cos, titlul cartii, urmat de
autor (se poate face click pe titlul cartii pentru a vedea din nou delatii despre carte), pretul
pe unitate, cantitatea, pretul total, iar la final pretul total pentru toata lista de carti din
cosul de cumparaturi.
c. Se cere ca utili zatorul sa completeze cu datele personale si datele despre livrare.
Campurile care se cer sunt: nume, adresa, oras, stat, cod postal, tara. Daca datele
personale sunt aceleasi cu datele de livrare, campurile pentru datele de livrare se pot lasa
necompletat e. Completarea corecta a datelor utilizatorului sunt obligatorii pentru livrarea
corecta a cartilor comandate.
d. Dupa ce au fost introduse datele personale, se apasa butonul “Purchase”.
Se afiseaza pagina in care sa face plata. In partea de sus se afiseaza detaliile despre
comanda, cartile comandate, la care se adauga si costul transportului, calculat in functie
de adresa care a fost introdusa.
e. Daca totul este in regula, s e cere sa se completeze cu datele de pe cardul bancar:
tipul, numarul cardului, codul AMEX, data expirarii si numele. Se apasa butonul
“Purchase”.
f. Daca datele introduse sunt corecte, se va efectua plata si se va trimite comanda.
g. Daca datele introduse pent ru comanda sunt gresite, se va afisa o pagina cu un
mesaj de eroare, iar dand click pe butonul “Back” se revine la pagina in care se
completeaza datele pentru comanda.
h. Detaliile despre comanda trimisa vor ramane afisate pana in momentul in care
utilizator ul face din nou click pe butonul “Continue Shopping” afisat, dupa care cosul de
cuparaturi va fi resetat la 0.
46
6. Logare
a. Din pagina “ /login.php ” administratorul se poate loga in aplicatie.
b. Aceasta pagina este ascunsa utilizatorului obisnuit, avand posoilita tea de a fi
accesata doar prin modificarea link -ului de acces.
7. Pagina de administrator
a. Administratorului in momentul in care se locgheaza ii este afisat un meniu cu 4
optiuni: Navigarea la pagina principala (unde se afiseaza categoriile descrise mai sus, l a
punctul 1), adaugarea unei noi categorii, adaugarea unei noi carti, schimbarea parolei
administratorului.
b. Adaugarea unei categorii se face prin introducerea numelui unei categorii, apoi
se apasa butonul “Add Category”. Se va afisa un mesaj de confirmare, pentru noua
categorie adaugata in baza de date. Se apasa apoi “Back to administrator menu” pentru a
reveni la meniul administratorului .
c. Pentru adaugarea unei noi carti se completeaza cu ISBN -ul, titlul, autorul, pretul,
descrierea si se selecteaza categoria din lista drop down afisata. Se apasa apoi butonul
“Add book”. Se va afisa un mesaj de confirmare, pentru noua carte adaugata in baza de
date. Pentru a reveni la pagina principala a administratorului se face click pe butonul
“Back to administrator menu”.
d. Schimbarea parolei administratorului se face prin completarea vechii parole apoi
a noii parole de doua ori. Noua parola trebuie sa con tina intre 6 si 16 caractere. Daca
aceasta nu respecta conditiile, un mesaj de eroare va fi afisat. Pentru a reveni la pagina
principala a administratorului se face click pe butonul “Back to administrator menu”.
e. Pentru a se deloga, administratorul poate f ace click pe butonul “Logout”.
Specificarea cerințelor (Requests) :
Ref Funcții de bază Categorie
R1 Afișarea categoriilor evident
R2 Selectarea unei categorii evident
R3 Afișarea listei de cărți dintr -o categorie evident
47
R4 Selectearea unei cărți evident
R5 Afișearea detalii or despre cartea selectată evident
R6 Adaugarea în coșul de cumpărături evident
R7 Afișarea numărului de cărți din coșul de cumparaturi,
în partea dreaptă în bara de titlu evident
R8 Afișarea prețului cărților din coșul de cumparaturi, în
partea dreaptă în bara de titlu evident
R9 Modificarea cantităților cărților din coșul de
cumpărături evident
R10 Ștergerea cărților din coșul de cumpăraturi evident
R11 Furnizeaza un mecanism de stocare persistentă ascuns
R12 Furnizează un me canism de comunicare inter -proces
și inter -sistem. ascuns
R13 Continuarea cumpăraturilor evident
R14 Finalizarea comenzii, afisarea listei de cărți care se
comandă evident
R15 Afișarea formu larului pentru datele cumpărătorului evident
R16 Afișarea formularului pentru datele de livrare evident
R17 Afișarea formularului pentru efectuarea plății cu
cardul evident
R18 Resetarea coșului de cumpăraturi după trimiterea unei
comenzi ascuns
R19 Logarea administratorului evident
R20 Adăugarea unei categorii evident
R21 Afișarea formularului pentru adăugarea unei categori evident
R22 Adăugarea unei cărti ascuns
R23 Afișarea formularului pentru adăugarea unei cărți evident
R24 Schimbarea parolei administratorului evident
R25 Delogarea administratorului evident
R26 Afișarea erorilor ascuns
Tabel 1 – Tabel de cerin țe
48
Detalierea cazurilor de utilizare:
Nume caz de
utilizare Vizualizează detalii despre o carte
Actori Guest
Flux de evenimente
(scenariu normal) 1. Guest -ul activează funcția Vizualizează listă de
categorii , accesând pagina principala a aplicației.
2. Sistemul afișează lista de categorii.
3. Guest -ul dă click pe numele unei categorii.
4. Sistemul afișează cărțile din categoria selectată .
5. Guest -ul dă click pe numele unei cărți.
6. Sistemul afișează detalii despre carte .
Conditii de intrare
(Preconditii) Nu e nevoie ca utilizatorul să fie logat.
Conditii de iesire
(Postconditii) Guest -ul a vizualizat detaliile despre cartea selectată.
Referințe Funcții: R1, R2, R3, R4, R5 , R11, R12.
Tabel 2 – Detaliere caz de utilizare – Utilizator Guest
Nume caz de
utilizare Adăugare carte
Actori Admin
Flux de evenimente
(scenariu normal) 1. Admin -ul activează funcția Adăugarea unei cărti .
2. Sistemul afisează formularul pentru adăgarea unei
cărți.
3. Admin -ul completează detalii despre carte .
4. Admin -ul apasă butonul „ Add Book ”.
5. Sistemul salvează modificările în baza de date.
Condiții de intrare
(Precondiț ii) Admin -ul este logat.
Condiții de iesire
(Postcondiț ii) Cartea a fost adăugată .
Referințe Funcții: R 22, R23, R11, R12.
Tabel 3 – Detaliere caz de utilizare – Admin istrator
49
4.2 Proiectarea aplicației
Aplicația Book -O-Rama este o aplicație care exemplifică în mod practic noțiunile
teoretice prezentate în capitolele anterioare.
Pentru realizarea acestei aplicații s -au folosit mai multe tehnologii care sunt incuse
in pachetul XAMPP , versiunea 3.2.2 . Aceasta a făcut instalarea si rularea aplicației și mai
ușoară. Ca si container Web s -a folosit Apache.
Pentru gestiunea bazelor de date s -a folosit limbajul MySQL 5.1.30 și interfața
grafică PhpMyAdmin pentru o mai ușoară vizualizare și gestiune a bazelor de date.
Pentru scrierea scripturilor si pentru dezvoltarea aplicatiei Web s -a folosit HTML,
CSS (Cascading Style Sheets), PHP v5.2.8 pentru scripturile care fac aplicația să fie
dinamică si interacționează cu baza de date.
Arhitectura aplicației
Structura bazei de date folosite pentru aceasta aplicatiei este alcatuita din 6 tabele:
admin – Retine numele de utilizator si parola cu care un administrator se
poate loga in aplicatie. Numele de utilizator este cheia primara a tabelului.
books – Conține informații despre stocul de cărți disponibil în magazinul
online: ISBN, autor, titlu, id -ul categoriei din care face parte, preț și
descrierea cărții. Are ca și cheie primară ISBN -ul cărții. Prin intermediul
coloanei id -ul categoriei se crează o referință către tabelul cate gories, relația
este de tipul 1-1 (One -To-One) (o carte poate face parte dintr -o singură
categorie).
categories – Contine doua coloane: id -ul și numele categoriei, id -ul fiind
cheia primară.
customers – Reține datele clienților care au plasat comenzi. Id-ul clientului
are rol de cheie primară în tabel și e incrementat automat. Celelalte coloane
conțin date despre numele, adresa, orașul, statul, codul poștal și țara
clientului.
50
orders – Id-ul comenzii are rol de cheie primară în tabel și e incrementat
automat. Conține informații despre comana plasată și datele de livrare a
comenzii, coloanele fiind: id -ul comenzii, id -ul clientului, prețul total al
comenzii, data, statusul, apoi numele, adresa, orasul, statul, codul poștal și
țara unde va fi livrată coman da. Id -ul clientului este o refetința către un id
unic din tabelul customers , relația fiind de tipul 1-1 (One -To-One) , o
comandă este plasată de un singur client.
order_items – Este un tabel de legătură, care conține informații cantitatea și
prețul cărțilo r comandate. Cheia străină e ste o cheie compusă din doua
coluane: id -ul comenzii si ISBN -ul cărții. În acest fel este creată o relatie de
tipul M-M (Many -To-Many ), o comandă poate conține mai multe cărți și o
carte poate fi inclusă în mai multe comenzi.
Figura 1 – Structura bazei de date
51
4.3 Exemple de utilizare
Aplicația Book -O-Rama este o librărie având scopul principal de a facilita
vânzările electronice ale cărților, interacționând cu clienții.
În pagina de start a aplicației ( Figura 2), meniul principal al aplicației pune la
dispoziția clienților utilizatori opțiunea de a alege domeniile de interes ale cărțil or
disponibile pe stoc , clafisicate în funcție de categoria din care face parte. În colțul din
dreapta sus, se afișează tot timpul coșul de cumpărături împreună cu numărul de cărți
adăugate până în momentul curent și cu prețul acestora.
Figura 2 – Pagina de start și meniul principal
Utilizatorii pot vizualiza titlurile cărților care aparțin unei categorii din lista
afișată și care există în stoc , aceasta se poate vedea în Figura 3.
Figura 3 – Lista cărților din categoria aleasă
52
Pentru a obține mai multe informații despre o anumită carte (autor, ISBN, prețul
și descrierea cărții), se selectează titlul dorit. Informațiile se vor afișa precum în exemplul
din Figura 4.
Figura 4 – Informații detaliate despre cartea selectată
Dacă utilizatorul dorește achiziționarea cărții, poate alege opț iunea de a adăuga
cartea coșul de cumpărături. În acest caz, se va afișa coșul de cumpărături (ca în Figura 5)
cu toate cărțile pe care le conține pănă în momentul curent și se vor actualiza și
informațiile despre coșul de cumpărături din colțul din dreapta sus a paginii. Utilizatorul
poate schimba cantitatea , și va apăsa butonu Save Changes c ând va termina de rea lizat
modificările dorinte pentru a actualiza prețurile.
Figura 5 – Coșul de cumpărături
53
În continuare utilizatorul poate continua cumpărăturile revenind la meniul
principal prin accesarea butonului Continue Shopping sau să finalizeze cumpărăturile
alegând opțiunea Go to Checkout .
Pentru finalizarea comenzii c umpărătorul trebuie să completeze datele personale
(numele, adresa, orașul, codul poștal, țara) și datele poștale în cazul în care adresa de
livrare este diferită de adresa personală.
Formularul poate fi vizualizat în Figura 6.
Figura 6 – Formularul pentru datele personale și datele de livrare
54
După completarea formularului se trece la următoarea etapă, cea a introducerii
informațiilor legate de cardul de credit (tipul cardului, numărul cardul ui, codul AMEX,
data expirării) ( Figura 7).
Figura 7 – Formularul pentru plata cu cardul
Trazacția se finalizează în momentul în care se apasă butonul Purchase și se
afișează un mesaj ul de tranzacție reușită : Thank you for shopping with us. Your order
has been placed. (Figura 8).
Figura 8 – Finalizarea plății si trimiterea cu succes a comenzii
55
Toate aceste operațiuni sunt atent urmărite de către administratorul librăriei
electronice. Acesta se logează ca și adm inistrator din meniul de logare (Figura 9):
Figura 9 – Logare administrator
După logare se va afișa meniul administ ratorului care se poate vedea în Figura 10.
Opțiunile administratorului sunt:
Introducerea de noi categorii / tematici de cărți;
Posibilitatea modificăr ii sau eliminării categoriilor de cărți deja existente;
Adăugarea de cărți noi corespunzătoare categoriilor introduse: ISBN, titlu,
autorul, categoria, prețul, descrierea cărții;
Posibilitatea modificării sau eliminării informațiilor legate de cărțile deja
existente pe stoc;
Modifica rea parolei administratorului.
Figura 10 – Meniul principal al administratorului
56
În cele ce urmează se va exemplifica opțiunea de adăugare a unei noi cărți în baza
de date, accesând optțiunea Add a ne w book . În formular (Figura 11) se completează
ISBN -ul, titlul, autorul/autorii, se alege categoria din lista de categorii existente, se scrie
prețul și o scurtă descriere a cărții.
Figura 11 – Formular pentru a adăuga a nouă carte
Dacă s -a adăugat cu succes cartea, se va afișa un mesaj corespunzator, precum în
Figura 12, unde se afișează un mesaj care confirmă faptul că s -a adăugat cu succes cartea:
„Noul rețetar de bază – Thermomix” .
Figura 12 – Adăugarea cu succes a unei cărți
57
4.4 Impl ementarea și testarea aplicatiei
Pentru implementare a bazei de date s-a folosit My Sql ș i pachetul Xampp. Din
fereasta phpMyAdmin , din tab -ul SQL s -a executat codul pentru crearea bazei de date si
a tabelelor. În Figura 13 se poate vedea codul folosit pentru crearea bazei de date si a
tabelului de clienti.
Figura 13 – Crearea bazei de date si a tabelului de clienți
Pentru a face legătura din baza de date și interfața utilizatorului s -a folosit PHP. În
Fragment de cod sursă 1 este un exemplu de cum a fost implementat ă în PHP funcția de
afișare a coșului de cumpărături.
output_fns.php
function display_cart($cart, $change = true, $images = 1)
{
// display items in shopping cart
echo '<table border = 0 width = "100%" cellspacing = 0>
<form action = "show_cart.php" method = "post">
<tr><th colspan = '. (1+$images) .' bgcolor="#cccccc">Item</th>
<th bgcolor="#cccccc">Price</th><th bgcolor="#cccccc">Quantity</th>
<th bgcolor="#cccccc">Total</th></tr>';
//display each item as a table row
58
foreach ($cart as $isbn => $qty)
{
$book = get_book_details($isbn);
echo '<tr>';
if($images ==true)
{
echo '<td align = left>';
if (file_exists("images/$isbn.jpg"))
{
$size = GetImageSi ze('images/'.$isbn.'.jpg');
if($size[0]>0 && $size[1]>0)
{
echo '<img src="images/'.$isbn.'.jpg" border=0 ';
echo 'width = '. $size[0]/3 .' height = ' .$size[1]/3 . ' />';
}
}
else
echo '&nb sp;';
echo '</td>';
}
echo '<td align = "left">';
echo '<a href = "show_book.php?isbn='.$isbn.'">'.$book['title'].'</a> by
'.$book['author'];
echo '</td><td align = "center">$'.number_format($book['price'], 2);
echo '</td>< td align = "center">';
// if we allow changes, quantities are in text boxes
if ($change == true)
echo "<input type = 'text' name = \"$isbn\" value = \"$qty\" size = 3>";
else
echo $qty;
echo '</td>
<td align = "center" >$'.number_format($book['price']*$qty,2)."</td>
</tr>\n";
}
// display total row
echo "<tr>
<th colspan = ". (2+$images) ." bgcolor= \"#cccccc \"> </td>
<th align = \"center\" bgcolor= \"#cccccc \">
".$_SESSION['items']."
</th>
<th align = \"center\" bgcolor= \"#cccccc \">
\$".number_format($_SESSION['total_price'], 2).
'</th>
</tr>';
// display Save change button
if($change == true)
{
echo '<tr>
<td colspan = '. (2+$images) .'> </td>
<td align = "center">
<input type = "hidden" name = "save" value = true>
<input type = "image" src = "images/save -changes.gif"
border = 0 alt = "Save Changes">
</td>
<td> </td>
</tr>';
}
echo '</form></table>';
}
Fragment de cod sursă 1 – Afișarea coșului de cumpărături
59
Pentru a observa modul în care se efectueaza inserarea, modificarea și stergerea
uni produs din baza de date, prin intermediul interfeței web realizată în PHP, pot fi citite
alte exemple de cod sursa în: Fragment de cod sursă 2, Fragment de cod sursă 3,
Fragment de cod sursă 4, Fragment de cod sursă 5, Fragment de cod sursă 6 și
Fragment de cod sursă 7.
admin_fns.php
// inserts a new category into the database
function insert_category($catname)
{
$conn = db_connect();
// check category does not already exist
$query = "select *
from categories
where catname='$catname'";
$result = $conn ->query($query);
if (!$result || $result ->num_rows!=0)
return false;
// insert new category
$query = "insert into categories values
('', '$c atname')";
$result = $conn ->query($query);
if (!$result)
return false;
else
return true;
}
Fragment de cod sursă 2 – Funcția de inserare a unei noi categorii în baza de date
admin_fns.php
// insert a new book into the database
function insert_book($isbn, $title, $author, $catid, $price, $description)
{
$conn = db_connect();
// check book does not already exist
$query = "select *
from books
where isbn='$isbn'";
$result = $conn ->query($query);
if (!$result || $result ->num_rows!=0)
return false;
// insert new book
$query = "insert into books values
('$isbn', '$author', '$title', '$catid', $price, '$d escription')";
$result = $conn ->query($query);
if (!$result)
return false;
else
return true;
}
Fragment de cod sursă 3 – Funcția de inserare a unei noi cărți în baza de date
60
admin_fns.php
// change the name of category with catid in the database
function update_category($catid, $catname)
{
$conn = db_connect();
$query = "update categories
set catname='$catname'
where catid='$catid'";
$result = @$conn ->query($ query);
if (!$result)
return false;
else
return true;
}
Fragment de cod sursă 4 – Funcția de actualizare a unei categorii
admin_fns.php
// change details of book stored under $oldisbn in
// the database to new details in arguments
function update_book($oldisbn, $isbn, $title, $author, $catid,
$price, $description)
{
$conn = db_connect();
$query = "update books
set isbn='$isbn',
title ='$title',
author = '$author',
catid = '$catid',
price = '$price',
description = '$description'
where isbn='$oldisbn'";
$result = @$conn ->query($query);
if (!$result)
return false;
else
return true;
}
Fragment de cod sursă 5 – Funcția de actualizare a unei cărți
admin_fns.php
// Remove the category identified by catid from the db
// If there are books in the category, it will not
// be removed and the function will return false.
function delete_category($catid)
{
$conn = db_connect();
// check if there are any books in category
// to avoid deletion anomalies
$query = "select *
from books
where catid='$catid'";
$result = @$conn ->query($query);
if (!$result || @$result ->num_rows>0)
return false;
61
$query = "delete from categories
where catid='$catid'";
$result = @$conn ->query($query);
if (!$result)
return false;
else
return true;
}
Fragment de cod sursă 6 – Funcția de ștergere a unei categori
admin_fns.php
// Delete the book identified by $isbn from the database.
function delete_book($isbn)
{
$conn = db_connect();
$query = "delete from books
where isbn='$isbn'";
$result = @$conn ->query($query);
if (!$result)
return false;
else
return true;
}
Fragment de cod sursă 7 – Funcția de ștergere a unei cărți
4.5 Validarea aplicatiei
Aplicația a fost testată manual. Fiecare funcționalitate a aplicației a fost testată în
primul rând folosind strategia white box testing dar si boundery testing, testandu -se
pentru valori normale așteptate de aplicație, pentru care aceasta va avea comportamentul
normal, dar și pentru val ori pentru care aplicația nu le poate procesa, valori din afara
mulțimilor de valori acceptate, caz în care aplicația afișează mesaje de eroare
corespunzătoare.
Două dintre cazurile de testare efectuate sunt descrise în Tabel 4 și în Tabel 5.
Caz de testare – Administrator – Logare cu succes
Descriere: Se verific ă dacă logarea are loc cu succes, pentru administratorul cu numele
de utilizator „admin ” și parola „admin ”.
Rezultat așteptat: A dministratorul s-a logat cu succes, se afișează pagina de start a
administratorului în care este afișat meniul pentru administrator .
Tipul executiei: manual
Status passed
Tabel 4 – Caz de testare – Logare cu succes
62
Test Case – User – Logare fără succes
Descriere: Se verific ă dacă logarea nu are loc cu succes, pentru administratorul cu
numele de utilizator „abc” și parola „abc”, care nu exista in baza de date.
Rezultat așteptat: A dministratorul nu s-a logat cu succes, nu se afișează pagina de start
a administratorului în care este afișat meniul. Se rămâne tot la pagina de login și se
afișează un mesaj corespunzător de eroare .
Tipul executiei: manual
Status passed
Tabel 5 – Caz de testare – Logare fără succes
63
5. CONCLUZII
Lucrarea de față si-a propus să prezinte o tehnologie folosită pentru bazele de date
relationale: bazele de date MySql. P entru aplicații Web având bazele de date in MySql
este foarte utilă folosirea unui pachet de programe software precum Xampp sau Wamp
deoarece facilitează pornirea și oprirea serverelor, setarea acestora, crearea, afișarea,
inserarea de date, și alte operaț ii utile în cazul devoltării aplicațiilor care folosesc baze de
date. De asemenea s -a prezentat în aceasta lucrare și modul în care se realizează legătura
între bazele de date MySql și interfața utilizatorului folosind limbajele de scripting PHP
și HTML. Accentul a fost pus pe bazele de date și pe modul în care se realizează
operațiile CRUD (Create Read Update Delete) în cazul bazelor de date relationalte,
acestu lucru fiind foarte des folosit de a plicațiile Web care necesit ă multe operații de tipul
CRUD.
Lucrarea e organizată în trei capitol e. Astfel, primul capitol s-au abordat aspectele
teoretice, prezentând noțiuni de bază din domeniul bazelor de date, prezentând informații
despre modelul relational, transformarea entităților, transformarea relațiilor, normalizarea
relațiilor și formele normale.
Al doilea capitol, intitulat “ Aspecte tehnologice ” si-a propus să prezinte câteva medii
de programare și limbaje care se folosesc pentru a interacționa cu bazele de date. S -a
descris de asemenea modul în care a cestea pot fi instalate impreună cu unele exemple de
cod de bază. În acest capitol s -au prezinta t pe scurt tehnologii precum: HTML , CSS, iar
accentul s -a puns pe PHP si MySQL pentru care s -au prezentat mai detaliat și conceptele
de bază.
Al treilea capitol a prezentat aplicația pe care a m realizat -o folosind tehnologiile
PHP și MySQL . Este o aplicație realizată pentru cei care doresc să cumpere mai ușor
cărți, folosind o librarie online.
În momentul de față, dezvoltarea aplicațiilor de baze de date si web se face într -un
mod tot mai dinamic, deoarece numărul de framework -uri JavaScript a crescut, la fel și
numarul de funționalități și ușurința folosirii acestora, iar așteptările utilizatorilor pentru
aplicațiile care rulează în browse r au crescut. Utilizatorii sunt obișnuiți cu site -uri care au
interfețe de utilizator tot mai complexe. Pentru a putea crea astfel de interfețe,
64
alegerea toolurilor , a limbajelor de programare și a librăriilor potrivite este esențială, mai
ales atunci când opțiunile sunt atât de variate. Cu toate acestea, principiile de bază a
scrierii unei aplicații web cu conexiune la baze da date răman aceleași.
Această lucrare și -a propus să treacă în revistă principiile folosirii bazelor de date
relaționale împreuna cu cele mai importante tehnologii folosite pentru aplicațiile web
conectate la baze de date: MySQL si PHP.
Utilizarea unui limbaj sau al unui framework potrivit poate aduce de cele mai multe
ori beneficii majore atât dezvoltatorului cât și aplicației în sine . De aceea e important să
cunoaștem principiile de baza a unor tehnologii, pentru ca mai apoi va fi mai ușor să
alegem una din extensiile sale pentru a implementa o aplicație de dimensiuni mari.
Sistemul informatic de gestiune al magazinului de cărți este ușor de folosit de către
utilizator , multilateral și rapid. Gestiunea cărților aflate în stoc este intuitivă, putând fi
ușor de modificat datele din aceasta. Design -ul aplicației permite utlizatorului căutarea și
cumpărarea într -un mod ușor a cărților. Sis temul de gestiune a bazelor de date poate să
ofere facilitați moderne oricărei librării.
Pe viitor exita posibilitatea implementării unei secțiune special e pentru facturi,
clien ții având op țiunea de a alege ca produsele cump ărate s ă fie trecute pe bon fis cal sau
pe factur ă. Odat ă cu extinderea magazinului poate fi creata de asemenea o aplocație pe
mobil care va oferi clien ților posibilitatea de a face comenzi de oriunde, oricând .
65
BIBLIOGRAFIE
[1] Rădulescu F. – Note de curs: Baze de date , Bucuresti 2007.
[2] Ullman L. – PHP si MySQL pentru site -uri WEB dinamice , Editura Teora, București
2005.
[3] Ulman L. – PHP pentru World Wide Web, în imagini , Editura Teora, București 2006.
[4] Holzner S. – Inițiere in PHP 5 – Editura Teora, București 2006.
[5] Darie C., Bucica M. – PHP5 Si MySQL pentru comerț electronic , Editura Teora,
Bucuresti 2005.
[6] Petersen J.V. – Baze de date pentru începatori , Editura Teora, București 2006.
[7] Anghel T. – Programarea in PHP. Ghid practic , Editura Polirom 2005.
[8] Melon i J. – PHP, MySQL și Apache , Editura Teora, Bucuresti 2006.
[9] Weling L., Thomson L. – PHP and MySQL Web , USA LLC 2005.
[10] SAMS TEACH YOURSELF php, Mysql and Apache ALL in One, j.k. Meloni –
Person Education, 2004.
[11] Wiley & Sons – Secure PHP Developmen t – Building 50 Practica, 2005.
[12] Wrox Press – Professional PHP Programming , 2005.
[13] NewRiders – PHP Programming For Windows, 2004.
[14] MySQL – PHP Database Aplication, 2005.
Bibliografie internet:
http://wikipe dia.org – enciclopedia liberă
http://www.php.net – pagina oficială a grupului de lucru pentru dezvoltarea limbajului
PHP
http://www.w3schools.com – set gratuit de tutoriale și documentații pentru programarea
paginilor web.
http://www.w3.org/ – pentru cele mai noi specificații HTML.
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: SPECIALIZAREA: ………………. ………….. ……. Lucrare de licență Baze de date relaționale – aspecte teoretice și practice Coordonator… [631080] (ID: 631080)
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.
