Documente Academic
Documente Profesional
Documente Cultură
Introducere
Informaţii şi date
Modele de date
Limbaje şi utilizatori
Exemplu
BD sunt partajate
• diverse aplicaţii şi utilizatori trebuie să aibă posibilitatea de a obţine
accesul la datele de interes
• “controlul concurenţei” – permite accesul partajat la date al mai multor
utilizatori ce operează simultan
BD sunt persistente
• BD au o durată medie de viaţă ce nu este limitată de o singură execuţie a
programelor utilizator
(datele gestionate de un program în memoria principală au o durată de viaţă
cuprinsă între începutul şi sfârşitul execuţiei programului, nefiind persistente)
Introducere - SGBD
Caracteristicile SGBD
productivitatea mărită
PLAN
Specializare Curs An
Mecatronică Achiziții de date 4
Mecatronică Acționări 3
Mecanică Roboți 3
Mecanică Metrologie 4
Mecanică Senzori 4
Introducere - Modele de date
Modele conceptuale
Exemplu
CURSURI (Curs, Titular) – schema relaţiei (tabelului) CURSURI
instanţa (starea) bazei de date - valorile actuale din baza de date care se
modifică în timp; conţine o colecţie de linii ale relaţiei respective, care variază
în timp
Exemplu
Instanţa relaţiei CURSURI este dată de următoarele trei perechi:
Senzori Popescu
Acționări Ionescu
Roboți Anton
Introducere - Modele de date
Nivele de abstractizare în SGBD-uri
este posibil ca unei singure scheme logice să-i fie asociate diverse
scheme externe
fiecare schemă externă va furniza o anumită vedere asupra bazei de
date
Exemplu
Un student de la Automatică este interesat de cursurile oferite
în cadrul acestei specializări. Această informaţie este prezentă în
relaţia MECATRONICĂ, derivată din relaţia PLAN
AUTOMATICĂ
Specializare Curs An
Mecatronică Senzori 4
Mecatronică Achiziții de date 3
Avantaje
Datele - resurse comune ale organizaţiei, disponibile tuturor
membrilor autorizaţi
Baza de date furnizează un model standardizat şi precis
Modelul poate fi folosit, cu extensiile necesare, în aplicaţii viitoare
Dezavantaje
SGBD - scumpe, complexe şi foarte diferite de multe
alte unelte software
Introducerea SGBD necesită un efort financiar
direct - costul produsului
indirect - resurse hardware şi software, pregătirea
personalului etc.
SGBD - furnizează, în forma standard, un set de
servicii care au un anumit cost
în cazurile în care câteva dintre aceste servicii nu sunt
neapărat necesare, e dificilă extragerea serviciilor necesare
la un moment dat → ineficienţă
Introducere - Avantaje şi dezavantaje SGBD
Modelul relaţional
Structura modelului relaţional
Constrângeri de integritate
Structura modelului relaţional
Conceptele ce stau la baza modelului
relaţional:
}
relaţie
diferă ca noţiuni dar sunt strâns legate
tabel
Exemplu
CURSURI
01 Fizica D1 = ?
03 Chimie
04 Biologie D2 = ?
Structura modelului relaţional
Definiţii
⇓
Vom presupune că bazele de date sunt alcătuite din relaţii finite,
definite pe domenii infinite
Structura modelului relaţional
Definiţiile anterioare pot fi generalizate
STUDENTI
Exemplu
Fie t primul tuplu din relaţia prezentată în figura 2.2
t[EchipaOaspete]=Liverpool
t[EchipaOaspete, GoluriOaspeti]=Liverpool,1
Structura modelului relaţional
BD sunt formate din mai multe relaţii
tuplurile acestor relaţii conţin valori comune atunci când
acest lucru este necesar pentru stabilirea unor
corespondenţe
STUDENTI EXAMENE
NrInreg Nume Prenume DataNastere Student Nota Curs
276545 Ionescu Maria 25/11/1980 276545 8 01
485745 Popescu Ana 23/04/1981 276545 9 04
200768 Georgescu Paul 12/02/1981 937653 9 01
587614 Luca Radu 10/10/1980 200768 9 04
937653 Maftei Lucian 01/12/1980
CURSURI
Cod Denumire Titular
01 Fizica Melinte
03 Chimie Mardare
04 Chimie Dascalu
Fig. 2.3 Exemplu de bază de date relaţională
Structura modelului relaţional
Instanţa unei relaţii (pe scurt – relaţia) având schema R(X) este dată de
mulţimea r a tuplurilor definite pe mulţimea de atribute X
STUDENTI EXAMENE
NrInreg Nume Prenume DataNastere Student Nota Curs
276545 Ionescu Maria 25/11/1980 276545 8 01
485745 Popescu Ana 23/04/1981 276545 9 04
200768 Georgescu Paul 12/02/1981 937653 9 01
587614 Luca Radu 10/10/1980 200768 9 04
937653 Maftei Lucian 01/12/1980
CURSURI
Cod Denumire Titular
01 Fizica Melinte
03 Chimie Mardare
04 Chimie Dascalu
Structura modelului relaţional
Informaţiile trebuie reprezentate sub forma unor tupluri omogene de
date
În particular, putem reprezenta în cadrul unei relaţii doar tupluri ce
corespund schemei relaţiei
În practică există cazuri în care datele disponibile nu corespund cu
exactitate formatului ales
Exemplu
Se consideră schema PERSOANĂ (Nume, Prenume, Adresă, TelefonFix)
Problemă: Pot exista tupluri pentru care valoarea atributului TelefonFix
nu este disponibilă
Rezolvarea problemei indisponibilităţii valorilor: s-a inclus posibilitatea
ca fiecare atribut al unui tuplu să poată lua fie valori din domeniul
asociat, fie o valoare specială, denumită valoare null
Valoarea null indică absenţa informaţiei
este o valoare suplimentară, ce nu este conţinută de domeniu;
la definirea unei relaţii se pot specifica acele atribute care acceptă valori
null
Constrângeri de integritate
STUDENTI
NrInreg Nume Prenume DataNastere
200768 George Paul 12/02/1981
937653 Maftei Lucian 10/10/1980
937653 Luca Radu 01/12/1980 CURSURI
Cod Denumire Titular
01 Fizica Melinte
EXAMENE 03 Chimie Mardare
04 Chimie Dascalu
Student Nota Promovat Curs
200768 11 DA 05
937653 4 DA 01
937653 6 DA 04
276545 7 DA 01
Constrângeri de integritate
Există situaţii când nu orice mulţime de tupluri în cadrul unei scheme
reprezintă informaţii corecte pentru aplicaţie
Pentru înlăturarea situaţiilor de incorectitudine a informaţiilor a fost
introdus conceptul de constrângere de integritate
Exemple
1) Expresiile ce descriu constrângerile intra-relaţionale încălcate în exemplul prezentat
în figura 2.4:
(Nota ≥ 1) AND (Nota ≤ 10)
(Promovat = ’DA’) AND (Nota ≥ 5)
2) Fie dată schema
PLATĂ(Dată, Sumă, Deduceri, Net)
Se poate defini o constrângere care impune condiţia ca suma netă să fie egală cu
diferenţa dintre suma totală şi deduceri:
Net = Sumă - Deduceri
Constrângeri de integritate
Constrângeri de chei
Definiţii
STUDENT
Relaţia EXAMENE face referire la studenţii din relaţia STUDENTI prin NrInreg
şi la cursurile din relaţia CURSURI prin Cod
NrInreg este cheia relaţiei STUDENTI
Cod este cheia relaţiei CURSURI
Valorile atributelor cheie sunt utilizate pentru referirea conţinutului altor relaţii
Constrângeri de integritate
CONTRAVENTIE
Cod Data Cadru Judet NrInmat
143256 25/10/92 567 IS 02 AAA
987554 26/10/92 456 IS 02 AAA
987557 26/10/92 456 IS 03 BBB
630876 15/10/92 456 VS 03 BBB
539856 12/10/92 567 VS 03 BBB
Fig.2.6 Bază de date cu constrângeri de referinţă
MEDIC SECTIE
Numar Nume Prenume Sectie Cod Nume Specialist
203 Dumitrescu Mihai A A Chirurgie 203
574 Georgescu Stefan B B Pediatrie 574
461 Barbu Petre B C Medicala 530
530 Petrescu George C
405 Filipescu George A
501 Barbulescu Stefan A
Vederi
Actualizare - funcţie care pornind de la o bază
de date produce o altă bază de date (fără a-i
modifica schema).
Diferenţă?
Intersecţie?
Reuniune, intersecţie, diferenţă
Definiţii
TATA_COPIL MAMA_COPIL
Tata Copil Mama Copil
Adam Dan Eva Dan
Adam Marian Eva Lucian
TATA_COPIL U MAMA_COPIL ??
Radu Cristi Maria Cristi
Radu Catalin Carmen Catalin
Redenumire
Operaţia de redenumire (ρ)
Limitările impuse operatorilor standard din teoria mulţimilor pot fi restrictive
în anumite situaţii.
Exemplu
Să considerăm cele două relaţii din figura 3.1.
TATA_COPIL MAMA_COPIL
Tata Copil Mama Copil
Adam Dan Eva Dan
Adam Marian Eva Lucian
TATA_COPIL U MAMA_COPIL ??
Radu Cristi Maria Cristi
Radu Catalin Carmen Catalin
Ar avea sens executarea unei reuniuni între cele două relaţii cu scopul de a obţine
toate perechile ’părinte – copil’ din baza de date.
Acest lucru nu este însă posibil deoarece atributul denumit de noi ’părinte’ are
numele ’tata’ într-o relaţie şi numele ’mama’ în cealaltă relaţie.
Redenumire
Exemplu
TATA_COPIL ρ Parinte←Tata (TATA_COPIL)
Tata Copil Parinte Copil
Adam Dan Adam Dan
Adam Marian Adam Marian
Radu Cristi Radu Cristi
Radu Catalin Radu Catalin
Definiţie
Exemplu
Se consideră relaţia ANGAJAT din figura următoare:
ANGAJAT
Nume Prenume Varsta Salariu
Ionescu Maria 25 2000
Popescu Lucia 40 3000
Diaconescu Nicu 36 4500
Ionescu Marin 40 3900
Exemplu
ANGAJAT
σ Virsta<30∨ Salariu >4000 ( ANGAJAT )
După cum se poate observa, sunt selectate tuplurile din relaţia ANGAJAT
care îndeplinesc condiţia: Varsta < 30 sau Salariu > 4000 (formulă
propoziţională).
Selecţie
Definiţii
Definiţii
AθB este adevărată dacă şi numai dacă t[A] este în relaţia θ cu t[B];
πY (r ) = {t[Y ]/ t ∈ r}
ANGAJAT
Nume Prenume Departament Sef
Ionescu Maria Vanzari Luca π Departament ,Sef (ANGAJAT) ??
Popescu Lucia Vanzari Luca
Diaconescu Maria Personal Damian
Ionescu Marin Personal Damian
Proiecţie
Situaţii în care numărul de tupluri ale rezultatului este egal, respectiv mai
mic decât numărul de tupluri ale operandului:
Întrebare:
Propoziţie
Definiţie
Fie r1(X1) şi r2(X2) două relaţii. Joncţiunea naturală r1 >< r2 este o relaţie
definită pe X1X2 (reuniunea dintre X1 şi X2) astfel încât:
r1 >< r2 = {t definit pe X 1 X 2 / t[ X 1 ] ∈ r1 si t[ X 2 ] ∈ r2 }
Joncţiune
Exemplu
CONTRAVENTIE AUTOVEHICUL
Cod Data Cadru Judet NrInmat NrInmat Judet Proprietar Adresa
143256 25/10/92 567 IS 02 AAA 03 BBB IS Maftei Eduard Nicolina 30
987554 26/10/92 456 IS 02 AAA 01 CCC IS Maftei Eduard Nicolina 30
987557 26/10/92 456 IS 03 BBB 02 AAA IS Luca Marian Primaverii 4
630876 15/10/92 456 VS 03 BBB 03 BBB VS Melinte Dan Primaverii 17
539856 12/10/92 567 VS 03 BBB
CONTRAVENTIE >< AUTOVEHICUL
Joncţiunea naturală a celor două relaţii s-a obţinut prin combinarea fiecărui tuplu din
CONTRAVENŢIE cu exact un tuplu din AUTOVEHICUL:
• cu cel mult unul deoarece atributele Judet şi NrInmat formează o cheie a
relaţiei AUTOVEHICUL;
• cu cel puţin unul datorită constrângerii de referinţă dintre atributele Judet şi
NrInmat din CONTRAVENTII şi relaţia AUTOVEHICUL.
Joncţiune
Definiţie. Fie r1(X1) şi r2(X2) două relaţii. Spunem că joncţiunea naturală
r1 ><r2 este completă dacă:
∀t1 ∈ r1 , ∃t ∈ r1 ><r2, a.i. t[ X 1 ] = t1
∀t2 ∈ r2 , ∃t ' ∈r1 ><r2, a.i. t '[ X 2 ] = t2
r1 r2
Angajat Departament Departament Sef
Ionescu vanzari productie Manole
Balint productie vanzari Burlacu
Baltag productie
r1 ><r2
Angajat Departament Sef
Ionescu vanzari Burlacu
Balint productie Manole
Baltag productie Manole
r1 r2
Angajat Departament Departament Sef
Ionescu vanzari productie Manole
Balint productie depanare Burlacu
Baltag productie
r1 ><r2
Angajat Departament Sef
Balint productie Manole
Baltag productie Manole
r1 r2
Angajat Departament Departament Sef
Ionescu vanzari marketing Manole
Balint productie depanare Burlacu
Baltag productie
r1 ><r2
Angajat Departament Sef
r1 >< FULL r2
Angajat Departament Sef
Ionescu vanzari null
Balint productie Manole
Luca productie Manole
null achizitii Burlacu
ANGAJAT PROIECT
Angajat Proiect Cod Nume
Ionescu A A Venus
Balint A B Marte
Balint B
ANGAJAT PROIECT
Angajat Proiect Cod Nume
Ionescu A A Venus
Balint A B Marte
Balint B
Obs.
ANGAJAT SUPERVIZOR
NrInreg Nume Varsta Salariu NrSup NrAng
101 Maria Ionescu 34 40 210 101
103 Maria Balint 23 35 210 103
104 Lucia Popescu 38 61 210 104
105 Nicu Luca 44 38 231 105
210 Marcel Burlacu 49 60 301 210
231 Alin Lupu 50 60 301 231
252 Nicu Luca 44 70 375 252
301 Andrei Popa 34 70
375 Maria Ionescu 50 65
not and T U F or T U F
U U T T U F T T T T
F T U U U F U T U U
T F F F F F F T U F
Valori NULL în algebra relaţională
Este de notat că această logică trivalentă pentru operatorii algebrici
prezintă unele dezavantaje. PERSOANA
Nume Varsta Salariu
Exemplu Ionescu 35 500
Să considerăm expresia Popescu 27 600
Popa NULL 500
Exemplu
σVarsta >30 ( PERSOANA) - returnează persoanele cu vârsta peste 30 ani.
σVarsta >30 ∨ Varsta IS NULL ( PERSOANA) - returnează persoanele care au sau
care pot avea peste 30 ani.
Vederile sunt definite în sistemele relaţionale ca fiind expresii ale unui limbaj
de interogare.
Vederi
Exemplu
• formula atomică xθy este adevărată pentru acele valori ale lui x şi
y astfel încât valoarea lui x se află în relaţia θ cu valoarea lui y
Exemple
Exemple
În algebra relaţională:
π NrSup ( SUPERVIZOR >< NrAng = NrInreg (σ Salariu >40 ( ANGAJAT )))
În algebra relaţională:
π Nume, Salariu ( ANGAJAT >< NrInreg = NrSup
( SUPERVIZOR >< NrAng = NrInreg (σ Salariu ≥40 ( ANGAJAT ))))
{ A1 : x1 , A2 : x2 | R ( A1 : x1 ) ∧ x2 = x2 }
Expresia
produce ca rezultat 5.. ???
T - lista ţintă, compusă din elemente de tipul Y:x.Z (sau mai simplu x.Z ca
abreviere pentru Z:x.Z), cu x variabilă şi Y, Z secvenţe de atribute de lungimi
egale
L - lista gamei de valori, în care sunt enumerate variabilele libere din formula f,
împreună cu gamele de variaţie corespunzătoare
• L este o listă de elemente de tipul x(R) , cu x variabilă şi R relaţie
• dacă x(R) este în lista gamei de valori, atunci x reprezintă tuplurile din R
Calculul relaţional pe tupluri
• atomi de tipul x. Aθc sau x1. A1θx2 . A2 care compară valoarea lui x
corespunzătoare atributului A cu constanta c şi valoarea lui x1 pe
atributul A1 cu cea a lui x2 pe atributul A2
• conectori ( ∧, ∨, ¬ )
• cuantificatori:
Observaţii
b) găsiţi oraşele care sunt traversate de cel puţin două râuri, precizând
numele oraşului şi numele celui mai lung râu care-l traversează
SQL
În această secţiune vom ilustra utilizarea SQL pentru definirea schemei unei
baze de date.
Notaţii folosite în sintaxa limbajului:
• cuvintele cheie - caractere normale
• variabilele - caractere italice.
• parantezele unghiulare <***> marchează termenii;
• parantezele pătrate [***] - termenii delimitaţi sunt opţionali (pot să nu
apară sau să apară doar o singură dată);
• acoladele {***} - termenul din interior poate să nu apară sau poate fi
repetat de un număr arbitrar de ori;
• barele verticale - unul dintre termenii delimitaţi de acestea trebuie să
apară.
• parantezele () rotunde - cuvinte cheie ale SQL.
5.1.1 Domenii elementare
SQL pune la dispoziţie şase familii de domenii elementare, care pot fi utilizate
pentru definirea domeniilor asociate atributelor schemei.
Sintaxa:
Exemplu
0.17E16→0.17 • 1016
0.17 – mantisă; 16 – exponent; valoare = mantisă ⋅ 10exponent
SQL pune la dispoziţie următoarele domenii numerice aproximative:
• float [(Precizie)]
• real
• double precision
Pentru domeniul float se poate furniza, ca parametru, numărul de digiţi dedicaţi
pentru reprezentarea mantisei (parametrul Precizie).
Domeniul double precision reprezintă numere cu o precizie ridicată faţă de
domeniul real.
5) Dată calendaristică şi - oferă suport pentru gestiunea informaţiilor temporale
timp
• date
• time [(Precizie)] [with time zone]
• timestamp [(Precizie)] [with time zone]
Fiecare domeniu poate fi structurat pe câmpuri:
- domeniul date pune la dispoziţie câmpurile year, month şi day
- domeniul time câmpurile hour, minute şi second
- domeniul timestamp pune la dispoziţie toate câmpurile celor două domenii
amintite anterior.
Pentru domeniile time şi timestamp se poate specifica numărul de poziţii
zecimale utilizate în reprezentarea fracţiunilor de secundă (parametrul Precizie).
Dacă parametrul Precizie este omis:
- domeniul time va folosi precizie 0 (rezoluţie la nivel de secundă)
- domeniul timestamp va folosi o precizie de 6 (rezoluţie la nivel de
microsecundă).
Dacă este specificată opţiunea with time zone, va fi posibilă accesarea a două
câmpuri suplimentare: timezone_hour şi timezone_minute (reprezintă diferenţa
dintre timpul local şi timpul Greenwich).
6) Intervale temporale - oferă posibilitatea reprezentării intervalelor de timp (de
exemplu durata unei acţiuni).
Sintaxa:
Interval PrimaUnitateDeTimp [to UltimaUnitateDeTimp]
• Dacă a doua unitate de timp este şi prima (deci singura) atunci primul
parametru reprezintă numărul de poziţii zecimale semnificative, iar cel
de-al doilea poate reprezenta numărul de poziţii zecimale pentru partea
fracţionară.
Exemplu
create table Departament
(NumeDept char(20) primary key,
Adresa char(50),
Oraş char(20))
5.1.4 Domenii utilizator
La definirea tabelelor, pe lângă domeniile predefinite pot fi utilizate şi domenii
definite explicit de utilizator.
Comanda SQL pentru definirea unui domeniu utilizator pe baza unui domeniu
predefinit este:
create domain NumeDomeniu as DomeniuElementar
[ValoareImplicită]
[Constrângeri]
Un domeniu este caracterizat deci de un nume, de un domeniu elementar
(predefinit sau un alt domeniu utilizator), de o posibilă valoare implicită şi de o
mulţime, posibil vidă, de constrângeri (condiţii ce trebuie îndeplinite de valorile
legale din domeniu).
SQL-2 nu dispune de constructori de domeniu de tip structură sau vector.
Această limitare este dată de conceptul de model relaţional de date, model ce
impune ca toate atributele să fie definite pe domenii elementare.
Declaraţia domeniilor asociază un nume de domeniu cu o mulţime de
constrângeri. Acest lucru este util atunci când trebuie să repetăm aceeaşi definiţie
de domeniu în mai multe tabele.
5.1.5 Valori implicite de domeniu
Termenul ValoareImplicită din definiţia domeniilor şi a tabelelor indică
valoarea ce va fi considerată pentru atributul asociat în cazul inserării unei linii ce
nu specifică o valoare pentru acel atribut.
Dacă este omisă specificarea unei valori implicite, atunci se va utiliza valoarea
NULL ca valoare implicită.
Sintaxa: default <ValoareGenerică | user | NULL>
• ValoareGenerică este o valoare compatibilă cu domeniul asociat;
• opţiunea user setează ca valoare implicită numele de login al utilizatorului
ce a executat comanda de actualizare a tabelului.
Exemplu
NumărCopii smallint default 0 – dacă se inserează o linie şi nu se specifică
valoarea pentru acest atribut, atunci
acestui atribut i se va atribui valoarea 0.
5.1.6 Constrângeri intra-relaţionale
În timpul definirii atât a domeniilor cât şi a tabelelor există posibilitatea de a
defini constrângeri.
not NULL
unique
primary key
Not Null
Exemplu
Nume character(20) not NULL
Unique - impune ca un atribut sau o mulţime de atribute să formeze o (super)
cheie.
• Se impune astfel ca linii diferite să nu conţină aceleaşi valori.
• Excepţie face valoarea NULL, care poate apărea în diverse linii fără a
încălca constrângerea. Aceasta se datorează faptului că fiecare valoare
NULL reprezintă o valoare necunoscută diferită de a altei valori NULL.
Există două moduri de definire a acestei constrângeri.
Prima variantă se utilizează doar în cazul în care constrângerea implică un
singur atribut şi constă în adăugarea cuvântului cheie unique la definirea
atributului.
Exemplu
NrInreg numeric(4) unique
A doua variantă se aplică în cazul în care constrângerea implică mai multe
atribute şi constă în utilizarea clauzei unique (Atribut{, Atribut}) după definirea
atributelor.
Exemplu
Nume character(20) not NULL,
Prenume character(20) not NULL,
Unique (Nume, Prenume)
Primary key
Exemplu
Nume character(20),
Prenume character(20),
Dept character(15),
Salariu numeric(9) default 0,
primary key (Nume, Prenume)
5.1.7 Constrângeri inter-relaţionale
Exemplu
Exemplu
on <delete | update>
<cascade | set NULL | set default | no action>
Exemplu
Create table Angajati
(
NrInreg numeric(6),
Nume character(20) not NULL,
Prenume character(20) not NULL,
Dept character(15)
Salariu numeric(9) default 0,
Oras character(15),
primary key (Nr Inreg),
foreign key (Dept) references Departament (NumeDept)
on delete set NULL
on update cascade,
unique (Nume, Prenume)
)
5.1.8 Actualizarea schemei unei relaţii
Comenzile definite în SQL pentru manipularea schemelor unei baze de date
sunt alter şi drop.
Notă
În momentul definirii unei noi constrângeri, datele din tabel trebuie să satisfacă
acea constrângere. În caz contrar definiţia constrângerii nu va fi validată.
Comanda drop - permite eliminarea datelor de tip schemă, domeniu, tabel, vedere
sau aserţie (constrângere ce nu este asociată unui anumit
tabel).
Sintaxa este:
drop <schema|domain|table|view|assertion> NumeComponentă [<restrict | cascade>]
restrict – o componentă nu va fi validată în situaţia în care componenta nu este
vidă sau este referită în definiţia altei componente.
• schemă nu va fi eliminată dacă ea conţine tabele sau alte componente;
• un domeniu nu va fi eliminat dacă apare în definiţia unui tabel ş.a.m.d.
• această opţiune este implicită.
cascade - o componentă este eliminată împreună cu toate componentele
dependente.
• eliminarea unei scheme care nu este vidă va conduce la eliminarea tuturor
obiectelor care intră în componenţa sa;
• ştergerea unui tabel folosind această opţiune implică ştergerea tuturor liniilor din
tabel;
• opţiunea cascade trebuie utilizată cu mare atenţie deoarece în cazul în care există
dependenţe care nu au fost luate în calcul, rezultatul poate fi diferit de cel scontat;
• multe din sistemele comerciale oferă posibilitatea testării rezultatului comenzii drop
cu opţiunea cascade înainte de execuţia efectivă a comenzii.
5.2 Interogări în SQL
• analizează cererea;
Exemplu
select *
from Angajati
where Nume = ’Ionescu’
Exemplu
SalariuLunar
3.00
Folosirea acestei construcţii este necesară în cazul în care tabelele din clauza
from au atribute cu acelaşi nume, pentru a distinge între referinţele la atribute
omonime.
Exemplu
Exemplu
Duplicate
În SQL un tabel poate avea mai multe linii ce conţin aceleaşi valori pentru
toate atributele (duplicate), spre deosebire de algebra relaţională şi calculul
relaţional.
Dacă se doreşte emularea comportării din algebra relaţională în SQL ar trebui
eliminate toate duplicatele la fiecare execuţie a unei operaţii de proiecţie.
Deoarece operaţia de eliminare a duplicatelor este consumatoare de timp şi
adesea nu este necesară, executarea acestei operaţii este lăsată la latitudinea
persoanei ce implementează interogarea.
Sintaxa eliminarea duplicatelor: select [<distinct | [all]>]
Opţiunea all indică faptul că vor fi păstrate toate înregistrările din rezultat (deci
inclusiv duplicatele) şi este opţiunea implicită.
Exemplu
Se consideră tabelul PERSOANA (Cod, Nume, Prenume, Oras)
PERSOANA
Cod Nume Prenume Oras
IS001122 Ionescu Maria Iasi
BC012345 Popescu Ion Bucuresti
IS123456 Ionescu Vasile Iasi
SV342345 Ionescu Radu Suceava
Exemplu
Interogarea „Să se găsească numele angajaţilor şi oraşele în care aceştia
lucrează” se poate rescrie sub forma
select Nume, Prenume, Oras
from Angajati a inner join Departament d
on a.Dept = d.Dept
În cazul unei joncţiuni, liniile dintr-un tabel ce nu au linii corespondente în
celălalt tabel vor fi eliminate din rezultat.
Pentru a forţa apariţia unor astfel de linii în rezultat se poate apela la
joncţiunea externă, cu cele trei variante:
• left join – furnizează acelaşi rezultat ca şi inner join, dar include şi liniile
tabelului ce apare în stânga joncţiunii pentru care nu există linii
corespondente în tabelul din dreapta;
• right join – păstrează liniile tabelului din dreapta ce nu au corespondent în
tabelul din stânga;
• full join – furnizează acelaşi rezultat ca şi inner join, suplimentat cu liniile
excluse din ambele tabele.
Exemplu
Se consideră o bază de date care conţine tabelele prezentate în figură
SOFERI AUTOVEHICULE
Nume Prenume ID NrInreg Marca Model ID
Ionescu Maria VR 001Y IS01AAA BMW 323 VR 001Y
Popescu Ion PZ 111B SV02BBB BMW Z3 VR 001Y
Popa Stefan AP 222C IS02CCC Lancia Delta PZ 111B
IS01EFD BMW 316 MI 222C
Fig. 5.9 Conţinutul tabelelor SOFERI şi AUTOVEHICULE
Exemplu
Interogarea „Să se găsească şoferii ce deţin autovehicule, incluzând şi
şoferii fără autovehicule” se poate exprima sub forma
select Nume, Prenume, Soferi.ID, NrInreg, Marca, Model
from Soferi , Autovehicule
where Soferi.ID * = Autovehicule.ID
Exemplu
Interogarea „Să se găsească toţi şoferii şi toate maşinile împreună cu
posibilele relaţii între ele” se poate exprima sub forma
select Nume, Prenume, Soferi.ID, NrInreg, Marca, Model
from Soferi natural full join Autovehicule
Observaţii
Prin folosirea alias-urilor se poate referi un tabel de mai multe ori, într-un mod
similar operatorului de redenumire ρ din algebra relaţională.
Când este introdus un alias, se declară o variabilă tip tabel care are ca valoare
conţinutul tabelului pentru care se introduce alias-ul.
Când un tabel apare doar o singură dată în interogare, nu este nici o diferenţă
între a interpreta alias-ul ca pseudonim sau ca o nouă variabilă.
Când tabelul apare de mai multe ori este esenţial să privim alias-ul ca o nouă
variabilă.
ANGAJATI DEPARTAMENT
Exemplu
Interogarea 10: Se consideră baza de date de mai sus. Să se găsească
toţi angajaţii ce au acelaşi nume (dar prenume diferite) cu un angajat care
lucrează în departamentul Producţie.
• se evită necesitatea scrierii întregului nume al tabelului ori de câte ori este
cerut acest lucru;
• se poate face referire de mai multe ori la acelaşi tabel; introducerea unui
alias are semnificaţia declarării unei variabile de tip tabel, ce are acelaşi
conţinut cu tabelul al cărui alias este;
Exemplu
select *
from Autovehicule
order by Marca desc, Model desc
Operatorii agregaţi constituie una din cele mai importante extensii ale SQL în
comparaţie cu algebra relaţională.
În algebra relaţională toate condiţiile sunt evaluate pentru un singur tuplu la un
moment dat. Adesea apare necesitatea evaluării unor proprietăţi ce depind de o
mulţime de tupluri (de exemplu aflarea numărului de angajaţi ce lucrează în
departamentul Producţie).
Operatorii agregaţi sunt:
• count
Sintaxă: count ( < * | [distinct | all] ListaAtribute>)
• Opţiunea * returnează numărul de linii din rezultat.
• Opţiunea distinct returnează numărul valorilor distincte pentru lista de
atribute din rezultat.
• Opţiunea all returnează numărul liniilor ce conţin valori diferite de NULL
pentru lista de atribute.
Dacă se specifică un atribut fără un distinct sau all se consideră opţiunea
implicită all.
Exemplu
Se consideră baza de date cu relaţiile
ANGAJATI (Nume, Prenume, Dept, Birou, Salariu),
DEPARTAMENT (Dept, Adresa, Oras).
Interogarea 12: Să se găsească numărul angajaţilor din departamentul
Productie.
select count (*)
from Angajati
where Dept = ’Productie’
Interogarea 13: Să se găsească numărul valorilor distincte pentru atributul
Salariu pentru toţi angajaţii din tabela ANGAJAŢI.
select count (distinct Salariu)
from Angajati
Interogarea 14: Să se găsească numărul de linii din tabelul ANGAJATI
care au valori diferite de NULL pentru atributul Salariu.
select count (all Salariu)
from Angajati
• sum, max, min, avg
select max(Salariu)
from Angajati a, Departament d
where a.Dept = d.Dept and Oras = ’Iasi’
5.2.3 Interogări group by
Exemplu
Dept Salariu
Administratie 45
Productie 36
Administratie 40
Distributie 45
Planificare 80
Planificare 73
Administratie 40
Productie 46
Fig. 5.13 Proiecţia pe atributele Dept şi Salariu a tabelei ANGAJAŢI
Tabelul rezultat este apoi împărţit în mulţimi ce au aceeaşi valoare
pentru atributele listate în clauza group by.
Dept Salariu
Administratie 45
Administratie 40
Administratie 40
Productie 36
Productie 46
Distributie 45
Planificare 80
Planificare 73
Fig. 5.14 Regrupare în acord cu valorile atributului Dept
Dept Salariu
Administratie 125
Productie 82
Distributie 45
Planificare 153
Fig. 5.15 Rezultatul final al interogării
Restricţie - atributele ce pot apărea în clauza select să fie o submulţime a
atributelor din clauza group by.
Motivul acestei restricţii va fi prezentat prin următorul exemplu.
Exemplu
Exemplu
Se consideră tabelele ANGAJATI şi DEPARTAMENT prezentate în figura
5.1.
Interogarea 21: Să se găsească departamentele în care lucrează angajaţii
ce câştigă cel mai mare salariu.
Exemplu
Se consideră relaţia PERSOANA (Cod, Nume, Prenume, Oras).
Interogarea 22: Să se găsească persoanele care au acelaşi nume şi
prenume, dar coduri diferite.
select *
from Persoana P where exists (select * from Persoana P1
where P1.Nume = P.Nume
and P1.Prenume = P.Prenume
and P1.Cod <> P.Cod )
În acest caz nu se poate executa interogarea imbricată înaintea evaluării
interogării externe, dat fiind că interogarea imbricată nu este definită până când nu
se asignează o valoare variabilei P.
Este necesar în schimb să se evalueze interogarea imbricată pentru fiecare
linie produsă în cadrul interogării externe.
În exemplul prezentat vor fi examinate mai întâi liniile variabilei P una câte una.
Pentru fiecare din aceste linii va fi executată interogarea imbricată. Această
interogare poate fi formulată realizând o joncţiune a tabelei PERSOANA cu ea
însăşi.
O altă cale de a formula interogarea din exemplul anterior este prin folosirea
constructorului de tuplu, reprezentat de o pereche de paranteze rotunde care
marchează lista de atribute.
Exemplu
Se consideră relaţia PERSOANA (Cod, Nume, Prenume, Oras).
Interogarea 23: Să se găsească toate persoanele ce nu au omonime.
select *
from Persoana P
where (Nume, Prenume) not in (select Nume, Prenume
from Persoana P1
where P1.Cod <> P.Cod )
Exemplu
delete from Departament where Dept not in (select Dept from Angajati)
Comanda de mai sus şterge departamentele fără angajaţi.
Este de notat diferenţa dintre comanda delete şi comanda drop definită în
secţiunea 5.1.8.
O comandă de genul
delete from Departament
şterge toate liniile din tabelul DEPARTAMENT, şi posibil toate liniile tabelelor care
sunt legate prin constrângeri de referinţă de acesta, dacă opţiunea cascade este
precizată ca eveniment la ştergere; schema bazei de date rămâne neschimbată,
comanda modificând doar instanţa bazei de date.
Comanda
drop table Departament cascade
are acelaşi efect ca şi comanda anterioară, dar în acest caz schema bazei de date
se modifică, tabelul DEPARTAMENT fiind şters, la fel ca şi vederile sau tabelele
care se referă la el în definiţiile lor.
Comanda
drop table Departament restrict
eşuează dacă există linii în tabelul DEPARTAMENT.
5.3.3 Actualizarea înregistrărilor
Sintaxa instrucţiunii update este
update NumeTabel
set Atribut = <Expresie | InterogareSQL | NULL | default>
{, Atribut = <Expresie | InterogareSQL | NULL | default>}
[where Conditie]
Instrucţiunea update face posibilă actualizarea unuia sau a mai multor atribute
din liniile tabelului NumeTabel ce satisfac o posibilă Conditie.
Dacă nu apare clauza where se vor actualiza toate liniile din tabel.
Noua valoare ce va fi asignată unui atribut poate fi:
• rezultatul evaluării unei expresii, definită pe atributele din tabel;
• rezultatul unei interogări SQL;
• valoarea NULL;
• valoarea implicită a domeniului de definiţie.
Exemplu
Comanda
Aserţiile reprezintă constrângeri ce nu sunt asociate unei anumite linii sau unui
anumit tabel în particular şi fac parte din schema bazei de date.
Aserţiile permit definirea tuturor constrângerilor prezentate şi, în plus, permit
definirea unor constrângeri care nu pot fi exprimate altfel (de exemplu constrângeri
între mai multe tabele, constrângeri ce impun ca un tabel să aibă o anumită
cardinalitate).
Aserţiile au un nume şi pot fi şterse cu ajutorul comenzii drop.
Sintaxa ce permite definiţia aserţiilor este:
create assertion NumeAsertie check (Conditie)
Exemplu
În interiorul unui program se poate seta tipul unei constrângeri la imediată sau
întârziată cu ajutorul comenzilor
Exemplu
Să se definească vederea AngajatiAdmin care va conţine toţi angajaţii din
departamentul Administraţie şi care au salariul mai mare ca 10.
create view AngajatiAdmin (NrInreg, Nume, Prenume, Salariu) as
select NrInreg, Nume, Prenume, Salariu
from Angajati
where Dept = ’Administratie’ and Salariu > 10
În cazul anumitor vederi se pot efectua operaţii de actualizare, dar aceste
operaţii trebuie translate în instrucţiuni de modificare a tabelelor ce stau la baza
vederii.
Nu întotdeauna se pot găsi soluţii de modificare a tabelelor de bază, mai ales
în situaţiile în care vederea se defineşte pe baza unei joncţiuni între mai multe
tabele.
În general sistemele comerciale permit modificarea unei vederi doar dacă este
definită pe un singur tabel; alte sisteme cer ca atributele vederii să conţină măcar o
cheie primară a tabelului de bază.
Clauza check option specifică faptul că operaţiile de actualizare se pot face
numai asupra liniilor ce aparţin vederii şi după actualizare liniile continuă să
aparţină vederii.
Când o vedere este definită pe baza altor vederi, opţiunile local sau cascaded
specifică dacă ştergerea liniilor se face la nivel local sau trebuie propagată la toate
vederile de care depinde vederea în cauză.
Opţiunea implicită este cascaded.
Exemplu
Să se definească vederea AngajatiAdmin1, bazată pe vederea
AngajatiAdmin, care va conţine toţi angajaţii din departamentul
Administraţie şi care au salariul între 10 şi 50.
Exemplu
Interogarea 24: Să se găsească departamentul cu cel mai mare buget
alocat salariilor.
Exemplu
grant select on Departament to Stefan
Clauza with grant option indică posibilitatea propagării privilegiului către alţi
utilizatori.
Se pot utiliza cuvintele cheie all privileges pentru acordarea tuturor privilegiilor.
Exemplu
grant all privileges on Departament to Stefan, Paul
Sintaxa comenzii de revocare de privilegii este:
revoke Privilegii on Resursă from Utilizatori [restrict | cascade]
Printre privilegiile ce pot fi revocate unui utilizator se găseşte şi privilegiul grant
option, ce derivă din utilizarea opţiunii with grant option.
Revocarea privilegiilor poate fi făcută doar de utilizator care, într-o primă fază,
a acordat aceste privilegii.
Opţiunea restrict împiedică execuţia instrucţiunii revoke dacă retragerea
privilegiului are ca efect o retragere în lanţ de privilegii. O astfel de comportare
poate apărea în situaţia în care utilizatorul a primit privilegiul cu opţiunea with grant
option şi a propagat privilegiul către alţi utilizatori.
Opţiunea cascade în schimb va avea ca rezultat revocarea tuturor privilegiilor
din lanţ şi în plus va elimina toate obiectele din baza de date ce au fost construite
pe baza acestor privilegii.
Partea a II-a. Proiectarea bazelor de date
Capitolul 6. Tehnici de proiectare şi modele
Cei doi paşi sunt complementari şi se pot parcurge simultan sau consecutiv.
Implementarea
Operarea
În proiectarea conceptuală
• cerinţele de date furnizează majoritatea informaţiilor
• cerinţele operaţionale se folosesc doar pentru a verifica dacă schema
conceptuală este completă
În proiectarea logică
• schema conceptuală (furnizată ca intrare), rezumă cerinţele de date
• cerinţele operaţionale se folosesc pentru a obţine schema logică
În proiectarea fizică
• schema logică şi cerinţele operaţionale se folosesc pentru optimizarea
performanţelor sistemului
• trebuie luate în considerare caracteristicile SGBD-ului utilizat
Rezultatul procesului de proiectare a bazei de date constă în:
• schema fizică;
6.2. Modelul Entitate – Relaţie (Entity – Relantionship model)
o dictează care apariţii de date (valori pe care baza de date le poate stoca la
diferite momente de timp) sunt legale
Exemplu de model E-R
Entitate m,M
Cardinalitatea
unui atribut
Identificatori
Relaţie
interni
Atribut Identificator
simplu extern
Atribut
Generalizare
compus
m1,M1 m2,M2
Cardinalitatea Submulţime
unei relaţii
• atributele pot fi
simple
compuse
Atribut compus - mulţime de atribute ale aceleaşi entităţi sau relaţii ale căror
înţelesuri sau utilizări sunt strâns conectate
Ex.: atributele Strada, NumărCasă, CodPoştal ale entităţii PERSOANĂ pot fi grupate
pentru a forma atributul compus Adresă
• descrie numărul minim, respectiv maxim de apariţii ale relaţiei la care poate
participa o apariţie a entităţii
• este rar cazul în care participarea este obligatorie pentru toate entităţile
implicate;
o motiv: când se adaugă o nouă apariţie a entităţii, în general apariţiile
corespunzătoare ale altor entităţi legate de aceasta nu sunt cunoscute încă
sau nu există
Exemplu
• identificator intern - format din unul sau mai multe atribute ale entităţii - este
cunoscut sub numele de cheie
• un identificator extern poate implica una sau mai multe entităţi, cu condiţia
ca fiecare dintre ele să fie într-o relaţie în care entitatea de identificat
participă cu cardinalitatea (1,1);
• fiecare entitate trebuie să aibă un identificator (intern sau extern) dar poate
avea mai mult de unul;
• entitatea E este mai generală, în sensul că E1, ..., En sunt cazuri particulare ale
lui E ⇒ E este o generalizare a lui E1, ..., En, iar E1, ..., En sunt particularizări
ale entităţii E.
Proprietăţi
• exclusivă - fiecare apariţie a entităţii părinte este cel mult o apariţie a unei
entităţi copil; în caz contrar generalizarea este suprapusă.
• Exemple
- Generalizarea PERSOANĂ pentru BĂRBAT şi FEMEIE este totală
(persoanele pot fi numai bărbaţi sau femei) şi exclusivă (o persoană este fie
bărbat fie femeie).
- Generalizarea VEHICUL pentru AUTOMOBIL şi BICICLETĂ este parţială
(există şi alte tipuri de vehicule) şi exclusivă.
- Generalizarea PERSOANĂ pentru STUDENT şi ANGAJAT este parţială şi
suprapusă (există studenţi care sunt şi angajaţi).
• O schemă E-R este adeseori insuficientă pentru a descrie toate aspectele unei
aplicaţii în detaliu.
Spre exemplu, în figura 17, nu este clar dacă entitatea PROIECT se referă
la un proiect intern al companiei sau la un proiect extern la care compania
respectivă este parte.
• derivare - un concept care poate fi obţinut pe baza unei deducţii sau a unui
calcul matematic din alte concepte ale schemei
Exemplu: atributul Cost poate fi obţinut ca sumă a atributelor Net şi Taxe.
Regulile pentru descrierea conceptelor se exprimă în general în limbaj natural.
(RO3) un departament din filială Iaşi trebuie manageriat de un angajat cu mai mult
de 10 ani vechime în companie
Derivări
(RO5) bugetul unui proiect este obţinut prin înmulţirea sumei salariilor angajaţilor
ce lucrează la el cu 3
• Posibile aplicaţii anterioare care trebuie să fie înlocuite sau cu care noua
aplicaţie trebuie să interacţioneze.
Exemplu. Se cere proiectarea unei baze de date pentru o companie de training şi
pentru care s-au colectat specificaţiile prezentate în tabelul următor. Datele au fost
extrase prin interviuri cu angajaţii companiei.
1 Dorim crearea unei baze de date pentru o companie care face cursuri de instruire
2 Pentru aceasta trebuie să stocăm date despre instruiţi şi instructori. Pentru
3 fiecare participant la curs (în jur de 5000), identificaţi prin cod, vrem să stocăm
4 codul numeric personal, numele, vârsta, sexul, locul naşterii, numele
5 angajatorului, adresa şi numărul de telefon, angajatorii anteriori (şi perioada
6 angajării), cursurile urmate (există circa 200 de cursuri) şi aprecierea finală la
7 fiecare curs. Avem nevoie de asemenea să reprezentăm seminariile la care
8 fiecare participant este aşteptat în prezent şi, pentru fiecare zi, locurile şi orele la
9 care clasele sunt ocupate.
10 Fiecare curs are un cod şi un titlu şi fiecare curs poate fi organizat de oricâte ori.
11 Fiecărei organizări a unui curs particular îi spunem „ediţie” a cursului. Pentru
12 fiecare ediţie vom reprezenta data de start, data de sfârşit şi numărul
13 participanţilor. Dacă un instruit este dintr-o profesie liberală trebuie cunoscut
14 domeniul de expertiză şi dacă este necesar titlul său. Pentru oricine care lucrează
15 la companie, vom stoca nivelul şi poziţia deţinută.
16 Pentru fiecare instructor (circa 300) vom preciza numele, vârsta, locul naşterii,
17 ediţia cursului predat, cursurile predate în trecut şi cursurile pe care un titular este
18 calificat să le ţină.
19 Se stochează numerele de telefon ale tuturor instructorilor.
20 Un instructor poate fi angajat permanent al companiei de training sau poate fi
21 angajat temporar.
Este evident că cerinţele au ambiguităţi.
Spre exemplu există:
• participanţi sau instruiţi
• titulari sau instructori
• cursuri sau seminarii
T1
De la o entitate la două entităţi
şi relaţia dintre ele
• se aplică atunci când o entitate descrie două concepte logice diferite legate
unele de altele
Exemplu
în aplicaţia descrisă în secţiunea anterioară se poate începe cu
entitatea CURS
acest concept pare prea abstract, putând face deosebirea între:
- TIPCURS (care are un cod şi un titlu)
- EDIŢIECURS (care are o dată de start şi una de sfârşit)
aceste două entităţi pot fi legate prin relaţia TIP
Transformare Concept iniţial Rezultat
T2
De la o entitate la o
generalizare
Exemplu
T3
De la o relaţie la relaţii
multiple
• se aplică atunci când o relaţie descrie două sau mai multe concepte diferite
legând aceleaşi entităţi
Exemplu
T4
De la o relaţie la o entitate
cu relaţii
Exemplu
Exemplu
T6
Adăugarea atributelor la o
relaţie
Dezavantajul
este necesară o viziune globală asupra tuturor conceptelor, ceea ce este dificil
de realizat în cazul aplicaţiilor complexe
Strategia bottom-up (de jos în sus)
T1
Generarea unei entităţi
Exemplu
T2
Exemplu
T3
Generarea unei
generalizări
Exemplu
T4
Exemplu
Dezavantajul
sau
Corectitudinea schemei
O schemă conceptuală este corectă dacă utilizează corect construcţiile puse la
dispoziţie de modelul conceptual.
Accesibilitatea schemei
O schemă conceptuală este accesibilă când reprezintă cerinţele într-un mod
natural şi uşor de înţeles.
Minimalitatea schemei
• schema este minimală când toate specificaţiile datelor sunt reprezentate
doar o singură dată în schemă
• schema nu este minimală când apar redundanţele – concepte derivate din
altele
• o sursă tipică de redundanţe este prezenţa ciclurilor determinate de
prezenţa relaţiilor şi/sau generalizărilor
• câteodată redundanţele sunt necesare din motive de proiectare, aceste
situaţii fiind precizate în documentaţie
7.4 Metodă de abordare a proiectării conceptuale
1. Analiza cerinţelor
• Construirea unui vocabular
• Analiza cerinţelor şi eliminarea ambiguităţilor
• Gruparea cerinţelor
2. Etapa de bază
4. Etapa iterativă (se repetă pentru toate schemele până când fiecare
specificaţie este reprezentată)
5. Integrarea
Instruiţi
Se pot identifica două tipuri:
• angajaţi
• liber profesionişti
Aceste entităţi se reprezintă ca specializări ale entităţii INSTRUIT;
generalizarea este totală.
Este necesară reprezentarea angajatorilor instruiţilor. Aceasta se poate face
introducând entitatea ANGAJATOR care este legată printr-o relaţie de ANGAJAT.
Este necesară de asemenea distincţia între conceptele angajare actuală şi
anterioară.
Decidem să divizăm relaţia în două relaţii: ANGAJAREANTERIOARĂ şi
ANGAJAREACTUALĂ.
Prima are o dată de start şi una de sfârşit şi este legată de entitatea
INSTRUIT (deoarece şi liber profesioniştii se poate să fi fost angajaţi).
A doua relaţie are doar dată de start şi este legată de entitatea ANGAJAT.
Adăugând atribute entităţilor şi relaţiilor, cardinalităţi pentru relaţii şi
identificatori ai entităţilor se obţine schema din figura 10.
Se observă că entitatea INSTRUIT are doi identificatori (Cod şi CNP). Atributul
TitluProfesional este opţional.
Figura 10. Rafinarea unei porţiuni a schemei cadru
Instructori
Se disting cazurile în care aceştia sunt fie angajaţi permanenţi ai companiei, fie
angajaţi temporar. Se realizează astfel o generalizare totală, cu entitatea părinte
INSTRUCTOR.
Vom reprezenta aceste concepte cu două entităţi distincte legate prin relaţia
TIP.
Clasele unui curs se pot descrie printr-o entitate legată de ediţiile cursurilor
prin relaţia COMPOZIŢIE.
Pentru ediţiile unui curs, presupunem că două ediţii ale aceluiaşi curs nu pot
începe în aceeaşi zi şi astfel un identificator pentru entitatea EDIŢIECURS este
format din atributul DatăStart şi entitatea CURS.
Schema finală este obţinută prin integrarea schemelor obţinute până în acest
punct.
Ţinând cont de schema cadru, trebuie clarificată relaţia între cursuri şi instruiţi.
• prezenţă curentă
• prezenţă anterioară
Exemplu
Etape:
Indicatori de performanţă:
• costul unei operaţii – evaluat în funcţie de numărul de apariţii ale entităţilor şi
relaţiilor ce sunt parcurse pentru a executa o operaţie asupra unei baze de
date
• cerinţa de stocare – evaluată în funcţie de numărul de octeţi necesari stocării
datelor descrise de schemă
Pentru a evalua aceşti indicatori avem nevoie de următoarele informaţii:
• volumul de date
– numărul de apariţii ale fiecărei entităţi şi relaţii din schemă
– dimensiunea fiecărui atribut
• caracteristicile operaţiilor
– tipul operaţiei (interactivă sau batch)
– frecvenţa operaţiei (numărul mediu de execuţii într-un anumit interval de
timp)
– datele implicate (entităţi şi/sau relaţii)
• operaţia 1: atribuie un angajat unui proiect;
• operaţia 2: găseşte datele pentru un angajat, pentru departamentul în care lucrează
acesta şi pentru proiectele în care este implicat;
• operaţia 3: găseşte datele pentru toţi angajaţii unui anumit departament;
• operaţia 4: pentru fiecare filială, găseşte departamentele, cu numele managerilor şi
lista angajaţilor din fiecare departament.
Tabelul volumelor
Concept Tip Volum
Filială E 10 Tabelul operaţiilor
Departament E 80 Operaţie Tip Frecvenţă
Angajat E 2000 Op 1 I 50/zi
Proiect E 500 Op 2 I 100/zi
Compoziţie R 80 Op 3 I 10/zi
Membru R 1900 Op 4 B 2/săptămână
Management R 80
Participare R 6000
Exemplu:
• numărul de apariţii ale relaţiei COMPOZIŢIE este egal cu numărul departamentelor,
deoarece cardinalitatea relaţiei indică faptul că fiecare departament aparţine doar
unei filiale
• numărul de apariţii ale relaţiei MEMBRU este mai mic decât numărul angajaţilor,
deoarece există angajaţi care nu aparţin nici unui departament
• dacă un angajat este implicat în medie în trei proiecte avem 6000 de apariţii ale
relaţiei PARTICIPARE (şi deci 6000/500=12 angajaţi în medie pentru fiecare proiect)
Schema de navigare - constă în fragmente ale schemei E-R relevante pentru
operaţie; este utilă desenarea „căilor logice” care trebuie urmate pentru a accesa
informaţiile cerute.
• operaţia 2: găseşte datele pentru un angajat, pentru departamentul în care lucrează
acesta şi pentru proiectele în care este implicat;
Tabelul accesărilor
Concept Tip Accesări Tip
Angajat Entitate 1 R
Membru Relaţie 1 R
Departament Entitate 1 R
Participare Relaţie 3 R
Proiect Entitate 3 R
8.2 Restructurarea schemei E-R
fiecare atribut poate fi dedus din celelalte două prin operaţii aritmetice
• atribute ce pot fi derivate din alte atribute aparţinând altor entităţi/relaţii, de
obicei prin intermediul funcţiilor agregat
Exemplu
Dezavantajele ar fi:
Costul operaţiilor
Pentru operaţia 1 (adaugă o persoană nouă cu oraşul de rezidenţă al acesteia):
• 1 operaţie de scriere în entitatea PERSOANĂ (adăugare persoană);
• 1 operaţie de scriere în relaţia REZIDENŢĂ (adăugare pereche persoană-
oraş);
• 1 operaţie de citire din entitatea ORAŞ (găsire oraş);
• 1 operaţie de scriere în entitatea ORAŞ ( actualizare număr de locuitori).
Tabelul accesărilor (în prezenţa redundanţelor)
Operaţia 1
Concept Tip Accesări Tip
Persoana E 1 W
Rezidenţă R 1 W
Oraş E 1 R
Oraş E 1 W
Costul operaţiilor
• Entitatea părinte E0 este eliminată şi, prin proprietatea de moştenire, atributele sale,
identificatorii şi relaţiile în care era implicată sunt adăugate entităţilor copil E1 şi E2.
• Relaţiile R11 şi R12 reprezintă restricţia relaţiei R1 pe apariţiile entităţii E1, respectiv E2.
Este posibilă doar dacă generalizarea este totală, altfel apariţiile lui E0 care nu
sunt apariţii nici ale lui E1 nici ale lui E2 nu vor putea fi reprezentate.
o Această metodă este utilă când există operaţii care se referă doar la apariţiile lui
E1 sau ale lui E2 şi astfel se face distincţia între aceste entităţi.
o Nu mai există în principiu atribute ce pot lua valori NULL.
o Numărul de accesări este mai redus în comparaţie cu a treia metodă, deoarece
nu este necesară accesarea lui E0 pentru a accesa atribute ale E1 şi E2.
3. Substituirea unei generalizări cu relaţii
Este utilă atunci când generalizarea nu este totală şi operaţiile se referă fie la
apariţiile şi atributele lui E1(E2) fie ale lui E0
o Stocarea este mai mică în raport cu prima metodă datorită absenţei valorilor
NULL.
o Creşte numărul accesărilor pentru a păstra consistenţa apariţiilor.
Opţiunile prezentate nu sunt singurele posibile.
O variantă ar fi cea din figura următoare.
Principiu.
Exemplu:
• Entitatea AGENTIE este separată în două entităţi: una având acelaşi nume şi
aceleaşi atribute cu entitatea originală, în afară de atributul multi-valoare
(Telefon) şi o entitate TELEFON cu atributul Numar.
• Entităţile sunt legate de o relaţie 1:N.
• Evident, dacă atributul este opţional, atunci cardinalitatea minimă pentru
entitatea TELEFON trebuie să fie 0.
Combinarea entităţilor - operaţia inversă partiţionării
• se face distincţie între jucătorii prezenţi ai unei echipe de fotbal şi cei din
trecut
Selecţia identificatorilor primari
În cazul în care există entităţi ce deţin mai mulţi identificatori apare necesitatea
stabilirii acelor atribute ce formează identificatorul primar.
Identificatorul primar va avea drept corespondent în modelul relaţional o cheie
primară.
Criteriile de alegere a unui identificator primar sunt:
• Atributele ce pot deţine valori NULL nu pot forma un identificator primar.
• Este indicat ca un identificator primar să conţină un atribut sau cât mai
puţine atribute.
Avantaje:
- indecşi de dimensiune redusă (un index este o structură auxiliară pentru
acces rapid la date);
- spaţiu redus pentru crearea legăturilor logice între relaţii;
- sunt facilitate operaţiile de joncţiune.
• Un identificator intern este de preferat unuia extern care poate implica mai
multe entităţi
- Motiv: identificatorii externi sunt translaţi în chei ce conţin identificatorii
tuturor entităţilor implicate în identificatorul extern.
• Este de preferat un identificator ce este utilizat de majoritatea operaţiilor
pentru a accesa apariţiile entităţii.
- operaţiile vor fi executate eficient, fiind avantajate de indecşii construiţi
automat de sistemul de gestiune a bazei de date.
FURNIZOR(IDFurnizor, NumeFurnizor)
PRODUS(Cod, Tip)
DEPARTAMENT(Nume, Telefon)
LIVRARE(Furnizor, Produs,
Departament, Cantitate)
Cheia relaţiei CONTRACT este formată numai din identificatorul entităţii JUCATOR
deoarece cardinalităţile indică faptul că fiecare jucător are contract la o singură echipă.
Observaţii
• Relaţiile JUCATOR şi CONTRACT au aceeaşi cheie ⇒ există posibilitatea combinării
celor două relaţii în una singură, fără să existe pericolul introducerii de redundanţe.
• Combinarea este posibilă datorită corespondenţei 1:1 între instanţele celor două relaţii:
JUCATOR(Nume, DataNastere, Pozitie, Echipa, Salariu)
ECHIPA(Nume, Oras, CuloriEchipa)
Trebuie impusă o constrângere de referinţă între atributul Echipa şi relaţia ECHIPA.
• Presupunem că entitatea JUCATOR participă opţional la relaţia CONTRACT ⇒ ambele
translări prezentate anterior sunt valide. Ce-a de-a doua prezintă dezavantajul că pot
exista valori NULL în relaţia JUCATOR pentru atributele Echipa şi Salariu.
Regulă: entitatea ce participă la o relaţie E-R cu cardinalitatea maximă 1 este translată
într-o relaţie M-R ce include identificatorii celorlalte entităţi implicate în relaţia E-R şi
posibilele atribute ale relaţiei E-R ⇒ nu mai este nevoie de o relaţie M-R separată pentru
relaţia din schema E-R.
Presupunem că entitatea PRODUS participă în relaţia LIVRARE cu
cardinalităţile minimă şi maximă 1 ⇒ pentru fiecare produs există un singur
furnizor care livrează produsul respectiv şi un singur departament deservit.
Schema este translatată sub forma:
FURNIZOR(IDFurnizor, NumeFurnizor)
DEPARTAMENT(Nume, Telefon)
PRODUS(Cod, Tip, Furnizor, Departament, Cantitate)
Se impun constrângeri de referinţă între atributul Furnizor al relaţie
PRODUS şi relaţia FURNIZOR şi între atributul Departament al relaţiei PRODUS
şi relaţia DEPARTAMENT.
Entităţi cu identificatori externi
Soluţia este:
ANGAJAT(Numar, Nume, Salariu)
DEPARTAMENT(Nume, Telefon, Filiala, Sef, DataStart)
cu constrângere de referinţă între atributul Sef al relaţiei DEPARTAMENT şi
relaţia ANGAJAT.
Această opţiune este preferabilă uneia în care relaţia E-R este reprezentată în
relaţia M-R ANGAJAT prin numele departamentului manageriat, deoarece, pentru
acest atribut, ar putea exista valori NULL.
Să considerăm cazul în care ambele entităţi au participări opţionale.
Să presupunem că în schema din figura anterioară pot exista departamente
fără şef (cardinalitatea minimă a entităţii DEPARTAMENT este 0).
În acest caz se obţine prin translare:
ANGAJAT(Numar, Nume, Salariu)
DEPARTAMENT(Nume, Telefon, Filiala)
MANAGEMENT(Sef, Departament, DataStart)
Se observă că se poate lua drept cheie a relaţiei MANAGEMENT atributul
Departament.
Se impun constrângeri de referinţă între atributele Sef şi Departament ale
relaţiei MANAGEMENT şi relaţiile ANGAJAT şi DEPARTAMENT.
Avantaj - atributele ce implementează relaţia din schema E-R nu pot avea
valori NULL.
Dezavantaj - relaţia nouă introdusă.
Această soluţie este recomandată în cazul în care numărul de apariţii ale
relaţiei este mic în comparaţie cu numărul de apariţii ale entităţilor implicate în
relaţie.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Mit… si realitate
• Oricine poate face programare Web
– Reteta: programator (la nivelul documentelor HTML?)
cu ceva cunostinte de ASP.NET si SQL
– Programarea Web = (mult) mai mult de atat
• Aplicatii desktop vs. Aplicatii web?
• Aplicatii
p precum Photoshop,
p p Word, Excel… in JavaScript?
p … Deja j
se intampla.
• Business-ul are nevoie de Web. Piata de Web a intrecut de mult
piata aplicatiilor (inca) Desktop.
Desktop
• Browserele devin mai puternice, limbajele, tehnologiile, platformele
mai evoluate.
• Programarea Web = mediu challenging
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Capitole principale
• Arhitectura unei aplicatii
p Web.
• Servere HTTP: caracteristici, exemple. Limbajul HTML: elemente de
baza tabele
baza, tabele, cadre,
cadre formulare.
formulare Scripturi scrise in limbaje compilate
compilate.
• Framework
Framework-uri
uri Web
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
vanzari
financiar
Business
managementt marketing
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Etapa web
web--based
• Deosebirea principala in acest caz este
accesarea aplicatiei
– Printr-un client standard (browserul)
– De foarte multe ori din afara locatiei unde se afla
aplicatia
li ti
– Comunicatia se face nu prin canale private / dedicate
ci prin Internet
Conversația
Conversația cu un server Web
• Conexiune TCP la server pe portul 80 (implicit)
• Browser-ul
B l ttrimite
i it peste
t TCP ceva de
d genul: l
GET /index.html
/index html HTTP/1
HTTP/1.0
0
User-Agent: Mozilla/4.73 [en] (X11; U;
Linux 2.0.35 i686)
Host: www.yahoo.com
Accept: image/gif, image/x-xbitmap,
image/jpeg, image/pjpeg, image/png,
*/*
Accept-Encoding: gzip
Accept Lang age en
Accept-Language:
Accept-Charset: iso-8859-1,*,utf-8
Cookie: B=2vsconq5p0h2n
q p
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Conversația
Conversația cu un server Web
• Serverul răspunde cu:
HTTP/1.0 200 OK
Content-Length: 16018
Content-Type: text/html
<html><head><title>Yahoo!</title><base
href=http://www.yahoo.com/>
…etc.
• Dacă
D ă maii avem șii iimagini
i i embedded
b dd d iimages:
<img width=230 height=33
src="http://us
src= http://us.a1.yimg.com/us.yimg.com
a1 yimg com/us yimg com
/a/an/anchor/icons2.gif">
…și apoi repetă tot acest proces cu noul URL.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Evolutia
Web--ului
Web
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Probleme de rezolvat
• In care locatii trebuie sa existe server (=
(
bani necesari dotarii cu asa ceva) si in care
nu.
nu
• Se analizeaza:
– Numarul de utilizatori dintr-o anumita locatie
– Latimea de banda disponibila intre locatia
respectiva
espec a ssi locatia
oca a pprincipala
c pa a
– Timpul de raspuns necesar de asigurat
utilizatorilor
tili t il
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Probleme de rezolvat
• Rezolvarea problemelor de securizare a
transmisiei de date:
– datele circuland in afara retelei organizatiei trebuie de
exemplu criptate corespunzator.
• Problemele
P bl l legate
l t de
d browser:
b
– aplicatia
p trebuie sa p
poata fi accesata in acelasi mod si
fara pierderi de functionalitate prin oricare din tipurile
principale de browser existente.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Probleme de rezolvat
• Probleme legate de conectivitate:
– din toate locatiile de unde aplicatia e necesar sa fie
accesibila timpul de raspuns trebuie sa fie in parametrii
ceruti.
HTTP
• Comenzi text peste TCP/IP
• La bază un protocol cerere-răspuns, cu inițiere din partea
cilentului
• Stateless: fiecare cerere tratată complet independent
– Nu există metode implicite
p de creare de asocieri între cereri
distincte
– Nu se furnizează stări persistente
• În plus, încă din primele zile ale HTTP-ului: cookies
– Header suplimentar
p adăugat
g de server unui răspuns
p HTTP
– Cookies sunt opace pentru client
– Clientul
C e u a ar trebui
ebu să trimită
ă înapoi
apo uun coo
cookie
e în cad
cadrul
u unei
u e cereri
ce e
succesive către același server
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Script CGI
• Scripturile CGI sunt o modalitate de a furniza
pagini dinamice HTML sau de alt tip (imagini,
video, sunet, postscript, etc).
• Acestea nu sunt efectiv stocate ca atare pe
serverul web ci sunt generate pe baza datelor
obtinute de la utilizator (în general conform
datelor completate de catre acesta întrîntr-un
un
formular).
• Di
Din aceasta
t cauza elel nu pott fi servite
it di
directt de
d
serverul web ci trebuiesc create de catre un
program care se numeste t script
i t CGI.
CGI
Programare Web– Curs 1 39
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Script CGI
• Numele de script CGI provine din denumirea
specificatiei interfetei între serverul de web si
astfel de programe, numita Common Gateway
Interface - prescurtat CGI.
• Teoretic orice program executabil care respecta
anumite conventii în ceea ce priveste mediul din
care îsi colecteaza datele initiale si modul în care
scrie rezultatul poate fi un script CGI.
Exemplu
• Cel mai simplu exemplu de script este un
program care pentru orice date de intrare
afiseaza un mesaj standard. Iata un exemplu
scris în limbajul C:
#include <stdio.h>
int main()
{
printf("Content-Type: text/html\n\n");
printf("<html>\n");
printf("<body>\n");
printf("Sunt un script CGI\n");
printf("</body>\n);
printf("</html>\n");
}
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu
• Rezultatul rularii acestui script este urmatorul:
Client side
• Abordarea client-side: paginile continând scripturi
sunt trimise de serverul web fara nici o modificare
catre browser, urmând ca executia lor sa aiba loc
acolo.
• Este cazul limbajului Java (applet
(applet-uri,
uri aplicatii
JavaWS, JavaFX) pe care browserele uzuale îl
contin nativ
nativ.
• Op parte a p
procesarilor se transfera de la server
=> micsorarea volumului de activitate pentru
primul.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Server side
• Abordarea server-side: serverul înlocuieste
în pagina ceruta programul cu rezultatul
acestuia.
acestuia
• Pentru aceasta serverul trebuie sa aiba
suport pentru limbajul respectiv.
• Cursul prezinta limbajul de scripting server
side PHP
simbol1=valoare1&simbol2=valoare2&…&simbolk=valoarek
Programare Web
Limbajul
j HTML: elemente de baza baza,,
formulare,, tabele,
formulare tabele, cadre
Limbajul HTML
• Serverul Web livrează la cerere fișiere HTML.
• Fişiere text conţinând şi directive care sunt
folosite de browser pentru afişarea pe ecran a
textelor, imaginilor, tabelelor, formularelor,
ferestrelor şi a celorlalte elemente pe care cel
care a compus fişierul le-a utilizat.
• Aceste directive le putem vedea doar dacă
vizualizam sursa documentului şi de regulă
g nu
apar pe ecran.
Generalități
• În HTML p pentru a diferenția
ț directivele de
restul elementelor acestea se pun între
paranteze ascuțite:
<directiva>
• O mare parte a lor au efect asupra unei
întregi
g pporțiuni
ț de fișier,
ș încadrată de
început-sfârșit:
<directiva>
….
</directiva>
/di i
Programare Web– Curs 2 3
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Format general
<html>
<head>
Directive continând informaţii generale
despre pagina
</head>
/h d
<body>
Conţinutul paginii incluzând texte şi
directive
</body>
</html>
/ht l Programare Web– Curs 2
4
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Hello World
<html>
<head>
<title>Hello world title</title>
</head>
<body>
HELLO WORLD!
</body>
</html>
Erori
• Nu putem vorbi de semnalarea erorilor in HTML
• Daca un Browser un recunoaste o directiva pur si simplu
o ignora.
• Exemplu:
<html>
<hed>
<turtle>Hello world title</turtle>
</hed>
<bady>
<h
h 1>HELLO
1 HELLO WORLD!</h
WORLD! /h 1> 1
<mimi>Directiva <upb>necunoscuta</upb></mimi>
</bady>
/bady
</html>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Erori
• Rezultatul va fi:
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Stiluri
În zona de conținut a paginii (între <body> și
</body> putem folosi elemente ca:
• Stiluri ((headings):
g ) Acestea sunt asemănătoare ca
efect selectării în Microsoft Word a stilurilor
Heading g 1,, Heading
g 2,, etc.
Exemplu:
<h1> Titlu principal </h1>,
<h2> Titlu secundar </h2> ...
Liste neordonate
Lista fără numere de ordine ((unordered list))
<ul> … <li> … </ul>:
<ul>l
<li>Primul
m element
m în lista
<li>Al doilea element în lista
.......
<li>Ultimul
li Ultimul element din lista
</ul>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Liste ordonate
Lista cu numere de ordine ((ordered list))
<ol> …
<li> … </ol>:
<ol>
<li>Primul element în lista
<li>Al doilea element în lista
.......
<li>Ultimul element din lista
</ol>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Liste de defini
definițții
Lista de definiţii:
ţ
<dl>
<dt>Primul
m termen</dt>
m
<dd>Definiţia primului termen</dd>
<dt>Al
dt Al doilea termen</dt>
termen /dt
<dd>Definiţia celui de-al doilea termen</dd>
.......
<dt>Ultimul termen</dt>
<dd>Definiţia ultimului termen</dd>
</dl>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu
Text <u>subliniat</u>,, <i>caractere
italice</i>, <b>ingrosat</b> sau
Toate cele trei
<u><i><b>combinate</b></i></u>.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu
Fiecare p
pereche de directive de formatare își
ș
face efectul independent de celelalte:
Toate cele
T l treii
<u><i><b>combinate</u> dar </i>
intercalate</b>.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Ancora (link)
• Acest tip de directivă este esenţial şi este cel care
implementează de fapt conceptul de hipertext
hipertext.
• În cadrul unei pagini HTML unul sau mai multe cuvinte
consecutive pot avea asociată o altă pagină HTML.
• În momentul în care utilizatorul selectează ((click)) zona
respectivă, automat browserul cere documentul asociat şi îl
afişează pe ecran.
• Forma cea mai simpla a unei astfel de directive este:
<a href=”URL-adresa
h f ”URL d s p paginii
i ii asociate”>
s i t ”>
Cuvinte care se pot selecta
</a>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
URL
Adresa specificată
p prin
p href p poate fi:
• Relativă la pagina curentă:
p 1: <a href=”pag1.html”>Pagina
1.Exemplul f p g m g
1</a><br>
2 Exemplul 2: <a
2.Exemplul
href=”documente/pag2.html”>Pagina
2</a><br>
/ b
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
URL
Sau poate fi:
• Absolută, în care caz se specifică o cale
completa pe acelaşi server de web (exemplul 3)
sau o adresă completă (exemplul 4)
3. Exemplul 3: <a
href=”/documente/pag3.html”>Pagina
p g g 3</a><br>
4. Exemplul 4: <a href=
”http://www
http://www.un.server.web/doc/pag4.html
un server web/doc/pag4 html”>Pag
>Pag
ina 4</a><br>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
URL
• În primul caz noua pagină se găseşte pe acelaşi
server şi în acelaşi director cu pagina curentă.
• În al doilea caz
caz, pentru găsirea paginii pag2.html
pag2 html
serverul web porneşte din directorul paginii
curente şi caută în subdirectorul documente.
documente
p g g
1. Exemplul 1: <a href=”pag1.html”>Pagina
1</a><br>
2 Exemplul 2: <a
2.
href=”documente/pag2.html”>Pagina 2</a><br>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
URL
• În al treilea caz, pentru găsirea paginii pag3.html serverul
web porneşte din rădăcina arborelui de documente
(DOCUMENT_ROOT) şi caută în subdirectorul documente.
• În ultimul
ltim l ca
caz no
noua
a pagină se poate găsi pe alt ser
server
er de
web decât cea curentă. Browserul va contacta acest server
care îi va livra pagina aflată în subdirectorul doc
doc.
3. Exemplul 3: <a href=”/documente/pag3.html”>Pagina
3</a><br>
4. Exemplul 4:<a
h f ”h
href=”http://www.alt.server.de.web/doc/pag4.html”>Pagi
// l d b/d / 4 h l” P
na 4</a><br>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Bookmark
Trimiteri în interiorul unui document:
• În acest caz marcarea locului referit se face cu:
<a name=”marcaj-tinta”>. . . </a>
• Referinţa are forma
<a href=”adresa-document#marcaj-tinta> . . . </a>
unde adresa documentului poate fi relativă sau absolută.
• Exemplu cu două documente HTML în care primul
reprezintă cuprinsul (tabla de materii) pentru al doilea.
• Prin selectarea unei ancore care trimite spre o porţiune a
unui document acesta este încărcat în întregime de
browser dar poziţionarea se face nu la începutul său ci în
punctul ţintă marcat.
marcat
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu - cuprins
<html>
<head>
h d
<title>Cuprins</title>
</head>
<body>
<h1>Cuprinsul lucrarii</h1>
<hr>
<ul>
<li><a
li h
href=”Continut.html#cap1”>Capitolul
f ”C ti t ht l# 1” C it l l 1</a>
1 /
<li><a href=”Continut.html#cap2”>Capitolul 2</a>
<li><a
li a href=”Continut.html#cap3”>Capitolul
href Continut.html#cap3 Capitolul 3 3</a>
/a
</ul>
</body>
</html>
Programare Web– Curs 2 22
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu - documentul
<html>
<head>
h d
<title>Lucrare</title>
</head>
<body>
<h1><a name=”cap1”>Capitolul 1</a></h1>
. . . Continutul capitolului 1
<h1><a name=”cap2”>Capitolul 2</a></h1>
. . . Continutul
C ti t l capitolului
it l l i 2
<h1><a name=”cap3”>Capitolul 3</a></h1>
. . . Continutul capitolului 3
</body>
</html>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Rezultat - cuprins
Rezultat - document
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Imagini
• Documentele HTML pot conţine directive de
includere imagini (includerea imaginii în
document se face la afișarea acestuia).
• Sintaxa (simplificată) este:
<img
i src="foto2.jpeg"
"f t 2 j " width="200“
idth "200“ h
height="150"
i ht "150"
alt="Fotografia mea">
• src specifică adresa fişierului conţinând imaginea
((relativa sau absoluta),
) width şşi height
g elemente
de scalare a imaginii şi alt un text alternativ
pentru browserele care nu afișează
p ș imagini.
g
Imagini
• Fiecare tip
p de browser lucrează cu un
anumit set de formate de imagine.
• Formatele JPEG şi GIF sunt cele mai
• folosite dar nu sunt singurele
singurele.
• Subdirectivele width,
width height şi alt sunt
opţionale.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Imaginea Link
• O imagine poate fi folosita ca link:
<body>
<a href="test2.html"><img src="foto2.jpg"
width="100" height="200" border="0"
alt="Fotografia mea"></a>
Fotografia mea
</body>
Background
• Se poate seta o culoare sau o imagine de fundal:
<html>
<head>
<title>Culori</title>
</head>
/h d
<body bgcolor="#CCFFCC">
Fundal colorat
</body>
</html>
Imagine de fundal
<html>
<head>
<title>Culori</title>
titl C l i /titl
</head>
<body background=
"f
"foto2.jpg">
2j "
<h1>Fundal
h1 Fundal imagine
imagine</h1>
/h1
</body>
</html>
Programare Web– Curs 2 31
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Linii orizontale
• Cu <hr> putem genera linii orizontale:
<BODY>
BODY
Prima parte
<HR>
HR
A doua parte
<HR WIDTH=60% ALIGN="right">
A treia parte
<HR WIDTH=60% size=10
color="blue">
</BODY>
• Alinierea implicita este CENTER
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Culori ancore
• Se pot seta culori pentru ancore (link-uri) funcție de tipul
l pagina,
lor: i pagina
i vizitată,
i it tă pagina
i activă
ti ă – cea selectată
l t tă
(click)
Font - Face
• Se poate schimba fontul de scriere cu FONT FACE:
<body>
body
<P ALIGN="center">
<FONT FACE="Arial">Arial</FONT>
<br>
<FONT FACE=
FACE="Arial
Arial Black
Black">Arial
>Arial Black</FONT>
<br>
<FONT FACE="Times Rew Roman">Times Rew Roman</FONT>
<br>
<FONT FACE=
FACE="Georgia">Georgia</FONT>
Georgia >Georgia</FONT>
<br>
<FONT FACE="Verdana">Verdana</FONT></body>
<br>
<FONT FACE=
FACE="Garamond">Garamond</FONT>
Garamond >Garamond</FONT>
<br>
<FONT FACE="Comic Sans MS">Comic Sans MS</FONT>
<br>
<FONT
FONT FACE="Courier
FACE "C i New">Courier
N "C i N New</FONT>
/FONT
<br>
<FONT FACE="Impact">Impact</FONT>
<br>
<FONT
FONT FACE="Trebuchet
FACE "T b h MS">Trebuchet
MS" T b h MS</FONT>
MS /FONT
</body>
Font Size
• Se poate dimensiona fontul cu FONT SIZE:
<TABLE BORDER=0><TR>
<TD><FONT SIZE=1>Size 1</FONT></TD>
</TR><TR>
<TD><FONT SIZE=2>Size 2</FONT></TD>
</TR><TR>
<TD><FONT SIZE=3>Size 3</FONT></TD>
</TR><TR>
<TD><FONT SIZE=4>Size 4</FONT></TD>
</TR><TR>
/TR TR
<TD><FONT SIZE=5>Size 5</FONT></TD>
</TR><TR>
<TD><FONT SIZE=6>Size
SIZE 6>Size 6</FONT></TD>
</TR><TR>
<TD><FONT SIZE=7>Size 7</FONT></TD>
</TR></TABLE>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Combinaț
Combinații
• Directivele anterioare se p
pot combina:
<body>
Directive <FONT COLOR="#AA00CC"
FACE="ARIAL" SIZE="7">combinate</FONT>
</body>
/body
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Zona HEAD
• În zona de header a p
paginii
g ((între <head> ș
și
</head>) putem pune o serie de directive
de descriere a documentului.
documentului
HEAD - Title
• TITLE: titlul unei p
pagini.
g Sintaxa este:
<title>titlu</title>
• Titlul
Titl l nu se fformatează,
t ă ell nu apare în
î
fereastra browserului.
• De exemplu:
<title><b>Ceva</b></title>
are efectul alăturat
HEAD - Base
• Directiva <base>: Calea de referinţă pentru paginile referite. Formatul său este:
BASE HREF="adresa
<BASE HREF adresa completa sau cale absoluta / relativa
relativa" >
• Exemplu:
<html>
<head>
h d
<title>Fotografiile mele</title>
<base href=”http://www.un.server/imagini/eu”>
p g
</head>
<body>
<h1>Acesta sunt eu</h1>
<img src="foto1.gif">
<img src="altele/foto2.gif">
<img src="/poze/foto3.gif">
<img src="http://www.alt.server/imagini/foto4.gif">
/body
</body>
</html>
Programare Web– Curs 2 39
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
HEAD - Base
• În acest caz imaginile se găsesc în următoarele
locaţii:
http://www un server/imagini/eu/foto1 gif
http://www.un.server/imagini/eu/foto1.gif
http://www.un.server/imagini/eu/altele/foto2.gif
http://www.un.server/poze/foto3.gif
http://www alt server/imagini/foto4 gif
http://www.alt.server/imagini/foto4.gif
• Directiva are efect asupra tuturor referinţelor din
pagina respectiva, inclusiv ancore, adrese ale
scripturilor CGI apelate de formulare, etc.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
HEAD - META
• Directiva <meta>: Este folosită pentru a specifica
“meta-informaţii” despre pagina respectivă.
• Formatul acesteia este:
<META [HTTP-EQUIV | NAME]= "ceva“ CONTENT=
"altceva"
altceva >
• În cazul în care serverul face o inspecție a
d
documentelor
t l cerutet se poatet folosi
f l i http-equiv,
htt i
care are efectul de a instrui serverul să trimită un
element
l tdde preambul
b l all paginii
i ii d
definit
fi it d
de di
directiva
ti
respectivă.
• Iată un exemplu:
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu
<html> <head>
<title> Programul conferintei <title>
<meta http-equiv="Expires“ content="Sat, 30 Dec 2000 10:00:00
GMT">
</head>
<body>
b d
<h1>Program</h1>
......
</body>
</html>
• Serverul va trimite un element de preambul de forma:
Expires: Sat, 30 Dec 2000 10:00:00 GMT
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Alt exemplu
• Pentru a specifica
p setul de caractere folosit
– de exemplu UTF-8 - se poate folosi:
<meta http-equiv=
http-equiv="content-type"
content-type
content="text/html; charset=UTF-8">
• ÎÎn felul acesta putem adăuga diacritice în
pagini
p g web
• Documentul sursa trebuie
salvat
l t ca ddocumentt UTF
UTF-8
8
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Formulare
• Majoritatea directivelor HTML servesc pentru
formatarea textului paginii.
• Formularele sunt cele care pot face ca o pagina
să fie interactivă (să intre în dialog cu utilizatorul).
• Un
U fformular
l ttrebuie
b i sa aibă
ibă îîn principiu:
i i i
1. O acţiune
ţ asociată numită scriptp CGI. Datele
completate de utilizator sunt preluate de acest
script
p şi
ş prelucrate.
p Rezultatul scriptului
p este
trimis ca răspuns utilizatorului. Această acţiune
se ggăseşte
ş în directiva <form>
Formulare
2. Unul sau mai multe câmpuri de tip text, buton,
check-box, lista de alegere etc.
Acestea sunt introduse prin directivele <input>
din interiorul formularului.
3 U
3. Un b
buton
t prini selectarea
l t căruia
ă i valorile
l il
completate sunt trimise serverului de web.
El va lansa scriptul CGI şi va trimite rezultatele
către browser. Acest buton se implementează
p tot
prin intermediul unei directive <input>.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu
• Formă generică a unui fişier HTML care conţine un formular este
următoarea:
<html>
<head>
<title>Titlu</title>
</head>
<body>
b d >
<form>
<input.
input. . . >
<select> <option> . . . </select>
<textarea> </textarea>
.......
<input type=submit>
</form>
</body> </html>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu
• <form> şi </form> încadrează elementele
constitutive ale formularului,
• <input>
<input>, <select> și <textarea> introduc câmpurile
formularului
• prin directivele <input type = submit> se definesc
butoane a căror selectare trimite datele
completate în form către serverul de web (pentru
a fi transferate scriptului
p CGI care le
prelucrează).
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
FORM
• Sintaxa acestei directive este următoarea:
<FORM ACTION="url" METHOD=[POST | GET]
[ENCTYPE="..." ]>
unde:
• url este adresa relativă sau absolută la care se găseşte
scriptul CGI asociat formularului,
• method arată modul în care scriptul CGI primeşte datele din
formular:
– GET - sunt primite într-o
într o variabila de mediu numita
QUERY_STRING având lungimea CONTENT_LENGTH
– POST - datele sunt primite la intrarea standard (stdin).
FORM
• Metoda POST este preferabilă atunci când
volumul acestor date este mare.
• Daca metoda nu este specificata
specificata, automat va fi
considerată GET.
• enctype
t arata
t modul
d l îîn care b
browserull codifică
difi ă
informaţia din formular pentru a o trimite
serverului.
l i
• Aceasta opţiune
pţ este în g
general ppuţin
ţ folosita, în
lipsă considerându-se tipul standard
pp
application/x-www-form-urlencoded.
INPUT
• Sintaxa acestei directive este:
<INPUT TYPE=tip [NAME="nume" ]
[VALUE " l
[VALUE="valoare"
"]
[SIZE=dimensiune
[SIZE dimensiune_afisare
afisare ]
[MAXLENGTH=dimensiune_maxima]
[SRC " l"] [CHECKED]
[SRC="url"] [CHECKED]>
• unde:
• TYPE = tip defineşte numele simbolului asociat
câmpului.
Programare Web– Curs 2 50
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
INPUT
• NAME = “numele” simbolului asociat câmpului.
• VALUE = “valoarea” iniţială afişată de browser
• SIZE = defineşte lungimea câmpului afişat de
browser
• MAXLENGTH = arată lungimea maximă a valorii
care se poate tasta
• SRC = “url” ce defineşte o adresă relativă sau
absolută (ca în cazul imaginilor)
• În funcţie de tipul câmpului avem următoarele
variante
Programare Web– Curs 2 51
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Type=TEXT
Type TEXT
• Sintaxa:
<INPUT TYPE=TEXT NAME="nume"
[VALUE="valoare" ]
[MAXLENGTH dimensiune maxima ]
[MAXLENGTH=dimensiune_maxima
[SIZE=dimensiune
[SIZE dimensiune_afisare
afisare ]>
]
• Defineşte un câmp de tip şir de caractere.
• Nu putem tasta mai mult de MAXLENGTH
caractere
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu
<html>
<head>
h d
<title>Formular</title>
</head>
<BODY>
<form action="unu.php">
Input: <input type="text" name="nume"
value="doi" maxlength="5" size="7">
<input type="submit" value="Haide">
</form>
</BODY>
</html>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Type SUBMIT
Type=SUBMIT
• Sintaxa:
<INPUT TYPE=SUBMIT [NAME="nume" ]
[VALUE="valoare" ]>
• Defineşte un buton prin selectarea căruia datele
completate în formular sunt trimise serverului de web.
• Pot
P t exista
i t maii multe
lt astfel
tf l de
d bbutoane,
t d
deosebite
bit prin
i
valoarea dată prin clauza name.
• Clauza value este folosită pentru a defini inscripţionarea
afişată de browser pentru acest buton (în lipsă inscripţia
este dată de browser).
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu
<html>
<head>
<title>Formular</title>
</head>
<BODY>
<form action="unu.php">
Continut formular
<input type="submit" name="buton1">
<input type="submit" name="buton2">
</form>
</BODY>
</html>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Type RESET
Type=RESET
• Sintaxa:
<INPUT TYPE=RESET [VALUE="valoare" ]>
• D
Defineşte
fi t un buton
b t prin
i a cărui
ă i selectare
l t valorile
l il
câmpurilor formularului sunt aduse la starea
i iţi lă
iniţială.
• Nu se face nici un schimb de date cu serverul (e
(
interpretat de browser)
• Clauza value este folosită pentru inscripţionarea
butonului.
Exemplu
<html>
<head>
h d
<title>Formular</title>
</head>
<BODY>
<form action="unu.php">
Continut formular<br>
<input type="submit" value="Da mai departe">
<br>
b
<input type="reset" value="Sterge tot">
</form>
/form
</BODY>
</html>
Type=PASSWORD
Type PASSWORD
• Sintaxa:
<INPUT TYPE=PASSWORD NAME="nume“
[VALUE="valoare"
[VALUE valoare ]
[MAXLENGTH="dimensiune_maxima" ]
[SIZE="dimensiune_afisare" ]>
• este asimilat tipului text cu deosebirea că ceea ce
se tastează pe un astfel de câmp nu se afişează
în clar pe ecran (în mod obişnuit se afişează în
ecou caracterul asterisc - *) dar se transmite in
clar serverului!
Exemplu
<html>
<head>
h d
<title>Formular</title>
</head>
<BODY>
<form action="unu.php">
Dati parola: <input type="password"
name="nume" value="doi" maxlength="5"
size="7">
i "7"
<input type="submit" value="Autentifica">
</form>
/form
</BODY>
</html>
Type=IMAGE
Type IMAGE
• Sintaxa:
<INPUT TYPE=IMAGE NAME="nume“
SRC="url“
SRC url [ALIGN
[ALIGN=TOP|BOTTOM|MIDDLE]>
TOP|BOTTOM|MIDDLE]>
• permite includerea unei imagini şi selectarea unor
anumite
it punctet ale
l sale.
l
• SRC arată adresa fişierului
ş conţinând
ţ imaginea
g
iar align poziţionarea acesteia.
• Nu este necesar buton de submit,
submit click pe
imagine declanșează transmiterea datelor
(coordonate in imagine)
Programare Web– Curs 2 60
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Type
Type=HIDDEN
HIDDEN
• Sintaxa:
<INPUT TYPE=HIDDEN NAME="nume“
VALUE="valoare" >
• Câmpurile de tip hidden nu apar pe ecran dar permit
transmiterea de valori într-o succesiune de pagini.
• Astfel de câmpuri apar de exemplu în formularele
generate dinamic şi sunt un mod prin care serverul
setează încă de la transmiterea formularului către
browser anumite perechi (nume_simbol –
valoare simbol) pentru acea formă
valoare_simbol) formă.
• Un alt mod de a face acest lucru - în PHP și alte limbaje
d scripting
de i ti - este
t folosirea
f l i variabilelor
i bil l dde sesiune.
i
Programare Web– Curs 2 61
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Type = CHECKBOX
• Sintaxa:
<INPUT TYPE=CHECKBOX NAME="nume“
VALUE="valoare" [CHECKED]>
• Acest tip permite definirea unei casete care poate fi bifată
sau nu (în genul unui comutator pornit/oprit).
• Dacă este prezentă clauza CHECKED caseta este iniţial
bifată, altfel nu.
• Observaţie: Spre deosebire de celelalte tipuri, doar pentru
casetele bifate vor fi transmise de la browser către server
perechi (nume_simbol, valoare_simbol). Dacă nici o
casetă nu a fost bifată nici unul dintre simbolurile asociate
l nu este
lor t prezentt în
î şirul
i l ttransmis.
i
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Type = RADIO
• Sintaxa:
<INPUT TYPE=RADIO NAME="nume" VALUE="valoare“
[CHECKED]>
• Tipul radio este asemănător tipului checkbox,
checkbox cu deosebirea că
numai un singur buton radio dintre cele cu acelaşi nume (dat de
clauza name) poate fi selectat la un moment dat. Daca este prezentă
clauza CHECKED butonul respectiv este iniţial selectat. Doar unul
dintre butoanele radio cu acelaşi nume poate conţine această clauză.
• Observaţie: În cazul tipului checkbox este uzual (dar nu necesar) ca
mai multe casete prezente în formular să aibă aceeaşi valoare şi
nume diferite pe când în cazul radio butoanele au acelaşi nume şi
valori
alori diferite,
diferite pentr
pentru un
n astfel de n
nume
me transmiţând
transmiţându-se
se o sing
singură
ră
pereche (nume_simbol, valoare_simbol) de la browser către server.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Liste SELECT
• Sintaxa acestei directive este:
<SELECT
SELECT NAME
NAME="nume"
nume [SIZE="dimensiune
[SIZE dimensiune_fereastra
fereastra"]>
]
<OPTION [VALUE="valoare_1" ] [SELECTED]> text_afisat_1
<OPTION [[VALUE="valoare_2"
_ ] [[SELECTED]>
] text_afisat_2
_ _
....
</SELECT>
• Cu ajutorul acestei directive se definesc meniuri verticale din care se poate
alege o singura valoare.
• Numele
N l simbolului
i b l l i este cell di
din SELECT iiar lilista d
de valori
l i este iintrodusă
d ă
element cu element cu directiva OPTION.
• Dacă VALUE lipseşte
p ş se consideră automat ca valoare textul corespunzător
p
opţiunii respective (text_afisat_i).
• Observaţie: în fereastra (de dimensiune dată de SIZE) browserul afişează
textele asociate iar selectarea unuia dintre ele asociază simbolului nume
valoarea din clauza VALUE pentru textul respectiv.
Programare Web– Curs 2 64
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
TEXTAREA
• Sintaxa:
<TEXTAREA
TEXTAREA NAME
NAME="nume"
" " [ROWS
[ROWS=numar_linii]
li ii]
[COLS=numar_coloane]
[WRAP="soft"|"hard"|"off"]>
Text initial
</TEXTAREA>
• Această
A tă directivă
di ti ă estet asemănătoare
ă ăt cu <input
i
type=text> cu deosebirea că browserul va permite
tastarea unui text într-o fereastră cu mai multe linii
(nr_linii).
• Dimensiunea pe orizontală a ferestrei este dată de
numar_coloane.
Programare Web– Curs 2 65
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
TEXTAREA
• Clauza WRAP (nerecunoscută în unele cazuri)
arată modul în care browserul afişează textul în
fereastra respectivă şi cum îl transmite serverului:
• în cazul soft tastarea unui text mai mare decât
nr coloane duce la afişarea pe mai multe linii dar
nr_coloane
la transmitere textul e liniarizat.
• îîn cazull hard
h d afişarea
fi se fface ca maii sus d
dar
transmiterea se face sub forma mai multor linii,
aşa cum apar înî fereastră.
f tă
• În cazul off ((care este implicit)
p ) textul e afişat
ş şiş
transmis aşa cum este tastat.
Programare Web– Curs 2 66
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu
<html><head><title>Date personale</title></head>
<bodyy bgcolor="CCFFF">
g
<h2>Completati datele personale in formular</h2>
<font size = 3 face = "arial">
<form action="inregistrare.cgi"
g g method=POST>
<u><b><i>Nume si prenume:</i></b></u> <input name="nume"
size=50>
<br>
br
<u><b><i>Adresa:</i></b></u><br>
<textarea name="adresa" rows=4 cols=60 wrap="soft">
</textarea>
<u><b><i>Email:</i></b></u> <input type=text name="email"
size=30>
<p>
<u><b><i>Studii:</i></b></u>
<input type=radio name="studii" value="medii" checked>Medii
<input type=radio name="studii"
name= studii value=
value="superioare">Superioare
superioare >Superioare
<input type=radio name="studii" value="doctorat">Doctorat
Exemplu
<p>
<u><b><i>Limbi straine cunoscute:</i></b></u> <br>
<input type=checkbox name="limba" value="engleza">Engleza
<input type=checkbox name="limba" value="franceza">Franceza
<input type=checkbox name="limba" value="germana">Germana
<br>
<input type=checkbox name="limba" value="italiana">Italiana
<input type=checkbox name="limba" value="spaniola">Spaniola
<input type=checkbox name="limba" value="rusa">Rusa
<p>
<u><b><i>Zona geografica preferata:</i></b></u>
<select name="zona">
<option value="muntenia">Muntenia
<option
p value="moldova">Moldova
<option value="transilvania">Transilvania
</select>
<hr>
<u><b><i>Inscrie-ma
u b i Inscrie ma in lista pentru primirea brosurii
prin:</i></b></u><br>
<input type=submit name="tip" value="posta">   
<input type=submit name="tip" value="email"><br>
<input type
type=reset
reset value
value="Stergere
Stergere forma
forma">>
</form>
</body> </html>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Rezultat
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
TABELE
• Cele 3 directive ((taguri)
g ) de bază pentru
p
lucrul cu tabele sunt:
1 <table>
1. t bl - definește
d fi t începutul
î t l uneii tabele
t b l
2 <tr>
2. tr - începutul unei linii într-o
într o tabelă
3.<td> - o celulă pe o linie dintr-o tabelă.
• Fiecare dintre cele 3 directive anterioare se
încheie cu </directiva>
Exemplu
<table>
<tr><!-- Linia 1 -->
<td><!-- Prima celula -->
Valoarea 1, 1
</td>
<td><!-- A doua celula -->
Valoarea 1, 2
</td>
</tr>
<tr><!-- Linia 2 -->
<td><!-- Prima celula -->
Valoarea 2, 1
</td>
<td><!-- A doua celula -->
Valoarea 2, 2
</td>
</tr>
</table>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
REZULTAT
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
BORDER
• După
p cum se observă din exemplul p
anterior, implicit caroiajul nu este vizibil.
• Pentru a
a-ll vizualiza directiva table poate
primi parametrul BORDER
• Exemplu:
<table border=1>
BORDER
• Valoarea parametrului poate fi mai mare ca 1:
<table border=10>
<table border=30>
WIDTH
• Un alt parametru la border este WIDTH.
• Exprimat în procente parametrul arată cât din dimensiunea
disponibilă ocupă tabela.
• Exemplu:
p 50%,, 75%,, 100%:
<table border=1 width=50%>
...
</table>
<table
table border
border=11 width
width=70%>
70%>
...
</table>
<table border=1 width=100%>
...
</table>
Programare Web– Curs 2 75
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
WIDTH:: Rezultat
WIDTH
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
HEIGHT
• Similar cu WIDTH, dar pe verticală.
• Se poate exprima în cifre absolute sau în
p
procente.
• Exemplu:
<table border=1 width=50% height=50>
...
</table>
g
<table border=1 width=70% height=50%>
...
</table>
Programare Web– Curs 2 77
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Rezultat
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
ALIGN
• Poziționarea valorilor în celule se face formatându-le individual.
• E
Exemplu:
l
<table border=1 width=100 height=75>
<tr><!-- Linia 1 -->>
<tr><!
<TD ALIGN="left" VALIGN="bottom">
<!-- Prima celula -->
Valoarea 1, 1
</td>
<td><!--
td ! A douad celula
l l -->
Valoarea 1, 2
</td>
/td
</tr>
</table>
Rezultat
Aliniere
• Pentru alinierea pe orizontală putem folosi:
– LEFT,
– RIGHT,
RIGHT
– CENTER
• Pentru alinierea pe verticală putem folosi:
– TOP,,
– BOTTOM,
– MIDDLE
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Conț
Conținut celule
• Celulele unei tabele pot conține un numai text ci orice altceva,
inclusiv imagini
imagini.
• Exemplu:
<table border=1 width=100% height=75%>
<tr><!-- Linia 1 -->
<TD
D ALIGN
ALIGN="left"
left VALIGN
VALIGN="bottom"><!–
bottom ! Prima
r ma celula -->
<IMG SRC="foto2.jpg" WIDTH=32 HEIGHT=32
ALT="Ed">
</td>
/ d
<td><!-- A doua celula -->
Valoarea 1,1 2
</td>
</tr>
</table>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Rezultat
Dimensiune celule
• WIDTH ș și HEIGHT,, în cifre absolute sau
procente, se pot pune ca parametri și la
directiva TD.
TD
• În acest fel putem să avem dimensiuni
diferite pentru coloanele și liniile unei
tabele.
• Parametrii de la TABLE arată dimensiunile
t b l i îîn fereastra,
tabelei f t cele
l de
d lla TD pe cele
l
ale celulei în tabelă.
Exemplu
<table border=1 width=100% height=75%>
<tr><!-- Linia 1 -->>
<tr><!
<td width=20% height=25%><!-- Prima celula -->
Valoarea 1, 2
</td>
<td width=80%><!-- A doua celula -->
Valoarea 1, 2
</td>
</tr>
<tr><!-- Linia 2 -->
<td height=60%><!--
height=60%><! Prima celula -->>
Valoarea 1, 2
</td>
<td><!--
td ! A douad celula
l l -->
Valoarea 1, 2
</td>
</tr>
/t
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Rezultat
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Celule goale
• Dacă o celulă este goală, browserul o arată deosebit de
cele
l care conțin
ți ceva, iinclusiv
l i d de cele
l care conțin
ți un
spatiu de tip
• Exemplu:
....
<tr><!-- Linia 1 -->
<td width=20% height=25%><!-- nimic --></td>
<td width=80%><!--
width=80%><! A doua celula --> </td>
> </td>
</tr> . . . .
Exemplu
Tabela1
<table border=5 cellpadding=20>
<tr><!-- Linia 1 --><td><!-- Prima celula -->
Valoarea 1, 1
</td><td><!-- A doua celula -->
Valoarea 1, 2
</td></tr>
</table>
Tabela 2
<table
bl b border=5
d 5 cellspacing=20>
ll i 20
<tr><!-- Linia 1 --><td><!-- Prima celula -->
Valoarea 1, 1
</td><td><!-- A doua celula -->
Valoarea 1, 2
</td></tr>
</table>
Programare Web– Curs 2 90
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Să color
coloră
ăm pu
puțțin
• Celulele unei tabele se p
pot colora ((culoare
fundal celulă).
• P
Putem
t colora
l toată
t tă ttabela,
b l d doar o lilinie
i sau
doar o celulă.
• Pentru asta se pune parametrul BGCOLOR
la TABLE,
TABLE TR respectiv la TD
Exemplu
<table border=1 width=100% height=100%>
<tr BGCOLOR=#BEFADE><!-- Linia 1 -->
<td><!-- Prima celula -->Valoarea 1, 1</td>
<td><!-- A doua celula -->Valoarea 1, 2</td>
</tr>
<tr><!-- Linia 2 -->
<td BGCOLOR=#FACADE><!-- Prima celula -->Valoarea
2, 1</td>
<td BGCOLOR=#AFAD0E><!-- A doua celula -->
Valoarea 2, 2</td>
</tr>
</table>
Programare Web– Curs 2 93
Altă
Alt ă colorare
• Dacă mutăm parametrul de culoare la tabelă, va fi colorat inclusiv
spațiul dintre celule:
<table border=1 cellspacing=20 width=100%
height=100%
g BGCOLOR=#BEFADE>
<tr><!-- Linia 1 -->
<td><!-- Prima celula -->Valoarea 1, 1</td>
<td><!-- A doua celula -->Valoarea 1, 2</td>
</tr>
<tr><! Linia 2 -->>
<tr><!--
<td BGCOLOR=#FACADE><!-- Prima celula -->Valoarea 2,
1</td>
<td BGCOLOR=#AFAD0E><!-- A doua celula -->Valoarea 2,
2</td>
</tr>
</table>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Prioritate
• Prioritate are culoarea de celulă,, dacă
există
• D
Daca nu se colorează
l ă cu culoarea
l d
de lilinie,
i
daca există.
• Daca nu se folosește culoarea de tabelă
(daca există).
există)
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
COLSPAN și ROWSPAN
• Daca vrem ca o celulă să ocupe p mai multe
coloane sau mai multe linii, la TD folosim
parametrii COLSPAN,
COLSPAN respectiv
ROWSPAN.
• Valoarea lor spune câte coloane, respectiv
p acea celulă.
linii ocupă
Exemplu
<table border=5>
<tr><! Linia 1 -->>
<tr><!--
<td colspan=2><!-- Prima celula -->
Valoarea 1, 1
</td>
</tr>
<tr><!-- Linia 2 -->>
<tr><!
<td><!-- Prima celula -->
Valoarea 2, 1
</td>
/ d
<td><!-- A doua celula -->
Valoarea 2, 2
</td>
</tr>
</table>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
CADRE (Frames)
• Cu ajutorul
aju o u lor
o pu
putem
e împărți
pă ț fereastra
e eas a
browserului în mai multe ferestre
distincte.
distincte
• Un exemplu în care avem 2 ferestre
ferestre.
– Avem nevoie de 3 ppagini
g HTML, una
master și două cu conținutul celor 2
ferestre.
ferestre
Exemplu
• Pagina principală (lipsește directiva <BODY>!):
<html>
<head>
head
<title>Cadre</title>
</head>
/h d
<FRAMESET COLS="40%,*">
<FRAME SRC="stanga.html">
<FRAME
FRAME SRC="dreapta.html">
SRC dreapta.html
</FRAMESET>
</html>
/ht l
Programare Web– Curs 2 107
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
• Cadrul stanga.html
<html>
<body>
Fereastra stanga.html
Exemplu
</body>
</html>
• Cadrul dreapta.html:
<html>
<body>
<h2>Fereastra dreapta.html</h2>
p
Continut 2
</body>
y
</html>
Programare Web– Curs 2 108
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Rezultat
Dimensiuni
Dimensiunea unui cadru se p
poate da:
• Procentual (din mărimea ferestrei, =>
redimensionare
di i od
dată
tă cu fereastra)
f t )
• Absolut (în pixeli).
pixeli) De exemplu
exemplu, dacă în
cazul anterior în loc de 40% foloseam 40
rezultatul era o dimensionare în pixeli
pixeli, fără
redimensionari o dată cu fereastra:
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Rezultat
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Observaț
Observații
• Daca folosim valori absolute trebuie ca in lista de
la FRAMESET unul dintre cadre să fie dat
dimensionat cu * (pentru redimensionarea o dată
cu fereastra).
• Se poate folosi și construcția:
<FRAMESET COLS="50,*,2*">
care înseamnă: cadrul 1 50 pixeli, restul pentru
cadrele 2 ș
și 3 dar cadrul 3 de două ori mai mare
decât cadrul 2.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Rezultat
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
BORDER
• Zona dintre cadre se poate dimensiona și colora.
• Daca în exemplul anterior linia este:
<FRAMESET
FRAMESET COLS="90,*,2*"
COLS "90 * 2*" BORDER
BORDER=20
20
BORDERCOLOR="#FFOOOO">
obținem rezultatul din slide-ul următor.
• BORDER dă grosimea benzii iar
BORDERCOLOR culoarea.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Rezultat
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu
• Pagina
g principala
p p ((avem doar două cadre):
)
<FRAMESET COLS="33%,67%">
<FRAME SRC=“stanga
SRC= stanga.html
html">>
<FRAME SRC=“dreapta.html"
NAME=“FDREAPTA">
</FRAMESET>
Exemplu
• În p
pagina
g din stânga
g pputem avea un link de
forma:
<A HREF=
HREF=“doc
doc.html"
html" TARGET =
“FDREAPTA"> Vezi doc.</A>
• La activarea acestui link pagina doc.html se
va deschide în cadrul din dreapta
dreapta.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
TARGET
• La target se mai pot folosi: și destinatiile predefinite _top,
_blank,
bl k _self lf șii _parent.
t
• _TOP deschide pagina în fereastra întreaga de browser
(fără cadre)
• _BLANK deschide pagina într-o fereastră nouă de
browser (nu cadru!)
• _SELF deschide pagina în aceeași fereastră de browser
sau în același cadru (deci poate lipsi, e acțiunea implicita)
• _PARENT
_ deschide p pagina
g în fereastra tată a cadrului
curent (cea în care este definit prin FRAMESET cadrul
curent, un același lucru cu _TOP!)
ROWS
• Așa
ș cum COLS împarte
p fereastra curentă
(sau cadrul) pe verticală, ROWS face o
împărțire pe orizontală
orizontală.
• Parametrii descriși la COLS se pot folosi și
la ROWS.
• Într
Într-un
un exemplu anterior al doilea frameset
e pe orizontala.
Alte elemente
• Fiecare cadru poate avea o altă culoare de
background sau imagine (se comportă ca o
fereastră obișnuită de browser).
• Mai exista si alte opțiuni pentru directiva
FRAMESET Pentru aceasta se poate consulta o
FRAMESET.
documentație detaliată de HTML.
• S
Scopull llecției
ți i este
t ddoar o ttrecere îîn revistă
i tă a
limbajului HTML.
XML
HTML şi XML
XML = eXtensible Markup Language
HTML ş
şi XML
• HTML şi XML arată similar deoarece ambele sunt
limbaje SGML (Standard Generalized Markup
Language)
– Atât HTML cât şi XML folosesc elemente încadrate de
tag-uri (e.g. <body>This is an element</body>)
– În ambele cazuri tag-urile pot avea atribute (e.g.,
<font face="Verdana" size="1" color="red">)
– Ambele folosesc entităţi interpretabile (<, >,
&, ", ')
• Mai
M i exact,
t
– HTML este definit în SGML
– XML este un subset (restrâns) al SGML
Curs Programare Web, anul 4 C5 – Curs 7 4
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
HTML ş
şi XML
• HTML este adresat oamenilor
– HTML descrie pagini web
– Oamenii nu doresc să vadă mesaje de eroare despre
paginile vizitate
vizitate…
• Browserele ignoră şi/sau corectează atâtea erori HTML cât se
poate
• XML este folosit de calculatoare
– XML descrie date
– Regulile sunt stricte şi nu sunt permise erori
• Din acest punct de vedere XML seamană cu un limbaj de
programare
– Versiunile curente ale majorităţii browserelor pot afişa
XML
• Totuşi suportul browserelor pentru XML e destul de redus
Curs Programare Web, anul 4 C5 – Curs 7 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Tehnologii
e o og înrudite
ud te XML
• DTD (Document Type Definition) şi XML Schemas sunt
folosite pentru definirea tag
tag-urilor
urilor legale XML şi a
atributelor acestora pentru scopuri particulare (meta-
descrieri))
<?xml version="1.0"?>
<weatherReport>
<date>7/14/97</date>
d t 7/14/97 /d t
<city>North Place</city>, <state>NX</state>
<country>USA</country>
High Temp: <high scale="F">103</high>
Low Temp: <low scale="F">70</low>
Morning: <morning>Partly cloudy, Hazy</morning>
Afternoon: <afternoon>Sunny & hot</afternoon>
E
Evening:
i g <evening>Clear
i g Cl anddCCooler</evening>
l / i g
</weatherReport>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Structura
St uctu a
• Un document XML poate începe cu una
sau mai multe instrucţiuni de procesare
((PIs)) sau directive:
<?xml version="1.0"?>
<?xml-stylesheet type="text/css"
href="ss.css"?>
• După
p directivă trebuie să existe exact un
singur tag, numit elementul root, ce conţine
estu docu
restul documentului
e tu u XML:
<weatherReport>
...
</weatherReport>
Curs Programare Web, anul 4 C5 – Curs 7 8
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Elementele
e e te e XML
• Un document XML mai este construit din:
– elemente: high în <high scale="F">103</high>
tag uri în perechi: <high scale=
– tag-uri, scale="F">103</high>
F >103</high>
– atribute: <high scale="F">103</high>
– entităţi: <afternoon>Sunny & hot</afternoon>
– date de tipp caractere ce ppot fi:
• parsate (procesate ca XML)—modalitatea default
• neparsate
p ((toate caractere sunt de sine stătătoare))
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Elemente
Element
e e te
te ş
şi atribute
at bute
• Atributele şi elementele sunt parțial interschimbabile
• Exemplu folosind doar elemente:
<name>
<first>David</first>
<last>Matuszek</last>
</name>
• Exemplu folosind atribute:
<name first="David" last="Matuszek"></name>
• Atributele conţin adesea şi metadate, precum ID-uri unice
• În g
general browserele afişează
ş doar elemente ((valori
închise de tag-uri), nu și tag-uri şi atribute
XML b
bine
e format
o at
• Orice elemente trebuie să aibă atât un tag de start, cât şi
un tag de terminare e g : <name> ... </name>
terminare, e.g.:
– Dar elementele goale pot fi abreviate: <break />.
– Tag-urile XML sunt case sensitive
– Tag-urile XML nu pot începe cu literele xml
• Elementele trebuie să fie corect imbricate, e.g. nu
<b><i>bold and italic</b></i>
• Orice document XML trebuie să aibă unul şi numai un
element root
• Valorile atributelor trebuie să fie încadrate de ghilimele
sau apostroafe, e.g. <time unit="days">
• Datele
D t l caracter ţi < sau &
t nu pott conţine
Curs Programare Web, anul 4 C5 – Curs 7 11
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu
e p u de document
docu e t b
bine
e format
o at
<novel>
<foreword>
<paragraph>
This is the great American novel.
</paragraph>
/ h
</foreword>
<chapter number=
number="1">
1 >
<paragraph>
It was a dark and stormy night.
</paragraph>
<paragraph>
S dd l a shot
Suddenly, h t rang out!
t!
</paragraph>
</chapter>
</novel>
Curs Programare Web, anul 4 C5 – Curs 7 12
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
XML ca un arbore
• Un document XML reprezintă o ierarhie, poate fi
reprezentat
t t ca un arbore:
b
novel
foreword chapter
number="1"
XML Valid
a d
• Puteţi crea propriile tag-uri şi atribute XML, dar...
– ...orice program ce foloseşte XML
XML-ul
ul trebuie să ştie la ce să se
aştepte!
• Un DTD (Document Type Definition) defineşte ce tag-uri
sunt legale şi unde pot acestea apărea în cadrul
documentului XML
– Un document XML nu necesită un DTD
• XML este bine structurat dacă respecta regulile amintite
anterior…
• În
Î plus, un XML este valid dacă specifică un DTD şi este
conform cu respectivul DTD
• Un DTD poate fi inclus în XML,
XML dar tipic se foloseşte ca
document separat
• Erorile dintr-un document XML vor opri
p p programele
g XML
• Alternative la DTD-uri sunt XML Schemas şi RELAX NG
Curs Programare Web, anul 4 C5 – Curs 7 14
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu
• Putem să ne
imaginăm o
modalitate de
reprezentare
t a unor
rețete de bucătărie, pe
baza unor documente
XML:
Exemplu
• O versiune XML a unei colecții de astfel de rețete este formată din:
– Rețetele conțin listă de ingrediente, pașii pentru pregătire, posibil comentarii și o
specificație
p ț a valorilor nutritive
– Un ingredient poate fi simplu sau compus
– Un ingredient simplu are un
<?xml version="1.0" encoding="UTF-8"?>
nume,, o cantitate (p(posibil <collection>
chiar nespecificată) și o <description>
unitate de măsură (totuși Some recipes used for the XML lesson.
</description>
sunt și cazuri când nu se <recipe>
specifică și unitate) <title>Beef Parmesan with Garlic Angel Hair Pasta</title>
<ingredient name="beef cube steak" amount="1.5" unit="pound"/>
– Un ingredient compus este ...
specificat recursiv ca o <preparation>
rețetă având ingrediente și <step>
Preheat oven to 350 degrees F (175 degrees C).
modalitate de pregătire </step>
...
• Un exemplu de document </preparation>
XML ce specifică cinci <comment>
comment
Make the meat ahead of time, and refrigerate over night, the acid in
astfel de rețete: the tomato sauce will tenderize the meat even more. If you do this,
save the mozzarella till the last minute.
</comment>
<nutrition calories="1167"
calories= 1167 fat=
fat="23"
23 carbohydrates=
carbohydrates="45"
45 protein=
protein="32"/>
32 />
</recipe>
...
</collection>
Curs Programare Web, anul 4 C5 – Curs 7 16
Exemplu
• Un exemplu de document <!ELEMENT collection (description,recipe*)>
Scop XML
• XML este proiectat pentru a fi procesat de către
programele software, nu pentru a afişa date
• Totuşi aproape toate browserele pot afişa
documente XML
– Ele nu vor fi afişate în aceeaşi manieră
– Nu vor fi afişate deloc dacă conţin erori
• Atenție:
HTML este p
proiectat p
pentru a fi vizualizat,,
XML este proiectat pentru a fi folosit
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Standarde
Sta da de e
extinse
t se de docu
documente
e te
• Puteţi să vă definiţi propriile tag-uri XML, dar există
seturi
t id deja
j di
disponibile:
ibil
– XHTML: HTML redefinit pentru XML
– SMIL: Synchronized Multimedia Integration Language
– MathML: Mathematical Markup Language
– SVG: Scalable Vector Graphics
– DrawML: Drawing MetaLanguage
– ICE: Information and Content Exchange
– ebXML: Electronic Business with XML
– cxml: Commerce XML
– CBL: Common Business Library
– …
Curs Programare Web, anul 4 C5 – Curs 7 19
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
XHTML
http://www.w3schools.com/xhtml/
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Origini
• HTML dezvoltat de Tim Berners-Lee în 1989
– O modalitate de accesare a bazei de date ENQUIRE peste Internet
– Rezultatul a devenit World Wide Web
• HTML-ul a fost definit ca o aplicație a SGML,
– standardul ISO oferea suport pentru documente structurate
• Pentru a face din HTML un standard, Berners-Lee avea
nevoie
i dde o iimplementare
l t reală
lă a uneii aplicații
li ții care să
ă
suporte astfel de documente
– S-a
S a oprit la Mosaic – un browser a cărui finanțare era suportată de
congresman-ul Al Gore
• HTML devine suportat de AOL, CompuServe, MSN, etc.
– Open-standard și având în spate investiții critice suportate de
guvernul USA
– Amenințare la adresa supremației Microsoft*
*http://www.roughlydrafted.com/RD/RDM.Tech.Q2.07/12C0979F-82C7-4952-898A-55051A2D3897.html
Curs Programare Web, anul 4 C5 – Curs 7 22
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Origini
g
• Când standardul devine popular, se pune problema
controlului asupra
p acestuia:
– IETF formează HTML Working Group cu scopul de a începe lucrul
la HTML 2.0
– Berners-Lee
B L crează ăWWorldld Wid
Wide W
WebbCConsortium
ti (W3C) – scop:
promovarea tehnologii Web
– IETF reușește
ș ș să scoată standardul HTML 2.0 în 1995,, totușiș în
1996 controlul revine în întregime către W3C
• HTML 2.0
– Integrarea extensiilor pe care dezvoltatorii de browsere le
încorporase ad-hoc pentru diverse funcționalități
• HTML 3
3.0
0
– În 1995, W3C scoate HTML 3.0 ca o modalitate de formalizare a
unor funcții precum suportul pentru documente științifice și
matematice
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Origini
• Războiul dezvoltatorilor de browsere continuă
– Fiecare vendor propune funcții noi
noi, ne-standadizate
ne-standadizate, în încercarea
de a acumula segmente din piața nouă în continuă expansiune:
– Microsoft reușește să scoată 3 versiuni stabile într-un singur an
(1996) a IE, într-o încercare de a lega viitorul Web-ului de platforma
Windows
• IE 3.0 vine cu suport
p p pentru ActiveX,, tehnologia
g de contrucție
ț a unor
controale bogate (dar care rulează doar pe Windows)
– Netscape vine cu propria implementare de ActiveX și adaugă
limbajul de scripting JavaScript
• IE nu se lasă mai prejos și propune Jscript
• În încercarea de a învinge
învinge, apar dispute cu privire la ce
și cum ar trebui standardizat în HTML:
– Netscape propune tag-ul
tag ul BLINK
– Microsoft vine cu MARQUEE
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Origini
• Mediatorul e tot W3C
– În standard nu intră nici BLINK
BLINK, nici MARQUEE
– Suportul pentru prezentare din Netscape e deprecated – în loc se
propune folosirea CSS ca formă de separare a elementelor HTML de
cele de formatare/stil
• HTML 4.0 lansat în 1997 (HTML 4.01 în 1999)
– P
Pe lângă
lâ ă separare conținut
ți t de
d prezentare,
t HTML 4 standadizează
t d di ă șii
elementele de limbaj JavaScript și modalitatea de acces cu
documentul pe baza DOM
• W3C a decis și să conducă HTML 4 într-o nouă direcție:
– În loc să fie o formă de SGML, noua specificație conduce HTML
î
înspre strictețea
t i t ț XML:
XML
• Documentele HTML ar putea fi astfel mai ușor procesate de motoare XML
• HTML-ul devine în același timp deschis, în loc de a complica structura
standardului,
t d d l i utilizatorul
tili t l ar putea
t venii cu ttag-urii d
definite
fi it îîntr-o
t bibli t ă externă
bibliotecă t ă
pentru reprezentări particulare (e.g., pentru matematică se poate folosi MathML)
Curs Programare Web, anul 4 C5 – Curs 7 25
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Dar la noi?
• www.pub.ro – a apărut în 1997, conținea
elemente minimale de HTML 3 3.2
2
HTML 4
• HTML 4 extinde HTML cu mecanisme adecvate
pentru:*
t *
– Elemente de style sheet,
– Limbaje de scripting,
– Frame-uri,,
– Obiecte embedded,
– Suport îmbunătățit pentru text reprezentat de la
dreapta la stânga
– Elemente mai bogate de prezentare a tabelelor
– Îmbunătățiri pentru reprezentarea formularelor, oferirea
de suport
p p pentru p
persoane cu disabilități.
ț
*http://www.w3.org/TR/1999/REC-html401-19991224/intro/intro.html#h-2.3
Curs Programare Web, anul 4 C5 – Curs 7 28
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Ce este XHTML?
• XHTML = Extensible Hypertext Markup
Language
– XHTML urmăreşte
ş să înlocuiască HTML
– XHTML este aproape identic cu HTML 4.01
– XHTML este o versiune mai strictă şi mai
curată a HTML
– XHTML este HTML redefinit ca o aplicaţie XML
– XHTML este o “punte” între HTML şi XML
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Problema
ob e a cu HTML
• HTML a fost conceput ca o modalitate de a
descrie structura unui document, cu tag-uri
pentru a indica headere, paragrafe, etc.
• Apare nevoia de control asupra aparenţei
documentelor motiv pentru care HTML a fost
documentelor,
îmbogăţit cu tag-uri pentru controlul font-urilor,
aliniatelor etc.
aliniatelor, etc
Codificarea
Cod ca ea docu
documentelor
e te o XML
• Un document XML începe cu o declaraţie:
<?xml version='1.0' encoding='utf-8'?>
• Forma arborescentă:
– Există exact un element rădăcină
– Elementele sunt conținute unele în altele, formând o
ierarhie arborescentă
<person>
<firstname>Ion</firstname>
<lastname>Popescu</lastname>
<age>30</age>
<ssn>2711130345678</ssn>
</person>
Curs Programare Web, anul 4 C5 – Curs 7 32
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Documente
ocu e te XML bine
b e formate
o ate
• Reminder: document XML “bine format” = un
document corect din punctul de vedere al regulilor
sintactice generale XML:
– are exact un element rădăcină
– fiecare element are un tag de sfârşit
– elementele sunt imbricate corect
– valorile atributelor sunt între ghilimele
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu
Exemplu:: document XML cu schema
dots xml
dots.xml
<?xml version="1.0" encoding="UTF-8" ?>
<dots xmlns:xsi=
xmlns:xsi="http://www
http://www.w3.org/2001/XMLSchema-instance
w3 org/2001/XMLSchema instance"
xsi:noNamespaceSchemaLocation="dots.xsd">>
<dot x="32" y="100" />
<dot x="17"
x= 17 y=
y="14"
14 />
<dot x="18" y="58" > </dot>
</dots>
De
e la
a HTML la
a XHTML,, I
• Elementele XHTML trebuie să fie corect imbricate
<b><i>bold and italic</b></i> este greşit
• Documentele XHTML trebuie să fie bine formate
<html>
<head> ... </head>
<body> ... </body>
</html>
• Numele de tag-uri trebuie să fie lowercase
• Toate elementele XHTML trebuie să fie închise
– Dacă un tag HTML nu este un container el se închide:
<br />, <hr />, <img src="smile.gif" />
De
e la
a HTML la
a XHTML,, II
• Numele de atribute trebuie să fie lower case
– Exemplu: <table width=
width="100%">
100% >
• Valorile atributelor trebuie să fie încadrate de “
– Exemplu: <table width=
width "100%">
100% >
• Minimizarea atributelor este interzisă
– E l <frame
Exemplu: f noresize="noresize">,
i " i "
nu poate fi abreviată prin <frame noresize>
• Atributul id înlocuieşte atributul name
– Greşit: <img src="picture.gif" name="picture1" />
– Corect: <img
img src
src="picture.gif"
picture.gif id
id="picture1"
picture1 //>
– Cel mai bine:
<img
g src="picture.gif"
p g name="picture1"
p id="picture1"
p />
XHTML ș
și DTD-
DTD-u
uri
• HTML, XHTML, XML şi multe alte limbaje de
markup ce suportă DTD-uri
• DTD ((“Document Type yp Definition”)) descrie
sintaxa ce trebuie folosită pentru un anumit
document,, folosirea unui DTD fiind o regulăg în
cazul documentelor XHTML
• Există trei tipuri diferite de DTD
DTD-uri
uri pentru
XHTML — puteţi lucra cu oricare
– Ele sunt publice pe web
– Documentul XHTML trebuie să înceapă cu o referinţă
la unul dintre aceste DTD
DTD-uri
uri
Declaraţia
ţ DOCTYPE
• Orice document XHTML trebuie să înceapă cu o
d l ţi DOCTYPE (ce
declaraţie ( specifică
ifi ă DTD-ul
DTD l curentt
folosit):
Declaraţia
ţ DOCTYPE
• Cele trei tipuri de DTD-uri sunt:
– Strict
• Specifică că documentul XHTML e “curat”, el nu conține informaţii
de afişare (precum cele legate de font, culoare sau dimensiune).
• Stilul acesta e folosit în conjuncție cu un CSS dacă se doreşte
definirea totuși a felului în care trebuie să arate reprezentarea
documentului.
documentului
– Transitional
• Folosit cu HTML standard şi/sau cu CSS.
• Permite introducerea de elemente HTML “depricated” (tag-uri
<center>, <embed>, <font>, <i>, <u> sau atribute <align>,
<background> <color>,
<background>, <color> <height>
<height>, <size>
<size>, etc).
etc)
– Frameset
• Folosit dacă documentul include frame-uri HTML
Instrumente
st u e te ut
utile…
e
• Dave Raggett's HTML TIDY
– http://www.w3.org/People/Raggett/tidy/
– este un instrument free UNIX pentru verificarea şi
curăţarea paginilor HTML
• W3C HTML Validation Tool
– http://validator.w3.org/
– este un formular HTML pentru
p verificarea ((dar nu şşi
corectarea) documentelor HTML şi XHTML
CSS
Problema
ob e a cu HTML
• HTML a fost de la început conceput pentru a descrie
conținutul unui document
• Autorii de pagini web nu aveau nevoie să descrie layout-ul --
browserul avea g grijă
j de acest aspect
• Aceasta reprezintă o abordare inginerească corectă, însă
nu satisface nevoile stiliștilor și “artiștilor”
– O
Oameniiii ce aveau nevoie
i sa spună ă maii multe
lt simțeau
i ț nevoia
i unuii
control mai bun al modului de prezentare a propriilor pagini Web
• Ca rezultat,, HTML a început
p să încorporeze
p din ce în ce mai
multe tag-uri folosite pentru controlul afișării
– Conținutul și modul de afișare al informaților au devenit din ce în ce
mai mult interconectate
– Browsere diferite afișează totuși lucrurile în moduri diferite, ceea ce
reprezintă o problemă reală atunci când modul de prezentare al
informațiilor e chiar mai important decât informația propriu
propriu-zisă
zisă
Cascading
g Style
y Sheets
• Cascading Style Sheet (CSS) este o modalitate de
separare a elementelor de prezentare de elementele de
date
– Practic modul de prezentare al unei pagini HTML se poate descrie
mai curat, într-un document separat, rezultând în independență între
formă și conținut
• CSS are câteva avantaje:
– Permite separarea conținutului de prezentare
– Permite definirea prezentării și a layout-ului
layout ului tuturor paginilor dintr-un
dintr un
site Web, într-o manieră unitară, printr-o construcție unică
– Poate fi folosit atât împreună cu pagini HTML, cât și cu cele XML
• În
Î opinia criticilor, totuși CSS are dezavantaje:
– Unele browsere mai vechi nu îl suportă în totalitate
– În
Î funcție
f ți de
d di
dimensiune,
i d
documentele
t l CSS externe
t pott crește
t
timpul de încărcare a paginilor
Curs Programare Web, anul 4 C5 – Curs 7 49
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Sintaxa
S ta a CSS
• Sintaxa CSS este compusă dintr-o listă de selectori (pentru
alegerea tag-urilor)
tag urilor) și descriptori (pentru a specifica ce
dorim să facem cu respectivele tag-uri):
– Exemplu:
p
h1 {color: green; font-family: Verdana} specifică că orice text
inclus în tag-uri h1 (HTML heading level 1) trebuie afișat folosind
font de tip Verdana și colorat în verde
• Un fișier CSS reprezintă o listă de astfel de perechi
se ecto /desc pto
selector/descriptor
– Selectorii pot fi simple tag-uri HTML sau XML
– CSS ppermite de asemenea definirea altor moduri de combinare a
tag-urilor
– Descriptorii sunt definiți chiar în CSS
Sintaxa
S ta a CSS
• Sintaxa generala este:
l t { property:
selector t valuel }
– sau
selector,, ...,, selector {
property: value;
...
property: value
}
– unde
• selector reprezintă tag-ul
tag ul afectat de stil (selectorul este case-
case
sensitive dacă și numai dacă limbajul de descriere a
documentului este case-sensitive).
• property și value descriu modul de afișare al respectivului tag tag.
• Spațiile după virgule și punct si virgule sunt opționale.
• Un punct și virgulă trebuie să fie folosit între perechi
property:value,
t l d d
dar dupăă ultima
lti pereche
h punctt șii virgulă
i lă
devine caracter opțional.
Curs Programare Web, anul 4 C5 – Curs 7 51
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu
e p u de CSS
/* Acesta este un comentariu */
h1 h2 h3 {font-family: Arial
h1,h2,h3 Arial, sans-serif;} /
/*folosește
folosește primul font disponibil */
/
p, table, li, address { /* se aplică tuturor acestor tag-uri */
font-family: "Courier New"; /* valoare încadrată între ghilimele ce conţine
spaţii */
/
margin-left: 15pt; /* indentare */
}
p, li, th, td {font-size: 80%;} /* 80% din dimensiunea elemenului ce îl
conţine
ţi */
th {background-color:#FAEBD7} /* culorile pot fi specificate în hexa */
bodyy { background-color:
g #ffffff;}
;}
h1,h2,h3,hr {color:saddlebrown;} /* se adaugă elementelor specificate */
a:link {color:darkred} /* un link ne-vizitat */
a:visited {color:darkred} /* un link vizitat */
a:active {color:red} /* un link deja vizitat */
a:hover {color:red} /* atunci când mouse
/ mouse-ul
ul trece deasupra elementului */
/
Selectori
• Un tag XML sau HTML poate fi folosit ca un simplu
element selector:
body { background-color: #ffffff }
• Putem însă folosi și selectori multipli:
em i {color: red}
em,
Putem repeta selectorii:
h1, h2, h3 {font-family: Verdana; color: red}
h1 h3 {font
h1, {font-weight:
weight: bold; color: pink}
• Atunci când valorile nu coincid, ultima declarație suprascrie
declarațiile anterioare
• Selectorul universal * se aplică oricărui și tuturor
elementelor:
* {color: blue}
• Atunci când valorile nu coincid, selectorii mai specifici suprascriu
comportamentul selectorilor mai generali (deci elementele em vor fi
în continuare roșii)
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu de suprascriere
Selectori
• Un selector descendent alege un tag având un element
ancestor corespunzător:
p code { color: brown }
– selectează code doar dacă este folosit în interiorul unui paragraf
• Un selector copil > alege un tag având un părinte
corespunzător:
h3 > em { font-weight:
font weight: bold }
selectează un em doar dacă părintele imediat este h3
• Un selector adiacent alege un element ce imediat urmează
altuia:
b + i { font-size: 8pt }
Exemplu: <b>I
<b>I'm
m bold and</b> <i>I
<i>I'm
m italic</i>
Rezultatul va arata astfel: I'm bold and I'm italic
Selectori
Se ecto
• Un selector simplu de atribut permite alegerea
elementelor
l t l ce au un anumit it atribut,
t ib t iindiferent
dif tdde
valoarea acestuia:
– Sintaxa: element[atribut] { ... }
– Exemplu: table[border] { ... }
• Un selector de atribut valoare permite alegerea
elementelor ce au un anumit atribut având o
anumită valoare:
[
– Sintaxa: element[atribut="valoare"]] { ... }
– Exemplu: table[border="0"] { ... }
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Valori
ao
• Sintaxa unei reguli CSS este:
selector, ..., selector { property: value; . . . property:
selector
value }
• Valoarea este orice apare între două puncte și
punct și virgulă (sau acoladă)
• Exemple:
– * {font-family: Trebuchet, Verdana, sans-serif;}
• Aceasta înseamnă ca trebuie folosit font Trebuchet p pentru orice,, dacă
este disponibil; altfel, se folosește font Verdana, dacă este disponibil;
altfel folosește orice font sans serif pe care browserul îl are instalat.
– sect
section
o {border:
{bo de : thin
t solid
sol d blue;}
• Aceasta înseamnă că trebuie pus un border în jurul elementelor
section; acesta trebuie să fie subțire și solidă și albastră
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Atributul
t butu c class
ass
• Atributul class permite definirea mai multor stiluri
diferite pentru un același element:
– În fișierul de “style sheet”:
p.important {font-size: 24pt; color: red}
p.fineprint {font-size: 8pt}
– În
Î documentul HTML:
<p class="important">The end is nigh!</p>
<p class=
class="fineprint">Offer
fineprint >Offer ends 1/1/97.</p>
1/1/97 </p>
• Pentru definirea unui selector ce se aplică
oricărui element având o anumită clasă se omite
numele tag-ului (dar se păstrează punctul):
.fineprint
fi i t {font-size:
{f t i 8
8pt}
t}
Curs Programare Web, anul 4 C5 – Curs 7 58
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Atributul
t butu idd
• Atributul id este definit similar atributului class,
dar folosește # in loc de .
– În fișierul
ș style
y sheet:
p#important {font-style: italic} sau
# important {font-style: italic}
– În documentul HTML:
<p id="important">
• class și id pot fi ambele folosite și nu e obligatoriu
să aibă nume diferite:
<p class="important" id="important">
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
div și span
• div și span sunt elemente HTML ce au ca scop
introducerea de informații de prezentare a
elementelor pe baza regulilor CSS
• div asigură existența unei linii noi înainte și după
(similar unui paragraf); span nu
• Exemplu:
– CSS:
div {background
{background-color:
color: #66FFFF}
span.color {color: red}
– HTML:
<div>This div is treated like a paragraph, but <span
class="color">this span</span> is not.</div>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Rezultat:
<html xmlns="http://www.w3.org/1999/xhtml">
p g
<head>
</head>
<body>
T xt inainte.
Text i i t
Text dupa.
</body>
</html>
/html
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Alt exemplu
• Elementele <div> sunt cel mai adesea folosite
pentru poziționare:
#container
#c nt in {
position: relative
}
#navigation {
position: absolute;
left: 30px;
top: 5px
}
Folosirea
o os ea elementelor
e e e te o CSS
Sunt trei moduri de folosire a unui CSS:
1. Style
S sheet extern
– Elementele CSS sunt specificate într-un document
extern
– Se poate folosi atât pentru HTML, cât și pentru XML
– Toate elementele CSS pot fi folosite
2. Style sheet embedded
– Se aplică doar pentru HTML, nu și pentru XML
– Toate elementele CSS pot fi folosite
3. Stiluri inline
– Se aplică doar pentru HTML, nu și pentru XML
– Formă limitată de sintaxă CSS
Curs Programare Web, anul 4 C5 – Curs 7 63
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
External style
y sheet
• Toate elementele CSS se definesc într-un fișier
extern…
t
• Sau în p
prologul
g unui document XML se p
poate
adăuga sintaxa:
<?xml-stylesheet href="Style Sheet URL"
t
type="text/css"?>
"t t/ "?
Curs Programare Web, anul 4 C5 – Curs 7 64
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Embedded
bedded sty
style
essheet
eet
• Elementele CSS se definesc în interiorul
documentului HTML, în interiorul elementului
<head>:
<style TYPE="text/css">
<!--
CSS Style Sheet
-->
</style>
/style
• Notă: Încapsularea style sheet-ului într-un
comentariu reprezintă un artificiu de ascundere a
informației de browsere mai vechi ce nu înțeleg
sintaxa CSS
CSS.
Curs Programare Web, anul 4 C5 – Curs 7 65
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Inline
e sty
style
essheet
eet
• Atributul STYLE poate fi adăugat oricărui element
HTML:
<html-tag STYLE="property: value"> sau
<html-tag STYLE="property: value;
property: value; ...; property: value">
• Avantaj:
– Folositor dacă dorim doar o mică modificare de stil
• Dezavantaje:
– Mix de informații de prezentare în cadrul HTML
– Ascunde și îngreunează vizibilitatea codului HTML
– Nu se pot folosi toate elementele CSS
O
Ordinea
d ea de cascada
cascadare
e
• Stilurile vor fi aplicate unui document HTML în
ordinea
di următoare:
ăt
1. Stilul implicit al browser-ului
2. External style sheet
3. Internal style
y sheet ((în interiorul tag-ului
g <head>))
4. Inline style (în interiorul altor elemente, cele mai din afară
mai întâi)
• Când elementele de stil ajung să fie în conflict, cel
mai “apropiat”
p p ((mai recent aplicat)
p ) stil câștigă
ș g
Exemplu
e p u de ordine
o d e de cascada
cascadare
e
• External style sheet:
h3 { color: red;
text-align: left;
font-size: 8pt
}
• Internal style sheet:
h3 { text align: right;
text-align:
font-size: 20pt
}
• Atributele rezultante:
color: red;
text-align: right;
f
font-size: 20
20pt
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Alt exemplu
• Considerăm documentul HTML:
Răspuns:
Textul va fi afișat roșu cu dimensiunea 15px
((font-size:
o s e 10px,
0p , co
combinat
b a cu font-size:
o s e 150%
50% => 10
0 x 1.5
5 = 15px)
5p )
Un exemplu XML
<?xml version="1.0" standalone="no"?>
<!DOCTYPE novel SYSTEM "novel.dtd">
<?xml-stylesheet
l l h h f
href="styles.css"
l type="text/css"?>
<novel>
<foreword>
<paragraph>This
h Thi iis th
the greatt A
American
i novel.</paragraph>
l / h
</foreword>
<chapter>
<paragraph>It was a dark and stormy night.</paragraph>
night </paragraph>
<paragraph>Suddenly, a shot rang out!</paragraph>
</chapter>
</novel>
Rezultatul
Rezultat afișat de Firefox 4:
Rezultat afișat de IE
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Câteva
te a p
propriet
proprietăţ
op etăţ
etăţ
ăţii şi valori
a o pentru
pe t u font
o t
• font-family:
– inherit
i h it (la
(l ffell ca ffontul
t l elementului
l t l i parent,
t moștenire)
t i )
– Verdana, "Courier New", ... (dacă fontul este instalat în browser)
– serif | sans-serif
sans serif | cursive | fantasy | monospace
(fonturi generice: browser-ul decide ce font să folosească)
• font-size:
font size:
– inherit | smaller | larger | xx-small | x-small | small | medium |
large | x-large | xx-large | 12pt
• font-weight:
– normal | bold |bolder | lighter | 100 | 200 | ... | 700
• font-style:
– normal | italic | oblique
Culori
Cu o și lungimi
u g
• color: și background-color:
– aqua | black | blue | fuchsia | gray | green | lime |
maroon | navy | olive | purple | red | silver | teal |
white
h | #FF0000
# 0000 | ##F00
00 | rgb(255,
b2 0
0, 0
0) | Alte
Al nume
recunoscute de browser (nu se recomandă)
• A
Acestea
t suntt elemente
l t folosite
f l it pentru
t unitățile
itățil dde
măsură:
– em, ex, px, %
• Dimensiunea fontului, înălțimea pe x, pixeli, procent din
dimensiunea moștenită
– in, cm, mm, pt, pc
• inci, centimetri, milimetri, puncte (1/72 dintr
dintr-un
un inch), picas (1
pica = 12 puncte), relative la valoarea moștenită
Curs Programare Web, anul 4 C5 – Curs 7 74
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Câteva
te a p
propriet
proprietăț
op etăț
etăț
ății și valori
a o pentru
pe t u text
te t
• text-align:
– left | right | center | justify
• text-decoration:
– none | underline | overline | line-through
• text
text-transform:
transform:
– none | capitalize | uppercase | lowercase
• text-indent
text indent
– length | 10% (indentarea primei linii a textului)
• white-space:
– normal | pre | nowrap
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Pseudo-
Pseudo
seudo-c
clase
ase
• Pseudo-clasele sunt elemente ale căror stare (și
mod de aparitie) poate varia în timp
• Sintaxa: element:pseudo-class {...}
– :link
• Un link ce nu a fost vizitat
– :visited
• Un link ce a fost vizitat
– :active
• Un
U lilink
k pe care tocmaii se execută
ă un click
li k
– :hover
• Un link peste care este poziționat cursorul mouse-
ului
• Pseudo-clasele sunt p
permise oriunde în cadrul
selectorilor CSS
Curs Programare Web, anul 4 C5 – Curs 7 76
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Alegerea
ege ea numelor
u eo
• CSS este proiectat pentru a separa conținut de stil
– Prin urmare, numele ce sunt folosite în HTML sau (mai
ales) în XML trebuie să descrie conținut, nu stil
• Exemplu:
E l
– Să presupunem că definiți span.huge {font-size: 36pt} și
folosiți <span class="huge">
class= huge > în cadrul mai multor
documente
– Ulterior descoperiți
p ț că utilizatorii dezagrează
g stilul acesta,,
deci modificați CSS-ul în span.huge {font-color: red}
– Numele este incorect ales; încercați să îl redenumiți în
toate documentele?
doc mentele?
– Daca ați fi ales de la început span.important {font-size:
36pt} ar fi fost mai ușor de întreținut propriile documente
36pt},
HTML 5
HTML reminder
• HTML 1.0 şi HTML+ 1990, respectiv 1993.
• HTML 2.0 - 1994, a fost prima versiune standardizată, (49
taguri).
• HTML 3 3.00 - 1995.
1995 Versiunea cuprindea extensii importante
importante,
cum ar fi marcaje pentru notaţii matematice, bannere etc.
• HTML 3.2,, - Ianuarie 1997,, este considerat ca succesorul
versiunii 2.0, incorporând o serie de taguri din HTML 3.0.
• HTML 4 - Decembrie 1997 extinde HTML cu mecanisme
pentru stylesheets,
stylesheets script
script-uri
uri, frame
frame-uri
uri, un suport mai mare şi
îmbunătăţit pentru alinierea textului, tabele mai bogate şi
îmbunatăţiri ale formularelor, oferind o accesibilitate mai mare
pentru oamenii cu deficit.
• HTML 4.01 - Decembrie 1999 este o versiune revizuită de
HTML4.0 care corecteaza unele erori si face unele schimbari in
privinta modului de functionare a unor sintaxe.
sintaxe
HTML 5
• 2004 Web Hypertext Application Working
Group (WHATWG) au inceput lucrul la noul
standard HTML
HTML 5
• HTML5 este ultima versiune HTML si XHTML.
Standardul incearca sa rezolve problemele
intalnite in versiunile anterioare HTML si se
adreseaza nevoii de APLICATII WEB, un
domeniu ce nu a fost acoperit de catre HTML
pana in acest moment.
• Desi
D i ultima
lti versiune
i HTML 5 llansata
t pe d data
t dde
22 Februarie 2012 este o „ciorna” (W3C
Working Draft),
Draft) dezvoltatorii browserelor au
inceput sa implementeze parti din
functionalitatile
u c o a a ep prezente
e e e in sstandardul
a da du HTML5. 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
• Performantele JavaScript.
p
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
ELEMENTE SIMPLIFICATE IN
HTML5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
DOCTYPE
<!DOCTYPE • HTML 5
html <!DOCTYPE html>
PUBLIC "-//W3C//DTD
XHTML 1.0
T
Transitional//EN„
iti l//EN
“http://www.w3.org/TR
/xhtml1/DTD/xhtml1
/xhtml1/DTD/xhtml1-
transitional.dtd">
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Radacina HTML
<html
ht l
xmlns=http://www.w3.org/1999/x
• HTML 5
html g
<html lang="en">
lang="en"
xml:lang="en">
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
CHARSET
• <meta http-equiv="Content-Type"
content="text/html; charset=utf-
8">
• HTML 5
<meta charset="utf-8">
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
STYLESHEET
• HTML 5
<link rel="stylesheet"
href="style-original.css" />
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Elementul Base
<head>
<base href=“url”
target="_blank
target blank" />
</head>
-se introduce
i d adresa
d d
de b
baza.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
El
Elemente
t semantice
ti d sectionare
de ti
• HTML 4
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Elemente semantice de
sectionare
• HTML 5
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
<HEADER>
HTML 4
<div id="header">
<h1>M W
<h1>My Weblog</h1>
bl </h1>
<p class="tagline">A lot of effort went into
making this effortless.</p>
</div>
HTML 5
<header>
<h1>My Weblog</h1>
<p class="tagline">A lot of effort went
into making this effortless.</p> …
</header>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
<HGROUP>
HTML 4
<h1>My Weblog</h1>
<h2>A lot of effort went into making
this effortless.</h2>
HTML 5
<header>
<hgroup>
g p
<h1>My Weblog</h1> <h2>A lot of
effort went into making this
ffortless.</h2>
</hgroup> …
</header>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu
<header>
<hgroup>
<h1><a
h1 href="/">Mini
h f "/" Mi i AApps</a></h1>
/ /h1
<h2>Web applications for iPhone, Android & other mobile platforms</h2>
</hgroup>
</header>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
<FOOTER>
HTML 4
<div id="footer">
<p>§</p> <p>© 2001–9
<a href="#">Mark Pilgrim</a></p>
</div>
HTML 5
<footer>
<p>§</p>
<p>© 2001–9
<a href=
href="#">Mark
# >Mark Pilgrim</a>
</p>
</footer>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
<SECTION>
SECTION
• Sectiune g
generica de aplicatie
p sau
document
<section>
<h1>Level 1</h1> <section> <h1>Level 2</h1>
<section> <h1>Level 3</h1> </section>
</section>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
<ARTICLE>
HTML 4
<div class="entry">
<p class="post-date">October 22, 2009</p> <h2>
<a href="#" rel="bookmark" title="link to this
post"> Travel day </a> </h2>
</div>
HTML 5
<article>
<header>
<p class
class="post-date">October
post date >October 22
22, 2009</p>
<h1> <a href="#" rel="bookmark" title="link to
this post"> Travel day </a> </h1> </header> …
</article>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
<ASIDE>
ASIDE
HTML5
<aside>
<h1>Archives</h1>
<ul>
<li><a href="/2007/09/">September 2007</a></li>
<li><a href="/2007/08/">August 2007</a></li>
<li>< h
<li><a href="/2007/07/">July
f "/2007/07/">J l 2007</
2007</a></li>
></li>
</ul>
</aside>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
<NAV>
HTML 4 HTML 5
<nav>
<div id="nav">
id= nav > <ul>
< l>
<ul> <li><a
<li><a href="#">home</a></li>
<li><a
href="#">home</a></li> href="#">blog</a></li>
<li><a <li><a
href="#">blog</a></li>
# g / / href="#">gallery</a></li>
<li><a <li><a
href="#">gallery</a></li> href="#">about</a></li>
<li><a </ul>
href="#">about</a></li> </nav>
</ul>
</div>
/
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
<TIME>
TIME
• <time datetime="2009-10-22"
datetime "2009 10 22" pubdate>October 22
22,
2009</time>
• <time datetime=
datetime="2009
2009-10-22T13:59:47-04:00
10 22T13:59:47 04:00" pubdate>
October 22, 2009 1:59pm EDT </time>
• <article>
<header>
<time datetime="2009-10-22" p
pubdate> October 22,, 2009 </time>
<h1> <a href="#" rel="bookmark" title="link to this post"> Travel day
</a> </h1>
</header>
/h d
<p>Lorem ipsum dolor sit amet…</p>
</article>
/ i l
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
GRAFICA IN HTML5
<CANVAS>
<CANVAS>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
<CANVAS>
CANVAS
• Sintaxa:
Si t
<canvas id="a" width="300" height="225"></canvas>
• Utilizare cu JavaScript & DOM
var a_canvas = document.getElementById("a");
• Desenare
function draw_b() {
var b_canvas = document.getElementById("b");
g y ( )
var b_context = b_canvas.getContext("2d");//future 3D
b_context.fillRect(50, 25, 150, 100);
}
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
<CANVAS>
CANVAS
Desenarea in Canvas Context:
Sunt esentiale functiile:
beginPath()
closePath()
stroke()
fill()
Proprietati:
fillStyle = (CSS color
color,pattern,gradient)
pattern gradient)
strokeStyle= (CSS color,pattern,gradient)
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
<CANVAS>
CANVAS
• Alte functii de desenare in canvas context
o Desenare dreptunghiuri
• fillRect(x, y, width, height)
• strokeRect(x, y, width, height)
• clearRect(x, y, width, height)
o Desenare
D liliniiii
o moveTo(x, y)
o lineTo(x,
lineTo(x y)
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
<CANVAS>
CANVAS
o Desenare arce
• arc(x, y, radius, startAngle, endAngle, anticlockwise)
(pentru cerc startAngle=0, endAngle=Math.pi*2)
• quadraticCurveTo(cp1x, cp1y, x, y)
bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)
• x,y coordonatele punctului de sfarsit
• cp1x,cp1y, cp2x,cp2y
cp1x,cp1y, cp2x,cp2y coordonatele primului si celui de al doilea
de al doilea punct de control.
de control.
Desenarea de text
o Proprietati context:
Context.font= {font}
Context.textAlign={start,end,left,right,center};
Context.textBaseline={top,hanging,middle,alphabetic,ideographic,bottom};
Context textBaseline={top hanging middle alphabetic ideographic bottom};
oFunctia de desenare
o Context.fillText(text,x,y);
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
<CANVAS>
CANVAS
o Crearea unui gradient
g
– createLinearGradient(x0, y0, x1, y1)
– createRadialGradient(x0,
createRadialGradient(x0 y0
y0, r0
r0, x1
x1, y1
y1, r1)
• Exemple gradient:
1. var my_gradient = context.createLinearGradient(0, 0, 300, 0);
my_gradient.addColorStop(0, "black");
my_gradient.addColorStop(1, "white");
context fillStyle = my
context.fillStyle my_gradient;
gradient;
context.fillRect(0, 0, 300, 225);
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
<CANVAS>
CANVAS
2. var my_gradient = context.createLinearGradient(0, 0, 0, 225);
y_g p
my_gradient.addColorStop(0, "black");
my_gradient.addColorStop(1, "white");
context.fillStyle = my_gradient;
context.fillRect(0, 0, 300, 225);
3. var my_gradient
_ = context.createLinearGradient(0, 0, 300, 225);
my_gradient.addColorStop(0, "black");
my_gradient.addColorStop(1, "white");
context.fillStyle = my_gradient;
context.fillRect(0, 0, 300, 225);
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
<CANVAS>
CANVAS
o Desenarea de imagini
g
o drawImage(image, dx, dy)
o drawImage(image, dx, dy, dw, dh)
o drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh)
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
<CANVAS>
CANVAS
• Exemple
p desenare imagini
g
1. <img id="cat" src="images/cat.png" alt="sleeping cat" width="177"
height="113">
<canvas id="e" width="177" height="113"></canvas>
<script>
i
window.onload = function() {
var canvas = document.getElementById("e");
var context = canvas.getContext(
canvas.getContext("2d");
2d );
var cat = document.getElementById("cat"); context.drawImage(cat, 0,
0);
}; </script>
2. <canvas id="e" width="177" height="113"></canvas>
<script>
var canvas = document.getElementById("e");
var context = canvas.getContext(
canvas getContext("2d");
2d );
var cat = new Image();
cat.src = "images/cat.png"; cat.onload = function() { context.drawImage(cat,
0, 0);
}; </script>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
<CANVAS>
CANVAS
• Transformari
– Pentru a retine si a prelua starile “panzei” :
• Save();
• Restore();
– Starea panzei=transformari,
panzei transformari, valorile proprietatilor
strokeStyle, fillStyle, globalAlpha, lineWidth, lineCap,
lineJoin, miterLimit, shadowOffsetX, shadowOffsetY,
shadowBlur shadowColor
shadowBlur,
– Translatarea: translate(x, y)
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
<CANVAS>
CANVAS
– Rotatia: rotate(angle)
– Scalarea: scale(x, y)
• Umbre
– Proprietati context:
• ShadowColor
• ShadowOffsetX
• ShadowOffsetY
• Sh d Bl
ShadowBlur
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemple <CANVAS>
CANVAS
• http://html5demos.com/canvas-grad
p g
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemple <CANVAS>
CANVAS
• First p
person ggifter
http://htmlfive.appspot.com/static/gifter.html
• Functii media
<video width="320" height="240" controls>
<source src="pr6.mp4" type='video/mp4;
codecs="avc1.42E01E, mp4a.40.2"'>
– Load()
() <source src="pr6.webm" type='video/webm;
codecs="vp8,
p , vorbis"'>
<source src="pr6.ogv" type='video/ogg;
– Play() codecs="theora, vorbis"'>
</video>
– canPlayType(type)
<source src="johann_sebastian_bach_air.ogg">
<source src="johann_sebastian_bach_air.mp3">
An audio clip from Johann Sebastian Bach.
</audio>
/
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu Geolocatie
• Google
g Maps p
http://htmlfive.appspot.com/static/where
ami html
ami.html
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
APLICATII OFFLINE
• O aplicatie web este o lista de URL-uri- HTML,CSS,Javascript,
imagini sau orice alta forma de resursa.
resursa
• Homepage-ul unei aplicatii offline ne directioneaza catre aceasta lista
(fisier manifest) ceea ce este doar un fisier text de pe server.
• Un Browser ce implementeaza aplicatii offline HTML5 citeste
aceeasta lista, downloadeaza resursele indicate si le inmagazineaza
local actualizandu-le
actualizandu le doar cand este necesar
necesar.
• Cand veti accesa aplicatia web fara a avea acces la internet,
browserul web va aduce copiile locale. De asemeni exista in DOM un
fl ce va iindica
flag di d daca sunteti
t ti online
li sau offline.
ffli
– var online = navigator.onLine;
• Acest atribut se modifica in timpul
p evenimentelor online si offline ce
sunt manevrate de obiectul Window.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
MANIFESTUL CACHE
• O aplicatie web offline este dependenta de fisierul cache manifest.
• Manifestul CACHE = lista resurselor de care are nevoie aplicatia web cand
este deconectata de la retea.
• Utilizarea fisierului cache manifest
<!DOCTYPE HTML>
<html manifest="/cache.manifest">
<body> ... </body>
</html>
Fisierul manifest se poate regasi oriunde pe server dar trebuie servit clientului avand
Content-Type: text/cache.manifest.
• Exemplu Manifest Cache de pe server:
CACHE MANIFEST
/static/stickies.html
/media/deleteButton.png
/media/deleteButtonPressed png
/media/deleteButtonPressed.png
/css/stickies.css
/js/stickies.js
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Baza de date
• HTML5 asigura un API de baza de date bazat
pe SQL pentru a inmagazina local si structurat
datele.
• API-ul
API ul interactioneaza cu baza de date in mod
asincron ceea ce asigura faptul ca interfata
utilizator nu se va bloca.
Exemplu de implementare
//pentru a crea un obiect baza de date
var db = window.openDatabase("NoteTest", "1.0","Example DB",200000);
function renderNote(row) {
// renders the note somewhere }
Baza de date
function renderNotes() {
db.transaction(function(tx) {
tx executeSql('CREATE
tx.executeSql( CREATE TABLE IF NOT EXISTS Notes(title TEXT
TEXT, body TEXT)
TEXT)',
[]);
tx.executeSql(‘SELECT * FROM Notes’, [], function(tx, rs) {
for(var i = 0; i < rs.rows.length; i++) {
renderNote(rs.rows[i]);
}
});
});
}
APLICATII OFFLINE
• Pentru depozitarea
p simpla
p si sincrona a
informatiilor pentru utilizare offline HTML
introduce atributul localStorage al obiectului
Windows.
localStorage["status"]
localStorage[ status ] = "Idling
Idling.";
;
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
WEB WORKERS
• Javascript ruleaza pe acelasi fir de executie cu browserul
ceea ce poate face ca acesta din urma sa nu mai poata
raspunde la comenzile utilizatorului
utilizatorului.
• „Muncitorii” Web definesc un API ce ruleaza scripturile in
background.
• ! „muncitorii” trebuie sa se afle intr-un script extern.
• Exemplu de implementare
<script>
var worker = new Worker('worker.js');
worker.onmessage = function (event) {
console log('Results:
console.log( Results: ' + event.data);
event data);
};
</script>
Muncitorii:
function findPrimes() {
// ... prime algorithm here
postMessage(nextPrime);
}
findPrimes();
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
• Socket-uri Web
• Web storage
• Alte tag-uri
tag uri noi
• Manipularea istoricului browserului
• Drag and Drop
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Concluzii
• HTML5 stie unde te afli,, stie ce scrii,, unde
esti si unde ai fost.
• HTML5 este viitorul si desi inca nu a ajuns
la un stadiu final (se preconizeaza ca in
j l anului
jurul l i 2022) ell poate
t fi iimplementat
l t t sii
utilizat in cadrul browserelor moderne.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Limbajul PHP
Introducere
• PHP a reprezentat inițial o abreviere pentru “Personal
Home Pages tools
tools” şi a fost creat în 1994 de Rasmus
Lerdorf.
• În p
primele versiuni ((PHP/FI)) el conţinea
ţ suport
p doar p
pentru
pachetul de baze de date mSQL (mini SQL).
• Zeev Suraski șiAndi Gutmans au rescris parserul în 1997,
formând prima versiune matură a PHP (3), redenumit în
‘PHP: Hypertext Processor’
• PHP poate fi folosit în conjuncţie cu o largă listă de SGBD-
uri, atât comerciale cât şi necomerciale (free software)
incluzand MySQL, dBase, Oracle, DB2, PostgreSQL,
S base InterBase
Sybase, InterBase, SQLSer
SQLServer,
er ODBC
ODBC, etc
etc.
• În 2004 a fost prezentat PHP 5, având la bază nucleul
Zend Engine II
• PHP 6 este la ora actuală în curs de dezvoltare.
Programare Web– Curs 3 http://en.wikipedia.org/wikiPHP 3
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Introducere
• Ca ppachet,, PHP poate
p fi instalat atât ca un
interpretor de sine stătător (deci un CGI
separat) cât şi ca un modul pentru serverul
de web (Apache).
• Pachetul poate fi instalat de asemenea sub
p
Windows IIS/PWS si Apache.
• Informaţii complete despre instalare şi
configurare
fi îîn diverse
di variante
i t pott fi găsite
ă it
în manualul care îl însoţeşte.
Inserare cod
• Introducerea de inserturi scrise în PHP în fişierele
HTML poate fi făcută în mai multe moduri (funcţia
echo are acelaşi efect cu printf din limbajul C):
1. <?php echo "Varianta 1 tip XML\n"; ?>
2 <?
2. ? echo
h "V
"Varianta
i t 2 2, cea maii simpla\n";
i l \ " ? ?>
3. <script
script language="php">
language php
echo "Varianta 3, tip limbaj pentru scripturi";
</script>;
4. <% echo "varianta 4, tip ASP"; %>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Inserare cod
• Pentru folosirea unora dintre aceste
variante interpretorul de PHP trebuie
configurat corespunzător (variantele 2 și 4)
• Opțiunile respective se găsesc în fișierul de
configurare php.ini
; Allow the <? tag. Otherwise, only <?php and <script> tags are recognized.
; NOTE: Using short tags should be avoided when developing applications or
; libraries that are meant for redistribution, or deployment on PHP
; servers which are not under your control, because short tags may not
; be supported on the target server.
server For portable
portable, redistributable code
code,
; be sure not to use short tags.
short_open_tag = On
; Allow
All ASP-style
ASP t l <% %> ttags.
asp_tags = Off
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Descriere
• Insertul poate conţine o singură instrucţiune, ca
în exemplele de mai sus, sau mai multe
instrucţiuni.
• Formatul instrucţiunilor este liber, putându-se
continua pe mai multe linii
linii.
• Ca şi în C fiecare instrucţiune este terminată cu
punctt şii virgulă.
i lă
• Directiva de închidere bloc p p țține și
php ș loc de ;
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemple
• Obișnuit:
<?php
echo
h ‘Hello
‘H ll world';
ld'
?>
• Fără ; în final de bloc:
<?php
h echo
h ‘Hello
‘H ll world'
ld' ?>
ăăd
• Fără directiva
ec a de închidere
c de e la
auultimul
u bbloc
oc (da
(dar cu
; !)
<?php echo ‘Putem
Putem omite directiva in final
final';;
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Comentarii
• Comentariile sunt ca ș
și in C / Unix shell:
<?php
echo ‘Test'; // Comentariu pe linie
/* Comentariu pe
/
potential mai multe linii */
echo ‘Ceva'; # Comentariu pe linie
?>
Tipuri și variabile
• PHP este un limbaj interpretat. În consecință nu este
necesară
ă declararea
d l variabilelor.
i bil l
• O variabilă împrumută tipul valorii stocate în ea la
momentul respectiv.
• O variabilă își poate schimba tipul pe parcursul execuției
scriptului PHP.
• O variabila se creează în momentul în care se depune o
valoare în ea.
• Pentru conversia între tipuri
p ((daca e necesară)) se potp
folosi construcţii de conversie de tip cast similare cu cele
din C sau funcţia settype.
Tipuri
• Există 8 tipuri de date în PHP: 4 tipuri scalare,
două compuse și două speciale
1. Boolean
2. Integer
3 Float (include double)
3.
4. String
5. Array
j
6. Object
7. Resource
8 Null
8.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Variabile
• Numele oricărei variabile este prefixat cu simbolul $.
$nume = "Ion";
$adresa = "Bucuresti";
$sir = "1234";;
$
$numar = (int) $sir; // exemplu de cast
Colectarea memoriei
• În PHP memoria este automat colectată –
programul cunoaște când o variabilă nu
mai este folosită și colectează automat
memoria ocupată de aceasta
• Singura excepție: conexiunile cu bazele de
date
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Tipul Boolean
• O variabilă de tip Boolean poate conține valoarea True
sau False.
F l
• În cazul conversiei la Boolean, sunt considerate False
(printre altele):
– Literalul FALSE
– Valoarea întreagă sau reală (float, double) 0 (zero)
– Un șir vid
– Șirul "0"
– Un array cu 0 elemente
– Tipul
Ti l special
i l NULL (i
(incluzând
l â d variabilele
i bil l ne-setate
t t = inexistente)
i i t t )
Tipul întreg
• Specificarea
p se p
poate face în bazele 10,, 8
și 16:
<?php
h
$a = 1234; // zecimal
$a = -123; // zecimal, negativ
$a = 0123; // octal
$a = 0x1A; // hexazecimal
?>
Numere întregi
• Dacă o cifră este incorectă restul cifrelor se ignoră:
<?php
? h
$a = 123EU4PLECLA5678; // 123
$a = 012389; // octal 0123
$a = 0x1ASPARAGUS; // hexa 0x1A
?>
• Dacă se depășește capacitatea de reprezentare pentru întregi
(~2^31), valoarea devine automat float.
• La conversia de la float la intreg numărul e rotunjit spre 00.
• Dacă se depășește capacitatea de reprezentare pentru întregi
rezultatul este nedefinit (nu se emite nici o atenționare!)
• La conversia de la string la număr se ia prefixul întreg al numărului
(ca mai sus):
$a = 1 + “33 iezi cucuieti
cucuieti”;; // $a devine 4
$a = “3 iezi cucuieti” + 1; // $a devine 4
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Tipul ARRAY
• Un tablou PHP este o succesiune de
perechi (cheie, valoare).
• Li se maii spune șii ttablouri
bl i asociative.
i ti
• Un tablou poate fi exploatat în modul clasic
(chei pornind de la 0 ca în C) sau ca tablou
asociativ (acces prin cheie
cheie, cheile putând
să nu fie succesive și nici numerice.
Exemple
<?php
$a = array(
array(“pw"
pw => “examen"
examen ,
4 => ”an terminal”,
“succes” =>true);
echo $a[“pw”], $a[4] // examen an terminal
// $b = array cu 2 dimensiuni
$b = array(“medii"
array( medii =>> array(1 =>> 9.45,
9 45 2 =>> 9
9.5,
5 3
=> 8.12, 4 => 9.90, “stat”=>10));
echo $b[“medii"][2]; // 9.5
echo
h $b[“medii"][“stat"];
$b[“ dii"][“ "] // 10
// $c e identic cu $b
$c = array(“medii"
$ y( => array(1
y( => 9.45, 9.5, 8.12,
9.90, “stat”=>10));
echo $c[“medii"][2]; // 9.5
echo $c[“medii"][“stat"];
$c[ medii ][ stat ]; // 10
?>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Tipul Array
• Cheia trebuie să fie scalară ((un alt arrayy
sau obiect)
• Adă
Adăugarea încă
î ă unuii element
l t cu cheie
h i
maximă negativă adaugă o pereche cu
cheia 0 (începând cu v4.3.0)
• Cheia TRUE devine 1
• Cheia FALSE devine 0
• Cheia NULL devine șirul vid
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu
$regiune = array(-12 => “Oltenia”);
// o variabila de tip array cu cheia
// maxima -12
12
// Adaugam noi elemente si vom crea noi
// perechi
hi cu chei
h i incepand
i d cu 0:
0
$regiune[] = "Muntenia"; // elementul 0
$regiune[] = "Moldova"; // elementul 1
• În lipsă, cheile pleacă de la 0:
$orase = array(“Bucuresti”, “Ploiesti”,
“C
“Campina”)
i ”) // chei
h i 0,
0 1,
1 2
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Conversii
• La conversia din tipurile întreg, real, string,
boolean și resursă în tipul array se crează un
tablou cu un singur element cu cheia 0 și
valoarea respectivă.
• Dacă se convertește un obiect la array
array, obținem
un array având ca elemente proprietățile
obiectului Mai multe amănunte în documentația
obiectului.
PHP.
• C
Conversiai uneii valori
l i nule
l lla array d
duce lla un
array vid (Atenție: vid nu înseamnă nul!)
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Comparațții
Compara
• 2 tablouri se p
pot compara
p astfel:
– Egalitate: $a == $b adevărat daca au aceleași
perechi (cheie
(cheie, valoare)
– Identitate: $a === $b adevărat dacă au
aceleași perechi (cheie, valoare) în aceeași
ordine și cu aceleași tipuri
– Inegalitate: $a <> $b sau $a != $b. Inversa
egalității.
– Nonidentitate: $a !== $b. Inversa identității.
Comparații
• Se pot afla diferențele dintre 2 tablouri folosind funcția
array_dif
dif care returnează
t ă valorile
l il di
dintr-un
t array care nu
se găsesc în al doilea:
<?php
h
$array1 = array(“ion", “vasile", “ion", “elena");
$array2 = array(“vasile", “ion", “mia");
$rezultat = array_diff($array1, $array2);
print_r($rezultat);
// rezultat: [3]=>“elena”
?> Afișează informații despre conținutul unor variabile în format
human-readable.
P t exemplul
Pentru l l nostru
t se afișează:
fi ă
Array ( [3] => elena )
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Reuniune
• Două tablouri se pot reuni folosind operatorul +:
$c = $a + $b
• Rezultatul conține perechile primului array la care se adaugă perechile din al
doilea array cu o cheie care nu există în primul.
• Exemplu:
<?php
$array1 = array(“ion", “vasile", “ion", “elena");
$array2 = array(“vasile", “ion", “mia");
$rezultat = $array2 + $array1;
print_r($rezultat);
?>
• Vom obține un tablou cu 4 elemente: elementele din array2 (chei 0, 1, 2) și
ultimul element din array 1 (cheia 3):
(“vasile", “ion", “mia“, “elena")
Programare Web– Curs 3 25
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu
• Același exemplu, însă altă adunare:
<?php
h
$array1 = array(“ion", “vasile", “ion", “elena");
$
$array2
2 = array(“vasile",
(“ sil " “i“ion",
" ““mia");
i ")
$rezultat = $array1 + $array2;
print r($rezultat);
print_r($rezultat);
?>
• Vom obține un tablou cu 4 elemente: elementele din array1 (chei 0 0, 1
1, 2 si 3)
și nici un element din array 0 (pentru că toate cheile deja există):
(“ion", “vasile", “ion“, “elena")
Tipul Obiect
• Un obiect se declară prin folosirea operatorului
new urmat de un constructor de clasă:
$objectName = new ClassName();
$objectName = new ClassName(97.58, 1);
• Metodele și proprietățile unui obiect se
accesează folosind ->.
$Checking->getBalance();
$Ch kN b = 1022;
$CheckNumber 1022
$Checking->getCheckAmount($CheckNumber);
g g ( )
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Clase
• Pentru crearea unei clase se folosește cuvântul
cheie class:
class ClassName {
// membrii și funcţii membre
}
• Numele claselor poate fi obținut cu get_class:
get class:
$Checking = new BankAccount();
echo 'The $Checking object is instantiated from the ‘.
get_class($Checking) . “class.</p>";
Clase externe
• Clasele p
pot fi declarate în fișiere
ș externe,,
caz în care se pot folosi funcțiile:
– include()
– require()
– include_once()
– require_once()
i ()
Specificatori de acces
• Specificatorii de acces determină drepturile de acces
asupra membrilor unei clase
• În PHP există trei nivele de protecție:
– public
bli
– private
– protected
• Public – oricine are acces la membrii clasei
• Private – se restricționează dreptul de acces asupra
membrilor clasei
class MyClass {
private $id = 18;
public
bli ffunction
ti getId()
tId() { return
t $thi
$this->id;
id }
}
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu
class Person { $judy = new Person();
$judy->setName("Judy");
private $name;
$joe = new Person();
function __construct($name)
construct($name) { $
$joe->setName("Joe");
$this->name = $name;
} print $judy->getName() . "\n";
//print Judy
function setName($name) {
print $joe->getName(). "\n";
$this->name = $name;
//print Joe
}
$judy = new Person("Judy");
function getName() {
return $
$this->name;; $joe = new Person("Joe");
} print $judy->getName();
};
print $joe->getName();
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Proprietăți statice
class
l MyUniqueIdClass
M U i IdCl {
static $idCounter = 0;
Clonarea obiectelor
class My
MyClass
lass {
public $var = 1;
}
obj1 $obj1 = new MyClass();
object
$obj2 = $obj1;
obj2
$obj2->var = 2;
print $obj1->var;
$obj1 >var; //print 2
object $obj2->var = 2;
obj2
j
print $obj1->var;
$ //print 1
Polimorfism
• Mecanism de moștenire
ș a unei singure
g
clase
– Similar Java
• Însă se pot implementa mai multe interfețe
Tipul Obiect
• … mai multe detalii la orele de laborator.
• Dacă o valoare de alt tip este convertită la
ti l obiect,
tipul bi t obținem
bți o iinstanță
t ță a clasei
l i
stdClass.
• Dacă se convertește la obiect o valoare
nulă noua instanță va fi vidă
nulă, vidă.
• Dacă un tablou se convertește
ș la obiect
cheile devin proprietăți.
Tipul Resursă
Resursă
• Tipul resursă este un tip special, variabilele de
acest tip conțin o referință către o resursă
externa.
• Felul resursei se poate obține cu funcția
get resource type (ex: mysql link
get_resource_type link, file
file, domxml
document, etc.).
• C
Conversia i lla titipull resursă
ă nu are sens (di
(din
definiția tipului)
• O resursă care nu mai este referită este detectată
automat de 'garbage
g g collector‘ și
ș eliberată (deci
(
nu e necesară eliberarea manuală).
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Tipul NULL
• Tipul NULL are o singură valoare, NULL.
• O variabilă nula nu conține nici o valoare.
• O variabilă este considerată nulă dacă:
1. I-a fost asignată valoarea NULL
2. Nu i-a fost asignată încă nici o valoare (deci eventual ea nu există).
3 A fost dealocată cu funcția unset($variabila)
3.
Variabile
• Numele variabilelor este prefixat cu $ (marcaj de
variabila).
• Numele este case
case-senzitiv
senzitiv (literele mari sunt
considerate diferite de cele mici).
• U
Un nume corectt PHP începe
î cu literă
lit ă sau
underscore și continuă cu litere, cifre și
underscore.
d
• Variabilele p
pot conține
ț referințe
ț către alte
variabile (adresa se prelevează cu &, ca în C).
Exemplu:
p
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Variabile
<?php
$unu = 'Ceva';
$doi = &$unu; // $doi e o referinta la $unu.
$doi = "Altceva"; // Modificam $doi
echo $unu; // Ambele contin acelasi
echo $doi; // sir
?>
• Nu se poate preleva cu & adresa unei expresii (doar a
unei variabile).
• PHP inițializează variabilele cu valori implicite dar nu este
bine să ne bazăm p pe aceste valori ((0 p
pentru numere,
False pentru boolean, etc).
Programare Web– Curs 3 39
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Variabile predefinite
• Există un număr mare de variabile predefinite (de
sistem) pe care scriptul le poate folosi.
• Cele mai utilizate sunt:
– $_GET, $_POST, $_COOKIES, $_REQUEST – conțin valorile
transmise scriptului
p cu metodele GET,, POST,, cookie sau
reuniunea lor
– $_SESSION – conține variabile care se pot folosi de o succesiune
d execuții
de ții d
de scripturi
i t i care fformează
ă o sesiune
i d
de llucru
– $GLOBALS – conține toate variabilele globale ale scriptului
Domeniul (scope)
• Variabilele sunt cunoscute în contextul în care au
fost create.
• Cele definite în afara oricărei funcții sunt similare
variabilelor globale din C.
• C
Cele
l definite
d fi it îîn ffuncții
ții ((prin
i asignare)
i ) suntt llocale
l
acelei functii.
• Spre deosebire de limbajul C o variabilă globală
nu este cunoscută în interiorul unei funcții
ț decât
dacă este declarată cu global în acea funcție.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Domeniul (scope)
• Exemplul 1:
$a = 1; /* variabila globala */
function Ecou() {
$a = 2; /* se asigneaza o valoare variabilei locale */
echo
h $$a; /* tiparire
ti i variabila
i bil locala
l l */
}
Ecou();
echo $a; /*
/ tiparire variabila globala */
/
• Rezultat 21
Domeniul (scope)
• Exemplul 2:
$a = 1; /* variabila globala */
function Ecou() {
global $a
$ =2
$a 2;/*
/* se asigneaza
i o valoare
l variabilei
i bil i globale
l b l */
echo $a;/* tiparire variabila globala */
}
Ecou();
echo $a; /* tiparire variabila globala */
• Rezultat
R lt t 22
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Domeniul (scope)
• Un alt mod de a defini variabile globale cunoscute și în interiorul
funcțiilor este folosirea tabloului asociativ predefinit $GLOBALS,
având ca indici numele variabilelor globale:
• Exemplu:
$a = 1; /* variabila globala */
function Ecou() {
$GLOBALS["a"] = 2; /* se asigneaza o valoare
variabilei g
globale */
echo $GLOBALS["a"];/* tiparire variabila globala */
}
Ecou();
echo $a; /
/* tiparire variabila globala */
/
• Rezultat 22
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Variabile statice
• Ca și în C se pot defini variabile locale funcțiilor dar care își păstrează
valoarea de la un apel la altul
altul.
• Aceste variabile se numesc statice.
• Variabilele statice pot fi inițializate cu o valoare care apoi se modifică
și este păstrată pentru apelurile viitoare:
function Increment() {
static $a = 0;
echo $a;
$a++;
}
• Rezultatul apelului repetat al acestei funcții va fi afișarea numerelor 0,
1, 2, . . .
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Macrosubstituț
Macrosubstituție
• Numele unei variabile se poate găsi în altă variabila.
• Acest procedeu, numit macrosubstituție, este întâlnit și în alte limbaje,
cum este Xbase (dBase, Fox, Clipper).
• Instrucțiunile:
$a = "Limbajul";
$$ = " PHP";
$$a PHP"
• definesc două variabile: $a cu valoarea “Limbajul” și $Limbajul cu
valoarea “ PHP
PHP”.
• În acest caz instrucțiunea:
echo "$a
$a ${$a}";
${$a} ;
va afișa Limbajul PHP
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Variabile externe
• În această categorie intră variabilele corespunzătoare simbolurilor primite de la un formular
și variabilele de mediu setate de serverul de web.
• Să presupunem că avem următorul formular:
<form action="actiune.php" method="post">
Nume: <input type=
type="text"
text name=
name="nume"><br>
nume ><br>
Localitate: <input type="text" name="adresa[localitate]"><br>
Strada: <input type="text" name="adresa[strada]"><br>
Num r: <input type="text"
Numar: t p "t xt" name="adresa[numar]"><br>
n m " dr s [num r]"><br>
Optiuni: <br>
<select multiple name="so[]">
<option
ti value="Windows
l "Wi d 95">Windows
95" Wi d 95
<option value="Windows XP">Windows XP
<option value="Windows Vista">Windows Vista
<option
i value="Linux">Linux
l "Li " Li
</select>
<input type="submit">
</form>
Variabile externe
• Scriptul actiune.php care tratează acest formular poate
primi
i i variabilele:
i bil l
– $nume, variabilă simplă
– $adresa, un tablou asociativ cu trei elemente
– $so, un tablou având atâtea elemente câte selecții s-au făcut în
meniul
i l vertical
ti l di
din fformular.
l
• Acest lucru se întâmplă însă doar dacă opțiunea de
configurare a PHP register_globals
register globals e setată pe On
(implicit ea e însă Off, fiind potențial o breșă de
securitate).
• În mod normal valorile celor 3 variabile se găsesc în
$ POST și $
$_POST $_REQUEST.
REQUEST
Constante
• Constantele se definesc similar cu limbajul C, cu define:
<?php
// Constante valide
define("MATERIE", "Programare Web");
define("_EVAL_UARE", "Examen");
define("NOTA10", "10");
// Nume invalid
define("2PAC", "Cantaret");
// Asa arata constantele PHP,
// e bine sa nu avem si noi la fel
(
define("__NOTA__", "10");
)
?>
Programare Web– Curs 3 49
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Constante
• Spre deosebire de variabile:
– Constantele nu au un nume care începe cu $
– Constantele pot fi definite doar cu define() nu prin
atribuire
– Constantele nu au domeniu de valabilitate ca
variabilele (se pot folosi și în funcții de exemplu).
– Nu pot să
să-și
și schimbe valoarea și nu pot fi dealocate
(unset)
– Constantele pot conține doar valori scalare (boolean
(boolean,
intreg, real sau șir)
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Constante predefinite
• PHP pune la dispoziție și o serie de constante
predefinite.
• Acestea au forma __Nume__
Nume
• Printre ele sunt:
– __LINE__ numărul liniei curente în sursa PHP
– __FILE__ calea și numele complet al fișierului sursă PHP
– __DIR__ directorul acelui fișier
– __FUNCTION__ numele funcției curente (doar cu litere mici în
PHP4)
– __CLASS__ numele clasei (doar cu litere mici în PHP4)
– __METHOD__ numele metodei din clasă (doar PHP5)
Expresii
• Expresiile în PHP sunt similare celor din limbajul C
• Se pot folosi construcții de tipurile:
– $a++,
$a++ ++$a
– $a--, --$a
– $a += 3; (echivalentă cu $a = $a + 3;), în loc de +
putând fi orice operator valid pentru operația respectivă
– Atribuiri multiple, ca de exemplu:
$a = $b = ++$c;
$c; sau
$a = $b += 10;
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Operatori
• Aritmetici: +,, -,, *,, /,, % (modul)
( )
• Logici: ==, ===, !=, !==, <, >, <=, >=
• Conectori logici: and, &&, or, ||, ! (negare),
xor (sau exclusiv)
• Operatori pe șiruri: . (concatenare)
• Operatori pe biți: &, |, ~ (inversare biți)
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Structuri de control
• Există o serie de structuri de control care
sunt similare celor din limbajul C.
• V
Vom avea ca șii acolo
l ddecizii,
i ii cicluri,
i l i
alegere
• Se pot defini ca și în C funcții (nu există
decât funcții
funcții, nu și proceduri ca în Pascal).
Pascal)
Decizia
• În PHP aceste instrucțiuni sunt asemănătoare ca sintaxa
cu cele
l similare
i il di
din lilimbajul
b j lCC.
• Sintaxa:
if (conditie_1)
{ instructiuni_1
instructiuni 1 }
elseif (conditie_2)
{ instructiuni_2
i i i 2}
..........
else { instructiuni_N }
• elseif și else sunt opționale (similar cu limbajul C)
C).
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Decizia
• Exemplu:
p
if ($a > $b)
{ print "a este mai mare ca b";}
elseif ($a == $b)
{ print "a este egal cu b";}
else
{ print "a
a este mai mic decat b
b";}
;}
Ciclul WHILE
• Sintaxa:
while ( conditie )
{ instructiuni
i t ti i }
• Exemplu:
p
$i = 10;
while
hil ($i >= 0)
{ print $i
$i--;; }
Ciclul DO
• Sintaxa:
do
{ instructiuni
i t ti i }
while ( conditie );
• Exemplu:
$i = 10;
10
do
{ print $i--;}
while ($i>0);
$
Programare Web– Curs 3 59
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Ciclul FOR
• Sintaxa:
FOR (expr1; expr2; expr3)
instrucţiune
• Exemplu:
for ($i = 1; $i <=10; $i++)
{ print $i;}
FOREACH
• Sintaxa ((2 variante):
)
foreach (expr_array as $valoare)
statement
foreach (expr_array
(expr array as $cheie => $valoare)
statement
• Se folosește pentru parcurgerea unui
tablou (ciclu după elementele unui tablou)
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu
<?php
// tiparirea unui tablou
$arr = array("one"
array( one , "two"
two , "three");
three );
foreach ($arr as $val) {
echo
h "Value:
"V l $val<br
$ l b />\n";
/\ "
}
foreach ($arr as $k => $val) {
echo "Cheie:
Cheie: $k; Val: $val<br />\n
/>\n";;
}
?>
Programare Web– Curs 3 62
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Break și Continue
• Aceste instrucțiuni se folosesc pentru a ieși dintr-un ciclu,
respectiv
ti pentru
t a se ttrece necondiționat
diți t la
l un nou pas all
ciclului chiar dacă pasul curent nu s-a terminat.
• Exemplu:
Tipărirea numerelor impare dintre 1 și 10
for ($i = 1;;$i++) {
if ($i > 10) { break; }
if ($i % 2) { continue; }
print $i;
$
}
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Alegerea (Switch)
• Sintaxa:
switch (expr)
{
case val1:
instructiuni
case val2:
instructiuni
........
default:
instructiuni
}
Alegerea (Switch)
• Efectul este următorul:
– Se evaluează expresia expr
l1 val2,
– Se parcurg etichetele case (val1, l …) una
după alta. În cazul în care se găsește o
egalitate, se executa instrucțiunile de la acea
eticheta până la prima instrucțiune break sau
până se sfârșește întregul switch.h
– Daca nu exista nici o egalitate se execută
instrucțiunile de la default.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Alegerea (Switch)
• Exemplu:
switch ($i)
{
case 0:
print "ii egal cu 0
0";;
break;
case 1:
p int "i egall cu 1";
print
break;
case 2:
print
i t "i egall cu 2"
2";
break;
default:
print
i "i nu este egall cu 0,
0 1 sau 2";
2"
}
• De remarcat că dacă instrucțiunile break ar lipsi, în cazul în care $i este egal
cu 0 se tipăresc toate cele patru mesaje iar în cazul în care este egal cu 1
doar ultimele trei.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Func
Funcțții
• Programele PHP pot conține funcții definite de utilizator,
inclusiv functii recursive
recursive.
• Sintaxa definiției unei funcții este următoarea:
f
function nume_functie
f
(lista_parametri)
{
instructiuni
}
• Dacă se dorește ca funcția să întoarcă o valoare, se
folosește instrucțiunea:
return expresie;
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Func
Funcțții
• Exemplu:
p
function la_patrat ($numar) {
return $numar * $numar;
}
echo la_patrat(10);
la patrat(10);
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Func
Funcțții
• Folosirea unei funcții se poate face doar după definiția
acesteia.
acesteia
• Parametri sunt transmiși prin valoare.
• Dacă se dorește transmiterea prin referință a unui
argument, se poate folosi construcția &variabila:
function la_patrat (&$numar) {
$numar
$ m =$$numar
m *$$numar;
m ;
}
$ = 10;
$a
la_patrat($a);
echo $a; // tipareste 100
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Func
Funcțții
• Se poate transmite prin valoare adresa sa:
function la_patrat ($numar) {
$numar = $numar * $numar;
}
$ = 10;
$a 10
la_patrat($a);
echo $a; // tipareste 10
la patrat(&$a);
la_patrat(&$a);
echo $a; // tipareste 100
Func
Funcțții
• La definirea unei funcții se pot asigna și valori
implicite pentru argumente.
• În cazul în care acestea lipsesc la apel sunt luate
implicit valorile din definiție:
f
function
ti la_patrat
l t t ($numar
($ = 4) {
return $
$numar * $
$numar;
}
echo
h la_patrat(10);
l (10) // tipareste
i 100
echo la_p
patrat();
(); // tipareste
p 16
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Func
Funcțții
• Astfel de argumente trebuie să fie ultimele din
listă.
• De exemplu secvența:
function inmultire ($numar1 = 4, $numar2) {
return $numar1 * $numar2;
}
echo inmultire(10);
va semnala o eroare deoarece automat valoarea
10 va fi asignată
g p
primului argument.
g
Func
Funcțții PHP
• PHP p pune la dispoziție
p ț un număr foarte
mare de funcții, atât de uz general cât și
funcții specifice accesului la diverse
sisteme de gestiune a bazelor de date.
• ÎÎn continuare sunt prezentate o parte dintre
acestea…
Func
Funcțții ARRAY
array array(lista valori);
• Creează un array conținând valorile din listă.
Pentru un array bidimensional se poate folosi
operatorul => pentru asocierea celor doi indici.
• Exemplu:
$note = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
$calificative = array("S"=>"Satisfacator",
"B"=>"Bine","F"=>"Foarte bine");
• În primul caz s-a definit un array cu o singură
dimensiune iar în cel de-al doilea unul cu două
dimensiuni.
Programare Web– Curs 3 74
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Func
Funcțții ARRAY
void list(lista de valori);
• Asignează o lista de variabile ca și când ar fi un
array.
array
• Exemplu:
$rezultat = mysql_query("select nume_s,
grupa
g p from studenti");
)
while (list($n, $g) =
mysql fetch row($rezultat))
mysql_fetch_row($rezultat))
{ print( "Nume: $n<br>Grupa: $g<br>\n"); }
Func
Funcțții ARRAY
int count(variabila);
• Întoarce numărul de elemente din variabilă.
• D
Dacăă este
t un array acestt număr
ă poate t fi maii mare
ca 1. Dacă variabila nu este setată întoarce 0.
array each(array array);
• Întoarce următoarea pereche (index
(index, valoare) dintr-
un array sub forma unui tablou având indicii 0 si 1
sau key și value.
value
Func
Funcțții ARRAY
• De notat că fiecare variabilă de tip array are
asociat un pointer intern care arată către unul
dintre elementele sale iar funcția each() se poate
folosi pentru parcurgerea sa.
p
• Exemplu:
$calificative = array ("S"=>"Satisfacator",
"B"=>"Bine"
B > Bine ,"F"=>"Foarte
F > Foarte bine");
bine );
list($c, $d) = each($calificative);
• Atunci:
At i
– $c are valoarea "S"
– $d are valoarea "Satisfacator"
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Func
Funcțții ARRAY
mixed next(array
( y tablou);)
• Întoarce următorul element al unui array
sau false dacă nu mai sunt elemente
elemente,
avansând deci pointerul intern asociat
t bl l i
tabloului.
• De notat că dacă un tablou are elemente
nule și pentru acestea valoarea întoarsă va
fi false.
false De aceea
aceea, pentru parcurgerea unui
tablou se recomandă folosirea lui each().
Func
Funcțții ARRAY
mixed prev(array tablou);
• Întoarce precedentul element al unui array sau false dacă
nu mai sunt elemente, decrementând pointerul intern
asociat tabloului.
• Aceeași observație ca la next (folosire each)
mixed reset(array tablou);
• Setează pointerul intern asociat tabloului la primul
element al acestuia.
• Întoarce valoarea acestui element.
int sizeof(array tablou);
• Întoarce numărul de elemente ale unui tablou. Este
analog cu count().
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Func
Funcțții de informare/
informare/setare
int error_reporting(int [level]);
• Setează nivelul de erori care sunt raportate de
PHP Valorile respective pot fi cumulate prin
PHP.
adunare în cazul în care se doresc setate
simultan mai multe tipuri de raportări
raportări.
string getenv(string variabila);
• Întoarce valoarea unei variabile de mediu sau
false în caz de eroare.
$ip = getenv("REMOTE_ADDR"); // prelevare
adresa IP a clientului
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Func
Funcțții de informare/
informare/setare
void putenv(string setare);
• Creează o nouă variabilă de mediu. Exemplu:
putenv("USER
putenv( USER = $user
$user");
);
int phpinfo(void);
• ÎÎntoarce
t o suită
ită de
d iinformații
f ții privind
i i d PHP
PHP: opțiuni
ți i dde
compilare, versiune, informații despre serverul de web,
variabile de mediu
mediu, versiunea sistemului de operare
operare, etc
etc.
string phpversion(void);
• Întoarce
Î sub forma unui sir numărul versiunii PHP folosite.
Alte func
funcțții
void eval(string sir);
• Șirul de caractere (care trebuie sa conțină expresii valide
PHP) este evaluat.
• Exemplu:
$nume = 'Ion';
$
$str = ''Ma numesc $$nume<br>';'
echo $str;
eval( "\$str = \"$str\";" );
echo $str;
• Va avea ca efect tipărirea mesajelor:
Ma numesc $nume
Ma numesc Ion
Programare Web– Curs 3 82
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Alte func
funcțții
void die(string mesaj);
• Afișează un mesaj și termină execuția scriptului.
• Exemplu:
E l
$nume_fisier = '/usr/local/date.txt';
$f = fopen($nume_fisier, 'r') or die "Nu se poate
deschide fisierul $filename";
void exit(void);
• Termină
T i ă imediat
i di t execuția
ți scriptului.
i t l i
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Alte func
funcțții
void sleep(int
p( secunde);
)
• Întârzie execuția un număr de secunde.
echo(string arg1, string [argn]...);
sau
echo string arg1, string [argn]...;
• Evaluează și afișează parametrii primiți ca
argument.
Alte func
funcțții
print(string arg);
• Afișează argumentul.
int printf(string format, mixed [argumente]...);
• Afișează argumentele formatate conform șirului format
(asemănător cu limbajul C)
C).
int strcmp(string str1, string str2);
• C
Compara d doua șiruri.
i i ÎÎntoarce o valoare
l <00, egală
lă cu 0
sau >0 după cum str1 este mai mic, egal sau mai mare
decât str2.
str2 Literele mari și mici sunt considerate diferite
diferite.
int strlen(string sir);
• Întoarce
Î lungimea unui șir de caractere.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Alte func
funcțții
string substr(string sir, int start, int [lung]);
• Întoarce un subșir conținând caracterele începând cu cel dat de start
si având lungimea lung. Dacă start este negativ, numărătoarea
pentru stabilirea caracterului inițial este făcută de la sfârșitul șirului.
D ă llung este
Dacă t negativ
ti ultimul
lti l caracter
t all subșirului
b i l i este
t cell aflat
fl t lla
distanța lung de sfârșitul șirului. Întoarce întotdeauna cel puțin un
• caracter cel dat de start
caracter, start.
• Exemple:
$rest = substr("abcdef"
substr( abcdef , 1); // întoarce "bcdef"
bcdef
$rest = substr("abcdef", 1, 3); // întoarce "bcd"
$rest = substr("abcdef"
substr( abcdef , -1);
1); // întoarce "f"
f
$rest = substr("abcdef", -2); // întoarce "ef"
$rest = substr("abcdef"
substr( abcdef , -3,
3 1); // întoarce "d"
d
$rest = substr("abcdef", 1, -1); // întoarce "bcde"
Programare Web– Curs 3 86
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Alte func
funcțții
int is_array(mixed var);
• Întoarce
Î t t
true d ă variabila
dacă i bil este
t un array sii false
f l altfel.
ltf l
int is_double(mixed var);
int is_float(mixed var);
int is_real(mixed
is real(mixed var);
• Întorc true dacă variabila este un număr real și false altfel.
i t iis_int(mixed
int i t( i d var);
)
int is_integer(mixed var);
int is_long(mixed var);
• Întorc true dacă variabila este un număr întreg și false
altfel.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Alte func
funcțții
int is_object(mixed var);
• Întoarce
Î t t
true d ă variabila
dacă i bil este
t un obiect
bi t șii false
f l altfel.
ltf l
int is_string(mixed var);
• Întoarce true dacă variabila este un șir de caractere și
false altfel.
int isset(mixed var);
• Întoarce true dacă variabila există și false altfel.
altfel
int unset(mixed var);
• Elimină o variabilă.
string strval(mixed var);
• Convertește la șir de caractere o variabilă scalară.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Obiectiv
• Prezentarea modului în care se p poate face
accesul la baze de date din PHP.
• Vor fi prezentate funcțiile de acces pentru
MySQL și Oracle.
– Funcțiile ODBC sunt similare celor din MySQL
și Oracle.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Caracteristici
• Pachetul PHP p pune la dispoziție
p ț funcțiiț
pentru accesul la o multitudine de SGBD-
uri și pachete de gestiune a datelor
datelor.
• Din păcate aceste funcții nu sunt
standardizate ci de obicei copiază funcții
existente în API-urile p
pachetelor respective.
p
• Din această cauză pentru fiecare tip de
SGBD există
i tă un sett diferit
dif it de
d ffuncții
ții care
permit accesul la datele din baza de date.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Caracteristici
• Pașii în cazul regăsirii datelor sunt în general
următorii:
1 Stabilirea unei conexiuni cu serverul de baze de
1.
date (cine se conectează?)
2 Trimiterea
2. T i it spre execuție
ți a cereriiii d
de titip SELECT
3. Preluarea linie cu linie a datelor din tabela
rezultat și prelucrarea acestora
4 Eliberarea resurselor ocupate de rezultat
4.
5. Închiderea conexiunii, după execuția repetata a
pașilor 2-4
Programare Web– Curs 4 4
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Caracteristici
• În cazul execuției
ț altor tipuri
p de cereri
(insert, update, delete, cereri DDL, etc) se
execută pașii 11, 2 și 5
5, neexistând o tabelă
rezultat.
• ÎÎn toate cazurile, la apariția unei erori se
pot obține
p ț informații
ț despre
p ea folosind
funcții care întorc textul mesajului de
eroare.
eroare
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Func
Funcțții MySQL - conectare
1. Conectare: Pentru conectarea la SGBD există mai multe
f
funcții
ții care pott fi ffolosite
l it alternativ:
lt ti
resource mysql_connect(string [hostname] [:port] , string
[username] , string [password],
d bool
b l [new_link],
l k int
[client_flags] );
• ÎÎntoarce un identificator de conexiune (numeric, pozitiv)
în caz de succes și false în caz de eșec.
• Toate argumentele sunt opționale, valorile implicite fiind
localhost:3306, numele utilizatorului care deține procesul
server și un șir vid pentru parolă
parolă.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Func
Funcțții MySQL - conectare
• new_link forțează returnarea unui nou descriptor de
conexiune
i chiar
hi d dacăă există
i tă deja
d j o conexiune
i (i
(implicit
li it nu))
cu acel server iar client_flags specifică o serie de alte
setări (implicit e ignorat)
• În cazul unui apel cu aceleași argumente cu ale unei
conexiuni deja deschise va întoarce identificatorul
acesteia.
• Pot exista simultan mai multe conexiuni deschise cu unul
sau mai multe servere. Conexiunile se închid cu
mysql close() sau automat la terminarea scriptului.
mysql_close()
• Exemplu:
$
$conexiune
i = mysql_connect("localhost");
l t("l lh t")
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Func
Funcțții MySQL - conectare
resource mysql_pconnect(string [hostname] [:port],
string
t i [username]
[ ] , string
t i [[password]
d] ]], iintt
[client_flags] );
• ÎÎntoarce un identificator de conexiune persistentă sau
false în caz de eșec.
• Se aseamănă cu mysql_connect() cu deosebirea că o
astfel de conexiune nu se închide la terminarea scriptului
și nici la execuția mysql_close().
mysql close()
• Conexiunile persistente rămân deschise urmând să fie
returnate ca rezultat când se încearcă deschiderea de noi
conexiuni cu aceeași parametri.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Functii MySQL
MySQL-- ce BD
2. Specificarea bazei de date:
bool mysql_select_db(string database_name, resource
[id_conexiune] );
• Specifică numele bazei de date care va fi exploatată prin
acea conexiune (serverul MySQL poate gestiona mai
multe baze de date).
• Întoarce true pentru succes și false pentru eșec.
• Toate cererile care vor fi trimise în viitor cu
mysql_query()
y q q y() se vor executa în baza de date
specificată.
• Exemplu:
p
mysql_select_db("test_studenti", $conexiune );
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Func
Funcțții MySQL - cereri
1. Execuția unei cereri SQL:
resource mysql_query(string cerere, resource [id_conexiune] );
• Efectul este trimiterea cererii către server pentru a fi procesată.
• Întoarce: true/resursa în caz de reușită, false în caz de eșec.
• În cazul în care cererea a fost un SELECT rezultatul întors este o
resursa = identificator
id tifi t d de rezultat.
lt t
• Spațiul ocupat de un rezultat poate fi eliberat ulterior cu
mysql free result()
mysql_free_result().
• Exemplu:
$rezultat = mysql
mysql_query(
query("select
select * from studenti"
studenti , $conexiune );
Func
Funcțții MySQL - cereri
• Observație: în afară de funcția mysql_connect
toate celelalte funcții mysql care utilizează un
descriptor de conexiune folosesc în cazul lipsei
acestui parametru ultima conexiune deschisă.
• Deci dacă într-o
într o pagină nu se folosește decât o
singură conexiune MySQL atunci nu este
necesară stocarea și folosirea ei explicită în
funcțiile utilizate.
• Iată
I tă un exemplu:
l
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Func
Funcțții MySQL - cereri
<?php
mysql_connect("localhost",
y "stud", "studpw")
p or die('Conexiune
esuata');
echo "Conectat<br>";
// nu folosim descriptor de conexiune:
mysql_select_db("stud") or die ('Selectie BD esuata');
echo " BD selectata<br>";
// si nici aici:
mysql_query("select * from produse") or
die('cerere esuata');
echo " Cerere OK<br>";
?>
Func
Funcțții MySQL - cereri
• Există și funcția mysql_db_query:
resource mysql_db_query(string
mysql db query(string database,
database string cerere,
cerere resource
[id_conexiune] );
• Folosirea acestei funcții
ț nu este recomandată de situl p
php
p ((deprecated).
p )
• Efectul ei este cel cumulat al mysql_select_db și mysql_query.
• Exemplu:
<?php
mysql_connect("localhost", "stud", "studpw") or die('Conexiune esuata');
echo
h "Conectat<br>";
"C t tb "
mysql_db_query("stud",
"select * from produse")
p
or die('Cerere esuata');
echo " Cerere OK<br>";
?>
Func
Funcțții MySQL - erori
• Detectarea erorii se face cu funcțiile:
ț
int mysql_errno(resource [id_conexiune] );
• Întoarce codul de eroare pentru operația
precedentă pe acea conexiune (implicit ultima
deschisă, ca mai înainte).
string mysql_error(resource [id_conexiune] );
• Întoarce textul mesajului de eroare pentru
operația precedentă pe acea conexiune.
Func
Funcțții MySQL - erori
• Aceste erori sunt returnate de serverul MySQL.
• Excepție face încercarea unei conexiuni cu un
host unde nu exista server MySQL
MySQL.
• În acest caz mesajul va fi ca mai jos:
Exemple
• Parola g
greșită
ș la conectare:
Exemple
• Eroare de sintaxa in cerere:
<?php
? h
mysql_connect("localhost", "stud", "studpw") or die('Conexiune
esuata');
)
echo "Conectat...";
mysql_select_db("stud") or die ('Selectie BD esuata:
'
'.mysql_error());
l ())
echo " BD selectata<br>";
mysql query("select
mysql_query( select * form produse
produse")) or die('Cerere
die( Cerere esuata:
'.mysql_error());
echo " Cerere OK<br>";
?>
Exemple
• Tabelă inexistentă:
• Coloană inexistentă:
Exemplu
<?php
mysql connect("localhost"
mysql_connect( localhost , "stud"
stud , "studpw")
studpw )
or die('Conexiune esuata');
echo "Conectat...";
// nu folosim
f l i descriptor
d i t d de conexiune i l select
la l t db
mysql_select_db("stud")
or die (('Selectie BD esuata: '.mysql_error());
y q ())
echo " BD selectata<br>";
// si nici la query
$rezultat = mysql_query(
mysql query("select
select * from produse produse"))
or die('Cerere esuata: '.mysql_error());
echo " Cerere OK<br>";
while($linie=mysql_fetch_object($rezultat))
{ echo $linie->codp;
echo $linie
$linie->nume,
nume, "<br>";
br ;
}
?>
18.03.2010 Programare Web– Curs 4 25
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Func
Funcțții MySQL – Informaț
Informații
int mysql_num_fields(resource rezultat);
• Întoarce numărul de câmpuri (coloane) dintr-un rezultat
de cerere SELECT.
int mysql_num_rows(resource rezultat);
• Întoarce numărul de linii dintr-un
dintr un rezultat de cerere
SELECT.
object mysql_fetch_field(resource
mysql fetch field(resource rezultat
rezultat, int
[offset_camp] );
• Întoarce un obiect conținând informații despre un câmp
(coloana) al rezultatului. Dacă offsetul de câmp nu este
specificat
p este considerat următorul câmp p al rezultatului
(se poate seta cu mysql_field_seek()). Pornește de la 0!
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Func
Funcțții MySQL – Informa
Informațții
• Proprietățile obiectului întors de mysql_fetch_field sunt:
• name - nume coloană
• table - numele tabelei din care provine acea coloană
• def – valoarea implicită a coloanei
• max_length - lungimea maximă pentru acea coloană
• not_null - 1 dacă acea coloană nu poate conține valori nule.
• primary_key - 1 dacă acea coloană este o cheie primară.
• unique_key - 1 dacă acea coloană este cheie unică
• lti l k - 1 d
multiple_key dacă
ă acea coloană
l ă este
t o cheie
h i neunică
i ă
• numeric - 1 pentru coloana numerică
• blob - 1 pentru coloana de tip BLOB
• type - tipul coloanei
• unsigned - 1 pentru coloane unsigned
• zerofill - 1 pentru coloane zero-filled
Programare Web– Curs 4 28
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Func
Funcțții MySQL – Informa
Informațții
string mysql_field_name(resource rezultat, int
numar_camp);
p);
• Întoarce numele câmpului cu numărul specificat dintr-un
rezultat (pornește de la 0!).
• Exemplu:
$
$numecamp = mysql_field_name($rezultat,
l fi ld ($ lt t $j)
$j);
string mysql_field_type(resource rezultat, int
offset_camp);
ff t )
• Este similar cu mysql_field_name() întorcând însă tipul
câmpului specificat (pornește de la 0!).
int mysql_field_len(resource rezultat, int offset_camp);
• Întoarce lungimea câmpului specificat (pornește de la 0!).
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
int mysql_insert_id(resource
mysql insert id(resource [id_conexiune]
[id conexiune] );
• Întoarce valoarea generată de ultimul INSERT executat
pentru o coloană definită cu AUTO
AUTO_INCREMENT.
INCREMENT
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Func
Funcțții MySQL
• Pe lângă
g funcțiile
ț p prezentate există și
ș altele
care se pot consulta în documentația PHP.
• U
Unelel di
dintre
t acestea t vor fi prezentate
t t în
î
finalul lecției, în contextul rezolvării
problemelor de securitate (cum este
mysql
my q _real_escape p _string)g)
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Func
Funcțții Oracle - conectare
resource oci_connect ( string user , string passw [, string bd
[ string
[, t i setcar
t [,
[ int
i t mod_sesiune
d i ]]] )
• Se realizează conectarea la serverul Oracle local cu
userul și parola specificate.
• Dacă lipsește numele instanței (bd) PHP îl ia din variabila
env. ORACLE_SID.
• Setul de caractere se poate indica începând cu versiunea
9.2 de Oracle.
• mod_sesiune poate fi OCI_DEFAULT, OCI_SYSOPER și
ș
OCI_SYSDBA. Ultimele două stabilesc o sesiune
privilegiată.
• Există și aliasul ocilogon(…) cu aceleași efecte.
Programare Web– Curs 4 33
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Func
Funcțții Oracle - conectare
resource oci_pconnect ( string user , string
passw [, string bd [, string setcar [, int
mod_sesiune]]] )
• Are aceiași parametri ca precedenta.
• F
Funcția
ți stabilește
t bil t o conexiune
i persistentă,
i t tă care
nu se închide la terminarea scriptului ci e
refolosită
f l ită dde scripturile
i t il următoare.
ăt
• În felul acesta se micșorează
ș overhead-ul de
sistem.
Func
Funcțții Oracle - conectare
resource oci_new_connect
_ _ ( string
g user ,
string passw [, string bd [, string setcar
[ int mod_sesiune]]]
[, mod sesiune]]] )
• Deschide o nouă conexiune, chiar daca
există deja una (celelalte 2 funcții nu fac
)
asta).
• Toate 3 returnează un descriptor de
conexiune
i ((echiv.
hi TRUE) sau FALSE înî
caz de eroare.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Func
Funcțții Oracle - Parse
• Al doilea pas dupa conectare este compilarea (parsingul)
cererii.
• Aceasta se face cu funcția:
resource oci_parse
oci parse ( resource conexiune , string cerere )
• Returnează un descriptor de cerere (statement handle)
necesar execuției efective
efective.
• Exemplu:
$c = oci_connect("scott","tiger");
$cerere = "select * from STUD where
cods=".$_REQUEST['cods'];
echo "<h2>Cererea este: $cerere</h2>";
$
$stmt = oci_parse($c, $cerere);
Programare Web– Curs 4 36
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Func
Funcțții Oracle – Execu
Execuțție
• Execuția efectivă a cererii se face cu:
bool oci_execute ( resource $stmt [, int mod])
• P
Parametrii
t ii sunt:
t un d
descriptor
i t d de cerere returnat
t t
de oci_parse și opțional modul de tratare al
t
tranzacțiilor.
țiil
• Modul p
poate fi:
OCI_COMMIT_ON_SUCCESS (opțiunea
implicită) și OCI
OCI_DEFAULT.
DEFAULT
Func
Funcțții Oracle – Execu
Execuțție
OCI_DEFAULT:
_
• În al doilea caz, execuția unei cereri DML
d
duce lla d
demararea uneii ttranzacții.
ții
• Această tranzacție va fi revocată automat
la terminarea scriptului sau la închiderea
conexiunii.
conexiunii
• Pentru a controla această tranzacție
ț se
poate folosi oci_commit și oci_rollback.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Func
Funcțții Oracle – Execu
Execuțție
bool oci_commit
_ ( resource conexiune);
)
bool oci_rollback ( resource conexiune);
• Efectul lor este de a comite, respectiv
revoca tranzacția în curs pe acea
conexiune.
• Această tranzacție poate fi formată din
ț uneia sau mai multor cereri DML.
execuția
• Returnează TRUE / FALSE în caz de
succes/eșec.
/
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Func
Funcțții Oracle - Rezultat
• Pentru a afla dimensiunea rezultatului se pot folosi:
int oci_num_rows ( resource $stmt )
• Întoarce numărul de linii afectate de execuția cererii (câte
linii returnează un select dar și câte linii șterge un delete
de exemplu)
int oci_num_fields ( resource $stmt )
• Returnează numărul de coloane ale rezultatului execuției
unei cereri SELECT.
string oci_field_name
oci field name ( resource stmt , int coloana )
• Returnează numele coloanei cu numărul specificat (prima
coloană are indicele 1)
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu
........
$ t t = oci_parse($c,
$stmt i ($ $$cerere);)
// executie
oci execute($stmt OCI DEFAULT);
oci_execute($stmt,OCI_DEFAULT);
// rezultatul va fi prezentat ca tabela
echo "<table border = 1>";
// luam in nc nr. de coloane in rezultat
$nc = oci_num_fields($stmt);
// afisam
fi antet
t t tabel
t b l
echo "<tr>";
for($i 1;$i $nc;$i )
for($i=1;$i<=$nc;$i++)
echo "<td>".oci_field_name($stmt, $i)."</td>";
echo "</tr>";
........
Programare Web– Curs 4 41
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu
<?php
$connection = oci
oci_connect(
connect("stud"
stud , "studpw");
studpw );
$cerere = "SELECT nume, pret, coloana_lob FROM produse";
Alt exemplu
• Continuarea exemplelor anterioare:
while ($linie=oci_fetch_row($stmt)) {
// incepe linie date
echo "<tr>";
<tr> ;
for($i=0;$i<$nc;$i++) {
// daca e valoare nula o inlocuim cu sirul NULL
if (!isset($linie[$i]))
$linie[$i] = "NULL";
// afisam efectiv o celula
echo "<td>".$linie[$i]."</td>";
}
// gata linie date
echo "</tr>";
}
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
PL/SQL
• Prezentăm în continuare un exemplu de execuție
a unui bloc PL/SQL în PHP.
• Se folosește funcția oci_bind_by_name
oci bind by name pentru
punerea în corespondență a variabilelor externe
PL/SQL cu variabile PHP
PHP.
• Sintaxa funcției este (vezi și documentația):
bool oci_bind_by_name ( resource stmt , string
nume_oracle , mixed &var_PHP [[, int
lung_maxima = -1 [, int tip = SQLT_CHR ]] )
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Fetch all
int oci_fetch_all ( resource stmt , array &output [, int skip= 0 [, int maxlinii
= -1 [, int $flags= 0 ]]] )
• Încarcă toate liniile unui rezultat SELECT (sau un număr specificat de linii)
într-un array.
• Î t
Întoarce numărul
ă ld de liliniiii îîncărcate.
ă t
• Exemplu:
$conn = oci_connect(.
oci connect( . . );
$stmt = oci_parse($conn, "select * from emp");
oci execute($stmt);
oci_execute($stmt);
$nrows = oci_fetch_all($stmt, $results);
if ($
($nrows > 0)) {
foreach ($results as $key => $val) {
echo "$key, $val\n";
}
Programare Web– Curs 4 47
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
PL/SQL
$c = oci_connect("stud","studpw");
// variabile: $cati (PHP) si :cati (externa Oracle)
$cerere = "begin
select count(*) into :cati from STUD
where cods=
cods=".$_REQUEST[
$ REQUEST['cods']cods ].";; ".
"exception
when others then
:cati := 0;
end;"; // atentie: ; de dupa end!
$stmt = oci_parse($c,
oci parse($c, $cerere);
// bind by name:
oci_bind_by_name($stmt, ":cati", $cati, 32);
// executie
ti
oci_execute($stmt,OCI_DEFAULT);
// rezultatul va fi in variabila PHP $cati
echo "Numar de studenti: ".$cati;
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Alt exemplu
$c = oci_connect("scott","tiger");
$cerere = "begin
begin
select cods, nume into :cods, :nume from STUD
where matr=".$_REQUEST['matr']."; ".
"exception
when others then
:cods ::= 0;
:nume := 'nu avem astfel de student';
end;"; // nu trebuie uitat ; dupa end
$
$stmt = oci_parse($c,
i ($ $
$cerere); )
// bind by name: se asociaza 2 variabile externe cu var. PHP
oci_bind_by_name($stmt,
y ($ ":cods", $
$cods, 32);
)
oci_bind_by_name($stmt, ":nume", $nume, 32);
// executie
oci execute($stmt OCI DEFAULT);
oci_execute($stmt,OCI_DEFAULT);
echo $cods, " ", $nume;
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Func
Funcțții Oracle - Erori
• Descrierea erorilor se poate obține cu:
array oci_error ([ resource $sursa ] )
• Pentru
P t erorile
il dde conexiune
i nu se iindică
di ă sursa
• Pentru celelalte se p
pune descriptorul
p cel mai
apropiat
• Array-ul conține elementele:
– code (codul de eroare)
– message (mesajul)
( j l)
– offset (pozitia erorii)
– sqltext
l (t t l cereriiii eronate)
(textul t )
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu
if (!($r = oci_execute($stmt))) {
// se intra aici in caz de eroare
$e = oci_error($stmt);
oci error($stmt);
echo htmlentities($e['message']);
echo
h "<pre>";
" "
echo htmlentities($e['sqltext']);
printf("\n%".($e['offset']+1)."s", “ ^"); // o
sageata
g la pozitia
p erorii
echo "</pre>";
}
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Func
Funcțții Oracle - Final
• Închiderea conexiunii se face cu:
bool oci_close ( resource conexiune )
• Pe lângă funcțiile prezentate mai există și
altele (vezi documentația)
Elemente de securitate
• În continuare p
prezentăm doar câteva
elemente de securitate pentru aplicații
scrise în PHP și care accesează o bază de
date.
• Una dintre problemele principale este
p care în mod obișnuit
aceea că unui script ș
este asociat unui formular i se pot transmite
parametri - inclusiv în bara de adresă
(metoda GET) – care nevalidați pot duce la
i j ți SQL
injecție SQL.
Programare Web– Curs 4 53
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Injec
Injecțția SQL
• Injecția
j ț SQL înseamnă execuția ț unei cereri
nedorite inserată într-un șir de caractere
executat de serverul de baze de date
date.
• Ea apare ca urmare a nevalidării datelor de
intrare și a ignorării unor măsuri minime de
securitate.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Comentarii
• Semnul de comentarii poate afecta cererea SQL
executată
t tă cu un parametru
t primit.
i it
• Exemplu: fie o cerere de tipul
SELECT * FROM members WHERE username = 'param1'
AND password = 'param2'
• Dacă pentru param1 se introduce valoarea: admin'--
cererea executată va fi:
SELECT * FROM members WHERE username = 'admin' --
AND p
password = 'param2'
p
• Se observă că partea de verificare parolă din cerere este
acum comentată - deci nu se mai verifică șși p
parola ci doar
username.
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Comentarii
• Variante (SqlServer, MySQL, Oracle):
– admin' –
– admin
admin' #
– admin'/*
– ' or 1=1—
– ' or 1=1#
– ' or 1=1/*
– ')) or '1'='1—
1 = 1—
– ') or ('1'='1--
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Date fă
fără '
• O recomandare general acceptată este aceea de
a pune între apostrofe toate elementele primite
ca intrare de la user.
• Iată un exemplu (bine și mai puțin bine)
$query = "SELECT * FROM ttabela
$ b l where
h
col = '" . $_REQUEST['ceva'] . "'";
$query = "SELECT * FROM tabela where
col = " . $_REQUEST[
$ REQUEST['ceva']
ceva ] ;
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Date fă
fără '
• Ce se poate întâmpla în al doilea caz:
• Input: 1 or (1=1). Cererea devine:
$query = "SELECT
SELECT * FROM tabela where col = 1
or (1=1)"
• Vor fi întoarse deci toate liniile tabelei și nu doar
câteva.
• Input: 1 and (1=0); drop table tabela;
• Cererea de
devine:
ine
$query
q y = "SELECT * FROM tabela where col = 1
and (1=0); drop table tabela; "
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Cereri multiple
• În acest caz ș
șirul de executat conține
ț două
cereri SQL, dintre care a 2-a este
distructivă.
distructivă
• Există sisteme de gestiune care execută
astfel de succesiuni de cereri primite din
PHP (p(postgresql,
g q , mssql)
q)
• Soluția este fie folosirea apostrofelor, fie
f l i
folosirea mecanismului
i l id
de marcare a unor
caractere speciale (inclusiv apostrof).
Escape string
• Dacă parametrul PHP (din PHP.ini)
magic_quotes_gpc este trecut pe On, toate
aceste caractere speciale sunt prefixate cu
backslash.
• După înlăturarea acestuia
acestuia, se poate folosi
mecanismul propriu de escape al SGBD-ului
respectiv.
respectiv
• Iată un exemplu:
Exemplu
<?php
if (get_magic_quotes_gpc()) {
$nume = stripslashes($nume);
$descriere = stripslashes($descriere);
// Cererea:
query = sprintf(
"SELECT * FROM users WHERE user='%s'
AND password='%s'",
mysql_real_escape_string($nume),
mysql_real_escape_string($descriere));
.....
?>
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Exemplu
• Funcția mysql_real_escape_string va prefixa cu
\ caracterele speciale din MySQL: \x00, \n, \r, \, ',
" si \x1a.
• Analog, prin folosirea primei sintaxe (cu '), cele
două cereri anterioare devin:
$query = "SELECT * FROM tabela where col = '1
or (1=1)'"
(1 1)'"
$query
q y = "SELECT * FROM tabela where col = '1
and (1=0); drop table tabela;' "