Documente Academic
Documente Profesional
Documente Cultură
Cursul 1
Informatii:
Structura cursului:
2 ore curs titular curs: Giorgian Neculoiu
2 ore laborator titulari aplicaii practice: Oana-Ramona Flangea si
Mihaela Puianu
Forme de examinare:
Examen final 60%
Evaluare pe parcursul semestrului a activitii de laborator 40%
Proiect final 30%
Punctaj teste practice 10%
Informatii:
Bibliografia necesara cursului:
Mihaela Brut, Sabin Buraga, Prezentri multimedia pe Web, Polirom,
Iasi, 2003;
Sabin Buraga, Aplicaii Web la cheie. Studii de caz
implementate n PHP, Polirom, 2003;
Sabin Buraga, Proiectarea siturilor Web ediia a doua,
Polirom, Iasi, 2005;
Traian Anghel, Programare Web, Editura Polirom, Iasi, 2007;
Luke Welling, Laura Thomson, Dezvoltarea aplicatiilor Web cu
PHP si MySQL, Editura Teora, Bucuresti, 2005;
Larry Ullman, PHP si MySQL pentru site-uri dinamice, Editura
Teora, Bucuresti, 2006.
Informatii:
Referinte electronice:
***, http://www.bayes.co.uk/xml/index.xml?/xml/main.xml
***, http://www.rophp.net/
***, http://www.microsoft.com
***, http://www.sun.com
***, http://www.w3schools.com
***, http://www.w3.org
Planul lectiei:
Introducere in WEB (internet, www, uri, url, urn, )
Siteuri si aplicatii WEB (siteuri, aplicatii, browser, server, )
Generarea dinamica a continutului Web
Limbaje si platforme de programare pentru server
Serverul de baze de date
Sistemul de gestiune a bazelor de date relationale MySQL
Instrumente pentru dezvoltarea aplicatiilor
editoare de text
sisteme de management al continutului
cadre de lucru
medii de dezvoltare integrate
Introducere in Web
Termenul Internet provine din impreunarea artificiala si partiala a doua cuvinte englezesti:
interconnected = interconectat si network = retea.
Termenul Internet nu trebuie confundat cu serviciul internetic World Wide Web (www).
Acesta este doar unul din multele servicii oferite pe Internet.
Serviciul World Wide Web - sistem de distributie locala sau globala a informatiilor
hypermedia.
Introducere in Web
World Wide Web, prescurtat WWW, deseori numit numai "web", este la loc
de varf, deoarece este o aplicatie multimedia integrativa, cu o interfata de utilizator
(Graphic User Interface, GUI) foarte atragatoare din punct de vedere grafic, practica si
simplu de folosit. WWW a fost inventat de ctre Tim Berners-Lee n anul 1993.
Un site web poate fi disponibil si in cadrul unui intranet, adica intr-o retea
privata a unei organizatii, care utilizeaza tehnologiile Internet.
De asemenea, un site Web poate fi disponibil si intr-un extranet, acesta
reprezentand o retea privat folosita in scopul partajarii informatiilor sau operatiunilor
unei organizatii cu parteneri de afaceri.
Situri si aplicatii Web
Aplicaie Web = o colectie interconectata de pagini Web avand un continut
generat dinamic (determinat partial de optiunile utilizatorului), creat cu scopul de a
oferi o functionalitate specifica:
magazin virtual;
motor de cautare;
client de e-mail;
client pentru accesarea bazelor de date;
Primul sit Web a fost realizat la CERN si plasat online in data de 6 august
1991.
Situri si aplicatii Web
O aplicatie Web rezidenta pe un server, fiind accesata prin intermediul unei
retele (Internet sau intranet) de catre utilizatori, care folosesc un client Web
(browser), functioneaza in mod obisnuit pe trei niveluri:
1. Nivelul I - browserul Web;
2. Nivelul II (sau nivelul intermediar) tehnologia utilizata pentru generarea dinamica a
continutului (server de aplicatii);
3. Nivelul III surse de date, reprezentate de baze de date (BD) si/sau fisiere XML.
Este de remarcat ca livrarea continutului static este mai rapida decat cea a
continutului dinamic, mai ales in situatia in care in cazul ultimului tip datele sunt
extrase din baze de date.
Situri si aplicatii Web
Principalele caracteristici ale server-elor Web:
Astazi, cel mai des utilizate sunt limbajele/platformele de programare pentru server
denumite servere de aplicatii, functionand de obicei ca extensii ale serverului Web. In raport cu
CGI, serverele de aplicatii prezinta o serie de dezavantaje dintre care le mentionam pe
urmatoarele:
suportul pentru sesiuni
utilizarea unor conexiuni persistente cu bazele de date
asigurarea load-balancing-ului
cresterea securitatii aplicatiilor create
Limbaje si platforme de programare pentru server
Cele mai utilizate limbaje/platforme de programare pentru server sunt:
1. PHP (initial, acronimul pentru Personal Home Page, ulterior pentru PHP:
Hypertext Preprocessor) este un limbaj (combinatie de C, Perl si Java) ale carui baze au fost
puse de Rasmus Lerdorf in 1994. PHP este utilizat de cele mai multe ori impreuna cu
serverul Web Apache;
2. Perl (Practical Extraction and Report Language) este un limbaj de programare
creat de Larry Wall, care se bazeaza pe C, precum si pe cateva utilitare UNIX. Perl este cea mai
populara alternativa la PHP. Are avantajul de a fi foarte flexibil, in plus existand numeroase
module/scripturi (biblioteci) scrise pentru/in Perl (e.g., CPAN Comprehensive Perl Archive
Nertwork, http://www.cpan.org/);
3. JSP (Java Script Pages) este o platforma de programare Web creata la inceputul
anului 1998 de Sun Microsystems, Inc., care face parte din specificatia J2EE (Java 2 Enterprise
Edition). Platforma JSP utilizeaza sintaxa XML si o serie de clase si functii Java;
4. ASP (Active Server Pages) este o platforma de programare Web creata de
Microsoft, permitrand utilizarea unor scripturi scrise in limbajele VBScript (Microsoft Visual
Basic Script), JScript si PerlScript, fiind utilizata curent cu serverul Web Microsoft IIS;
5. ColdFusion este un cadru de lucru utilizat pentru dezvoltarea software-ului, in
general, si a site-urilor dinamice, in particular. Cea mai importanta caracteristica a ColdFusion
consta in utilizarea limbajului de scripting: CFML (ColdFusion Markup Language).
Pentru organizarea bazelor de date sunt utilizate o serie de modele conceptuale (sau
structurale), cele mai cunoscute fiind cele numite:
retea
ierarhic
relational
obiectual
si modele hibride (obiectual-relational)
Sistemele comerciale - dintre care amintim Oracle, SQL SERVER (Microsoft), DB2
(IBM), sunt scumpe, motiv pentru care sunt practic inaccesibile unor companii/organizatii mici,
institutii de invatamant sau persoane particulare.
MySQL, dezvoltat de MySQL AB, este cel mai popular sistem de gestiune a bazelor de
date relationale open source utilizat in Internet, avand versiuni pentru majoritatea platfomelor.
Clientul Mysql lucreaza in modul text, fara interfata grafica. Daca se doreste utilizarea
unor clienti cu interfata grafica, ei trebuie procurati separat. Dintre acestia amintim SQL-Front.
Distributii MySQL
Dintre solutiile CMS open source pentru comertul electronic, bazate pe PHP si MySQL, mai
amintim:
Zend Cart (http://zen-cart.com/)
phpShop (http://www.phpshop.org/)
OpenCart (http://www.opencart.com/)
Instrumente pentru dezvoltarea aplicatiilor
Cadre de lucru. Modelul MVC
Diversele parti ale unui cadru de lucru pot fi expuse (si accesate) prin intermediul unor
API-uri (Application Programming Interface).
Dintre numeroasele cadre de lucru open source avand PHP ca limbaj de scripting, se remarca
urmatoarele:
Smarty este unul dintre primele cadre de lucru (din punct de vedere cronologic) care au implementat
modelul MVC, fiind preferat de un numar mare de programatori (http://smarty.php.net/)
Symfony este un cadru de lucru pentru proiectele PHP 5. Invatarea acestuia este relativ simpla
pentru programatorii PHP care cunosc sabloanele de proiectare ale aplicatiilor Web
(http://www.symfony-project.org/)
Zend Framework este un cadru de lucru pentru PHP 5, dezvoltata de firma Zend Software din
Israel. Acesta a fost proiectat cu scopul de a elimina detaliile plictisitoare legate de scrierea efectiva a
codului, lasand programatorul sa-si concentreze atentia asupra intregului proiect pe care il dezvolta
(http://framework.zend.com/)
Instrumente pentru dezvoltarea aplicatiilor
Medii integrate de dezvoltare
Cursul 2
Planul lectiei:
Notiuni introductive despre Tehnologiile Web
Limbajul HTML
Structura unui document HTML
Antetul documentului
Corpul documentului atributele tagului <body>
Comentarii in HTML
Formatarea textului si a paragrafelor
Utilizarea paragrafelor titlu
Formatarea la nivel de caracter
Inserarea imaginilor in HTML atribute folosite
Inserarea legaturilor in documentele HTML
Elementul A
Elementul LINK
Elementul BASE
Notiuni introductive despre Tehnologiile Web
Tehnologiile utilizate n aplicaiile Web reprezint n general, acele limbaje de
programare utilizate la crearea de site-uri web complexe, interactive, al cror concept
presupune stpnirea ct mai detaliat a unor limbaje de scripting sau de programare i
baze de date.
In categoria tehnologii Web se pot include:
o multitudine de limbaje de programare, cum ar fi PHP, JavaScript, ASP, etc.
ca baze de date pot fi utilizate MySQL, MsSQL, Access, ORACLE, etc.
Acum cativa ani, tehnologiile Web erau folosite doar de marile companii
datorita costurilor ridicate ale licentelor programelor de dezvoltare.
html - aparut la inceputul anilor '90, datorita lipsei unui limbaj universal care sa permita
publicarea informatiei la nivel global, html a determinat dezvoltarea spectaculoasa a
Internetului.
css - cascading style sheet - foi de stil in cascada. Un fiier CSS este un fisier text cu
extensia ".css, definind stiluri pentru paginile html. Fiierele CSS permit stilizarea in bloc a
documentelor html cu un efort semnificativ mai mic decat in cazul stilizarii elementelor de
pagina in cadrul fiecarui document html in parte, prin intermediul atributelor tagurilor.
mysql - este un sistem de gestiune a bazelor de date relaionale, fiind o componenta cheie
a limbajului PHP.
Notiuni introductive despre Tehnologiile Web
Tehnologii folosite mai des n programarea aplicaiilor web dinamice:
cgi - Common Gateway Interface --- sunt script-uri scrise in orice limbaj de programare
indiferent daca sunt compilate sau interpretate, script-uri care sunt executate pe server.
isapi Internet Server API --- reprezinta alternativa celor de la Microsoft la CGI (Common
Gateway Interface), rulabila bineinteles pe platforme Windows.
php si asp aparute n 1994, respectiv 1996, sunt doua limbaje puternice care au adus o
schimbare in design-ul aplicatiilor web. Acestea, desi sunt diferite, au totusi o serie de
similaritati: ambele sunt interpretate, ambele genereaza scripturi (.php respectiv .asp),
care pot fi combinate cu html, date de tip text, etc. Limbajele ofera suport si pentru lucrul
cu baze de date (MySQL, MsSQL, PostgreSQL, Oracle) - de fapt sunt intens folosite in acest
sens. Limbajul ASP nu este un concept nou, ci se bazeaza pe limbajele VBScript si JScript.
Principalul dezavantaj al acestor doua limbaje este viteza. Acestea sunt lente deoarece
fiecare accesare presupune procesarea si interpretarea lor si nu pot construi controale
reutilizabile.
jsp Java Server Pages --- reprezinta o tehnologie de design al aplicatiilor web ce permite
crearea acestor aplicatii independente de platforma.
asp.net - este o noua tehnologie pentru aplicatii web elaborata de Microsoft, dar despre
care nu se poate spune daca este o urmare a ASP-ului, cu toate ca pstreaza
compatibilitatea cu acesta.
Limbajul HTML
HTML este prescurtarea de la HyperText Markup Language, limbajul utilizat
n World Wide Web pentru descrierea hipertextelor; nu este un limbaj de programare
propriu-zis, ci doar un limbaj de descriere, continand elemente ce permit construirea
paginilor Web.
Documentele HTML sunt exclusiv de tip text (ASCII); prin urmare ele pot fi
editate direct, prin comenzi specifice sistemului de operare folosit. De exemplu, pentru
crearea unui document HTML n Windows XP se pot utiliza unul din editoarele de texte
incluse n sistemul de operare (Notepad, Wordpad) sau orice alt editor de texte.
Corpul documentului, delimitat de etichetele <body> si </body> sau (in cazul in care
este descrisa structura cadrelor din document) de etichetele pereche <frameset> si
</frameset>, care contine textul propriu-zis al documentului, precum si elementele
specifice de descriere a formatului acestuia.
BGCOLOR=culoare
BGCOLOR (BackGround COLOR) stabileste culoarea fundalului (culoarea zonei din fereastra
browser-ului in care este vizualizat documentul). In html culorile se pot specifica in doua moduri:
utilizand denumiri predefinite asociate unor culori (de exemplu RED semnificand rou, GREEN verde,
BLUE albastru etc.) sau "construind" culori proprii prin combinarea a trei culori de baza - rosu, verde si
albastru (modelul RGB). In acest caz, specificarea unei culori se face indicand in ordinea rosu, verde,
albastru trei valori hexazecimale cuprinse intre 00 i FF, cate una pentru fiecare culoare de baza, astfel:
#rrggbb.
TEXT = culoare
Atributul TEXT stabileste culoarea textului.
LINK = culoare
Atributul LINK stabileste culoarea cu care vor fi marcate in text link-urile nevizitate.
VLINK = culoare
Atributul VLINK stabileste culoarea cu care vor fi marcate in text link-urile vizitate.
ALINK = culoare
Atributul ALINK stabileste culoarea cu care va fi marcat in text link-ul activ (cel asupra caruia este plasat
cursorul mouse-ului).
Formatarea textului
Formatarea textului care apare in corpul unui document html se poate face
la:
nivel de bloc (block-level)
sau la nivel de caracter (text-level sau inline)
Pentru gruparea mai multor elemente dintr-un bloc la nivel de caracter (inline)
se utilizeaza perechea de etichete <span> i </span>.
Gruparea mai multor elemente prin <div> sau <span> va fi deosebit de utila
daca veti apela la facilitile oferite de stilurile de formatare text (stilurile CSS),
deoarece veti putea aplica acelasi stil simultan tuturor elementelor din grup.
Formatarea paragrafelor
In tehnoredactare, prin paragraf se inelege o zona de text cuprinsa intre doua
caractere de trecere la linie noua (denumite NewLine sau Enter).
In html, delimitarea paragrafelor se realizeaza cu ajutorul etichetei <p>,
eticheta de sfarsit </p> fiind opionala.
Cel mai utilizat atribut admis de eticheta <p> este align, care stabileste
modul de aliniere stanga - dreapta a textului paragrafului.
align = LEFT | CENTER | RIGHT | JUSTIFY
Se observa ca atributul align admite patru valori predefinite :
LEFT - textul este aliniat la marginea din stanga
RIGHT - textul este aliniat la marginea din dreapta
CENTER - textul este centrat (plasat la egala distanta de marginea din stanga si cea din
dreapta)
JUSTIFY - textul este aliniat si la stanga si la dreapta (prin marirea spaiului intre cuvinte)
Nivelul delimitat de etichetele <h1> i </h1> este cel mai important, iar
nivelul delimitat de etichetele <h6> i </h6> cel mai putin important.
Toate aceste atribute apartin etichetei font, care permite inserarea de blocuri
de texte personalizate.
Atributele sunt:
SRC identifica fisierul care contine imaginea respectiva (de tip .jpg, .gif etc.).
Fisierul care conine imaginea se va gasi intr-un folder oarecare (in exemplul urmator el se
gsseste in acelasi folder in care gasim si fisierul cu extensia .html (cel care contine pagina).
Din acest motiv, sursa nu conine si calea, dar, daca este cazul, calea poate fi continuta.
ALIGN - tipul de aliniere - retine una din valorile de mai jos si specifica browser-ului
modul in care va alinia imaginea in raport cu textul: Right, Left, Top, Middle, Bottom
Elementul A
Pentru a insera un link intr-un document HTML se utilizeaza elementul A
(anchor - ancora). Textul cuprins intre eticheta de inceput <A> si cea de sfarsit
</A> va aparea evidentiat in fereastra browser-ului subliniat, colorat in functie de
valorile atributelor LINK, VLINK, ALINK sau in functie de modul de configurare a
browser-ului.
Inserarea legaturilor in documente HTML
Atributele specifice elementului A sunt:
href = URL specifica adresa resursei la care se face legatura.
name = sir-de-caractere asociaza un nume ancorei curente, astfel
incat sa poata constitui tinta unui alt link. Numele trebuie sa fie unic in
cadrul documentului.
title = sir-de-caractere asociaz un nume resursei la care se face
legatura. Browser-ul va putea afisa titlul resursei cand utilizatorul
deplaseaza mouse-ul deasupra legaturii.
<A NAME="nceput"></A>
....
<A HREF="#Inceput">Ia-o de la nceput!</A>
In exemplul de mai sus am definit o ancora vid, pe care am denumit-o inceput. La
sfarsitul documentului am inserat o legatura catre ancora inceput, care permite utilizatorul sa revina
in pozitia acestei ancore. Observati ca in acest ultim caz, pentru specificarea adresei am utilizat
caracterul #, urmat de numele ancorei.
<A NAME="nceput"></A>
....
<A HREF="#Inceput">Ia-o de la nceput!</A>
In exemplul de mai sus am definit o ancora vid, pe care am denumit-o inceput. La
sfarsitul documentului am inserat o legatura catre ancora inceput, care permite utilizatorul sa revina
in pozitia acestei ancore. Observati ca in acest ultim caz, pentru specificarea adresei am utilizat
caracterul #, urmat de numele ancorei.
Elementul BASE
Specificarea adreselor resurselor Web la care se creeaza legaturi in documente
HTML se poate face atat n mod absolut, cat si in mod relativ. In cazul specificarii
relative a adreselor, se considera implicit ca adresa de baza este locatia curenta. Prin
intermediul elementului BASE exista posibilitatea de a specifica explicit adresa de baza
a URL-urilor specificate in mod relativ.
<BASE HREF="http://www.utcb.ro/ing">
Daca apare, elementul BASE trebuie plasat in antetul documentului HTML.
Intrebari
???
Tehnologii WEB
Cursul 3
Planul lectiei:
Liste in HTML
Liste ordonate
Liste neordonate
Liste de tip definitie
Tabele in HTML
Atributele elementului TABLE
Atributele elementului TR
Atributele elementului TD
Elementele TH si CAPTION
Cadre in HTML
Exemple
Liste in HTML
In HTML exista posibilitatea ca anumite enunturi sa fie numerotate sau
marcate intr-un anumit fel. O astfel de organizare poarta numele de lista.
In HTML se pot descrie trei tipuri de liste:
liste ordonate, in care elementele sunt numerotate
liste neordonate, in care elementele sunt marcate de asa natura incat nu
se sugereaza o anumita ordine a lor
liste de tip definitie
Exemplu:
Liste neordonate
Elementul UL (Unordered Lists) descrie o lista neordonata. Elementele
listei sunt cuprinse intre tag-urile <UL> si </UL>.
Elementul UL are atributul type .Valorile pe care le poate lua acest atribut,
sunt:
<UL type = cyrcle>
<UL type = disc>
<UL type = square>
Exemplu:
Liste neordonate
Se pot construi si liste imbricate, dupa cum urmeaza din exemplul urmator:
Exemplu:
Efect:
Liste de tip definitie
Elementul DL (Definition Lists) are rolul de a descrie o lista de definitii. El
foloseste tag-urile <DL> si </DL>.
Elementul DT (Definition Term) defineste termenul din lista care trebuie
descris. El utilizeaza tag-ul <DT>.
Elementul DD (Definition Description) are rolul de a retine descrierea
termenului. El utilizeaza tag-ul <DD>.
Exemplu:
Efect:
Tabele in HTML
Paginile pot contine tabele. Elementul TABLE descrie un tabel. Tabelul
utilizeaza tag-urile <TABLE> si </TABLE>.
Elementul TR(table row) descrie o linie a tabelului. O linie a tabelului incepe
cu <TR> si se termin atunci cand este intalnit un nou <TR>. Optional, se poate folosi
</TR>.
Elemenul TD(table data) descrie o celula a tabelului. Se utilizeaza tag-urile
<TD> si, optional, </TD>.
Exemplu:
Efect:
Atributele elementului TABLE
Exemplu:
Efect:
Atributele elementului TD
width, height - latimea si inaltimea celulei (in procente din latimea, respectiv
inalimea tabelului.), in plus, au efecte si pentru celelalte celule, pentru ca tabelul sa fie
aliniat.
Exemplu:
Efect:
Elementele TH si CAPTION
Elementul TH
In loc de <TD> </TD> se poate folosi <TH> </TH>. Parametrii sunt aceiasi,
doar ca textele, implicit, sunt tiparite bold.
Elementul CAPTION are rolul de a permite scrierea titlului unui tabel. Titlul
se scrie intre cele doua tag-uri <CAPTION> ai </CAPTION>. Cele doua tag-uri
trebuie sa se gaseasca imediat dup <TABLE>.
Elementul CAPTION are atributul align.
Elementul THEAD are rolul de a marca liniile din antet. Se foloseste tag-ul
<THEAD> si, optional </THEAD>.
Elementul TBODY are rolul de a marca liniile din corpul tabelului. Se
foloseste tag-ul <TBODY> si, optional </TBODY>.
Elementul TFOOT are rolul de a marca liniile de sfarsitul tabelului. Se
foloseste tag-ul <TFOOT> si, optional </TFOOT>.
In continuare, prezentam cateva atribute pe care le intalnim la oricare din
aceste trei elemente:
align - aliniere orizontala (poate lua valorile pe care le-am intalnit deja).
valign - aliniere verticala (se pot grupa si coloanele unui tabel, nu numai
liniile).
Elementul COLGROUP permite gruparea coloanelor unui tabel. Se utilizeaza
tag-urile <COLGROUP atribute> si, optional </COLGROUP>.
Gruparea liniilor i a coloanelor unui tabel
Privii tabelul urmator. El are trei coloane. Alinierea continutului coloanelor si
spatiul ocupat de ele a fost determinat cu ajutorul a doua elemente COLGROUP.
Primul element stabileste caracteristicile de afisare ale primei coloane, al doilea
stabileste caracteristicile de afisare a urmatoarelor doua coloane.
Observati, mai jos, cum s-a obtinut acest tabel.
Exemplu:
Efect:
Cadre in HTML
Observatii:
Nu se recomanda ca toate valorile sa fie absolute, deoarece browserele pot utiliza
rezolutii diferite, ceea ce poate duce la distorsiuni ale afisarii;
In cazul utilizrii procentelor, suma acestora nu poate sa depaseasca 100%, in caz
contrar, browserul va trunchia toate valorile pana ce suma va fi 100.
cols permite impartirea cadrului curent in sectoare verticale. Parametrii acceptati respecta
aceleasi reguli ca si in cazul atributului rows, numai ca se refera la lungimea cadrului.
Cadre in HTML
Organizarea documentului in cadre Tagul <frameset>
bordercolor permite setarea culorii chenarelor cadrelor. Culoarea poate fi specificata fie
printr-un triplet hexa de forma #rrggbb, fie printr-un nume predefinit de culoare.
Observatie:
Ascunderea unui chenar, prin utilizarea perechii frameborder=no sau border=0, face
ca acesta sa nu mai fie vizibil pentru utilizator. Totusi, in Internet Explorer, utilizatorul poate opta
pentru redimensionarea cadrului, prin operatia Drag and Drop asupra marginii invizibile. Pentru
a inhiba aceasta posibilitate, ascunderea chenarului trebuie insotita de secventa:
framespacing=0.
Cadre in HTML
Definirea cadrelor - Tagul <frame>
Tagul <frame> permite definirea unui cadru in interiorul unui set de cadre.
El are sens numai atunci cand apare in interiorul perechii <frameset> </frameset>.
Atribute acceptate:
src specifica adresa URL a documentului ce va fi incarcat in cadrul respectiv;
name specifica numele cadrului, nume ce va fi utilizat pentru referirea cadrului respectiv
atunci cand se va incarca in el un alt document HTML, prin intermediul unei hiperlegaturi
aflate in alt cadru. Numele este o combinatie de caractere alfanumerice;
Tagul <frame> permite definirea unui cadru in interiorul unui set de cadre.
El are sens numai atunci cand apare in interiorul perechii <frameset> </frameset>.
Atribute acceptate:
border permite setarea grosimii chenarului cadrului curent. Valoarea atributului border
aflat in interiorul tagului frame este prioritara fata de valoarea aceluiasi atribut aflat in tagul
frameset.
Atribute acceptate:
A. preluate de la tagul <frame>:
src, name, scrolling, border, bordercolor, frameborder, framespacing, noresize,
marginwidth, marginheight
<!--antet.html--> <!--adresa.html-->
<html> <html>
<head> <head>
</head> </head>
<body> <body>
<center> <p align="center"><b>Lacul Tei, nr. 122-124, Telefon:
<h3>UTCB</h3> 021.111.111.</b></p>
<h3>Facultatea de Hidrotehnica</h3> </body>
<h3>Automatica si Informatica Aplicata</h3> </html>
</center>
</body>
</html>
EXEMPLE: Imbricarea cadrelor
<!--index.html-->
<html>
<head>
<title>UTCB</title>
</head>
<frameset rows="120,*,20%">
<frame src="antet.html">
<frameset cols="100,*">
<frame src="meniu.html">
<frame src="desprenoi.html">
</frameset>
<frame src="adresa.html">
</frameset>
</html>
EXEMPLE: Cadre in-line
<html>
<head>
<title>Formate de Imagini</title>
</head>
<body>
<iframe name="cadru" src="Generalitati.html" width="200" height="100"
border="3" align="right">Site realizat cu cadre in-line. Browserul dvs. nu
suporta!</iframe>
<b>Formate de Imagini:
<ul>
<li><a href="bmp.html" target="cadru">BMP</a></li>
<li><a href="jpeg.html" target="cadru">JPEG</a></li>
<li><a href="tiff.html" target="cadru">TIFF</a></li>
</ul>
</b>
</body>
</html>
Intrebari
???
Tehnologii WEB
Cursul 4
Planul lectiei:
Formulare in HTML
Descriere atribute
Elemente de formular
Campuri de editare multilinie
Liste de selectie
Etichetele
Harti de imagini
Exemple
Formulare in HTML
Descriere atribute
Atributul action primeste ca valoare adresa URL a scenariului CGI ce
va primi datele furnizate de utilizator si le va prelucra, generand un raspuns.
Daca atributul action lipseste, datele vor fi trimise la adresa
documentului curent.
Este posibila expedierea datelor furnizate de catre utilizator la o
adresa postala, caz in care atributul action va primi ca valoare adresa de e-
mail respectiva, insotita de prefixul mailto:
Atributul method specifica modul in care va fi trimisa informatia
catre server.
Atributul method poate primi doua valori:
get
post
<cmp>=<valoare>
Formulare in HTML
Descriere atribute
In cazul valorii get a atributului method, aceste perechi de date sunt
adaugate la sfarsitul adresei URL a scriptului, dupa semnul ?, separate prin
&. Atunci cand trimit un formular catre server, majoritatea browser-elor
afiseaza acest sir.
Exemplu:
Tagul <form action = http://www.utcb.ro/registration
method=get> ce va contine doua campuri de tip text:
campul nume, in care utilizatorul a introdus valoarea Costica
Popescu
si campul email, in care utilizatorul a introdus valoarea
costica@gmail.com va determina transmiterea catre server a
cererii: http://www.utcb.ro/registration ? nume =
PopescuCostica & email = costica@gmail.com
Descriere atribute:
type defineste tipul de element de formular, care poate fi :
text - defineste un camp de editare pentru un cuvant sau o linie de text.
Campurile de editare accepta parametrii:
value
size
maxlength
<map name=retea">
<area shape="rect" coords="1,1,50,25" href="leg1.html">
<area shape="rect" coords="50,1,100,25" href="leg2.html">
<area shape="rect" coords="1,25,50,50" href="leg3.html">
<area shape="rect" coords="50,25,100,50" href="leg4.html">
</map>
Cursul 5
Planul lectiei:
URI Uniform Resource Identifier
URL (Uniform Resource Locator)
URN (Uniform Resource Name)
IRI (Internationalized Resource Identifier)
Arhitectura Web-ului
Situri & aplicatii Web
Serverele de aplicatii
Platforme Web
Medii de dezvoltare
Cookie-uri
Arhitectura orientata spre servicii
Securitatea aplicatiilor WEB
Tag-urile DIV i SPAN
Tag-ul DIV
Tag-ul SPAN
Diferenta dintre DIV si SPAN
URI Uniform Resource Identifier
URI = URL + URN
Identificatorul uniform al resurselor este format din
combinarea localizatorului ce identifica resursele prin reprezentarea
mecanismului de accesare si numele prin care sunt identificate resursele.
Resursa poate fi definita ca si un lucru care poseda o identitate;
Identificator poate fi reprezentat ca si un obiect care joaca rolul
unei resurse (secventa de caractere avand o sintaxa precisa);
Uniformitate calitate prin care se permite o interpretare
semantica uniforma a mai multor conventii sintactice comune, desemnand
identificatori ai unor resurse eterogene.
Exemplu:
http://www.utcb.ro/~hidro/aia/
mailto:contact@urcb.ro
ftp://ftp.utcb.ro/doc/fis.txt
tel:+40212121070
URI Uniform Resource Identifier
URI = URL + URN
URN (Uniform Resource Name) identifica resursele prin nume,
intr-o forma persistenta, chiar daca resursa este inaccesibila sau a disparut.
Exemplu:
urn:utcb.ro:Info
urn:mozilla:package:communicator
urn:schemas-microsoft-com:datatypes
Exemplu:
http://culoare.ro/rosé este identic cu URI-ul
http://culoare.ro/rosé (in HTML/XML) sau
http://culoare.ro/rosé (in XML) si poate fi reprezentat vizual prin
http://culoare.ro/ros
HTTP (HyperText Transfer Protocol)
HTTP (HyperText Transfer Protocol) este un protocol fiabil de
tip cerere/raspuns, bazat pe protocolul TCP/IP. Portul standard de acces este
80.
Arhitectura protocolului este de tipul Server Web (Apache, MS
Internet Information Services etc.) si Client Web (navigator, browser, robot ---
Netscape, Mozilla (Firefox), Internet Explorer, Opera, Teleport, RSS Reader,
iTunes).
HTTP (HyperText Transfer Protocol)
HTTP (HyperText Transfer Protocol)
Metode HTTP
GET cerere de acces la reprezentarea unei resurse (e.g., cod HTML, CSS, SVG, PDF,);
HEAD similara cu GET, dar in mod uzual se doresc doar meta-informatii;
POST utilizata pentru trimiterea unor entitati (date, actiuni) spre server (e.g., datele dintr-
un formular);
PUT plaseaza reprezentarea unei resurse pe server;
OPTIONS furnizeaza optiunile dialogului intre client & server (e.g., negocierea
reprezentarii);
DELETE sterge o resursa (reprezentarea ei) de pe server.
Identificarea resurselor
Fiecare resursa trebuie sa fie adresabila
Fiecarei resurse i se asigneaza un URI distinct (reducerea coliziunilor)
Un URI va avea un proprietar (persoana, organizatie, specificatie,...)
De incurajat utilizarea consistenta a URI-urilor
Opacitatea URI natura unei resurse nu este data de adresa (URI), ci de reprezentare
Identificatorii de fragment duc la identificarea indirecta a unei resurse secundare legata de resursa
initiala
Interactiunea
Agentul Web este reprezentat de persoane sau software ce actioneaza pe Web
Agentul utilizator este reprezentat de software ce actioneaza in numele unui utilizator (uman)
Agent software este reprezentat de servere, proxy-uri, roboti, navigatoare, player-e multimedia etc.
Comunicarea intre agenti implica URI-uri, mesaje si date, via protocoale (HTTP, FTP, SOAP, SMTP)
Un mesaj poate fi compus din date & meta-date (date descriind date)
Accesul la o resursa se realizeaza prin URI (dereferentiere), eventual implicind mai multi pasi, rezultand o
reprezentare a resursei
O reprezentare reprezinta datele care codifica informatia despre starea unei resurse
Creatorilor resurselor trebuie sa li se permita controlul asupra metadatelor atasate reprezentarilor
resurselor
Preluarea unei resurse (retrieval) trebuie sa fie sigura
Managementul reprezentarii proprietarul unui URI ar trebui sa ofere reprezentari ale resursei
desemnate, intr-un mod consistent si predictibil
Arhitectura Web-ului
Situri & aplicatii Web
Situl Web este reprezentat de un sistem pe care ruleaza un server
Web gazduind o serie de pagini (documente) WWW inrudite ale unei
organizatii, companii sau persoane.
Ofera informatii unitare (scopuri comune)
Are asociata o adresa publica (vizibila), bazata pe un domeniu Internet
Serverul Web poate gestiona simultan mai multe situri gazduire
virtuala
Poate fi disponibil in intranet sau extranet
Aplicatia Web este reprezentata de o colectie interconectata de
pagini Web cu continut generat dinamic, menita a oferi utilizatorilor o
functionalitate specifica.
Interactiunea dintre aplicatie si utilizatori are loc printr-o interfata Web
Uzual, sit Web = aplicatie Web
Platforme Web
Arhitectura Web-ului
Arhitectura generala a unei aplicatii Web
Medii de dezvoltare
Utilizari:
memorarea preferintelor utilizatorilor
stocarea informatiilor de autentificare
tranzactii in cadrul comertului electronic
completarea automata a formularelor
managementul sesiunilor Web
si multe altele
Tipuri:
Cookie-uri persistente
nu vor fi distruse la inchiderea navigatorului, ci vor fi memorate intr-un fisier, perioada lor
de viata fiind stabilita de creatorul cookie-urilor
Cookie-uri nepersistente
dispar la inchiderea browser-ului
Arhitectura Web-ului
Cookie-uri
Un cookie consta dintr-o pereche nume=valoare. Valoarea este un
sir de caractere codificat in maniera URL-urilor.
Datele referitoare la un cookie vor fi receptionate de navigator care
mentine o lista de cookie-uri apartinind serverului care le-a trimis. Un cookie
este trimis unui client incluzind campul-antet Set-Cookie intr-un raspuns
HTTP.
Exemplu:
Set-Cookie: nume=valoare; expires=data; path=cale; domain=domeniu; secure
expires data si timpul cand cookie-ul va expira si va fi sters de pe disc
domain numele simbolic al serverului care a generat cookie-ul
path specifica un subset de URL-uri din domeniul corespunzator unui cookie
secure cookie-ul este transmis doar daca tranzactia este sigura (via HTTPS)
<?php
session_start();
if (!isset($_SESSION['accesari'])) {
$_SESSION['accesari'] = 0; } else {
$_SESSION['accesari']++; }
?>
Arhitectura Web-ului
Arhitectura orientata spre servicii
SOA Service Oriented Architecture este un stil arhitectural de
dezvoltare de aplicatii considerate drept servicii ce vor fi invocate de alte aplicatii.
Arhitectura orientata spre servicii este arhitectura software ce defineste
utilizarea de servicii, oferind functionalitati solicitate de utilizatori. Resursele sunt
disponibile pentru o suita de servicii independente ale caror implementari nu
trebuie sa fie cunoscute.
Componentele sistemului in ansamblu au un grad mare de independenta
(de-coupling). Serviciile pot fi recompuse/orchestrate conform cerintelor.
Principii de baza:
serviciile sa partajeze un contract specificat riguros (formal)
serviciile sa fie slab conectate (loosely coupled)
serviciile sa ascunda detaliile de implementare
serviciile sa ofere suport pentru compunerea cu alte servicii (composability)
serviciile sa poata fi reutilizate
serviciile sa se execute ntr-un mod autonom
serviciile sa nu depinda de starea comunicarii (statelessness), cantitatea de informaie
specifica unei activitati ce trebuie retinuta fiind minimala
serviciile sa poata fi facil descoperite (discoverability)
Arhitectura Web-ului
Securitatea aplicatiilor WEB
Confidentialitatea - imposibilitatea unei terte entitati sa aiba acces la datele
vehiculate intre doi receptori
Solutii:
conexiuni private intre cele 2 puncte terminale ale canalului de comunicatie; datele circula printr-
un tunel oferit de o retea privata virtuala (VPN Virtual Private Network)
criptarea datelor prin diverse tehnici (biblioteci specializate si/sau oferite de mediile de
dezvoltare)
Exemplu:
CSS:
div {background-color: #66FFFF}
span.color {color: red}
HTML:
<div>Acest div este tratat similar cu un paragraf,dar
<span class="color">acest span</span> nu este tratat ca un
paragraf.</div>
Tag-urile DIV i SPAN
Tag-ul DIV
Tag-ul <div> ... </div> este unul din cele mai folosite elemente HTML,
aceasta deoarece in combinatie cu proprietati CSS poate crea efecte grafice
deosebite, iar in interiorul lui pot fi incluse oricare elemente HTML: tabele,
formulare, marcatori, linii sau alte DIV-uri. Cadrul in care acestea sunt adaugate
poate avea propriul fundal (background), lungime, inaltime si margini cu diferite
linii.
Iata un exemplu in care avem 2 div-uri, unul contine un formular iar
celalalt o lista "<ul> ... </ul>", fiecare DIV cu proria culoare de fundal, dimensiuni
stabilite si margini diferite.
<div style="width:250px; Alt DIV
background:#aaee88; border:1px solid <div style="width:180px;
blue;"> background:#88aafe; border:5px outset
<form action="" method="post"> #888888;">
Nume: <input <ul>
type="text"></input><br> <li>Linie 1</li>
E-mail:<input <li>Linie 2</li>
type="text"></input><br> <li>Linie 3</li>
<input type="submit" </ul>
value="Trimite"></input> </div>
</form>
</div>
Tag-urile DIV i SPAN
Tag-ul DIV
In atributul "style" sunt specificate proprietatile CSS care stabilesc
aspectul grafic al fiecarui DIV (lungime in pixeli, fundal si bordura).
Codul va afisa intr-o pagina web urmatorul rezultat:
am adaugat portiunea din context intr-un tag SPAN pentru a-i putea aplica proprietatile
grafice dorite si care nu afecteaza restul continutului.
astfel, prin proprietatile adaugate in "style" (background:#88fe88; si font-
weight:bold;), sunt modificate numai 3 cuvinte din propozitie.
Tag-urile DIV i SPAN
Tag-ul SPAN
Tag-ul SPAN poate fi folosit si ca o clasa pentru CSS. Astfel, proprietatile
adaugate elementului "span" intr-o foaie de stil vor fi transferate tuturor
elementelor din pagina care sunt incadrate in tag-uri "<span> ... </span>".
Iata un exemplu:
observati cum a fost adaugat elementul "span" in tag-ul "<style> ... </style>" din
sectiunea HEAD a codului HTML. Acest element face referire la toate tag-urile
"<span>...</span>" din document si le transmite aceleasi proprietati.
acest cod va afisa intr-o pagina web urmatorul rezultat:
Tag-urile DIV i SPAN
Diferenta dintre DIV si SPAN
Diferenta dintre DIV si SPAN este faptul ca DIV incadreaza o sectiune
din document sub forma unui bloc, iar SPAN incadreaza o portiune din context
sub forma de linii.
Iata un exemplu din care se poate intelege mai bine: atribuim aceeasi
proprietate grafica (bordura rosie) unui tag DIV si unui tag SPAN.
Cursul 6
Planul lectiei:
CSS - Cascading Style Sheets
Beneficiile sintaxei
Structura CSS
Nivelul 1 sau inline
Nivelul 2 sau embedded
Nivelul 3 sau fisier extern
Comenzile id si class
Stiluri pentru fonturi
Atribute pentru fonturi
Stiluri pentru legaturi
Stiluri pentru fundal
Pozitionarea prin CSS
CSS - Cascading Style Sheets
Descriere
CSS, prescurtarea de la Cascading Style Sheets, sunt etichete
folosite pentru formatarea paginilor web (de exemplu formatare text,
background sau aranjare in pagina, etc.).
CSS (Cascading Style Sheets) este un standard pentru formatarea
elementelor unui document HTML. Stilurile pot fi declarate in interiorul unui
document HTML prin intermediu tagului <style> i/sau atributului style sau
se pot ataa elementelor HTML prin intermediul unor fiiere externe. CSS se
poate utiliza i pentru formatarea elementelor XHTML, XML i SVGL
,unde style - specifica unde incepe si unde se termina blocul CSS iar
type, impreuna cu <!-- ... --> sunt folosite pentru a ascunde de browserele
vechi, care nu cunosc sintaxa CSS, continutul blocului style.
CSS - Cascading Style Sheets
Exemplu CSS de nivel 2:
<html>
<head>
<title>Exemplu</title>
<style type="text/css">
<!--
p{
font-family: arial;
font-size: 20px;
font-style: italic;
font-weight: 800;
}
-->
</style>
</head>
<body>
<p>Text scris cu Arial, 20px, italic, 800</p>
Text negru
</body>
</html>
CSS - Cascading Style Sheets
In situatia in care numele fontului este format din doua cuvinte se incadreaza
intre ghilimele duble pentru ca browserul sa le interpreteze impreuna.
CSS - Cascading Style Sheets
Stiluri pentru fonturi:
<html>
<head>
<title>Exemplu 3_2</title>
</head>
<body>
<p style="font-family: font1,font2,arial;">Text scris cu cu fontul Arial</p>
Text negru
<p style="font-family: font1,font2,arial;">Text scris cu cu fontul Arial</p>
</body>
</html>
CSS - Cascading Style Sheets
Stiluri pentru fonturi:
compunerea stilurilor
Stilurile prezentate anterior pot fi folosite simultan in interiorul
aceeasi etichete, fiind despartite de caracterul ; (punct si virgula).
CSS - Cascading Style Sheets
Stiluri pentru fonturi:
decorare
text-decoration adauga sublinierea sau taierea blocului text asociat si poate avea
valorile underline, line-through sau none.
Exemplu: stilul asociat etichetei p este prezentat in HEAD
<html> </head>
<head> <body>
<title>Exemplu 4_3</title> Text normal
<style type="text/css"> <p>Text subliniat</p>
<!-- </body>
p{text-decoration: underline;} </html>
-->
</style>
CSS - Cascading Style Sheets
Stiluri pentru text:
culoare
color defineste culoarea textului dintr-o zona sau intraga pagina.
Exemplu:
<html>
<head>
<title>Exemplu 4_5</title>
<style type="text/css">
<!--
a{font-family: arial; font-size: 20px;}
a:link {color: #0000FF;}
a:visited {color: #00FF00;}
a:active {color: #FF0000;}
a:hover {color: #000000;}
-->
</style>
</head>
<body>
Text normal
<a href="exemplu4_4.html">link</a> catre exemplul 4_4
</body>
</html>
CSS - Cascading Style Sheets
Stiluri pentru fundal:
Background ca si culoare sau imagine poate fi definita pentru intreaga pagina,
o celula a tabelului sau pentru text.
culoare de fond
background-color defineste culoarea de fond si poate fi asociat oricarei
etichete HTML.
Exemplu: definim un stil pentru intreg BODY si un altul pentru eticheta p
<html>
<head>
<title>Exemplu 5_1</title>
<style type="text/css">
<!--
body {background-color: #FFFF00;}
p {background-color: #FF0000;}
-->
</style>
</head>
<body>
Text normal
<p>Text cu background rosu</p>
</body>
</html>
CSS - Cascading Style Sheets
Stiluri pentru fundal:
imagine de fond
Imaginile pot fi folosite ca fundal in spatele intregii pagini, a unui obiect sau a
textului. background-image asociaza o imagine ca fundal unui obiect.
Exemplu: definim un stil pentru eticheta p
<html>
<head>
<title>Exemplu 5_2</title>
<style type="text/css">
<!--
p {background-image: url(poza.jpg);}
-->
</style>
</head>
<body>
Text normal
<p>Text cu imagine de fond</p>
</body>
</html>
CSS - Cascading Style Sheets
Stiluri pentru fundal:
repetare
Functie de dimensiunile obiectului caruia ii sunt asociate, imaginile de fond se
repeta pe orizontala si verticala. Repetarea poate fi controlata prin parametrul
background-repeat care poate lua valorile:
repeat-x imaginea se repeta pe orizontala;
repeat-y imaginea se repeta pe verticala;
no-repeat imaginea nu se repeta.
Exemplu: imaginea nu se repeta sub eticheta p
<html>
<head>
<title>Exemplu 5_3</title>
<style type="text/css">
<!--
p {background-image: url(poza.jpg);
background-repeat: no-repeat;}
-->
</style>
</head>
<body>
Text normal
<p>Text cu imagine de fond</p>
</body>
</html>
CSS - Cascading Style Sheets
Stiluri pentru fundal:
pozitia
In mod normal imaginea de fundal incepe din coltul stanga sus al obiectului
asociat, dar acest lucru poate fi controlat prin comanda CSS background-position.
Sunt acceptate doua valori:
in prima pozitie poate fi: top, center, bottom, percentage sau pixel;
in a doua pozitie poate fi: right, center, left, percentage sau pixel.
width si height
Latimea si inaltimea unui element sunt stabilite in HTML prin atributele width
si height. Aceste atribute pot fi adaugate sau suprascrise prin comenzi CSS.
CSS - Cascading Style Sheets
Stiluri pentru chenare si margini:
<html>
<head>
<title>Exemplu 7_1</title>
<style type="text/css">
<!--
img {width: 50px; height: 100px;}
-->
</style>
</head>
<body>
<img src="margini.gif">
</body>
</html>
CSS - Cascading Style Sheets
Stiluri pentru chenare si margini:
border
Netscape si Internet Explorer afiseaza diferit chenarele. Comanda CSS
pentru definirea chenarului este border avand proprietatile asociate width,
style si color. Pentru a fi siguri ca aceste proprietati functioneaza atat in
Internet Explorer cat si in Netscape trebuie sa declaram pentru border cel putin
width si style.
Cursul 7
Planul lectiei:
CSS3 - Cascading Style SheetsSituri & aplicatii Web
Introducere
Modulele CSS3
Bordurile in CSS3
Fundalul in CSS3
Efecte de text in CSS3
Fonturile in CSS3
JavaScript
Includerea fisierelor externe
Variabile in JavaScript
Instructiuni si operatori in JavaScript
Functii in JavaScript
CSS3 - Cascading Style Sheets
Introducere
CSS este prescurtarea de la Cascading Style Sheets si este utilizat
pentru controulul stilului si aspectului unei pagini web.
CSS3 este noul standard pentru CSS.
Exemplu:
div
{
transform:rotate(30deg);
}
Modulele CSS3
CSS3 a fost impartit in "module". Specificatiile vechi au fost separate
in parti mai mici iar noile specificatii au fost de asemenea adaugate.
Cele mai importante module CSS3 sunt:
Selectoarele (Selectors)
Model caseta (Box Model)
Fundaluri si Borduri (Backgrounds and Borders)
Efecte Text (Text Effects)
Transformari 2D/3D (2D/3D Transformations)
Animatii (Animations)
Aspect Multi-Colaoana (Multiple Column Layout)
Interfata Utilizator (User Interface)
CSS3 - Cascading Style Sheets
Specificatiile CSS3 sunt inca in dezvoltare la W3C. Totusi, ultimele versiuni ale
browserelor includ propietatile CSS3.
Bordurile in CSS3
In CSS3 se pot crea borduri cu colturi rotunjite, se pot adauga umbre
la casete sau se pot utiliza imagini ca si borduri fara a mai fi nevoie de
Photoshop.
border-radius
box-shadow
border-image
Colturi rotunjite in CSS3
Spre deosebire de CSS2 in care trebuia sa utilizam mai multe imagini
pentru a avea colturi rotunjite la casete, in CSS3 putem face acest lucru foarte
usor si fara sa mai fie nevoie de imagini.
Propietatea CSS3 care ne ajuta in acest caz este border-radius.
div
{border:2px solid;
-moz-border-radius:25px; /* Firefox */
border-radius:25px;}
CSS3 - Cascading Style Sheets
Umbra la casete in CSS3
In CSS3 propietatea box-shadow ne permite sa adaugam umbra la o
caseta.
div
{-moz-box-shadow: 10px 10px 5px #888888; /* Firefox */
-webkit-box-shadow: 10px 10px 5px #888888; /* Safari and Chrome */
box-shadow: 10px 10px 5px #888888;}
Exemplu:
body
{
background-image:url(img_flwr.gif),url(img_tree.gif);
}
Propietati noi pentru background
background-clip - specifica zona de colorare a imagini de background.
Exemplu:
div
{background:url(/images/w3css.gif);
background-repeat: no-repeat;
background-size: 100% 100%;
background-clip: content-box;
-webkit-background-clip: content-box; /* Safari and Chrome */}
CSS3 - Cascading Style Sheets
Propietati noi pentru background
Sintaxa:
background-clip: padding-box|border-box|content-box;
text-align-last Descrie modul in care ultima line a unui bloc sau linia 3
dinaintea liniei de pauza fortate este aliniata atunci cand
text-align este "justify".
text-emphasis Se aplica accent si culoare pe textul elementelor. 3
.
text-outline Specifica o schita de text. 3
text-overflow Specifica ce se va intampla cand textul depaseste suprafata 3
elementului.
text-shadow Adauga umbra la text. 3
text-wrap Specifica regulile pentru liniile de pauza la text. 3
<BODY>
<FORM>
<INPUT type=text name=prim value=2> +
<INPUT type=text name=secund value=3>
<INPUT type=button name=action value== onclick=adunare(this.form)>
<INPUT type=text name=rezultat value=5>
</FORM>
</BODY>
</HTML>
Intrebari
???
Tehnologii WEB
Cursul 8
Planul lectiei:
Limbajul PHP
Elemente de baz ale limbajului PHP
Caracteristici
Vocabular, simboluri, expresii, instructiuni si
comentarii
Vocabular
Instructiuni
Comentarii
Tipuri de date
Tipuri scalare
Tipurile compuse
Limbajul PHP
Elemente de baz ale limbajului PHP
$douazeci = 2*(9+1)
$saizeci=10+2*($douazeci+5)
Limbajul PHP
Instructiuni
In PHP, instructiunea este o expresie urmata de caracterul punct si
virgula (;"), ca in C, Perl sau Java.
O secventa de instructiuni valide, inclusa, de exemplu, intre marcajele
<?php si ?> este un program (numit si script). In mod obisnuit scripturile
PHP se salveaza in fisiere cu extensia .php.
Desi instructiunile nu pot fi combinate ca si expresiile, ele pot fi
incluse in grupuri, plasate intre acolade, ca in exemplul urmator:
<?php
$numar=20;
if ($numar>=0) {
echo "Radacina patrata a numarului $numar este:";
echo sqrt($numar); }
else
echo "Numarul este negativ. Precizati unul pozitiv!";
?>
Limbajul PHP
Comentarii
Ca si in alte limbaje de programare, scripturile PHP pot include
comentarii, acestea fiind precizate in trei moduri:
Cursul 9
Planul lectiei:
Limbajul PHP
Variabile
Constante
Operatori
Operatori unari
Operatori binary
Operatori ternari
Instruciuni
Instruciuni condiionale
Instructiuni pentru controlul executiei iteratiilor
Funcii
Apelarea funciilor
Functii definite de utilizator
Functii recursive
Limbajul PHP
Variabile
Principala modalitate de stocare temporara a datelor ntr-un script
PHP este reprezentata de utilizarea variabilelor.
Observatie:
Cu exceptia operatorului de concatenare (in cazul caruia operanzii
folositi au tipul sir de caractere sau sunt convertiti la acesta), toti operatorii
binari folosesc operanzi de tip numeric (intreg sau dublu).
Daca unul sau amandoi operanzii au tipul sir de caractere, logic, null
sau resursa, vor fi convertiti in echivalentii lor numerici, inainte de efectuarea
operatiei.
Limbajul PHP
Operatori ternari
Procesorul PHP executa grupul de instructiuni grup in mod repetat, atat timp
cat expresia expresie este evaluata cu valoarea logica true. Evaluarea expresiei amintite
se face la inceputul fiecarei iteratii, ceea ce inseamna ca este posibil ca, in cazul in care
prima evaluare genereaza valoarea logica false, instructiunile incluse in secventa grup sa
nu fie executate niciodata. Acoladele sunt necesare numai daca grup contine cel putin
doua instructiuni.
Exemplu:
Se calculeaza suma:
<?php
$s=0; $i=1;
while($i <= 5)
{
$s+=$i + $i;
$i++;
}
echo ($s);
?>
Limbajul PHP
Instructiunea dowhile
Desi utilizarea instructiunii do. . .while nu este absolut necesara, ea permite
obtinerea unei flexibilitati sporite in scrierea scripturilor. Sintaxa acestei instructiuni
este urmatoarea:
do
{
grup instructiuni
} while (expresie);
Cele trei expresii (argumentele instructiunii), care de cele mai multe ori sunt
construite pe baza unei variabile de ciclare, au urmatoarele semnificatii:
expresie1 (expresie de initializare) este evaluata o singura data, la inceputul
executiei instructiunii for;
expresie2 (expresia de test) - este evaluata la inceputul fiecarei iteratii. In functie de
rezultatul evaluarii, se executa sau nu grupul de instructiuni grup.
expresie3 (expresia de modificare) - este folosita pentru a introduce actiunile care
urmeaza a fi efectuate asupra variabilei de ciclare (incrementare/decrementare).
Exemplu:
<?php
for ($i=2; $i<10; $i++) {
echo "Patratul lui ".$i." este " . $i*$i . " .<br />";
}
?>
Limbajul PHP
Instructiunea for
Alaturi de instructiunile repetitive analizate pana acum, in PHP este
implementata si instructiunea foreach, deosebit de utila pentru traversarea iterativa a
tablourilor asociative sau nesecventiale (in ultimul caz nefiind posibila folosirea
instructiunii for), dar si a celor indexate numeric.
Se afiseaza:
Numarul 1 este mai mic decat 5;
Numarul 2 este mai mic decat 5;
Numarul 3 este mai mic decat 5;
Numarul 4 este mai mic decat 5;
Limbajul PHP
Funcii
n PHP se pot crea funcii fr prea mari diferene fa de ce tim din C/C++.
n programare, o funcie include o secven de cod, care realizeaz o anumit operaie i
poate fi apelat n mod repetat, de cte ori este necesar. Altfel spus, o funcie const
dintr-un set de instruciuni care realizeaz o sarcin specific.
Exemplu: un script in care se utilizeaza o functie pentru calculul ariei unui triunghi si
apoi afiseaza aria.
<?php
function aria_t($b, $h)
{ return $b*$h/2; }
$x=3;
$y=8;
echo (aria_t($x, $y));
?>
Definitiile functiilor PHP pot fi plasate oriunde in interiorul unui script, dar
este preferabila plasarea la inceputul acestuia.
In scopul maririi gradului de reutilizare a functiilor, se poate folosi drept alternativa
plasarea functiilor in fisiere distincte (avand extensia .php, .inc, etc.), urmand ca acestea
sa fie incluse in scripturi prin intermediul instructiunilor PHP dedicate.
Limbajul PHP
Apelarea funciilor
Cursul 10
Planul lectiei:
Limbajul PHP
Tipuri de date compuse
Tipul tablou
Crearea tablourilor
Tablouri multidimensionale
Sortarea tablourilor
Transformarea tablourilor
Tipul obiect
Clasele
Alctuirea i instanierea unei clase
Definirea unei metode constructor
Utilizarea motenirii
Redefinirea metodelor
Invocarea unei metode redefinite
Tablouri cu obiecte
Limbajul PHP
Tipuri de date compuse
In PHP sunt utilizate doua tipuri de date compuse:
tipul tablou;
tipul obiect.
Tipul tablou
Tipul tablou se refer la colecii de date indexate, numite elements,
care pot fi utilizate mpreun.
Acest tip este foarte puternic i des folosit n PHP. Astfel, tablourile se
dovedesc a fi cele mai potrivite containere pentru stocarea datelor n scopul
manipulrii acestora (sortare).
De asemenea, funciile care extrag rezultatele obinute n urma
interogrii unei baze de date, ntorc tablouri.
n plus, unele dintre variabilele predefinite n PHP au tipul tablou:
$_GET
$_POST
$_SESSION
Limbajul PHP
Tipuri de date compuse
Cheile avnd ultimul tip precizat trebuie incluse ntre ghilimele sau
apostrofuri.
Exemple:
$note['matematica'] = 9
sau
$note["matematica"]= 9
Limbajul PHP
Crearea tablourilor
Atribuirea direct
Utilizarea acestei modalitati presupune precizarea numelui tabloului,
precum si a cheilor si valorilor fiecarui element.
In cazul in care se doreste utilizarea unei chei de tip sir de caractere, se
procedeaza ca in exemplul urmator:
$elev["scoala"] ="Mihail Sadoveanu";
$elev["clasa"]=10;
$elev["varsta"]=16;
Limbajul PHP
Crearea tablourilor
n exemplul oferit, PHP creeaz automat un tablou cu trei elemente.
Este important de menionat c elementele tabloului $elev pot fi indicate
ulterior preciznd cheia de tip ir de caractere i/sau cheia numeric. Cheile
numerice primesc automat valori ntregi succesive, prima fiind 0.
De exemplu, vrsta unui elev poate fi precizata n urmtoarele dou
moduri:
$varsta=$elev["varsta"];
$varsta=$elev[2];
n exemplul de mai sus, cheile celor trei elemente ale tabloului sunt, n
ordine, "Capitala", "Moldova" i "Banat".
Limbajul PHP
Crearea tablourilor
Tablouri multidimensionale
n exemplele anterioare, pentru a ilustra cele trei metode de creare a
tablourilor, au fost utilizate tablouri unidimensionale.
Dei acestea sunt mai rar utilizate, PHP ofer i posibilitatea de a crea tablouri
multidimensionale.
n continuare este prezentat un exemplu n care este creat un tablou
bidimensional, prin intermediul funciei array():
$note=array ('sem1' =>
array('matematica'=>9,
'fizica'=>9,
'informatica'=>10),
'sem2'=>
array('matematica' =>9,
'fizica'=>8,
'informatica'=>9) );
Unirea tablourilor
Pentru unirea a dou sau mai multe tablouri ntr-unul singur, se
utilizeaz funcia array_merge() al crei prototip este urmtorul:
array array_merge(array tablou1 [, array tablou2 [,array ]])
<?php
class ContEco extends ContBanca2 {
function inchide_cont($zile, $rata) {
$suma = ContBanca2::inchide_cont();
$suma = $suma + $suma * $rata * ($zile / 365);
return $suma;
}
}
?>
Limbajul PHP
Tablouri cu obiecte
Tablourile (numite i matrice) reprezint o modalitate convenabil pentru
lucrul cu mai multe valori.
Valorile stocate n tablouri pot face referire la obiecte exact aa cum procedeaz
n cazul numerelor sau al irurilor. Un tablou care face referire la obiecte se numete
"tablou cu obiecte".
clasa "ContBanca" i dou clase copil ale acesteia:
<?php // Incepe codul pt. prima clasa copil
class ContBanca { class ContCurent extends ContBanca {
var $cont_id; function ContCurent ($id, $nume, $suma) {
var $nume_posesor; ContBanca::ContBanca($id, $nume, $suma,
var $sold; "curent");
var $tip_cont; }
function ContBanca($id, $nume, $suma, $tip) { }
$this->cont_id = $id; // Incepe codul pt. a doua clasa copil
$this->nume_posesor = $nume; class ContEco extends ContBanca {
$this->sold = $suma; function ContEco ($id, $nume, $suma) {
$this->tip_cont = $tip; ContBanca::ContBanca($id, $nume, $suma,
} "economii");
function dump() { }
return "Cont = ". $this->cont_id. }
" posesor = ". $this->nume_posesor. ?>
" sold = ". $this->sold.
" tip = ". $this->tip_cont;
}
}
Limbajul PHP
Tablouri cu obiecte
Remarcati faptul ca metodele constructor ale celor doua clase copil fac referire
la constructorul clasei parinte, reutiliznd n mod eficient caracteristica furnizata de
clasa parinte, reducand astfel codul programului. Acum, creem instante ale claselor
copil si stocam referintele la aceste instante ntr-un tablou:
<?php
$cont[0] = new ContCurent(11, Popescu Costica",
100);
$cont[1] = new ContEco(12, "Didi", 140);
?>
Pe lng setul standard de comenzi aferente limbajului PHP, acesta dispune de o serie de funcii
i variabile predefinite care uureaz munca programatorului, unele dintre ele fiind incluse implicit
(built-in) n interpretor (spre exemplu, suportul pentru MySQL, FTP, XML), altele fiind disponibile prin
utilizarea unor fiiere externe ca extensii (biblioteci .dll). Aceste fiiere extensie de tip .dll (cu numele
generic php_*.dll) permit limbajului PHP s opereze cu o mare diversitate de tehnologii conexe, inclusiv
cu baze de date (n acest ultim caz, ele nglobnd funciile necesare accesrii i manipulrii unor baze de
date de diverse tipuri).
MySQL este unul dintre cele mai folosite sisteme de gestiune a bazelor de date client-server,
fiind cel mai des utilizat n combinaie cu scripturi PHP. Operarea cu baze de date MySQL nu necesit
utilizarea unei biblioteci suplimentare (.dll), suportul pentru MySQL fiind inclus funcional n motorul
interpretorului PHP. Prezentul paragraf va prezenta cele mai importante funcii PHP utilizate n lucrul cu
bazele de date MySQL (tabel 1.1), nsoite de aplicaii exemplificative n paragrafele ulterioare.
Tabel 1.1.
Tip_returnat Aciuni/caracteristici
Funcie(...)
reprezentnd numele bazei de date care va fi creat, iar cel de-al doilea
parametru reprezint identificatorul aferent conexiunii cu MySQL-ul;
- returneaz valoarea logic TRUE n cazul n care a reuit s creeze baza
de date, respectiv valoarea logic FALSE n caz contrar.
bool mysql_drop_db - permite tergerea unei baze de date MySQL;
- funcia are doi parametri: primul este de tip ir de caractere,
reprezentnd numele bazei de date care va fi tears, iar cel de-al doilea
parametru reprezint identificatorul aferent conexiunii cu MySQL-ul;
- returneaz valoarea logic TRUE n cazul n care a reuit s tearg baza
de date, respectiv valoarea logic FALSE n caz contrar.
resource - trimite/paseaz o comand SQL spre serverului MySQL (sub forma unui
mysql_query string de caractere);
- returneaz, n caz de succes, un identificator resurs care va fi folosit n
continuare ca parametru n apelurile unor eventuale funcii, (realiznd
extragerea rezultatului interogrii), iar n caz contrar, returneaz valoarea
logic FALSE.
$row->coloana1,
$row->coloana2, ...
int mysql_num_rows - returneaz numrul de linii obinute n urma executrii unei comenzi SQL
de interogare SELECT.
int mysql_num_fields - returneaz numrul de coloane (cmpuri) aferente setului de date obinut
ca urmare a execuiei unei comenzi SQL SELECT.
int mysql_errno - permite identificarea erorii care s-a produs n timpul execuiei de ctre
serverul MySQL a unei comenzi SQL;
- returneaz codul numeric al erorii n cazul n care a aprut o
eroare n timpul executrii unei comenzii SQL, respectiv 0 n caz contrar.
string mysql_error - permite identificarea erorii care s-a produs n timpul executrii unei
comenzi SQL;
- returneaz un mesaj n care eroarea este descris explicit n cazul n care
a aprut o eroare n timpul executrii unei comenzii SQL, respectiv un ir
vid n caz contrar.
tip_variabil
- preia valoarea unei celule din setul de date, aferente unei anumite
mysql_result coloane dintr-un rnd al unui cursor, rezultat ca urmare a unei comenzi
SQL SELECT.
bool mysql_free_result - realizeaz eliberarea zonei de memorie ocupat de cursorul indicat ca
argument, rezultat ca urmare a unei comenzi SQL SELECT;
- returneaz valoarea logic TRUE n caz de succes, respectiv valoarea
logic FALSE n caz contrar.
Observaie: De regul, cele mai utilizate funcii PHP pentru operarea cu o baz de date MySQL sunt:
mysql_connect (conectare la serverul MySQL), mysql_select_db (deschiderea unei baze de date),
mysql_query (interogare prin trimiterea spre server a unui string ntr-o sintax valid de comand SQL),
mysql_fetch_row (extragere date returnate), mysql_close (nchidere conexiune). Se poate remarca o
mare varietate de comenzi destinate extragerii datelor returnate de o interogare (mysql_fetch_...),
rmnnd la latitudinea programatorului selecia comenzii pe care o consider cea mai potrivit.
Folosind funciile anterior prezentate (i nu numai acestea), programatorul poate realiza aplicaii
PHP complexe n conexiune cu baze de date de tip MySQL, conferind astfel o dinamic sporit aplicaiei
WEB.
Dup instalarea pachetului WAMP, un client consol MySQL este disponibil chiar din meniul
WAMP, sub denumirea MySQL Console (fig. 1.1). User-ul cu rol de administrator al serverului MySQL are
numele root i nu are o parol implicit setat. Este indicat ca, dup prima logare, s se seteze o parol
pentru acest important user.
4 Tehnologii WEB Cursul 11 + 12
Setarea unei parole pentu user-ul root se poate face cu o comand de genul:
De sunt necesare dou comenzi? Practic sunt doi useri administrator, cu acelai nume root, unul
fiind dedicat conectrii exclusiv de pe localhost, iar cellalt (cu acelai nume) pentru realizarea unor
conexiuni din exterior (la distan sau remote).
Tot dupa instalarea serverului de baze de date, dou baze sunt implicit create, avnd numele
mysql (coninnd informaiile pentru administrarea userilor, drepturilor acestora, parolelor de acces,
etc.), respectiv test (baz de lucru pentru root).
Vizualizarea numelor bazelor de date existente pe server, respectiv deschiderea uneia sau alteia
i afiarea numelor tabelelor din baza curent, se poate face cu o secven de comenzi de forma
urmtoare:
Pentru proiectarea i implementarea unei noi aplicaii, se recomand crearea unei noi baze de
date, respectiv crearea unui nou user i atribuirea de drepturi acestuia doar pe aceast nou baz de
date. Spre exemplu:
Se presupune serverul MySQL plasat pe acelai host cu interpretorul PHP, cu serverul Apache i
deci, implicit, cu scripturile PHP care integreaz rolul de user). Astfel, un singur user MySQL permind
doar o conectare de pe localhost este suficient pentru operare (oferind n plus i o securitate
suplimentar, doar un apel conexiune dintr-un script PHP fiind permis, respectiv orice apel extern, de la
distan (remote), fiind respins). Folosirea noului user implic deschiderea unei noi console client,
aceasta putnd fi startat printr-o comand de rulare direct a aplicaiei client mysql.exe cu parametri
Tehnologii WEB Cursul 11 + 12 5
(-h urmat de numele/adrea IP a host-ului, -u urmat de numele de user, p preciznd c este necesar
i se va cere o parol):
Dup tastarea parolei adecvate, prompter-ul mysql> va apare confirmnd realizarea conexiunii
la server i permind deschiderea bazei dorite:
n acest moment se poate trece la crearea tabelelor bazei de date i la o operare standard cu
comenzi SQL consacrate (CREATE TABLE, INSERT, UPDATE, DELETE, SELECT, etc.).
Nume CHAR(10),
Varsta INTEGER,
localitate CHAR(10));
Observaii: Prsirea consolei MySQL (i implicit nchiderea conexiunii user-ului curent cu serverul) se
face cu comanda exit. Din motive de comoditate viznd lansarea rapid a unui ferestre consol MySQL
(permind implicit conectarea doar ca user administrator), exemplele care urmeaz folosesc userul root
pentru accesul la baza de date persoane.
Acest prim exemplu prezint o modalitate simpl de interogare fr parametrii a unei tabele a
unei baze de date MySQL. Sunt exemplificate modurile de utilizare ale urmtoarelor funcii, respectiv
comenzi i structuri:
Codul surs PHP al aplicaiei considerate este urmtorul (rezultatul apelului acesteia, folosind un
browser WEB, fiind prezentat n fig. 1.2) :
<?php
//Conectare la server
print ("<tr>");
6 Tehnologii WEB Cursul 11 + 12
$nr_val=0;
// ir (array) $row)
// dat, elementele unei nregistr ri (row[0] va conine elemente din //coloana 1 a liniei
curente, etc)
echo" <tr>\n";
//Pune ntr-o celul din tabel elementul unei nregistr ri (valoarea dintr-// un cmp al
nregistr rii)
echo "<td>$value</td>";
//Incrementeaz variabila_contor =
$nr_val++;
echo "</tr>";
$coln=mysql_num_fields($query);
echo "<br>";
echo "<center>";
else
echo "</center>";
mysql_close();
?>
Funcia mysql_connect realizeaz conectarea la serverul MySQL. Aceast funcie poate avea
pn la cinci parametri (toi putnd fi opionali), dintre care doar primi trei sunt de regul necesari,
ultimii doi fiind mai puin folosii:
- Cel de-al doilea parametru reprezint numele utilizatorului, iar n cazul n care lipsete
(obligatoriu lipsind i ceilali parametrii care l succed), se folosete ca substitut implicit numele de
utilizator sub care ruleaz serverul MYSQL, adic de regul root (mysql_connect("localhost"));
- Al treilea parametru reprezint parola utilizatorului, iar n caz ca lipsete se folosete irul vid
pe post de parol pentru conectarea la server (mysql_connect("localhost","user1"));
Observaie: Din motive de securitate, se recomand a se folosi aceti primi trei parametrii cu valori
concrete, ne lsndu-se (prin lips lor) active valorile implicite care conduc la o cretere substanial a
gradului de vulnerabilitate al aplicaiei. Pentru MySQL (inclus n pachetul WAMP5), dup cum s-a mai
precizat, user-ul implicit existent la instalare este root, fr parol.
- Al patrulea parametru este de tip logic, avnd rolul de a indica motorului PHP c, n cazul n
care exist deja o conexiune la acelai server MySQL, s creeze o nou conexiune n loc s o reutilizeze
pe cea existent;
8 Tehnologii WEB Cursul 11 + 12
- Ultimul parametru este de tip ntreg i reprezint proprietile pe care le va avea conexiunea
(spre exemplu, dac se folosete compresia datelor).
Funcia mysql_query este cea prin care se asigur interaciunea efectiv cu elementele (datele)
bazei de date, permind operaiile SQL uzuale (interogare, adugare, tergere, modificare etc). Funcia
are doi parametri:
- Primul parametru este de tip ir de caractere i reprezint cererea (comanda SQL) trimis spre
execuie server-ului MySQL (n exemplul de fa, o comand SELECT pe o tabel);
Observaie: Evident, comanda SELECT poate fi i o interogare pe mai multe tabele (jonciuni de tabele),
spre exemplu: select tabela1.col11, tabela1.col.12, tabela2.col21, tabela2.col22 from tabela1, tabela2
where tabela1.col.12 = tabela2.col21
Dup cum s-a mai precizat, PHP-ul ofer o multitudine de funcii alternative pentru extragerea
datelor aferente liniilor returnate de interogare. n exemplificarea curent s-a folosit
mysql_fetch_row, dar se puteau folosi (n cadrul condiiei buclei while) i urmtoarele variante
alternative:
Dac numrul de linii returnate de interogare este constant, cunoscut aprioric, funcia de
extragere a datelor mysql_fetch_row poate fi referit explicit de cte ori este nevoie, fr a se mai
Tehnologii WEB Cursul 11 + 12 9
face apel la o structur de ciclare, gen while. Este cazul unei cutri dup o cheie primar, numrul de
linii gsite putnd fi 1 sau 0. n acest caz, comanda de extragere trebuie referit o singur dat,
returnnd fie un array aferent linie gsite, fie FALSE dac nu a gsit nici o linie.
Observaie: Comanda print are un efect similar cu al comenzii echo (afiare neformatat a unui string).
Pentru afiarea unor string-uri care includ variabile, se poate folosi i o comanda de afiare formatat
printf (dispunnd de civa parametri speciali pentru formatarea coninutului variabilelor integrate n
string-ul de afiat: %s, %d, %f). Un scurt exemplu de utilizare al acesteia este prezentat n continuare:
$var="string";
$var=10.1234;
Comanda foreach ($row as $value) este practic o bucl intern buclei while(), ciclnd n cadrul
fiecrui articol/linie dup numrul de elemente ale articolului/liniei. Pentru fiecare articol succesiv gsit
(in ciclul while()), comanda foreach() ca i bucl, extrage succesiv din irul $row cte un element i-l
trimite spre variabila $value (care la un moment dat conine o valoare a unui articol corespunztoare
unui anumit cmp, deci practic valoarea unei celule).
Afiarea pe ecran (n celulele tabelului de afiare construit) a coninutului variabilei $value (echo
"<td >$value</td>";), nseamn practic afiarea element
cu element a coninutului fiecrui articol gsit, n celule succesiv create. Prin incrementarea
variabile $nr_val, aceasta va conine numrul total de elemente (spre exemplu dac numrul de articole
gsite este 3 (bucla while() se va executa de 3 ori), iar numrul de cmpuri este 5 (bucla foreach() se
va executa de 5 ori), $nr_val=3X5=15.
Comanda die (executat pe ramura else a verificrii if( )) nchide automat conexiunea i
ncheie forat programul (nici o alt comand care ar mai urma n script nu se mai execut) .
<?php
//$nr_inreg=@mysql_num_rows($query);
if ($nr_inreg>0){
echo "<center>";
echo"</center>";
echo"<tr bgcolor=silver>";
echo"<th>Nume</th>";
echo"<th>Varsta</th>";
echo"<th>Localitate</th>";
echo"</tr>";
while($row=mysql_fetch_row($query)){
echo"<tr>";
echo "<td>$value</td>";
echo"</tr>";
echo"</table>";
else{
echo"<center>";
echo"</center>";
mysql_close();
?>
Aceasta variant reprezint o optimizare din punct de vedere al operrii pe partea de interpretor
PHP (practic pseudo-clientul aplicaiei Web), ntruct pentru a calcula numrul de nregistrri obinute n
urma interogrii se folosete funcia mysql_num_rows, pasndu-se aceast sarcin serverului MySQL
(care primete astfel o solicitare n plus). Aceasta funcie returneaz numrul de linii obinute n urma
executrii unei comenzi SQL SELECT. Semnul @ (care apare n faa funciei mysql_num_rows) are rolul
de a suprima afiarea pe ecran a unor eventuale warning-urilor (mesaje de avertisment) care pot
aprea n timpul execuiei unor comenzi.
Tehnologii WEB Cursul 11 + 12 11
n cele dou versiuni ale aplicaiei anterior prezentate, capul de tabel pentru afiarea
informaiilor din tabela bazei de date s-a realizat n mod manual, presupunndu-se cunoscute numele
coloanelor i numrul lor.
PHP-ul dispune de funcii prin care se pot obine informaii asupra structurii unei tabele, informaii care
pot fi utilizate pentru realizarea automat a unui cap de tabel pentru afiare (coloanele lui fiind practic
cmpuri ale tabelei bazei de date).
-mysql_list_fields() ofer informaii asupra structurii unei anumite tabele, returnnd ca rezultat un
identificator, care poate fi folosit de ctre urmtoarele funcii, cu semnificaiile aferent precizate :
Urmtorul exemplu comentat este destul de edificator asupra modului de utilizare a acestor
funcii, fr a mai fi necesar o prezentare a sintaxei lor de baz:
<?php
$columns = mysql_num_fields($fields);
echo <br>;
?>
Efectul rulrii scriptului anterior const n afiarea, pe coloan, a numelui, tipului i lungimii
fiecrui cmp al unei anumite tabele a unei baze de date MySQL, tabel referit printr-un identificator
($fields) n funciile specializate folosite.
Observaie: Fiecare din funciile returnnd numele, tipul i lungimea unei coloane a tabelei are ca
argumente un identificator de pointare la tabel ($fields), respectiv un index de coloan (pornind de la
zero) reprezentnd poziia coloanei referite (aa cum se poate observa i n scriptul anterior prezentat).
O numrare a liniilor tabelei care ndeplinesc o anumit condiie impus, se poate face i folosind
funcia SQL COUNT:
$row = mysql_fetch_row($query);
12 Tehnologii WEB Cursul 11 + 12
echo $row[0];
sau
$row = mysql_fetch_array($query);
echo $row[numar];
De remarcat faptul c, dei interogarea returneaz o singur valoare (un scalar), funcia de
extragere (fetch) returneaz tot un ir, este adevrat cu un singur element, iar referirea lui se va face n
mod adecvat referirii unui element de ir.
Rezumnd, principalele funcii folosite pentru lucrul cu baze de date MySQL sunt urmtoarele:
Realizarea unei interogri a unei tabele aferente unei baze de date, implic obligatoriu
transmiterea unor parametrii dup care se face cutarea. Exemplul anterior de interogare, fr
parametrii, este pur didactic (doar pentru exemplificarea modului de utilizare a funciilor PHP de operare
cu o baz de date). n realitate, orice interogare pe Web necesit anumii parametri de intrare.
Acest prim exemplu presupune o interogare a unei tabele a bazei de date, cu afiarea liniilor
gsite, filtrarea fcndu-se funcie de valorile introduse pentru un nume i o varsta (cmpuri ale
tabelei), ambele furnizate obligatoriu (ca parametrii de intrare i implicit de interogare).
Un prim fiier script HTML necesar (fig.1.3), realizeaz doar o preluare a acestor parametrii (de
la tastatur) i o "pasare" a lor (printr-un form nsoit de o aciune "POST") spre pagina propriu-zis de
interogare (scriptul PHP), plasat la adresa local http://localhost/ex2.php:
<html>
<title>Interogare cu parametrii</title>
<center>
<head><H1>Interogare cu parametrii</H1></head>
</center>
<td>
Tehnologii WEB Cursul 11 + 12 13
</td>
</table>
</form> </html>
Elementul esenial al fiierului HTML anterior, este obiectul HTML <form action=POST ,
avnd rolul de preluare de la tastatur a unor valori pentru cei doi parametrii (nume i varsta simpl
coinciden faptul c numele lor este acelai cu al unor cmpuri ale tabelei bazei de date) i pasarea lor
spre scriptul PHP localizat de linia:
action="http://localhost/ex2.php"
ntreg coninutul formularului <form > </form> a fost plasat n celula unei tabele (avnd
culoarea de background argintiu), fr a fi obligatorie aceast afiare tabelat (mai reuit ns din
punct de vedere al designului):
<td>
. . .
</td>
</table>
Totui, nucleul esenialul a acestui fiier HTML este urmtorul (putndu-se reduce doar la
secvena urmtoare):
</form>
Se pot remarca:
- cele dou tag-uri <input type="text" care creeaz dou casete pentru preluarea datelor (fig.1.3) n
cele dou variabile-parametru, nume i varsta;
- tag-ul <input type="SUBMIT" care genereaz un buton, la apsarea cruia valorile celor doi
parametrii sunt trimise ctre fiierul PHP localizat prin adresa: action="http://localhost/ex2.php";
- tag-ul <input type="RESET" care reseteaz valorile parametrilor i anuleaz transmiterea lor;
Observaie: Referirea ntr-un script a unei alte pagini WEB (HTML PHP, etc.) se poate face, fie prin
adresare direct (caz n care se precizeaz inclusiv calea complet spre acea pagin, spre exemplu
"http://localhost/ex2.php"), fie prin adresare relativ (fr a mai fi necesar calea complet spre pagina
referit). n acest ultim caz, dac scriptul apelant i scriptul apelat/referit sunt n acelai director/locaie,
ajunge precizarea doar a numelui paginii apelate ("ex2.php").
14 Tehnologii WEB Cursul 11 + 12
Codul PHP al fiierul realiznd conectarea la baza de date i interogarea tabelei table1 a bazei de
date MySQL persoane este urmtorul (acest fiier primete de la scriptul HTML anterior prezentat,
valorile parametrilor nume=valoare_tastata1, respectiv varsta= valoare_tastata2):
<?php
echo"<br><br>";
//Preluarea cu metoda POST a parametrilor transmii de c tre fiierul //HTML spre scriptul
PHP (parametrul register_globals=ON n php.ini)
$nume=$_POST[nume];
$varsta=$_POST[varsta];
// Interogare cu parametri
$nr_inreg=@mysql_num_rows($query);
if ($nr_inreg>0){
echo "<center>";
echo"</center>";
echo"<tr bgcolor=silver>";
echo"<th>Nume</th>";
echo"<th>Varsta</th>";
echo"<th>Localitate</th>";
Tehnologii WEB Cursul 11 + 12 15
echo"</tr>";
while($row=mysql_fetch_row($query)){
echo"<tr>";
echo "<td>$value</td>";
echo"</tr>";
echo"</table>";
else{
echo"<center>";
echo"</center>"; }
mysql_close();
?>
Rezultatul apelului acestui script cu parametri, i implicit al interogrii, este prezentat n fig.1.4.
b) Parolarea accesului
n scriptul anterior, accesul la serverul MySQL se face prin precizarea explicit a parolei direct n
cod. n unele situaii, din motive de restricionare a accesului, acest lucru nu este ns de dorit.
Parolarea accesului, n exemplul de fa, se poate face prin transmiterea parolei ca un parametru de
intrare, introdus de la tastatur odat cu ceilali parametrii (afereni interogrii - fig. 1.5).
<br>
<h4>Date de interogare:</h4><br>
n acest caz, suplimentar n scriptul PHP propriu-zis pot apare urmtoarele completri de cod
(verificnd reuita sau nereuita conectrii la serverul MySQL):
<?php
$parola=$_POST[parola];
$nume=$_POST[nume];
$varsta=$_POST[varsta];
$con = mysql_connect("localhost","root",$parola);
$var=mysql_error();
echo "<br><h3>".$var."</h3><br>";
</h1>";
else {. . . . . .
// continuare program
. . . . . .
?>
Dac serverul MySQL dispune de un cont utilizator fr nume de user i password, comanda
mysql_connect (din exemplul anterior) este de forma:
n exemplul anterior, fiind vorba de o conexiune securizat (printr-o parol) la un server de baze
de date MySQL, parola user-ului utilizat este stocat implicit criptat pe server (n tabela user a bazei de
date speciale mysql). Dac ns, aplicaia Web n sine implic conturi de acces direct la ea (i nu la
serverul de baze de date protejat implicit prin useri / parole propri), este necesar definirea unor useri
proprii aplicaiei, mpreun cu parolele lor aferente (stocate ntr-o tabel a aplicaiei creat special
pentru acest scop). Fiind vorba de stocarea unor informaii vitale pentru securizarea aplicaiei (parole
de acces), n mod normal acestea sunt salvate criptat n baza de date. Deci, la crearea acestor conturi
de acces user/parol, anterior salvrii lor n baza de date, parolele trebuie generate criptat. PHP pune la
dispoziie mai multe funcii destinate criptrii informaiei (md5, hash, sha1, etc.), iar pentru
exemplificare n paragraful de fa se prezint un caz de utilizare al funciei md5. n primul rnd
trebuie generat valoare criptat a parolei dorite:
$parola=clar33;
$parola=md5($parola);
neputndu-se vorbi de decriptare n cazul algoritmului md5. Paii de parcurs pentru verificarea unei
parole ar fi:
if ($criptat==md5($_POST[citita]) {cod}
Singura modificare din script apare n linia de specificare a interogrii SQL efective (de remarcat
folosirea n comanda de interogare a ghilimelelor pentru ncadrarea variabilelor al cror coninut este
interpretat ca un string/ir de caractere, respectiv lipsa acestor ghilimele n cazul variabelelor coninnd
valori numerice):
- dac n caseta INPUT corespunzatoare numelui nu se introduce nici o valoare, iar n cea
corespunzatoare vrstei se introduce valoarea 0, vor fi afiate toate nregistrrile bazei de date;
- dac se introduce un ir de caractere pentru nume, iar dac n caseta INPUT corespunzatoare
varstei se intoduce valoarea 0, se vor afia toate nregistrrile pentru care numele sunt superioare
alfabetic primului caracter din irul de caractere introdus;
n acest caz este necesar urmtoarea modificare n script-ul PHP, n linia de interogare efectiv
($query=mysql_query()), folosindu-se urmtoarea secven:
// dac s-a introdus doar un nume (operatorul !== nseamn diferit de)
Analiznd scriptul PHP precedent, se poate constata c, pentru 2 parametri de cutare, numrul
de combinaii ale string-lui implementnd comanda SQL de interogare, presupunnd o completare
parial a criteriilor de filtrare (unele casete neconinnd date), este de 22 4 , iar prin extrapolare,
pentru 3 parametri 2 8 i aa mai departe crescnd exponenial (pentru n parametri ajungnd la 2
3 n
). Structura de cod anterioar nu prezint o alternativ viabil pentru cazul unui numr mare de
parametri (INPUT), considerai ca date de intrare dup care se face interogarea tabelei, n contextul n
care doar o parte dintre ei sunt cunoscui/folosii (i deci, aleatoriu, o serie de casete de intrare nu vor
conine date).
Soluia n acest caz o constituie construcia dinamic a unui singur string generalizat de
interogare, valabil pentru n parametri afereni clauzei WHERE. Tehnica propus implic o verificare
succesiv a coninutului fiecarei casete (parametru) de intrare, respectiv concatenarea sau nu, la un
string iniial SQL, a cte unei condiii suplimentare de filtrare. Astfel, string-ul SQL se genereaz
interactiv, dinamic, crescnd prin concatenri succesive de condiii suplimentare (substring-uri), iar
numrul de verificri ale completrii cu date pentru n casete de intrare se reduce rezonabil fa de
soluia anterioar, scznd la 2n la n.
Un exemplu concret este prezentat pentru cazul a 4 parametri de intrare i interogare ($p1, $p2,
$p3, $p4), mai mult sau mai puin cunoscui, folosii pentru condiionarea interogrii unei tabele TEST
cu 4 coloane (prima de tip numeric, respectiv celelalte de tip caracter). n faza de testare a scriptului se
recomand o afiare a string-ului de interogare construit dinamic, pentru a permite o inspectare vizual
a lui n vedere detectarii unor eventuale erori de sintax (spaii lips, spre exemplu). Secvena de cod
implementnd o posibil contrucie dinamic a string-ului comenzii SQL este urmtoarea:
if (!empty($p1))
if (!empty($p2))
if (!empty($p3))
if (!empty($p4))
$interogare=$interogare."c1>0";
Prima linie genereaz suportul de baz al comenzii SQL, la acest string fiind concatenate dinamic
construcii suplimentare. Pentru fiecare parametru coninnd date, un substring suplimentar este
concatenat string-ului de baz. O problem de finalizare a construciei string-ului de interogare apare n
situaia n care nici un parametru nu conine date, iar soluia adoptat const n finalizarea tot timpul a
string-ului SQL prin concatenarea unei condiii statice, permanent ndeplinite (n cazul de fa, c1>0,
presupunnd coloana c1 cheie primar, spre exemplu). Un asemenea artificiu rezolv i problema
lipirii de operatorul logic AND (ncheind fiecare substring condiional aferent unui parametru non-vid),
a unei condiii necesare doar sintactic, dar fr nici o influen asupra rezultatului interogrii. Iat i
cteva exemple de string-uri de interogare generate astfel, n contextul exemplului considerat:
20 Tehnologii WEB Cursul 11 + 12
select * from test where c1=2 and c2=ion and c3=ing and c4=da and c1>0
Evident exist i alte soluii de construcie dinamic a string-ului de interogare, dar din punct de
vedere al minimizri numrului de verificri efectuate prin secvene IF, algoritmul propus este optim.
Astfel, o soluie alternativ poate aborda problema printr-o construcie iniial a stringului integrnd din
start condiia permanent ndeplinit (doar din considerente de generare a unei construcii SQL valide
sintactic, indiferent de numrul de parametrii folosii pentru interogare), codul PHP fiind urmtorul:
if (!empty($p1))
if (!empty($p2))
if (!empty($p3))
if (!empty($p4))
Singurul dezavantaj al soluiilor de genul celor anterior prezentate const n faptul c, asupra
tabelei bazei de date se aplic o clauz suplimentar de filtrare, fr nici o valoare practic (fiind
permanent ndeplinit) i avnd drept unic scop rezolvarea ct mai simpl a unei probleme de validitate
sintatic a comenzii SQL generate dinamic. Dar simplitatea codul PHP necesar face s merite acest
compromis.
O situaie special de interogare o constituie i cea n care, interogarea se face dup o cheie mai
lung, spre exemplu, un set de cuvinte, grupate toate ntr-un acelai cmp/caset i transmise (toate)
ca un singur parametru. Un formular de tip FORM poate conine n acest caz o caset INPUT
(avnd atributul type=text, implicit de altfel), fie o caset de tip TEXTAREA. Pentru exemplificare, n
cadrul formularului urmtor, o caset de tip TEXTAREA permite scrierea unei informaii pe 3 rnduri i
10 coloane (fiind vorba de o formatare a modului de afiare pe ecran a informaiei, i nu de o limitare a
cantitii de informaie):
</form>
Evident c utilizarea unei casete TEXTAREA este necesar doar n situaia unui volum mare de
informatie (mai multe linii de text, spre exemplu). Dac nu este vorba de o astfel de situaie, se poate
folosi o simpl caset INPUT, permind scrierea pe o singur linie.
Transferul valorii unui astfel de parametru citit ntr-o caset TEXTAREA ridic cteva probleme.
Acestea se datoreaz faptului c, coninutul parametrului poate include spaii, coduri de sfrit de linie
Tehnologii WEB Cursul 11 + 12 21
sau alte caractere speciale, care nu sunt permise ntr-un string primit ca parametru de ctre un script.
Aceste caractere speciale trebuie convertite n coduri speciale specifice parametrizrii apelului unei
pagini Web.
Se consider urmtorul exemplu de apel (printr-un link) al unui script intitulat newpage.php,
care primete ca parametru de intrare coninutul variabilei $detalii, al crei coninut a fost completat
printr-un formular de genul celui anterior prezentat (coninnd TEXTAREA). Se presupune c variabila
$detalii conine valoarea Exemplu de folosire a tag-ului Div, incluznd mai multe spaii, care nu sunt
permise ntr-un string de interogare, trimis explicit ca parametru de intrare spre un script, prin
intermediul unui link. Convertirea acestor spaii ntr-un cod special acceptat ntr-un astfel de apel,
implic folosirea unei funcii PHP speciale, i anume urlencode(). Iat codul aferent unui mod corect de
apel cu transfer al unui astfel de parametru (cod inclus n cadrul script-ului unu.php, care primete
parametrul de intrare $detalii de la formularul anterior):
O legatura parametrizata</a>
Se poate observa o includere de cod PHP n mijlocul unei etichete HTML. O form i mai simpl
de apelare, similar ca efect cu cea anterioar, este urmtoarea:
<a href="newpage.php?detalii=<?=urlencode($detalii)?>">
n ambele cazuri, funcia urlencode() preia caracterele speciale (spre exemplu, spaiile) dintr-un
string pasat ca parametru i le convertete n coduri speciale necesare i acceptate n cadrul unui apel
parametrizat al unei pagini Web. Pentru cazul unei valori particulare: $detalii=Exemplu de folosire a
tag-ului Div, aceast funcie convertete acest coninut ntr-un string de forma Exemplu+de+
folosire+a+tag-ului+Div, acceptat ca parametru valid. Dup apelul scriptului cu parametrul astfel
codat, PHP realizeaz automat conversia invers (n cadrul scriptului apelat -newpage.php-), la valoarea
iniiala, n momentul utilizrii variabilei $detalii.
Observaie: Funcia urlencode() se folosete doar n cadrul unei pasri de parametrii direct printr-un
hyperlink explicit (href, evident folosind metoda GET), nefiind necesar utilizarea ei explicit dac
transmiterea parametrilor se face prin intermediul unui formular FORM (codarea fcndu-se n acest caz
automat). Cu alte cuvinte, un formular FORM interpreteaz adecvat un string coninnd caractere
speciale sau spaii i-l transmite mai departe ca parametru, n formatul adecvat (nefiind nevoie se
utilizarea explicit a funciilor urlencode sau urldecode)
n situaia n care se dorete afiarea unui volum compact mai mare de informaii (preluat,
spre exemplu, dintr-un cmp de tip TEXT al unei tabele MySQL), este necesar uneori o formatare a
acesteia. Figura 1.7 prezint afiarea unei informaii neformatate (liniile ntinzndu-se pe toat limea
ecranului, iar dac ar depi-o, ar apare bara de scroll orizontal pentru fereastr).
O soluie simpl de rezolvare presupune utilizarea etichetei DIV cu parametrii afereni setai
corespunztor. Astfel, dac n celulele aferente coloanei detalii a tabelului din figura 1.7 se folosete o
construcie de genul:
rezultatul formatrii este prezentat n figura 1.8, observndu-se o mbuntaire evident a design-ului.
i n cazul operaiei de adugare a unei noi linii ntr-o tablel a unei baze de date MySQL este
necesar utilizarea unui fiier HTML pentru transmiterea spre scriptul PHP propriu-zis a valorilor
corespunztoare liniei care va fi adugat n tabel:
<html>
<title>Adaugare</title>
<center><head><H1>Adaugare</H1></head></center>
<td>
//  : realizeaz introducerea unor spaii suplimentare de formatare a //afi rii tag-ul
<strong> bold-uiete textul ncadrat
<strong>Nr:</strong>  
<strong>Nume:</strong>
 
<strong>Varsta:</strong>
 
<strong>Localitate:</strong>  
<center>
</center>
</td>
</table>
</form>
</html>
Acest fiier HTML permite (n cazul de fa) transmiterea valorilor a patru parametrii (nr, nume,
varsta, localitate - cu valori introduse de la tastatur) afereni datelor necesare construciei unei noi linii
care va fi adugat n tabela bazei de date (s-a presupus existena unei tabele similare cu cea folosit n
exemplele anterioare, dar avnd n plus cmpul NR, cu valori unice pentru fiecare articol, deci definit ca
PRIMARY KEY).
Scriptul PHP spre care sunt transmise valorile parametrilor i care va realiza adugarea propriu-
zis n tabela bazei de date are urmtorul cod:
$nr=$_POST[nr];
$nume=$_POST[nume];
$varsta=$_POST[varsta];
$localitate=$_POST[localitate];
// ad ugare parametrizat
$nr_inreg=@mysql_num_rows($query);
if ($nr_inreg>0){
echo "<center>";
echo"</center>";
echo"<tr bgcolor=silver>";
$var=mysql_field_name($query,$i);
echo"</tr>";
while($row=mysql_fetch_row($query)){
echo"<tr>";
echo "<td>$value</td>";
echo"</tr>";
echo"</table>";
else{
echo"<center>";
echo"</center>";
mysql_close();
?>
Rezultatul vizibil pe ecran, produs n urma execuiei comenzii SQL de afiare SELECT este
prezentat n fig. 1.9. Comanda INSERT nu genereaz un rezultat vizibil pe ecran, mai precis nu va
returna eventuale date care ar putea fi afiate, cel mult aprnd un mesaj de eroare dac operaia de
adugare nu poate fi executat.
$query=mysql_query($com); //interogare
Soluia este recomandat mai ales n cazul construciei dinamice a string-ului de interogare,
permind o eventual afiare i inspectare vizual a acestuia.
tergerea unor articole/linii dintr-o tabel a unei baze de date (tergere presupus a fi cu o
confirmare prealabil) implic dou operaii:
- realizarea unei interogri a bazei de date (pe baza unor parametri de intrare pentru interogare) i
afiarea nregistrrilor gsite, care vor fi terse,
- respectiv, confirmarea (sau anularea) tergerii efective, pe baza informaiilor anterior afiate n urma
interogrii.
Fiierul HTML (ex4.html) pentru realizarea unei interogri a tabelei n vederea tergerii
(interogare fcut cu un singur parametru -nume- introdus de la tastatur) este detaliat n listingul
urmtor (avnd rezultatul prezentat n fig. 1.10):
26 Tehnologii WEB Cursul 11 + 12
<html>
<title>Stergere</title>
<center> <head><H1>Stergere</H1></head></center>
<td>
<center>
</center>
</td>
</table>
</form>
</html>
Fiierul PHP pentru interogarea prealabil tergerii (cu rolul: gsete i vizualizeaz ce se
dorete a fi ters), este prezentat n continuare (acest fiier primind ca parametru de intrare valoarea
pasat spre el de ctre scriptul HTML anterior):
<?php
$nume=$_POST[nume];
$nr_inreg=@mysql_num_rows($query);
if ($nr_inreg>0){
echo "<center>";
echo"</center>";
$coln=mysql_num_fields($query);
echo"<tr bgcolor=silver>";
$var=mysql_field_name($query,$i);
echo"</tr>";
mysql_fetch_row($query)){
" <td>$nr</td>\n".
" <td>$nume</td>\n".
" <td>$varsta</td>\n".
" <td>$localitate</td>\n".
" </tr>\n");
echo"</table>";
// se face c utarea)
action="http://localhost/ex44.php">;
28 Tehnologii WEB Cursul 11 + 12
value=.$_POST[nume].>;
">;
echo <br>;
echo </form>;
Renunt si revin...</a>;
else
mysql_close();
?>
Pentru afisarea rezultatelor obinute n urma interogarii, anterior s-a folosit comanda PHP list(
), care permite asignarea de valori unei liste de variabile (asemntoare practic unui ir), printr-o
singur operaie, valorile asignate fiind cele extrase cu ajutorul functiei mysql_fetch_row(). Dup cum
se poate vedea i n fig. 1.11, fiierul PHP anterior prezentat, realizeaz, ntr-o prim etap, o simpl
interogare a tabelei bazei de date, cu afiarea rezultatelor pe ecran.
" >;
echo <br>;
echo </form>;
Fiierul pentru tergere efectiv are n acest caz o structur extrem de simpl:
<?php
// tergere efectiv
mysql_close ();
?>
Modul de modificare a unei nregistrri/linii dintr-o tabel a unei baze de date (cu vizualizarea
liniei care se modific) presupune urmtoarele etape:
<html>
<td>
</td>
30 Tehnologii WEB Cursul 11 + 12
</table>
</form>
</html>
<?php
$nume=$_POST[nume];
$varsta=$_POST[varsta];
$nr_inreg=@mysql_num_rows($query);
if ($nr_inreg>0){
echo "<center>";
echo"</center>";
echo"<tr bgcolor=silver>";
$coln=mysql_num_fields($query);
$var=mysql_field_name($query,$i);
Tehnologii WEB Cursul 11 + 12 31
echo"</tr>";
echo"<tr>";
$nr_val++;
$sir[$nr_val]=$value;
echo "</tr>";
echo "</table>";
// Pentru mai multe nregistr ri g site, modific rile efectuate se aplic //asupra tuturor
liniilor care corespund c ut rii
value=.$sir[1].>;
echo <br>;
echo </form>;
else
mysql_close();
?>
Rezultatul fiierului script PHP anterior, este prezentat n figura 1.13. Ceea ce aduce nou acest
script PHP, pe lng o simpl interogare (cutare cu SELECT) i afiare a articolelor gsite pe ecran
(tabelat), const ntr-o afiare n casete editabile a datelor gsite, permindu-se astfel i o modificare a
lor (vezi fig. 1.13). Cum se realizeaz acest lucru?
n primul rnd, n bucla foreach() ncuibat n bucla while(), apare o secven de genul:
$nr_val++;
$sir[$nr_val]=$value;
Spre exemplu, n cazul de fa (vezi fig. 1.13) s-a gsit un singur articol cu 4 elemente, acestea
memorndu-se ntr-un ir avnd 4 elemente (cu indicii 1,2,3 i 4, deoarece contorul $nr_val a fost
iniializat pe 0, dar este incrementat nainte de folosirea lui ca indice al unui element al irului $sir).
value=.$sir[1].>;
echo <br>;
echo </form>;
Primele tag-uri <INPUT type=hidden permit transferul spre fiierul script PHP care realizeaz
modificarea efectiv a parametrilor iniiali de interogare (memorai n primele dou elemente ale array-
ului $sir), acest lucru fiind necesar deoarece aceti parametrii pot fi alterai n urma unei eventuale
modificri permise n continuare, dup cum se va vedea.
Urmtoarele 4 tag-uri <INPUT type=text permit afiarea (n casete care permit att operaii
de citire ct i de scriere) i alterarea (modificarea) acestor patru parametrii, care vor substitui
informaia existent n cmpurile articolului localizat (cu parametrii transmii din primele dou INPUT-uri
invizibile utilizatorului). Cu alte cuvinte, aceast secvena transfer spre script-ul PHP de modificare
efectiv ase parametrii:
<?php
$nr1=$_POST[nr1];
$nume1=$_POST[nume1];
$varsta1=$_POST[varsta1];
$localitate1=$_POST[localitate1];
$nume2=$_POST[nume2];
$varsta2=$_POST[varsta2];
// Modificare efectiv
$var=mysql_error();
echo $var;
mysql_close ();
?>
Se consider baza de date MySQL angajati, coninnd tabela salarii cu urmatoarele cmpuri:
-nume varchar(14);
-salar_brut float;
-impozit float;
-salar_net float;
- folosete un prim fiier HTML (exempluFinal.html) prin intermediul cruia se preiau de la tastatura id-
ul, numele i salarul _brut al unui angajat, i sunt transmise valorile acestor parametri catre un script
PHP (exempluFinal.php). n cadrul scriptului PHP se efectuez urmatoarele operatii:
- realizarea unui update pe tabel pentru calculul impozitului i a salariului net al angajailor cu
urmtoarele formule:
- impozit=0.16*salar_brut;
- salar_net=salar_brut - impozit;
Tabela MySQL (considerat a fi inclus n baza de date angajati) a fost creat folosind comanda:
salar_brut FLOAT,
impozit FLOAT,
salar_net FLOAT);
Tehnologii WEB Cursul 11 + 12 35
<html>
<form method="POST"
action="http://localhost/exempluFinal.php">
<td>
size="4"><br>
</td>
</table>
</form>
</html>
<?php
baza de date);
echo<br><br>;
$id=$_POST['id '];
36 Tehnologii WEB Cursul 11 + 12
$nume=$_POST['nume '];
$salar_brut=$_POST['salar_brut '];
$nr_inreg=@mysql_num_rows($query);
if ($nr_inreg>0){
echo <center>;
echo</center>;
// cap tabel
$coln=mysql_num_fields($query);
echo<tr bgcolor=silver>;
$var=mysql_field_name($query,$i);
echo</tr>;
// afiare date
while($row=mysql_fetch_row($query)){
echo<tr>;
echo <td>$value</td>;
echo</tr>;
echo</table>;
else{
Tehnologii WEB Cursul 11 + 12 37
echo<center>;
echo</center>;
mysql_close(); ?>
Rolul acestui exemplu este de a arta c un fiier script PHP poate conine oricte comenzi SQL
sunt necesare pentru ndeplinirea funcionalitilor dorite. Se poate observa de asemenea c, comenzi
precum UPDATE (sau DELETE) pot fi uneori folosite pentru realizarea unor modificri/actualizri ntr-o
tabel, fr nici o confirmare prealabil din partea utilizatorului.
Observaie: Pentru a determina numrul de linii returnate de o interogare SELECT se poate folosi funcia
mysql_num_rows. Dac se dorete determinarea numarului de linii afectate de o comand INSERT,
DELETE sau UPDATE, funcia funcia corespunztoare este mysql_affected_rows.
<?php
// configurare MIME
header("Content-type: image/jpg");
$result = mysql_query($query);
$var=mysql_fetch_row($result);
$var1=$var[0];
?>
Esenial n acest caz este linia prin care este setat specificaia MIME (Multipurpose Internet
Mail Extension) pentru afiarea unei imagine JPG. Aceasta nsemn c orice ieire spre browser, va fi
interpretat ca i coninut al unei imagini jpg, i afiat corespunztor. Dup o astfel de setare, realizat
la nceputul scriptului, nu este permis nici o alt ieire (de un alt tip) spre afiare la browser. Exemplul
prezentat presupune existena unui cmp imagine de tip BLOB (sau LONGBLOB), ntr-o tabel referit
n program.
Afiarea imaginii extrase din baza de date, se face printr-o simpl directare spre browser a
coninutului variabilei (print), n care este salvat (n format binary) imaginea propriu-zis.
n cazul (cel mai probabil) al unei interogri cu parametri, linia de interogare se modific astfel:
unde, $id este parametrul dup care se face interogarea, iar id este un cmp identificator din
tabel.
n cazul de fa, valoarea parametrului $id se transmite, fie printr-un formular FORM, fie direct
din linia de comand a browser-ului, printr-un apel cu parametru, de forma (spre exemplu, pentru o
cale dat i un nume al fiierului script PHP imag1.php):
http://localhost/imag1.php?id=1;
Observaie: Pentru a putea extrage date dintr-o coloan de tip BLOB, aceasta trebuie umplut anterior
cu date binare. n MySQL inserarea de date BLOB ntr-o linie nou se poate face fie direct printr-o
comand INSERT implicnd utilizarea funciei speciale MySQL LOAD_FILE, fie printr-o comand iniial
INSERT care creaz linia nou, eventual cu date pentru celelalte coloane (mai puin cea de tip BLOB),
urmat de o comand UPDATE setnd strict coloana BLOB (folosind de asemenea funcia special
MySQL LOAD_FILE). Pentru cazul de fa, cele dou cazuri rezolvnd problema adugrii unei linii noi
coninnd informaie BLOB (o imagine) n coloana imag a unei tabele tabela2 sunt punctate n
continuare:
sau
Un al doilea exemplu script PHP, folosete un fiier imagine intermediar (temp1.jpg) n care este
extras coninutul binar al cmpului BLOB:
<?php
$result = mysql_query($query);
Tehnologii WEB Cursul 11 + 12 39
if (mysql_num_rows()>0)
$var=mysql_fetch_row($result);
$var1=$var[0];
$fp=fopen("temp1.jpg","wb");
// Scrie n fiier
fwrite($fp,$var1);
fclose($fp);
else {
} ?>
n acest exemplu, se verific totodat existena unei nregistrri care corespunde interogrii
realizate (structura if). Dac se gsete o astfel de nregistrare, se salveaz coninutul cmpului BLOB
ntr-un fiier (cu extensia jpg), i se afieaz practic imaginea stocat de acest fiier. Pentru o nou
interogare reuit, acest fiier va fi suprascris. n caz de interogare nereuit, fiierul intermediar va fi
ters (pentru a nu se afia ultima imagine gsit).
Verificarea gsirii unei nregistrri care corespunde condiiei de interogare, este asigurat de
funcia: mysql_num_rows(). Aceast funcie returneaz numrul de linii gsite de o comand SQL
SELECT.
Numrul funciilor PHP pentru lucrul cu baze de date MySQL este mult mai mare. Prin exemplele
prezentate i prin funciile specifice exemplificate, s-a dorit doar o simpl introducere n problematica
lucrului cu astfel de baze de date. Pentru mai multe detalii, resursele bibliografice n domeniu sunt mai
mult dect suficiente, n special cele oferite pe Internet.
n continuare este prezentat modul n care din PHP poate fi realizat un apel de procedur stocat
MySQL, aceasta asigurnd la finalizarea execuiei script-ului PHP caracterul tranzacional al execuiei
unor seturi de comenzi SQL de actualizare a datelor din baza de date. Ca i alte sisteme de gestiune a
bazelor de date, MySQL ofer suport pentru procedurile stocate, evident cu cteva aspecte specifice lui.
Pentru exemplificare, fie o tabel TESTUL, avnd 3 coloane de tip INT (c1, c2, c3). Se consider
o procedur stocat (numite TESTUL1), care adaug parametrizat o linie nou n tabel (completnd cu
date doar coloanele c1 i c2), apoi pentru linia nou introdus calculeaz o valoare pentru coloana c3. La
crearea procedurii stocate, deoarece n MySQL caracterul ; (punct i virgul) semnific ncheiere unei
linii de cod (delimitator de linie), un alt caracter sau secven de caractere trebuie definit i utilizat
pentru marcarea sfritului definiiei procedurii stocate (urmnd ca apoi s se revin la caracterul
consacrat ;). Corpul procedurii astfel create (inclusiv comanda de tergere prealabil a ei dac deja
exist, respectiv definiiile delimitatorilor necesari // i ;) este urmtorul
Delimiter //
Begin
End;
//
Delimiter;
Un apel al procedurii stocate (din cadrul clientului textual MySQL console), urmat de o afiare a
tabelei pentru a verifica efectul ei, este prezentat n continuare:
Call test1(101,101);
Pentru apelul din PHP al procedurii stocate (scriptul Web jucnd rolul clientul apelant) se poate
folosi secvena urmtoare de cod (presupunnd o conexiune valid):
$var=100;
Observaie: O soluie simpl i comoda pentru a nu mai scrie explicit i repetat pentru fiecare pagin
script a unei aplicatii Web a setului de comenzi de conectare la serverul de baze de date, respectiv
selecie a bazei de date, o constituie crearea unui script distinct de conectare, respectiv utilizarea
comenzii PHP include() referind acest script de conectare. Fie scriptul de conectare conectare.php:
<?php $server=localhost;
$user=root;
$passw=parola;
$db=baza;
n fiecare script al aplicaiei (site-ului) Web care necesit o conectare la serverul MySQL, nainte
de realizarea unor operaii SQL efective de interogare, se insereaz linia urmtoare (asigurnd
conectarea la serverul de baze de date):
include("conectare.php ");
Una dintre problemele de securitate ale aplicaiilor Web cu baze de date o constituie aa numita
problem a injectrii SQL (SQL Injection). Tehnica SQL injection const ntr-o integrare (interactiv, prin
datele de intrare) a unor poriuni suplimentare de cod SQL care permit o ataare la interogrile SQL a
unor condiii permanent ndeplinite, anulnd astfel filtrele condiionale de securizare. [20] Astfel,
anumite combinaii de condiii ataate string-ului SQL de interogare pot s conduc la o nou comand
SQL valid, care anuleaz toate restriciile viznd accesul la date, sau chiar conduc la crearea i
trimiterea spre serverul de baze de date a unor comenzi SQL cu cert potenial distructiv. Ideea de baz
a acestei tehnici const n faptul c, n cadrul codului script, pe baza datelor de intrare (INPUT), pot fi
create string-uri de comenzi SQL cu rol nedorit, maliios, pasate spre serverul de baze de date i
executate necondiionat de acesta. Aceste secvene ataate codului SQL generat prin concatenri de
string-uri, anuleaz condiiile de filtrare ale comenzii i transform comanda SQL ntr-o nou comand,
avnd o cu totul alt aciune dect cea dorit.
Din fericire, la ora actual interpretoarele PHP de versiuni recente sunt setate (prin intermediul
unor valori adecvate ale variabilelor interne de stare din fiierul de configurare php.ini) astfel nct s
resping din start aceste atacuri, interpretnd anumite forme de string-uri ca secvene maliioase i
genernd. secvene SQL adecvate, anulndu-le astfel potenialul distructiv.
Unul dintre principiile de baz ale unei injectri SQL poate fi descris succint de urmtorul mod de
construcie al string-ului de interogare:
Pentru o nelegere a acestui tip de atac, se considera o exemplificare concret. Fie tabelul TEST
(MySQL) cu structura i datele descrise n figura 1.16.
De asemenea, se consider o aplicaie WEB care permite interogarea dup coloanele CNP i
NUME, permind afiarea linie corespunztoare datelor introduse, interesnd afiarea informaiei
aferente coloanei PIN_SECRET. Aplicaia necesit un formular HTML pentru introducerea datelor de
interogare (CNP i NUME), respectiv un script PHP de interogare efectiv:
<?php
$query1=mysql_connect(localhost,root,);
mysql_select_db(test);
$param1=$_POST[param1];
42 Tehnologii WEB Cursul 11 + 12
$param2=$_POST[param2];
echo $query;
$interoghez=mysql_query($query);
print ("<tr>");
print ("</tr>");
{ echo" <tr>\n";
echo "<td>$value</td>";
echo "</tr>";
} ?>
magic_quotes_gpc = On
n figurile 1.18.a i 1.18.b este exemplificat cazul n care, dei printr-o injectare SQL este
construit un string de interogare maliios (care impune o condiie permanent ndeplinit), protecia
implicit a interpretorului PHP nu ofer acces la datele tabelei. Secvena de injectare SQL const n
introducerea n a doua caset (INPUT) a string-ului OR 1 (neavnd importan valoarea introdus n
prima caset), astfel nct secvena de interogare pasat spre serverul de baze de date devine:
De asemenea, n figurile 1.18.c i 1.18.d este considerat o alt form de injectare SQL, ns
protecia implicit PHP i face din nou datoria, mpiedicnd accesul la date. Astfel, secvena SQL
injectat i deci alterat prin introducere n ultim caset a secvenei de cod condiional OR=, devine:
n ambele cazuri se poate observa caracterul \ , precednd de multe ori caracterul ghilimea
(prezena lui fiind un prim semn al unui posibil atac) i genernd astfel o interogare SQL al crei
potenial maliios este practic anulat (noua condiie ataat nu este ndeplinit).
Acelai scenariu este reluat considernd dezactivat protecia intern PHP (situaie implicit la
versiuni mai vechi PHP):
magic_quotes_gpc = Off
Rezultatele sunt prezentate n figurile 1.19.a i 1.19.b, respectiv 1.19.c i 1.19.d. String-urile de
interogare generate n urma injeciei SQL sunt comenzi SQL perfect valide, avnd condiia de filtrare
(clauza WHERE) adevrat tot timpul:
Mai mult, se observ c n urma injectrii SQL, ntregul coninut al tabelei TEST este accesibil,
fiind practic depit bariera de protecie implicnd cunoaterea a dou informaii (CNP i NUME) pentru
a avea acces la informaia protejat (PIN_SECRET). Practic ntreaga informaie (inclusiv CNP i NUME)
din tabel este accesibil, cu consecine imprevizibile .
Tehnologii WEB Cursul 11 + 12 45
$param1=mysql_real_escape_string($param1);
$param2=mysql_real_escape_string($param2);
plasate nainte de construcia string-ului de interogare $query folosind cei doi parametri.
Evident, dac sunt mai muli parametri de interogare, asupra fiecruia se aplic funcia
mysql_real_escape_string, anterior interogrii (efectul acestei funcii fiind practic similar celui obinut
prin setarea adecvat pe ON a parametrului magic_quotes_gpc din fiierul de configurare php.ini).
Paragraful de fa a tratat doar problematica unui atac Web prin tehnica injectrii SQL, inta
acestuia fiind baza de date aflat n spatele aplicaiei, codul script propriu-zis nefiind cel direct vizat.
Exist i atacuri avnd o astfel de int, exploatnd n general bree generate prin configurarea
inadecvat a serverului de Web. Totui, n contextul dinamicii aplicaiilor Web asigurat prin preluarea
informailor din baze de date, o alterare a coninutului tabelelor atacate poate conduce implicit i la o
modificare a coninutului dinamic al site-ului.
46 Tehnologii WEB Cursul 11 + 12
Pentru operarea cu baze de date Oracle este necesar utilizarea bibliotecii php_oci8.dll. ca
extensie PHP. Scriptul urmtor prezint o exemplificare a utilizrii ctorva dintre funciile oferite de
aceast bibliotec.
Conectarea la o baz de date Oracle se face utiliznd funcia PHP OCILogon (parametri
obligatorii ai acesteia fiind numele de user, parola i numele instanei Oracle, implicit ORCL pentru
versiunile Oracle Enterprise/Professional, respectiv XE pentru versiunile Express). Interogarea unei
tabele a unei baze de date Oracle (mai precis, n exemplu de fa, tabela ANGAJATI avnd coloanele ID,
NUME, SALAR) se face utiliznd funciile OCIParse i OCIExecute, fiind apoi extrase i afiate succesiv pe
ecran datele din liniile aceasteia (bucla while cu OCIFetch). Apoi, n exemplul prezentat, nregistrarile
din tabela angajati sunt adugate ntr-o alt tabel evidenta, utiliznd comanda SQL INSERT, mpreun
cu comenzile PHP OCIParse i OCIExecute (practic, se face un transfer al informaiilor din tabela
angajati n tabela evidenta). n final sunt eliberate resursele i este nchis conexiunea cu baza de date
Oracle. Se poate observa c procedura de lucru este practic identic cu cea din cazurile anterioare
(MySQL), doar numele funciilor utilizate i sintaxa lor fiind specifice bibliotecii extensie OCI8.
<?php
// Interogare tabel
OCIExecute($stmt);
echo "<tr>";
echo "<th>ID</th>";
echo "<th>NUME</th>";
echo "<th>SALAR</th>";
echo "</tr>";
while(OCIFetch($stmt))
" <td>$id</td>\n".
" <td>$nume</td>\n".
" <td>$salar</td>\n".
Tehnologii WEB Cursul 11 + 12 47
" </tr>\n");
/ / Pregtete adugarea
OCIExecute($stmt1);
OCIFreeStatement($stmt);
OCIFreeStatement($stmt1);
OCILogoff($connection);
?>
n situatia n care datele adugate sunt i de tip dat calendaristic (de asemenea, un tip uzual),
se va folosi o funcie de conversie la un format Oracle corespunzator (TO_DATE). Spre exemplificare:
<?php
OCI_Execute($stmt);
echo "<tr>";
echo "<th>ID</th>";
echo "<th>NUME</th>";
echo "<th>SALAR</th>";
echo "</tr>";
while($row=OCI_Fetch_row($stmt))
" <td>$row[0]</td>\n".
" <td>$row[1]</td>\n".
" <td>$row[2]</td>\n".
" </tr>\n");
}
48 Tehnologii WEB Cursul 11 + 12
OCI_Free_Statement($stmt);
OCI_close($connection); ?>
Se pot remarca similitudinile sintactice i funcionale ale noilor funcii utilizate, comparativ cu
cele destinate MySQL-ului, aa cum este prezentat comparativ i n tabelul 2.1:
Tabel 2.1.
Oracle MySQL
OCI_Connect MySQL_Connec
t
MySQL_Fetch_
Assoc,
MySQL_Fetch_
Object
OCI_Close MySQL_Close
Aa cum s-a precizat pentru MySQL, i n cazul Oracle se poate face un apel, dintr-un script PHP,
la o procedur stocat (util n special pentru operarea tranzacional, cu seturi de multiple comenzi
SQL destinate actualizrii informaiei din bazele de date). Pentru o exemplificare pur didactic, se
consider urmtoarea procedur stocat (cu numele joc), opernd asupra unei tabele (testul1):
As
Begin
End;
Un script PHP care face un apel al acestei proceduri stocate poate avea codul urmtor
(remarcndu-se apelul procedurii stocate prin intermediul unui bloc PL/SQL, specific Oracle):
<?php
$connection = OCILogon("student", "student","orcl");
// Pregatire execuie bloc PL/SQL integrnd apelul procedurii
$stmt = OCIParse($connection, "BEGIN joc(222,222); end;");
// execuie procedur
OCIExecute($stmt) or die("Esec !")
echo "ok"; ?>
Tehnologii WEB Cursul 11 + 12 49
n cazul Oracle, operarea tranzacional (totul sau nimic) asigurat de folosirea procedurilor
stocate, are i o alt soluie alternativ oferit de existen unui parametru opional (neutilizat n
exemplificrile anterioare) n cadrul funciei OCIExecute :
OCIExecute($identificator_Oci_Parse [, $mod])
n contextul anterior precizat, validarea sau anularea explicit a unei tranzacii Oracle se poate
face folosind funciile PHP OCI_commit sau OCI_rollback.
<?php
OCI_COMMIT($connection );
OCIFreeStatement($var);
OCILogoff($connection); ?>
Se poate observa c scriptul ncearc execuia succesiv a trei comenzi INSERT, scopul acestuia
fiind fie executarea tuturor, fie a nici uneia. Astfel:
- dac toate cele trei comenzi se ncheie cu succes (deci nu se execut nici o comand die care
conduce la ieirea din script i implicit, prin folosirea parametrului OCI_NO_AUTO_COMMIT, la
invalidarea oricrei modificri n baza de date), prin comanda de finalizare a tranzaciei OCI_COMMIT
noile date sunt salvate n baza de date (COMMIT pe toate comenzile);
- dac una dintre comenzi eueaz (chiar dac altele anterioare au reuit), o comand die de
prsire a scriptului este executat (ne mai ajungndu-se la execuia comenzii OCI_COMMIT) i toate
eventualele modificri ale bazei de date efectuate prin apelul scriptului sunt anulate (ROLLBACK pe toate
comenzile).
Utilizarea uneia sau alteia dintre soluiile propuse rmne la latitudinea programatorului.
incluse ntr-un acelai script (auto-apelare). Practic, la un prim apel al scriptului se execut doar o parte
a acestuia, constnd ntr-un formular (FORM fig. 2.1) pentru preluarea/furnizarea unor valori de
parametri. Prin apsarea butonului din formular, se realizeaz o auto-apelare a aceluiai script spre care
este pasat i un parametru, i va fi executat o alt parte a scriptului (interogarea efectiv). Aceste
decizii sunt luate printr-o structur PHP if-else, ale crei seciuni pot include att cod HTML n clar, ct
i cod PHP ncuibat (fiierul avnd n mod obligatoriu extensia .php). O astfel de structur are forma
urmtoare:
<?php
if ( condiie ) {
?>
<?php
else {
?>
<?php
?>
Codul surs complet al unui script exemplificativ (cu auto-apelare) este urmtorul:
<?php
// de la formular
?>
<center>
</form>
</center>
<?php
// (autoapelare)
Tehnologii WEB Cursul 11 + 12 51
else{
?>
<tr>
<th>ID</th>
<th>NUME</th>
<th>SALAR</th>
</tr>
<?php
$numePreluat=$_GET[nume];
OCIExecute($stmt);
while(OCIFetch($stmt)) {
" <td>$id</td>\n".
" <td>$nume</td>\n".
" <td>$salar</td>\n".
" </tr>\n");
?>
</table>
<?php
OCIFreeStatement($stmt);
OCILogoff($connection);
?>
n cadrul script-ului de mai sus se putea utiliza, ca i variant alternativ, o structur if-else-end
if de forma urmtoare, oarecum similar cu cea anterioar:
52 Tehnologii WEB Cursul 11 + 12
De remarcat utilizarea n cadrul FORM-ului a unei variabile PHP speciale ($PHP_SELF), care
furnizeaz o hyper-legatur (link) spre scriptul care conine acest cod (practic un auto-apel cu transferul
unui parametru, lucru observabil i n linia de comand a browser-ului - fig. 2.1). Figura 2.2 prezint
rezultatul aplicaiei (implementat n maniera cu auto-apelare).
Observaie: Sintaxa action=<?php $_PHP_SELF ?> din cadrul scriptului anterior poate fi nlocuit
cu sintaxa action= sau action=nume_script.php, unde nume_script.php reprezint numele
scriptului curent, care se auto-apeleaz.
De remarcat de asemenea, funcia isset() care determin dac unei variabile i s-a atribuit o
valoare (a fost setat, deci nenul). n caz afirmativ, funcia returneaz valoarea logic TRUE, altfel
returneaz valoarea FALSE.
Tehnologii WEB Cursul 11 + 12 53
Observaie: Spre deosebire de funcia isset (care returneaz TRUE pentru o variabil cu o valoare setat
i nenul), funcia empty returneaz FALSE dac variabila testat are o valoare i acesta nu este 0
(zero). Din acest motiv, n exemplul anterior, isset nu putea fi substituit de empty. Funcia empty
returneaz TRUE pentru string-uri vide ("","0"), 0 (zero numeric), NULL, FALSE, ir vid, respectiv
variabil declarat i neiniializat (caz specific programrii pe obiecte).
54 Tehnologii WEB Cursul 11 + 12
Pentru operarea cu baze de date Interbase (sistem de gestiune al bazelor de date produs de
firma Borland), este necesar utilizarea ca extensie a bibliotecii php_interbase.dll. Aplicaia urmtoare
face o simpl exemplificare, avnd drept scop principal, relevarea faptului c, indiferent de tipul de baze
de date utilizat, modul de abordare al problemei este relativ identic. Diferenele majore (excluznd
evident utilizarea unor funcii specifice fiecrui tip de baz de date) const n modul n care se face
conexiunea la serverul SQL, respectiv n modul n care sunt referii parametrii de interogare n cadrul
comenzilor SQL apelate. Aplicaia de fa presupune adugarea unei noi linii ntr-o tabel Interbase,
respectiv cutarea acestei noi linii i afiarea sa pe ecran. Se consider tabela Interbase table1 creat
cu comanda:
CREATE TABLE table1 (nr INT, nume CHAR(10), virsta INTEGER, localitate CHAR(10));
i n acest caz este necesar existena unui fiier HTML pentru transmiterea spre scriptul PHP
propriu-zis a valorilor corespunztoare articolului care va fi adugat n tabel. Nu se mai face o
prezentare a acestuia, fiind similar cu cel din paragraful 1.3 (practic un formular pentru transmiterea
parametrilor de intrare spre scriptul PHP). Acest fiier HTML permite transmiterea a patru parametrii (nr,
nume, virsta, localitate - cu valori introduse de la tastatura) necesari adugrii unei noi linii (complete)
n tabela bazei de date.
Scriptul PHP spre care sunt transmise valorile acestor parametri i care va realiza adugarea
propriu-zis n tabela bazei de date este urmtorul:
<?php
$dbh= ibase_connect(localhost:c:\datafile\test.gdb,
sysdba, masterkey);
$col_inf=ibase_field_info($query,$i);
echo" <tr>\n";
echo "</tr>";
ibase_close ($dbh);
?>
//preg tirea unei interog ri cu parametrii (util mai ales dac se repet , dar cu
ibase_execute($query,$NR,$nume,$virsta,$localitate);
ibase_free_query($query);
Observaie: Se menioneaz c, kit-ul de distribuie PHP vine nsoit de un pachet suplimentar (a crui
eventual instalare se face explicit, ulterior instalrii de baz), numit PEAR (PHP Extension and
Application Repository), constnd practic ntr-un depozit/colecie de componente software reutilizabile
(open-source). n cadrul acestuia, o component (PEAR:DB) se refer la operarea cu baze de date,
asigurnd un strat suplimentar de abstractizare, care conduce astfel la o cretere a portabilitii codul
din punct de vedere al multitudinii de tipuri de baze de date. Pachetul PEAR:DB ofer un API
(Application Programming Interface) unificat pentru gestionarea diverselor tipuri de baze de date,
principalele avantaje ale folosirii lui fiind simplitatea codului i portabilitatea lui, fiind recomandat
folosirea lui n cadrul unor aplicaii care implic o mare diversitate de tipuri de baze de date.