Visual Basic

Descărcați ca pdf sau txt
Descărcați ca pdf sau txt
Sunteți pe pagina 1din 262

Prefa-a t7

Cartea si propune sa ini-ieze pe cei care doresc sa cunoasca realizarea paginilor Web 7-i t 7 7 dinamice folosind tehnologia Microsoft. Se prezinta elementele de baza pentru realizarea 7 7 paginilor statice cu HTML. Urmeaza limbajul Visual Basic Script, apoi, n final, tehnologia ASP 7 si obiectele ei. Deoarece ASP poate interac-iona cu bazele de date rela-ionale, cartea prezinta t t 7 conceptele specifice bazelor de date rela-ionale, ntr-o forma simplificata mpreuna cu t 7 7, 7 modalitatea de manipulare a datelor unei baze de date Microsoft Access prin ADO. Aduc mul-umiri artistului plastic clujean Marin Leschian pentru lucra t 7rile "Vacan-a eterna t7 7" (coperta fa-a si "Armata lui Don Quijote" (coperta spate) pe care le-am folosit pentru a mbra 7 t 7) 7ca aceasta carte. 7 Multe mul-umiri Ramonei pentru lectura si corectura manuscrisului. t Aceasta edi-ie mai con-ine, fa-a de prima, o introducere n re-ele de calculatoare, explicarea 7 t t t7 t conceptului de foaie de stil, o mai clara descriere a conceptelor legate de bazele de date 7 rela-ionale si mai multe exemple. t http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

Celor care nc| mai cauta dei, deja, au cam obosit. 7

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

CUPRINS - 5

CUPRINS
Concepte de reele de calculatoare i protocoale de reea. . . . . . . . . . . . . . . . . . . . 10 Modalit|i de clasificare a reelelor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Reele LAN (Local Area Networks). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Reele WAN (Wide Area Networks). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Reele MAN (Metropolitan Area Networks). . . . . . . . . . . . . . . . . . . . . . 11 Reele VPN (Virtual Private Networks). . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Condiiile de conectare a unui calculator la o reea. . . . . . . . . . . . . . . . . . . . . 11 Placa de reea.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Topologii de reea.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Despre protocoale de reea. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Introducere n TCP/IP.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Configurarea conexiuni TCP/IP n Windows XP i 2000.. . . . . . . . . . 14 Protocolul HTTP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Ce este ASP?.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . De la HTML la ASP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . CGI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Avantaje ASP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . http://www.east.utcluj.ro/mb/mep/antal Independena de limbajul de programare. . . . . . . . . . . . . . . . . . . . . ASP este simplu de nv|at. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Alte metode Universitatea Tehnica din Cluj-Napoca . . . . . . . . . . . . . . . . . . pentru crearea de pagini Web dinamic. Catedra . . . . . . . . . . . . . . . . . . Programe CGI. . Mecanica .si .Programare. . . . . . . . . . . . . . . . . . . . . . . Conf. Dr. Ing. . . . . . . . . . . . . . . . . . . . . . Ce este ISAPI?. . . ANTAL.Tiberiu .Alexandru. . . . . . . . . . . . . . . . . . . Aplicaii ISAPI.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Filtre ISAPI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cnd se folosesc ASP i HTML mpreun|?. . . . . . . . . . . . . . . . . . . . . . . . . . . . Comparaie ntre ASP i alte tehnologii de dezvoltare a aplicaiilor Web . . Etapele desf|ur|rii dialogului, ntre client i server, pe Web. . . . . . . . . . . . . . . . . . Modul n care clientul trimite cererea. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Prelucrarea cererii de c|tre server. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . P|rile componente ale unui URL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modul n care server-ul r|spunde la o cerere. . . . . . . . . . . . . . . . . . . . . . . . . Modul n care clientul prelucreaz| r|spunsul. . . . . . . . . . . . . . . . . . . . . . . . . Prelucrarea cererilor ASP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ce este un Script?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modul n care server-ul separ| script-ul de coninutul HTML.. . . . . . . . . . . . Modul n care server-ul prelucreaz| script-ul. . . . . . . . . . . . . . . . . . . . . . . . . Navigatorul i codul ASP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introducere n HTML.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ce este HTML?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sintaxa HTML - marcaje i atribute. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Structura unui document HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Marcajul <HTML>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Marcajul <TITLE>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Marcajul <META>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Marcajul <LINK>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Marcajul <BODY>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 20 20 21 21 22 22 22 22 22 22 23 23 25 25 25 26 27 27 28 29 30 30 30 31 31 31 33 33 33 34 34 34

6 - CUPRINS

Formatarea textului. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Stiluri de antete. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Aliniere, tipuri de caractere. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Containere de text. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Paragraful. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Text preformatat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Stiluri de liste. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lista neordonat|.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lista ordonat|.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Definiii. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Alte elemente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Includerea imaginilor n documentele HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Marcajul <IMG>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Plasarea imaginilor n pagin|. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ocuparea cu text a spaiului din jurul imaginii. . . . . . . . . . . . . . . . . . . . . . . . Imagini de fond. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Realizarea hiperleg|turilor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Marcajul de ancorare. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ancorarea la imagini. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . http://www.east.utcluj.ro/mb/mep/antal Tabele. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Marcajele <TABLE>, <TR> Tehnica din .Cluj-Napoca . . . . . . . . . . . . . . . . . . . . Universitatea i <TD>. . . . . . . . . . . . . Marcajele <THEAD> i <TFOOT>..si .Programare. . . . . . . . . . . . . . . . . . . . . . . Catedra Mecanica . . . . . . . . . . Conf. Dr. Ing. ANTAL Tiberiu Alexandru Cadre (FRAMEs). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Avantajele cadrelor.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dezavantajele cadrelor.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modalit|i de evitare a cadrelor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

35 35 36 36 37 37 38 38 38 40 41 42 42 43 44 45 47 47 50 52 52 58 61 68 68 68

Foi de stil (Style Sheets).. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Stocarea regulilor de stil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Stocarea extern| a regulilor de stil. . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Stocarea intern| a regulilor de stil. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Exemplu: Meniuri i fonduri cu CSS.. . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Exemplu: Tabele cu CSS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Formulare (Forms). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Definirea unui formular.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Elemente de intrare. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Butonul Submit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Butonul Reset.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Introducerea textelor n formulare. . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Selectarea mai multor opiuni, dintre mai multe variante, prin butoane de validare. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 Selectarea unei singure opiuni, dintre mai multe variante, prin butoane de opiune . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 Selectarea din liste. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Controale ascunse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Transmiterea datelor din formular prin e-mail.. . . . . . . . . . . . . . . . . . . . . . . . 86 Limbajul de programare VBScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

CUPRINS - 7

Cuvinte cheie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Variabile. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Subrutine i funcii. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 Operatori VBScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Operatori aritmetici. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Operatori de comparaie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Operatori de concatenare. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Operatori logici. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Instruciuni de ramificare. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 If ... Then.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 Select ... Case. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 Instruciuni de ciclare. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 For ... Next. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 While ... Wend. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 Do ... While.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 Operaii cu iruri. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Funcii pentru manipularea irurilor . . . . . . . . . . . . . . . . . . . . . . . . . 107 Expresia de c|utare. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Clase VBScript. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Definirea membrilor dat|.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Implementarea propriet|ilor clasei. . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Property Get. . . . . . . . . . . . . . . . . . . . http://www.east.utcluj.ro/mb/mep/antal . . . . . . . . . . . . . . . . . . . . 111 Property Let. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Crearea metodelor clasei. . . . . . . . . Universitatea Tehnica din Cluj-Napoca . . . . . . . . . . . . . . . . . . . . 112 Definirea evenimentelor clasei. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Catedra Mecanica si Programare Evenimentul Initialize. . . . . .Alexandru. . . . . . . . . . . . . . . . . . . 112 Conf. Dr. Ing. ANTAL Tiberiu . . . . . . . . Evenimentul Terminate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 Obiecte client. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 Inserarea script-ului n pagina Web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 Ierarhia obiectelor de script. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 Obiectul Window. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Propriet|ile obiectului Window.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Metodele obiectului Window.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Evenimentele obiectului Window. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 Obiectul Document. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 Propriet|ile obiectului Document. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 Coleciile obiectului Document. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 Metodele obiectului Document. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Obiectul Navigator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 Obiectul Form.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Propriet|ile obiectului Form. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Transferul (submit) formularelor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Manipularea controalelor unui formular. . . . . . . . . . . . . . . . . . . . . . 124 Propriet|ile controalelor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 Metodele controalelor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 Evenimentele controalelor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 Exemplu: Utilizarea evenimentelor asociate controalelor.. . . . . . . . . . . . . . 127 Exemplu: Aplicaie pentru calculul dobnzii bancare. . . . . . . . . . . . . . . . . . 128 Exemplu: Accesul la coninutul paginii de Web, din VBScript, folosind obiectul Document. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130

8 - CUPRINS

Marcajul <OBJECT>.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 Obiecte server. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Obiectul Response. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 Trimiterea unui r|spuns cu obiectul Respose. . . . . . . . . . . . . . . . . . 139 Utilizarea variabilelor n r|spunsul dat de server. . . . . . . . . . . . . . . 140 Colecia Response.Cookies. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 Metoda Response.AddHeader. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 Metoda Response.Redirect. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Propriet|ile Response.Expires i Response.ExpiresAbsolute. . . . . . . . . . . 144 Obiectul Request. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 Colecia Request.ClientCertificates. . . . . . . . . . . . . . . . . . . . . . . . . . . 145 Colecia Request.Cookies.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 Colecia Request.Forms .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 Colecia Request.QueryString. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 Colecia Request.ServerVariables. . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 Obiectul Application. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 Variabile ale aplicaiei - Application. . . . . . . . . . . . . . . . . . . . . . . . . . . 161 Metodele Application.Lock i Application.Unlock. . . . . . . . . . . . . . . 163 Obiectul Session. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 Fazele unei sesiuni. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 nceputul sesiunii. . . . . . . . . . . . . . . . http://www.east.utcluj.ro/mb/mep/antal . . . . . . . . . . . . . . . . . . . 165 Identificarea sesiunii. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 Terminarea sesiunii. . . Cluj-Napoca Universitatea Tehnica din . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 Proprietatea Session.TimeOut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 Catedra Mecanica si Programare Metoda Session.Abandon.Tiberiu .Alexandru. . . . . . . . . . . . . . . . . . 166 Conf. Dr. Ing. ANTAL . . . . . . . . . . . . . . Fiierul global.asa.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 Obiectul Server.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 Proprietatea Server.ScriptTimeOut.. . . . . . . . . . . . . . . . . . . . . . . . . . . 169 Metoda Server.HTMLEncode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 Metoda Server.URLEncode.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Metoda Server.CreateObject. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 Directiva include. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 Metoda Server.Execute.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 Metoda Server.Transfer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 Metoda Server.MapPath. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 Metoda Server.GetLastError. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 Obiectul Scripting Dictionary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 Propriet|ile obiectului Dictionary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 Metodele obiectului Dictionary.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 Obiectul FSO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 Afiarea fiierelor dintr-un director. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 Verificarea existenei unui fiier.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 Deschiderea unui fiier.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 Obiectul TextStream. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 Scrierea ntr-un fiier.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 Citirea dintr-un fiier. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 tergerea unui fiier.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 Realizarea unei aplicaii cu securitate la legare. . . . . . . . . . . . . . . . . . . . . . 190

CUPRINS - 9

Instruciuni pentru tratarea erorilor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instruciunea On Error Resume Next. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instruciunea On Error Goto 0.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Obiectul Err. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Stocarea erorilor n fiiere.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

196 196 196 197 200

E-mail. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 Trimiterea unui e-mail cu obiectul NewMail.. . . . . . . . . . . . . . . . . . . . . . . . . 205 Folosirea componentei w3 JMail pentru trimiterea unui e-mail . . . . . . . . . 206 Accesul la baze de date relaionale. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 Conceptul de dat|.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 Modelul de date relaional.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 Conceptul de redundan|. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 Terminologii alternative ale modelului relaional.. . . . . . . . . . . . . . . . . . . . . 210 Conceptul dependenei funcionale. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 Tipuri de dependene funcionale. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 Conceptul de normalizare. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 Etapele procesului de normalizare. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 Forma nenormal|.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Prima form| normal|.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Anomaliile relaiilor 1NF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 http://www.east.utcluj.ro/mb/mep/antal A dou| form| normal|. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 A treia form| normal|. . . . din . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 Universitatea Tehnica . . . Cluj-Napoca Introducere n SQL. . . . . Mecanica .si .Programare. . . . . . . . . . . . . . . . . . . . . . 217 Catedra . . . . . . . . . . . . . . . . . . Instruciunea Ing. ANTAL.Tiberiu .Alexandru. . . . . . . . . . . . . . . . . . 217 Conf. Dr. SELECT. . . . . . . . . . . . . . . . . . . SELECT cu un singur tabel. . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 SELECT cu mai multe tabele.. . . . . . . . . . . . . . . . . . . . . . . . . . 218 Instruciunea INSERT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 Instruciunea UPDATE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 Instruciunea DELETE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 Introducere n ADO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 Set|ri specifice pentru deschiderea conexiunii. . . . . . . . . . . . . . . . . 220 Alegerea valorii propriet|ii Mode. . . . . . . . . . . . . . . . . . . . . 221 Setarea propriet|ii ConnectionString. . . . . . . . . . . . . . . . . . 222 Alegerea propriet|ii CursorLocation. . . . . . . . . . . . . . . . . . . 223 Deschiderea conexiunii. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 Gestiunea tranzaciilor cu obiectul Connection. . . . . . . . . . . . . . . . . 223 Obiectul mulime de nregistr|ri (Recordset). . . . . . . . . . . . . . . . . . . 224 Deschiderea unei mulimi de nregistr|ri.. . . . . . . . . . . . . . . 224 Parcurgerea unei mulimi de nregistr|ri.. . . . . . . . . . . . . . . 225 Metoda Connection.Execute. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Obiectul Command. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 Metoda Command.Execute.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 Crearea unei aplicaii ASP ce interacioneaz|, prin ADO, cu o baz| de date Microsoft Access. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 Crearea bazei de date Microsoft Access. . . . . . . . . . . . . . . . . . . . . . 234 Formularele HTML i ASP ale aplicaiei. . . . . . . . . . . . . . . . . . . . . . . 237 INDEX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 BIBLIOGRAFIE.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264

10 - Concepte de retele si protocoale de retea -

Concepte de reele de calculatoare i protocoale de reea


n domeniul reelelor de calculatoare, termenul dispozitiv utilizator este folosit pentru a defini un echipament electric care este conectat la ret ea (calculator, imprimanta, scanner etc.) n scopul schimbului de date cu un alt echipament al reelei. Denumirea e data din punctul de vedere al utilizatorului de ret ea (de exemplu daca discut ia nu ar fi la nivel de ret ea ci de calculator, dispozitive ar putea fi: disc, placa video, modem etc.). Termenul dispozitiv de reea este folosit pentru a descrie echipamentele electrice necesare pentru interconectarea dispozitivele utilizator n vederea schimbului de date. Aceste dispozitive sunt conectate prin cabluri electrice (sau, direct, prin unde radio - wireless) si asigura transmisia, recept ia, gestionarea datelor ce se doresc a fi transferate ntre dispozitivele utilizator. Cteva dintre numele de dispozitive vehiculate mai des sunt prezentate, pe scurt, n continuare: Repeater (repetor) - dispozitiv de ret ea care se foloseste pentru refacerea sau repetarea semnalelor (exista repetoare care pot face retransmisia datelor ntre doua ret ele care folosesc protocoale diferite). Hub (concentrator) - punct de conectare comun la nivelul unei ret ele, se folosesc pentru interconectarea segmentelor (segmentul este o port iune de ret ea ntre doua bridge-uri, router-e sau switch-uri) de LAN. Hub-ul are mai multe porturi (interfet e de plci de reea). Atunci cnd un pachet (mesajele de transmis sunt divizate n pachete, fiecare pachet se transmite individual si poate parcurge o ruta individuala catre destinat ie) ajunge pe un anumit port se copiaza pe toate http://www.east.utcluj.ro/mb/mep/antal celelte porturi pentru ca toate segmentele de LAN sa-l vada. Exista si hub-uri inteligente care citesc adresa destinat ie a pachetelor si le trimit numai Cluj-Napoca Universitatea Tehnica din unui singur port, acestea mai pot avea si diferite facilitat i de monitorizare si administrare asi Programare traficului. Catedra Mecanica Conf. Dr. Ing. ANTAL Tiberiu Alexandru Bridge (punte) - dispozitiv de ret ea ce conecteaza doua LAN-uri sau doua segmente de LAN ce folosesc acelasi protocol (de exemplu, Ethernet). Switch (comutator) - dispozitiv de ret ea ce filtreaza si expediaza pachete ntre doua segmente de LAN. Switch-ul opereaza la nivelul legaturii de date (nivelul 2 OSI - Open System Interconnection) eventual la nivelul numit ret ea (nivelul 3 OSI). Router - un dispozitiv ce transfera pachete de date ntre ret ele distincte. Tipic, router-ul este conectat la doua LAN-uri sau WAN-uri respectiv ntre un LAN si furnizorul de servicii Internet. Router-ele realizeaza dirijarea eficienta a pachetelor de date pe liniile cele mai convenabile. Gateway - un calculator din ret ea care se foloseste pentru accesarea unei alte ret ele, deoarece este unicul punct de interact iune cu alte ret ele, deseori, va fi si proxy server si firewall; daca ret eaua este subnetata (are subret ele) este router-ul care transfera traficul n afara subret elei din care face parte stat ia transmit atoare. - Proxy server - un server (un calculator care gestioneaza anumite resurse) care este asezat ntre un client de aplicat ie, de exemplu un navigator de Web, si un server real, de exemplu un server de Web. Proxy server-ul va intercepta cererile catre server-ul real si va ncerca sa le ndeplineasca singur, daca nu poate transfera cerererile server-ului real. Avantajele folosirii unui proxy stau n cresterea performant elor (rspunsul este dat imediat, nu mai ajunge la server-ul real care este bombardat de mii de cereri si cam ocupat cu ele) si filtrarea cererilor. Firewall - un sistem electric sau o aplicat ie ce gestioneaza accesul (filtreaz) la sau de la o ret ea privata.

Concepte de retele si protocoale de retea - 11 -

Modalit|i de clasificare a reelelor Exista multe criterii de clasificare a ret elelor, iata cteva posibilitat i: # extinderea geografica: LAN, MAN, WAN etc.; # topologie: stea, magistrala, inel etc.; # mediul de transmisie: cupru, fibra optic, radio, microunde, satelit; # proprietar: public, privat; # tehnologia folosita: comuntata (switched) / conexiune permanenta (permanent links), cu legatura fizica (physical link) sau virtuala (virtual link), orientata pe conexiune (connection-oriented) sau fara conexiune (connectionless), cu difuzare (broadcast) sau punct la punct (point-to-point) etc.; # viteza: banda larga (broadband), banda ngusta (narrowband). Nu voi discuta toate tipurile posibile, voi aminti nsa cele mai uzuale denumiri. Reele LAN (Local Area Networks) Ret eaua locala permite interconectarea unor calculatoare aflate la distanta mica (un birou sau mai multe birouri) n scopul partajarii fisierelor din calculatoare, a imprimatelor si a comunicat iei locale. Multe dintre LAN-urile actuale folosesc uzual tehnologia Ethernet. Alte tehnologii folosite pentru ret ele LAN sunt Token Ring si FDDI. Reele WAN (Wide Area Networks) http://www.east.utcluj.ro/mb/mep/antal Ret eaua WAN este, tipic, raspndita pe o arie geografica mai mare dect LAN-ul (distant a ntre procesoare este de ordinul kilometrilor sau mai mult). WAN-ul se formeaza prin conectarea mai Universitatea Tehnica din Cluj-Napoca multor LAN-uri si asigura accesul la calculatoarele locale, server-e, imprimate de la o distant a - Catedra Mecanica si Programare mare respectiv comunicat ia ntre calculatoare. Cteva dintre tehnologiile specifice WAN-urilor Conf. Dr. Ing. ANTAL Tiberiu Alexandru sunt: modem-urile, ISDN (Integrated Service Digital Network), DSL (Digital Subscriber Line), SONET (Synchronous Optical Network). Reele MAN (Metropolitan Area Networks) MAN este o ret ea de date ce are o ra spndire geografica ntre LAN si WAN, cel mai des la nivelul unui oras. Majoritatea MAN-urilor beneficiaza de conexiuni private dar foarte rapide pe fibra optica sau alte medii de comexiune digitala rapida. Se formeaza prin legarea mai multor LAN-uri, eventual si prin unde radio pentru a oferi aceste servicii n spat ii publice (aeroport, magazine, etc.) Reele VPN (Virtual Private Networks) VPN este o ret ea care foloseste un mediu de transmisie public pentru a forma o ret ea privata de calculatoare. Oricine are acces la aceasta ret ea va putea lucra cu toate facilitat ile ei, n condit ii de securitate buna, chiar daca se afla la distant a fizic mare de ret ea si se leaga la ea folosind o - - conexiune clasica la Internet (care este nesecurizata). Diferite metode de criptare si mecanisme de securizare sunt folosite pentru a permite doar accesul utilizatorilor autorizat i la ret ea si pentru - evitarea interceptarii datelor. Condiiile de conectare a unui calculator la o reea Pentru ca un calculator s poat fi legat la o reea, prin care s putem avea acces la Internet i la WWW, acesta trebuie s: # aib cel puin o plac de reea; # folosesc un sistem de operare ce tie lucra cu protocoale TCP/IP (Transmission Control Protocol/Internet Protocol); # aib instalate aplicat iile ce interpreteaza si afiseaza datele transferate prin reea - ntr-o forma inteligibila pentru oameni.

12 - Concepte de retele si protocoale de retea -

Placa de reea Pentru conectarea unui calculator la o reea de calculatoare acesta trebuie s conin, la nivel fizic, un dispozitiv de reea numit placa de ret ea (NIC - Network Interface Card). Acesta asigura comunicat ia electrica ntr-o ret ea. Placa de reea foloseste o linie de ntrerupere (IRQ - Interrupt ReQuest), un spat iu de adrese I/O (Input/Output - Intrare/Iesire) si o zona de RAM (Random Access Memory - memorie volatila) pentru a interact iona cu SO (Sistemul de Operare). O linie de ntrerupere este o linie electric special n calculator prin care acesta poate fi oprit din funct ionare normala de catre un dispozitiv care transmite un semnal electric pe linia respectiv. Semnalul ntrerupe temporar funct ionarea curenta a calculatorului pentru ca acesta sa poate decida ce urmeaza sa faca. Daca procesul care prezinta date este rapid, atunci calculatorul va prelua datele, altfel acestea risca sa se piarda, dupa care si va relua activitatea din care a fost oprit. Deoarce mai multe semnale de ntrerupere pot sosi pe rnd sau simultan pe o singura linie de ntrerupere, fiecarui dispozitiv ce poate ntrerupe calculatorul trebuie sa i se dea un numar unic pentru a putea fi identificat de calculator. Aceasta valoare este specificata atunci cnd respectivul dispozitiv este intodus fizic n calculator s i se poate face manual sau automat (asta daca dispozitivul este PnP - Plug and Play). Placa de reea este un astfel de dispozitiv ce trebuie sa primesca un numar de IRQ. Aceasta trebuie instalat pe orice echipament ce va accesa ret eaua deoarece asigur cuplarea la nivel electric cu aceasta. Exista mai multe tipuri de plci de reea: notebook-urile pot avea placa de reea ncorporat sau ataata extern pe prin PCMCIA; http://www.east.utcluj.ro/mb/mep/antal PC-urile pot avea si ele placa de baza cu plac de reea ncorporat sau pot fi atasate ca placi distincte. Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Fiecare plac de reea are un numar de identificare unic numit adresa MAC (Media Access Conf. Dr. Ing. ANTAL Tiberiu Alexandru Control). Acest numar este folosit (de exemplu, n foarte raspndita tehnologie de reea Ethernet o arhitectura de ret ea locala dezvoltata de firma Xerox) pentru a derula comunicat ia de date a stat iei (numita host) prin ret ea. Reeaua Ethernet apare n 1976, trecnd ulterior prin mai multe revizii i standardizri. Aceasta folosea pentru conectarea fizic a plcilor de reea un singur cablu coaxial (cablul de reea). Datele transmise n aceast reea erau sparte n pachete. Denumirea de pachet este, azi, un termen generic, reprezentnd unitatea de date ce se transmite ntr-o reea. Pachetele de date erau transmise pe baza unui algoritm CSMA/CD (Carrier Sense Multiple Access / Collision Detection). n situaia n care mai multe pachete de date ncercau s fie transmise simulan de calculatoare diferite ale reei pe cablul de reea aprea o coleziune (coleziune era detectat i pachetul era retransmis dup un timp aleator). Implementarea unei astfel de reele este simpl, dar ca urmare a competiiei calculatoarelor n vederea accesului la cablul de reea (mediul de transmisie), caracteristicile de transmisie nu sunt deterministe. Viteza tipic a transferului de date pe aceast reea era de 10 Mbps. Ca urmare a simplitii, tehnologia Ethernet a evoluat repede mrindu-i viteza transferului de date la 100 Mbps (Fast Ethernet) respectiv 1 Gbps (Gigabit Ethernet). Topologii de reea Topologia se refera la modul de aranjare a legaturilor fizice ntre calculatoarele ret elei. Cteva dintre ele se vd n Figura 1 (star - stea, bus - magistrala, ring - inel). Topologia stea conecteaza toate cablurile (pe fiecare cablu este un singur calculator) la un singur punct central (hub-ul). Topologia magistrala foloseste un singur cablu pe care se leaga toate calculatoarele, cea inel leaga doua cte doua calculatoare si primul cu ultimul rezultnd o ret ea de cablu n forma inelara . Termenul de topologie logica este folosit pentru de defini modul de comunicat ie n ret ea si poate - -

Concepte de retele si protocoale de retea - 13 -

fi cu difuzare (broadcast) sau cu transfer de jetoane (token passing). n cazul difuzarii, un calculator transmite mesaje catre toate celelalte calculatoare ale ret elei, prin cablul de ret ea. -

Figure 1 Topologii de ret ea -

Nu exista o ordine specifica n care calculatoarele folosesc mediul de transmisie, din acest motiv pot sa apara si conflicte (dup cum am spus deja, Ethernet funct ioneza dup acest model). n http://www.east.utcluj.ro/mb/mep/antal cazul lucrului cu jeton, acesta este transmis secvent ial fiecarui calculator din ret ea. Calculatoul care are jetonul (token-ul) poate transmite date n ret ea, daca acesta nu are date de transmis va Universitatea Tehnica din Cluj-Napoca pasa jetonul mai departe (nu-l t ine). Acest proces se repeta cu parcurgerea tuturor calculatoarelor Catedra Mecanica si Programare din ret ea. TokenRing este o ret ea care lucreaza dupa aceasta procedura. Conf. Dr. Ing. ANTAL Tiberiu Alexandru Despre protocoale de reea Reelele de comunicaie ntre calculatoare pot fi organizate ca o grupare de protocoale aproape independente, fiecare dintre acestea opernd la un anumit nivel. Tipic, nivelul cel mai de jos asigur comunicaia fizic ntre calculatoare, n timp ce nivelul cel mai nalt const n aplicaiile utilizatorului. Fiecare nivel curent, se folosete de nivelul inferior, pentru a pune la dispoziia nivelului superior, un grup de servicii. La fiecare nivel, programe rulate pe calculatoarele reelei folosesc protocoale corespunztoare nivelului pentru a comunica ntre ele. Avantajul protocoalelor pe nivele const n specificaiile clare ale metodelor de transmitere a informaiilor de la un nivel la altul ca parte a protocolului. Astfel, orice modificare la nivelul protocolului nu afecteaz celelalte nivele, aceast independen simplificnd proiectarea i ntreinerea programelor de comunicaie. Pentru cele ce urmeaz voi considera c suita de procoale TCP/IP este organizat pe 5 nivele de protocoale. Prezentarea este mult simplificat fiind meinute numai acele concepte care au fost deja discutate, respectiv cele ce vor fi utilizate mai departe la Web i Internet. Anumitor nivele le corespund anumite concepte i dispozitive de reea, dup cum urmeaz: Nivel TCP/IP Descriere Dispozitive de reea i concepte specifice nivelului

5 - Aplicaie

Asigur transparena reelei, alocarea de resurse etc. la nivelul utilizatorului reelei.

14 - Concepte de retele si protocoale de retea -

4 - Transport (TCP)

Asigur realizarea unei conexiuni un punct A i unul B, pentru ca datele s ajung fr erori i n ordinea corect. Asigur determinarea rutei pachetelor de date de la transmitor la receptor. Asigur fragmentarea datelor n pachete ce conin informaii de indentificare i urmrire n vederea transmiterii la nivelul fizic. Corespunde conexiunilor electrice i mecanice. router, subreea, adres IP switch, adres MAC, Ethernet

3 - Internet (IP) 2 - Plac de reea

1 - Fizic

hub

Introducere n TCP/IP Aceast protocol a devenit interesant atunci cnd proprietarii de LAN-uri au neles c poate fi utilizat att pentru transportul datelor ntr-o LAN ct i pentru interconectarea mai multor LAN-uri. La interconectarea LAN-urilor datele pot fi transferate ntre calculatoarele unor LAN-uri distincte, dar numai cu ajutorul unor dispozitive de reea de tipul router sau gateway. TCP este un protocol de comunicaie sigur (garanteaz c toate datele ajung la destinaie fr erori, n ordinea n care s-auhttp://www.east.utcluj.ro/mb/mep/antal trimis), asigur controlul fluxurilor (atunci cnd receptorul nu mai poate accepta date acesta va opri transmisia cu un semnal, iar cnd recepia devine din nou Universitatea Tehnica (mai multe semnale posibil o va reporni cu un semnal), este multiplexatdin Cluj-Napoca electrice sunt combinate Catedra Mecanica Programare pentru a partaja mediul de transmisie respectivsicablul de reea) i orientat pe conexiune Conf. Dr. Ing. face ntr-un flux continuu, (transportul de date ntre calculatoare seANTAL Tiberiu Alexandru n trei faze bine definite: stabilirea conexiunii, transferul de date i eliberarea conexiunii). Protocolul IP este fr conexiune, ce lucreaz cu prioriti (tipurilor de trafic li se atribuie prioriti, n funcie de prioritate traficul poate sau nu tolera ntrzieri, de exemplu videoconferinele trebuie s mearg n timp real, n timp ce e-mail-ul poate fi ntrziat) i comutare de pachete (pachetele de date sunt expediate individual ntre calculatoare, fr existena unei rute prestabilite). IP asigur transportul pachetelor pe diferite rute, fragmentarea (proces prin care un pachet este divizat n poriuni mai mici numite fragmente, cu scopul adaptrii acestora la cerinele reelei fizice prin care pachetele trebuie s treac; procesul invers se numete reasamblare) i reasamblarea pachetelor. Configurarea conexiuni TCP/IP n Windows XP i 2000 Sistemul de operare Windows trebuie sa fie configurat sa lucreze cu TCP/IP pe fiecare calculator al reelei pentru ca sa poate exista o comunicat- ie ntre acestea. Pentru

Figure 2 - Start>Run>Cmd>ipconfig

Concepte de retele si protocoale de retea - 15 -

vizualizarea setarilor TCP/IP, n Windows 95, 98 si Me se foloseste aplicat ia NT/2000 si XP se foloseste ipconfig . -

winipcfg ,

Calculatorul trebuie sa fie conectat la ret ea pentru ca datele (vezi Figura 2) cu privire la conexiune sa poata fi afisate. Pentru ca un grup de calculatoare sa fie ntr-o ret ea locala trebuie ca la: # IP Address: primele 3 grupe de numere sa fie aceleasi, iar numerele din ultima grupa se fie, toate, distincte; # Subnet Mask: sa fie aceeasi; # Default Gateway: sa fie aceeasi. Funct ionarea conexiunii la ret ea se face cu aplicat ia ping (Packet InterNet Groper). Aceasta verifica daca o adresa de IP exista si daca accepta cereri. ping lucreaza trimit nd un pachet special numit ICMP (Internet Control Message Protocol Echo Request) catre o anumita destinat ie. Fiecare pachet trimis este o cerere de raspuns, ping se foloseste pentru a verifica dac funct iile de transmisie si recept ie ale NIC, configurarea TCP/IP si a ret elei sunt funct ionale. - 127.0.0.1 este o adresa rezervata pentru testare a conexiunii ntre client si server (loop back address test). Aceasta permite realizarea unei conexiuni ntre client si server prin TCP/IP pe acelasi calculator (nu este nevoie de alte elemente de ret ea). Fiecare calculator http://www.east.utcluj.ro/mb/mep/antal are adresa 127.0.0.1 asignata interfet ei de loop back care mai poarta si numele de local host, majoritatea NIC-urilor au implementata aceasta bucla de testare interna. Orice transmisie pe acest Tehnica din Cluj-Napoca Universitatea port nu iese din NIC pe cablul de ret ea Mecanica si Programare Catedra ci este redirectata spre interfat a de testare si ajunge din nou n coada de intrare ip. Se emite o Ing. ANTAL TiberiuAlexandru cerere de ecou si un raspuns la acesta prin mesaj ICMP prin Conf. Dr. care se verifica condit iile de funct ionare ale NIC-ului si a instalarii respectiv ale configurarii corecte ale TCP/IP.
ping 127.0.0.1

- verifica daca configurarea TCP/IP a ret elei este corecta, adica daca IP-ul este adaugat corect ret elei locale si daca dispozitivul de ret ea la care este legat calculatorul este activ (pornit).
ping IP_adresa_calc_local ping IP_adresa_default_gateway - verifica daca conexiunea cu router-ul (default gateway-ul)

functioneaza corect si daca se poate face lega tura cu alte calculatoare din ret eaua locala.
p i n g IP_adresa_calc_a

- verifica d a c a se poate comunica prin router cu calculatorul aflat la distana ntr-o alta ret ea. lta_retea

Dac a totull funct- ioneaza bine ping ntoarce adresa Figure 3 - ping www.utcluj.ro

16 - Concepte de retele si protocoale de retea -

verificata. Daca raspunsul este Request timed out atunci nu s-a primit raspuns n timpul alocat de la calculatorul ping-uit. Durata de timp alocata as teptarii raspunsului se modifica folosind opt iunea w, de exemplu pentru asteptare de 5 secunde scriem ping -w 5000 adr_IP . Pe Windows XP i 2000 mai putet i utiliza si pathping care face mult mai multe (determina IP-ul unui calculator dintr-o alta ret ea, ntrzierile si pierderile de pachete de date). n ret elele bazate pe potocoalele TCP/IP (aici este inclus si Internet-ul) calculatoarele se mai numesc si gazde (host), fiecare gazda trebuie sa aiba o adresa de IP-unica. TCP permite stabilirea unei conexiuni ntre doua host-uri cu scopul interschimbarii unor fluxuri de date. TCP garanteaza transferul de date si recept ia pachetelor n aceeasi ordine n care s-au transmis. Protocolul IP se ocupa numai de pachete. Aici este specificat formatul pachetelor de date (numite si datagrame) si schema de adresare. IP se aseamana cu sistemul postal. Permite adresarea si punerea unui pachet la posta, dar fara sa faca o legatura directa ntre expeditor si destinatar. TCP este cel care - face aceasta legatura virtuala ntre sursa si destinat ie. mpreuna, TCP/IP, permit stabilirea unei conexiuni ntre doua gazde n scopul trasferului de mesaje pentru o durata limitata de timp. Versiunea curenta a protocolului IP este 4, de aceea se mai foloseste si scrierea IPv4. Ca urmare - cerinelor de crestere a Internetului, att n numar de gazde ct si de trafic, a fost creat noul standard IPv6. Adresa de IP identifica unic un calculator sau alt dispozitiv (imprimanta) al ret elei TCP/IP. http://www.east.utcluj.ro/mb/mep/antal adresei IP a destinatarului. Ret elele ce folosesc protocolul TCP/IP dirijeaza mesajele pe baza Forma unei adrese IP este un numar de 32 de bit i, scrise ca 4 numere ntregi separate prin puncte. Fiecare numar poate fi ntre Universitatea Tehnica din Cluj-Napoca 0 si 255, de exemplu 168.212.226.204 poate fi o adresa de IP. ntr-o Catedra Mecanica se poate face ret ea izolata de Internet atribuirea acestor adrese si Programarealeator, condit ia fiind aceea ca Conf. Dr. aceasta ret Tiberiu Alexandru numerele folosite sunt unice. DacaIng. ANTALea privata va fi nsa legata la Internet este obligatorile folosirea unor adrese de IP nregistrate (pentru evitarea dublurilor). Cele patru numere se folosesc pentru a identifica o anumita ret ea si o gazda particulara. 168.212.226.204 se scrie n - binar 10101000.11010100.11100010.11001100. Daca subnet mask-ul este 255.255.255.000, adica 11111111.11111111.11111111.00000000 n binar, primii 24 de bit i din IP se folosesc pentru identificarea ret elei, iar ultimii 8 identifica calculatorul gazda (host-ul) din ret ea. Dimensiunea ret elei este funct ie de numarul de bit i folosit i la definirea gazdelor. Daca subnet mask-ul are 8 bit i pot exista cel mult 256 de adrese de gazde pentru o anumita ret ea. Daca subnet mask-ul are 16 bit i (255.255.0.0) atunci sunt 65536 de adrese de gazde disponibile n ret ea. n concluzie, adresa IP este formata din doua regiuni, una care identifica ret eaua, alta care identifica gazda (nodul din ret ea). Clasa adresei determina care parte a adresei apart ie de ret ea si care apart ie de gazda. Toate gazdele unei ret ele trebuie sa aiba acelasi prefix de ret ea si trebuie - sa aiba o valoare de gazda unica. Exista mai multe organizat ii (de exemplu, pentru Europa avem Rseaux IP Europens Network Coordination Centre.) care nregistreaza si administreaza adresele de IP din urmatoarele clase:
Clas Cei mai semificativi bii ai adresei 0xxx Domenii de adrese posibile Adresa de subnet mask Reele pe clas Gazde pe clas Utilizare

0.0.0.0 - 127.255.255.255

255.0.0.0

128

16.777.214

Reele foarte mari, ntotdeauna subnetate Reele mari, tipic, subnetate

10xx

128.0.0.0 191.255.255.255

255.255.0.0

16,384

65,535

Concepte de retele si protocoale de retea - 17 C 110x 192.0.0.0 223.255.255.255 224.0.0.0 239.255.255.255 255.255.255.0 2,097,152 254 Reele mici

1110

255.255.255.255

268,435,456

0[2]

Grupuri de adrese de multicast (nu exist gazde) Rezervate n scopuri experimentale

1111

240.0.0.0 255.255.255.255

nedefinit

nedefinite

nedefinite

Este posibil ca administratorul unei ret ele sa divizeze o ret ea n mai multe ret ele virtuale numite subret ele (procesul este numit subnetare). Pentru aceasta bit ii din subnet mask care t in de gazda se mprumuta adresei de ret ea prin trecerea bit ilor dorit i din 0 n 1. De exemplu, fie adresa de ret ea 192.168.10.0 cu subnet mask-ul 255.255.255.0. Pentru a face din aceasta ret ea doua ret ele subnet mask-ul se face 255.255.255.128 (adica din 11111111.1111111.11111111.00000000 acesta devine 11111111.11111111.1111111.10000000). Aceasta nseamna ca n loc de 24 de bit i se folosesc 25 de bit i pentru ret ea si numai 7 pentru host-uri. Rezulta doua ret ele distincte cu 128 - de adrese de host posibile fiecare. Prima ret ea va avea domeniul de adrese n 192.168.10.0 192.168.10.127, iar cea de-a doua 192.168.10.128 - 192.168.10.255. Toate ret elele trebuie sa rezerve orice adresa de gazda ce are tot i bit ii 0 respectiv 1 pentru ret ea. - Astfel fiecare subret ea va avea o adresa specifica de ret ea si una de difuzare (broadcast). ntr-o - ret ea cu 256 de gazde, 0 si 255 vor fi adrese rezevate, deci, vor fi numai 254 de adrese de gazde posibile. Pentru exemplul de mai sus, cnd numai 7 bit i se folosesc pentru adresele de gazde, http://www.east.utcluj.ro/mb/mep/antal numarul maxim ar fi de 126 din 128 (pentru prima subret ea 192.168.10.0 este adresa de ret ea iar 192.168.10.127 adresa de difuzare). Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Toate gazdele care dorim sa comunice direct n retTiberiu Alexandruaceeasi ret ea, adica s aiba - Conf. Dr. Ing. ANTAL -ea trebuie sa fie n acelasi subnet mask. Daca se folosesc subnet mask-uri diferite vor crede ca sunt n ret ele diferite si nu vor putea comunica direct, ci doar indirect, cu ajutorul unui router. Fra a intra n prea multe detalii, protocolul TCP/IP este cel ce st la baza Internetului. Acesta asigur trasportul datelor ntre aplicaiile, rulate pe calculatoarele unor reele distincte. Ceea ce numim generic Internet, este cea mai mare (n sensul rspndirii geografice) grupare de reele de calculatoare. Are o structur ierahic cu trei nivele: reele de tranzit cum sunt ARPAnet, NSFNet, MILNET - asigur traficul de volum foarte mare ntre reele pe care le leag , reele de mijloc reele intermediare, care conecteaz reelele mici la cea de tranzit, reele mici - la nivelul unei astfel de reele traficul este de tipul local. Protocolul HTTP Protocolul HTTP este ASCII i folosete protocolul TCP/IP pentru a realiza transmisia datelor prin Internet. Definiiile care urmeaz v formeaz cadrul necesar nelegerii celor ce se vor prezenta n continuare. # Protocol - un set de reguli formale ce descriu modul de transmitere al datelor, deseori, ntr-o reea. # Port - un canal logic ntr-un sistem de comunicaie. Protocolul TCP folosete numere de port pentru demultiplexarea mesajelor. Fiecare aplicaie are un numr de port unic asociat cu aceasta. Numrul de port al server-elor de Web este 80. # Server - un program care furnizeaz un serviciu unor alte programe (clienii). Legtura ntre client i server se realizeaz prin intermediul unor mesaje transferate, deseori, printr-o reea i folosete un protocol oarecare pentru codificarea cererilor clienilor i a rspunsurilor date de server. Server-ul este rulat continuu ateptnd sosirea cererilor sau poate fi pornit ca urmare a unei cereri lansate de un program special.

18 - Concepte de retele si protocoale de retea -

# #

Web server - un program server rulat pe un site de Web care trimite ca rspuns pagini Web la cererile HTTP ale navigatoarelor. Cteva nume de astfel de programe sunt: Apache, HTTPd, Personal Web Server i IIS. Site de Web - un calculator pe Internet pe care se ruleaz un server de World Wide Web (WWW). Un site particular este identificat printr-un nume de gazd (hostname ). WWW (World Wide Web) - sistem informaional client-server, hipertext, distribuit, iniiat de Laboratorul European de Fizica Particulelor din Geneva, Elveia. Pe WWW totul (documente, meniuri, etc.) se reprezint prin obiecte hipertext n formatul HTML. Legturile hipertext refer documente prin URL (standard pentru specificarea locaiei obiectelor pe Internet). Acestea pot referi o resurs local sau una aflat la distan accesibil prin FTP, Gopher etc. sau via protocolul HTTP folosit pentru transferul documentelor hipertext. Un program client, dintre cele care urmeaz, se ruleaz pe calculatorul utilizatorului (deseori, numit i navigator de Internet) - NCSA Mosaic, Netscape Navigator, Internet Explorer, Mozila FireFox etc. - furniznd dou servicii de navigare de baz: urmrirea unei legturi i transmiterea unei cereri server-ului.

Figure 4 Dialog HTTP

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

HTTP este un protocol de aplicaie, n situaia concret, se folosete de ctre clientul de Web i de ctre server-ul de Web pentru a comunica. n vederea realizrii legturii ntre client i server trebuie s cunoatem adresa IP a serverului i portul TCP asociat aplicaiei server (numrul de port sau, mai pe scurt, portul, asigur identificarea aplicaiei sau procesului de pe calculator). Unele dintre aceste informaii pot fi calculate (adresa de IP se poate determina din numele serverului, care este coninut n URL, cu ajutorul unui server de nume de domenii), altele sunt implicite (am spus deja c numrul de port implicit, pentru server-ele de Web, este 80). O tranzacie ntre clientul i serverul de Web este declanat de client prin emiterea unei comenzi de cerere (request), apoi server-ul trimite clientului un rspuns (response) la comand (vezi Figura 4). De exemplu, comanda GET a protocolului HTTP trimite server-ului de Web numele fiierului pe care dorim s-l vizualizm. Server-ul va rspunde cu fiierul cerut, dar l va preceda cu un grup de informaii care descriu transferul i formatul informaiilor transferate. Astfel, HTTP/1.0 este versiunea protocolului HTTP, 200 este codul de stare succes iar OK un mesaj ce

Concepte de retele si protocoale de retea - 19 -

explic codul de stare. Dup Content-Type , urmeaz coninutul fiierul cerut. Cea mai simpl metod de vizualizare a rspunsului transmis de server ctre client este utilizarea unei aplicaiie de tip terminal (de ex. telnet sau netcat ). Server-ul de Web monitorizeaz portul 80 pentru a vedea dac sunt clieni ce doresc s se lege la el. n Figura 5, se iniiaz o conexiune cu server-ul de Web mare , ce are adresa IP 127.0.0.1. Aplicaia netcat (nc ) este gratuit i permite conectarea de la distan la un calculator, folosind TCP/IP. Modul de utilizare este cel de emulare de terminal respectiv acest calculator apare la nivelul celui la care http://www.east.utcluj.ro/mb/mep/antal s-a c o n e c t a t Figure 5 - Utilizarea netcat-ului pentru descarcarea unei pagini de a s e m e n e a u n u i Web Universitatea Tehnica din Cluj-Napoca simplu terminal de la care se pot introduce caractere,Catedra Mecanica si Programare terge ecranul etc. Pentru a se poate poziia cursorul, se poate Conf. Dr. Ing.Web cu netcat se Alexandrulinia nc -v -v IP port . realiza aceast conectare la server-ul de ANTAL Tiberiu introduce Utilizarea lui -v asigur afiarea detailat a tuturor informaiilor legate de conexiune. Dup realizarea conexiunii, tot ceea ce se scrie pe ecranul terminalului va fi trimis exact server-ului. Deoarce ne legm la un server de Web, trebuie si trimitem o comand a protocolului HTTP. Prin GET /poze/t.htm HTTP/1.0 i se cere server-ului s trimit clientului coninutul paginii cu numele t.htm stocat n directorul virtual poze . Tasta <Enter> trebui apsat de dou ori, dup care acesta va trimite rspunsul lui clientului. Deoarece clientul nostru nu este un navigator, ci doar un emulator de terminal (nu tie interpreta limbajul HTML n care s-a scris pagina), pe ecran, rspunsul apare afiat n ASCII. Se observ c rspunsul are trei pri distincte: # prima linie care ne spune starea rspunsului (HTTP/1.1 200 OK); # antetul (header): o regiune format din perechi nume: valoare terminat cu o linie vid; # corpul (body): coninului scris n limbajul HTML al paginii cerute. Aceast descriere a dialogului ntre sever-ul de Web i client a fost prezentat prin prisma protocolului HTTP, deoarece nvarea se face mai comod dac cititorul vede mcar o parte a descrierii. Etapele acestui dialog vor fi ns reluate, ntr-un context mai general i mai puin tehnic, pentru asigurarea percepiei golbale asupra procesului.

20 - Introducere n ASP

Ce este ASP?
Active Server Pages (ASP) este o combinaie de tehnologii ce permit crearea unor documente care conin poriuni de HTML i de program. Utilizarea ASP oblig la nvarea unor colecii de instrumente de dezvoltare, limbaje de programare, tehnici i tehnologii de programare. ASP, de asemenea, necesit folosirea unui Web server care prelucreaz cererile clienilor i formuleaz rspunsurile n mod dinamic, individualizate pe baza unui proces logic, a unui fiier, a unor date dintr-o baz de date i prelucreaz datele individuale ale clientului utilizator. ASP permite tratarea fiecrui utilizator ca o entitate unic, dei toi utilizatorii ruleaz acelai program pe un singur calculator care este Web server-ul. De la HTML la ASP HyperText Markup Language (HTML) este un format de fiiere text folosit pentru definirea modului de afiare a coninutului unei pagini de Web, de obicei ntr-un navigator. Acesta este motivul pentru care HTML a devenit att de popular. Pn la apariia HTML singura modalitate prin care un novice n calculatoare putea s afieze text i grafic pe ecran erau editoarele de texte care puteau lucra n modul WYSIWYG (What-You-See-Is-What-You-Get). ns i aici erau probleme. Pentru pstrarea compatibilitii ntre documente toi utilizatorii trebuiau s foloseasc acelai sistem de operare i acelai editor de texte. HTML a schimbat acest calvar, prin simplitatea lui oferind n plus posibilitatea de navigare ntre fiiere fr a ti locul n care se afl acestea. Acest mod de navigare se numete hipertext, iar conceptul a fost inventat de Ted Nelson http://www.east.utcluj.ro/mb/mep/antal cu 30 de ani nainte de apariia HTML. Datorita simplitii HTML, n scurt timp de la scoaterea lui pe pia, acesta a devenit limbajul folosit pentru afiarea informaiilor pe WWW. Dup ce Universitatea Tehnica din Cluj-Napoca milioane de pagini au fost publicate pe Internet, unii dintre cititori au nceput s se plng de Catedra Mecanica si Programare faptul c informaiile nu erau suficient de specifice. Ei doreau o posibilitate de personalizare a Conf. Dr. Ing. ANTAL Tiberiu Alexandru paginilor, interactivitate, posibilitatea de memorare a paginilor sau, mai pe scurt, doreau aplicaii i nu doar simple pagini de informaie. CGI HTML, fiind un limbaj foarte simplu, nu putea ndeplini aceste condiii fr a avea n spate un motor de aplicaii. # Terminologie CGI (Common Gateway Interface) - un standard pentru rularea unor programe externe pe un server WWW HTTP. CGI specific modalitatea de transfer pentru argument ctre programul n execuie ca o parte a unei cereri HTML. De asemenea, definete o mulime de variabile de mediu. Deseori, programul va avea ca rezultat text HTML care va fi retrimis ctre navigatorul care a transmis cererea, dar este posibil i redirectarea ctre un alt URL. CGI permite ca textul HTML ntors s depind ntr-un mod arbitrar de cerere. Programele CGI accept argumentele prin linia de comand. Perl este un limbaj de script des folosit la scrierea programelor CGI. Cnd server-ul primete o cerere de execuie CGI creeaz un nou proces pentru execuia programului extern. Dac dintr-un oarecare motiv programul "crap" sau cererile ctre server vin ntr-un numar mult prea mare, acesta nu va putea retrimite rspunsurile n timp util si se va "mpotmoli" n procese, performanele lui scznd mult. URL (Uniform Resource Locator) - un standard pentru specificarea unui obiect pe Internet. Se utilizeaz n documentele HTML pentru specificarea sursei unei hiperlegturi. Iat cteva exemple:
ftp://wuarchive.wustl.edu/mirrors/msdos/graphics/gifkit.zip ftp://spy:[email protected]/pub/topsecret/weapon.tgz

Introducere n ASP - 21

http://www.w3.org/default.html news:alt.hypertext telnet://dra.com mailto:[email protected] http://wombat.doc.ic.ac.uk/?Uniform+Resource+Locator http://www.w3.org/default.html#Introduction

Partea din faa caracterului : specific schema de accesare sau protocolul. Partea de dup : se interpreteaz n funcie de schema de acces. n general, cele dou caractere // descriu un nume de host (host - un nume care identific unic un calculator pe Internet; alte forme folosite mai sunt: host:port sau pentru FTP utilizator: parola @host sau utilizator@host ). Schemele includ ftp, http, gopher sau WAIS. Schema fiierului poate fi folosit numai pentru referirea unui fiier aflat pe host. Scheme mai puin folosite sunt news, telnet sau mailto (e-mail). Numarul de port poate fi omis din URL, caz n care acesta ia valoarea implicit de 80. Ultima parte, opional, din URL poate fi un ir de caractere precedat de ? sau un fragment de identificare precedat de # pentru specificarea unei poziii particulare n document. # hiperlegtur - o referin dintr-un punct al unui document hipertext ctre un alt document sau o alt poziie din acelai document. Navigatoarele afieaz hiperlegturile dintr-un document ntr-o form i culoare distinct de textul obinuit al acestuia. Atunci cnd utilizatorul activeaz o hiperlegtur (printr-un clic de mouse pe aceasta) navigatorul va afia destinaia stocat n hiperlegtur. # limbaj de script (script language) - un limbaj de programare relativ mic, deseori http://www.east.utcluj.ro/mb/mep/antal interpretat (nu compilat). Universitatea Tehnica din Cluj-Napoca HTML a fost ajutat de CGI s poat rspunde cerinelor tot mai dure formulate de utilizatori. O Catedra Mecanica si Programare aplicaie CGI se ruleaz peConf. Dr. Ing. ANTAL Tiberiu Alexandru server. Cnd navigatorul contacteaz server-ul i formuleaz cererea, aplicaia CGI va ntoarce text HTML navigatorului. La nivelul aplicaiei CGI se pot realiza prelucrri ale informaiilor trimise prin cererea navigatorului i se poate genera un rspuns care difer n funcie de anumite condiii. Dei aplicat iile CGI pot fi scrise n aproape orice limbaj de programare, majoritatea programatorilor au folosit limbajul Perl (Practical Extraction and Report Language, deseori numit n lumea bun a programatorilor Pathologically Eclectic Rubbish Lister) datorit posibilitilor avansate a lui de prelucrare a textelor. Programele CGI folosesc formulare pentru a interaciona cu utilizatorul n vederea realizrii unor cutri i pentru a ntoarce rspunsuri personalizate. Din pcate CGI avea cteva probleme. Primele versiuni de CGI trebuiau s ncarce n memorie aplicaia CGI pentru fiecare cerere. n cazul unor site-uri cu trafic mai mare aceasta nsemna aproximativ 100 de cereri pe secund. ncrcarea i descrcarea aplicaiilor lua ns mult din timpul de lucru al Web server-ului. Acesta este motivul pentru care firmele serioase de software de Web au cutat alte soluii. Noile concepte au fost standardizate sub numele de Internet Server Application Programming Interface (ISAPI) sau, n cazul server-elor Netscape, Netscape Server Application Programming Interface (NSAPI). n acest caz aplicaiile CGI puteau fi rulate ca o parte a server-ului de Web (nu mai erau aplicaii externe lui) fr a mai trece prin ncrcarea i descrcarea lor cu fiecare cerere. Avantaje ASP Cteva dintre avantajele principiale ale ASP sunt prezentate n continuare. Independena de limbajul de programare Motorul ASP nu depinde de un anumit limbaj de programare. Motorul ASP nu ruleaz codul scris de programator. El este o gazd independent de limbajul de script folosit. n acest fel, el poate folosi orice limbaj care este compatibil cu cerinele descrise n Microsoft Scripting Host. Dac este cazul, cod n mai multe limbaje de programare poate fi scris pe aceeai pagin. Motorul ASP

22 - Introducere n ASP

va separa codul script de HTML, apoi va cere motorului corespunztor s-l ruleze. Majoritatea codului care urmeaz va fi scris n limbajul VBScript, cu except ia unei pa rt i scurte care va fi scrisa n JavaScript (n secvent ele de cod urmatoare caracterul E are semnifica o linie ntrerupta din motive de spat iu). ASP este simplu de nv|at Una dintre problemele calculatoritilor este gsirea unui limbaj de programare pe care ne-programatorii s-l poat nelege n vederea implementrii unor operaii tipice anumitor munci. Ideea reutilizrii codului scris de cineva n alt parte permite crearea unor aplicaii funcionale chiar i de ctre neprofesionitii n programare. ASP face legtura ntre mai multe tehnologii. Astfel, componente software scrise de programatori profesioniti pot fi integrate n orice aplicaie fr mult efort de catre programatorii ne-profesionisti. Alte metode pentru crearea de pagini Web dinamic ASP este cea mai nou modalitate de creare a paginilor Web dinamice, dar nu este singura modalitate de lucru. Prin anii '90 cea mai utilizata tehnologie Web era programarea CGI. Programe CGI Programele CGI sunt aplicat ii executabile pe care server-ul de Web le ruleaz atunci cnd navigatorul lanseaz o astfel de cerere. Programul CGI prelucreaz cererea prin codul scris i ntoarce text HTML navigatorului. Diferena dintre un program CGI i o pagin de Web static http://www.east.utcluj.ro/mb/mep/antal este aceea c textul HTML ntors navigatorului poate fi diferit n funct ie de utilizatorul care face cererea, a locului de unde o face i a momentului ales. Microsoft a observat c programele CGI Universitatea Tehnica din Cluj-Napoca nu sunt cel mai eficient mod de prelucrare a cererilor pentru generarea unui coninut activ. Catedra Mecanica si Programare Motivul ineficienei este necesitatea ncrcrii i descrcrii programului CGI la fiecare cerere. Conf. de lucru const n protocolul de transfer hipertext (HTTP Explicaia folosirii acestui mod Dr. Ing. ANTAL Tiberiu Alexandru HyperText Transfer Protocol). O cerere HTTP este o tranzacie scurt ntre un client i un server. Att server-ul ct i clientul vor uita c tranzacia a avut loc dup derularea ei. La fiecare tranzacie HTTP clientul i server-ul, pe baza unui protocol fix, vor derula aceeai comunicaie. Apoi, ntruct server-ul uit cine a fost clientul va descrca din memorie programul CGI ncrcat ca urmare a cererii navigatorului. Dac apare o nou cerere programul CGI trebuie rencrcat, iar aceast rencrcare este deseori mai nceat dect execuia programului n sine. Din punctul de vedere al server-ului de Web activitatea de ncrcare a programelor CGI este neproductiv. Soluia la aceast problem s-a numit ISAPI. Ce este ISAPI? Pentru eliminarea acestei probleme legate de aplicaiile CGI, Microsoft a introdus o nou interfa numit ISAPI (Internet Server Application Programming Interface). Aici, timpul necesar pentru ncrcarea programului CGI se pstreaz, dar acesta nu mai este descrcat din memorie la terminarea rezolvrii cererii. El va rmne ncrcat n memorie att timp ct server-ul funcioneaz sau pe o durat de timp predefinit. Exist dou tipuri de programe ISAPI: aplicaii ISAPI i filtre ISAPI. Aplicaii ISAPI Aplicaiile ISAPI se ruleaz dup ce server-ul de Web a primit cererea. Aplicaiile ISAPI permit adugarea de noi funcii server-ului de Web cu pstrarea facilitilor deja existente ale server-ului. Motorul ASP este o aplicaie ISAPI. IIS (Internet Information Server) transfer cererile de fiiere ASP motorului ASP care prelucreaz cererea pentru a ntoarce coninutul dinamic. Filtre ISAPI Filtrele ASP sunt aplicaii care se ruleaz nainte ca server-ul de Web s primeasc o cerere n

Introducere n ASP - 23

acest scop. Acestea, deseori, permit monitorizarea sau interceptarea unor cereri de prelucrri speciale. Cnd se folosesc ASP i HTML mpreun|? HTML este un limbaj simplu i flexibil pentru organizare i formatare, dar nu are integrat un limbaj de programare. Dac se dorete afiarea de texte statice, HTML este perfect. Dac ns coninutul de afiat se schimb des sau acesta trebuie personalizat pentru grupe de utilizatori HTML nu poate face fa ntruct la nivelul lui nu se pot lua decizii. Pentru acest scop este nevoie de un limbaj de programare. Scripturile ASP ofer mecanisme care permit lucrul cu baze de date, luarea unor decizii, accesul la resursele hard ale calculatorului server etc. pentru generarea de pagini HTML cu un coninut actualizat n mod dinamic. Comparaie ntre ASP i alte tehnologii de dezvoltare a aplicaiilor Web Terminologie # component ActiveX - o unitate de cod executabil (.exe, .dll sau .ocx) care respect specificaiile ActiveX pentru crearea obiectelor. Tehnologia ActiveX permite ca programatorii s asambleze componente software reutilizabile ntr-o aplicaie sau ntr-un serviciu software. # COM (Component Object Model) - tehnologie inventat de Microsoft pentru dezvoltarea aplicaiilor prin componente software. COM definete principiile pentru implementarea cu succes a ncapsulrii, polimorfismului i a motenirii mpreun cu o structur pentru http://www.east.utcluj.ro/mb/mep/antal distribuirea acestor componente # DLL (Dynamic Link Library) - o grupare de rutine dintr-o bibliotec ce pot fi apelate din Universitatea Tehnica din Cluj-Napoca proceduri i care se ncarc i se leag n aplicaie, n momentul execuiei acesteia. Catedra Mecanica si Programare Conf. n Ing. ANTAL celelalte tehnologii ASP are cteva avantaje majore Dr. comparaie cuTiberiu Alexandru i medii folosite pentru dezvoltarea aplicaiilor de Web: 1. codul ASP este stocat n fisiere text - fiierele text sunt uor de modificat inclusiv dup depunerea pe server. Au uriaul avantaj de a putea rezolva orice problem folosind un editor de texte simplu. Aplicaiile Web ce depind de cod compilat sau de obiecte ActiveX sunt mult mai greu de ntreinut i de actualizat. codul ASP expira n timp - IIS (Web server-ul firmei Microsoft) oprete execuia codului ASP automat dup 90 de secunde (durata de timp se poate modifica). Dac dintr-o eroare scriem un cod care are o bucl infinit sau dac cineva cere milioane de nregistrri, server-ul nu va fi blocat dect n perioada celor 90 de secunde. Muli furnizori de internet nu folosesc aplicaii compilate pentru motivul c cele ASP expir dup un anumit timp. codul ASP nu blocheaza server-ul - codul ASP are limitri dure, de exemplu nu vei putea citi sau scrie fiirere binare direct cu ASP. Este foarte dificil ca sever-ul IIS s fie blocat, acesta este nc unul dintre motivele pentru care muli furnizori de servicii internet prefer s lucreze cu tehnologia ASP. codul ASP nu necesita nregistrare - Programul de instalare al IIS va instala DLL-urile motorului ASP, cele de script, Microsoft ActiveX Data Objects DLL (ADO) i Microsoft Scripting Runtime DLL. Acestea sunt toate componentele necesare rulrii unei aplicaii ASP. Celelalte instrumente de dezvoltare necesit instalri de componente adiionale pe server i operaii cu registrul de Windows.

2.

3.

4.

24 - Introducere n ASP

5.

aplica-iile ASP sunt mici - ntruct majoritatea DLL-urilor sunt deja instalate pe server t este necesar doar copierea fiierelor cu cod, a imaginilor i a fiierelor de suport pentru ca aplicaia ASP s devin funcional. Pe msur ce aplicaiei i se adaug tot mai multe componente ActiveX compilate ne ndeprtm tot mai mult de o aplicaie mic. aplica-iile ASP pot fi actualizate fa oprirea IIS - la prima vedere nu pare s fie un t ra avantaj mare atunci cnd se ruleaz o singur aplicaie pe server. Atunci ns cnd se ruleaz zeci de aplicaii nimeni nu dorete oprirea server-ului numai pentru c una dintre ele va fi actualizat.

6.

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

Dialogul client-server pe Web - 25

Etapele desf|ur|rii dialogului, ntre client i server, pe Web


Cu fiecare introducere a unui URL nou n cutia de adrese a navigatorului, selectarea unei legturi, sau a transferului unui formular, navigatorul va mpacheta informaii despre el nsui, URL i uneori despre utilizator i le va trimite server-ului de Web sub forma unei cereri. Motorul ASP este o colecie de obiecte care conin informaii despre cerere, tehnologia de script folosit pentru luarea deciziilor, despre modul de tratare a cererii ct i despre server-ul de Web. nainte de a detalia modul de lucru a motorului ASP s vedem anatomia unei cereri. Orice cerere pe Web necesit dou componente, clientul i server-ul de Web. Clientul este, deseori, un navigator dar poate fi i un spider (program care parcurge legturile de pe Web pentru a culege informaii) sau un agent (un program nsrcinat cu gsirea unor informaii specifice care foloseste de regula motoare de cutare). De obicei, server-ul i clientul sunt pe dou calculatoare diferite, dar se poate ca acestea s fie rulate i pe acelai calculator. Att server-ul ct i clientul trebuie s foloseasc acelai protocol pentru a comunica. Protocolul este o convenie cu privire la desfurarea unei sesiuni de comunicaie (iniializare, transfer de informaie i terminare). Exist mai multe protocoale folosite la transferul de informaie pe Web; cele mai comune sunt HTTP i FTP (File Transfer Protocol). Indiferent de protocolul folosit pentru cererile pe Web acestea se rezolv printr-un serviciu de transfer de baz numit, TCP/IP (Transmission Control Protocol/Internet Protocol). Acesta este standardul de comunicaie global pentru dou calculatoare ce schimb informaie prin Internet. Server-ul ruleaz o bucl infinit n care verific http://www.east.utcluj.ro/mb/mep/antal iniializarea comunicaiei. Clientul, trimite o secvena de iniializare pentru a marca nceputul unei sesiuni. Cnd server-ul primete cererea de iniializare valideaz transmisia printr-un rspuns Universitatea Tehnica din Cluj-Napoca ctre client. Apoi, conversaia ntre client i server continu n ambele sensuri pn cnd Catedra Mecanica si Programare rspunsul dat la cerere se termin. Conf. Dr. Ing. ANTAL Tiberiu Alexandru Modul n care clientul trimite cererea Clientul trimite toate cererile unui server de nume (naming server). Acesta are o baz de date cu nume ce sunt asociate unor adrese de IP. Acest server traduce numele adresei de accesat n cifre. O adres de IP este format din patru numere n domeniul 0-255 separate prin caracterele punct. De exemplu: 207.225.123.37. Fiecare adres de IP identific n mod unic un calculator dintr-o reea. Dac primul server de numer nu cunoate adresa dorit atunci o va transmite urmtorului dintr-o ierarhie prestabilit. Dac nici un server de nume nu poate traduce numele adresei ntr-o adres de IP cererea va ajunge la un server de nume mai puternic care stocheaz lista tuturor adreselor publice de IP. Dac nici aici traducerea nu se poate realiza, atunci rspunsul negativ va fi transmis pe baza ierarhiei server-elor de nume pn cnd ajunge napoi la navigator. Acesta este momentul n care navigatorul va afia un mesaj de eroare. n caz de succes, server-ul de nume ntoarce adresa de IP navigatorului, iar acesta va folosi adresa de IP pentru a contacta server-ul de Web asociat numelui respectiv. Multe pagini conin referine la alte pagini sau imagini pe care server-ul de Web trebuie s le cear din alta parte pentru ca pagina s poat fi complet. Astfel, procesul de afiare a unei pagini Web se face prin mai multe conversaii scurte ntre navigator i server. Tipic, navigatorul primete pagina principal, apoi caut referinele ctre alte fiiere, continu cu afiarea paginii principale n timp ce i formuleaz cererile cu privire la referinele ctre fiierele necunoscute. Prelucrarea cererii de c|tre server Din punctul de vedere al server-ului de Web fiecare conversaie este un contact nou. Server-ele de Web nu rein un anumit navigator ntre dou cereri ale acestuia (protocolul HTTP 1.1 are deja

26 - Dialogul client-server pe Web

posibilitatea meninerii unei conexiuni cu cereri multiple). P|rile componente ale unui URL Linia pe care o introducem ca adres n navigator este un URL. Server-ul descompune acest ir n mai multe componente care sunt separate prin dou puncte, slash, punct etc. Fie URL-ul:
http://www.unsite.ro/Programe/default.htm?Pagina=1&Paragraf=2

Elementele componente ale URL-ului de mai sus se prezint n tabelul urmtor: Compoment URL
http

Funcie Protocol Numele domeniului

Descriere Spune server-ului protocolul care l va folosi pentru a rspunde la cerere. Aceast parte din URL se traduce ntr-o adres de IP. Numele de domeniu este format din mai multe pri separate prin caracterele punct.

www.unsite.ro

Programe

default.htm

Server-ul transform acest nume ntr-o cale fizic pe hard disc. http://www.east.utcluj.ro/mb/mep/antal Nume fiier Server-ul va ntoarce coninutul acestui Universitatea Tehnica din Cluj-Napoca fiier. Dac fiierul este unul executabil Catedra Mecanica si(de exemplu fiier ASP) server-ul l va Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandruntoarc coninutul executa n loc s fiierului. Separator Acest caracter separ cererea de fiier de parametrii adiionali trimii mpreun cu cererea. n exemplul prezentat URL-ul are doi parametri Pagina=1&Paragraf=2 . Programele scrise, cum sunt i paginile ASP, pot citi parametrii i-i pot folosi pentru a obine informaii adiionale. Separ numele parametrului de valoarea dat acestuia. Parametrul cu numele Pagina ia valoarea 1 . Toate valorile de parametri se transfer ca iruri de caractere. Programele scrise pot interpreta aceste valori ca numere numai n urma conversiei lor de la ir la numr. Separa perechile parametru=valoare ntre ele. Al doilea parametru cu valoarea lui.

Director virtual

? (semul de ntrebare)

Pagina

Nume parametru

= (semnul egal)

Separator Valoare parametru

&

Separator

Paragraf=2

Pe Web, referirea la fiiere nu se face printr-o cale fizic, ci prin una virtual. Dup transferarea

Dialogul client-server pe Web - 27

URL-ului, server-ul transform calea virtual n una fizic. De exemplu, calea numeCale din URL-ul http://numeSever/numeCale/fisier.asp , este una virtual. Directorul virtual numeCale va fi transformat ntr-o cale ctre un director local de exemplu de forma c:\inetpub\wwwroot\asp\fisier.asp . Server-ul verific existena fiierului cerut. n cazul n care acesta nu exist el va ntoarce mesajul de eroare HTTP 404 - File not found . Dup localizarea resursei cerute server-ul verific dac contul care cere informaiile are drepturile de accesare a resursei. Dac de exemplu, contul de pe care s-a fcut cererea este unul anonim i utilizatorul a cerut un fiier pentru care acel cont nu are drepturi de citire, server-ul va ntoarce mesajul de eroare HTTP 403 - Access Denied . Mesajele de eroare 403 sunt organizate pe subnivele. Se poate, deci ca textul mesajului s fie diferit de cel de sus n funcie de motivul exact care a condus la imposibilitatea deservirii cererii (coninutul la majoritatea mesajelor de eroare poate fi personalizat). Modul n care server-ul r|spunde la o cerere Server-ele difereniaz tipurile de fiiere cerute prin mai multe metode. IIS face aceast difereniere pe baza extensiei fiierului (de exemplu: asp, htm, exe etc.) la fel cu Windows Explorer. Atunci cnd se face clic dublu pe un fiier, Windows Explorer caut extensia fiierului n registru (o baz de date special n care se stocheaz informaii legate de sistem i de aplicaii). http://www.east.utcluj.ro/mb/mep/antal Registrul conine cte o intrare pentru fiecare extensie de fiier nregistrat. Fiecare extensie are asociat o intrare de tip de fiier. Fiecare tip de fiier are asociat un fiier executabil sau o Universitatea Tehnica din Cluj-Napoca modalitate prin care se prelucreaz. Server-ul extrage extensia de fiier din numele lui apoi caut Catedra Mecanica acel program programul asociat acesteia i lanseaz n execuie si Programarepentru a ntoarce fiierul. Conf. Dr. Ing. ANTAL Tiberiu Alexandru Majoritatea server-elor de Web folosesc extensia fiierelor pentru a determina modul de prelucrare a cererii, dar nu folosesc asociaii din registru ci au o list proprie de perechi (extensie, aplicaie), n acest scop. Intrrile n aceste liste poart denumirea de tipuri MIME (Multipurpose Internet Mail Extensions) ntruct programele de e-mail trebuie s cunoasc tipul coninutului fiierului inclus n mesaj. Fiecare tip MIME, asemenea asocierilor din registru, este asociat unui program sau unei aciuni. Server-ul de Web caut lista pentru a gsi extensia corespunztoare fiierului cerut. Majoritatea server-elor care nu gsesc extensia ceruta trateaz problema permind descrcarea fiierului n cauz pe client. Unele server-e au predefinite aciuni n cazul n care se cere un URL care nu are nume de fiier. Deseori, un fiier implicit, cu numele default.htm sau index.htm , va fi ntors. Numele fiierelor implicite de ntors este configurabil, la nivel de server sau, la nivel de director virtual. Server-ul poate trimite informaia cerut pe msur ce genereaz rspunsul sau l poate stoca ntr-un buffer pentru a-l trimite tot, ntr-o singur bucat, atunci cnd acesta este formulat complet. Rspunsul este format din dou pri: antetul (header) i corpul (body). Antetul conine informaii legate de tipul rspunsului. Aici apar: codul rspunsului, tipul de MIME, data i ora dup care rpunsul devine invalid, un URL pentru redirectare, orice valori de cookie (un ir de caractere pe care navigatorul l salveaz pe discul clientului) pe care server-ul dorete s le stocheze. Un cookie poate exista pe durata unei sesiuni de navigare, pn la o anumit dat de expirare sau poate fi permanent. Navigatorul trimite server-ului un cookie asociat unui site pentru fiecare cerere ulterioar adresat pentru acel site. Modul n care clientul prelucreaz| r|spunsul Clientul, deseori un navigator, trebuie s cunoasc tipul coninutului transmis ca rspuns de ctre server. El citete tipul de MIME din antet pentru a determina tipul coninutului. La majoritatea

28 - Dialogul client-server pe Web

cererilor tipul de MIME este text/html sau image/gif , dar ar putea fi i fiier editor de texte, fiier video, fiier audio, o animaie sau orice alt tip de fiier. Asemenea server-ului, navigatorul folosete i el registru i liste de tipuri de MIME pentru a determina modul de afiare a fiierului. Pentru HTML i imagini navigatorul va folosi motorul lui intern. Pentru alte tipuri de fiiere el va apela serviciile de interfaare cu aplicaiile sau plug-ins-urile care pot afia informaiile corect. Navigatorul va asigna toat fereastra lui sau o parte din ea aplicaiei sau plug-ins-ului pentru ca aceasta s-i genereze coninutul. Atunci cnd corpul fiierului conine HTML navigatorul va analiza fiierul pentru a extrage marcajele din coninut. Apoi, marcajele vor fi folosite pentru a determina modul de afiare a coninutului pe ecran. Noile fiierele HTML pot include mai multe tipuri de coninuturi n plus faa de marcaje, text i imagini. Navigatorul le va trata pe fiecare diferit, n funcie de tip, dup cum urmeaz: Cascading Style Sheets (CSS) - CSS conin informaii despre modul de formatare a documentului. Navigatoarele moderne folosesc CSS pentru specificarea culorilor, marginilor, vizibilitii, poziiei etc. elementelor de pe pagin. Script - toate navigatoarele moderne pot rula cod JavaScript, dei, deseori, nu-l ruleaz n acelai mod. Termenul de JavaScript este folosit pentru secvent ele de cod scrise n limbajul de script JavaScript a lui Nestcape, dei el are dou variante n esen identice (aceeai sintax i suport), JScript a lui Microsoft i ECMAScript. n plus, fa de JScript, Internet Explorer permite programarea i n VBScript care este un subset a lui http://www.east.utcluj.ro/mb/mep/antal Visual Basic for Application (un subset a limbajului Visual Basic). Universitatea Tehnica din Cluj-Napoca Componente ActiveX sau Java Applets - acestea sunt programe mici care se ruleaz pe Catedra Mecanica si Programare calculatorul clientului si nu pe server. Componentele ActiveX ruleaz numai pe Internet Conf. Dr. Ing. ANTAL Tiberiu Alexandru Explorer i sub Windows, n timp ce Java Applets ruleaz aproape pe toate navigatoarele i platformele. XML (eXtensible Markup Language) - este un limbaj asemntor cu HTML, ambele au marcaje i coninut, fiind derivate din SMGL (Standard Generalized Markup Language). Marcajele HTML descriu modul de afiare a coninutului i ntr-o msura mai limitat, funciile coninutului. Marcajele XML descriu funciile coninutului. HTML este un limbaj de formatare i afiare n timp ce XML este un limbaj pentru descrierea coninuturilor. Prelucrarea cererilor ASP O cerere de fiier ASP parcurge aceleai etape cu un fiier HTML obinuit pn cnd ajunge la server. Mai departe ns server-ul va dirija cererea ctre motorul ASP n locul motorului implicit IIS. Motorul ASP va citi fiierul cerut fie de pe disc, fie din cache-ul server-ului de IIS dup care va analiza fiierul. Trei dintre etapele prelucrrii codului ASP de ctre server sunt importante din punctul de vedere al programatorului ASP: # motorul ASP va insera toate fiierele include . Aceste fiiere sunt separate de cel cerut iniial i IIS poate insera coninutul lor n fiierul cerut. Dup inserare, IIS prelucreaz fiierul ca i cnd fiierele inserate ar fi parte a celui cerut. Inserarea fiierelor cu include se face nainte ca motorul ASP s prelucreze codul. # motorul ASP ncepe s interpreteze codul. Codul este prelucrat secvenial n ordinea scrierii instruciunilor din fiier, cu excepia seciunilor marcate cu Function sau Sub . motorul ASP ntoarce rspunsul. Se poate controla dac rspunsul ntors de server

Explicarea termenului de script 29

este imediat (rspuns nebuffer-at) sau dac este stocat ntr-un ir pn cnd el este complet (rspuns buffer-at) prin setrile IIS. Navigatorul nu tie nimic despre tehnologia folosit de server pentru a rspunde cererii. Din punctul lui de vedere toate rspunsurile sunt iruri de caractere sau numere. Tipul de MIME din rspuns determin modul n care navigatorul va trata irul. Ce este un Script? Terminologie # Limbaj main - reprezentarea unui program care poate fi citit i interpretat de un calculator. # Limbaj de programare - un limbaj formal folosit pentru programarea calculatoarelor. Definiia unui limbaj particular se face prin sintax (modul n care simbolurile limbajului pot fi combinate) i semantic (semnificaia construciilor din limbaj). # Compilator - un program care convertete un program dintr-un limbaj surs (sau limbaj de programare) n limbaj main (cod obiect). # Interpretor - un program care ruleaz (execut) un alt program. Compilatorul nu ruleaz programul de intrare (programul surs) ci l traduce n cod executabil al mainii. Acest cod constituie ieirea compilatorului (rezultatul compilrii), el fiind stocat ntr-un fiier de unde poate fi ulterior rulat. Acelai program surs poate fi rulat direct de un interpretor sau poate fi compilat, dup care codul rezultat va fi rulat. Un program rulat pe un http://www.east.utcluj.ro/mb/mep/antal interpretor este mai ncet dect unul compilat, dar se poate ca timpul de interpretare s fie mai scurt dect cel de compilare. Interpretarea codului este mai nceat dect rularea Universitatea Tehnica din Cluj-Napoca codului compilat deoarece interpretorul trebuie s analizeze fiecare linie de program la Catedra s regenereze aciunile dorite, n timp ce codul compilat, fiecare reluare a rulrii i trebuie Mecanica si Programare Conf. face aciunea imediat. Dr. Ing. ANTAL Tiberiu Alexandru n cele discutate pn acum am folosit de mai multe ori termenul de script. Din pcate nu exist un rspuns foarte clar pentru acest termen el depinznd de documentaia consultat. Pentru Microsoft, un script este orice limbaj de programare ActiveX care expune o interfa compatibil cu Windows Scripting Host. Dou dintre cele mai comune limbaje de script ale lui Microsoft sunt VBScript i JScript sau JavaScript n cazul lui Netscape. Pentru Sun Microsystems, script nseamn JavaScript rulat pe server ca i pagin JavaScript (JSP - JavaScript Pages), aceast tehnologie fiind cel mai serios concurent al ASP-ului. Este general acceptat, ca sub denumirea de script se nelege un limbaj de programare restrns i interpretat. Limbajele de script, n comparaie cu limbajele obinuite, au un set restrns de instruciuni i de tipuri date. n acest sens VBScript este un subset al limbajului Visual Basic, ns JavaScript nu este un subset al limbajului Java, dei cele dou limbaje seaman mult la nivel sintactic. JavaScript a fost inventat de Netscape ntruct aveau nevoie de un limbaj al crui cod s fie rulat n siguran la nivelul navigatorului. JScript i JavaScript nu sunt identice, dar probabil c n timp vor evolua ctre un singur limbaj ca urmare a standardelor ECMA. Majoritatea navigatoarelor pot rula JavaScript. IE este singurul navigator care tie rula VBScript. n cele ce urmeaz limbajul folosit pentru cod este VBScript deoarece codul ASP se ruleaz pe server i nu pe navigator. Limbajul folosit pe server nu afecteaz navigatorul n nici un fel. VBScript a fost introdus de Microsoft ca fiind limbajul implicit pentru pagini ASP, din acest motiv foarte multe exemple de programe din documentaie sunt scrise n VBScript. Sigur c aceste limbaje nu sunt singurele variante, practic se poate folosi orice limbaj de script compatibil ActiveX (cteva dintre variante ar fi Java, C sau Perl).

30 Explicarea termenului de script

Mai trebuie reinut c programele ASP pot fi rulate att pe server, nainte ca rspunsul s fie complet, ct i pe client (navigator), dup ce rspunsul a nceput s ajung napoi la navigator. Deoarece majoritatea clienilor sunt nc produse Netscape este bine ca la crearea unor aplicaii publice de Internet s se foloseasca JavaScript pentru ntreg codul care se ruleaz pe client. Modul n care server-ul separ| script-ul de coninutul HTML Cnd motorul ASP parcurge fiierul, el separ script-ul de pe server de coninut n dou moduri. Script-ul ASP este separat de coninut prin folosirea delimitatorilor. Unul se folosete pentru marcarea nceputului de cod, "<% ", altul pentru marcarea terminrii codului, "%> ". Exist i o metod mai tradiional, n stil HTML pentru scrierea codului.
<% 'cod ASP %> <script language="JScript" RunAt="Server"> 'cod ASP </script>

n cea de a dou variant textul RunAt="Server" poart denumirea de atribut i spune server-ului s ruleze codul. n lipsa lui, server-ul va ignora codul, n schimb navigatorul va fi cel care va ncerca s-l ruleze. Modul n care server-ul prelucreaz| script-ul Cnd server-ul apeleaz motorul de script ASP acesta prima oar parcurge fiierul i insereaz http://www.east.utcluj.ro/mb/mep/antal toate fiierele include . Apoi, va colecta toate poriunile de script pe baza delimitatorilor. Motorul ASP trateaz tot coninutul ne-script ca un ir pe care l trimite fr modificri clientului. n Universitatea Tehnica din script-ului. n continuare va crea variabilele i componentele externe Cluj-Napoca final va interpreta script-ul Catedra Mecanica si Programare executnd fiecare comand i trimind rspunsul rezultat clientului (rspunsul, n funcie de Conf. Dr. terminarea Tiberiu Alexandru setri, poate fi i buffer-at). DupIng. ANTAL prelucrrii script-ului, motorul va distruge variabilele i componentele externe create pentru rularea script-ului. Dac rezultatul a fost buffer-at, server-ul ntoarce clientului coninutul buffer-ului. Navigatorul i codul ASP Navigatorul nu face diferena ntre pagini ASP sau HTML i nici nu cunoate modul n care server-ul prelucreaz cererile. Tot ceea ce conteaz din punctul lui de vedere este ca transmisia cu server-ul s se desfoare cu respectarea unuia dintre protocoalele de comunicaie.

Introducere n HTML - 31

Introducere n HTML
Acest capitol i propune s expun bazele HTML parcurgnd structurile elementare i metodele de editare. Ce este HTML? HTML este un limbaj pentru specificarea informaiilor de afiare i de aranjare a coninutului unui document. Aceste informaii, numite marcaje, sunt comenzi pe care le au majoritatea editoarelor de text. De exemplu, prin HTML se poate spune calculatorului c documentul conine paragrafe, liste, tabele sau imagini. Motorul de afiare HTML este responsabil de aezarea pe ecran a informaiilor de afiat. Diferena ntre un editor de texte i HTML este c editorul de text este proprietarul formatului de afiare. Din acest motiv, cnd se ncearc transferul fiierelor ntre dou editoare de texte diferite, este necesar conversia de format prin folosirea funciilor import sau export. HTML este un standard deschis, astfel, dac un document este creat n HTML 3.2, majoritatea regiunilor lui vor fi afiate de orice navigator i sub orice sistem de operare. Un document HTML este un fiier text ASCII care conine dou tipuri de informaii - marcajele, texte cuprinse ntre paranteze unghiulare(< > ) i coninutul, textul n afara perechilor de paranteze unghiulare. Navigatorul nu afieaz marcajele, dar le interpreteaza pentru afiarea coninutului. Prile individuale cuprinse ntre parantezele unghiulare se numesc marcaje (tags ) sau comenzi. Exist dou tipuri de marcaje - de nceput i de terminare - iar ele apar ntotdeauna n pereche. http://www.east.utcluj.ro/mb/mep/antal Singura diferen ntre ele este aceea c marcajul de terminare are la nceput un caracter slash "/ ", de exemplu, </B> . Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Sintaxa HTML - marcaje i atribute Conf. Dr. Ing. ANTAL Tiberiu Alexandru Un fiier HTML valid are cteva cerine de baz. Fie exemplul:
<HTML> <HEAD> <TITLE>cursul 1 pagina 1</TITLE> </HEAD> <BODY>Salutare </BODY> </HTML>

Fiierul c1p1.htm , din Figura 6, conine att marcaje ct i coninut fiind vizualizat cu IE. Orice document HTML este structurat n dou pri: antetul (header - care nu se afieaz) i corpul (body - textul care este afiat de navigator). Structura general a unui document este:
<HTML> <HEAD> ... </HEAD> <BODY> ... </BODY> </HTML> -- nceputul documentului HTML -- nceputul antetului documentului -- coninutul antetului -- terminarea antetului -- nceputul corpului documentului -- coninutul corpului -- terminarea corpului terminarea documentului HTML

32 - Introducere n HTML

Figure 6 Modul de afisare de catre IE a fisierului c1p1.htm

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. tipuri de elemente cum sunt paragraf, Fiierele HTML sunt formate dinDr. Ing. ANTAL Tiberiu Alexandru hiperlegturi, liste, tabele etc. Un tip de element reprezint o structur sau implementeaz un comportament predefinit. Fiecare tip de element este format din trei pri: un marcaj de nceput, coninutul i un marcaj de terminare. Numele unui element apare n marcajul de nceput i n cel de terminare precedat de caracterul slash . De exemplu, orice fiier HTML ncepe cu marcajul <HTML> i se termin cu marcajul </HTML> . ntre aceste marcaje pot exista alte marcaje i coninut. n documentaia Microsoft, marcajele care conin alte marcaje se numesc elemente bloc (block elements ). Elementele text (text elements ) se folosesc pentru a marca textul din interiorul elementelor bloc. Un marcaj reprezint o singur comand, dar aceasta mai poate conine i un numr nelimitat de valori asociate comenzii, denumite atribute. Fiecare atribut are un nume i o valoare. Atributul trebuie separat de comand sau de alte atribute, prin spaii albe (white space - unul sau mai multe spaii, tab-uri sau ntreruperi de linie). Folosirea mai multor spaii albe este opional, astfel "Te salut!" i "Te salut!" , vor fi afiate identic de navigator. Scrierea cu litere mari sau mici, a marcajelor sau atributelor, este din nou nerelevant pentru navigator. n acest sens <font> sau <FONT> vor avea aceeai semnificaie. Iat cteva exemple n continuare:
<FONT FACE="Arial" SIZE=12>

Mai sus, marcajul <FONT> are dou atribute - FACE i SIZE , fiecare dintre ele lund o valoare.
<INPUT TYPE="hidden" NAME="txtParam" value='doar un alt exemplu.'>

Pentru delimitarea unei valori de atribut se pot folosi att ghilimelele (") ct i apostroafele ('). Nu toate navigatoarele au nevoie de ghilimele sau apostroafe, n jurul valorilor de atribute, ns

Structura unui document HTML 33

folosirea lor devine util atunci cnd se trece la scrierea codului ASP. Dac vei ncrca codurile de mai sus n navigator nu se va vedea nimic pe ecran ntruct acestea sunt marcaje i nu coninut. Ordinea marcajelor este important! Un marcaj deschis trebuie nchis nainte de scrierea unui alt marcaj sau aa nct s-l cuprind pe primul. Intercalarea marcajelor este interzis. De exemplu, <FONT SIZE=12><I>Text inclinat</FONT></I> este o construcie HTML greit ntruct marcajul <I> apare naintea marcajului <FONT> . Scrierea HTML corect este: <I><FONT SIZE=12>Text inclinat</FONT></I> . Pentru nelegerea ct mai uoar a codului HTML se pot folosi comentarii. Acesta are scrierea: <!--Un comentariu--> . Caracterele < > i alte caractere, cu semnificaie special n HTML, trebuie codificate pentru a putea fi afiate de navigator. Cteva sunt prezentate n tabelul care urmeaz: Pentru afiarea lui
> < "

Se va scrie
&gt; &lt;

http://www.east.utcluj.ro/mb/mep/antal
&quot;

Universitatea Tehnica din Cluj-Napoca & &amp; Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru Structura unui document HTML Documentele HTML au o structur predefinit, iar cel care scrie un astfel de document este obligat s o respecte. Pe de o parte aceasta este o limitare dar, pe de alt parte, documentul devine mai uor de parcurs i de modificat, astfel ntreinerea unui site devine mai simpl.
<HTML> <HEAD> <TITLE>Aici se scrie titlul documentului</TITLE> <META NAME="descriere" CONTENT="Acesta este un document HTML"> <LINK REV="made" HREF="mailto:[email protected]"> </HEAD> <BODY> ... corpul documentului </BODY> </HTML>

Marcajul <HTML> Acest marcaj cuprinde ntregul document. El nu este obligatoriu i indic faptul c textul cuprins este HTML (atributul VERSION poate fi folosit pentru a specifica versiunea). Dac toate informaiile despre document se scriu la nceput i urmeaz imediat toate marcajele legate de corp se poate deduce unde anume se termin header-ul i unde ncepe corpul (body ) documentului. Marcajul <TITLE> Este singurul marcaj obligatoriu n seciunea de HEAD . Fiecarea document HTML trebuie s aib un singur titlu. Acesta este afiat n fereastra de titlu a navigatorului fiind folosit n fiiere bookmark i n listele motoarelor de cutare. Un exemplu este:
<TITLE>O introducere in HTML</TITLE>

34 - Structura unui document HTML

Marcajul <META> Marcajul furnizeaz "meta-informaii" despre document sub forma unor perechi de tipul nume/valoare, dar poate fi folosit i pentru specificarea antetului de document. De exemplu, se poate specifica o descriere a documentului i a programul folosit pentru generarea lui sau se pot furniza date cu privire la autorul lui. Atributele care pot s apar sunt: HTTP-EQUIV=ir | NAME=ir, CONTENT=ir . NAME se folosete pentru a specifica tipul proprietarului, iar CONTENT stocheaz valoarea corespunztoare acestuia. HTTP-EQUIV se poate folosi naintea lui NAME pentru a obliga server-ul s formeze un antet al rspunsului HTTP care respect stilul de antet RFC 822. Acesta poate fi folosit de anumite chache-uri pentru a determina expirarea documentului. Cteva exemple sunt:
<META NAME="Autor" CONTENT="Soricel Alb">

Din cauza liniilor:


<META HTTP-EQUIV="Expira" CONTENT="Tue, 04 Dec 2003 21:29:02 GMT"> <META HTTP-EQUIV="Cuv-ch" CONTENT="Pagini Web, ASP, VBScript"> <META HTTP-EQUIV="Adr" CONTENT="[email protected] (Antal Tibi)">

server-ul trebuie s includ n antetul raspunsului urmatoarele informat ii: Expira: Tue, 04 Dec 2003 21:29:02 GMT Cuv-ch: Pagini Web, ASP, VBScript http://www.east.utcluj.ro/mb/mep/antal Adr: [email protected] (Antal Tibi)

Marcajul <LINK> Universitatea Tehnica din Cluj-Napoca Acest marcaj stocheaz informaii de pagin relativeProgramare pri ale site-ului. De exemplu, Catedra Mecanica si la celelalte se poate folosi un marcaj LINK pentru a ANTAL Tiberiu Alexandru site-ului (toc - table Conf. Dr. Ing. specifica locaia coninutului of contents ), care este urmtorul document (next document ) sau care este locaia foii cu stiluri (style sheet ). Forma general este <LINK REL=ir HREF=URL> , iar atributele care pot s apar sunt: REL=ir, REV=ir, HREF=URL, TITLE=ir . Dou tipuri de relaii sunt permise: REL indic o relaie directa, adica de la documentul curent la cel specificat n URL ; REV indic o relaie invers, adica de la documentul specificat n URL la cel curent. Atributul TITLE se folosete pentru a da titlul relaiei sau URL-ului referit. Unele dintre valorile pe care le ia REL au un efect predefinit (mai jos, acestea sunt next i previous ), iat cteva exemple:
<LINK <LINK <LINK <LINK REL=continut HREF=toc.html> REL=previous HREF=doc31.html> REL=next HREF=doc33.html> REL=capitol REV=continut HREF=chapter2.html>

Marcajul <BODY> Marcajul BODY cuprinde corpul documentului. Un document poate avea un singur BODY . Acesta poate conine urmtoarele elemente: # antete (heading, H1 - H6); # elementul ADDRESS; # elemente bloc; # elemente text. Atributele marcajului BODY sunt: BACKGROUND=URL , BGCOLOR=#RRGGBB , TEXT=#RRGGBB , LINK=#RRGGBB , VLINK=#RRGGBB i ALINK=#RRGGBB . Acestea se pot folosi pentru a seta imagini de fundal (background ) care se repet, culoarea de fond, cea de scris pentru text i cea pentru hiperlegturi. Culorile se formeaz prin specificarea componentelor de rou (red ), verde (green ) i albastru (blue ) n notaie hexazecimal, precedate de caracterul #. De exemplu, pentru a

Formatarea textului - 35

specifica culoarea alb componentele iau valorile zecimale (maxime) 255, 255, 255, iar n hexazecimal #FFFFFF . De asemenea, este corect folosirea urmtoarelor nume, n limba englez, pentru specificarea unei culori: Culoare
black gray maroon purple

Cod
#000000 #808080 #800000 #800080

Culoare
green olive navy teal

Cod
#008000 #808000 #000080 #008080

Culoare
silver white red fuchsia

Cod
#C0C0C0 #FFFFFF #FF0000 #FF00FF

Culoare
lime yellow blue aqua

Cod
#00FF00 #FFFF00 #0000FF #00FFFF

Iat un exemplu:
<body bgcolor=white text=black link=red vlink=maroon alink=fuchsia>

Marcajul BODY este opional. Dac toate elementele din HEAD se scriu la nceput, navigatorul poate s determine locul din care ncepe corpul (BODY ) documetului. Formatarea textului HTML face ca formatarea textului s fie foarte simpl, cu condiia ca s nu conteze foarte mult http://www.east.utcluj.ro/mb/mep/antal modul lui afiare, locul n care apare trecerea la linie nou sau poziia relativ a textului n raport cu alte elemente din pagin. Modul de afiarea a textului este controlat prin folosirea stilurilor de antet (header style ), tipuriUniversitatea(fonts ), culori (colors ) paragrafe (paragraph ) i liste de caractere Tehnica din Cluj-Napoca Catedra Mecanica si Programare (lists ). Conf. Dr. Ing. ANTAL Tiberiu Alexandru Stiluri de antete HTML recunoate ase nivele de antete, scrise <H1> , <H2> pn la <H6> . Numrul semnific poziia antetului dintr-o ierarhie; cu ct valoarea lui este mai mic cu att coninutul este ntr-o ierarhie mai nalt. Majoritatea editoarelor de texte lucreaz n acelai fel cu stilurile de antete. Codul paginii HTML din Figura 7 este prezentat n continuare:
<HTML> <HEAD> <TITLE>Stiluri de antete</TITLE> </HEAD> <BODY BGCOLOR=#FFFFFF TEXT=#000000 LINK=#0000FF VLINK=#800080> <H1>Heading 1</H1> <H2>Heading 2</H2> <H3>Heading 3</H3> <H4>Heading 4</H4> <H5>Heading 5</H5> <H6>Heading 6</H6> <HR> <H1>Ce este ASP?</H1> <H2>De la HTML la ASP</H2> <H2>CGI</H2> <H2>Avantaje ASP</H2> <H3>Independenta de limbajul de programare</H3> <H3>ASP este simplu de invatat</H3> <H2>Alte metode pentru crearea de pagini Web dinamic</H2> <H3>Programe CGI</H3> <H3>Ce este ISAPI?</H3> <H4>Aplicatii ISAPI</H4> <H4>Filtre ISAPI</H4> </BODY>

36 - Formatarea textului

</HTML>

Figure 7 Cele 6 nivele de antet

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. celor ase nivele Tiberiu n IE6. Modul de afiare este specific Figura7 arat modul de afiare a Dr. Ing. ANTALde anteteAlexandru navigatorului, astfel ca nivelele de antete nu vor fi afiate n acelai mod de dou navigatoare diferite. Aliniere, tipuri de caractere Elementele bloc (tabele, imagini, paragrafe etc.) pot fi aliniate prin folosirea atributului ALIGN . Dei atributul poate fi scris n majoritatea elementelor HTML, valorile pe care le poate lua difer n funcie de element. n continuare se va prezenta semnificaia lui ALIGN numai n cazul textului. Valorile posibile n acest caz sunt: LEFT , CENTER , RIGHT , JUSTIFY i au efectul de aliniere la stnga, pe centru, la dreapta sau ntre marginile ferestrei textului marcat. Iat cteva exemple:
<H1 ALIGN="CENTER"> Cum sa nu pierzi timpul ... </H1> <P ALIGN="RIGHT">...Text al unui pragaraf...

Elementul FONT modific tipul de caractere ale textului marcat, iar BASEFONT realizeaz aceeai modificare la nivelul ntregului document. Valoarea implicit a lui BASEFONT este 3 . Iat un exemplu:
<P><FONT SIZE=1>SIZE=1</FONT> <FONT SIZE=2>SIZE=2</FONT> <FONT SIZE=3>SIZE=3</FONT> <FONT SIZE=7>SIZE=7</FONT>

Containere de text Elementele de tipul container au un marcaj de nceput i unul de terminare. Ca urmare a acestei delimitri clare ele pot conine date.

Formatarea textului - 37

Paragraful P se folosete pentru marcarea unui paragraf. Marcajul de terminare este opional ntruct poate fi ntotdeauna dedus de ctre navigator. Atributul opional ALIGN permite specificarea modului de aliniere a coninutului paragrafului. Implicit, acesta este aliniat la stnga (LEFT ). Valori de aliniere corecte sunt i CENTER , RIGHT . Marcajele de tipul bloc pot conine alte marcaje numite, marcaje copil, cum ar fi text, imagini sau comenzi de formatare. Pagina din Figura 8 are codul HTML urmtor:
<HTML> <HEAD> <TITLE>Paragrafe</TITLE> </HEAD> <BODY BGCOLOR=#FFFFFF TEXT=#000000 LINK=#0000FF VLINK=#800080> <P>Primul paragraf <P>Al doilea paragraf <P ALIGN=CENTER>Al treilea paragraf, centrat <BR> Inca tot al treilea paragraf <P ALIGN=RIGHT>Al patrulea paragraf, aliniat la dreapta </BODY>

Figure 8 Afisarea paragrafelor

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

Modul de afiare a paragrafului este din nou dependent de agentul de afiare. La nivelul paragrafului al treilea s-a inclus un marcaj nc nediscutat. n lipsa lui navigatorul va afia textul Inca tot al treilea paragraf n continuarea lui Al treilea paragraf, centrat . Text preformatat Marcajul PRE se folosete pentru a include n corpul documentului port iuni de text n care formatarea este critic. Spre deosebire de alte containere HTML, textul marcat cu o pereche PRE va fi monospaiat, trecerea pe linia urmtoare fcndu-se la apsarea lui <Enter> (line break ) n textul surs. Se pot folosi chiar tabulatori, dei, n acest caz, folosirea spaiilor va avea acelai efect. Ca urmare a modului de afiare a textului cu caractere monospaiate nu se pot face setri

38 - Formatarea textului

de tipuri de caractere (fonts ). Imaginile nu sunt permise ntruct pot conduce la probleme de aliniere. Singurul argument, opional, este WIDTH=n care indic limea textului n numr de caractere (pentru un fiier text setarea caracteristic de lime este WIDTH=80 ). Un exemplu de text preformatat este:
<HTML> <HEAD> <TITLE>Textul preformatat</TITLE> </HEAD> <BODY BGCOLOR=#FFFFFF TEXT=#000000 LINK=#0000FF VLINK=#800080> <PRE> Acest text va fi afisat exact asa cum este scris aici fiind pastrata inclusiv alinierea sau scrierea pe coloane dupa cum se vede Se pot scrie si linii vide (fara text) Se pot folosi marcajele <B>de text ingrosat</B> sau <I>inclinat</I> in textul preformatat. </PRE> </BODY>

El va fi afiat de navigator sub forma: http://www.east.utcluj.ro/mb/mep/antal


Acest text va fi afisat exact asa cum este scris aici Universitatea Tehnica din Cluj-Napoca fiind pastrata inclusiv alinierea Catedra Mecanica si Programare sau scrierea pe coloane dupa cum se vede Conf. Dr. Ing. ANTAL Tiberiu Alexandru Se pot scrie si linii vide (fara text) Se pot folosi marcajele de text ingrosat sau inclinat in textul preformatat.

Stiluri de liste Listele HTML pot fi ordonate (ordered ) sau neordonate (unordered ). Ele pot conine elemente de tipurile bloc, text sau alte liste. Lista neordonat| Marcajul UL indic o list neordonat. Fiecare articol de list trebuie marcat cu LI , caz n care elementul este precedat de un disc sau, dac este nevoie de numerotare, se poate folosi marcajul OL . Tipul caracterului care precede coninutul articolului de list poate fi stabilit prin atributul TYPE care poate lua valorile disc , square sau circle . Iat un exemplu n continuare:
<HTML> <HEAD> <TITLE>Liste neordonate</TITLE> </HEAD> <BODY BGCOLOR=#FFFFFF TEXT=#000000 LINK=#0000FF VLINK=#800080> <UL>Urmeaza lista neordonata de articole: <LI>Articol 1</LI> <LI>Articol 2</LI> <LI>Articol 3</LI> </UL> </BODY>

Lista ordonat| n cazul n care dorim ca elementele listei s fie numerotate se va folosi marcajul

OL .

De

Formatarea textului - 39

asemenea, listele pot fi imbricate, adic n locul unui articol de lista se poate scrie o nou list. n Figura 9, se prezint modul de afiare a listelor de ctre IE6, conform exemplului care urmeaza.
<HTML> <HEAD> <TITLE>Liste neordonate</TITLE> </HEAD> <BODY BGCOLOR=#FFFFFF TEXT=#000000 LINK=#0000FF VLINK=#800080> <UL>Urmeaza lista neordonata de articole: <LI>Articol 1</LI> <LI>Articol 2</LI> <LI>Articol 3</LI> </UL> <OL>Urmeaza lista <LI>Articol <LI>Articol <LI>Articol </OL> ordonata de articole: 1</LI> 2</LI> 3</LI>

<UL TYPE=square>Urmeaza o lista imbricata: <LI>Cumpara verdeturi de la piata</LI> <LI>Cumpara lapte</LI> <OL>Mergi la EN GROSS si cumpara: <LI>Ciocolata</LI> http://www.east.utcluj.ro/mb/mep/antal <LI>Ceai</LI> <LI>Sapun</LI> </OL> Universitatea Tehnica din Cluj-Napoca <LI>Nu uita de nevasta ...</LI> Catedra Mecanica si Programare </UL> </BODY> Conf. Dr. Ing. ANTAL Tiberiu Alexandru

Figure 9 Afisarea listelor n HTML

40 - Formatarea textului

Definiii Marcajul DL permite crearea unei liste cu definiii. Acest stil de list se deosebete de cele precedente prin faptul c fiecare articol al listei are dou pri: termenul care se definete (ncepe cu DT ) i definiia acestuia (ncepe cu DD ). Definiia poate conine elemente bloc. Cele dou exemple care urmeaz sunt afiate de IE6 aa cum se vede n Figura 10. Cea de a doua list este un exemplu de creare a unei liste cu definiii i termeni multipli.
<HTML> <HEAD> <TITLE>Liste de definitii</TITLE> </HEAD> <BODY BGCOLOR=#FFFFFF TEXT=#000000 LINK=#0000FF VLINK=#800080> <DL> <DT>Pacat <DD>Incalcarea unei legi <EM>Divine</EM> <DT>Destin <DD>Suma efectelor legii actiunii si reactiunii, la un moment dat, in viata cuiva </DL> <DL> <DT>Dunarea <DT>Dunarea <DD>Fluviu bine cunoscut din Europa. http://www.east.utcluj.ro/mb/mep/antal <DD>Pe vremea unui anumit Presedinte, o intreprindere de comert exterior folosita des, Universitatea Tehnica din Cluj-Napoca de un anumit Serviciu, pentru ... cine stie Mecanica si Programaresuficient de evaziv ...). Catedra ce (cred ca am fost </DL> Conf. Dr. Ing. ANTAL Tiberiu Alexandru </BODY>

Figure 10 Liste cu definit ii -

Formatarea textului - 41

Alte elemente Cteva dintre elementele mai utile sunt prezentate n continuare: # <HR> (Horizontal Rule ) duce la afiarea unei linii orizontale; din exemplul care urmeaz se pot deduce semnificaia i modul de utilizare a atributelor:
<HR width="50%" align="center"> <HR size="5" width="50%" align="center"> <HR noshade size="5" width="50%" align="center">

(BReak ) realizeaz ntreruperea unei linii, adic realizeaz trecerea la linia urmtoare, dar nu las spaii ntre linii (aa cum se face n cazul paragrafelor);
<BR> <B> <I> <TT>

# # # # #

(Bold ) realizeaz afiarea ngroat a poriunii de text marcate; (Italic ) realizeaz afiarea cu litere nclinate a poriunii marcate; (TeleType ) stil de scriere teletext, textul afiat este monospaiat ;

<BIG > stil de scriere n care caracterele sunt afiate mai mari dect cele normale; <SMALL > stil de scriere n care caracterele sunt afiate mai mici dect cele normale; http://www.east.utcluj.ro/mb/mep/antal <U > (Underline ) stil de scriere n care Cluj-Napoca este afiat subliniat. Universitatea Tehnica din textul marcat

Catedra Mecanica si Programare Iat un exemplu de utilizare n continuare: Conf. Dr. Ing. ANTAL Tiberiu Alexandru
<P><B>text ingrosat</B>, <I>text inclinat</I>, <B><I>text ingrosat si inclinat</I></B>, teletype</TT>, si text <BIG>mare</BIG> si <SMALL>text</SMALL> mic. <TT>text

42 - Manipularea imaginilor

Includerea imaginilor n documentele HTML


Majoritatea paginilor Web conin imagini. Includerea acestora ntr-un document este foarte simpl. Textul i imaginile pot fi aranjate, pentru a ocupa spaiul de afiare, n mai multe feluri cu ajutorul marcajului <IMG> . Marcajul <IMG> O imagine este inclus ntrun document HTML prin folosirea lui IMG mpreun cu atributul SRC=URL . Cea mai simpl form este <IMG SRC="numefis.gif"> i realizeaz afiarea fiierului numefis.gif n paragraful curent. Dac documentul conine mai multe imagini este posibil ca acestea s nu fie afiate n ordinea scrierii lor n pagin. Navigatorul cere imaginile secvenial, dar server-ul poate s trimit rspunsurile ntr-o alt ordine. Marcajul are cteva atribute opionale. Limea i nlimea pot fi explicit specificate prin atributele WIDTH="numr" i HEIGHT="numr" . n lipsa lor navigatorul afieaz imaginea la dimensiunile originale. Folosirea lor va ajuta navigatorul s realizeze arajarea textului i a imaginilor n pagin. Dac dimensiunea unei imagini nu este cunoscut navigatorul afieaz simbolul de imagine lips (missing image icon ) pe locul acesteia pn cnd aceasta este descrcat de pe server. Dac dimensiunile sunt cunoscute atunci navigatorul va putea face http://www.east.utcluj.ro/mb/mep/antal calcule cu privire la aranjarea obiectelor n pagin. n lipsa dimensiunilor imaginilor este posibil ca buci de text s fie mutate n pagin ca urmare a estimrii greite a mrimii imaginilor. Universitatea Tehnica din Cluj-Napoca Rezultatul final va fi o pagin care se ncarc mai ncet dect aceea care conine marcajele WIDTH Catedra Mecanica si Programare i HEIGHT . Conf. Dr. Ing. ANTAL Tiberiu Alexandru Majoritatea imaginilor din paginile HTML sunt n formatele GIF (Grafical Interchange Format ) sau JPEG (Joint Photographical Experts Group ) deoarece mrimea acestora, ca urmare a comprimrii, este semnificativ mai mic dect a altor formate grafice. Din punct de vedere tehnic nu exist limitri cu privire la formatul fiierelor de imagine, dar este posibil ca navigatorul s nu le poat afia dect cu ajutorul unor componente de vizualizare (viewers ). Nativ, Netscape, tie afia fiiere GIF i JPEG , iar IE tie afia, n plus i formatul BMP (bitmap ). Celelalte formate se afieaz de ctre IE cu folosirea unor componente plug-in (un fiier care conine date pentru modificarea, mbuntirea sau extinderea operaiilor unei aplicaii program printe; plug-in-ul este specific unui anumit sistem de operare i afieaz sau interpreteaz un format particular de fiier cum ar fi Shockwave, RealAudio, Adobe PDF, Macromedia Flash etc.) sau extensii ActiveX. Netscape, tie sa lucreze doar cu plug-in-uri, iar cu ajutorul unor componente software poate ajunge s lucreze i cu controale ActiveX. Spre deosebire de programele executabile obinuite, lipsa unei anumite resurse nu duce la blocarea afirii, navigatorul ignornd toate resursele pe care, din anumite motive, nu le poate accesa. n plus fa de atributele deja discutate, n tabelul care urmeaz se prezint cteva dintre valorile pe care le poate lua atributul de aliniere a imaginii ALIGN . Valoarea atributului de aliniere
ABSBOTTOM

Rezultat Alinieaz imaginea relativ la punctul cel mai de jos posibil din text. Alinieaz imaginea n centru absolut al textului.

ABSMIDDLE

Manipularea imaginilor - 43

Valoarea atributului de aliniere


BASELINE BOTTOM LEFT MIDDLE RIGHT TEXTTOP TOP BORDER

Rezultat Alinieaz imaginea la linia de baz a textului. Alinieaz imaginea la partea de jos a marcajului n care apare. Alinieaz imaginea la partea stng a marcajului n care apare. Alinieaz imaginea la mijlocul marcajului n care apare. Alinieaz imaginea la dreapta marcajului n care apare. Alinieaz inaginea la marginea de sus a textului Alinieaz imaginea la marginea de sus a marcajului n care apare O valoarea ntreag care determin grosimea chenarului. Valoarea implicit este 1. Valoarea 0 marcheaz lipsa chenarului. O valoare ntreag ce determin spaiul ntre marginea stng i dreapt a imaginii i obiectele din jurul acesteia. O valoare ntreag ce determin spaiul ntre marginea de sus i de http://www.east.utcluj.ro/mb/mep/antal jos a imaginii i obiectele din jurul acesteia.

HSPACE

VSPACE

Universitatea Tehnica din Cluj-Napoca Plasarea imaginilor n pagin| Catedra pe pagin si poziia ce rezult din analiza documentului Implicit, navigatorul plaseaz imaginea Mecanica n Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru HTML din care face parte. Exist ns aciuni care pot modifica poziia implicit. Dac, de exemplu, primul marcaj din pagin este IMG imaginea va fi plasat n colul stnga sus al paginii clientului. Pagina client este zona din fereastr navigatorului n care se afieaz coninutul documetului. n cazul exemplului prezentat n continuare orice text care urmeaz imaginii va fi afiat n continuarea marginii din dreapta jos a imaginii, deoarece modul de plasarea a ei n pagin mut linia de baz n partea de jos a imaginii (vezi Figura 11).
<HTML> <HEAD> <TITLE>Plasarea imaginilor in pagina</TITLE> </HEAD> <BODY> <IMG SRC="./imagini/NUFAR.JPG" WIDTH="227" HEIGHT="179"> Aceasta imagine se numeste NUFAR.JPG si este stocata in subdirectorul IMAGINI. </BODY>

Dac se dorete modificarea setrii implicite prin adugarea unui atribut de aliniere, poziia imaginii se va modifica. De exemplu, prin scrierea <IMG SRC="./imagini/NUFAR.JPG" ALIGN="RIGHT" WIDTH="227" HEIGHT="179"> imaginea va fi aliniat n colul din dreapta sus al ferestrei clientului. Dac se adaug text dup imagine, ne ateptm ca acesta s fie afiat pe linia imediat urmtoare imaginii, ncepnd din partea de jos a imaginii. n realitate ns modificarea alinierii imaginii o plaseaz pe aceasta corect, la dreapta, dar textul va fi afiat de navigator ncepnd cu colul stnga sus al ferestrei client. Dac valoarea atributului de aliniere se modific de la RIGHT la LEFT , textul va fi afiat n continuarea colului dreapta sus al imaginii i nu plecnd din colul dreapta jos, aa cum ne-am atepta. Pentru ca imaginea s fie afiat ntrun paragraf separat de text trebuie pus un paragaraf nou nainte i unul dup imagine sau se pun <BR> -uri nainte i dup imagine.

44 - Manipularea imaginilor

Figure 11 Plasarea implicita a imaginilor

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra imaginii Ocuparea cu text a spaiului din jurul Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru HTML nu permite poziionarea unei imagini n texte n aa fel nct textul s ocupe spaiul rmas, att n dreapta i ct i n stnga, ntre marginile de afiare i cele ale imaginii. Textul poate s ocupe, ns, numai partea din stnga sau numai pe cea din dreapta, prin setarea atributului ALIGN la una dintre valorile LEFT sau RIGHT . O soluie acceptabil se prezint n pagina din Figura 12 al crei cod este:
<HTML> <HEAD> <TITLE>Pozitionarea imaginilor in text</TITLE> </HEAD> <BODY> Fisierul GIFANIMAT.GIF <IMG SRC="./imagini/GIFANIMAT.GIF" ALIGN="CENTER" VALIGN="CENTER" WIDTH="120" HEIGHT="50"> a fost creat cu ULEAD GIF Animator 2.0. </BODY> </HTML>

Aceast strategie funcioneaz ns numai n cazul unor imagini mai mici i realizeaz intercalarea ei, ntr-un text, prin centrarea imaginii n spaiul de afiare definit de atributele WIDTH i HEIGHT .

Manipularea imaginilor - 45

Figure 12 Inserarea imaginilor n text

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Imagini de fond Conf. Dr. Ing. ANTAL pentru Alexandru Att IE ct i Netcape permit folosirea unei imagini Tiberiudefinirea fondului de pagin. Imaginea este specificat ca atribut al marcajului BODY dup cum urmeaz:
<HTML> <HEAD> <TITLE>Plasarea unei imagini de fond</TITLE> </HEAD> <BODY BACKGROUND="./imagini/NUFAR.JPG" TEXT=#FFFFFF> <P ALIGN="CENTER"> <UL> <LI>Acesta este un NUFAR!</LI> <LI>Acesta este un NUFAR!</LI> <LI>Acesta este un NUFAR!</LI> </UL> </P> </BODY> </HTML>

n Figura 13 se observ modul n care imaginea ocup spaiul de afiare. Aceasta este afiat de mai multe ori, fiecare imagine fiind imediat alturat celei anterioare. Afiarea ncepe din colul stnga sus, apoi imaginea se repet pe toat limea paginii. Cnd se ajunge la marginea din dreapta, afiarea rencepe din marginea stng imediat sub prima imagine. Aceast tehnic de afiare este folosit deoarece, deseori, fondul este o imagine foarte simpl i mic prin care se d o textur i o culoare fondului. IE permite i o afiare special a unei imagini de fond, fr repetarea acesteia dup ablonul deja descris, de obicei, centrat pe verical i orizontal care are ordinea 0 pe axa z. Astfel, toate celelalte elemente care se afieaz se pun peste aceast imagine (denumirea acestei tehnici de afiare, n englez, este aceea de watermark ).

46 - Manipularea imaginilor

Figure 13 Imagini de fond

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

Hiperlegaturi - 47 7

Realizarea hiperleg|turilor
Hiperlegturile asigur, la un nivel minimal, controlul utilizatorului asupra aplicaiei, mai precis asupra locului n care utilizatorul poate s ajung pe ecran sau n document. Hiperlegturile sunt o modalitate prin care este posibil poziionarea pe o nou locaie sau topic. Pe msur ce utilizatorul parcurge mulimea de hiperlegturi navigatorul formeaz o list cu istoria locaiilor vizitate. Aceasta se poate folosi pentru travesarea invers a locaiilor parcurse. Marcajul de ancorare Marcajul A permite legarea unei locaii de o alta, prin specificarea unui URL. URL-ul este specificat ca o valoare a atributului HREF . Iat un exemplu de scriere:
<A HREF="http://server/site.pagina.htm"> Un text, de exemplu salt la o pagina </A>

Navigatorul afieaz pe ecran numai textul Un text, de exemplu salt la pagina dintre nceputul marcajului <A> i sfrsitul lui, formatat astfel Un text, de exemplu salt la o pagina . Acest text este cel pe care se fac clic pentru a realiza hiperlegtura. Exist dou tipuri de marcaje pentru ancorare - legtura (link ) i coninutul (bookmark ). Marcajul de legtur este cel care activeaz o hiperlegtur, efectul acesteia este cel de realizare a procesului de legare. Marcajul de coninut este destinaia unei legturi i nu este afiat pe ecran. Navigatoarele afieaz http://www.east.utcluj.ro/mb/mep/antal n culori distincte o legtur dup ce a fost vizitat fat a de culoarea de afiare folosit nainte de - vizitare. Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Pentru crearea unui marcaj de coninut trebuie folosit atributul de ancorare NAME dup cum Conf. Dr. Ing. ANTAL Tiberiu Alexandru urmeaz: <A NAME="Marcaj1"> . Se poate realiza saltul la un marcaj n acelai document sau unul aflat ntr-un alt document. Pentru a sri la marcajul de coninut definit mai sus scriem: <A HREF="#Marcaj1"> . Semnul # din faa valorii atributului HREF informeaz navigatorul c pagina de legtur este un marcaj de coninut i nu un alt document. Dac se dorete saltul la un marcaj de coninut al unui alt document va trebui specificat i URL-ul documetului dup cum urmeaz: <A HREF="http://server/site.pagina.htm#Marcaj1"> . Exemplul care urmeaz este afiat de IE dup cum se vede n Figura 14. El prezint modul de realizare a unui document care are cuprins. Secvena <P>&nbsp;</P> se folosete pentru a crea, artificial, spaii ntre capitole. Astfel, capitolele nu pot fi afiate pe o singur pagin, iar efectul salturilor ntre pagini devine vizibil.
<HTML> <HEAD> <TITLE>Aplicatii ale marcajului de acorare <A></TITLE> </HEAD> <BODY BGCOLOR=#FFFFFF TEXT=#000000 LINK=#0000FF VLINK=#800080E BACKGROUND="./imagini/Fond.jpg"> <A NAME="Marcaj1"> <H1>Continut</H1></A> <A HREF="#Marcaj2">Capitolul 1</A><BR> <A HREF="#Marcaj3">Capitolul 2</A><BR> <A HREF="#Marcaj4">Capitolul 3</A><BR> <P>&nbsp;</P> <A NAME="Marcaj2"> <H2>Capitolul 1</H2></A> Aici se scrie continutul capitolului 1. <A HREF="#Marcaj1"><FONT SIZE="1" COLOR="RED">(inapoi laE continut)</FONT></A><BR> <P>&nbsp;</P> <P>&nbsp;</P>

48 - Hiperlegaturi 7

<P>&nbsp;</P> <P>&nbsp;</P> <P>&nbsp;</P> <P>&nbsp;</P> <P>&nbsp;</P> <A NAME="Marcaj3"> <H2>Capitolul 2</H2></A> Aici se scrie continutul capitolului 2. <A HREF="#Marcaj1"><FONT SIZE="1" COLOR="RED">(inapoi laE continut)</FONT></A><BR> <P>&nbsp;</P> <P>&nbsp;</P> <P>&nbsp;</P> <P>&nbsp;</P> <P>&nbsp;</P> <P>&nbsp;</P> <P>&nbsp;</P> <A NAME="Marcaj4"> <H2>Capitolul 3</H2></A> Aici se scrie continutul capitolului 3. <A HREF="#Marcaj1"><FONT SIZE="1" COLOR="RED">(inapoi laE continut)</FONT></A><BR> <P>&nbsp;</P> <P>&nbsp;</P> <P>&nbsp;</P> <P>&nbsp;</P> <P>&nbsp;</P> http://www.east.utcluj.ro/mb/mep/antal <P>&nbsp;</P> <P>&nbsp;</P> </BODY> Universitatea Tehnica din Cluj-Napoca

Figure 14 Ancorarea la nivelul unui document

Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

Coninutul fiierului c1p11a.htm :


<HTML> <HEAD>

Hiperlegaturi - 49 7

<TITLE></TITLE> </HEAD> <BODY> <P>Care dintre urmatoarele afirmatii <EM>nu</EM> este corecta?</P> <OL> <LI><A HREF="c1p11b.htm">Rosu cu verde da albastru.</A></LI> <LI><A HREF="c1p11c.htm">Rosu cu albastru da verde.</A></LI> <LI><A HREF="c1p11d.htm">#00FFFF este albastru.</A></LI> </OL> <P>Clic pe raspuns.</P> </BODY> </HTML>

Coninutul fiierului c1p11b.htm :


<HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY> <P>Incorect!</P> <P>Ati selectat: &quot;1. Rosu cu verde da albastru.&quot; Rosu cu verde daE galben. Clic <A HREF="c1p11a.htm">pentru a continua</A> cu reluarea intrebarii.</P>

http://www.east.utcluj.ro/mb/mep/antal
</BODY> </HTML>

Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Coninutul fiierului c1p11c.htm : Conf. Dr. Ing. ANTAL Tiberiu Alexandru
<HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY> <P>Incorect!</P> <P>Ati selectat: &quot;2. Rosu cu albastru da verde; Rosu cu albastru da mov. Clic <A HREF="c1p11a.htm">pentru a continua</A> cu reluarea intrebarii.</P> </BODY> </HTML>

Coninutul fiierului c1p11d.htm :


<HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY> <P>Corect!</P> <P>Ati selectat: &quot;3. #00FFFF este albastru.&quot; </P> </BODY> </HTML>

Exemplul dorete s arate modul n care se poate realiza un document cu hiperlegturi ctre alte documente i modul din care la selectarea unei hiperlegrturi se poate reveni la pagina de la care s-a plecat. n Figura 15 se prezint modul n care IE afieaz pagina principal de pe care se poate sri la alte pagini, iar n Figura 16 se prezint modul de revenire la pagina principal dintr-

50 - Hiperlegaturi 7

o pagin la care s-a srit. Figure 15 Exemplu cu hiperlegaturi

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru Figure 16 Revenirea la pagina init iala a - ntrebarilor

Ancorarea la imagini Legturile nu sunt limitate numai la poriuni de texte. O imagine poate fi folosit pe post de surs a legturii. Paginile arat ceva mai bine dac elemente grafice sunt folosite pentru a forma

Hiperlegaturi - 51 7

legturile. Pentru a crea o hiperlegtur folosind o imagine, marcajul de imagine trebuie pus n interiorul marcajului de ancorare. Iat un exemplu:
<A HREF="http://server/site/pagina.htm" <IMG SRC="http://server/site/imagine.gif" BORDER=0>> </A>

Implicit, navigatorul afieaz imaginea cu chenar. Culoarea chenarului se motenete de la culoarea legturilor ctre pagini. Dac nu dorii afiarea chenarului proprietatea BORDER trebuie setata la valoarea 0 .

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

52 - Tabele

Tabele
Tabelele permit organizarea articolelor n linii i coloane. Deoarece navigatorul ignor spaiile albe, una dintre aplicaiile tabelelor este afiarea articolelor care trebuie separate prin spaii albe. Navigatoarele moderne (peste versiunea 4) permit poziionarea absolut de articole la nivel de pixel. Totui, chiar i n acest caz, tabelele sunt utilizate pentru afiarea datelor pe coloane. Marcajul TABLE conine alte marcaje pentru definirea coloanelor i rndurilor. Tabelele pot avea trei seciuni: antetul (header ), corpul (body ) i sfritul (footer ). Rndurile de antet i de sfrit sunt fixe, nu se poate face defilare la nivelul lor i sunt opionale. Dac se include un antet sau un sfrit atunci acesta trebuie s aib i o seciune de corp. Tabelele pot avea i marcajul CAPTION , pentru a da explicaii cu privire la coninutul lor. Navigatorul va afia acest text formatat deasupra antetului. Setrile de chenar nu se aplic i explicaiilor. n plus, IE poate conine marcajele COLGROUP i COL care pot simplifica formatarea tabelelor. Marcajul COLGROUP definete o mulime de coloane, iar COL definete coloane individuale la nivelul grupului de coloane. Marcajele <TABLE>, <TR> i <TD> Tabelele ncep cu marcajul <TABLE> . Rndurile sunt delimitate prin marcajul <TR> (Table Row ), iar coloanele prin marcajul <TD> (Table Data ). nchiderea marcajelor folosite pentru definirea unui tabel este obligatorie dac motorul de afiare nu este IE. Numai n acest caz marcajele de http://www.east.utcluj.ro/mb/mep/antal nchidere sunt opionale. Cel mai simplu tabel HTML (un rnd, o coloan) este: Universitatea Tehnica din Cluj-Napoca <HTML> <HEAD> Catedra Mecanica si Programare <TITLE>Introducere in Conf. Dr. Ing. ANTAL Tiberiu Alexandru Tabele</TITLE> </HEAD> <BODY BGCOLOR=#FFFFFF TEXT=#000000 LINK=#0000FF VLINK=#800080> <TABLE> <TR> <TD>Aha</TD> </TR> </TABLE> </BODY> IE va afia acest tabel asa cum se vede n Figura 17. Observai c, nu prea seaman a tabel. Din fericire exist un numr de atribute care pot controla poziia articolelor i modul de afiare. Cteva dintre atributele care ajut la nfrumusearea tabelelor sunt: Atribut
ALIGN

Descriere Atributul de aliniere poate lua una dintre valorile LEFT , RIGHT sau CENTER . Controleaz poziia pe orizontal a tabelului n pagin. Atributul, asemenea lui BACKGROUND din BODY , permite inserarea unui URL cu imagine. Navigatorul afieaz imaginea, pe axa z, la nivelul 0, iar toate datele vin afiate peste imagine. Este o valoare de culoare HTML pentru fondul tabelului. Valoarea poate fi suprascris la nivelul fiecrui rnd sau al celulelor individuale. O valoare ntreag care controleaz grosimea chenarului desenat n jurul tabelului i al celulelor individuale. Valoarea implicita este 0, adic linia de separare nu se afieaz.

BACKGROUND

BGCOLOR

BORDER

Tabele - 53

Atribut
CELLPADDING

Descriere O valoare ntreag care controleaz spaiul dintre coninutul i chenarul celulei. O valoare ntreag care controleaz spaiul dintre celule. O valoare ntreag care specific numrul de coloane ale tabelului. Atunci cnd se folosete, duce la creterea vitezei de afiare a tabelului. n lipsa lui navigatorul trebuie s parcurg ntregul tabel nainte de a-l afia; n prezena lui afiarea rndurilor poate ncepe imediat. Valoare ntreag care informeaz navigatorul cu privire la nalt imea necesar pentru afiarea tabelului. Asemenea lui COLS , prin prezena lui crete viteza de afiare a tabelului. Poate fi specificat n pixeli sau n procente din nlimea zonei client vizibila. Valoare ntreag care informeaz navigatorul cu privire la lat imea necesar pentru afiarea tabelului. Asemenea lui COLS , prin prezena lui crete viteza de afiare a tabelului. Poate fi specificat n pixeli sau n procente din limea zonei client vizibila. Realizeaz alinierea pe vertical a datelor ntr-o celul. Valori posibile http://www.east.utcluj.ro/mb/mep/antal sunt: TOP , MIDDLE , BOTTOM , BASELINE . Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

CELLSPACING COLS

HEIGTH

WIDTH

VALIGN

Figure 17 Cel mai simplu tabel HTML

n Figura 18 se prezint modul n care pot fi utilizate atributele pentru realizarea unei afiri mai spectaculoase. Codul HTML este prezentat n continuare. Se observ efectele modificrii grosimii chenarului, a specificrii dimensiunilor tabelului, a poziionrii pe orizontal i pe vertical asupra textelor de afiat n celulele tabelului. n final, se arat modul de afiare a unei imagini

54 - Tabele

ntr-o celul de tabel. Figure 18 Efecte de afisare prin folosirea atributelor

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

<HTML> <HEAD> <TITLE>Introducere in Tabele</TITLE> </HEAD> <BODY BGCOLOR=#FFFFFF TEXT=#000000 LINK=#0000FF VLINK=#800080> <TABLE> <TR> <TD>Aha</TD> </TR> </TABLE> <TABLE BORDER=1> <TR> <TD>Yes</TD> </TR> </TABLE> <TABLE BORDER=5> <TR> <TD>Yes</TD> </TR> </TABLE> <TABLE BORDER=3> <TR> <TD>Fericirea trecatoare a ignorantei absolute ...</TD> </TR> </TABLE> <TABLE BORDER=3 WIDTH=100%> <TR> <TD>Fericirea trecatoare a ignorantei absolute ...</TD> </TR>

Tabele - 55

</TABLE> <TABLE BORDER=3 WIDTH=75%> <TR> <TD>Fericirea trecatoare a ignorantei absolute ...</TD> </TR> </TABLE> <TABLE BORDER=3 WIDTH=50%> <TR> <TD>Fericirea trecatoare a ignorantei absolute ...</TD> </TR> </TABLE> <TABLE BORDER=3 WIDTH=50> <TR> <TD>Aha</TD> </TR> </TABLE> <TABLE BORDER=3 WIDTH=100> <TR> <TD>Aha</TD> </TR> </TABLE> <TABLE BORDER=3 WIDTH=100 HEIGHT=75> http://www.east.utcluj.ro/mb/mep/antal <TR> <TD>Aha</TD> </TR> Universitatea Tehnica din Cluj-Napoca </TABLE> <TABLE BORDER=3 Conf. Dr. Ing.HEIGHT=75> WIDTH=100 ANTAL Tiberiu <TR> <TD ALIGN=RIGHT>Aha</TD> </TR> </TABLE> <TABLE BORDER=3 WIDTH=100 HEIGHT=75> <TR> <TD ALIGN=CENTER>Aha</TD> </TR> </TABLE> <TABLE BORDER=3 WIDTH=100 HEIGHT=75> <TR> <TD ALIGN=LEFT VALIGN=BOTTOM>Aha</TD> </TR> </TABLE> <TABLE BORDER=3 WIDTH=100 HEIGHT=75> <TR> <TD ALIGN=LEFT VALIGN=TOP>Aha</TD> </TR> </TABLE> <TABLE BORDER=3 WIDTH=100 HEIGHT=75> <TR> <TD ALIGN=LEFT VALIGN=CENTER>Aha</TD> </TR> </TABLE> <TABLE BORDER=3 WIDTH=100 HEIGHT=75> <TR> <TD ALIGN=CENTER VALIGN=MIDDLE><IMG SRC="./imagini/grad.gif" WIDTH=50 HEIGHT=65></TD>

Catedra Mecanica si Programare Alexandru

56 - Tabele

</TR> </TABLE> </BODY>

Exemplele prezentate pn acum au fost didactice. n continuare se prezint cteva variante de tabele care au o legtur mai apropiat cu practica. Codul HTML pentru Figura 19 se prezint n continuare. Figure 19 Tabel cu 2 rnduri si 3 coloane

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

<HTML> <HEAD> <TITLE>Introducere in Tabele</TITLE> </HEAD> <BODY BGCOLOR=#FFFFFF TEXT=#000000 LINK=#0000FF VLINK=#800080> <TABLE BORDER="3" ALIGN="CENTER" CELLPADDING="20" CELLSPACING="10" WIDTH="40%" HEIGHT="20%"> <CAPTION>Tabel cu 2 Rinduri si 3 Coloane</CAPTION> <TR> <TD>R1,C1</TD> <TD>R1,C2</TD> <TD>R1,C3</TD> </TR> <TR> <TD>R2,C1</TD> <TD>R2,C2</TD> <TD>R2,C3</TD> </TR> </TABLE> </BODY>

Codul care urmeaz, are efectul prezentat n Figura 20. Marcajul TD poate conine dou atribute adiionale, COLSPAN i ROWSPAN . Valorile luate de aceste atribute sunt numere ntregi. Ele specific numrul de coloane respectiv rnduri peste care se extinde o celul. Se folosesc atunci

Tabele - 57

cnd este nevoie ca tabelul s aib rnduri cu numar diferit de coloane. Figure 20 Cteva variante de tabele

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

<HTML> <HEAD> <TITLE>Introducere in Tabele</TITLE> </HEAD> <BODY BGCOLOR=#FFFFFF TEXT=#000000 LINK=#0000FF VLINK=#800080> <TABLE BORDER="3" BGCOLOR="#FFCC66"> <TR> <TD>R1,C1</TD> <TD>R1,C2</TD> <TD>R1,C3</TD> </TR> <TR> <TD>R2,C1</TD> <TD>R2,C2</TD> <TD>R2,C3</TD> </TR> </TABLE> <BR> <TABLE BORDER="3"> <TR BGCOLOR="#AABBAA"> <TD>R1,C1</TD> <TD>R1,C2</TD> <TD>R1,C3</TD> </TR> <TR BGCOLOR="#99CC00"> <TD>R2,C1</TD> <TD>R2,C2</TD> <TD>R2,C3</TD> </TR> </TABLE> <BR> <TABLE BORDER=3 BGCOLOR="#AA6633"> <TR BGCOLOR="#009900"> <TD BGCOLOR="#9999FF">R1,C1</TD> <TD>R1,C2</TD>

58 - Tabele

<TD>R1,C3</TD> </TR> <TR> <TD>R2,C1</TD> <TD>R2,C2</TD> <TD>R2,C3</TD> </TR> </TABLE> <BR> <TABLE BORDER="3"> <TR> <TD>R1,C1</TD> <TD>R1,C2</TD> <TD>R1,C3</TD> </TR> <TR> <TD>R2,C1</TD> <TD>R2,C2</TD> <TD>R2,C3</TD> </TR> <TR> <TD COLSPAN=3>R3,C1</TD> </TR> </TABLE> <BR> <TABLE BORDER=3> <TR> http://www.east.utcluj.ro/mb/mep/antal <TD ROWSPAN=2>R1,C1</TD> <TD>R1,C2</TD> <TD>R1,C3</TD> Universitatea Tehnica din Cluj-Napoca </TR> Catedra Mecanica si Programare <TR> <TD>R2,C2</TD> ANTAL Tiberiu Alexandru Conf. Dr. Ing. <TD>R2,C3</TD> </TR> </TABLE> <BR> <TABLE BORDER=3> <TR> <TD ROWSPAN=2>R1,C1</TD> <TD COLSPAN=2>R1,C2</TD> </TR> <TR> <TD>R2,C2</TD> <TD>R2,C3</TD> </TR> </TABLE> </BODY>

Marcajele <THEAD> i <TFOOT> Am spus deja ca tabelul este format din trei seciuni distincte. n Figura 21 se prezint un exemplu de lucru cu THEAD i TFOOT . Scopul primar al folosirii unui antet (THEAD ) const n duplicarea antetului la tiprirea tabelului n cazul n care tabelul se ntinde pe mai multe pagini. Fiecare tabel poate avea un singur antet i un singur sfrit. Acestea pot fi formate ns din mai multe rnduri. Celulele antetului pot fi formatate automat dac n locul lui TD se folosete TH. Acelai exemplu prezint i o alt aplicaie practic a tabelelor. Ele pot fi folosite pentru a realiza aranjarea imaginilor i textelor asociate lor independent de rezoluia la care se vizualizeaz pagina. Fiecare realizator de pagini are obiceiul de a lucra cu ecranul ntr-o anumit rezoluie. Din acest motiv pagina arat bine dac este vizualizat la rezoluia n care a fost creat. Dac pagina este vizualizat ntr-o alt rezoluie este posibil ca ntre anumite elemente s rmn spaii prea

Tabele - 59

mari sau s nu mai fie spaiu suficient. n cazul tabelelor, n funcie de rezoluia la care se vizualizeaz pagina, VGA(640x480), SuperVGA (800x600), XGA (1280x768), un atribut de tipul WIDTH=50% i spune navigatorului s foloseasc 50% din limea zonei de afiare a clientului pentru tabel. Se poate asigura astfel o independen de rezoluia de afiare, dar efectul este acela c textul tabelului va fi aranjat diferit, n funcie de rezoluia de vizualizare. O metod prin care se poate pstra proporia ntre celulele tabelului, pentru a putea depi acest dezavantaj, se prezint n exemplul care urmeaz. Dac tabelul ocup 50% din spaiul de afiate, prima coloan va ocupa 10% din acest spaiu, iar coloana urmtoare 40%. Figure 21 Tabel cu antet sI srsit -

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

<HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY> <TABLE BORDER=3 WIDTH=50%> <THEADH> <TR> <TD>IMAGINE</TD> <TH>LEGATURA</TH> </TR> </THEAD> <TR> <TD WIDTH=10%><IMG SRC="./imagini/unu.gif" WIDTH=50 HEIGHT=38></TD> <TD WIDTH=40%><a href="c1p11b.htm">Rosu cu verde da albastru.</a> </TR> <TR> <TD WIDTH=10%><IMG SRC="./imagini/doi.gif" WIDTH=50 HEIGHT=38></TD> <TD WIDTH=40%><a href="c1p11c.htm">Rosu cu albastru da verde.</a> </TR> <TR> <TD WIDTH=10%><IMG SRC="./imagini/trei.gif" WIDTH=50

60 - Tabele

HEIGHT=38></TD> <TD WIDTH=40%><a href="c1p11d.htm">#00FFFF este albastru.</a> </TR> <TFOOT> <TR> <TD COLSPAN="2">Clic pe raspunsul din coloana LEGATURA.</TD> </TR> </TFOOT> </TABLE> </BODY> </HTML>

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

Cadre - 61

Cadre (FRAMEs)
Pentru nelegerea cadrelor trebuie s revenim la nceputurile Windows-ului. O fereastr este o regiune de memorie n care se stocheaz o zon rectangular de pixeli. Fiecare program are mai multe ferestre, fiecare fereastr fiind una principal sau una copil. Toate ferestrele sunt copiii ferestrei principale din Windows, adic a desktop-ului. Ordinea pe axa z (z-order ) controleaz poziia ferestrelor n stiva de ferestre. Cea care este deasupra are numrul de ordine 0. Toate celelalte ferestrele se afieaz n fereastra activ i au numrul de ordine pe axa z mai mare. Fereastra principal a unei aplicaii are numeroase ferestre copil. De exemplu, fiecare fereastra de tipul toolbar este un copil al ferestrei principale. Ferestrele copil, dei sunt ferestre asemenea celor principale, apar i dispar npreun cu cea principal. De exemplu, dac se minimizeaz fereastra principal, toate ferestrele copil dispar mpreun cu aceasta. La nivelul navigatorului definirea unei ferestre copil se face prin conceptul de cadru (frame ). Cadrele sunt pri ale ferestrei principale, dar fiecare cadru este tratat de navigator independent de celelelte. Astfel, navigarea n acestea se desfoar independent. Din punctul de vedere al navigatorului fiecare cadru este tratat asemenea feresterei principale, cu excepia faptului c acestea sunt dependente de fereastra principal. Deci, fiecare cadru este un document HTML obinuit. Cadrele n sine ne permit s divizm fereastra navigatorului n ferestre mai mici, de dimensiunea dorit. Cadrele pot exista numai n cadrul conceptului de mulime de cadre (frameset ). Mulimea de cadre nu este vizibil n fereastra navigatorului, ea conine cadre i se http://www.east.utcluj.ro/mb/mep/antal definete cu marcajul FRAMESET , iar un cadru cu marcajul FRAME . Figure 22 Fereastra principala cu doua cadre Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

De exemplu, pentru a crea o mulime de cadre ce divizeaz fereastra client n dou poriuni egale se scrie codul HTML urmtor. Aici, la nceput, se creeaz dou documente HTML distincte, c1p14c1.htm i c1p14c2.htm , stocate n directorul c1p14c , apoi fiierul c1p14.htm n directorul printe a lui c1p14c.

62 - Cadre

Fiierul c1p14c1.htm :
<HTML> <HEAD> <TITLE>Cadre, c1p14c1.htm</TITLE> </HEAD> <BODY> Documentul HTML c1p14c1.htm </BODY>

Fiierul c1p14c2.htm :
<HTML> <HEAD> <TITLE>Cadre, c1p14c2.htm</TITLE> </HEAD> <BODY> Documentul HTML c1p14c2.htm </BODY>

Fiierul c1p14.htm :
<HTML> <HEAD> <TITLE>Document cu doua cadre - Pagina principala</TITLE> </HEAD> http://www.east.utcluj.ro/mb/mep/antal <FRAMESET COLS=50%,50%> <FRAME SRC="./c1p14c/c1p14c1.htm"> Universitatea Tehnica <FRAME SCR="./c1p14c/c1p14c2.htm"> din Cluj-Napoca </FRAMESET> Catedra Mecanica si Programare </HTML>

Conf. Dr. Ing. ANTAL Tiberiu Alexandru

n Figura 22 se prezint modul de afiare a celor dou cadre n fereastra principal. Cadrele pot avea dimensiuni diferite. n exemplul care urmeaz aceste dimensiuni sunt stabilite n procente din fereastra principal. Observai c mai este nevoie de nc un document HTML care va fi stocat n fiierul c1p14c3.htm .
<HTML> <HEAD> <TITLE>Document cu trei cadre - Pagina principala</TITLE> </HEAD> <FRAMESET COLS=10%,30%,60%> <FRAME src="./c1p14c/c1p14c1.htm"> <FRAME src="./c1p14c/c1p14c2.htm"> <FRAME src="./c1p14c/c1p14c3.htm"> </FRAMESET> </HTML>

Specificarea divizrii pe linii sau pe coloane a ferestrei se face prin atributele COLS i ROWS . Codul HTML ce urmeaz este asemenea celui anterior, doar c face divizarea pe rnduri a feresteri principale. n figurile care urmeaz se observ diferenele ntre cele dou metode de divizare.

Cadre - 63

<HTML> <HEAD> <TITLE>Document cu trei cadre - Pagina principala</TITLE> </HEAD> <FRAMESET ROWS=10%,30%,60%> <FRAME SRC="./c1p14c/c1p14c1.htm"> <FRAME SRC="./c1p14c/c1p14c2.htm"> http://www.east.utcluj.ro/mb/mep/antal <FRAME SRC="./c1p14c/c1p14c3.htm"> </FRAMESET> </HTML> Universitatea Tehnica din Cluj-Napoca

Catedra Mecanica si Programare Lungimile se pot specifica att n procente ct i Tiberiu Alexandru Conf. Dr. Ing. ANTAL n pixeli. n exemplul care urmeaz semnificaia de 50 de pixeli, iar * de ceea ce rmne.
<HTML> <HEAD> <TITLE>Document cu doua cadre - Pagina principala</TITLE> </HEAD> <FRAMESET COLS=50,*> <FRAME SRC="./c1p14c/c1p14c1.htm"> <FRAME SRC="./c1p14c/c1p14c2.htm"> </FRAMESET> </HTML>

50

are

La utilizarea lui FRAMESET prin * se poate obine un cadru de dimensiuni elastice. Importana lor este mare atunci cnd se ncearc realizarea unor pagini care funcioneaz corect la rezoluii diferite. Atunci cnd se folosesc procente pentru specificarea de dimensiuni 10% se calculeaz din dimensiunea pe orizontal a ecranului, dac cineva n loc de rezoluia 800x600 de pixeli o folosete pe cea 640x400, ecranul va avea o alt lime, deci i lungimile calculate prin procente vor fi diferite. n acest caz cadrele vor arta altfel. Pentru a rezolva aceasta problem se poate face cadrul din stnga de dimensiune fix, prin specificarea lungimii lui n pixeli, iar cel din dreapta elastic (prin <FRAMESET COLS=50,*> ). n cazul n care avem mai multe coloane se pot folosi relaii aritmetice pentru specificarea mrimii cadrelor. Iat un exemplu: <FRAMESET COLS=50,*,2*> , aici prima coloan va avea lungimea de 50 de pixeli. Ceea ce rmne se mparte ntre cadrul al doilea i al treilea, dar cadrul al treilea va fi de dou ori mai mare dect al doilea. Dac dorim ca un cadru s fie divizat, n dou, pe orizontal folosii codul urmtor. Efectele lui se prezint n Figura 23.

64 - Cadre

Figure 23 Document cu patru cadre

http://www.east.utcluj.ro/mb/mep/antal
<HTML> Catedra Mecanica si Programare <HEAD> <TITLE>Document cu patru cadre - ANTAL Tiberiu Alexandru Conf. Dr. Ing. Pagina principala</TITLE> </HEAD> <FRAMESET COLS=10%,30%,60%> <FRAME SRC="./c1p14c/c1p14c1.htm"> <FRAME SRC="./c1p14c/c1p14c2.htm"> <FRAMESET ROWS= 50%,50%> <FRAME SRC="./c1p14c/c1p14c3.htm"> <FRAME SRC="./c1p14c/c1p14c3.htm"> </FRAMESET> </FRAMESET> </HTML>

Universitatea Tehnica din Cluj-Napoca

Cadrele se pot folosi i pentru afiarea de imagini dup cum se observ n Figura 24. Codul HTML este urmtorul:
<HTML> <HEAD> <TITLE>Document cu doua cadre - Pagina principala</TITLE> </HEAD> <FRAMESET COLS=50%,50%> <FRAME src="./imagini/cub_GIF.gif" WIDHT=90 HEIGHT=100> <FRAME src="./c1p14c/c1p14c2.htm"> </FRAMESET> </HTML>

Cadre - 65

Figure 24 Afisarea unei imagini

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Pentru a reduce primul cadru laCatedra Mecanica si Programare dimensiunea imaginii scriem: Conf. Dr. Ing. ANTAL Tiberiu Alexandru
<HTML> <HEAD> <TITLE>Document cu doua cadre - Pagina principala</TITLE> </HEAD> <FRAMESET COLS=90,*> <FRAME src="./imagini/cub_GIF.gif" WIDTH=90 HEIGHT=100> <FRAME src="./c1p14c/c1p14c2.htm"> </FRAMESET> </HTML>

Vom trece mai departe i vom diviza primul cadru n alte dou, primul avnd nlimea imaginii.
<HTML> <HEAD> <TITLE>Document cu trei cadre - Pagina principala</TITLE> </HEAD> <FRAMESET COLS=90,*> <FRAMESET ROWS=100,*> <FRAME src="./imagini/cub_GIF.gif" WIDTH="90" HEIGHT="100"> <FRAME src="./c1p14c/c1p14c2.htm"> </FRAMESET> <FRAME src="./c1p14c/c1p14c3.htm"> </FRAMESET> </HTML>

Observai ce se petrece dac n loc de <FRAME SRC="./imagini/cub_GIF.gif" WIDTH="90" HEIGHT="100"> se va scrie <FRAME SRC="./imagini/cub_GIF.gif" WIDTH="90" HEIGHT="100" SCROLLING=NO> . Dac n acest moment imaginea nu se vede toat va trebuie s manipulm marginile cadrului dup cum urmeaz: <FRAME SRC="./imagini/cub_GIF.gif" WIDTH="90" HEIGHT="100" SCROLLING=NO MARGINWIDTH=1 MARGINHEIGHT=1> .

66 - Cadre

Marginile cadrelor pot fi ngroate sau colorate prin folosirea atributelor BORDER i BORDERCOLOR .
<HTML> <HEAD> <TITLE>Document cu doua cadre - Pagina principala</TITLE> </HEAD> <FRAMESET COLS=90,* BORDER=20 BORDERCOLOR="#FFOOOO"> <FRAMESET ROWS=100,*> <FRAME src="./imagini/cub_GIF.gif" WIDTH="90" HEIGHT="100" SCROLLING=NO MARGINWIDTH=1 MARGINHEIGHT=1> <FRAME src="./c1p14c/c1p14c2.htm"> </FRAMESET> <FRAME src="./c1p14c/c1p14c3.htm"> </FRAMESET> </HTML>

De asemenea, dac linia corespunztoare de mai sus se nlocuiete cu <FRAMESET FRAMEBORDER=NO> atunci marginea nu va fi afiat.

ROWS=100,*

Uneori dorim ca navigatorul s nu realizeze modificarea dimensiunilor cadrelor. Pentru aceasta n locul liniei corespunztoare de mai sus se scrie <FRAME src="./c1p14c/c1p14c3.htm" NORESIZE> . Una dintre aplicaiile cadrelor se prezint n exemplul urmtor. n directorul c1p16c sunt stocate http://www.east.utcluj.ro/mb/mep/antal trei documente HTML. Numele fiierele i codul corespunztor lor este: Fiierul c1p16c1.htm : Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

<HTML> <HEAD> <TITLE>Cadre, c1p16c1.htm</TITLE> </HEAD> <BODY> Documentul HTML c1p16c1.htm <P> O legatura catre documentul <A HREF="c1p16c3.htm">c1p16c3.htm</A> </P </BODY>

Fiierul c1p16c2.htm :
<HTML> <HEAD> <TITLE>Cadre, c1p16c2.htm</TITLE> </HEAD> <BODY> Documentul HTML c1p16c2.htm </BODY>

Fiierul c1p16c3.htm :
<HTML> <HEAD> <TITLE>Cadre, c1p16c3.htm</TITLE> </HEAD> <BODY> Documentul HTML c1p16c3.htm </BODY>

Cadre - 67

Figure 25 Cadru cu legatura

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica conine codul n directorul printe se afl fiierul c1p16.htm ce si Programare HTML: Conf. Dr. Ing. ANTAL Tiberiu Alexandru
<HTML> <HEAD> <TITLE>Document cu doua cadre - Pagina principala</TITLE> </HEAD> <FRAMESET cols=300,*> <FRAME src="./c1p16c/c1p16c1.htm"> <FRAME src="./c1p16c/c1p16c2.htm"> </FRAMESET> </HTML>

Navigatorul va afia documentul c1p16c1.htm dup cum se vede n Figura 25. Cnd se face clic pe legtura (vezi Figura 25) din prima coloan n locul ei se va afia coninutul documentului ctre care se face legtura. Sigur, aceasta nu este o soluie eleganta, ar fi fost de ateptat ca acest document s fie afiat n locul celui din coloana din drepta. Pentru aceasta trebuie fcute urmtoarele modificri: n fiierul c1p16.htm :
<HTML> <HEAD> <TITLE>Document cu doua cadre - Pagina principala</TITLE> </HEAD> <FRAMESET cols=300,*> <FRAME src="./c1p16c/c1p16c1.htm"> <FRAME src="./c1p16c/c1p16c2.htm" NAME="FER-1"> </FRAMESET> </HTML>

68 - Cadre

n fiierul c1p16c1.htm :
<HTML> <HEAD> <TITLE>Cadre, c1p16c1.htm</TITLE> </HEAD> <BODY> Documentul HTML c1p16c1.htm <P> O legatura catre documentul c1p16c3.htm</A> </P> </BODY>

<A

HREF="c1p16c3.htm"

TARGET="FER-1">

Ca urmare a modificrilor, pagina la care se face legtura se va ncrca n cadrul cu numele FER-1 . Avantajele cadrelor Marele avantaj al cadrelor este acela c permit separarea a vizual documentelor i afiarea lor independent. Se poate defini o legtur ntr-un cadru care va afia sau va genera o alt aciune, ntr-un alt cadru, fr a redesena ntregul ecran. Un alt avantaj al cadrelor este acela ca ele se pot redimensiona. Utilizatorul poate trage de marginile cadrelor pentru a mri sau a micora zona de ecran acoperit de cadru. http://www.east.utcluj.ro/mb/mep/antal Dezavantajele cadrelor Universitatea Tehnica din Cluj-Napoca Marele dezavantaj al cadrelor este crearea i controlul mai complicat. Pentru afiarea unei pagini Catedra Mecanica si Programare cu dou cadre trebuie create trei fiiere. Unul va conine definiiile mulimii de cadre, apoi cte Conf. Dr. Ing. ANTAL Tiberiu Alexandru un fisier pentru fiecare cadru. Un alt dezavantaj ar fi timpul de afiare care crete odat cu numrul cadrelor. Navigatorul adreseaz o cerere server-ului pentru pagina principal, apoi cte o cerere pentru fiecare cadru. Din acest punct de vedere afiarea unei pagini cu dou cadre este de trei ori mai lung dect a unei pagini fr cadre. Deseori, cadrele, necesit cod scris n VBScript, dac lucrai cu IE, sau n JavaScript, dac lucrai cu Netscape. De exemplu, dac la un clic de legtur dorii s schimbai coninutul a dou cadre trebuie s scriei codul aferent. De asemenea, generarea unor mesaje de eroare corespunztoare cadrelor necesit scrierea de cod. O alt problem este depanarea documentelor care au cadre, aceasta fiind mult mai complicat dect cea a documentelor fr cadre. Modalit|i de evitare a cadrelor Pentru evitarea cadrelor informaia care rmne neschimbat trebuie repetat. Majoritatea server-elor au un mecanism pentru aceasta, de exemplu n IIS, instruciunea include permite includerea unor fiiere ntr-un document. Server-ul va nlocui aceast instruciune cu coninutul fiierului de inclus. De exemplu, dac se dorete afiarea unei adrese pe fiecare pagin distinct din document, aceasta poate fi pus n sfritul de pagin (footer ) prin include . mpreun cu include , tabelele pot fi folosite pentru a specifica o anumita aranjare a obiectelor pe ecran.

Foi de stil -69

Foi de stil (Style Sheets)


Modul de afiare a elementelor dintr-o pagin se poate defini i prin folosirea foilor de stil. Acestea conin grupuri de reguli de afiare. Fiecare regul se compune dintr-un selector i o declaraie. Selectorul, identific elementele din pagin ce vor fi afectate, iar declaraia, specific modul de afiare. Fiecare declaraie const din una sau mai multe perechi proprietate:valoare. Iat un exemplu:
P {color:red}

Selectorul este P , declaraie este {color:red} . Proprietatea este color iar valoarea red . n situaia n care dorim s folosim mai multe perechi proprietate:valoare , ele trebuie separate prin caracterul ; . Fiecare navigator are un mod implicit de afiare a elementelor HTML, acesta poate fi ns suprascris prin folosirea foilor de stil. Cnd mai multe stiluri se aplic aceluiai element dintr-o pagin, regula de selecie a modului de afiare este cea a cascadrii. Din acest motiv, n literatura de specialitate, foile de stil sunt prescurtate CSS (Cascading Style Sheet), adic foi de stil cascadate. Cascadarea utilizeaz motenirea, specificitatea i poziia pentru determinarea regulii ce va fi aplicat afirii unui anumit element. n Figura 26 se prezint modul de afiare a codului HTML din fiierul c1p3css1.htm . Acesta are drept scop explicarea conceptelor de motenire i de specificitate. nainte de http://www.east.utcluj.ro/mb/mep/antal prin care se pot da nume aceasta voi prezenta, pe scurt, metodele elementelor HTML. Scopul numirii elementelor este acela de identificare. Numele de element Universitatea Tehnica utilizat la aplicarea unui anumit stil tuturor poate fi unic sau al unei clase. Acest nume va fi din Cluj-Napoca Catedra Mecanica unic a unui element, n marcajul de nceput elementelor cu acelai nume. Pentru identificarea si Programare Conf. asocierea unui element la o clas, n vom scrie id = "nume" . Pentru Dr. Ing. ANTAL Tiberiu Alexandru marcajul de nceput se va specifica numele clasei prin class= "nume" . Pentru a selecta un anumit element n vederea aplicrii unui anumit stil se va folosi un selector, astfel pentru P.ingrup {color:blue} numele de element este P , iar ingrup este numele de clas. Regula de stil va fi aplicat asupra elementelor ce fac parte din clasa ingrup . Pentru cazul unui element identificat cu id="centru" regula de stil se scrie P#centru {color:green; text-align:left} . Fiierul c1p3css1.htm :
<HTML> <HEAD> <STYLE TYPE = "text/css"> P.ingrup {color:blue} P#stinga {color:green; text-align:left} P#centru {color:magenta; text-align: center} P#dreapta {color:cyan; text-align: right} H1 {color:#c00;border:2px solid;border-color:#7c7} </STYLE> <TITLE>Paragrafe</TITLE> </HEAD> <BODY> <H1>Head 1 <P>qwqw</H1> <P>Primul paragraf</P> <P class ="ingrup">Al doilea paragraf. Afisare se face cu albastru = blue (grupul se numeste "ingrup").</P> <P id="centru">Al treilea paragraf, centrat, culoarea = magenta</P> <BR>

70 - Foi de stil

<P> Un paragraf oarecare. Afisarea se face cu negru (culoarea implicita). </P> <P class="ingrup" id="dreapta">Al patrulea paragraf, culoarea = cyan</P> </BODY> </HTML>>

aliniat

la

dreapta,

Orice element are un grup de proprieti, o parte dintre acestea sunt motenite, altele sunt proprii elementului n cauz. Motenirea definete ce anume se petrece cu un element cnd nu exist reguli de stil aplicate explicit asupra lui. n exemplul prezentat, marcajul <P> , ce este cuprins n marcajul <H1> , are proprietatea culoare (color ) motenit de la marcajul <H1> . Ca urmare a motenirii acestei proprieti, coninutul paragrafului cuprins n antet fiind afiat i el cu rou. Figure 26 Pagina cu CSS.

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

Antetul mai are i proprietatea chenar (border ) setat, aceasta ns nu este motenit, motiv pentru care textul de paragraf cuprins n antet nu are chenarul afiat. Regula de specificitate se utilizeaz atunci cnd mai multe stiluri sunt aplicate unui element. Conform acestei reguli, cu ct selectorul este mai specific, cu att mai puternic este stilul. n exemplul prezentat, ultimul paragraf are aplicat simultan doi selectori prin class="ingrup" id="dreapta" . Deoarece atributul id este mai specific dect cel class , el trebuind s fie unic la nivel de pagin, stilul acestuia va fi cel aplicat paragrafului. Poziia unei regului conteaz i ea, regulile care apar mai trziu sunt cele care domin. Stocarea regulilor de stil Regulile de stil pot fi stocate intern, adic n pagina asupra creia dorim s acioneze sau extern, ntr-un fiier text distinct de pagina de Web. Atunci cnd regulile de stil sunt stocate intern acestea pot s acioneze asupra ntregii pagini sau local, numai asupra elementelor crora s-au asociat. Stocarea extern| a regulilor de stil Fiierul ce va stoca aceste reguli de stil trebuie s fie unul text ASCII. Marcajul LINK REL ce trebuie s fie scris n seciune HEAD , asigur legtura ntre pagina curent i foaia de stil extern,

Foi de stil -71

dup cum se vede n c1p3css2.htm . Fiierul c1p3css2.htm :


<HTML> <HEAD> <TITLE>Paragrafe</TITLE> <LINK REL="stylesheet" TYPE="text/css" HREF="c1p3css2.css"> </HEAD> <H1>Head 1 <P>qwqw </H1> <P>Primul paragraf</P> <P class ="ingrup">Al doilea paragraf. Afisare se face cu albastru = blue (grupul se numeste "ingrup").</P> <P id="centru">Al treilea paragraf, centrat, culoarea = magenta</P> <BR> <P> Un paragraf oarecare. Afisarea se face cu negru (culoarea implicita). </P> <P class ="ingrup" id="dreapta">Al patrulea paragraf, aliniat la dreapta, culoarea = cyan</P> </BODY>

http://www.east.utcluj.ro/mb/mep/antal

Atributul TYPE="text/css" specific faptul c foaia de stil este scris n conformitate cu Universitatea Tehnica din Cluj-Napoca specificaiile CSS, iar n HREF="c1p3css2.css" este dat URL-ul cu numele fiierului ce Catedra Mecanica si Programare stocheaz foaia cu stiluri. Acest URL este relativ la locaia fiierului de stil pe serverul de Web Conf. Dr. Ing. ANTAL Tiberiu Alexandru i nu relativ la locaia paginii de Web. Fiierul c1p3css2.css :
P.ingrup {color:blue} P#stinga {color:green; text-align:left} P#centru {color:magenta; text-align: center} P#dreapta {color:cyan; text-align: right} H1 {color:#c00;border:2px solid;border-color:#7c7}

Stocarea extern a foilor de stil se utilizeaz atunci cnd dorim s aplicm aceleai stiluri mai multor documente. Marele avantaj al acestora const n actualizarea imediat a modificrilor fcute ntr-o singur foaie de stil n toate paginile HTML ce folosesc respectiva foaie de stil. Stocarea intern| a regulilor de stil Fiierul c1p3css1.htm prezint modul de scriere a unei foi de stil interne. Exist i posibilitatea aplicrii de stiluri local, la nivelul unui marcaj. La nivelul unui marcaj, regula de stil nu se scrie ntre acolade i nu are nevoie de selector lund forma STYLE = " ..." . Exemplu: Meniuri i fonduri cu CSS Pagina care urmeaz i propune crearea unui meniu principal, far submeniuri, cu ajutorul CSS. Codul HTML corespunztor imaginii din Figura 27 este stocat n fiierul p2css2.htm .

72 - Foi de stil

Figure 27 Crearea unui meniu cu CSS.

http://www.east.utcluj.ro/mb/mep/antal Fiierul p2css2.htm : Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

<HTML> <HEAD> <TITLE>Exemplu de lucru cu CSS</TITLE> <STYLE TYPE = "text/css"> DIV#fond { position:absolute; top:1px; left:0px; z-index:1; background-color:white; } DIV#fond IMG { width:350px; color:white; } DIV#continut { position:absolute; top:1px; left:350px; background-color:#eee; padding:10px; z-index:2; }

DIV#navigare { position:absolute; width:350px; top:1px; left:0px; border-right:1px solid #eee; z-index:3; }

Foi de stil -73

H1 { background-color:#eee; color:#000; font-size:34px; font-variant:small-caps; font-weight:bold; padding:10px; text-align=center; } SPAN.ingrosat { font-weight:bold; color:red; } A:LINK { text-decoration: none; font-weight:bold; color: #0000000; padding:15px; width:335px; } A:VISITED { text-decoration: none; font-weight:normal; http://www.east.utcluj.ro/mb/mep/antal padding:17px; width:335px; } Universitatea Tehnica din Cluj-Napoca A:HOVER { Conf. Dr. font-weight:bold; Ing. ANTAL Tiberiu Alexandru color: #ffffff; background-color:#000000; padding:15px; width:335px; } </STYLE> </HEAD> <BODY> <!-- Regiunea de navigare, apare in stanga paginii --> <div id="navigare"> <h1>Cluj</h1> <p><a href="http://www.utcluj.ro">Universitatea Tehnica din Cluj</a></p> <p><a href="http://www.east.utcluj.ro/mb">Facultatea Constructii de Masini</a></p> <p><a href="http://www.east.utcluj.ro/mb/mep">Catedra de Mecanica si Programare</a></p> <p> </div> <!-- Continutul documentului, apare in drepata regiunii de navigare --> <div id="continut"> Catedrala <span class="ingrosat">Sf. Mihail</span> s-a terminat de ridicat in 1419, fiind un monument de arhitectura gotica. <p><span class="ingrosat">Universitatea Tehnica din Cluj</span> s-a nascut in anul 1947, in urma unui memoriu adresat Ministerului Educatiei Nationale privind infiintarea unei Politehnici la Cluj cu trei facultati: constructii, electromecanica si silvicultura. <P> </div> <!-- Fondul paginii, apare afisat, datorita sterilor de stil, in stanga, sub regiune de navigare --> <div id ="fond">

Catedra Mecanica si Programare

74 - Foi de stil

<img src="catedrala.gif" alt = "Catedrala Sf. Mihail"></p> </div> </BODY> </HTML>

Dac o pagin de Web folosete CSS, fiecare element este coninut ntr-un dreptunghi invizibil. Dreptunghiul are mai multe regiuni, cteva dintre cele mai importante fiind: coninutul, spaiul ce nconjoar coninutul (padding ), marginea exterioar a padding-ului (border ), spaiul invizibil din jurul border-ului (margin ). Utilizarea CSS permite definirea poziiei i a modului de afiare a elementelor din pagin. Implicit, elementele sunt afiate n ordinea n care sunt scrise n codul HTML, de la stnga la dreapta i de sus n jos. Pentru ca un element s fie afiat n pagin, ntr-o poziie fix, independent de poziia codului de element, sistemul de coordonate utilizat trebuie s fie absolut (position:absolute ). Dac mai multe astfel de elemente se suprapun, ordinea de suprapunere poate fi i ea controlat prin z-index . Mai sus exist trei elemente, fond , continut i navigare ce sunt poziionate absolut. Observai c, dei ordinea lor n codul HTML este navigare , continut i fond , afiarea lor se face fr a se ine cont de poziia relativ a elemenelor din document. n contextul acestei aplicaii, fond nu se refer la fondul ntregii pagini, ci doar la fondul unui element particular. Avantajul este acela c apare posibilitatea schimbrii fondului pentru orice element, innd cont de poziia lui absolut. Meniul are la baz modul de afiare a hiperlegturilor, existnd definiiile A:LINK , A:VISITED i A:HOVER , unde este specificat afiarea: la deschiderea paginii, dup vizitare i la poziionarea pe hiperlegtur. Pentru a face disprut sublinierea hiperlegturii se folosete text-decoration: none , iar http://www.east.utcluj.ro/mb/mep/antal pentru a da efectul poziionare pe un articol de meniu se va modifica fondul, prin background-color:#000000 . Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Exemplu: Tabele cu CSS Conf. Dr. de Web ce folosete stiluri pentru n Figura 28 este prezentat o paginIng. ANTAL Tiberiu Alexandru definirea aspectelor celor dou tabele. Codul HTML din tabelcss.html are cteva paticulariti. Observai c regulile de stil sunt scrise general respectiv acestea nu mai conin numele elementului particular care dorim s fie afectat. De asemenea, regulile sunt corpul unui comentariu HTML. n situaia n care navigatorul nu recunoate aceste regului, le va considera ca parte a comentariului i nu le va afia, altfel, regulile vor fi luate n considerare i marcajul de comentariu va fi ignorat. Am ncercat s prezint ct mai multe proprieti. Dei majoritatea nu le-am explicat, contextul n care apar i numele acestora sugereaz semnificaia lor. Fiierul tabelcss.html :
<HTML> <HEAD> <TITLE>Tabele cu CSS</TITLE> <STYLE TYPE="text/css"> <!-.rosu {color: #FF0000; background: #dddddd;text-decoration: none;} #gros {color: #0000FF; font-weight: bold;} .textnormal { font-family: Arial, Helvetica, sans-serif; font-size: 16px; color: #000000; text-decoration: none; border: none; } .tabelnormal { font-family: Berlin Sans FB Demi, Sans-serif;

Foi de stil -75

font-size: 20px; color: #003366; background: #dddddd; border-left: 1px solid #000080; border-right: 1px solid #000080; border-top: 1px solid #000080; border-bottom: 1px solid #000080; } .tabelalb {color: #000000; background: #FFFFFF;} .capdetabel {color: #FF0000; background: #FFFFFF;text-decoration: none;} .caption{ font-family: "Arial", "Verdana", sans-serif; font-weight:bold; color:#FF9900} .anidestudiu { font: 20px "Arial", "Verdana", sans-serif; text-align:right} .date {font:16px "Helvetica", "Verdana", sans-serif;text-align:center} .totale {font-weight: bold;} --> </STYLE> </HEAD> <BODY> http://www.east.utcluj.ro/mb/mep/antal <H1>Antent 1</H1> <P class="textnormal">Text <SPAN id="gros">mai putin obisnuit</SPAN>, apoi ... Universitatea <P class = rosu> text cu rosu ... Tehnica din Cluj-Napoca <P> Text normal 2 Catedra Mecanica si Programare <P class = rosu> tot cu rosu Ing. ANTAL Tiberiu Alexandru Conf. Dr. <P> <TABLE class="tabelnormal"> <CAPTION ALIGN=top>Tabel cu ".tabelnormal"</CAPTION> <THEAD> <Th>c1</Th> <Th>c2</Th> </THEAD> <TR> <TD>11&nbsp;</TD> <TD>12&nbsp;</TD> </TR> <TR> <TD>21&nbsp;</TD> <TD>22&nbsp;</TD> </TR> <TR> <TD>31&nbsp;</TD> <TD>32&nbsp;</TD> </TR> </TABLE> <P>text <P> <TABLE class="tabelalb" frame="void" rules="groups" width=50%> <CAPTION ALIGN=top>Tabel cu ".tabelalb si rules"</CAPTION> <COLGROUP class="anidestudiu"> <COLGROUP SPAN=3 class="date"> <COL SPAN=2> <COL class="totale"> </COLGROUP> <THEAD class="capdetabel"> <TH>&nbsp;</TH> <TH>Promovati</TH> <TH>Nepromovati</TH> <TH>TOTAL</TH> </THEAD> <TR>

76 - Foi de stil

<TD>an 1</TD> <TD>30</TD> <TD>20</TD> <TD>50</TD> </TR> <TR> <TD>an 2</TD> <TD>30</TD> <TD>20</TD> <TD>50</TD> </TR> <TABLE> <BODY> <HTML>

Figure 28 Tabele cu CSS

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

CSS permite divizarea unui tabel n grupuri de coloane. Avantajul folosirii acestor grupuri const n posibilitatea aplicrii unei anumite reguli de stil unei coloane sau unui grup de coloane. Gruparea pe coloane se poate face cu dou marcaje: COLGROUP i COL . Primul, permite controlul afirii sau inhibrii liniilor din chenarul de grup. Dup marcajul TABLE se va scrie marcajul COLGROUP . Dac din grup vor face parte mai multe coloane, atunci valoarea n din SPAN=n va defini numrul coloanelor din grup. Controlul afirii chenarelor la nivelul tabelului se face cu ajutorul marcajului FRAME=loc . Cteva dintre valorile pe care le poate lua loc sunt: box - este valoarea implicit, produce afiarea tuturor liniilor din chenar; none - nu se afieaz, above pentru o singur linie n partea de sus, rhs - o singur linie la stnga etc. Controlul vizibilitii liniilor chenarelor interioare se face cu RULES=zona . Valoarea zona poate fi: none - nu exist reguli; rows - pentru reguli pe orizontal, ntre liniile de tabel; cols - reguli pe vertical, ntre coloanele de tabel; groups - pentru reguli la nivel de grupuri de coloane create cu COLGROUPS ; all - valoarea implicit, regulile se aplic pentru toate coloanele i rndurile de tabel.

Formulare - 77

Formulare (Forms)
Marcajul FORM este un element bloc care permite definirea unui formular HTML. Aspectul vizual al formularelor este foarte variat plecnd de la simple controale de tipul cutie de text pn la butoane sau meniuri. Pentru a nelege ce sunt formularele nchipuii-v o fereastr de dialog. Majoritatea aplicaiilor au aceste ferestre pentru a permite utilizatorului s intervin n anumite situaii speciale sau pentru a modifica anumite setri implicite, eventual pentru a furniza informaii n plus fa de cele cunoscute deja. Formularele HTML sunt echivalentul Web al ferestrelor de dialog. Legat de formulare se disting dou etape n proiectare: definirea structurii formularului i aciunile pe care le va realiza acesta. Definirea structurii formularului se face asemenea oricrei pagini de Web, pe baza unor elemente HTML, efectul fiind, unul vizual. n acest caz ns este important ca fiecare element s primeasc un nume, deoarece acest nume vor fi utilizate la prelucrarea datelor din formular. Faptul c un formular a fost publicat pe Web nu nseamn nimic mai mult dect o interfa. Prelucrarea datelor introduse n formular se face pe baza unor limbaje de programare simple, numite generic, script-uri care se execut pe server-ul de Web. Script-ul citete datele din formular, le prelucreaz, de exemplu prin adaugarea ntr-o baz de date, apoi ntoarce un rezultat, de exemplu textul "Ai fost adugat n baza de date." Formularele nu pot fi imbricate, dar pot s existe mai multe ntr-o singur pagin. Dac furnizorul de Internet nu v asigur facilitatea de rularea script-urilor pe server-ul de Web, datele unui formular pot fi trimise i pe o adres de e-mail. http://www.east.utcluj.ro/mb/mep/antal Definirea unui formular Cea mai simpl definiie de formular este: Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare <HTML> <HEAD> Conf. Dr. Ing. ANTAL Tiberiu Alexandru
<TITLE>Formulare 1</TITLE> </HEAD> <BODY> <FORM> </FORM> </BODY>

Salvai formularul pe disc sub numele de frm1.htm i pstrai deschise pe ecran simultan, editorul de texte (de exemplu, notepad -ul) i pagina Web. Atunci cnd dorii s rencrcai coninutul paginii apsai simultan Ctrl i cea de rencrcare (F5 - Refresh n IE). n continuare trebuie s spunem navigatorului unde s fie trimise datele adunate i cum s fie acestea trimise. La acest nivel datele fie se trimit unui script pe server pentru prelucrare, fie se trimit ca e-mail, unei persoane care le va prelucra ulterior. n primul caz, cel care a scris script-ul tie modul n care trebuie trimise datele. n cazul al doilea, formularul trebuie s conin urmtoarele atribute:
<HTML> <HEAD> <TITLE>Formulare 1</TITLE> </HEAD> <BODY> <FORM METHOD=POST ACTION="mailto:[email protected]" ENCTYPE="application/x-www-form-urlencoded"> </FORM> </BODY>

Mai sus, trebuie completat adresa de e-mail a destinatarului, iar restul de text trebuie pstrat ntocmai. Dac formularul are cmpurile NUME , PRENUME , ADRESA i ORAS acestea vor fi transmise sub forma:

78 - Formulare

NUME=Vasile&PRENUME=Ionel+Adrian&ADRESA=Oasului+nr+14&ORAS=Fara

n loc de:
NUME=Vasile PRENUME=Ionel Adrian ADRESA=Oasului nr 14 ORAS=Fara

Unele programe de mail tiu s converteasc datele fr sa necesite ajutorul unui program extern. Dac dorii s testai aceast variant n locul lui ENCTYPE="application/x-www-formurlencoded" scriei ENCTYPE="text/plain ". Atunci cnd suntem interesai n scrierea de script-uri forma generala pentru definiia unui formular este:
<FORM ACTION="URL" METHOD=METODA> </FORM>

Aici, atributul ACTION spune navigatorului unde s trimit datele formularului. n acest caz URL va fi adresa programului script care prelucreaz datele (de exemplu, ACTION="http://postinfo.east.utcluj.ro/AdaugaClient1.asp" ). http://www.east.utcluj.ro/mb/mep/antal Atributul METHOD spune navigatorului cum se trimit datele la URL-ul specificat prin atributul ACTION . Sunt disponibile doar dou variante: Universitatea Tehnica din Cluj-Napoca # GET : Navigatorul adaug un semn de ntrebare (? ) urmat de datele din Catedra Mecanica si Programare formular la sfritulIng. ANTAL ACTION Alexandru Conf. Dr. atributului Tiberiu i apoi cere de la server aceast combinaie de URL i date; # POST : Navigatorul trimite datele culese din formular ctre server ntr-un mesaj separat. Atunci cnd se alege metoda folosit trebuie s inei cont de faptul c pentru fiecare control de pe suprafaa formularului se trimit ctre server numele controlului i datele introduse n acesta. Astfel, formularul poate s ajung s trimit foarte multe date server-ului, mai ales dac are pe suprafaa lui un numr mare de controale, sub forma unui ir de caractere foarte lung. n unele cazuri lungimea URL-ului trimis ctre server-e este restricionat, astfel combinaia URL?date generat de metoda GET poate sfri trunchiat. Elemente de intrare Este caracteristic a acestor element c nu au marcajul de terminare, sau n termeni mai tehnici, nu sunt containere. Forma cea mai simpl prin care se definete un element de intrare este:
<INPUT TYPE="TIP" NAME="NUME">

Unul dintre atributele importante este VALUE = "sir" i permite atribuirea unei valori elementului de intrare. TYPE poate lua mai multe valori predefinite specificnd tipul controlului de intrare (text, parol, imagine, selector checkbox, selector radio etc.). NAME este numele pe care elementul de intare l primete, el trebuie sa fie unic n pagin iar specificarea lui este obligatorie. Mai trebuie reinut c toate aceste elemente se scriu ntre <FORM> </FORM> , fiind specifice unui formular. Butonul Submit Majoritatea ferestrelor de dialog au un buton OK. Apsarea lui are semnificaia acceptrii

Formulare - 79

setrilor fcute mpreun cu generarea efectelor lor. Formularele pot avea i ele butoane de dou tipuri: transfer (submit ) i resetare (reset ). Butoanele de tipul transfer sunt echivalentul lui OK. Cnd se face clic pe un astfel de buton coninutul formularului este trimis programului specificat n atributul ACTION al marcajului <FORM> . Cea mai simpl variant este:
<INPUT TYPE=SUBMIT VALUE="text">

n acest caz valoarea dat n VALUE este un text care va fi afiat pe buton. O variaie pe tema butonului de transfer este folosirea unei imagini n acelai scop. Forma general de scriere n acest caz este:
<INPUT TYPE=SUBMIT SRC="cale/fiier">

Butonul Reset n cazul unor formulare mari este util includerea n formular a unui buton de reset . La apsarea lui datele introduse deja n formular sunt terse i n locul lor reapar cele implicite. Cea mai simpl variant de buton de reset este: <INPUT
TYPE=RESET VALUE="text">

Un exemplu de formular cuhttp://www.east.utcluj.ro/mb/mep/antal dou butoane este:


<HTML> Universitatea Tehnica din Cluj-Napoca <HEAD> Catedra Mecanica si Programare <TITLE>Exemplu de transfer al datelor</TITLE> </HEAD> Conf. Dr. Ing. ANTAL Tiberiu Alexandru <BODY> <H3>Date despre mine</H3> <FORM ACTION="mailto:[email protected]" METHOD=POST> <INPUT TYPE=SUBMIT VALUE="Trimite"> <INPUT TYPE=RESET VALUE="Reset"> </FORM> </BODY>

Introducerea textelor n formulare Pentru introducerea unei singure linii de text, de exemplu, un nume, prenume sau o adres de persoan, se folosete elementul de intrare de tipul TEXT , numit uneori cutie de text (text box ), cu urmtoarea scriere:
<INPUT TYPE=TEXT NAME="numecmp">

Aici, numecmp este un nume unic, la nivelul formularului, pe care l dm cmpului de intrare. Iat un exemplu de utilizare:
<HTML> <HEAD> <TITLE>Exemplu de transfer a datelor</TITLE> </HEAD> <BODY> <H3>Date despre mine</H3> <FORM ACTION="mailto:[email protected]" METHOD=POST> Nume: <INPUT TYPE=TEXT NAME="Nume"> <P> Prenume: <INPUT TYPE=TEXT NAME="Prenume"> <P> <INPUT TYPE=SUBMIT VALUE="Trimite">

80 - Formulare

<INPUT TYPE=RESET VALUE="Reset"> </FORM> </BODY>

IE va afia acest formular dup cum se vede n Figura 29. Cutiile de text pot fi fcute s aib o valoare implicit, de exemplu dac n locul liniei corespunztoare din codul de mai sus scriem linia:
<INPUT TYPE=TEXT NAME="Nume" VALUE="Introduce numele">

Figure 29 Formular cu butoane si cutii de text

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

atunci, la deschiderea formularului, textul ntre ghilimele va fi afiat automat n prima cutie de text. O alt posibilitate este specificarea lungimii, n numr de caractere, de afisare a cutiei de text prin atributul SIZE , iat un exemplu:
<INPUT TYPE=TEXT NAME="Nume" SIZE=50>

Atributul anterior determin numai lungimea de afiare a cutei de texte, nu i numrul maxim de caractere care pot fi introduse n aceasta. Atributul MAXLENGHT definete numarul maxim de caractere care pot fi introduse n cutia de text. Iat un exemplu:
<INPUT TYPE=TEXT NAME="Nume" MAXLENGTH=20>

O variant special a cutiei de text este aceea n care se introduce o parola n acest caz n locul , textului introdus se vor afia doar asteriscuri, codul fiind de forma:
<INPUT TYPE=PASSWORD NAME="numecmp">

Dac este important ca utilizatorul s aib mai mult spaiu pentru introducerea textului, sau dorim s introducem un text organizat pe mai multe linii, n locul cutiei de text, se va folosi elementul

Formulare - 81

zon de text (text area ). Acesta poate fi privit ca un dreptunghi n care se pot introduce date organizate pe mai mult de o linie. Forma general este:
<TEXTAREA NAME="numecmp" VALUE="text" ROWS=nrrnd COLS=nrcol WRAP> </TEXTAREA>

Aici, numecmp este un nume care identific unic marcajul, text este textul de afiat, nrrnd numrul total de linii care se afieaz i nrcol numrul total de coloane afiate. Atributul WRAP spune navigatorului dac textul trebuie s fie divizat pe linii sau nu, atunci cnd se ajunge la marginea din dreapta a unei linii. Observai c marcajul <TEXTAREA > necesit i terminatorul </TEXTAREA> . Valorile implicite pot fi scrise pe una sau mai multe linii ntre aceste marcaje dup cum se va vedea n exemplul urmtor:
<HTML> <HEAD> <TITLE>Exemplu de transfer al datelor</TITLE> </HEAD> <BODY> <H3>Definiti clipa</H3> <FORM ACTION="mailto:[email protected]" METHOD=POST> Nume: <INPUT TYPE=TEXT NAME="Nume" SIZE=30 MAXLENGTH=30> <P> Prenume: <INPUT TYPE=TEXT NAME="Prenume" SIZE=30 MAXLENGTH=30> <P> Intrebarea http://www.east.utcluj.ro/mb/mep/antal <B>Ce este clipa?</B> care ne framinta <I>azi</I> este: <P> <TEXTAREA NAME="raspuns" ROWS=7 COLS=50 WRAP> Universitatea Tehnica din Cluj-Napoca Introduceti, va rog, raspunsul Dumneavoastra aici! Catedra Mecanica si Programare </TEXTAREA> Conf. Dr. Ing. ANTAL Tiberiu Alexandru <P> <INPUT TYPE=SUBMIT VALUE="Trimite"> <INPUT TYPE=RESET VALUE="Reset"> </FORM> </BODY>

IE afieaz formularul sub forma prezentat n Figura 30. poate lua valorile VIRTUAL , PHYSICAL i OFF . Dac navigatorul nu le nelege, le va ignora. Valoarea definete modul n care textul introdus va fi trimis ctre server. Pentru valoarea VIRTUAL se realizeaz trecerea pe linia urmtoare cnd se ajunge la marginea din dreapta, dar textul este trimis sub forma unui ir continuu i lung. n cazul lui PHYSICAL textul este divizat pe linii i trimis sub form de mai multe iruri. Valoarea implicit este aceea de OFF , aici nu se ine cont de marginea din dreapta la afiare, astfel scrierea se face pe o singur linie, iar irul este trimis exact aa cum s-a introdus de la tastatur.
WRAP

82 - Formulare

Figure 30 Exemplu cu zona de text

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Selectarea mai multor Catedra Mecanica simulte variante, prin butoane de validare opiuni, dintre mai Programare Conf. unor informaii prin rspunsuri de tipul Atunci cnd se dorete colectareaDr. Ing. ANTAL Tiberiu Alexandru da/nu sau adevrat/fals se vor utiliza butoanele de validare (check
box ).

Forma general de scriere este:

<INPUT TYPE=CHECKBOX NAME="numecmp">

i aici numecmp este un nume de cmp unic. n plus, se poate aduga atributul CHECKED care spune navigatorului s afieze butonul de validare activat. Codul care urmeaz este afiat de IE aa cum se vede n Figura 31.
<HTML> <HEAD> <TITLE>Exemplu de lucru cu CHECKBOX</TITLE> </HEAD> <BODY> <H3>Formularul problemelor tale</H3> <FORM ACTION="mailto:[email protected]" METHOD=POST> <P> Care ar fi problemele <I>tale</I> (Selecteaza variantele corespunzatoare)? <P> <INPUT TYPE=CHECKBOX NAME="Agramat">Nu prea (mai) stiu gramatica<BR> <INPUT TYPE=CHECKBOX NAME="Sarac" CHECKED>Nu prea (mai) am bani<BR> <INPUT TYPE=CHECKBOX NAME="Dezorganizat">Nu prea stiu sa-mi organizez timpul<BR> <INPUT TYPE=CHECKBOX NAME="Emotiv">Sunt prea emotiv<BR> <P> <INPUT TYPE=SUBMIT VALUE="Trimite"> <INPUT TYPE=RESET VALUE="Reset"> </FORM> </BODY>

Formulare - 83

Figure 31 Exemplu de formular cu checkbox

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si multe variante, prin butoane de opiune Selectarea unei singure opiuni, dintre mai Programare Conf. tipul da/nu se dorete colectarea unor informaii care au mai Dac n locul unor rspunsuri deDr. Ing. ANTAL Tiberiu Alexandru mult de dou variante de rspunsuri se vor folosi butoane de opiune (option butons ). Cu acest buton utilizatorul are la dispoziie mai multe variante, dar nu poate selecta dect o singur opiune. Iat forma general:
<INPUT TYPE=RADIO NAME="numecmp" VALUE="valoare">

este numele cmpului, dar n acest caz el este acelai pentru toate variantele dintre care va selecta o singur opiune. n acest fel navigatorul va ti cum anume s grupeze butoanele. valoare este un ir unic care specific prin valoarea lui opiunea selectat. n plus, se poate folosi i aici atributul CHECKED pentru a defini varianta care este selectat implicit. Codul care urmeaz se afieaz de IE aa cum se vede n Figura 32.
numecmp <HTML> <HEAD> <TITLE>Exemplu de lucru cu RADIO</TITLE> </HEAD> <BODY> <H3>O mica verificare ...</H3> <FORM ACTION="mailto:[email protected]" METHOD=POST> <P> Cum este venitul tau lunar in lei (Selecteaza o varianta)? <UL> <INPUT TYPE=RADIO NAME="Salar" VALUE="Fara" CHECKED>Sint somer profesionist<BR> <INPUT TYPE=RADIO NAME="Salar" VALUE="Sarac">Sub 1 milion<BR> <INPUT TYPE=RADIO NAME="Salar" VALUE="Rezist">Intre 1 si 5 miloane<BR> <INPUT TYPE=RADIO NAME="Salar" VALUE="Hehe">Peste 5 milioane<BR> </UL> Care este orientarea ta politica (Selecteaza o varianta)?

84 - Formulare

<UL> <INPUT <INPUT <INPUT <INPUT </UL> <P>

TYPE=RADIO TYPE=RADIO TYPE=RADIO TYPE=RADIO

NAME="Politica" NAME="Politica" NAME="Politica" NAME="Politica"

VALUE="Trestie">Carierista<BR> VALUE="Liberal" CHECKED>Liberala<BR> VALUE="Democrat">Democrata<BR> VALUE="Cvt">Nationalista, sovina<BR>

<INPUT TYPE=SUBMIT VALUE="Trimite"> <INPUT TYPE=RESET VALUE="Reset"> </FORM> </BODY>

Figure 32 Formular cu butoane de opt iune -

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

Selectarea din liste Butoanele de opiune sunt o variant elegant de selectare a unei opiuni dac numrul de variante nu este mai mare de ase, apte. Pentru mulimi de variante cu mai multe elemente, listele (lists ) sunt mai bune. Crearea unei liste necesit scrierea unui cod cu mai multe marcaje dect n celelalte cazuri. Iat forma general:
<SELECT NAME="numecmp" SIZE=numardearticole> <OPTION>Primul articol</OPTION> <OPTION>Al doilea articol</OPTION> <OPTION>Si asa mai departe ...</OPTION> </SELECT>

Atributul SIZE , prin numrul ntreg numardearticole , permite definirea numrului de articole pe care le va afia navigatorul. Dac acesta este omis, lista devine una desfurabil (drop-down list ); dac SIZE ia o valoare mai mare de 1, ea devine un dreptunghi cu bare pentru defilare, pentru selectarea opiunii. Folosirea atributului MULTIPLE permite selectarea simultan a mai multor variante din list. Dac unei opiuni se i adaug atributul SELECTED articolul corespunztor devine cel implicit selectat la afiarea listei de ctre navigator. Iat un exemplu de lucru cu listele, formularul corespunztor, afiat de IE, este prezentat n Figura 33.

Formulare - 85

Figure 33 Formular cu liste de variante

http://www.east.utcluj.ro/mb/mep/antal
<HTML> Catedra Mecanica si Programare <HEAD> <TITLE>Exemplu de lucru cu Dr. Ing. ANTAL Tiberiu Alexandru Conf. RADIO</TITLE> </HEAD> <BODY> <H3>Despre par ...</H3> <FORM ACTION="mailto:[email protected]" METHOD=POST> <P> Cum sta parul tau?<BR> <SELECT NAME="Stil"> <OPTION>Lins</OPTION> <OPTION SELECTED>Zburlit</OPTION> <OPTION>Cret</OPTION> </SELECT> <P> Ce culoare are parul tau?<BR> <SELECT NAME="Culoare" SIZE=4> <OPTION>Negru</OPTION> <OPTION>Brunet</OPTION> <OPTION>Roscat</OPTION> <OPTION>Blond</OPTION> <OPTION SELECTED>Saten</OPTION> <OPTION>Alb</OPTION> </SELECT> <P> Ce fel de produse de par folosesti?<BR> <SELECT NAME="Produs" SIZE=5 MULTIPLE> <OPTION>Gel</OPTION> <OPTION>Spuma</OPTION> <OPTION>Apa oxigenata</OPTION> <OPTION>Negru de pantof</OPTION> <OPTION>Formula alchimica</OPTION> </SELECT> <P> <INPUT TYPE=SUBMIT VALUE="Trimite">

Universitatea Tehnica din Cluj-Napoca

86 - Formulare

<INPUT TYPE=RESET VALUE="Reset"> </FORM> </BODY>

Controale ascunse Atunci cnd ntr-o aplicaie se scriu formulare multe, se poate ca unele dintre ele s fie asemntoare prin aezarea i tipul de controale folosite. n cazul formularelor care sunt puin diferite nu are sens scrierea de script-uri diferite pentru prelucrarea datelor. Pentru a folosi un singur script este nevoie de o modalitate de ramificare, la nivelul lui, n funcie de formularul utilizat. O metod simpl de a realiza ramificarea este folosirea unor controale ascunse n fiecare formular dup cum urmeaz:
<INPUT TYPE=HIDDEN NAME="numecmp" VALUE="valoare">

Controalele de tipul HIDDEN nu sunt vizibile pentru utilizator, dar atributele sunt trimise unui script n vederea prelucrrii. Fie exemplul:
<INPUT TYPE=HIDDEN NAME="NumeFormular" VALUE="Formularul 1">

Script-ul va putea testa variabila NumeFormular . Dac valoarea ei este Formularul 1 atunci se vor realiza anumite prelucrri. Altfel, dac de exemplu, numele ar fi Formularul 2 , se pot realiza prelucrri ale datelor printr-un grup de instruciuni diferite de primul caz. http://www.east.utcluj.ro/mb/mep/antal Transmiterea datelor din formular prin e-mail Universitatea Tehnica din Cluj-Napoca n Figura 34 se prezint un formular al crui coninut va fi transmis la adresa de e-mail Catedra Mecanica si Programare [email protected] . Coninutul documentului este prezentat n fiierul emailform.html . Conf. , apare ANTAL Tiberiu Alexandru La apsarea butonului TrimiteDr. Ing. o fereastr de dialog n care vizitatorul paginii este avertizat ca adresa lui de e-mail va fi vizibil la destinaie i c datele din formular nu sunt criptate. Pentru ca datele s fie trimise trebuie apsat butonul OK. Acestea vor fi coninute n corpul mesajului de e-mail. Fiierul emailform.html :
<HTML> <HEAD> <META HTTP-EQUIV="CONTENT-TYPE "CONTENT="TEXT/HTML; CHARSET=ISO-8859-1" /> <TITLE>Crearea formularelor</TITLE> </HEAD> <BODY> <H2> - Comanda unui automobil - </H2> <FORM METHOD="POST" ENCTYPE="TEXT/PLAIN" ACTION="mailto:[email protected]"> Nume: &nbsp; <INPUT TYPE="TEXT" NAME="NUME"> <BR> Adresa: <INPUT TYPE="TEXT" NAME="ADRESA" SIZE="70"> <P>Localitate: <INPUT TYPE="TEXT" NAME="LOCALITATE"> Cod: <INPUT TYPE="TEXT" NAME="COD" SIZE="5" MAXLENGTH="5"> Cod de client:<INPUT TYPE="PASSWORD" NAME="CODECLIENT" SIZE="8"></P> <HR> <B>Culoarea masinii:</B> <SELECT NAME="TIPCULOARE"> <OPTION VALUE="ROSU">Rosu</OPTION> <OPTION VALUE="VERDE">Verde</OPTION> <OPTION VALUE="ALBASTRU">Aalbastru</OPTION> <OPTION VALUE="GRISOARECE">Gri soarece</OPTION>

Formulare - 87

</SELECT> <B>Numar de usi:</B> <INPUT TYPE="RADIO" NAME="USI" VALUE="2">2 <INPUT TYPE="RADIO" NAME="USI" VALUE="3">3 <INPUT TYPE="RADIO" NAME="USI" VALUE="5">5 <P><B>Alte date:</B> <INPUT TYPE="CHECKBOX" NAME="ALTE" VALUE="CLIMA">Clima <INPUT TYPE="CHECKBOX" NAME="ALTE" VALUE="ABS">ABS <INPUT TYPE="CHECKBOX" NAME="ALTE" VALUE="ESP">ESP</P> <HR> Daca aveti alte comentarii va rugam sa le scrieti mai jos:<BR> <TEXTAREA NAME="COMMENTS" ROWS="3" COLS="65" WRAP="WRAP">Comentarii?</TEXTAREA> <HR> <INPUT TYPE="SUBMIT" VALUE="Trimite" NAME="trimite"> <INPUT TYPE="RESET" VALUE="De la inceput" NAME="reia"> </FORM> </BODY> </HTML>

Figure 34 Transmiterea datelor din formulare prin e-mail http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

88 - Limbajul de programare VBScript

Limbajul de programare VBScript


Limbajele de script ASP au un singur tip de dat, tipul Variant . Variabilelor de acest tip li se aloc 16 octei i pot stoca orice valoare de tipul Integer , Long , String , Array sau Object . Variabilele Variant sunt mai "mari" dect celelalte variabile ntruct trebuie s stocheze att tipul ct i valoarea corespunztoare tipului. Limbajul VBScript este un subset al limbajului VBA (Visual Basic for Applications) folosit de produsul Microsoft Office i de ctre multe alte aplicaii comerciale. VBA este, la rndul lui, un subset al limbajului VB (Visual Basic). Toate aceste limbaje au aproape aceleai cuvinte cheie, proprieti i funcii. Cea mai mare diferen ntre ele este aceea c VB este compilat n timp ce VBScript nu este. VBScript este limbajul ASP implicit. La nivelul clientului se prefer nlocuirea lui cu JavaScript sau JScript ntruct codul acestor limbaje pot fi executate de majoritatea navigatoarelor. Limbajul VBScript are un numr mare de funcii interne i metode pentru majoritatea activitilor de programare comune. Ultima lui versiune adaug posibiliti de cutare avansate i suport pentru crearea de clase i obiecte. Cuvinte cheie http://www.east.utcluj.ro/mb/mep/antal Codul script este o combinaie de cuvinte cheie, de obiecte, de apeluri de funcii interne si de apeluri de rutine scrise de utilizator. Cuvintele cheiedin Cluj-Napoca sunt cuvinte recunoscute de analizor ca parte Universitatea Tehnica a limbajului VBScript si au o semnificat ie predefinita. Este interzis crearea unor variabile cu Catedra Mecanica si Programare acelai nume. Acesta este motivul pentru ANTALvor fi prezentate, n continuare, succint, ntr-o care ele Tiberiu Alexandru Conf. Dr. Ing. form tabelar, n ordinea alfabetic. Cuvnt cheie
Abs Adunare (+) And Array Asc Atn Atribuire (=)

Tip Funcie Operator Operator Funcie Funcie Funcie Operator Instruciune Funcie Funcie Funcie Funcie Funcie

Descriere Valoarea absolut a unui numr. Adun dou valori. Operatorul boolean I. Creeaz un tablou Variant . Codul ASCII al primului unui caracter. Arctangenta unui numr. Atribuie o valoare unei variabile; n VBScript se mai poate folosi pentru testarea echivalenei. Apeleaz o subrutin sau o funcie. ntoarce un Variant de subtipul Boolean . ntoarce un Variant de subtipul Byte . ntoarce un Variant de subtipul Currency . ntoarce un Variant de subtipul Date . ntoarce un Variant de subtipul Double .

Call CBool CByte CCur CDate CDbl

Limbajul de programare VBScript - 89

Cuvnt cheie
Chr

Tip Funcie Funcie Obiect Instruciune Metod Funcie Operator Instruciune Funcie

Descriere Caracterul corespunztor codului ASCII specificat printr-un numr ntreg. ntoarce un Variant de subtipul Integer . Obiectul ntors atunci cnd se creeaz o definiie de clas cu instruciunea Class . Creeaz o clas; trebuie specificat numele clasei, proprietile i metodele. Reiniializeaz obiectul Err . ntoarce un Variant de subtipul Long . Concateneaz dou iruri. Creeaz o constant. Cosinusul unui numr.

CInt Class

Class

Clear CLng Concatenare (&) Const Cos CreateObject CSng CStr Date DateAdd

Funcie Creeaz o variabil de tipul obiect. http://www.east.utcluj.ro/mb/mep/antal Funcie ntoarce un Variant de subtipul Single . Universitateantoarce un Variant de subtipul String . Tehnica din Cluj-Napoca Funcie Catedra Mecanica si Programare Funcie Dr. Ing. ANTAL un Variant de subtipul Date . ntoarce Tiberiu Alexandru Conf. Funcie ntoarce o dat sau o or prin adunarea unei date sau ore cu o constant care reprezint zile, luni, ani, secunde etc. ntoarce diferena calculat n luni, sptmni, zile, ani, minute, secunde sau ore ntre dou date sau ore. ntoarce un interval de tipul zi, lun, an etc. al unei date. ntoarce o dat specificat prin an, lun i zi. ntoarce un Variant de subtipul Date corespunztor unui parametru dat ir; transform un ir ntr-o dat. ntoarce ziua datei specificate. ntoarce descrierea erorii stocate n obiectul Err . Un obiect ce stocheaz o colecie de perechi (cheie, valoare). Declar o variabil. Permire reluarea unui grup de instruciuni; realizeaz o ciclare.

DateDiff

Funcie Funcie Funcie Funcie

DatePart

DateSerial DateValue

Day Description Dictionary

Funcie Proprietate Obiect Instruciune Instruciune

Dim Do ... Loop

90 - Limbajul de programare VBScript

Cuvnt cheie
Empty Eqv Erase Err Eval

Tip Valoare Operator Instruciune Obiect Funcie

Descriere Valoarea unui Variant neiniializat. Identic cu And boolean. Reiniializeaz un tablou. Stocheaz informaia de eroare. Evalueaz script-ul primit drept parametru ca pe o expresie. La un moment dat se poate evalua o singur expresie, pentru evaluarea mai multor expresii, vezi instruciunea Execute . Execut o cutare ntr-o "expresie de cutare" a irului primit ca argument.

Execute

Metod Instruciune

Execute

ExecuteGlobal

Execut una sau mai multe linii de cod transferate prin parametri. Liniile pot fi separate prin caracterul ; sau de <Enter>; script-ul astfel executat poate accesa variabile globale, dar poate fi executat numai n contextul procedurii n curs de execuie. http://www.east.utcluj.ro/mb/mep/antal Instruciune Execut una sau mai multe linii de cod transferate Universitateaprin parametri. Liniile pot fi separate prin caracterul Tehnica din Cluj-Napoca ; sau de <Enter>; script-ul astfel executat ruleaz n Catedra Mecanica si Programare context Tiberiu Alexandru Conf. Dr. Ing. ANTALglobal, poate accesa variabile globale i poate fi apelat din orice alt loc n script. Instruciune Funcie Valoare Obiect Funcie Proprietate Face ieirea dintr-o subrutina, funcie sau un bloc de cod care este ciclat. e ridicat la puterea x (ex). Valoarea boolean fals a lui 0. Un obiect care permite lucrul cu discul. ntoarce o submulime a unui tablou ir pe baza condiiilor specificate n parametru. ntoarce distana, n caractere, a primului caracter al unui obiect Match ntors dintr-o cutare ntr-o "expresie de cutare". Aceasta nseamn c irul cutat a fost gsit n cel destinaie din poziia indexului poantat de proprietatea FirstIndex . ntoarce numrul trunchiat la o valoare ntreag. Permite parcurgerea articolelor unui obiect colecie sau a unui tablou. Permite reluarea unei secvene de cod de un numr fixat de ori.

Exit

Exp False FileSystemObject Filter

FirstIndex

Fix For Each ... Next

Funcie Instruciune Instructiune

For ... Next

Limbajul de programare VBScript - 91

Cuvnt cheie
FormatCurrency

Tip Funcie Funcie Funcie Funcie Instruciune Funcie Funcie

Descriere Formateaz valorile valutare pe baza criteriilor specificate. Formateaz datele sau orele pe baza unui criteriu de formatare. Formateaz numerele pe baza unui criteriu de formatare. Formateaz numerele sau expresiile la formatul procentual. Definete nceputul unei funcii. ntoarce identificatorul local al calculatorului pe care se ruleaz script-ul.

FormatDateTime

FormatNumber

FormatPercent

Function GetLocale

GetObject

GetRef

Global

ntoarce o referin la un obiect ncrcat dintr-un fiier. Se vor furniza numele fiierului i opional aplicaia prin care s-a creat sub forma Excel.WorkSheet sau Word.Application . http://www.east.utcluj.ro/mb/mep/antal Funcie ntoarce un pointer la o funcie ce poate fi legat la Universitateaun evenimentCluj-Napoca Tehnica din DHTML. Catedra Determin dac ntr-o Proprietate Mecanica si Programarecutare de "expresie de Conf. Dr. Ing. ANTAL se vor prinde toate apariiile sau numai cutare" Tiberiu Alexandru prima. Proprietate Proprietate Funcie Funcie Instruciune Seteaz sau ntoarce o valoare HelpContextID reprezentnd ID-ul unui topic ntr-un fiier de Help. Seteaz sau ntoarce numele fiierului de Help asociat unui anumit obiect. ntoarce o valoare numeric n formatul hexazecimal. ntoarce ora dintr-o expresie de tipul timp. Permite ramificarea codului pe baza valorii unei expresii. Dac expresia ia valoarea True se executa seciunea Then , dac expresia ia valoarea False se execut codul din seciunea Else . Determin cutarea n expresii obinuite innd cont sau nu de scrierea cu litere mari sau mici. nmulete dou numere. Operatorul logic implic. mparte dou valori numerice.

HelpContext

HelpFile

Hex

Hour If ... Then ... Else

IgnoreCase

Proprietate Operator Operator Operator

mmulire (*) Imp mprire (/)

92 - Limbajul de programare VBScript

Cuvnt cheie
mprire ntreag (\) Initialize InputBox

Tip Operator Eveniment Funcie Funcie Functie Funcie

Descriere mparte dou valori numerice i convertete rezultatul ntr-un Integer . Apare atunci cnd o clas VBScript este instaniat. Cere utilizatorului introducerea unei informaii; funcioneaz numai la client. Poziia, n caractere, corepunztoare primei apariii ale unui subir ntr-un ir. Poziia, n caractere, corepunztoare ultimei apariii ale unui subir ntr-un ir. Partea ntreag a unui numr. Dac acesta este negativ ntoarce primul numr negativ ntreg mai mic sau egal dect el. Dac argumentul este ir va ntoarce numrul ntreg corespunztor.

InStr

InStrRev

Int

Is

Operator

IsArray

IsDate

Test de echivalen. ntoarce True dac doi pointer-i poanteaz la acelai obiect. http://www.east.utcluj.ro/mb/mep/antal Funcie ntoarce True dac argumentul este de subtipul UniversitateaArray . din Cluj-Napoca Tehnica Catedra Mecanica si Programare Funcie ntoarce True dac argumentul este de subtipul Conf. Dr. Ing. ANTAL Tiberiu Alexandru Date . Funcie Funcie Funcie Funcie Funcie ntoarce True dac argumentul este un Variant cu valoarea Empty . ntoarce True dac argumentul este un Variant cu valoarea Null . ntoarce True dac argumentul este un numr sau se poate converti la un numr. ntoarce True dac argumentul este un Variant de subtipul Object . Accept un tablou de iruri i ntoarce un ir separat printr-un delimitator specificat. Join este opusul lui Split . ntoarce indexul de jos al argumentului tablou. ntoarce irul argument convertit n litere mici. ntoarce un subir al argumentului ir plecnd de la primul caracter pn la unul specificat ntr-un parametru index. ntoarce lungimea, n caractere, a irului argument.

IsEmpty

IsNull

IsNumeric

IsObject

Join

LBound LCase Left

Funcie Funcie Funcie

Len

Funcie

Limbajul de programare VBScript - 93

Cuvnt cheie
Length

Tip Proprietate Funcie Funcie Funcie Colecie Funcie Funcie Operator

Descriere ntoarce lungimea unui obiect Match gsit ntr-o "expresie de cutare". ntoarce un obiect imagine ncrcat de pe disc. Logaritmul natural al unui numr (ln(x)). ntoarce un ir fr spaiile din partea stng a irului argument. Colecie de obiecte Match rezultate din cutarea ncheiat cu succes a unor expresii obinuite. ntoarce un subir al argumentului ir dintr-un punct de plecare specificat i cu lungime dat. ntoarce minutul, ca i ntreg n domeniul 0-59, al orei specificate. Restul mpririi a dou valori ntregi.

LoadPicture Log LTrim

Matches

Mid

Minute

Mod Month

Funcie ntoarce luna, ca i ntreg n domeniul 1-12, pentru http://www.east.utcluj.ro/mb/mep/antal data specificat. Universitateantoarce numele lunii corespunztoare argumentului Tehnica din Cluj-Napoca Funcie Catedra Mecanica si Programare ntreg. Conf. Dr. Ing. ANTAL Tiberiu Alexandru Funcie Afieaz o fereastr de dialog Windows care conine un mesaj, titlu, simbol grafic sau butoane. ntoarce o constant care definete butonul selectat de utilizator. Se folosete n script-uri client. Operator Valoare Funcie Valoare Operatorul de negare a valorii unei expresii. Valoarea unui obiect neiniializat. ntoarce data i ora curent. O "valoare" care are semnificaia de fr valoare; este diferia de zero, de irul nul, de Empty , i de Nothing . Proprietate ce stocheaz numrul erorii unui obiect Err . ntoarce valoarea octal a unui numr. Permite controlul erorilor n timpul execuiei programului.

MonthName

MsgBox

Not Nothing Now Null

Number

Proprietate Funcie Instruciune

Oct On Error

94 - Limbajul de programare VBScript

Cuvnt cheie
Option Explicit

Tip Instruciune

Descriere Foreaz declararea variabilelor. Atunci cnd este activ, la compilarea codului VBScript, la ntlnirea unui simbol necunoscut, d un mesaj de eroare. Implicit, opiunea nu este activ, n acest caz la ntlnirea unui simbol necunoscut VBScript va crea o nou variabil. Operatorul SAU logic. Se folosete pentru setarea irului pentru o cutare obinuit. Permite crearea unei variabile, funcii sau subrutine private (la nivel de script). ntoarce valoarea unei proprieti dintr-un obiect clas. D valoarea unei proprieti dintr-un obiect clas.

Or Pattern

Operator Proprietate Instruciune Instruciune Instruciune

Private

PropertyGet

PropertyLet PropertySet

Instruciune D valoarea unei proprieti obiect dintr-un obiect http://www.east.utcluj.ro/mb/mep/antal clas. Instruciune UniversitateaPermite crearea unei variabile, funcii sau subrutine Tehnica din Cluj-Napoca publice. si Programare Catedra Mecanica Conf. Dr. Ing. ANTAL Tiberiu Alexandru Metod Permite ridicarea unei erori. Rezultatul ridicrii unei erori depinde de activarea lui On Error Resume Next i de ctre starea curent de prelucrare a erorilor. Instruciune Instruciune Obiect Instruciune Metod Iniializarea generatorului de numere aleatoare. Schimb dimensiunea unui tablou. Are restricii n cazul tablourilor multidimensionale. Reprezinta un obiect "expresie de cutare". Permite realizarea unor cutri complexe n irul surs. Permite crearea unui comentariu. Apostroful are acelai efect. nlocuiete una sau mai multe apariii ale unui subir ntr-un ir cu un alt subir dintr-o expresie de cutare obinuit. nlocuiete una sau mai multe apariii ale unui subir ntr-un ir cu un alt subir. Transform trei valori de culori distincte n valoarea Long corespunztoare de culoare. Ridic un numr a la puterea x (ax).

Public

Raise

Randomize ReDim

RegExp

Rem

Replace

Replace

Funcie Funcie Operator

RGB

Ridicare la putere (^)

Limbajul de programare VBScript - 95

Cuvnt cheie
Right

Tip Funcie Funcie Funcie Operator Funcie Funcie Funcie

Descriere ntoarce numrul de caractere specificat din dreapta irului. Un numr aleator ntre 0 i 1. ntoarce un ir far spaiile din partea dreapt a irului argument. ntoarce un numr nmulit cu -1 sau diferena a dou numere. ntoarce un ir cu numele motorului curent de execuie a script-urilor. ntoarce un ir cu numarul de versiune a motorului curent de execuie a script-urilor. ntoarce un ir cu versiunea major a motorului curent de execuie a script-urilor.

Rnd RTrim

Scdere (-)

ScriptEngine

ScriptEngineBuildV ersion ScriptEngineMajorV ersion ScriptEngineMinorV ersion Second Select ... Case

Funcie ntoarce un ir cu versiunea minor a motorului curent de execuie a script-urilor. http://www.east.utcluj.ro/mb/mep/antal Funcie ntoarce secunda din ora specificat. Universitatea Tehnica din Cluj-Napoca Catedra Permite si Programare Instruciune Mecanica execuia mai multor regiuni de cod pe baza Conf. Dr. Ing. ANTAL Tiberiu Alexandru evalurii unei expresii. Funcie Seteaz ID-ul local pentru script. Se folosete pentru a transforma ieirea pentru date, ore i valut n forma specificat de ID. Semnul unui numr. Sinusul unui unghi dat n radiani. ntoarce sursa erorii. n cazul unui script de server conine numele paginii cu eroarea. ntoarce un ir umplut cu un numr specificat de spaii. Descompune un ir ntr-un tablou de subiruri pe baza unui delimitator. Split este opusul lui Join . Radcina ptrat a unui numr ( ).

SetLocale

Sgn Sin Source

Funcie Funcie Proprietate Funcie Funcie Funcie Funcie

Space

Split

Sqr StrComp

Compar dou iruri i ntoarce -1 dac este mai mic dect al doilea, 0 n caz de egalitate i 1 dac primul este mai mare dect al doilea ir. ntoarce un ir format prin repetarea unui caracter de un anumit numr de ori.

String

Funcie

96 - Limbajul de programare VBScript

Cuvnt cheie
StrReverse

Tip Funcie Instruciune Funcie Eveniment

Descriere ntoarce un ir n care s-au inversat caracterele fa de margini. Definete nceputul unei subrutine. Tangenta unui unghi dat n radiani. Apare nainte de distrugerea unei clase VBScript. Se folosete pentru distrugerea obiectelor alocate dinamic. Execut o cutare ntr-o "expresie de cutare". ntoarce ora curent a sistemului cu precizia de 1 secund. ntoarce numrul de secunde trecute de la miezul nopii.

Sub Tan Terminate

Test Time

Metod Funcie Funcie Funcie

Timer

TimeSerial

TimeValue

Trim

ntoarce o valoare de tipul timp specificat prin ora, minut i secund. http://www.east.utcluj.ro/mb/mep/antal Funcie ntoarce timpul din argument. Dac valoarea conine i o dat atunci numai timpul va fi ntors. Universitatea Tehnica din Cluj-Napoca Catedra Mecanica irul argument fr spaiile din stnga i Funcie ntoarce si Programare Conf. Dr. Ing. ANTALlui. dreapta Tiberiu Alexandru Valoare Funcie Funcie Funcie Proprietate Funcie Valoarea boolean True (adevarat). n VBScript este numrul -1. ntoarce numele intern VBScript al unei variabile de tipul scalar sau obiect. Indexul superior al unui tablou. ntoarce un ir convertit la litere mari. ntoarce textul unui obiect Match rezultat n urma unei cutri cu succes a unei expresii obinuite. ntoarce o constant sau, pentru tablouri, o combinaie de constante care reprezint tipul intern VBScript al unei variabile. Accept un argument dat i ntoarce un numr ntre 1 i 7 corespunztor zilei din sptmn a argumentului. Accept un argument dat i ntoarce un ir pentru data corespunztoare zilei din sptmn a argumentului.

True

TypeName

UBound UCase Value

VarType

Weekday

Funcie

WeekdayName

Funcie

Limbajul de programare VBScript - 97

Cuvnt cheie
While ... Wend

Tip Instruciune

Descriere Realizeaz ciclarea condiionat a unui grup de instruciuni att timp ct condiia de evaluare ia valoarea True . ine o referin local la un obiect att timp ct se fac operaii multiple cu acesta. Operatorul boolean sau exclusiv. ntoarce un ntreg ce reprezint anul datei specificata ca argument.

With ... End With

Instruciune Operator Funcie

Xor Year

Variabile Limbajul VBScript are un singur tip de variabil, tipul Variant , care poate stoca ns valori scalare, tablouri i pointer-i la obiecte. Implicit, VBScript presupune c orice simbol care nu este cuvnt cheie este variabil. Acesta este motivul pentru care apar foarte des probleme dac n cod s-a greit scrierea unui nume de variabil. VBScript va accepta acest nume, fr a genera un mesaj de eroare i va crea o variabil nou. De exemplu, dac n loc de Maxim , accidental, scriem Maxin , VBScript va crea o variabil nou cu numele Maxin . Pentru a preveni apariia acestor erori se va folosi comanda Option Explicit la nceputul codului script, apoi instruciunea Dim http://www.east.utcluj.ro/mb/mep/antal pentru declararea tuturor variabilelor din program. Dac Option Explicit este prezent, VBScript va genera o eroare de compilareTehnica din Cluj-Napoca necunoscut. Astfel, numele Universitatea la ntlnirea unui simbol de variabile scrise greit pot fi gsite deja n faza de Programare codului. Catedra Mecanica si proiectare a Conf. Dr. Ing. ANTAL Tiberiu Alexandru Denumirea de variabile scalare se folosete n cazul irurilor i al numerelor. Subtipurile Variant pentru variabilele scalare sunt: Boolean , Integer , Long , Single , Double , Date , Currency i String . Pentru a crea o variabil scalar numele acesteia se definete folosind instruciunea Dim , apoi numelui de variabil i se pot atribui valori. Iat un exemplu:
Dim x x=1 document.Write x

Pentru ca s putei vedea efectele codului putei crea o pagin HTML cu urmtorul cod:
<HTML> <HEAD> <TITLE>Cod client 1</TITLE> </HEAD> <BODY> <SCRIPT Language="VBScript"> Dim x x=1 document.Write x </SCRIPT> </BODY>

La deschiderea paginii cu navigatorul IE pe ecran se va afia numarul 1 , adic valoarea atribuit variabilei x .

98 - Limbajul de programare VBScript

Tablourile permit stocarea unor liste de valori scalare sau de valori de pointer. Practic, tabloul nu stocheaz o list de valori, ci un pointer la prima poziie a coleciei n memorie. Atunci cnd se creeaz un tablou, acestuia i se va aloca suficient spaiu n memorie pentru a stoca toate valorile. VBScript suport lucrul cu tablouri dinamice, adic tablouri a cror dimensiune poate fi modificat dup creare. Atunci cnd se face redimensionarea, noul spaiu pentru tablou se aloc ntr-o nou regiune de memorie, apoi vechiul tablou este copiat n cel nou. Din acest motiv redimensionarea unui tablou dureaz mult n comparaie cu crearea unui tablou de dimensiune fix. Tablourile pot fi create n dou feluri. Un caz este cel n care dimensiunea lui este fix, iar cellalt este cel n care dimensiunea tabloului este variabil:
Dim a(10) 'se creeaza un tablou cu 11 elemente

sau
Dim a a=Array() Redim a(10)

Accesarea elementelor de tablou se face prin index, astfel:


a(0)=1 a(1)=4 a(2)=7

http://www.east.utcluj.ro/mb/mep/antal

Implicit, VBScript creeaz Universitateaprimul index Cluj-Napoca tablourile cu Tehnica din 0, deci instruciunea Dim a(10) creeaz un tablou cu 11 elemente. Domeniul valid al indexurilor este determinat de limitele tabloului. Catedra Mecanica si Programare Limita de jos, care n VBScript Dr. Ing. ANTAL 0, respectiv cea de sus se pot determina prin Conf. este ntotdeauna Tiberiu Alexandru funciile LBound(a) , respectiv UBound(a) . Urmtoarea secven de cod poate fi rulat n IE:
Dim a(10) document.Write "Limita de jos =" & LBound(a) & "<BR>" document.Write "Limita de sus =" & UBound(a) & "<BR>"

Numrul total de articole dintr-un tablou poate fi gsit cu formula: (UBound(a)-LBound(a)+1) . n continuare, se prezint o aplicaie n care numrul de elemente de tablou se aloc dinamic, apoi se afieaz limitele noului tablou i numrul lui de elemente.
<HTML> <HEAD> <TITLE>Cod client 3</TITLE> </HEAD> <BODY> <SCRIPT Language="VBScript"> Dim a, nrelem a=Array() ReDim a(12) Document.Write "Limita de jos =" & LBound(a) & "<BR>" Document.Write "Limita de sus =" & UBound(a) & "<BR>" nrelem=(UBound(a)-LBound(a)+1) Document.Write "Numarul de elemente = " & nrelem & "<BR>" </SCRIPT> </BODY>

poate stoca i un pointer la obiect. Dac un obiect este creat pe server cu funcia Server.CreateObject , VBScript aloc spaiul pentru stocarea datelor lui i ntoarce un pointer la zona alocat (CreateObject simplu se va folosi dac obiectul va fi creat pe client). Variabila obiect stocheaz acel pointer, la fel ca n cazul unui tablou cnd se stocheaz un pointer la primul
Variant

Limbajul de programare VBScript - 99

element de tablou. Pentru ca VBScript s poat face diferen ntre un pointer la obiect i o valoare numeric trebuie folosit cuvntul cheie Set atunci cnd se creeaz variabila obiect. De exemplu:
Dim obDictionar Set obDictionar=CreateObject("Scripting.Dictionary")

Prin folosirea funciei IsObject se poate determina dac o variabil stocheaz un obiect. Dup crearea variabilei obiect proprietile i metodele ei se acceseaz prin folosirea punctului. De exemplu pentru adugarea unor articole n dicionar se folosete metoda Add astfel:
obDictionar.Add cheie, valoare

ASP va distruge toate variabilele locale la terminarea paginii. Totui, este o strategie de programare bun ca variabilele obiect s fie setate la valoarea Nothing dup cum urmeaz:
Set obDictionar=Nothing

Astfel, memoria utilizat pentru stocarea obiectului va fi eliberat i va putea fi utilizat n alte scopuri. n continuare se prezint un exemplu de lucru funcional n IE (nu este nevoie de server pentru http://www.east.utcluj.ro/mb/mep/antal rularea lui; dac se dorete rularea pe server, n locul lui CreateObject se va folosi Server.CreateObject ). Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare <HTML> <HEAD> Conf. Dr. Ing. ANTAL Tiberiu Alexandru
<TITLE>Cod client 4</TITLE> </HEAD> <BODY> <SCRIPT Language="VBScript"> Dim obDictionar, O Set obDictionar=CreateObject("Scripting.Dictionary") obDictionar.Add 1, "unu" obDictionar.Add 2, "doi" for each O in obDictionar Document.Write obDictionar(O) & "<BR>" next if IsObject(obDictionar) then Set obDictionar=Nothing end if </SCRIPT> </BODY>

Subrutine i funcii VBScript permite plasarea codului n blocuri cu nume denumite generic rutine. Unele limbaje au un singur tip de rutin numit funcie. VBScript are dou: func-ia i subrutina. Funciile sunt t rutine care ntorc o valoare n timp ce subrutinele sunt rutine care nu ntorc valoare. Deseori, o anumit secven de cod poate fi scris att prin folosirea subrutinelor ct i prin folosirea funciilor. n continuare se va scrie o subrutin i o funcie care realizeaz aceeai aciune de concatenare a dou iruri. n cazul subrutinei pentru concatenarea a doua siruri avem doi parametri de intrare, pe sir1 i -

100 - Limbajul de programare VBScript

pe sir2 , i un singur parametru de ieire, pe sirrasp , care va conine rezultatul concatenrii:


Sub ConSirS(sir1, sir2, sirrasp) sirrasp=sir1 & sir2 End Sub

O variant mai util este funcia urmtoare:


Function ConSirF(sir1, sir2) ConSirF=sir1 + sir2 End Function

Aciunea este aceeai, de concatenare a celor dou iruri, ns aici funcia va ntoarce ca valoare rezultatul concatenrii. Observai c n cazul funciei codul este scris diferit, n locul lui & folosindu-se +. n aceast variant dac argumentele sunt iruri ele se vor concatena, iar dac sunt numere ele se vor aduna. Apelul funciilor i al subrutinelor se scrie diferit. n cazul subrutinelor sunt posibile urmatoarele variante de scriere:
Call ConSirS(TSir(0), TSir(1), SirRasp) ConSirS TSir(0), TSir(1), SirRasp

iar n cazul funciei:


SirRasp=ConSirF(1,2)

http://www.east.utcluj.ro/mb/mep/antal

Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Tipurile argumentelor suntConf. Dr. Ing. ANTALVBScript mai ales atunci cnd se scriu funcii. o problem serioas n Tiberiu Alexandru Un programator bun trebuie s verifice dac tipurile sunt compatibile, iar n cazul n care nu sunt s foloseasc funcii de conversie pentru a rezolva incompatibilitile. O soluie pentru problema propus se prezint n funcia ConSirFOK() .
<HTML> <HEAD> <TITLE>Cod client 5</TITLE> </HEAD> <BODY> <SCRIPT Language="VBScript"> Dim TSir, SirRasp Sub ConSirS(sir1, sir2, sirrasp) sirrasp=sir1 & sir2 End Sub Function ConSirF(sir1, sir2) ConSirF=sir1 + sir2 End Function Function ConSirFOK(sir1, sir2) If varType(sir1) <> vbString Then sir1=CStr(sir1) End If If varType(sir2) <> vbString Then sir2=CStr(sir2) End If ConSirFOK=sir1 + sir2 End Function TSir=Array("unu","doi")

Limbajul de programare VBScript - 101

Call ConSirS(TSir(0), TSir(1), SirRasp) Document.Write "Concatenarea lui " & TSir(0) & " cu " & TSir(1) & " daE -> " & SirRasp & "<BR>" SirRasp=ConSirF(1,2) Document.Write "Concatenarea lui 1 cu 2 da -> " & SirRasp & "<BR>" SirRasp=ConSirFOK(1,2) Document.Write "Concatenarea lui 1 cu 2 da -> " & SirRasp & "<BR>" </SCRIPT> </BODY>

VBScript permite crearea de rutine recursive. O rutin se numete recursiv dac se apeleaz pe ea nsi pn cnd o anumit condiie de prsire a apelului recursiv devine adevrat. Un exemplu de calcul al factorialului se prezint n continuare.
<HTML> <HEAD> <TITLE>Cod client 6</TITLE> </HEAD> <BODY> <SCRIPT Language="VBScript"> Function Fact(n) If (n > 0) Then Fact=n*Fact(n-1) Else Fact=1 End If http://www.east.utcluj.ro/mb/mep/antal End Function

Universitatea & Fact(7) & "<BR>" Document.Write "Fact(7) = " Tehnica din Cluj-Napoca </SCRIPT> Catedra Mecanica si Programare </BODY> Conf. Dr. Ing. ANTAL Tiberiu Alexandru Operatori VBScript Valorile stocate n variabile rezult n urma evaluarii unor expresii. Expresiile sunt formate din secvene de operatori i operanzi. Urmtoarele grupe de operatori sunt predefinii n VBScript: # aritmetici; # de comparaie; # de concatenare; # logici. Operatori aritmetici Semnificaie adunare scdere nmulire mprire mprire ntreag ridicare la putere modulo Simbol
+ * / \

Exemplu
a+b a-b a*b a/b a\b a a a a

Remarc i b de orice tip numeric. i b de orice tip numeric. i b de orice tip numeric. i b de orice tip numeric.

nainte de mprire a i b sunt rotunjite la valori ntregi, rezultatul este tot un ntreg.
a a

^ Mod

a^b a Mod b

poate fi orice numr, b numai unul ntreg.

i b se rotunjesc la ntregi dup care se calculeaz restul mpririi lui a la b .

102 - Limbajul de programare VBScript

Operatori de comparaie Se folosesc pentru compararea expresiilor. Semnificaie mai mic mai mic sau egal mai mare mai mare sau egal egal diferit Simbol
<

Exemplu
a<b

Remarc Expresia din exemplu ia valoarea True dac a < b , n caz contrar ia valoarea False . Expresia din exemplu ia valoarea True dac a <= b , n caz contrar ia valoarea False . Expresia din exemplu ia valoarea True dac a > b , n caz contrar ia valoarea False . Expresia din exemplu ia valoarea True dac a >= b , n caz contrar ia valoarea False . Expresia din exemplu ia valoarea True dac a = b , n caz contrar ia valoarea False .

<=

a<=b

>

a>b

>=

a>=b

a=b

<>

Expresia din exemplu ia valoarea True dac a <> b , n caz contrar ia valoarea False . http://www.east.utcluj.ro/mb/mep/antal

a<>b

Dac n exemplele de mai Universitatea Tehnica din Cluj-Napoca valoarea Null , expresia de sus, una dintre variabilele a sau b are comparaie ia i ea valorea Null . Variabilele comparate trebuie s fie de tip numeric. Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru Operatori de concatenare Se folosesc n cazul irurilor i au ca efect alturarea a dou iruri. Valoarea ntoars este un nou ir care conine irurile operanzi alturai. Semnificaie concatenare concatenare Simbol
&

Exemplu
a&b a

Remarc i b trebuie s fie iruri, altfel se convertesc n iruri automat. Dac ambele variabile sunt de tipul ir, operatorul de adunare are efect de concatenare.

a+b

Operatori logici Matematicianul britanic George Boole a inventat un sistem matematic bazat pe valorile de adevr, adevrat (True ), fals (False ) i funciile I (AND), SAU (OR) i NU (NOT). Funciile booleene sunt prezentate prin tabele de adevr. Tabelele de adevar prezinta toate posibilitat ile combinat iilor de intrare (sunt scrise pe fond gri n tabelele ce urmeaza), corespunzatoare celor de iesire, pentru o funct ie booleana. n VBScript, operatori cu aceeai scriere sunt folosii pentru operaiile logice i pe bii. Operatorii pe bii trateaz operanzii sub forma unui vector de bii i nu ca un singur numr. Ei acioneaz asupra celor N bii (care sunt reprezentarea binar a valorilor operanzilor) folosind funcii boolene pentru a produce cte un rezultat la nivelul fiecruia dintre cei N bii. Dac operanzii sunt valori logice, notaiile folosite n tabelele de adevr pentru valorile logice sunt cele de True i False . Dac operatorii sunt pe bii, notaia folosit n tabelele de adevr este aceea de 0 pentru False i de 1 pentru True .

Limbajul de programare VBScript - 103

Semnificaie

Simbol

Exemplu
a > b And b > c

Remarc Expresiile asupra crora acioneaz operatorul sunt valori de adevr; n acest caz se execut I logic. i b sunt numere, operatorul I va lucra la nivel de bii.
a

I logic sau pe bii

And a And b

a > b Or b> c

SAU logic sau pe bii

Or a Or b

Expresiile asupra crora acioneaz operatorul sunt valori de adevr; n acest caz se execut SAU logic. i b sunt numere, operatorul SAU va lucra la nivel de bii.
a NU NU

NU logic sau pe bii

Not (a > b) Not Not a

logic. pe bii.

Tabela de adevr pentru And logic Tabela de adevr pentru And pe bii a i b sunt valori de adevr True sau False . a i b sunt numere i se lucreaz cu reprezentarea binar - iruri de bii (0, 1). And True False Null http://www.east.utcluj.ro/mb/mep/antal
True False Null True False Null False

Universitatea Tehnica din Cluj-Napoca 1 1 False Catedra Mecanica si Programare False 0 0 Conf. Dr. False Null Ing. ANTAL Tiberiu Alexandru

Null

And

0 0 0

Tabela de adevr pentru Or logic a i b sunt valori de adevr True sau False .
Or True False Null True True True True False True False Null Null True False Null

Tabela de adevr pentru Or pe bii a i b sunt numere i se lucreaz cu reprezentarea binar - iruri de bii (0, 1) .
Or 1 0 1 1 1 0 1 0

Tabela de adevr pentru Not a este True sau False.


a True False Null Not(a) False True Null

logic

Tabela de adevr pentru Not pe bii a este numr i se lucreaz cu reprezentarea binar - iruri de bii (0, 1).
a 1 0 Not(a) 0 1

Operatorii logici lucreaz cu valori de adevr logice i produc un rezultat care este tot o valoare logic, astfel True And True = True . Operatorii pe bii, dup cum am mai spus deja, folosesc descompunerea binar a valorilor numerice ale operanzilor i acioneaz asupra poziiilor

104 - Limbajul de programare VBScript

identice de bii din cei doi operanzi, modificnd bitul corespunztor numai pentru acea poziie. Rezultatul lor este un numr. De exemplu, n cazul lui 15 And 9 dupa descompunerea binar a operanzilor avem 1101 And 1001 = 1001 = 9 . Instruciuni de ramificare Toate limbajele moderne de programare au instruciuni pentru execuia condiionat a codului. If ... Then Instruciunea If ... Then are mai multe variante, dar toate au la baz aceeai sintax, o condiie urmat de Then , apoi urmeaz codul de executat dac condiia ia valoarea de adevr True . Ultima linie a lui If este End If , aceasta marcnd terminarea blocului asupra cruia acioneaz If -ul. Iat cteva exemple:
Dim i i=7 If i=7 Then 'orice grup de instructiuni care se executa numai daca i=7 End If

O variant puin mai complex de If poate conine i o poriune de Else :


Dim i i=7 http://www.east.utcluj.ro/mb/mep/antal If i=7 Then 'un grup de instructiuni care se executa daca i=7 Universitatea Tehnica din Cluj-Napoca Else 'un alt grup de instructiuni care si Programaredaca i<>7 Catedra Mecanica se executa End If

Conf. Dr. Ing. ANTAL Tiberiu Alexandru

Cea mai complex variant este aceea n care apare i ElseIf :


Dim i i=2 If i=1 Then 'un grup de instructiuni care se executa daca i=1 ElseIf i=2 'un alt grup de instructiuni care se executa daca i=2 Else 'un alt grup de instructiuni care se executa daca i<>1 si i<>2 'adica daca primele doua conditii nu au fost adevarate (True) End If

Select ... Case Atunci cnd se formeaz structuri If ... ElseIf ...Else ...End If lungi este de preferat folosirea instruciunii Select ... Case . Aceasta permite selectarea unei opiuni din mai multe variante. Ultima poriune de cod se poate rescrie astfel:
Dim i i=2 Select Case i Case 1 'un grup de instructiuni care se executa daca i=1 Case 2 'un alt grup de instructiuni care se executa daca i=2 Case Else 'un alt grup de instructiuni care se executa daca i<>1 si i<>2 'adica daca primele doua conditii nu au fost adevarate (True) End Select

Limbajul de programare VBScript - 105

Atunci cnd fiecare variant are o singur valoare posibil Select ... Case nu ajut prea mult n comparaie cu If ... ElseIf ...Else ...End If , exist ns i cazuri n care pentru mai multe valori diferite trebuie executat aceeai instruciune, aici, Select ... Case devine util. Fie secvena de cod:
If TipGrad = "Preparator" Or TipGrad = "Asistent" _ Or TipGrad = "Sef lucrari" Or TipGrad = "Conferentiar" Then ' nu primesc salar de merit Else ' primesc salar de merit End If

Rescrierea ei cu Select

... Case

face, cel puin, citirea mai uoar:

Select Case TipGrad Case "Preparator", "Asistent", "Sef lucrari", "Conferentiar" ' nu primesc salar de merit Case Else ' primesc salar de merit End Case

Instruciuni de ciclare Deseori trebuie s relum un grup de operaii de mai multe ori. VBScript are instruciunea For http://www.east.utcluj.ro/mb/mep/antal Each ... Next pentru parcurgerea obiectelor din coleciile ASP intrinseci. O denumire alternativ este cea de iteraie printre obiectele coleciei. Atunci cnd nu se lucreaz cu obiecte, Universitatea Tehnica din Cluj-Napoca VBScript pune la dispoziia Catedra Mecanica si Programare ciclare clasice care au un programatorului instruciuni de corespondent n majoritatea altorDr. Ing. ANTAL TiberiuPentru un numr de reluri fixat se va Conf. limbaje de programare. Alexandru folosi ciclul For ... Next , atunci cnd ciclarea se face sub controlul unei expresii care ia valoarea de adevr True sau False se vor folosi ciclurile While ... Wend i Do ... While . While ... Wend se execut att timp ct o condiie ia valoarea True , iar Do ... While se execut att timp ct o condiie este False . For ... Next Dac numrul de reluri este predeterminat ciclul For ... Next este cel mai potivit. Acesta folosete o variabil pentru controlarea numrului de reluri. Programatorul trebuie s specifice numele variabilei de control, valoarea de nceput, valoarea de sfrit i, opional, pasul de cretere a variabilei de control. Codul care se va relua trebuie plasat ntre instruciunile For i Next . Forma general a instruciunii este:
For <Variabila de control> = <Valoare de nceput> To <Valoare de sfrs it> Step <Pas> 7 ' instruct iuni Next <Variabila de control> 7

Tradiional, programatorii folosesc numele de variabil i (i ntreg) pentru <Variabila de 7 control>. Ciclurile pot fi imbricate (ntre instruciunile unui ciclu se poate scrie un alt ciclu). Opional, pentru creterea claritii codului, se poate scrie numele variabilei de control i dup Next. Pasul implicit este de 1. Deoarece creterea cu o unitate a unei valori se numete incrementare, uneori <Pas> mai este numit i increment. Iat un exemplu:
<HTML> <HEAD> <TITLE>Cod client 7 - ciclul For ... Next</TITLE> </HEAD> <BODY>

106 - Limbajul de programare VBScript

<SCRIPT Language="VBScript"> Dim i For i = 1 To 5 Step 2 Document.Write "i = " & i & "<BR>" Next </SCRIPT> </BODY>

La terminarea instruciunilor de reluat VBScript crete valoarea lui <Variabila de control> 7 cu cea definit n <Pas>, aceast reluare continund pn la atingerea <Valoare de sfrs it>. Valorile variabilei de control i a pasului nu trebuie s fie neaprat pozitive dup cum se observ din exemplul urmtor:
Dim i For i = 7 To -1 Step -2 Document.Write "i = " & i & "<BR>" Next

While ... Wend Instruciunea While ... Wend se execut att timp ct instruciunea condiional urmtoare lui While este True . Forma general este:
W hile <Condit ie> ' instruct iuni W end

http://www.east.utcluj.ro/mb/mep/antal
... Next :

Universitatea Tehnica din Cluj-Napoca Iat un exemplu care este echivalentul primului exemplu de ciclu For Catedra Mecanica si Programare <HTML> Conf. Dr. Ing. ANTAL Tiberiu Alexandru
<HEAD> <TITLE>Cod client 8 - ciclul While ... Wend</TITLE> </HEAD> <BODY> <SCRIPT Language="VBScript"> Dim i i=1 While i <= 5 Document.Write "i = " & i & "<BR>" i=i+1 Wend </SCRIPT> </BODY>

O alt aplicaie a ciclului While

... Wend

este:

Dim s s = "a" While s <> "abcdefg" Document.Write "s = " & s & "<BR>" s = s & Chr(Asc(Right(s,1))+1) Wend

Ciclul While ... Wend este o variant mai simpl de For ... numai din motive de compatibilitate cu versiunile lui mai vechi. Do ... While

Next ,

fiind pstrat n limbaj

Ciclul Do ... While este asemntor lui While ... Wend , dar condiia de reluare a ciclului poate fi scris att naintea, ct i la sfritul ciclului. Apare astfel, posibilitatea de execuie cel puin o singur data a ciclului. Iat formele generale:

Limbajul de programare VBScript - 107

Do W hile <Condit ie> ' instruct iuni Loop Do ' instruct iuni Loop W hile <Condit ie> -

Exist i o variant n care <Condit ie> nu se scrie ea fiind folosit n cazul ciclurilor infinite: Do ' instruct iuni Loop

Aceast ultim variant este util atunci cnd se execut pe server, unde valoarea Server.ScriptTimeout limiteaz execuia, n timp, a script-urilor. Varianta Do ... Loop While <Condit ie> va fi executat cel puin o singur dat ntruct condiia testat pentru reluarea ciclului se afl dup instruciunile de reluat. Operaii cu iruri Limbajul Visual Basic are o gam variat de funcii pentru manipulare a irurilor. Limbajul VBScript, pe lng faptul c motenete aceste funcii, are i cteva extensii foarte utile. http://www.east.utcluj.ro/mb/mep/antal VBScript poate cuta i extrage subiruri, compara i descompune un ir ntr-un tablou de subiruri cu ajutorul delimitatorilor. Dei operaiile cu iruri sunt mult simplificate prin funcii Universitatea Tehnica din Cluj-Napoca speciale, manipularea irurilor presupune copierea unor blocuri continue de memorie dintr-o Catedra Mecanica si Programare regiune de RAM n alta. Minimizarea acestor operaii duce la creterea vitezei de lucru a Conf. Dr. Ing. ANTAL Tiberiu Alexandru programului. Funcii obinuite pentru manipularea irurilor motenite din Visual Basic Funciile Left , Right i Mid ntorc partea stng, dreapt respectiv o seciune de mijloc a irului surs. Pentru Left i Right trebuie specificat numrul de caractere care se ntorc. Pentru Mid se va specifica poziia de pornire i opional lungimea. Iat cteva exempele:
Left("Te salut!, 3) Left("Te salut!, 33) Right("Te salut!", 3) Right("Te salut!", 43) Mid("Te salut!", 3, 3) Mid("Te salut!", 3) Mid("Te salut!", 3, 23) ' ' ' ' ' ' ' intoarce intoarce intoarce intoarce intoarce intoarce intoarce "Te " "Te salut!" "ut!" "Te salut!" "sal" "salut!" "salut!"

Funciile Instr i InstrRev permit gsirea poziiei unui subir ntr-un ir. Ambele funcii ntorc poziia de nceput a primului caracter din subir n ir.
Instr("Te salut!", "sal") ' intoarce 4

Ambele funcii accepta o poziie de nceput i un parametru de comparaie ce specific dac n comparaie se ine cont de scrierea cu litere mari sau mici. Pentru valoarea 0 (VbBinaryCompare ) comparaia se face innd cont de scrierea cu litere mari sau mici, iar pentru valoarea 1 (vbTextCompare ) nu. Spre deosebire de Instr , InstrRev ncepe cutarea de la captul irului.
Instr(1,"Te salut!", "sal", vbBinaryCompare) Instr(1,"Te salut!", "Sal", vbBinaryCompare) Instr(1,"Te salut!", "sal", vbTextCompare) ' ntoarce 4 ' ntoarce 0 ' ntoarce 4

108 - Limbajul de programare VBScript

InstrRev("Te salut!", "sal",9 ,VbBinaryCompare) ' ntoarce 4 InstrRev("Te salut!", "Sal",9 ,VbBinaryCompare) ' ntoarce 0 InstrRev("Te salut!", "sal",9 ,vbTextCompare) ' ntoarce 4

Observai c ordinea parametrilor prin care este specificat poziia de plecare nu este aceeai, iar rspunsul este dat ntotdeauna fa de primul element din ir. Pentru ca InstrRev s parcurg tot irul, parametrul de nceput trebuie s fie lungimea irului. Expresia de c|utare VBScript a preluat din JScript o foarte puternic metod de cutare i gsire a expresiilor obinuite, n comparaie cu aceea oferit de Instr . O expresie de cutare este format dintr-un text mpreun cu unele caractere speciale sau din comenzi care descriu modul n care se va face cutarea. Pentru inializarea unei cutri ntr-o expresie de cutare trebuie creat un obiect RegExp i iniializat proprietatea Pattern dup cum urmeaz:
Set expob = New RegExp expob.Pattern = "ta"

Pot fi realizate cutri globale, care gsesc toate apariiile, prin folosirea proprietii Global , iar pentru ignorarea scrierii cu litere mari i mici se poate folosi proprietatea IgnoreCase . Dup http://www.east.utcluj.ro/mb/mep/antal setarea proprietilor obiectului RegExp se trece la cutare prin folosirea metodei Text sau Execute.Test ce realizeaza testarea existenei subirului, n timp ce Execute determin poziia Universitatea Tehnica True dac subirul apare n irul de cutat, i numrul lui de apariii. Rezultatul lui Test estedin Cluj-Napoca Catedra Mecanica si Programare altfel ntoarce False . n continuare se prezint un exemplu de lucru cu Execute . Rezultatele sunt vizualizate n Figura 35. Conf. Dr. Ing. ANTAL Tiberiu Alexandru
<HTML> <HEAD> <TITLE>Cod client - Expresia obisnuita</TITLE> </HEAD> <BODY> <SCRIPT Language="VBScript"> Dim s Dim expob Dim rezultate Dim unrezultat Dim i s = "Acesta este sirul - Expresie obisnuita - " & _ "care va fi parcurs in cautare" Set expob = New RegExp expob.Pattern = "ta" expob.IgnoreCase = True expob.Global=True Set rezultate = expob.Execute(s) Document.Write "In urma verificarii sirului:" & "<BR>" Document.Write "<PRE>&quot;" & s & "&quot;<BR>" Document.Write "&nbsp;" For i=0 to Len(s) Document.Write Right(i,1) Next Document.Write "</PRE><BR>" For Each unrezultat In rezultate Document.Write "Subsirul &quot;" & unrezultat.Value & _ "&quot; de lungime " & unrezultat.Length & _ " a fost gasit in pozitia " & _ unrezultat.FirstIndex & "<BR>" Next </SCRIPT>

Limbajul de programare VBScript - 109

</BODY>

Figure 35 Cautarea folosind "Expresia de cautare"

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru Metoda Execute ntoarce o colecie rezultate . Fiecare obiect din rezultate este un rezultat cu proprietile Value , Length i FirstIndex care definesc subirul cutat, lungimea lui i poziia lui n ir. Puterea expresiei obinuite const n posibilitatea cutrii unor caractere speciale. Tabelul urmtor prezint cteva dintre caracterele speciale i secvenele care pot fi folosite ntr-o expresie de cutare. Caracter Descriere Specific faptul c urmtorul caracter fie este unul special, fie este exact cel care s-a scris. ntruct unele caractere au o semnificaie special ele trebuie "scoase" n afara semnificaiei speciale; aceasta se face precednd caracterul cu \, cteva dintre aceste caractere sunt: ( ) [ ] \*. $ . Cteva dintre caracterele speciale sunt: \b \B \d \D \n. Limiteaz comparaia la nceputul unui rnd sau ir. Limiteaz comparaia la sfritul unui rnd sau ir. Specific caracterul din faa lui * de 0 sau de mai multe ori. De exemplu, pentru ma* se va gsi att mama ct i mic . Specific caracterul din faa lui + de unul sau de mai multe ori. De exemplu, pentru ma+ se va gsi mama , dar nu se va gsi i mic .

^ $

110 - Limbajul de programare VBScript

Caracter
?

Descriere Specific caracterul din faa lui ? de 0 sau o singur dat. De exemplu, pentru ma? se va gsi mama , i mic , dar nu se va gasi maa . Specific un singur caracter, oricare ar fi el (cu excepia celui de trecere la linie nou). Specific pe a sau pe b . Specific repetarea unui caracter de n ori. De exemplu, e{2} gsete perechea de e din aceea i dar nu i e -ul din acel . Specific oricare caracter dintre parantezele drepte. Specific oricare dintre caracterele care nu sunt scrise ntre parantezele drepte. Specific un caracter din domeniul definit; n varianta [a-z] orice liter mic din alfabet. Specific un delimitator de cuvnt cum ar fi spaiul, punctul, tabulatorul. De exemplu, a\b specific pe al doilea a din Ea este mama mea . http://www.east.utcluj.ro/mb/mep/antal Specific un text care nu se afl lng un delimitator de cuvnt cum ar Universitatea Tehnica din Cluj-Napoca fi spaiul, punctul, tabulatorul. De exemplu, \Bm specific al doilea m Catedra Mecanica si Programare din Ea este mama mea . Conf. Dr. Ing. ANTAL Tiberiu Alexandru Specific orice caracter care este cifr, la fel cu [0-9] . Specific orice caracter care nu este cifr, la fel cu [^0-9] . Specific caracterul de trecere la linie nou (vbCrLf
- newline ).

a|b

{n}

[abc]

[^abc]

[a-z]

\b

\B

\d \D \n

Clase VBScript Terminologie # programare orientat pe obiecte - conceptul de baz n aceast tehnologie de programare este aceea de obiect care este o structura de dat ncapsulat cu mulimea rutinelor, denumite metode, care pot opera cu datele respective. Manipulrile datelor pot fi efectuate numai prin aceste metode care sunt comune tuturor obiectelor ce sunt instanieri ale aceleiai clase. Fiecare clas are o poziie n ierarhia (mulimea claselor mpreun cu relaiile ntre clase) claselor. Metodele unei clase pot fi transferate n josul ierarhiei unei subclase sau pot fi motenite de la o superclas. # clas - prototipul unui obiect ntr-un limbaj de programare orientat pe obiecte, analogul tipului derivat din limbajele procedurale. O clas mai poate fi considerat i o mulime de obiecte care au o structur i un comportament comun. Structura clasei este determinat de variabilele prin care se reprezint starea obiectului din acea clas, iar comportamentul clasei este dat de mulimea metodelor asociate clasei. # obiect - n programarea orientat pe obiecte este o instan unic a unei structuri de date definit conform unui ablon dat de clasa din care face parte. n VBScript, o clas este format din proprieti i cod care lucreaz mpreun formnd o unitate de program distinct. Majoritatea claselor conin proprieti, care pot fi citite sau scrise, i

Limbajul de programare VBScript - 111

metode, care sunt funcii sau subprograme ce pot fi apelate. Clasele pot conine proprieti i metode ascunse (private) sau vizibile (publice). O proprietate este o caracteristic a unui obiect, iar o metod reprezint o aciune care poate fi efectuat de obiect. Clasa reprezint un ablon. O variabil de tipul clas (uneori numita si instant iere) este un obiect care se creeaz pe baza ablonului, el avnd caracteristicile descrise de acesta. Definirea membrilor dat| Cnd se atribuie o valoare unei proprietat i din obiect, valoarea este stocata ntr-o variabila interna care este accesibila numai respectivului obiect. Un utilizator al obiectului poate manipula doar proprietat ile expuse. Astfel, datele specifice obiectului sunt protejate contra manipularilor directe si, eventual, gresite. Primul pas este specificarea acestor variabile interne clasei care se mai numesc si membri dat. De obicei, se declara cte o variabila interna pentru fiecare data de stocat n obiect respectnd regulile: ! fiecare variabila se declara folosind cuvntul cheie Private pentru a face variabilele disponibile numai n interiorul acelei clase; ! tradit ional, numele membrilor data se prefixeaza cu m pentru a indica faptul ca este vorba despre un membru al unei clase. n exemplul care va fi prezentat acestea sunt: http://www.east.utcluj.ro/mb/mep/antal
Private Private Private Private

Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru Implementarea propriet|ilor clasei Al doilea pas consta n definirea proprietat ilor clasei. La fel ca si n cazul membrilor data, ideea sta n crearea unei proprieti pentru fiecare articol de informat ie stocat. Acest pas are dou etape pentru fiecare proprietate: ! stabilirea mecanismului pentru ntoarcerea valorii curente a proprietii i ! un mecanism, opional, pentru modificarea valorii proprietii. Aceste "mecanisme" se implementeaz printr-un grup special de funcii folosind cuvintele cheie Property Get i Property Set . Property Get Property Get se folosete pentru ntoarcerea valorii curente a unei proprieti. Formatul general pentru aceast proprietate este: Public Property Get numeproprietate( ) [instruciuni] numeproprietate = mmembrudat End Property Folosirea lui Public face ca aceast procedur sau proprietate s fie vizibil pentru procese externe. numeproprietate este numele proprietii, iar mmembrudat este variabila membru dat care stocheaz valoarea curent a proprietii. Dac dorim, se pot aduga instruciuni n plus procedurii, dei n cazul lui Property Get este destul de rar. n exemplul care va fi prezentat acestea sunt:

mNume mPrenume mAdresa dTelefoane

112 - Limbajul de programare VBScript

Public Property Get Nume() Nume=mNume End Property Public Property Get Prenume() Prenume=mPrenume End Property Public Property Get Adresa() Adresa=mAdresa End Property

Property Let Cu excepia cazului n care dorii ca proprietatea s poat fi doar citit, trebuie definit o procedur care permite atribuirea unei noi valori proprietii. n acest scop se va folosi o procedur Property Let care are forma general: Public Property Let numeproprietate(ValoareNou) [instruciuni] mmembrudat = ValoareNou End Property La fel ca i mai nainte numeproprietate este numele proprietii, de asemenea, ValoareNou este noua valoare pe care utilizatorul vrea s-o atribuie proprietii, iar mmembrudat este variabila http://www.east.utcluj.ro/mb/mep/antal membru dat a crei valoare se va modifica. i aici pot fi adugate instruciuni n plus. Acestea testeaz, de obicei, noua valoare nainte de a modifica membrul dat. n exemplul care va fi Universitatea Tehnica din Cluj-Napoca prezentat acestea sunt: Catedra Mecanica si Programare
Public Property Let Nume(s) mNume=s End Property

Conf. Dr. Ing. ANTAL Tiberiu Alexandru

Public Property Let Prenume(s) mPrenume=s End Property Public Property Let Adresa(s) mAdresa=s End Property

Crearea metodelor clasei Orice obiect are i un grup de metode care acioneaz asupra obiectului. n acest scop, n cadrul clasei, trebuie s definim proceduri Sub sau Function de tipul Public pentru ca s fie vizibile extern. n cazul exemplului care se va prezenta exist procedur Sub cu numele AdaugaTelefon care adaug un nou numr de telefon. Definirea evenimentelor clasei Clasele definite de utilizator suport lucrul cu dou evenimente Initialize i Terminate . Evenimentul Initialize Acesta apare atunci cnd se realizeaz instanierea obiectului de tipul clas, adic atunci cnd se declar o variabil obiect de tipul clasei dup cum urmeaz:
Dim Pers1 Set Pers1 = New Persoana 'evenimentul Initialize

Pentru a folosi acest eveniment se adaug clasei o procedur Private care folosete urmtorul

Limbajul de programare VBScript - 113

format:

Private Sub Class_Initialize [codul de initializare se pune aici] End Sub n cazul nostru, procedura care urmeaz iniializeaz, creeaz obiectul Scripting.Dictionary i stocheaz o referina la acesta n dTelefoane .
Private Sub Class_Initialize Set dTelefoane = CreateObject("Scripting.Dictionary") Document.Write "Obiectul Scripting.Dictionary a fost initializat<BR>" End Sub

Evenimentul Terminate Acest eveniment apare atunci cnd toate referinele la obiectul de tipul clas sunt setate la Nothing . Se folosete atunci cnd clasa a alocat dinamic memorie i aceasta trebuie eliberat. Pentru a folosi acest eveniment se scrie, n clasa, o procedur Private de forma: Private Sub Class_Terminate [codul pentru terminare se pune aici] http://www.east.utcluj.ro/mb/mep/antal End Sub n cazul aplicaiei careUniversitatea se va din Cluj-Napoca alocat pentru obiectul urmeaz Tehnica elibera spaiul Catedra Scripting.Dictionary prin codul: Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru
Private Sub Class_Terminate Set dTelefoane = Nothing Document.Write "Obiectul Scripting.Dictionary a fost descarcat.<BR>" End Sub

Aplicaia care urmeaz definete clasa Persoana pentru a stoca numele, prenumele, adresa i telefoanele unei persoane.
<HTML> <HEAD> <TITLE>Cod client - Definirea si utilizarea unei clase</TITLE> </HEAD> <BODY> <SCRIPT Language="VBScript"> Option Explicit Class Persoana Private mNume Private mPrenume Private mAdresa Private dTelefoane Private Sub Class_Initialize Set dTelefoane = _ CreateObject("Scripting.Dictionary") Document.Write "Obiectul Scripting.Dictionary" & _ " a fost initializat<BR>" End Sub Private Sub Class_Terminate Set dTelefoane = Nothing Document.Write "Obiectul Scripting.Dictionary" & _ " a fost descarcat<BR>"

114 - Limbajul de programare VBScript

End Sub Public Property Let Nume(s) mNume=s End Property Public Property Get Nume() Nume=mNume End Property Public Property Let Prenume(s) mPrenume=s End Property Public Property Get Prenume() Prenume=mPrenume End Property Public Property Let Adresa(s) mAdresa=s End Property Public Property Get Adresa() Adresa=mAdresa End Property Public Sub AdaugaTelefon(Tip, Numar) If dTelefoane.Exists(Tip) Then Document.write "Acest tip de numar" & _ " de telefon a fost deja adaugat!<BR>" Else dTelefoane.Add Tip,Numar http://www.east.utcluj.ro/mb/mep/antal Document.write "Telefonul " & Numar & _ " de tipul &quot;" & Tip & _ Universitatea Tehnica fost adaugat<BR>" "&quot; a din Cluj-Napoca End If Mecanica si Programare Catedra End Conf. Dr. Ing. ANTAL Tiberiu Alexandru Sub Public Property Get Telefoane() Dim t Dim s For Each t In dTelefoane.Keys s = s & t & "=" & dTelefoane(t) & "<BR>" Next Telefoane=s End Property End Class Dim Pers1 Set Pers1=New Persoana Pers1.Nume="Vasile" Pers1.Prenume="Nelu" Pers1.Adresa="Crinului 13" Pers1.AdaugaTelefon "Acasa","122334" Pers1.AdaugaTelefon "Firma","332334 / 334477" Pers1.AdaugaTelefon "Parinti","443433" Pers1.AdaugaTelefon "Parinti","443433" Document.Write "<BR><HR>" Document.Write Pers1.Nume & " " Document.Write Pers1.Prenume & " <I>de la adresa</I> " Document.Write Pers1.Adresa & "<BR><I>Are telefoanele</I><BR>" Document.Write Pers1.Telefoane </SCRIPT> </BODY>

n Figura 36 se prezint modul n care IE afieaz pagina corespunztoare codului de mai sus.

Limbajul de programare VBScript - 115

Figure 36 Exemplu de utilizarea a claselor n VBScript cu HTML

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

116 - Obiecte client

Obiecte client
Navigatorul IE nelege, dup cum ai vzut deja, limbajul VBScript. Astfel, se pot implementa programe care s valideze date, s realizeze personalizarea paginilor n funcie de or sau de versiunea navigatorului folosit, s realizeze comunicaie ntre obiectele unei pagini etc. Un script foarte simplu poate afia un mesaj ntr-o fereastr de dialog. Unul mai complicat, poate fi chiar o aplicaie. Inserarea script-ului n pagina Web Instruciunile VBScript se scriu direct n pagina Web, putnd fi citite de orice persoan care dorete s vizualizeze codul surs al paginii. Pentru aceasta se va folosi marcajul SCRIPT cu atributul LANGUAGE . Forma lui general este:
<SCRIPT LANGUAGE="limbaj"> aici se va scrie codul </SCRIPT>

Pentru limbajul VBScript se va scrie <SCRIPT JavaScript <SCRIPT LANGUAGE="JScript"> .

LANGUAGE="VBScript"> ,

iar pentru limbajul

Pentru procedurile Sub sau Function scrise ntre marcajele <SCRIPT > i </SCRIPT > navigatorul va interpreta imediat instruciunile. n exemplul urmtor exist o procedur Sub cu numele http://www.east.utcluj.ro/mb/mep/antal Salut . La nivelul ei se apeleaz MsgBox pentru afiarea mesajului "Salutare ... ". Deoarece Call Salut este n afara procedurii, ea va fi executat imediat de navigator, iar mesajul va fi Universitatea Tehnica din Cluj-Napoca afiat imediat cum se deschide Catedra Mecanica si Programare pagina. Conf. Dr. Ing. ANTAL Tiberiu Alexandru
<HTML> <HEAD> <TITLE>Script care saluta</TITLE> </HEAD> <BODY> <SCRIPT LANGUAGE="VBScript"> Sub Salut MsgBox "Salutare ...!" End Sub Call Salut </SCRIPT> </BODY>

Ierarhia obiectelor de script


Un model de obiecte asigura un mecanism care face o aplicaie sa fie usor programabil. Ierarhia obiectelor de script este un model de obiecte care permite manipularea obiectele de pe suprafaa paginii i a navigatorului n care se vizualizeaz pagina. La nivelul cel mai de sus se afl obiectul Window. Sub acesta urmeaz nc nivelurile prezentate n tabelul urmator. Obiect
Document Location Histoy Frame

Descriere Reprezint documentul curent al ferestrei. Reprezint URL-ul documentului curent. Reprezint lista de istoric a navigatorului. Reprezint un tablou de cadre n fereastra curent.

Obiecte client - 117

Obiect
Script Navigator

Descriere Reprezint script-ul n curs de utilizare. Reprezint aplicaia de navigare (de exemplu IE) folosit pentru afiarea paginii Web.

Obiectul Window Obiectul Window este la rdcina ierarhiei. Ca atare, el este implicit atunci cnd nu se folosete un prefix care s descrie obiectul. Astfel, de exemplu, Window.name i name sunt echivalente. n cele ce urmeaz se prezint cteva dinte proprietile i metodele semnificative pentru acest obiect. Propriet|ile obiectului Window Proprietile obiectului Window definesc modul de apariie a ferestrei i felul n care se raporteaz el la mulimea cadrelor. Proprietate
defaultStatus

Descriere Determin textul implicit afiat n linia de stare a navigatorului (Textul care se afieaz atunci cnd navigatorul ateapt date de http://www.east.utcluj.ro/mb/mep/antal intrare). ntoarce numele ferestrei. Ferestrele primesc nume atunci cnd se Universitatea Tehnica din Cluj-Napoca folosesc cadre (cu atributul NAME n marcajul FRAME ). O fereastra Catedra Mecanica si Programare mai poate primi nume la deschiderea ei cu metoda open sau prin Conf. Dr. Ing. ANTAL Tiberiu Alexandru folosirea atributului TARGET n marcajul A HREF . ntoarce obiectul window care reprezint fereastra care a deschis fereastra curent. ntoarce obiectul window care reprezint fereastra printe a ferestrei curente (Printele este cadrul n care fereastra curent este stocat). ntoarce un obiect window care reprezint fereastra curent. Seteaz textul din linia de stare a navigatorului ntoarce un obiect window care reprezint cea mai de sus fereastr n tabloul cadrelor curente.

name

opener

parent

self status top

Metodele obiectului Window Obiectul Window (fereastr ) poate manipula fereastra navigatorului prin metodele: Metod
alert close

Descriere Afieaz o fereastr de dialog pentru alert. nchide fereastra.

118 - Obiecte client

Metod
confirm

Descriere Afieaz o fereastr de dialog cu un mesaj i cu butoanele OK, Cancel. De exemplu, n cazul codului rezultat =
confim("Doriti sa transmiteti formularul server-ului?) ,

dac se apas OK, confirm ntoarce True , dac se apas Cancel, confirm ntoarce False .
navigate

Face navigarea la fereastra specificat prin URL. Iat un exemplu: navigate "http://www.utcluj.ro/" . Evalueaz o expresie dup trecerea unei durate exprimate n milisecunde. Forma general este setTimeOut(Cod, Milisecunde) . Primul argument este obligatoriu i este fie un pointer la funcie, fie un ir cu numele funciei de rulat. Al doilea argument este i el obligatoriu fiind un ntreg care specific durata aproximativ, n milisecunde, pn la evaluarea expresiei. Expresia este evaluat o singur dat. Iat un exemplu:
Call window.setTimeout("mutaText()", 50)

setTimeOut

open

Deschide o fereastr nou. Sintaxa este:


window.open(URL, Destinaie, Opiuni) ,

unde: http://www.east.utcluj.ro/mb/mep/antal n noua fereastr; - URL : Un ir care specific URL-ul de afiat - Destinaie : Numele noii ferestre deschise. Universitatea Tehnica din Cluj-Napoca - Opiuni : O lista de valori separate prin virgul care determin Catedra Mecanica si Programare proprietile noii ferestre dup cum urmeaz: Conf.toolbar ANTAL Tiberiu sau no determin afiarea sau nu, Dr. Ing. - Valoarea yes Alexandru n noua fereastr, a barei cu instrumente; location - Valoarea yes sau no determin afiarea sau nu, n noua fereastr, a barei de locaie; status - Valoarea yes sau no determin afiarea sau nu, n noua fereastr, a liniei de stare; menubar - Valoarea yes sau no determin afiarea sau nu, n noua fereastr, a barei de meniu; scrollbars - Valoarea yes sau no determin afiarea sau nu, n noua fereastr, a barelor de navigaie; resizeable - Valoarea yes sau no determin dac noua fereastra este sau nu redimensionabil; width - Limea noii ferestre n pixeli; height - nlimea noii ferestre n pixeli; top - Poziia coordonatei Y a colului stnga-sus al ferestrei. left - Poziia coordonatei X a colului stnga-sus al ferestrei. Iat un exemplu:
window.open "http://www.yahoo.com", "Frame2", "toolbar=no, location=no"

Obiecte client - 119

Metod
prompt

Descriere Afieaz o fereastr de dialog prin care utilizatorul poate introduce o valoare. Sintaxa este:
prompt(mesaj,implicit) - mesaj -

- mesajul afiat n fereastra de dialog; implicit - valoarea iniiala afiat n cutia de text.

Evenimentele obiectului Window Urmtoarele evenimente sunt suportate de obiectul Window : Eveniment
onLoad onUnload

Descriere Se declaneaz atunci cnd coninutul ferestrei este ncrcat. Se declaneaz atunci cnd coninutul ferestrei este descrcat.

Evenimentele se definesc n marcajul BODY dup cum se vede n exemplul urmtor:


<HTML> <HEAD> http://www.east.utcluj.ro/mb/mep/antal <TITLE>Script verifica daca un sir contine numai litere</TITLE> </HEAD> <BODY onLoad="Intra()" Universitatea Tehnica din Cluj-Napoca onUnload="Afara()"> <SCRIPT LANGUAGE="VBScript"> Catedra Mecanica si Programare Sub Intra() Conf. Dr. Ing. ANTAL (re)venit." MsgBox "Ma bucur ca aiTiberiu Alexandru End Sub Sub Afara() MsgBox "Pe curind ..." & Chr(10) & Chr(13) & _ "si numai cele bune pana atunci!" End Sub </SCRIPT> </BODY>

Obiectul Document Obiectul Document reprezint pagina Web curent ncrcat n navigator. Este, de asemenea, container pentru obiectele din pagin, aici incluzndu-se obiectele Link , Forms i Location . Spre deosebire de obiectul Window , pentru a putea lucra cu proprietile i evenimentele obiectului Document acestea trebuie precedate de cuvntul document (de exemplu, document.title ). Propriet|ile obiectului Document Obiectul Document are proprieti care permit personalizarea prin program a modului de afiare a paginii. Aici sunt incluse culoarea fondului, culoarea hiperlegturilor, titlul documentului etc. Proprietate
bgColor

Descriere ntoarce sau seteaz culoarea fondului documentului. Pentru setarea valorii, se folosete fie un ir, fie o valoare RGB, dup cum urmeaz:
document.bgColor="white" document.bgColor="#FFFFFF"

fgColor

ntoarce sau seteaz culoarea textului documentului.

120 - Obiecte client

Proprietate
lastModified

Descriere ntoarce un ir cu data la care s-a fcut ultima modificare a documentului. ntoarce sau seteaz culoarea hiperlegturilor din document. ntoarce obiectul Location . Proprietile lui permit specificarea unor pri (protocol , host , pathname ) ale URL-ului corespunztoare documentului. ntoarce titlul documentului (textul cuprins n marcajul TITLE ). ntoarce sau seteaz culoarea hiperlegturilor vizitate din document.

linkColor location

title vLinkColor

Coleciile obiectului Document Obiectele coleciei grupeaz mai multe obiecte de acelai tip n vederea unei referiri ct mai simple. Colecie
all

Descriere ntoarce o referin la colecia care stocheaz toate elementele http://www.east.utcluj.ro/mb/mep/antal documentului. Pentru a referi un element cu numele Par1 se scrie document.all("Par1") . Universitatea Tehnica din Cluj-Napoca ntoarce obiectul Mecanica si este colecia tuturor formularelor din Catedra Forms care Programare document.Dr. Ing. de lucru cu acest Alexandru discuta n paragraful Conf. Modul ANTAL Tiberiu obiect se va urmtor. ntoarce obiectul Link care este colecia tuturor hiperlegturilor din document. Fiecare element al acestei colecii este un obiect Link , care are, la rndul lui, proprieti i metode specifice fiecrei hiperlegturi (de exemplu, href , protocol , host etc.). ntoarce obiectul Anchors care este colecia tuturor elementelor de ancorare din document. document.anchors.length permite determinarea numrului de elemente de ancorare ale documentului.

forms

links

anchors

n continuare urmeaz dou exemple n care se folosesc coleciile obiectului Documents . Primul arat modul n care se poate schimba coninutul unui paragraf i culoarea de fond a documentului, iar al doilea arat modul n care se poate realiza plimbarea unui grup de texte pe suprafaa documentului. Cele dou aplicaii vor fi salvate cu extensie de documente HTML i vor putea fi rulate numai din IE.
<% Language=VBScript %> <HTML> <HEAD> </HEAD> <BODY bgColor="lightgreen"> <P ID="p1">Acesta texul corespunzator marcajului de paragraf.</P> </BODY> </HTML> <SCRIPT Language="VBScript"> Dim Par1 Dim i Set Par1 = document.all("p1")

Obiecte client - 121

i=inputbox("Clic pe OK si fii atent la modificari ..." _ ,"Modificare text paragraf si culoare de fond",document.bgColor) If i <> "" Then Par1.innertext = "Textul paragrafului a fost modificat din script." document.bgColor=i End If </SCRIPT> <% Language=VBScript %> <HTML> <HEAD> </HEAD> <BODY> <P ID="p1" style="position: absolute; left: 640">Aceast text se va deplasa E de la drepta la stanga pe ecran.</P> </BODY> <SCRIPT Language="VBScript"> Dim C C=0 a=array("primul text", "al doilea text","al treilea text") Call window.setTimeout("mutaText()", 50) function mutaText() Dim Poz Dim E1 Set E1 = document.all("p1") Poz = E1.style.left If right(Poz, 2) = "px" Then http://www.east.utcluj.ro/mb/mep/antal Poz = left(Poz, Len(Poz) - 2) End If E1.style.left = Poz - 5 Universitatea Tehnica din Cluj-Napoca If CLng(Poz) >= -200 Then Catedra Mecanica si Programare Call window.setTimeout("mutaText()", 50) Else Conf. Dr. Ing. ANTAL Tiberiu Alexandru E1.innerText = a(C) E1.style.left = "640px" If C < UBound(a) Then C=C+1 Else C=0 End If Call window.setTimeout("mutaText()", 50) End If End Function </SCRIPT>

Metodele obiectului Document Documentele sunt considerate de catre navigator obiecte statice. Dupa ce cont inutul documentului a fost scris nu se mai pot face modificari ale lui (except ie face cont inutul formularelor). Obiectul Document are mai multe metode, ns cea mai important dintre ele este write . Aceasta scrie un text n document. document.write va suprascrie orice document care exista deja n fereastra navigatorului. Forma general este:
document.write text

este un ir care conine textul care se dorete a fi inserat. Utilizarea acestei metode are urmtoarele restricii: # textul este scris din poziia n care metoda write apare n document; # write trebuie s fie executat atunci cnd navigatorul analizeaz script-ul. Din acest motiv write se scrie fie n afara unei proceduri (dar n interiorul marcajului SCRIPT ), fie ntr-o procedur care urmeaz s fie apelat;
text

122 - Obiecte client

irul de afiat poate conine marcaje HTML, iar navigatorul le va lua n considerare la afiare.

Un exemplu de utilizare a lui write se prezinta n continuare:


<HTML> <HEAD> <TITLE>Cod client - document.write</TITLE> </HEAD> <BODY> <P>O linie de text nevinovata ... <SCRIPT LANGUAGE="VBScript"> Function OrasiData() OrasiData=Time() & " - " & Date() & "." End Function Sub Salut() Dim ora ora=Hour(Now()) If ora < 12 Then document.write "Buna dimineata!" ElseIf ora < 16 Then document.write "Buna ziua!" Else document.write "Noapte buna ..." End If End Sub http://www.east.utcluj.ro/mb/mep/antal </SCRIPT> <P>Inca o linie de text la fel de nevinovata ... Universitatea Tehnica din Cluj-Napoca <SCRIPT LANGUAGE="VBScript"> document.write "<P>Bine <B>ati</B> venit<BR>" Catedra Mecanica si Programare Call Salut Conf. Dr. Ing. ANTAL Tiberiu Alexandru document.write "<P><P>Pagina a fost accesata la: " & _ OrasiData & "<BR>" </SCRIPT> </BODY>

Obiectul Navigator Obiectul Navigator furnizeaz informaii cu privire la navigatorul folosit pentru afiarea documentului. Cteva dintre proprietile lui sunt: Proprietate
appCodeName appName

Descriere ntoarce numele codului folosit de navigator (de obicei "Mozilla"). ntoarce numele aplicaiei navigator (de exemplu, Microsoft Internet Explorer). ntoarce numrul de versiune a navigatorului. Aici este inclus i sistemul de operare. ntoarce agentul utilizator al navigatorului (deseori appCodeName combinat cu appVersion ).

appVersion

userAgent

<HTML> <HEAD> <TITLE>Cod client -document.navigator</TITLE> </HEAD> <BODY> <SCRIPT LANGUAGE="VBScript"> document.write navigator.appCodeName & "<BR>"

Obiecte client - 123

document.write navigator.appName & "<BR>" document.write navigator.appVersion & "<BR>" document.write navigator.userAgent & "<BR>" </SCRIPT> </BODY>

Obiectul Form Formularele HTML pun accentul prelucrrilor pe server. Astfel, server-ul este cel ce trebuie s extrag datele, s le valideze, s le interpreteze i, n final, s formuleze pagina Web de rspuns. n acest sens, codul VBScript poate uura sarcina server-ului prin realizarea urmtoarelor prelucrri la client: # validarea datelor nainte de trimiterea lor ctre server. Controalele formularelor pot fi accesate din VBScript i trimiterea datelor ctre server poate fi ntrziat pn cnd valorile introduse sunt cele corecte; # anumite calcule pot fi realizate pe client, fr a mai fi necesar trasmiterea acestora ca parametri server-ului. Obiectul Form este o reprezentare a formularelor din pagina Web. Aceasta nseamn c include fiecare obiect ntre marcajele <FORM> , </FORM> . Pentru pagini cu mai multe formulare colecia Forms reprezint toate obiectele Form ale paginii. Pentru referirea unui formular din cod sunt posibile dou variante: # se va folosi http://www.east.utcluj.ro/mb/mep/antal un indice cu obiectul Forms , de exemplu, documents.Forms(0 ) pentru a referi primul formular al paginii; Universitatea Tehnica din Cluj-Napoca # se va folosi numele formularului aa cum acesta este definit in atributul NAME al marcajului FORMCatedra Mecanica acesta ar fi <FORM NAME="Frm1"> , formularul . De exemplu dac si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru poate fi referit prin document.Frm1 . Propriet|ile obiectului Form Majoritatea proprietilor obiectului Form corespund unor atribute ce pot fi incluse n marcajul FORM. Descrierea lor este facuta n tabelul urmator. Proprietate
action

Descriere ntoarce sau seteaz URL-ul care se folosete pentru transferul formularului. Este echivalentul atributului ACTION din marcajul FORM . ntoarce sau seteaz modul de codificare al formularului (de exemplu, text/html ). Este echivalentul atributului ENCODING din marcajul FORM . ntoarce sau setez metoda folosit pentru transferul formularului. Este echivalentul atributului METHOD din marcajul FORM . Seteaz fereastra destinaie pentru formularul de rspuns. Este echivalentul atributului TARGET din marcajul FORM .

encoding

method

target

Urmtoarea secven de cod seteaz proprietile de mai sus pentru transferul unui formular:
document.Frm1.action ="http://www.server.ro/cgi-bin/program.exe" document.Frm1.encoding="text/html" document.Frm1.method="POST" document.Frm1.target="FerRaspuns"

124 - Obiecte client

Transferul (submit) formularelor Coninutul formularului este transferat server-ului dac utilizatorul apas un buton de transfer (submit ). Aceast aciune se poate realiza oricnd din VBScript prin folosirea evenimentului OnSubmit . Evenimentul apare automat la transferul formularului ctre server i permite definirea unei proceduri de tratare a evenimentului de transfer. S presupunem c o funcie Validare() , care poate ntroarce doar valorile True i False , se dorete a fi folosit pentru validarea coninutului formularului nainte de transfer. Procedura de tratare a evenimentului va fi scris astfel:
document.Frm1.OnSubmit="Validare()"

Dac funcia Validare() ntoarce valoarea True trasferul ctre server va fi realizat. Dac valoarea ntoars este False transferul este abandonat, utilizatorul rmnnd cu formularul de transferat deschis pe ecran. Manipularea controalelor unui formular Obiectul Form are o proprietate, elements , care este colect ia tuturor controalelor formularului. Colect ia include, pe lnga controalele HTML, si toate obiectele inserate cu marcajul OBJECT (acestea sunt, de exemplu, contoalele ActiveX). Colect ia elements poate fi folosita pentru referirea unui control prin indice (primul control are indicele 0, al doilea 1 etc.) nsa codul astfel scris este greu de citit. O alta varianta este folosirea numelui controlului definit prin atributul http://www.east.utcluj.ro/mb/mep/antal NAME sau, n cazul marcajului, OBJECT al atributului ID. Universitatea Tehnica din Cluj-Napoca Propriet|ile controalelor Catedra Mecanica si Programarentre proprietat ile diferitelor tipuri de controale exista asemanari si diferent e. Unele sunt comune la mai multe controale, iarConf. Dr. Ing. ANTAL Tiberiu Alexandru altele sunt specifice unui anumit tip. Tabelul care urmeaza ncearca sa prezinte o varianta simplificata a lor. Proprietate
checked

Descriere Pentru un buton de opt iune sau de validare, ntoarce sau seteaza starea controlului (1 sau True nseamna activ, 0 sau False dezactivat). De exemplu, codul care urmeaza se poate folosi pentru schimbarea starii unui buton de validare:
Set bv = document.Frm1.ButonValidare1 bv. checked = Not bv. checked

defaultChecked

ntoarce sau seteaza starea implicita a unui buton de validare sau de opt iune. ntoarce sau seteaza valoarea implicita a unui control. ntoarce obiectul Form din care face parte controlul. n cazul unei liste, ntoarce numarul de articole ale ei. ntoarce sau seteaza numele controlului. ntoarce sau seteaza valoarea curenta a unui control. n cazul unei liste, ntoarce numarul de ordine corespunzator articolului selectat.

defaultValue form length name value selectedIndex

Obiecte client - 125

Metodele controalelor Urmatoarele metode sunt accesibile pentru controalele formularelor: Metoda
blur click focus select

Descriere Anuleaza focusul controlului n cauza. Clic pe control. Preda focalizarea (focus-ul) controlului n cauza. Selecteaza cont inutul unui control de tipul TEXT , TEXTAREA sau PASSWORD .

Evenimentele controalelor Poriunile de cod sunt executate de navigator n ordinea scrierii lor. O alt variant de scriere a codului const n plasarea lui n proceduri de tratare a evenimentelor. n acest caz secvena de cod va fi rulat la fiecare apariie a evenimentului declanator, avantajele fiind urmtoarele: # proceduri de tratare a evenimentelor pot fi create pentru majoritatea controalelor HTML; # aceeai procedur poate trata evenimentele mai multor controale; # se pot folosi limbaje de script diferite ntr-o singur pagin. De exemplu o http://www.east.utcluj.ro/mb/mep/antal procedur de tratare a evenimentului se poate scrie n VBScript, iar o alta n JavaScript. Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Exist dou metode pentru specificarea unei proceduri de tratare a evenimetelor. Prima metoda Conf. Dr. Ing. ANTAL Tiberiu Alexandru folosete atributul EVENT al marcajului INPUT , iar a doua atributele FOR i EVENT ale marcajului SCRIPT . n exemplul care urmeaz EVENT este numele evenimentului care se va prinde, adic ONCLICK . Fiind vorba de un buton, evenimentul corespunztor apsrii butonului se va executa la fiecare clic pe acesta.
<INPUT TYPE="BUTTON" VALUE="Verifica" ONCLICK="Verifica">

n aceast variant se foloseste SCRIPT cu atributele FOR i EVENT , FOR specific numele controlului, iar EVENT numele evenimentului care va fi prins de procedur.
<INPUT NAME="Nume" VALUE="Aici se va introduce numele" SIZE ="40"> <SCRIPT FOR="Nume" EVENT="onChange" LANGUAGE="VBScript"> 'Call Verifica alert("Valoarea s-a modificat") </SCRIPT>

Aceast variant este de preferat ntruct asigur o lizibilitate mai bun a codului. Tabelul care urmeaz prezint un sumar al evenimentelor care pot fi prinse prin metodele descrise mai sus. Eveniment
ONBLUR

Descriere Declanat atunci cnd controlul specificat pierde focus-ul (se face clic pe un alt control). Declanat atunci cnd valoarea controlului este modificat. Declanat atunci cnd utilizatorul face clic pe control.

ONCHANGE ONCLICK

126 - Obiecte client

Eveniment
ONFOCUS ONSELECT

Descriere Declanat atunci cnd controlul primete focus-ul. Declanat atunci cnd coninutul controalelor TEXT , TEXTAREA sau PASSWORD este selectat.

Codul care urmeaz permite verificarea utilizrii numai a literelor ntr-un ir de caractere introdus de utilizator.
<HTML> <HEAD> <TITLE>Script verifica daca un sir contine numai litere</TITLE> </HEAD> <BODY> <FORM NAME="Frm1"> <P> Cum te numesti?: <INPUT NAME="Nume" VALUE="Aici" & _ " se va introduce numele" SIZE ="40"> <SCRIPT FOR="Nume" EVENT="onChange" LANGUAGE="VBScript"> 'Call Verifica alert("Valoarea s-a modificat") </SCRIPT> </P> http://www.east.utcluj.ro/mb/mep/antal <P> <INPUT TYPE="BUTTON" VALUE="VERIFICA" ONCLICK="Verifica"> </P> Universitatea Tehnica din Cluj-Napoca </FORM> <SCRIPT Dim litere litere = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ " Function esteSirNull(s) esteSirNull = len(s) = 0 End Function Function esteLitera(c) esteLitera = instr(1, litere, c, vbTextCompare) > 0 End Function Function numaiLitere(s) Dim i For i = 1 to Len(s) If Not esteLitera(mid(s,i,1)) Then numaiLitere = False Exit Function End If Next numaiLitere = True End Function Sub Verifica() Set ctrl = Document.Frm1.Nume If esteSirNull(ctrl.Value) Then alert("Numele NU poate fi vid!") ctrl.focus ElseIf Not numaiLitere(ctrl.Value) Then alert("Numele poate contine numai: litere mici," & _ "litere mari si spatiu") ctrl.focus End If

Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru LANGUAGE = "VBScript">

Obiecte client - 127

End Sub </SCRIPT> </BODY>

Exemplu: Utilizarea evenimentelor asociate controalelor Codul care urmeaz va fi stocat ntr-un fiier scr1.html . n acelai director vor mai fi stocate fiierele ora.vbs , normal.jpg i peste.jpg . Fiierul ora.vbs este un fiier ce conine un cod VBScript care va fi utilizat n pagina de Web, dar este stocat n afara paginii. Fiierele normal.jpg i peste.jpg conin cte o imagine ce va fi folosit pe post de buton. Imaginea normal.jpg va fi afiat n condiii normale, iar imaginea peste.jpg se afieaz pe locul primeia dac poziionm cursorul peste aceasta (vezi Figura 37). Efectul este cel de avertizare a utilizatorului ca este poziionat pe suprafaa unei imagini (cu rol de buton). Fiierul ora.vbs :
function ora() ora=time end function msgbox(ora())

Fiierul scr1.html : http://www.east.utcluj.ro/mb/mep/antal <HTML> <HEAD> <TITLE>Lucrul cu script-uri.</TITLE> Universitatea Tehnica din Cluj-Napoca </HEAD> Catedra Mecanica si Programare <BODY> Conf. Dr. Ing. ANTAL Tiberiu Alexandru
<SCRIPT LANGUAGE="vbscript"> document.write "Salut 1" </SCRIPT> <SCRIPT LANGUAGE="vbscript" SRC="ora.vbs"> </SCRIPT> <P> <A HREF="http://www.utcluj.ro" onclick="msgbox(Date())">Fa clic aici</A> <P> <INPUT NAME="nClic" TYPE="BUTTON" VALUE="Clic aici"> <SCRIPT LANGUAGE="VBScript" EVENT="onclick" for="nClic"> msgbox "Ai apasat butonul 'Clic aici'" </SCRIPT> <P> <SCRIPT LANGUAGE="vbscript"> Dim i For i=0 to 10 document.write i Next </SCRIPT> <IMG SRC = "normal.jpg" name="img"> <SCRIPT LANGUAGE="VBScript" EVENT="onmouseover" FOR="img"> document.img.src = "peste.jpg" </SCRIPT> <SCRIPT LANGUAGE="VBScript" EVENT="onmouseout" FOR="img"> document.img.src = "normal.jpg" </SCRIPT> </BODY>

128 - Obiecte client

</HTML>

Figure 37 Aplicaii cu Document

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Codul este executat secvenial.Catedraoar se afieaz "Salut 1" , apoi se ncarc i execut Prima Mecanica si Programare Conf. Dr. Ing. ANTAL For . Celelalte secvene de cod sunt rulate n codul din ora.vbs , apoi codul care conine ciclul Tiberiu Alexandru funcie de aciunile utilizatorului ce pot declana urmtoarele evenimente: clic pe hiperlegtur (onclick ), clic pe butonul Clic aici (onclick ) sau poziionare pe butonul Downloads (onmouseover ), apoi poziionare n afara lui (onmouseout ). Exemplu: Aplicaie pentru calculul dobnzii bancare Programul cont ine procedura Sub cu numele CalculDobanda , un formular cu numele frmDob si o procedura de tratare a evenimentului onClick a butonului cu numele bCalcul . n Figura 38 se prezint interfaa paginii de calcul a dobnzii bancare, iar n Figura 39 se observa modul de prezentare a rezultatelor.
<HTML> <HEAD> <TITLE>Formular pentru calculul dobanzilor</TITLE> </HEAD> <BODY> <SCRIPT LANGUAGE="VBScript"> Sub CalculDobanda Set frm = Document.frmDob suma = frm.Suma.Value Dobandaan=frm.DobandaAn.Value luni = frm.Luni.Value Dobandapeluna=suma*Dobandaan/12/100 Dobandatotala=Dobandapeluna*luni Document.write "La suma de: " & suma & " lei<BR>" Document.write "cu dobanda pe an de: " & Dobandaan &"%<BR>" Document.write "timp de: " & luni & " luni<BR>" Document.write "Dobanda pe luna este: <I>" _ & Dobandapeluna & "</I><BR>" Document.write "iar dobanda totala este: <I>" _

Obiecte client - 129

& Dobandatotala & "</I><BR>" End Sub </SCRIPT> <FORM NAME="frmDob"> <H3>Calculator pentru dobanzi bancare</H3> Suma: <INPUT TYPE=TEXT NAME="Suma" VALUE="1000000"><BR> Dobanda pe an: <INPUT TYPE=TEXT NAME="DobandaAn" VALUE="29"> %<BR> Numarul de luni: <INPUT TYPE=TEXT NAME="Luni" VALUE="12"><BR> <INPUT TYPE=HIDDEN NAME="Rez" VALUE=""><BR> <INPUT TYPE=BUTTON NAME="bCalcul" VALUE="Calcul"> <SCRIPT FOR="bCalcul" EVENT="onClick" LANGUAGE="VBScript"> Set frm = Document.frmDob If frm.Suma.Value = "" Then alert ("Suma pentru care se va " & _ "calcula dobanda nu poate fi 0!") frm.Suma.focus ElseIf frm.DobandaAn.Value = "" Then alert ("Dobanda anuala data de " & _ "banca nu poate fi 0%!") frm.DobandaAn.focus ElseIf frm.Luni.Value = "" Then alert ("Numarul de luni pentru " & _ "care se va calcula dobanda lunara nu poate fi 0!") frm.Luni.focus Else Call CalculDobanda End If http://www.east.utcluj.ro/mb/mep/antal </SCRIPT> </FORM> Universitatea Tehnica din Cluj-Napoca </BODY>

Figure 38 Interfat a programului de calcul a dobnzilor

Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

130 - Obiecte client

Figure 39 Rezultatele afisate de programul pentru calculul dobnzii

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra de Web, din VBScript, Exemplu: Accesul la coninutul paginiiMecanica si Programarefolosind obiectul Document Conf. din fiierele obWindow1_v2.html Aplicaia urmtoare este formatDr. Ing. ANTAL Tiberiu Alexandrui f1.jpg , ce trebuie s fie stocate n acelai director. La deschiderea paginii de Web poza f1.jpg i textul rou linia de text 3 se deplaseaz de la stnga la dreapta. Secvena de cod care realizeaz aceast micare se poate utiliza deci, att pentru texte, ct i pentru imagini. Fiierul obWindow1_v2.html :
<HTML> <STYLE TYPE="text/css"> p.rosu {color:red;} </STYLE> <SCRIPT LANGUAGE="VBScript" SRC="muta.vbs"> function muta() Dim c Dim el set el = document.all("p1") c=el.style.left c=cint(left(c,len(c)-2)) c=c+2 if c < 200 then el.style.left=c&"px" call window.setTimeout("muta()",50) else el.style.left="1px" call window.setTimeout("muta()",50) end if end function function verifica()

Obiecte client - 131

Dim s s="Numele: " & document.form1.text1.value & "<BR>" s=s+"Adresa: " & document.form1.text2.value & "<BR>" s=s+"radio 1: " & document.form1.radio1(0).checked & "<BR>" s=s+"radio 2: " & document.form1.radio1(1).checked & "<BR>" s=s+"radio 3: " & document.form1.radio1(2).checked & "<BR>" if (document.form1.checkbox1(0).checked) then s=s+"check 1: " & document.form1.checkbox1(0).value & "<BR>" end if if (document.form1.checkbox1(1).checked) then s=s+"check 1: " & document.form1.checkbox1(1).value & "<BR>" end if if (document.form1.checkbox1(2).checked) then s=s+"check 1: " & document.form1.checkbox1(2).value & "<BR>" end if if (document.form1.select1.selectedIndex =0) then s=s+"lista 1: " & document.form1.select1(0).value & "<BR>" end if if (document.form1.select1.selectedIndex =1) then s=s+"lista 2: " & document.form1.select1(1).value & "<BR>" end if if (document.form1.select1.selectedIndex =2) then s=s+"lista 3: " & document.form1.select1(2).value & "<BR>" end if document.write s end function

http://www.east.utcluj.ro/mb/mep/antal
function Test() if len(document.form1.text1.value) = 0 then Universitatea Tehnica din Cluj-Napoca alert("Formularul nu poate fi trimis daca numele este vid!") Test = False Catedra Mecanica si Programare else Conf. Dr. Ing. ANTAL Tiberiu Alexandru Test = True end if end function </SCRIPT> <HEAD> <TITLE></TITLE> </HEAD> <BODY> <P class=rosu> linia de text 1 <BR> linia de text 2 <BR> <SPAN ID="p1" style="LEFT: 1px; POSITION: relative"> <IMG HEIGHT=200 WIDTH=164 ALT ="" SRC="./f1.jpg" BORDER=0> linia de text 3 </span> </P> <BR> <script language="VBScript"> window.document.write document.location & "<BR>" document.write window.navigator.appName, window.navigator.appVersion & "<BR>" document.write document.all("p1").style.left call window.setTimeout("muta()",50) </script> <FORM method=post name=form1 enctype="text/plain" action="mailto:[email protected]" > <P>Numele:<INPUT id=text1 name=text1> </P> <P>Adresa: <INPUT id=text2 name=text2></P> <P>Radio: <INPUT type=radio name=radio1 value=1>

132 - Obiecte client

<INPUT type=radio name=radio1 value=2> <INPUT type=radio name=radio1 value=3></P> <P>Checkbox: <INPUT type=checkbox name=checkbox1 value=unu> <INPUT type=checkbox name=checkbox1 value=doi> <INPUT type=checkbox name=checkbox1 value=trei></P> <P> <SELECT size=1 name=select1 style="WIDTH: 158px"> <OPTION value=l1 selected>lista1</OPTION> <OPTION value=l2>lista2</OPTION> <OPTION value=l3>lista3</OPTION> </SELECT></P> <P> <INPUT type=button value=Apasa name=button1 onclick="verifica"> <INPUT type=button value="Trimite" name=button2 onclick="trimite1"> </P> </FORM>

Figure 40 Accesarea coninutului paginii de Web cu VBScript

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

<SCRIPT LANGUAGE="VBScript"> function trimite1() 'document.form1.enctype="text/plain" 'document.form1.action="mailto:[email protected]" if Test() then document.forms(0).submit end if end function </SCRIPT> </BODY> </HTML>

La apsarea butonului Apasa (vezi Figura 40) se vor extrage toare datele din formular i se vor afia n navigator sub forma:
Numele: Vasile Adresa: fara radio 1: False radio 2: True radio 3: False check 1: unu check 1: trei

Obiecte client - 133

lista 2: l2

Dac se apas butonul Trimite se verific dac numele este vid. Dac este vid se afiez un mesaj de eroare altfel, coninutul formularului se trimite la o adres de e-mail. Marcajul <OBJECT> O pagina Web poate cont ine si controale ActiveX definite cu ajutorul marcajului HTML <OBJECT> . Controalele ActiveX sunt miniprograme care permit transformarea unei pagini Web statice n una dinamica si interactiva. n acest fel pagina Web devine o aplicat ie care poate comunica cu utilizatorul. Marcajul <OBJECT> are o mult ime de atribute prin care se controleaza tipul obiectului, aspectul lui, locat ia, nalt imea, lungimea etc. Cteva dintre aceste atribute se prezinta n tabelul urmator. Atribut
ALIGN=aliniere

Descriere Seteaza alinierea obiectului n pagina. Valori de aliniere pot fi LEFT , RIGHT sau CENTER . Daca obiectul este o hiperlegatura, atributul specifica grosimea chenarului. O valoare care identifica implementarea obiectului. http://www.east.utcluj.ro/mb/mep/antal Identifica datele folosite de obiect. Universitatea Tehnica din Cluj-Napoca nalt imea dorita pentru obiect. - Catedra Mecanica si Programare Conf. ntre obiect si orice text Alexandru Distant aDr. Ing. ANTAL Tiberiu sau imagine la stnga sau la dreapta lui. Un sir care identifica obiectul. Valoarea este folosita de programe pentru referirea obiectului. Numele obiectului n formular. Cnd formularul este transmis aceasta valoare se transmite mpreuna cu datele. Mesajul care se afiseaza att timp ct obiectul se ncarca. - Tipul mediului de Internet al datelor. O imagine care se va folosi mpreuna cu obiectul. Distant a ntre obiect si orice text sau imagine deasupra sau sub acesta. Lat imea dorita pentru obiect.

BORDER=n

CLASSID=id DATA=cale HEIGTH=n HSPACE=n

ID=NumeObiect

NAME=NumeControl

STANDBY=mesaj TYPE=tip USEMAP=cale VSPACE=n

WIDTH=n

Daca controlul ActiveX este nregistrat n registrul Windows atunci sintaxa pentru atributul CLASSID este CLASSID:identificator_de_clasa . Cel mai simplu mod de lucru pentru inserarea acestor controale ntr-o pagina Web este folosirea lui Microsoft Visual InterDev, care este parte a lui Microsoft Visual Studio. n continuare voi rescrie aplicat ia anterioara cu Microsoft Visual InterDev. Cu ajutorul acestei componente software voi insera doua controale ActiveX de tipul TextBox pentru a putea afisa pe aceeasi pagina rezultatele obt inute n urma calculelor. De asemenea, voi folosi un tabel pentru a realiza o alinierea pe linii si pe coloane mai estetica.

134 - Obiecte client

Figure 41 Noua interfat a a programului de calcul a dobnzii

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. -i un tabel cu Tiberiu Alexandru Pentru noua interfat a trebuie sa creatIng. ANTAL 2 coloane si 9 rnduri. n rndurile 7 si 8 vet i - insera cte un control ActiveX de tipul TextBox . Controlul din linia 7 va avea numele dlunara , iar cel din linia 8, dtotala . Codul HTML corespunzator noii paginii este prezentat n continuare, iar n Figura 41, se prezinta modul de afisare de a paginii de catre IE.
NOTA

n codul urmtor, simbolul E s-a folosit pentru a marca o ntrerupere de linie, linia a urmtoare acestui simbol se va scrie pe aceeasi linie cu cea care contine simbolul. a <HTML> <HEAD> <TITLE>Formular pentru calculul dobinzilor</TITLE> </HEAD> <BODY> <SCRIPT LANGUAGE="VBScript"> Sub CalculDobanda Set frm = Document.frmDob suma = frm.Suma.Value Dobandaan=frm.DobandaAn.Value luni = frm.Luni.Value Dobandapeluna=suma*Dobandaan/12/100 Dobandatotala=Dobandapeluna*luni Document.dtotala.Value = Dobandatotala Document.dlunara.Value = Dobandapeluna End Sub </SCRIPT> <FORM NAME="frmDob"> <TABLE cellSpacing=2 BGCOLOR="#00aaff">

cellPadding=2

width="50%"

border=3E

Obiecte client - 135

<TR> <TD COLSPAN="2" ALIGN="middle" BGCOLOR="#00ddff">E <BIG><B>Calculator pentru dobinzi bancare</B></BIG> </TD> </TR> <TR> <TD COLSPAN="2" ALIGN="left" BGCOLOR="#00ccff">E <B>Datele de intrare:</B> </TD> </TR> <TR> <TD ALIGN="right">Suma:</TD> <TD> <INPUT NAME="Suma" VALUE="1000000" SIZE=7 ></TD> </TR> <TR> <TD ALIGN="right">Dobanda pe an:</TD> <TD><INPUT NAME="DobandaAn" VALUE="29" SIZE=6>%</TD> </TR> <TR> <TD ALIGN="right">Numarul de luni:</TD> <TD><INPUT NAME="Luni" VALUE="12" SIZE=7></TD></TR> <TR> <TD COLSPAN="2"E BGCOLOR="#00ccff"><B>Rezultate:</B></TD> </TR> <TR> <TD ALIGN="right"> Dobanda lunara:</TD> <TD> <OBJECT style="LEFT: 0px; WIDTH: 184px; TOP: 0px; HEIGHT: 30px" classid=clsid:8BD21D10-EC42-11CE-9E0D-00AA006002F3 name=dlunara> <PARAM NAME="VariousPropertyBits" VALUE="746604571"> http://www.east.utcluj.ro/mb/mep/antal <PARAM NAME="BackColor" VALUE="2147483653"> <PARAM NAME="ForeColor" VALUE="2147483656"> Universitatea Tehnica <PARAM NAME="MaxLength" VALUE="0"> din Cluj-Napoca <PARAM NAME="BorderStyle" Mecanica si Programare Catedra VALUE="0"> <PARAM NAME="ScrollBars" VALUE="0"> Conf. Dr. Ing. ANTAL Tiberiu Alexandru <PARAM NAME="DisplayStyle" VALUE="1"> <PARAM NAME="MousePointer" VALUE="0"> <PARAM NAME="Size" VALUE="3895;635"> <PARAM NAME="PasswordChar" VALUE="0"> <PARAM NAME="ListWidth" VALUE="0"> <PARAM NAME="BoundColumn" VALUE="1"> <PARAM NAME="TextColumn" VALUE="65535"> <PARAM NAME="ColumnCount" VALUE="1"> <PARAM NAME="ListRows" VALUE="8"> <PARAM NAME="cColumnInfo" VALUE="0"> <PARAM NAME="MatchEntry" VALUE="2"> <PARAM NAME="ListStyle" VALUE="0"> <PARAM NAME="ShowDropButtonWhen" VALUE="0"> <PARAM NAME="ShowListWhen" VALUE="1"> <PARAM NAME="DropButtonStyle" VALUE="1"> <PARAM NAME="MultiSelect" VALUE="0"> <PARAM NAME="Value" VALUE=""> <PARAM NAME="Caption" VALUE=""> <PARAM NAME="PicturePosition" VALUE="458753"> <PARAM NAME="BorderColor" VALUE="2147483654"> <PARAM NAME="SpecialEffect" VALUE="2"> <PARAM NAME="Accelerator" VALUE="0"> <PARAM NAME="GroupName" VALUE=""> <PARAM NAME="FontName" VALUE="Times New Roman"> <PARAM NAME="FontEffects" VALUE="1073741824"> <PARAM NAME="FontHeight" VALUE="240"> <PARAM NAME="FontOffset" VALUE="0"> <PARAM NAME="FontCharSet" VALUE="0"> <PARAM NAME="FontPitchAndFamily" VALUE="2"> <PARAM NAME="ParagraphAlign" VALUE="2"> <PARAM NAME="FontWeight" VALUE="400"></OBJECT> </TD> </TR> <TR>

136 - Obiecte client

<TD ALIGN="right">Dobanda totala:</TD> <TD> <OBJECT style="LEFT: 0px; WIDTH: 183px; TOP: 0px; HEIGHT: 30px"E classid="clsid:8BD21D10-EC42-11CE-9E0D-00AA006002F3" name=dtotala> <PARAM NAME="VariousPropertyBits" VALUE="746604571"> <PARAM NAME="BackColor" VALUE="2147483653"> <PARAM NAME="ForeColor" VALUE="2147483656"> <PARAM NAME="MaxLength" VALUE="0"> <PARAM NAME="BorderStyle" VALUE="0"> <PARAM NAME="ScrollBars" VALUE="0"> <PARAM NAME="DisplayStyle" VALUE="1"> <PARAM NAME="MousePointer" VALUE="0"> <PARAM NAME="Size" VALUE="3874;635"> <PARAM NAME="PasswordChar" VALUE="0"> <PARAM NAME="ListWidth" VALUE="0"> <PARAM NAME="BoundColumn" VALUE="1"> <PARAM NAME="TextColumn" VALUE="65535"> <PARAM NAME="ColumnCount" VALUE="1"> <PARAM NAME="ListRows" VALUE="8"> <PARAM NAME="cColumnInfo" VALUE="0"> <PARAM NAME="MatchEntry" VALUE="2"> <PARAM NAME="ListStyle" VALUE="0"> <PARAM NAME="ShowDropButtonWhen" VALUE="0"> <PARAM NAME="ShowListWhen" VALUE="1"> <PARAM NAME="DropButtonStyle" VALUE="1"> <PARAM NAME="MultiSelect" VALUE="0"> <PARAM NAME="Value" VALUE=""> <PARAM NAME="Caption" VALUE=""> http://www.east.utcluj.ro/mb/mep/antal <PARAM NAME="PicturePosition" VALUE="458753"> <PARAM NAME="BorderColor" VALUE="2147483654"> Universitatea VALUE="2"> <PARAM NAME="SpecialEffect" Tehnica din Cluj-Napoca <PARAM NAME="Accelerator" Mecanica si Programare Catedra VALUE="0"> <PARAM NAME="GroupName" Ing. ANTAL Tiberiu Alexandru Conf. Dr. VALUE=""> <PARAM NAME="FontName" VALUE="Times New Roman"> <PARAM NAME="FontEffects" VALUE="1073741824"> <PARAM NAME="FontHeight" VALUE="240"> <PARAM NAME="FontOffset" VALUE="0"> <PARAM NAME="FontCharSet" VALUE="0"> <PARAM NAME="FontPitchAndFamily" VALUE="2"> <PARAM NAME="ParagraphAlign" VALUE="2"> <PARAM NAME="FontWeight" VALUE="400"></OBJECT> </TD> </TR> <TR> <TD COLSPAN="2" ALIGN="CENTER"><INPUT TYPE=buttonE NAME="bCalcul" VALUE="Calcul"></TD> </TR> </TABLE> <SCRIPT FOR="bCalcul" EVENT="onClick" LANGUAGE="VBScript"> Set frm = Document.frmDob If frm.Suma.Value = "" Then alert ("Suma pentru care se va " & _ "calcula dobanda nu poate fi 0!") frm.Suma.focus ElseIf frm.DobandaAn.Value = "" Then alert ("Dobanda anuala data de " & _ "banca nu poate fi 0%!") frm.DobandaAn.focus ElseIf frm.Luni.Value = "" Then alert ("Numarul de luni pentru " & _ "care se va calcula dobanda lunara nu poate fi 0!") frm.Luni.focus Else Call CalculDobanda End If </SCRIPT>

Obiecte client - 137

</FORM> </BODY>

Figure 42 Modul de afisare a rezultatelor folosind controale ActiveX

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

138 - Obiecte server

Obiecte server
ASP are sapte obiecte care se pot folosi pentru a: # trimite HTML si date navigatorului; # extrage informat ii din navigator; # comunica cu server-ul; # stoca date ale aplicat iei sau ale unui utilizator; # trata erorile. Din punctul de vedere al utilizatorului aceste obiecte expun proprietat i si metode care pot fi - accesate sau rulate. Lista celor sapte obiecte se prezinta n tabelul urmator: Obiect
Response Request Server Application Session

Descriere Utilizat pentru trimiterea informat iilor la client. Utilizat pentru extragerea informat iilor trimise de client printr-o cerere. Utilizat pentru a comunica cu server-ul. Utilizat pentru a stoca informat ii despre aplicat ie. Utilizathttp://www.east.utcluj.ro/mb/mep/antal instant e de navigator pentru a stoca informat ii particulare unei (uneori, aceasta corespunde unui singur utilizator). Universitatea Tehnica din Cluj-Napoca Utilizat pentru a init ia sau a controla tranzact ii si pentru a crea noi Catedra Mecanica si Programare - obiecte prin Dr. Ing. ANTAL Tiberiu Alexandru Microsoft Transaction Server (MTS). Conf. Utilizat pentru a obt ine informat ii cu privire la eroarea care apare n timp ce motorul ASP prelucreaza un script.

ObjectContext

ASPError

Pn acum, pentru a rula o secven de cod pe client, am folosit marcajul SCRIPT cu urmtoarea form de scriere <SCRIPT LANGUAGE="VBScript"> ... </SCRIPT> . Un exemplu simplu de astfel de cod este:
<SCRIPT LANGUAGE="VBScript"> Document.Write time </SCRIPT>

Pentru ca o secven de cod s fie executat pe server-ul de Web avem dou variante de scriere: # secvena de cod se scrie ntre delimitatorii <% %> ; # n marcajul SCRIPT , care va cuprinde secvena de cod, se va folosi atributul RUNAT=SERVER . Fie codul:
<HTML> <HEAD> </HEAD> <BODY> <% Response.Write "Un text ..." %> </BODY> </HTML>

Obiecte server - 139

desi, la prima vedere, pare a fi n regula la nceputul lui ar trebui sa stea linia: <%@
Language=VBScript

%>

Aceasta, prin caracterul @ , spune motorului ASP ca limbajul de script implicit folosit n pagina este VBScript .
NOTA

Pentru toate secventele de cod care urmeaz este nevoie s aveti instalat un server de a a Web (PWS sau IIS). Fisierele care se vor rula pe server vor avea extensia ".asp" si nu pot fi deschise direct din navigator.

Obiectul Response Cnd un navigator cere date unui server acesta raspunde fie direct, cu datele cerute, fie cu o redirectare, fie cu o eroare. Raspunsul are doua port iuni principale, antetul si corpul. Antetul raspunsului (response header ) cont ine directive si/sau informat ii despre cont inut cum sunt: tipul, data expirarii, cookies etc. Corpul raspunsului (response body ) cont ine datele. n cazul cererilor HTML, raspunsul este dat direct de server-ul de Web, care citeste si ntoarce - http://www.east.utcluj.ro/mb/mep/antal cont inutul paginii HTML. n cazul paginilor ASP, datele raspunsului sunt generate prin obiectul ASP, numit, Response . Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Trimiterea unui r|spuns cu obiectul Respose Conf. Dr. care urmeaza, aceasta trebuie sa Pentru a putea rula pe server aplicat iaIng. ANTALTiberiu Alexandru fie stocata ntr-un director virtual. Daca fisierul se numeste aspr1.asp si este stocat n directorul virtual CursASP se poate folosi urmatorul URL pentru rularea lui:
http://server/CursASP/aspr1.asp

Mai sus, n locul lui server , trebuie sa scriet i numele server-ului pe care se va rula codul ASP. Daca nu cunoastet i numele server-ului (n general este acelasi cu cel al calculatorului) se poate - folosi numele generic de localhost pentru server-e Web locale (acesta va rula pe calculatorul pe care se afla si codul ASP corespunzator). Astfel, se poate scrie:
http://localhost/CursASP/aspr1.asp

Cont inutul fisierului aspr1.asp se prezinta n continuare:


<%@ Language=VBScript %> <HTML> <HEAD> </HEAD> <BODY> <% Response.Write "Un text ..." & "<BR>" Response.Write "afisat cu ""Response.write""" & "<BR>" %> </BODY> </HTML>

Daca n loc de textul:

140 - Obiecte server

Un text ... afisat cu "Response.write"

vet i primi un mesaj de eroare, verificat i daca server-ul de Web este ncarcat si funct ional, apoi dac are instalata partea de ASP si daca CursASP este director virtual. Utilizarea variabilelor n r|spunsul dat de server permite si utilizarea variabilelor. Pentru aceasta variabila trebuie declarata cu Dim (Dim vine de la dimension , iar n VBScript aceasta procedura nu este obligatorie), apoi trebuie sa i se atribuie si o valoare nainte de afisare. Codul care urmeaza prezinta modul n care se pot afisa ghilimelele si modalitatea de folosire a lui <% Option explicit %> pentru a primi o eroare de sintaxa daca se utilizeaza o variabila care nu a fost declarat cu Dim .
Response.write <%@ Language=VBScript %> <% Option explicit %> <HTML> <HEAD> </HEAD> <BODY> <% Dim unSir unSir = "Un text ... <BR>afisat cu ""Response.write""<BR>" Response.write unSir %> </BODY> http://www.east.utcluj.ro/mb/mep/antal </HTML>

Universitatea Tehnica din Cluj-Napoca De exemplu, daca n codul de mai sus n loc de Response.write unSir , se va scrie, din graba, Catedra Mecanica si Programare Response.write unir si daca linia Option explicit este prezenta urmatorul mesaj de eroare Conf. Dr. Ing. ANTAL Tiberiu Alexandru va fi afisat: Error Type: Microsoft VBScript runtime (0x800A01F4) Variable is undefined: 'unir' /CursASP/aspr2.asp, line 10

Majoritatea paginilor ASP sunt o mixtur de HTML i cod script. Iat un exemplu de acest fel:
<%@ Language=VBScript %> <% Option explicit %> <% Dim Cine Dim Cind Cine="Vasile Ionel" Cind=Time %> <HTML> <HEAD> <TITLE>O mixtura de HTML si cod VBScript</TITLE> </HEAD> <BODY> Omul in cauza se numeste <%=Cine%> si a fost pe aici la ora: <%=Cind%> </BODY> </HTML>

ntruct semnul = din codul <%=Cine%> este o form de scriere prescurtat a lui Response.write , codul scris desfurat este <%Response.write Cine%> . Colecia Response.Cookies Activitatea de programare nu se poate desfura fr variabile. S-a vzut deja modul n care se

Obiecte server - 141

poate crea i utiliza o variabil n codul HTML. Una dintre problemele programrii ASP este aceea de pstrare a valorilor variabilelor la schimbarea paginilor, deseori denumirea folosit n acest scop fiind aceea de pstrare a strii aplicaiei. Din punctul de vedere al motorului ASP, dup ce o pagin a fost prelucrat complet, toate variabilele folosite n pagin sunt uitate. Exist mai multe metode de pstrare a valorilor variabilelor, cea mai veche dintre ele fiind cea care se prezint n continuare. Un cookie, n cea mai simpl varint, este o pereche de forma cheie=valoare (de exemplu, CineNume=Vasile ). Cea mai simpl modalitate de creare a unui cookie este folosirea de HTML cu un antet care conine perechea cookie dup cum se observ n exemplul care urmeaz:
<META HTTP-EQUIV="set-cookie" CONTENTS="CineNume=Vasile; path=/;>

Se observ c, din punctul de vedere al server-ului, un cookie este o informaie n plus n antetul paginii. Din punctul de vedere al clientului, un cookie este o modalitate de a stoca o cantitate mic de date pe client. Cantitatea de date care poate fi stocat este dependent de navigator, dar majoritatea navigatoarelor moderne accepta cel mult 1024 de caractere pe post de date. O alt metod de creare a unui cookie este colecia Cookie a obiectului Response . O colecie este un obiect care conine o list de articole. Colecia Cookie conine lista perechilor cookie cheie=valoare pe care dorim s le stocm pe client. Pentru a seta un cookie scriem: http://www.east.utcluj.ro/mb/mep/antal
Response.Cookie("CineNume")="Vasile"

Universitatea Tehnica din Cluj-Napoca iar pentru a terge valoarea lui scriem: Mecanica si Programare Catedra Conf. Dr. Ing. ANTAL Tiberiu Alexandru
Response.Cookie("CineNume")=""

Este posibil i crearea unui cookie pe mai multe nivele pentru stocarea de valori multiple. n acest caz, fiecare sub-valoare este asociat unei sub-chei. Iat un exemplu:
Response.Cookie("Cine")("Nume")="Vasile" Response.Cookie("Cine")("Prenume")="Ionel "

Cteva aspecte legate de cookie-uri sunt prezentate n tabelul urmtor: Aspect un cookie este specific unui site Descriere Dup crearea unui cookie, navigatorul ntoarce cookie-ul pentru fiecare cerere adresat site-ului. La fiecare cerere de URL a navigatorului el verific lista de cookie-uri i dac gsete unul stocat va trimite valorile (stocate) corespunztoare acelui site ctre server. Navigatorul trimite cookie-urile doar dac acestea sunt specifice unui anumit domeniu i server, adic un alt site nu va putea citi setrile de cookie fcute de noi pentru un site al nostru. Parametrul path permite setarea de cookie-uri specifice unor anumite directoare din site. n acest caz navigatorul va trimite cookie-urile doar dac n URL-ul dorit, domeniul, server-ul i calea sunt cele dorite.

sunt sigure

142 - Obiecte server

Aspect expir n timp

Descriere Pentru fiecare cookie se poate seta o dat i o or de expirare, dup care acesta nu mai este valid. Dac data de expirare este setat, navigatorul salveaz cookie-ul pe disc. n lipsa acestei setri, navigatorul va ine cookie-ul n memorie, iar el va expira atunci cnd se nchide navigatorul. Comunicaia normal ntre navigatoare i server-e se face prin text ASCII, aici fiind incluse i cookie-urile. Programatorii, deseori, folosesc cookie-urile pentru a stoca date sensibile, de exemplu parole. Persoane ru intenionate, cu puin efort, pot citi aceste valori. Din acest motiv se poate face ca un cookie s fie trimis printr-o conexiune securizat (de exemplu, via HTTPS). n acest caz navigatorul nu va trimite cookie-ul printr-o conexiune fr securitate. Dac cookie-ul se transmite printr-o conexiune securizat el este ncriptat i nu mai poate fi citit prea uor de hacker-i.

pot fi securizate

Metoda Response.AddHeader n cazul n care dorim s vizualizm coninutul unei pagini majoritatea navigatoarelor au opiunea http://www.east.utcluj.ro/mb/mep/antal View Source. Pentru informaiile care se transfer prin antet, cum este un cookie, nu exist ns o soluie de vizualizare direct. Exist totui posibilitatea de a defini coninutul antetului cu Universitatea Tehnica din Cluj-Napoca ajutorul metodei Response.AddHeader . Tot ceea ce face aceast metod se poate scrie i direct n HTML, ns aceasta se poateCatedra prin cod. si Programare realiza Mecanica Conf. Dr. Ing. ANTAL Tiberiu Alexandru Codul care urmeaz folosete marcajul SPAN . Acesta face parte dintre mecanismele generice pentru structurarea documentelor, fiind folosit mult de ctre FrontPage i DreamWeaver. SPAN este folosit n continuare pentru a denumi o poriune a textului de afiat. Astfel se va defini o zon de text care va putea fi identificat printr-un nume. Atributul ID folosit cu SPAN d un nume unic elementului n scopul de a-l putea referi ulterior prin cod. n acest fel se definete un nou obiect. n codul urmtor el se numete TimpRedirectare , pe care altfel, n HTML, nu am putea s-l definim ca o entitate distinct i identificabil din cod. Pentru exemplificarea redirectrii se folosesc dou fiiere, aspr4.asp i asp41.asp ale cror coduri se prezint n continuare. Redirectarea are loc ca urmare a liniei <% Response.AddHeader "Refresh","7; URL= aspr41.asp"%> . Observai c ";" se folosete pentru a separa valorile multiple la fel ca i n HTML. Datorit modului de scriere al URL-ului redirectarea va reui doar dac cele dou fiiere sunt stocate n acelai director. Fiierul aspr4.asp :
<%@ Language=VBScript %> <% Option explicit %> <% Response.Buffer = True %> <% Response.AddHeader "Refresh","7;URL=aspr41.asp"%> <!--META HTTP-EQUIV="REFRESH" CONTENT="7; URL=http://localhost/CursASP/aspr41.asp"&gt;--> <HTML> <HEAD> <TITLE>Exemplu de redirectare cu Response.AddHeader</TITLE> <SCRIPT LANGUAGE="VBScript">

Obiecte server - 143

call window.setTimeout("timer",1000,"VBScript") Function timer() Dim Timp Timp = document.all("TimpRedirectare").innertext Timp = Timp - 1 document.all("TimpRedirectare").innerText = Timp If (Timp > 0) Then call window.setTimeout("timer",1000,"VBScript") End If End function </SCRIPT> </HEAD> <BODY> Pagina pe care o cautati a fost mutata. Noua locatie este: <A HREF="http://localhost/CursASP/aspr41.asp">aspr41.asp</A>. <P> Daca navigatorul suporta redirectarea noua locatie se va deschide automat in <SPAN ID="TimpRedirectare">7</SPAN> secunde. </BODY> </HTML>

Fiierul aspr41.asp :
<HTML> <HEAD> </HEAD> <BODY>

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

<P>Ati fost redirectat pe pagina &quot;aspr41.asp&quot;.</P> </BODY> </HTML>

Funcia timer se execut pe client. Deoarece aceasta este scris n VBScript, clientul trebuie s fie IE. Ea permite afiarea timpului rmas pn la redirectare cu ajutorul contorului TimpRedirectare , ns nu realizeaz redirectarea. Linia a treia de cod <% Response.Buffer = True %> este esenial pentru funcionarea redirectrii dup ce server-ul a transmis deja o poriune de cod HTML. Tipic, server-ul trimite mai nti antetul (header ), apoi corpul (body ). Dup ce server-ul a transmis antetul, acesta nu mai poate fi schimbat deoarece el este deja pe calculatorul clientului. Dac apare situat ia schimbrii antetului, ca urmare a prelucrrii unui script ieirea trebuie stocat ntr-un buffer nainte ca acesta s nceap s fie trimis clientului. Rspunsul buffer-at va conine att antetul, ct i corpul. n acest fel ne putem rzgndi cu privire la pagina care va fi deschis. Se poate trimite un antet cu redirectare ctre navigator. Metoda Response.Redirect Metoda Response.AddHeader este util atunci cnd se cunoate, n avans, c trebuie s se fac o redirectare i se mai cunoate URL-ul de redirectare. Exist ns cazuri cnd redirectarea trebuie fcut dinamic, pe baza unor decizii luate n cod. n acest caz trebuie folosit metoda Response.Redirect . De exemplu, pentru a realiza o redirectare ctre pagina Universitii Tehnice din Cluj-Napoca se scrie:
Response.Redirect "http://www.utcluj.ro/"

Codul de redirectare este executat imediat cum se ajunge la el, din acest motiv server-ul nu mai execut codul care urmeaz dup aceast linie i nu va trimite nici codul HTML din buffer. Dac se uit scrierea liniei <% Response.Buffer = True %> la nceputul paginii, server-ul va genera o eroare cnd ncearc s execute redirectarea, iar mesajul afiat va fi ceva de forma:

144 - Obiecte server

Response object error 'ASP 0156 : 80004005' Header Error /CursASP/nume.asp, line 23 The HTTP headers are already written to the client browser. Any HTTP header modifications must be made before writing page content.

Propriet|ile Response.Expires i Response.ExpiresAbsolute Terminologie # cache - denumire folosit pentru o memorie mic i rapid care stocheaz datele accesate recent. Deseori este folosit pentru accesul la memorie a procesorului, pentru copii locale ale datelor accesibile printr-o reea etc. # proxy server - un proces care furnizeaz un cache de articole pentru alte server-e care se presupune c sunt mai ncete i cu un cost de acces mai mare. n particular, termenul se folosete pentru un server de Web care accept URL-uri cu un prefix special. Atunci cnd primete o cerere de astfel de URL, extrage prefixul i caut URL-ul obinul n cache-ul local. Dac acesta este gsit, rpunsul se ntoarce imediat. Altfel va fi adus de pe un alt server, se salveaz n cache, apoi se ntoarce celui care l-a cerut. n general, cache-ul are un algoritm de expirare i se golete pe baza vrstei, mrimii i istoriei de accesare a documentelor din el. Paginile ASP au coninutul dinamic, iar cele HTML l au static. S-a depus un efort mare pentru http://www.east.utcluj.ro/mb/mep/antal mbuntirea timpului de rspuns n cazul paginilor HTML pe Web. Metoda cea mai des folosit este mutarea paginii mai aproape de navigatorul care i cere coninutul. De aceea, majoritatea Universitatea Tehnica din Cluj-Napoca navigatoarelor formeaz un cache pe disc, cu paginile accesate. Prima ncrcare a paginii va dura Catedra Mecanica si Programare mai mult deoarece pagina se transfer de pe server. Dup aceea, ea se stocheaz local i toate Conf. Dr. Ing. ANTAL Tiberiu Alexandru accesele ulterioare la aceeai pagin se vor face prin ncrcarea din cache, deci mult mai rapid. Aceast strategie de lucru este perfect pentru pagini HTML, ca urma a coninutului lor static, dar nu merge n cazul paginilor ASP. Paginile ASP se modific n urma schimbrii surselor sau din cauza parametrilor de intrare modificai de un anumit utilizator. Un proxy server folosete cache pentru pagini pentru a evita un transfer lung de la server-ul care ine pagina original. Dac navigatorul afieaz o pagin din cache aceasta poate s fie expirat sau poate s nu fie ceea ce i-a dorit utilizatorul. Codul ASP de pe server-ul care ine pagina original nu va fi rulat deoarece proxy-ul intercepteaz cererea nainte ca ea s ajung la server. Obiectul Response are cteva proprieti pentru a rezolva aceste probleme. Proprietatea Response.Expires definete durata de timp, n minute, n care pagina este valid. Dup trecerea minutelor pagina va expira. Pn cnd pagina expir este luat din cache, apoi se rencarc de pe server. De exemplu, Response.Expires=50 spune navigatorului c pagina expir dup 50 de minute. Proprietatea Response.ExpiresAbsolute lucreaz asemantor cu Response.Expires, doar c aici se poate specifica i o dat. De exemplu, Response.ExpiresAbsolute = #July 28, 2007# (ntr-un ir, caracterele # se folosesc pentru a defini o dat) specific navigatorului c pagina va expira n 28 iulie 2007. Problema acestor proprieti este c nu funcioneaz ntotdeauna, deseori din cauza navigatoarelor (navigatoarele lui Netscape se fac vinovate cel mai des de un comportament ciudat n acest sens), caz n care aplicaia ASP nu va lucra, nici ea, corect. Cache-ul realizat de navigator mai poart denumirea de pre-caching. O alt cauza a nefuncionrii corecte poate fi cache-ul fcut de proxy care nu interpreteaz corect timpul i data de expirare. Pentru a fora proxy-ul s aduc o copie nou a paginii se va folosi proprietatea Response.CacheControl . Proprietatea poate lua dou valori, Public i Private . Implicit este

Obiecte server - 145

valoarea Private , caz n care nu se dorete ca server-ul s stocheze n cache pagina. Din pcate nici aceast proprietate nu este luat n considerare de toate proxy server-ele, aa c cea mai simpl modalitate de a fora rencrcarea paginii la fiecare accesare este ca ea s fie expirat nc de la primul acces la ea. Un exemplu de lucru n acest sens este hiperlegtura:
<A HREF="pagina.asp?UniqueURL=1/1/1990 1:1:11 AM"> Clic aici pentru pagina.asp </A>

Obiectul Request Obiectul Response se folosete pentru a trimite un coninut navigatorului. Obiectul Request este opusul primului el fiind folosit pentru a extrage un coninut din navigator. Request are mai multe colecii care ncapsuleaz informaiile trimise de navigator la fiecare cerere. Att server-ul ct i navigatorul trateaz fiecare cerere ca i o comunicaie nou, aici fiind incluse toate informaiile necesare derulrii comunicaiei (adres de IP, tip de informaie cerut, coninutul formularelor, variabilele QueryString , informaii specifice navigatorului). Obiectul Request se folosete pentru citirea acestor informaii de cinci colecii distincte care se prezint n ordine alfabetic n tabelul urmtor: Colecie
ClientCertificates Cookies Form

Descriere Stocheaz informaii legate de securitate. http://www.east.utcluj.ro/mb/mep/antal Conine valorile de cookie trimise de navigator. Universitatea Tehnica din Cluj-Napoca Conine informaiile introduse de utilizator n controalele de Catedra Mecanica si Programare intrare iIng.cele stocate de aplicaie n variabilele formularului. Conf. Dr. pe ANTAL Tiberiu Alexandru Conine informaiile trimise mpreun cu URL-ul. Conine informaiile pe care server-ul le transfer automat cu fiecare cerere.

QueryString ServerVariables

Toate coleciile au urmtoarele elemente comune: Denumire


Count

Descriere Proprietatea stocheaz numrul de elemente ale coleciei. Primul element are indicele 1 (la tablouri acesta era 0), iar valoarea ei se citete prin
Variabil= NumeColecie.Count

Item

Metoda permite extragerea unui articol din colecie specificat prin nume sau indice dup urmtoarele sintaxe: Variabil=
NumeColecie.Item("NumeCheie") sau Variabil= NumeColecie.Item(Index)

Key

Metoda permite extragerea valorii unei chei pe baza unui index. n practic se folosete rar, sintaxa fiind: Variabil= NumeColecie.Key)

Toate coleciile ASP au proprietatea implicit Item , iar atunci cnd ne referim la aceasta ea nu mai trebuie scris. Colecia Request.ClientCertificates Aceast colecie conine certificatele de securitate (valori binare unice) pe care navigatorul le

146 - Obiecte server

transfer atunci cnd cere informaii de la un site securizat prin protocolul HTTP. Nu toate navigatoarele suport lucrul cu certificate de securitate. Server-ul folosete certificatul de securitate pentru identificarea utilizatorilor. Colecia Request.ClientCertificate este ntotdeauna vid atunci cnd navigatorul cere informaii prin protocolul HTTP standard. Pentru obinerea de valori ale certificatelor de securitate trebuie realizat o conexiune de site securizat la server prin IIS. Colecia Request.Cookies Navigatorul trimite cookie-urile, n antet, prin variabila HTTP_COOKIE . Pentru citirea cookie-urilor se va folosi colecia Request.Cookies care este complementara coleciei Response.Cookies . Dac prin folosirea lui Response.Cookies este setat un cookie, acesta va fi inclus n urmtoarea cerere a navigatorului client. Dac cookie-ul este ters el nu mai apare n colecia urmtoarei cereri. Dac se modific valoarea lui, valoarea din colecie se va modifica i ea n urmtoarea cerere a navigatorului. Pentru a da o valoare unui cookie numit cheie se folosete sintaxa deja cunoscut Response.Cookies("cheie")=valoare ; pentru citirea acestei valori se va folosi sintaxa:
Dim V V=Request.Cookies("cheie")

Pentru a parcurge ntreaga colecie de cookie-uri se va folosi instruciunea For Each ... Next: http://www.east.utcluj.ro/mb/mep/antal
Dim V Universitatea Tehnica din Cluj-Napoca For Each V in Request.Cookies Response.Write V & CatedraRequest.Cookies.Item(V) " = " Mecanica si Programare Next Conf. Dr. Ing. ANTAL Tiberiu Alexandru

Exemplul funcioneaz numai dac fiecare cookie din colecie ia cte o singur valoare. n cazul valorilor multiple trebuie folosit proprietatea hasKeys care ntoarce True dac exist subchei. Exemplul urmator prezint i o modalitate de accesare a unui cookie cu mai multe valori. Aplicaia are la baza fiierele asprq_tr.asp , asprq_st.asp , asprq_ex.asp ale cror coduri se prezint n continuare. Fiierul asprq_tr.asp :
<HTML> <BODY> <FORM ACTION="asprq_st.asp" METHOD="POST"> <H3>Introdu datele tale:</H3> <TABLE COLS="2" BORDER="2"> <TR> <TD>NUME:</TD> <TD> <INPUT TYPE="TEXT" NAME="Nume" SIZE="20"></TD> </TR> <TR> <TD>PRENUME:</TD> <TD> <INPUT TYPE="TEXT" NAME="Prenume" SIZE="20"></TD> </TR> <TR> <TD>Tipul de utilizator:</TD> <TD> <SELECT NAME="Tip"> <OPTION VALUE="ADMINISTRATOR">Administrator <OPTION VALUE="VIZITATOR">Vizitator <OPTION VALUE="UTILIZATOR">Utilizator

Obiecte server - 147

</TD> </TR> <TR> <TD ALIGN="CENTER"> <INPUT TYPE="SUBMIT" VALUE="Trimite"></TD> <TD ALIGN="CENTER"> <INPUT TYPE="RESET" VALUE="Reset"></TD> </TR> </TABLE> </FORM> </BODY>

Fiierul asprq_st.asp :
<% Response.Cookies("Persoana")("Nume")= Request.Form("Nume") Response.Cookies("Persoana")("Prenume")= Request.Form("Prenume") Response.Cookies("Persoana").Expires="July 28, 2004" Response.Cookies("Tip")= Request.Form("Tip") Response.Cookies("Tip").Expires="July 28, 2004" %> <HTML> <BODY> <P>Cookie-urile sint stocate! <P>Click pe <A HREF = "asprq_ex.asp">asprq_ex.asp</A> rezultatelor stocate. </BODY>

pentru

afisareaE

Fiierul asprq_ex.asp :

http://www.east.utcluj.ro/mb/mep/antal

<%@ Language=VBScript %> Universitatea Tehnica din Cluj-Napoca <% Option Explicit %> Catedra Mecanica si Programare <% Dim Nume Conf. Dr. Ing. ANTAL Tiberiu Alexandru Dim Prenume Dim Tip Nume = Request.Cookies("Persoana")("Nume") Prenume = Request.Cookies("Persoana")("Prenume") Tip = Request.Cookies("Tip") %> <HTML> <BODY> Salutare <%=UCase(Nume)%> &nbsp; <%=Prenume%>, ai drepturile de accesE de <%=Tip%>!<BR><BR> <% Dim V Dim SubV For Each V In Request.Cookies If Request.Cookies(V).hasKeys Then Response.Write V & "<BR>" For Each SubV in Request.Cookies(V) Response.Write "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" & _ SubV & " = " & Request.Cookies(V)(SubV) & "<BR>" Next Else Response.Write V & " = " & Request.Cookies(V) & "<BR>" End If Next %><BR> <% Response.Write "HTTP_COOKIE = " & Request.ServerVariablesE ("HTTP_COOKIE") & "<BR>" %></BODY></HTML>

148 - Obiecte server

Figure 43 Fisierul asprq_tr.asp

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Prima oar se va deschide pagina asprs_tr.asp , care va fi completat aa cum se vede n Figura Conf. Dr. pe ecran se afieaz pagina din Figura 44. Secvena de cod 43. Apoi, dup apsarea lui Trimite, Ing. ANTAL Tiberiu Alexandru care urmeaz este o implementare recursiv a codului de afiare a valorilor de cookie din asprq_ex.asp . Ea are avantajul funcionrii corecte, indiferent de numrul subcheilor care s-au definit.
<% Sub afisareCookie(C) Dim V For Each V In C If IsObject(C(V)) then If C(V).hasKeys Then Response.Write V & "<BR>" Call afisareCookie(C(V)) Else Response.Write V & " = " & C(V) & "<BR>" End If Else Response.Write "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" & V & " =E " & C(V) & "<BR>" End If Next End Sub Dim C Set C = Request.Cookies afisareCookie(C) %>

Obiecte server - 149

Figure 44 Fisierul asprq_st.asp

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Aici, se face clic pe hiperlegtur, iar pe ecran apare pagina din Figura 45. Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru Figure 45 Fisierul asprq_ex.asp

Colecia Request.Forms Cnd navigatorul transfer datele unui formular ctre server cu metoda POST, motorul ASP separ i stocheaz datele formularului n colecia Request.Form . Metoda implicit a coleciei este Item , din acest motiv n loc de Request.Form.Item("Telefon") se poate scrie

150 - Obiecte server

Request.Form("Telefon") .

Numrul de articole stocate n colecie se poate gsi prin Request.Form.Count . Dac formularul conine mai multe controale cu acelai nume, de exemplu Telefon , atunci acestea pot fi referite prin sintaxa:
Request.Form("Telefon")(1) Request.Form("Telefon")(2)

Numrul

distincte date aceluiai control se gsete prin Request.Form("Telefon").Count . Pentru afiarea tuturor cheilor i valorilor de cheie din colecia Request.Form se poate folosi codul:
Dim i For i=1 To Request.Form.Count Response.Write Request.Form.Key(i) & " = " & Request.Form.Key(i) & "<BR>" Next

de

valori

Figure 46 Fisierul asprq_frm.asp

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

Cel mai simplu mod de a nva lucrul cu aceast colecie este folosirea unui formular cu buton de transfer (submit) care va realiza transferul nsi ctre formularul cu pricina. Codul corespunztor imaginii din Figura 46 se prezint n continuare.
<%@ Language=VBScript %> <% Option Explicit %> <% Function numaiCaractere(sir) Dim i if Len(sir) = 0 Then numaiCaractere = False Exit Function End if For i = 1 To Len(sir) If instr(1, "abcdefghijklmnopqrstuvwxyz'", _ mid(sir,i,1), vbTextCompare) = 0 Then

Obiecte server - 151

numaiCaractere = False Exit Function End If Next numaiCaractere = True End Function Function numaiCifre(sir) Dim i If Len(sir) = 0 Then numaiCifre = False Exit Function End If For i = 1 To Len(sir) If instr(1, "0123456789-()", _ mid(sir,i,1), vbTextCompare) = 0 Then numaiCifre = False Exit Function End If Next numaiCifre = True End Function If Request.ServerVariables("REQUEST_METHOD") = "POST" Then Dim eroare Dim nume Dim prenume Dim telefon Dim tip http://www.east.utcluj.ro/mb/mep/antal nume = Request.Form("Nume") prenume = Universitatea Tehnica din Cluj-Napoca Request.Form("Prenume") Catedra Mecanica si Programare telefon = Request.Form("Telefon") tip = Request.Form("Tip") Conf. Dr. Ing. ANTAL Tiberiu Alexandru eroare="" If Not numaiCaractere(nume) Then eroare = "Campul NUME nu poate fi vid si " & _ "poate contine doar litere!<BR>" End If If Not numaiCaractere(prenume) Then eroare = eroare & "Campul PRENUME nu poate fi vid " & _ "si poate contine doar litere!<BR>" End If If Not numaiCifre(telefon) Then eroare = eroare & "Campul TELEFON nu poate fi vid " & _ "si poate contine cifre, - sau ( )!<BR>" End If If Len(eroare) = 0 Then Response.Write "Nume = " & nume & "<BR>" Response.Write "Prenume = " & prenume & "<BR>" Response.Write "Telefon = " & telefon & "<BR>" Response.Write "Tip = " & tip & "<BR>" Response.End End If End If %> <HTML> <BODY> <FORM NAME="Frm1" ACTION="asprq_frm.asp" METHOD="POST"> <H3>Introdu datele tale:</H3> <% If Len(eroare) > 0 Then Response.Write "<P><FONT COLOR=""RED"">" & eroare & "</FONT></P>" End If %>

152 - Obiecte server

<P> <TABLE COLS="2" BORDER="3" CELLPADDING="3" CELLSPACING="3"> <TR> <TD>NUME:</TD> <TD> <INPUT TYPE="TEXT" NAME="Nume" VALUE="<%=nume%>"></TD> </TR> <TR> <TD>PRENUME:</TD> <TD> <INPUT VALUE="<%=prenume%>"></TD> </TR> <TR> <TD>TELEFON:</TD> <TD> <INPUT VALUE="<%=telefon%>"></TD> </TR> <TR> TYPE="TEXT" NAME="Prenume"

SIZE="20"E

SIZE="20"E

TYPE="TEXT"

NAME="Telefon"

SIZE="20"E

<TD>Tipul de utilizator:</TD> <TD> <SELECT NAME="Tip"> <OPTION VALUE="ADMINISTRATOR" <% if Tip = "ADMINISTRATOR"E Then Response.Write "SELECTED"%> >Administrator <OPTION VALUE="VIZITATOR" <% if Tip = "VIZITATOR" ThenE Response.Write "SELECTED"%>>Vizitator <OPTION VALUE="UTILIZATOR" <% if Tip = "UTILIZATOR" ThenE Response.Write "SELECTED"%>>Utilizator http://www.east.utcluj.ro/mb/mep/antal </TD> </TR> Universitatea Tehnica din Cluj-Napoca <TR> <TD ALIGN="CENTER"> Mecanica si Programare VALUE="Trimite"></TD> Catedra <INPUT TYPE="SUBMIT" <TD ALIGN="CENTER"> <INPUT TYPE="RESET" VALUE="Reset"></TD> Conf. Dr. Ing. ANTAL Tiberiu Alexandru </TR> </TABLE> </FORM> </BODY>

Variabila REQUEST_METHOD este folosit pentru a detecta dac formularul a fost transmis cu metoda POST . Rolul exemplului este didactic. Dup ce formularul a fost transmis ctre el nsui, se verific dac Nume i Prenune exist i conin doar litere i spaii, apoi se verific dac Telefon exist i conine doar cifre sau caracterele - , ( , ) . Dac n urma verificrilor una sau mai multe dintre condiiile impuse nu sunt ndeplinite atunci se genereaz mesajele de eroare corespunztoare. Dac variabila eroare este vid (conine irul nul) nseamn ca nu au fost erori i rezultatele pot fi afiate. Codul de mai sus funcioneaz numai dac formularul se transfer cu metoda POST i are dezavantajul c verificrile se fac pe server. O variant mai realist este codul care urmeaz.
<HTML> <BODY> <SCRIPT LANGUAGE="JavaScript"> function TestJS() { return TestVB(); } </SCRIPT> <SCRIPT LANGUAGE="VBScript"> Dim eroare Function TestVB() eroare=""

Obiecte server - 153

If Not numaiCaractere(Trim(Frm1.Nume.Value)) Then eroare = "Campul NUME nu poate fi vid si " & _ "poate contine doar litere!"& chr(10) & chr(13) End If If Not numaiCaractere(Trim(Frm1.Prenume.Value)) Then eroare = eroare & "Campul PRENUME nu poate fi vid " & _ "si poate contine doar litere!" & chr(10) & chr(13) End If If Not numaiCifre(Trim(Frm1.Telefon.Value)) Then eroare = eroare & "Campul TELEFON nu poate fi vid " & _ "si poate contine cifre, - sau ( )!" & chr(10) & chr(13) End If If Len(eroare) = 0 Then TestVB = True Else document.all("er").innerText = eroare TestVB = False End If End Function Function numaiCaractere(sir) Dim i if Len(sir) = 0 Then numaiCaractere = False Exit Function End if For i = 1 To Len(sir) If instr(1, "abcdefghijklmnopqrstuvwxyz'", _ http://www.east.utcluj.ro/mb/mep/antal mid(sir,i,1), vbTextCompare) = 0 Then numaiCaractere = False Universitatea Tehnica din Cluj-Napoca Exit Function End If Catedra Mecanica si Programare Next Conf. Dr. Ing. ANTAL Tiberiu Alexandru numaiCaractere = True End Function Function numaiCifre(sir) Dim i If Len(sir) = 0 Then numaiCifre = False Exit Function End If For i = 1 To Len(sir) If instr(1, "0123456789-()", _ mid(sir,i,1), vbTextCompare) = 0 Then numaiCifre = False Exit Function End If Next numaiCifre = True End Function Sub Sterge() Frm1.Reset document.all("er").innerText = "" End Sub </SCRIPT> <FORM NAME="Frm1" ACTION="asprq_qst.asp" METHOD="GET" ="return(TestJS());"> <H3>Introdu datele tale:</H3> <FONT COLOR="RED" SIZE="2"> <SPAN ID="er"> </SPAN> </FONT> <P> <TABLE COLS="2" BORDER="3" CELLPADDING="3" CELLSPACING="3"> ONSUBMITE

154 - Obiecte server

<TR> <TD>NUME:</TD> <TD> <INPUT TYPE="TEXT" NAME="Nume" SIZE="20"></TD> </TR> <TR> <TD>PRENUME:</TD> <TD> <INPUT TYPE="TEXT" NAME="Prenume" SIZE="20"></TD> </TR> <TR> <TD>TELEFON:</TD> <TD> <INPUT TYPE="TEXT" NAME="Telefon" SIZE="20"></TD> </TR> <TR> <TD>Tipul de utilizator:</TD> <TD> <SELECT NAME="Tip"> <OPTION VALUE="ADMINISTRATOR" <% if Tip = "ADMINISTRATOR"E Then Response.Write "SELECTED"%>>Administrator <OPTION VALUE="VIZITATOR" <% if Tip = "VIZITATOR" ThenE Response.Write "SELECTED"%>>Vizitator <OPTION VALUE="UTILIZATOR" <% if Tip = "UTILIZATOR" ThenE Response.Write "SELECTED"%>>Utilizator </TD> </TR> <TR>

http://www.east.utcluj.ro/mb/mep/antal

<TD ALIGN="CENTER"> <INPUT TYPE="SUBMIT" VALUE="Trimite"></TD> Universitatea Tehnica din Cluj-Napoca <TD ALIGN="CENTER"> <INPUT TYPE="BUTTON" VALUE="Reset"E ONCLICK="Sterge()"></TD> Catedra Mecanica si Programare </TR> Conf. Dr. Ing. ANTAL Tiberiu Alexandru </TABLE> </FORM> </BODY>

Spre deosebire de primul caz, aici toate verificrile se fac pe client, iar transferul ctre server se face numai n cazul n care restrict iile impuse valorilor introduse sunt ndeplinite. Dezavantajul este acela c trebuie folosit puin JavaScript pentru ca s poat funciona corect. Funcia scris n JScript este:
function TestJS() { return TestVB(); }

Observai c nu face altceva dect ntoarce valoarea funciei TestVB care este scris n VBScript . n paragraful Transferul (submit) formularelor s-a prezentat modul de folosire a evenimentului de formular ONSUBMIT pentru anularea transferului ctre server. n condiii normale acestui eveniment i se asociaz o secven de cod n JScript, n exemplul aceasta fiind return(TestJS()); . Dac valoarea ntoars este True coninutul formularului este transferat ctre server. Altfel, transferul este suspendat i se afieaz mesaje cu privire la erorile ce trebuie corectate. ntruct aici se ateapt un True sau False generat din JScript a fost scris o funcie care ntoarce una dintre cele dou valori obligatorii. Observai c exist i o alt funcie nou numit Sterge care are rolul de a terge mesajele de eroare i coninuturile controalelor la apsarea butonului Reset din formular. Colecia Request.QueryString O metod de transfer a datelor ntre client i server este prin colecia Request.QueryString .

Obiecte server - 155

Aceste date se transfer mpreun cu cererea URL-ului sau, mai corect, ca o parte a acestuia dup cum s-a discutat deja n P|rile componente ale URL. n cazul URL-ului,
http://www.unsite.ro/Programe/default.htm?Pagina=1&Paragraf=2

avem doi parametri, care vor deveni dou articole ale coleciei Request.QueryString . Ei mai pot fi gsii i n variabila QUERY_STRING , dar ntr-o form mai puin accesibil. La trimiterea datelor n acest caz metoda de transfer trebuie s fie GET . Variabila REQUEST_METHOD poate fi folosit pentru a verifica metoda de transfer folosit. Motorul ASP este cel care, prin colecia Request.QueryString , analizeaz irul primit i l transform n perechi de tipul nume=valoare. Numele, n colecia Request.QueryString , devin chei. Pentru extragerea unui articol individual din colecie se poate folosi indicele sau numele cheii dup cum urmeaz:
Dim V V=Request.QueryString(1) V=Request.QueryString("Tip") ' primul articol din colectie ' aici Tip este numele cheii Each ...Next

Pentru parcurgerea ntregii colecii se va folosi For

dup cum urmeaz:

Dim V For Each V In Request.QueryString Response.Write V & "=" & Request.QueryString(V) Next

http://www.east.utcluj.ro/mb/mep/antal

Aplicaia care urmeaz are dou fiiere, aspre_tr1.asp i aspre_qst.asp . Codul celor dou Universitatea Tehnica din Cluj-Napoca fiiere se prezint n continuare. Catedra Mecanica si Programare Fiierul aspre_tr1.asp : Conf. Dr. Ing. ANTAL Tiberiu Alexandru
<HTML> <BODY> <FORM ACTION="asprq_qst.asp" METHOD="GET"> <H3>Introdu datele tale:</H3> <TABLE COLS="2" BORDER="2"> <TR> <TD>NUME:</TD> <TD> <INPUT TYPE="TEXT" NAME="Nume" SIZE="20"></TD> </TR> <TR> <TD>PRENUME:</TD> <TD> <INPUT TYPE="TEXT" NAME="Prenume" SIZE="20"></TD> </TR> <TR> <TD>Tipul de utilizator:</TD> <TD> <SELECT NAME="Tip"> <OPTION VALUE="ADMINISTRATOR">Administrator <OPTION VALUE="VIZITATOR">Vizitator <OPTION VALUE="UTILIZATOR">Utilizator </TD> </TR> <TR> <TD ALIGN="CENTER"> <INPUT TYPE="SUBMIT" VALUE="Trimite"></TD> <TD ALIGN="CENTER"> <INPUT TYPE="RESET" VALUE="Reset"></TD> </TR> </TABLE> </FORM>

156 - Obiecte server

</BODY> </HTML>

Figure 47 Fisierul asprq_tr1.asp

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru Fiierul aspre_qst.asp :
<%@ Language=VBScript %> <% Option Explicit %> <HTML> <HEAD> </HEAD> <BODY> <% Dim V If Request.ServerVariables("REQUEST_METHOD") = "GET" Then For Each V In Request.QueryString Response.Write V & "=" & Request.QueryString(V) & "<BR>" Next End If %> <HR> <% Response.Write "QUERY_STRING = " &E Request.ServerVariables("QUERY_STRING") & "<BR>" %> </BODY>

Datorit folosirii metodei de transfer URL-ul, devine:

GET

la apsarea butonului Trimite, afiat n Figura 47

http://localhost/CursASP/asprq_qst.asp?Nume=Anton&Prenume=Vasile+Ioan&Tip= E ADMINISTRATOR

Rezultatele sunt afiate n Figura 48.

Obiecte server - 157

Figure 48 Fisierul asprq_qst.asp

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Colecia Request.ServerVariables Conf. Dr. Ing. ANTAL Tiberiu Alexandru Colecia Request.ServerVariables conine informaii standard trimise automat de navigator la fiecare cerere. Aplicaia care urmeaz permite studiul acestora cu rezerva c lista este dependent de versiunea de IIS i, parial, de locul n care s-a navigat nainte cu navigatorul.
<%@ Language=VBScript %> <% Option Explicit %> <HTML> <HEAD> <TITLE>Lista de variabile Request.ServerVariables</TITLE> </HEAD> <BODY> <H3 ALIGN="CENTER">Lista de variabile Request.ServerVariables</H3> <TABLE WIDTH="90%" ALIGN="CENTER" BORDER="1" COLS="3"> <THEAD> <TR> <TH> </TH> <TH>Numele cheii</TH> <TH>Valoarea</TH> </TR> </THEAD> <TBODY> <% Dim Sv Dim c c=1 For Each Sv In Request.ServerVariables With Response .Write "<TR>" .Write "<TD>" .Write c & ")&nbsp;" .Write "</TD>" .Write "<TD>" .Write Sv

158 - Obiecte server

.Write .Write .Write .Write .Write End With c=c+1 Next %> </TBODY> </TABLE> </BODY> </HTML>

"</TD>" "<TD>" Request.ServerVariables(Sv) & "<BR>" "</TD>" "</TR>"

Lista de variabile din colecia Request.ServerVariables afiat de codul asp de mai sus este: Numele cheii Valoarea HTTP_ACCEPT:*/* HTTP_ACCEPT_LANGUAGE:en-us HTTP_CONNECTION:Keep-Alive HTTP_HOST:localhost HTTP_USER_AGENT:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) HTTP_COOKIE:ASPSESSIONIDQQQGQTMC=IHMBNHFD PPKMDGPGEDLEAMOC HTTP_ACCEPT_ENCODING:gzip, http://www.east.utcluj.ro/mb/mep/antal deflate Accept: */* Accept-Language: en-us Connection: Keep-Alive Universitatea Tehnica din Cluj-Napoca Host: localhost User-Agent: Mozilla/4.0 (compatible; MSIE Catedra Mecanica si 6.0; Windows NT 5.1)Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru Cookie:ASPSESSIONIDQQQGQTMC=IHMBNHFDPPKMD GPGEDLEAMOC Accept-Encoding: gzip, deflate /LM/W3SVC/1/Root/CursASP C:\CursASP\

ALL_HTTP

ALL_RAW

APPL_MD_PATH APPL_PHYSICAL_PATH AUTH_PASSWORD AUTH_TYPE AUTH_USER CERT_COOKIE CERT_FLAGS CERT_ISSUER CERT_KEYSIZE CERT_SECRETKEYSIZE CERT_SERIALNUMBER CERT_SERVER_ISSUER CERT_SERVER_SUBJECT CERT_SUBJECT CONTENT_LENGTH

Obiecte server - 159

Numele cheii
CONTENT_TYPE GATEWAY_INTERFACE HTTPS HTTPS_KEYSIZE HTTPS_SECRETKEYSIZE HTTPS_SERVER_ISSUER HTTPS_SERVER_SUBJECT INSTANCE_ID INSTANCE_META_PATH LOCAL_ADDR LOGON_USER PATH_INFO PATH_TRANSLATED QUERY_STRING REMOTE_ADDR REMOTE_HOST REMOTE_USER REQUEST_METHOD SCRIPT_NAME SERVER_NAME SERVER_PORT SERVER_PORT_SECURE SERVER_PROTOCOL SERVER_SOFTWARE URL HTTP_ACCEPT HTTP_ACCEPT_LANGUAGE HTTP_CONNECTION HTTP_HOST HTTP_USER_AGENT

Valoarea

CGI/1.1 off

1 /LM/W3SVC/1 127.0.0.1

/cursasp/asprq1.asp http://www.east.utcluj.ro/mb/mep/antal C:\CursASP\asprq1.asp Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru 127.0.0.1 127.0.0.1

GET /cursaspasprq1.asp localhost 80 0 HTTP/1.1 Microsoft-IIS/5.1 /cursasp/asprq1.asp */* en-us Keep-Alive localhost Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)

160 - Obiecte server

Numele cheii
HTTP_COOKIE HTTP_ACCEPT_ENCODING

Valoarea ASPSESSIONIDQQQGQTMC=IHMBNHFDPPKMDGPGED LEAMOC gzip, deflate

n funcie de tipul de aplicaie care se scrie, unele dintre ele pot s fie utile. Cteva dintre cele pe care le-am folosit n aplicaii le descriu n tabelul urmtor: Cheie
APPL_PHYSICAL_PATH

Descriere Calea ctre aplicaia rulat, nu include numele aplicaiei. Valoarea se utilizeaz pentru ascunderea locului n care este stocat aplicaia. Adresa IP a server-ului pe care se ine aplicaia. Numele de utilizator de reea al navigatorului care cere resursa (numai dac opiunea de securitate IIS Allow Anonymous este inactiv). Calea fizic spre fiierul cerut. Util http://www.east.utcluj.ro/mb/mep/antal dac se face redirectare, ns trebuie s se cunoasc numele iniial al fiierului care a fost cerut. Universitatea Tehnica din Cluj-Napoca Numele server-uluisi Programare Catedra Mecanica cerut de utilizator. Conf. Dr. Ing. ANTALpentru server-e HTTP este, tipic, 80. Adresa de port IP, Tiberiu Alexandru

LOCAL_ADDR

LOGON_USER

PATH_INFO

SERVER_NAME SERVER_PORT

Obiectul Application Terminologie # Sistem de operare (SO) - un pachet de programe de nivel jos care planific sarcinile (task -urile), aloc spaiul de stocare, realizeaz interfaarea cu perifericele i prezint o interfa implicit fiecrui utilizator atunci cnd nu se ruleaz un program aplicaie. SO este deseori divizat n: nucleu (kernel - responsabil cu alocarea resurselor, interfaarea hardware de nivel jos, securitate etc.) care este ntotdeauna prezent i programe de sistem care folosesc faciliti ale nucleului pentru realizarea unor sarcini de ntreinere la un nivel mai nalt. Unele SO au interfee grafice cu utilizatorul i un sistem de ferestre, altele nu au aceste posibiliti. Facilitile sistemului de operare i filozofia lui general de proiectare au o influena puternic asupra stilului de programare i a culturilor tehnice care se dezvolt n legtur cu mainile pe care acesta este rulat. # Job - Denumire generic dat tuturor activitilor implicate n realizarea unui proiect, de la nceput pn la sfrit, pe calculator. Un job poate include mai multe procese i programe. n zilele de azi termenul este nvechit el fiind legat de vremurile cnd un job putea fi definit printr-un fiier de comenzi ce coninea linii de program surs intercalate cu instruciuni pentru controlul job-urilor n vederea parcurgerii unor multitudini de faze cum sunt compilarea, legarea, rularea i tiprirea. # Multitasking (alte denumiri: multi-processing, multiprogramming, concuren) - o tehnic folosit de SO pentru partajarea unui singur procesor ntre mai multe job-uri independente. Un SO multitasking trebuie s aib un oarecare mod de protecie a unui task fa de un altul. Astfel, un task nu poate interaciona ntr-un mod accidental sau neateptat cu un altul, n vederea modificrii unor zone de memorie care nu-i aparin. Job-

Obiecte server - 161

urile ntr-un SO multitasking pot aparine unuia sau mai multor utilizatori (multiuser). O variant de multitasking mai simpl i cu mai puine restricii ntre taskuri este multithreading-ul. Session (sesiune )- intervalul de timp n care un utilizator interacioneaz continuu cu o aplicaie.

Din punctul de vedere al Web server-ului fiecare director virtual se consider o aplicaie. n ASP, fiecare aplicaie se va referi prin obiectul Application . Obiectul este folosit pentru manipularea informaiilor care trebuie accesate de ctre toi utilizatorii unei aplicaii. El este instaniat atunci cnd primul utilizator viziteaz directorul virtual din momentul pornirii Web server-ului. Obiectul poate fi folosit de ctre toi utilizatorii care viziteaz site-ul i rmne funcional pn cnd toate sesiunile de lucru ale utilizatorilor expir sau pn la oprirea Web server-ului. El stocheaz perechi cheie=valoare la fel cu o parte dintre obiectele deja discutate, cu marea diferen c toi utilizatorii unui site vor manipula acelai obiect Application , n timp ce toate celelalte colecii sunt specifice unui anumit utilizator, fiind create de motorul ASP pentru o singur tranzacie sau sesiune de lucru. Deoarece toate sesiunile ASP partajeaz acelai obiect Application programatorul trebuie s fie familiarizat cu problemele poteniale caracteristice partajrii datelor ntr-un mediu multiuser. Deseori, Web server-ele trebuie s trateze cereri simultane, venite de la mai muli utilizatori. Pentru urmrirea i rezolvarea acestor cereri Web server-ul le stocheaz ntr-o coad (queue ). O http://www.east.utcluj.ro/mb/mep/antal coad este o list n care un articol nou se adaug la un capt, iar un articol se extrage de la cellat capt. IIS stocheaz task-urile ntr-o coad, apoi ncepe prelucrarea lor, dar nu trece la un task nou Universitatea Tehnica din Cluj-Napoca dect dup ce-l termina pe cel curent. IIS face multitasking cu divizarea n timp a duratei de lucru Catedra Mecanica si Programare a procesorului. Numrul de task-uri simultane pe care le poate prelucra depinde de numrul de Conf. Dr. Ing. ANTAL Tiberiu Alexandru thread-uri atribuite IIS-ului. Un thread este un singur task, dar un program poate folosi un singur thread sau mai multe n timpul execuiei lui. Atunci cnd se creeaz mai multe thread-uri, calculatorul trebuie s poat comuta ntre ele. n acest scop el trebuie s salveze i s refac setarea fiecrui task pe msur ce realizeaza comutarea. Procedura de salvare i refacere a strii unui task este consumatoare de timp, ncrcarea procesorului crescnd odat cu creterea numrului de task-uri, n timp ce perioada pentru execuia unui task rmne constanta. n acest fel timpul de calcul, partea activ a task-urilor, scade. Din acest punct de vedere, IIS ncearc s stabileasc un echilibru optim ntre timpul de execuie rapid a unei cereri i durata de prelucrare a mai multor cereri. Variabile ale aplicaiei - Application ntr-o aplicaie clasic, variabilele globale sunt acelea care pot fi accesate i modificate din orice poriune de cod. Obiectul Application permite stocarea unor variabile globale aplicaiei ce vor putea fi accesate din orice pagin a aplicaie i de ctre oricare utilizator al acesteia. Variabilele globale se prezint sub forma unei liste de articole, cu nume stocate n colecia Contents . Pentru adugarea unui articol nou n list se folosete sintaxa:
Application.Value("cheie")="valoare"

Deoarece proprietatea Value este cea implicit n locul liniei de mai sus se poate scrie:
Application("cheie")="valoare"

Extragerea unei valori stocate n list se face prin:


Variabila = Application.Contents("cheie")

162 - Obiecte server

sau prin:
Variabila = Application.Value("cheie")

La fel ca i n cazul celorlalte colecii valorile pot fi accesate i prin index:


Variabila = Application.Contents(1) Variabila = Application.Value(1)

Pentru tergerea valorii unui articol din list pot fi folosite urmtoarele variante:
Application.Contents("cheie")="" Application.Value("cheie")=Empty Application.Value("cheie")=vbNullString
NOTA

S -tergerea articolelor functioneaz corect numai ncepnd cu ASP 3 desi, Microsoft, n a documentatia MSDN, care vine pentru Visual Studio 6 sustine c aceasta este posibil a a si n versiunile anterioare (din cele scrise acolo nu functioneaz metodele Remove si a RemoveAll ale colectiei Contents). -

Pentru afiarea tuturor articolelor din colecia Contents se poate folosi secvena de cod: http://www.east.utcluj.ro/mb/mep/antal
For i=1 to Application.Contents.Count Universitatea Tehnica din Cluj-Napoca Response.Write Application.Contents(i) & "<BR>" Catedra Mecanica si Programare Next

Conf. Dr. Ing. ANTAL Tiberiu Alexandru

n exemplul care urmeaz se prezint modul n care se pot crea i inializa un grup de articole ale coleciei Contents din Application . n pagina aspapp1.asp se realizeaz crearea dinamic a apte variabile globale care vor fi accesibile pentru orice pagin a aplicaiei i pentru toi utilizatorii acestora. Apoi, valorile acestor variabile vor fi incrementate i n final, afiate. Tehnica de incrementare prezentat este des folosit pentru a numra utilizatorii care s-au legat la o aplicaie. Dup lansarea primei pagini, se va lansa i pagina aspapp2.asp . Observai c aceasta va cunoate toate variabilele globale create n prima pagin i va afia valorile lor actualizate conform ultimelor modificri aduse n prima pagin. Fiierul aspapp1.asp :
<%@ Language=VBScript %> <% Option Explicit %> <HTML> <HEAD> </HEAD> <BODY> <% Dim i For i=1 to 7 Application("Cheie"&i)=i 'Valoarea cheii Next Response.Write "<P>Valorile dupa initializare:<BR>" For i=1 to Application.Contents.Count Response.Write Application.Contents(i) & "<BR>" Next For i=1 to Application.Contents.Count

Obiecte server - 163

Application.Contents(i) = Application.Contents(i) + 1 Next Response.Write "<P>Valorile dupa modificare:<BR>" For i=1 to Application.Contents.Count Response.Write Application.Contents(i) & "<BR>" Next Application.Contents("Cheie3")="" Application.Contents("Cheie5")=Empty Response.Write "<P>Valorile dupa a doua modificare:<BR>" For i=1 to Application.Contents.Count Response.Write Application.Contents(i) & "<BR>" Next %> </BODY> </HTML>

Fiierul aspapp2.asp :
<%@ Language=VBScript %> <% Option Explicit %> <HTML> <HEAD> </HEAD> <BODY> <% http://www.east.utcluj.ro/mb/mep/antal Dim i Response.Write "<P>Valorile aplicatiei intr-o noua pagina<BR>" Universitatea Tehnica din Cluj-Napoca For i=1 to Application.Contents.Count Catedra Mecanica si Programare Response.Write Application.Contents(i) & "<BR>" Next Conf. Dr. Ing. ANTAL Tiberiu Alexandru %> </BODY> </HTML>

Metodele Application.Lock i Application.Unlock Fiecare aplicaie IIS are un singur obiect Application care este partajat ntre toi utilizatorii. Orice sesiune de lucru a utilizatorului cu aplicaia poate accesa valorile obiectului Application , dar este de dorit ca numai o singur sesiune s poat modifica valorile la un moment dat. Din acest motiv obiectul Application poate fi blocat (lock ) nainte de adugarea sau modificarea unei valori, apoi deblocat (unlock ) dup ce s-au terminat modificrile dorite. n lipsa blocrii obiectului Application este posibil ca mai muli utilizatori, prin script-urile paginilor ncrcate, s ncerce modificarea simultan a unor valori stocate n el. Aceast ncercare va genera erori. Implicit, dac se uit deblocarea, la terminarea paginii aceasta ar trebui s se fac automat. Dac un script ncearc s acceseze obiectul Application i el este blocat de un alt proces, va atepta pn cnd obiectul Application va fi deblocat. Dac script-ul nu poate accesa obiectul Application mai mult timp, dup o perioad de ateptare, motorul ASP va genera un cod de eroare. Secvena de cod care urmeaz permite blocarea i deblocarea obiectul Application :
Application.Lock Application("cheie")=valoare Application.Unlock

Aplicaia aspapp3.asp , ce va fi prezentat n continuare, realizeaz contorizarea numrului deschiderilor paginii. n Figura 49, se observ c pagina (aplicaia) este deschis, local, de cinci ori, n fiecare frereastr fiind afiat numrul deschiderilor curente.

164 - Obiecte server

Figure 49 Contorizarea numarului deschiderilor aplicat iei aspapp3.asp

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Language=VBScript Conf. Dr. Ing. ANTAL Tiberiu Alexandru %>

<%@ <% Option Explicit %> <HTML> <HEAD> </HEAD> <BODY> <% Dim contViz Application.Lock Application("Contor") = Application("Contor") + 1 contViz = Application("Contor") Application.Unlock Response.Write "Aceasta pagina a fost vizitata de " & contViz & " ori." %> </BODY> </HTML>

Obiectul Session Unul dintre cele mai importante obiecte ASP este Session . ASP realizeaz meninerea strii unui anumit utilizator, iar obiectul Session va rmne vizibil tot timpul sesiunii utilizatorului. El stocheaz valori asociate unui navigator, obiectul Session este asemenea celui Application cu excepia c o singur sesiune are accesul exclusiv la acesta. Dac la un moment dat sunt 100 de utilizatori pe o pagin, vor exista 100 de obiecte Session , distincte, care ruleaz. Obiectul Session permite crearea unor proprieti globale personale unui anumit utilizator care vor putea fi folosite numai de acel utilizator. Astfel, apare posibilitatea crerii unor pagini HTML individualizate n mod dinamic, acesta fiind unul dintre motivele pentru care a fost creat ASP. Un nou obiect Session este creat de fiecare dat cnd un nou utilizator viziteaz site-ul de Web i este distrus atunci cnd el prsete site-ul sau dac apare inactivitate cu durat de timp mai mare dect cea setat n proprietatea de expirare a obiectului Session . O sesiune ASP este specific unui cookie dat. Relaia produce puin confuzie deoarece un cookie i un navigator sunt

Obiecte server - 165

entiti distincte. Trebuie reinut c motorul ASP identific sesiunile prin cutarea cookie-ului ASPSESSIONID. Ca urmare a modului de identificare a sesiunilor folosit de motorul ASP pot s apar probleme n cazul n care navigatorul este setat s refuze cookie-urile. Fazele unei sesiuni nceputul sesiunii O sesiune ASP ncepe atunci cnd navigatorul cere o pagin ASP stocat ntr-un director virtual (care este o aplicaie IIS). Nu conteaz care pagin a directorului virtual este cerut, tot ceea ce conteaz este ca aceasta s fie o pagin cu extensia ASP, stocat direct n directorul virtual sau ntr-un subdirector. Server-ul redirecteaz imediat utilizatorul ctre fiierul cu numele global.asa , genereaz antetul de cookie i ruleaz codul corespunztor (dac exist) evenimentului Session_OnStart din acest fiier. Cheia de cookie este de forma ASPSESSIONIDXXXXXXXX , iar valoarea ei este o serie ncriptat de litere i cifre pseudo-aleatoare. Un exemplu ar fi :
ASPSESSIONIDQQQGQTMC=IHMBNHFDPPKMDGPGEDLEAMOC

Identificarea sesiunii Tranzaciile HTTP nu pstreaz starea. Acesta este motivul pentru care server-ul asociaz fiecrui navigator un cod de identificare unic n rspunsul la prima cerere formulat de navigator. Datorit lui navigatorul se poate identifica pe server, n cazul cererilor ulteriore. Deci, fiecare navigator primete un cookie SessionID cu o valoare corespunztoare. Orice informaie stocat pe server http://www.east.utcluj.ro/mb/mep/antal legat de un anumit navigator va conine i o copie a valorii lui SessionID . Cnd navigatorul cere o nou pagin, server-ul vaUniversitatea Tehnica dinde navigator mai repede pe baza valorii gsi informaiile legate Cluj-Napoca SessionID deja stocate. Fiecare valoareMecanica si Programare Catedra a cookie-ului de indentificare este unic ntre dou opriri ale IIS-ului. Dac navigatorul accept cookie-ul, Tiberiu Alexandru cererilor ulterioare ale Conf. Dr. Ing. ANTAL el va fi trimis tuturor acelui site. Motorul ASP stocheaz lista cookie-urilor. Cnd navigatorul trimite cookie-ul ASPSESSIONID , motorul ASP caut valoarea corespunztore din list. Dac aceasta exist, motorul poate asocia un obiect Session existent unui navigator prin cutare n lista obiectelor Session . Deci, motivul pentru care cookie-ul SessionID este att de important const n indentificarea, de ctre server, a navigatorului, n vederea stocrii i extragerii unor valori specifice navigatorului. n lipsa lui, navigatorul rmne necunoscut i nu va putea fi identificat n cazul unei vizite ulterioare. Astfel, server-ul nu va putea extrage valorile specifice acelui navigator. Terminarea sesiunii Terminarea unei sesiuni se poate realiza n urmtoarele feluri: # Server-ul abandoneaz sesiunea dup scurgerea unui interval de timp de inactivitate. Durata intervalului se poate defini prin proprietatea Session.Timeout . # n codul ASP s-a ajuns la metoda Session.Abandon . # IIS a fost oprit, motiv pentru care toate aplicaiile i sesiunile corespunztoare se opresc i ele. # S-a modificat fiierul global.asa . Dup salvarea lui, urmtoarea cerere adresat server-ului va fora IIS s opreasc aplicaia, motiv pentru care toate sesiunile vor fi nchise i ele. # Navigatorul refuz cookie-ul SessionID . Toate navigatoarele permit alegerea acestei variante. Activarea ei ns nu oprete server-ul din crearea unei noi sesiuni (asta pentru c server-ul nu are de unde s tie, n avans, c navigatorul refuz cookie-urile), ns va opri sesiunea s continue dup prima cerere.

166 - Obiecte server

Proprietatea Session.TimeOut Atunci cnd server-ul creeaz cookie-ul SessionID , el mai creeaz i i asociaz i o durat de existen. Implicit, aceast durat este de 10 minute pe IIS 5. Se poate ns specifica i o alt valoare folosind proprietatea Session.TimeOut . Valoarea stocat, sau cea implicit, descrete pn la 0, moment n care sesiunea este terminat de ASP, toate informaiile specifice ei fiind pierdute. Motorul ASP reseteaz durata de existen de fiecare dat cnd primete o cerere de pagin din partea navigatorului cu un anumit SessionID . Din acest motiv, att timp ct navigatorul cere pagini noi, sesiunea va rmne activ. Scopul proprietii este cel de protejare a server-ului contra stocrii unor date asociate unui navigator pe o durat prea mare. Ideal ar fi ca server-ul s tie de undeva c sesiunea s-a terminat, dar din cauza c HTTP nu permite stocarea strilor, acest lucru nu se poate ntmpla. Un caz nefericit apare atunci cnd, ca urmarea a unei valori setate n Session.TimeOut , cookieul SessionID expir, dar navigatorul continu s-i mai stocheze valoarea. n acest caz SessionID -ul avut de navigator nu mai este valid i toate datele asociate sesiunii nu mai exist. ASP va permite ca navigatorul s pstreze aceeai valoare de cookie SessionID , dar aceasta va fi asociat unui nou obiect Session . Metoda Session.Abandon Metoda permite controlul parial al utilizatorului asupra sesiunii de lucru cu aplicaia. n general, ea se va pune pe unul dintre http://www.east.utcluj.ro/mb/mep/antalcnd utilizatorul face clic pe butoanele de prsire a sesiunii. Atunci buton sesiunea va fi terminat. Terminarea nu este instantanee, ci este ntrziat, avnd loc numai Universitatea Tehnica din Cluj-Napoca dup prelucrarea paginii curente i a instruciunilor din metoda Session_OnEnd a fiierului Catedra Mecanica si Programare global.asa . Conf. Dr. Ing. ANTAL Tiberiu Alexandru Fiierul global.asa Fiierul global.asa are o utilizarea special n ASP. El trebuie s fie plasat n radcina directorului virtual i gestioneaz evenimentele obiectelor Application i Session . El mai poate fi utilizat pentru crearea de variabile Application i Session . Obiectele Application i Session au evenimente declanate de fazele de pornire i de terminare a lor. Motorul ASP va rula secvenele de cod corespunztoare evenimentelor din tabelul urmtor: Momentul n care apare Pornirea aplicaiei Pornirea sesiunii Terminarea sesiunii Terminarea aplicaiei Denumire eveniment
Application_OnStart Session_OnStart Session_OnEnd Application_OnEnd

Codul corespunztor celor patru evenimente se scrie n procedurile corespunztoare de tratare a evenimentelor. Nu este obligatorie scrierea de cod pentru aceste evenimente. Toate secvenele de cod script trebuie ns s fie cuprinse ntre marcajele <SCRIPT LANGUAGE=VBScript RUNAT=Server> </SCRIPT> . n afara tratrii acestor evenimente, global.asa , mai poate conine definiii de obiecte statice, prin folosirea marcajului <OBJECT> </OBJECT> , la nivelul obiectului Application , Session sau la nivel de bibliotec de tipuri. O bibliotec de tipuri (Type Library ) este un fiier care conine o list de proprieti i de metode. ASP folosete bibliotecile de tipuri pentru a forma lista numelor de metode, proprieti i tipuri de parametri la care un obiect tie s rspund. VB i Visual InterDev folosesc aceste informaii de Intellisense la

Obiecte server - 167

afiarea listei pentru completarea automat a codului. Motorul ASP parcurge etapele de iniializare pentru aplicaie i sesiunile de lucru dup cum urmeaz: # Primul utilizator care dorete s acceseze o pagin a directorului virtual face ca motorul ASP s gseasc fiierul global.asa n directorul rdcin al aplicaiei. Server-ul va parcurge aceleai etape indiferent dac fiierul global.asa exist sau nu. # Imediat dup aceasta se creeaz obiectul Application , iar ASP lanseaz procedura Application_OnStart (dac aceasta exist). # Dup terminarea evenimentului Application_OnStart , motorul ASP creeaz un nou SessionID , scrie antetul de cookie SessionID , apoi creeaz un nou obiect Session i pornete cronometrul de expirare pe baza valorii din Session.Timeout . # Imediat dup crearea noului obiect Session , este apelat procedura de tratare a evenimentului Session_OnStart (dac aceasta exist). # La expirarea sesiunii, sau la apelarea metodei Session.Abandon , motorul ASP apeleaz procedura de tratare a evenimentului Session_OnEnd (dac aceasta exist), apoi distruge obiectul Session . # Dup ce motorul ASP distruge ultimul obiect Session, el apeleaz procedura de tratare a evenimentului Application_OnEnd (dac aceasta exist). http://www.east.utcluj.ro/mb/mep/antal Fiierul mai poate fi folosit pentru iniializarea variabilelor globale i pentru colectarea de Universitatea Tehnica din Cluj-Napoca meta-informaii cu privire la aplicaie. Nu este obligatorie iniializarea variabilelor globale n Catedra Mecanica si Programare global.asa , aceasta putndu-se face i de pe prima pagin a aplicaiei. Conf. Dr. Ing. ANTAL Tiberiu Alexandru Una dintre utilizrile curente ale fiierului global.asa este iniializarea irului de conectare la o baza de date, deoarece administratorul server-ului poate modifica numele sau locul de stocare al bazei de date. nscrierea acestora n cod oblig ca, la fiecare aciune de acest fel din partea administratorului, s modificm anumite poriuni i ale codului ASP. ntreinerea paginii devine mai greoaie din acest motiv. Dac acest ir este stocat n global.asa eventualele modificri trebuie operate numai asupra acestui fiier. O aplicaie format din fiierele global.asa i aspses1.asp se prezint n continuare. Scopul ei este de a prezenta modalitatea de contorizare a vizitatorilor unui site i de a arta modul de lucru cu obiectele Application i Session . Fiierul global.asa :
<SCRIPT LANGUAGE=VBScript RUNAT=Server> '*** Uneori acest fisier va trebui modificat *** 'contVizit - variabila globala care contorizeaza nr. de utilizatori 'startApp - variabila globala care tine data si ora pornirii aplicatiei 'startVizit - variabila locala care tine data si ora pornirii sesiunii </SCRIPT> <SCRIPT LANGUAGE=VBScript RUNAT=Server> Sub Application_OnStart Application("contVizit")=1 Application("startApp") = Now End Sub Sub Session_OnStart Session("startVizit") = Now End Sub

168 - Obiecte server

Sub Session_OnEnd If Application("contVizit") > 0 Then Application.Lock Application("contVizit") = Application("contVizit") + 1 Application.Unlock End If End Sub </SCRIPT>

Fiierul aspses1.asp :
<%@ Language=VBScript %> <% Response.Expires = -1%> <HTML> <HEAD> </HEAD> <BODY> <H3>Exemplu de lucru cu obiectul Session</H3> <P> <% Response.write "Valoarea lui SessionID este: " & Session.SessionID & "<BR>" Response.write "Numarul de vizitatori este: " & Application("contVizit") & "<BR>" Response.write "Data si ora de incepere a sesiunii este: " & Session("startVizit") & "<BR>" Response.write "iar cea de pornire a aplicatiei este: " & Application("startApp") & "<BR>" http://www.east.utcluj.ro/mb/mep/antal Session.Abandon %> </P> Universitatea Tehnica din Cluj-Napoca <P>Sesiunea a fost abandonata.<BR> Catedra Mecanica si Programare La fiecare F5 primele trei valori se vor modifica.<BR> Conf. Dr. Ing. ANTAL Tiberiu Alexandru </BODY> </HTML>

Figure 50 Aplicat ie cu obiectul Session

Obiecte server - 169

Rezultatele sunt afiate n Figura 50, la fiecare apsare a tastei F5 care duce la remprosptarea coninutului paginii. Primele trei valori se vor modifica. Este posibil ca prima valoare s nu se modifice dac motorul ASP recunoate c navigatorul are un ASPSESSIONID valid, dar neutilizat, atunci cnd se remprospteaz pagina. Observai c Session.Abandon nu duce la abandonarea imediat a sesiunii deoarece textul care urmeaz dup metod este afiat corect n fereastra navigatorului. Dac, de exemplu, n locul contorizrii numrului de vizitatori dorim s aflm numrul sesiunilor active variabila contVizit va trebui s participe n Session_OnStart i Session_OnEnd dup cum urmeaz:
Sub Session_OnStart If Application("contVizit") > 0 Then Application.Lock Application("contVizit") = Application("contVizit") + 1 Application.Unlock End If End Sub Sub Session_OnEnd Application("contVizit") = Application("contVizit") - 1 End Sub

http://www.east.utcluj.ro/mb/mep/antal Obiectul Server Obiectul Server permite accesul la server-ul ASP. Prin folosirea metodelor i proprietilor lui Universitatea Tehnica din Cluj-Napoca se pot crea obiecte, se pot rula secvene de cod din alte fiiere ASP, se poate transforma calea Catedra Mecanica si Programare virtual n cea fizic i redirecta la nivelul server-ului. Conf. Dr. Ing. ANTAL Tiberiu Alexandru Proprietatea Server.ScriptTimeOut Furnizorii de Internet permit rularea script-urilor pe server-ele lor deoarece acestea pot fi rulate, implicit, numai un timp de 90 de secunde. Motorul ASP are o proprietate prin care se controleaz durata de rulare a unui script. Proprietatea poate fi setat separat pentru fiecare pagin prin Server.ScriptTimeout = durata , unde durata este specificat n secunde. O valoare normal este 20 de secunde, dar dac server-ul are un trafic mai mare, se poate ca cele 20 de secunde s nu fie suficiente pentru generarea unui rspuns mai complex. Metoda Server.HTMLEncode Exist secvene de caractere care au semnificaie special (>, <, " etc.) pentru navigator. Pentru afiarea lor corect de ctre navigator se poate folosi metoda Server.HTMLEncode dup cum se observ n exemplul urmtor:
<%@ Language=VBScript %> <HTML> <BODY> Exemplu de lucru cu "Server.HTMLEncode("<cod>")"<BR> Exemplu de lucru cu &quot;Server.HTMLEncode(&quot;&lt;cod&gt;&quot;)&quot;<BR> <%=Server.HTMLEncode("""Server.HTMLEncode(""<cod>"")""")%><BR> </BODY>

n codul de mai sus prima afiare a liniei "Server.HTMLEncode("<cod>")" este greit, urmeaz apoi dou variante corecte. Pentru nelegerea codului de mai sus trebuie s v amintii c <%= este scrierea prescurtat a lui Reponse.Write .

170 - Obiecte server

Metoda Server.URLEncode tii deja c folosirea metodei GET face ca datele s fie incluse n URL, apoi acestea pot fi extrase prin folosirea coleciei Request.QueryString . Codificarea din URL nu este ns aceeai cu cea din HTML. Pentru formarea unui URL corect, n VBScript, se poate folosi metoda Server.URLEncode . Ea primete ca argument un ir VBScript normal pe care l codific n formatul specific unui URL. Fie URL-ul:
http://localhost/CursASP/asprq_qst.asp?Nume=Vasile&Prenume=Anton+Ioan&Telef on=112233&Tip=ADMINISTRATOR

S presupunem c folosim codul urmtor ca s afim URL-ul de mai sus pe ecranul navigatorului folosind codificarea HTML, apoi pe cea URL.
<%@ Language=VBScript %> <HTML> http://localhost/CursASP/asprq_qst.asp?Nume=Vasile&Prenume=Anton+Ioan&E Telefon=112233&Tip=ADMINISTRATOR<BR> <%=Server.URLEncode("http://localhost/CursASP/asprq_qst.asp?Nume=Vasile&E Prenume=Anton+Ioan&Telefon=112233&Tip=ADMINISTRATOR")%> </BODY>

n cazul codificrii HTML irul afiat este "normal", dar n cazul codificarii URL se obine: http://www.east.utcluj.ro/mb/mep/antal

http%3A%2F%2Flocalhost%2FCursASP%2Fasprq%5Fqst%2Easp%3FNume%3DVasile%26Pren ume%3DAnton%2BIoan%26Telefon%3D112233%26Tip%3DADMINISTRATOR

Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Metoda HTMLEncode se folosete atunci cnd dorim s afim n navigator simboluri pe care Conf. Dr. Ing. ANTAL Tiberiu Alexandru acesta le folosete n alte scopuri. Metoda URLEncode se folosete atunci cnd dorim s scriem n navigator date QueryString , de exemplu, pentru toate hiperlegturile (marcajul HREF ) care conin caractere diferite de cifre, numere i simboluri standard QueryString (? , & sau + ). Deci, un ir care conine spaii trebuie obligatoriu codificat. Metoda Server.CreateObject Una dintre facilitaile cele mai interesante ale ASP este posibilitatea de extindere. Metoda CreateObject permite lansarea n execuie a unui obiect COM. Microsoft furnizeaz motorul ASP cu mai multe obiecte ce pot fi utilizate n aplicaii, dar programatorul poate crea i propriile lui obiecte n limbajele VB, VBScript sau JScript. Sintaxa metodei este:
Server.CreateObject(NumeProiect.NumeClasa)

Aici, NumeProiect.NumeClasa se va nlocui cu numele corespuztor de proiect i cel de clas al obiectului ce se dorete a fi creat. Iat un exemplu de lucru cu componenta Browser Capabilities . Ea creeaz un obiect BrowserType care permite script-urilor s acceseze posibilitile navigatorului client. Atunci cnd navigatorul se leag la Web server trimite automat i antetul HTTP al agentului utilizator care conine un ir ASCII de identificare a navigatorului i a versiunii lui.
<% htmlHttpUserAgent = Request.ServerVariables("HTTP_USER_AGENT") Response.Write htmlHttpUserAgent Response.Write "<BR>" Response.Write "<BR>"

Obiecte server - 171

Set ServerulMeu= Server.CreateObject("MSWC.BrowserType") If (InStr(htmlHttpUserAgent, "MSIE 6")) Then Session("Navigator") = "IE 6" ElseIf (InStr(CStr(htmlHttpUserAgent), "Mozilla/3.0")) Then Session("Navigator") = "Netscape" ElseIf (InStr(CStr(htmlHttpUserAgent), "Mozilla/4.0")) Then Session("Navigator") = "Netscape" Else Response.Write "Navigator necunoscut<BR>" Session("Navigator") = ServerulMeu.Navigator End If If (InStr(htmlHttpUserAgent, "6")) Then Session("Versiune") = "6" ElseIf (InStr(CStr(htmlHttpUserAgent), "6.0")) Then Session("Navigator") = "6.0" Else Response.Write "Versiune necunoscuta<BR>" Session("Navigator") = ServerulMeu.Version End If

If (InStr(CStr(htmlHttpUserAgent), "Windows 95")) Then Session("Platforma") = "Win95" ElseIf (InStr(htmlHttpUserAgent, "Windows 98")) Then Session("Platforma") = "Win98" ElseIf (InStr(htmlHttpUserAgent, "Win98")) Then Session("Platforma") = "Win98" http://www.east.utcluj.ro/mb/mep/antal ElseIf (InStr(htmlHttpUserAgent, "Windows NT")) Then Session("Platforma") = "WinNT" Universitatea Tehnica din Cluj-Napoca ElseIf (InStr(htmlHttpUserAgent, "Win32")) Then Session("Platforma") = "Win32" Catedra Mecanica si Programare ElseIf (InStr(htmlHttpUserAgent, ANTAL Tiberiu Alexandru Conf. Dr. Ing. "Windows 3.1")) Then Session("Platforma") = "Win16" ElseIf (InStr(htmlHttpUserAgent, "Mac_PowerPC")) Then Session("Platforma") = "MacPPC" ElseIf (InStr(htmlHttpUserAgent, "Mac_68000")) Then Session("Platforma") = "Mac68K" Else Response.Write "Platforma necunoscuta<BR>" Session("Platforma") = ServerulMeu.Platform End If Response.Write "Navigator = " & Session("Navigator") & "<BR>" Response.Write "Versiune = " & Session("Versiune") & "<BR>" Response.Write "Sistem de operare = " & Session("Platforma") Set ServerulMeu = Nothing %>

Directiva include Codul stocat n componente este ntr-un format executabil. Cel puin n faza de testare este convenabil ca el s fie stocat, n format text ASCII, n fiiere ASP distincte, pentru ca s poat fi modificat ct mai uor. Codul unui astfel de fiier poate fi inclus ntr-o aplicaie ASP prin folosirea directivei include . Fiierul inclus poate conine funcii cu caracter general care vor fi apelate din anumite locuri n aplicaie sau secvene de cod care genereaz prile fixe ale unui document ASP (de exemplu, un antet sau un sfrit de document). Aplicaia care urmeaz este format din fiierele aspinc.asp , aspinc1.asp , aspinc2.asp , iar rezultatele rulrii lui aspinc.asp se prezint n Figura 51. Fiierul aspinc1.asp genereaz un antet, iar aspinc2.asp conine funcii de uz general pentru aplicaie.

172 - Obiecte server

Figure 51 Aplicat ie cu directiva include

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

Fiierul aspinc.asp :

<%@ LANGUAGE=VBScript %> <HTML> <HEAD> </HEAD> <BODY> <!-- #include file="aspinc2.asp" --> <BR> <P> Fisierul aspinc.asp are inclus fisierul aspinc2.asp, iar<BR> fisierul aspin2.asp are inclus fisierul aspinc1.asp.<BR> </P </BODY> </HTML>

Fiierul aspinc1.asp :
<% 'Functii de uz general pentru data si ora curenta 'c - caracterul de separare Function Data(c) Data = Day(Now()) & c & Month(Now()) & c & Year(Now()) End Function Function Ora(c) Ora = Hour(Now()) & c & Minute(Now()) & c & Second(Now()) End Function %>

Obiecte server - 173

Fiierul aspinc2.asp :
<!-- #include file="aspinc1.asp" --> <TABLE ALIGN="CENTER" STYLE="POSITION:RELATIVE;TOP:1" BGCOLOR="#00DD00"E WIDTH="100%"> <TR> <TD WIDTH = 50%> Firma lui cui. </TD> <TD ALIGN="RIGHT"> Ora = <%=Ora(":")%>, Data = <%=Data("-")%> </TD> </TR> </TABLE>

Forma general a directivei este:


<!-- #include TipCale="NumeFisier" -->

unde TipCale poate fi FILE sau VIRTUAL . FILE se folosete pentru o cale absolut, iar VIRTUAL pentru directoarele virtuale ale server-ului. Metoda Server.Execute O variant prin care directiva include poate fi evitat este Server.Execute . Metoda permite http://www.east.utcluj.ro/mb/mep/antal execuia unui cod stocat n fiier ASP dup sintaxa: Universitatea Tehnica din Cluj-Napoca Server.Execute "fisier.asp" Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru Codul din fisier.asp are acces la toate obiectele ASP intrinseci i la toate obiectele instaniate n pagina care conine metoda de execuie a lui fisier.asp . n cazul codului anterior se poate folosi n locul lui <!-- #include file="aspinc2.asp" --> linia Server.Execute "aspinc2.asp" . n principiu, comparativ cu include , metoda Server.Execute , este mai flexibil i lucreaz mai bine cu tranzaciile. Metoda Server.Transfer S-a vzut deja c Response.Redirect foreaz navigatorul s cear o pagin diferit de cea cerut de noi, iniial, de la server. n versiunile vechi ale ASP aceasta era singura modalitate de a transfera execuia de la un fiier la altul. Ineficiena acestei metode era aceea c mesajul redirectat trebuia s cltoreasc de la sever la navigator, apoi napoi la server. n plus, datorit codului ASP, trebuiau stocate i eventualele date care in de formulare sau de URL-uri pentru ca s fie disponibile pentru noul script. Metoda Server.Transfer vine s rezolve aceast problem realiznd o redirectare, direct de la nivelul server-ului. Aceast nseamn c navigatorul cere un fiier, server-ul realizeaz redirectarea i navigatorul primete ca rezultat coninutul noului fiier. Deoarece navigatorul nu este implicat n redirectare, metoda Server.Transfer menine coninutul formularelor i datele QueryString , acestea fiind disponibile n script-ul ctre care s-a fcut redirectarea. Datorit eficienei, Server.Transfer , este de preferat n locul lui Response.Redirect . Aplicaia care urmeaz este format din fiierele: asptr.asp , asptr1.asp , PrgNormal.asp , PrgSimbata.asp i PrgDuminica.asp i i propune s prezinte modul de lucru cu Server.Transfer pentru construirea unei pagini intermediare din care s se realizeze transferul ctre anumite pagini ale aplicaiei n funcie de cum au fost completate controalele formularului de selecie. n acest caz, dac Request.Form("zi") este vid dup transfer utilizatorul ajunge

174 - Obiecte server

n acelai loc din care a plecat (sistem defensiv ne-selectiv). Altfel este trasferat, conform seleciei, ctre o nou pagin. Fiierul asptr.asp :
<%@ Language=VBScript %> <HTML> <HEAD> </HEAD> <BODY> <H3>Site-ul magazinului &quot;aMARE&quot;</H3> <FORM NAME="frmZi" ACTION="asptr1.asp" METHOD="POST"> <H4>Selectati o zi din lista</H2> <TABLE ALIGN="LEFT" WIDTH="40%"> <TR> <TD> <SELECT NAME="zi"> <OPTION VALUE="Luni" SELECTED>Luni</OPTION> <OPTION VALUE="Marti">Marti</OPTION> <OPTION VALUE="Miercuri">Miercuri</OPTION> <OPTION VALUE="Joi">Joi</OPTION> <OPTION VALUE="Vineri">Vineri</OPTION> <OPTION VALUE="Simbata">Simbata</OPTION> <OPTION VALUE="Duminica">Duminica</OPTION> </SELECT> </TD> http://www.east.utcluj.ro/mb/mep/antal <TD> <INPUT TYPE="SUBMIT" VALUE="Trimite"> Universitatea Tehnica din Cluj-Napoca </TD> </TR> Catedra Mecanica si Programare </TABLE> Conf. Dr. Ing. ANTAL Tiberiu Alexandru </FORM> </BODY> </HTML>

Fiierul asptr1.asp :
<%@ Language=VBScript %> <% Option Explicit %> <% Dim ziuaaleasa If Not isEmpty(Request.Form("zi")) then ziuaaleasa= Request.Form("zi") Select case ziuaaleasa case "Duminica" Server.Transfer("PrgDuminica.asp") Case "Simbata" Server.Transfer("PrgSimbata.asp") Case Else Server.Transfer("PrgNormal.asp") End Select Else Server.Transfer "asptr.asp" End If %>

Fiierul PrgNormal.asp :
<HTML> <HEAD> </HEAD> <BODY> <H1>In zilele de luni - vineri</H1>

Obiecte server - 175

<A HREF="asptr.asp"><FONT COLOR="RED" size="2">(inapoi)</FONT></A> <P>Magazinul are programul: <PRE> 8-13: deschis 13-14: pauza de masa 14-21: deschis </PRE> </P> </BODY> </HTML>

Fiierul PrgSimbata.asp :
<HTML> <HEAD> </HEAD> <BODY> <H1>Program de simbata</H1> <A HREF="asptr.asp"><FONT COLOR="RED" size="2">(inapoi)</FONT></A> <P>Magazinul este deschis intre orele 10-15.</P> </BODY> </HTML>

Fiierul PrgDuminica.asp :
<HTML> http://www.east.utcluj.ro/mb/mep/antal <HEAD> </HEAD> <BODY> Universitatea Tehnica din Cluj-Napoca <H1>Program de duminica</H1> <A HREF="asptr.asp"><FONTCatedra Mecanica si Programare COLOR="RED" size="2">(inapoi)</FONT></A> <P>Duminica magazinul Conf. Dr. Ing. ANTAL Tiberiu Alexandru este inchis!</P> </BODY> </HTML>

Metoda Server.MapPath Este bine de evitat scrierea cilor absolute n aplicaie deoarece acestea creeaz dependena de cale. Dac dorim s rulm aplicaia n directorul curent, o astfel de cale ar putea fi C:\CursASP\ap1.asp . Deseori, administratorii de Web server-e prefer ca numai anumite discuri s stocheze aplicaii. ntr-o astfel de situaie discul C: ar putea fi interzis aplicaiilor motiv pentru care orice cale care ncepe cu C: va fi incorect i aplicaia nu va putea rula corect dup ce a fost pus pe server dect dac se modific poriunile de cod surs care conin referiri la cile absolute. Cea mai simpl modalitate de evitare a situaiei este punerea cilor absolute ntr-un singur fiier, care va fi inclus n poriunile de cod care trebuie s utilizeze cile respective. Accesul la un fiier se poate realiza doar dac se cunoate calea fizic spre el. Metoda Server.Path realizeaz transformarea argumentului de intrare, ce poate fi o cale virtual sau relativ, ntr-una fizic. Cnd calea ncepe cu "/ " sau cu "\ ", metoda va ntoarce o cale virtual complet. Altfel, metoda ntoarce o cale relativ la directorul n care se afl fiierul ASP n curs de prelucrare. De exemplu, pentru aflarea directorului fizic corespunztor directorului virtual unu se poate folosi codul care urmeaz. De asemenea, el permite aflarea cii fizice n care este stocat fiierul n curs de execuie prin folosirea variabilei PATH_INFO .
<HTML> <HEAD> </HEAD> <BODY> <% Dim caleFizica caleFizica=Server.MapPath("/unu") Response.Write "Calea fizica corespunztoare " & _

176 - Obiecte server

"directorului virtual <B>unu</B> este: " & caleFizica & "<BR>" Response.Write Server.MapPath(Request.ServerVariables("PATH_INFO")) & "<BR>" Response.Write Server.MapPath("aspmap.asp") & "<BR> Response.Write Server.MapPath("TestMAP/aspmap.asp") & "<BR>" Response.Write Server.MapPath("/") & "<BR>" Response.Write Server.MapPath("../") & "<BR>" %> </BODY> </HTML>

Codul de mai sus lucreaz corect doar dac directorul virtual unu exist. n lipsa lui nu se va genera o eroare, ci doar un rezultat incorect (o cale fizic care nu exist). Soluia nu rezolv problema, n esen, deoarece dependena de calea fizic este nlocuit cu cea de existen a directorului virtual. n cazul argumentelor "aspmap.asp" ,"TestMAP/aspmap.asp" , deoarece nu se folosete caracterul / la nceput, cile generate sunt relative la directorul curent. n cazul argumentului "/" este ntoars calea fizic spre directorul home al rdcinii site-ului de Web, iar n cazul lui "../" se ntoarce calea fizic, relativ, ctre pagina care este vizualizat de navigator. Notaia ".." pentru accesarea prinilor dintr-o cale poate fi folosit, din motive de securitate, numai dac proprietatea ASPEnableParentPath are valoarea True . Prin folosirea ei, un script ar putea accesa directori care sunt deasupra celui virtual pn la cel rdcin. http://www.east.utcluj.ro/mb/mep/antal Metoda Server.GetLastError Aplicat iile script ASP pot avea erori: Universitatea Tehnica din Cluj-Napoca # la preprocesare; Catedra Mecanica si Programare # la compilare; Conf. Dr. Ing. ANTAL Tiberiu Alexandru # n execut ie. Erorile de preprocesare apar atunci cnd preprocesorul ASP, ca urmare a instruct iunii include, nu poate gasi fisierul care este referit. Erorile de compilare apar atunci cnd script-ul cont ine cuvinte cheie scrise gresit, care nu vor fi recunoscute de compilator, eventual cuvinte cheie care lipsesc. Aceste erori sunt prinse, de obicei, n fazele de dezvoltare si de testare. Erorile n execut ie sunt mai greu de gasit ca urmare a multitudinii factorilor care pot conduce la ele (erori de logica, resurse blocate, eventual cu versiuni incompatibile sau care lipsesc). Cnd motorul ASP genereaza eroarea 500;100 , IIS creeaza un obiect ASPErrorObject care va cont ine informat iile legate de eroare. Apoi, va folosi metoda Server.Transfer pentru a deschide pagina /iishelp/common/500-100.asp pentru afisarea erorii. Aceasta pagina este suficienta pentru nevoile simple ale dezvoltarii aplicat iei. Daca n practica, totusi, ea nu este suficienta poate fi nlocuita cu o pagina realizata de noi. n cazul lui IIS, se deschide MMC, se va selecta Default Web Site, va pozit ionat i pe directorul virtual al aplicat ie, se face clic pe butonul din dreapta, selectat i Properties, de aici Custom Errors. Aici, selectai intrarea 500;100 , clic pe Edit Properties, iar n fereastra aprut nlocuii URL-ul implicit cu cel ce are pagina nou pentru tratarea erorilor. Clic pe OK, nchidei fereastra de dialog Error Mapping Properties, clic pe Apply din fereastra de dialog Custom Errors, apoi clic pe OK. n aceast pagin vor putea fi afiate urmtoarele proprieti ale obiectului ASPErrorObject : Proprietate
ASPCode

Descriere Codul de eroare intern al IIS.

Obiecte server - 177

Proprietate
Number Source File Line Description

Descriere Numrul erorii. Linia codului de script n care apare eroarea. Numele fiierului cu eroare. Numrul liniei de cod n care apare eroarea. Text succint care descrie eroarea.

NOTA

Desi conform documentatiei IIS, toate erorile n executie au codul 500;100, se pare c a nu este exact asa. Unele erori n executie genereaz mesaje implicite fr folosirea a a a paginii de erori. Un astfel de exemplu este mprtirea cu zero. a -

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

178 - Obiectul Scripting Dictionary

Obiectul Scripting Dictionary


n afara de obiectele ASP intrinseci, ASP vine cu o mult ime de obiecte care pot fi utile n anumite situat ii. Unul dintre acestea este obiectul Dictionary, el fiind parte din Microsoft Scripting Runtime, care este un model de obiecte coninut de o bibliotec ce se instaleaz cu Microsoft Office. Un model de obiecte definete structura unui program organizat pe obiecte. Prin definirea relaiilor ntre obiectele programului, modelul de obiecte pune obiectele ntr-o ordine ct mai natural accesibil programatorului. Obiectul Dictionary permite stocarea unor perechi cheie=articol (denumirea tehnic este aceea de memorie asociativ). Articolele pot fi orice date, iar fiecare articol trebuie asociat unei chei unice. Cheia se folosete pentru extragerea unui articol individual i este, de obicei, un ntreg sau un ir (poate fi orice tip cu excepia unui tablou). Fiind un obiect COM el are urmtoarele caracteristici: # are proprieti i metode publice expuse printr-o interfa care pot fi utilizate n coduri care tiu s trateze modelul COM; # fiind un obiect COM, interfaa trebuie s rmn neschimbat. Propriet|ile obiectului Dictionary Proprietate
Count Item Key

Descriere http://www.east.utcluj.ro/mb/mep/antal ntoarce numrul de asocieri din obiectul Dictionary . Universitatea valoarea asociat cu irul ntoarce sau seteaz Tehnica din Cluj-Napoca cheie sau indexul ntreg. Catedra Mecanica si Programare Modific irul cheie. Conf. Dr. Ing. ANTAL Tiberiu Alexandru

Metodele obiectului Dictionary Metod


Add(cheie,valoare)

Descriere Adaug un nou ir cheie lui Dictionary mpreun cu valoarea specificat. Dac cheia exist, atunci apare o eroare. Controleaz modul n care obiectul Dictionary compar cheile. Dac ModComparatie ia valoarea vbBinaryCompare (valoarea 0) nu se ine cont de scrierea cu litere mari i mici, dac valoarea este vbTextCompare (valoarea 1) se ine cont de scrierea de literele mari i mici; metoda nu este documentat, dar poate fi folosit fr a primi eroare. ntoarce valoarea True n cazul n care cheia exist sau False dac nu exist. ntoarce un tablou Variant cu toate valorile curente stocate n Dictionary . ntoarce un tablou Variant cu toate cheile curente stocate n Dictionary . terge pe cheie , dac aceasta exist.

CompareMode(ModComparatie)

Exists(cheie)

Items

Keys

Remove(cheie)

Obiectul Scripting Dictionary - 179

Metod
RemoveAll

Descriere terge toate cheile.

n continuare se prezint o aplicaie cu acest obiect, rezultatele afiate de aceasta fiind prezentate n Figura 52.
<%@ Language=VBScript %> <% Option Explicit %> <% Function spatii(n) Dim i Dim s s = "" For i=0 to n s=s+"&nbsp;&nbsp;&nbsp;&nbsp;" Next spatii = s End Function Function dictionarNou() Dim D Set D = Server.CreateObject("Scripting.Dictionary") D.CompareMode=vbTextCompare Set dictionarNou=D End Function http://www.east.utcluj.ro/mb/mep/antal Function tiparireTablou(tabl,poz) Universitatea Tehnica din Cluj-Napoca Dim V For Each V in tabl Catedra Mecanica si Programare If isArray(V) Then Conf. Dr. Ing. ANTAL Tiberiu Alexandru Call tiparireTablou(V, poz+1) Elseif isObject(V) Then If Typename(V) = "Dictionary" then Call tiparireDictionar(V, poz+1) Else Response.Write "{Obiect: " & Typename(V) & "}<BR>" End If Else Response.Write spatii(poz) & V & "<BR>" End If Next End Function Function tiparireDictionar(D,poz) For Each V in D.Keys() If isObject(D(V)) Then If Typename(D(V)) = "Dictionary" Then Response.Write spatii(poz) & "Dictionar <B>" & V & "</B><BR>" Call tiparireDictionar(D(V), poz+1) End If Elseif isArray(D(V)) Then Response.Write spatii(poz) & "Tablou <B>" & V & "</B><BR>" Call tiparireTablou(D(V), poz+1) Else Response.Write spatii(poz) & V & "=" & D(V) & "<BR>" End If Next End Function Dim Dim Dim Dim Dim dictRad 'Variabila dictionar principala D 'Variabila dictionar secundara i j tabl 'Variabila tablou cu elemente sir de caractere

180 - Obiectul Scripting Dictionary

Dim V

'Variabila Variant

Set dictRad = dictionarNou() For i = 1 to 5 Set D = dictionarNou() For j = 1 to 3 D.Add "Cheie " & cstr(j), j if (i=3) and (j=2) Then D.Add "Cheie - Tablou", Array ("Un", "tablou", "de", "siruri") End If Next dictRad.Add "Cheie Radacina " & cstr(i), D Next tabl = Array("Inca", "un", "tablou", "de", "siruri") dictRad.Add "Cheie Racina - Tablou", tabl Call tiparireDictionar(dictRad,0) %>

Funcia tiparireDictionar(D,poz) este recursiv. Apelul recursiv este determinat de gsirea unui articol care, la rndul lui, este un obiect Dictionary . Este posibil ca un articol al dicionarului s fie tablou. Acesta va fi afiat folosind funcia tiparireTablou(tabl,poz) . Parametrul poz al celor dou funcii permite afiarea articolelor de dicionar aliniate n funcie de nivelul de imbricare. Figure 52 Lucrul cu obiectul Scripting.Diction ary http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

Obiectul FSO - 181

Obiectul FSO
Modelul de obiecte FileSystemObject (FSO ) permite folosirea unor obiecte cu proprieti, metode i evenimente pentru accesul la directoare i pentru realizarea de prelucrri ale fiierelor pe server. FSO este coninut n biblioteca cu numele scrrun.dll i trebuie s fie n directorul system32 al calculatorului pe care se ruleaz serevrul de Web. El are urmtoarele obiecte i colecii: Obiect
FileSystemObject

Descriere Obiectul de baz al modelului FSO. Deseori el trebuie creat pentru a putea accesa alte obiecte ale modelului FSO. Are metode care le dubleaz pe cele ale altor obiecte din FSO n scopul scderii nevoii de creare a mai multor obiecte pentru ndeplinirea obiectivelor. Permite accesul la informaiile legate de discuri (fizice: HDD, CD-ROM etc. i logice: discuri de reea). Permite crearea, mutarea, tergerea de fiiere i extragerea informaiilor legate de nume, cale etc. Permite crearea, mutarea, tergerea de directori i extragerea http://www.east.utcluj.ro/mb/mep/antal informaiilor legate de nume, cale etc. Universitatea scrierea de Cluj-Napoca Permite citirea iTehnica din fiiere text. Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru Descriere Lista discurilor fizice i logice legate la sistem. Dac unitatea este CD-ROM ea apare n list chiar dac nu are CD inserat n ea. Lista tuturor fiierelor unui director. Lista tuturor subdirectorilor unui director.

Drive

File

Folder

TextStream

Colecie
Drives

Files Folders

n ASP, accesul la fiiere se realizeaz automat de ctre server. Atunci cnd primete o cerere de la un client, n funcie de aciunea de realizat, server-ul deschide fiierul, i citete coninutul, l ruleaz, apoi l trimite clientului. Aplicaiile Web pot citi i scrie date direct n fiiere cu condiia s stie calea fizic spre acestea (nu se poate lucra cu directori i fiiere virtuale). n acest scop colecia Request.ServerVariables se poate folosi pentru determinarea cii fizice ctre script-ul rulat din aplicaia curent, iar Server.MapPath se va folosi pentru transformarea cii virtuale n una fizic. Deci, limitarea datorat obligativitii folosirii cilor fizice poate fi uor evitat, iar accesul la fiierele fizice se poate face simplu i elegant. Este bine ca referinele la surse externe de date, dup cum am mai spus deja, s fie stocate ntr-un singur fiier pentru a crete portabilitatea codului.
NOTA

FSO are un comportament ciudat dac sunt instalate, pe Web server, soft-uri de tipul a antivirus care au optiunea "Script Blocking" activat. n cazul lui NAV 2001 si 2002, a dac FSO ncearc s scrie sau s citeasc fisiere, actiunea pare s fie identificat ca o a a a a a a a activitate a unui virus, motiv pentru care server-ul, deci s i navigatorul, vor fi blocate. -

182 - Obiectul FSO

n cazul lui NAV, dup dezactivarea optiunii "Script Blocking", sistemul trebuie a repornit.

Afiarea fiierelor dintr-un director Afiarea numelor fiierelor unui director presupune cunoaterea cii fizice (eventual relative) la directorul n cauz. n exemplul urmtor calea este "C:/Inetpub/poze" . Metoda GetFolder ntoarce un obiect Folder la calea primit prin care vor putea fi accesate toate proprietile directorului. Obiectul Folder ntoarce, prin proprietatea File , o colecie de obiecte File stocate n director, iar prin proprietatea SubFolders colecia de obiecte Folders din respectivul director. Codul aplicaiei ce realizeaz afiarea numelor fiierelor unui director este prezentat n liastafisiere.asp , iar rezultatele n Figura 53. O aplicaie mai practic apare n poze.asp . Aici, aplicaia de afiare a numelor fiierelor este extins pentru a realiza afiarea automat a unor poze. Pentru aceasta se verific extensia fiierelor, iar n situaia n care aceasta este .JPG se face afiare (se genereaz marcaj IMG), rezultatele sunt prezentate n Figura 54. Codul de afiare este stocat n directorul cod , iar pozele trebuie s fie stocate n directorul printe a lui cod . Aplicaia listafisieredirectori.asp este i ea o extensie a celei de afiare a numelor fiierelor, permind afiarea tururor numelor de fiiere i de subdirectori din directorul de pornire. Rezultatele se prezint n Figura 55. Pentru a simplifica utilizarea modelului FSO voi crea un grup de funcii care vor fi stocate ntr-un fiier cu numele bibFSO.inc . Acestea vor trebui incluse cu include n aplicaia ce dorete s le folosesc. Fiierul bibFSO.inc : http://www.east.utcluj.ro/mb/mep/antal

Universitatea Tehnica din Cluj-Napoca <% Function creeazaFSO() Catedra Mecanica si Programare Set creeazaFSO = Server.CreateObject("Scripting.FileSystemObject") Conf. Dr. Ing. ANTAL Tiberiu Alexandru End Function
Function existaFisier(specFisier) existaFisier = creeazaFSO.FileExists(specFisier) End Function %>

Fiierul liastafisiere.asp :
<%@ LANGUAGE = VBScript %> <% Option Explicit %> <!-- #include file = "bibFSO.inc" --> <% Function AfisareFisiere(cale) Dim fso, dir, listadir, listafis,f,s

Set fso = CreateObject("Scripting.FileSystemObject") Set dir = fso.GetFolder(cale) Set listafis = dir.Files For Each f in listafis s = s & f.name s = s & "<BR>" Next AfisareFisiere= s End Function %> <HTML> <HEAD>

Obiectul FSO - 183

<TITLE>Afisarea fisierelor cu FSO</TITLE> </HEAD> <BODY> <% Dim f f="C:/Inetpub/poze" response.write AfisareFisiere(f) %> </BODY> </HTML>

Figure 53 Afiarea fiierelor cu FSO

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

Fiierul poze.asp :
<%@ LANGUAGE = VBScript %> <% Option Explicit %> <!-- #include file ="bibFSO.inc" --> <% Function AfisareFisiere(cale) Dim dir, listadir, listafis, f, s, c, n Set dir = creeazaFSO.GetFolder(cale) Set listafis = dir.Files c = 1 For Each f in listafis if (UCase(Right(f,3)) = "JPG") Then n = "'../" & f.name & "'" If ((c mod 4) <> 0) Then s = s & "<IMG SRC =" & n & "ALT =" & n & " WIDTH=300 ALIGN=LEFT>" Else s = s & "<IMG SRC =" & n & "ALT =" & n & " WIDTH=300>" End If end if c=c+1 s = s & "<P>" Next

184 - Obiectul FSO

AfisareFisiere = s End Function %> <HTML> <HEAD> <TITLE>Afisare imagini</TITLE> </HEAD> <BODY> <% Dim f f="C:/Inetpub/poze" response.write AfisareFisiere(f) %> </BODY> </HTML>

Figure 54 Vizualizarea pozelor unui director cu FSO

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

Fiierul listafisieredirectori.asp :
<%@ LANGUAGE = VBScript %> <% Option Explicit %> <!-- #include file = "bibFSO.inc" --> <% Function FisiereDirectori(cale) Dim dir, subdir, f, fis, d Dim s Set dir = creeazaFSO.GetFolder(cale) Set subdir = dir.SubFolders Set fis = dir.Files s= "<BR><B>Fisiere:" + cale + "</B><BR>" For Each f in fis s = s & f.name s = s & "<BR>" Next s = s+ "<BR><BR><B>Subdirectori:" + cale +"</B><BR>" For Each d in subdir

Obiectul FSO - 185

s = s & UCase(d.name) s = s & "<BR>" s= s+FisiereDirectori(cale & "/" & d.name) Next FisiereDirectori = s End Function %> <HTML> <HEAD> <TITLE>Lista fisiere si subdirectori</TITLE> </HEAD> <BODY> <% Response.Write FisiereDirectori("C:/Inetpub/poze") %> </BODY> </HTML>

Figure 55 Lista fiierelor i a subdirectorilor cu FSO http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

Verificarea existenei unui fiier Fiierele pot fi folosite la stocarea unor date legate de starea aplicaiei de catre utilizatorii care au vizitat pagina sau de cei care au dreptul s o viziteze. Acestea ar fi motivele pentru care este esenial s nu scriem peste coninutul unui fiier ce stocheaz date eseniale pentru funcionarea aplicaiei. Pentru verificarea existenei unui fiier se va folosi metoda FileExist a lui Scripting.FileSystemObject . Pentru a verifica existena fiierelor aspexistaFSO.asp , unfis.txt se va folosi aplicaia urmtoare care va fi stocat n fiierul aspexistaFSO.asp .
<%@ Language=VBScript %> <% Option Explicit %> <!-- #include file="bibFSO.inc" --> <% Dim numeFis

186 - Obiectul FSO

numeFis ="C:\CursASP\aspexistaFSO.asp" 'numele fisierului numeFis = numeFis & "-><B>" & existaFisier(numeFis) & "</B><BR>" Response.write numeFis numeFis ="C:\CursASP\unfis.txt" 'numele fisierului numeFis = numeFis & "-><B>" & existaFisier(numeFis) & "</B><BR>" Response.write numeFis %>

Fiierul bibFSO.inc trebuie stocat n acelai director cu fiierul aspexistaFSO.asp . Deoarece primul fiier exist, funcia existaFisier ntoarce valoarea True . Deoarece cel de al doilea nu exist, funcia existaFisier va ntoarce valoarea False . Deschiderea unui fiier Pentru deschiderea unui fiier se va folosi metoda secvenial la fiiere text dup cum urmeaz:

OpenTextFile

care faciliteaz accesul

Set TxtStr = FileSystemObject.OpenTextFile(numeFis, modIE, Creare, Format)

Ultimele trei argumente sunt opionale i au semnificaiile prezentate n tabelele care urmeaz. Argumentul modIE Valoare
1

http://www.east.utcluj.ro/mb/mep/antal Semnificaie Deschide fiierul numai pentru citire. SeCluj-Napoca Universitatea Tehnica din genereaz eroare dac se ncearc scrierea n acest mod. Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru Deschide fiierul pentru scriere. Dac fiierul exist deja, acest mod duce la distrugerea coninutului anterior. Deschide fiierul n modul de scriere cu adugare la sfritul fiierului.

Argumentul Creare Valoare


True False

Semnificaie Se va crea un nou fiier dac acesta nu exist. Nu se va crea un fiier nou (valoare implicit).

Argumentul nu oprete suprascrierea unui fiier dac acesta exist deja. Dac se ncearc deschiderea unui fiier care nu exist cu valoarea False apare eroare. Argumentul Format Valoare
-1 0 -2

Semnificaie Manipuleaz fiierul dup codificarea Unicode. Manipuleaz fiierul dup codificarea ASCII. Manipuleaz fiierul n funcie de setrile implicite ale sistemului de operare.

n aplicaia care urmeaz metoda OpenTextFile a obiectului FileSystemObject se folosete pentru a crea un obiect de tipul flux de text (TextStream ) i pentru a deschide un fiier cu numele

Obiectul FSO - 187

n rdcina discului D: . Scrierea n fiier se face cu metod WriteLine , iar fluxul se nchide cu metoda Close . Apoi, un nou flux va fi creat i coninutul fiierului va fi citit cu metoda ReadAll dup care va fi afiat n fereastra navigatorului.
Text.htm <!-- #include file="bibFSO.inc" --> <HTML> <HEAD> <BODY> <% Dim numeFis Dim FS Dim TS numeFis ="D:\Text.htm" 'numele fisierului Set FS = creeazaFSO() ' Adaugare, True, Unicode Set TS = FS.OpenTextFile(numeFis, 8 ,True, -1) TS.WriteLine "<H3>Un fisier</H3>" TS.WriteLine "<P>format din 2 linii" TS.Close If existaFisier(numeFis) Then Response.write "Fisierul " & numeFis & " are continutul: <BR>" ' Citire, False, Unicode Set TS = FS.OpenTextFile(numeFis, 1 ,False, -1) Response.write TS.ReadAll TS.Close http://www.east.utcluj.ro/mb/mep/antal Set TS= Nothing Else Response.Write "Fisierul " & din Cluj-Napoca Universitatea Tehnica numeFis & " nu exista!<BR>" End If Catedra Mecanica si Programare Set FS= Nothing %> </BODY> </HTML>

Conf. Dr. Ing. ANTAL Tiberiu Alexandru

Obiectul TextStream Obiectul TextStream are metode i proprieti ce permit accesul secvenial la datele unui fiier. Termenul de flux se folosete pentru a descrie transferul de date ntre un generator de date i un consumator. n cazul fluxului text, n momentul deschiderii lui, i se asociaz i fiierul care va fi manipulat (citit sau scris) cu ajutorul metodelor specifice acestui obiect. Dup terminarea activittilor cu fluxul, acesta trebuie nchis. Metodele i proprietile obiectului TextStream se prezint n tabelele urmtoare. Metod
Close Read

Descriere nchide fiierul asociat obiectului TextStream . Citete un numr specificat de caractere din fiier i ntoarce textul citit. Citete i ntoarce ntregul coninut al fiierului. Citete i ntoarce urmtoarea linie din fiier; linia se termin la ntlnirea caracterului newline (vbLF ). Caracterul newline nu este ntors. Sare peste un numr specificat de caractere ale fiierului. Nu se poate "sri" napoi, ci doar nainte, adic numrul de caractere de srit trebuie s fie un ntreg pozitiv.

ReadAll ReadLine

Skip

188 - Obiectul FSO

Metod
SkipLine Write WriteBlankLines

Descriere Sare la linia urmtoare. Se poate folosi numai la citirea fiierului. Scrie un ir n fiier din poziia curent a pointer-ului de fiier. Scrie o linie vid n fiier. Aceast linie va conine doar caracterul newline (vbLF ). Scrie ir n fiier i adaug la sfritul lui caracterul newline . Descriere dac pointer-ul de fiier este la sfritul liniei (urmtorul caracter este newline ).
True True

WriteLine

Proprietate
AtEndOfLine

AtEndOfStream Column

dac pointer-ul de fiier este la sfritul fiierului.

Permite citirea numrului de coloan curent al pointer-ului de fiier. Valoarea pentru primul caracter este 1. Permite citirea numrului de linie din fiierul curent. La deschiderea acestuia numrul de linie este 1. http://www.east.utcluj.ro/mb/mep/antal

Line

Pentru a lucra mai simplu cu fiierele se prezint n continuare o variant extins a "fiierului Universitatea Tehnica din Cluj-Napoca bibliotec" bibFSO.inc . Aici se implementeaz cte o procedur pentru scrierea, adugarea i Catedra Mecanica si Programare citirea unui fiier. Apoi,Conf.exemplific modul de folosire a noilor funcii n fiierul se Dr. Ing. ANTAL Tiberiu Alexandru asptextSCAFSO.asp . Fiierul bibFSO.inc :
<% Function creeazaFSO() Set creeazaFSO = Server.CreateObject("Scripting.FileSystemObject") End Function Function existaFisier(specFisier) existaFisier = creeazaFSO.FileExists(specFisier) End Function Function dirSpecial(director) dirSpecial = creeazaFSO.getSpecialFolder(director) End Function Function dirWindows() dirWindows = dirSpecial(0) End Function Function dirSystem() dirSystem = dirSpecial(1) End Function Function dirTemp() dirTemp = dirSpecial(2) End Function Sub scrieFisText(numeFis, Tip, Linie) Dim FS Dim TS Set FS = creeazaFSO()

Obiectul FSO - 189

Set TS = FS.OpenTextFile(numeFis, 2, Tip, -1) TS.WriteLine Linie Ts.Close Set TS = Nothing Set TS = Nothing End Sub Sub adaugaFisText(numeFis, Tip, Linie) Dim FS Dim TS Set FS = creeazaFSO() Set TS = FS.OpenTextFile(numeFis, 8, Tip, -1) TS.writeLine Linie TS.Close Set TS = Nothing Set FS = Nothing End Sub Function citesteFisText(numeFis) Dim s Dim FS Dim TS Dim F Set FS = creeazaFSO() If Not existaFisier(numeFis) Then Err.Clear Err.Raise 50000, "bibFSO.inc -> citesteFisText()","Fisierul"E & numeFis & " nu exista!." Exit Function http://www.east.utcluj.ro/mb/mep/antal End if Set F = FS.GetFile(numeFis) If F.Size > 0 Then Universitatea Tehnica din Cluj-Napoca Set TS = FS.openTextFile(numeFis, si Programare Catedra Mecanica 1, False, -1) citesteFisText = TS.ReadAllANTAL Tiberiu Alexandru Conf. Dr. Ing. TS.Close End If Set TS = Nothing Set FS = Nothing End Function Sub stergeFisText(numeFis) Set FS = creeazaFSO() FS.DeleteFile(numeFis) End Sub %>

Fiierul asptextSCAFSO.asp:
<!-- #include file="bibFSO.inc" --> <HTML> <HEAD> <BODY> <% Dim numeFis Dim textFis numeFis ="D:\Text1.htm" 'numele fisierului Call scrieFisText(numeFis, True, "<H1>Prima linie</H1>") Call adaugaFisText(numeFis, True, "<H2>A doua linie</H2>") Call adaugaFisText(numeFis, True, "<H3>A treia linie</H3>") textFis = citesteFisText(numeFis) Response.Write textFis Call stergeFisText(numeFis) %>

190 - Obiectul FSO

</BODY> </HTML>

Scrierea ntr-un fiier Scrierea ntr-un fiier secvenial se poate face doar la sfritul lui. Dac totui dorim s inserm date n el va trebui s rescriem ntreg fiierul. n cazul unor fiiere mari aciunea va consuma mult timp. Atunci cnd se lucreaz cu fiiere secveniale, cea mai rapid variant este cea de adugare la sfritul lui a noilor date. Procedura scrieFisText creeaz i scrie ntr-un fiier o linie, iar procedura adaugaFisText adaug o linie la un fiier text deja existent. Citirea dintr-un fiier Pentru citirea unui fiier acesta trebuie s existe. Funcia citesteFisText realizeaz citirea ntregului coninut al unui fiier. Dac fiierul este foarte mare metoda de citire duce la un cosum mare de resurse. Pentru evitarea acestora se poate realiza citirea linie cu linie. tergerea unui fiier Un fiier poate fi ters numai dac acesta exist. ncercarea de tergere a unui fiier inexistent va genera eroare. Procedura stergeFisText implementeaz cea mai simpl variant a unei secvene de cod pentru tergerea unor fiiere. Realizarea unei aplicaii cu securitate la legare Aplicaia care urmeaz i propune s asigure legarea unui utilizator la o pagin personalizat. http://www.east.utcluj.ro/mb/mep/antal Datele se scriu pe server-ul de Web i se citesc de acolo cu ajutorul modelului FSO . Formularele i rezultatele aplicaiei se prezint n Figura 56. din Cluj-Napoca Universitatea Tehnica Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru Figure 56 Formularele aplicat iei de legare

Fiierele aplicaiei trebuie stocate n directorul cu numele logare, iar fiierele care o alctuiesc sunt urmtoarele: G logare.htm : formularul de legare necesit un nume de utilizator i o parol. Dac aceastea sunt introduse corect, dup apsarea butonului Trimite, se va lansa verifica.asp . Dac sunt cmpuri vide se genereaz mesaje de eroare, local, cu

Obiectul FSO - 191

G G G

ajutorul unor ferestre de alert. Un mesaj de eroare apare i dac numele utilizatorului sau parola lui sunt greite, dar acest mesaj se genereaz deja cu ajutorul server-ului din verifica.asp . utilNou.htm : formular deschis atunci cnd se face clic pe hiperlegtura Utilizator nou al formularului logare.htm . Dup completarea cmpurilor, la apsarea butonului Trimite, dac un utilizator cu acelai nume i aceeai parol nu mai exist, noul utilizator este nscris n fiierul text utilizatori.txt cu utilizatori. inscriere.asp : cod lansat n execuie atunci cnd se apas butonul Trimite al formularului utilNou.htm : verifica.asp : cod care verific existenta unui utilizator n fiierul text
utilizatori.txt afisare.asp : cod care afieaz datele utilizatorului care s-a legat la site. Tabelul

G G

este afiat n culorile specifice utilizatorului, iar parola lui este invizibil dac acesta este un utilizator de tipul VIZITATOR. bibUTIL.inc : bibliotec pentru verificarea existenei unui utilizator; bibFSO.inc : biblioteca procedurilor de lucru cu modelul FSO

Fiierul logare.htm :
<% Option Explicit %> <HTML> <HEAD> http://www.east.utcluj.ro/mb/mep/antal </HEAD> <BODY> <FORM NAME="Legare" ONSUBMIT="return Test()" METHOD="POST" ACTIONE Universitatea Tehnica din Cluj-Napoca ="http://localhost/CursASP/logare/verifica.asp"> Catedra Mecanica si Programare <TABLE BGCOLOR="AQUA"cellSpacing=3 cellPadding=3 width="50%" align=centerE border=2> Conf. Dr. Ing. ANTAL Tiberiu Alexandru <THEAD> <TH COLSPAN=2>Formular de intrare</TH> </THEAD> <TR> <TD>Nume:</TD> <TD><INPUT TYPE=TEXT NAME=Nume></TD> </TR> <TR> <TD>Parola:</TD> <TD><INPUT TYPE=TEXT NAME=Parola></TD> </TR> <TR> <TD><INPUT type=submit value=Trimite></TD> <TD ALIGN=RIGHT><INPUT type=reset value=Reset></TD> </TR> </TABLE> </P> </FORM> <TABLE width="50%" align=center> <TR> <TD> <A HREF="Utilnou.htm">Utilizator nou</A> </TD> </TR> </TABLE> <SCRIPT LANGUAGE="VBScript"> Function Test() Dim Frm Dim rasp rasp=True Set Frm = document.Legare If Len(Trim(Frm.Nume.Value))= 0 Then alert("Nume nu poate fi vid")

192 - Obiectul FSO

rasp=False ElseIf Len(Trim(Frm.Parola.Value))= 0 Then alert("Parola nu poate fi vida") rasp=False End If Test=rasp End Function </SCRIPT> </BODY> </HTML>

Fiierul utilNou.htm :
<HTML> <HEAD> </HEAD> <BODY> <FORM ACTION="http://localhost/CursASP/logare/inscrie.asp" METHOD="POST"E NAME="FrmNou"> <TABLE WIDTH="50%" BGCOLOR="AQUA" ALIGN="CENTER" BORDER=2 CELLSPACING=3E CELLPADDING=3> <THEAD> <TR> <TH COLSPAN=2>Formular de inscriere a unui utilizator nou</TH> <TR> <TD>Nume</TD> <TD><INPUT TYPE="TEXT" NAME="NUME"></TD> http://www.east.utcluj.ro/mb/mep/antal </TR> <TR> <TD>Adresa</TD> <TD><INPUT Universitatea Tehnica din Cluj-Napoca TYPE="TEXT" NAME="ADRESA" ></TD> </TR> Catedra Mecanica si Programare <TR> Conf. Dr. Ing. ANTAL Tiberiu Alexandru <TD>Parola</TD> <TD><INPUT TYPE="TEXT" NAME="PAROLA"></TD></TR> <TR> <TD>Culoare fond</TD> <TD> <SELECT NAME="CULOARE"> <OPTION VALUE="#FF0000">Rosu<BR> <OPTION VALUE="#00FF00">Verde<BR> <OPTION VALUE="#0000FF">Albastru<BR> <OPTION VALUE="#FFFFFF">Alb<BR> </SELECT> </TD></TR> <TR> <TD>Tip utilizator</TD> <TD> Vizitator <INPUT TYPE="RADIO" NAME="TIP" VALUE="VIZITATOR"E CHECKED> Administrator<INPUT TYPE="RADIO" NAME="TIP"E VALUE="ADMINISTRATOR"> </TD> </TR> <TR> <TD><INPUT TYPE="SUBMIT" VALUE="Trimite"></TD> <TD ALIGN="RIGHT"><INPUT TYPE="RESET" VALUE="Reset"></TD> </TR> </TABLE> </FORM> </BODY> </HTML>

Fiierul inscriere.asp :

Obiectul FSO - 193

<%@ Language=VBScript %> <!-- #include file="../bibFSO.inc" --> <!-- #include file="bibUTIL.inc" --> <HTML> <HEAD> <BODY> <% Dim numeFis Dim textFis Dim Nume Dim Parola Dim Adresa Dim Tip Dim Culoare Dim Linie numeFis ="C:\CursASP\logare\utilizatori.txt" Nume=Trim(Request.Form("NUME")) Parola=Trim(Request.Form("PAROLA")) Adresa=Trim(Request.Form("ADRESA")) Culoare=Trim(Request.Form("CULOARE")) Tip=Trim(Request.Form("TIP")) Linie=Nume&";"&Parola&";"&Adresa&";"&Culoare&";"&Tip If Not existaFisier(numeFis) Then Call scrieFisText(numeFis, True, Linie) Response.Write "Fiserul " &numeFis & "a fost creat cu succes." Response.Write "si utilizatorul a fost adaugat cu succes." Else http://www.east.utcluj.ro/mb/mep/antal If Not isArray(existaUtil(numeFis,Nume,Parola)) Then Call adaugaFisText(numeFis, True, Linie) Universitatea Tehnica din Cluj-Napoca Response.Write "Utilizatorul a fost adaugat cu succes." Else Catedra Mecanica si Programare Response.Write ANTAL Tiberiu Alexandru Conf. Dr. Ing. "Eroare, acest utilizator exista deja!" End If End If %> </BODY> </HTML>

Fiierul verifica.asp :
<%@ Language=VBScript %> <!-- #include file="../bibFSO.inc" --> <!-- #include file="bibUTIL.inc" --> <HTML> <HEAD> </HEAD> <BODY> <% Dim Dim Dim Dim Dim Dim Dim Dim Dim

numeFis textFis Nume Parola Adresa Tip Culoare tabUtil URL

numeFis ="C:\CursASP\logare\utilizatori.txt" Nume=Trim(Request.Form("NUME")) Parola=Trim(Request.Form("PAROLA")) tabUtil=existaUtil(numeFis,Nume,Parola) If isArray(tabUtil) Then

194 - Obiectul FSO

Adresa=tabUtil(2) Tip=tabUtil(4) Culoare=tabUtil(3) URL="http://localhost/CursASP/logare/afisare.asp?" URL = URL & "ADRESA=" & Adresa & "&" URL = URL & "PAROLA=" & Parola & "&" URL = URL & "NUME=" & Nume & "&" URL = URL & "TIP=" & Tip & "&" URL = URL & "CULOARE=" & "'" &Culoare &"'" Response.Redirect(URL) Else Response.Write "Eroare, utilizatorul NU exista!" End If %> </BODY> </HTML>

Fiierul afisare.asp :
<%@ Language=VBScript %> <HTML> <HEAD> </HEAD> <BODY> <% Dim Nume,Parola, Adresa, Culoare, Tip Nume = Request.QueryString("NUME") http://www.east.utcluj.ro/mb/mep/antal Parola = Request.QueryString("PAROLA") Adresa = Request.QueryString("ADRESA") Tip = Request.QueryString("TIP") Universitatea Tehnica din Cluj-Napoca Culoare = Request.QueryString("CULOARE") %> Catedra Mecanica si Programare <P> Conf. Dr. Ing. ANTAL Tiberiu Alexandru <TABLE CELLSPACING=3 CELLPADDING=3 WIDTH="50%" ALIGN="CENTER"E BGCOLOR=<%=Culoare%> BORDER=2> <THEAD> <TH COLSPAN=2>Rezultatele logarii</TH> </THEAD> <TR> <TD>Nume</TD> <TD><%=Nume%></TD> </TR> <TR> <TD>Parola</TD> <TD> <% If Tip = "ADMINISTRATOR" Then Response.write Parola Else Response.write "INVIZIBILA" End If %> </TD> </TR> <TR> <TD>Adresa</TD> <TD><%=Adresa%></TD></TR> <TR> <TD>Tip</TD> <TD><%=Tip%></TD></TR> <TR> <TD></TD> <TD></TD></TR></TABLE></P> </BODY> </HTML>

Obiectul FSO - 195

Fiierul bibUTIL.inc :
<% Function existaUtil(numeFis,Nume,Parola) Dim textFis Dim TabLiniiFis Dim oLinie Dim TabOlinie Dim i textFis = citesteFisText(numeFis) TabLiniiFis=Split(textFis,vbCrLf,-1,1) For i = 0 to UBound(TabLiniiFis) oLinie=TabLiniiFis(i) If Len(oLinie) > 0 Then TabOlinie=Split(oLinie,";",-1,1) If (StrComp(TabOlinie(0),Nume, 1) = 0) AndE (StrComp(TabOlinie(1),Parola, 1) = 0) Then existaUtil = TabOlinie Exit Function End If End If Next existaUtil = "" End Function %>

Pentru ca aplicaia s poat funciona corect fiierul, bibFSO.inc trebuie s fie stocat n http://www.east.utcluj.ro/mb/mep/antal directorul fizic "C:/CursASP" , iar celelalte fiiere ale aplicaie vor fi stocate n directorul fizic "C:/CursASP/logare" . CursASP trebuie s fie numele directorului virtual corespunztor lui Universitatea Tehnica din Cluj-Napoca "C:/CursASP" . Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

196 - Tratarea erorilor n ASP

Instruciuni pentru tratarea erorilor


Aplicaiile ASP sunt rulate cu ajutorul motorului ASP. Acesta nu permite ca aplicaia, datorit unor erori, s o ia razna. Implicit, n cazul unei erori, motorul ASP oprete aplicaia. La nivelul utilizatorului aceasta nseamn c programul devine inutil, deoarece nu-i mai poate urma aciunile de realizat. VBScript are mai multe instruciuni care permit continuarea execuiei paginii, n cazul unei erori, cu scopul terminrii aplicaiei. Instruciunea On Error Resume Next Prima variant de "tratare a unei erori" este aceea de ignorare a ei. Instruciunea On Error Resume Next nu oprete aplicaia, ci face ca programul VBScript s fie continuat din linia imediat urmtoare celei n care a aprut eroarea. Datorit modului de aciune instruciunea permite ascunderea erorilor de scriere greit a cuvintelor cheie (sintax) i a celor de logic. Ea trebuie folosit dac se anticipeaz apariia unor erori dincolo de posibilitile de control ale programatorului. De exemplu, se ncearc tergerea unui fiier, dar fiierul poate c este folosit de o alt persoan sau nu mai exist deoarece a fost ters de altcineva. Dincolo de anticiparea unor erori On Error Resume Next mai poate fi folosit pentru prinderea rapid a unor erori. De exemplu, dac se dorete adugarea unor valori ntr-un fiier, trebuie instaniat o component ActiveX pentru verificarea drepturilor de acces la fiiere. Apoi, se va citi fiierul drepturilor de acces nainte de nceperea aciunii de adugare. Procesul este complicat i prea lung. Este mult mai simplu s ncercm scrierea n fiier avnd activat prinderea erorilor. Dac scrierea este http://www.east.utcluj.ro/mb/mep/antal interzis se va genera o eroare, altfel aceasta va reui. Universitatea Tehnica din Cluj-Napoca n lipsa folosirii lui On Error Resume Next n cod, la apariia unei erori n timpul execuiei Catedra Mecanica si Programare aplicaiei se va afia un mesaj de eroare dup care aplicaia va fi oprit. Conf. Dr. Ing. ANTAL Tiberiu Alexandru Instruciunea On Error Goto 0 Folosirea lui On Error Resume Next activeaz prinderea erorilor pn la ntlnirea instruciunii On Error Goto 0. Aceasta are rolul dezactivrii "ignorrii erorilor" datorit lui On Error Resume Next . Fie aplicaia urmtoare:
<!-- #include file="bibFSO.inc" --> <HTML> <HEAD> <BODY> <% Dim numeFis numeFis ="D:\Text12.htm" 'numele fisierului On Error Resume Next 'prinderea erorilor s-a activat Call stergeFisText(numeFis) 'On Error GoTo 0 If Err.Numebr <> 0 Then Response.Write "Eroare: " & Err.Number & "<BR>" Response.Write "Sursa: " & Err.Source & "<BR>" Response.Write "Descriere: " & Err.Description & "<BR>" Response.Write "FISIERUL " & numeFis & " NU POATE FI STERS!<BR>" End If On Error GoTo 0 'prinderea erorilor s-a dezactivat %> </BODY> </HTML>

Mesajul de eroare afiat este:

Tratarea erorilor n ASP - 197

Eroare: 438 Sursa: Microsoft VBScript runtime error Descriere: Object doesn't support this property or method FISIERUL D:\Text12.htm NU POATE FI STERS!

Privit fugar, i mai ales dac nu suntem vorbitori de englez, totul pare s fie n ordine. Aplicaia a ncercat s tearg fiierul D:\Text12.htm . Deoarece acesta nu exist, s-a generat un mesaj de eroare. ns adevrul st departe de cele afirmate mai sus. Am scris c On Error Resume Next ascunde erorile de sintax, iar linia lui If conine o astfel de eroare. Mesajul de eroare afiat ine de eroarea de sintax i nu de imposibilitatea tergerii fiierului. Dac eroarea sintactic este eliminat, adic n locul lui Err.Numebr se va scrie Err.Number , mesajul care este afiat devine:
Eroare: 53 Sursa: Microsoft VBScript runtime error Descriere: File not found FISIERUL D:\Text12.htm NU POATE FI STERS!

Acesta este mesajul de eroare corect n care suntem anuntai c nu se poate terge fiierul dorit. El este generat de la nivelul funciei Call stergeFisText(numeFis) . Dac imediat dup aceasta ar fi scris instruciunea On Error GoTo 0 , pe lng dezactivarea prinderii erorilor, se vor reseta i valorile curente ale erorilor. n acest caz acestea nu se vor mai afia. Obiectul Err http://www.east.utcluj.ro/mb/mep/antal VBScript folosete obiectul Err pentru stocarea erorilor care apar n timpul rulrii aplicaiei. Proprietile obiectului pot fi setate de ctre limbajul VBScript, un obiect Automation sau de Universitatea Tehnica din Cluj-Napoca ctre programatorul n VBScript. Metodele i proprietile lui se prezint n continuare. Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru Metod Descriere
Clear Raise

terge toate valorile stocate n proprietile lui Err . Permite ca utilizatorul s seteze proprietile obiectului Err pentru ca s poat genera apariia unei erori. Descriere Un ir ce conine o descriere scurt a ultimei erori aprute. n VBScript proprietatea nu are semnificaie pe server. Ea poate fi folosit ns pentru stocarea unei valori n vederea utilizrii ulterioare. La nivelul clientului, proprietatea trebuie s conin numele fiierului Windows de help care este asociat erorii ce se va afia. La nivelul server-ului, proprietatea poate fi folosit pentru stocarea unui nume de fiier HTM sau ASP care va putea fi trimis clientului n vederea afirii erorii. Codul numeric al erorii. ir care conine sursa erorii. n ASP acesta este deseori numele fiierului ASP generator al erorii.

Proprietate
Description HelpContext

HelpFile

Number Source

n continuare se va prezenta o metod de completare a mesajelor stocate n obiect Err pentru o

198 - Tratarea erorilor n ASP

mai bun descriere a erorii aprute. Secven de cod corespunztoare aplicaiei asptextSCAFSO.asp a fost completat pentru prinderea erorilor i afiarea lor ct mai detaliat dup cum urmeaz (asptextSCAFSO1.asp ):
<!-- #include file="bibFSO.inc" --> <HTML> <HEAD> <BODY> <% Sub Afisare() With Response .Write "<TABLE ALIGN=CENTER BORDER=4 BGCOLOR=#66CCFF>" .Write "<TR BGCOLOR=#77BBEE><TD COLSPAN=2E ALIGN=CENTER><B>Eroare in EXECUTIE</B></TD></TR>" .Write "<TR><TD>Cod</TD><TD>" & Err.Number & "</TD>" .Write "<TR><TD>Descriere</TD><TD>" & Err.Description &E "</TD>" .Write "<TR><TD>Sursa</TD><TD>" & Err.Source & "</TD>" .Write "<TABLE>" End With End Sub Dim numeFis Dim textFis numeFis ="D:\Text1.htm" 'numele fisierului http://www.east.utcluj.ro/mb/mep/antal On Error Resume Next Err.Clear Universitatea Tehnica din Cluj-Napoca Call scrieFisText(numeFis, True, "<H1>Prima linie</H1>") Catedra Mecanica si Programare If Err.Number <> 0 Then Err.Raise Conf. Dr. Ing. ANTAL Tiberiu Alexandru scrieFisText()", _ Err.Number, Err.Source & " -> Call Err.Description & " -> Fisierul" & numeFis & " nu poate fi E deschis." Call Afisare() Response.End 'Aceasta eroare este critica End If Err.Clear Call adaugaFisText(numeFis, True, "<H2>A doua linie</H2>") If Err.Number <> 0 Then Err.Raise Err.Number, Err.Source & " -> Call adaugaFisText()", _ Err.Description & " -> Nu se pot adauga date la fisierul " &E numeFis Call Afisare() End If Call adaugaFisText(numeFis, True, "<H3>A treia linie</H3>") Err.Clear textFis = citesteFisText(numeFis) If Err.Number <> 0 Then Err.Raise Err.Number, Err.Source & " -> citesteFisText()", _ Err.Description & " -> Nu se pot citi date din fisierul " &E numeFis Call Afisare() End If If Len(Trim(textFis)) = 0 Then Err.Raise Err.Number, Err.Source & " -> citesteFisText()", _ Err.Description & " -> Motivul erorii este necunoscut!" Call Afisare() End If Response.Write textFis

Tratarea erorilor n ASP - 199

numeFis ="D:\Text123.htm" ' stergere fisier inexistent Call stergeFisText(numeFis) If Err.Number <> 0 Then Err.Raise Err.Number, Err.Source & " -> Call stergeFisText()", _ Err.Description & " -> Fisierul " & numeFis & " NU poate fiE sters." Call Afisare() End If On Error GoTo 0 %> </BODY> </HTML>

La nceputul aplicaiei se activeaz "trecerea peste erori" cu On Error Resume Next . nainte de apelarea funciilor de manipulare a fiierelor erorile sunt terse cu Err.Clear . Dac dup un astfel de apel apare o eroare, secvena If Err.Number <> 0 o va prinde. Din acest moment avem urmtoarele variante: # dac eroarea aprut este critic, atunci se afieaz un mesaj de eroare, dup care aplicaia se oprete. n exemplul prezentat o astfel de eroare este dat de imposibilitatea crerii fiierului n care dorim s scriem mai departe date; # dac eroarea nu este critic se afieaz un mesaj de eroare (n aplicaia prezentat prin apelul procedurii Afisare() ), apoi se continu execuia codului ca urmare a folosirii lui On Error Resume Next ; # ultima varianta este aceea de ignorare a erorii, ns aceast modalitate de reacie http://www.east.utcluj.ro/mb/mep/antal este permis doar dac suntem siguri de apariia ei i de modalitatea de rezolvare a problemei. Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Dincolo de erorile legate de manipularea fiierelor, o problem ar putea fi un fiier care nu Conf. Dr. Ing. ANTAL Tiberiu Alexandru conine date. Cazul este ciudat deoarece noi suntem cei care am scris datele n el. Totui, o astfel de eroare ar putea fi teoretic posibil i o putem prinde verificnd lungimea irului care stocheaz datele citite din fiier. Figure 57 Folosirea lui Err.Raise la extinderea mesajelor de eroare afisate -

200 - Tratarea erorilor n ASP

Orice eroare poate fi tratat imediat n secvena de cod n care a aprut. Pentru c nu am dorit s mai modific codul lui bibFSO.inc tratarea erorii de tergere a unui fiier inexistent am fcut-o n secvena de cod care apeleaz funcia de tergere n linia Call stergeFisText(numeFis) . Aici se ncearc tergerea unui fiier cu nume diferit de cel care a fost creat la nceputul aplicaiei. Eroarea este afiat dup cum se observ n Figura 57. Stocarea erorilor n fiiere Dac dorim s inem un istoric al erorilor aprute n funcionarea aplicaiei o variant este stocarea lor ntr-un fiier text pe discul server-ului de Web. Pentru aceasta utilizatorul anonim al contului de Internet (IUSR_MACHINENAME ) trebuie s aib dreptul de scriere n directorul care va stoca fiierul erorilor. Chiar i n lipsa acestor drepturi erorile pot fi nscrise n fiiere de tipul Windows IIS log. Pentru a nscrie o eroare n IIS log se folosete metoda Response.AppendToLog care are ca i unic argument un ir ce nu poate conine caracterul virgul(","). Metoda funcioneaz doar dac sunt fcute urmtoarele setri (sub Windows XP Professional i cu IIS 5.1): # Lansai n execuie aplicaia Computer Management (vezi Figura 58) din Programs$Administrative Tools; # Clic pe Default Web Site, clic pe butonul din dreapta al mouse-ului, apoi din lista http://www.east.utcluj.ro/mb/mep/antal selectai Properties pentru a deschide fereastra de dialog a proprietilor (vezi Figura 59); Universitatea Tehnica din Cluj-Napoca # Selectai butonul Web Site, iar n aceast fereastr activai check box-ul Enable Catedra ca la Activie log format Logging, apoi verificai Mecanica si Programare s fie selectat opiunea W3C Conf. Dr. Ing. ANTAL Tiberiu Alexandru Extended Log File Format. # Clic pe butonul Properties din regiunea Enable Logging, pe ecran apare fereastra din Figura 60; # Notai locul n care se va stoca fiierul de log. n condiii normale, fiiere de log IIS sunt stocate n directorul C:\WINDOWS\System32\LogFiles . Datorit posibilitilor de configurare locaia implicit ar putea fi schimbat; # Clic pe butonul Extended Properties, aici verificai s fie activate check box-urile URI Stem i URI Query ca n Figura 61. Metoda Response.AppendToLog lucreaz corect doar dac aceste opiuni sunt activate. # Selectai butoanele Apply apoi, nchidei toate ferestrele.

Tratarea erorilor n ASP - 201

Figure 58 Fereastra principala a lui Computer Management

Figure 59 Fereastra de http://www.east.utcluj.ro/mb/mep/antal dialog Default Web Site Universitatea Tehnica din Cluj-Napoca Properties cu Catedra Mecanica si Programare butonul Web Site Dr. Ing. ANTAL Tiberiu Alexandru Conf. selectat

202 - Tratarea erorilor n ASP

Figure 60 Fereastra de dialog Extended Logging Properties cu butonul General Properties selectat

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Figure 61 Catedra Mecanica si Programare Fereastra de Conf. Dr. Ing. ANTAL Tiberiu Alexandru dialog Extended Logging Properties cu butonul Extended Properties selectat

Ca urmare a setrilor efectuate, n directorul C:\WINDOWS\System32\LogFiles\W3SVC1 , apare un fiier de log pentru stocarea erorilor. Un nume al acestuia ar putea fi ex021208.log . Coninutul lui este text, iar pentru aplicaia care urmeaz, un apel al procedurii IISlog genereaz o linie de eroare ce are forma:
2002-12-08 13:45:50 127.0.0.1 GET /CursASP/asptextSCAFSO2.asp

Tratarea erorilor n ASP - 203

Fisier:+asptextSCAFSO2.aspCod:+53Sursa:+Microsoft+VBScript+runtime+error+-> +Call+stergeFisText()Desriere:+File+not+found+->+Fisierul+D:\Text123.htm+NU +poate+fi+sters.Ora/Data:+12/8/2002+3:45:50+PM 200

Se poate observa mesajul de eroare avnd spaii codificate n caractere +. Fiierul asptextSCAFSO2.asp :
<!-- #include file="bibFSO.inc" --> <HTML> <HEAD> <BODY> <% Sub IISlog(Fisier, CodErr, SursaErr, DescriereErr) Dim e e="Fisier: " & Fisier e=e + "Cod: " & CodErr e=e + "Sursa: " & SursaErr e=e + "Desriere: " & DescriereErr e=e + "Ora/Data: " & Now Call Response.AppendToLog(e) End Sub Dim numeFis On Error Resume Next numeFis ="D:\Text123.htm" ' stergere fisier inexistent http://www.east.utcluj.ro/mb/mep/antal Call stergeFisText(numeFis) If Err.Number <> 0 Then Universitatea Err.Source & " -> Call stergeFisText()", _ Err.Raise Err.Number, Tehnica din Cluj-Napoca Err.Description & " Mecanica si Programare Catedra -> Fisierul " & numeFis & " NU poate fiE sters." Conf. Dr. Ing. ANTAL Tiberiu Alexandru Call IISLog("asptextSCAFSO2.asp", Err.Number, Err.SourceE ,Err.Description) End If On Error GoTo 0 %> </BODY> </HTML>

204 - Componente E-mail

E-mail
# Terminologie E-mail (electronic mail) - este un mesaj transferat de la un utilizator al unui calculator, la un altul, deseori prin reele de calculatoare sau modem, via linia telefonic. Mesajul are antet i corp. Exist mai multe standarde de transfer, cel mai utilizat fiind MIME (Multipurpose Internet Mail Extensions) deoarece acesta permite ataarea la corpul mesajului a unor blocuri de tipul diferit de cel al unui text ASCII. Convenional, corpul se poate termina cu o semntur. Antetul conine adresa de e-mail a destinatarului i pe cea a expeditorului mpreun cu ora, data la care s-a trimis mesajul i un subiect. Mesajul este compus de expeditor, deseori cu un program special numit "Mail User Agent" (MUA). Acesta este interfaa ntre utilizator i programul numit "Mail Transfer Agent" (MTA) responsabil pentru transferul mesajelor e-mail la nivel local sau ctre un alt MTA aflat, probabil pe un alt calculator. MTA-urile unor calculatoare din reele distincte comunic prim SMTP. Mesajul ajuns la destinatar se depune ntr-o csut potal, de obicei un fiier pe calculatorul destinatarului, de unde acesta poate fi vizualizat cu ajutorul unui program de citire al e-mail-urilor (care poate s fie acelai sau nu cu MUA folosit de expeditor). SMTP (Simple Mail Transfer Protocol) - un protocol folosit pentru transferul de e-mail-uri ntre calculatoare. Este un protocol de server (alte protocoale sunt folosite pentru accesarea mesajelor). Dialogul SMTP se deruleaz, de regul, n spatele altor http://www.east.utcluj.ro/mb/mep/antal programe, sub controlul sistemului de transport al mesajelor.

Universitatea Tehnica din Cluj-Napoca n cele ce urmeaz se prezint modul de folosire al Microsoft Collaboratory Data Objects pe NT Catedra Mecanica si Programare (CDONTS) server pentru trimiterea unor e-mail-uri cu ajutorul script-urilor ASP. Pentru execuia Conf. Dr. Ing. ANTAL Tiberiu Alexandru codurilor trebuie s avei acces la un server SMTP. Cea mai simpl variant este SMTP-ul care vine cu IIS. O alternativa mai avantajoas, datorit posibilitilor de administrare comode, este cea a SMTP-ului din Microsoft Exchange Server. Microsoft permite programarea CDONTS prin COM. Modelul de obiecte corespunztor este prezentat n Figura 62. Figure 62 Modelul de obiecte CDONTS

n vrful ierarhiei CDONTS sta obiectul Session . Toate celelalte obiecte sunt subordonate lui cu except ia obiectului NewMail . Acesta din urma permite trimiterea unui e-mail fara prea mult efort, n timp ce ierarhia obiectelor Session ofera posibilitatea unui control mai detaliat al

Componente E-mail - 205

transferului de e-mail-uri. Trimiterea unui e-mail cu obiectul NewMail Codul care urmeaza este un exemplu simplu pentru a trimite un e-mail de la [email protected] la [email protected] . Obiectul NewMail foloseste proprietatea To pentru a stoca adresa de e-mail a destinatarului, proprietatea From pentru a stoca adresa de e-mail a expeditorului, iar proprietat ile Subject si Body se folosesc pentru stocarea subiectului si a corpului e-mail-ului de trimis. <%@ Language=VBScript %> <% Dim EMail Set EMail = Server.CreateObject("CDONTS.NewMail") EMail.To = "[email protected]" EMail.From = "[email protected]" EMail.Subject = "Sarbatori fericite!" strBody = "Ramona" & "," & vbCrLf & vbCrLf & vbTab strBody = strBody & "Sarbatori Pline de Bucurii si" strBody = strBody & vbCrLf & vbCrLf & "1 An Nou Fericit." strBody = strBody & vbCrLf & vbCrLf & "http://www.utcluj.ro" EMail.Body = strBody EMail.Send Set EMail = Nothing %> NewMail

http://www.east.utcluj.ro/mb/mep/antal

permite si atasarea de fisiere unui mesaj prin metodele AttachFile sau AttachURL . Universitatea Tehnica din Cluj-Napoca realizeaza atasarea unui fisier, iar AttachURL include un URL care poate fi folosit Catedra Mecanica si Programare de catre destinatar pentru obt inerea datelor atasate. Conf. Dr. Ing. ANTAL Tiberiu Alexandru
AttachFile

De exemplu, daca dorim sa trimitem atasat la un e-mail fisierul, C:\CursASP\salut.txt , atunci se va folosi codul:
<%@ Language=VBScript %> <% Dim EMail Set EMail = Server.CreateObject("CDONTS.NewMail") EMail.To = "[email protected]" EMail.From = "[email protected]" EMail.Subject = "Ai 1 fisier text atasat." strBody = "e-mail trimis cu CDONTS" EMail.Body = strBody EMail.AttachFile = "C:\CursASP\salut.txt" EMail.Send Set EMail = Nothing %>

O varianta de cod mai complicata este aceea n care se doreste trimiterea unui e-mail la mai multe persoane. Pentru acest caz codul este:
<%@ Language=VBScript %> <% Dim EMail Dim ListaAdrese Dim Adresa ListaAdrese= Array("[email protected]","[email protected]","[email protected]") For Each Adresa In ListaAdrese Set EMail = Server.CreateObject("CDONTS.NewMail") EMail.To = Adresa EMail.From = "[email protected]"

206 - Componente E-mail

EMail.Subject = "Salutare" strBody = "e-mail trimis cu CDONTS" EMail.Body = strBody EMail.Send Set EMail = Nothing Next %>

Observat i ca pentru fiecare adresa de e-mail din ListaAdrese se creeaza un nou obiect NewMail . - Aceasta este singura modalitate de lucru deoarece dupa trimiterea unui e-mail obiectul NewMail nu mai poate fi folosit, deci el trebuie distrus si apoi recreat pentru trimiterea unui nou e-mail. Folosirea componentei w3 JMail pentru trimiterea unui e-mail Pentru manipularea mesajelor de e-mail nu suntem limitat i la CDONTS. Exista un numar mare de producatori de componente care asigura facilitat i mai multe si au o mai buna flexibilitate dect cea a instrumentelor Microsoft. Cteva dintre cele mai populare sunt: JMail, ASPEMail, ASPFreeMail, SA-SmtpMail. Majoritatea acestora pot fi ga site prin site-ul http://www.15seconds.com. n cele ce urmeaza am ales sa va prezint un exemplu de lucru cu o componenta numita JMail. Ea trebuie descarcata de pe site-ul http://www.dimac.net. n momentul scrierii acestei cart i varianta gratuita a componentei se prezinta sub forma unui fisier executabil cu numele w3JMail4Free.exe. Dupa descarcarea pe server-ul de Web, programul executabil se va lansa n execut ie, el instalnd automat componenta JMail. Instalarea se poate face si manual, n acest caz fisierul jmail.dll trebuind copiat pe server-ul de Web. Apoi http://www.east.utcluj.ro/mb/mep/antal componenta se nregistreaza prin comanda regsvr32 jmail.dll . Toate versiunile anterioare trebuie sterse nainte de aceasta act iune. Pentru rulareaCluj-Napoca de instalare trebuie sa avet i Universitatea Tehnica din programului drepturile de administrator peCatedra Mecanica si Programare se va face n C:\Program Web server. Implicit, instalarea Files\Dimac\w3JMail4 mpreuna cu manualele de utilizare si unele exemple de lucru simple. Conf. Dr. Ing. ANTAL Tiberiu Alexandru Instalarea va nregistra fisierul jmail.dll ca obiect COM. Secvent a de cod care urmeaza este un exemplu pentru trimiterea unui e-mail de la persoana cu adresa de e-mail n u m e @ d o m e n i u . r o ca tre persoana cu adresa de e-mail [email protected] . Observat i ca adresa server-ului de mail este "smtp.pcnet.ro ". - E-mail-ul este trimis cu succes numai daca persoana care se va lega la server are un cont valid pe acel server.n cazul particular al exemplului meu, eu am un cont DialUp facut pe server-ul lui PCNET.
<%@ Language=VBScript %> <% Dim JMail Dim Server Dim Destinatar, Subiect, Corp ' Informatii legate de Server si contul de e-mail al utilizatorului Server = "smtp.pcnet.ro" ' Adresa de e-mail a destinatarului Destinatar = "[email protected]" Subiect = "Aici se va scrie subiectul mesajului." Corp = "Aici vine corpul mesajului." ' Crearea obiectului JMail Set JMail = Server.CreateObject( "JMail.Message" ) ' Silent se pune pe True daca doriti sa tratati erorile Dvs. ' And set logging to true to ease any potential debugging JMail.Silent = True JMail.Logging = True

Componente E-mail - 207

' Majoritatea server-elor cer 1 adresa de e-mail valida pentru expeditor JMail.From = "[email protected]" JMail.FromName = "Numele expeditorului" ' Adaugarea destinatarilor se face cu metoda addRecipients ' Ea poate fi folosita de mai multe ori. JMail.AddRecipient Destinatar, "Numele destinatarului este opional" ' Daca este cazul, pot fi adaugati mai multi destinatari 'JMail.AddRecipient "[email protected]" ' Formarea subiectului JMail.Subject = Subiect ' Urmeaza corpul mesajului JMail.Body = Corp ' Corpul mesajului se poate scrie si citi. Pentru adaugarea unui text se va ' folosi sintaxa: ' JMail.Body = JMail.Body & " Salutare!" ' Mesajul se trimite cu metoda Send() ' Aceasta are ca parametru adresa server-ului de e-mail ' unde aveti Dumneavoastra contul

%>

If Not objJMail.Send(Server) then Response.write JMail.log http://www.east.utcluj.ro/mb/mep/antal Else Response.write "Mesajul a fost trimis cu succes!" End If Universitatea Tehnica din Cluj-Napoca

Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

208 - Accesul la bazele de date relationale din ASP cu ADO -

Accesul la baze de date relaionale


# Terminologie Relaie (relation) - n matematic, relaia R, este o submulime a produsului cartezian a dou mulimi (A, B), R : A x B. Dac (a, b) este un element din R notaia a R b are semnificaia de "a este n relaia R cu b" (o notaie echivalent folosit, mai des, n teoria bazelor de date relaionale este R(a,b)). O relaie poate fi reflexiv (a R a), simetric ( a R b => b R a), tranzitiv (a R b & b R c => a R c), antisimetric (a R b & b R a => a = b) sau total (a R b sau b R a). n bazele de date, relaia, este un tabel dintr-o baz de date relaional. Baza de date (database) - una sau mai multe mult imi de date persistente asociate cu o aplicat ie pentru actualizarea si interogarea datelor; Persistent a - proprietate a unei aplicat ii de a crea obiecte si date care continua sa existe - si sa-si pastreze valorile ntre doua execut ii ale aplicat iei. - - Model de date (data model) - formalism matematic cu notat ii pentru descrierea structurilor de date si a mult imii operatorilor folosit i pentru manipularea si validarea datelor; Model de date relaional (relational model) - un model de date introdus de E. F. Codd n 1970. n acest model datele sunt organizate n tabele. Mult imea numelor coloanelor se numeste schema tabelului. Datele pot fi manipulate folosind algebra relat ionala. Limbajul SQL este implementarea unei astfel de algebre. http://www.east.utcluj.ro/mb/mep/antal SQL (Structured Query Language) - un limbaj neprocedural, de interfat a, ntre utilizator - si bazele de date relat ionale dezvoltat de IBM n anii '70. Diferent a esent iala ntre SQL - Universitatea Tehnica din Cluj-Napoca s i alte limbaje este aceea ca n Mecanica si -iunile specifica ce operat ii se vor face cu Catedra SQL instructProgramare datele si nu modul Conf. Dr. Ing. ANTAL Tiberiu Alexandru n care se realizeaza acestea. Baza de date relaional (relational database, relational database management system) o baza de date ce utilizeaz modelul de date dezvoltat de E. F. Codd. O baza de date relat ionala permite definirea structurilor de date, operat iile de stocare, de extragere a datelor si a constrngerilor de integritate. ntr-o baza de date relat ionala (BDR), datele si toate relat iile ntre date sunt organizate n tabele. Un tabel este o colect ie de nregistrari (rnduri) unde fiecare nregistrare a tabelului cont ine aceleasi cmpuri. Anumite cmpuri pot fi desemnate chei. n acest caz viteza de cautare a unor valori specifice acelui cmp va creste datorita folosirii de indexuri. ntre nregistarile unor tabele diferite se pot realiza asocieri pe baza valorilor comune ale unui anumit cmp particular din fiecare tabel. Cheie primar - numrul minim de cmpuri care au fost alese pentru a identifica unic fiecare rnd dintr-un tabel. Constrngere de integritate - o regula care trebuie sa ramna adevarata pentru ca baza de date sa-si pastreze integritatea. De exemplu, ntr-o baza de date genealogica fiecare - individ trebuie sa fie copilul unor parint i. De asemenea, individul nu poate avea dect doi parint i naturali. Index - o secvent a de perechi (cheie, pointer) n care fiecare pointer poanteaza la o - nregistrare din baza de date care cont ine valoarea cheii ntr-un cmp particular. Indexul este sortat pe baza valorilor de chei si permite cautarea rapida a unei valori particulare de cheie. Tabel - un obiect al bazei de date care stocheaza datele. Este format din mai multe coloane. Fiecare coloana are asociat un tip de data. Tipul coloanei se foloseste pentru manipularea corecta a cont inutului. Normalizare - o relat ie dintr-o baza de date relat ionala se zice ca este ntr-o forma normala daca satisface un anumit grup de constrngeri. Lucrarea init iala a lui Codd - definea trei forme normale.

# # #

# #

Accesul la bazele de date relationale din ASP cu ADO - 209 -

Tupl - un obiect de date ce cont ine una sau mai multe componente. Componentele unei tuple pot fi de tipuri diferite. Cteva exemple de tuple sunt: (1,2), ("Tuple", Da), (a, (x, y), c). Tranzacie - o unitate logic de interaciune cu o BDR. Aceasta trebuie tratat ntr-o manier coerent i sigur, independent de alte tranzacii. Pentru o tranzacie se garanteaz, fie realizarea ei complet, fie nerealizarea ei. Dac o eroare conduce la realizarea parial a tranzaciei, tranzacia poate fi "derulat napoi" pentru a opri lsarea bazei de date ntr-o stare de inconsisten. Interogare (query) - aciune de extragere a unor informaii din baza de date.

Conceptul de dat| Pentru cei care au deja experient a n domeniul calculatoarelor, not iunea de data este asociata cu - numere, siruri de caractere, imagini, sunete ce pot fi stocate si prelucrate pe calculator, eventual transmise mai departe prin ret ea. Privind nsa conceptul de data general, data, reprezinta o reflectare, part iala, a realitat ii. Deseori, cuvntul de data apare n contextul conceptului de model. - Necesitatea modelului apare datorita complexitat ii lumii pe care ncercam sa o surprindem. Abundent a detaliilor ne depaseste. Din acest motiv, realitatea va fi simplificata de om, prin - crearea unor modele. Modelul se obt ine prin eliminarea detaliilor si pastrarea unor caracterstici - minimale din realitate, fara a pierde nsa veridicitatea modelului (care dintre carateristici sunt pastrare, deoarece se considera a fi semnificative, respectiv de ce si care anume se elimina asta http://www.east.utcluj.ro/mb/mep/antal evolut ie a caracteristicilor este o alta carte). Datele reprezinta o masura cantitativa a procesului de considerate semnificative pentru model (aceste caracteristici descriu modelul). Generaliznd, datele reprezinta o colect ie Universitatea Tehnica din Cluj-Napoca - de observat ii pe marginea unor evenimente pe care le consideram Catedra Mecanica si Programare importante. Conf. Dr. Ing. ANTAL Tiberiu Alexandru Datele n sine nu au nici o semnificat ie (ele nu au un nt eles). Ele pot nsa deveni informat ie n urma asocierii directe acestora cu anumite caracteristici. Datele vor fi astfel ncarcate cu semnificat ie ca urmare a interpretarii lor ntr-un context particular. Aceasta interpretare se poate face de catre om sau, automat, de catre un sistem de calcul. Daca consideram numarul ntreg 1100, el este data dar nu este informat ie. n contextul Salariul meu este de 1100 RON, data 1100 are deja un nt eles particular (este valoarea remunerarii mele), devenind informat ie. n contextul Salariul meu de 1100 RON este acceptabil., data 1100 permite trecerea la cunoastere. Deoarece eu cunosc salariile unei mari majoritat i, sunt n stare sa calculez un salar mediu si sa ma plasez undeva, n raport cu acesta. Procesul de plasare la nivelul de acceptabil - are la baza un grup de prelucrari iar rezultatul de acceptabil are la baza un proces deductiv. Foarte pe scurt, datele reprezinta materialul primar, informat ia reprezinta date + nt eles, iar cunoaterea este informat ie + prelucrare. Scopul colectarii datelor este obt inerea de informat ii sau de cunoastere ca urmare a unui proces de deduct ie bazat pe experienta sau pe reguli ce poate fi implementate la nivelul unui sistem de calcul. n bazele de date, data, va fi organizata sub forma unui singur articol de informat ie (o singura valoare). Deoarece n procesul de colectare a datelor pot sa apara erori, termenul de integritate a datelor defineste mecanismele de prevenire a erorilor. Modelul de date relaional Se numete model de date, un formalism matematic cu notat ii pentru descrierea structurilor de date si a mult imii operatorilor folosit i pentru manipularea si validarea datelor. Modelul de date relat ional este introdus de E.F. Codd n 1970. n acest model datele sunt structurate (organizate) n relaii care au nume. Mult imea numelor coloanelor se numeste schema relaiei. Structura de date logica numita rela-ie este bidimensionala, fiind cunoscuta sub numele de tabel, t

210 - Accesul la bazele de date relationale din ASP cu ADO -

n baza de date fizica. Cele dou dimensiuni ale structurii sunt denumite rnduri si coloane. Datele modelului se pot modifica folosind operatorii algebrei relat ionale (limbajul SQL este implementarea unei astfel de algebre), ei asigurnd selectarea, inserarea, modificarea si stergerea - datelor din tabele, iar restric-iile de integritate asigura pastrarea consistenei datelor. t Conceptul de redundan| Redundana datelor apare atunci cnd o anumit dat este stocat n mai multe tabele ale bazei de date. Acest surplus de date necesit o atenie special atunci cnd se aduc modificri asupra coninutului valorilor stocate n tabele. Dac valorea unei date redundante este modificat, atunci va trebui s ne asigurm c toate copiile respectivei date au fost aduse la nou valoare. n aceast situaie se zice c valoarea respectiv este consistent n baza de date. Dac nu toate copiile au fost actualizate la noua valoare se zice c data este inconsistent. Se zice c o baz da date este n stare consistent dac toate datele acesteia sunt consistente, altfel este n stare inconsistent. Terminologii alternative ale modelului relaional Termenii folosii n modelul de date relaionali sunt, deseori, productori de confuzie. Deoarece modelul are ca surs algebra relaional, matematicienii prefer s folosesc anumite denumiri. Proiectanii bazelor de date au i ei termeni specifici, dar echivaleni cu cei din algebra. n final, administratorii de sistem folosesc i ei propriul lor jargon atunci cnd realizeaz operaii de ntreinere a bazelor de date. Tabelul care urmeaz i propune s prezinte termenii alternativi folosii de cele trei categorii de persoane care folosesc acest model. http://www.east.utcluj.ro/mb/mep/antal Algebra relaional Universitatea Tehnica din Cluj-Napoca Proiectant BDR Administrator de sistem Catedra Mecanica si Programare Fiier Relaie Tabel Conf. Dr. Ing. ANTAL Tiberiu Alexandru Tupl Rnd nregistrare Atribut Coloan Cmp

Atributele reprezinta date elementare care sunt nume ale coloanelor unei relat ii. De exemplu, relat ia chirie(IDClient, NumeClient) cont ine atributele IDClient , NumeClient . Valorile actuale pentru aceste atribute ale relat iei se stocheaza n tuple sau rnduri ale tabelului. Atributele se grupeaza pe baza dependent ei de valorile din cheia primara. O cheie primar (CP) este un atribut, sau un grup de atribute, care indentifica unic un rnd din tabel. Un tabel poate avea o singura cheie primara. Deoarece valorile din CP se folosesc pentru identificare, ele nu pot fi vide (nule). Asocierea ntre dou relaii se face, tipic, printr-un atribut comun celor doua relat ii. Atributul comun este, de obicei, CP ntr-un tabel si cheie strin (CS) n celalalt. Regulile de integritate referenial dicteaza valorile CS dintr-o relat ie n raport cu valorile CP din cealalta relat ie. Proiectarea unei baze de date relat ionale se face pe baza regulilor de normalizare care dicteaza apartenent a atributelor la relat ii. Aceste reguli vor fi descrise, pe scurt, n continuare. Folosirea modelului de date relat ional normalizat asigura minimizarea redundant ei datelor mpreuna cu protect ia contra anomaliilor de inserare, stergere si actualizare care apar ca urmare a definirii unor relat ii incorecte. Fie relat ia, cu numele ProiecteMembri si atributele IDPr , NumePR , Suma , IDMem , Membru , Tip Adresa si Telefon avnd sapte tuple, prezentata n continuare:

Accesul la bazele de date relationale din ASP cu ADO - 211 -

Tabelul ProiecteMembri
IDPr PR1 PR1 PR1 PR2 PR2 PR3 Pr3 NumePr Proiect1 Proiect1 Proiect1 Proiect2 Proiect2 Proiect3 Proiect3 Suma 1000000 1000000 1000000 2000000 2000000 3000000 3000000 IDMem ME1 ME2 ME3 ME4 ME3 ME2 ME1 Membru Ion Vasile Ada Nelu Ada Vasile Ion Calitate Director Membru Membru Director Membru Membru Director Catedra Mecanica Mecanica Programare Programare Programare Mecanica Mecanica Telefon 111111 222222 333333 444444 333333 222222 111111

Pentru ilustrarea problemelor legate de redundant a datelor se va compara prima relat ie prezentata n tabelul de mai sus, cu cele doua relat ii din tabelele urmatoare: Tabelul Proiecte
IDPr PR1 PR2 PR3 NumePr Proiect1 Proiect2 Proiect3 Suma 1000000 2000000 3000000 http://www.east.utcluj.ro/mb/mep/antal

Tabelul Membri
IDPr PR1 PR1 PR1 PR2 PR2 PR3 PR3 IDMem ME1 ME2 ME3 ME4 ME3 ME2 ME1 Membru Ion Vasile Ada Nelu Ada Vasile Ion

Universitatea Tehnica din Cluj-Napoca Catedra Calitate Mecanica si Programare Catedra Telefon Conf. Dr. Ing. ANTAL Tiberiu Alexandru
Director Membru Membru Director Membru Membru Director Mecanica Mecanica Programare Programare Programare Mecanica Mecanica 111111 222222 333333 444444 333333 222222 111111

Observat i ca, n cazul primei relat ii, n tabel avem stocate 8 x 7 = 56 de celule de date. n cazul - urmatoarelor doua tabele, pentru stocarea acelorasi informat ii, s-au folosit numai 3 x 3 + 7 x 6 = 51 de celule de date. Putem spune ca datorita descompunerii relat iei init iale n doua noi relat ii, spat iul necesar pentru stocarea informat iilor a scazut ca urmare a eliminarii unor repetari de date, adica redundant a datelor s-a micsorat. Conceptul dependenei funcionale Dependena funcional descrie legtura dintre atributele unei relaii sau vorbind n jargonul proiectanilor de baze de date descrie legtura ntre coloanele unui tabel. Fiind dat un tabel T i dou nume de coloane A i B, se zice c A determin funcional pe B n raport cu T i scriem A B, dac i numai dac pentru orice dou rnduri ri i rj de fiecare dat cnd avem ri(A) = rj(A) atunci avem i ri(B) = rj(B). Dac A determin funcional pe B, de fiecare dat cnd avem dou valori indentice n A, valorile corespunztoare din B trebuie sa fie i ele indentice. Pentru tabelul urmtor dorim s verificm urmtoarele dependene funcionale: A B, A C, C A, AB

212 - Accesul la bazele de date relationale din ASP cu ADO -

C, AC B. Tabelul T
A r1 r2 r3 r4 r5 1 3 3 7 9 4 5 4 3 1 B 2 6 6 8 0 C

Dependena funcional A B nu se verific deoarece r2(A) = r3(A), dar r2(B) r3(B). Dependena funcional A C se verific deoarece pentru cele dou rnduri unde avem valori egale se verific r2(A) = r3(A), dar r2(C) = r3(C). Dependena funcional C A se verific i ea. Dependena funcional AB C se verific deoarece nu exist rnduri care s aib valori identice pentru coloanele A i B, iar n lipsa unor astfel de valori dependena funcional nu poate fi infirmat. Dependena funcional AC B nu se verific deoarece r2(AC) = r3(AC), dar r2(B) r3(B). n cazul relaiei ProiecteMembri se poate stabili dependena funcional IDPr NumePr , http://www.east.utcluj.ro/mb/mep/antal atributul IDPr mai poart denumirea de variabil independent sau determinant, iar atributul NumePR se numete variabil dependent. Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Tipuri de dependene funcionale Ing. ANTAL Tiberiu Alexandru Conf. Dr. Fiind dat un tabel T i coloanele A, B pentru care avem A B, se zice c B este dependent funcional complet de A, dac i numai dac nu exist o submulime W a valorilor din coloana A astfel nct W B. Dac mulimea W exist se zice c B este dependent funcional parial de A. Un exemplu de coloane ntre care exist dependen funcional complet ar putea fi NrComanda,Produs Cantitate. Exist situaii n care ntre coloanele unui tabel pot fi scrise simultan, dependenele funcionale: A B, B A, B C, C A i A C. n aceste condiii ' ' se zice c atributul C este dependent funcional tranzitiv de atributul A. n practic o dependena funcional tranzitiv ar putea lua forma NrFactura IDClient NumeClient. Conceptul de normalizare n bazele de date relaionale, normalizarea definete un proces de descompunere reversibil, care se aplic asupra unei mulimi de relaii pentru a se obine o nou mulime de relaii mai simple i mai uniforme ca structur. Analiza relaiilor iniiale se face la nivel de structur, utiliznd atribute pentru care se vor cuta dependene funcionale. n practic, analiza se face prin aplicarea unor teste relat iilor pentru a determina daca acestea satisfac sau nu cerint ele unei anumite forme normale. Iniial, E. F. Codd, a definit trei forme normale cunoscute sub numele de prima form normal (se prescurteaz 1NF), a dou form normal (se prescurteaz 2NF) i a treia form normal (se prescurteaz 3NF), ulterior, acestora sau mai adugat i altele. n cele ce urmeaza voi discuta numai primele trei forme normale. O relaie care trece testul 3NF, trece i testele 2NF i 1NF. O relaie care trece 2NF, trece i testul 1NF. Etapele procesului de normalizare Normalizarea este o tehnic de analiz a relaiilor bazat pe cheile primare i dependena funct ionala. Ea descompune o relat ie nenormalizat, progresiv, n mai multe relaii cu numr de atribute mai mici i tuple mai puine, pn la atingerea unui nivel optim al descompunerii. Cteva

Accesul la bazele de date relationale din ASP cu ADO - 213 -

dintre rezultatele pozitive ale normalizrii sunt: ! spaiul folosit pentru stocarea datelor este mai mic; ! actualizarea tabelelor se poate face mai eficient; ! descrierea bazei de date devine mai clar. Forma nenormal| Se numete form nenormal (unnormalized form - UNF) un tabel care conine unul sau mai multe grupuri de date care se repet. Acest tabel nu este nc o relaie, deoarece, uneori, la intersecia dintre un rnd i o coloan avem mai mult de o dat (sunt mai multe valori distincte). Exemplul urmtor i propune s normalizeze tabelul iniial ProiecteMembri care stocheaz date legate de proiecte de cercetare i membrii acestor proiecte. Relaia n UNF este:
ProiecteMembri(IDPr, NumePr, Suma, Membri(IDPr, IDMem, Membru , ...))

Tabelul ProiecteMembri
IDPr PR1 NumePr Proiect1 Suma 1000000 IDMem ME1 ME2 ME3 ME4 ME2 Membru Ion Vasile Ada Nelu Calitate Director Membru Membru Director Membru Catedra Mecanica Mecanica Programare Programare Mecanica Telefon 111111 222222 333333 444444 333333 222222 111111

PR2 PR3

Proiect2 Proiect3

2000000 3000000

ME3 Ada Membru Programare http://www.east.utcluj.ro/mb/mep/antal Vasile

ME1 Ion Director Mecanica Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. relaie ANTAL Tiberiu Alexandru Pentru ca acest tabel s devin o Dr. Ing.acesta va trebui normalizat.

Prima form| normal| Un tabel este adus la prima form normal (First Normal Form - 1NF) dac: ! este o relaie valid (nu mai exist grupuri de valori care se repet la nivelul unei celule); ! o cheie unic (Cheia Primar - CP) a fost gsit pentru identificarea fiecrui rnd (n exemplele urmtoare, CP va fi subliniat); ! toate atributele sunt dependente de toate atributele cheii sau de o parte dintre ele. Prima etap const n reorganizarea tabelului pe linii i coloane, astfel nct, la intersecia ntre o linie i o coloan s avem cel mult o singur dat. Tabelul ProiecteMembri
IDPr PR1 NumePr Proiect1 Suma 1000000 IDMem ME1 ME2 ME3 PR2 Proiect2 2000000 ME4 ME3 PR3 Proiect3 3000000 ME2 ME1 Membru Ion Vasile Ada Nelu Ada Vasile Ion Calitate Director Membru Membru Director Membru Membru Director Catedra Mecanica Mecanica Programare Programare Programare Mecanica Mecanica Telefon 111111 222222 333333 444444 333333 222222 111111

214 - Accesul la bazele de date relationale din ASP cu ADO -

Cea de a dou etap const n completarea datelor lips n noul tabel. Pentru aceasta se vor copia valorile care pn acum nu se repetau, pentru fiecare rnd pentru care se repeta. Noul tabel ce se obine este: Tabelul ProiecteMembri
IDPr PR1 PR1 PR1 PR2 PR2 PR3 PR3 NumePr Proiect1 Proiect1 Proiect1 Proiect2 Proiect2 Proiect3 Proiect3 Suma 1000000 1000000 1000000 2000000 2000000 3000000 3000000 IDMem ME1 ME2 ME3 ME4 ME3 ME2 ME1 Membru Ion Vasile Ada Nelu Ada Vasile Ion Calitate Director Membru Membru Director Membru Membru Director Catedra Mecanica Mecanica Programare Programare Programare Mecanica Mecanica Telefon 111111 222222 333333 444444 333333 222222 111111

Noul tabel obinut nu este nc o relaie deoarece nu are CP. Observai c n acest moment, alegerea lui IDPr pe post de CP nu mai asigur identificarea unic a unui rnd. Cea de a treia etap a trecerii la UNF la 1NF se face prin identificarea grupurilor care se repet n noul tabel. Acestea sunt haurate cu linii nclinate n reprezentarea urmtoare. http://www.east.utcluj.ro/mb/mep/antal Tabelul ProiecteMembri Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare IDPr NumePr Suma IDMem Membru Calitate Catedra Conf. Dr. Ing. ANTAL Tiberiu Alexandru PR1 Proiect1 1000000 ME1 Ion Director Mecanica
PR1 PR1 PR2 PR2 PR3 PR3 Proiect1 Proiect1 Proiect2 Proiect2 Proiect3 Proiect3 1000000 1000000 2000000 2000000 3000000 3000000 ME2 ME3 ME4 ME3 ME2 ME1 Vasile Ada Nelu Ada Vasile Ion Membru Membru Director Membru Membru Director Mecanica Programare Programare Programare Mecanica Mecanica

Telefon 111111 222222 333333 444444 333333 222222 111111

Dac ele exist, se extrag mpreun cu CP a relaiei principale, ntr-un nou tabel (n exemplul prezentat el se numete Proiecte). Celelalte coloane cu valorile corepunztoare vor fi stocate i ele ntr-un nou tabel (n exemplul prezentat el se numete Membri). Pentru ca descompunerea relaiei iniiale s se fac fra pierdere (descompunerea realizeaz o separare a atributelor relaiei iniiale, care trebuie s poat fi refcute din noile relaii) este nevoie s gsim un atribut (sau grup de atribute) care s permit refacerea tabelului iniial. n acest scop, CP a noii relaii, care era i CP a relaiei iniiale trebuie extras i n cel de al doilea tabel. Deoarece aceasta este strin de noua relaie, fiind extras numai pentru ca descompunerea s se fac fr pierdere, ea mai poart i denumirea de cheie strin (CS). Pentru noile relaii formate se determin CP. Conform celor scrise 1NF este:
Proiecte(IDPr, NumePr, Suma) Membri(IDPr, IDMem, Membru, Calitate, ...)

Anomaliile relaiilor 1NF Redundanele relaiilor 1NF conduc la posibilitatea apariiei unor anomalii la manipularea datelor.

Accesul la bazele de date relationale din ASP cu ADO - 215 -

Exist dou tipuri de anomalii: de actualizare i de inserare/tergere. n practic, deoarece la nivelul limbajului SQL exist implementai operatorii de actualizare (UPDATE), de inserare (INSERT) i de tergere (DELETE) se prefer tratarea a trei cazuri distincte. Ultimele dou cazuri ns pot fi considerate o singur categorie deoarece, o relaie care are anomalia la tergere, o va avea automat i pe cea la inserare. Tabelul Membri
IDPr PR1 PR1 PR1 PR2 PR2 PR3 PR3 IDMem ME1 ME2 ME3 ME4 ME3 ME2 ME1 Membru Ion Vasile Ada Nelu Ada Vasile Ion Calitate Director Membru Membru Director Membru Membru Director Catedra Mecanica Mecanica Programare Programare Programare Mecanica Mecanica Telefon 111111 222222 333333 444444 333333 222222 111111

Anomalia la inserare apare atunci cnd dorim s inserm n tabel un nou membru care ns nc nu s-a hotrt la care proiect ar dori s lucreze. Deoarece CP a acestei relaii este una compus din atributele (IDPr, IDMem )http://www.east.utcluj.ro/mb/mep/antal integritatea datelor fiind ar nsemna s lsm vid o parte din CP compromis. Universitatea Tehnica din Cluj-Napoca Anomalia la tergere apare atunci cnd tergem i Programare din tabel corespunztor unui Catedra Mecanica si ultimul rnd proiect particular (de exemplu, se terg toate rndurile cu Alexandru ). Menionez c aceast Conf. Dr. Ing. ANTAL Tiberiu IDPr = PR2 tergere se face din punctul de vedere al proiectului, dar va duce i la pierderea membrilor (care ar putea fi utilizai n alte proiecte). n acel moment pe lng faptul c dispare asocierea ntre respectivul proiect i membrii lui, se pot pierde i informaiile legate de catedrele la care lucrau respectivii membri. n cazul nostru, Ada mai apare n tabel, dar toate informaiile legate de Nelu vor fi pierdute. Anomalia la actualizare apare ca urmare a redundanei datelor, de exemplu, la nivelul atributului Catedra . Deoarece unele nume de catedre se repet, n situaia n care cineva se mut de la o catedr la o alta, trebuie s verificm toate apariiile respectivului membru i s le modificm corespuztor. Dac, din anumite motive, nu se fac toate modificrile necesare, atunci, baza de date ajunge n starea de inconsisten. A dou| form| normal| O relaie este n a dou form normal (Second Normal Form - 2NF) dac este deja n 1NF i toate atributele ne-cheie sunt dependente complet de CP (nu exist dependene pariale). Trecerea de la 1NF la 2NF se face prin extragerea dependenelor pariale ntr-o nou relaie.
Membri(IDPr, IDMem, Membru, Tip, Catedra, Telefon)

216 - Accesul la bazele de date relationale din ASP cu ADO -

este deja n 2NF pentru c are un singur atribut n cheia primar (CP). n urma eliminrii dependenelor pariale pentru cea de a dou relaie din 1NF
Proiecte(IDPr, NumePr, Suma) Membri(IDPr, IDMem, Membru, Calitate, Catedra, Telefon)

devine
Membri(IDPr, IDMem, Calitate) Persoane(IDMem, Membru, Catedra, Telefon)

i n cazul relaiilor aduse lahttp://www.east.utcluj.ro/mb/mep/antal anomalia la inserare apare 2NF sunt posibile anomalii. De exemplu, atunci cnd dorim s inserm un rnd n tabelul Membri (adic avem nevoie de un IDMem valid Universitatea Tehnica din Cluj-Napoca n CP), dar nu avem nc inserate rnduri n tabelul Persoane . Anomalia la tegere apare la Catedra Mecanica Programare nivelul relaiei Persoane atunci cnd tergem unsimembru care este unicul participant dintr-o Conf. Dr. Ing. ANTAL Tiberiu Alexandru catedr n tabelul Persoane , situaie n care se pierd toate datele legate de catedra respectiv. Anomalia la actualizare ar putea s apar deoarece pot exista mai muli membri din aceeai catedr (deci, numele respectivei catedre se va repeta). A treia form| normal| O relaie este n a treia form normal (Third Normal Form - 3NF) dac este n 2NF i toate dependenele tranzitive au fost extrase ntr-o alt relaie. Se verific dependena atributelor ne-cheie de alte atribute ne-cheie. Membri(IDPr, IDMem, Calitate) este deja n 3NF deoarece nu sunt dependene tranzitive. n urma extragerii dependenelor tranzitive relaia din 2NF
Persoane(IDMem, Membru, Catedra, Telefon)

devine
Persoane(IDMem, Membru, Telefon) Catedre(Membru, Catedra)

Accesul la bazele de date relationale din ASP cu ADO - 217 -

n final, se obine urmtoarea structur logic normalizat pentru stocarea persoanelor n baza de date relaional.

Aceast nou organizare a bazei de date conine tabelele, atributele, CP i asocierile formate ntre noile tabele pe baza valorilor comune stocate n CP i n CS. Asocierile sunt marcate n figura prin saget i care pleaca de la CP catre CS. Introducere n SQL SQL este un limbaj particular nscut i dezvoltat n baza rspndirii modelului relaional. n http://www.east.utcluj.ro/mb/mep/antal ultimii ani a devenit limbajul standard pentru BDR. Obiectivele limbajului sunt: ! crearea bazelor de date i a relaiilor; Universitatea Tehnica din Cluj-Napoca ! realizarea operaiilor de ntreinere a BDR; Catedra Mecanica si Programare ! realizarea interogrilor simple i complexe. Conf. Dr. Ing. ANTAL Tiberiu Alexandru Ca urmare a standardizrii ISO limbajul SQL are dou componente majore: ! limbajul pentru definiia datelor (Data Definition Language - DDL): pentru definirea structurii bazei de date i controlul accesului la date; ! limbajul pentru manipularea datelor (Data Manipulation Language - DML): pentru extragerea i actualizarea datelor. O instruciune SQL este format din cuvinte rezervate i cuvinte definite de utilizator. Cuvintele rezervate (numite si cuvinte cheie) sunt partea fixat a limbajului deoarece au o semnificaie predefinit. Ele trebuie scrise fr a fi desprite pe mai multe linii. Cuvintele definite de utilizator sunt "inventate" de el i reprezint nume ale obiectelor bazei de date cum sunt tabelele, coloanele etc. Cuvintele unei instruciuni SQL se scriu conform mulimii regulilor de sintax specifice limbajului SQL. Multe dintre dialectele SQL folosesc caracterul "punct i virgul" ";" pe post de terminator de instruciune SQL, nsa conform standardului, acestea sunt opionale. Pentru exemplele care vor fi dezvoltate n continuare este suficienta prezentarea a numai patru dintre instrunciunile DML din SQL: # SELECT - pentru interogarea bazei de date; # INSERT - pentru inserarea datelor ntr-un tabel; # UPDATE - pentru actualizarea datelor unui tabel; # DELETE - pentru tergerea datelor unui tabel. Instruciunea SELECT Permite extragerea i afiarea datelor din unul sau mai multe tabele.

218 - Accesul la bazele de date relationale din ASP cu ADO -

SELECT cu un singur tabel Pentru extragerea tuturor numelor de proiecte stocate n cmpul NumePr din tabelul Proiecte scriem:
SELECT NumePr FROM Proiecte;

Pentru extragerea numelor de proiecte i a sumei pltite pe proiect, stocat n cmpul Suma , din acelai tabel se scrie:
SELECT NumePr, Suma FROM Proiecte;

Deoarece multe interogri SQL folosesc toate cmpurile unui tabel. Folosirea unui asterisc "*" este o form prescurat de scriere pentru "toate cmpurile".
SELECT * FROM Proiecte;

Atunci cnd dorim s impunem condiii cu privire la rndurile extrase se va folosi clauza WHERE . De exemplu, pentru extragerea proiectelor din tabelul Proiecte care au o suma mai mare de 500000 n cmpul Suma se va scrie:
SELECT * FROM Proiecte WHERE Suma > 500000;

http://www.east.utcluj.ro/mb/mep/antal Dac dorim ca rndurile sortate s fie n ordinea cresctoare alfabetic a proiectelor vom folosi clauza ORDER BY astfel Universitatea Tehnica din Cluj-Napoca Catedra NumePr; SELECT * FROM Proiecte ORDER BY Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru Pentru sortarea n ordinea descresctoare a numelor de proiecte scriem:

SELECT * FROM Proiecte ORDER BY NumePr DESC;

SELECT cu mai multe tabele Dac datele de extras sunt stocate, ca urmare a normalizrii, n mai multe tabele, una dintre metodele pentru conectarea tabelelor pe baza unui cmp comun folosete instruciunea JOIN . S presupunem c dorim s extragem toate proiectele i tipurile membrilor pe baza cmpurilor IDPr din Proiecte i IDPr din Membri. IDPr este CP n Proiecte i CS n Membri. ntre proiecte i membri este o relaie unu-la-muli, adic unui rnd din tabelul Proiecte pot s-i corespund mai multe rnduri ale tabelului Membri. Instruciunea INNER JOIN face ca din cele dou tabele s fie extrase doar rndurile care au valori comune n cmpurile de conectare.
SELECT NumePr.Proiecte, Membri.Calitate FROM Proiecte INNER JOIN Membri ON Proiecte.IDPr = Membri.IDPr;

Instruciunea INSERT Instruciunea INSERT permite adugarea unui rnd ntr-un tabel. Una dintre formele ei este:
INSERT INTO NumeTable (lista de cmpuri) VALUES (lista de valori)

Dac dorim s inserm un nou proiect n tabelul Proiecte scriem:


INSERT INTO Proiecte (IDPr, NumeProiect, Suma1)

Accesul la bazele de date relationale din ASP cu ADO - 219 -

VALUES ('PR4', Proiect nou', 100000);

Instruciunea UPDATE Instruciunea UPDATE permite modificarea coninutului unui rnd existent dintr-un tabel. Forma ei este:
UPDATE NumeTabel SET NumeColoana1=Valoare1 [,NumeColoana2=Valoare2 ...] [WHERE Conditie]

Pentru a crete cu 20% valoarea din cmpul Suma ale tuturor proiectelor din tabelul Proiecte scriem:
UPDATE Proiecte SET Suma=Suma*1.20;

Pentru a crete valoarea din cmpul tabelul Proiecte scriem:


UPDATE Proiecte SET Suma=Suma*1.20 WHERE NumePr="Proiect1";

Suma

cu 20% a proiectului cu numele "Proiect1 " din

Instruciunea DELETE http://www.east.utcluj.ro/mb/mep/antal Instruciunea permite tergerea unor rnduri ale unui tabel. Forma ei este: Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru Pentru a terge rndul corespunztor proiectului cu numele "Proiect1 " din tabelul Proiecte scriem:
DELETE FROM NumeTabel [WHERE Conditie] DELETE FROM Proiecte WHERE NumePr="Proiect1";

Introducere n ADO Interfaa ntre ASP i bazele de date relaionale se face prin biblioteca de obiecte ActiveX Data Objects (ADO). ADO permite aplicaiilor client s acceseze i s manipuleze date prin orice furnizor de servicii OLE DB (OLE DB este o component a unui SGBDR care implementeaz accesul eficient prin reea local sau Internet la date stocate conform modelului relaional, e-mail, foi de calcul etc.). ADO poate accesa date stocate conform mai multor modele de date, ns n cele ce urmeaz se va prezenta manipularea datelor din bazele de date Microsoft Access. ADO conine obiecte pentru conectarea la o surs de date i manipularea acestora. n modelul de obiecte ADO (Figura 63), obiectul Connection definete o sesiune de lucru pentru un utilizator al unei surse de date particulare. Obiectul ADO Command este folosit pentru executarea instruciunilor SQL legate de o anumit surs de date, iar obiectul Recordset pentru vizualizarea coninutului unui tabel sau a rezultatelor execuiei unei instruciuni SQL.

220 - Accesul la bazele de date relationale din ASP cu ADO -

Figure 63 Modelul de obiecte ADO

Set|ri specifice pentru deschiderea conexiunii Obiectul Connection reprezint conexiunea fizic la sursa de date. Dup iniializarea i stabilirea conexiunii, pot fi utilizate metode specifice pentru accesarea sursei de date la care ne-am conectat (n cazul nostru, baza de date). Principalele metode i proprieti ale lui http://www.east.utcluj.ro/mb/mep/antal Connection se prezint n tabelele urmtoare: Metod
Open Close Execute BeginTrans CommitTrans RollBackTrans

Universitatea Tehnica din Cluj-Napoca Descriere Catedra Mecanica si Programare Conf. Dr. conexiune nou cu sursa de date. Deschide o Ing. ANTAL Tiberiu Alexandru nchide conexiunea mpreun cu obiectele dependente de aceasta. Execut o interogare; tipic, aceasta este o instruciune SQL. ncepe o tranzact ie noua. Salveaza modificarile realizate n timpul tranzact iei. Anuleaza toate modificarile facute n timpul tranzact iei. Descriere Conine informaiile necesare stabilirii conexiunii. Indic starea conexiunii. Seteaz sau ntoarce locul cursorului. Seteaz modul de citire, scriere sau citire/scriere al conexiunii.

Proprietate
ConnectionString State CursorLocation Mode

Starea proprietilor poate fi setat cu ajutorul unor constante care sunt stocate n fiierul text adovbs.inc. Fiierul se instaleaz, implicit, cu calea C:\Program Files\Common Files\System\ado odat cu ASP-ul. Pentru folosirea acestor constante, fiecare aplicaie ASP care folosete ADO va trebui s includ acest fiier n ea prin linia:
<!-- #INCLUDE FILE="calerelativlaaplicaie\adovbs.inc" -->

Accesul la bazele de date relationale din ASP cu ADO - 221 -

Dac sirul care reprezinta calea este prea lung cel mai simplu este s copiai adovbs.inc n directorul virtual care conine aplicaiile ASP, caz n care includerea se va face cu linia:
<!-- #INCLUDE FILE="adovbs.inc" -->

Obiectele ADO pentru accesul la date sunt stocate de firma Microsoft ntr-un singur proiect cu numele ActiveX Data Objects Database (ADODB). ntruct sunt deja disponibile mai multe versiuni, o referin la proiectul ADODB folosit pentru accesul la date poate fi setat n fiierul global.asa prin linia urmtoare:
<!--METADATA TYPE="TypeLib" NAME="Microsoft ActiveX Data Objects 2.6 Library" UUID="{00000206-0000-0010-8000-00AA006D2EA4}" VERSION="2.6"-->

Linia de mai sus este corect numai pentru ADODB versiunea 2.6. Ea va trebuie modificat n cazul versiunilor mai vechi sau mai noi. De exemplu, pentru versiunea 2.1 ea este:
<!--METADATA TYPE="TypeLib" NAME="Microsoft ActiveX Data Objects 2.1 Library" UUID="{00000201-0000-0010-8000-00AA006D2EA4}" VERSION="2.1"-->

Pentru a putea experimenta cteva dintre aciunile elementare cu bazele de date va trebui s avei instalat sistemul de gestiune a bazelor de date Microsoft Access (acesta vine cu produsul Microsoft Office Professional) mpreun cu fiierele sale de exemple. n cazul n care Access a http://www.east.utcluj.ro/mb/mep/antal fost instalat n directorul implicit, copiai fiierul Universitatea Tehnica din Cluj-Napoca C:\Program Files\Microsoft Office\Office10\Samples\Northwind.mdb Catedra Mecanica si Programare Conf. directorului virtual al aplicaiei ASP n directorul fizic corespunztor Dr. Ing. ANTAL Tiberiu Alexandru din care se face accesarea bazei de date Access cu numele Northwind.mdb. n cazul meu voi copia fiierul n directorul C:\CursASP. Deschiderea unei conexiuni noi se realizeaz prin secvena de cod:
Dim cnx Dim sirCnx Set cnx = Server.CreateObject("ADODB.Connection") cnx.Mode = adModeRead cnx.CursorLocation = adUseClient sirCnx = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\cursasp\Northwind.mdb;" cnx.Open sirConex

Alegerea valorii propriet|ii Mode n ADO se folosete termenul de cursor pentru a descrie comportamentul referinei la nregistrarea curent dintr-o mulime de nregistrri. Un cursor este obiectul ce permite deplasarea printre nregistrrile unei mulimi de nregistrri. ADO permite definirea modului de lucru al cursorului unei conexiuni prin proprietatea Mode , acesta poate lua valori constante ce sunt prezentate n tabelul urmtor: Nume constant
adModeUnknown adModeRead

Valoare
0 1

Semnificaie Modul de lucru prin conexiune este nespecificat. Permite citirea datelor prin conexiune (implicit).

222 - Accesul la bazele de date relationale din ASP cu ADO -

Nume constant
adModeWrite adModeReadWrite adModeShareDenyRead adModeShareDenyWrite adModeShareExclusive

Valoare
2 3 4 8 &Hc

Semnificaie Permite scrierea datelor prin conexiune. Permite citirea i scrierea datelor prin conexiune. Oprete citirea datelor printr-o alt conexiune. Oprete scrierea datelor printr-o alt conexiune. Oprete deschiderea bazei de date printr-o alt conexiune. Permite ca toate celelalte conexiuni s se ataeze bazei de date n orice mod.

adModeShareDenyNone

&H10

adModeRecursive

Se folosete mpreun cu toate modurile ce au Share n nume, mai puin adModeShareDenyNone . Asigur propagarea setrilor subnregistrrilor corespunztoare nregistrrii curente. De exemplu, pentru a opri citirea subnregistrrilor se va folosi expresia de constante adModeShareDenyRead + http://www.east.utcluj.ro/mb/mep/antal adModeRecursive .

&H400000

Setarea propriet|ii Universitatea Tehnica din Cluj-Napoca ConnectionString Catedra Mecanica si Programare Proprietatea ConnectionString are mai multe pri, dintre care unele sunt opionale, n funcie Conf. Dr. Ing. ANTAL unei aplicaii client-server care folosete SQL de tipul irului de conexiune folosit. Tipic, n cazul Tiberiu Alexandru Server sau MSDE, el trebuie s conin urmtoarele pri: Parte Numele furnizorului Numele server-ului de baze de date Numele bazei de date la care ne conectm Indentificatorul utilizatorului (UID) Parola utilizatorului (PWD) Exemplu
Provider=SQLOLEDB; Data Source=(local); Database=Northwind; UID=NumeUtilizator; PWD=ParolUtilizator;

irul de conectare pentru acest caz se poate forma astfel:


sirCnx = "Provider=SQLOLDEB;" & _ "Data Source =(local);" & _ "Database = Nortwind;" & _ "UID = NumeUtilizator;" & _ "PWD = ParolUtilizator;"

n cazul n care dorim s ne conectm la o baz de date Microsoft Access, n locul driver-ului SQLOLEDB se va folosi driver-ul Microsoft Access dup cum urmeaz:
sirCnx = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\cursasp\Northwind.mdb;"

Accesul la bazele de date relationale din ASP cu ADO - 223 -

Alegerea propriet|ii CursorLocation ADO suport lucrul cu dou tipuri de cursoare: cel client (client-side) i cel server (server-side). Un cursor client se creeaz pe calculatorul clientului (adic cu utilizatorul bazei de date), iar cel server se creeaz pe aceeai main cu server-ul (care poate fi chiar calculatorul pe care lucreaz utilizatorul sau poate fi un server oarecare). Pentru cursorul server majoritatea datelor rezultate dintr-o interogare vor fi pstrate pe server. Pe msura ce utilizatorul se deplaseaz prin mulimea de nregistrri noile nregistrri se trimit, rnd pe rnd, clientului. Cu ct clientul se deplaseaz mai mult prin mulimea de nregistrri cu att crete i traficul generat de el n reea. Avantajul acestui cursor este acela de a putea ncepe imediat deplasarea prin mulimea de nregistrri, dei numai o parte mic dintre datele ei au fost, momentan, generate. Dezavantajul cursorului este acela c numai furnizorul SQLOLEDB suport acest tip de cursor. Cursorul client se iniializeaz mai ncet deoarece toate datele trebuie transferate de pe server pe client, dar are avantajul de a putea avea mai muli clieni deschii simultan i de a putea deconecta obiectul mulime de nregistrri de la o anumit conexiune. Acest avantaj este important n aplicaiile Web deoarece conexiunile consuma multe resurse ale sistemului care ar putea fi eliberate ca urmare a deconectrii. Dou constante sunt definite pentru alegerea cursorului, adUseServer (implicit) pentru cursorul server i adUseClient pentru cursorul client. Deschiderea conexiunii Dup setrile fcute, deschiderea conexiunii se face cu metoda Open . Dac aceasta se execut fr erori se obine o conexiune la baza de date. Dup ce conexiunea a fost deschis se va putea http://www.east.utcluj.ro/mb/mep/antal extrage o mulime de nregistrri prin ea. Metoda Open , a obiectului Recordset , se folosete pentru stabilirea conexiunii fizice cu sursa de date i pentru deschiderea unui obiect mulime de Universitatea Tehnica rezultatul unei interogri. nregistrri care reprezint rndurile unui tabel saudin Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Gestiunea tranzaciilor cu obiectul Connection Alexandru Tranzaciile reprezint o unitate de lucru logic util atunci cnd dorim s aducem mai multe modificri datelor din baz "dintr-o singur bucat". n lumea calculatoarelor acronimul ACID se folosete pentru descrierea caracteristicilor unei tranzacii: ! atomicitate - dei se poate ca mai multe nregistrri s fie deja modificate, dac apare o eroare undeva, ntreaga tranzacie este anulat, iar sistemul este readus la starea avut naintea nceperii tranzaciei; ! consisten - o tranzacie nu las baza de date ntr-o stare de inconsisten. Dac s-au fcut o parte dintre modificrile specifice tranzaciei acestea poate fi anulate, n cazul n care tranzacia euaz ulterior ntr-un punct oarecare; ! izolare - o tranzacie se comport ca i cnd ar fi izolat de alte tranzacii din baza de date; ! durabilitate- dup ce modificrile tranzaciei sunt finalizate, acestea persist dincolo de orice defecte hard care pot surveni n sistemul de calcul. Cnd se folosesc comenzi pentru modificarea datelor stocate n baza de date (UPDATE , INSERT sau DELETE ) fiecare comand este tratat ca o tranzacie. Atunci cnd comanda, dintr-un oarecare motiv, nu poate fi executat, toate efectele corespunztoare ei sunt anulate. Exist ns cazuri n care trebuie s executm un grup de comenzi ca o singur tranzacie. Pentru ca grupul de comenzi s fie tratat ca o singur tranzacie, nainte de prima comand a grupului se va folosi metoda BeginTrans . Aceasta marcheaz nceputul tranzaciei. n continuare se vor scrie comenzile care modific baza de date, apoi se folosete metoda CommitTrans pentru finalizarea tuturor modificrile corespunztoare comenzilor tranzaciei. nainte de aceasta aciune se va folosi proprietatea Count a obiectului Error din conexiune pentru a verifica lipsa erorilor. O secven de cod, tipic, este:

224 - Accesul la bazele de date relationale din ASP cu ADO -

cnn.BeginTrans 'Aici se scriu comenzile care modific baza de date If cnn.Errors.Count = 0 Then cnn.CommitTrans Else cnn.RollbackTrans End If

Dac nu sunt erori, atunci modificrile se vor finaliza n baza de date. Dac sunt erori, metoda RollbackTrans se folosete pentru a termina tranzacia curent i pentru a readuce baza de date la starea n care era nainte de nceperea tranzaciei. Unul dintre cazurile clasice de folosire a tranzaciilor este acela n care trebuie s scriem date n dou sau mai multe tabele, fie cu certitudinea realizrii tuturor nscrierilor, fie cu cea a lipsei modificrilor aduse tuturor tabelelor. Obiectul mulime de nregistr|ri (Recordset) Obiectul Recordset este un tabel virtual de valori organizat pe linii i pe coloane. El extinde posibilitile de stocare i de parcurgere a datelor la cele de cutare, sortare, actualizare i tergere. n plus, valorile stocate n acest obiect pot s vin din mai multe tabele, unele valori ale coloanelor pot fi calculate pe baza unor expresii, iar mulimea de nregistrri poate fi http://www.east.utcluj.ro/mb/mep/antal transformat, simplu, ntr-un tabel sau un ir. Universitatea Tehnica Deschiderea unei mulimi de nregistr|ri din Cluj-Napoca Obiectul Recordset are, i el, o metod Open care necesit mai multe argumente. Sintaxa este: Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru
Recordset.Open TextComand, Opiuni Conexiune/irConexiune, TipCursor, TipBlocare,

Argumentul TextComand conine un ir SQL pentru selecia unor nregistrri. Argumentul Conexiune/irConexiune conine o referin la un obiect Connection deschis sau un ir conexiune valid. Dac n codul unei pagini se face o singur referire la baza de date specificarea lui irConexiune face ca ADO s creeze automat obiectul Connection . n cazul n care se vor face mai multe referiri la baza de date dorim s avem un control mai strict asupra obiectului Connection i l deschidem cu metoda Open , iar apoi l nchidem cu metoda Close . Argumentul TipCursor poate lua valori constante prezentate n tabelul urmtor: Constant
adOpenDynamic

Descriere Mulime de nregistrri dintr-un tabel sau dintr-o alt surs de date.

Avantaje Afieaz toate modificrile fcute de ali utilizatori.

Dezavantaje Permite folosirea marcajelor numai dac furnizorul le suport. Nu poate lucra cu jet OLEDB n acest mod.

Accesul la bazele de date relationale din ASP cu ADO - 225 -

adOpenKeyset

Mulime de pointer-i (bookmarks) care refer datele unui tabel sau unei interogari din baza de date. Copie a unei mulimi de nregistrri aa cum era ea la momentul crerii ei. Copie a unei mulimi de nregistrri aa cum era ea la momentul crerii ei.

Afieaz toate modificrile fcute de ali utilizatori. Suport lucrul cu marcaje ntotdeauna. ntotdeuna suport marcaje. Singurul tip de mulime de nregistrare este client-side cursor. Mai rapid dect cursorul adOpenStatic .

Nu afieaz noile nregistrri adugate de ali utilizatori. mpiedic accesul la nregistrrile terse de ali utilizatori. Nu reflect modificrile aduse datelor n regimul de lucru cu mai muli utilizatori. Permite navigarea n mulime numai n fa.

adOpenStatic

adOpenForwardOnly (implicit)

Argumentul TipBlocare poate lua valori constante prezentate n tabelul urmtor. http://www.east.utcluj.ro/mb/mep/antal Constant
adLockReadOnly adLockPessimistic adLockOptimistic

Descriere Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Mulimea de nregistrri nu poate fi editat. Conf. Dr. Ing. ANTAL Tiberiu Alexandru Blocarea mulimii de nregistrri este pesimist. Blocarea mulimii de nregistrri este optimist.

Dac un utilizator blocheaz baza de date, atunci, un alt utilizator nu va putea insera date sau actualiza valori dect dup ce utilizatorul care a blocat baza a nchis mulimea de nregistrri corepunztoare blocrii. Blocarea pesimist face datele blocate invizibile altor utilizatori ai aplicaiei, nchiderea mulimii de nregistrri face ca blocarea pesimist s dispar. Blocarea optimist blocheaz nregistrrile cu puin timp nainte de actualizare sau inserare i le deblocheaz imediat dup aceasta. Ali utilizatori vor putea vedea datele blocate, dar dac mai muli utilizatori, simultan, ncearc s actualizeze aceleai date apar probleme de acces la ele. Argumentul Opiuni spune lui ADO cum s evalueze parametrul TextComand . n cazul aplicaiilor prezentate, deoarece parametrul TextComand este ntotdeauna un ir SQL valoarea constanta folosit va fi adCmdText . Parcurgerea unei mulimi de nregistr|ri Parcurgerea unei mulimi de nregistrri, n vederea afirii nregistrrilor, se face cu ajutorul metodei MoveNext . Aceasta realizeaz avansul, de la nregistrarea curenta, la cea urmtoare. Metoda EOF (End-Of-File) se folosete pentru a determina dac s-a trecut dincolo de ultima nregistrare din mulime. EOF va ntoarce n acest caz valoarea True , altfel, valoarea ntoars este False . Secvena de cod, tipic, pentru afiarea tuturor nregistrrilor din mulime este:
Do While Not rst.EOF 'Afiseaz nregistrare curent rst.MoveNext 'Treci la nregistrarea urmtoare

226 - Accesul la bazele de date relationale din ASP cu ADO -

Loop

Aplicaia din fiierul aspado1.asp se folosete de obiectele Connection i Recordset pentru accesarea bazei de date Northwind.mdb. Din tabelul Employees se vor afia, pentru fiecare angajat, numele (cmpurile LastName i FirstName ), adresa (cmpul Address ) i oraul (cmpul City ). Fiierul aspado1.asp :
<%@ LANGUAGE="VBScript" %> <% Option Explicit %> <HTML> <HEAD> <TITLE>ADO si ASP</TITLE> </HEAD> <BODY BGCOLOR="AQUA"> <!-- #INCLUDE FILE ="..\Program Files\Common Files\System\ado\adovbs.inc" --> <H1>Baza de date: Northwind.mdb, Tabel: Employees</H1> <% Dim cnn Dim rst Dim sirSQL Dim sirConex Set cnn = Server.CreateObject("ADODB.Connection") http://www.east.utcluj.ro/mb/mep/antal Set rst = Server.CreateObject("ADODB.Recordset") sirConex = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ Universitatea Tehnica din Cluj-Napoca "Data Source=C:\cursasp\Northwind.mdb;" cnn.Mode = adModeRead Conf. Dr. Ing. ANTAL cnn.CursorLocation = adUseClient cnn.Open sirConex

Catedra Mecanica si Programare Tiberiu Alexandru

sirSQL = "SELECT LastName, FirstName, Address, City FROM Employees" rst.Open sirSQL, cnn, adOpenStatic, adLockOptimistic, adCmdText %> <P> <TABLE BORDER = 2 BGCOLOR=YELLOW> <THEAD> <TH>&nbsp; Nume angajat &nbsp; </TH> <TH> &nbsp; Adresa &nbsp; </TH> <TH> &nbsp; Oras &nbsp; </TH> </THEAD> <% Do While Not rst.EOF %> <TR> <TD><%=rst("LastName")%> &nbsp; <%=rst("FirstName")%></TD> <TD><%=rst("Address")%></TD> <TD><%=rst("City")%></TD> </TR> <% rst.MoveNext Loop rst.Close cnn.Close %> </TABLE> <% Set rst = Nothing Set cnn = Nothing %> </BODY>

Accesul la bazele de date relationale din ASP cu ADO - 227 -

</HTML>

Rezultatele aplicaiei se prezint n Figura 64. Figure 64 Afisarea cu ADO a unui tabel din baza de date Northwind.mdb

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Metoda Connection.Execute Catedra Mecanica si Programare Cel mai simplu mod de interaciune cu baza de date, prin ADO, este metoda Execute a Conf. Dr. Ing. ANTAL Tiberiu Alexandru obiectului Connection . Ea permite transmiterea unei comenzi, deseori SQL, unei surse de date. Dac instruciunea SQL ntoarce nregistrri, atunci se creeaz un obiect Recordset . Aceasta mulime de nregistrri poate fi stocat prin linia:
Set rst = cnn.Execute(sirSQL, , adCmdText)

Metoda Execute are trei argumente, primul este o instruciune SQL, un nume de tabel sau de interogare; al doilea este un nume de variabil care va stoca numrul nregistrrilor afectate dup terminarea lui Execute ; al treilea este o constant care descrie tipul instruciunii. Pentru cele SQL valoarea constantei este adCmdText si asigura ntoarcerea obiectului Recordset . Pentru cazul n care nu se dorete ntoarcerea lui, constanta se formeaz prin suma adCmdText + adExecuteNoRecords . Exemplul din aspado2.asp folosete conexiunea la baza de date Northwind.mdb pentru inserarea cu Execute a unei nregistri noi (Nume=Ion, Prenume=Vasile, Adresa=Crinului, nr. 12, Oras=Cluj ) n tabelul Employees, i pentru afiarea noii mulimi de nregistrri. Efectele aplicaiei se prezint n Figura 65 .
NOTA

Unul dintre mesajele de eroare comune a lui ADO cu ASP este:

Microsoft JET Database Engine (0x80004005) Operation must use an updateable query. /CursASP/aspado2.asp, line 27

228 - Accesul la bazele de date relationale din ASP cu ADO -

Motivul cel mai comun este acela c utilizatorul contului Internet Guest a (IUSR_MACHINE), care este implicit n grupul "Everyone", nu are dreptul "Write" asupra fisierului care este baza de date. Pentru rezolvarea problemei mergeti n Explorer si folositi fereastra Security pentru a corecta dreptul de acces a lui Internet Guest la baza de date.

Figure 65 Inserarea unei nregistrari n tabelul Employees din baza de date Northwind.mdb

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

Fiierul aspado2.asp :

<%@ LANGUAGE="VBScript" %> <% Option Explicit %> <HTML> <HEAD> <TITLE>ADO si ASP</TITLE> </HEAD> <BODY BGCOLOR="AQUA"> <!-- #INCLUDE FILE ="..\Program Files\Common Files\System\ado\adovbs.inc" --> <H1>Baza de date: Northwind.mdb, Tabel: Employees</H1> <% Dim cnn Dim rst Dim sirSQL Dim sirConex Set cnn = Server.CreateObject("ADODB.Connection") sirConex = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\cursasp\Northwind.mdb;" cnn.Mode = adModeReadWrite cnn.Open sirConex cnn.CursorLocation = adUseClient sirSQL="INSERT INTO Employees" & _ "(LastName, FirstName, Address, City)" & _ "VALUES ('Ion', 'Vasile', 'Crinului, nr. 12', 'Cluj')" cnn.Execute sirSQL, , adCmdText + adExecuteNoRecords sirSQL = "SELECT LastName, FirstName, Address, City FROM Employees" Set rst = cnn.Execute(sirSQL, , adCmdText) %> <P>

Accesul la bazele de date relationale din ASP cu ADO - 229 -

<TABLE BORDER = 2 BGCOLOR=YELLOW> <THEAD> <TH>&nbsp; Nume angajat &nbsp; </TH> <TH> &nbsp; Adresa &nbsp; </TH> <TH> &nbsp; Oras &nbsp; </TH> </THEAD> <% Do While Not rst.EOF %> <TR> <TD><%=rst("LastName")%> &nbsp; <%=rst("FirstName")%></TD> <TD><%=rst("Address")%></TD> <TD><%=rst("City")%></TD> </TR> <% rst.MoveNext Loop %> </TABLE> <% rst.Close cnn.Close Set rst = Nothing Set cnn = Nothing %> </BODY> </HTML>

http://www.east.utcluj.ro/mb/mep/antal Obiectul Command Universitatea Tehnica din Cluj-Napoca Ierarhia ADO asigur o flexibilitate mare n reutilizarea obiectelor dincolo de unele limitri Catedra Mecanica si Programare contextuale. Adic, n ADO se poate crea un singur obiect Command , dar acesta se poate folosi cu Conf. Dr. Ing. ANTAL Tiberiu este colecia mai multe obiecte Connection . O facilitate a lui Command Alexandru de obiecte Parameters . Aceasta se folosete pentru stocarea parametrilor specifici unei comenzi. Utilizarea principal a obiectului Command este aceea de execuie a interogrilor. Proprietile i metodele obiectului se prezint n cele dou tabele care urmeaz. Proprietate
ActiveConnection

Descriere D valorea obiectului Connection sau irului de conexiune care va fi folosit de Command . ir SQL sau numele procedurii stocate, a tabelului, sau a vederii care va fi sursa interogrii. Descrie tipul comenzii din CommandText care urmeaz s se execute. Cteva dinte valorile folosite mai des sunt: ! adCmdText , pentru ir SQL; ! adCmdTable , pentru tabel al bazei de date; ! adCmdStoredProc , pentru procedur stocat sau interogare de aciune; ! adCmdUnknown , (implicit) pentru tip necunoscut. Numrul secundelor care se ateapt nainte de abandonarea execuiei interogrii (implicit, are valoarea 30). Dac este True , valoarea din CommandText se va executa ca i o comand pregtit (compilat i optimizat).

CommandText

CommandType

CommandTimeout

Prepared

230 - Accesul la bazele de date relationale din ASP cu ADO -

Proprietate
State

Descriere ntoarce informaii legate de starea nchis (adStateClose ) sau deschis (adStateOpen ) a obiectului Command .

Metod
Cancel

Descriere Termin execuia asincron a unei interogri executate prin Command . Creeaz un parametru pentru o interogare de aciune parametrizat sau o procedur stocat. Execut interogarea obiectului Command .

CreateParameter

Execute

Codul din fiierul aspado3.asp creeaz o mulime de nregistri (Recordset ) cu ajutorul obiectului Command . Efectul lui este acelai cu cel al codului din fiierul aspado1.asp . Fiierul aspado3.asp :
<%@ LANGUAGE="VBScript" %> <% Option Explicit %> http://www.east.utcluj.ro/mb/mep/antal <HTML> <HEAD> <TITLE>ADO si ASP</TITLE> Universitatea Tehnica din Cluj-Napoca </HEAD> Catedra Mecanica si Programare <BODY BGCOLOR="AQUA"> Conf. Dr. Ing. ANTAL Tiberiu Alexandru <!-- #INCLUDE FILE ="..\Program Files\Common Files\System\ado\adovbs.inc" --> <H1>Baza de date: Northwind.mdb, Tabel: Employees</H1> <% Dim cnn Dim cmd Dim rst Dim sirConex Set cnn = Server.CreateObject("ADODB.Connection") sirConex = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\cursasp\Northwind.mdb;" cnn.Mode = adModeReadWrite cnn.Open sirConex cnn.CursorLocation = adUseClient Set cmd = Server.CreateObject("ADODB.Command") Set cmd.ActiveConnection = cnn cmd.CommandType = adCmdText cmd.CommandText = "SELECT * FROM Employees" Set rst = cmd.Execute Set cmd = Nothing %> <P> <TABLE BORDER = 2 BGCOLOR=YELLOW> <THEAD> <TH>&nbsp; Nume angajat &nbsp; </TH> <TH> &nbsp; Adresa &nbsp; </TH> <TH> &nbsp; Oras &nbsp; </TH> </THEAD> <% Do While Not rst.EOF %> <TR> <TD><%=rst("LastName")%> &nbsp; <%=rst("FirstName")%></TD>

Accesul la bazele de date relationale din ASP cu ADO - 231 -

<TD><%=rst("Address")%></TD> <TD><%=rst("City")%></TD> </TR> <% rst.MoveNext Loop %> </TABLE> <% rst.Close cnn.Close Set rst = Nothing Set cnn = Nothing %> </BODY> </HTML>

Metoda Command.Execute Metoda Execute a obiectului Connection nu poate executa proceduri stocate care necesit parametri de intrare sau de ieire, deoarece ea nu accept parametri. Metoda Execute a lui Connection poate executa o comand SQL, iar rezultatele sunt depuse ntr-un obiect Recordset . Acest mod de execuie al comezilor SQL se numete SQL dinamic. Problema SQL-ului dinamic este viteza sczut. Viteza de execuie a comenzilor SQL poate fi marita prin pre-compilare. n http://www.east.utcluj.ro/mb/mep/antal acest caz comanda SQL se numeste procedur stocat, deoarece ea va fi stocat n baza de date. SQL-ul dinamic este mai lent deoarece motorul bazei de date trebuie s analizeze comanda SQL, Universitatea Tehnica din Cluj-Napoca iar apoi, s genereze planul interogrii. Planul interogrii conine interogarea, structurile de Catedra Mecanica si Programare tabelele i indexurile n vederea determinrii celei mai eficiente metode de a obine datele cerute. Conf. Dr. Ing. ANTAL Tiberiu Alexandru Atunci cnd se creeaz o procedur stocat, planul interogrii este stocat i el n baza de date. Metoda Execute a obiectului Command tie sa lucreze cu parametri, ca urmare poate asigura o vitez mai mare de lucru. Problema procedurilor stocate este aceea c ele trebuie recompilate n cazul n care se modific structura tabelelor sau indexurile care particip la procedura stocat. Fie comenzile SQL:
SELECT LastName, FirstName FROM Employees WHERE EmployeeID=1; SELECT LastName, FirstName FROM Employees WHERE EmployeeID=7;

Acestea sunt dou iruri SQL care pot fi folosite pentru extragerea din tabelul Employees a doi angajai, primul are n cmpul EmployeeID valoarea 1, iar ar doilea are, n acelai cmp, valorea 7. Putem privi aceste iruri sub forma unei proceduri care are un parametru de intrare, anume valoarea lui EmployeeID, prin care difer cele dou comenzi SQL. n Microsoft Access se va crea o interogare (aceasta este denumirea folosit de Microsoft Access pentru procedurile stocate) cu urmtorul cod SQL:
PARAMETERS ID Long; SELECT LastName, FirstName, Address, City FROM Employees WHERE EmployeeID=ID;

Pentru aceasta deschidet i baza de date Northwind.mdb, nchidei ferestrele (Northwind TRADERS i Main Switchboard) afiate la pornirea aplicaiei, apoi n fereastra bazei de date selectai Queries. Apsai butonul New, apoi selectai opiunea DesignView. Apsai tasta Esc, apoi din View selectai SQL View. Aici scriet i n locul lui SELECT; comanda SQL anterioar. nchidei fereastra interogrii, iar atunci cnd Access ntreab dac dorii salvarea interogrii

232 - Accesul la bazele de date relationale din ASP cu ADO -

selectai Yes. n fereastra Save As, la Query Name, dai numele de QueryExtrageAngajatID procedurii stocate. Fiierul aspado4.asp prezint modul n care se poate executa o pocedur stocat ntr-o baza de date Access. Fiierul aspado4.asp :
<%@ LANGUAGE="VBScript" %> <% Option Explicit %> <HTML> <HEAD> <TITLE>ADO si ASP</TITLE> </HEAD> <BODY BGCOLOR="AQUA"> <!-- #INCLUDE FILE ="..\Program Files\Common Files\System\ado\adovbs.inc" --> <H1>Baza de date: Northwind.mdb, Tabel: Employees</H1> <% Dim cnn Dim cmd Dim rst Dim sirConex Dim par Set cnn = Server.CreateObject("ADODB.Connection") sirConex = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\cursasp\Northwind.mdb;"

http://www.east.utcluj.ro/mb/mep/antal

cnn.Mode = adModeRead cnn.Open sirConex Universitatea Tehnica cnn.CursorLocation = adUseClient

Set cmd = Set cmd.ActiveConnection = cnn Set par = cmd.CreateParameter("EmployeeID",adInteger,adParamInput,4,1) cmd.Parameters.Append par cmd.CommandType = adCmdStoredProc cmd.CommandText = "QueryExtrageAngajatID" Set rst = cmd.Execute If Not rst.EOF Then Response.write "<P>" & rst("EmployeeID") & " -> " Response.write rst("LastName") & "&nbsp;" & rst("FirstName") & "<BR>" End If Set rst = Nothing Set cmd = Nothing Set cnn = Nothing %> </BODY> </HTML>

din Cluj-Napoca Catedra Mecanica si Programare Server.CreateObject("ADODB.Command") Conf. Dr. Ing. ANTAL Tiberiu Alexandru

n codul prezentat, metoda CreateParameter se folosete pentru crearea unui parametru. Dac procedura stocata are mai muli parametri, fiecare parametru va avea propriul lui CreateParameter . Presupunnd c cmd este obiect Command , forma general a metodei este:
cmd.CreateParameter(Nume, Tip, Sens, Mrime, Valoare)

n exemplul prezentat, Nume , care este numele parametrului, are valoarea "EmployeeID ". Tip este o valoare de constant predefinit care trebuie s fie aceeai cu tipul corespunztor cmpului EmployeeID din baza de date. Cteva dintre numele constantelor permise pentru Tip sunt prezentate n tabelul care urmeaz:

Accesul la bazele de date relationale din ASP cu ADO - 233 -

Constant
adBigInt adBinary adBoolean adChar adDate adDecimal adDouble

Descriere Cmp ntreg, stocat pe 8 octei. Cmp de lungime fixat care accept date binare. Cmp de tip boolean. Cmp ir, cu lungime fizat, de cel mult 255 de caractere. Cmp dat (8 octei) Cmp de valoare numeric real, reprezentat n virgul fix. Cmp de valoare numeric real n dubl precizie, reprezentat n virgul flotant pe 8 octei. Cmp ntreg stocat pe 4 octei. Cmp de valoare numeric real n simpl precizie, reprezentat n virgul flotant. Cmp ntreg pe 2 octei. Cmp ntreg pe 1 octet. http://www.east.utcluj.ro/mb/mep/antal

adInteger adSingle

adSmallInt adTinyInt adVarChar

Sens

Cmp ir cu lungime variabil, de pn la 255 de caractere. Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare poate lua una dintre cele cinci valori constante: Conf. Dr. Ing. ANTAL Tiberiu Alexandru Constant Descriere Nu se folosete. Parametrul este de intrare. Aceasta este valoarea implicit. Parametrul este de ieire. Adic, valoarea este generat de SQL server i poate fi citita dup treminarea procedurii stocate. Parametrul poate fi folosit pentru citirea i scrierea unei valori dintr-o procedur stocat. Procedurile stocate pot ntoarce o singur valoare ntreag. Ea poate fi obinut printr-un parametru de revenire (return parameter ).

adParamUnknown adParamInput adParamOutput

adParamInputOutput

adParamReturnValue

Metoda Append se folosete pentru adugarea unui nou obiect Parameter coleciei Parameters ale obiectului Command . n cazul n care exist mai muli parametri, ei trebuie adugai cu Append n ordinea n care ei apar n definiia procedurii stocate. Metoda Execute a obiectului Command are trei parametri opionali. Presupunnd c cmd este un obiect Command , sintaxa este:
cmd.Execute [nr_nreg_afectate], [parametri], [opiuni] nr_nreg_afectate

este o variabil n care ADO ntoarce numrul nregistrrilor afectate de

234 - Accesul la bazele de date relationale din ASP cu ADO -

procedura stocat, parametri este un tablou, opional, de parametri de intrare, iar opiuni are aceeai semnificaie ca i cea din metoda Execute a obiectului Connection . Crearea unei aplicaii ASP ce interacioneaz|, prin ADO, cu o baz| de date Microsoft Access Aplicaia care urmeaz asigur gestionarea unui grup de proiecte stocate ntr-o baza de date Microsoft Access prin Internet. O persoan poate sa fac o propunere de proiect dac se poate loga la baza de date. Logarea este posibil numai dac utilizatorul este nscris n baza de date. Un proiect are un director i cel mult trei membri. Proiectul poate fi modificat de ctre director dup stocarea lui n baza de date. Membri unui proiect pot vizualiza caracteristicile lui, dar nu pot s-i aduc modificri. Crearea bazei de date Microsoft Access Baza de date care trebuie creat n Microsoft Access, se numeste Pr.mdb i are cel trei tabele (Membri, Persoane i Proiecte) din Figura 66. Figure 66 Cele trei tabele ale bazei de date Pr.mbd http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

Pentru crearea unui tabel, avnd selectat din coloana stng opiunea Tables, se face clic pe butonul New. Apoi, din fereastra New Table se alege opiunea Design View. Aici, n coloana din stnga se vor completa numele cmpurilor corespunztoare tabelului, apoi n coloana din dreapta fiecrui nume de cmp se va selecta tipul datei ce se stocheaz n cmp. Atunci cnd se face clic n dreapta unui nume de cmp, n partea dreapt a coloanei Data Type se va afia o sgeat n jos. Facnd clic pe aceasta se va derula lista tuturor tipurilor de date disponibile n Microsoft Access. Dintre aceasta se vor alege tipurile conform celor artate n Figura 67, Figura 68 i n Figura 69. n cazul lui Membri cheia primar este format din dou cmpuri. Pentru aceasta se ine butonul Shift apsat, apoi se vor selecta liniile corespunztoare cmpurilor IDProiect i IDPersoana , n continuare din Edit selectai Primary Key. Dup crearea celor trei tabele se trece la crearea relaiilor dintre acestea. Pentru aceasta din Tools se va selecta Relationships..., se vor aduga cele trei tabele n fereastra relaiilor, apoi se va trage cheia primar peste cheia strain. n final, fereastra relaiilor va fi asemenea celei din Figura 70.

Accesul la bazele de date relationale din ASP cu ADO - 235 -

Figure 67 Cmpurile, cu tipurile de date corespunzatoare, tabelului Membri

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

Figure 68 Cmpurile, cu tipurile de date corespunzatoare, tabelului Persoane

236 - Accesul la bazele de date relationale din ASP cu ADO -

Figure 69 Cmpurile, cu tipurile de date corespunzatoare tabelului Proiecte

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru Figure 70 Fereastra relat iilor bazei de date Pr.mdb

Scopul aplicaiei este acela de a exemplifica modul n care se pot aduga, modifica i terge nregistri ale unei baze de date Microsoft Access folosind ASP. Baza de date nu a trecut testele primelor trei forme normale. Chiar i sub aceasta forma ea poate fi utilizat fr prea multe probleme pe Web server.

Accesul la bazele de date relationale din ASP cu ADO - 237 -

Formularele HTML i ASP ale aplicaiei Aplicaia ASP conine urmtoarele fiiere: G logare.htm : permite legarea utilizatorului la aplicaie. Legarea este permis numai dac utilizatorul este deja membru al utilizatorilor bazei de date. Informaiile folosite pentru legare sunt numele i parola utilizatorului. Acesta se definesc atunci cnd membrul, nc inexistent, se creeaz prin clic pe hiperlegtura Creare membru nou. (care va deschide fiierul AdaugaPersoana1.asp ). G VerificaUtilizator.asp : verific dac utilizatorul face parte dintre membrii ce pot utiliza baza de date. Dac acesta exist, atunci urmtoarea pagin care se deschide este AfisareProiecte.asp . Dac numele i/sau parola utilizatorului sunt greite sau acesta nu este nscris n baza de date, se afieaz un mesaj de eroare, dup care utilizatorul este trimis din nou la pagina de legare. G AfisareProiecte.asp : realizeaz afiarea proiectelor introduse n baza de date. Dac utilizatorul este director sau membru n proiect, numele proiectului se afieaz ca o hiperlegtur. Dac se face clic pe aceasta se va deschide pagina VizulizareProiect.asp n care se pot vedea caracteristicile proiectului. Numele proiectelor n care utilizatorul curent nu ia parte sunt afiate fr posibilitatea de vizualizare sau de editare a detaliilor. Hiperlegtura Adauga un proiect nou. permite ca utilizatorul curent s adauge un proiect nou. El va fi automat, directorul noului proiect. http://www.east.utcluj.ro/mb/mep/antal G VizualizareProiect.asp : realizeaz afiarea detaliilor specifice unui proiect. Acestea vor putea fi editate dac utilizatorul este chiar directorul proiectului. n cazul n care Universitatea Tehnica din Cluj-Napoca utilizatorul este doar un membru din proiect, butoanele Modificare, Catedra Mecanica si Programare Stergere i Reset lipsesc. Hiperlegtura Selectare alt proiect. face revenirea la Conf. Dr. Ing. ANTAL Tiberiu Alexandru AfisareProiecte.asp . G AdaugaProiect1.asp : permite adugarea unui proiect nou. Numele directorului i catedra din care face parte acesta sunt automat nscrise n formular i nu vor putea fi modificate. Un proiect poate avea cel mult trei membri. Numele membrilor se vor selecta din cele trei liste. Dac proiectul are mai puin de trei membri varianta NU se folosete pentru marcarea neselecrii membrului. La acest nivel, ntr-o aplicaie real, ar trebui verificate datele de intrare introduse. Din motive de spaiu, aici nu se mai fac aceste verificri. Pentru realizarea inserrii proiectului fr erori este esenial ca data s fie scris sub forma lun/zi/an (de ex. 1/1/2003). G AdaugaProiect2.asp : realizeaz adugarea unui proiect nou n baza de date. Deoarece adugarea necesit inserarea de valori n mai multe tabele, ntregul grup de operaii se declar tranzacie. G AdaugaPersoana1.asp : permite adugarea unui utilizator nou. Numai persoanele care fac parte din baza de date pot s vizualizeze, modifice sau s creeze proiecte. La acest nivel se face o verificare sumar a valorilor introduse, ns numai cu scopul de a arta modul n care ar putea fi afiate unele nereguli. G AdaugaPersoana2.asp : realizeaz adugarea unui nou utilizator. Acesta este inserat n baza de date numai n cazul n care un utilizator cu acelai nume i parol nu exist deja n baza de date. G ModificaProiect.asp : permite modificarea unor caracteristici ale unui proiect. Modificarea poate fi realizat numai de ctre directorul de proiect. G ConstCon.inc : constante specifice conexiunii la baza de date. G ConstAdo.inc : constante specifice lui ADO. G Util.inc : cteva proceduri specifice tuturor aplicaiilor.

238 - Accesul la bazele de date relationale din ASP cu ADO -

Fiierul logare.htm :

Figure 71 Formularul logare.htm

<% Option Explicit %> <HTML> <HEAD> </HEAD> <BODY> <FORM NAME="Legare" ONSUBMIT="return Test()" ACTION http://www.east.utcluj.ro/mb/mep/antalMETHOD="POST" ="http://localhost/CursASP/bd/VerificaUtilizator.asp"> <TABLE BGCOLOR="AQUA"cellSpacing=3 cellPadding=3 width="40%" align=center border=2> Universitatea Tehnica din Cluj-Napoca <THEAD> Catedra intrare</TH> </TR> <TH COLSPAN=2>Formular de Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru </THEAD> <TR> <TD>Nume:</TD> <TD><INPUT TYPE=TEXT NAME=Nume SIZE=50></TD> </TR> <TR> <TD>Parola:</TD> <TD><INPUT TYPE=PASSWORD NAME=Parola SIZE=10></TD> </TR> <TR> <TD><INPUT type=submit value=Trimite></TD> <TD ALIGN=RIGHT><INPUT type=reset value=Reset></TD> </TR> </TABLE> </P> </FORM> <TABLE width="40%" align=center> <TR> <TD> <A HREF="http://localhost/CursASP/bd/AdaugaPersoana1.asp">Creare membru nou.</A> </TD> </TR> </TABLE> <SCRIPT LANGUAGE="VBScript"> Function Test() Dim Frm Dim rasp rasp=True Set Frm = document.Legare If Len(Trim(Frm.Nume.Value))= 0 Then alert("Nume nu poate fi vid") rasp=False

Accesul la bazele de date relationale din ASP cu ADO - 239 -

ElseIf Len(Trim(Frm.Parola.Value))= 0 Then alert("Parola nu poate fi vida") rasp=False End If Test=rasp End Function </SCRIPT> </BODY> </HTML>

Fiierul VerificaUtilizator.asp :
<%@ Language=VBScript %> <!--#include file="ConstADO.inc"--> <!--#include file="Util.inc"--> <!--#include file="ConstCon.inc"--> <BODY BGCOLOR="AQUA"> <% Function ExistaUtilizator(nume,parola) Dim cnn Dim rst Dim sirSQL Set cnn = Server.CreateObject("ADODB.Connection") Set rst = Server.CreateObject("ADODB.Recordset")

http://www.east.utcluj.ro/mb/mep/antal
sirSQL = "SELECT * FROM Persoane" & _ " WHERE Nume = '" & nume & "'" & _ Universitatea parola & Cluj-Napoca " AND Parola = '" & Tehnica din "'"

Catedra Mecanica si Programare


cnn.Open sirCnn Ing. ANTAL Tiberiu Alexandru Conf. Dr. rst.Open sirSQL, cnn, adOpenKeyset, adLockReadOnly, adCmdText If Not rst.EOF Then ExistaUtilizator = True Else ExistaUtilizator = False End If rst.Close cnn.Close Set rst = Nothing Set cnn = Nothing End Function %> <% Dim nume Dim parola nume=Trim(Request.Form("Nume")) parola=Trim(Request.Form("Parola")) If ExistaUtilizator(nume,parola) Then Session("nume")=nume Session("parola")=parola Server.Transfer "AfisareProiecte.asp" Else Response.Write "Utilizator inexistent sau parola gresita!" Server.Transfer "logare.htm" End If %> </BODY> </HTML>

240 - Accesul la bazele de date relationale din ASP cu ADO -

Fiierul AfisareProiecte.asp : Figure 72 Formularul AfisareProiecte.a sp

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru
<%@ LANGUAGE="VBScript" %> <% Option Explicit %> <HTML> <HEAD> <TITLE>Proiecte de cercetare</TITLE> </HEAD> <BODY BGCOLOR="AQUA"> <!--#include file="ConstADO.inc"--> <!--#include file="ConstCon.inc"--> <H1>Selectati un proiect</H1> <% Function ExtrageCalitate(IDProiect, Nume) Dim cnn Dim rst Dim sirSQL Set cnn = Server.CreateObject("ADODB.Connection") Set rst = Server.CreateObject("ADODB.Recordset") cnn.Open sirCnn sirSQL = "SELECT sirSQL= sirSQL + sirSQL= sirSQL + sirSQL= sirSQL + sirSQL= sirSQL + sirSQL= sirSQL + sirSQL= sirSQL + sirSQL= sirSQL + Proiecte.[NumeProiect], Proiecte.[DataDepunerii]," " Persoane.Nume, Membri.Calitate, Proiecte.IDProiect" " FROM Proiecte INNER JOIN " "(Persoane INNER JOIN Membri ON Persoane.IDPersoana =" " Membri.IDPersoana) ON" " Proiecte.IDProiect = Membri.IDProiect" " WHERE Proiecte.IDProiect = " & CStr(IDProiect) " AND Nume = '" & CStr(Nume) & "'"

Accesul la bazele de date relationale din ASP cu ADO - 241 -

rst.Open sirSQL, cnn, adOpenDynamic , adLockReadOnly, adCmdText If rst.EOF Then ExtrageCalitate = False Else ExtrageCalitate = True End If rst.close Set rst = Nothing Set cnn = Nothing End Function %> <% Dim Dim Dim Dim cnn rst sirSQL nume

Set cnn = Server.CreateObject("ADODB.Connection") Set rst = Server.CreateObject("ADODB.Recordset") cnn.Open sirCnn sirSQL = "SELECT sirSQL= sirSQL + sirSQL= sirSQL + sirSQL= sirSQL + sirSQL= sirSQL + sirSQL= sirSQL + Proiecte.[NumeProiect], Proiecte.[DataDepunerii]," " Persoane.Nume, Membri.Calitate, Proiecte.IDProiect FROM" http://www.east.utcluj.ro/mb/mep/antal " Proiecte INNER JOIN (Persoane INNER JOIN" " Membri ON Persoane.IDPersoana = Membri.IDPersoana) ON" Universitatea Tehnica din Cluj-Napoca " Proiecte.IDProiect = Membri.IDProiect" " WHERE Catedra Mecanica si Programare (((Membri.Calitate)=Yes));"

rst.Open sirSQL, cnn, adOpenForwardOnly, adLockReadOnly, adCmdText If rst.EOF Then Response.Write "Nu exista proiecte introduse in baza de date." Else nume=Session("nume") %> <TABLE BORDER=2> <TR> <TH> Nume proiect </TH> <TH> Data depunerii </TH> <TH> Nume director </TH> </TR> <% Do While Not rst.EOF %> <TR> <TD> <% If ExtrageCalitate(rst("IDProiect"),nume) Then %> <A HREF="VizualizareProiect.asp?IDProiect=<%=rst(4)%>"><%=rst(0)%></A> <%Else%> <%=rst(0)%> <%End If%> </TD> <TD><%=rst(1)%></TD> <TD><%=rst(2)%></TD> </TR> <% rst.MoveNext Loop %> </TABLE> <% End If

Conf. Dr. Ing. ANTAL Tiberiu Alexandru

242 - Accesul la bazele de date relationale din ASP cu ADO -

Set rst = Nothing Set cnn = Nothing %> <P> <A HREF="AdaugaProiect1.asp">Adauga un proiect nou.</A> <P> <A HREF="logare.htm">Revenirea la formularul de logare.</A> </BODY> </HTML>

Fiierul VizualizareProiect.asp : Figure 73 Formularul VizualizareProie ct. asp

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

<%@ LANGUAGE="VBScript" %> <% Option Explicit %> <HTML> <HEAD> <TITLE>Pagina proiectului selectat</TITLE> </HEAD> <BODY BGCOLOR="AQUA"> <!--#include file="ConstADO.inc"--> <!--#include file="ConstCon.inc"--> <% Function EsteDirector(numeproiect) Dim cnn Dim rst Dim sirSQL Set cnn = Server.CreateObject("ADODB.Connection") Set rst = Server.CreateObject("ADODB.Recordset")

sirSQL ="SELECT Persoane.Nume, Persoane.Parola, Membri.Calitate, & " _ " Proiecte.NumeProiect FROM Proiecte INNER JOIN (Persoane INNER" & _ " "JOIN Membri ON Persoane.IDPersoana = Membri.IDPersoana) ON " & _

Accesul la bazele de date relationale din ASP cu ADO - 243 -

" " " "

Proiecte.IDProiect = Membri.IDProiect WHERE Membri.Calitate=Yes" & _ AND Proiecte.NumeProiect= '" & numeproiect & "'" & _ AND Persoane.Nume = '" & CStr(Session("nume")) & "'" & _ AND Persoane.Parola = '" & CStr(Session("parola")) & "';"

cnn.Open sirCnn rst.Open sirSQL, cnn, adOpenKeyset, adLockReadOnly, adCmdText If rst.EOF Then EsteDirector=False Else EsteDirector=True End If rst.Close cnn.Close Set rst = Nothing Set cnn = Nothing End Function %> <H1>Proiect</H1> <% Dim Dim Dim Dim cnn rst sirSQL NumePr

http://www.east.utcluj.ro/mb/mep/antal

Set cnn = Server.CreateObject("ADODB.Connection") Universitatea Tehnica din Cluj-Napoca Set rst = Server.CreateObject("ADODB.Recordset")

Catedra Mecanica si Programare


If IsEmpty(Request.QueryString("IDProiect")) Then Conf. Dr. Ing. ANTAL Tiberiu Alexandru Response.Write "Pagina nu a fost deschisa corect" & _ "<A HREF=""logare.htm"">logare.asp</A>." Response.End End If sirSQL = "SELECT Proiecte.[NumeProiect], Proiecte.[DataDepunerii]," & _ " Proiecte.Suma1, Proiecte.Suma2, Proiecte.Suma3, Proiecte.IDProiect, " & _ " Membri.Calitate, Persoane.Nume, Persoane.Catedra, Persoane.Adresa," & _ " Persoane.Telefon, Persoane.Email FROM Proiecte INNER JOIN " & _ " (Persoane INNER JOIN Membri ON Persoane.IDPersoana = " & _ " Membri.IDPersoana) ON Proiecte.IDProiect = Membri.IDProiect WHERE" & _ " (Membri.Calitate=Yes) AND " & _ " ((Proiecte.IDProiect) = " & CStr(Request.QueryString("IDProiect")) &");" cnn.Open sirCnn rst.Open sirSQL, cnn, adOpenKeyset, adLockReadOnly, adCmdText If rst.EOF Then Response.Write "Nu am gasit proiectul." Response.End End If NumePr = rst("NumeProiect") %> <FORM NAME ="FDirector" METHOD="Post" ACTION="ModificaProiect.asp"> <INPUT Name="IDProiect" Type=Hidden VALUE="<%=rst("IDProiect")%>" SIZE=5> <TABLE> <TR> <TD>Nume Proiect</TD> <TD><INPUT Name="NumeProiect" VALUE="<%=rst("NumeProiect")%>" SIZE=150</TD> </TR> <TR>

244 - Accesul la bazele de date relationale din ASP cu ADO -

<TD>Data depunerii</TD> <TD><INPUT Name="DataDepunerii" VALUE="<%=rst("DataDepunerii")%>" SIZE=20></TD> </TR> <TR> <TD>Suma 1</TD> <TD><INPUT Name="Suma1" VALUE="<%=rst("Suma1")%>" SIZE=20></TD> </TR> <TR> <TD>Suma 2</TD> <TD><INPUT Name="Suma2" VALUE="<%=rst("Suma2")%>" SIZE=20></TD> </TR> <TR> <TD>Suma 3</TD> <TD><INPUT Name="Suma3" VALUE="<%=rst("Suma3")%>" SIZE=20></TD> </TR> <TR> <TD>Total Sume</TD> <% Dim Total Total = rst("Suma1") + rst("Suma2") +rst("Suma3") %> <TD BGCOLOR=RED><%=Total%></TD> </TR> <TR> <TD>Nume director</TD> <TD BGCOLOR=WHITE><%=rst("Nume")%></TD> http://www.east.utcluj.ro/mb/mep/antal </TR> <TR>

Universitatea Tehnica din Cluj-Napoca <TD>Catedra</TD> <TD BGCOLOR=GREEN><%=rst("Catedra")%></TD> Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru
<TD>Telefon</TD> <TD><INPUT Name="Telefon" VALUE="<%=rst("Telefon")%>" SIZE=20></TD>

</TR> <TR>

</TR> <TR> <TD>E-mail</TD> <TD><INPUT Name="Email" VALUE="<%=rst("Email")%>" SIZE=20></TD> </TR> </TABLE> <% Set rst = Nothing Set cnn = Nothing Set cnn = Server.CreateObject("ADODB.Connection") Set rst = Server.CreateObject("ADODB.Recordset") sirSQL = "SELECT Proiecte.IDProiect, Persoane.Nume, Persoane.Catedra," & _ " Membri.Calitate FROM Proiecte INNER JOIN (Persoane INNER JOIN Membri" & _ " ON Persoane.IDPersoana = Membri.IDPersoana) ON Proiecte.IDProiect =" & _ " Membri.IDProiect WHERE (((Proiecte.IDProiect)= " & _ CStr(Request.QueryString("IDProiect")) & ") AND ((Membri.Calitate)=No));" cnn.Open sirCnn rst.Open sirSQL, cnn, adOpenKeyset, adLockReadOnly, adCmdText %> <P> <TABLE BORDER = 2 BGCOLOR=YELLOW> <THEAD> <TH>&nbsp; Nume membru &nbsp; </TH> <TH> &nbsp; Catedra &nbsp; </TH> </THEAD>

Accesul la bazele de date relationale din ASP cu ADO - 245 -

<% Do While Not rst.EOF %> <TR> <TD><%=rst(1)%></TD> <TD><%=rst(2)%></TD> </TR> <% rst.MoveNext Loop Set rst = Nothing Set cnn = Nothing %> </TABLE> <P> <% If EsteDirector(NumePr) Then %> <TABLE> <TR> <TD><INPUT name="cmdSubmit" type=submit value="Modificare"></TD> <TD><INPUT name="cmdSubmit" type=submit value="Stergere"></TD> <TD><INPUT name="cmdSubmit" type=reset value="Reset"></TD> </TR> </TABLE> <% End If %> </FORM> <A HREF="AfisareProiecte.asp">Selectare alt proiect.</A> http://www.east.utcluj.ro/mb/mep/antal </BODY> </HTML>

Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Fiierul AdaugaProiect1.asp : Conf. Dr. Ing. ANTAL Tiberiu Alexandru Figure 74 Formularul AdaugaProiect1. asp

<%@ LANGUAGE="VBScript" %> <% Option Explicit %> <!--#include file="ConstADO.inc"-->

246 - Accesul la bazele de date relationale din ASP cu ADO -

<!--#include file="ConstCon.inc"--> <HTML> <HEAD> <TITLE>Pagina de adaugare a unui proiect</TITLE> </HEAD> <BODY BGCOLOR="AQUA"> <% Dim Dim Dim Dim cnn rst sirSQL i

Set cnn = Server.CreateObject("ADODB.Connection") Set rst = Server.CreateObject("ADODB.Recordset") cnn.Open sirCnn sirSQL= "SELECT Persoane.Catedra FROM Persoane " & _ " WHERE Persoane.Nume='" & Session("nume") & _ "' AND Persoane.Parola= '" & Session("parola") & "'" rst.Open sirSQL, cnn, adOpenDynamic , adLockReadOnly, adCmdText %> <H1>Adauga un proiect nou</H1> <FORM NAME ="FAdauga" METHOD="Post" ACTION="AdaugaProiect2.asp"> <TABLE> http://www.east.utcluj.ro/mb/mep/antal <TR> <TD>Nume Proiect</TD> <TD><INPUT Universitatea Tehnica din Cluj-Napoca Name="NumeProiect" SIZE=150</TD> </TR> Catedra Mecanica si Programare <TR> Conf. Dr. Ing. ANTAL Tiberiu Alexandru <TD>Data depunerii</TD> <TD><INPUT Name="DataDepunerii" SIZE=20></TD> </TR> <TR> <TD>Suma 1</TD> <TD><INPUT Name="Suma1" SIZE=20></TD> </TR> <TR> <TD>Suma 2</TD> <TD><INPUT Name="Suma2" SIZE=20></TD> </TR> <TR> <TD>Suma 3</TD> <TD><INPUT Name="Suma3" SIZE=20></TD> </TR> <TR> <TD>Nume director</TD> <TD BGCOLOR=WHITE> <%=Session("Nume")%></TD> </TR> <TR> <TD>Catedra</TD> <TD> <SELECT Name="Catedra"> <% If rst.EOF Then%> Nu exista catedre in baza de date <% Else%> <OPTION><%=Trim(rst(0))%></OPTION> <% End If %> </SELECT> </TD> </TR> </TABLE> <HR>

Accesul la bazele de date relationale din ASP cu ADO - 247 -

<TABLE NAME> <TR> <%For i = 1 To 3%> <TD>Membru <%=i%>:</TD> <TD> <SELECT Name = <%="Membru" & CStr(i)%>> <% If i = 1 Then rst.Close sirSQL= "SELECT Persoane.Nume FROM E Persoane WHERE Nume <> '" & Session("nume") & "' ORDER BY Nume" rst.Open sirSQL, cnn, adOpenDynamic ,E adLockReadOnly, adCmdText Else rst.MoveFirst End If If rst.EOF Then%> Nu exista membri in baza de date <% Else %> <OPTION>NU</OPTION> <% Do While Not rst.EOF %> <OPTION><%=Trim(rst(0))%></OPTION> <% rst.MoveNext Loop End If %> </SELECT> http://www.east.utcluj.ro/mb/mep/antal </TD>

Figure 75 Formularul de adaugare a unui proiect nou completat

Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

<% Next Set rst = Nothing Set cnn = Nothing %> </TR> </TABLE>

248 - Accesul la bazele de date relationale din ASP cu ADO -

<P> <TABLE> <TR> <TD><INPUT name="cmdSubmit" type=submit value="Timite"></TD> <TD><INPUT name="cmdSubmit" type=reset value="Reset"></TD> </TR> </TABLE> </FORM> </BODY> </HTML>

Fiierul AdaugaProiect2.asp : Figure 76 Mesajele afisate la adaugarea unui proiect

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

Port iunea de cod care urmeaza este cea care nscrie date n mai multe tabele, motiv pentru care lucreaza folosind tranzact ii. Prima oara, se adauga datele specifice proiectului n tabelul Proiecte. Observnd relat iile bazei de date din Figura 70, cheia primara IDProiect a tabelului Proiecte este cheie straina n tabelul Membri, dar si parte din cheia primara compusa a tabelului Membri. Aceasta nseamna ca dupa nscrierea unui proiect nou n tabelul Proiecte, valoarea data de Access, automat, lui IDProiect (tipul lui IDProiect este AutoNumber; pentru acest tip Access genereaza si stocheaza un numar cu valoare unica la fiecare inserare a unei nregistari noi n tabel n scopul identificarii unice a fiecariei nregistari) trebuie gasita si folosita pentru stocarea noilor membri. Fiecare valoare este unica si are proprietatea ca este cea mai mare valoare dintre cele existente (Access genereaza valorile unice n ordine crescatoare). Deci, pentru a extrage valoarea lui IDProiect corespunzatoare ultimului proiect adaugat, se va cauta maximul din coloana IDProiect . Valoarea maxima se extrage cu ajutorul funct iei MAX prin instruct iunea SELECT Max(IDProiect) AS MaxIDProiect FROM Proiecte . Aceasta permite extragerea valorii maxime dintr-un grup de valori care vor fi tratate ca si un ntreg. Valoarea maxima a lui IDProiect , mpreuna cu valoarea lui IDPersoana corespunzatoare membrului selectat din lista membrilor stocat i n baza de date, vor fi inserat i n tabelul Membri. -

Accesul la bazele de date relationale din ASP cu ADO - 249 -

<%@ LANGUAGE="VBScript" %> <% Option Explicit %> <!--#include file="ConstADO.inc"--> <!--#include file="ConstCon.inc"--> <!--#include file="Util.inc"--> <HTML> <HEAD> <TITLE>Pagina de adaugare a unui proiect</TITLE> </HEAD> <BODY BGCOLOR="AQUA"> <% Function ExtrageID(Nume) Dim cnn Dim rst Dim sirSQL Set cnn = Server.CreateObject("ADODB.Connection") Set rst = Server.CreateObject("ADODB.Recordset") cnn.Open sirCnn sirSQL = "SELECT IDPersoana FROM Persoane " sirSQL = sirSQL & " WHERE Nume = '" & CStr(Nume) & "'" rst.Open sirSQL, cnn, adOpenDynamic , adLockReadOnly, adCmdText ExtrageID=rst(0) rst.Close cnn.Close Set rst = Nothing Set cnn = Nothing End Function http://www.east.utcluj.ro/mb/mep/antal %> <% Dim Dim Dim Dim Dim Dim Dim Dim cnn cmd rst sirSQL inregMod IDProiect i NumeMem

Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

Set cnn = Server.CreateObject("ADODB.Connection") cnn.Mode = adModeReadWrite cnn.Open sirCnn cnn.BeginTrans Set cmd = Server.CreateObject("ADODB.Command") Set cmd.ActiveConnection = cnn cmd.CommandType = adCmdText sirSQL = "INSERT INTO Proiecte (NumeProiect, DataDepunerii, Suma1," sirSQL = sirSQL & " Suma2, Suma3) VALUES " sirSQL = sirSQL & "('" & Z2Null(Request.Form("NumeProiect")) & "',#" sirSQL = sirSQL & Z2Null(Request.Form("DataDepunerii")) & "#," sirSQL = sirSQL & Z2Null(Request.Form("Suma1")) & "," sirSQL = sirSQL & Z2Null(Request.Form("Suma2")) & "," sirSQL = sirSQL & Z2Null(Request.Form("Suma3")) & ")" cmd.CommandText = sirSQL cmd.Execute inregMod If inregMod <> 0 Then Response.Write "<P>OK - Proiectul a fost stocat in baza deE date!<BR>"' Else Response.Write "<P><FONT COLOR=RED>Eroare - Proiectul NU a fostE stocat in baza de date!</FONT><BR>" End If Set rst = Server.CreateObject("ADODB.Recordset")

250 - Accesul la bazele de date relationale din ASP cu ADO -

sirSQL = "SELECT Max(IDProiect) AS MaxIDProiect FROM Proiecte" rst.Open sirSQL, cnn, adOpenDynamic , adLockReadOnly, adCmdText IDProiect=rst(0) rst.Close cmd.CommandType = adCmdText sirSQL = "INSERT INTO Membri (IDProiect, IDPersoana, Calitate)" & _ " VALUES (" & IDProiect & "," & ExtrageID(Session("nume")) & ",True)" cmd.CommandText = sirSQL cmd.Execute inregMod If inregMod <> 0 Then Response.Write "<P>OK - Directorul " & Session("nume") & " fostE stocat in baza de date!<BR>"' Else Response.Write "<P><FONT COLOR=RED>Eroare - Directorul NU a fostE stocat in baza de date!</FONT><BR>" End If For i= 1 to 3 NumeMem = Request.Form("Membru" & CStr(i)) If NumeMem <> "NU" Then sirSQL = "INSERT INTO Membri (IDProiect, IDPersoana," & _ " Calitate) VALUES (" & _ IDProiect & "," & _ ExtrageID(Request.Form("Membru"&CStr(i))) & ",False)" cmd.CommandText = sirSQL cmd.Execute inregMod If inregMod <> 0 Then http://www.east.utcluj.ro/mb/mep/antal Response.Write "<P>OK - Membrul " & NumeMem & " aE fost stocat in baza de date!<BR>"' Else Universitatea Tehnica din Cluj-Napoca Response.Write "<P><FONT COLOR=RED>Eroare - MembrulE Catedra Mecanica si Programare NU a fost stocat in baza de date!</FONT><BR>" Alexandru Conf. Dr. Ing. ANTAL Tiberiu End If End If Next If cnn.Errors.Count = 0 Then cnn.CommitTrans Response.Write "<BR>*** Tranzactia A fost efectuata cu succes.E ***<BR>" Else cnn.RollbackTrans Response.Write "<BR>??? Tranzactia NU a fost efectuata E cu succes. ???<BR>" End If Set cmd = Nothing Set cnn = Nothing %> <BR> <A HREF="AfisareProiecte.asp">Selectare alt proiect.</A> </BODY> </HTML>

Accesul la bazele de date relationale din ASP cu ADO - 251 -

Figure 77 Formularul AdaugaPersoana 1. asp

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Fiierul AdaugaPersoana1.asp :Dr. Ing. ANTAL Tiberiu Alexandru
<%@ Language=VBScript %> <HTML> <HEAD> <TITLE>Formular de inscriere</TITLE> </HEAD> <BODY BGCOLOR="AQUA"> <H2>Formular de inscriere</H2> <HR SIZE=4 WIDTH="50%" ALIGN=LEFT> <BR> <H3>Toate campurile cu (*) care urmeaza, trebuie completate!</H3> <% Response.write month(now) & "/" & day(now) & "/" & year(now) & " "E & time() & "<BR>" %> <FORM NAME="Prs" METHOD="Post" ACTION="AdaugaPersoana2.asp"E ONSUBMIT="return(Verifica());"> <TABLE> <TR> <TD>Nume(*):</TD> <TD><INPUT Name="Nume" SIZE=30></TD> </TR> <TR> <TD>Parola(*): </TD> <TD><INPUT Name="Parola" SIZE=30></TD> </TR> <TR> <TD>Catedra(*): </TD> <TD><INPUT Name="Catedra" SIZE=30></TD>

252 - Accesul la bazele de date relationale din ASP cu ADO -

</TR> <TR> <TD>Adresa: </TD> <TD><INPUT Name="Adresa" SIZE=30></TD> </TR> <TR> <TD>Telefon(*): </TD> <TD><INPUT Name="Telefon" SIZE=20></TD> </TR> <TR> <TD>Fax: </TD> <TD><INPUT Name="Fax" SIZE=20></TD> </TR> <TR> <TD>Email: </TD> <TD><INPUT Name="Email" SIZE=30></TD> </TR> <TR> <TD><INPUT NEME="cmdSubmit" type=submit value="Creare"></TD> <TD ALIGN=RIGHT><INPUT name="cmdSubmit" type=submit E value="Reset"></TD> </TR> </TABLE> <A HREF </FORM> <FONT COLOR="RED" SIZE=5><P ID="Er"> </P></FONT> <SCRIPT LANGUAGE="VBScript"> Function Verifica() http://www.east.utcluj.ro/mb/mep/antal Dim err Dim frm Universitatea Tehnica din Cluj-Napoca Dim el

Catedra Mecanica si Programare


Set frm = Conf. Dr. Ing. ANTAL Tiberiu Alexandru document.Prs err=False Prob="EROARE, urmatoarele campuri sunt vide: " If (Trim(frm.Nume.Value) = "") then prob = prob & "'Nume' " err=True End If If (Trim(frm.Parola.Value) = "") then prob = prob & "'Parola' " err=True End If If (Trim(frm.Catedra.Value) = "") then prob = prob & "'Catedra' " err=True End If If (Trim(frm.Telefon.Value) = "") then prob = prob & "'Telefon' " err=True End If If err Then Set el = document.all("Er") el.innertext=prob Verifica=false Else Verifica=true End If End Function </SCRIPT> </BODY> </HTML>

Fiierul AdaugaPersoana2.asp :

Accesul la bazele de date relationale din ASP cu ADO - 253 -

<%@ LANGUAGE="VBScript" %> <% Option Explicit %> <% Response.Buffer = True %> <HTML> <HEAD> <TITLE>F2</TITLE> </HEAD> <BODY BGCOLOR="AQUA"> <!--#include file="ConstADO.inc"--> <!--#include file="Util.inc"--> <!--#include file="ConstCon.inc"--> <H2>Formular de inscriere</H2> <HR SIZE=4 WIDTH="50%" ALIGN=LEFT> <BR> <% Sub Exista Dim cnn Dim rst Dim sir Set cnn = Server.CreateObject("ADODB.Connection") Set rst = Server.CreateObject("ADODB.Recordset") sir = "SELECT * FROM Persoane" & _ http://www.east.utcluj.ro/mb/mep/antal " WHERE Nume = '" & Request.Form("Nume") & "'" & _ " AND Parola = '" & Request.Form("Parola") & "'" cnn.Open rst.Open adCmdText If Not rst.EOF Then Response.Write "<P>Sinteti deja inscris in baza de date!" Response.Write "<P>Pentru reusita inscrierii modificati " & _ "continutul campurilor: <FONT COLOR=RED> Nume, Parola </FONT>!" Response.End End If rst.Close cnn.Close Set rst = Nothing Set cnn = Nothing End Sub %> <% Dim Dim Dim Dim Dim cnn cmd inregMod sir raspuns

Universitatea Tehnica din Cluj-Napoca sirCnn Catedra Mecanica si Programare sir, cnn, adOpenKeyset, adLockReadOnly, Conf. Dr. Ing. ANTAL Tiberiu Alexandru

Exista Set cnn = Server.CreateObject("ADODB.Connection") cnn.Mode = adModeReadWrite Set cmd = Server.CreateObject("ADODB.Command") cnn.Open sirCnn Set cmd.ActiveConnection = cnn cmd.CommandType = adCmdText sir = "INSERT INTO Persoane (Nume, Parola, Catedra, Adresa, Telefon," sir = sir & " Fax, Email) VALUES"

254 - Accesul la bazele de date relationale din ASP cu ADO -

sir sir sir sir sir sir sir

= = = = = = =

sir sir sir sir sir sir sir

& & & & & & &

"('" & "','"& "','"& "','"& "','"& "','"& "','"&

Request.Form("Nume") Request.Form("Parola") Request.Form("Catedra") Request.Form("Adresa") Request.Form("Telefon") Request.Form("Fax") Request.Form("Email") & "')"

cmd.CommandText = sir cmd.Execute inregMod If inregMod <> 0 Then Response.Write "<P>OK - Ati fost inregistrat in baza deE date!<BR>"' Else Response.Write "<P><FONT COLOR=RED>Eroare - NU ati fostE inregistrat in baza de date!</FONT><BR>" End If cnn.Close Set cmd = Nothing Set cnn = Nothing %> <FORM METHOD = "POST"> <INPUT TYPE="BUTTON" NAME="btnIesire" VALUE="Iesire"> <SCRIPT FOR="btnIesire" EVENT="onClick" LANGUAGE="VBScript"> top.window.close </SCRIPT> http://www.east.utcluj.ro/mb/mep/antal </FORM> <A HREF="http://localhost/CursASP/bd/logare.htm">Revenire la formularul deE Universitatea Tehnica din Cluj-Napoca logare</A> </BODY> </HTML>

Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

Fiierul ModificaProiect.asp :
<%@ LANGUAGE="VBScript" %> <% Option Explicit %> <HTML> <HEAD> <TITLE>Modificare proiect</TITLE> </HEAD> <BODY BGCOLOR="AQUA"> <!--#include file="ConstADO.inc"--> <!--#include file="Util.inc"--> <!--#include file="ConstCon.inc"--> <H1>Actualizare proiect</H1> <% Dim Dim Dim Dim Dim Dim Dim Dim Dim Dim Dim cnn cmd inregMod NumeProiect Data Suma1 Suma2 Suma3 Telefon Email sirSQL

Set cnn = Server.CreateObject("ADODB.Connection")

Accesul la bazele de date relationale din ASP cu ADO - 255 -

Set cmd = Server.CreateObject("ADODB.Command") Select Case Request.Form("cmdSubmit") Case "Modificare" NumeProiect=Z2Null(Request.Form("NumeProiect")) Data=Z2Null(Request.Form("DataDepunerii")) Suma1=Z2Null(Request.Form("Suma1")) Suma2=Z2Null(Request.Form("Suma2")) Suma3=Z2Null(Request.Form("Suma3")) Telefon=Z2Null(Request.Form("Telefon")) Email=Z2Null(Request.Form("Email")) sirSQL = "UPDATE Proiecte INNER JOIN (Persoane INNER JOIN Membri" & _ " ON Persoane.IDPersoana = Membri.IDPersoana) " & _ " ON Proiecte.IDProiect = Membri.IDProiect" & _ " SET Proiecte.[NumeProiect] = '" & NumeProiect & _ "' , Proiecte.[DataDepunerii] = #" & _ Data & "#, Proiecte.Suma1 = "& Suma1 & _ " , Proiecte.Suma2 = " & Suma2 & ", Proiecte.Suma3 = " & Suma3 & _ " , Persoane.Telefon = '" & Telefon &"', Persoane.Email = '" & _ Email & "' WHERE (Proiecte.IDProiect) = " & _ Z2Null(Request.Form("IDProiect")) Set cnn = Server.CreateObject("ADODB.Connection") cnn.Mode = adModeReadWrite cnn.Open sirCnn Set cmd = Server.CreateObject("ADODB.Command") Set cmd.ActiveConnection = cnn http://www.east.utcluj.ro/mb/mep/antal cmd.CommandType = adCmdText cmd.CommandText = sirSQL Universitatea Tehnica din Cluj-Napoca cmd.Execute inregMod

Catedra Mecanica si Programare


'Linia urmatoare este echivalenta Tiberiu Alexandru Conf. Dr. Ing. ANTAL 'cu cele 5 linii anterioare 'cnn.Execute sirSQL, inregMod , adCmdText If inregMod <> 0 Then Response.Write "Proiectul a fost actualizat!" Else Response.Write "Actualizarea nu se poate realiza." End If Case "Stergere" Set cnn = Server.CreateObject("ADODB.Connection") cnn.Mode = 3 Set cmd = Server.CreateObject("ADODB.Command") cnn.Open sirCnn Set cmd.ActiveConnection = cnn cmd.CommandType = adCmdText sirSQL = "DELETE FROM Proiecte " & _ " WHERE Proiecte.IDProiect = " & Z2Null(Request.Form("IDProiect")) cmd.CommandText = sirSQL cmd.Execute inregMod If inregMod <> 0 Then Response.Write "Proiectul a fost sters!" Else Response.Write "Stergerea nu se poate realiza." End If End Select Set cmd = Nothing Set cnn = Nothing

256 - Accesul la bazele de date relationale din ASP cu ADO -

%> <P> <A HREF="AfisareProiecte.asp">Selectare alt proiect.</A> <P> </BODY> </HTML>

Fiierul ConstCon.inc :
<% Dim sirCnn ' Aici, probabil, se vor face modificari. sirCnn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\cursasp\bd\Pr.mdb;" %>

Fiierul ConstAdo.inc :
<% '---Const Const Const Const Const Const Const Const Const '---Const Const Const Const ConnectModeEnum Values ---adModeUnknown = 0 adModeRead = 1 adModeWrite = 2 adModeReadWrite = 3 adModeShareDenyRead = 4 http://www.east.utcluj.ro/mb/mep/antal adModeShareDenyWrite = 8 adModeShareExclusive = &Hc adModeShareDenyNone = &H10 Universitatea adModeRecursive = &H400000 Tehnica din Cluj-Napoca CursorTypeEnum Values ---Conf. Dr. Ing. adOpenForwardOnly = 0 adOpenKeyset = 1 adOpenDynamic = 2 adOpenStatic = 3

Catedra Mecanica si Programare ANTAL Tiberiu Alexandru

'---- CursorLocationEnum Values ---Const adUseServer = 2 Const adUseClient = 3 '---Const Const Const Const '---Const Const Const Const Const Const '---Const Const Const Const Const '---Const Const Const LockTypeEnum Values ---adLockReadOnly = 1 adLockPessimistic = 2 adLockOptimistic = 3 adLockBatchOptimistic = 4 CommandTypeEnum Values ---adCmdUnknown = &H0008 adCmdText = &H0001 adCmdTable = &H0002 adCmdStoredProc = &H0004 adCmdFile = &H0100 adCmdTableDirect = &H0200 ParameterDirectionEnum Values ---adParamUnknown = &H0000 adParamInput = &H0001 adParamOutput = &H0002 adParamInputOutput = &H0003 adParamReturnValue = &H0004 DataTypeEnum Values ---adEmpty = 0 adTinyInt = 16 adSmallInt = 2

Accesul la bazele de date relationale din ASP cu ADO - 257 -

Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const '---Const Const Const %>

adInteger = 3 adBigInt = 20 adUnsignedTinyInt = 17 adUnsignedSmallInt = 18 adUnsignedInt = 19 adUnsignedBigInt = 21 adSingle = 4 adDouble = 5 adCurrency = 6 adDecimal = 14 adNumeric = 131 adBoolean = 11 adError = 10 adUserDefined = 132 adVariant = 12 adIDispatch = 9 adIUnknown = 13 adGUID = 72 adDate = 7 adDBDate = 133 adDBTime = 134 adDBTimeStamp = 135 adBSTR = 8 adChar = 129 adVarChar = 200 adLongVarChar = 201 adWChar = 130 adVarWChar = 202 adLongVarWChar = http://www.east.utcluj.ro/mb/mep/antal 203 adBinary = 128 adVarBinary = 204 Universitatea Tehnica din Cluj-Napoca adLongVarBinary = 205 adChapter = 136 Catedra Mecanica si Programare adFileTime = 64 Conf. Dr. Ing. ANTAL Tiberiu Alexandru adDBFileTime = 137 adPropVariant = 138 adVarNumeric = 139 PositionEnum Values ---adPosUnknown = -1 adPosBOF = -2 adPosEOF = -3

Fiierul Util.inc : <%


Function Z2Null(v) ' Inlocuieste sirul vid cu ' Null. If Len(v)=0 Then Z2Null = Null Else Z2Null = v End If End Function %>

n figurile care urmeaza se prezinta modul n care se poate ajunge la anumite pagini ale aplicat iei prin selectarea hiperlegaturilor sau a butoanelor. Atunci cnd baza de date este fara nregistrari, prima act iune este aceea de introducere a utilizatorilor aplicat iei. Numai daca exista deja utilizatori introdusi se vor putea crea noi proiecte. -

258 - Accesul la bazele de date relationale din ASP cu ADO -

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

INDEX - 259

INDEX
A aspapp1.asp. . . . . . . . . . . . . . . . . . . . . 162 aspr41.asp.. . . . . . . . . . . . . . . . . . . . . . 143 aspre_tr1.asp. . . . . . . . . . . . . . . . . . . . 155 a dou form normal . . . . . . . . . . . . . 215 a treia form normal . . . . . . . . . . . . . 216 C ActiveX. . . . . . . . . . . . . . . . . . . . . . . . . 23 c1p11a.htm.. . . . . . . . . . . . . . . . . . . . . . 48 AdaugaPersoana1.asp. . . . . . . . . . . . . 251 c1p11b.htm.. . . . . . . . . . . . . . . . . . . . . . 49 AdaugaPersoana2.asp. . . . . . . . . . . . . 252 c1p11c.htm.. . . . . . . . . . . . . . . . . . . . . . 49 ADO . . . . . . . . . . . . . . . . . . . . . . . . . . 219 c1p11d.htm.. . . . . . . . . . . . . . . . . . . . . . 49 ConnectionString . . . . . . . . . . 222 c1p14.htm.. . . . . . . . . . . . . . . . . . . . . . . 62 cursor .. . . . . . . . . . . . . . . . . . . 221 c1p14c1.htm.. . . . . . . . . . . . . . . . . . . . . 62 CursorLocation.. . . . . . . . . . . . 223 c1p14c2.htm.. . . . . . . . . . . . . . . . . . . . . 62 referin . . . . . . . . . . . . . . . . . . 221 c1p16c1.htm.. . . . . . . . . . . . . . . . . . . . . 66 adoasp3.asp. . . . . . . . . . . . . . . . . . . . . 230 c1p16c2.htm.. . . . . . . . . . . . . . . . . . . . . 66 adoasp4.asp. . . . . . . . . . . . . . . . . . . . . 232 c1p16c3.htm.. . . . . . . . . . . . . . . . . . . . . 66 AfisareProiecte.asp. . . . . . . . . . . . . . . 240 cache . . . . . . . . http://www.east.utcluj.ro/mb/mep/antal . . . . . . . . . . . . . . . . . . 144 Anomalia la CGI (Common Gateway Interface). . . . 20 actualizare . . . . . . . .Universitatea Tehnica din Cluj-Napoca CGI . . . . . . . . . . . . . . . 22 . . . . . . . . 215 program inserare . . . . . . . . . . . . Catedra Mecanica siCheie primar . . . . . . . . . . . . . . . 208, 210 . . 215, 216 Programare tegere . . . . . . . . . . . . . . . 215, 216 Clas .Alexandru . . . . . . . . . . . . . . . . . 110 Conf. Dr. Ing. ANTAL Tiberiu . . . . . . . . Application . . . . . . . . . . . . . . . . . . . . . 161 COL. . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 lock.. . . . . . . . . . . . . . . . . . . . . 163 COLGROUP . . . . . . . . . . . . . . . . . . . . . 76 unlocked.. . . . . . . . . . . . . . . . . 163 COM (Component Object Model). . . . . 23 ASP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Command.. . . . . . . . . . . . . . . . . . . . . . 229 avantaje . . . . . . . . . . . . . . . . . . . 23 ActiveConnection. . . . . . . . . . 229 motor. . . . . . . . . . . . . . . . . . . . . 28 Append . . . . . . . . . . . . . . . . . . 233 aspado1.asp. . . . . . . . . . . . . . . . . . . . . 226 Cancel. . . . . . . . . . . . . . . . . . . 230 aspado2.asp. . . . . . . . . . . . . . . . . . . . . 228 CommandText. . . . . . . . . . . . . 229 aspapp2.asp. . . . . . . . . . . . . . . . . . . . . 163 CommandTimeout. . . . . . . . . . 229 aspexistaFSO.asp. . . . . . . . . . . . . . . . . 185 CommandType.. . . . . . . . . . . . 229 aspinc.asp. . . . . . . . . . . . . . . . . . . . . . . 172 CreateParameter. . . . . . . . . . . . 230 aspinc1.asp. . . . . . . . . . . . . . . . . . . . . . 172 CreateParameter . . . . . . . . . . . 232 aspinc2.asp. . . . . . . . . . . . . . . . . . . . . . 173 Execute.. . . . . . . . . . . . . . . . . . 230 aspr1.asp.. . . . . . . . . . . . . . . . . . . . . . . 139 Prepared. . . . . . . . . . . . . . . . . . 229 aspr4.asp.. . . . . . . . . . . . . . . . . . . . . . . 142 State. . . . . . . . . . . . . . . . . . . . . 230 aspre_qst.asp. . . . . . . . . . . . . . . . . . . . 156 Compilator . . . . . . . . . . . . . . . . . . . . . . 29 asprq_ex.asp.. . . . . . . . . . . . . . . . . . . . 147 Connection . . . . . . . . . . . . . . . . . . . . . 220 asprq_st.asp. . . . . . . . . . . . . . . . . . . . . 147 ACID .. . . . . . . . . . . . . . . . . . . 223 asprq_tr.asp. . . . . . . . . . . . . . . . . . . . . 146 BeginTrans. . . . . . . . . . . . 220, 223 aspses1.asp. . . . . . . . . . . . . . . . . . . . . . 168 Close. . . . . . . . . . . . . . . . . . . . 220 asptextSCAFSO.asp.. . . . . . . . . . . . . . 189 CommitTrans. . . . . . . . . . . . . . 220 asptextSCAFSO1.asp.. . . . . . . . . . . . . 198 CommitTrans . . . . . . . . . . . . . 223 asptr.asp. . . . . . . . . . . . . . . . . . . . . . . . 174 ConnectionString. . . . . . . . . . . 220 asptr1.asp. . . . . . . . . . . . . . . . . . . . . . . 174 Execute.. . . . . . . . . . . . . . . . . . 220 Execute . . . . . . . . . . . . . . . . . . 227 B Baz de date . . . . . . . . . . . . . . . . . . . . 208 relaional . . . . . . . . . . . . . . . . 208 bibFSO.inc. . . . . . . . . . . . . . . . . . 182, 188 Bridge . . . . . . . . . . . . . . . . . . . . . . . . . . 10

260 - INDEX

Open.. . . . . . . . . . . . . . . . . . . . 220 RollbackTrans. . . . . . . . . . . . . 224 consistent .. . . . . . . . . . . . . . . . . . . . . 210 ConstAdo.inc. . . . . . . . . . . . . . . . . . . . 256 ConstCon.inc. . . . . . . . . . . . . . . . . . . . 256 Constrngere de integritate . . . . . . . . . 208 CSMA/CD. . . . . . . . . . . . . . . . . . . . . . . 12 CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Cunoatere. . . . . . . . . . . . . . . . . . . . . . 209

Files. . . . . . . . . . . . . . . . . . . . . 181 Folder. . . . . . . . . . . . . . . . . . . . 181 Folders. . . . . . . . . . . . . . . . . . . 181 OpenTextFile. . . . . . . . . . . . . . 186 ReadAll . . . . . . . . . . . . . . . . . . 187 TextStream.. . . . . . . . . . . . . . . 181 WriteLine. . . . . . . . . . . . . . . . . 186 Firewall . . . . . . . . . . . . . . . . . . . . . . . . . 10 Fiier implicit. . . . . . . . . . . . . . . . . . . . . 27 Form . . . . . . . . . . . . . . . . . . . . . . . . . . 123 action. . . . . . . . . . . . . . . . . . . . 123 D Data. . . . . . . . . . . . . . . . . . . . . . . . . . . 209 elements . . . . . . . . . . . . . . . . . 124 Dependent funcional encoding.. . . . . . . . . . . . . . . . . 123 complet . . . . . . . . . . . . . . . . . . 212 method. . . . . . . . . . . . . . . . . . . 123 tranzitiv . . . . . . . . . . . . . . . . . . 212 OBJECT . . . . . . . . . . . . . . . . . 133 Dictionary . . . . . . . . . . . . . . . . . . . . . . 178 ONBLUR. . . . . . . . . . . . . . . . . 125 Add.. . . . . . . . . . . . . . . . . . . . . 178 ONCHANGE. . . . . . . . . . . . . . 125 CompareMode. . . . . . . . . . . . . 178 ONCLICK. . . . . . . . . . . . . . . . 125 Count. . . . . . . . . . . . . . . . . . . . 178 ONFOCUS.. . . . . . . . . . . . . . . 126 Exists. . . . . . . . . . . . . . . . . . . . 178 ONSELECT. . . . . . . . . . . . . . . 126 Item. . . . . . . . . . . . . . . . . . . . . 178 OnSubmit. . . . . . . . . . . . . . . . . 124 http://www.east.utcluj.ro/mb/mep/antal . . . . . . . . . . . . . . . . . . 123 Items.. . . . . . . . . . . . . . . . . . . . 178 target. . Key. . . . . . . . . . . . . . . . . . . . . . 178 FRAME. . . . . . . . . . . . . . . . . . . . . . . . . 76 Keys. . . . . . . . . . . . .Universitatea Tehnica din Cluj-Napoca . . . . . . . . 178 Programare Remove. . . . . . . . . . . . Catedra Mecanica siG . . . . . . 178 RemoveAll. . . . . . Conf. . . . .Ing. ANTAL Tiberiu Alexandru . . . . . . . . . . . . . . . . . . 10 . . . . . Dr. . 179 Gateway . . . . . . Dispozitiv de reea . . . . . . . . . . . . . . . . 10 global.asa. . . . . . . . . . . . . . . . . . . 166, 167 Document . . . . . . . . . . . . . . . . . . . . . . 119 all. . . . . . . . . . . . . . . . . . . . . . . 120 H anchors. . . . . . . . . . . . . . . . . . . 120 hiperlegtur . . . . . . . . . . . . . . . . . . . . . 21 bgColor. . . . . . . . . . . . . . . . . . 119 HTML. . . . . . . . . . . . . . . . . . . . . . . . . . 20 fgColor. . . . . . . . . . . . . . . . . . . 119 < > . . . . . . . . . . . . . . . . . . . . . . . 33 lastModified. . . . . . . . . . . . . . . 120 A.. . . . . . . . . . . . . . . . . . . . . . . . 47 links. . . . . . . . . . . . . . . . . . . . . 120 A HREF. . . . . . . . . . . . . . . . . . . 47 location.. . . . . . . . . . . . . . . . . . 120 A NAME. . . . . . . . . . . . . . . . . . 47 title. . . . . . . . . . . . . . . . . . . . . . 120 ACTION.. . . . . . . . . . . . . . . . . . 78 vLinkColor. . . . . . . . . . . . . . . . 120 ALIGN. . . . . . . . . . . . . . . . . 36, 42 write. . . . . . . . . . . . . . . . . . . . . 121 atribute. . . . . . . . . . . . . . . . . . . . 32 BACKGROUND. . . . . . . . . . . . 45 BODY . . . . . . . . . . . . . . . . . 34, 35 E E-mail . . . . . . . . . . . . . . . . . . . . . . . . . 204 BORDER. . . . . . . . . . . . . . . . . . 54 CDONTS .. . . . . . . . . . . . . . . . 204 CELLPADDING. . . . . . . . . . . . 56 JMail. . . . . . . . . . . . . . . . . . . . 206 CELLSPACING.. . . . . . . . . . . . 56 NewMail . . . . . . . . . . . . . . . . . 205 CHECKBOX. . . . . . . . . . . . . . . 82 Ethernet . . . . . . . . . . . . . . . . . . . . . . . . . 12 CHECKED . . . . . . . . . . . . . . . . 82 class. . . . . . . . . . . . . . . . . . . . . . 69 COLSPAN. . . . . . . . . . . . . . . . . 58 F FileSystemObject . . . . . . . . . . . . . . . . 181 COLSPAN . . . . . . . . . . . . . . . . 56 Close. . . . . . . . . . . . . . . . . . . . 186 comentarii. . . . . . . . . . . . . . . . . 33 Drive. . . . . . . . . . . . . . . . . . . . 181 DD. . . . . . . . . . . . . . . . . . . . . . . 40 File. . . . . . . . . . . . . . . . . . . . . . 181 DL. . . . . . . . . . . . . . . . . . . . . . . 40

INDEX - 261

DT. . . . . . . . . . . . . . . . . . . . . . . 40 Informaie . . . . . . . . . . . . . . . . . . . . . . 209 Elementele text . . . . . . . . . . . . . 32 inscriere.asp. . . . . . . . . . . . . . . . . . 192-194 FONT . . . . . . . . . . . . . . . . . . . . 36 Integritate referenial . . . . . . . . . . . . . 210 FORM . . . . . . . . . . . . . . . . . . . . 77 Interpretor . . . . . . . . . . . . . . . . . . . . . . . 29 FRAME. . . . . . . . . . . . . . . . . . . 61 ipconfig. . . . . . . . . . . . . . . . . . . . . . . . . 15 FRAMESET.. . . . . . . . . . . . . . . 61 GET. . . . . . . . . . . . . . . . . . . . . . 78 J GIF . . . . . . . . . . . . . . . . . . . . . . 42 Job .. . . . . . . . . . . . . . . . . . . . . . . . . . . 160 H1.. . . . . . . . . . . . . . . . . . . . . . . 35 HEIGHT.. . . . . . . . . . . . . . . . . . 43 L HIDDEN. . . . . . . . . . . . . . . . . . 86 LAN . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 HR. . . . . . . . . . . . . . . . . . . . . . . 41 Limbaj de programare .. . . . . . . . . . . . . 29 HREF. . . . . . . . . . . . . . . . . . . . . 47 Limbaj de script (script language). . . . . 21 id . . . . . . . . . . . . . . . . . . . . . . . . 69 ASP . . . . . . . . . . . . . . . . . . . . . . 21 IMG .. . . . . . . . . . . . . . . . . . . . . 42 Perl . . . . . . . . . . . . . . . . . . . . . . 21 INPUT TYPE.. . . . . . . . . . . . . . 78 Limbaj main .. . . . . . . . . . . . . . . . . . . 29 JPEG . . . . . . . . . . . . . . . . . . . . . 42 localhost . . . . . . . . . . . . . . . . . . . . . . . 139 LI. . . . . . . . . . . . . . . . . . . . . . . . 38 logare.htm. . . . . . . . . . . . . . . . . . 191, 238 LINK . . . . . . . . . . . . . . . . . . . . . 34 MAXLENGHT . . . . . . . . . . . . . 80 M MULTIPLE . . . . . . . . . . . . . . . . 84 MAC . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 http://www.east.utcluj.ro/mb/mep/antal . . . . . . . . . . . . . . . . . . . 11 OBJECT . . . . . . . . . . . . . . . . . 124 MAN . . . . . . . . OL. . . . . . . . . . . . . . . . . . . . . . . 38 Model de date . . . . . . . . . . . . . . . . . . . 208 Universitatea84 Tehnica din Cluj-Napoca . . . . . . . . . . . . . . . . . 208 OPTION. . . . . . . . . . . . . . . . . . . relaional Programare P. . . . . . . . . . . . . . . . . . Catedra. Mecanica siModel de obiecte .. . . . . . . . . . . . . . . . 178 . . . . . . 37 PASSWORD. . . . Conf. Dr. .Ing. ANTAL Tiberiu Alexandru . . . . . . . . . . 80 ModificaProiect.asp. . . . . . . . . . . . . . . 254 POST. . . . . . . . . . . . . . . . . . . . . 78 Multitasking . . . . . . . . . . . . . . . . . . . . 160 PRE. . . . . . . . . . . . . . . . . . . . . . 38 PRE . . . . . . . . . . . . . . . . . . . . . . 37 N RESET. . . . . . . . . . . . . . . . . . . . 79 Navigator .. . . . . . . . . . . . . . . . . . . . . . 122 ROWSPAN. . . . . . . . . . . . . 56, 58 appCodeName. . . . . . . . . . . . . 122 SELECTED .. . . . . . . . . . . . . . . 84 appName. . . . . . . . . . . . . . . . . 122 SIZE. . . . . . . . . . . . . . . . . . . . . . 80 appVersion. . . . . . . . . . . . . . . . 122 SPAN. . . . . . . . . . . . . . . . . . . . 142 userAgent. . . . . . . . . . . . . . . . . 122 structur .. . . . . . . . . . . . . . . . . . 33 NIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 SUBMIT.. . . . . . . . . . . . . . . . . . 79 Nivelul protocolului . . . . . . . . . . . . . . . 13 TABLE . . . . . . . . . . . . . . . . . . . 52 Normalizare .. . . . . . . . . . . . . . . . . . . . 210 TD. . . . . . . . . . . . . . . . . . . . . . . 52 TEXT. . . . . . . . . . . . . . . . . . . . . 79 O TFOOT.. . . . . . . . . . . . . . . . . . . 58 Obiect . . . . . . . . . . . . . . . . . . . . . . . . . 110 THEAD . . . . . . . . . . . . . . . . . . . 58 tipuri de elemente . . . . . . . . . . . 32 P TR. . . . . . . . . . . . . . . . . . . . . . . 52 Persisten . . . . . . . . . . . . . . . . . . . . . . 208 UL. . . . . . . . . . . . . . . . . . . . . . . 38 Placa de reea. . . . . . . . . . . . . . . . . . . . . 12 WIDTH. . . . . . . . . . . . . . . . . . . 43 PrgDuminica.asp. . . . . . . . . . . . . . . . . 175 WRAP . . . . . . . . . . . . . . . . . . . . 81 PrgNormal.asp. . . . . . . . . . . . . . . . . . . 174 Hub . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 PrgSimbata.asp.. . . . . . . . . . . . . . . . . . 175 prima form normal .. . . . . . . . . . . . . 213 Programare orientat pe obiecte . . . . . 110 I include. . . . . . . . . . . . . . . . . . . . . . . . . 171 Protocol . . . . . . . . . . . . . . . . . . . . . . . . . 17 Index . . . . . . . . . . . . . . . . . . . . . . . . . . 208 HTTP i FTP . . . . . . . . . . . . . . . 25

262 - INDEX

TCP/IP. . . . . . . . . . . . . . . . . . . . 25 Proxy server. . . . . . . . . . . . . . . . . . . . . . 10

R Recordset .. . . . . . . . . . . . . . . . . . . . . . 224 EOF . . . . . . . . . . . . . . . . . . . . . 225 MoveNext. . . . . . . . . . . . . . . . 225 Open . . . . . . . . . . . . . . . . . . . . 224 Recursiv. . . . . . . . . . . . . . . . . . . . 148, 180 Repeater . . . . . . . . . . . . . . . . . . . . . . . . 10 Request . . . . . . . . . . . . . . . . . . . . . . . . 145 ClientCertificate.. . . . . . . . . . . 146 Cookies. . . . . . . . . . . . . . . . . . 146 Form.. . . . . . . . . . . . . . . . . . . . 149 QueryString. . . . . . . . . . . . . . . 154 T ServerVariables. . . . . . . . . . . . 157 Tabel . . . . . . . . . . . . . . . . . . . . . . . . . . 208 Response. . . . . . . . . . . . . . . . . . . . . . . 139 TextStream . . . . . . . . . . . . . . . . . . . . . 187 AddHeader. . . . . . . . . . . . . . . . 142 AtEndOfLine. . . . . . . . . . . . . . 188 AppendToLog. . . . . . . . . . . . . 200 Close. . . . . . . . . . . . . . . . . . . . 187 Buffer. . . . . . . . . . . . . . . . . . . . 143 Column.. . . . . . . . . . . . . . . . . . 188 CacheControl. . . . . . . . . . . . . . 144 Line. . . . . . . . . . . . . . . . . . . . . 188 http://www.east.utcluj.ro/mb/mep/antal . . . . . . . . . . . . . . . . . . 187 Cookies. . . . . . . . . . . . . . . . . . 140 Read. . . Expires. . . . . . . . . . . . . . . . . . . 144 ReadAll. . . . . . . . . . . . . . . . . . 187 Universitatea Tehnica din Cluj-Napoca . . . . . . . . . . . . . . . . 187 Redirect. . . . . . . . . . . . . . . . . . 143 ReadLine. Write. . . . . . . . . . . . . . Catedra Mecanica si Programare . . . . . . . . . . . . . . . . . . . . 187 . . . . . . 139 Skip. Conf. . . . .Ing. ANTAL Tiberiu Alexandru . . . . . . . . . . . . . . . . 187 Dr. . . 10 Router . . . . . . . . . . . . . . . . . . . . SkipLine.. RULES.. . . . . . . . . . . . . . . . . . . . . . . . . 76 Write. . . . . . . . . . . . . . . . . . . . 188 WriteBlankLines. . . . . . . . . . . 188 WriteLine. . . . . . . . . . . . . . . . . 188 S SCRIPT . . . . . . . . . . . . . . . . . . . . . . . . 116 Topologie . . . . . . . . . . . . . . . . . . . . . . . 12 Server . . . . . . . . . . . . . . . . . . . . . . 17, 169 Tranzacie . . . . . . . . . . . . . . . . . . . . . . 209 ASPErrorObject . . . . . . . . . . . 176 Tupl . . . . . . . . . . . . . . . . . . . . . . . . . . 209 CreateObject . . . . . . . . . . . . . . 170 Execute.. . . . . . . . . . . . . . . . . . 173 U HTMLEncode. . . . . . . . . . . . . 169 URL (Uniform Resource Locator). . . . . 20 MapPath. . . . . . . . . . . . . . . . . . 175 Util.inc. . . . . . . . . . . . . . . . . . . . . . . . . 257 MIME . . . . . . . . . . . . . . . . . . . . 27 utilNou.htm. . . . . . . . . . . . . . . . . . . . . 192 proxy . . . . . . . . . . . . . . . . . . . . 144 ScriptTimeout. . . . . . . . . . . . . 169 V Transfer. . . . . . . . . . . . . . . . . . 173 Variabil dependent. . . . . . . . . . . . . . 212 URLEncode. . . . . . . . . . . . . . . 170 independent . . . . . . . . . . . . . . 212 Web server . . . . . . . . . . . . . . . . 17 VBScript . . . . . . . . . . . . . . . . . . . . . . . . 88 Sesiune . . . . . . . . . . . . . . . . . . . . . . . . 161 Clasa . . . . . . . . . . . . . . . . . . . . 110 Session. . . . . . . . . . . . . . . . . . . . . . . . . 164 Cuvinte cheie. . . . . . . . . . . . . . . 88 Abandon.. . . . . . . . . . . . . . . . . 166 Dim . . . . . . . . . . . . . . . . . . . . . . 97 Session_OnStart . . . . . . . . . . . 165 Do ... While. . . . . . . . . . . . . . . 106 SessionID . . . . . . . . . . . . . . . . 165 Err . . . . . . . . . . . . . . . . . . . . . . 197 TimeOut. . . . . . . . . . . . . . . . . . 166 Execute.. . . . . . . . . . . . . . . . . . 108 Sistem de operare . . . . . . . . . . . . . . . . 160 For ... Next. . . . . . . . . . . . . . . . 105 Site de web . . . . . . . . . . . . . . . . . . . . . . 18 Function . . . . . . . . . . . . . . . . . 100 SMTP . . . . . . . . . . . . . . . . . . . . . . . . . 204 If ... Then. . . . . . . . . . . . . . . . . 104

SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 cuvinte definite de utilizator. . 217 cuvinte rezervate . . . . . . . . . . . 217 Data Definition Language . . . . 217 Data Manipulation Language . . . . . . . . . . . . . . . . . . . 217 DELETE.. . . . . . . . . . . . . . . . . 219 INSERT. . . . . . . . . . . . . . . . . . 218 ORDER BY . . . . . . . . . . . . . . 218 SELECT. . . . . . . . . . . . . . . . . . 217 UPDATE. . . . . . . . . . . . . . . . . 219 WHERE. . . . . . . . . . . . . . . . . . 218 Switch . . . . . . . . . . . . . . . . . . . . . . . . . . 10

INDEX - 263

Initialize . . . . . . . . . . . . . . . . . 112 status. . . . . . . . . . . . . . . . . . . . 117 Instr . . . . . . . . . . . . . . . . . . . . . 107 top. . . . . . . . . . . . . . . . . . . . . . 117 InstrRev .. . . . . . . . . . . . . . . . . 107 winipcfg. . . . . . . . . . . . . . . . . . . . . . . . . 15 Instruciuni de ciclare.. . . . . . . 105 WWW (World Wide Web). . . . . . . . . . 18 LBound.. . . . . . . . . . . . . . . . . . . 98 Left. . . . . . . . . . . . . . . . . . . . . . 107 Membri dat. . . . . . . . . . . . . . . 111 Mid . . . . . . . . . . . . . . . . . . . . . 107 Nothing . . . . . . . . . . . . . . . . . . . 99 On Error Goto 0. . . . . . . . . . . . 196 On Error Resume Next.. . . . . . 196 Operatori aritmetici. . . . . 101, 102 Operatori de concatenare. . . . . 102 Operatori logici. . . . . . . . . . . . 102 Pattern . . . . . . . . . . . . . . . . . . . 108 Property Get . . . . . . . . . . . . . . 111 Property Let .. . . . . . . . . . . . . . 112 Proprieti . . . . . . . . . . . . . . . . 111 RegExp . . . . . . . . . . . . . . . . . . 108 Right . . . . . . . . . . . . . . . . . . . . 107 rutine recursive.. . . . . . . . . . . . 101 http://www.east.utcluj.ro/mb/mep/antal Select ... Case. . . . . . . . . . . . . . 104 Set . . . . . . . . . . . . . . . . . . . . . . . 99 Universitatea Tehnica din Cluj-Napoca Sub . . . . . . . . . . . . . . . . . . . . . 100 Catedra Mecanica si Programare Tablouri .. . . . . . . . . . . . . . . . . . 98 Conf. Dr. Ing. ANTAL Tiberiu Alexandru Terminate. . . . . . . . . . . . . . . . . 112 UBound. . . . . . . . . . . . . . . . . . . 98 Variabil . . . . . . . . . . . . . . . . . . 97 While ... Wend. . . . . . . . . . . . . 106 VerificaUtilizator.asp.. . . . . . . . . . . . . 239 VizualizareProiect.asp. . . . . . . . . . . . . 242 VPN .. . . . . . . . . . . . . . . . . . . . . . . . . . . 11 W WAN . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Window. . . . . . . . . . . . . . . . . . . . . . . . 116 alert. . . . . . . . . . . . . . . . . . . . . 117 close. . . . . . . . . . . . . . . . . . . . . 117 confirm.. . . . . . . . . . . . . . . . . . 118 defaultStatus.. . . . . . . . . . . . . . 117 name.. . . . . . . . . . . . . . . . . . . . 117 navigate. . . . . . . . . . . . . . . . . . 118 onLoad. . . . . . . . . . . . . . . . . . . 119 onUnload. . . . . . . . . . . . . . . . . 119 open. . . . . . . . . . . . . . . . . . . . . 118 opener.. . . . . . . . . . . . . . . . . . . 117 parent. . . . . . . . . . . . . . . . . . . . 117 prompt. . . . . . . . . . . . . . . . . . . 119 self. . . . . . . . . . . . . . . . . . . . . . 117 setTimeOut.. . . . . . . . . . . . . . . 118

264 - Bibliografie

BIBLIOGRAFIE
[1] A. Russel Jones, Mastering Active Server Pages 3, SYBEX, 2000, ISBN: 0-77821-2619-7. [2] Andrew S. Tanenbaum, Ret ele de calculatoare, Edit ia a treia, 1998, Computer Press AGORA, ISBN: 973-97706-3-0. [3] Cary Prague, Michal Irwin, Access 2002 Bible, Hungy Minds, Inc. 2001, ISBN: 0-7645-3596-X. [4] Antal Tiberiu Alexandru, Microsoft Access 97 si 2000 n 14 cursuri. Ed. Todesco, 2000, ISBN: 973-99779-6-0.

http://www.east.utcluj.ro/mb/mep/antal Universitatea Tehnica din Cluj-Napoca Catedra Mecanica si Programare Conf. Dr. Ing. ANTAL Tiberiu Alexandru

S-ar putea să vă placă și