curs dpw.docx

397
MODULUL I Microsoft Access 1. Elemente de bază ale programului Access Access 2010 creează fișiere în formatul de fișier .accdb, care nu poate fi accesat cu versiuni de Access anterioare, Acces 2007. Această secțiune rezumă tipurile de fișier care sunt utilizate de formatul de fișier Access 2010. .accdb Aceasta este extensia de nume de fișier standard pentru bazele de date în format Access 2010. O baza de date Access 2010 poate fi proiectata ca baza de date „client“ standard sau ca o bază de date Web. Baza de date Client O bază de date client este un fișier de baza de date Access tradițional care se stochează pe hard diskul local, într-o partajare de fișiere sau într-obiblioteca de documente. Tabelele sale nu au fost proiectate să fie compatibile cu caracteristica Publicare în Access Services; prin urmare, au este necesar programul Access pentru a se executa. Toate bazele de date care s-au creat cu versiunile anterioare de Access se deschid ca baze de date client în Access 2010. Baza de date Web O baza de date Web este una care a fost creata utilizând comanda Baza de date Web necompletată în vizualizarea Microsoft Office Backstage sau una care a trecut cu succes testele aplicate de Verificatorul de compatibilitate (localizat sub Publicare în Access Services de pe fila Salvare şi publicare în vizualizarea Backstage). Tabelele dîntr- obaza de date Web sunt structurate să fie compatibile cu caracteristica de publicare și nu se pot deschide în vizualizarea Proiect (deși aveți în continuare posibilitatea să le modificați structura în vizualizarea Foaie de date). O baza de date Web conține și cel puțin un obiect (de exemplu, un formular sau un raport) care se vă reda pe server. Componentele bazei de date care se redau pe server pot fi utilizate intr-un browser Internet standard de către oricine se conectează la acel server, fără a fi necesar ca Access 2010 să fie instalat pe computerul sau. Orice componente ale bazei de date care nu se redau pe server se pot utiliza în continuare pe un computer care are instalat Access 2010 prin selectarea Deschidere în Access în meniul Acțiuni din SharePoint. .accdw Un fișier .accdw este un fișier creat automat pe care îl utilizați pentru a deschide o baza de date Web în programul Access. Poate fi considerata ca fiind o comanda rapida la aplicația Web care deschide întotdeauna aplicația în Access, în loc să o deschidă în browser. Access și Access Services creează automat fișierul .accdw, când utilizați comanda Deschidere în Access din SharePoint din meniul Acțiuni site de pe site-ul aplicației Web . Aveți posibilitatea fie să deschideți fișierul .accdw direct de pe server, fie să salvați fișierul .accdw pe computer, apoi să faceți dublu clic ca sa-l executați. În oricare dintre situații, când deschideți fișierul .accdw, baza de date se copiază pe computer ca fișier .accdb. .accde Aceasta este extensia de nume de fișier pentru bazele de date desktop Access 2010 care sunt compilate într-oversiune „blocata” sau „doar pentru execuție” a fișierului .accdb original. Daca fișierul .accdb conține cod VBA (Visual Basic for Applications), se vă adăuga numai codul compilat la fișierul .accde. Drept urmare, codul VBA nu poate fi vizualizat sau modificat de către utilizatori. De asemenea, utilizatorii care lucrează cu fișierele .accde nu pot efectua modificări de proiectare în formulare sau rapoarte. Creați fișierele .accde din fișiere .accdb procedând astfel: 1

Upload: ionut-birsu

Post on 22-Jun-2015

132 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: curs DPW.docx

MODULUL I Microsoft Access

1. Elemente de bază ale programului AccessAccess 2010 creează fișiere în formatul de fișier .accdb, care nu poate fi accesat cu

versiuni de Access anterioare, Acces 2007.Această secțiune rezumă tipurile de fișier care sunt utilizate de formatul de fișier Access

2010. .accdb    Aceasta este extensia de nume de fișier standard pentru bazele de date în

format Access 2010. O baza de date Access 2010 poate fi proiectata ca baza de date „client“ standard sau ca o bază de date Web.

Baza de date Client    O bază de date client este un fișier de baza de date Access tradițional care se stochează pe hard diskul local, într-o partajare de fișiere sau într-obiblioteca de documente. Tabelele sale nu au fost proiectate să fie compatibile cu caracteristica Publicare în Access Services; prin urmare, au este necesar programul Access pentru a se executa. Toate bazele de date care s-au creat cu versiunile anterioare de Access se deschid ca baze de date client în Access 2010.

Baza de date Web    O baza de date Web este una care a fost creata utilizând comanda Baza de date Web necompletată în vizualizarea Microsoft Office Backstage sau una care a trecut cu succes testele aplicate de Verificatorul de compatibilitate (localizat sub Publicare în Access Services de pe fila Salvare şi publicare în vizualizarea Backstage). Tabelele dîntr-obaza de date Web sunt structurate să fie compatibile cu caracteristica de publicare şi nu se pot deschide în vizualizarea Proiect (deși aveți în continuare posibilitatea să le modificați structura în vizualizarea Foaie de date). O baza de date Web conține şi cel puțin un obiect (de exemplu, un formular sau un raport) care se vă reda pe server. Componentele bazei de date care se redau pe server pot fi utilizate intr-un browser Internet standard de către oricine se conectează la acel server, fără a fi necesar ca Access 2010 să fie instalat pe computerul sau. Orice componente ale bazei de date care nu se redau pe server se pot utiliza în continuare pe un computer care are instalat Access 2010 prin selectarea Deschidere în Access în meniul Acțiuni din SharePoint.

.accdw    Un fișier .accdw este un fișier creat automat pe care îl utilizați pentru a deschide o baza de date Web în programul Access. Poate fi considerata ca fiind o comanda rapida la aplicația Web care deschide întotdeauna aplicația în Access, în loc să o deschidă în browser. Access şi Access Services creează automat fișierul .accdw, când utilizați comanda Deschidere în Access din SharePoint din meniul Acțiuni site de pe site-ul aplicației Web . Aveți posibilitatea fie să deschideți fișierul .accdw direct de pe server, fie să salvați fișierul .accdw pe computer, apoi să faceți dublu clic ca sa-l executați. În oricare dintre situații, când deschideți fișierul .accdw, baza de date se copiază pe computer ca fișier .accdb.

.accde    Aceasta este extensia de nume de fișier pentru bazele de date desktop Access 2010 care sunt compilate într-oversiune „blocata” sau „doar pentru execuție” a fișierului .accdb original. Daca fișierul .accdb conține cod VBA (Visual Basic for Applications), se vă adăuga numai codul compilat la fișierul .accde. Drept urmare, codul VBA nu poate fi vizualizat sau modificat de către utilizatori. De asemenea, utilizatorii care lucrează cu fișierele .accde nu pot efectua modificări de proiectare în formulare sau rapoarte. Creați fișierele .accde din fișiere .accdb procedând astfel:

1. În Access 2010, deschideți baza de date pe care doriți să o salvați ca fișier .accde.2. Pe fila Fișier/File, faceți clic pe Salvare şi publicare/Save&Publish, apoi sub

Salvare baza de date ca/Save Database As, faceți clic pe Efectuare ACCDE. 3. În caseta de dialog Salvare ca/Save As, navigați la folderul în care doriți salvarea

fișierului, tastați un nume pentru fișier în caseta Nume fișier/File Name, apoi faceți clic pe Salvare/Save. .accdt    Aceasta este extensia de nume de fișier pentru Șabloanele de baza de

date Access. Aveți posibilitatea să descărcați șabloane de baza de date de la Office.com sau să salvați o baza de date ca șablon făcând clic pe Șablon (*.accdt) în spațiul Partajare din vizualizarea Microsoft Office Backstage.

.accdr    Extensia de nume de fișier .accdr vă permite să deschideți o baza de date în mod de execuție. Prin simpla modificare a extensiei numelui de fișier al bazei de date din .accdb în .accdr, aveți posibilitatea să creați o versiune „blocata” a bazei de date Access 2010. Extensia de nume de fișier poate fi modificata înapoi la .accdb pentru a restabili funcționalitatea completa a bazei de date.

1

Page 2: curs DPW.docx

.mdw    Fișierele cu informații despre grupul de lucru stochează informații pentru bazele de date securizate. Nu s-au efectuat modificări în formatul de fișier .mdw pentru Access 2010. Manager grup de lucru Access 2010 creează fișiere .mdw care sunt identice cu cele create în versiunile de la Access 2000 pana la Access 2007. Fișierele .mdw care sunt create în acele versiuni anterioare pot fi utilizate de bazele de date din Access 2010.

Nota   Aveți posibilitatea să utilizați Access 2010 pentru a deschide o baza de date într-o versiune anterioară care a fost securizată utilizând securitate la nivel de utilizator. Însă, securitatea la nivel de utilizator nu exista în bazele de date Access 2010. Nu exista nici o comanda în Panglica pentru a porni Manager grup de lucru, dar aveți în continuare posibilitatea să porniți Manager grup de lucru în Access 2010 utilizând comanda DoCmd.RunCommand acCmdWorkgroupAdministrator în codul VBA sau creând o macrocomandă Access care conține acțiunea RunCommand cu argumentul Command fiind WorkgroupAdministrator.

.laccdb    Când deschideți o baza de date Access 2007 sau Access 2010 (.accdb), blocarea fișierelor este controlată de un fișier de blocare cu extensia de nume de fișier .laccdb. Când deschideți un fișier Access cu o versiune anterioara (.mdb), fișierul de blocare are extensia .ldb. Tipul de fișier de blocare care se creează depinde de tipul de fișier al bazei de date care se deschide, nu de versiunea de Access pe care o utilizați. Fișierele de blocare se șterg automat când toți utilizatorii închid baza de date.Pentru a efectua conversia unei baze de date Access 2000 sau Access 2002 - 2003 (.mdb) la noul format de fișier (.accdb), trebuie să deschideți mai întâi baza de date în Access 2010 şi să o salvați în formatul de fișier .accdb.

1. Pe fila Fișier/File, faceți clic pe Deschidere/Open.2. În caseta de dialog Deschidere/Open, selectați şi deschideți baza de date a cărei

conversie doriți să o efectuați.Pe fila Fișier, faceți clic pe Salvare şi publicare, apoi, sub Tipuri de fișier baza de date

faceți clic pe Baza de date Access (*.accdb). În cazul în care sunt deschise obiecte ale bazei de date când utilizați comanda Salvare baza de date ca, Access vă solicita închiderea lor înainte de a crea copia. Faceți clic pe Da/Yes pentru ca Access să închidă obiectele sau pe Nu/No pentru a revoca întreg procesul. Daca este necesar, Access vă vă solicita salvarea modificărilor.

4. În caseta de dialog Salvare ca/Save As, tastați un nume de fișier în caseta Nume fișier/File Name, apoi faceți clic pe Salvare/Save.

Access creează copia bazei de date, apoi o deschide. Access închide automat baza de date originala.Pentru a efectua în mod explicit conversia unei baze de date Access la formatul nou de fișier .accdb, în primul rând trebuie să deschideți baza de date, apoi să o salvați în formatul de fișier .accdb.

Important   Următoarea procedura este pentru fișiere create în Access 97, Access 2000, Access 2002 sau Access 2003.

Mai întâi, deschideți baza de date:1. Faceți clic pe fila Fișier/File.2. În stânga, faceți clic pe Deschidere/Open.3. În caseta de dialog Deschidere/Open, selectați şi deschideți baza de date a cărei

conversie doriți să o efectuați.Acum efectuați conversia bazei de date:1. Faceți clic pe fila Fișier.2. În stânga, faceți clic pe Partajare.3. Sub Salvare baza de date în totalitate, faceți clic pe Salvare baza de date ca.4. La dreapta, sub Tipuri de fișier baza de date, faceți clic pe Baza de date Access.5. În caseta de dialog Salvare ca, în caseta Nume fișier introduceți un nume de fișier

sau utilizați numele de fișier furnizat.6. Faceți clic pe Salvare.

Se creează o copie a bazei de date în formatul de fișier .accdb.

1.1. Utilizarea Access pentru prima oarăMulți utilizatori încep să utilizeze Access când programul pe care îl utilizează pentru a

urmări ceva devine din ce în ce mai puțin potrivit pentru activitatea respectiva. De exemplu, să presupunem ca sunteți un organizator de evenimente şi doriți să urmăriți toate detaliile care trebuie gestionate pentru ca evenimentele să aibă succes. Daca utilizați un procesor de

2

Page 3: curs DPW.docx

text sau un program de calcul tabelar pentru a efectua aceasta activitate, este posibil să întâmpinaţi cu ușurința probleme cu datele dublate sau neuniforme. Aveți posibilitatea să utilizați un software de programare a calendarului, dar urmărirea informațiilor financiare intr-un calendar nu este o alegere potrivita.

1.2. Baze de date relaționaleUneori aveți nevoie de o baza de date relaţională pentru a urmări astfel de informații:

un depozit de date care a fost împărţit în colecții mai mici de date (numite tabele) pentru a elimina redundanta şi apoi au fost asociate pe baza unor informații comune (numite câmpuri). De exemplu, o baza de date relațională pentru planificarea unui eveniment poate conține un tabel cu informații particularizate, un tabel cu informații despre furnizori şi un tabel cu informații despre evenimente. Tabelul cu informații despre evenimente poate avea un câmp care sa-l asocieze la tabelul despre clienți şi un câmp care sa-l asocieze la tabelul despre furnizori. În acest fel, de exemplu, daca s-a modificat numărul de telefon al furnizorului, informațiile se pot modifica în tabelul despre furnizori, în loc să se modifice în fiecare eveniment care implica furnizorul.

1.2.1. Pentru ce este proiectat AccessAccess este un instrument care se poate utiliza pentru a dezvolta ușor şi rapid

aplicații de baze de date relaționale care vă ajuta să gestionați informații. Aveți posibilitatea să creați o baza de date care să vă ajute să urmăriți aproape orice tip de informații, cum ar fi inventare, persoane de contact de afaceri sau procese care țin de afaceri. De fapt, Access vine echipat cu șabloane pe care aveți posibilitatea să le utilizați imediat pentru a urmări o varietate de informații, facilitând lucrul chiar şi pentru un începător.

1.2.2. Când deschideți AccessCând porniți Access 2010, vedeți vizualizarea Backstage din Microsoft Office, unde

este posibil să obțineți informații despre baza de date curenta, să creați o baza de date noua, să deschideți o baza de date existenta şi să vizualizați conținutul disponibil în Office.com.

De asemenea, vizualizarea Backstage conține şi multe alte comenzi pe care aveți posibilitatea să le utilizați pentru a ajusta, a întreține sau a partaja bazele de date. Comenzile din vizualizarea Backstage se aplica în general bazelor de date întregi, iar nu obiectelor din interiorul unei baze de date.

Nota   Este posibil să accesați vizualizarea Backstage în orice moment, daca faceți clic pe fila Fișier.

Microsoft Access 2010 este un instrument pentru proiectarea aplicațiilor de baze de date şi implementarea acestora, instrument care poate fi utilizat pentru a urmări informațiile importante.

O bază de date Access constă din următoarele obiecte: Tabele – conțin toate înregistrările Interogări – localizează înregistrări specifice Formulare – afișează înregistrările din tabele, una câte una Rapoarte – tipăresc loturi de înregistrări Pagini de acces la date – pun la dispoziție date prin intermediul paginilor Web Macrocomenzi – acțiuni automate uzuale Module – stochează declarații şi proceduri Visual Basic, care ne permit să scriem

programe pentru bazele de date, astfel încât acestea să poată interacționa cu alt software.

O baza de date (BD) reprezintă o colecție de date integrata, anume structurata şi dotata cu o descriere a structurii şi a relațiilor dintre date.În funcție de modul de organizare a informațiilor, se cunosc câteva modele de baze de date:

3

Page 4: curs DPW.docx

Modelul ierarhic. Cu ajutorul modelului conceptual ierarhic, schema bazei de date poate fi reprezentata sub forma unui arbore în care nodurile exprima colecții de date, iar ramurile reflecta relațiile de asociere intre înregistrările colecțiilor de date superioare şi inferioare. Accesul la înregistrările colecțiilor de date inferioare se face prin traversarea arborelui, adică se parcurg toate colecțiile aflate în subordonare ierarhica dintre colecția – rădăcina şi colecția cercetata. Unui element superior ii pot corespunde unul sau mai multe elemente inferioare, iar unui element inferior ii corespunde un singur element superior.

Modelul rețea. Modelul rețea se aseamănă cu cel ierarhic, diferența constând în aceea ca unui element inferior ii pot corespunde unul sau mai multe elemente superioare.

Modelul relațional. Modelul relațional este în prezent cel mai răspândit model de baze de date. Acest model are o singura structura de date: relația sau tabelul. O baza de date relatională este un ansamblu de relații (tabele) grupate în jurul unui subiect bine definit. Deci, o relație poate fi redata printr-un tabel, în care fiecare rând reprezintă o înregistrare diferita, iar fiecare coloana un atribut. Coloanele tabelului sunt identificate prin nume diferite şi reprezintă câmpurile (atributele, caracteristicile) modelului conceptual. În fiecare coloana datele trebuie să fie de același tip. Căutarea în acest model de BD se face secvențial toate articolele şi comparând criteriile de căutare. Articolele ce satisfac condiției căutării se selectează şi pot fi afișate.

Sistemul de gestiune a bazelor de date (SGBD) este acel sistem de programe care facilitează şi supervizează introducerea de informații în baza de date, actualizarea şi extragerea din baza, controlul şi autorizarea accesului la date.

O baza de date este un ansamblu de colecții de date cunoscute sub denumirea de tabela (pentru bazele de date relaționale) şi obiect (pentru bazele de date orientate obiect).

Informația se poate defini ca fiind formată din: entitate (obiectul informației) atribut (proprietățile entității) valoare (măsura proprietății).

Toate aceste date sunt organizate în tabele. O baza de date este formata din mai multe tabele cu diferite legături intre ele .

Pentru a defini o tabela sunt necesare următoarele elemente: Domeniul de valori - reprezintă un ansamblu de valori caracterizate printr-un

nume, ce poate fi definit implicit sau explicit. Atributul - reprezintă o coloana dîntr-otabela caracterizata printr-un nume. Acesta

de obicei semnifica valorile luate dintr-un domeniu corespunzător. Mai multe atribute pot lua valori din același domeniu.

Pentru a defini o baza de date este nevoie de o tabela care reprezintă un produs cartezian dintre mai multe domenii, caracterizata printr-un nume.

Tipurile de legături dintre doua tabele pot fi următoarele: 1:1 - legătura de tip unu la unu când unei înregistrări dîntr-otabela ii corespunde o

singura înregistrare în cealaltă tabela 1:n - legătura de tip unu la mulți când unei înregistrări dîntr-otabela ii corespund mai

multe înregistrări în cealaltă tabela n:n - legătura de tip mulți la mulți când mai multor înregistrări dîntr-otabela le

corespund mai multe înregistrări în cealaltă tabela.

Orice tabela trebuie să aibă definita o cheie. Cheia unei tabele reprezintă un ansamblu minim de atribute care identifica o înregistrare dîntr-otabela.

1.2.3. Prezentarea mediului de lucru Microsoft Acces

Deschiderea sesiunii de lucru Microsoft Acces se realizează, de regula, prin succesiunea de opțiuni Start -->All Programs --> Microsoft Office --> Microsoft Access 2010.

Dacă există o pictogramă pe ecran sub care scrie Microsoft Access 2010 se poate porni aplicația printr-un dublu clic pe acesta iconița.

1.2.3.1. Prezentare generală

4

Page 5: curs DPW.docx

Cele trei componente principale ale interfeței utilizator Access 2010 sunt: Panglica    este banda de file care străbate fereastra programului şi care conține

grupuri de comenzi. Vizualizarea Backstage    este colecția de comenzi pe care le vedeți pe fila Fișier

de pe panglica. Panoul de navigare    este panoul din partea stânga a ferestrei programului

Access, care vă permite să lucrați cu obiecte de baze de date. Panoul de navigare a înlocuit Panoul de baza de date din Access 2007.

Aceste trei elemente oferă mediul în care se creează şi se utilizează bazele de date.PanglicaPanglica este principalul înlocuitor pentru meniurile şi barele de instrumente din

versiunile anterioare Access 2007. Aceasta se compune în principal din file care au grupuri de butoane.

Panglica are file principale care grupează comenzi frecvent utilizate asociate, file contextuale care apar doar atunci când le utilizați, precum şi Bara de instrumente Acces rapid, o bara de instrumente mica ce pe care aveți posibilitatea să o particularizați cu comenzile dvs. preferate.

Pe filele panglicii, unele dintre butoane vă oferă o galerie de opțiuni, în timp ce altele lansează o comanda.

Vizualizarea BackstageVizualizarea Backstage este o caracteristica noua în Access 2010. Acesta conține

comenzi şi informații care se aplica la o întreaga baza de date, cum ar fi Compactare şi reparare/Compact&Repair Database, precum şi comenzile existente în meniul Fișier/File din versiunile anterioare, cum ar fi Imprimare/Print.

Panoul de navigarePanoul de navigare vă ajuta să vă organizați obiectele din baza de date şi este

principalul mijloc de a deschide sau de a modifica proiectul unui obiect din baza de date. Panoul de navigare a înlocuit Fereastra baza de date prezenta în versiunile Access anterioare Access 2007.

Panoul de navigare este organizat pe categorii şi grupuri. Aveți posibilitatea să alegeți dîntr-ovarietate de opțiuni de organizare si, de asemenea, să vă creați propria schema de organizare particularizata în Panoul de navigare. În mod implicit, o baza de date noua utilizează categoria Tip obiect, care are grupuri ce corespund diverselor tipuri de obiecte baza de date. Categoria Tip obiect organizează obiectele baza de date intr-un mod similar cu afișarea din Fereastra baza de date din versiunile anterioare.

Panoul de navigare se poate minimiza şi ascunde, dar nu se poate estompa prin deschiderea obiectelor baza de date în fata lui.

Vizualizarea BackstageVizualizarea Backstage ocupa fila Fișier/File din panglica şi conține multe comenzi

care se aflau înainte în meniul Fișier. De asemenea, vizualizarea Backstage conține alte comenzi care se aplica la un întreg fișier baza de date. Când deschideți Access, dar nu deschideți o baza de date (de exemplu, deschideți Access din meniul Start din Windows), veți vedea vizualizarea Backstage.

În Vizualizarea Backstage, aveți posibilitatea să creați o baza de date noua sau să deschideți o baza de date existenta şi să efectuați multe activităţi de întreținere a fișierelor şi bazelor de date.

2.3.2. Creați o baza de date noua, necompletata

5

Page 6: curs DPW.docx

1. Porniți Access din meniul Pornire/Home sau dintr-o comandă rapidă.Apare vizualizarea Backstage.

2. Alegeți una dintre următoarele variante: Creați o noua baza de date Web

1. Sub Șabloane disponibile/Available Templates, faceți clic pe Baza de date Web/Blank web database.

2. La dreapta, sub Baza de date Web, tastați un nume pentru fișierul baza de date în caseta Nume fișier/File Name sau utilizați-l pe cel furnizat pentru dvs.

3. Faceți clic pe Creare/Create.Se creează baza de date noua şi se deschide un tabel nou în vizualizarea Foaie de date. Crearea unei baze de date desktop noi1. Sub Șabloane disponibile/Available Templates, faceți clic pe Baza de

date/Blank database.2. La dreapta, sub Baza de date, tastați un nume pentru fișierul baza de date în caseta

Nume fișier/File name sau utilizați-l pe cel furnizat pentru dvs.3. Faceți clic pe Creare/Create.Se creează baza de date noua şi se deschide un tabel nou în vizualizarea Foaie de date.

Aveți posibilitatea să descărcați șabloane Access suplimentare de la office.com direct din Vizualizarea Backstage.

1.2.3.3. Crearea unei baze de date noi dintr-un șablon Office.com1. Porniți Access din meniul Pornire sau dîntr-ocomanda rapida.

Apare vizualizarea Backstage.2. Sub panoul Șabloane Office.com/Office.com Templates, faceți clic pe o

categorie, apoi, când apar șabloanele în acea categorie, faceți clic pe un șablon.Nota   De asemenea, aveți posibilitatea să căutați un șablon utilizând caseta de căutare

furnizata.3. În caseta Nume fișier, tastați un nume de fișier sau utilizați-l pe cel furnizat.4. Faceți clic pe Descărcare.Access descărca automat șablonul, creează o baza de date noua pe baza șablonului, o

stochează în folderul dvs. de documente (de exemplu, folderul Documentele mele), apoi deschide baza de date.Când deschideți (sau creați şi deschideți) o baza de date, Access adaugă numele de fișier şi locația bazei de date la o lista interna de documente utilizate recent. Lista se afișează în fila Recent a vizualizării Backstage, pentru fi posibila deschiderea bazelor de date utilizate recent.

1.2.3.4. Deschiderea unei baze de date utilizate recent1. Porniți Access.

6

Page 7: curs DPW.docx

2. În Vizualizarea Backstage, faceți clic pe Recent, apoi faceți clic pe baza de date pe care doriți să o deschideți.

Access deschide baza de date.1.2.3.5. Deschiderea unei baze de date din vizualizarea Backstage1. Porniți Access.2. Faceți clic pe fila Fișier/File, apoi pe Deschidere/Open. Când apare caseta de

dialog Deschidere, răsfoiți şi selectați un fișier, apoi faceți clic pe Deschidere.Se deschide baza de date.1.2.3.6. PanglicaPanglica este principalul înlocuitor pentru meniuri şi bare de instrumente şi furnizează

principala interfața de comanda din Access 2010. Unul din avantajele principale ale Panglicii este ca unifica într-olocație unica acele activităţi sau puncte de intrare care necesitau afișarea de meniuri, bare de instrumente, panouri de activităţi etc. În acest mod, trebuie să căutați intr-un singur loc pentru comenzi, nu în mai multe locuri.

Când deschideți o baza de date, Panglica apare în partea de sus a ferestrei principale Access, unde afișează comenzile în fila de comenzi activa.

Panglica conține o serie de file care conțin comenzi. În Access 2010, principalele file din Panglica sunt Fișier/File, Pornire/Home, Creare/Create, Date externe/External Data şi Instrumente baza de date/Database Tools. Fiecare fila conține grupuri de comenzi asociate, iar aceste grupuri scot la suprafața unele dintre elementele suplimentare noi, cum ar fi galeria, care este un nou tip de control care prezintă opțiunile în mod vizual.

Comenzile care sunt disponibile în panglica reflecta, de asemenea, obiectul activ în prezent. De exemplu, daca aveți un tabel deschis în vizualizarea Foaie de date şi faceți clic pe Formular/Form în fila Creare/Create din grupul Formulare, Access creează formularul pe baza tabelului activ. Mai exact, numele tabelului activ este introdus în proprietatea RecordSource a noului formular. În plus, unele file din panglica apar doar în anumite contexte. De exemplu, fila Proiectare/Design apare numai atunci când aveți un obiect deschis în vizualizarea Proiect.

Aveți posibilitatea să utilizați comenzile rapide de la tastatura pentru a utiliza Panglica. Toate comenzile rapide de la tastatura din versiunile anterioare de Access funcționează în continuare. Sistemul de acces la tastatura înlocuiește acceleratoarele de meniu din versiunile anterioare de Access. Acest sistem utilizează indicatori mici cu o singura litera sau o combinație de litere care apar în Panglica atunci când apăsați tasta ALT. Acești indicatori arata ce comanda rapida activează controlul de dedesubt.

Când ați selectat fila de comanda, aveți posibilitatea să navigați la comenzile disponibile din acea fila.

1.2.3.6.1. Selectarea unei file de comenzi1. Porniți Access.2. Faceți clic pe fila dorita.

- sau -1. Porniți Access.2. Apăsați şi eliberați tasta ALT.

Apar sfaturile de tastatura.3. Apăsați tasta sau tastele afișate în sfaturile de tastatura care sunt pe sau cel mai

aproape de comanda dorita.Aveți posibilitatea să executați o comanda în mai multe moduri. Cel mai rapid şi mai direct mod este de a utiliza comanda rapida de la tastatura asociata cu comanda respectiva. Daca știți comanda rapida de la tastatura utilizata din versiunile anterioare de Access, ea ar trebui să funcționeze şi în Access 2010.

1.2.3.6.2. Executarea unei comenzi1. Porniți Access.2. Faceți clic pe fila comenzii dorite. Următorul tabel afișează mostre de file şi comenzi

disponibile în fiecare dintre ele. Filele şi comenzile disponibile se modifica în funcție de activitatea pe care o efectuați.

Fila de comenzi Operațiuni obișnuite posibilePagina de pornire Se selectează alta vizualizare

7

Page 8: curs DPW.docx

Copiați şi lipiți din clipboard.Setați caracteristicile curente de font.Setați alinierea fontului curenta.Aplicați formatare de tip text îmbogăţit pentru un câmp de tip Memo.Lucrați cu înregistrări (Reîmprospătare, Nou, Salvare, Ștergere, Totaluri, Corectare ortografica, Mai multe).Sortați şi filtrați înregistrările.Găsiți înregistrări.

Creare

Creați un tabel nou, necompletat.Creați un tabel nou utilizând un șablon de tabel.Creați o lista pe un site SharePoint şi un tabel în baza de date curenta care face legătura o lista nou creata.Creați un tabel nou, necompletat în vizualizarea Proiect.Creați un formular nou, bazat pe tabelul activ sau interogarea activa.Creați un tabel PivotTable sau o diagrama PivotChart.Creați un raport nou pe baza tabelului activ sau a interogării active.Creați o interogare noua, o macrocomandă noua, un modul nou sau un modul de clasa nou.

Date externe

Importați date sau creați o legătura la date externe.Exportați date.Colectați şi actualizați date prin intermediul poștei electronice.Creați importuri salvate şi exporturi salvate.Executați Manager de tabele legate.

Instrumente baza de date

Mutați parțial sau integral o baza de date pe un site SharePoint nou sau existent.Lansați editorul Visual Basic sau executați o macrocomanda.Creați şi vizualizați relațiile intre tabele.Afișați/ascundeți dependentele obiectului.Executați Documentar baza de date sau analizați performanta.Mutați date pe un server Microsoft SQL sau într-obaza de date Access (numai tabele).Gestionați programele de completare Access.Creați sau editați un modul VBA (Visual Basic for Applications).

3. Faceți clic pe controlul care reprezintă comanda. Alternativ, daca știți comanda rapida de la tastatura pentru comanda dîntr-oversiune anterioara de Access, introduceți comanda rapida de la tastatura utilizând tastatura.

- sau -Apăsați şi eliberați tasta ALT.Apar tastele de acces.Apăsați tasta sau tastele afișate în sfatul de tastatura asociat cu comanda pe care o doriți.1.2.3.6.3. File contextuale de comenziÎn plus fata de filele standard de comenzi, Access 2010 are, de asemenea, file

contextuale de comenzi. În funcție de context (adică de obiectul cu care lucrați şi operațiunea pe care o efectuați), este posibil să apară una sau mai multe file contextuale de comenzi lângă filele standard de comenzi.

1.2.3.6.4. Activarea unei file contextuale de comenzi Faceți clic pe fila contextuala de comenzi.

8

Page 9: curs DPW.docx

- sau -1. Apăsați şi eliberați tasta ALT.

Apar tastele de acces.2. Apăsați tasta sau tastele afișate în tasta de acces care apare pe sau cel mai aproape

de fila contextuala de comenzi.Filele contextuale de comenzi conțin comenzi şi caracteristici care sunt necesare pentru

lucrul intr-un anumit context. De exemplu, când deschideți un tabel în vizualizarea Proiect, filele contextuale conțin comenzi care se aplica numai când lucrați cu un tabel în acea vizualizare. De asemenea, când deschideți un tabel în vizualizarea Proiectare, apare o fila contextuala de comenzi denumita Proiectare/Design lângă fila Instrumente complexe. Când faceți clic pe fila Proiectare, Panglica afișează comenzile disponibile numai atunci când obiectul este disponibil în vizualizarea Proiectare.

1.2.3.6.5. Galerii    Panglica mai utilizează şi un tip de control denumit galerie. Controlul galerie este

proiectat să atragă atenția asupra rezultatelor pe care doriți să le obțineți. Mai degrabă decât să afișeze numai comenzi, controlul galerie afișează rezultatul utilizării acelor comenzi. Ideea este de a furniza un mod vizual de a naviga şi vedea ce poate face Access 2010, cu accentul pus pe rezultate, nu pe comenzile în sine.

Galeriile sunt de diferite forme şi dimensiuni. Exista o structura de tip grila, o reprezentare verticala de tip meniu şi chiar un aspect de tip panglica, ce plasează conținutul galeriei în interiorul panglicii.

1.2.3.6.6. Ascundere PangliciiUneori, este nevoie să se aloce mai mult spațiu zonei de lucru. Din acest motiv, Panglica poate fi restransă, astfel încât să rămână numai bara cu filele de comanda. Pentru a ascunde Panglica, faceți dublu clic pe fila activa de comenzi. Pentru a o afișa din nou, faceți dublu clic din nou pe fila activa de comenzi.

1.2.3.6.7 Ascunderea şi restaurarea Panglicii1. Faceți dublu clic pe fila activa de comenzi (fila activa este cea evidenţiată).2. Faceți dublu clic din nou pe fila activa de comenzi pentru a restaura Panglica.1.2.3.6.8. Bara de instrumente Acces rapidBara de instrumente Acces rapid este o bara de instrumente adiacenta Panglicii, care

permite accesul la comenzi cu o singura apăsare pe butonul mouse-ului. Setul implicit de comenzi cuprind Salvare, Anulare şi Refacere şi aveți posibilitatea să particularizați bara de instrumente Acces rapid pentru a include comenzile pe care dvs. le utilizați cel mai des. De asemenea, aveți posibilitatea să modificați plasarea barei de instrumente şi să o modificați din dimensiunea mica implicita în dimensiune mare. Bara de instrumente mica apare lângă filele de comenzi din Panglica. Când comutați la dimensiune mare, bara de instrumente apare sub Panglica şi se extinde la lăţime completa.

1.2.3.7. Panoul de navigareCând deschideți o baza de date sau creați una noua, numele

obiectelor din baza dvs. de date apar în Panoul de navigare. Obiectele bazei de date includ tabelele, formularele, rapoartele, paginile, macrocomenzile şi modulele. Panoul de navigare înlocuiește fereastra Baza de date utilizata de versiunile anterioare de Access. Daca ați utilizat fereastra Baza de date pentru a efectua o activitate în versiunea anterioara, acum o veți efectua în Panoul de navigare. De exemplu, daca doriți să adăugați un rând la un tabel în vizualizarea Foaie de date, deschideți acel tabel din Panoul de navigare.

Nota   Panoul de navigare nu este disponibil intr-un browser Web. Pentru a utiliza Panoul de navigare cu o baza de date Web, trebuie să deschideți mai întâi baza de date utilizând Access.

Pentru a deschide un obiect de baza de date sau a aplica o comanda la un obiect de baza de date, faceți clic cu butonul din dreapta şi selectați un element de meniu din meniul contextual. Comenzile din meniul contextual variază în funcție de tipul obiectului.

1.2.3.8. Deschiderea obiectului de baza de date, cum ar fi un tabel, formular sau raport

În Panoul de navigare, faceți dublu clic pe obiect.- sau -

9

Page 10: curs DPW.docx

În Panoul de navigare, selectați obiectul, apoi apăsați ENTER.- sau -

1. În Panoul de navigare, faceți clic cu butonul din dreapta pe un obiect, apoi faceți clic pe Deschidere.

Reţineţi ca aveți posibilitatea să setați opțiuni pentru obiectele deschise cu o singura apăsare pe butonul mouse-ului în caseta de dialog Opțiuni de navigare.

Panoul de navigare divide obiectele bazei de date în categorii, iar aceste categorii conțin grupuri. Anumite categorii sunt predefinite pentru dvs. şi aveți posibilitatea să creați propriile grupuri particularizate.

În mod implicit, Panoul de navigare apare când deschideți o baza de date în Access, inclusiv bazele de date din versiunile anterioare de Access. Aveți posibilitatea să împiedicați apariția implicita a Panoului de navigare daca setați o opțiune de program. Următorul set de pași explica modul în care se efectuează fiecare acțiune.

Pentru a afișa sau a ascunde Panoul de navigare    

Faceți clic pe buton în coltul din dreapta sus al Panoului de navigare ( ) sau apăsați F11.

Împiedicarea apariției implicite a Panoului de navigare1. Faceți clic pe fila Fișier, apoi pe Opțiuni.

Se afișează caseta de dialog Opțiuni Access.2. În panoul din stânga, faceți clic pe Baza de date curenta.3. Sub Navigare, debifați caseta de selectare Afișare Panou navigare, apoi faceți clic

pe OK.Bara de stareCa şi în cazul versiunilor anterioare de Access, în Access 2010 aveți posibilitatea să

afișați o bara de stare în partea de jos a ferestrei. Acest element standard din IU este în continuare locul în care se afișează mesajele de stare, sfaturile cu privire la proprietăţi, indicatorii de program etc. În Access 2010, bara de stare are de asemenea doua funcții pe care le veți vedea în bara de stare din alte programe Office 2010: comutarea Vizualizare/Fereastra şi Panoramare.

Aveți posibilitatea să comutați rapid în fereastra activa intre una din vizualizările disponibile utilizând controalele disponibile în bara de stare. Daca vizualizați un obiect care accepta panoramare variabila, aveți posibilitatea să reglați nivelul de panoramare pentru a mari sau a micșora utilizând glisorul din bara de stare.Bara de stare poate fi activata sau dezactivata în caseta de dialog Opțiuni Access.

Afișarea sau ascunderea barei de stare1. Faceți clic pe fila Fișier, apoi pe Opțiuni.

Se afișează caseta de dialog Opțiuni Access.2. În panoul din stânga, faceți clic pe Baza de date curenta.3. Sub Opțiuni aplicație, bifați sau debifați caseta de selectare Afișare bara de

stare. Debifarea casetei de selectare dezactivează afișarea barei de stare.4. Faceți clic pe OK.Minibara de instrumenteÎn versiunile de Access anterioare

Access 2007, formatarea textului necesita deseori utilizarea unui meniu sau afișarea barei de instrumente Formatare. Utilizând Access 2010, aveți posibilitatea să formatați textul mai ușor, utilizând minibara de instrumente. Când selectați text pentru formatare, minibara de instrumente se afișează automat deasupra textului selectat. Daca mutați indicatorul mouse-ului în minibara de instrumente, aceasta apare şi poate fi aplicata pentru a se aplica text aldin, cursiv, pentru a se modifica dimensiunea fontului, culoarea textului, etc. Când mutați indicatorul din minibara de instrumente, aceasta se estompează. Daca nu doriți să utilizați minibara de instrumente pentru a aplica formatare textului pentru o selecție, mutați indicatorul câţiva pixeli într-oparte şi minibara de instrumente vă dispărea.

Formatarea textului utilizând minibara de instrumente1. Selectați textul pe care doriți sa-l formatați.

Minibara de instrumente apare transparenta deasupra textului.2. Aplicați formatări utilizând minibara de instrumente.Obținerea Ajutorului/Help

10

Page 11: curs DPW.docx

Când aveți o întrebare, aveți posibilitatea să obțineți ajutor daca apăsați F1 sau faceți clic pe pictograma care afișează un semn de întrebare, aflata în partea din dreapta a Panglicii.

Ajutorul mai poate fi găsit şi în Vizualizarea Backstage: Faceți clic pe fila Fișier/File, apoi faceți clic pe Ajutor/Help.

O lista de resurse de Ajutor apare în Vizualizarea Backstage.Adăugarea unui tabel

Aveți posibilitatea să adăugați un tabel nou la o baza de date existenta daca utilizați instrumentele din grupul Tabele din fila Creare.

Nota   Într-obaza de date Web, este disponibila numai comanda Tabel în grupul Tabele.

Indiferent de vizualizarea cu care începeți, aveți întotdeauna posibilitatea să comutați la cealaltă vizualizare utilizând butoanele de vizualizare din bara de stare din fereastra Access.

Crearea unui tabel necompletat în vizualizarea Foaie de date    În vizualizarea Foaie de date, aveți posibilitatea să introduceți date imediat şi să lăsați Access să genereze structura tabelului. Numele de câmpului se atribuie automat (Camp1, Camp2, etc.), iar Access setează tipul de date pentru câmp pe baza tipului de date pe care îl introduceți.

1. În fila Creare/Create, în grupul Tabele, faceți clic pe Tabel. 2. Access creează tabelul, apoi plasează cursorul în prima celula goala din

coloana Faceți clic pentru adăugare.3. Pentru a adaugă date, începeți să tastați în prima celula necompletata sau

lipiți date dîntr-o altă sursă, după cum este descris mai jos în acest articol. Pentru a redenumi o coloana (un câmp), faceți dublu clic pe titlul

coloanei, apoi tastați numele nou. Sfat   Dați un nume semnificativ fiecărui câmp, astfel încât să vă dați seama ce conține,

fără a trebui să vă uitați la date. Pentru a muta o coloana, selectați-o făcând clic pe titlul ei, apoi glisați-o acolo unde

doriți. De asemenea, aveți posibilitatea să selectați mai multe coloane alăturate şi să le glisați pe toate într-olocație noua.

Pentru a adaugă mai multe câmpuri la tabel, fie începeți să tastați în coloana Faceți clic pentru adăugare din vizualizarea Foaie de date, fie adăugați câmpuri noi, utilizând comenzile din grupul Adăugare şi ștergere, de pe fila Câmpuri.

Crearea unui tabel, începând din vizualizarea Proiectare/Design    În vizualizarea Proiectare, creați mai întâi structura tabelului nou. Apoi, comutați la vizualizarea Foaie de date pentru a introduce date sau introduceți datele utilizând alta metoda, cum ar cu un formular.

Nota   Vizualizarea Proiectare nu este disponibila pentru tabele, într-obaza de date Web.1. Pe fila Creare/Create, din grupul Tabele, faceți clic pe Proiectare tabel/Table

Design. 2. Pentru fiecare câmp din tabel, tastați un nume în coloana Nume câmp, apoi selectați

un tip de date din lista Tip de date.3. Aveți posibilitatea să introduceți informații suplimentare pentru fiecare câmp din

coloana Descriere. Descrierea pe care o introduceți este afişată în bara de stare, când punctul de inserare se afla în acel câmp şi este utilizata ca text în bara de stare pentru toate controalele pe care le creați, glisând câmpul din panoul Lista de câmpuri intr-un formular sau un raport şi pentru toate controalele care sunt create pentru câmpul respectiv, de Expertul Formular sau Expertul Raport.

4. După ce ați adăugat toate câmpurile, salvați tabelul: Pe fila Fișier, faceți clic pe Salvare.

Specificații pentru baze de dateUrmătoarea lista de tabele se aplica la bazele de date Microsoft Access 2010 şi

Access 2007:GeneralAtribut MaximDimensiunea fișierului baza de date Access (.accdb)

2 gigaocteţi, minus spațiul necesar pentru obiectele de sistem Nota   NOTA: Deși dimensiunea maxima pentru un singur fișier de baza de date

11

Page 12: curs DPW.docx

este 2 GO, aveți posibilitatea să rezolvați aceasta limitare, utilizând o baza de date scindata. Un fișier de baze de date front-end poate indica spre mii de fișiere de baze de date back-end, care pot avea fiecare pana la 2 GO.

Numărul de obiecte dîntr-obaza de date 32768Numărul de module (incluzând formulare şi rapoarte care au proprietatea HasModule setata la True )

1000

Numărul de caractere din numele unui obiect 64Numărul de caractere dîntr-oparola 20Numărul de caractere dintr-un nume de utilizator sau nume de grup

20

Numărul de utilizatori simultani 255

TabelAtribut MaximNumărul de caractere dintr-un nume de tabel 64Numărul de caractere dintr-un nume de câmp 64Număr de câmpuri dintr-un tabel 255

Numărul de tabele deschise2048; numărul efectiv poate fi mai mic din cauza tabelelor deschise intern de Access

Dimensiune tabel2 gigaocteţi, minus spațiul necesar pentru obiectele de sistem

Numărul de caractere dintr-un câmp text 255

Numărul de caractere dintr-un câmp Memo

65535 când se introduc date prin intermediul interfeței utilizator;2 gigaocteţi de stocare de caractere când se introduc date programatic

Dimensiunea unui câmp OLE Object 1 gigaoctetNumărul de indexări dintr-un tabel 32Numărul de câmpuri dintr-un index 10Numărul de caractere dintr-un mesaj de validare 2556 2048Numărul de caractere dîntr-odescriere de tabel sau câmp 255Numărul de caractere dîntr-oînregistrare (excluzând câmpurile de tip Memo şi OLE Object) când proprietatea UnicodeCompression a câmpurilor este setata la Yes

4000

Numărul de caractere din setarea proprietăţii unui câmp 255

InterogareAtribut Maxim

Numărul de relații impuse

32 per tabel, minus numărul de indexări care se afla în tabel pentru câmpurile sau combinațiile de câmpuri ca nu sunt implicate în relații*

Numărul de tabele dîntr-ointerogare 16*Numărul de asocieri dîntr-ointerogare 16*Numărul de câmpuri dintr-un set de înregistrări

255

Dimensiunea setului de înregistrări 1 gigaoctet

12

Page 13: curs DPW.docx

Limita de sortare 255 de caractere în unul sau mai multe câmpuri

Numărul de niveluri a interogărilor imbricate 50*Numărul de caractere dîntr-ocelula în grila de proiectare a interogării

1024

Numărul de caractere pentru un parametru într-ointerogare cu parametri

255

Numărul de operatori AND într-oclauza WHERE sau HAVING

99*

Numărul de caractere într-oinstrucțiune SQL Aproximativ 64.000**Este posibil ca valorile maxime să fie mai mici în cazul în care interogarea include câmpuri multivalorice de căutareFormulare şi rapoarteAtribut MaximNumărul de caractere dîntr-oeticheta 2048Numărul de caractere dîntr-ocaseta text 65535Lăţimea formularului sau raportului 55,8 cmÎnălţimea unei secțiuni 55,8 cmÎnălţimea tuturor secțiunilor plus secțiunea antet (vizualizarea Proiectare)

508 cm

Numărul de niveluri de formulare sau rapoarte imbricate 7Numărul de câmpuri sau expresii după care se poate grupa sau sorta intr-un raport

10

Numărul de anteturi sau subsoluri dintr-un raport

1 antet/subsol per raport;1 antet/subsol per pagina;10 anteturi/subsoluri per grup

Numărul de pagini imprimate intr-un raport 65536Numărul de controale şi secțiuni care se pot adaugă intr-un formular sau raport de-a lungul timpului

754

Numărul de caractere dîntr-oinstrucțiune SQL care sunt proprietatea Recordsource sau Rowsource unui formular, raport sau control (atât pentru .accdb, cat şi .adp)

32750

MacrocomenziAtribut MaximNumărul de acțiuni dîntr-omacrocomanda 999Numărul de caractere dîntr-ocondiție 255Numărul de caractere dintr-un comentariu 255Numărul de caractere dintr-un argument de acțiune

255

Specificații de proiectUrmătoarea lista de tabele se aplica la proiectele Access 2010 şi Access 2007:GeneralAtribut MaximNumăr de obiecte intr-un proiect Access (.adp) 32768Numărul de module (incluzând formulare şi rapoarte care au proprietatea HasModule setata la True )

1000

Numărul de caractere din numele unui obiect 64

Numărul de coloane dintr-un tabel

250 (Microsoft SQL Server 6.5) 1024 (Microsoft SQL Server 7.0, 2000 şi 2005)

13

Page 14: curs DPW.docx

Baza de date Microsoft SQL ServerSpecificațiile de capacitate maxima a Microsoft SQL Server sunt descrise în documentația SQL Server.

Formulare şi rapoarteAtribut MaximNumărul de caractere dîntr-oeticheta 2048Numărul de caractere dîntr-ocaseta text 65535Lăţimea formularului sau raportului 55,8 cmÎnălţimea unei secțiuni 55,8 cmÎnălţimea tuturor secțiunilor plus secțiunea antet (vizualizarea Proiectare)

508 cm

Numărul de niveluri de formulare sau rapoarte imbricate

7

Numărul de câmpuri sau expresii după care se poate grupa sau sorta intr-un raport

10

Numărul de anteturi sau subsoluri dintr-un raport1 antet/subsol per raport;1 antet/subsol per pagina;10 anteturi/subsoluri per grup

Numărul de pagini imprimate intr-un raport 65536Numărul de controale şi secțiuni care se pot adaugă intr-un formular sau raport de-a lungul timpului

754

Numărul de caractere dîntr-oinstrucțiune SQL care sunt proprietatea Recordsource sau Rowsource unui formular, raport sau control (atât pentru .accdb, cat şi .adp)

32750

MacrocomenziAtribut MaximNumărul de acțiuni dîntr-omacrocomanda 999Numărul de caractere dîntr-ocondiție 255Numărul de caractere dintr-un comentariu 255Numărul de caractere dintr-un argument de acțiune

255

2. Fundamentele bazelor de date relaționale În sens larg, o baza de date este o colecție de date organizata (structurata). O baza

de date are, în principal, următoarele roluri: stocare (memorare) şi organizarea datelor (structurare).

Ca şi utilitate, bazele de date ne permit (1) memorarea unor cantităţi mari de date, (2) regăsirea datelor pe baza unor criterii ce căutare (ce sunt legate în mod direct de structurarea datelor), dar şi (3) prelucrarea unor volume mari de date (filtrare, ordonare, agregare).

Bazele de date relaționale sunt un tip de baze de date în care datele, văzute ca şi atribute ale entităților reale, sunt socate în tabele şi sunt legate intre ele prin relații.

Acest mod de structurare a datelor, bazat pe legături intre date, permite eliminarea redundantei, astfel încât stocarea si, mai ales, modificarea unei informații se face intr-un singur loc, iar, din punct de vedere funcțional, aceasta structura permite regăsirea, filtrarea, ordonarea şi agregarea datelor, în mod natural.

Un model relațional de baze de date cuprinde trei componente principale: structura datelor prin definirea unor domenii şi a relațiilor “n” (atribute, tupluri, chei

primare); integrarea datelor prin impunerea unor restricții; prelucrarea datelor prin operații din algebra relaţională sau calcul relațional.

Modelul relațional se bazează pe noțiunea matematica de relație (din teoria mulțimilor) definita ca o submulțime a produsului cartezian a unei liste finite de mulțimi

14

Page 15: curs DPW.docx

numite domenii. Elementele unei relații se numesc tupluri (sau n-cupluri), iar numărul de domenii din produsul cartezian se numește arietatea relației .

 De obicei relațiile sunt reprezentate sub forma unor tabele în care fiecare rând reprezintă un tuplu şi fiecare coloana reprezintă valorile tuplurilor dintr-un domeniu dat al produsului cartezian.

În reprezentarea sub forma de tabel a unei relații, coloanelor şi domeniilor corespunzătoare lor, li se asociază nume intitulate atribute. Mulțimea numelor atributelor unei relații se numește schema relaţională.

 Deci prin relație se înțelege o mulțime de funcții definite pe o mulțime de atribute cu valori în reuniunea unor domenii, cu restricția ca valoarea corespunzătoare fiecărui atribut să se afle în domeniul asociat acelui atribut.

Se numește cheie candidat al unei relații R coloana sau mulțimea de coloane din R pentru care valorile corespunzătoare din oricare doua tupluri nu coincid, deci identifica tuplurile prin relația respectiva şi nu conțin strict o submulțime de coloane cu aceasta proprietate. Pentru fiecare relație se alege un candidat de cheie care se numește cheie primara a relației. Tuplurile unei relații nu pot să conţină valoarea nula în coloane ce aparțin cheii primare. Eventualii candidați de chei diferiți de cheia primara se numesc chei alternante. Se numește cheie străină o coloana sau o mulțime de coloane a unei relații R1

ale cărei valori, daca nu sunt nule, coincid cu valori ale unei chei primare dîntr-orelație R, nu neapărat distincta de R1.

Mulțimea tuturor schemelor relaționale corespunzătoare unei aplicații se numește schema bazei de date relaționale, iar conținutul curent al relațiilor, la un moment dat, se numește baza de date relaţională.

În modelul relațional, entitățile sunt reprezentate sub forma de relații în care schema relaţională conține toate atributele entității şi fiecare tuplu al relației corespunde unui element al entității.

2.1.Proiectarea unei baze de dateConcret, pașii care trebuie făcuți la proiectarea unei baze de date relaționale sunt

următorii:•      Analiza aplicației: analiza circuitului informațional, studierea intrărilor şi

ieșirilor, stabilirea claselor de utilizatori;•      Analiza semanticii atributelor din entităţi: identificarea atributelor şi

a sensului lor funcțional, gruparea atributelor în relații pe entităţi, stabilirea cheilor primare şi externe;

•      Normalizarea relațiilor obținute la punctul anterior: micșorarea redundantei prin gruparea atributelor în relații conform definițiilor pentru formele normale, stabilirea de constrângeri pentru eliminarea anomaliilor de actualizare;

•      Scoaterea din relațiile principale a atributelor care au peste 70% valori nule.

Observație: Daca se optează pe o metoda de tip rapid prototyping acești pași vor fi repetați în mod iterativ pe parcursul procesului de dezvoltare.

În general, pentru proiectarea unei baze de date relaționale se creează mai întâi schema conceptuala a acesteia (folosind de obicei modelul entitate-legătura), care este transformata apoi intr-un design logic, folosind metodologia descrisa anterior. O alta metoda poate fi folosita, în locul acestei tehnici de modelare conceptuala, pentru proiectarea unei baze de date relaționale.

Aceasta este numita tehnica normalizării, ce consta în adunarea informațiilor intr-un tabel relațional şi din din descompunerea acestui tabel relațional în mai multe tabele care satisfac anumite reguli şi care stochează aceleași date ca şi tabelul inițial.

În prezent, normalizarea se folosește pentru a rafina design-ul logic al bazei de date rezultat în urma transformării schemei conceptuale, eliminând unele probleme care pot apărea în urma procesului de proiectare inițial. Evident, daca schema conceptuala este corecta şi daca transformarea acesteia în tabele relaționale este corecta, procesul de normalizare nu mai este necesar.

Exista mai multe metode de proiectare a BD relaționale, dar nici-una nu s-a impus cu desăvârşire pana în prezent. Fiecare dintre ele însă se bazează pe considerații practice referitoare la sistemele modelate, considerații care stau la baza activităților de procesare a datelor şi anume: protocoale de funcționare a sistemului, modul cum sunt folosite datele, modul de gestionare a acestora etc.

Proiectarea BD cuprinde 3 etape principale: Realizarea schemei conceptuale a BD

15

Page 16: curs DPW.docx

Realizarea proiectului logic al BD (schemei logice a BD) Realizarea proiectului fizic al BD (schemei fizice a BD)În prima faza, o echipa nominalizata colectează (achiziționează) datele corespunzătoare

din sistem, apoi urmează faza de organizare a acestora utilizându-se modelul entitate-legătura. Principalele concepte folosite în acest model sunt: entitatea, relația (legătura) şi atributul.

Entitatea este un obiect de interes din sistem pentru care trebuie să existe date înregistrate.Observații:

- Fiecare entitate are o denumire unica în cadrul unui sistem. - Entitățile sunt reprezentate prin substantive, dar nu orice substantiv folosit în

descrierea sistemului este entitate, ci numai acelea care au o semnificație deosebita.

- Fiecare entitate trebuie să fie bine definita şi precizata pentru a se evita confuziile.Relația (legătura) este o asociere (raport) nedirecţionată intre 2 entităţi. În exemplul

de mai sus relațiile sunt:- "lucrează_in" - intre entitățile FACULTATE şi PROFESOR,- "studiază_in" intre FACULTATE şi STUDENT,- "preda" intre PROFESOR şi CURS,- "urmează" intre STUDENT şi CURS.

Observații:- Relațiile sunt reprezentate prin verbe, dar nu orice verb utilizat în descrierea sistemului este relație.- Intre 2 entităţi pot exista mai multe relații. Ex.: "lucrează_in" şi "conduce" - intre entitățile FACULTATE şi PROFESOR.- Pot exista în cadrul unei scheme conceptuale mai multe relații cu același nume, dar

cele care leagă aceleași entităţi trebuie să aibă nume diferite.Cardinalitatea unei relații indica numărul de instanțe din fiecare entitate care

poate participa la relație. Exista 3 tipuri de cardinalitate:- "multi-la-unu" (many-to-one, n:1).Relația dintre entitățile A şi B este de tipul "multi-la-unu" daca fiecărei instanțe din A

i se poate asocia cel mult o singura instanța din B şi fiecărei instanțe din B i se pot asocia mai multe instanțe din A.

- "unu-la-unu" (one-to-one, 1:1).Relația dintre entitățile A şi B este de tipul "unu-la-unu" daca fiecărei instanțe din A i

se poate asocia cel mult o singura instanța din B şi fiecărei instanțe din B i se poate asocia cel mult o singura instanța din A.

- "multi-la-multi" (many-to-many, n:n).Relația dintre entitățile A şi B este de tipul "multi-la-unu" daca fiecărei instanțe din A

i se pot asocia mai multe instanțe din B şi fiecărei instanțe din B i se pot asocia mai multe instanțe din A. Valorile prezentate pana acum (n:1, 1:1, n:n) reprezintă cardinalitatea maxima a unei relații. Pe de alta parte, o relație este caracterizata şi de o cardinalitate minima ce indica obligativitatea participării entităților la relație. Cardinalitatea minima a unei relații poate avea valorile: 0:0, 0:1, 1:1. Daca avem cardinalitatea minima a unei relații egala cu 1 înseamnă ca exista o participare totala a entității la relație (participare obligatorie). Daca avem cardinalitatea minima egala cu 0 înseamnă ca exista o participare parțiala a entității la relație. În cadrul reprezentării grafice cardinalitatea maxima a unei relații se vă afișa fără paranteze, în timp ce cardinalitatea minima, se vă scrie intre paranteze. Uneori cardinalitatea minima nu este reprezentata în diagrama, dar cea maxima este obligatorie.

Atributul este o caracteristică a unei entităţi sau a unei relații. Fiecare entitate are un anumit număr de atribute despre care sunt înregistrate date. Ex.: nume, prenume, data. Fiecare atribut poate lua valori care furnizează informații despre entitatea respectiva. Ex.: Ionescu, Aurel, 13.10.84. şi relațiile pot avea atribute. Ex.: “lucrează_in” --> data_angajarii.

Observații: Numele unui atribut este unic în cadrul unei entităţi sau al unei relații. Atributele sunt întotdeauna substantive, dar nu orice substantiv este atribut. Pentru fiecare atribut este necesara o descriere, împreună cu domeniul de valori

(întreg, sir de caractere, data calendaristica etc.). Trebuie evitate atributele indirecte. Ex.: numele_facultatii este un atribut indirect

pentru tabelul STUDENT şi un atribut direct pentru tabelul FACULTATE.

16

Page 17: curs DPW.docx

Cheia unei entităţi este un atribut sau set de atribute care identifica în mod unic o instanța a acelei entităţi (face distincție intre oricare 2 rânduri diferite ale tabelului asociat entității). Cheile sunt de 2 feluri: naturale (au semnificație reala pentru entitate, ex.: (nume, prenume, data_nasterii)) şi artificiale (nu au semnificație reala pentru entitate, ex.: cod_student, cod_facultate).

Avantajele cheilor artificiale primare:- stabilitatea – Cheile primare artificiale se schimba rar. Schimbarea unei chei

primare presupune schimbarea cheilor străine care fac referire la ea.- simplitatea – Au un număr de atribute şi de caractere mai mic.- Nu prezintă ambiguităţi în reprezentare (ex.: liniuțe, spatii etc.).- Elimina apariția valorilor Null.- Unui atribut simplu ii corespunde o singura valoare atomica. Ex.:

nume_facultate.- Un atribut compus este format din mai multe atribute simple numite

componentele sale. Ex.: adresa (oraș, strada, număr).- Un atribut repetitiv (multivaloare) poate avea mai multe valori, numărul lor

variind de la o instanța la alta. Ex.: nr_telefon (051-435455, 095-770324).- Un atribut calculat (dedus) are valoarea cunoscuta indirect, pe baza calculului

cu ajutorul valorilor altor atribute. Ex.: salariul_net = 0,75*salariul_brut. Observație: Atributele deduse reprezintă o redundanta a datelor.

Pentru realizarea schemei logice a unei baze de date se pornește de la scheme conceptuala (modelul entitate – legătura) urmărindu-se conversia entităților şi a legăturilor în tabele relaționale.

Regula generală: entitățile se transformă în tabele.Subcazuri:

a) Entitățile independente devin tabele independente, adică tabele a căror cheie primara nu conține chei străine.

Ex.: Entitatea “STUDENT” devine tabelul “STUDENT” cu cheia primara cod_student.b) Entitățile dependente devin tabele dependente (tabele detaliu) adică tabele a căror

cheie primara conține cheia străină ce face referința la cheia primara a entității de care depinde entitatea în cauza.

Ex.: Entitatea “MODUL” devine tabelul “MODUL” a cărui cheie primara este formata din cod_curs (care este o cheie străină pentru entitatea “CURS”) şi nr_modul.

c) Subentităţile devin subtabele, adică tabele a căror cheie primara este cheia străină pentru tabelul superentitate.

Ex.: Subentitatea “PROFESOR” vă avea cheia primara cod_personal, aceeași cu cea a superentităţii “PERSONAL”.

- Avantajele supertabelelor: simplificarea programelor de manipulare a datelor.- Dezavantajele supertabelelor: probleme de integritate, apar valori de Null.- Avantajele subtabelelor: mai stabile, mai flexibile, ocupa spațiu mai mic, conțin mai

puține valori de Null.- Dezavantajele subtabelelor: se îngreunează manipularea datelor.2.2. Transformarea atributelorRegula generală: Atributele se convertesc în coloane ale tabelelor provenite din

entităţi sau chiar în tabele.Cazuri:a) Atributele simple ale unei entităţi devin coloane în tabelul provenit din acea entitate. b) Toate componentele unui atribut compus devin coloane.

Ex.: adresa --> tara, oraș, str,. nr., bl., sc., et., ap.c) Atributele repetitive (multivaloare) ale unei entităţi devin tabele dependente ce

conțin fiecare o cheie străină (care face referința la cheia primara a entității) şi atributul multivaloare. Cheia primara a unui astfel de nou

d) Atributele simple ale unei relații 1:1 sau M:1 devin coloane ale tabelului care conține cheia străină.

Ex.: atributul data_inscrierii al relației studiază_la devine coloana în tabelul STUDENT.

3. Tabele 3.1. Adăugarea unui tabel

Aveți posibilitatea să adăugați tabele noi la o baza de date existenta utilizând comenzile din grupul Tabele din fila Creare.

17

Page 18: curs DPW.docx

3.2. Crearea unui tabel, pornind din vizualizarea Foaie de date   În modul de vizualizarea Foaie de date, aveți posibilitatea să introduceți date imediat şi

să permiteți Acces să genereze o structura de tabel în spatele informațiilor introduse. Numele de câmpuri se atribuie numeric (Camp1, camp2, etc.), iar Access setează automat tipul de date pentru fiecare câmp, în funcție de datele introduse.

1. În fila Creare/Create, în grupul Tabele, faceți clic pe Tabel. Access creează tabelul şi selectează prima celula goala din coloana Faceți clic pentru adăugare.

2. Pe fila Câmpuri, în grupul Adăugare şi ștergere, faceți clic pe tipul de câmp pe care doriți să îl adăugați. Daca nu vedeți tipul de câmp dorit, faceți clic pe Mai multe

câmpuri .Access afișează o lista de tipuri de fișiere utilizate în mod obișnuit. Faceți clic pe tipul de

câmp dorit, iar Access adaugă câmpul nou la foaia de date, în punctul de inserare.Este posibil să mutați câmpul, glisându-l. Când glisați un câmp într-ofoaie de date, apare

o bara de inserare verticala în locul unde vă fi plasat câmpul.3. Pentru a adaugă date, începeți să tastați în prima celula goala sau lipiți date dîntr-

oalta sursa.4. Pentru a redenumi o coloana (câmp), faceți dublu clic pe titlul coloanei, apoi tastați

numele nou.Ar trebui să atribuiți nume semnificative pentru fiecare câmp, astfel încât să știți ce

conțin câmpurile când le vedeți în panoul Lista de câmpuri.5. Pentru a muta o coloana, faceți clic pe titlul ei pentru a o selecta, apoi glisați-o în

locația dorita.Aveți posibilitatea să selectați mai multe coloane alăturate şi să le glisați împreună intr-

un alt loc. Pentru a selecta mai multe coloane alăturate, faceți clic pe antetul primei coloane, apoi ţineţi apăsată tasta SHIFT şi faceți clic pe antetul ultimei coloane.

3.2.1. Crearea unui tabel, începând din vizualizarea Proiectare    În vizualizarea Proiectare, creați mai întâi structura tabelului. Apoi, comutați la vizualizarea Foaie de date pentru a introduce datele sau introduceți-le utilizând alta metoda, cum ar fi lipirea sau importul.

1. În fila Creare/Create, în grupul Tabele, faceți clic pe Proiectare tabel/Tabel

Design. 2. Pentru fiecare câmp din tabel, tastați un nume în coloana Nume câmp/Field Name,

apoi selectați un tip de date din lista Tip de date/Data Type.3. Aveți posibilitatea să tastați o descriere pentru fiecare câmp în coloana

Descriere/Description. Descrierea este atunci afişată în bara de stare, atunci când cursorul se afla în acel câmp în vizualizarea Proiectare/Design. Descrierea este utilizata de asemenea ca text în bara de stare pentru orice controale intr-un formular sau raport pe care îl creați prin glisarea câmpului din panoul Lista de câmpuri, şi pentru orice controale create pentru acel câmp când utilizați expertul Formular sau expertul Raport.

4. După ce adăugați toate câmpurile, salvați tabelul: Pe fila Fișier/File, faceți clic pe Salvare/Save.

5. Se poate începe introducerea de date în tabel oricând, daca se comuta la vizualizarea Foaie de date şi se face clic pe prima celula necompletata.

3.2.2. Setarea proprietăţilor pentru câmpuri în vizualizarea Proiectare/Design   

Indiferent de modul în care este creat un tabel, se recomandă să se verifice şi să se seteze proprietățile câmpurilor. Chiar daca unele proprietăţi sunt disponibile în vizualizarea Foaie de date, unele proprietăţi se poate seta numai în vizualizarea Proiectare. Pentru a comuta la vizualizarea Proiectare, faceți clic cu butonul din dreapta pe tabel în Panoul de navigare, apoi faceți clic pe Vizualizare proiect. Pentru a vedea proprietățile unui câmp, faceți clic pe câmp în grila de proiectare. Proprietățile sunt afișate sub grila de proiectare, în Proprietăţi câmp.

Pentru a vedea o descriere a fiecărei proprietăţi de câmp, faceți clic pe proprietate şi citiți descrierea din caseta de lângă lista de proprietăţi, sub Proprietăţi câmp. Veți obține informații detaliate daca apăsați butonul Ajutor.

Când proiectați baza dvs. de date, trebuie să selectați setarea de tip de date potrivita pentru fiecare câmp, daca tipul de date este altul decât text. Următorul tabel are informații

18

Page 19: curs DPW.docx

despre tipurile de date Access şi ce efect are fiecare setare de tip de date asupra introducerii de date.

Tipul de date

Efect asupra intrărilor de date

Câmp Text

Câmpurile de tip Text accepta caractere text sau numerice, inclusiv liste de elemente delimitate. Un câmp text accepta un număr mai mic de caractere decât un câmp Memo - de la 0 la 255 de caractere. Uneori, se pot utiliza funcții de conversie pentru a efectua calcule pentru datele dintr-un câmp Text.

Câmp Memo

Aveți posibilitatea să introduceți cantităţi mari de text şi date numerice în acest tip de câmp. De asemenea, daca proiectantul bazei de date setează câmpul pentru a accepta formatarea de text îmbogăţit, aveți posibilitatea să aplicați tipurile de formatare care se găsesc în mod normal în programe de procesare de text, cum ar fi Word. De exemplu, se pot aplica stiluri de font şi mărimi de font diferite la anumite caractere din text şi să aplicați stilul aldin sau italic etc. De asemenea, aveți posibilitatea să adăugați etichete Hypertext Markup Language (HTML). În plus, câmpurile Memo au o proprietate noua denumita Numai adăugare. Când se activează aceasta proprietate, Access urmărește versiunile anterioare ale datelor, în câmp. Aveți posibilitatea să revizuiți istoricul câmpului, daca faceți clic cu butonul din dreapta şi selectați Afișare istoric coloana din meniul contextual. Caracteristica are ca scop utilizarea în aplicații cum ar fi baze de date de urmărire a problemelor, unde este posibil să fie necesara menținerea unei înregistrări permanente. Când plasați cursorul intr-un câmp Memo care are proprietatea Numai adăugare activata, în mod implicit textul din acel câmp vă dispărea. Nu se poate aplica nici o formatare sau modificare la textul respectiv.

Număr Se pot introduce numai numere în acest tip de câmp şi se pot efectua calculări cu valorile dintr-un câmp Număr.

Data/Ora

Aveți posibilitatea să introduceți numai date şi ore în acest tip de câmp. În funcție de modul în care proiectantul bazei de date setează câmpul, este posibil să întâmpinaţi următoarele condiții:

Daca proiectantul unei baze de date a setat o masca de intrare pentru câmp (o serie de literali şi substituenţi care apar la selectarea câmpului), trebuie să introduceți datele în spatiile şi în formatul furnizate de masca. De exemplu, daca vedeți o masca ZZ_LLL_AAAA, trebuie să tastați 11 oct 2009 în spatiile furnizate. Nu se poate introduce numele întreg al unei luni sau o valoare pentru an care să conţină numai doua cifre.

Daca proiectantul nu a creat o masca de intrare pentru a controla modul de introducere al date sau orei, aveți posibilitatea să introduceți valoarea utilizând orice format de data şi de ora care este valid. De exemplu, se poate tasta 11 Oct. 2009, 10/11/09, Octombrie 11, 2009 etc.

Este posibil ca proiectantul bazei de date să aplice câmpului un format de afișare. În acest caz, daca nu se întâlneşte nici o masca de intrare, aveți posibilitatea să introduceți o valoare în aproape orice format, dar Access afișează datele în concordanta cu formatul de afișare. De exemplu, se poate introduce 10/11/2009, dar formatul de afișare poate fi setat să afișeze valoarea ca 11-Oct-2009.

Simbol monetar

Aveți posibilitatea să introduceți numai valori monetare în acest tip de câmp. De asemenea, nu este necesar să introduceți manual un simbol monetar. În mod implicit, Access aplica simbolul monetar ( ¥, £, $ etc.) specificat în setările regionale Windows.

Numerotare automata

Nu se pot introduce sau modifica datele din acest câmp în orice moment. Access mărește valorile dintr-un câmp Numerotare automata ori de cate ori adăugați o înregistrare noua intr-un tabel.

Da/Nu Când faceți clic pe un câmp care este setat la acest tip de date, Access afișează fie o caseta de selectare, fie o lista verticala, în funcție de modul de

19

Page 20: curs DPW.docx

formatare al câmpului. Daca formatați câmpul pentru a afișa o lista, aveți posibilitatea să selectați din lista fie Da fie Nu, fie Adevarat fie Fals, fie Activat fie Dezactivat, din nou în funcție de formatul aplicat câmpului. Nu se pot introduce valori în lista sau modifica valorile din lista direct dintr-un formular sau dintr-un tabel.

Obiect OLE

Se utilizează acest tip câmp la afișarea unui formular de date dintr-un câmp creat intr-un alt program. De exemplu, aveți posibilitatea să afișați un fișier text, o diagrama Excel sau un pachet de diapozitive intr-un câmp obiect OLE. Nota   Atașările furnizează un mod mai rapid, mai ușor şi mai flexibil de a vizualiza datele din alte programe. Pentru mai multe informații, consultați intrarea Atașări, mai jos în acest tabel.

Hyperlink

Aveți posibilitatea să introduceți date în acest tip de câmp şi Access adaugă http:// la textul dvs. Daca introduceți o adresa Web valida, linkul vă funcționa. În caz contrar, linkul vă avea ca rezultat un mesaj de eroare. De asemenea, editarea hyperlinkurilor existente poate fi dificila, deoarece daca faceți clic cu mouse-ul pe câmpul hyperlink se pornește browser-ul şi vă conduce în site-ul specificat în link. Pentru a edita un câmp hyperlink, selectați câmpul adiacent, utilizați tasta TAB sau tastele săgeți pentru a muta focalizarea în câmpul hyperlink, apoi apăsați F2 pentru a activa editarea sau faceți clic cu butonul din dreapta pe câmp, indicați spre Hyperlink, apoi faceți clic pe Editare hyperlink.

AtașareAveți posibilitatea să atașați date din alte programe la acest tip de câmp, dar nu aveți posibilitatea să tastați sau să introduceți în alt mod text sau date numerice.

Expert căutare

Expertul Căutare nu este un tip de date. În schimb, utilizați expertul pentru a crea doua tipuri de liste verticale: liste de valori şi câmpuri de căutare. O lista de valori utilizează o lista delimitata de elemente pe care le introduceți manual când utilizați expertul Căutare. Acele valori pot fi independente de orice date sau obiecte din baza de date.

Următorul tabel conține o descriere a unor proprietăţi de câmp care se reglează în mod obișnuit.Proprietate Descriere

Dimensiune câmp

Pentru câmpurile Text, aceasta proprietate setează numărul maxim de caractere care pot stocate în câmp. Numărul maxim este 255. Pentru câmpurile Număr, aceasta proprietate setează tipul de număr care vă fi stocat (Întreg lung, Dublu, şi așa mai departe). Pentru o stocare eficienta a datelor, se recomanda să alocați spațiul minim necesar pentru datele respective. Aceasta valoare poate fi mărită mai târziu, în caz ca este nevoie.

Format

Aceasta proprietate setează modul în care se afișează datele. Nu afectează datele în sine după cum sunt stocate în câmp. Aveți posibilitatea să selectați un format predefinit sau să introduceți un format particularizat.

Masca intrare

Utilizați aceasta proprietate pentru a specifica un model pentru toate datele care vor fi introduse în acest câmp. Astfel, datele se vor introduce corect şi vor conține numărul corect de caractere. Pentru ajutor despre generarea

unei măşti de intrare, faceți clic pe în partea dreapta a casetei de proprietăţi.

Valoare implicita

Utilizați aceasta proprietate pentru a specifica valoarea implicita care vă apărea în fiecare câmp de fiecare data când se adaugă o înregistrare noua. De exemplu, daca aveți un câmp Data/ora în care doriți să înregistrați întotdeauna data la care s-a adăugat înregistrarea, aveți posibilitatea să introduceți "Data()" (fără ghilimele) ca valoare implicita.

NecesarAceasta proprietate stabilește daca se solicita o valoare pentru acest câmp. Daca setați aceasta proprietate la Da, Access nu vă permite adăugarea unei înregistrări decât daca se introduce o valoare pentru acest câmp.

3.3. Introducerea datelor intr-un tabel20

Page 21: curs DPW.docx

Chiar daca un formular este cel mai bun obiect de utilizat pentru introducerea datelor, mai ales daca aveți mai mulți utilizatori pentru baza de date Access, aveți posibilitatea să introduceți şi să editați datele direct intr-un tabel.

Tipul de date care poate fi introdus de un utilizator în tabel poate fi influențat de următoarele aspecte:

Un câmp dintr-un tabel este setat, în mod implicit, să accepte un anumit tip de date de câmp (tipul de date al câmpului: Caracteristica a unui câmp care determina tipul de date ce îl poate stoca. De exemplu, un câmp cu tipul de date Text poate stoca date constând fie în text, fie în caractere numerice, dar un câmp Număr poate stoca numai date numerice.) , cum ar fi text sau numeric. Trebuie să introduceți tipul de date la care este setat câmpul, altfel Access afișează un mesaj de eroare.

Poate fi necesar să introduceți datele intr-un anumit format daca un câmp are aplicata o masca de intrare (masca de intrare: Format care consta în caractere de afișare literala (cum ar fi paranteze, puncte şi linii de despărțire în silabe) şi caractere de masca care precizează locul unde se introduc datele, felul datelor şi cate caractere sunt permise.).

Cu excepția atașărilor şi listelor cu valori multiple, aveți posibilitatea să introduceți un singur tip de date în majoritatea câmpurilor. În cazul în care nu știți daca un câmp accepta atașări, verificați proprietățile câmpului. Când un câmp este o lista cu mai multe valori, Access afișează o caseta de selectare lângă fiecare element al listei.

3.3.1. Vizualizarea setării de proprietăţi a câmpului1. În Panoul de navigare, faceți clic cu butonul din dreapta pe tabel, apoi faceți clic pe

Vizualizare proiect din meniul de comenzi rapide.2. Pe fila Proiectare/Design, în grupul Afișare/ascundere, faceți clic pe Foaie de

proprietăţi pentru a vizualiza proprietățile câmpului.

Proprietate

Locația în grila de proiectare a tabelului

Valori posibile

Comportamentul la momentul introducerii datelor

Dimensiunea câmpului

Fila General 0-255

Limita de caractere se aplica numai câmpurilor care sunt setate la tipul de date Text. Daca se încearcă introducerea de mai multe caractere decât numărul specificat, câmpul trunchiază sfârșitul datelor pe care le introduceți.

Masca intrare Fila General

Seturi de caractere predefinite sau particularizate de litere sau de substituenţi

O masca de intrare obliga utilizatorii să introducă datele intr-un format predefinit. Măştile se afișează când selectați un câmp dintr-un tabel sau un control dintr-un formular. De exemplu, să presupunem ca faceți clic pe un câmp Data şi vedeți un set de caractere: ZZ-LLL-AAAA. Aceasta este o masca de intrare. vă obliga să introduceți valoarea lunii ca abreviere formata din trei litere, cum ar fi OCT, şi valoarea anului ca patru litere - de exemplu, 15-OCT-2009. Nota   Reţineţi ca măştile de intrare controlează numai modul de introducere al datelor, dar nu controlează şi modul în care Access stochează sau afișează datele respective.

Necesar Fila General Da/Nu Când este activata, aceasta proprietate vă obliga să introduceți o valoare intr-un câmp, iar Access nu vă permite salvarea datelor pana când nu este terminat un câmp obligatoriu. Când este dezactivata, câmpul vă accepta valori nule, așadar câmpul poate rămâne necompletat. Nota   O valoare nula nu este același lucru cu o valoare zero. Zero (0) este o

21

Page 22: curs DPW.docx

cifra, iar "nul" înseamnă o valoare care este necunoscuta, nedefinita sau care lipsește.

Se permite lungime zero

Fila General Da/Nu

Când este activata, aveți posibilitatea să introduceți șiruri de caractere cu lungimea zero: șiruri care nu conțin niciun caracter. Pentru a crea șiruri de caractere cu lungimea zero, introduceți o pereche de ghilimele în tabel ("").

Indexat Fila GeneralDa (Cu dubluri), Da (Fără dubluri), Nu

De asemenea, veți posibilitatea să creați un index pornind de la mai mult de un câmp. din mai mult de un câmp. Daca procedați astfel, aveți posibilitatea să dublați valorile dintr-un câmp, dar nu din ambele câmpuri.

1. Pentru a introduce date intr-un tabel, faceți dublu clic în Panoul de navigare pe tabelul pe care doriți să-l utilizați.

În mod implicit, Access deschide tabelul în vizualizarea Foaie de date.2. Faceți clic pe câmpul pe care doriți sa-l utilizați, apoi introduceți datele.3. Pentru a vă muta la următorul câmp de pe același rând, apăsați tasta TAB, utilizați

tastele săgeata dreapta sau săgeata stânga, sau faceți clic pe celula din rândul următor.Nota   Când apăsați tasta TAB, Access utilizează în mod implicit setările regionale

Windows pentru a determina daca vă muta cursorul la stânga sau la dreapta. În cazul în care computerul utilizează o limba în care se citește de la stânga la dreapta, cursorul se muta la dreapta, când apăsați tasta TAB. În cazul în care computerul utilizează o limba în care se citește de la dreapta la stânga, cursorul se muta la stânga.

Sfat   Pentru a trece la următorul câmp dîntr-ocoloana, utilizați tastele săgeata în sus sau în jos, sau faceți clic pe celula dorita.

Am creat tabela Angajati câmpurile id, nume, data nasterii, salariu, vechime cu tipurile de date corespunzătoare fiecărui câmp în parte.

Cheia unei tabele reprezintă un ansamblu minim de atribute care identifica în mod unic o înregistrare dîntr-otabela. Atunci când creați o tabela, trebuie să stabiliți cheia primara.

Cheia primara a unei tabele se stabilește cu ajutorul comenzii Primary Key care se găsește în Table Tools şi apoi Design. vă trebui să apelați aceasta funcție, după ce ați selectat câmpul sau câmpurile care doriți să fie cheia primara a tabelei.

Voi crea a doua tabelă în fila Creare/Create, în grupul Table şi o voi salva cu numele Profesii. Apoi alegem View şi Design View şi vom introduce numele câmpurilor dorite şi tipul datelor.

22

Page 23: curs DPW.docx

Am introdus câteva date în tabelele Angajati şi Profesii.

23

Page 24: curs DPW.docx

3.4. Crearea unei legături între doua tabelePentru a stabili relații intre tabele mai întâi trebuie să cream tabelele şi apoi apăsăm

butonul Relationships din Table Tools apoi Table.

După ce am adăugat tabelele apăsăm butonul Edit RelationShips pe care îl găsim în Relationships Tools la Design.

24

Page 25: curs DPW.docx

După ce am ales Edit Relationships apăsăm butonul Create New pentru a crea o noua legătura intre doua tabele. Apoi se alege tabela din stânga şi tabela din dreapta şi câmpurile din cele doua tabele intre care se stabilește relația sau legătura.

25

Page 26: curs DPW.docx

Dacă vrem să revenim pentru a reedita o relație între două tabele apăsăm butonul Edit RelationShips.

26

Page 27: curs DPW.docx

Alegem Join Type şi apoi OK.

27

Page 28: curs DPW.docx

4. Interogări 4.1. Interogări QBEInterogările permit filtrarea şi ordonarea datelor din tabele precum şi reunirea datelor

din mai multe tabele, respectiv calcularea unor noi informații.Pentru crearea unei interogări, sistemul Access pune la dispoziție doua limbaje cu

proprietăţi diferite. Primul, numit QBE - Query by Example - este un limbaj vizual al cărui principal avantaj este simplitatea. Al doilea limbaj, SQL - Structured Query Language - este un limbaj declarativ care, deși conține relativ puține cuvinte cheie, permite exprimarea unor interogări mult mai elaborate decât QBE.

Interogările pot fi clasificate în funcție de acțiunea realizata in:•        Interogări de selecție•        Interogări de actualizare•        Interogări de ștergere•        Interogări de creare sau inserțieÎn acest capitol vor fi prezentate doar interogările de selecție. Din punct de vedere

al operațiilor implicate de interogări, putem distinge intre: proiecție, sortarea, filtrarea (selecția), reuniunea (JOIN), gruparea şi sumarizarea.

Operația de proiecțieOperația de proiecție presupune excluderea din rezultat a coloanelor care nu sunt

relevante în contextul interogării. Aceasta excludere se realizează prin ne-includerea lor în macheta de proiecție.

Operația de sortareOperația de sortare presupune ordonarea rezultatului funcție de unul sau mai multe

criterii. În cazul în care sunt mai multe criterii, primul criteriu vă fi cel dominant, restul fiind considerate în mod ierarhic, în ordinea în care apar.

Operația de selecțieOperația de filtrare (selecție) presupune excluderea din rezultat a înregistrărilor care

nu îndeplinesc diverse criterii exprimate prin condiții (expresii) logice. Operația de JOIN

Operația de reuniune (JOIN) consta în reunirea datelor aflate în diferite tabele intre care exista stabilite relații.

Operația de grupare şi sumarizareOperația de grupare şi sumarizare presupune împărţirea înregistrărilor în grupuri şi

extragerea informațiilor la nivelul fiecărui grup în parte. Pentru a avea acces la linia Total se vă marca opțiunea Totals din meniul View.

Opțiunile de sumarizare sunt: Group by, Sum, Avg, Min, Max, Count, StDev, Var, First, Last, Expression, Where.

Interogările reprezintă modalităţi de selecție şi afișare a informație din unul sau mai multe surse (tabele sau alte interogări), formulate cu ajutorul unor condiții logice.

28

Page 29: curs DPW.docx

4.2. Tipuri de interogăriÎn funcție de modul de definire şi rezultatele acțiunii, interogările pot fi clasificate astfel: 1. interogări simple sau de selecție (folosind condiții logice); 2. interogări pentru actualizare - delete query, update query şi append query; 3. interogări încrucișate sau bidimensionale. Rezultatul interogării este un nou set de date, numit set dinamic (engl: Dynaset). Setul

dinamic (rezultatul interogării) conține doar câmpurile specificate ale înregistrărilor din tabelele specificate care satisfac condițiile specificate. Denumirea '"Set dinamic" este legata de faptul ca orice modificări ale datelor din tabelele specificate în interogare implica modificări corespunzătoare ale rezultatului interogării (la o noua executare a ei) şi invers, orice modificări în setul dinamic implica modificări în tabelele respective (cu condiția respectării integrității datelor). Seturile de date dinamice nu se memorează; ele se formează din nou de fiecare data când executam o interogare. Daca în tabelele bazei de date intervin modificări, rezultatele executării a doua interogări identice pot fi diferite.

4.3. Crearea unei interogări (query)Alegem Create apoi Query Wizard pentru a crea o interogare în mod automat de

asistent.

Putem să alegem ce fel de interogare dorim. Pentru acest exemplu am ales Simple Query Wizard şi apăsăm OK.

Apoi apare următoarea fereastră şi putem să ne creăm interogarea pe baza tabelei dorite şi putem selecta şi câmpurile care vrem să apară în interogare şi apăsăm Next.

29

Page 30: curs DPW.docx

Sau mai putem crea o interogare folosind Create şi apoi Query Design şi ne vom selecta tabela pe care o vom utiliza pentru interogare şi câmpurile pe care dorim să apară în interogare.

30

Page 31: curs DPW.docx

Pentru această interogare am selectat doar câmpurile nume, salariu şi vechime şi am pus condiția >=100 pentru salariu adică vor fi afișate doar salariile care respectă această condiție.

Vom salva interogarea cu numele dorit după care o vom rula apăsând Run .

31

Page 32: curs DPW.docx

Vrem să revenim în modul Design pentru a mai adaugă o condiție vom alege şi vom alege Design View pentru pune condiția ca vechimea să fie mai mare de 2 ani.

Salvăm şi rulăm interogarea.

4.4. Exemple de expresii care folosesc funcții agregat (funcții statistice ce se aplicã pe un domeniu definit)Funcțiile agregat sunt:

32

Page 33: curs DPW.docx

Davg: calculeazã media unui set de valori asociate unui set de articole (domeniu)Sintaxa: Davg(expr, domain[,criteria])

unde expr poate fi un identificator de câmp ce conține valori numerice, domain poate fi un nume de tabel sau query şi criteria poate fi o expresie sir folositã pentru a restrânge domeniul de aplicare a funcției.

Dcount: determinã numãrul de articole ce se aflã intr-un set specificat de articole.Sintaxa: Dcount (expr, domain[,criteria])

Dlookup: aduce valoarea unui câmp anume dintr-un set specificat de articole Dfirst, Dlast: aduce un articol aleatoriu dintr-un câmp al unui tabel sau query,

când se dorește orice valoare din acel câmp. Dmin, Dmax: determinã valorile minimã şi maximã dintr-un set de articole. DstDev, DstDevP: estimeazã deviația standard pe mulțimea de valori a unui set de

articole. Exemplu: DStDevP("[Freight]", "Orders", "[ShipCountry] = 'UK'"), calculeazã deviația standard pentru populația comenzilor trimise cãtre UK.

Dsum: calculeazã suma mulțimii valorilor dintr-un set specificat de articole. Dvar, DvarP: estimeazã varianta aplicatã pe mulțimea valorilor dintr-un set

specificat de articole.4.5. Funcția IIFReturnează una sau doua părţi, în funcție de evaluarea unei expresii.Se poate utiliza IIf oriunde se pot utiliza expresii. Se utilizează IIf pentru a determina

daca o expresie este adevărată sau falsa. Daca expresia este adevărată, IIf returnează o valoare; daca este falsa, IIf returnează o alta. Se specifica valorile pe care le returnează funcția IIf.SintaxaIIf(expr, parteadevarata, partefalsa)Sintaxa funcției IIf are următoarele argumente:

Argument Descriere

expr Obligatoriu. Expresia care se evaluează.

parteadevarata

Obligatoriu. Valoarea sau expresia returnata daca expr este True.

partefalsa Obligatoriu. Valoarea sau expresia returnata daca expr este False.

Observații:IIf evaluează întotdeauna atât parteadevarata cat şi partefalsa, chiar daca

returnează doar una din ele. Datorita acestui lucru, trebuie să aveți grija la efecte secundare nedorite. De exemplu, daca evaluarea argumentului partefalsa rezulta într-oîmparţire la zero, chiar daca expr este Adevărată.

4.5.1. Utilizarea IIf pe un formular sau raport  să presupunem ca exista un tabel Clienti care conține un câmp numit RegiuneTara. Intr-un formular, trebuie decis daca Italiana este prima limba a contractului. Se poate adaugă un control şi utiliza IIf în proprietatea Sursa control, după cum urmează: =IIf([RegiuneTara]="Italia", "Italiana", "O alta limba")

Când se deschide formularul în Vizualizare formular, controlul afișează "Italiana" când valoarea pentru RegiuneTara este Italia, şi "O alta limba" când RegiuneTara are oricare alta valoare.

4.5.2. Utilizați IIf în expresii complexe  Se poate utiliza orice expresie ca orice parte a instrucțiunii IIf. De asemenea, se pot imbrica expresii IIf, ceea ce permite evaluarea unor serii de expresii dependente.

De exemplu, să presupunem ca lucrați într-olibrărie. Baza de date a librăriei are un tabel numit Împrumutate, care conține un câmp numit Data scadenta, care conține data pana la care trebuie înapoiată o anumită carte. Se poate crea un formular care indica starea unui element împrumutat intr-un control utilizând funcția IIf în proprietatea Sursa control a acelui câmp, după cum urmează:=IIf([Data Scadenta]<Date(),"INTARZIERE",IIf([Data Scadenta]=Date(),"Trebuie înapoiată","Nu trebuie înapoiată încă"))

Când se deschide formularul în Vizualizare formular, controlul afișează "Întârziere" daca Data Scadenta este mai mica decât data curenta, "Trebuie înapoiată" daca este egala cu data de azi sau "Nu trebuie înapoiată încă" altfel.

4.5.3. Utilizați IIf în cod VBA  

33

Page 34: curs DPW.docx

Exemplele care urmează demonstrează utilizarea acestei funcții intr-un modul Visual Basic for Applications (VBA). Pentru mai multe informații despre lucrul cu VBA, selectați Referința dezvoltator în lista verticala de lângă Căutare şi introduceți unul sau mai mulți termeni în caseta de căutare.

5. Access SQLLimbajul SQL - Structured Query Language - este un limbaj declarativ care, deși

conține relativ puține cuvinte cheie, permite exprimarea unor interogări foarte complexe pe o baza de date.

În cazul limbajelor declarative, programatorul vă descrie algoritmul de rezolvat în loc să implementeze algoritmul de rezolvare. În acest caz sistemul vă căuta algoritmul de rezolvare, problemele fiind legate de respectarea sintaxei limbajului la descrierea problemei.

Limbajul SQL permite atât crearea entităților specifice unei baze de date (ex. tabele, indecși, utilizatori etc.) cat şi editarea şi regăsirea înregistrărilor din aceasta, în acest capitol vor fi prezentate doar interogările de selecție.

Din punct de vedere al operațiilor implicate de interogări, putem distinge intre: proiecție, sortarea, filtrarea (selecția), reuniunea (JOIN), gruparea şi sumarizarea.

5.1. Instrucțiunea SELECTOperația de proiecție presupune excluderea din rezultat a coloanelor care nu sunt

relevante în contextul interogării. Aceasta excludere se realizează prin ne-includerea lor în lista de proiecție.

Sintaxa instrucțiunii SQL care realizează proiecția unei tabele este: SELECT lista_proiecție

FROM tabela;Lista de proiecție vă cuprinde specificarea câmpurilor din tabela, despărțite prin

virgula. Ordinea de apariție a acestora vă determina ordinea câmpurilor în rezultat. Prin proiecție se reduce în general numărul de coloane dar nu este afectat numărul de înregistrări.

Proiecția 1:1 se poate realiza înlocuind lista de proiecție cu caracterul *, caz în care toate coloanele vor fi proiectate în ordinea în care ele apar în tabela.

Daca se dorește, prin proiecție pot fi redenumite şi câmpurile din tabela. Sintaxa listei de proiecție vă fi în acest caz:

nume_camp1 AS nume_nou1, nume_camp2 AS nume_nou2,... Exemplu:

SELECT cods AS CodStudent, nume AS NumeStudent FROM Studenti;

Sintaxa extinsa:SELECT [predicat] { * | tabel.* | [tabel.]camp1 [AS alias1] [, [tabel.]camp2 [AS alias2] [, ...]]}FROM expresie pentru tabele [IN baza de date externa][WHERE... ][GROUP BY... ][HAVING... ][ORDER BY... ][WITH OWNERACCESS OPTION]

Instrucțiunea SELECT are aceste părţi:Parte Descriere

predicat

Unul dintre următoarele predicate: ALL, DISTINCT, DISTINCTROW sau TOP. Predicatul se utilizează pentru a restricționa numărul de înregistrări care se returnează. În cazul în care nu se specifica niciunul, predicatul implicit este ALL.

* Specifica faptul ca se selectează toate câmpurile din tabelul sau tabelele specificate.

tabel Numele tabelului care conține câmpurile din care se selectează înregistrări.camp1, camp2

Numele câmpurilor care conțin datele care doriți să fie regăsite. Daca includeți mai multe câmpuri, se vor regăsi în ordinea listata.

alias1, alias2

Numele care se vor utiliza ca anteturi de coloana în locul numelor originale ale coloanelor din tabel.

expresie pentru

Numele tabelului sau tabelelor care conțin datele care doriți să fie regăsite.

34

Page 35: curs DPW.docx

tabelebaza de date externa

Numele bazei de date externe care conține tabelele din expresia pentru tabele, în cazul în care nu se afla în baza de date curenta.

Pentru a efectua aceasta operațiune, motorul pentru baze de date Microsoft Access căuta tabelul sau tabelele specificate, extrage coloanele alese, selectează rândurile care îndeplinesc criteriile şi sortează sau grupează rândurile rezultate în ordinea specificata.

Instrucțiunea SELECT nu modifica datele din baza de date.SELECT este, de regula, primul cuvânt dîntr-oinstrucțiune SQL. Cele mai multe

instrucțiuni SQL sunt instrucțiuni SELECT sau SELECT...INTO.Sintaxa minima a unei instrucțiuni SELECT este:

SELECT câmpuri FROM tabelSe poate utiliza un asterisc (*) pentru a selecta toate câmpurile dintr-un tabel.

Următorul exemplu selectează toate câmpurile din tabelul Angajati:SELECT * FROM Angajati;

Daca un nume de câmp este inclus în mai multe tabele din clauza FROM, trebuie precedat de numele tabelului şi de operatorul . (punct).

În exemplul următor, câmpul Departament este în tabelul Angajati şi în tabelul Supervizori.SELECT Angajati.Departament, Supervizori.NumeSupervizor FROM Angajati INNER JOIN Supervizori WHERE Angajati.Departament = Supervizori.Departament;

Când se creează un obiect de tipul Set de înregistrări, Motorul pentru baze de date Microsoft Access utilizează numele de câmp din tabel ca nume pentru obiectul Câmp din obiectul set de înregistrări. Daca doriți un alt nume de câmp sau daca expresia utilizata pentru a genera câmpul nu produce un nume, utilizați cuvântul rezervat AS.

Următorul exemplu utilizează titlul Naștere pentru a denumi obiectul de tip Câmp returnat în obiectul de tip set de înregistrări:SELECT DataNasterii AS Naștere FROM Angajati;

De fiecare data când utilizați funcții agregate sau interogări care returnează nume ambigue sau dublate pentru obiecte de tipul Câmp, aveți posibilitatea să utilizați clauza AS pentru a furniza nume alternative pentru obiectul de tip Câmp. Următorul exemplu utilizează titlul ContorPrincipal pentru a denumi obiectul de tip Câmp returnat în obiectul de tip set de înregistrări rezultat:SELECT COUNT(IDAngajat) AS ContorPrincipal FROM Angajati;

Clauza FROMSpecifica tabelele sau înregistrările care conțin câmpurile listate în instrucțiunea SELECT.SintaxaSELECT lista de câmpuriFROM expresie pentru tabele [IN baza de date externa]O instrucțiune SELECT, care conține o clauza FROM, are aceste părţi:

Parte Descriere

lista de câmpuri

Numele câmpului sau câmpurilor care se vor regăsi, împreună cu toate opțiunile pentru aliasuri pentru nume de câmpuri, funcții agregate SQL, predicate de selectare (ALL, DISTINCT, DISTINCTROW sau TOP ) sau alte opțiuni legate de instrucțiunea SELECT.

expresie pentru tabele

O expresie care identifica unul sau mai multe tabele din care se regăsesc datele. Expresia poate fi un singur nume de tabel, un nume de interogare salvat sau un compus rezultat prîntr-ooperație de tipul INNER JOIN, LEFT JOIN sau RIGHT JOIN.

baza de date externa

Calea completa a unei baze de date externe care conține toate tabelele din expresia pentru tabele.

FROM este necesar şi urmează orice instrucțiune SELECT.Ordinea numelor de tabel din expresia pentru tabele nu este importanta.Pentru performanta îmbunătăţită şi ușurința în utilizare, se recomanda utilizarea unui

tabel legat, în schimbul unei clauze IN pentru regăsirea datelor dîntr-obaza de date externa.Următorul exemplu vă arata cum se pot regăsi date din tabelul Angajati:

SELECT Nume, Prenume FROM Angajati;35

Page 36: curs DPW.docx

Clauza WHERESpecifica înregistrările din tabelele lista în clauza FROM care sunt afectate de o instrucțiune SELECT, UPDATE sau DELETE.SintaxaSELECT lista de câmpuriFROM expresie pentru tabeleWHERE criterii

O instrucțiune SELECT, care conține o clauza WHERE, are aceste părţi:

Parte Descriere

lista de câmpuri

Numele câmpului sau câmpurilor care se vor regăsi, împreună cu aliasuripentru nume de câmp, funcții agregat SQL, instrucțiuni de selectare (ALL, DISTINCT, DISTINCTROW sau TOP) sau alte opțiuni pentru instrucțiunea SELECT.

expresie pentru tabele

Numele tabelului sau tabelelor din care se regăsesc date.

criterii O expresie care trebuie satisfăcută de înregistrări pentru ca acestea să fie incluse în rezultatele interogării.

Motorul pentru baze de date Microsoft Access selectează înregistrările care îndeplinesc condițiile listate în clauza WHERE. Daca nu se specifica o clauza WHERE, interogarea returnează toate rândurile din tabel. Daca se specifica mai multe tabele în interogare şi nu se include o clauza WHERE sau o clauza JOIN, interogarea generează un produs cartezian al tabelelor.

Clauza WHERE este opţională dar, daca se include, urmează după FROM. De exemplu, se pot selecta toți angajații din departamentul de vânzări (WHERE Departament = 'Vânzări') sau toți clienții cu vârsta cuprinsa intre 18 şi 30 de ani (WHERE Vârsta Between 18 şi 30).

Daca nu se utilizează o clauza JOIN pentru a efectua operațiuni de unire SQL cu tabele multiple, obiectul de tip set de înregistrări rezultat nu vă fi actualizabil.

WHERE este similara cu HAVING. WHERE determina înregistrările care se selectează. În mod similar, după ce înregistrările se grupează cu GROUP BY, HAVING determina înregistrările care se afișează.

Utilizați clauza WHERE pentru a elimina înregistrările care nu doriți să fie grupate de o clauza GROUP BY.

Se pot utiliza diferite expresii pentru a determina înregistrările returnate de instrucțiunea SQL. De exemplu, următoarea instrucțiune SQL selectează toți angajații ale căror salarii depășesc $21,000:SELECT Nume, Salariu FROM Angajati WHERE Salariu > 21000;

O clauza WHERE poate conține pana la 40 de expresii legate de operatori logici, cum ar fi şi şi Sau.

Când introduceți un nume de câmp care conține un spațiu sau semne de punctuație, încadrați numele intre paranteze pătrate ([ ]). De exemplu, un tabel cu informații despre clienți poate include informații despre anumiți clienți:

SELECT [Restaurantul favorit al clientului]Când specificați argumentul criteriilor, literalii pentru data trebuie să fie în format

U.S. De exemplu, 10 mai, 1996, se scrie 10/5/96 în Marea Britanie şi 5/10/96 în Statele

Unite. Asiguraţi-vă ca încadrați literalii pentru data cu semnul diez (#), după cum se vede în exemplul următor.

Pentru a găsi înregistrări din data 10 mai, 1996 într-obaza de date din Marea Britanie, trebuie utilizata următoarea instrucțiune SQL:SELECT * FROM Comenzi WHERE DataExpediere = #5/10/96#;

De asemenea, se poate utiliza funcția DateValue, care tine cont de setările internaționale stabilite de Microsoft Windows. De exemplu, utilizați acest cod pentru Statele Unite:SELECT * FROM Comenzi WHERE DataExpediere = DateValue('5/10/96');si acest cod pentru Marea Britanie:SELECT * FROM Comenzi WHERE DataExpediere = DateValue('10/5/96');

Clauza ORDER BY

36

Page 37: curs DPW.docx

Sortează înregistrările rezultate într-ointerogare, dintr-un câmp specificat sau din mai multe câmpuri, în ordine crescătoare sau descrescătoare.SintaxaSELECT lista de câmpuriFROM tabelWHERE criterii de selectare[ORDER BY camp1 [ASC | DESC ][, camp2 [ASC | DESC ]][, ...]]]

O instrucțiune SELECT, care conține o clauza ORDER BY, are aceste părţi:

Parte Descriere

lista de câmpuri

Numele câmpului sau câmpurilor care se vor regăsi, împreună cu toate opțiunile pentru aliasuri pentru nume de câmpuri, funcții agregate SQL, predicate de selectare (ALL, DISTINCT, DISTINCTROW sau TOP ) sau alte opțiuni legate de instrucțiunea SELECT.

tabel Numele tabelului din care se regăsesc înregistrări.

criterii de selectare

Criteriile de selectare. Daca instrucțiunea include o clauza WHERE, Motorul pentru baze de date Microsoft Access ordonează valorile după aplicarea condițiilor WHERE la înregistrări.

camp1, camp2

Numele câmpurilor în care se sortează înregistrări.

Clauza ORDER BY este opţională. Cu toate acestea, pentru ca datele să se afișeze într-oordine sortata, trebuie utilizata clauza ORDER BY.

Ordinea de sortare implicita este cea crescătoare (de la A la Z, de la 0 la 9). În ambele exemple care urmează numele angajaților se sortează în aceeași ordine:SELECT Nume, Prenume FROM Angajati ORDER BY Nume;SELECT Nume, Prenume FROM Angajati ORDER BY Nume ASC;

Pentru a sorta în ordine descrescătoare (de la Z la A, de la 9 la 0), adăugați cuvântul rezervat DESC la sfârșitul fiecărui câmp care doriți să se sorteze în ordine descrescătoare. Următorul exemplu selectează salariile şi se sortează în ordine descrescătoare:SELECT Nume, Salariu FROM Angajati ORDER BY Salariu DESC, Nume;

Daca specificați un câmp care conține date Memo sau obiecte OLE în clauza ORDER BY, se produce o eroare. Motorul pentru baze de date Microsoft Access nu efectuează sortări în câmpuri de aceste tipuri.Clauza ORDER BY este, de obicei, ultimul element dîntr-oinstrucțiune SQL.

Se pot include câmpuri adiționale în clauza ORDER BY. Înregistrările se sortează mai întâi după primul câmp listat după ORDER BY. Înregistrările care au valori egale în acel câmp se sortează apoi după valorile din al doilea câmp listat.

Predicatele ALL, DISTINCT, DISTINCTROW, TOPSpecifica înregistrările selectate cu interogările SQL.SintaxaSELECT [ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]] FROM tabel

O instrucțiune SELECT ce conține aceste predicate are următoarele părţi:Parte Descriere

ALL

Presupusa, în cazul în care nu includeți unul dintre predicate. Motorul bazei de date Microsoft Access selectează toate înregistrările care îndeplinesc condițiile din instrucțiunea SQL. Următoarele doua exemple sunt echivalente şi returnează toate înregistrările din tabelul Angajati: SELECT ALL * FROM Angajati ORDER BY IDAngajat;SELECT * FROM Angajati ORDER BY IDAngajat;

DISTINCT Omite înregistrări ce conțin date dublura în câmpurile selectate. Pentru a fi incluse în rezultatele interogării, valorile pentru fiecare câmp listat în instrucțiunea SELECT trebuie să fie unice. De exemplu, mai mulți Angajati listați intr-un tabel Angajati pot avea același nume de familie. Daca doua înregistrări conțin Smith în câmpul NumeDeFamilie, următoarea instrucțiune SQL returnează numai o înregistrare ce conține Smith: SELECT DISTINCT LastNameFROM Employees;Daca omiteți DISTINCT, aceasta interogare returnează ambele înregistrări Smith.

37

Page 38: curs DPW.docx

În cazul în care clauza SELECT conține mai mult de un câmp, combinația valorilor din toate câmpurile trebuie să fie unica pentru ca o înregistrare data să fie inclusa în rezultate.Ieșirea unei interogări care utilizează DISTINCT nu este actualizabila şi nu reflecta modificările ulterioare aduse de alți utilizatori.

DISTINCTROW

Omite date bazate pe înregistrări dublate întregi, nu doar câmpuri dublate. De exemplu, se poate crea o interogare care asociază tabelele Cumparatori şi Comenzi în câmpul IDCumparator. Tabelul Cumparatori nu conține dubluri în câmpurile IDCumparator, dar tabelul Comenzi le conține deoarece fiecare cumpărător poate avea mai multe comenzi. Următoarea instrucțiune SQL arata cum se poate utiliza DISTINCTROW pentru a produce o lista a firmelor care au cel puțin o comanda dar fără alte detalii despre aceste comenzi: SELECT DISTINCTROW NumeFirma FROM Cumparatori INNER JOIN Comenzi ON Cumparatori.IDClient = Comenzi.IDClient ORDER BY NumeFirma;Daca omiteți DISTINCTROW, aceasta interogare produce mai multe rânduri pentru fiecare firma care are mai mult de o comanda.DISTINCTROW are efect doar când selectați câmpurile din anumite tabele utilizate în interogare, dar nu din toate. DISTINCTROW este ignorat daca interogarea include doar un tabel sau daca utilizați ca ieșiri câmpuri din toate tabelele.

TOP n [PERCENT]

Returnează un anumit număr de înregistrări care se vor poziționa în partea de sus sau de jos a unui interval specificat de o clauza ORDER BY. Presupuneți ca doriți numele primilor 25 Studenti din promoția 1994: SELECT TOP 25FirstName, LastNameFROM StudentsWHERE GraduationYear = 2003ORDER BY GradePointAverage DESC;Daca nu includeți clauza ORDER BY, interogarea vă returna un set aleator de 25 de înregistrări din tabelul Studenti care satisfac clauza WHERE.Predicatul TOP nu alege intre valori egale. În exemplul următor, daca a douăzeci şi cincea şi a douăzeci şi șasea cele mai mari medii ale notelor sunt aceleași, interogarea vă returna 26 de înregistrări.De asemenea, se poate utiliza cuvântul rezervat PERCENT pentru a returna un anumit procent de înregistrări care se poziționează în partea de sus şi de jos a unui interval specificat de o clauza ORDER BY. Presupuneți ca, în loc de primii 25 de Studenti, doriți ultimii 10 la suta din promoție:SELECT TOP 10 PERCENTFirstName, LastNameFROM StudentsWHERE GraduationYear = 2003ORDER BY GradePointAverage ASC;Predicatul ASC specifica o returnare a valorilor din partea de jos. Următoarea valoare după TOP trebuie să fie un Întreg nesemnat.TOP nu influențează daca interogarea este actualizabila sau nu.

tabel Numele tabelului din care se regăsesc înregistrări.

Clauza GROUP BYCombina înregistrări cu valori identice din lista specificata de câmpuri într-osingura înregistrare. Se creează o valoare rezumat pentru fiecare înregistrare daca se include o funcție agregat SQL, cum ar fi Sum sau Count, în instrucțiunea SELECT.SintaxaSELECT lista de câmpuriFROM tabelWHERE criterii [GROUP BY lisa câmpurilor de grupat]

38

Page 39: curs DPW.docx

O instrucțiune de tipul SELECT, care conține o clauza GROUP BY, are aceste părţi:Parte Descriere

lista de câmpuri

Numele câmpului sau câmpurilor care se vor regăsi, împreună cu aliasuripentru nume de câmp, funcții agregat SQL, instrucțiuni de selectare (ALL, DISTINCT, DISTINCTROW sau TOP) sau alte opțiuni pentru instrucțiunea SELECT.

tabel Numele tabelului din care se regăsesc înregistrări.

criteriiCriterii de selectare. Daca instrucțiunea include o clauza WHERE, motorul de baze de date Microsoft Access grupează valorile după aplicarea condițiilor WHERE în înregistrări.

lista câmpurilor de grupat

Numele celor maximum 10 câmpuri utilizate pentru a grupa înregistrări. Ordinea numelor de câmpuri din lista câmpurilor de grupat determina nivelurile de grupare, de la cel mai ridicat pana la cel mai scăzut nivel de grupare.

GROUP BY este opţională.Valorile de rezumare se omit daca nu exista nici o funcție agregat în instrucțiunea

SELECT.Valorile Null din câmpurile GROUP BY sunt grupate şi nu se omit. Cu toate acestea,

valorile Null nu se evaluează în nici o funcție agregat SQL.Clauza WHERE se utilizează pentru a exclude rândurile care nu doriți să fie grupate,

iar clauza HAVING se utilizează pentru a filtra înregistrările după ce au fost grupate.Daca nu conține date de tip Memo sau obiecte OLE, un câmp din lista de câmpuri

GROUP BY poate face referire la orice alt câmp din orice tabel din cadrul clauzei FROM, chiar daca acel câmp nu este inclus în instrucțiunea SELECT, câtă vreme instrucțiunea SELECT include cel puțin o funcție agregat SQL. Motorul pentru baze de date Microsoft Access nu poate grupa câmpuri Memo sau de Obiecte OLE.

Toate câmpurile din câmpul SELECT trebuie să fie incluse în clauza GROUP BY sau să fie incluse ca argumente pentru o funcție agregat SQL.

5.2. Interogări de tip UnionInterogările de tip Union (reuniune) pot fi create în Access numai folosind SQL. Union

nu este o instrucțiune sau o clauza SQL, ci un operator folosit pentru a “alătura” rezultatele a doua sau mai multe interogări “compatibile”.

Doua interogări sunt compatibile daca returnează același număr de coloane .De regula, coloanele returnate de interogările ce vor fi reunite folosind operatorul

UNION trebuie să aibă aceeași denumire şi același tip de date. Altfel, Access vă folosi următoarele reguli pentru a le reuni:

Daca numele coloanelor returnate sunt diferite, în tabela de rezultate vor apărea numele coloanelor returnate de prima interogare;

Daca tipurile de date sunt diferite, Access le vă converti la un tip de date compatibil cu amândouă. Astfel, pentru o coloana de tip integer şi una de tip long integer, tipul folosit de Access vă fi long integer; pentru o coloana de tip text şi una numerica, Access vă alege tipul text, iar pentru o coloana de tip date/time şi una de tip yes/no, Access vă alege tot tipul text.

Nota: Nu puteți folosi coloane de tipul Memo sau OLE Object într-ointerogare Union.Sintaxa este următoarea:instrucțiune_select1UNION [ALL]instrucțiune_select2[ UNION [ALL]instrucțiune_select3][…]

Datele din tabela de rezultate a unei astfel de interogări nu pot fi modificate. Aveți grija la ordinea în care specificați coloanele în clauza SELECT a fiecărei interogări, deoarece Access nu tine cont de numele coloanelor, ci de ordinea lor.

Să presupunem ca în baza noastră de date exista o tabela cu profesorii pensionați (numita ProfPensionari), ce conține aceleași coloane ca şi tabela Profesor. Putem să cream o interogare care să returneze datele din tabelele Profesor şi ProfPensionari:SELECT Nume, Catedra, IDTitluFROM ProfesorUNION

39

Page 40: curs DPW.docx

SELECT Nume, Catedra, IdTitluFROM ProfPensionari;

Opțiunea TABLEAtunci când doriți să includeți în tabela de rezultate toate coloanele tabelelor pe care

le reuniți, puteți folosi o sintaxa prescurtata, înlocuind instrucțiunea:SELECT * FROM tabelaCuTABLE tabelaAstfel, următoarele doua interogări sunt echivalente:SELECT * FROM ProfesorUNIONSELECT * FROM ProfPensionari;SiTABLE ProfesorUNIONTABLE ProfPensionari;

Opțiunea ALLÎn mod implicit, Access vă elimina înregistrările duplicat din tabela de rezultate a

unei interogări Union. Daca nu doriți ca acest lucru să se întâmple, folosiți opțiunea ALL după operatorul UNION. Astfel se vă mari şi viteza de execuție a interogării, chiar daca în final tabela de rezultate nu vă conține duplicate.

Sortarea rezultatelorOperația de sortare presupune ordonarea rezultatului funcție de unul sau mai multe

criterii.În cazul în care sunt mai multe criterii, primul criteriu vă fi cel dominant, restul fiind

considerate în mod ierarhic, în ordinea în care apar în lista.Sintaxa instrucțiunii SQL care realizează ordonarea rezultatului este: SELECT lista_proiecție

FROM tabela ORDER BY lista_ordonare;

Lista de ordonare vă cuprinde specificarea unor câmpuri din tabela sau expresii în care acestea intervin, despărțite prin virgula.

Implicit sortarea se face în sens crescător (ascendent). Pentru a sorta în mod descrescător (descendent) se vă utiliza marcajul DESC după poziția dorita. Exemplu: SELECT *

FROM StudentiORDER BY Nume, Medie DESC, DataNVa ordona studenții crescător după nume, la nume egale descrescător după medie,

iar şi la medii egale crescător după data nașterii.5.3. SubinterogăriPrin folosirea unei subinterogări înțelegem includerea unei instrucțiuni SELECT în

cadrul altei instrucțiuni SQL. De regula, subinterogările sunt incluse în clauza WHERE a unei instrucțiuni SQL, ele pot apărea şi în clauza SELECT.

Nota: De multe ori, puteți ajunge la același rezultat folosind fie o subinterogare, fie o asociere. Alegerea vă aparține.

Vă reamintim faptul ca în grila QBE puteți introduce o subinterogare fie în câmpul Criteria, fie în câmpul Field.

Iată ce puteți realiza cu ajutorul subinterogărilor:1.      să verificați daca anumite valori se afla printre datele conținute într-otabela

sau returnate de o interogare. Sintaxa este, în mare, următoarea: expresie [NOT] IN (subinterogare)Să presupunem că doriți să vedeți profesorii (împreună cu titlurile şi catedrele lor)

care au salariul mai mare de 1.000.000 de lei. Pentru aceasta, puteți folosi ori pe prima dintre interogările de mai jos (care conține o subinterogare), ori pe cea de a doua (bazata pe un join).SELECT Nume, IdTitlu, CatedraFROM ProfesorWHERE IdTitlu IN (SELECT IdTitlu FROM TitluWHERE Slariu >=1000000;

40

Page 41: curs DPW.docx

Acest tip de subinterogare nu poate returna decât o singura coloana; altfel, veți obține o eroare. Pentru a verifica daca anumite valori nu se afla într-olista, folosiți operatorul NOT.

2.      Să comparați o valoare cu datele returnate de o interogare. Sintaxa este următoarea:

Comparație [ ] (subinterogare)Şi în acest caz, subinterogarea nu trebuie să returneze decât o singură coloană.Să presupunem ca dorim să aflam numele, titlul şi catedra profesorilor care au

salariul mai mare decât cel al profesorului cu numele “Cristea George”. Pentru aceasta, putem folosi următoarea interogare:SELECT Nume, Titlu, CatedraFROM Profesor INNER JOIN TitluON Profesor.IdTitlu = Titlu.IdTitluWHERE Salariu > (SELECT SalariuFROM Profesor INNER JOIN TitluON Profesor.IdTitlu = Titlu.IdTitluWHERE Nume = “Cristea George”);

Observați faptul ca subinterogarea folosita anterior vă returna o singura valoare: salariul profesorului Cristea George. În cazul în care am dori să facem comparații cu mai multe valori returnate de o subinterogare, putem utiliza următoarele predicate:

- ANY sau SOME: comparația e adevărată daca exista cel puțin o valoare returnata de subinterogare pentru care ea să fie adevărată;

- ALL: comparația e adevărată daca ea este adevărată pentru orice valoare returnata de subinterogare.

Nota: Daca nu folosiți nici unul dintre predicatele ANY, SOME sau ALL, trebuie să vă asigurați de faptul ca subinterogarea returnează o singura valoare.

Daca am fi dorit să aflam numele, titlul şi catedra profesorilor care au salariul mai mare decât cel puțin un alt profesor (deci care nu are salariul cel mai mic), am fi putut scrie interogarea:SELECT Nume, Titlu, CatedraFROM Profesor INNER JOIN TitluON Profesor.IdTitlu = Titlu.IdTitluWHERE Salariu > ANY (SELECT Salariu FROM Titlu);

Pe de alta parte, daca ne interesau numele, titlul şi catedra profesorilor care au salariul mai mare decât orice alt profesor, am fi folosit interogarea:SELECT Nume, Titlu, CatedraFROM Profesor INNER JOIN TitluON Profesor.IdTitlu = Titlu.IdTitluWHERE Salariu >= ANY (SELECT Salariu FROM Titlu);Nota: Predicatele ANY, SOME şi ALL iau în considerare şi valorile null (spre deosebire de funcțiile agregat Min() şi Max()).

3.      Stabiliți criterii în funcție de existenta înregistrărilor returnate de o subinterogare. Pentru aceasta, veți folosi predicatul EXIST în cadrul sintaxei:

[NOT] EXISTS (subinterogare) Subinterogările prezentate pana acum în aceasta secțiune au fost independente de

interogarea “exterioara” (cea care le folosea). Putem crea însă şi subinterogări “corelate” cu interogarea exterioara prin intermediul unei coloane de legătura.

Fiecare dintre cele trei tipuri de subinterogări despre care am vorbit pana acum poate fi corelata. Totuși, de cele mai multe ori, subinterogările care folosesc predicatul EXISTS sunt corelate.

Să presupunem ca dorim să aflam care sunt cursurile la care nu s-au înscris nici un student. Pentru aceasta, vom folosi o subinterogare ce conține predicatul NOT EXISTS:SELECT IdCurs, DenumireFROM CursWHERE NOT EXISTS (SELECT * FROM Curs_Student

WHERE IdCurs=Curs.IdCurs);Subinterogarea de mai sus este corelata deoarece ea utilizează în clauza WHERE

date din interogarea exterioara.Nota: Nu exista restricții asupra numărului de coloane returnate de subinterogările de acest tip, deoarece nu interesează numai existenta înregistrărilor.

Subinterogări în clauza SELECT

41

Page 42: curs DPW.docx

După cum am arătat pana acum, cel mai adesea veți introduce subinterogări în clauza WHERE a unei interogări. Puteți folosi însă şi în clauza SELECT o subinterogare care să returneze o singura valoare.

Să presupunem ca vrem să scriem o interogare care să ne spună, pentru fiecare curs opțional, daca exista sau nu Studenti înscriși la el.SELECT IdCurs, Denumire,IIF(EXISTS (SELECT * FROM Curs_StudentWHERE IdCurs=Curs.IdCurs), “Da”, “Nu”) AS [Studenti înscriși?]FROM Curs;

Subinterogări pentru găsirea duplicatelor dîntr-otabelaSă presupunem ca avem o tabela, numita DuplCurs, ce conține aceleași coloane ca

şi tabela Curs, dar şi înregistrări duplicat, astfel încât nu putem alege coloana IdCurs drept cheia primara a tabelei. Putem identifica înregistrările duplicat cu ajutorul următoarei subinterogări corelate:SELECT *FROM DuplCursWHERE IdCurs IN (SELECT IdCurs FROM DuplCursGROUP BY IdCursHAVING Count(*)>1)ORDER BY IdCurs;

Tabela cu rezultatele acestei interogări vă conține toate coloanele din tabela Curs, dar numai acele înregistrări ce apar de mai multe ori.

5.4. Interogări cu parametriCa şi fereastra QBE, Access SQL vă permite să scrieți interogări conținând parametri

ale căror valori urmează a fi specificate în timpul rulării. Pentru aceasta, veți folosi declarația PARAMETERS, a cărei sintaxa este:

PARAMETERS parametrul1 tip_date1 [, parametrul2 tip_date2 [,…] ];instrucțiune_SQL;

De exemplu am creat în fereastra QBE interogarea MediaParam care regăsea mediile studenților al căror nume de familie începe cu o litera specificata de utilizator. Iată instrucțiunea SQL corespunzătoare:PARAMETERS [Introduceți prima litera a numelui] Text;SELECT Student.NumeSt, Student.PrenumeSt, Avg(Curs_Student.Nota)AS MediaFROM Student INNER JOIN Curs_StudentON Student.NrMatricol = Curs_Student.NrMatricolGROUP BY Student.NumeSt, Student.PrenumeStHAVING (((Student.NumeSt) Like [Introduceți prima litera a numelui] & “*”));

Instrucțiuni pentru actualizarea datelor Instrucțiunea UPDATECreează o interogare de actualizare care modifica valorile din câmpurile unui tabel

specificat, în funcție de criterii specificate.SintaxaUPDATE tabelSET valoarea nouaWHERE criterii;Instrucțiunea UPDATE are aceste părţi:

Parte Descriere

tabel Numele tabelului care conține datele care doriți să se modifice.

valoare noua

O expresie care determina valoarea care se inserează intr-un anumit câmp din înregistrările actualizate.

criterii O expresie care determina înregistrările care se actualizează. Se actualizează doar înregistrările care satisfac expresia.

UPDATE este utila mai ales daca doriți să modificați multe înregistrări sau daca înregistrările pe care doriți să le modificați sunt în tabele multiple.

Se pot modifica mai multe câmpuri în același timp. Următorul exemplu mărește valorile din CantitateComanda cu 10 procente şi valorile din Transport cu 3 procente pentru expeditorii din Marea Britanie:

42

Page 43: curs DPW.docx

UPDATE Comenzi SET CantitateComanda = CantitateComanda * 1.1, Transport = Transport * 1.03 WHERE RegiuneTaraLivrare= 'UK';

UPDATE nu generează un set de rezultate. De asemenea, după actualizarea înregistrărilor utilizând o interogare de actualizare, nu se poate anula operațiunea. Pentru a afla care înregistrări s-au actualizat, examinați mai întâi rezultatul unei interogări de selectare care utilizează aceleași criterii, apoi executați interogarea de actualizare.

Instrucțiunea DELETECreează o interogare de ștergere care elimina înregistrări din unul sau din mai multe

tabele listate în clauza FROM care satisface clauza WHERE.SintaxaDELETE [tabel.*]FROM tabelWHERE criteriuInstrucțiunea DELETE are aceste părţi:

Parte Descriere

tabel Numele opțional al tabelului din care se șterg înregistrări.

tabel Numele tabelului din care se șterg înregistrări.

criterii O expresie care determina înregistrările care se șterg.

DELETE este utila pentru a șterge multe înregistrări.Pentru a fixa un tabel întreg din baza de date, se poate utiliza metoda Executare cu o

instrucțiune DROP. Cu toate acestea, daca ștergeți tabelul se pierde structura. Dimpotrivă, când se utilizează DELETE, se șterg doar datele; structura tabelului şi toate proprietățile tabelului, cum ar fi atributele de câmp şi indexurile, rămân intacte.

DELETE se poate utiliza pentru a elimina înregistrări din tabele care se afla într-orelație de tipul "unul pentru mai multe" cu alte tabele. Operațiunile de tip Ștergere în cascada duc la ștergerea înregistrărilor din tabele, care se afla pe latura multipla a relației, daca se șterge înregistrarea corespunzătoare în interogare, din latura cu o componenta a relației.

Ștergerea unei interogări șterge înregistrări întregi, nu doar datele din anumite câmpuri. Pentru a șterge valorile dintr-un anumit câmp, creați o interogare de actualizarecare modifica valorile la Null.

După eliminarea înregistrărilor utilizând o interogare de ștergere, nu se poate anula operațiunea. Pentru a afla ce înregistrări s-au șters, examinați întâi rezultatele unei interogări de selectare care utilizează aceleași criterii, apoi executați interogarea de ștergere.

Instrucțiunea SELECT ...INTOCreează o interogare de creare tabel.SintaxaSELECT camp1[, camp2[, ...]] INTO tabel nou [IN baza de date externa]FROM sursaInstrucțiunea SELECT...INTO are aceste părţi:

Parte Descriere

camp1, camp2

Numele câmpurilor care se vor copia în tabelul nou.

tabel nou Numele tabelului care se vă crea. Daca tabelul nou este același ca şi numele unui tabel existent, se vă produce o eroare.

baza de date externa

Calea către o baza de date externa. Pentru o descriere a caii, vedeți clauza IN.

sursa Numele tabelului existent, din care se selectează înregistrări. Se poate defini prin unul sau mai multe tabele sau o interogare.

Interogările pentru crearea de tabele se pot utiliza pentru a arhiva înregistrări, pentru a face copii de rezerva ale tabelelor sau pentru a face copii pentru export către alta baza de date sau pentru utilizare ca baza pentru rapoarte care afișează date pentru o anumita perioada de timp. De exemplu, se poate produce un raport Vânzări lunare după Regiune executând aceeași interogare pentru crearea de tabele în fiecare luna.

43

Page 44: curs DPW.docx

Se poate defini o cheie primara pentru tabelul nou. Când creați tabelul, câmpurile din tabelul nou moștenesc tipul de date şi dimensiunea fiecărui câmp din tabelele subiacente interogării, dar nu se transfera nici o alta proprietate de câmp sau tabel. Pentru a adaugă date la un tabel existent, utilizați instrucțiunea INSERT INTO pentru a crea o interogare de adăugare.

Instrucțiunea INSERT INTOAdaugă o înregistrare sau înregistrări multiple la un tabel. Aceasta este denumita

interogare de adăugare.SintaxaInterogare pentru adăugarea de înregistrări multiple:INSERT INTO tinta [(camp1[, camp2[, ...]])] [IN baza de date externa]SELECT [sursa.]camp1[, camp2[, ...]FROM expresie pentru tabeleInterogare pentru adăugarea unei singure înregistrări:INSERT INTO tinta [(camp1[, camp2[, ...]])]VALUES (valoare1[, valoare2[, ...])Instrucțiunea INSERT INTO are aceste părţi:

Parte Descriere

tinta Numele tabelului sau interogării în care se adaugă înregistrările.

camp1, camp2

Numele câmpurilor în care se adaugă date, daca urmează un argument de tipul tinta, sau numele câmpurilor din care se obțin datele, daca urmează un argument de tipul sursa.

baza de date externa

Calea către o baza de date externa. Pentru o descriere a caii, vedeți clauza IN.

sursa Numele tabelului sau interogării din care se copiază înregistrările.

expresie pentru tabele

Numele tabelului sau tabelelor din care se inserează înregistrările. Acest argument poate fi numele unui singur tabel sau un compus rezultat în urma unei operațiuni de tipul INNER JOIN , LEFT JOIN sau RIGHT sau a unei interogări salvate.

valoare1, valoare2

Valorile care se vor insera în câmpurile specificate ale înregistrării noi. Fiecare valoare se inserează în câmpul care corespunde cu poziția valorii în lista: valoarea1 se inserează în campul1 din înregistrarea noua, valoarea2 în campul2, şi așa mai departe. Valorile trebuie separate prin virgula, iar câmpurile de text trebuie încadrate de apostrofuri (' ').

Instrucțiunea INSERT INTO se poate utiliza pentru a adaugă o singura înregistrare la un tabel utilizând sintaxa interogării pentru adăugarea unei singure înregistrări, descrisa mai sus. În acest caz, codul specifica numele şi valoarea fiecărui câmp din înregistrare. Trebuie specificat fiecare câmp al înregistrării căruia i se asociază o valoare şi valoarea acelui câmp. Daca nu se specifica fiecare câmp, valoarea implicita, sau Null, se inserează în coloanele care lipsesc. Înregistrările se adaugă la sfârșitul tabelului.De asemenea, INSERT INTO se poate utiliza pentru a adaugă un set de înregistrări din alt tabel sau interogare, utilizând clauza SELECT ... FROM, descrisa mai sus în sintaxa interogărilor pentru adăugarea de înregistrări multiple. În acest caz, clauza SELECT se utilizează pentru specificarea câmpurilor care se adaugă la tabelul tinta specificat.

INSERT INTO este opţională, dar, atunci când se include, preceda instrucțiunea SELECT.

Daca tabelul destinație conține o cheie primara, asiguraţi-vă ca adăugați valori unice, non-Null la câmpul sau câmpurile de tip cheie primara; în caz contrar, Motorul pentru baze de date Microsoft Access nu vă adaugă înregistrările.

Daca adăugați înregistrări la un tabel cu un câmp AutoNumerotare şi doriți să renumerotați înregistrările adăugate, nu includeți câmpul AutoNumerotare în interogare. Includeți câmpul AutoNumerotare în interogare daca doriți să reţineţi valorile inițiale din câmp.

Clauza IN se utilizează pentru a adaugă înregistrări la un tabel din alta baza de date.Pentru a crea un tabel nou, utilizați instrucțiunea SELECT... INTO în schimb, pentru a crea o interogare de creare tabel.

44

Page 45: curs DPW.docx

Pentru a afla înregistrările care se vor adaugă, înainte de a executa interogarea de adăugare, executați şi vizualizați mai întâi rezultatele unei interogări de selectare care utilizează aceleași criterii de selectare.

O interogare de adăugare copiază înregistrări din unul sau mai multe tabele în alt tabel. Tabelele care conține înregistrările care se adaugă nu vor fi afectate de interogarea de adăugare.În loc de a adaugă înregistrări existente din alt tabel, se poate specifica valoarea fiecărui câmp dîntr-osingura înregistrare nou, utilizând clauza VALUES. Daca se omite lista câmpurilor, clauza VALUES trebuie să includă o valoarea pentru fiecare câmp de tabel din tabel; altfel, operațiunea INSERT nu vă reuși. Utilizați o instrucțiune INSERT INTO suplimentara, împreună cu o clauza VALUES, pentru fiecare înregistrare suplimentara pe care doriți să o creați.

5.5. Instrucțiuni pentru definirea datelor Instrucțiunea CREATE TABLEMotorul pentru baze de date Microsoft Access nu accepta utilizarea CREATE TABLE sau a

oricăror instrucțiuni LDD, cu baze de date cu motor baza de date non-Microsoft Access. Utilizați în schimb metodele Creare DAO.SintaxaCREATE [TEMPORARY] TABLE tabel (tip camp1 [(dimensiune)] [NOT NULL] [WITH COMPRESSION | WITH COMP] [index1] [, camp2 tip [(dimensiune)] [NOT NULL] [index2] [, ...]] [, CONSTRAINT indexmulticamp [, ...]])Instrucțiunea CREATE TABLE are aceste părţi:

Parte Descriere

tabel Numele tabelului care se vă crea.

camp1, camp2 Numele câmpului sau câmpurilor care se vor crea în tabelul nou. Trebuie creat cel puțin un câmp.

tip Tipul de date al câmpului în tabelul nou.

dimensiune Dimensiunea câmpului în caractere (doar câmpuri Text şi Binare).

index1, index2 O clauza CONSTRAINT ce definește un index câmp unic.

indexmulticamp

O clauza CONSTRAINT ce definește un index multi-camp.

Utilizați instrucțiunea CREATE TABLE pentru a defini un tabel nou, câmpurile acestuia şi restricțiile de câmp. Daca se specifica NOT NULL pentru un câmp, atunci înregistrările noi trebuie să conţină date valide în acel câmp.

O clauza CONSTRAINT stabilește diverse restricții pe un câmp şi se poate utiliza pentru a stabili cheia primara. De asemenea, se poate utiliza instrucțiunea CREATE INDEX pentru a crea o cheie primara sau indexuri suplimentare pe tabele existente.

Se poate utiliza NOT NULL pe un singur câmp sau în cadrul unei clauze numite CONSTRAINT care se aplica sau unui singur câmp sau unui câmp multiplu numit CONSTRAINT. Cu toate acestea, restricția NOT NULL se poate aplica unui câmp o singura data. Încercarea de a aplica aceasta restricție de mai multe ori are drept rezultat o eroare în timpul execuției.

Când se creează un tabel TEMPORARY, acesta este vizibil doar în cadrul sesiunii în care s-a creat. Acesta se șterge automat la terminarea sesiunii. Tabelele temporare pot fi accesate de mai mulți utilizatori.Atributul WITH COMPRESSION se poate utiliza doar cu tipurile de date CHARACTER şi MEMO (cunoscute şi ca TEXT) şi sinonimele acestora.

Atributul WITH COMPRESSION a fost adăugat pentru coloanele CHARACTER datorita modificării Formatului de reprezentare a caracterelor Unicod. Caracterele Unicod necesita în mod uniform doi octeți pentru fiecare caracter. Pentru baze de date Microsoft Access existente, care conțin mai ales date de tip caracter, acest lucru poate însemnă ca baza de date aproape si-ar dubla dimensiunea la conversia în format Microsoft Access. Cu toate acestea, reprezentarea Unicode a multor seturi de caractere, cele denumite anterior ca Seturi de caractere pe un singur octet (SBCS), poate fi ușor comprimata intr-un singur octet. Daca definiți o coloana CHARACTER cu acest atribut, datele se vor comprima automat la stocare şi se vor decomprima vând vor fi regăsite din coloana.

45

Page 46: curs DPW.docx

De asemenea, se pot defini coloane MEMO pentru a stoca date intr-un format comprimat. Cu toate acestea, exista o limitare. Se vor comprima doar instanțele coloanelor MEMO care, atunci când sunt comprimate, se încadrează în 4096 de octeți sau mai puțin.

Instrucțiunea CREATE INDEXCreează un index nou pe un tabel existent.SintaxaCREATE [ UNIQUE ] INDEX indexON tabel (câmp [ASC|DESC][, câmp [ASC|DESC], ...])[WITH { PRIMARY | DISALLOW NULL | IGNORE NULL }]Instrucțiunea CREATE INDEX are aceste părţi:

Parte Descriere

index Numele indexului ce se vă crea.

tabel Numele tabelului existent care vă conține indexul.

câmp Numele câmpului sau câmpurilor care se vor indexa. Pentru a crea un index câmp unic, listați numele câmpului în paranteze în continuarea numelui tabelului. Pentru a crea un index multi-camp, listați numele fiecărui câmp care vă fi inclus în index. Pentru a crea indexuri descendente, utilizați cuvântul rezervat DESC; în caz contrar, indexurile sunt presupuse a fi ascendente.

Pentru a interzice valori dublate în câmpul sau câmpurile indexate din diferite înregistrări, utilizați cuvântul rezervat UNIQUE.În clauza WITH opţională se pot impune reguli de validare a datelor.

Sa interziceți intrările Null în câmpul sau câmpurile indexate ale înregistrărilor noi utilizând opțiunea DISALLOW NULL.

Sa interziceți includerea în index a înregistrărilor cu valori Null din câmpul sau câmpurile indexate utilizând opțiunea IGNORE NULL.

Sa desemnați câmpul sau câmpurile indexate drept cheie primara utilizând cuvântul rezervat PRIMARY. Aceasta presupune unicitatea cheii, astfel încât se poate omite cuvântul rezervat UNIQUE.

Se poate utiliza CREATE INDEX pentru a crea un pseudo index pe un tabel legat într-osursa de date ODBC, cum ar fi Microsoft SQL Server, care nu are deja un index. Nu aveți nevoie de permisiune sau acces la serverul la distanta pentru a crea un pseudo index, iar baza de date la distanta nu are cunoștința şi nu este afectata de pseudo index. Se utilizează aceeași sintaxa atât pentru tabelele legate cat şi pentru cele native. Crearea unui pseudo-index pe un tabel care în mod obișnuit ar fi doar în citire poate fi deosebit de utila.

De asemenea, se poate utiliza instrucțiunea ALTER TABLE pentru a adaugă un index câmp unic sau multi-camp unui tabel şi se poate utiliza instrucțiunea ALTER TABLE sau instrucțiunea DROP pentru a elimina un index creat cu ALTER TABLE sau CREATE INDEX.

Nu utilizați cuvântul rezervat PRIMARY la crearea unui index nou pe un tabel care are deja o cheie primara; daca faceți aceasta, vă apărea o eroare.

Instrucțiunea ALTER TABLEModifica proiectarea unui tabel după ce acesta a fost creat prin instrucțiunea CREATE

TABLE.Motorul de baze de date Microsoft Access nu accepta utilizarea ALTER TABLE sau a

oricărei instrucțiuni de limbaj pentru definiție de date cu baze de date non-Microsoft Access. Utilizați în schimb metodele Creare DAO.SintaxaALTER TABLE tabel {ADD {COLUMN tip de câmp[(dimensiune)] [NOT NULL] [CONSTRAINT index] |ALTER COLUMN tip de câmp[(dimensiune)] |CONSTRAINT indexmulticamp} |DROP {COLUMN câmp I CONSTRAINT numeindex} }Instrucțiunea ALTER TABLE are trei părţi:

Parte Descriere

tabel Numele tabelului care se vă modifica.

câmp Numele câmpului care se vă adaugă sau se vă șterge din tabel. Sau

46

Page 47: curs DPW.docx

numele câmpului care se vă modifica în tabel.

tip Tipul de date din câmp.

dimensiune Dimensiunea câmpului în caractere (doar câmpuri Text şi Binare).

index Indexul pentru câmp.

indexmulticamp

Definiția unui index cu mai multe câmpuri care se vă adaugă în tabel.

numeindex Numele indexului cu mai multe câmpuri care se vă elimina.

Utilizând instrucțiunea ALTER TABLE se poate modifica un tabel existent în mai multe modalităţi. Aveți posibilitatea sa:

Utiliza ADD COLUMN pentru a adaugă un câmp nou tabelului. Specificați numele câmpului, tipul de date şi (pentru câmpurile Text şi Binare) o dimensiune opţională. De exemplu, următoarea instrucțiune adaugă un câmp Text de 25 de caractere numit Note la tabelul Angajati:

ALTER TABLE Employees ADD COLUMN Notes TEXT(25)De asemenea, se poate defini un index pe acel câmp. Daca specificați NOT NULL pentru un câmp atunci vor fi necesare înregistrări noi

pentru a avea date valide în acel câmp.Utilizați ALTER COLUMN pentru a modifica tipul de date al unui câmp existent.

Specificați numele câmpului, noul tip de date şi o dimensiune opţională pentru câmpurile Text şi Binare. De exemplu, următoarea instrucțiune modifica tipul de date al unui câmp din tabelul Angajati numit CodPostal (definit inițial ca Întreg) intr-un câmp Text de 10 caractere:

ALTER TABLE Angajati ALTER COLUMN CodPostal TEXT(10) Utilizați ADD CONSTRAINT pentru a adaugă un index cu mai multe câmpuri. Utilizați DROP COLUMN pentru a șterge un câmp. Specificați doar numele

câmpului. Utilizați DROP CONSTRAINT pentru a șterge un index cu mai multe câmpuri.

Specificați doar numele indexului urmând cuvântul rezervat CONSTRAINT. Nu se poate adaugă sau șterge mai mult de un câmp sau index dîntr-odata. Se poate utiliza instrucțiunea CREATE INDEX pentru a adaugă un index cu un

singur câmp sau cu mai multe câmpuri intr-un tabel şi se poate utiliza instrucțiunea ALTER TABLE sau DROP pentru a șterge un index creat cu ALTER TABLE sau CREATE INDEX. Se poate utiliza NOT NULL pe un singur câmp sau în cadrul unei clauze numite CONSTRAINT care se aplica sau unui singur câmp sau unui câmp multiplu numit CONSTRAINT. Cu toate acestea, se poate aplica restricția NOT NULL unui câmp doar o data. Încercarea de a aplica aceasta restricție de mai multe ori are drept rezultat o eroare în timpul execuției.

Instrucțiunea DROPȘterge un tabel, o procedura sau o vizualizare existenta, dîntr-obaza de date, sau

șterge un index existent, dintr-un tabel.Motorul pentru baze de date Microsoft Access nu accepta utilizarea DROP sau a

oricăror instrucțiuni LDD, cu baze de date cu motor baza de date non-Microsoft Access. Utilizați metoda de ștergere DAO în schimb.Sintaxa

DROP {TABLE tabel | INDEX index ON tabel | PROCEDURE procedura | VIEW vizualizare}Instrucțiunea DROP are aceste părţi:

Parte Descriere

tabel Numele tabelului care se șterge sau a tabelului din care se șterge un index.

procedura Numele procedurii care se șterge.

vizualizare

Numele vizualizării care se șterge.

index Numele indexului care se șterge din tabel.

Trebuie închis tabelul înainte de a îl șterge sau a elimina un index din el.De asemenea, se poate utiliza ALTER TABLE pentru a șterge un index dintr-un tabel.

47

Page 48: curs DPW.docx

Se poate utiliza şi CREATE TABLE pentru a crea un tabel şi CREATE INDEX sau ALTER TABLE pentru a crea un index. Pentru a modifica un tabel, utilizați ALTER TABLE.

Modulul II Spațiul World Wide Web

1. O istorie a InternetuluiInternetul s-a născut la mijlocul anilor 60 în forma ARPAnet (Advanced Research

Projects Agency Net) - o reţea între mai multe computere din unele instituţii americane, ce lucrau pentru ARPA, un departament de cercetare din cadrul Pentagonului. ARPA a fost pus în funcţiune ca reacţie la succesul sovietic al lansării satelitului Sputnik în spaţiu în 1957. Unul din obiectivele ARPAnet era crearea unei reţele, care să nu fie distrusă datorită atacurilor asupra sistemului. Războiul Rece fiind la apogeu, scenariul unui dezastru era considerat fie lansarea unei bombe fie un atac nuclear.

De aici a rezultat un proiect de reţea, unde reţeaua însăşi era permanent în pericol de atac. În consecinţă:- doar un minimum de informaţii era cerut de la computerele client în reţea - oricând transmisia de date întâlnea un obstacol, sau una dintre adrese era de negăsit, se găsea o altă cale către adresa căutată.

Toate acestea au fost codificate într-un protocol care reglementa transmisia de date pe Internet. În forma sa finală, acesta era TCP/IP (Transmission Control Protocol / Internet protocol), care este şi acum baza Internetului. TCP/IP face posibil ca modele diferite de calculatoare, de exemplu cele compatibile IBM, cele compatibile Mac, folosind sisteme de operare diferite: UNIX, Windows, MacOS etc. să se "înţeleagă" unele cu altele. În acest fel, Internetul era şi este cu adevărat o platformă independentă.

Internet-ul "civil" a început ca o reţea de patru computere între Universităţile din Utah, Santa Barbara, Los Angeles şi Institutul de Cercetare din Stanford. În curând, cercetători din alte instituţii de stat au devenit interesaţi. Deoarece folosirea computerelor era costisitoare, ei au văzut imediat avantajele folosirii în comun a unei reţele.

48

Page 49: curs DPW.docx

La sfârşitul anilor 60 şi începutul anilor 70, când Internetul număra în jur de 50 de computere, s-au dezvoltat primele servicii, folosite încă şi azi pentru transferul informaţiei:- File Transfer Protocol pentru trimiterea şi regăsirea fişierelor - Telnet pentru accesarea şi folosirea bazelor de date, a bibliotecilor şi a cataloagelor din toată lumea - E-Mail pentru trimiterea mesajelor personale. Internetul era în mod categoric în ascendenţă. Cu noi grupuri de utilizatori care se alăturau, în următoarea decadă, Internetul a crescut la o reţea de 200 de computere. Partea militară era organizată într-o reţea separată, Milnet.

În acelaşi timp au apărut alte reţele, mai ales în sectorul academic. Importantă printre acestea era (şi este) USENET sau Users' Network, care a început în 1979, când câteva computere UNIX au fost conectate împreună. O moştenire a USENET este "Netiquette", sau regulile de comportament pe Internet. La 10 ani după ce USENET îşi începuse dezvoltarea, Internetul a crescut la 80.000 de computere. A început să fie un factor de luat în considerare în politică și, curând, expresia "Information SuperHighway" (autostrada informaţiei) a devenit uzuală. În această metaforă, Internetul era văzut ca o importantă infrastructură pentru transportul unor bunuri vitale - informaţiile.

În anii 80 şi începutul anilor 90, când Internetul era folosit doar de un număr mic de cercetători, arăta mult diferit faţă de prezent. Principalele aplicaţii erau atunci poşta electronică şi grupurile de discuţii (Newsgroups) plus diverse rutine de căutare şi mecanisme de transfer al fişierelor. Aceasta era o lume UNIX, în care toate comunicaţiile existau doar ca text sau numere, şi liniile de comandă trebuiau memorate şi tipărite.

Când poşta electronică, dar mai ales programele de căutare şi de transfer al fişierelor au trebuit să facă faţă unor cerinţe mai complexe, s-au dezvoltat noi navigatoare. Software-ul pentru fiecare trebuia să fie obţinut şi configurat separat. Folosirea fiecăruia trebuia să fie învăţată.

Pe scurt: datorită metalimbajului foarte dificil, folosirea Internetului în acea perioadă era restrânsă la un mic grup de oameni din universităţi şi institute de cercetare. Marea schimbare a început în 1989, când Tim Berners Lee de la CERN (Centrul European pentru Fizica Nucleara) din Geneva a pus bazele în 1989 dezvoltării primului prototip al World Wide Web (WWW sau 3W). Ca de obicei în istoria Internetului, scopul iniţial al WWW-ului era destul de limitat. Era destinat să fie o platformă internă de comunicaţii pentru cercetătorii din întreaga lume care lucrau pentru CERN. Sarcina principală era să asigure un sistem care să facă legătura între varietatea de platforme ale diverselor calculatoare.

Soluţia de bază era ideea de a face legătura între documente via "hipertext". Hipertext înseamnă, a marca şirurile de text sau alte obiecte şi de a le lega cu alte obiecte, care ar putea fi din punct de vedere fizic la mare distanţă de obiectul original. Când legătura este selectată, cineva poate "sări" la documentul legat. În acest fel este posibil de a lega un număr nelimitat de documente între ele într-o structură web ne-ierarhică. Pentru a putea deosebi aceste documente şi pentru a le regăsi, fiecare are o adresă unică. Aceasta este Unique Resource Locator (URL). URL-urile constau într-un protocol de transmitere (în cazul WWW-ului acesta este Hypertext Transfer Protocol - http), urmat de www (în cele mai multe cazuri) şi de domeniu (de exemplu numele serverului şi numele paginii). URL-ul este un caz particular al unei specificaţii mai ample numite URI (Uniform Resource Identifier), specificaţie a aceluiaşi W3C.

Prima versiune a programelor pentru a naviga pe www, aşa numitele "browsere" urmau încă tradiţia originală a Internetului - erau numai text. De aceea, sistemul a rămas, în principiu, neprietenos cu utilizatorii. În septembrie 1992 nu existau mai mult de 20 de servere web în întreaga lume. Schimbarea radicală s-a produs când NCSA (National Center for Supercomputing Applications) din SUA a scos "Mosaic" - Browser în 1993, care era bazat pe o interfaţă grafică (Windows). Enorma creştere a web-ului a început virtual, dintr-o dată: În iunie 1993, 130 servere Web erau înregistrate, în 1994 erau deja 11.576 servere.

Dar web-ul nu a făcut doar să se dezvolte ci și posibilităţile de a prezenta datele au crescut dramatic. Curând au apărut poze şi animaţii pe situri web, urmate de sunete . Doar un mic pas mai era necesar pentru a aduce cataloage, directoare şi formulare de comandă pe situri web. Astfel, câţiva ani mai târziu s-a născut E-Commerce.

49

Page 50: curs DPW.docx

1.1. Adrese internetÎnainte de a prezenta conceptul de adresă internet, trebuie precizat că o pagina web

este un fişier în format HTML, iar mai multe pagini web care se referă la acelaşi subiect şi sunt stocate în aceeaşi locaţie formează un sit internet (denumirea corectă a uzualului site).

Vorbim deci de situl web Ministerului Educației, care conţine printre altele pagina cu informaţii referitoare la examene, pagina cu informaţii despre evenimentele curente, pagina cu date de contact ş.a.m.d.

Fiecare sit are o pagină principală (home sau acasă), fişierul corespunzător fiind index.html. Această pagină este cea care se încarcă la apelarea prin browser a sitului şi de unde putem naviga spre restul paginilor.

Există extrem de multe criterii pe care se pot împărți site-urile. În funcție de domeniul lor, de funcționalitate, de dimensiuni, etc. Iată o astfel de împărțire:

1. Site de prezentareSite-urile de prezentare reprezintă majoritatea pe internet. Acestea fac prezentarea

unei firme, companii, produs sau idei. Sunt site-uri cu dimensiune redusă în care de obicei firma își prezintă avantajele și serviciile permițând navigatorului intrarea în contact cu ei printr-un formular de contact sau informații cu privire la sediul unde poate fi găsită firma, eventual telefon sau email. 2. Site cu vânzări online (e-commerce)

Aceste site-uri fac o diferență remarcabilă față de cele de prezentare, proprietarul unui asemenea site putând efectua vânzări online. Principalele elemente componente ale unei activităţi de comerţ electronic desfăşurat prin Internet sunt următoarele: a) comerciantul, acceptatorul său şi situl (website) comerciantului pe Internet; b) cumpărătorul plătitor cu card, calculatorul său personal, portofelul său electronic şi emitentul cardului; c) telecomunicaţiile sigure între cumpărător şi sit, şi între sit şi acceptatorul comerciantului; d) aplicaţia de eComerţ a acceptatorului, distribuită, cu un modul client în situl comerciantului şi un modul server în SMC-ul acceptatorului, şi poarta de acces la Internet (gateway); e) serverul din Internet care asigură găzduirea siturilor de comerciant şi legăturile cu SMC-urile acceptatorilor (sau ale procesatorilor independenţi adoptaţi de aceştia); f) riscurile, fraudele şi disputele; g) protocoalele de autentificare care asigură securitatea sporită a tranzacţiei; h) costul tranzacţiilor şi microplăţile;

i) pieţele electronice, licitaţiile.3. Site cu interacțiune.

În această categorie vom include site-urile care oferă clienților informații din baze de date, forum sau orice altă soluție care aduce un plus interacțiunii dintre navigator și compania proprietară a site-ului. Un site interacțiune ofera navigatorului soluții reale la probleme sale, oferindu-i acestuia senzația de siguranță în privința problemelor sale.

Un site internet este stocat pe un server şi are o adresă unică, întocmai ca adresa poştală. Un server stochează de obicei mai multe situri. Putem considera următoarea analogie: blocul în care locuiţi este serverul, apartamentul este situl şi fiecare cameră reprezintă câte o pagină.

Adresa unui sit este formată dintr-un şir de patru grupe de numere cu valori între 0 şi 255, despărţite prin punct, care se numesc IP (ex: 192.168.0.1). Pentru a fi mai uşor de reţinut şi utilizat, adresele internet au nume de forma http://www.google.com. Aceste nume sunt de fapt conectate la adresele reale (IP). Există servere specializate, numite DNS (domain name server) care au liste de asociere între adresele reale şi numele paginilor, ca în tabelul de exemple de mai jos:

Nume Adresă realăwww.google.com 64.233.167.99www.yahoo.com 66.94.234.13

Scriind deci în browser www.google.ro, acestă „întreabă” serverul DNS la care are acces care este adresa reală şi apoi deschide fişierul index.html aflat la această adresă.

50

Page 51: curs DPW.docx

Forma numelor de adrese are 4 secţiuni distincte. Pentru exemplificare, vom consiera două adrese – http://www.google.ro şi ftp://roedu.net unde putem identifica cele patru secţiuni astfel:

http:// respectiv ftp:// - protocolul utilizatIn primul caz este vorba de simplă navigare pe când în cazul al doilea, pregătim un

transfer de fişiere între calculatorul local şi server. în utilizarea curentă, protocolul http poate lipsi. Dacă adresa este trecută www.google.ro , browserul presupune că este prin protocolul http.

www – serviciul internetEste prezent doar în primul caz, fiind un serviciu ce funţionează doar pe protocolul

http. Poate apărea şi sub altă formă (de ex www3) sau în unele cazuri, în funcţie de construcţia sit-ului poate lipsi. În anumite cazuri, un sit poate încărca un conţinut prin serviciul www şi un alt conţinut în lipsa acestuia.

google respectiv roeduSunt numele propriu-zise ale site-urilor, date de creatorii lor..ro , . eduReprezintă domeniul în care este activ sit-ul. Domeniile sunt utilizate pentru

clasificarea sit-urilor pe criterii geografice sau funcţionale. În funcţie de criteriul geografic, fiecare ţară are domeniul propriu: .ro = Romania, .us= Statele Unite, .de=Germania (Deutschland). Uniunea Europeană are din 2006 domeniul .eu.

În funcţie de criteriul funcţional, există mai multe domenii:.com / .biz – Situri comerciale, ale unor firme, întreprinderi.

.org – situri ale unor organizaţii non-profit

.edu – situri educaţionale

.gov – situri guvernamentale

.info – situri informaţionale

Fiecare combinaţie nume & domeniu (uab.ro, roedu.net, google.com) trebuie să fie unică şi este reglementată de o autoritate competentă (pentru .ro este RNC –Reţeaua Naţională de Calculatoare). Aceste nume de domenii pot fi cumpărate, vândute şi se supun unor legi speciale. Interesantă în acest sens este legea anti-speculaţii. În anii 2000 au apărut speculatori de domenii internet, persoane care cumpărau anumite domenii doar pentru a le revinde la preţuri mult mai mari. De exemplu, cine ar fi cumpărat domeniul www.orange.ro sau www.vodafone.ro înainte ca aceste firme să intre pe piaţa din România, era proprietarul lor pe viaţă şi putea să negocieze cu firmele în cauză vânzarea acestora. Legea nouă prevede însă că dacă la un anumit domeniu nu funcţionează o pagină web cu conţinut legat cu numele domeniului (de exemplu prorietarul să fie o firmă Orange care vinde portocale, sau suc de portocale), proprietarul poate pierde în instanţă dreptul asupra domeniului.

2. Modelul WebWorld Wide Web este cel mai utilizat serviciu Internet fiind dezvoltat la începutul

anilor 90. El utilizează protocul http pentru a transmite text, imagini, sunete aflate pe un server WWW oriunde în lume prin intermediul protocolului HTTP.

Aplicaţia WWW este o aplicaţie de tip client-server, în care: Utilizatorul formulează o cerere prin intermediul unui browser (aplicaţie tip

client). Cererea este expediată de către aplicaţia client (browser) pe Internet. Cererea ajunge pe severul destinaţie (serverul Web) care preia cererea prin

intermediul unei aplicaţii speciale. Serverul interpretează cererea şi formulează răspunsul (caută paginile web

solicitate, imaginile, sunetele etc.) Răspunsul este expediat prin intermediul Internetului către computerul client. Aplicaţia client recepţionează răspunsul şi îl interpretează (în fereastra browser-

ului).Exemple de servere Web: Apache, Netscape Enterprise Server, Sun Web Server,

Microsoft Internet Information Server, Stronghold, Jigsaw;World Wide Web ( sau mai pe scurt spus WWW sau Web-ul ) reflectă prin numele său

trăsăturile sale esențiale:  destinat căutării informației în întregul Internet ( world wide = în lumea întreagă); 

51

Page 52: curs DPW.docx

folosește hypertextul pentru organizarea informației ceea ce face ca aceasta să apară ca o pânzã de pãianjen ( web ) și care permite navigarea cu ușurință de la o pagină la alta. Hypertextul reprezintă o metodă de organizarea a informației în care anumite

cuvinte, marcate, sunt legate de alte documente care conțin informații adiționale despre ele. Hypermedia permite realizarea de legături similare la grafice, imagini, animație, etc.. Selecționarea unui astfel de cuvânt ( sau imagine) va avea ca efect afișarea documentului legat de cuvântul respectiv.

Web-ul reprezintă un sistem uriaș de informații legate între ele ca într-o pânză de paianjen și care se află pe calculatoare aflate în întreaga lume (situri web). Informația poate fi accesată  privind paginile web care conțin legături hypertext către alte pagini web. Aceste pagini web pot fi accesate folosind un software special numit Browser . 

2.1. Protocoale internetPentru a asigura comunicarea a două sau mai multe calculatoare într-o reţea,

acestea trebuie să folosească aceleaşi tipuri de echipamente de conectare şi aceleaşi seturi de instrucţiuni. Modalitatea în care calculatorul împarte informaţiile ce urmează a fi transmise în reţea şi paşii care sunt parcurşi pentru a se asigura securitatea şi compatibilitatea legăturii formează un protocol.

TCP (Transfer Control Protocol) este un protocol de control al transferului. Acest protocol asigură o conexiune sigură şi bidirecţională între 2 computere pe Internet. Acest protocol împreună cu protocolul IP formează suita TCP/IP utilizată la conectarea computerului personal la internet.

HTTP HTTP (HiperText Transfer Protocol, Protocolul de transfer a

HiperTextului) este protocolul de comunicaţie între un browser şi un server de Web. Acest protocol este utilizat de către serviciul Internet WWW. Este protocolul utilizat pentru navigarea propriu-zisă pe internet.

HTTP (Hyper-Text Transport Protocol) este un protocol bazat pe stiva de protocoale TCP/IP, destinat sistemelor hipermedia conlucrând în medii distribuite. HTTP a început să fie proiectat și utilizat din anul 1990, dezvoltându-se împreună cu spațiul WWW.

Prima versiune, referită ca HTTP/0.9, a reprezentat un simplu protocol de transfer de date prin Internet. Următoarea versiune, HTTP/1.0, definită de RFC 1945, a îmbunătățit transferul de mesaje, permițându-se mesaje în format MIME (Multipurpose Internet Mail Extensions), conținând meta-informații despre datele transmise și despre semantica dialogului cererilor și răspunsurilor dintre clienții și serverele Web.

A urmat HTTP/1.1 care oferea mai multe funcționalități suplimentare, precum mecanisme de căutare, adnotare și actualizare, având suport pentru URI (Uniform Resource Identifier), specificând adresele ca locație (prin URL) sau prin nume (via URN). HTTP de asemeni este utilizat ca protocol generic pentru comunicarea între agenții utilizator și porțile (gateways) către alte sisteme Internet, incluzând suport pentru protocoale ca SMTP (Simple Mail Transfer Protocol), NNTP (Network News Transfer Protocol), FTP (File Transfer Protocol), Gopher. În acest mod, HTTP permite accesul hipermedia la resurse disponibile din diverse aplicații.

Protocolul HTTP este un protocol sigur, de tip cerere/răspuns, comunicațiile decurgând peste conexiunile TCP/IP, portul standard de acces fiind portul 80.

FTP (File Transfer Protocol)Pentru vizualizarea conţinutului unor directoare de pe calculatorul aflat la distanţă şi

eventual copierea fişierelor pe calculatorul utilizatorului, trebuie folosit serviciul Internet de transfer de fişiere care se numeşte FTP, al cărui nume vine de la protocolul utilizat de acest serviciu (FTP – File Transport Protocol). Indiferent de zona geografică unde se află calculatorul la distanţă şi indiferent de sistemul de operare care este instalat pe fiecare calculator, se transferă o copie a fişierului sursă pe calculatorul destinaţie, singura condiţie care se impune este ca cele două calculatoare aflate în conexiune să recunoască protocolul FTP. Acest protocol divizează fişierul în pachete pe care apoi le transferă prin nodurile reţelei, dinspre sursă înspre destinaţie, iar apoi reface fişierul la destinaţie. Pentru ca transferul să fie mai rapid şi mai eficient, este bine să se transfere fişiere compactate. Operaţia de copiere pe calculatorul utilizatorului se numeşte downloading.

Serviciul FTP poate copia două tipuri de fişiere şi lucrează în două moduri:

52

Page 53: curs DPW.docx

mod ASCII: pentru copierea fişierelor text, caz în care fişierele sunt modificate pentru a asigura compatibilitatea dintre sursă şi destinaţie; este modul recomandat pentru fişiere cu programe sursă, fişiere document, fişiere text şi poştă electronică;

mod binar: pentru copierea fişierelor executabile de tip binar, fişiere de imagini codificate binar, baze de date sau fişiere compactate, caz în care fişierele nu vor fi modificate.

În Internet există servere speciale, publice sau private, destinate copierii de fişiere numite situri FTP. Cele publice sunt la dispoziţia oricărui utilizator fără a-i cere vreo parolă, ele sunt în general destinate copierii programelor gratuite free software din colecţii publice de programe. Aceste zone din Internet se numesc situri anonime ale sistemului FTP, pentru că utilizatorul conectat este un anonim, care pentru nume de utilizator va introduce anonymus iar în locul parolei va introduce adresa sa de poştă electronică (pentru orice eventualitate).

POP / IMAP / SMTPProtocoale folosite de serviciul de e-mail pentru interogarea directă a serverului de

mail utilizat. BrowserUn browser este un program de calculator utilizat pentru vizualizarea paginilor web.

Cele mai cunoscute browsere web sunt la ora actuală Internet Explorer (ajuns la versiunea 7), FireFox, Safari, Netscape şi Opera. De precizat este că şi un program de gestiune a fişierelor locale (gen windows explorer) poate acţiona ca un browser.

Pentru exemplificare în MyComputer, înparteasuperioară a ferestrei, în dreptul cuvântului address, la tastarea une iadrese internet (de ex. www.google.ro), se va observa deschiderea paginii web corespunzătoare.

Browserele web funcționează pe baza anumitor protocoale, care îl leagă pe utilizator de paginile web stocate (definite) pe servere web specializate. Cele mai des folosite protocoale web sunt HTTP, HTTPS și FTP.

Funcţionarea browser-uluiUn browser este alcătuit dintr-un set de programe care permite afișarea și

manevrarea informațiilor bazate pe text, imagini și sunet precum și rularea unor programe pe care siturile web și documentele le pot include (applet-uri, scripturi). Fiecare browser are o casetă de text unde utilizatorul poate introduce adresa documentului sau a sitului dorit, adresă care este unică pe lume (univocă), numită (Uniform Resource Locator sau URL). În cazul în care utilizatorul nu cunoaște adresa exactă , el poate introduce drept "cheie de căutare" o porțiune mică de text specific pe care documentul ar trebui să îl conțină. Browserul transmite acest text unor aplicații speciale din web numite motoare de căutare. Acestea caută în multitudinea de documente sau situri respectivul text, oferind apoi ca rezultat o listă de adrese care conțin textul căutat. Utilizatorului nu îi mai rămâne decât sa aleagă - eventual prin mai multe încercări - locația dorită. În realitate această listă de adrese poate fi uneori extrem de lungă, de ordinul sutelor de mii de linii sau chiar și mai lungă, caz în care este nevoie de o strategie de căutare mai exactă.

În general, documentele și paginile web pe care le afișează browserele sunt, la dorința autorilor lor, interconectate prin technologia Hipertext, care permite saltul simplu de la un document sau sit la altul, printr-o simplă apăsare pe maus.

53

Page 54: curs DPW.docx

2.2. HypermediaHypermedia este folosit ca o extensie logică a termenului hipertext în care grafica,

audio, video, text simplu şi hyperlink-uri se împletesc pentru a crea un mediu non-liniar, de informare. Acesta contrastează cu termenul mai larg multimedia, care pot fi utilizat pentru a descrie non -prezentari interactive liniare, precum şi hypermedia. Este, de asemenea, legat de un domeniu al literaturii electronice.

Proprietatea industrialăExistă două categorii de obiecte ale acesteia: creaţii intelectuale industriale şi semne

distinctive ale activităţii industriale. Convenţia de la Paris din 1883 privind protecţia proprietăţii industriale (cea mai

veche în materie şi încă în vigoare) menţionează ca fiind obiecte al proprietăţii industriale: invenţiile, modelele de utilitate, desenele şi modelele industriale, mărcile de fabrică, de comerţ şi de serviciu, numele comercial, indicaţiile de provenienţă, denumirile de origine. De asemenea, este enumerată şi aşa-numita ”represiune a concurenţei neloiale”. Autorii (din ce în ce mai mulţi) sunt de acord că acesta nu constituie un obiect distinct al proprietăţii industriale. El se regăseşte deopotrivă atât la creaţii intelectuale industriale, cât şi la semne distinctive ale activităţii industriale, constituind o acţiune prin care pot fi apărate toate drepturile de proprietate industrială purtând asupra oricăruia dintre obiectele enumerate mai sus. Cu alte cuvinte, represiunea concurenţei neloiale constituie o consecinţă a încălcării dreptului de proprietate industrială.

Faţă de data adoptării Convenţiei de la Paris din 1883, materia proprietăţii industriale s-a îmbogăţit şi cu alte obiecte. Într-o enumerare nelimitativă, sunt creaţii intelectuale industriale: invenţia, inovaţia, know-how-ul, modelele de utilitate, desenele şi modelele industriale, topografia circuitelor integrate etc., respectiv sunt semne distinctive ale activităţii industriale: mărcile (de fabrică, de comerţ sau de serviciu), indicaţii geografice (denumiri de origine şi/sau indicaţii de provenienţă), numele comercial (firma), emblema.

Noţiunea de proprietate industrială presupune două aspecte: a) instituţia juridică a proprietăţii industriale şi b) dreptul subiectiv de proprietate industrială. S-ar putea defini instituţia juridică a proprietăţii industriale ca fiind un ansamblu de

norme juridice ce reglementează raporturile sociale privitoare la creaţiile intelectuale industriale şi la semnele distinctive ale unei activităţi industriale. Din această definiţie se pot reţine următoarele elemente definitorii:

1.Proprietatea industrială este un ansamblu de norme juridice care au acelaşi obiect. Specifica acestor norme este faptul ca îşi au izvorul atât în actele normative interne, cât şi în tratatele şi convenţiile internaţionale. Legislaţiile naţionale sunt din ce în ce mai mult adoptate pe baza standardelor ce stau la baza elaborării actelor normative internaţionale.

Cât priveşte caracterul acestor norme juridice, este de subliniat apartenenţa lor la diverse ramuri de drept: dreptul civil, drept procesual civil, dreptul muncii, dreptul administrativ, dreptul financiar, dreptul penal, dreptul procesual penal etc. Dintre aceste norme, însă, prevalează normele dreptului civil.

2. Normele acestei instituţii reglementează raporturi patrimoniale dar şi raporturi personal - nepatrimoniale. Subiectele acestor raporturi sunt persoane fizice, dar şi persoane juridice.

3. Specificul raporturilor reglementate de normele proprietăţii industriale este obiectul (obiectele) la care se referă aceste raporturi: creaţiile intelectuale industriale şi semnele distinctive ale activităţii industriale. Analizând toate şi fiecare din aceste obiecte, rezultă că acestea prezintă trăsături şi caracteristici comune:

- Toate aceste obiecte sunt bunuri, în sensul juridic al termenului (sunt susceptibile de apropriere sub forma unor drepturi patrimoniale).â

- Aceste obiecte sunt transmisibile (după caz, prin licenţă sau prin cesiune).- Toate aceste obiecte sunt bunuri incorporale – nu au o substanţă materială.Dreptul de proprietate industrială nu va purta asupra unui bun material. Titularul

dreptului de proprietate asupra suportului material al operei nu este în mod necesar şi titularul dreptului de proprietate industrială.

- Aceste obiecte se caracterizează prin ubicuitate. Ubicuitatea poate fi de două feluri:

54

Page 55: curs DPW.docx

a)Ubicuitatea sub aspectul apariţiei desemnează aptitudinea acestor obiecte de a putea fi create de două sau mai multe persoane ce au lucrat în mod independent, unele de altele, în acelaşi timp (sau în perioade de timp diferite), în acelaşi loc (sau în locuri diferite).

Legiuitorul este cel care emite norme prin care să se identifice titularul dreptului de proprietate industrială (ex: sunt recunoscuţi amândoi ca titulari ai dreptului – cotitulari, sau doar unul dintre aceştia va fi recunoscut ca fiind titular al dreptului). În această din urmă ipoteză se naşte întrebarea care dintre cei doi va fi recunoscut ca fiind titularul dreptului. Există legislaţii ce stabilesc ca principiu că titular al dreptului de proprietate industrială este acela care a îndeplinit primul anumite formalităţi cerute de lege în faţa unor autorităţi stabilite de lege.

b)Ubicuitatea sub aspectul folosinţei desemnează aptitudinea obiectelor proprietăţii industriale de a putea fi folosite, chiar în integralitatea lor, de două sau mai multe persoane, independent una de alta, în acelaşi timp si in acelaşi loc sau în locuri diferite. Legiuitorul a emis norme juridice cu privire la instrumentele de transmitere a acestor obiecte ce fac posibilă folosirea concomitentă a lor de către persoane diferite, chiar în acelaşi timp. De exemplu, prin contractul de licenţă nu se transmite însuşi dreptul de proprietate industrială, cu toate prerogativele sale, ci doar posibilitatea de a folosi creaţia sau semnul distinctiv şi de către beneficiarul licenţei.

4.Termenul „industrie” („industrial”) are un înţeles convenţional (special), acesta cuprinzând nu doar industria propriu-zisă (ca ramura a economiei nationale), ci si alte domenii cum ar fi comertul, agricultura, etc. In materia proprietatii industriale notiunea de „industrie” este conceputa ca tot ceea ce presupune si este datorat muncii omului, activitatii sale asupra naturii.

Dreptul subiectiv de proprietate industrială reprezintă posibilitatea recunoscută de lege titularului acestui drept, persoană fizică sau juridică, de a folosi în mod exclusiv o creaţie intelectuală industrială sau un semn distinctiv al unei asemenea activităţi industriale.

Pot fi reţinute, ca elemente ale acestei definiţii, următoarele: a. Posibilitatea, facultatea juridică, recunoscută titularului dreptului. De regula, titularul dreptului subiectiv de proprietate industrială are şi obligaţia de a-

şi exercita aceste prerogative şi în măsura în care nu se foloseşte de dreptul său poate fi supus unor sancţiuni. De exemplu, daca titularul brevetului de invenţie nu-şi exercită dreptul său, va putea fi supus unei sancţiuni ce constă în posibilitatea, acordată printr-o procedură judecătorească, în beneficiul unor terţi ca aceştia să poată folosi şi ei acest brevet de invenţie în anumite condiţii şi aceasta chiar împotriva voinţei titularului brevetului. Interesul statului este ca oamenii (societatea) să beneficieze de obiectul brevetului de invenţie. În ceea ce priveşte mărcile, titularul dreptului asupra mărcii are şi dreptul la folosinţa mărcii respective. Potrivit Legii nr. 84/1998, dacă titularul nu foloseşte marca în mod efectiv pe teritoriul României timp de 5 ani, atunci orice terţ interesat are dreptul de a cere în justiţie decăderea titularului din drepturile asupra acelei mărci.

b. Recunoaşterea legală a acestei posibilităţi. Aceasta se poate acorda doar în urma parcurgerii unei proceduri speciale (complicate

şi îndelungate): brevetarea invenţiei, înregistrarea mărcii etc. Statul, prin organele sale specializate, emite un titlu de protecţie juridică: brevet, certificat de înregistrare.

c. Titularul dreptului. Acesta poate fi o persoană fizică sau o persoană juridică ori mai multe persoane fizice

şi/sau juridice. d. Specificul acestui drept. Acesta este dat de prerogativa folosinţei (exploatării) asupra unui bun, care este

exclusivă. Analizând conţinutul dreptului, titularii dreptului subiectiv de proprietate industrială au prerogative extrem de asemănătoare cu cele recunoscute titularilor dreptului de proprietate (în sensul clasic al termenului):

-Ius possidendi, posibilitatea de a deţine şi cunoaşte soluţia (creaţia, semnul distinctiv) si de a hotari asupra modalitatii de a o pune sau nu in lucrare.

-Ius utendi, dreptul de a folosi acel obiect pentru sine, intr-o industrie oarecare. -Ius fruendi, posibilitatea culegerii fructelor ca urmare a folosirii creaţiei sau a

semnului distinctiv de către terţele persoane beneficiare ale unei licenţe pentru care se plăteşte o remuneraţie – redevenţa.

-Ius abutendi, posibilitatea de a exercita dispozitia juridica, prin cesiunea totala sau partiala a dreptului subiectiv de proprietate industriala. In aceasta materie nu exista dispoziţia materială, intrucat nu se poate distruge un bun incorporal.

55

Page 56: curs DPW.docx

e. Definitia dreptului subiectiv de porprietate industriala include si termenul de industrie, industrial. Acesta are acelasi inteles larg pe care l-am folosit atunci cand am analizat institutia juridica a proprietatii industriale.

Caracterele juridice ale dreptului subiectiv de proprietate industrială: a. Drept absolut – opozabil erga omnes. Există obligaţia generală şi negativă a

tuturor celorlalte subiecte de drept de a nu face nimic de natură a stânjeni pe titularul acestui drept. Cele mai specifice mijloace de aparare a titularului dreptului de proprietate industriala impotriva atingerii aduse dreptului de oricare dintre cei care, alcatuind subiectul pasiv general, nu isi respecta obligatia de a nu face sunt actiunea in contrafacere si actiunea in concurenta neloiala.

b. Drept patrimonial – permite titularului sa se foloseasca pentru sine de un bun incorporal, sa ii culeaga fructele civile si sa il instraineze contra unui pret.

c. Drept transmisibil – permite titularului sa transmita dreptul de folosinta exclusiva in intregul sau sau numai unele dintre prerogativele dreptului sau. Mijloacele specifice prin care se realizeaza transmiterea, in tot sau in parte, a dreptului subiectiv de proprietate industriala sunt contractul de cesiune si contractul de licenta.

d. Drept, in principiu, temporar, in sensul ca, in principiu, nu este recunoscut nelimitat în timp ci doar, de exemplu, pe o perioadã de 10 ani (mãrci) sau 20 de ani (invenþii). In unele cazuri exista posibilitatea reînnoirii. Titularul dreptului deþine doar temporar monopolul asupra obiectului dreptului, acest lucru fiind absolut necesar. În materie de semne distinctive dreptul este doar în principiu temporar, deoarece, de exemplu, în materie de mãrci termenul de 10 ani poate fi prelungit de nenumãrate ori (fãrã limitã) cu alte termene ulterioare de 10 ani (cu o anumitã procedurã şi plata unor taxe).

e. Dreptul, în principiu, este teritorial, fiind recunoscut doar de cãtre acel stat ce a acordat titlul de protecþie prin care se recunoşte acest drept. Însã statele au încheiat anumite acorduri prin care se faciliteazã obþinerea titlurilor de protectie pe teritoriul altor state, fara a se parcurge procedura de inregistrare prevazuta de legislatia fiecarui stat in care dreptul este recunoscut. Natura juridicã a dreptului subiectiv de proprietate industrialã: Dreptul de proprietate industrialã este un drept real ce poartã asupra unui bun incorporal fiind destinat utilizãrii în industrie. Importanþa identificarii naturii juridice a dreptului subiectiv de proprietate industriala este datã de necesitatea stabilirii regimului juridic aplicabil. În ipoteza în care reglementãrile existente în materie sunt insuficiente pentru soluþionarea unei probleme, devin aplicabile principiile din materia drepturilor reale si, in special, cele din materia dreptului de proprietate (in sensul clasic al cuvantului), care constituie dreptul comun si pentru materia dreptului subiectiv de proprietate industriala.

Elementele componente ale comerţului electronic Vom face aici o scurtă descriere a principalelor elemente conceptuale componente

ale comerţului electronic, iar în capitolele următoare vom detalia elementele mai importante legate de riscuri, fraude şi securitate. Nu toate elementele componente se află în toate sistemele de eComerţ.

Principalele elemente componente ale unei activităţi de comerţ electronic desfăşurat prin Internet sunt următoarele:

a) comerciantul, acceptatorul său şi situl (website) comerciantului pe Internet; b) cumpărătorul plătitor cu card, calculatorul său personal, portofelul său electronic şi

emitentul cardului; c) telecomunicaţiile sigure între cumpărător şi sit, şi între sit şi acceptatorul

comerciantului; d) aplicaţia de eComerţ a acceptatorului, distribuită, cu un modul client în situl

comerciantului şi un modul server în SMC-ul acceptatorului, şi poarta de acces la Internet (gateway);

e) serverul din Internet care asigură găzduirea siturilor de comerciant şi legăturile cu SMC-urile acceptatorilor (sau ale procesatorilor independenţi adoptaţi de aceştia);

f) riscurile, fraudele şi disputele; g) protocoalele de autentificare care asigură securitatea sporită a tranzacţiei; h) costul tranzacţiilor şi microplăţile; i) pieţele electronice, licitaţiile.

2.3. HTMLHTML (HiperText Markup Language, Limbajul de Marcare a HiperTextului)

este limbajul în care sunt scrise paginile web. HiperTextul este un text îmbogăţit, un text care conţine marcaje speciale denumite taguri care permit încapsularea altor tipuri de

56

Page 57: curs DPW.docx

informaţie: imagini, sunete, filme etc. Aceste marcaje sunt interpretate de browser care afişează conţinutul corespunzător.

Un istoric al Limbajului HTMLPrimele specificații de baza ale Web-ului au fost HTML, HTTP si URL.HTML a fost dezvoltat inițial de Tim Berners-Lee la CERN în 1989. HTML a fost văzut

ca o posibilitate pentru fizicienii care utilizează computere diferite și schimbă între ei informație utilizând Internetul. Erau prin urmare necesare câteva trăsături: Independența de platformă, posibilități hypertext și structurarea documentelor. Independența de platformă înseamnă că un document poate fi afișat în mod asemănător de computere diferite (deci cu font, grafică și culori diferite), lucru vital pentru o audiență atât de variată. Hipertext înseamnă că orice cuvânt, frază, imagine sau alt element al documentului văzut de un utilizator (client) poate face referință la un alt document, ceea ce ușurează mult navigarea între multiple documente sau chiar în interiorul aceluiași document. Structurarea riguroasă a documentelor permite convertirea acestora dintr-un format în altul, precum și interogarea unor baze de date formate din aceste documente.

SGML și HTMLTim Berners-Lee a utilizat ca model SGML (Standard Generalized Markup Language),

un standard internațional în plină dezvoltare. SGML avea avantajul unei structurări avansate și al independenței de platforma dar proiecterea lui a avut în vedere mai mult structura semantică a documentului decât modul de formatare. Flexibil, SGML putea fi descris ca o specificare pentru descrierea altor formate. Utilizatorii puteau creea noi formate (DTD-Document Type Definitions) care puteau fi înțelese de orice produs soft SGML pur și simplu prin citirea mai întâi a definițiilor noilor formate.

HTML este pur și simplu un DTD, deci o aplicație a SGML. În primii ani de evoluție HTML a crescut lent, în principal pentru că îi lipseau posibilitățile de a descrie publicații electronice profesionale; limbajul permitea oarece control asupra fontelor dar nu permitea inserarea graficii. În 1933, NCSA a îmbogățit limbajul pentru a permite inserarea graficii și au construit primul navigator grafic, Mosaic. Au urmat apoi contribuții ad hoc ale diverselor firme care au adus adăugiri limbajului HTML (adăugiri și nu îmbogățiri pentru că unele taguri nu erau în conformitate cu principiile generale ale SGML ) astfel încât, prin 1994 limbajul părea scăpat de sub control. Urmarea a fost că la prima conferință WWW din Geneva ( Elveția ) s-a construit un grup ( HTML Working Group ) a cărui prima misiune a fost formalizarea HTML într-un DTD al SGML, lucru care s-a concretizat în HTML Level 2 ( sau HTML 2.0; Nivelul 1, deci HTML 1.0, a fost proiectat de Tim Berners-Lee ). Importanța acțiunii acestui grup constă în faptul că, odată standardizat, limbajul poate fi apoi extins într-un mod mai controlat la alte nivele.

World Wide Web ConsortiumStandardul oficial HTML este World Wide Web Consortium (W3C), care este afiliat la

Internet Engineering Task Force (IETF). W3C a enunțat câteva versiuni ale specificației HTML, printre care și HTML 2.0, HTML 3.0, HTML 3.2, HTML 4.0 și, cel mai recent, HTML 4.01. În același timp, autorii de browsere, cum ar fi Netscape și Microsoft, au dezvoltat adesea propriile “extensii” HTML în afara procesului standard și le-au încorporat în browserele lor. În unele cazuri, cum ar fi tagul Netscape, aceste extensii au devenit standarde adoptate de autorii de browsere.

HTML 2.0, elaborat în iunie 1994, este standardul pe care ar trebui să-l suporte toate browserele curente – inclusiv cele mod text. HTML 2.0 reflectă concepția originală a HTML- un limbaj de marcare independent de obiectele existente pentru așezarea lor în pagină, în loc de a specifica exact cum ar trebui să arate acestea.

Specificația HTML3.0, enunțată în 1995, a încercat să dezvolte HTML2.0 prin adăugarea unor facilități precum tabelele și un mai mare control asupra textului din jurul imaginilor. Deși unele din noutatile HTML 3.0 erau deja folosite de autorii de browsere, multe nu erau încă folosite. În unele cazuri, taguri asemănătoare implementate de autorii de browsere au devenit mai răspândite decât tagurile “oficiale”. Specificația HTML 3.0 acum a expirat, deci nu mai este un standard oficial. În mai 1996, W3C a scos pe piață specificația HTML 3.2, care era proiectată să reflecte și să standardizeze practicile acceptate la scară largă. Deci, HTML 3.2 include tagurile HTML 3.0 ce erau adoptate de autorii de browsere ca Netscape și Microsoft plus extensii HTML răspândite. În bilanțul asupra HTML, W3C recomandă ca providerii de informații să utilizeze specificația HTML 3.2.

57

Page 58: curs DPW.docx

Versiunile curente ale majorității browserelor ar trebui să suporte toate, sau aproape toate aceste taguri.

În prezent, HTML 4.0 este mai puțin utilizat fiind deja publicate specificațiile HTML 4.01. Documente HTML sunt documente în format ASCII și prin urmare pot fi create cu orice editor de texte. Au fost însă dezvoltate editoare specializate care permit editarea într-un fel de WYSIWYG deși nu se poate vorbi de WYSIWYG atâta vreme cât navigatoarele afișează același document oarecum diferit, în funcție de platforma pe care rulează. Evident conversiile nu pot păstra decât parțial formatările anterioare deoarece limbajul HTML este încă incomplet.

2.4. XMLCaracteristici

XML este acronimul de la EXtensible Markup Language (meta-limbaj de adnotare/marcare);

XML este un limbaj de marcare destul de asemănător cu HTML; XML a fost proiectat pentru a descrie datele; Etichetele XML nu sunt predefinite în XML; XML este auto-descriptiv; XML folosește  DTD (Definirea Tipului de Document) pentru descrierea formală a

datelor. XML și HTML au fost proiectate în scopuri diferite:

XML a fost conceput pentru a descrie datele și pentru a se focaliza pe ceea ce reprezintă datele; 

HTML a fost conceput pentru a afișa datele și pentru a se focaliza asupra modului în care arată datele;

HTML este despre afișarea datelor, XML este despre descrierea informației.   XML este extensibil. Etichetele folosite pentru marcarea documenteleor și structurii

documentelor  HTML sunt predefinite.  Autorul documentelor HTML poate folosi doar etichete ce au fost definite  în  HTML standard. XML permite autorului să ăși definească propriile etichete și propria structură a documentului.

În ceea ce privește evoluția viitoare a limbajului a fost surprinzător să vedem cât de repede a evoluat standardul XML, și cât de repede a fost adoptat acesta de către un mare număr de comercianți de software. XML va fi la fel de important pentru viitorul Web-ului precum a fost HTML-ul pentru constituirea bazelor acestuia. XML reprezintă viitorul tuturor transmisiilor și manipulărilor de date în cadrul Web.

XML poate stoca date separat de HTML, la interiorul documentelor  HTML, putând fi folosit ca format pentru schimburi de informație. Paginile HTML sunt folosite pentru a afișa date. Datele sunt adesea stocate la interiorul paginilor HTML. Cu XML, datele pot fi acum stocate într-un fișier separat XML. În acest fel, se va putea realiza concentrarea asupra utilizării HTML-ului în vederea formatării și afișării, putând fi siguri că modificările operate în datele subadiacente nu vor aduce schimbări nici unui cod HTML.

XML poate fi utilizat pentru schimburi de date. În lumea reala, sistemele de calcul si bazele de date conțin date în format incompatibil. Una dintre cele mai solicitante provocări pentru developeri din punct de vedere al timpului necesar a fost schimbul de date între asemenea sisteme pe Internet. Convertirea datelor în XML poate reduce considerabil acest grad de complexitate și poate crea date ce pot fi citite de către diverse tipuri de aplicații. 

3. Principiul HyperText

Termenul de hypertext (text non-linear) este propus de Ted Nelson în anul 1965 şi reprezintă forma de organizare a informaţiilor interconectate într-o manieră complexă care în mod convenţional nu poate fi reprezentat pe hârtie; acesta se află la baza celui mai important serviciu al reţelei Internet, şi anume WWW (World Wide Web) care gestionează documente HTML (HyperText Markyp Language); în mod normal, indiferent de metoda de stocare, formele principale de organizare a informaţiilor sunt: organizarea liniară; organizarea ierarhică (arborescentă); organizarea asociativă (similară celei oferită de memoria umană); Documentele hipertext au o parte de conținut, o parte de organizare și o parte de prezentare.

58

Page 59: curs DPW.docx

O parte dintre avantajele hipertextului față de textul tipărit sunt: forma neliniara a hipertextului oferă capabilități eficiente de parcurgere a

conținutului; mediile electronice pot stoca o cantitate impresionantă de informații; hipertextul oferă o mai buna vizualizare a conținutului și o navigare rapidă, oricât de

complexe ar fi documentele, ținând cont de specificațiile utilizatorilor; în cadrul sistemelor hipertext, interogările, filtrările, diversele preferințe și adnotările

utilizatorilor pot fi refolosite ori de câte ori este necesar, putând fi stocate în cadrul structurii hipertext a documentelor folosite. Principalele probleme cu care se confruntă informaticienii în ceea ce privește

hipertextul sunt de natură de conversie (în general automată) a textului liniar în forma hipertext și de liniarizare a hipertextului, de proiectare (design) a documentelor hipertext, de accesare concurentă a bazelor de date hipertext în context distribuit, de construire a unor mecanisme optime pentru căutarea și interogarea inteligentă în cadrul informațiilor hipertext, de suportare a extensiilor multimedia, de prezentare a documentelor hipertext într-o forma ușor de parcurs de către utilizatori etc.

3.1. Concepte de baza Un sistem hipertext este compus din noduri (concepte) și legături (relații). Un nod

reprezintă un concept unic (o idee), putând conține orice tip de informație (text, grafică, animație, audio, video, imagini sau programe) și având asociat un tip (detaliu, propoziție, colecție, observație etc.) - o informație semantică. Nodurile sunt conectate de alte noduri prin intermediul legăturilor. Nodul sursa al unei legături se denumește referință, iar cel destinație poartă numele de referent, putând fi numite și noduri ancoră. Modalitatea de stocare a informației în cadrul nodurilor variază de la sistem la sistem, dar cele mai folosite tehnici utilizează limbajele de marcare (SGML -Standard Generalized Markup Language sau, mai nou, XML -Extensible Markup Language), standardele actuale construite pe baza acestor limbaje fiind HyTime (Hypermedia/Timebased Structuring Language), MHEG (Multimedia and Hypermedia Information Coding Expert Group), HTML (HyperText Markup Language). Avantajul major este asigurarea independenței de platforma hardware și software, formatele proprietare conducând la greutăți de navigare, căutare sau întreținere. Din moment ce nodurile pot conține informații multimedia, sistemele hipermedia trebuie să fie suficient de flexibile pentru a suporta o multitudine de formate grafice, audio și video.

Legăturile sunt conexiuni îintre noduri (sau concepte) dependente unul de altul, putând fi bidirecționale sau doar unidirecționale. Și legăturilor li se pot asocia tipuri (legătura de specificare, de elaborare, legătura membru, legătura de opoziție etc.), definind natura relației dintre noduri. Dupa Conklin, legaturile pot fi referentiale (nonierarhice, utile pentru realizarea referințelor încrucișate, ele fiind cele ce deosebesc cel mai bine hipertextul de celelalte forme de stocare a informației) sau organizaționale (denumite ierarhice sau structurale, ilustrând relațiile părinte-copil dintre noduri, folosite la organizarea nodurilor în maniera ierarhică într-o structură strictă). Legăturile organizaționale sunt esențiale pentru liniarizarea hipertextului și permit autorilor să verifice coerența structurii hipertext.

3.2. Codificarea conținutului. Standardul MIMEStandardul MIME (Multiporpose Internet Mail Extensions) definește formatul

conținutului unui mesaj e-mail pe Internet, mesaj care poate avea orice format, nu numai cel de text. El consta din două parti: corpul mesajului și header-e. Header-ele formează o colecție de perechi câmp/valoare, structurate conform RFC 822, pe când corpul mesajului este structurat conform MIME.

MOSS (MIME Object Security Services) se bazează, în cea mai mare parte, pe protocolul PEM, definit în RFC 1421. MOSS este un standard prin care se execută servicii de semnătură digitală și criptare pentru obiecte MIME. Serviciile sunt oferite prin folosirea

59

Page 60: curs DPW.docx

criptografiei capăt la capăt (end-to-end), între expeditor și destinatar, la nivel aplicație. El este mult asemănător standardului PEM.

3.3. Primii pasi in crearea unui site: 3.3.1. Cumpararea unui domeniuPrimul lucru care trebuie facut in publicarea site-ul tau pe internet este cumpararea

unui domeniu. Un domeniu este numele pe care vrei sa-l dai site-ului, un nume care sa fie cat mai relevant pentru continutul site-ului. Pentru dreptul de a folosi acest domeniu trebuie sa platesti o taxa anuala la firma care ti-a inchiriat acest domeniu. O intrebare pe care si-o pun majoritatea celor care vor sa-si achizitioneze un domeniu este ce sa-si aleaga din domeniile cu .com, .net, .org sau alte domenii legata de tara de origine.

Daca afacerea ta se ocupa cu livrarea unor produse in tara respectiva sau este o agentie de recrutare atunci ar fi mai indicat sa se utilizeze domeniu specific tarii. Daca afacerea ta necesita o audienta internationala atunci cel mai ideal domeniu ar fi cel cu “.com”. Puterea acestui domeniu este determinata si de algoritmii de localizare a siteurilor de catre browser care cauta initial pe cele terminate cu “.com”. Daca nu mai exista domeniul dorit la .com mai exista doua posibilitati: “.net” imediat urmator ca importanta dupa “.com” si “.org” ce este folosit pentru afacerile nonprofit.

Trebuie mentionat ca in urma acestui pas dispunem doar de un nume, fara un site functional

3.3.2. Alegerea unui webhostUn webhost este o companie ce dispune de multe servere conectate la internet.

Atunci cand paginile tale sunt pe unul din aceste servere ele vor fi publice in internet si astfel vor fi accesibile de oriunde. O problema cu webhost-urile gratuite este ca inpun adaugarea de bannere publicitare in continutul site-ului sau deschiderea unor ferestre de popup. Astfel daca site-ul este unul de bussiness ar fi ideala achizitionarea unui hosting pe bani, ce va oferi suport, banda de transfer mai mare, spatiu pentru storarea site-ului mai mare

3.3.3. Construirea paginilor webPentru construirea unui pagini web este nevoie de cunostiinte de HTML, JavaScript,

PHP. Totodata continutul trebuie sa fie cat mai vizibil pentru engine-urile de cautare (gen Google) si cat mai usor de citit si inteles. Pe internet se gasesc o multime de sfaturi pentru crearea unui site astfel ca nu vom acoperi aceasta problema aici.

3.3.4. Testarea site-uluiCum in ultimul timp internetul s-a dezvoltat foarte mult au aparut cativa clienti de

internet (browser) folositi in procente destul de mari de catre utilizatori. Astfel pe primul loc in utilizare se afla Internet Explorer, apoi Firefox , Opera si Mozzila, restul de browsere fiind folosite in procente mici si nu reprezinta un interes prea mare pentru un dezvoltator web. Ca urmare site-ul trebuie sa arate la fel pe cel putin primele 3 dintre cele enumerate mai sus. Totodata se pot intampla erori de scriere a paginilor web, ce nu respecta standardul HTML sau link-uri nereale, astfel este necesara utilizarea unui validator pentru remedierea greselilor:

3.3.5. Realizarea unui profit financiar de pe urma site-uluiSunt doua mari posibilitati pentru obtinera unui profit:

Publicarea de banere publicitare Vanzarea unor produse

Desi fiecare site poate afisa banere publicitare, numai cele cunoscute sunt contactate de catre firme ce vor sa-si faca publicitate prin intermediul site-ului tau si sunt dispuse sa ofere o anumita suma pentru aceasta. Acest lucru este posibil si pentru site-urile nu prea cunoscute.

Astfel trebuie ca site-ul sa se afilieze la diverse site-uri sau printr-un intermediar de unde poti sa selectezi o varietate de firme ce vor sa-si faca publicitate.

Exista diferite modalitati de plata din partea companiilor: plata pe numarul de incarcari (5E la 1000 incarcari), plata pe numarul de click-uri (este mai mare decat prima) pe linkurile banerelor, sau plata pe numarul de articole cumparate de utilizatorii site-ului de la firmele care detin bannerele.

Pentru a fi afiliat la o retea sau la un anumit site trebuie sa se completeze un formular si in functie de anumiti factori site-ul va fi acceptat sau nu. Pentru un profit bun site-ul trebuie sa posteze banere publicitare ale firmelor cu interes pentru vizitatori, astfel probabilitatea ca acestia sa fie interesetati este mai mare.

3.3.6. Cresterea popularitatii site-ului

60

Page 61: curs DPW.docx

Popularitatea site-ului se refera atat la numarul de utilizatori cat si pe a cata pagina a engine-urilor de cautare se afla acesta.

Atunci cand site-ul este gata trebuie trimis la engine-urile de cautare, in special Google. Aceasta se realizeaza din pagina Despre Google intrand pe linkul Adauga o legatura spre Google. Totusi daca nu sunt site-uri care sa contina linkuri catre site-ul nostru atunci Google nu va binevoi sa-l indexeze. In schimb daca sunt multe site-uri care au legaturi catre site-ul nostru, nici nu mai este nevoie de adaugare a legaturii la Google, este indexat automat.

Astfel site-ul trebuie promovat fie prin anunturi in ziare, fie prin televiziune sau prin inregistrarea la Google Adwords.

Diferente dintre un document web si unul tiparit In contrast cu un document tiparit, un document web este ceva complet diferit. In

acest caz, designerul are prea putin control asupra felului in care este afisata o pagina, intrucat acest lucru depinde in mare masura de browserul web folosit. Desi frustrant, a face o pagina web sa fie afisata la fel in diferite browsere este un lucru extraordinar, constituind o provocare pentru majoritatea webdesignerilor.

Cand creeaza un site, un webdesigner trebuie sa tina cont de urmatoarele: Varietatea browserelor Varietatea versiunilor pentru acelasi tip de browser Varietatea sistemelor de operare folosite Varietatea adancimii culorii pe monitoarele vizitatorilor Varietatea rezolutiilor alese de diversi utilizator etc.

Cu un numar atat de mare de variabile de care depinde afisarea unei pagini web, nu este posibil intotdeauna ca o pagina web sa fie afisata in mod identic pe doua calculatoare diferite. Si, asa cum am precizat si anterior, acest lucru constituie o adevarata provocare pentru webdesigneri.

In orice caz, trebuie sa tineti cont ca un site nu este facut pentru voi sau pentru seful vostru. Numai pentru ca exista o introducere facuta in Flash pe un site nu inseamna ca trebuie sa aveti si voi o introducere similara.

Un site trebuie creat in functie de publicul tinta caruia i se adreseaza. Acestia pot fi clienti sau potentiali clienti. Un bun webdesigner isi priveste rezultatul muncii prin ochii unui potential client.

De exemplu, daca concepeti un site adresat persoanelor mai in varsta, trebuie sa aveti grija sa oferiti site-ului un aspect simplu, usor de urmarit, cu fonturi putin mai mari decat de obicei.

Trebuie sa analizati cu regularitate statisticile referitoare la site pentru a vedea ce browsere sunt folosite de majoritatea vizitatorilor, ce sisteme de operare folosesc, daca folosesc platforma Javascript de la Sun, sau daca au activate anumite controale ActiveX. Pentru a obtine astfel de informatii puteti folosi fie scripturile proprii, fie inscrieti propriul site intr-unul dintre site-urile de analiza existente pe Internet (de exemplu www.trafic.ro sau www.statistics.ro).

Marimea optima a unei paginii web si optimizarea eiOptimizarea paginilor web este unul din aspectele cele mai importante ale

webdesignului. O pagina web optimizata se incarca mult mai repede pe calculatorul vizitatorului si astfel informatia ajunge mult mai repede la tinta. Paginile care se incarca greu, si aici facem referire la paginile care se incarca in mai mult de 10 secunde, sau care au o introducere facuta in Flash, pot duce la pierderea unei parti dintre vizitatori, in special a celor care nu au suficienta rabdare. Nimic nu-i impiedica sa apese unul din butoanele Back sau Close Window. Cu toate acestea, introducerile create in Flash ofera si avantaje prin faptul ca pot fi foarte atractive din punct de vedere vizual si ofera posibilitatea folosirii unor meniu interactive.

Pentru a stabili marimea optima a unei pagini web trebuie sa aveti in vedere cei patru factori care influenteaza incarcarea intr-un browser:

marimea fisierului care contine codul HTML latimea de banda a conexiunii vizitatorilor viteza procesorului serverului care gazdueiste pagina web complexitatea paginii web

Din moment ce nu puteti interveni asupra conexiunii vizitatorilor, trebuie sa va ocupati de ceilalti factori. Astfel, incercati sa gazduiti pagina web un server foarte rapid, optimizati pagina web prin “curatarea” codului HTML de elementele redundante, de grafica

61

Page 62: curs DPW.docx

excesiva, de elementele multimedia care nu sunt strict necesare etc. ceea ce va avea ca rezultat micsorarea dimensiunii fisierului sursa.

Daca este vorba despre un site care se adreseaza tuturor categoriilor de utilizatori, atunci marimea fiecarei pagini web nu trebuie sa depaseasca 75 kb. Astfel, veti avea garantia ca fiecare pagina se incarca in doar câteva secunde.

La calcularea marimii unei pagini web se iau in calcul nu numai fisierul HTML, ci si toate elementele grafice si multimedia folosite, inclusiv imaginile de fundal, inclusiv scripturile Javascript externe (fisiere cu extensia .js), inclusiv foile de stil (fisiere cu extensia .css), scripturi PHP etc.

Structura si aspectul unui siteStructura directoarelor trebuie sa fie logica si sa reflecte aspectul propriului site. Un site poate incepe ca o simpla pagina web, se poate dezvolta intr-un set de cateva

pagini, iar in timp, in functie de cat de importanta doriti sa fie prezenta voastra pe Internet, poate ajunge chiar si la sute de pagini. Coordonarea unui numar mare de pagini poate fi un lucru extrem de dificil mai ales daca nu se lucreaza intr-un mod coerent de la inceput.

Astfel, trebuie evitat amestecul tuturor fisierelor intr-un singur director, fiind necesara gruparea lor in functie de caracteristicile similare.

De exemplu, toate imaginile incluse intr-un site trebuie grupate intr-un director separat, cum ar fi imagini. Acesta, la randul sau, se poate imparti in subdirectoare cu denumiri sugestive: pictograme, butoane sau fundaluri.

In mod similar pot fi separate si fisierele de alt tip, cum ar fi cele Javascript, PHP sau ASP, care pot fi incluse in directoare cu nume sugestive.

Denumirea data unui director sau subdirector depinde numai de voi si, chiar daca este consumatoare de timp, cu siguranta va ajuta la intelegerea structurii site-ului de catre oricine va dori sa-i aduca modificari.

Referitor la aspect, trebuie tinut cont de faptul ca o pagina web incepe in coltul din stanga sus si se poate intinde oricat spre dreapta sau in jos. Acesta face sa poata fi infinit de lata si de lunga.

Este recomandabil ca o pagina sa nu necesite derulare spre dreapta, de aceea, inainte de a publica o pagina web pe Internet, trebuie testat modul in care se comporta in functie de diferite rezolutii ale monitorului. Dintre acestea, cele mai uzuale sunt:

640 x 480 (valabila pentru sistemele foarte vechi) 800 x 600 1024 x 768 1280 x 1024 1600 x 1280 Altele (valabile pentru Mac si Web TV)

Erori în web design

1. Crearea de pagini web aglomerate.O pagina web trebuie sa ofere un balans intre spatiul ocupat de informatii (text,

imagini, meniuri) si spatiul alb sau spatiul negativ (fundal, distantele dintre paragrafe si alte elemente ale paginii, locurile goale). O pagina web trebuie sa arate aerisit, usor de parcurs cu vederea, simpla. Vizitatorul trebuie sa poata citi printre randuri si sa gaseasca usor informatiile care il intereseaza. Solutia pentru a evita aceasta greseala este sa folositi “padding” si “margin” cand creati stilul paginii, pentru a spatia coloanele, paragrafele, imaginile de text, etc.

Se pare insa ca tendinta in web design-ul romanesc este exact inversa: paginile sunt aglomerate, textul este inghesuit in imagini pentru a face loc publicitatii online. Sunt greu de parcurs, obositoare si lungi.

2. Informatiile sunt greu de gasit in pagina web.

62

Page 63: curs DPW.docx

Aceasta este o greseala frecvent intalnita pe multe pagini. Vizitatorul intra pe un site cu un scop: sa se informeze. Daca in primele secunde dupa intrarea pe site el nu va gasi informatiile promise (prin titlu, prin URL, prin descrierea din pagina care face referinta la site-ul respectiv) va parasi site-ul. Simplu.

Elementele importante ale unei pagini web trebuiesc scoase in evidenta. Portiunile din text care ofera esenta informatiilor trebuiesc de asemenea scoase in evidenta.

3. Linkurile sunt greu de gasit in pagina web.Linkurile sunt cele mai importante elemente ale unei pagini din punctul de vedere al

unui vizitator. Daca acestea nu pot fi gasite usor, vizitatorul poate renunta la navigarea pe site-ul respectiv. Exista doua principii de care trebuie sa tinem cont atunci cand realizam o pagina web:

* linkurile trebuiesc deosebite de restul textului prin folosirea unei alte culori sau a sublinierii;

* trebuie evitat ca textul care nu este link sa arate ca un link (aceeasi culoare sau subliniere), altfel vizitatorul se va simti pacalit.

4. Folosirea unui format de imagine incorect.Formatele standard pentru imagini folosite pe site-urile web sunt JPEG, PNG sau GIF.

Folosirea altor formate pot duce la incarcari grele ale paginii web. Exista insa si exemple de pagini care desi folosesc aceste formate corecte, timpii de incarcare sunt foarte mari pentru imagini. Problemele sunt diverse, insa cele mai comune sunt imaginile nepregatite web (redimensionate si salvate pentru web) sau folosirea de imagini de dimensiuni improprii ca fundal pentru elementele paginii (problema ce arata lipsa de experienta a designerului in tehnicile de slicing / feliere).

5. Titlul paginii este lasat cel implicit.In Dreamweaver titlul implicit al unei pagini este “Untitled Document“. Omiterea

schimbarii titlului este o greseala de neiertat chiar si pentru cel mai neexperimentat web designer. Credeti ca nu exista designeri care sa faca aceasta greseala? Dati o cautare pe Google dupa cuvantul cheie “Untitled Document” si veti ramane surprinsi sa gasiti aproape 30 de milioane de rezultate.

6. Meniu greu de folosit sau de gasit.Exista o tendinta in web design de a ascunde meniul in elemente grafice din pagina

sau in elemente din cadrul unei imagini. Desi aceasta tendinta este interesanta din punct de vedere artistic, din punct de vedere functional nu este potrivita.

Meniul trebuie sa fie usor accesibil vizitatorului, singura optiune care se accepta la un numar mare de pagini fiind meniurile de tip “drop-down”.

7. Textul are marimea fixa.Vizitatorul ar trebui sa poata redimensiona textul dupa cum doreste. Definirea

textului ca marime in pixeli va pastra dimensiunea acestuia fixa. Solutia ar fi ca definirea sa se faca utilizand atributul EM.

8. Scopul site-ului nu este clarIn primele secunde dupa incarcarea paginii web vizitatorul trebuie sa isi dea seama

despre ce este vorba in pagina pe care a ajuns. Acest lucru poate fi obtinut prin folosirea unor titluri si subtitluri sugestive pentru paragrafe. Exista insa destule pagini web pentru care trebuie sa pierzi timp ca vizitator doar pentru a afla despre ce sunt acestea.

9. Folosirea unor culori stringenteCulorile stringente, sau combinatiile de culori nepotrivite pot obosi ochiul uman, sau

pot distrage atentia de la informatiile cu valoare din pagina web. Doua lucruri importante trebuie avute in vedere la alegerea setului de culori pentru site: combinatia trebuie sa fie placuta ochiului si sa nu utilizeze mai mult de 3 culori de baza (restul fiind doar nuante ale acestora).

10. Integrarea reclamelor in continutul paginiiReclamele si publicitatea online trebuie mentinute separat de continutul informativ

al paginii. Vizitatorul trebuie sa isi dea seama usor care sunt banerele sau zonele cu publicitate online, si care sunt imaginile sau linkurile care fac parte din continutul paginii. Amestecarea reclamelor cu continutul va deruta vizitatorul si il va face sa paraseasca site-ul.

Acestea ar fi principalele greseli facute de web designeri. Exista insa si cazuri speciale, exceptii, si acestea nu pot fi considerate greseli. Spre exemplu, site-urile de fotografie pot incarca imagini in format TIFF sau BMP din diverse motive: exemple, teste, etc. Bineinteles ca nu putem considera ca designerul a facut o greseala ce trebuie corectata.

Elemente de promovare a site-ului

63

Page 64: curs DPW.docx

Search engine optimization (SEO) este procesul de imbunatatire a volumului si calitatii traficului catre un site de la motoarele de cautare prin rezultatele cautarilor.

In mod normal, cu cat un site este plasat mai sus in rezultatele de cautare, cu atat este mai eficient si cu atat mai vizitat va fi acel site. SEO poate tinti diferite tipuri de cautare, incluzand cautari de imagini, cautari locale sau cautari specifice unei industrii.

Ca si strategie de marketing online, SEO ia in considerare modalitatea de functionare a motoarelor de cautare si a elementelor cautate de utilizatori. Optimizarea unui site vizeaza in principal editarea continutului si codului sursa a paginilor pentru a creste relevanta cuvintelor cheie si a elimina barierele in indexarea paginilor unui site de catre un motor de cautare.

PracticCum functioneaza?In optimizarea unui site pentru motoarele de cautare sunt vizate un numar de

elemente cheie.Adresele paginilorPrimul element este adresa tuturor paginilor dintr-un site. Cand citesti aceasta

pagina uita-te la adresa din bara de sus a browserului tau web.Ea ar putea fi de forma: www.12am.ro/index.php?

option=com_content&task=view&id=23&Itemid=35Aceasta este forma este generata in mod automat din structura (CMS-ul) site-ului.

Din forma acestei adrese nu se subintelege continutul unei pagini.In urma optimizarii noastre pentru motoarele de cautare, adresa are aceasta forma:

http://www.12am.ro/index.php/despre-search-engine-optimisation-seoDin forma acestei adrese este foarte simplu de subinteles continutul paginii.Acelasi procedeu se aplica si in cazul motoarelor de cautare.Meta-Descriere si Meta-Cuvinte cheieFiecare pagina din site-ul tau trebuie sa contina o Meta-Descriere si mai multe Meta-

Cuvinte cheie.Meta-Cuvintele cheie sunt informatiile cautate de Google cand verifica site-ul tau

pentru a-l introduce in lista de rezultate posibile. Meta-Descrierea este rezultatul pe care il vede un utilizator in urma cautarii folosind cuvintele cheie.

Meta-Descriere si Meta-Cuvinte cheieUtilizatorul a cautat folosind urmatoarele cuvinte cheie "web design 399 euro".

Aceste cuvinte cheie, intitulate Meta-Cuvinte cheie, sunt incluse in paginile site-ului www.12AM.ro - acesta este motivul pentru care site-ul apare ca si rezultat.

Rezultatul a fost site-ul www.12am.ro. In acest caz Meta-Descrierea este "Site-ul tau web la doar 399 Euro! O altfel de abordare a web design-ului. 12AM construieste prezente web de peste 5 ani atat national cat si...".

ImaginiUn utilizator poate cauta poze folosind google. In momentul in care utilizatorul s-a

hotarat asupra unei imagini din rezultatele prezentate de Google, acesta va da click pe ea, ajungand pe site-ul ce contine acea poza.

Aceasta este o alta sursa de trafic pe site-ul tau. Pentru a profita si de aceasta sursa, imaginile de pe site-ul tau trebuie optimizate ca atare.

Imaginile contin si ele o descriere, descriere folosita de Google pentru a afisa rezultate cand un utilizator cauta imagini. Plaseaza cursorul mouseului deasupra imaginii de mai sus si mentine-l o secunda nemiscat. Iti va fi afisat textul "Meta-Descriere si Meta-Cuvinte cheie" - aceasta este descrierea pozei de mai sus.

TOATE aceste elemente sunt luate in considerare in momentul construirii site-ului tau. Acestea sunt elementele ce vor face din site-ul tau o reusita.

SEO este metoda de a atrage trafic pe site-ul tau, fara a investi in campanii publicitare online (AdWords). Bineinteles, efectul nu este imediat, ca in cazul unei campanii publicitare platite, insa, cu cat site-ul tau este mai bine creat din aceste puncte de vedere, cu atat va ajunge mai repede pe prima pagina de rezultate afisate de Google.

Inscrierea sitului in motoare de cautare si directoare web 1. Inscrierea in motoarele de cautareMotoarele de cautare folosesc roboti pentru a indexa pagini web. Acesti roboti fie

descopera un link catre pagina ta in paginile deja indexate in baza de date, fie proceseaza lista de asteptare proprie.Inscrierea unui site web in motoarele de cautare se refera la inscrierea in aceasta lista in mod direct. Pentru fiecare motor de cautare in parte, situl trebuie inscris in aceasta lista.

64

Page 65: curs DPW.docx

Inscrierea este foarte simpla, nefiind necesara nici o alta informatie decat adresa web a primei pagini (URL-ul). Inscrierea in motoarele de cautare poate fi gratuita (in cele mai multe cazuri), cat si platita.

2. Inscrierea sitului in motorul de cautare GoogleIndexarea de catre Google este cea mai importanta. Este nevoie doar de inscrierea

primei pagini, iar Google va descoperi si celelalte pagini. Pentru a verifica daca Google a indexat deja pagina ta, tipareste in casuta de cautare propria adresa.

Reprezentantii Google au avertizat ca prefera sa descopere pagini web prin propriul robot, decat ca acestea sa fie inscrise in mod manual pe lista de asteptare. Desigur, nu se penalizeaza in nici un fel inscrierea prin propriul formular.

Google indexeaza gratuit paginile web, si nu se intrevede nici un plan pentru un program Pay-for-inclusion (inscriere platita).

3. Inscrierea sitului in motorul de cautare Hotbot / InktomiPentru a verifica daca esti deja indexat de catre HotBot, tipareste adresa ta in casuta

lor de cautare si vezi daca esti gasit printre rezultate. Deoarece HotBot foloseste baza de date a celor de la Inktomi, prezenta in baza de date a celor de la HotBot se poate realiza in mod indirect prin Inktomi.

HotBot/Inktomi nu garanteaza includerea tuturor siturilor inscrise gratuit in baza lor de date. Pentru o includere garantata se poate folosi programul Inktomi Pay-Per-Inclusion

4. Inscrierea sitului in directoare webDirectoarele web cele mai cunoscute precum DMOZ ( ODP -open directory project),

Yahoo, GoGuides, Zeal, Bluefind au criterii foarte stricte ce trebuiesc indeplinite pentru a accepta noi situri. Asigura-te ca respecti toate aceste criterii, si cererea ta de adaugare va fi acceptata.

5. De ce sunt utile directoarele web?Inainte de a discuta criterile pe baza carora un site web este acceptat sau nu intr-un

director web, as dori sa ma opresc asupra acestei intrebari. Pana la urma, de ce este importanta inscrierea in directoarele web? Este cunoscut faptul ca cea mai mare parte a traficului unui site web provine de la motoarelor de cautare si nu din directoare web.

Mai mult decat atat, de cele mai multe ori, in urma procesului de inscriere siteul tau va fi adaugat intr-o categorie ce contine deja sute de alte situri. In primul rand, directoarele web cresc semnificativ numarul linkurilor catre situl tau.

DMOZ este principala sursa pentru directorul Google cat si pentru alte cateva zeci, aducandu-ti astfel zeci sau chiar sute de linkuri. Este cunoscut faptul ca numarul si calitatea linkurilor catre o pagina web determina valoarea PageRankului. 

Prezenta unui site in acest director este garantia calitatii acelui site. Fiecare site prezent in DMOZ este verificat de catre editori specializati, ajutand semnificativ si la optimizarea pentru motoarele de cautare.

Mentenanta site-ului webPrin mentenanta intelegem actiunea periodica de actualizare a continutului site-

ului. Indiferent de cauzele care o determina, actualizarea continutului este necesara. Fie ca au intervenit modificari la datele dvs. de contact, fie ca doriti sa afisati stirile de interes pentru vizitatorii dvs. imediat ce devin disponibile, mentenanta este cea care are grija ca publicul dvs. fidel sa revina pe site in mod periodic.

Sub aspectul optimizarii unui site pentru motoarele de cautare, mentenanta este aproape obligatorie. Un motor de cautare care vede ca o anumita pagina din site este diferita fata de cea pe care a vizitat-o ultima data il face sa creada ca acea pagina se modifica mai des si o va vizita si pe viitor mai des. Daca insa nu vede nici o modificare de la o vizita la alta, o va considera ca fiind "statica" si nu o va vizita la fel de des, astfel ca de ex. o modificare facuta in scop SEO asupra paginii respective nu va fi indexata la timp si optimizarea va dura mai mult.

Parametri pentru controlul traficului generat de siteAtunci cand lucram in research, cel mai important lucru era considerat interpretarea

datelor. In prezent, instrumentele de colectare a datelor sunt mult mai evoluate decat am visat vreodata si probabil vor deveni si mai sofisticate. Problema apare atunci cand trebuiesc trase niste concluzii: multa lume uraste cifrele (si e de inteles) , sau pur si simplu nu stie cum sa “citeasca” aceste date. Daca in articole anterioare vorbeam de instrumente de trafic exterioare site-ului – evolutia cautarilor pe cuvinte cheie sau comparatii de trafic intre diferite site-uri – am sa incerc sa scriu cateva cuvinte despre datele din Google Analytics.

65

Page 66: curs DPW.docx

Google Analytics este un instrument gratuit de masurare a traficului de pe site-ul tau. Se pot masura atat elemente cantitative (nr. vizitatori, sursele din care au venit pe site, numar conversii, etc.) cat si cele calitative ( loialitate, timpul petrecut pe site, rata de conversie, paginile cele mai vizitate, etc). Fiecare dintre acesti indicatori poate fi urmarit si separat pe anumite criterii de selectie: De ex. numarul de vizitatori poate fi urmarit in functie de: ora vizitei, tara de origine, trafic platit sau nu etc.)

Ca sa fiu mai explicit, o sa iau exemplu o intrebare foarte des intalnita la care poti gasi raspunsul prin Google Analytics:Am vizitatori pe site, dar nu ma contacteaza suficienti clienti. De ce?

1. In primul rand te poti uita la indicatorii calitativi: daca ai un bounce-rate mare, inseamna ca multi oameni pleaca imediat ce au intrat – inseamna ca pagina pe care intra nu e relevanta pentru ei; daca vizitatorii vad multe pagini din site, dar nu intra pe pagina de contact, inseamna ca site-ul este folosit mai ales pentru a obtine informatii generale, ar trebui sa le dai motive pentru a te contacta (de ex. sa pui preturi, o oferta speciala, etc.); daca vizitatorii intra pe pagina de contact, dar nu te contacteaza, s-ar putea ca formularul de contact sa ceara prea multe date etc.

In al doilea rand ar trebui sa setezi in interfata de Analytics masurarea conversiilor (Goal): in cazul de mai sus, cate persoane completeaza un formular de contact. Dupa o perioada de cateva zile o sa observi ca fiecare persoana care te contacteaza este inregistrata in Analytics ca 1 conversie.

Urmatorul pas dupa setarea conversiilor este sa vezi unde este problema:  Sursa vizitatorilor: Daca ai diferite metode de promovare, poti masura eficienta

fiecareia: motoare de cautare - SEO sau legaturi sponsorizate- , emailing, bannere, bannerexchange, etc.) . Daca rata conversiilor e mica pe una dintre ele, inseamna ca aceasta campanie nu aduce rezultate.

Care produs/serviciu de pe site iti generaza conversii: Daca inainte sa te contacteze, persoana respectiva a fost pe pagina Produsului X, acesta produs genereaza cele mai multe conversii. De exemplu, daca ai un site de turism, aceasta informatie se poate dovedi foarte utila pentru a pastra numai pachetele turistice relevante.

Cuvintele cheie care iti genereaza conversii: De ex. site-ul tau ce vinde anvelope poate fi primul dupa cautarile pe “piese auto” si sa ai trafic mare datorita acestui lucru, dar sa observi ca majoritatea conversiilor vin din alte cuvinte: anvelope, cauciucuri, pneuri, anvelope iarna, Dunlop iarna, etc.

Parametri pentru evaluarea generală a unui site webSunt foarte multi parametri care trebuie luați în seamă în evaluarea siteurilor si nu

exista solutii standard de evaluare:Un factor decisiv il constituie modul in care s-a facut promovare online si

optimizare site-ului in cauza, astfel ca, in functie de categoria in care se incadreaza evaluarea lui se va face diferit si avem pentru fiecare urmatoarele aspecte de luat in calcul:

Daca detii un blog, atunci vinzi la suma de 12 X profitul lunar cand efectiv nu mai ai timp sa te ocupi de dezvoltarea lui, nu mai ai timp sa scrii articole, sa dezvolti in continuare sau cresti traficul.

Il vinzi daca scoti in jur de 50 -100 de dolari pe luna si ai un alt proiect ce ti se pare mai profitabil. Daca deja scoti 2-300 de dolari/luna, cred ca ar fi bine sa nu te gandesti la vanzarea lui, ci mai degraba la dezvoltarea lui.

Sa presupunem ca ai un forum. In acest caz treburile-s mai simple, dar forumul bine dezvoltat, cu administratori sau moderatori de calitate nu are nevoie de prezenta proprietarului 24 ore pe zi. Deci daca ai alte treburi, nu vinzi forumul, fiindca sunt oameni care sa aiba grija de el.Mai mult: un forum iti creeaza anumite nostalgii, nu cred ca il poti vinde chiar asa usor; fiindca la urma urmei forumul iti creeaza o stare aparte, ai investit mai mult decat intr-un simplu site.

Ai un site static cu trafic constant: nu-l vinzi fiindca oricum iti aduce acel venit lunar, asta in conditiile in care site-ul isi mentine traficul fara sa adaugi pagini noi, fara sa faci promovare, pur si simplu fara sa te ocupi de el.

Site + forum – asta presupun ca ar fi bun de cumparat, deoarece exista un potential fantastic de crestere, atat a site-ului propriu-zis (adaugare de pagini noi), cat mai ales a forumului.

Pentru fiecare in parte trebuie facuta o evaluare specifica fiecarui caz si ar trebui sa iti alcatuiesti un chestionar de genul celui de mai jos:

66

Page 67: curs DPW.docx

Cat de profitabil ar putea fi domeniul? Cat de mare este piata pe care o tinteste? Se refera la intreaga piata?

Un domeniu cum ar fi scobitori.ro este fara indoiala mai putin valoros decat masini.ro din simplul motiv ca piata masinilor este mult mai profitabila decat piata scobitorilor. Masinirosii.ro valoreaza mai putin decat masini.ro din moment ce se aplica unei portiuni mai mici din aceeasi industrie.

Numele de domeniu descrie continutul website-ului? Domeniul poate fi asociat cu un produs, un serviciu, un brand? Este usor brandabil?

Libraria.ro sau CreditRapid.ro au un potential de dezvoltare mare deoarece sunt termeni clari, concisi si cu valoare descriptiva mare pentru continutul unui website.

Cat de memorabil este? Vor reusi oamenii sa isi aduca aminte usor de el? Il vor recunoaste usor?

Un nume de domeniu trebuie sa fie usor de tinut minte si usor de recunoscut. Cu cat este mai usor de tinut minte cu atat pretul sau de vanzare va fi mai mare. Mai mult decat atat, este dificil sa tastezi gresit un domeniu web cu un nume bun. Stiri.ro este usor de tinut minte si usor de recunoscut, in schimb cyberwebdiscountcoupons.ro este dificil de memorat si scade considerabil valoarea.

Cat de popular este website-ul? Evaluarea domeniului trebuie sa tina cont si de criteriul popularitatii. Cu cat site-ul

este mai popular, cu atat va fi mai bine pozitionat in motoarele de cautare si astfel ii va creste valoarea de vanzare

Extensia numelui de domeniu Domeniile .com sunt cele mai valoroase la nivel international. Insa daca vrei un

website care are ca tinta in special utilizatori din Romania atunci .ro este mai valoros Cate caractere are numele de domeniu?

Valoarea unui domeniu este invers proportionala cu numarul de caractere din care este compus, cu cat mai putine caractere cu atat mai mare valoarea domeniului. Spalatoriemasini.ro (16 caractere) valoreaza mai putin decat masini.ro (6 caractere)

Cate cuvinte contine domeniul? Domeniile care contin putine cuvinte sunt mai valoroase. Domeniile formate din 1, 2

cuvinte au o valoare mare peste tot in lume inclusiv la noi, si valoarea lor va continua sa creasca odata cu epuizarea numelor de domenii disponibile (domeniile din 1 si 2 cuvinte vor deveni o raritate). Un domeniu format din 3 cuvinte este deja mult mai putin valoros.

Contine cratima? De obicei domeniile care contin cratima nu se vand foarte bine. Este foarte folositor

insa sa inregistrezi un domeniu care are liniuta daca detii si domeniul fara liniuta. Car-prices.com valoreaza mai putin decat carprices.com fie si pentru simplul fapt ca este mai dificil de tastat din cauza cratimei

Contine numere? top10.com valoreaza mai putin decat topten.com

Contine substitutii? Domeniul aman2.com valoreaza mai putin decat amandoi.com, la fel kafea.ro fata de

cafea.ro. Nimeni nu va cauta pe Google cuvantul cheie ‘kafea’ Contine abrevieri?

Domeniul dnulgoe.com valoreaza mai putin decat domnulgoe.com Venitul generat de catre website

Unul dintre cele mai semnificative criterii pentru evaluarea domeniului si cu o importanta deosebita in stabilirea pretului final. In general venitul anual adus de un website se multiplica cu 1.5 – 2.5 (pe piata din US cu 3 sau chiar mai mult) pentru a calcula pretul de vanzare a website-ului. In principiu aceasta suma se adauga sumei obtinute prin analiza celorlalti factori prezentati mai sus

Cat de dezvoltat este site-ul? E doar o pagina de prezentare sau contine cateva pagini?

Cu cat site-ul este mai dezvoltat, are un continut valoros, design atragator, multi utilizatori cu atat valoarea sa de vanzare creste

Ce alte domenii asemanatoare cu al tau s-au vandut si la ce pret?

67

Page 68: curs DPW.docx

Este foarte important sa se faca o analiza de piata in ceea ce priveste pretul domeniului. Cheia este sa poti justifica pretul cerut pentru domeniul tau bazandu-te pe pretul cu care s-au vandut alte domenii cu caracteristici asemanatoare.

Specula nu prea functioneaza pe aceasta piata decat in rare cazuri, de obicei nu poti vinde decat atunci cand ceri pretul corect. O greseala frecventa o fac proprietarii de domenii care primesc o ofera pentru un domeniu si isi inchipuie ca pot vinde cu pret dublu sau chiar triplu altor jucatori de pe piata.

Acest lucru se intampla deoarece piata de nume de domenii din Romania este inca in stadiu incipient iar transparenta pietei este scazuta, fapt ce ingreuneaza stabilirea pretului corect si incurajeaza specula. Atunci cand piata este in acest stadiu lucrurile nu au o traiectorie clara si sunt mai degraba haotice.

MODULUL III HTML

1. Descrierea generală a limbajului HTMLConceptul de HTML este un acronim, care înseamnă HyperText Markup Language.

Deşi conţine în nume cuvântul language (limbaj), nu vorbim despre un limbaj de programare ci de un limbaj descriptiv care prin marcaje speciale defineşte cum va fi afişată informaţia (structura şi elementele de formatare). Un fişier HTML este de fapt un fisier text în care structura şi elementele grafice sunt determinate de aceste marcaje, denumite taguri. Tagurile sunt interpretate de browser pentru a afişa în mod corect pagina.

Pentru că sunt fişiere text, paginile HTML pot fi scrise în orice editor de text (şi nu necesită compilare). Atenţie însă: Wordul nu este un editor de text. În Word, sau într-un program echivalent, pe lângă textul introdus, vom avea diferite informaţii despre formatare (tipul paginii, margini, culoarea scrisului) ce pot deranja formatul hmtl. Programul Notepad este mult mai recomandat pentru editarea fişierelor HTML iar programele specializate gen TopStyle, Macromedia Dreamweaver sau Ms Expession Web nu fac decât să ne sprijine în scrierea textului: numerotează liniile pentru a găsi mai repede eventuale erori, evidenţiază anumite erori de scriere, colorează cuvintele cheie pentru a fi mai uşor de găsit ş.a.m.d. În unele cazuri, aceste programe oferă un mod de lucru vizual, scriind singure codul pentru elementele adăugate şi aranjate de utilizator cu doar un clik de maus. Totuşi programele prezintă limitările lor, de unde necesitatea cunoaşterii elementelor de codificare HTML.

Fişierele realizate în limbajul HTML pot avea fie extensia .htm, fie extensia .html. Tendinţa este să se folosesasca extensia html, prima variantă fiind rămasă de pe vremea când sistemele de operare aveau probleme în a lucra cu extensii din patru litere.

Validarea documentelor HTMLFiecare document trebuie validat în vederea eliminării erorilor cum ar fi lipsa

ghilimelelor, elemente sau atribute scrise greșit și structuri invalide. Aceste erori nu sunt întotdeauna vizibile în browsere deoarece fiecare le recuperează într-un mod propriu. Validarea documentelor se poate face cu un serviciu special al W3C ce poate fi accesat la adresa http://validator.w3.org. Un validator verifică un document în ceea ce privește definiția tipului documentului (DTD) și nu siguranța legăturilor din document.

2. Crearea structurii documentelor HTML

2.1. Elementul HTMLConceptul de element HTML este la fel de important ca cel de tag HTML pentru că

este unitatea structurală de bază a unui fişier HTML şi pentru că de fapt aici are loc formatarea. La bază, elementul este alcătuit din taguri, atribute şi valori, după cum puteţi observa în figura de mai jos:

FIGURA: STRUCTURA UNUI ELEMENT HTMLUn element este o structură caracterizată prin atomicitate adică este o structură

indivizibilă, unitară. Există două tipuri de elemente, elementele înlocuibile – cum este elementul img (în locul lui în pagină va fi inserată o imgine) şi elemente care nu sunt

68

Page 69: curs DPW.docx

înlocuite ci care conţin în ele informaţia din viitoarea pagină web. Elementele sunt cuprinse între un tag de început şi un tag de sfârşit. Elementele înlocuibile (cum este img) nu au tag de sfârşit ci sunt închise doar cu semnul „/”.

Elementele au atribute, iar atributele lor au valori. În exemplul de mai sus, elementul div are un atribut class cu valoarea „first”, iar elementul img are atributele src – cu valoarea „poza.jpg” şi alt – cu valoarea „text alternativ”. Dacă un atribut este scris, trebuie să fie urmat de o valoare chiar dacă este valoarea vid. Ex: alt=””.

2.2. Structura standard a unui document html În cazul fişierelor html niciodată nu veţi vedea fereastra urât colorată a

compilatorului care te anunţă că ai ceva erori şi chiar mai multe „warning-uri”. Pornim un editor simplu - Notepad. Tastați urmatoarea secvenţă:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML>    <head> acesta are si el mai multe sub-elemente:        <title> aici se scrie titlul documentului, cat mai sugestiv, si se încheie cu </title>        <base> poate fi folosit pentru a înregistra locaţia documentului in forma url. (necesar daca documentul nu este accesat in locaţia lui originala). se încheie cu </base>        <link> indica o relaţie dintre document si alte obiecte de pe web. se încheie cu </link>        <meta>  aici sunt scrise informaţii cum ar fi tastatura (limbaj) folosita, descrierea si cuvinte cheie care pot fi găsite de motoarele de căutare. se încheie cu </meta>        <script> conţine oricare din javascript sau vb script. se încheie cu </script>        <style> conţine informaţii privind stilul, grafica informaţiilor care vor apărea pe pagina. se încheie cu </style>    aici se încheie elementele adaugate in head    </head>    <body> Buna ziua Web<b>textul e scris ingrosat</b><!-- etichetele html si continutul documentului care va fi afisat in pagina web sunt incluse in acest element. aici pot fi puse si elemente cum ar fi: <script> </script>se încheie cu -->    </body>    </html>

Observaţie: Nu lăsaţi un spaţiu după „<” pentru că browserul nu mai recunoaşte instrucţiunea.

Salvăm fişierul cu numele "prima.html". Pornim browserul şi deschidem fişierul prima.html

Elementul <ISINDEX>Tag-ul <ISINDEX> defineşte acţiuni

executate implicit în "conversaţia" client-server şi funcţionează împreună cu atributele:

ACTION="websearch" acţiunea ce va fi executată

PROMPT="şir text" mesaj opţional afişat

Ar trebui să se afişeze:

Explicarea exemplului:

Înainte de a începe observăm că avem mai multe perechi de tag-uri. Primul marchează începutul unui bloc de text iar tag-ul care începe cu „/” şi are acelaşi nume cu tag-ul de deschidere marchează terminarea blocului de text.

Primul tag dintr-un document HTML este un comentariu.

69

Page 70: curs DPW.docx

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> Acest comentariu este important pentru standardizarea documentelor html. Pentru

web-ul semantic care va urma este deosebit de importantă respectarea standardelor. Motoarele de căutare inteligente vor „şti” însemnătatea tag-urilor iar astfel rezultatele căutărilor vor fi mult mai precise. Comentariul din exemplul de mai sus specifică faptul că documentul html care urmează este scris conform standardului HTML 4.01 Transitional iar acest standard se găseşte la URN-ul

http://www.w3.org/TR/html4/loose.dtd Versiunea HTML poate fi:

HTML 4.01 Strict<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

HTML 4.01 Transitional<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

HTML 4.01 Frameset<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">

Tag-ul <html>. Acesta are rolul de a anunţa browserul că urmează un document HTML. La sfârşitul documentului avem </html> acesta atenţionând browserul ca a ajuns la sfârşitul documentului HTML.

În continuare avem doua delimitări importante ale documentului partea de head şi cea de body

Blocul de text dintre <head> şi </head> este informaţia din header. Foarte important: informaţia din cadrul header-ului nu se afişează în fereastra browserului. Ea este destinată descrierii documentului. Tag-urile <title> marchează titlul documentului și acesta va fi afişat pe fereastra browserului.

Tag-urile de <body> delimitează zona de text care va fi afişată în cadrul ferestrei browser-ului. Textul delimitat de <b> și </b> va fi afişat îngroşat. Tagul meta este folosit pentru a genera informații

adiționale motorului de cautare. Aceste informații nu vor fi vizibile unui vizitant decât dacă acesta va selecta view "Source" din meniul "View" unde va avea acces la partea HTML a paginii.

2.3. Tagurile HTML Fişierele HTML sunt fişiere text care conţin elemente HTML. Elementele HTML sunt definite cu ajutorul tag-urilor.

Tag-urile HTML • Tag-urile HTML se folosesc pentru a delimita elemente HTML; forma unui tag este

<nume_tag> • De obicei tag-urile sunt perechi: <nume_tag> bla, bla </nume_tag> • Textul delimitat de cele doua tag-uri se numeşte conţinutul elementului

Elementele HTML Revenim la exemplul dat:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <head> <title>prima pagina</title> </head> <body> Buna ziua Web <b>!!!!!!!!!!!!!!!! </b>

70

Page 71: curs DPW.docx

</body> </html>

Din acest fişier un element HTML este: <b>!!!!!!!!!!</b>

Tag-ul <b> are ca scop definirea unui element HTML care sa fie afişat bold. Un alt exemplu de element HTML:

<body> Buna ziua Web <b>!!!!!!!!!!!!</b> </body>

Tag-ul <body> defineşte un element HTML care conţine corpul documentului HTML.

Recomandare: W3C recomanda utilizarea

literelor mici în scrierea tag-urilor, aceasta fiind recomandarea pentru

standardul HTML 4. Pentru cei ce se pregătesc să scrie tag-uri conform standardului XHTML 1.0 utilizarea literelor mici este obligatorie.

Atributele tag-urilor Tag-urile pot avea atribute

<nume_tag atr> text </nume_tag>

În exemplul de mai sus atr este atributul tagului. Aceste atribute pot aduce informaţii suplimentare despre elementele HTML. Exemplu: <body bgcolor="red">. În exemplul de mai sus tag-ul <body> a primit atributul “bgcolor” adică se specifică browserului că fundalul paginii este roşu.

Întotdeauna atributele sunt însoţite de o valoare care trebuie scrisă între “ “ La noi valoarea atributului bgcolor este red.

Observaţii: 1. Întotdeauna atributul pentru tag se adaugă doar tag-ului de deschidere. Adică <body bgcolor="red">. Text...text</body>. 2. Valorile atributelor trebuie să fie scrise întotdeauna între ghilimele. Se pot utiliza si

‘ ‘ în cazurile rare când valoarea atributului necesita ghilimele atunci se poate proceda conform exemplului:

name='George zis "Vasilescu" '

2.4. Tag-urile HTML de bază Cele mai importante tag-uri in HTML sunt tag-urile care definesc:

• antete (headings) • paragrafe (paragraphs) • trecerea forţată la rând nou (line breaks).

Headings (titlurile într-o pagină) Headings sunt definite cu tag-urile <h1> până la <h6>,. <h1> defineşte cel mai

important heading. <h6> defineşte cel mai “mic” heading. <h1>Acesta e un antet</h1> <h2> Acesta e un antet </h2> <h3> Acesta e un antet </h3> <h4> Acesta e un antet </h4> <h5> Acesta e un antet </h5> <h6> Acesta e un antet </h6> Acest cod va genera în fereastra browserului:

71

Tag Descriere

<html> Defineşte un document HTML

<body> Defineşte corpul documentului HTML

<h1> to <h6> Defineşte antetul 1 la 6

<p> Defineşte un paragraf

<br> Sare la rând nou

<hr> Defineşte o linie orizontală

<!--> Defineşte un comentariu

Page 72: curs DPW.docx

Observaţie: Se adăuga automat de către browser un rând liber înainte şi după declararea unui

heading.

Paragrafe Paragrafele sunt definite cu ajutorul tagului <p>. <p>Un paragraf</p> <p>Alt paragraf</p> Observaţie: Se adăuga automat de către browser un rând liber

înainte şi după declararea unui paragraf.

Rând nou Pentru a forţa trecerea la rând nou fără începerea unui paragraf nou se utilizează tag-

ul <br /> Exemplu:

<p>Acesta <br/> este un para<br/>graf cu tre<br/>cere fortata la rand nou</p><p> aici incepe un nou paragraf</p> Observaţie: Tag-ul <br /> nu are un tag de închidere (slash-ul de la sfârşit ţine loc de tag de

închidere).

Comentarii în HTML Pentru a insera un comentariu se folosește tag-ul <!--….> <!--Un comentariu -->

Observație: Important este doar semnul exclamării şi este necesar doar după deschiderea

parantezei unghiulare! Comentariul nu este afişat de către browser dar câteodată este bine să-l folosim pentru lizibilitatea codului.

2.5. Vizualizarea sursei unui document HTML Acest lucru se poate face în două moduri:

1. Din meniul browser-ului utilizând meniul View -> Source 2. Cu click dreapta în fereastra browser-ului şi apoi View Source Exemple 1. Centrarea unui heading în pagina: <html> <body>

<h1 align="center">Acesta e un heading 1</h1> <p>Heading-ul de sus este aliniat centrat. Heading-ul de sus este aliniat centrat. Heading-ul de sus este aliniat centrat.</p> </body> </html>

72

Page 73: curs DPW.docx

Codul generează următoarea afişare:

2. Linie orizontală

<html> <body> <p>Tag-ul hr defineste o linie orizontala</p> <hr> <p>un paragraf</p> <hr> <hr> <p>un nou paragraf</p> </body> </html>

Codul generează următoarea afişare:

3. Culoarea de fundal pentru pagina: <html> <body bgcolor="red"> <h2>Folosesc un heading de 2 dar nu pentru a scrie ceva bold!!!!!</h2> </body> </html>

Tag-uri pentru formatarea textului Tag Descriere

<b> Defineşte text bold <big> Defineşte text bold

73

Page 74: curs DPW.docx

<em> Defineşte text italic <i> Defineşte text italic <small> Defineşte text mic <strong> Defineşte text

îngroşat <sub> Defineşte text scris

la index (subscript) <sup> Defineşte text scris

la putere (superscript)

<ins> Defineşte text inserat

<del> Defineşte text şters <s> Nu se mai utilizează.

Se foloseşte<del> <strike> Nu se mai utilizează.

Se foloseşte <del>

74

Page 75: curs DPW.docx

Tag-uri pentru "Computer Output"

Tag Descriere <code> Defineşte cod

text <kbd> Defineşte un

text de tastatura <samp> Defineşte un

exemplu de cod <tt> Defineşte text

teletype <var> Defineşte o

variabila

Tag-uri pentru citări, indentări şi definiri

Tag Descriere <abbr> Defineşte o abreviere <acronym> Defineşte un acronim <address> Defineşte un element

HTML de tip adresa <bdo> Defineşte direcţia de

afişare a textului <blockquote> Defineşte o intentare <cite> Defineşte o citare <dfn> Defineşte un element

HTML de tip definiţie

Caractere speciale Unele caractere cum ar fi < au în HTML un rol special şi de aceea nu pot fi folosite în

cadrul textului. Pentru a putea totuşi utiliza semnul “mai mic ca” vom folosi entităţile de caractere (caractere speciale) Caracterul special are trei părţi: 1. începe cu & 2. nume sau un număr precedat de semnul # 3. la final au semnul (;). Caracterele speciale cele mai des utilizate:

75

Semnul afişat

Descrierea Numele entităţii

Numărul entităţii

non-breaking space

&nbsp; &#160;

< mai mic ca &lţ &#60; > mai mare ca &gţ &#62; & ampersand &amp; &#38; " ghilimele &quoţ &#34; ' apostrof &apos; &#39; ¢ cent &cenţ &#162; £ lira &pound; &#163; ¥ yen &yen; &#165; § secţiune &secţ &#167; © copyright &copy; &#169; ® marca

înregistrată &reg; &#174;

X înmulţire &times; &#215; ÷ împărţire &divide; &#247;

Page 76: curs DPW.docx

Exemplu: <p> Acesta este semnul mai mic: &lţ</p> <p> Acesta este semnul mai mic: &#60;</p>

Observaţie: Caracterele speciale sunt “case sensitive”.

Exemple diverse: 1. Formatarea textului

<html> <body> <b>text bold</b> <br> <strong> text strong </strong> <br> <big> text big </big> <br> <em> text emphasized </em> <br> <i> text italic </i> <br> <small> text small </small> <br>text <sub> subscript </sub> <br> text <sup> superscript </sup> </body> </html>

2. Vizualizarea unui cod de program <html> <body> <code>Computer code</code> <br> <kbd>introducere de la tastatura</kbd> <br> <tt>text teletype </tt> <br> <samp> text sample</samp> <br> <var> variabla</var> <br> <p> <b>Nota:</b> Aceste tag-uri se utilizeaza foarte de pentru a afisa programe (cod). </p> </body> </html>

3. Inserarea unei adrese <html><body> <address> Mihai Georgescu<br> poet<br> Str. Pinului Nr. 2<br> Bucuresti </address> </body> </html>

76

Page 77: curs DPW.docx

4. Acronime si abrevieri

<html> <body> <abbr title="Uniunea Europeana">EU</abbr> <br> <acronym title="World Wide Web">WWW</acronym> <p>La tag-ul de acronim atributul title afiseaza un hint cand userul trece cu mouse-ul peste acronim in text</p> <p>functioneaza doar de la IE 5 </p> </body> </html>

5. Text inserat şi text şters

<html> <body> <p> corectam un text <del>cuvant sters</del> <ins>se inlocuieste cu</ins> bla, bla </p> <p> Browserele mai vechi afiseaza aceste tag-uri ca text simplu </p> </body> </html>

2.6. Hiperlink Ancora Pentru a crea o legătură spre un alt document WEB, se

utilizează tag-ul <a> (ancora). O ancora poate indica spre orice resursă din web: o pagina web, o imagine, un fişier de sunet, un film etc.

Tag-ul <a> poate primi atribute. Atributul href

În cazul acesta ancora va crea o legătură spre un alt document. Sintaxa pentru crearea unei legături: <a href="url">textul meu care se va afisa si care este subliniat albastru</a>

Tag-ul <a> primeşte ca atribut pe href care ia ca valoare adresa resursei spre care ancora face legătura. Cuvintele scrise între cele doua tag-uri <a> ..... /a> vor fi afişate de către browser ca hiperlink. Exemplu:

<a href="http://www.edu.ro/"> Situl Ministerului Educatiei</a> Atributul target

Acest atribut se foloseşte pentru a defini „locul” unde se va deschide documentul spre care se face legătura. Daca acest atribut nu se specifică atunci pagina se va deschide în fereastra browserului în locul acelei care a făcut legătura.

Pentru deschiderea documentului spre care se face legătura într-o nouă fereastră se va folosi atributul target cu valoarea _blank Exemplu

<a href=„http://www.edu.ro/” target=”_blank”> Situl Ministerului Educatiei </a>

Atributul name Atributul name este utilizat pentru a crea o ancora cu nume. Aceste ancore sunt

foarte des utilizate în cadrul documentelor mari. Pentru a ajunge la un anumit punct din document acela se marchează ca fiind o ancora cu nume. Având aceasta ancora din orice document se poate “sări” direct la secţiunea din document marcată de ea. Acest lucru uşurează enorm navigarea prin document.

Sintaxa pentru crearea unei ancore cu nume este: <a name="nume eticheta">textul de afisat</a>

Exemplu <a name="cap1">Capitolul 1</a> Observaţie: O ancora cu nume nu se va afişa de către browser într-un mod anume.

77

Page 78: curs DPW.docx

Pentru a face o legătură spre o ancoră cu nume se adaugă la sfârşitul numelui documentului spre care se face legătura semnul # urmat de numele ancorei. (Daca suna prea complicat urmăriţi exemplul): Exemplu

Pas 1. În documentul ex1.html avem mai multe denumiri de capitole. Pentru a sări mai uşor la începutul fiecărui capitol definim câte o ancora cu nume:

<html> <head> <body> <a name=”cap1”> Capitolul 1</a> <p> In capitolul 1 povestim basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari ....... </p> <a name=”cap2”> Capitolul 2</a> <p> In capitolul 2 povestim iarasi basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari basme si intamplari ....... </p> </body> </html>

Pas 2.

Definim legătura direct spre o ancora cu nume. Presupunem ca avem un document web care conţine cuprinsul...

<html> <head> </head> <body> <p> Cuprinsul</p> <a href=”ex1.html#cap1” target=”_blank”>Capitolul 1</a><br> <a href=”ex1.html#cap2” target=”_blank”>Capitolul 2</a><br> </body> </html>

Observaţie: Daca se doreşte saltul în cadrul aceluiaşi document atunci la definirea legăturii se

poate utiliza doar numele ancorei precedat de # fără a mai specifica numele fişierului.

Exemplu <a href=”#cap1” target=”_blank”>Capitolul 1</a><br>

Observaţie generală: Întotdeauna este bine să adăugaţi la sfârşit un / când daţi adresa spre un subfolder:

78

Page 79: curs DPW.docx

Ex corect: href="http://www.edu.ro/orar/

Daca nu puneţi si / la sfârşit atunci browserul va face doua cereri: prima în care va

adăuga automat / iar a doua când va face cererea cu / adăugat.

Ex. incorect: href=” www.edu.ro/orar/

Exemple diverse 1. Crearea unei legături

<html> <body> <p> <a href="elevi.html"> acest text</a> este un link spre pagina elevi.html </p> <p> <a href="http://www.edu.ro/elevi" target="_blank"> acest text</a> este un link si se deschide intr-o fereastra noua </p> </body> </html>

2. Crearea unei legături dintr-o poza

<html> <body> <p> utilizam o poza ca link:<a href="ex.html"> <img border="0" src="04.gif"> </a> </p> </body> </html>

Observaţie: Aici am folosit un tag <img> care îl vom parcurge mai târziu. Atributul src indică sursa pozei adică numele fişierului care trebuie să fie în acelaşi director cu fişierul html.

3. Un link spre o adresa de mail

<html> <body> <p> un link catre o adresa de mail - daca aveti un client de mail instalat la click pe acest link se deschide fereastra clientului de mail: <a href="mailto:[email protected]?subject=salutare"> trimite-ma</a> </p> </body> </html>

Observaţie: Se observă pe status bar linkul făcut!

79

Page 80: curs DPW.docx

2.6. Tabele Tabelele se definesc cu ajutorul tag-ului <table>. Tabelele se împart in linii care se definesc cu ajutorul tag-ului <tr> (table row). Liniile tabelului se împart in celule cu ajutorul tag-ului <td> (table data) O celulă dintr-un tabel poate conţine: text, imagini, paragrafe, forme, tabele, liste etc.

Tag-uri specifice tabelelor

Exemplu: <table border="l"> <tr>

<td>rand 1, celula l</td> <td>rand 1, celula 2</td> </tr> <tr> <td>rand 2, celula l</td> <td>rand 2, celula 2</td> </tr> </table>

Va fi afişat în browser astfel:

80

Tag Descriere <table> Defineşte un tabel <th> Defineşte header-ul unui

tabel <tr> Defineşte un rând (linie)

în tabel <td> Defineşte o celula în tabel <caption> Defineşte caption-ul

tabelului <colgroup> Defineşte un grup de

coloane ale tabelului

<col> Defineşte valorile atributelor a unei sau mai multor coloane dintr-un tabel

<thead> Defineşte un rând de head

<tbody> Defineşte corpul tabelului <tfoot> Defineşte footer-ul

tabelului

Page 81: curs DPW.docx

Atributul borders Daca nu se specifica acest atribut tabelul va fi afişat fără linii. În unele cazuri acest

lucru este bun deoarece cu ajutorul tabelelor se poate asigura “împărţirea” paginii web astfel încât informaţia să poată fi structurată.

Ex. În partea stânga se va afişa o celula care conţine un meniu de navigare iar în dreapta conţinutul ..... Pentru a afişa liniile tabelului atributul borders se utilizează astfel:

<table border="1"> <tr> <td>rand 1, celula 1</td> <td>rand 1, celula 2</td> </tr> </table>

Acelaşi tabel dar fără atributul border

Capul de tabel Capul de table sau heading se definesc într-un table cu tag-ul <th>. <table border="1"> <tr> <th>Cap de coloana 1</th> <th>Cap de coloana 2</th> </tr> <tr> <td>rand 1 </td><td>rand 1 </td></tr> <tr> <td>rand 2 </td><td>rand 2 </td></tr> </table>

Arata în browser astfel:

Observaţie: Capul de tabel apare bold fără a fi nevoie de editare specială!

Celule goale într-un tabel Tabelele care conţin celule goale nu sunt afişate corect de toate browser-ele.

Problema care apare este lipsa chenarului în jurul celulei care nu conţine nimic. <html> <body> <table border="1"> <tr> <th>Cap de coloana 1</th> <th>Cap de coloana 2</th> </tr> <tr> <td>rand 1, ce1ula 1</td> <td>rand 1, celula 2</td> </tr> <tr> <td>rand 2, celula 1</td> <td></td> </tr> </table> </body> </html>

Pentru a rezolva această problemă adăugăm un caracter special de spaţiu &nbsp;

81

Page 82: curs DPW.docx

<html> <body> <table border="1"> <tr> <th>Cap de coloana 1</th> <th>Cap de coloana 2</th> </tr> <tr> <td>rand 1, ce1ula 1</td> <td>rand 1, celula 2</td> </tr> <tr> <td>rand 2, celula 1</td> <td>&nbsp;</td> </tr> </table> </body> </html>

Exemple diverse 1. Tabel cu caption (cu titlu)

<html> <body> <h4> Acest tabel are un caption adica un titlu pe mijloc si o margine mai groasa rosie: </h4> <table border="2" bordercolor="red"><caption>titlul tabelului</caption> <tr> <td>unu</td> <td>doi</td> <td>trei</td> </tr> <tr> <td>patru</td> <td>cinci</td> <td>o mie douasute saptezeci si trei</td> </tr></table></body> </html>

2. Celule care sunt unite peste 2 coloane/rânduri

<html> <body> <h4>celula peste doua coloane:</h4> <table border="1"> <tr> <th>Nume</th> <th colspan="2">telefon</th> </tr> <tr> <td>Stefan Cel Mare</td> <td>0230.414055</td> <td>230.4141195</td> </tr> </table> <h4>celula peste doua randuri:</h4> <table border="1"> <tr> <th>Nume:</th> <td>Stefan Cel Mare</td> </tr> <tr> <th rowspan="2">telefon:</th> <td>0230.414055</td> </tr> <tr> <td>230.4141195</td> </tr> </table> </body> </html>

3. Alte tag-uri în cadrul celulelor:

82

Page 83: curs DPW.docx

<html> <body> <table border="1"> <tr> <td> <p>un paragraf</p> <p>un alt paragraf</p> </td> <td>celula aceasta contine un tabel: <table border="1" bordercolor="blue"> <tr> <td>A</td> <td>B</td> </tr> <tr> <td>C</td> <td>D</td> </tr> </table> </td> </tr> <tr> <td>celula contine o lista <ul> <li>unu</li> <li>doi</li> <li>trei</li> </ul> </td> <td>salut</td> </tr></table> </body> </html>

4. Crearea cu ajutorul atributului de cellpadding de spaţiu între text şi marginea celulei

<html> <body> <h3> Exemplu de table fara cellpadding</h3> <table border="1" cellpadding="0"> <tr> <th>Cap de coloana 1</th> <th>Cap de coloana 2</th> </tr> <tr> <td>rand 1, <td>rand 1, </tr> <tr> <td>rand 2, <td>&nbsp;</td> </tr> </table> <h3> Exemplu de table cu cellpadding</h3> <table border="1" cellpadding="10"> <tr> <th>Cap de coloana 1</th> <th>Cap de coloana 2</th> </tr> <tr> <td>rand 1, celula 1<td> <td>rand 1, celula 2</td> </tr> <tr> <td>rand 2, celula l</td> <td>&nbsp;</td> </tr> </table> </body> </html>

5. Crearea cu ajutorul atributului de cellspacing de spaţiu între celule

<html> <body> <h3> Exemplu de table fara cellspacing</h3> <table border="1" cellspacing="0"> <tr> <th>Cap de coloana 1</th> <th>Cap de coloana 2</th> </tr> <tr> <td>rand 1, ce1ula 1</td> <td>rand 1, celula 2</td> </tr> <tr>

83

Page 84: curs DPW.docx

<td>rand 2, celula 1</td> <td>&nbsp;</td> </tr> </table> <h3> Exemplu de table cu cellspacing</h3> <table border="1" cellspacing="10"> <tr> <th>Cap de coloana 1</th> <th>Cap de coloana 2</th> </tr> <tr> <td>rand 1, ce1ula 1</td> <td>rand 1, celula 2</td> </tr> <tr> <td>rand 2, celula 1</td> <td>&nbsp;</td> </tr> </table> </body> </html>

6. Adăugarea de culoare sau imagine pe fundalul tabelului cu ajutorul atributelor bgcolor si background.

<html> <body> <h4>culoare de fungdal pe intreg tabelul:</h4> <table border="1" bgcolor="green"> <tr> <td>pam</td> <td>pim</td> </tr> <tr> <td>pim</td> <td>pam</td> </tr> </table> <h4>o imagine pe fundalul tabelului:</h4> <table border="1" background="04.gif"> <tr> <td>pam</td> <td>pim</td> </tr> <tr> <td>pim</td> <td>pam</td> </tr> </table> </body> </html>

7. Alinierea conţinutului unei celule cu ajutorul atributului align <html> <body> <table border="1"> <tr> <th align="left">pam</td> <th>numere</td> </tr> <tr> <td align="left">pim</td> <td align="right">150.000 lei</td> </tr> <tr> <td align="left">pam</td> <td align="right">1.000 lei</td> </tr> <tr> <td align="left">pum</td> <td align="right">12.000 lei</td> </tr> </table> </body> </html>

2.7.Liste Tag-uri pentru liste

Tag Descriere <ol> Defineşte o lista

84

Page 85: curs DPW.docx

ordonata <ul> Defineşte o lista

neordonata <li> Defineşte un element

al listei <dl> Defineşte o lista de

definiţii <dt> Defineşte un termen

al listei de definiţii <dd> Defineşte o descriere <dir> Nu se mai utilizează.

Se foloseşte <ul> <menu> Nu se mai utilizează.

Se foloseşte <ul>

2.7.1. Liste neordonate O lista neordonată este o listă în care elementele listei sunt marcate cu o bulină la

început - de obicei un cerc mic negru. O lista neordonata începe cu tag-ul <ul>. Fiecare element al listei începe cu <li>. <ul> <li>banane</li> <li>portocale</li> <li>struguri</li> </ul> În interiorul fiecărui element al unei liste pot fi puse paragrafe,

imagini, link-uri, alte liste etc. 2.7.2. Liste ordonate O lista ordonata este o lista în care elementele listei sunt

numerotate. O lista ordonata începe cu <ol> iar fiecare element cu tag-ul <li>

<ol> <li>banane</li> <li>portocale</li> <li>struguri</li> </ol> 2.7.3. Liste de definiţii Lista de definiţii este o lista de termeni si explicarea acestora. O

lista de definiţii începe tag-ul <dl>. Fiecare termen din lista începe cu tag-ul <dt> . Fiecare definiţie a unei liste de definiţii începe cu tag-ul <dd>.

<dl> <dt>Prajitura</dt> <dd>Ceva de obicei dulce si bun</dd> <dt>Masina</dt> <dd>O chestie pe 4 roti care are tractiune proprie</dd> </dl>

Exemple 1. Alte tipuri de liste neordonate

<html> <body> <h4>Disc bullets:</h4> <ul type="disc"> <li>Pim</li>

85

Page 86: curs DPW.docx

<li>Pam</li> <li>Pum</li> <li>Pom</li> </ul> <h4>Circle bullets:</h4> <ul type="circle"> <li>Pim</li> <li>Pam</li> <li>Pum</li> <li>Pom</li> </ul> <h4>Square bullets:</h4> <ul type="square"> <li>Pim</li> <li>Pam</li> <li>Pum</li> <li>Pom</li> </ul> </body> </html>

2. Alte tipuri de liste ordonate. <html> <body> <h4>lista <ol> numerotata:</h4> <li>Pim</li> <li>Pam</li> <li>Pum</li> <li>Pom</li> </ol> <h4>lista numerotata cu litere mari:</h4> <ol type="A"> <li>Pim</li> <li>Pam</li> <li>Pum</li> <li>Pom</li> </ol> <h4> lista numerotata cu litere mici:</h4> <ol type="a"> <li>Pim</li> <li>Pam</li> <li>Pum</li> <li>Pom</li> </ol> <h4> lista numerotata cu cifre romane mari:</h4> <ol type="I"> <li>Pim</li> <li>Pam</li> <li>Pum</li> <li>Pom</li> </ol> <h4> lista numerotata cu cifre romane mici:</h4> <ol type="i"> <li>Pim</li> <li>Pam</li> <li>Pum</li> <li>Pom</li> </ol> </body> </html>

86

Page 87: curs DPW.docx

2.8. Imagini Tag-uri pentru imagini

Tag Descriere <img> Defineşte o imagine <map> Defineşte o harta a

imaginii <area> Defineşte o zona în

cadrul harţii unei imagini

Pentru a defini o imagine în HTML avem nevoie de tag-ul <img>. Pentru a afişa o imagine trebuie să specificam valoarea atributului src (sursa). Sursa

este chiar URL-ul imaginii pe care vrem sa o afişam. Sintaxa este:

<img src="url">

Browserul pune întotdeauna imaginea în locul în care întâlneşte tag-ul <img>. Exemplu:

<html> <body> <p> pam pam</p> <img src="04.gif"> </body> </html>

Atributul alt Acest atribut se foloseşte pentru a afişa un text alternativ pentru

o imagine. Adică în cazul în care browserul nu poate afişa imaginea atunci în spaţiul rezervat imaginii apare textul specificat de atributul alt.

Foarte important!!! Fără acest atribut validatorul de cod html nu va valida documentul

(http://validator.w3c.org). Sintaxa: <img src="04.gif" alt="Smiley"> Utilizarea acestui atribut este o practică buna mai ales pentru cei ce navighează fără să-şi afişeze si pozele.

<html> <body> <p> pam pam</p> <img src="05.gif" alt="Smiley"> </body> </html>

Exemple 1. Alinierea imaginii faţă de text

<html> <body> <p> imagine <img src="04.gif" align="bottom"> in text aliniata jos </p> <p> imagine <img src="04.gif" align="middle"> in text aliniata la mijloc </p> <p> imagine <img src="04.gif" align="top"> in text aliniata sus </p> <p> <img src ="04.gif"> inaintea textului </p> <p>dupa text <img src ="04.gif"> </p> </body> </html>

87

Page 88: curs DPW.docx

2. Alinierea imaginii în cadrul unui paragraf: <html> <body> <p> <img src ="04.gif" align ="left"> In acest paragraf imaginea ramane in stanga si textul curge frumos in jurul ei !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! </p> <p> <img src ="04.gif" align ="right"> In acest paragraf imaginea ramane in dreapta si textul curge frumos in jurul!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!</p> </body> </html>

3. Mărimea pozelor: <html> <body> <p> <img src="04.gif" width="15" height="15"> </p> <p>

<img src="04.gif" width="30" height="30"> </p> <p> <img src="04.gif" width="45" height="45"> </p> <p> Atentie putem micsora sau mari imaginile cu cele doua atribute width si height dar atentie calitatea pozei are de suferit. Asa ca marimea pozei trebuie sa fie stabilita din programul de editare al pozelor! </p> </body> </html>

2.9. Culori HTML

Valorile culorilor Culorile sunt definite cu ajutorul notaţiei hexazecimale pentru fiecare dintre cele trei

culori de baza: roşu, verde, albastru. Cea mai mica valoare care se poate da unei culori este #00 iar cea mai mare este #FF Tabelul de mai jos arata unele combinaţii de culori

Culoare Numele culorilor

Doar 16 nume de culori sunt recunoscute de către standardul HTML 4.0. Acestea sunt: aqua, black, blue, fuchsia, gray, green, lime, maroon, navy, olive, purple, red, silver, teal, white şi yellow. Pentru toate celelalte nuanţe se impune folosirea codului hexa.

Dacă am dori să folosim toate nuanţele o să ajungem la 16 milioane de culori (256x256x256)

88

Page 89: curs DPW.docx

3. Poziţionarea conţinutului unei pagini html

3.1. Frame-uri

3.1.1. Taguri Cu ajutorul frame-urilor se pot afişa în aceeaşi fereastră a browserului mai multe

fişiere html. Fiecare fişier este independent de celelalte. Probleme care apar sunt:

Browserele vechi nu suporta acest tag Tipărirea întregii ferestre fiind compusa din mai multe cadre este mai complicata Motoarele de căutare returnează doar urn-ul unui singur frame ceea ce duce in multe

situaţii la “pierderea” sistemului de navigare. Tag-ul Descrierea <frameset> Defineşte un set de

frame-uri <frame> Defineşte un frame

(cadre) <noframes> Defineşte o secţiune în

care se pune cod pentru browserele care nu suporta tag-ul de frame

<iframe> Defineşte o fereastra interioara paginii

Pentru a împărţi o fereastra a browser-ului in mai multe frame-uri avem nevoie de 2 tag-uri:

<frameset> care descrie modul cum se împarte fereastra <frame> care defineşte ce fişier se pune intr-un cadru

De obicei frame-urile se utilizează la crearea sistemului de navigare care sa fie “vizibil” tot timpul. Astfel într-un frame se încărca fişierul care conţine doar sistemul de navigare iar in celalalt(e) conţinutul fişierelor spre care indica sistemul de navigare. Avantaje:

Nu se mai reîncărca la fiecare click pe un link tot sistemul de navigare. Tagul frameset

Tag-ul <frameset> defineşte modul in câte linii sau coloane se împarte fereastra browserului şi cât de mari să fie acestea în comparaţie cu fereastra browserului. Atenţie nu se pot defini simultan linii si coloane! Exemplu:

<frameset cols="25%,75%"> … </frameset>

Primul tag indica faptul ca fereastra browserului nostru se împarte în două coloane prima având o lăţime de 25% din lăţimea ferestrei iar a doua de 75%.

Atributele tag-ului frameset

Atribut Valoare Descriere cols pixels

% *

Defineşte numărul şi mărimea coloanelor

rows pixels % *

Defineşte numărul şi mărimea liniilor

Tagul Frame Tag-ul <frame> defineşte ce fişier HTML se va pune in fiecare cadru descris în

<frameset>. În exemplul de mai sus am definit două coloane. Pentru a defini care fişiere să se afişeze în aceste coloane se va proceda astfel: Presupunem că avem două fişiere cu numele 1.htm si 2.htm. Pentru a afişa fişierul 1.htm pe prima coloana şi pe 2.htm pe a doua coloană completăm codul prezentat în exemplul de mai sus astfel:

89

Page 90: curs DPW.docx

<frameset cols="25%,75%"> <frame src="1.htm"> <frame src="2.htm"> </frameset> Atributele tag-ului frame

Atribut Valoare Descriere frameborder 0 1 Specifica faptul ca

se afişează sau nu marginea frame-ului

marginheight pixels Defineşte marginile de sus si jos in cadrul frame-ului

marginwidth pixels Defineşte marginile din ştanga şi dreapta in cadrul frame-ului

name frame_name Defineşte un nume unic atribuit frame-ului (se foloseşte în script-uri)

noresize noresize Când ia valoarea noresize atunci utilizatorul nu poate modifica lăţimea coloanei sau liniei

scrolling yes no auto

Determina afişarea unui scrollbar

src URL Defineşte URL-ul documentului de afişat

Exemple diverse 1. Frame-uri verticale

<html> <head> </head> <frameset cols="25%,75%"> <frame src="4.html"> <frame src="5.html"> </frameset> </html>

2. Frame-uri orizontale <html> <head> </head> <frameset rows="25%,75%"><frame src="4.html"> <frame src="5.html"> </frameset> </html>

3. Frame-uri mixte: <html> <head> </head> <frameset rows="25%,75%"><frame src="6.html"> <frameset cols="200, *"> <frame src="4.html">

90

Page 91: curs DPW.docx

<frame src="5.html"> </frameset> </frameset> </html> Observaţie: la toate exmplele de mai sus utilizatorul poate modifica lăţimea frame-

urilor. Pentru a bloca acest lucru utilizam atributul de noresize.

<html> <head> </head> <frameset rows="25%,75%"> <frame noresize="noresize" src="4.html"> <frameset cols="200, *"> <frame noresize="noresize" src="5.html"> <frame noresize="noresize" src="3.htm"> </frameset> </frameset> </html>

Utilizarea atributului name

Acest atribut se foloseşte pentru a identifica unic un frame. Se foloseşte in cazurile în care într-un frameset avem un frame care conţine şi stemul de navigare iar afişajul se face în alt frame. În acest caz frame-ul în care se face afişarea trebuie identificat cu ajutorul atributului name. <html>

<head> </head> <frameset rows="25%,75%"> <frame noresize="noresize" src="4.html"> <frameset cols="200, *"> <frame noresize="noresize" src="5.html"> <frame name="principal" noresize="noresize" src="6.html"> </frameset> </frameset> </html>

Prezentăm mai jos codul modificat al fisierului 5.html

<html> <head> </head> <body bgcolor="00FFFF"> <a href="6.html" target="principal">cinci </a> </body> </html>

Observăm faptul că la tag-ul <a> am adăugat atributul target care a primit valoarea atributului name din frame-ul 3 declarat în frameset. 5. Inline frame

<html> <body> <iframe src="4.html"></iframe> <p>ar trebui sa se vada deasupra acestui rand o fereastra daca browserul nu este prea vechi</p> </body> </html>

4. Formulare

Un formular este un ansamblu de zone active alcătuit din casete combinate, câmpuri de editare, butoane radio, butoane de comandă etc. Formularele asigură construirea unor pagini Web care permit utilizatorilor să introducă informaţii şi să le transmită serverului. O

91

Page 92: curs DPW.docx

sesiune cu o pagină Web ce conţine un formular cuprinde două etape: utilizatorul completează formularul şi trimite serverului (prin apăsarea butonului de

expediere) datele înscrise în formular. o aplicaţie dedicată de pe server (un script) analizează informaţiile transmise şi, în

funcţie de configuraţia scriptului, fie stochează datele într-o bază de date, fie le transmite la o adresă de mail indicată de dumneavoastră. Dacă este necesar, serverul poate expedia şi un mesaj de răspuns utilizatorului. Un formular este definit într-un bloc delimitat de etichetele <form> </form>. În

interiorul blocului sunt incluse: elementele formularului, în care vizitatorul urmează să introducă informaţii, un buton de expediere, la apăsarea căruia, datele sunt transmise către server,

opţional, un buton de anulare, prin care utilizatorul poate anula datele înscrise în formular. Cele mai importante atribute ale etichetei <form> sunt:

Calea prin care informaţiile introduse într-un formular pot parveni creatorului paginii este folosirea comenzii mailto:

<a href="mailto:[email protected]">

Atribut Valoare Element introdus

Semnificaţie

type text casetă de text

permite introducerea unui şir de caractere pe un singur rând

radio buton radio permite alegerea, la un moment dat, a unei singure variante din mai multe posibile

checkbox

căsuţă de validare

permite selectarea sau deselectarea unei opţiuni

button buton de comandă

permite declanşarea unei operaţii atunci când utilizatorul execută click sau dblclick pe suprafaţa

Valoare Element introdus

Semnificaţie

text casetă de text

permite introducerea unui şir de caractere pe un singur rând

radio buton radio permite alegerea, la un moment dat, a unei singure variante din mai multe posibile

checkbox

căsuţă de validare

permite selectarea sau deselectarea unei opţiuni

button buton de comandă

permite declanşarea unei operaţii atunci când utilizatorul execută click sau dblclick pe suprafaţa

Atribut Semnificaţie

action

comunică browserului unde să trimită datele introduse în formular. În general valoarea atributului action este adresa URL a scriptului aflat pe serverul care primeşte datele formularului: <form action="http://www.yahoo.com/cgi-bin/fisier.cgi"> precizează metoda utilizată de browser pentru expedierea datelor formularului

method get (valoarea implicită) - datele din formular sunt adăugate la adresa URL precizată de atributul action (nu sunt permise cantităţi mari de date)

post - folosită cel mai des. În acest caz datele sunt expediate separat. Sunt permise cantităţi mari de date.

Majoritatea elementelor unui formular sunt definite cu ajutorul etichetei <input>. Aceasta este utilizată împreună cu următoarele atribute:

Cu ajutorul etichetei <textarea> </texarea> puteţi insera în pagină o casetă de text multilinie care permite vizitatorului să introducă un text mai lung, care se poate întinde pe mai multe linii.

<textarea name="adresa" rows=2 cols=30></textarea> Exemplu: pagina următoare conţine elemente de mai multe tipuri încadrate într-un

92

Page 93: curs DPW.docx

formular unic. Pentru alinierea elementelor utilizate pentru informaţiile personale am utilizat un tabel.

Atributele etichetei <select>:

Atributele etichetei <option>:

Atributele etichetei <option>:

Exemple de utilizare a atributelor și valorilor mai sus enunțateTagul input nu avea nevoie de un tag de închidere și putea avea numeroase atribute:- text- password- radio- checkbox- reset- submit

Butoane de submitAici va trebui să dăm și o valoare atributului submit, aceasta fiind textul care va fi

afișat pe butonul generat.<input type="submit" value="Submit" /> <input type="submit" value="Continuare>>" />

Submit

Continuare >>

Butoane de resetAici ca și la atributul submit va trebui să dăm o valoare, aceasta fiind textul care va fi

afișat pe butonul generat. Acest buton este foarte folositor în cazul în care userul completează marea majoritate a formularului cu informații greșite sau eronate.

<input type="reset" value="Reset" />

93

Page 94: curs DPW.docx

<input type="reset" value="Sterge tot " />

Reset

Mărimea câmpului de textAtributul size stabilește lungimea câmpului de text. Lungimea standard a unui camp

de text este în general între 20-25 de caractere, dar poate varia depinzând de scopul formularului sau al câmpului în sine.

<input type="text" size="5" /> <input type="text" size="15" /><input type="text" size="25" />

Atributul valueFolosind acest atribut vom face posibilă scrierea de informație în câmpurile noastre,

informație pe care userul o poate șterge sau nu. Această aplicație este destul de folositoare în special atunci când se integrează un script php care recunoaște un vizitator și retine opțiunile înscrise de acesta.

<input type="text" size="5" value="12345" /><input type="text" size="15" value="ceva" /> <input type="text" size="25" value=" HTML" />

MaxlengthMaxlength este unul dintre atributele cele mai folositoare ale câmpurilor de text, el

impiedicând userul să introducă un șir de caractere mai mare decât cel dorit.<input type="text" size="5" maxlength="5" /><input type="text" size="15" maxlength="15" /><input type="text" size="25" maxlength="25" />

Checkbox - Crearea listelor Checkbox-urile vin în ajutorul utilizatorului facilitând alegerea simulatană a mai

multor variante de răspuns.<p>Alege culorile care iti plac. .</p> Albastru: <input type="checkbox" name="culori" value="albastru" /><br />Galben: <input type="checkbox" name="culori" value="galben" /><br /> Rosu: <input type="checkbox" name="culori" value="rosu" /><br /> Verde: <input type="checkbox" name="culori" value="Verde" />

Checkbox – Casuțe selectate "by default"Checkbox-urile oferă deasemenea posibilitatea de a fi bifate pentru a facilita în

anumite situații "munca" userului. Acest lucru se realizează cu ajutorului atributului checked acesta având valoarea yes.

<p>Alege culorile care iti plac. .</p> Albastru: <input type="checkbox" checked="yes" name="culori" value="albastru" /><br />Galben: <input type="checkbox" name="culori" value="galben" /><br /> Rosu: <input type="checkbox" name="culori" value="rosu" /><br /> Verde: <input type="checkbox" checked="yes" name="culori" value="Verde" />

Butoane radio

94

Page 95: curs DPW.docx

Butoanele radio sunt folosite pentru a permite userului să selecteze una dintre opțiunile listate. Pentru a realiza acest tip de formular va trebui în primul rând să dăm un nume fiecărui câmp.

<p> Alege nationaliatea</p>Romana: <input type="radio" name="nationalitate" />Engleza: <input type="radio" name="nationalitate" />Rusa: <input type="radio" name="nationalitate" />

Butoane radio selectate "by default"La fel ca și la checkbox-uri, butoanele radio pot fi selectate pentru a facilita "munca"

userului.<p> Alege nationaliatea</p>Romana: <input type="radio" name="nationalitate" checked="yes" />Engleza: <input type="radio" name="nationalitate" />Rusa: <input type="radio" name="nationalitate" />

Câmpuri de textCâmpurile de text de acest fel sunt folosite pentru comentarii, bloguri, memos, sau

orice alt scop care cere un spatiu de exprimare.Pentru a crea un câmp de text (text area) vom avea nevoie de un tag de deschidere și unul de închidere după cum urmează:

<textarea>Camp de text!</textarea>

Text area - Câmpuri de text, dimensiuniPentru a modifica dimensiunea standard a unui câmp de text vom folosi coloanele și

liniile, cu denumirile lor în engleză, cols și rows. Aceste vor avea valori numerice. Cu cât valoarea numerică a acestora va fi mai mare cu atât câmpul va fi mai mare.

<textarea cols="50" rows="2">Camp de text!</textarea> <textarea cols="40" rows="5">Camp de text!</textarea><textarea cols="20" rows="10">Camp de text!</textarea>

Atributul "wrap" Acest atribut al tagului <textarea> va stabili felul în care va reacționa textul atunci

când va ajunge la sfârșitul liniei.Wrap va avea una dintre cele trei valori: hard, soft, off.

- Hard - va plasa un enter la sfârșitul fiecărei linii și va trimite textul în același format în care a fost introdus.

- Soft - va plasa un enter la sfârșitul fiecărei linii dar spre deosebire de hard va trimite textul în format liber.

- Off - nu va formata câmpul de text sub nici o forma, lasând textul introdus într-o singură linie continuă.

Atributul hard / soft <textarea cols="20" rows="5" wrap="hard"> Hard - va plasa un enter la sfarsitul fiecarei linii si va trimite textul in acelasi format in care a fost introdus. </textarea>

Atributul off <textarea cols="20" rows="5" wrap="off"> Off - nu va formata campul de text sub nici o forma, lasand textul introdus intr-o singura linie continua. </textarea>

  Text area - atributul "readonly"

95

Page 96: curs DPW.docx

Depinzând de valoarea acestui atribut, utilizatorul poate sau nu modifica conținutul câmpului de text. Atributul readonly poate lua valoarile "yes" sau "no".

<textarea cols="20" rows="5" wrap="hard" readonly="yes">Dupa cum poate fi observat acest text nu poate fi modificat. In cazul in care s-ar alege valoarea no a atibutului readonly s-ar obtine rezultatul opus. </textarea>

Html - Embed (Muzica)Pentru a insera muzica intr-un document.html vom folosi folosi urmatorul rand HTML.

<embed src="tu si tuborg.mp3" hidden="false" autostart="false" loop="false" volume="60" width="144" height="60" />

Html - Object (Video)Pentru a insera un video intr-un document.html vom folosi urmatoarea bucata de cod HTML. <object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/UAq8qHNWMNw&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/UAq8qHNWMNw&hl=en&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>

Adobe Fireworks este un program folosit pentru crearea şi optimizarea graficii web. Puteţi să creaţi şi să editaţi atât imagine de tip bitmap cât şi imagini vectoriale.

Imaginea vectorială este definită matematic ca o serie de puncte unite de linii. Într-o imagine vectorială, elementele grafice sunt numite obiecte. Fiecare obiect este o entitate de sine stătătoare, cu proprietăţi bine definite: culoare, formă, contur (outline), dimensiuni (lăţime, lungime) şi poziţie faţă de centrul paginii în care se lucrează.

Cel mai mare avantaj al imaginii vectoriale este că permite modificarea proprietăţilor oricărui obiect din compoziţie, fără ca acesta să-şi piardă calitatea şi fără a afecta celelalte obiecte din pagină. Acest lucru este posibil tocmai datorită faptului că fiecare obiect, ca imagine vectorială, este o entitate de sine stătătoare.

Imaginile vectoriale sunt independente faţă de rezoluţie. Asta înseamnă că ele sunt afişate la rezoluţia maximă a perifericelor de ieşire folosite (exemplu: monitor, imprimantă). Ca rezultat, înseamnă că imaginea va avea o rezoluţie cu atât mai bună cu cât rezoluţia, de exemplu a imprimantei, este mai mare.

Harta de biţi este alcătuită din puncte individuale numite pixeli (picture elements), care sunt aranjate şi colorate diferit pentru a forma imaginea. Mărind dimensiunile bitmap-ului, automat se măresc şi pixelii. Astfel calitatea imaginii se deteriorează, deoarece acelaşi număr de pixeli vor fi distribuiţi pe o suprafaţă mai mare, deci o rezoluţie mai scăzută (dots per inch, dpi). Astfel apar formele zimţate şi imaginile neclare. Într-o hartă de biţi pot fi făcute mici retuşuri, culorile pot fi modificate, aplicate efecte speciale, dar nu independent faţă de rezoluţie. Bitmap-urile pot fi combinate între ele, bucăţi din ele pot fi desprinse şi mutate separat, dar asta numai în programe specializate.

Formate graficeReprezentarea unei imagini pe calculator a constituit un pas firesc, odata cu

cresterea puterii de calcul a PC-urilor. O imagine este constituita din pixeli (puncte), denumirea de pixel provenind de la picture elements, el fiind elementul fundamental ce sta la baza unei imagini. Fiecare pixel capata o anumita culoare dintr-un spectru variabil şi este memorat ca un numar, ce va fi înregistrat intern într-o serie de biti. Cu cât numarul de biti alocati este mai mare, cu atât creste posibilitatea de a afisa nuante coloristice mai apropiate de realitate.

Pentru o imagine monocrom, fiecare pixel va detine culoarea alb sau negru, deci el va fi memorat ca 0 sau 1. Pentru o imagine în 4 culori, pixelii vor putea lua valori de la 0 la 3 (în format binar 00, 01, 10 şi 11 - deci 2 biti), iar pentru 256 de culori (2 la puterea a opta) vor fi necesar câte 8 biti pentru fiecare pixel. Imaginea astfel creata va fi totuşi saraca, un numar de culori rezonabil fiind 65536 (16 biti), iar pentru perfectiune fiind necesare 16 milioane de culori (24 de biti).

96

Page 97: curs DPW.docx

Cunoscând faptul ca un byte este format din 8 biti, pentru o imagine pe 24 de biti, un pixel este memorat pe 24/8=3 bytes. Astfel, pentru o imagine la rezolutia de 1024x768 vor fi necesari 1024x768x3=2.359.296 bytes pe disc. Acesta este spatiul ocupat de o imagine necomprimata, ce poarta de obicei extensia BMP, fiind formatul standard, cel mai simplu dar şi cel mai nepractic.

În timp, s-a constatat ca majoritatea imaginilor nu necesita o fidelitate perfecta şi au fost conceputi numeroşi algoritmi de compresie, multi fiind asemanatori cu cei folositi la compresia datelor, dar care duc în multe cazuri la pierderi de calitate. În acest mod, o imagine de 2 MB poate ocupa doar 100 KB în format comprimat, pierderea de calitate fiind în general insesizabila unui ochi amator.

În timp, s-a constatat ca majoritatea imaginilor nu necesita o fidelitate perfecta şi au fost conceputi numeroşi algoritmi de compresie, multi fiind asemanatori cu cei folositi la compresia datelor, dar care duc în multe cazuri la pierderi de calitate. În acest mod, o imagine de 2 MB poate ocupa doar 100 KB în format comprimat, pierderea de calitate fiind în general nesemnificativa unui ochi amator.

Aparut în 1987, GIF (Graphics Interchange Format) a fost, şi într-un anumit sens înca este cel mai popular format grafic. Dezvoltat de CompuServe, compresia sa consta în doua etape: în primul rând numarul de culori, indiferent de specificatiile fişierului sursa, erau reduse la maxim 256, ceea ce implica o scadere drastica a calitatii în cazul imaginilor de tip fotografie. Etapa a doua consta în compresia folosind algoritmul LZW (fara pierdere de calitate), algoritm dezvoltat de catre Unisys, care initial a cerut obligativitatea cumpararii unei licente în cazul aplicatiilor comerciale care îl foloseau, fapt care a îngreunat raspândirea formatului. O exensie a sa, GIF89a, a permis aparitia GIF-urilor animate, cu alte cuvinte mai multe imagini care se succed la un interval prestabilit, realizându-se astfel scurte animatii. De asemenea, cu noua versiune se pot realiza asa-numitele GIF-uri "interlaced", foarte utile pentru conexiunile slabe de Internet. Astfel, imaginea nu mai este afisata de sus în jos, pe masura încarcarii, ci va aparea mai întâi o versiune schematica a imaginii, numarul de detalii crescand odata cu încaracarea.

Popularitatea de astazi a formatului GIF se datoreaza dezvoltarii Internet-ului, majoritatea imaginilor în format GIF pe care le gasim astazi contin câteva elemente schematice, carora le sunt suficiente de multe ori nu 256, ci chiar 64 de culori. Cu toate acestea, GIF pierde teren, încet dar sigur, în fata lui PNG, care ofera o serie de avantaje, printre care suportul pentru 24 de biti de culoare.

Înca din 1994 a aparut ideea de format grafic nou, fara pierderi de calitate, care sa suporte 24 de biti de culoare şi mai ales, sa fie gratuit. Astfel, în octormbrie 1996 s-a nascut PNG (Portable Network Graphics), un format exceptional pentru acea vreme, dar care s-a impus destul de greu. Avantajul sau cel mai important erau pierderile de calitate nule, iar ca dezavantaj putem enunta viteza destul de scazuta a algoritmului de compresie. PNG este folosit în special pentru compresia imaginilor schematice, dar şi a celor de tip fotografie unde nu se accepta pierderi de calitate. Daca pentru mult timp au fost preferate alte formate, cum ar fi GIF sau JPG, din simplul motiv al compatibilitatii şi - de ce nu - al comoditatii, în prezent, orice aplicatie din domeniu poate lucra cu acest format. Odata cu introducerea suportului în browsere (fie direct, fie prin diverse plugin-uri), succesul i-a fost asigurat, el fiind în prezent cel mai performant format grafic de pe piata din sfera Internet-ului, însa totuşi nu atât de raspândit ca GIF sau JPG. "Norocul" sau a fost faptul ca prin definitie, el este destinat web-ului, chiar dezvoltatorii lui numindu-se The World Wide Web Consortium (W3C). PNG este unul din puţinele cazuri din istorie în care un format mai performant dar initial necunoscut, a putut cuceri piata. Sa ne amintim de muzica şi de formatul MP3, care este în prezent este destul de slab ca performante, dar extrem de popular, alternativele chiar dacă sunt mai bune din toate punctele de vedere, sunt igorate de piata.

Formatul JPEG File Interchange Format (JPEG=Joint Photographic Experts Group) a aparut ca urmare a necesitatilor tot mai mari a utilizatorilor de a schimba şi depozita imagini, imagini care prin natura lor nu necesita o reconstituire perfecta a originalului. Astfel, fişierele cu extensia JPG au ajuns pe hard disk-urile oricarui utilizator şi pe serverele oricarui site, ele continând în general fotografii.

JPEG foloseste 24 de biti de culoare, însa acest factor nu înseamna neaparat şi calitate buna. Ea este data în primul rând de rata de compresie selectata, existând posibilitatea alegerii unei calitati între 1 şi 100. Denumirea de "100" este oarecum înselatoare, nefiind vorba de o calitate perfecta, ci de maximul care poate fi obtinut cu ajutorul acestui format. O greseala foarte frecventa este salvarea în format JPEG a

97

Page 98: curs DPW.docx

capturilor de ecran sau a desenelor schematice. Drept urmare, chiar şi dupa setarea "best quality" rezulta o imagine plina de artefacte nedorite.

Pentru un raport optim calitate/spatiu ocupat, este necesara o rata de compresie în jurul valorii de 85, un numar superior determinând utilizarea unui spatiu de pâna la patru ori mai mare, cu o crestere de multe ori nesemnificativa a calitatii.

Ar mai fi de mentionat optiunea Progressive JPEG, care are un efect identic cu Interlaced GIF sau PNG. În concluzie, formatele grafice comprimate, prin folosirea de algoritmi performanti, a caror viteza nu mai este un factor important la puterea de procesare a PC-urilor de azi, ofera posibilitatea oricarui posesor al unui calculator personal sa vizualizeze şi sa prelucreze imagini la o calitate foarte buna, fara irosirea inutila a spatiului de pe disc.

1. Crearea unui nou document

Documentele fireworks sunt salvate în format png(Portable Network Graphic). Imaginile create în Fireworks pot fi exportate sau salvate în mai multe formate grafice şi web.

Crearea unui nou document se face prin selectarea opţiunii FileNew , după care apare fereastra de dialog New Document în care introduceţi proprietîţile documentului şi apăsaţi tasta OK.

1.1. Crearea unui nou document cu aceleaşi dimensiuni ca cele din Clipboard

Se copiază obiectul în Clipboard dintr-un alt document Fireworks sau dintr-un browser web sau altă aplicaţie care acceptă comanda Paste. Se selectează FileNew şi apare fereastra de dialog

New Document în care dimensiunile vor fi aceleaşi ca ale obiectului din Clipboard. Se setează rezoluţia şi culoarea canvas-ului după care se apasă OK. Se selectează Edit Paste pentru a lipi obiectul din Clipboard în documentul nou.

2. Deschiderea şi importarea fişierelor

2.1. Deschiderea fişierelorPentru a deschide un fişier selectaţi opţiunea FileOpen.Pentru a decshide un fişier închis de curând selectaţi opţiunea FileOpen Recent.Puteţi deschide fişiere create cu alte aplicaţii (Phoposhop, Adobe FreeHand, Adobe

Illustrator, Wbmp, Eps, Jpeg, gif şi gif-uri animate).

2.2. Importarea fişierelorAtunci când doriţi să importaţi un fişier în layer-ul curent obiectele de tip hotspot şi

slice sunt adăugate în layer-ul web. Fireworks menţine proporţiile imaginii importate. În fereastra Layer selectaţi layer-ul în care doriţi să importaţi fişierul, apoi selectaţi

FileImport pentru a deschide fereastra de dialog Import. Selectaţi fişierul şi apăsaţi Open. Pe canvas poziţionaţi cursorul import acolo unde vreţi să fie poziţionat colţul din stânga sus al imaginii. Alegeţi una din cele două opţiuni: click pentru a importa imaginea la dimensiuni întregi sau trageţi de cursorul import pentru a redimensiona imaginea.

3. Salvarea fişierelor

Pentru a salva un fişier alegeţi opţiunea Save sau Save as din meniul File. La Save as type puteţi alege formatul în care doriţi să salvaţi fişierul.

4. Spaţiul de lucru

Când deschideţi un document Fireworks pentru prima dată, spaţiul de lucru include ferestrele Tools, Properties, meniuri şi alte ferestre. Fereastra Tools este în partea

98

Page 99: curs DPW.docx

stângă, cuprinzând diferite unelte grupate pe categorii. Fereastra Properties apare în partea de jos a documentului şi afişează iniţial proprietăţile documentului.

Panourile Fireworks: Optimize permite modificarea setărilor care controlează dimensiunea şi tipul

fişierului şi lucrează cu paleta de culori a fişierului. Layers organizează structura documentului şi conţine opţiuni pentru crearea,

ştergerea şi manipularea straturilor. Common Library afişează conţinutul folder-ului Common Library care conţine

simboluri. Pages afişează paginile din fişierul curent şi conţine opţiuni pentru manipularea

paginilor. States afişează stările din fişierul curent şi include opţiuni pentru crearea

animaţiilor. History conţine comenzile recente care au fost aplicate documentului. Auto Shapes conţine forme automate care nu apar în panoul Tools. Styles permite stocarea şi reutilizarea caracteristicilor obiectelor. Document Library conţine simboluri grafice, butoane, animaţii care sunt în

documentul curent. URL permite crearea bibliotecilor care conţin URL-uri utilizate frecvent. Color Mixer permite crearea de culori noi pentru a fi adăugate la paleta de culori

a documentului curent şi pentru aplicarea lor la obiectele selectate. Swatches gestionează paleta de culori a documentului curent. Info oferă informaţii despre dimensiunile obiectelor selectate şi coordonatele

cursorului. Behaviors gestionează comportamente. Find permite căutarea şi înlocuirea elementelor dintr-un document sau mai

multe. Align conţin e controale pentru alinierea şi distribuţia obiectelor de pe canvas. Auto Shape Properties permite schimbarea proprietăţilor unei forme

automate. Color Palette permite crearea şi schimbarea paletelor de culori. Image Editting conţine unelte pentru editarea imaginilor. Path permite accesul rapid la comenzile referitoare la cale. Special Characters afişează caracterele speciale care pot fi folosite în texte. Symbol Properties gestionează proprietăţile simbolurilor grafice.

99

Page 100: curs DPW.docx

A – documentele deschiseB – bara de aplicaţiiC – Comutatorul spaţiului de lucruD – Bara de titlu a panoului E – Panoul de controlF – Panoul de unelteG – Butonul de restrângere a panouluiH – Grup de panouri ancorate

5. Tools panel

Panoul Tools este organizat în şase categorii: Select, Bitmap, Vector, Web, Colors şi View. Când selectaţi o unealtă panoul

Properties afişează opţiunile uneltei.

6. Operaţii asupra canvas-ului

6.1. Modificarea dimensiunilor canvas-ului

Puteţi modifica canvas-ul oricând doriţi.

Selectaţi una dintre următoarele opţiuni: Modif

yCanvasCanvas size

Selectaţi Select/Deselect, apăsaţi pe unealta pointer pentru a afişa

proprietăţile documentului şi în panoul Properties apăsaţi butonul Canvas size.

Introduceţi noile dimensiuni după care apăsaţi butonul Anchor pentru a specifica în ce parte va fi şters sau adăugat spaţiul şi apăsaţi OK.

6.2. Modificarea culorilor canvas-uluiSelectaţi una dintre următoarele opţiuni:

ModifyCanvasCanvas color Selectaţi Select/Deselect, apăsaţi pe unealta pointer pentru a afişa

proprietăţile documentului şi în panoul Properties apăsaţi butonul Canvas color.

6.3. Redimensionarea documentului şi a conţinutuluiSelectaţi una din următoarele opţiuni:

ModifyCanvasImage size

100

Page 101: curs DPW.docx

Selectaţi Select/Deselect, apăsaţi pe unealta pointer pentru a afişa proprietăţile documentului şi în panoul Properties apăsaţi butonul Image size.

În căsuţele de text Pixel Dimensions introduceţi noile dimensiuni. În căsuţele de text Print size introduceţi noile dimensiuni pentru imaginea care va

fi printată. În căsuţa Resolution introduceţi rezoluţia imaginii Pentru a menţine raportul dimensiunilor pe orizontală şi verticală selectaţi Constrain Proportions. Pentru a adăuga sau elimina pixeli în timp ce redimensionaţi imaginea astfel încât aceasta să-şi păstreze rezoluţia la dimensiuni diferite, selectaţi Resample Image. Pentru a aplica modificările doar paginii curente selectaţi Current Page Only.

6.4. Rotirea canvas-uluiCanvas-ul poate fi rotit cu 1800, 900 în sensul accelor de ceasornic sau invers. Pentru

a roti canvas-ul selectaţi ModifyCanvas şi alegeţi sensul de rotaţie.

6.5. Ajustarea canvas-uluiAjustarea canvas-ului se realizează prin selectarea opţiunilor Select/Deselect şi

click pe butonul Fit Canvas din panoul Properties.

. 6.6. Ştergere din documentPuteţi şterge porţiuni din document. Canvas-ul este redimensionat pentru a conţine

doar porţiunea definită. Porţiunile şterse le puteţi păstra în afara canvas-ului prin schimbarea preferinţelor înainte ştergere.

Pentru a şterge dintr-un document realizaţi următorii paşi: Selectaţi unealta Crop din panoul Tools sau selectaţi Edit Crop Document Trageţi chenarul porţiunii care doriţi să rămână după ştergere. Daţi dublu click înăuntrul chenarului sau apăsaţi Enter pentru a executa comanda.

7. Utilizarea riglelor, liniilor de ghidaj şi a grilei de ghidaj

Riglele, liniile de ghidaj şi grila de ghidaj vă ajută să plasaţi şi să aliniaţi obiectele în cadrul documentului.

7.1. Afişarea şi ascunderea rigleiSelectaţi View Rulers, vor apărea riglele orizontale şi verticale de-a lungul

marginilor documentului. Unitatea de măsură este în pixeli.

7.2. Crearea liniilor de ghidajDaţi click şi trageţi din rigla corespunzătoare. Poziţionaţi linia de ghidaj în canvas şi

daţi drumul butonului mouse-ului.

7.3. Mutarea liniei de ghidaj într-o poziţie specificatăDaţi dublu click pe linia de ghidaj şi introduceţi noua poziţie în căsuţa de dialog Move

Guide apoi apăsaţi OK.

7.4. Afişarea şi ascunderea linilor de ghidaj şi a grilei de ghidajSelectaţi View Guides Show Guides sau View Grid Show Grid.

7.5. Alipirea obiectelor la liniile de ghidaj sau la grila de ghidajSelectaţi View Guides Snap To Guides sau View Grid Snap To Grid.

7.6. Blocarea şi deblocarea tuturor liniilorSelectaţi View Guides Lock Guides.

7.7. Înlăturarea liniilor de ghidajTrageţi linia în afara canvas-ului.

7.8. Afişaţi distanţa dintre liniile de ghidajApăsaţi Shift când cursorul este plasat între liniile de ghidaj.

7.9. Smart Guides

101

Page 102: curs DPW.docx

Smart Guides sunt ghidaje temporare care vă ajută să creaţi, aliniaţi, editaţi şi transformaţi obiecte relativ la alte obiecte. Pentru a activa Smart Guides alegeţi opţiunea View Smart Guides. Puteţi folosi Smart Guides în următoarele feluri:

Când creaţi un obiect folosiţi Smart Guides pentru poziţionarea lui relativ la obiectele existente.

Când mutaţi un obiect folosiţi Smart Guides pentru alinierea lui cu celelalte obiecte. Când transformaţi un obiect Smart Guides apar automat pentru a înlesni

transformarea.

8. Undo şi repetarea acţiunilor multiple

Panoul History afişează cele mai recente acţiuni executate în Fireworks.

8.1. Undo şi Redo Selectaţi Window History pentru a deschide panoul History şi trageţi marcărul

Undo în sus sau în jos.

8.2. Repetarea acţiunilorExecutaţi anumite acţiuni şi alegeţi una dintre următoarele opţiuni:

Faceţi click pe o acţiune în panoul History Ctrl+click pentru a selecta mai multe acţiuni Shift+click pentru a selecta un domeniu continu de acţiuni

Apăsaţi butonul Replay din partea de jos a panoului History.

9. Selectarea şi transformarea obiectelor

Înainte de a executa orice acţiune asupra obiectelor acestea trebuie selectate. Pentru a selecta un obiect folosiţi panoul Layers sau o unealtă de selecţie.

Pointer tool selectează obiectele când faceţi click pe obiecte sau trageţi un chenar de selecţie în jurul lor

Subselection tool selectează un obiect individual dintr-un grup sau punctele unui obiect de tip vector

Select Behind tool selectează un obiect care este în spatele altui obiect..

Export Area tool selectează o bucată pentru a fi exportată ca fişier separat.

10.Selectarea pixelilor

Puteţi să editaţi pixeli de pe tot canvas-ul sau puteţi folosi una din uneltele de selecţie pentru a edita o porţiune din imagine.

Marquee tool selectează o porţiune dreptunghiulară din imagineOval Marquee tool selectează o porţiune elipsoidală din imagineLasso tool selectează o porţiune definită de utilizator din imagine.Polygon Lasso tool selectează o porţiune poligonală din imagine

Magic Wand tool selectează o porţiune de pixeli cu aceiaşi culoare din imagine

102

Page 103: curs DPW.docx

11.Transformarea şi distorsionarea obiectelor şi selecţiilor

Pentru a transforma obiectul, un grup de obiecte sau o selecţie de pixeli folosiţi uneltele Scale, Skew şi Distort.

Scale măreşte sau micşorează obiectul

Skew înclină un obiect de-a lungul unei axe specificate

Distort mută imaginile şi colţurile unui obiect în direcţia în care este tras punctul de selecţie cât timp această unealtă este activă. Aceasta este ulă în crearea aspectelor 3D.

12.Organizarea obiectelor multiple

12.1. Opţiuni pentru organizarea obiectelorGruparea obiectelor tratează obiectele ca şi cum ar fi unul sau păstrează relaţia

obiectelor în grup.Ordonarea obiectelor aranjează obiectele în faţa sau în spatele altor obiecte.Alinierea obiectelor selectate aliniază obiectele relativ la o porţiune din canvas sau la

axele de coordonate.

12.2. Gruparea şi degruparea obiectelorPentru a grupa sau degrupa obiectele selectate folosiţi ModifyGroup sau

ModifyUngroup.

12.3. Ordonarea obiectelor Pentru a muta un obiect sau un grup de obiecte în faţa sau în spatele altor

obiecte selectaţi ModifyArrangeBack to front sau ModifyArrangeSend to back

Pentru a muta un obiect sau un grup de obiecte cu o poziţie în spate sau în faţă selectaţi ModifyArrangeBring forward sau ModifyArrangeSend backward

12.4. Alinierea obiectelorAlinierea obiectelor selectate se face astfel:Selectaţi ModifyAlign după care alegeţi una dintre opţiuni: Left, Right, Top,

Bottom, Center Vertical , Center horizontal.Pentru a distribui în mod egal lăţimile şi lungimile a trei sau mai multe obiecte

selectate selectaţi ModifyAlignDistribute widths sau ModifyAlignDistribute heigths

13.Lucrul cu bitmap-uri

13.1. Crearea obiectelor bitmap prin desenareAtunci când creaţi un obiect bitmap acesta apare în stratul curent. Pentru a crea un

obiect bitmap urmaţi paşii: Selectaţi unealta Brush sau Pencil din secţiunea Bitmap a panoului Tools Desenaţi obiectul pe canvas

13.2. Crearea obiectelor bitmap goalePentru a crea un obiect bitmap gol realizaţi unul dintre următorii paşi:

Faceţi click pe butonul New bitmap image din panoul Layers Selectaţi EditInsertEmpty bitmap Selectaţi o porţiune goală din canvas şi umpleţi-o.

13.3. Tăierea sau copierea pixelilor şi lipirea ca un obiect bitmap nouSelectaţi o porţiune din imagine după care daţi Cut sau Copy şi lipiţi selecţia într-un

bitmap nou.

103

Page 104: curs DPW.docx

13.4. Convertirea obiectelor de tip vector selectate în bitmapExecutaţi unul din următorii paşi:

Selectaţi ModifyFlatten selection Selectaţi Flatten selection din meniul Options al panoului Layers

13.5. Retuşarea bitmap-urilor

Rubber Stamp tool permite copierea sau clonarea unei părţi din imagine

Blur tool micşorează focalizarea unei părţi din imagine

Smudge tool împinge imaginea pe direcţia în care este tras cursorul

Sharpen tool netezeşte o porţiune din imagine

Dodge tool luminează o porţiune din imagine

Burn tool întunecă o porţiune din imagine

Red-eye Removal tool reduce efectul de ochi-roşii în imagine

Replace Color tool schimbă o culoare cu altă culoare

13.5.1. Clonarea pixelilor

Selectaţi unealta Rubber Stamp, faceţi click pe o zonă din imagine pentru a stabili sursa clonării (pentru a stabili altă zonă faceţi Alt+Click)

Mutaţi-vă pe altă zonă trageţi cursorul mouseului

13.5.2 Înlocuirea culorilor din imagine

Selectaţi unealta Replace Color. În căsuţa From din panoul Properties alegeţi Swatch Selectaţi culoarea pe care vreţi să o înlocuiţi din căsuţa From Selectaţi culoarea cu care vreţi să înlocuiţi din căsuţa To Trageţi cursorul peste porţiunea pentru care vreţi să înlocuţi culoarea

14.Lucru cu obiecte de tip vector

Un obiect de tip vector este un obiect grafic a cărui formă este dată de către o cale. Forma vectorului este dată de către punctele care se află definite de-a lungul căii. Obiectele de tip vector pot fi primitive, forme automate şi forme definite de utilizator.

14.1. Formele primitiveFormele primitive cu care puteţi lucra sunt: linii, poligoane, dreptunghiuri, elipse,

dreptunghiuri rotunjite, stele sau forme de tip stea.

14.2. Forme automateFormele automate, spre deosebire de alte grupuri de

obiecte, au puncte de control de tip romb în plus faţă de punctele de control normale.

Uneltele Auto Shape: Arrow - săgeţi simple de orice proporţii şi

linii drepte sau întrerupte Arrow Line - săgeţi drepte şi subţiri Beveled Rectangle - dreptunghi cu colţuri

104

Page 105: curs DPW.docx

înclinate Chamfer Rectangle - dreptunghiuri cu colţuri rotunjite spre interior Connector Line - linii formate din trei segmente asemănătoare cu cele folosite

pentru a conecta elementele dintr-o diagramă Doughnut – inele umplute L-Shape - colţ de unghi drept Measure Tool - săgeţi simple care indică dimensiunile pentru elementele

de design cheie în pixeli sau inches Pie - grafic plăcintă Rounded Rectangle - dreptunghi cu colţ rotunjit Smart Polygon - poligon echilateral cu 3 până la 25 segmente Spiral - spirală deschisă Star - stea care poate avea între 3 şi 25 colţuri.

14.3. Formele definite de utilizatorFormele definite de utilizator se pot desena folosind Pen

Tool, care are o mare varietate de moduri de desenare Air Brush, Calligraphy, Charcoal, Crayon, şi Unnatural. Fiecare categorie poate avea mai multe opţiuni, cum ar fi: Light Marker şi Dark Marker, Splattered Oil, Bamboo, Ribbon, Confetti, 3D, Toothpaste, şi Viscous Alien Paint.

Formele definite de utilizator, pot fi create şi prin puncte de control definite cu ajutorul uneltei Pen.

15.Lucrul cu text

Adobe Fireworks permite folosirea mai multor facilităţi specifice aplicaţiilor de grafică sofisticată, incluzând o mare varietate de fonturi şi mărimi, spaţiere, culoare.

Introducerea textului se face utilizând unealta Text şi opţiunile din panoul Properties pentru a formata textul din documentul de lucru.

În documentele Fireworks testul apare înăuntrul unui block de text (dreptunghi cu puncte de control). Blocurile de text pot fi cu dimensiune fixă sau automată.

Blocurile de text cu dimensiune automată se măresc pe orizontală pe măsură ce se adaugă text. Sunt create automat atunci când faceţi click pe canvas având unealta Text selectată.

Blocurile de text cu dimensiune fixă permit controlul dimensiunii textului conţinut. Acestea sunt create automat când trageţi cursorul şi desenaţi un bloc de text folosind unealta Text.

Atunci când cursorul text este activ într-un bloc de text în colţul din dreapta sus al blocului de text este vizibil un pătrat sau un cerc. Cercul indică un bloc de text cu dimensiune automată, iar pătratul indică un bloc de text cu dimensiune fixă. Executând dublu click pe acest colţ se poate schimba dintr-un tip de bloc de text în altul.

15.1. Ataşarea unui text la o calePentru a ataşa un text la perimetrul unei căi

selectaţi textul şi calea ţinând apăsată tasta Shift, iar apoi selectaţi Text Attach To Path.

Pentru a plasa un text înăuntrul unei căi selectaţi textul şi calea ţinând apăsată tasta Shift, iar apoi selectaţi Text Attach In Path.

Pentru dezataşa un text de la o cale selectaţi Text Deattach From Path.

16.Utilizarea culorilor pentru contur şi umplere

În secţiunea Colors din panoul Tools executaţi click pe iconiţa din stânga casetei Fill Color sau Stroke Color pentru a o activa.

Pentru a reseta culoarea de contur şi de umplere daţi click pe butonul Set Default Stroke/ Fill colors aflat în panoul Tools sau în Color Mixer.

105

Page 106: curs DPW.docx

Pentru a înlătura culoarea de contur sau de umplere apăsaţi pe butonul No stroke or fill din secţiunea Colors a panoului Tools.

Pentru a schimba între ele culorile conturului şi umplerii apăsaţi Swap Stroke/Fill colors din panoul Tools.

17.Decuparea imaginilor şi utilizarea în cadrul paginilor web (slices)

Decuparea imaginii presupune împărţirea unui document Fireworks în bucăţi mai mici şi exportarea lor în fişiere separate.

17.1. Crearea bucăţilor dreptunghiulare Desenarea unui obiect dreptunghiular Slice

Selectaţi unealta Slice şi ţinând cursorul apăsat definiţi bucata care urmează a fi tăiată.

Crearea unui obiect dreptunghiular Slice pe baza unui obiect selectat

Selectaţi EditInsertRectangular slice. Bucata va include întregul obiect selectat. Dacă sunt selectate mai multe obiecte, selectaţi single pentru a crea un singur obiect slice care acoperă toate obiectele selectate sau selectaţi multiple pentru a crea câte un obiect slice pentru fiecare obiect selectat.

17.2. Crearea obiectelor slice nedreptunghiulare

Desenarea unui obiect nedreptunghiular SliceSelectaţi unealta Polygon Slice şi faceţi click

pentru a plasa vârfurile poligonului.Crearea unui obiect nedreptunghiular Slice pe baza

unui obiect de tip vector sau a unei căiSelectaţi obiectul de tip vector şi apoi selectaţi

EditInsertPolygon slice.

17.3. Exportarea slice-urilorPentru a exporta toate bucăţile în fişiere separate executaţi FileExport, în

fereastra export selectaţi la Export-Images Only, Slices-Export slices şi debifaţi Selected Slice Only şi Include areas without slices apoi daţi Save.

106

Page 107: curs DPW.docx

Modulul IV Microsoft® Expression Web

1.Descrierea aplicatieiAplicatia Expression Web a fost realizata de compania Microsoft in ideea de a

concura serios cu celelate programe de web design, mai precis cu aplicatia Dreamweaver.Avand in vedere ca Expression Web este urmasul FrontPage-ului( care era destul de

practic dar simplist), dezvoltatorii aplicatiei au trebuit sa lucreze pe doua fronturi: sa realizeze o interfata utilizator asemanatoare celei din CorelDraw sau Photoshop sau Dreaweaver, interfata care sa tenteze utilizatorii sa foloseasca aplicatia si a l doilea lucru se refera la introducerea de noi elemente indispensabile in momentul de fata programatorilor web (legaturile cu bazele de date, recunoastere si formatare cod Php, actualizare dinamica a paginii).

Toate aceste elemente au fost introduse in cadrul aplicatiei Expression Web3, aplicatie ce a inceput sa fie mentionata pe blogurile web designerilor.

Majoritatea elementelor de baza ce pot fi inglobate intr-o pagina web sunt pozitionate la indemana utilizatorului, nefiind necesara decat selectarea obiectului dorit si deplasarea cursorului in stanga sau in dreapta spatiului de lucru, in functie de carctereristica pe care dorim sa o modificam.

Daca se doreste inserarea unui obiect comun, elementul „Toolbox” prezent in dreapata spatiului de lucru ofera mai multe categorii ce contin structurile si obiectele de baza ale unei pagini, introducerea acestora realizandu-se pe sistemu „Drag-and-drop”(trage obiectul dorit in pagina -si-da-i drumul in locul unde dorit sa il pozitionam).

1.1. Interfata aplicatieiExpression Web reprezinta un program competitiv realizat de compania Microsoft cu

scopul de a se impune pe segmentul de aplicatii adresate designerilor de pagini web.In afara elementelor clasice HTML si CSS, Expression web permite realizarea facila a

legaturilor cu bazele de date si introducerea rapida a tuturor elementelor pe care un utilizator ar dori sa le aiba in propriul site.

Interfata oferita utilizatorului este una prietenoasa, in care fiecare element este plasat logic, acolo unde utilizatorul ar intui ca il poate gasi.

Cele mai importante elemente ale interfetei utilizator sunt:1.Bara de unelte(Toolbox), prezenta in dreapta spatiului de lucru,

care contine majoritatea elemntelor ce ar putea fi introduse intr-un website sau o pagina de Internet.

Aceasta bara contine doua categorii de obiecte:HTML si ASP.NET Controls, fiecare continand la randul ei mai multe subcategorii:HTML(Tags, Form Controls, Media), ASP.NET Controls(Standard, Data, Validation, Navigation, etc.). Dand dublu clic pe o subcategorie aceasta se poate extinde sau se poate comprima.

2.Fereastra pentru particularizarea stilurilor CSS- prezenta in dreapta, jos

In cadrul acestei ferestre se pot defini noi stiluri CSS, apasand butonul „New Style” si folosindu-ne de optiunile oferite de aplicatie prin intermediul casetei de derulare „Options”:

3.Fereastra pentru particularizarea elementelor(Tag Properties)- prezenta in stanga, jos.

Aceasta fereastra contine majoritatea optiunilor de formatare a unui element selectat anterior, caracteristici ce pot fi modificate de utilizator:

4.Bara pentru prezentarea modului de afisare a paginii- prezenta sub spatiul de lucru.

Exista trei moduri de afisare a informatiei: a. Modul „Design”- in care este vizibil doar

continutul unei pagini, fara codul sursa

107

Page 108: curs DPW.docx

b. Modul „Split”- in care este divizat spatiul in doua elemente: partea de sus, in care este prezentat continutul paginii si partea de jos, in care apare codul sursa al paginii:

c. Modul „Code”- in care este prezentat doar codul sursa asociat paginii care a fost realizata:

5.Bara pentru afisarea stilurilor(Style), a fonturilor(Font) si a dimensiunii fonturilor(Font Size), prezenta deasupra spatiului de lucru:

Bara pentru stiluri permite selectarea

stilurilor presetate(Heading1-Heading6), a listelor ordonate si neordoneta si stilurilor de finite de utilizator:

108

Page 109: curs DPW.docx

Bara pentru dimensiunea fonturilor contine dimensiunile standard declarate in puncte:

Deschiderea acesteia se face dand clic pe sageata corespunzatoare(prezenta in dreapta acesteia).

2. Crearea unui siteIn aplicatia Expression Web site-urile se creaza accesand meniul

File>New>Web Site.Putem alege fie un site web care sa contina o singura pagina(One page

Website) sau putem alege(lucru recomandat) optiunea”Empty Web Site”-aceasta optiune permite realizarea unui site al carui continut sa il putem declara dupa bunul plac.

Odata cu crearea noului site se realizeaza si un folder special dedicat elementelor ce vor face parte din site-ul creat: alte foldere, baze de date, etc. Este indicat mai ales in cazul imaginilor ca inainte de ale folosi sa le copiem in folderul site-ului deoarece in momentul activarii site-ului doar elementele specifice acestuia vor putea fi incarcate rapid, celelate necesitand timp suplimentar.

Se observa folderul creat impreuna cu pagina implicita html(Default.htm).In cadrul unui folder se pot introduce:-foldere noi, dand clic dreapta pe foldeul initial>New>Folder

-alte elemente(baze de date, imagini,etc.), accesand meniul File>Import>File>selectam elementul dorit

109

Page 110: curs DPW.docx

2.1.Crearea unei pagini In cadrul site-ului nou creat putem introduce pagini de Internet cu diferite

caracteristici(de tipuri diferite). Astfel, accesand meniul File>New>Page sau dand un clic pe

sageata corespunzatoare tastei de comenzi rapide”Element nou” , utilizatorului i se ofera posibilitatea de a alege dintre urmatoarele categorii:

-General-ASP.NET-CSS Layouts-Style Sheets-Frame PagesIn cadrul categoriei “General” putem selecta

unul dintre urmatoarele tipuri de pagini:-HTML- ce initial contine doar elemente HTML-ASPX- ce permite realizarea legaturilor cu

bazele de date, admitand continut dinamic-PHP- ce recunoaste comenzile specifice

limbajului PHP -CSS- ce contine setari ce permit recunoasterea claselor si identificatorilor din

limbajul extins CSS-Masterpage- permite realizarea unei pagini sablon al carei continut sa poata fi

preluat si modificat ulterior de catre alte pagini-JavaScript- contine baza necesara recunoasterii automate a scripturilor Java

2.2. Vizualizarea unei pagini in browser

Pentru a vizualiza continutul unei pagini in browser avem urmatoarele posibilitati:a.Selectam pagina dorita(simplu clic NU dublu clic)> accesam meniul

“File”>”Preview in Browser”>alegem browser-ul dorit:

b.Apasam tasta “F12”c. Selectam pagina dorita>clic dreapta>dam un clic pe

browser-ul implicit afisat(in exemplu este “Windows Internet Explorer 8.0”):

Daca alegem optiunea “Preview in Multiple Browsers” se va afisa pagina selectata in toate browser-ele instalate pe calculatorul pe care se lucreaza(IE, Mozilla Firefox, Google Chrome etc.)

110

Page 111: curs DPW.docx

2.3. Salvarea unui proiect

Pentru a salva un proiect reprezentat de un site cu mai multe elemnte sau de o singura pagina avem urmatoarele posibilitati:

a.Accesam meniul “File”>”Save” sau “Save as”b.Apasam combinatia de taste “Ctrl+S”c.Utilizam tasta de comenzi rapide

2.4. Inchiderea unui proiect

Pentru a inchide un proiect reprezentat de un site nou sau o pagina solitatra avem urmatoarele optiuni:

a.Accesam meniul “File”>”Exit”b.Apasam combinatia de taste” Alt+F4”Obs: La inchiderea unui proiect ce nu a fost salvat anterior ni se va cere sa declaram

un nume pentru proiectul in cauza, in caz contrar stabilindu-se un nume ce tine cont de primele caractere ce apar in proiect.

2.5. Formatarea caracterelor

Caracterelor li se poate aplica o anumita dimensiune, un anumit stil, un efect de ingrosare, subliniere sau inclinare folosind tastele de comenzi rapide prezente sub bara meniurilor:

Tot aici sunt si optiunile de aliniere la stanga, dreapta sau de centrarea a caracterelor.

Pentru a realiza o formatare complexa a caracterelor putem utiliza toate optiunile CSS urmand pasii:

-selectam textul pe care dorim sa il modificam-din bara “Tag Properties”>categoria Attributes>dam un clic in dreapta comenzii

“style”>dam un clic pe “...”:

Se observa aparitia unei ferestre ce contine urmatoarele categorii:1.Font-permite alegerea dimensiunii(size), a greutatii(weight), a stilului(style), a

efectului de transformare aplicat textului(transform) si a culorii(color) textului

111

Page 112: curs DPW.docx

In plus, eventualele efecte de barare cu o linie(line-through) , de supraliniere (overline), de subliniere(underline) sau de clipire(blink) pot fi aplicate prin simpla bifare acestora.

2.Block-permite declararea setarilor utilizate la:-alinierea pe verticala a textului(vertical-align)-alinierea pe orizontala a textului(text-align)-spatierea cuvintelor(word-spacing)-spatierea caracterelor(letter-spacing)Obs:pentru ultimele doua optiuni se pot declara valori numerice(in pixeli) sau pot fi

utilizate unitati de masura(in, cm, mm) sau procente(procentul declarat referindu-se la dimensiunea standard a caracterelor)

3.Background -permite declararea setarilor utilizate la:-culoarea de fundal(background-color)-eventuala imagine folosita drept fundal(background-image)-daca imaginea utilizata este mai mica decat dimensiunea ecranului, aceasta se

poate repeta folosind comanda background-repeat:repeat-x(repetare pe orizontala), repeat-y(repetare pe verticala), repeat(repetare si pe orizontala si pe verticala) sao no-repeat(imaginea apare o singura data, nerepetandu-se).

-pozitionarea fundalului pe orizontala(background-position(x))-pozitionarea fundalului pe verticala(background-position(y))Obs:folosind ultimele doua optiuni fundalul isi va face aparitia doar pe o parte a

pagini si nu pe toata pagina4.Border-permite alegerea valorilor pentr:-tipul chenarului(border-style)-latimea chenarului(border-width)-culoarea chenarului(border-color)

2.6. Introducerea si formatarea imaginilor

Pentru a introduce o imagine intr-o pagina avem urmatoarele posibilitati:a.Accesam meniul “Insert”>”Image”b.Utilizam combinatia de taste “Ctrl+I”Odata selectata locatia din care aducem imaginea, aceasta va fi introdusa in pagina

curenta.Pentru formatarea imaginii dam clic dreapta pe imagine>”Properties” si isi face

aparitia urmatoarea caseta de dialog:

In categoria “General”, apasand butonul “Browse” avem posibilitatea sa schimbam imaginea afisata prin navigarea printre folderele accesibile.

Optiunea “Alternate Text” ofera posibilitatea declararii unui text ce isi va face aparitia daca imaginea introdusa nu exista sau a fost stearsa.

“Long Description” reprezinta o descriere a imaginii ce urmeaza a fi afisata, descriere ce ar

112

Page 113: curs DPW.docx

trebui sa ofere utilizatorului informatii despre domeniul sau aria din care provine imaginea respectiva.

Subcategoria “Hyperlink” ofera utilizatorului posibilitatea sa defineasca o hiperlegatura ce poate fi urmata daca dam un clic pe imaginea ce va fi afisata. Fisierul spre care va face trimitere hiperlegatura poate fi alesc prin apasarea butonului “Browse”.

In categoria “Appearance” sub oferite optiuni ale modului de afisare al imaginii selectate:

-“Wrapping Style” permite setarea modului in care imaginea se va incadra in textul ce apare deasupra si dedesubtul sau

-“Alignment” permite declararea modului de aliniere al imaginii in raport cu pagina curenta

-“Border thickness” permite setarea grosimii eventualului chenar pe care il aplica imaginii

-subcategoria “Size” permite redimensionarea imaginii(marirea sau micsorarea acesteia), elemente declarate in pixeli sau in procente(exeemplu de micsorare:20%, exemplu de marire:342%). Daca nu dorim ca imaginea sa se modifice proportional trebuie sa debifam optiunea “Keep aspect ratio”.

-raportarea marginilor imaginii la marginile paginii in care este incadrata se realizeaza folosind optiunile “Horizontal margin” si “Vertical margin”.

Declararea chenarului unei imagini se realizeaza dand clic dreapta pe imagine>”Borders and Shading”.

Dand un clic pe una dintre setarile “Default”, “Box” sau “Custom” putem alege din coloanele din centru:

-stilul(style)- dand un clic pe acesta-culoarea- dand clic pe sageata corespunzatoare si

alegand culoarea dorita-latimea chenarului(width)- declarand o dimensiune in

pixeli(ex:6) sau marind sau micsorind dimensiunea initiala cu ajutorul sagetilor

-spatierea imaginii fata de chenar(Padding), la fel ca in cazul tabelelor, specificand spatiul lasat liber intre imagine si margile din stanga, dreapta, sus si respectiv jos in pixeli

Obs: stilul se aplica dand un clic pe marginea din stanga, dreapta, sus si jos prezente in dreapta casetei de dialog:

2.7. Introducerea hiperlegaturilor

Pentru a introduce o hiperlegatura urmam pasii:

-selectam textul sau imaginea ce va reprezenta baza hiperlegaturii

-accesam meniul Inserare>Hyperlink(sau Ctrl+K)

-alegem fisierul sau pagina web catre care dorim sa realizam hiperlegatura>OK.

Se observa schimbarea culorii textului sau imaginii respective(asa cum se intampla si in HTML); in momentul plasarii cursorului deasupra hiperlegaturii se observa posibilitatea urmarii hiperlegaturii daca apasam combinatia Ctrl+clic.

Pentru a particulariza hiperlegaturile din pagina avem posibilitatea modificarii culorii hiperlinkurilor in functie de caracteristicile acestora(la fel ca in CSS). Astfel, selectam hiperlegatura>clic dreapta>Page Properties>Formatting>modificam culorile respective:

113

Page 114: curs DPW.docx

Atributele generale ale hiperlegaturii pot fi modificate in fereastra Tag Properties>Attributes, unde putem modifica fisierul utilizat la realizarea hiperlegaturii, atributele vizibile ale acesteia, etc:

2.8. Introducerea de continut CSSLa inceput deschidem pagina “Default” (dand dublu clic

pe aceasta) si alegem un element de tip Header1 in care introducem un anumit text, apoi mai introducem un element de tip Header2 in care introducem un alt text:

Rezultatul va fi urmatorul:

Apoi introducem elementele unei liste neordonate ce vor reprezenta parti ale meniului paginii:

Fiecare din aceste elemente trebuie sa reprezinte o hiperlegatura catre o pagina pe care o putem realiza ulterior.

Pentru definirea unui stil nou CSS urmam pasii:-apasam butonul “NewStyle” din cadrul ferestrei “Manage Styles” prezenta in dreapta, jos a spatiului de lucru:

Isi face aparitia o fereastra de dialog ce permite setarea urmatoarelor atribute:-Selector- permite alegerea unui mod de formatare specific obiectului selectat( daca este vorba de un text putem alege h1, ..., h6, daca este vorba de o imagine alegem img etc.)!! Stilul nou declarat se aplica numai tipului de Selector precizat din pagina curenta.De exemplu: primul stil se va aplica numai elementelor de tip h1(Header1) deoarece asa a fost declarat, adica textului “My Web Site” -Define in- permite definirea stilului nou pentru aplicarea sa in pagina curenta sau intr-o alta pagina specificata

114

Page 115: curs DPW.docx

In cadrul ferestrei apar si urmatoarele categorii:1.Font-permite utilizarea atributelor(prezente in dreapta categoriei):

-font-family- declara familia de fonturi careia ii va apartine stilul declarat-font-weight- declara greutatea fontului fie valori(100,200,...) fie atribute predefinite(normal, bold, lighter, bolder)-font-size- declara dimensiunea fonturilor fontului folosind valorile recunoscute(xx-small,...,xx-large)-text-transform- declara eventualul efect de transformare aplicat fontului din stil(scrierea cu litere mari-uppercase, scrierea avand prima litera litera mare-capitalize, etc.)-color- declara culoarea caracterelor din stilul in curs de definire

2.Background- seteaza fundalul pe care o sa apara textul din stilul declarat Drept fundal putem utiliza o culoare sau o imagine pe

care o selectam dand un clic pe butonul “Browse”3.Border- permite definirea unui chenar aplicat textului

in cauza, chenar pentru care se poate specifica:-latimea sa(border-width)-culoarea chenarului(border-color)

Se observa faptul ca dupa setarea stilului nou, acesta apare in caseta “CSS Styles”, avand in exemplul nostru numele “h1”:

In acelasi mod declaram alte stiluri printre care cele legate de setarea hiperlegaturilor active, vizitate sau obisnuite:

Pentru a aplica un stil personalizat unei portiuni de text care nu a fost declarata de tip h1,...,h6 sau care face parte dintr-o parte Header si vrem sa apara diferit, declaram stilul nou folosind Selectorul “.mystyle”:selectam textul caruia dorim sa ii aplicam stilul nou si dam clic dreapta pe stilul “.mystyle”>”Apply style”:

115

Page 116: curs DPW.docx

Se observa faptul ca initial in bara “CSS Properties” apare textul “No style” deoarece nu fusese declarat niciun stil, insa pozitionand cursorul in dreptul unui element caruia i s-a aplicat un stil apare stilul respectiv,specificat prin nume, cu toate caracteristicile sale:

In acest fel putem defini o multitudine de stiluri CSS, stiluri ce se pot aplica anumitor portiuni de text selectate.

3. Crearea si formatarea formularelor

Majoritatea formularelor presupun realizarea unei pagini cu continut dinamic de tipul “.aspx”. Presupunem ca deja am realizat aceasta pagina accesand meniul “File”>”New”>”Page”>”ASPX”.

Se observa aparitia elementului de tip “form” in pagina nou creata.

Numele fiecarei parti a formularului va reprezenta eticheta(label-ul) partii respective.

Elementul “label” se introduce din “Toolbox” utilizand metoda “drag-and-drop”(trage si da-i drumul):

Completam eticheta introdusa cu textul ce urmeaza sa apara in formular(in cazul

nostru “First Name”): Adaugam in continuarea etichetei un element de tip “TextBox” din categoria

“Toolbox” prezenta in dreapta spatiului de lucru(prin tragere in spatiul de lucru), in care utilizatorul va putea introduce datele dorite in formular:

In acelasi mod introducem alte etichete si casete text corespunzatoare folosind nume diferite:

116

Page 117: curs DPW.docx

La sfarsitul formularului introducem si doua butoane utilizand elementul “Button” din “Toolbox”:

Caracteristicile unui buton sunt prezentate in stanga spatiului de lucru la categoria “Tag Properties”:Intre optiunile disponibile utilizatorului

privind formatarea(modificarea) butonului in cauza putem enumera:-text: prezinta textul ce apare pe butonul

respectiv(de exemplu: “Trimite” sau “Sterge”)-ID: prezinta numele sub care va fi recunoscut butonul in cadrul formularului-type: prezinta tipul butonului(Reset, Submit etc.), tip ce poate fi modificat in functie de dorinta utilizatorului

Butoanele de diferite tipuri se introduc din “Toolbox”, alegand tipul de buton si functia pe care dorim sa o prezinte:

1. Butonul de tip “Reset” permite stergerea datelor dintr-un formular

2. Butonul de tip “Submit” permite trimiterea datelor introduse intr-un formular catre o adresa de e-mail valida

3. Butoanele “Radio”permit alegerea unei optiuni sau valori dintr-un grup de valori declarat

4. Butonul de tip “Password” permite utilizatorului sa declare o parola si sa o introduca ulterior in cadrul formularuluiPentru fiecare element al formularului putem impune anumite restrictii privind tipul sau valoarea datelor introduse. Toate aceste restrictii tin de validarea datelor, subcategorie prezenta in “Toolbox”:1.RegularExpressionValidator-permite de clararea

unui mesaj de eroare, setarea legaturii cu un anumit camp2.RequiredFieldValidator-atunci cand este obligatorie

introducerea datelor in campul precizat3.RangeValidator-permite de clarae unui tip de date

utilizat si a unui interval in care sa se situeze datele introduse

4.CompareValidator-permite declararea unei valori cu care sa se compare datele introduse

5.ValidationSummary-permite definirea unei casete in care vor fi prezentate toate neconcordantele ce au aparut la introducerea datelor si cum pot fi acestea corectate

Fiecare element contine un mesaj de eroare ce apare in momentul in care datele introduse intr-un anumit

camp nu corespund.

117

Page 118: curs DPW.docx

Pentru a se realiza validarea reala a datelor trebuie specificat campul in functie de care se va realiza validarea:

In functie de acest camp aplicatia Expression Web ca sti ce fel de date sa accepte.Totodata poate fi declarata si culoarea textului ce apare in mesajul de eroare:

La fel actionam si in cazul campului “LastName”, atasandu-i tot un element de tip “RegularExpressionValidator”, insa declarand un alt mesaj de eroare.

In cazul campului “Age”(Varsta) vom folosi un element de tipul “RequiredFieldValidator”,insa presupunand ca formularul realizat se adreseaza doar adultilor nu minorilor trebuie sa fie acceptate doar numere mai mari de 18, de aceea vom atasa un element de tipul “CompareValidator”:

Caracteristicile elementului “CompareValidator” tin de:-aparitia mesajului de eroare-valoarea cu care se va compara valoarea introdusa de utilizator:-operatorul de comparatie ce va fi folosit :

In cazul campului ce permite introducerea unei adrese de e-mail trebuie sa restrictionam intrarile astfel incat sa fie acceptate doar adrese de e-mail valide, ce respecta standardul international. Astfel, vom atasa un element de tipul “RegularExpressionValidator” la care vom modifica atributul “ValidationExpression”dand clic pe caseta ”...” ce apare in dreapta atributului.

Astfel, se deschide o caseta de dialog din care alegem optiunea “Internet e-mail address”:

In cazul ultimului camp ce necesita a fi completat de utilizator(“Date of Purchase”- Data cumpararii), deoarece data vrem sa fie cuprinsa intr-un anumit interval declarat, vom utiliza un element de tipul “RangeValidator” pentru care declaram mesajul de eroare, campul folosit la comparatie si in plus valoarea minima, valoarea maxima si tipul datelor ce vor fi acceptate:

118

Page 119: curs DPW.docx

Dupa salvarea paginii(Ctrl+S), incercam sa o vizualizam intr-un browser(F12).

Se observa faptul ca toate neconcordantele legate de introducerea datelor sunt afisate in dreapta fiecarui element al formularului.

Pentru a afisa toate informatiile legate de introducerea incorecta a datelor la un loc introducem in pagina un element de tipul “ValidationSummary”:

Datele completate incorect vor fi in acest fele prezentate la sfarsit, grupate, nu separat, pentru fiecare camp in parte.

3.2. Crearea paginilor de tip Master Page

Acest tip de pagini este utilizat la realizarea de sabloane ce vor putea fi mostenite de catre alte pagini realizate ulterior.

In fiecare Master Page vor exista zone editabile si zone needitabile, in functie de modul de creare. Fiecare MasterPage va fi salvata cu extensia “.masterfile”.

La inceput accesam meniul “File”>”New”>”Page”>”Master Page”.In mod implicit, pagina de tip Master Page prezinta un element de tipul

“ContentPlaceHolder” ce va administra continutul paginii:

119

Page 120: curs DPW.docx

Adaugam apoi cateva tag-uri “div” preluate din “Toolbox>HTML>Tags” prezenta in dreapata spatiului de lucru. Aceste elemente functioneaza pe principiul drag-and-drop adica dati un clic pe ele>tinand apasat clic stanga ne deplasam in spatiul de lucru>le dam drumul in locul unde dorim sa le plasam.

Fiecare tag “div” corespunde cate unei zone diferite pe care dorim sa o definim in cadrul Master Page.

Primul container va fi de tip Header deoarece dorim sa contina antetul site-ului:

In

ultimul container plasam nota de subsol:

Celelalte doua regiuni necompletate am dori sa reprezinte doua regiuni editabile. Pentru acest lucru selectam primul container>clic dreapta>ManageMicrosoft ASP.NET:

Redenumim aceasta regiune “Content1” si dam clic pe butonul “Add”>”Close”:

120

Page 121: curs DPW.docx

La fel facem si cu al doilea container necomletat, redenumindu-l “Content2”.Salvam pagina Master Page cu numele main.master(main=pagina principala), apoi

creem o pagina care sa utilizeze pagina Master Page realizata anterior:Meniul “File”>”New”>”Page”>”From MasterPage”>specificam pagina creata anterior>OK:

In acest moment daca ne uitam la pagina nou creata observam ca prima si ultima sectiune nu sunt editabile:

P e n t r u a i n t r o d u c e c o n t i n u t i n c e l e d o u a z o n e e d i t a b i l e d i n m i j l o c , s e l e c t a m p r i m u l

container>ne plasam la capatul din dreapata si cand apare sageata dam un clic pe ea si slectam optiunea “Create Custom Content”:

In acest fel avem posibilitatea de a introduce propriul continut in regiunile editabile:

Salvam fisierul cu numele dorit, observand faptul ca pagina realizata este de tip “.aspx”, prezentand

deci continut dinamic si vizualizam pagina intr-un browser instalat.

Este de remarcat faptul ca in codul sursa al paginii realizate nu apare codul sursa din Master Page cu toate elementele acestuia ci numai legatura catre Master Page si codul elementelor introduse ulterior in pagina realizata.

4. Utilizarea controalelor ASP.NET in Expression Web

121

Page 122: curs DPW.docx

Elementele ASP.NET sunt utilizate pentru realizarea de legaturi interactive dintre o pagina web si datele dintr-o baza de date. Toate modificarile aduse datelor din baza de date vor putea fi vizibile in pagina web.

Incepem prin crearea unui web site nou urmand calea File> New> Web Site:

Se observa faptul ca avem la dispozitie anumite modele de site-uri oferite prin intermediul template-urilor, modele ce permit preluarea unui anumit stil de formatare si a unui anumit tip de organizare al site-ului.

Pentru a configura singuri site-ul vom utiliza categoria General> Empty Web Site

Daca alegem prima optiune site-ul va fi format dintr-o singura pagina, iar daca alegem ultima optiune vom putea prelua dintr-o alta sursa un site web extern.Dand clic pe OK Expression Web a creat un folder web ce initial nu contine nici un fisier. Fisierele l e vom adauga ulterior urmand calea File> New>……..

122

Page 123: curs DPW.docx

Sau putem utliliza optiunile atasate shortcut-ului New:

Sau mai repede, putea da clic dreapta pe folder-ul creat>New:

In concluzie alegem File>New>ASP.NET>ASPX>OK:

In modul de vizualizare Split site-ul va arata astfel:

123

Page 124: curs DPW.docx

Partea impresionanta la Expression Web tine de posibilitatea de a realiza site-uri interactive sau dinamice, prin intermediul conexiunilor la baze de date sau al hyperlegaturilor, lucru posibil chiar daca utilizatorul nu este un dezvoltator consacrat de pagini web.

De notat este si faptul ca utilizatorii pot vizualiza modificarile produse automat in codul sursa prin adaugarea si utilizarea de formulare, liste, butoane sau alte elemente sub forma de obiecte in Expression Web.

In formularul nostru vom crea un control ce va trebui sa acceseze date dintr-o baza de date deoarece de cele mai multe ori cand realizam site-uri dinamice va trebui sa accesam date din baze de date.

Se observa ca in partea dreapta avem un tab numit „Data Source Library”. Numele sau poate sa induca putin in eroare utilizatorul deoarece numele ar duce cu gandul la selectarea directa a surselor de date:

De retinut este faptul ca optiunea „ASP.NET Connections” reprezinta doar informatia de legatura catre anumite surse de date pe care le veti utliza si nu sursele de date(bazele de date) propriu-zise.

Din bara de instrumente, la categoria „Standard” avem obiectul „DropDownList” , obiect pe care il vom introduce in cadrul formularului:

Rezultatul va fi urmatorul:

124

Page 125: curs DPW.docx

Se observa in partea de sus si codul atasat Listei, precum si pozitionarea acesteia in cadrul formularului. Daca unul dintre elemente este selectat atunci si codul corespunzator va fi selectat de asemenea, acest lucru usurand sarcina utilizatorului de a identifica codul corespunzator fiecarui obiect din pagina.

Putem schimba ID-UL listei fie din partea de cod fie din lista de taribute prezenta in stanga paginii.Oricum, schimbam numele listei in „1stTest”:

Este evident ca primul lucru de care avem nevoie este o baza de date, asa ca vom utiliza o

baza de date SQL pe care o vom adauga proiectului nostru: clic dreapta pe proiect>New>

>introducem numele folderului „App_Data”.Apoi accesam meniul File>Import>File:

Alegeti „AddFile” si alegem fisierul „Test .mdf”>OK, acest lucru determinand aparitia sa:

In acest moment avem fisierul bazei de date atasat proiectului nostru.

In dreptul Listei din formular se observa aparitia unei sageti ce permite afisarea anumitor optiuni ale unui meniu contextual:

125

Page 126: curs DPW.docx

Alegem optiunea „Choose data source”, lucru care ne duce la configurarea sursei de date.

Selectam o sursa de date:

Alegem „Database” si pastram ID-ul implicit oferit de program>OK.Acum urmeaza sa alegem conexiunea catre baza de date, dar cum momentan nu avem

asa ceva alegem „New Connection”:

Obs: este indicat sa folosim o baza de date MsAccess cu extensia “.mdb” sau o baza de date create in MySQL.

In cazul nostru alegem „Microsoft SQL Server DataBase File”:

126

Page 127: curs DPW.docx

Alegerea depinde de modul de lucru al serverului si de tipul bazei de date utilizate>OK.

In acest moment putem crea un nou fisier al bazei de date sau putem utiliza un fisier existent. In acest exemplu avem un fisier asa ca dam un clic pe „Browse”:

Si cautam in arborele de directoare fisierul bazei de date dorit.Se observa faptul ca fie folosim autentificare oferita de SO Windows fie putem opta

pentru oautentificare a unui Server SQL, lucru posibil doar pe baza unui nume de utilizator si a unei parole.

In cazul autentificarii Windows apasam butonul „Advanced” , lucru ce determina aparitia urmatoarei ferestre:

Se poate crea o noua instanta a SGBD-ului utilizat (diferita de instanta implicita oferita

de sistem) prin declararea sau alegerea acesteia din categoria „Source”>Data Source.

Daca dorim sa declaram doar metodic instanta cu toate ca stim ca fie este o instanta fictiva fie ca nu suntem siguri de functionalitatea ei, alegem la „UserInstance”>False>OK. Acest lucru ne arata ca instanta implicita va fi utilizata deoarece instanta nou declarata(SQL2005) este setata drept False:

127

Page 128: curs DPW.docx

In acest moment putem testa conexiunea, dand un clic pe butonul „Test Connection”:

Dupa ce observam testarea cu succes a conexiunii apasam tasta OK.Apasam tasta „Next”.Apoi alegem un nume pentru fluxul conexiunii sau lasam numele

implicit:

De asemenea bifam optiunea “Yes, save this conection as”>Next.Dorim sa salvam conexiunea datorita faptului ca s-ar putea sa dorim sa o folosim in

viitor.In acest moment trebuie sa selectam din fisierul bazei de date, datele pe care dorim sa

le utilizam la realizarea conexiunii(campurile de date) . Astfel, putem sa particularizam un mod de declarare a structurii SQL sau sau putem sa construim tipul de interogare selectam a doua optiune prezentata:

128

Page 129: curs DPW.docx

Putem vedea toate tabelele din baza de date utilizata la realizarea conexiunii: authors, discounts, etc. Din tabelul ales trebuie sa selectam campurile(coloanele) pe care dorim sa le afisam in site-ul creat.Selectarea acestor campuri(coloane) se realizeaza prin simpla bifare a acestora in fereastra deschisa.

De asemenea putem declara anumite criterii de sortare sau filtrare a datelor din campurile precizate sau putem folosi anumite optiuni avansate apasand butonul „Advanced” prezent in dreapta ferestrei pentru prezentarea campurilor:

Apasam butonul „Next”.Putem in acest moment sa testam interogarea(datele ce urmeaza a fi afisate) apasand

butonul „Test Query”.Datele vor fi afisate in fereastra de mai sus ce initial era goala. Sub buton sunt preizate campurile ce au fost anterior selectate si tabeul din care fac parte, pentru a putea fi verificate de utilizator:

Apasam butonul „Finish”.

129

Page 130: curs DPW.docx

Am ajuns din nou in punctul in care trebuie sa alegem o sursa de date pe care initial nu o aveam dar pe care am creat-o in etapele descrise anterior.Apoi trebuie selectat un camp ce va fi afisat in cadrul paginii web, camp ce poate fi selectat din lista de campuri alese anterior:

Apoi apasam butonul OK.Este indicat sa folosim doua campuri diferite: unul pentru afisarea propriu-zisa si unul

pentru indexarea datelor din primul camp.In acest moment in Expression Web se observa faptul ca am creat o sursa de date

SQL(tip baza de date) al carei cod se afla acum introdus in codul site-ului avand precizate toate caracteristicile alese anterior :

Se observa adaugarea si a unui fisier web. Config, si dand dublu clic pe acesta se observa afisarea unui flux al conexiunii ce contine numele conexiunii, si caracteristicile sale:

Iar daca ne plasam in fereastra din dreapta la categoria „ASP.NET Connections” observam ca valoarea s-a schimbat din 0 in 1 si a aparut obiectul „testConnection” creat anterior:

130

Page 131: curs DPW.docx

Tot ce a mai ramas acum de facum este sa vizualizam pagina realizata intr-un browser web.Bineinteles,trebuie mai intai salvat site-ul intr-o locatie aleasa de dumneavoastra cu extensia „.aspx”.Dand dublu clic pe pagina, browser-ul va afisa urmatoarea pagina:

Se observa aparitia casetei in care se prezinta datele pe care le-am selectat din tabela bazei de date .Aceasta lista creata este conectat acum la baza de date, orice modificare adusa acesteia reflectandu-se asupra datelor prezentate in pagina web.

4.2. Corelarea datelor

Prin corelarea datelor intelegem afisarea detaliilor privitoare la o persoana sau un obiect atunci cand numele acestuia a fost selectat dintr-o lista ce reprezinta o conexiune cu o baza de date existenta.

Prin urmare, pastram toate elementele din sectiunea precedenta, tinand minte ce campuri am folosit in cadrul elementului “DropDown List”, la partea de alegere a sursei datelor si a campurilor ce vor fi afisate si a celor ce vor indexa afisarea. Pe scurt, trebuie sa retinem numele celui de al doilea camp folosit(in exemplu “au_id”):

Primul lucru pe care il facem este sa bifam optiunea “Enable Auto PostBack” ce permite serverului sa actualizeze selectia realizata(adica

131

Page 132: curs DPW.docx

sa isi dea seama ca la un moment dat am selectat numele “Ionescu” si nu “Marin” cum era la inceput):

Pentru a afisa detaliile referitoare la o persoana utilizata elementul “Details View” din subcategoria “Data”, prezenta in dreapta spatiului de lucru:

“Details View”, dupa cum suna si numele, va oferi detalii despre elementul ce va fi selectat de utilizator folosit lista de derulare configurat anterior.

Plasam lista detaliata intre lista de derularea si “SQL DataSource”, astfel incat detaliile sa fie afisate sub numele selectat, si nu deasupra sa.

In continuare trebuie sa specificam o sursa de date pe care sa o utilizam la realizarea legaturii si la prezentarea amanuntelor:

Selectam “New DataSource”>alegem Categoria “Database”>OK:

Alegem conexiunea realizata anterior, nefiind nevoie de declararea unei noi conexiuni cu noi caracteristici>Next.

Selectam campurile(coloanele) din baza de date care vor fi utilizate si eventual afisate si apoi selectam clauza “WHERE”:

Clauza “WHERE” permite declararea unor conditii pe baza carora sa fie afisate anumite tipuri de date.

132

Page 133: curs DPW.docx

La categoria “Column” alegem campul retinut(al doilea din “DropDown List”), la “Operator” alegem “=”, la “Source” alegem “Control” si la “Control ID”(adica coloana in functie de care sa se faca afisarea) alegem “DropDown List1” si apasam butonul “Add”>OK>Next:

Odata cu adaugarea criteriului de afisare se observa si setarea parametrilor folositi la legatura cu baza de date:

Se observa faptul ca majoritatea clauzelor de selecatre folosite corespund sintaxei unei baze de date obisnuite.

Apasam butonul “Test Query” si daca dorim sa obtinem informatii valide trebuie sa declaram o valoare ce apare in baza de date.

Apasam butonul “Finish”.In acest moment observam ca in pagina web si-a facut

aparitia un tabel ce contine toate campurile pe care le-am selectat din baza de date:

In dreptul fiecarui camp apare simbolul “abc” semn ca nu am facut setari suplimentare legate de afisarea datelor si pe toate le recunoaste drept siruri de caractere.

Pentru formatarea afisarii dam clic pe sageata corespunzatoare listei si alegem optiunea “Autoformat”:

Se observa aparitia unei casete de dialog ce permite alegerea unui stil dintre cele prezentate, avand in partea dreapta si posibilitatea de a vizualiza modul de afisare ales:

133

Page 134: curs DPW.docx

Daca alegem optiunea “Edit Fields” vom putea modifica pentru fiecare camp(coloana) in parte:-numele acesteia-daca e vizibil sau nu

Salvam pagina si o vizualizam in browser:

Odata cu schimbarea numelui din bara de selectie se vor schimba si detaliile afisate mai jos.

Modulul V Adobe Dreamweaver CS4

134

Page 135: curs DPW.docx

Introducere - caracteristiciAdobe Dreamweaver CS4 este un binecunoscut web editor commercial care-ţi permite să proiectezi, să construieşti şi să administrezi site-uri web complexe. Editorul este de tipul What-You-See-Is-What-You-Get , adică Ceea Ce vezi este ceea ce primeşti, ceea ce înseamnă că vă puteţi crea pagina web vizual şi orice ai vedea pe ecran în timp ce proiectezi este ceea ce veţi obţine atunci când site-ul dvs. este încărcat.

Dreamweaver face o treabă foarte bună de a genera cod care respectă standardele de pagini web. Aceasta înseamnă că site-ul dvs. nu se va distruge în versiunile mai noi de browsere web.

1. Interfaţa aplicaţiei1.1. Examinarea suprafeţei de lucru

Interfaţa acestei aplicaţii face uşoară proiectarea şi administrarea atât site-urilor simple cât şi complexe. Proiectanţii pot insera cu uşurinţă elemente în pagină prin drag and drop, iar dezvoltatorii pot lucra direct cu codul sursă al paginii, dramweaver furnizând sintaxa corectă.Dreamweaver CS4 face uşoară personalizarea spaţiului de lucru, oferind opt layout-uri predefinite şi se pot schimba aceste workspace-uri prin meniul pop-up:

Fereastra DocumentToate spaţiile de lucru oferă aceleaşi elemente, doar că sunt organizate altfel (unele

afişate şi altele ascunse în funcţie de activitatea desfăşurată). De exemplu fereastra Document afişează implicit şi panoul cu proprietăţi:

Workspace-ul App Developer împarte modul de vizualizare design cu cel code:

135

Page 136: curs DPW.docx

Se poate afişa fereastra document în acelaşi timp cu panourile şi cu codul paginii:

Se poate crea un workspace propriu:

Fereastra document este cea mai importantă fereastră, prin intermediul acesteia se adaugă elementele în pagină:

Dreamweavar foloseşte tab-uri pentru a-şi organiza paginile, aflate în partea de sus a ferestrei începând cu partea stângă spre dreapta. În partea dreaptă a ferestrei se afişează calea completă a paginii web. În partea de jos a ferestrei începând cu stânga se afişează tag-urile limbajului HTML, continuându-se cu instrumentele de selecţie, mână, zoom.

Modurile de vizualizare ale documentelor sunt design, code, split.Modul code permite editarea codului:

136

Page 137: curs DPW.docx

Aplicaţia colorează tag-urile astfel încât să se facă diferenţa între ele, de asemenea ea furnizează sintaxa tag-ului dacă se tastează câteva litere ale tagului sau pune la dispoziţie lista cu tag-uri.

Se pot vizualiza două documente diferite în aceeaşi fereastră, de exemplu un fişier de tip CSS şi o pagină web pot fi afişate prin împărţirea ecranului în două:

Deci se poate lucra când în una când în cealaltă.1.2. Meniuri 1.2.1.Meniuri derulanteUnii preferă să utilizeze comenzi din meniuri, alţii scurtăturile de la tastatură, iar alţii

preferă să dea clic pe pictograme. Meniurile File şi Edit sunt standard pentru majoritatea programelor.

Meniul File conţine comenzi de deschidere, salvare, import şi export de fişiere. Meniul Edit conţine comenzile Cut, Copy şi Paste, alături de comenzile Find and Replace şi comanda Preferences.

Meniul View activează şi dezactivează vizualizarea conţinutului secţiunii de antet(head); a elementelor invizibile; a straturilor, tabelelor şi limitelor cadrelor; a barei de

137

Page 138: curs DPW.docx

stare şi a hărţilor de imagine. Meniul View are, de asemenea, comenzi de activare a riglei şi a grilei, de executare a plug-in-urilor şi pentru afişarea unei imagini de trasare.

Meniul Insert este aproape echivalent cu bara de inserări. Meniul Modify vă permite să modificaţi proprietăţile obiectului selectat la un moment dat. Comanda Prevent Layer Overlaps (prevenirea suprapunerii de straturi) este şi ea poziţionată în meniul Modify >Arrange.

Meniul Text vă oferă acces la mai multe modalităţi de finisare a aspectului textului din pagina Web. Cel mai important pentru cei care scriu cu greşeli este că meniul Text conţine comanda Check Spelling (verificarea ortografiei). Meniul Text dublează multe din proprietăţile disponibile în fereastra de inspectare Property. Puteţi indenta un text, crea o listă şi modifica proprietăţile fontului. Meniul Commands oferă comenzi utile, cum ar fi Clean Up HTML (curăţarea codului HTML) şi Clean Up Word HTML (curăţarea cuvintelor din codul HTML).

Puteţi înregistra şi reda o animaţie sau puteţi formata şi sorta un tabel. Puteţi configura o schemă de culori şi automat puteţi lansa Macromedia Fireworks pentru a optimiza o imagine.

Meniul Site găzduieşte comenzile corespunzătoare site-ului. Meniul Windows lansează toate panourile şi ferestrele de inspectare Dreamweaver.

Alături de legăturile la fişierele help pentru HTML, meniul Help conţine comenzi prin care vă înregistraţi online pachetul software Dreamweaver. Este util să daţi comanda About Dreamweaver dacă trebuie să aflaţi ce versiune de Dreamweaver rulaţi sau seria licenţei.

1.2.2. Meniurile contextualeExistă mai multe căi de accesare a proprietăţilor obiectelor din Dreamweaver.

Meniurile contextuale reprezintă una dintre opţiunile disponibile. Aceste meniuri apar când efectuaţi clicdreapta pe un obiect din fereastra Document. Conţinutul meniului depinde de obiectul pe care aţi dat clic.

Obiecte invizibileUnele obiecte pe care le inseraţi în pagina Web nu sunt proiectate pentru a putea fi

văzute. Deoarece Dreamweaver este un instrument de proiectare WYSIWYG, Macromedia a gândit un mod de a vizualiza obiectele invizibile de pe pagina Web. Cum puteţi vizualiza obiecte invizibile, precum ancorele cu nume şi formularele de pe pagina Web? Selectaţi comanda Invisible Elements din meniul View.

Activând comanda Invisible Elements, Dreamweaver va arăta un contur roşu interrupt pentru a reprezenta un formular şi marcaje care reprezintă ancore cu nume (arată precum nişte mici ancore pe un suport auriu). Selectaţi marcajele şi vizualizaţi sau editaţi în fereastra de inspectare Property proprietăţile obiectului pe care îl reprezintă.

Sistemul HelpUna dintre cele mai uşoare metode de a obţine informaţii despre un anumit subiect

este să lansaţi sistemul de ajutor contextual. Când aveţi un obiect selectat (şi îi puteţi vedea proprietăţile în fereastra de inspectare Property), efectuând clic pe pictograma Help din fereastra de inpectare Property, veţi ajunge direct la informaţia despre proprietăţile acelui obiect.

Fereastra Proprietăţi(fereastra de inspectare)Această fereastră se afişează pentru elemental current selectat din pagină:

În Dreamweaver CS4 există două moduri de vizualizare a acestei ferestre: CSS şi HTML.Vizualizarea CSS permite modificarea acestora în timpul activităţii:

Dar aceasta nu e valabilă pentru toate elementele.

138

Page 139: curs DPW.docx

1.2.3. PanouriAcestea se afişează vertical în partea dreaptă a ferestrei. Fiecare grup

de panouri conţine unul sau mai multe panouri organizate ca şi tab-uri. Pentru accesa comenzile panoului se apasă pe butonul din imagine:

Având ca efect:

Fiecare panou are un meniu cu opţiuni în colţul din dreapta sus:

2. Crearea unei pagini web

Se foloseste meniul “Create New” optiunea HTML:

139

Page 140: curs DPW.docx

2.1. Proprietăţile paginii sau site-ului webAceste proprietăţi ale paginii sau site-ului se accesează prin meniul “Modify”

opţiunea “Page Properties”, în care se poate seta pentru toate paginile site-ului fie culoarea fundalului, fontul, dimensiunea textului din pagini, fontul sau culoarea link-urilor vizitate sau nevizitate.

2.2. Previzualizarea paginii web

Aceasta se poate realize în mai multe feluri, fie cu tasta F12, fie cu meniul “File” opţiunea “Preview in browser”, fie folosind butonul din bara de butoane:

Dacă se doreşte adăugarea altui browser se apasă butonul “Add browser ” din fereastra:

Cum se creează o pagină Web cu două coloane şi cu antet şi subsolVom crea o pagină web cu 2 coloane, care

este un lazout des întălnit, deoarece una din coloane conţine meniul de navigare al site-ului, în timp ce coloana cealaltă va avea conţinutul principal.

140

Page 141: curs DPW.docx

În momentul în care se creează o pagină web se foloseşte meniul “File” opţiunea “New” având ca efect următoarea fereastră:

Se va alege din fereastră opţiunea "2 column liquid, left sidebar, header and footer", în partea stângă a aceleiaşi ferestre se alege opţiunea “CSS” şi apoi se va alege din partea dreaptă “Create New File”, ceea ce are ca efect plasarea informaţiilor de control a aspectului paginii dvs. de web într-un fişier separate. Când aţi terminat cu toate opţiunile se alege butonul “Create”, urmând o fereastră de dialog cu "Save Style Sheet File As", se acceptă numele implicit şi locaţia prin simpla apăsare a butonului “Save”, astfel creându-se o pagină web cu 2 coloane.

Dreamwaver afişează uşor diferit layout-ul în funcţie de cât de mare este rezoluţia monitorului. Dacă rezoluţia monitorului este mare, Dreamwaver acţionează în modul “Split”, care ar putea indica codul brut al paginii web în jumătatea de sus a ferestrei şi în jumătatea de jos partea de design. Dacă rezoluţia este mică Dreamwaver va începe prin modul “Design”.

Dacă cumva este în modul “Split”, pentru a se trece la design se accesează meniul “View” opţiunea “Design”.

2.3. Formatarea caracterelor şi a paragrafelorPaginile web nu seamănă cu editoarele de texte. Prin reţeaua Internet pagina voastră

web este văzută de ceilalţi folosind calculatoarele lor personale şi nu pe ale voastre, este posibil ca vizitatorii să nu aibă aceleaşi fonturi pe care vreţi să introduceţi voi, de aceea rezultatul nu se va vedea pe calculatorul lor, de aceea este indicat să se folosească un subset de fonturi pentru site-urile web(Verdana, Arial, Helvetica, sans-serif, pe lăngă acestea Dreamwaver mai are căteva).

Fonturile pot fi setate folosind meniul “Format” opţiunea “Font”, pe lăngă fonturile disponibile se mai pot crea altele folosind opţiunea “Edit font list”.

Înainte de a schimba fontul caracterelor este bines ă ştiţi cum lucrează Dreamwaver pentru aceste operaţii.

Dreamwaver foloseşte tehnologia Cascading Style Sheets sau "CSS" pentru a realiza lucruri care afectează aspectul paginii web. De exemplu dacă se doreşte schimbarea fontului pentru “exemplu de companie”, înainte de apariţia CSS-ului trebuia căutat în pagină peste tot aceste cuvinte şi schimbat fontul, dar CSS permite să eticheteze toate apariţiile acestor cuvinte cu un nume descriptive, de exemplu companiamea, apoi se asociază fontul dorit pentru eticheta companiamea o singură dată în site, adică ceea ce se numeşte style sheet, de ci cu os ingură operaţie toate părţile din site care conţin eticheta companiamea vor fi schimbate cu fontul dorit, iar dacă mai târziu se doreşte schimbarea acestuia, în style sheet se modifică fontul. Aceste etichete de fapt se numesc clase.

Pentru modificarea fontului într-o pagină web, acesta se încarcă prin aplicaţia Dreamwaver, se selectează textul dorit, se alege meniul “Format” opţiunea “Font”, va apărea un submeniu cu o listă a fonturilor, se selectează fontul dorit şi o fereastră de dialog numită "New CSS Rule".

Valorile implicite din fereastra de dialog a "New CSS Rule" deping de ceea ce aţi selectat, dacă sunt selectate câteva cuvinte dintr-un paragraf atunci în câmpul "Selector Type" se va afişa "Class (can apply to any HTML element)" şi "Selector Name" va fi gol. Dacă sunt selectate unul sau mai multe paragrafe "Selector Type" va avea implicit "Compound (based on your selection)" şi "Selector Name" va avea ceva asemănător cu ".twoColLiqLtHdr ţcontainer ţmainContent p".

Nu contează ce a fost selectat dinainte, dar se alege în "Selector Type" opţiunea "Class (can apply to any HTML element)", iar "Selector Name" va fi gol, aici trebuie introdus un nume al clasei care să descrie blocul de text. Acest nume trebuie să înceapă cu o literă a alfabetului, nu trebuie să conţină semen de punctuaţie sau spaţiu. După aceea se caută câmpul "Rule Definition" şi se selectează opţiunea "twoColLiqLtHdr.css", apoi se finalizează prin apăsarea butonului OK.

2.3.1. Schimbarea fontului pentru alte piese de textProcedura de schimbare a fontului pentru alte piese de text în restul documentului

depinde de ceea ce vreţi să schimbaţi.Să presupunem că se doreşte un anumit font pentru paragrafele cu descrierea unui

produs, pentru aceasta se creează o etichetă folosind instrucţiunile de mai sus, apoi cand se adaugă un nou produs paginii şi se vrea ca acest text să aibă acelaşi font se selectează textul şi se vizualizează panoul cu proprietăţi:

141

Page 142: curs DPW.docx

Se poate vedea în acesta câmpul cu Class, se dă click pe lista derulantă a acestui câmp până când se găseşte numele etichetei create de dvoastră, care se va selecta, iar textul selectat va fi afişat cu fontul respective.

Frumuseţea CSS –ului vine din faptul că dacă se doreşte schimbarea fontului la toate bucăţile de text care au folosit o anumită clasă, atunci e suficient să se schimbe fontul la una singură din pagină şi toate părţile de text care impart aceeaşi clasă se vor schimba. Pentru aceasta se poziţionează cursorul pe textul ce trebuie schimbat(una din locaţii) şi se caută opţiunea "CSS STYLES" din meniul “Insert” :

Când se accesează acesta se va vizualiza fereastra asemănătoare cu cea de mai sus, aici se localizează câmpul Font-family, urmând a se schimba în fontul dorit.

Cum să schimbi dimensiunea fontuluiDacă se doreşte schimbarea dimensiunii pentru o parte mică de text, aceasta se va

selecta şi se va accesa panoul de proprietăţi:

Aici se localizează câmpul „Size” care implicit e setat la 100%, aici se va introduce dimensiunea dorită şi unitatea de măsură dorită. La apăsarea tastei enter va apărea fereastra "New CSS Rule", unde se fac operaţiile de mai sus. Dacă se doreşte schimbarea dimensiunii pentru alte bucăţi de text se va folosi butonul “HTML”, unde se va alege clasa dorită pentru textul respectiv.

Se mai poate folosi opţiunea "Text" din meniul “Insert” pentru a schimba atât fontul cât şi dimensiunea fontului.

Cum să schimbi culoarea textuluiDacă se doreşte schimbarea culorii unui text care are déjà aplicat

un stil CSS, se va folosi panoul cu "CSS STYLES":

142

Page 143: curs DPW.docx

Şi se va schimba culoarea de aici.Dacă textul nu are nici un stil aplicat se va folosi butonul “CSS” şi butonul negru de

lăngă “Size” pentru culoare, deschizăndu-se o fereastră cu culori.Folosirea lui BOLD şi ITALICDacă se doreşte folosirea bold-ului şi italic-ului pentru un text, acestea se găsesc în

panoul de proprietăţi:

Sau se mai pot folosi combinaţiile de taste folosite în editoarele de texte (ctrl+b, ctrl+i).

După ce s-au făcut toate modificările, se vor salva, folosind meniul “File” opţiunea “Save ALL”, astfel se va salva pagina de home şi implicit paginile css.

Folosirea listelor și a indentăriiSe foloseşte panoul de proprietăţi:

Cum se poate configura site-ul dvoastră cu Adobe Dreamweaver CS4Definirea unui site nouSe porneşte aplicaţia şi se deschide o fereastră care seamănă cu următoarea.

Aspectul real al ferestrei va fi uşor diferit în funcţie de sistemul de operare folosit.

În partea de sus a ferestrei este o bara de meniu cu cuvintele "File Edit View Insert Modify Format Commands Site Window Help". Acest meniu ne permite să modificăm diferite caracteristici ale aplicaţiei.

Pentru a crea un site, trebuie folosit meniul “Site” din bara de meniuri , apoi opţiunea “New Site”, va apărea o căsuţă de dialog având în bara de titlu "Site Definition for Unnamed Site 2", numărul care însoţeşte cuvântul site poate fi diferit dacă ai folosit Dreamweaver pentru a modifica alt site, asta nu contează, deoarece se poate schimba ulterior.

143

Page 144: curs DPW.docx

Dacă ar fi să ne uităm la partea de sus a casetei de dialog, vom vedea două butoane: "Basic" şi "Advanced". Este indicat să fie folosit basic. În partea din mijloc a căsuţei este un camp deasupra "What would you like to name your site?". Aici se introduce numele site-ului web, dacă nu ştii cum vrei să-l numeşti în acest moment şi ai deja un domeniu, se poate introduce numele domeniului.

144

Page 145: curs DPW.docx

Sub nume este un camp în care se introduce adresa site-ului. Dacă numele site-ului este exemplu.com, adresa acestuia va fi http://www.exemplu.com/ fără ghilimele. Apoi se apasă butonul Next. În următoarea fereastră se acceptă implicit "No, I do not want to use a server technology" şi se trece mai departe folosind butonul Next . Următoarea fereastră se referă la locul în care vor fi salvate fişierele pe care le vom crea, numele directorului trebuie să fie acelaşi cu numele site-ului, ar trebui să vă păstraţi mereu o copie a site-ului pe computerul dvoastră, dacă nu ştiţi ce să faceţi acceptaţi opţiunea implicită şi treceţi mai departe cu butonul Next , va apărea o fereastră cu "How do you connect to your remote server?", se selectează opţiunea “FTP” .

Veţi avea nevoie de un nume de utilizator (login) – folosit pentru deschiderea unei sesiuni de lucru - şi o parolă (Password) pentru accesul la serverul FTP. Numele standard de login anonymous (utilizator anonim), adesea utilizat pentru a descărca fişiere prin Internet, nu va funcţiona probabil la încărcarea fişierelor pe un site Web. Trebuie să deschideţi o sesiune de lucru ca un utilizator cu acces şi permisiune de a prelua şi a pune fişiere în directoarele care vor găzdui site-ul dumneavoastră Web. Dreamweaver salvează automat parola dumneavoastră. Dacă au şi alţii acces la Dreamweaver pe calculatorul dumneavoastră şi nu doriţi ca ei să aibă acces la contul dumneavoastră FTP, debifaţi caseta de validare Save.

Selectaţi butonul Test Connection pentru a verifica dacă aţi introdus corect datele şi dacă vă conectaţi la serverul FTP. Puteţi depana problemele conexiunii FTP folosind FTP Log ce se găseşte în submeniul Results al meniului Window. FTP Log conţine lista cu

145

Page 146: curs DPW.docx

motivele unei conexiuni eşuate. De exemplu, dacă înregistrarea din jurnalul conexiunii spune că parola a fost incorectă sau că directorul indicat de dumneavoastră nu există, le puteţi modifica în definiţia site-ului şi puteţi încerca din nou.

Dacă sunteţi în spatele unui program de protecţie firewall (parafoc) sau folosiţi un server proxy, aţi putea avea dificultăţi cu conexiunea FTP. Consultaţi administratorul de reţea în legătură cu atributele care trebuie alese când configuraţi legătura FTP. Bifaţi caseta de validare Use Firewall (în Advanced selectaţi Remote Info) dacă accesul la Internet se face printr-un program firewall. Configuraţi portul şi gazda firewall în preferinţele Dreamweaver. (La Category selectaţi Site.) Dacă aveţi o legătură lentă la Internet, intervalul de timp de expirare implicit acordat pentru FTP (timeout) ar putea fi prea scurt, ceea ce ar întrerupe conexiunea FTP prea curând. Puteţi creşte acest interval în preferinţele din Site.

În final apare butonul Done prin care se finalizează crearea site-ului.În panoul “Files ” apare directorul rădăcină definit:

3. Organizarea activităţiiIntroducere în Home PagePrima pagină pe care o veţi crea va fi pagina Home, care este pagina principal a site-

ului. Este pagina pe care vizitatorii site-ului o vor vedea în momentul în care vor introduce adresa site-ului în browser.

Având în vedere că funcţiile paginii de start sunt initial aproape ca uşa din faţă a site-ul dvs, trebuie să conţină informaţii despre site, legături către pagini importante ale site-ului. Prin această pagină trebuie să oferiţi vizitatorilor o idee despre ce să se aştepte în site.

Cum să proiectezi pagina Home În fereastra creată cu 2 coloane, există o bară orizontală numită „Header”, aici este

locul unde se va scrie şi va fi vizibil numele site-ului. Deasupra antetului este secţiunea „Title” în care va apărea numele site-ului, acesta este un câmp intern, el nu va apărea în partea de conţinut a site-ului. Fereastra arată în felul următor:

Se va şterge Header şi Main Content şi se va trece ce text se doreşte, în schimb în partea de sidebar nu se schimbă nimic, pentru că aici se va introduce un meniu de navigare, ceea ce vom vedea mai încolo. La fel, în partea de jos a ferestrei se află secţiunea „Footer” în care se introduce textul dorit. Dacă s-au realizat toate modificările dorite se salvează pagina cu „File” opţiunea „Save As”, trebuie ca această pagină să aibă numele index.html, fără spaţii, cu litere mici.Link-uri (legături)

Adresa web a unei pagini este un tip de URL (Uniform Resource Locator). De exemplu http://www.example.com/ este URL –ul unui site web, adică acesta indică faptul că este nevoie de un browser care să folosească protocolul de comunicare HTTP. URL poate fi absolut sau relativ.

Un link absolut specifică adresa completă a paginii sau fişierului până la ultimul detaliu. De exemplu http://www.example.com/features.html este o adresă absolută. Dacă pentru a accesa pagina features.html fără a specifica adresa absolută ci o formă scurtă, atunci vorbim de URL relativ.

Link pe pozăSe selectează poza şi se încarcă panoul cu proprietăţi:

146

Page 147: curs DPW.docx

Aici se află câmpul "Link", unde se va introduce URL-ul paginii către care se realizează legătura. Se poate alege între cele două variante de URL.

Dacă se doreşte ca dând click pe o poză să fie afişată poza la dimensiunea ei normală, atunci se salvează două variante ale pozei, una mai mică(folosind editoare de imagini) şi cea normală în două fişiere separate. Se creează link pe poza mică, ce va fi inserată în pagină, iar link-ul va fi către fişierul ce conţine poza la dimensiunile ei.

Dacă câmpul “Target” va fi gol atunci pagina de legătură va fi deschisă într-o pagină nouă, site-ul ramănând deschis şi el.

Link pe textSe selectează textul care va fi link şi se vizualizează panoul cu proprietăţi, de unde se

foloseşte butonul HTML dacă nu a fost déjà accesat, aici apare un câmp “Link” şi se introduce adresa paginii sau site-ului către care se doreşte legătura. Dacă link-ul este către o pagină a site-ului se poate specifica URL –ul relativ, dacă este către alt site, se va specifica URL-ul absolut.

Link către fişierDacă este nevoie de legătură către un fişier PDF, PowerPoint, Word, atunci aceste

fişiere trebuie deschise cu programele lor sau browser-ul va cere să salvaţi fişierul pe unitatea de HDD. Pentru a crea acest link este nevoie ca fişierul să fie salvat în directorul site-ului, apoi se selectează textul sau imaginea şi se selecetează fişierul spre care se realizează legătura.

Pentru link-ul către o prezentare PowerPoint, ar trebui salvat fişierul ca şi pagină web folosind aplicaţia PowerPoint şi apoi să se realizeze link-ul.

Link către emailAceste link-uri sunt deschise automat cu programul implicit pentru email şi au o

adresă de mail vidă. Pentru a crea acest link se foloseşte meniul ”Insert”, opţiunea “Email Link” în care se introduce numele link-ului şi adresa de email către care se face trimiterea:

Sau se mai poate folosi fereastra cu proprietăţi:

Vizualizarea şi modificarea codului HTMLDreamweaver vă oferă mai multe metode de acces la cod. Veţi folosi funcţia

Dreamweaver de curăţare a codului produs prin salvarea unui document Word ca HTML.Examinarea vizualizării coduluiSe pot activa şi dezactiva toate panourile apăsând tasta F4. Creaţi o nouă pagină

HTML de bază în Dreamweaver, se dă click pe butonul Code view (vizualizarea codului) din bara de instrumente pentru a vizualiza codul HTML. Prima linie din cod indică versiunea de HTML folosită în pagina dumneavoastră.

147

Page 148: curs DPW.docx

Examinarea antetului şi a corpuluiExistă două secţiuni importante într-o pagină Web: head (antetul) şi body (corpul).

Dreamweaver inserează un tag <meta>:<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

Tagul <meta> specifică setul de caractere ce ar trebui folosit de browser pentru a afişa pagina. Linia specifică un set de caractere latin pentru limbile din Europa de vest. Puteţi stabili setul de caractere pentru paginile Web în categoria Fonts din preferinţele din Dreamweaver. Modificarea setului de caractere va modifica acest tag <meta> pentru fiecare pagină creată în Dreamweaver.

În secţiunea antet a paginii se mai află codul JavaScript, definiţiile tip Cascading Style Sheets şi alte coduri. Aflându-vă în modul Design, dacă vreţi să vedeţi o reprezentare vizuală a conţinutului secţiunii antet, selectaţi comanda Head Content (conţinutul antetului) din meniul View. În partea de sus a ferestrei Document se pot vedea pictograme care reprezintă elementele din secţiunea antet. Când selectaţi una dintre pictograme, proprietăţile ei apar în fereastra de inspectare Property.

Opţiunile vizualizării coduluiÎn vizualizarea Code meniul View -- Code Options (opţiunile de vizualizare) din bara

de instrumente vă permite să modificaţi modul în care este afişat codul. În meniul Code Options sunt disponibile următoarele opţiuni:

• Word Wrap – Grupează liniile codului astfel încât să îl puteţi vedea pe tot fără a derula pe orizontală. Această opţiune nu schimbă codul; doar îl afişează altfel.

• Line Numbers – Afişează numărul de linie în marginea din stânga.• Highlight Invalid HTML – Activează evidenţierea codului care nu este valid, cel

pe care Dreamweaver nu-l înţelege.• Syntax Coloring – Colorează codul pentru ca elementele să fie mai uşor de

distins. Stabiliţi culorile în categoria Code Coloring din preferinţele Dreamweaver.• Auto Indent – Face automat indentarea codului, pe baza configurărilor din

categoria Code Format (formatarea codului) a preferinţelor. Dacă apare o eroare de JavaScript la previzualizarea unei pagini Web în browser, eroarea afişează adesea numărul liniei din cod care determină problema. Pentru a depana eroarea, vizualizaţi codul în fereastra de inspectare Code, cu numerele de linie afişate.

Dacă faceţi modificări în cod în vizualizarea Code, Dreamweaver nu afişează imediat modificările în fereastra Document, ci doar când selectaţi butonul Refresh (împrospătare) din bara de instrumente. Dacă introduceţi cod HTML care nu este valid, Dreamweaver va evidenţia tagurile nevalide cu galben strălucitor, atât în fereastra de inspectare Code, cât şi în fereastra Document. Când selectaţi un tag evidenţiat, fereastra de inspectare Property spune că tagul nu este valid. Poate să dea un motiv pentru care tagul nu este valid şi să ofere unele indicaţii despre ceea ce ar trebui făcut.

Stabilirea preferinţelor de codSunt trei categorii de preferinţe în Dreamweaver care se aplică la HTML – Code Colors

(culorile codului), Code Format (formatarea codului) şi Code Rewriting (rescrierea codului).Stabilirea preferinţelor de culoare a coduluiTagurile din vizualizarea Code afişează culoarea stabilită conform valorilor din

preferinţele Dreamweaver. Culoarea sintaxei (Syntax Coloring) trebuie să fie activată în meniul View – Code Options pentru a vedea codul colorat. Selectaţi categoria Code Colors din preferinţe.

Selectaţi tipul de cod pe care doriţi să îl editaţi. De asemenea, panoul vă permite să stabiliţi culoarea de fundal pentru vizualizarea codului. Pentru a alege o culoare, fie introduceţi o culoare în format hexazecimal, fie folosiţi selectorul de culoare.

Selectaţi tipul de document HTML din listă şi daţi clic pe butonul Edit Coloring Scheme (editarea schemei de culoare). Partea stângă a casetei de dialog vă permite să selectaţi un tag şi apoi în partea dreaptă să îi stabiliţi individual o culoare. Cele mai multe taguri au culoarea implicită. Tagurile folosite uzual, cum sunt tagurile pentru imagini (<img>) şi legături sau tagurile pentru ancore (<a>), au o culoare proprie pentru a putea fi remarcate uşor în restul codului HTML.

Pentru a schimba culoarea unui tag, selectaţi tagul. Selectaţi fie Default (implicit), pentru a aplica culoarea implicită selectată mai sus, fie o nouă culoare. Dacă doriţi ca ceea ce este în conţinutul tagului (cum ar fi textul unei hiperlegături) să aibă tot culoarea tagului, bifaţi caseta de validare Apply Color to Tag Contents (aplică culoarea la conţinutul tagului).

148

Page 149: curs DPW.docx

Stabilirea preferinţelor de formatare a coduluiÎn categoria Code Format din format Source Code, se poate stabili modul în care va

crea Dreamweaver codul. Dreamweaver indentează codul pentru a-l face uşor de citit. Puteţi modifica dimensiunea indentării în preferinţe. Mai puteţi selecta sau deselecta opţiunea prin care Dreamweaver indentează codul pentru tabele şi cadre.

Opţiunile din Code Format se aplică doar documentelor noi create în Dreamweaver. Se poate selecta comanda Apply Source Formatting din meniul Commands pentru a aplica aceeaşi formatare unei pagini Web existente.

Dacă este selectată încadrarea (înfăşurarea) automată în dimensiuni (wrapping), Dreamweaver va diviza o linie în funcţie de lăţimea coloanei introdusă în câmpul After Column (după coloană). Unele linii pot ajunge a fi foarte lungi deoarece Dreamweaver nu va grupa liniile ce afectează aspectul paginii Web.

Prin intermediul meniurilor derulante Case for Tags şi Case for Attributes se pate stabili dacă se lucrează cu litere mari sau mici pentru taguri şi atribute. Dacă nu doriţi ca Dreamweaver să modifice tipul de litere al tagurilor într-un document existent, marcaţi caseta de validare Override Case Of Tags şi Dreamweaver va lăsa tagurile aşa cum sunt.

Ultima configurare permite stabilirea utilizării de către Dreamweaver a tagurilor <center> pentru a centra obiectele sau a tagurilor <div> cu atributul align=”center”.Standardele se îndreaptă către tagurile <div>, dar tagul <center> a existat mult timp şi este larg acceptat atât în versiunile vechi de browsere, cât şi în cele noi.

Opţiunile stabilite în secţiunea Code Format din preferinţele Dreamweaver se aplică doar modificărilor în fereastra Document. Formatarea nu va avea loc când se editează codul HTML în fereastra de inspectare Code.

Stabilirea preferinţelor de rescriere a coduluiPreferinţele Code Rewriting (rescrierea codului), stabilesc modificările efectuate de

Dreamweaver la deschiderea unei pagini Web. Dreamweaver rezolvă automat anumite probleme ale codului, dar numai dacă se doreşte acest lucru. Dacă se dezactivează opţiunile Rewrite Code, Dreamweaver va continua să afişeze cod nevalid care se poate corecta singur.

Opţiunea Fix Invalidly Nested and Unclosed Tags (rezolvă tagurile imbricate incorect şi neînchise) cere ca Dreamweaver să rescrie tagurile incorect imbricate. De exemplu, <b><i>hello</b></i> va fi rescris ca <b><i>hello</i></b>. Dreamweaver mai inserează taguri de închidere care lipsesc, marcaje de citate (ghilimele) sau paranteze unghiulare de închidere. Opţiunea Remote Extra Closing Tags (înlăturarea tagurilor de închidere aflate în plus) îi permite lui Dreamweaver să înlăture orice tag de închidere rătăcit, rămas în pagina Web.

Curăţarea codului HTML creat cu Microsoft WordPentru a salva un document Word în format de pagină Web, selectaţi comanda Save

as Web Page (salvare ca pagină Web) din meniul File. Word vă solicită să daţi un nume documentului şi ataşează extensia de fişier .htm. Pagina care rezultă are mult cod suplimentar. Când salvaţi un document Word în format de pagină Web, verificaţi ca acesta să fie închis înainte de a lucra cu el în Dreamweaver. Dreamweaver nu va putea să-l deschidă şi să-l transforme în documente HTML dacă este deschis concomitent în Word.

Deschideţi o pagină Web creată cu Word şi daţi comanda Clean up Word HTML (curăţă codul HTML creat cu Word). Pentru a putea aplica efectul comenzii Clean up Word HTML paginii Web din fereastra Document, selectaţi comanda din meniul Commands. Aceasta lansează caseta de dialog Clean Up Word HTML.

Caseta de dialog Clean Up Word HTML apare când importaţi un document Word HTML sau selectaţi Clean Up HTML from Word.

149

Page 150: curs DPW.docx

Dreamweaver ar trebui să detecteze automat versiunea de Word în care a fost creat fişierul HTML, pe baza tagurilor adăugate de Word fişierului. Mai puteţi alege manual versiunea din meniul derulant Clean Up HTML from Word. Caseta de dialog Clean Up Word HTML are două secţiuni – Basic (de bază) şi Detailed (detaliat). Selectaţi următoarele opţiuni ale secţiunii Basic:

• Remove All Word Specific Markup - înlătură tot codul XML din tagul <html>, tagurile meta şi tagurile de legătură din secţiunea antet (head), marcajele Word XML, tagurile condiţionale, paragrafe goale şi marginile. Se poate selecta fiecare dintre aceste opţiuni individual, folosind secţiunea Detailed.

• Clean Up CSS - înlătură stilurile CSS suplimentare din document. Stilurile înlăturate sunt stiluri CSS inline, atribute de stil care încep cu mso, declaraţii de stil care nu sunt CSS, stiluri CSS din rândurile şi celulele de tabele şi stiluri nefolosite. Puteţi selecta opţiunile individual folosind secţiunea Detailed.

• Clean Up <font> Tags - înlătură tagurile <font>.• Fix Invalidly Nested Tags – rezolvă tagurile neimbricate corect, mai ales cele de

marcare a fontului.• Set Background Color – vă permite să specificaţi culoarea de fundal a paginii Web.

Culoarea implicită din Dreamweaver este culoarea alb, ffffff.• Apply Source Formatting – aplică opţiunile de formatare a codului pe care le-aţi

stabilit în categoria Code Format din preferinţele Dreamweaver.• Show Log On Completion – afişează o casetă de dialog cu un rezumat al

modificărilor făcute de Dreamweaver în pagina Web. După ce se selectează opţiunile din secţiunea Basic sau din Detailed, se dă click pe OK. Dreamweaver curăţă pagina Web. Opţiunile selectate vor apărea când se va mai selecta comanda Clean Up HTML from Word.

Dacă doriţi să adăugaţi atribute care nu apar în meniul derulant din Quick Tag Editor, folosiţi Tag Library Editor (editorul de bibliotecă de taguri) selectând comanda Tag Libraries din meniul Edit. Acest editor controlează atributele care apar în meniul derulant de taguri.

Dreamweaver nu listează toate atributele disponibile, aşa că ar trebui să fie unul sau două pe care aţi vrea să le adăugaţi.

Folosiţi panoul Reference pentru a căuta taguri şi atribute care vă interesează.Apariţia unui tag evidenţiat cu galben în pagina Web înseamnă că Dreamweaver

consideră că este un tag nevalid.Dreamweaver formatează automat codul HTML, pe măsură ce se introduce de la

tastatură în fereastra de inspectare Code? Nu! Dar puteţi folosi comanda Apply Source Formatting în orice pagină Web.

150

Page 151: curs DPW.docx

Inserarea de imaginiPentru aceasta, mai întâi se creează un folder pentru imaginile folosite în paginile

web, care se vor copia în acest director. Se va deschide pagina web în care se inserează imaginile. Se foloseşte meniul “Insert” opţiunea “Image” şi va apărea o fereastră de dialog în care se precizează locaţia fişierelor de tip imagine, dacă sunt prea multe imagini de inserat, se pot vizualiza înainte de inserare prin “Image preview”, când este totul bine se apasă butonul “OK”, urmează o alta fereastră “Image Tag Accessibility Attributes” în care există câmpul "Alternate text" pentru introducerea unui text.

În partea de jos a ferestrei Dreamwaver apar proprietăţile imaginii:

Căsuţele pentru H space şi V space se referă la spaţiul lăsat între text şi imagine, imaginea se mai poate alinia prin câmpul Align. Imaginii i se mai pot modifica dimensiunile.

Examinarea tipurilor de imagini: GIF, JPEG şi PNG• Formatul GIF este mai bun pentru imaginile care au zone de culoare continuă, de

obicei desene.• Formatul JPEG este mai bun pentru imaginile fotografice şi imaginile care nu au

zone continue de culoare – de exemplu, imaginile care conţin un gradient de culoare.• Formatul PNG este un înlocuitor pentru formatul GIF. El acceptă canale alfa, care

sunt foarte utile pentru transparenţă.Un program care are facilităţi de optimizare de imagine este Adobe Photoshop.Când este selectată o imagine apare un buton Edit (editare) în fereastra de

inspectare Property. Acest buton va deschide imaginea curentă într-un program de grafică. Comenzile de editare mai apar în meniul derulant contextual când executaţi clic-dreapta pe o imagine. În preferinţele Dreamweaver trebuie să configuraţi un editor de imagine extern. Categoria File Types/Editors (tipuri/editare de fişier) din preferinţele Dreamweaver permite asocierea extensiilor de fişiere la diferite programe externe. De exemplu, puteţi asocial extensiile de fişier .jpg, .gif şi .png cu Fireworks. Când este selectată o imagine în Dreamweaver, apăsaţi butonul Edit şi fişierul cu imaginea se deschide în Fireworks. Faceţi editările şi salvaţi fişierul.

Când vă aflaţi într-un editor de imagine, puteţi crea o versiune cu rezoluţie mai mică a imaginii la care se face legătura, în caseta Low Src din fereastra de inspectare Property. Această imagine va apărea în timpul încărcării iniţiale a paginii Web şi apoi va trece în versiunea cu rezoluţia mai mare a imaginii. De obicei, imaginea cu rezoluţie mică este o gamă de griuri sau o versiune mai mică a imaginii color.

Crearea unei hiperlegături cu efect de rolloverAl treilea tip de stil este un CSS Selector. Redefineşte un grup de taguri HTML în loc

de unul singur. Aţi putea defini cum să arate un anumit tag de titlu doar în cadrul unei celule de tabel, introducând tagul de celulă de tabel, <td>, şi apoi tagul de paragraf, <p>. Pentru aceasta, introduceţi toate numele de taguri în caseta Selector (td p), şi apoi definiţi stilul.

Crearea unor hiperlegături cu efecte de rollover redefinesc tagul de ancoră (<a>) – tagul folosit de hiperlegături. Puteţi defini un stil de ancoră care face să se schimbe culoarea unei legături când utilizatorul are cursorul poziţionat deasupra unei hiperlegături. Pentru a crea o hiperlegătură cu efect de rollover:

1. Creaţi un stil nou şi selectaţi butonul radio de lângă Advanced.2. Meniul derulant Selector afişează cele patru stiluri pentru legături. Selectaţi

selectorul a:hover (a plana) pentru a adăuga un efect de rollover tuturor hiperlegăturilor din pagina dumneavoastră Web. Daţi clic pe OK.

3. Apare caseta de dialog CSS Style Definition. În categoria Type, selectaţi o culoare şi apoi apăsaţi pe OK.

Pentru a vedea selectorul, creaţi o hiperlegătură în pagina dumneavoastră Web.

Crearea hărţilor de imagini şi a barelor de navigareAdăugarea legăturilor la grafică folosind hărţile de imaginiO hartă de imagini (image map) este o imagine cu regiuni definite ca hiperlegături.Aceste regiuni sunt numite zone fierbinţi sau hotspots.

151

Page 152: curs DPW.docx

Crearea unei hărţi de imaginiAvând selectată o imagine, se pot vedea în colţul de jos al ferestrei de inspectare

Property (cu fereastra de inspectare Property extinsă) patru instrumente pentru hărţile de imagini. Aceste patru instrumente sunt utilizate pentru a defini zone fierbinţi pe o hartă de imagini. Un instrument trasează dreptunghiuri, altul trasează cercuri şi altul, poligoane. Al patrulea instrument este un instrument săgeată utilizat pentru a selecta sau a muta zonele fierbinţi.

Pentru a crea o hartă de imagini:1. Inseraţi o imagine în pagina Web. Imaginea trebuie să fie selectată pentru ca

instrumentele hărţii de imagini să apară în fereastra de inspectare Property.2. Daţi hărţii un nume în caseta de text Map. Numele trebuie să fie unic în lista cu

alte nume de hărţi ale paginii.3. Selectaţi unul dintre instrumentele de desenare descrise mai jos pentru a trasa o

zonă fierbinte.4. Având selectat un hotspot trasat, introduceţi de la tastatură un URL în caseta

pentru legături, sau daţi clic pe pictograma dosar pentru a naviga la o pagină Web locală. Mai puteţi lega un hotspot la o ancoră cu nume introducând semnul # urmat de numele ancorei.

Adăugarea unei zone fierbinţi dreptunghiularePentru a adăuga o zonă fierbinte dreptunghiulară, selectaţi mai întâi instrumentul

pentru dreptunghiuri. Daţi clic şi trageţi cu mouse-ul cursorul cruce pentru a trasa un dreptunghi care are dimensiunile zonei fierbinţi pe care doriţi să o creaţi. Când eliberaţi butonul mouse-ului, apare o casetă peste imagine. Având zona fierbinte selectată, introduceţi un URL în caseta Link din fereastra de inspectare Property.

Pentru a muta sau a ajusta dimensiunea unei zone fierbinţi trebuie mai întâi să selectaţi instrumentul săgeată. Daţi clic cu instrumentul săgeată şi fie deplasaţi zona fierbinte în altă poziţie, fie redimensionaţi zona folosind reperele de manevrare pentru dimensionare.

Codul HTML pentru o zonă dreptunghiulară arată cam aşa:<area shape=”rect” coords=”110,130,180,170” href=”pg.htm”>

În acest exemplu, colţul din stânga sus al dreptunghiului este situat la 110 pixeli de partea stângă a imaginii şi la 130 pixeli de marginea de sus a imaginii. Colţul din dreapta jos al dreptunghiului este la 180 pixeli de stânga imaginii şi la 170 pixeli de sus.

Adăugarea unei zone fierbinţi circulareSelectaţi instrumentul pentru cerc şi apoi executaţi clic şi trageţi cu mouse-ul pentru

a crea zona fierbinte. Zona fierbinte este întotdeauna un cerc perfect şi nu o elipsă. Repoziţionaţi sau redimensionaţi zona fierbinte cu instrumentul cu săgeată.

Un cerc este definit prin trei valori: valorile x şi y care definesc centrul cercului şi raza cercului. Codul HTML ce defineşte o zonă circulară arată astfel:<area shape=”circle” coords=”100,150,45” href=”pag.htm”>

Adăugarea unei zone fierbinţi neregulateInstrumentul pentru poligon din fereastra de inspectare Property vă permite să creaţi

orice formă doriţi pentru a defini o zonă fierbinte neregulată.Selectaţi instrumentul pentru poligon din fereastra de inspectare Property. În loc să

daţi clic şi să deplasaţi mouse-ul pentru a crea forma, daţi clic câte o dată pentru fiecare vârf al poligonului. Pentru a închide poligonul, selectaţi instrumentul cu săgeată. Un poligon este definit de un număr infinit de coordonate x şi y, fiecare reprezentând unul dintre vârfurile create printr-un clic cu instrumentul poligon. Codul HTML pentru un exemplu de zonă fierbinte poligonală arată cam aşa:<area shape=”poly” coords=”8,14,32,33,29,112,130,99,140,130” href=”despre.htm”>

Poligonul definit în codul HTML este alcătuit din 5 puncte, aşa că există 5 perechi de coordonate x şi y.

Alinierea zonelor fierbinţiMai întâi, trebuie să selectaţi zonele fierbinţi pe care doriţi să le aliniaţi. Pentru a

selecta toate zonele fierbinţi dintr-o hartă de imagini, folosiţi combinaţia de taste Ctrl+A. De asemenea, puteţi da Shift+clic pe zonele fierbinţi pentru a le adăuga la selecţie. Vă puteţi da seama când sunt selectate aceste zone deoarece puteţi vedea reperele de manevrare pentru redimensionare. Submeniul Align al meniului Modify conţine comenzi de aliniere a zonelor fierbinţi.

152

Page 153: curs DPW.docx

Puteţi alinia mai multe asemenea zone fierbinţi la stânga, dreapta, sus sau jos. Puteţi aduce mai multe zone fierbinţi la aceeaşi înălţime cu comanda Make Same Height sau la aceeaşi lăţime, cu comanda Make Same Width.Zonele fierbinţi se pot suprapune unele cu altele. Zona care este deasupra (de obicei cea creată mai întâi), indiferent care este ea, va fi legătura făcută la executarea unui clic pe suprafaţa de suprapunere. Puteţi schimba ordinea zonelor fierbinţi cu comenzile aflate în submeniul Arrange al meniului Modify.

Pentru adăuga un grafic la o hartă trebuie să te asiguri că este selectat, iar instrumentul pentru hotspot este localizat în partea stângă jos a ferestrei de proprietăţi. Se dă click pe butonul rectangular în câmpul Map:

Apoi se trage cu mouse-ul până în suprafaţa unde hotspot-ul trebuie să acţioneze, adică aria pe care utilizatorul o foloseşte pentru a accesa legătura cu cealaltă pagină. Hotspotul este afişat ca un pătrat galben-albastru, dar în momentul publicării acesta nu apare. După ce s-a introdus hotspotul se afişează fereastra de proprietăţi pentru a se defini acestea:

În care se introduce link-ul, dacă e nevoie fereastra target, textul alternativ şi un nume pentru map. Atunci când se dă un nume hărţii, de fapt se dă unui singur hotspot, deci fiecare hotspot are un nume unic.

Inserarea fişierelor media specialeMultimediaCe este multimedia ?Cuvantul „multimedia” provine de la cuvintele „multi” (mai multe) si „media” (medii

de transmitere si prezentare a informatiilor).In viata cotidiana aveti de multe ori ocazia sa intrati in contact cu aceste medii de

transmitere a informatiilor: ziare si reviste (imagini si text), televizorul si combina muzicala (video si audio). Multimedia nu face altceva decat sa combine toate aceste medii, in computer-ul dumneavoastra.

Astazi multimedia a devenit mai mult decat o obisnuinta, a devenit o necesitate si o moda. Majoritatea computerelor asamblate contin placi de sunet si CD-ROM-uri (sau DVD-uri), unele chiar accesori mai complexe (acceleratoare grafice, tunere TV etc). Instaland aceste componente pe un calculator destul de performant veti putea avea toate informatiile in biroul dumneavoastra, de la simplele texte si imagini, pana la animatii, sunete si aplicatii interactive. 49547ikh45oxk1c

Imagine si textCele doua medii sunt intalnite peste tot, pornind de la publicatiile foarte vechi si pana

la enciclopediile computerizate, interactive, de ultima ora. Imaginile au fost folosite ca mediu de prezentare a informatiilor cu mult inainte de inventarea primelor scrieri, sub forma artei preistorice.

Imaginile si textul sunt cele mai simple, dar tot odata si cele mai cunoscute si folosite medii, textul transmitand informatia propriu-zisa, imaginea fiind o completare, reprezentata prin scheme, grafice, fotografii, ilustratii, desene etc.

Primele texte memorate de sisteme computerizate au fost scrise in format ASCII, un sir de caractere, care au o marime, font si stil constant. Odata cu dezvoltarea PC-urilor s-au

153

Page 154: curs DPW.docx

realizat editoare de texte avasate care aveau mult mai multe facilitati si obtiuni. kx547i9445oxxk

Imaginea sta la baza realizarii filmelor si animatiilor, care nu sunt altceva decat imagini afisate la o rata foarte ridicata (20-30 pana la 50 de frame-uri/sec), creand iluzia miscarii.

Desi din punct de vedere tehnologic si social suntem la limita dintre real si virtual, aceste doua medii clasice vor fi folosite pentru un timp foarte indelungat...

Sunet si muzicaInregistrarea si transmiterea sunetelor a fost devenit posibila in urma cu aproape o

suta de ani, insa in ziua de astazi s-a ajuns la limite nemaiimaginate.Muzica care era stocata in trecut pe placi si pe casete audio nu avea nici pe departe o

calitate suficienta, reproducerea si inregistrarea ei fiind deasemenea scumpe. Astazi, folosind multimedia, sase ore de muzica de inalta calitate pot fi stocate pe un CD-ROM obisnuit (de 650 MB). Acesta facilitate consta in formatul care poarta numele de MP3, destinat in special comprimarii pieselor muzicale, prin eliminarea sunetelor de inalta frecventa, care nu sunt perceptibile de urechea umana si o arhivarea de tip ZIP. Astfel, dupa eliminarea a mai mult de 85-90% din fisierul wave initial, melodia pare a ramane aproape neschimbata. Programele care convertesc muzica in format MP3 se gasesc oriunde la preturi foarte scazute, prin intermediul lor facilitandu-se „pirateria” de muzica pe Internet.

Desi este cea mai des folosita, muzica nu este singura utilizare a tehnologiile avansate pentru inmagazinare a sunetelor: reproducerea diferitelor sunete (din natura, produse de anumite aparate etc.), vorbirea dintre doua sau mai multe persoane, sunete produse de computer pentru a atentiona utilizatorul in legatura cu anumite actiuni (de obicei primejdioase).

O utlizarea foarte frecventa a sunetelor este in materie de efecte speciale. In filme, de obicei actiune si SF, unde se doreste obtinerea unor zgomote mai ciudate sau speciale, care sunt foarte greu sau imposibil de realizat folosind metodele clasice, ele se proceseaza pe computere performante, cu ajutorul unor programe dedicate. Sunetele realizate astfel sunt de obicei insotite de efecte speciale vizuale, formand secvente foarte complexe, rupte de firul realitatii pe care o cunoastem astazi: lupta dintre doua flote de distrugatoare stelare, monstri robotizati sau de origine extraterestra, doua submarine care sunt pe punctul de a declansa un razboi nuclear etc.

Folosind cateva dintre programele ieftine sau gratuite, care le puteti obtine dese ori de pe Internet, puteti realiza propriile efecte speciale sau piese muzicale, fara prea mari eforturi. Daca pe vremuri pentru a scoate pe piata un album de succes trebuia sa cheltuiesti cateva zeci de mii de dolari astazi totul se poate rezolva mult mai simplu cu doar cateva sute de dolari: iti faci rost de un program frumos pentru muzica (tehno-house, hip-hop, dance, depinde de stilul pe care il preferi), inveti cum se utilizeaza, faci cateva teste si incepi sa lucrezi din greu la micul tau proiect muzical. Dupa ce l-ai terminat, il poti expune gratuit la o galerie on-line, beneficiind astfel de toata reclama de care ai nevoie pentru a te promova.

Film si animatieFilmele video si animatiile sunt doua medii asemanatoare, care in ciuda diferentelor

minore se contopesc intr-unul singur. Ele au la baza aceeasi tehnologi: redarea cadrelor asemanatoare la o rata ridicata pentru a creea iluzia miscarii. Filmele si animatia sunt deseori insotite de sunet, pentru a parea mai reale. Rata de cadre (frames) folosita cel mai des in multimedia este 25-30 fps (frames per second). Cu cat numarul de cadre pe secunda este mai mare cu atat calitate filmului creste, dar si resursele necesare redarii filmului trebui sa fie mai puternice.

Diferenta dintre filme video si animatie specificata mai sus nu este mare: filmele sunt provenit din realitate si sunt inregistrate cu ajutorul camerelor video digitale, in timp ce animatiile sunt create cu ajutorul unor aplicatii software specilizate (3D MAX, Fractal Design Poser, Lightwave, Cinema 4D XL , RayDream Studio etc) sau sunt rezultatul muncii manuale, cu creionul si hartia (in cazul desenelor animate mai vechi). Anumite secvente din filmele noi sunt rezultatul prelucrarii computerizate a imaginilor inregistrate in realitate.

Utilizatorii computerelor si ai multimediei prefera de obicei filmele si animatiile ca medii de transmitere a informatiilor pentru ca ele stimuleaza simultan, in timp real, atat vazul cat si auzul, fiind foarte usor de perceput. Acesta este motivul pentru care articolelor importante din enciclopediile noi le sunt adaugate, pe langa text, poze si sunete animatii sau filme.

154

Page 155: curs DPW.docx

Filmele necesita un spatiu de stocare enorm, motiv pentru care cercetatorii au incercat sa realizeze formate de comprimare a acestora. Astfel au luat nastere primele formate care reduceau o mare parte din marimea animatiei prin eliminarea informatiei nefolositoare, dar odata cu acesta si calitatea ei, cum ar fi MPEG si DAT. Aparitia DVD-urilor a determinat realizarea unui format de o calitate mai ridicata, numit MPEG 2. Ultima metoda de comprimare a informatiei audio/video este numita MPEG 4. Desi raportul dintre calitate si marime al filmelor salvate in acest format din urma este optim, el nu a avut parte de o promovare spectaculoasa. Se asteapta in curand aparitia ultimului format de compresie: MPEG 7.

Efectele specialeRealizarea efectelor speciale este considerata cel mai profitabil si cel mai interesant

domeniu al multimediei. Ea a aparut prima data in cinematografie sub forma exploziilor bine plasate si a trucurilor care sa creeze impresia unor scene cat mai reale. Odata cu aparitia computerelor super-performante si a programelor specializate de grafica s-a reusit realizarea a unor efecte mult mai rapid, ieftin si realist. Daca la primul film Godzilla a fost nevoie de un om sa se imbrace intr-un costum de monstru si apoi sa umble printr-un oras in miniatura (aceea era limita tehnologiei) , la a doua versiune totul a fost mult mai simplu: s-a proiectat modelul 3D al monstrului, dupa care acesta s-a suprapus peste imaginea filmata.

Pe masura ce computerele personale s-au dezvoltat suficient de mult, jocurile sofisticate au devenit ceva nelipsit de pe un computer. Ele au devenit din ce in ce mai realiste. Toate obiectele si personajele au inceput a fii tot mai complexe si proiectate pana la cele mai mici detalii. Efectele speciale din jocuri (mai ales strategie si shootere) erau nelipsite, fiind intalnite la tot pasul.

Revenind in domeniul cinematografiei, ultimele tipuri de filme (in special science-fiction, horror) imbina in foarte multe din secvente realul cu virtualul. Primul film care a folosit efectele speciale computerizate in foarte multe dintre scene a fost The Matrix (cu o poveste foarte captivanta), marele film care a luat tot ce se putea in domeniu efectelor speciale la Oscaruri: premiul pentru cele mai bune efecte vizuale, pentru sunet, editarea sunetului si editarea peliculei (a fost si cel mai bun film, dupa parerea mea). Au fost alte filme (Sleepy Hollow, Godzilla, The Fifth Element) care desi au folosit acelasi stil de FX-uri nu s-au remarcat.

Se crede ca urmtorul pas in domeniul cinematografiei este realizarea unor filme de lunga durata in realitatea virtuala.

Cerintele hardwareCu cat mediile de transmitere a informatiilor sunt mai complexe si mai interesante

pretentiile asupra componentelor hardware sunt mai ridicate.Cele mai putin pretentioase medii sunt si cele mai banale, textul si imaginea. Ele pot

fi vizionate fara probleme prea mari pe un computer foarte vechi, 386 sau 486 (cu anumite retineri cu privire la calitatea imaginii).

Sunetele si filmele sunt putin mai pretentioase. Necesita un procesor Pentium 166 MHz MMX, 32 MB RAM, o placa de sunet si un CD-ROM 24x.

Daca doriti anumite facilitati, cum ar fi jocurile cu grafica foarte avansata, va trebui sa investiti ceva bani intr-un accelerator grafic destul de puternic. Cele mai cunoscute sunt Vodoo 3 (2000 si 3000). Exista multe altele, mai mult sau mai putin puternice, alegerea trebuie facuta doar in functie de cerintele dumneavoastra.

Un alt set de facilitati interesante sunt reprezentate de captura video. Puteti alege un tunner TV, care permite directionarea semnaluli din cablu direct in computer, cu o multime de facilitati incluse (gasirea automata a posturilor, telecomanda). In caz ca doriti sa inregistrati propriile filme, o mini-camera de filmat digitala, care poate fi folosit pentru capturarea filmelor sau o fotografiilor digitale este ideala.

Daca sunteti un impatimit al relitatii virtuale, un echipament VR v-ar fi de mare folos. Cu o manusa si o casca veti putea naviga prin lumi neimaginabile. Lumile virtuale nu au evoluat destul in comparatie cu alte domenii din multimedia, dar totusi merita.

Am prezentat mai sus cele mai importante componente hardware folosite de multimedia (obisnuita). Fiecare dintre ele se potriveste unui anumit tip de utilizatori. Bineinteles, folosind aceste componente nu veti putea face efecte speciale asemanatoare celor din filme sau video clipuri. Statiile grafice sunt super-computerele care sunt folosite pentru proiectari, realizarea modelelor 3D sau alte astfel de operatii care necesita resurse extraordinare.

Sisteme de videoconferinta

155

Page 156: curs DPW.docx

Odata cu dezvoltarea retelelor de calculatoare, comunicatiile la distante foarte mari nu mai sunt o problema nici de timp, nici de bani si nici de tehnologie. Ca urmare au aparut diverse sisteme de comunicatii prin retea, cu performante excelente, performante limitate aproape in exclusivitate de capacitatea retelelor de calculatoare de a vehicula informatia ("latimea de banda").

Sistemele de video-conferinta ridica standardele in comunicatii la niveluri de performanta neatinse pana nu demult. Video-conferinta presupune ca mai multi participanti sa poata comunica sonor si vizual fiecare-cu-fiecare, ca si cand s-a afla in aceeasi sala. In prezent, din punct de vedere al cerintelor hardware, video-conferinta nu este nici pe departe atat de pretentioasa pe cat suna, fiind accesibila fara probleme oricarui utilizator de PC (de generatie mai recenta, totusi). O arhitectura uzuala de sistem echipat pentru video-conferinta cuprinde:

un calculator PC (de preferat cu facilitati multimedia) conectat la reteaua de calculatoare :

un set be boxe audio; un kit de video-conferinta; latime de banda suficienta la retea.

Kit-ul de video-conferinta este un pachet hardware si software disponibil la preturi rezonabile, in comertul de tehnica de calcul.

Televiziunea interactiva Televiziunea interactiva specifica posibilitatea ca telespectatorul sa poata deveni un

participant mult mai activ decat este in prezent. Exista mai multe tipuri de interactivitate ce poate fi utilizata in astfel de sisteme. Cel mai simplu tip este acela in care telespectatorul poate "produce" programele pe care le vizioneaza. De exemplu, utilizatorul poate selecta un anumit unghi de filmare a unui eveniment sportiv televizat, din mai multe variante posibile. Sau poate cere informatii suplimentare despre o echipa sau despre un anumit jucator.

Un alt exemplu ar putea fi o emisiune educativa in care utilizatorul poate selecta un anumit nivel educational din mai multe disponibile, poate cere documentatie suplimentara despre un anumit subiect, sau chiar poate raspunde la diferite intrebari de verificare a cunostintelor. Acest tip de aplicatie multimedia necesita diferite tipuri de solutii tehnologice, deoarece programele TV interactive vor fi prea specializate pentru a putea fi transmise pe canalele TV comune. Astfel, va fi necesara inscrierea doritorului la un serviciu TV special, achizitionarea unui decodor pentru semnalul TV respectiv si a unui echipament specializat pentru comunicatia telespectator-studio TV producator.

Pasi urmatori in multimedia "Simpla compunere a sistemelor si metodelor multimedia existente, nu reprezinta o solutie multimedia globala."

Toate sistemele multimedia cunoscute in prezent iau in considerare doar partial aspectele legate de procesarea critica in raport cu timpul a datelor audio si video. S-au implementat doar componentele critice strict necesare procesarii corecte din cadrul aplicatiilor multimedia particulare. De exemplu, se presupune de fiecare data ca intreruperile cu prioritate mare nu vor cauza probleme in timpul procesarii continue a datelor. Cu toate acestea, in situatiile critice, pot aparea intarzieri sesizabile in fluxul de procesare a datelor multimedia. Scopul prioritar in dezvoltarea urmatoare a sistemelor multimedia este de a integra toate componentele hardware si software in cadrul procesarii in timp real.Filmele video si animatiile sunt doua medii asemanatoare, care in ciuda diferentelor minore se contopesc intr-unul singur. Ele au la baza aceeasi tehnologi: redarea cadrelor asemanatoare la o rata ridicata pentru a creea iluzia miscarii. Filmele si animatia sunt deseori insotite de sunet, pentru a parea mai reale. Rata de cadre (frames) folosita cel mai des in multimedia este 25-30 fps (frames per second). Cu cat numarul de cadre pe secunda este mai mare cu atat calitate filmului creste, dar si resursele necesare redarii filmului trebui sa fie mai puternice.

Diferenta dintre filme video si animatie specificata mai sus nu este mare: filmele sunt provenit din realitate si sunt inregistrate cu ajutorul camerelor video digitale, in timp ce animatiile sunt create cu ajutorul unor aplicatii software specilizate (3D MAX, Fractal Design Poser, Lightwave, Cinema 4D XL , RayDream Studio etc) sau sunt rezultatul muncii manuale, cu creionul si hartia (in cazul desenelor animate mai vechi). Anumite secvente din filmele noi sunt rezultatul prelucrarii computerizate a imaginilor inregistrate in realitate.

Utilizatorii computerelor si ai multimediei prefera de obicei filmele si animatiile ca medii de transmitere a informatiilor pentru ca ele stimuleaza simultan, in timp real, atat vazul cat si auzul, fiind foarte usor de perceput. Acesta este motivul pentru care articolelor

156

Page 157: curs DPW.docx

importante din enciclopediile noi le sunt adaugate, pe langa text, poze si sunete animatii sau filme.

Filmele necesita un spatiu de stocare enorm, motiv pentru care cercetatorii au incercat sa realizeze formate de comprimare a acestora. Astfel au luat nastere primele formate care reduceau o mare parte din marimea animatiei prin eliminarea informatiei nefolositoare, dar odata cu acesta si calitatea ei, cum ar fi MPEG si DAT. Aparitia DVD-urilor a determinat realizarea unui format de o calitate mai ridicata, numit MPEG 2. Ultima metoda de comprimare a informatiei audio/video este numita MPEG 4. Desi raportul dintre calitate si marime al filmelor salvate in acest format din urma este optim, el nu a avut parte de o promovare spectaculoasa. Se asteapta in curand aparitia ultimului format de compresie: MPEG 7.

Efectele specialeRealizarea efectelor speciale este considerata cel mai profitabil si cel mai interesant

domeniu al multimediei. Ea a aparut prima data in cinematografie sub forma exploziilor bine plasate si a trucurilor care sa creeze impresia unor scene cat mai reale. Odata cu aparitia computerelor super-performante si a programelor specializate de grafica s-a reusit realizarea a unor efecte mult mai rapid, ieftin si realist. Daca la primul film Godzilla a fost nevoie de un om sa se imbrace intr-un costum de monstru si apoi sa umble printr-un oras in miniatura (aceea era limita tehnologiei) , la a doua versiune totul a fost mult mai simplu: s-a proiectat modelul 3D al monstrului, dupa care acesta s-a suprapus peste imaginea filmata.

Pe masura ce computerele personale s-au dezvoltat suficient de mult, jocurile sofisticate au devenit ceva nelipsit de pe un computer. Ele au devenit din ce in ce mai realiste. Toate obiectele si personajele au inceput a fii tot mai complexe si proiectate pana la cele mai mici detalii. Efectele speciale din jocuri (mai ales strategie si shootere) erau nelipsite, fiind intalnite la tot pasul.

Revenind in domeniul cinematografiei, ultimele tipuri de filme (in special science-fiction, horror) imbina in foarte multe din secvente realul cu virtualul. Primul film care a folosit efectele speciale computerizate in foarte multe dintre scene a fost The Matrix (cu o poveste foarte captivanta), marele film care a luat tot ce se putea in domeniu efectelor speciale la Oscaruri: premiul pentru cele mai bune efecte vizuale, pentru sunet, editarea sunetului si editarea peliculei (a fost si cel mai bun film, dupa parerea mea). Au fost alte filme (Sleepy Hollow, Godzilla, The Fifth Element) care desi au folosit acelasi stil de FX-uri nu s-au remarcat.

Se crede ca urmtorul pas in domeniul cinematografiei este realizarea unor filme de lunga durata in realitatea virtuala.Imagini rollover

Sunt imagini care vă permit să schimbaţi grafica atunci când mouse-ul este deasupra imaginii. Aceste imagini se inserează folosind următoarea succesiune Insert -> Image Objects -> Rollover Images:

Filme QuickTimePentru aceasta se foloseşte: Insert > Media > Plug-in. (implicit filmul va deschis într-o

fereastră mică, pentru a fi mai mare, se redimensionează până la dimensiunile dorite). Trebuie să vă asiguraţi că filmul este copiat în folderol site-ului.

157

Page 158: curs DPW.docx

Fişiere FlashAceasta se realizează ca şi cum ai introduce o imagine: din meniul “Insert” , te

asiguri că categoria “Common” este selectată, apoi se apasă butonul “Media” şi se deschide un meniu pop-up cu mai multe opţiuni( SWF – inserează un Flash Movie, FLashPaper – inserează un document FlashPaper, FLV – inserează un Flash Video, Shockwave – inserează un Shockwave Movie). Fereastra de dialog care se deschide depinde de tipul de fişier selectat.

Adăugarea fişierelor multimediaDespre multimedia şi lăţimea de bandăAdăugarea fişierelor multimedia, precum sunetele şi filmele, devine tot mai folosită

pe măsură ce modemurile devin tot mai rapide, iar oamenii navighează pe Web cu o lăţime de bandă (bandwidth) mai mare. Cele mai multe fişiere multimedia ocupă o lăţime de bandă mare.

Cei mai mulţi au acces la Internet folosind o conexiune broadband (de bandă largă): modem DLS sau cu cablu TV. Dacă sunteţi pe un modem cu cablu TV, aveţi acces la o lăţime de bandă Internet mai mare decât cineva care este conectat la un modem de 56 kbps.

Unele formate, precum fişierele RealMedia sau Shockwave, satisfac cerinţele unei benzi largi pentru sunet şi filme prin fluxul continuu (streaming) al conţinutului către dumneavoastră.

Conţinutul transmis în flux continuu începe să fie redat după o scurtă perioadă de memorare într-un buffer; conţinutul continuă să se descarce în culise, în timp ce este redat conţinutul din memoria buffer anterioară. Cele mai multe fişiere multimedia transmise prin Web sunt comprimate prin tehnici aflate în permanentă perfecţionare. Unele dintre formatele tradiţionale de fişiere multimedia, cum sunt WAV (audio), AVI (film Windows), MOV (film QuickTime) şi AIFF (audio), sunt adesea prea mari pentru a fi transmise prin Web. Unele dintre aceste formate necesită descărcarea întregului fişier înainte de a fi redat. Pentru a transmite un astfel de tip de sunet sau conţinut video trebuie să înţelegeţi ce tehnologie să alegeţi; apar mereu noi instrumente de comprimare şi de transmitere în flux continuu.

Despre programele de redareToate fişierele multimedia necesită un terţ program pentru a fi rulate de un browser.Aceste programe de redare (play) sunt fie module plug-in, fie controale ActiveX, iar

unele sunt instalate automat cu browserul sau cu sistemul de operare. Nu puteţi presupune că cei care vor vizita pagina dumneavoastră Web au instalate aceleaşi programe de redare ca şi dumneavoastră.

Trebuie să îi oferiţi vizitatorului informaţii pentru obţinerea programului de redare necesar.

Netscape Navigator şi Internet Explorer lucrează cu fişierele multimedia în două moduri diferite, dar totuşi similare. Netscape extinde capacităţile sale cu module plug-in. Netscape are un dosar pentru module plug-in în care păstrează aceste programe. După instalarea unui modul plug-in trebuie să reporniţi Netscape pentru ca acesta să funcţioneze. Microsoft foloseşte standardul său ActiveX pentru a lansa şi a rula conţinutul multimedia. Controalele ActiveX sunt similare cu modulele plug-in şi sunt instalate pe calculatorul dumneavoastră pentru a adăuga capacitatea de a reda diferite tipuri de fişiere. Controalele ActiveX funcţionează în cadrul browserului Internet Explorer. Multe extensii terţe de browsere sunt livrate şi sub forma unui modul plug-in şi ca un control ActiveX. Un control ActiveX se instalează singur de obicei, în culise, fără a fi nevoie să reporniţi browserul.

Unii utilizatori fie au dezactivat capacitatea calculatorului de a instala controale ActiveX în browserele lor, fie sunt nedumeriţi şi poate chiar suspicioşi când apare o casetă de dialog care le spune că vor descărca şi vor instala ceva. Dreamweaver are mai multe funcţii care îmbunătăţesc capacitatea dumneavoastră de a adăuga cu succes fişiere multimedia la o pagină Web. Există o funcţie behavior (un comportament) care detectează dacă vizitatorul are un anumit program de redare (player). Ar fi indicat să spuneţi vizitatorului de unde să descarce programul de redare cerut. Puteţi amplasa informaţia pe pagina dumneavoastră Web incluzând o legătură prin care se descarcă programul de redare. Mai puteţi să permiteţi browserului să încerce automat descărcarea unui program de redare, folosind atributul pluginspage.

Adăugarea fişierelor FlashMacromedia Flash şi Director au devenit în mod discutabil standardele pentru

animaţia pe Web. Director, creat iniţial pentru programe interactive pe CD-ROM, are un program de redare pe Web prin flux continuu, numit Shockwave. Flash este mai nou sosit,

158

Page 159: curs DPW.docx

devenind extreme de cunoscut pentru crearea animaţiei mici, interactive pentru Web. Funcţia de interactivitate din Flash este limitată în comparaţie cu Director, dar Flash este cunoscut pentru grafica sa vectorială - un format grafic care este redus şi scalabil.

Un alt instrument interactiv cu flux continuu de la Macromedia, disponibil pentru dezvoltare, este Authorware Web Player. Authorware este folosit pentru a crea aplicaţii pentru instruire cu o interactivitate puternică. Obiectul Authorware Web Player nu este instalat cu Dreamweaver.

Filmele Flash se încheie cu extensiile de fişier .swf, .fla sau .swt. FilmeleShockwave se încheie cu extensia de fişier .dcr. Pentru a vedea aceste filme trebuie

să aveţi instalat un program de redare Flash sau Shockwave.Pentru a insera un film Flash selectaţi un obiect Flash în secţiunea Common a barei

de inserare. Filmul Flash are o casetă de validare în fereastra de inspectare Property pentru parametrii de buclare (Loop) şi autoredare (Autoplay).

Utilizarea tagurilor <object> şi <embed>Există două taguri folosite pentru a insera conţinut multimedia. Obiectele Plugin

inserează în codul HTML un tag <embed>, tagul standard pentru modulul plug-in din Netscape. Browserul Internet Explorer recunoaşte tagul <object> şi apelează controalele ActiveX Flash sau Shockwave. Când inseraţi un obiect Flash, Dreamweaver inserează automat ambele taguri în pagina dumneavoastră Web. Utilizarea ambelor taguri permite browserului să trateze optim fişierul. Netscape recunoaşte tagul <embed> şi apelează modulul plug-in Flash, iar Internet Explorer apelează controlul ActiveX Flash.

Previzualizarea filmului în fereastra Document din DreamweaverDacă aveţi instalat pe calculatorul dumneavoastră modulul plug-in corespunzător,

puteţi reda filmul Flash în fereastra Document din Dreamweaver. Când instalaţi Dreamweaver, el caută automat module plug-in pe care le-aţi instalat în dosarele de module plug-in ale browserelor instalate pe calculatorul dumneavoastră. Dacă nu aveţi modulele plug-in instalate în browserul dumneavoastră, puteţi instala module plug-in direct în dosarul de module plug-in din Dreamweaver, aflat în Configuration/Plugins. Pentru a previzualiza filmul Flash în fereastra Document, selectaţi butonul verde Play din fereastra de inspectare Property. In timp ce rulează filmul, butonul Play devine un buton roşu Stop. Se selectează butonul Stop pentru a opri filmul.

Gestionarea componentelor cu panoul AssetsDupă ce aţi proiectat pagina dumneavoastră Web, probabil o veţi popula cu elemente

de pagină. Elementele care alcătuiesc paginile Web vor proveni din mai multe surse şi vor fi tipuri de obiecte diferite (filme Flash, imagini, culori, legături, etc).

Veţi aduna şi organiza aceste elemente de pagină înainte de a începe crearea paginii Web.

Panoul Assets (componente) din Dreamweaver vă permite să organizaţi elementele din site-ul dumneavoastră Web pentru a avea acces rapid la ele şi a le reutiliza.

Ce sunt componentelePaginile Web nu sunt alcătuite doar din text şi cod. Se folosesc imagini, filme, culori şi

URL-uri pentru a prezenta informaţia în paginile Web.Panoul Assets organizează aceste elemente, permiţându-vă să găsiţi rapid o imagine

sau o culoare pe care doriţi să o folosiţi. Puteţi previzualiza componente în panoul Assets. De asemenea, mai puteţi crea o listă de componente favorite – cele pe care le utilizaţi des.

Administrarea componentelor în panoul AssetsDreamweaver cataloghează automat componentele întregului dumneavoastră site.

Când deschideţi panoul Assets, puteţi selecta unul dintre butoanele de categorii aflate pe marginea din stânga a panoului, pentru a afişa o listă cu toate componentele de acel tip din site. Panoul Assets include mai multe categorii: Imagini, Culori, URL-uri, Filme Flash, Filme Shockwave, Filme, Scripturi, Machete, Bibliotecă. Panoul Assets vă permite să adăugaţi rapid paginii dumneavoastră Web o componentă selectată.

Componentele sunt specifice site-ului curent. Adesea veţi folosi anumite elemente de pagină din mai multe site-uri Web la care lucraţi. Puteţi copia componentele dumneavoastră în alt site Web definit în Dreamweaver, pentru a le folosi în acel site.

Listarea componentelor unui siteDreamweaver plasează componentele în categoriile corespunzătoare, examinând

extensiile fişierelor din site-ul dumneavoastră Web. Panoul Assets conţine doar lista componentelor ce se află în site-ul curent selectat. Dacă schimbaţi site-ul, veţi vedea că în timp ce se actualizează panoul Assets apare pentru scurt timp o casetă cu un mesaj.

159

Page 160: curs DPW.docx

Toate categoriile de componente cu excepţia categoriilor Library (bibliotecă) şi Templates (şabloane) au două butoane radio în partea de sus a panoului, permiţându-vă să alegeţi dacă doriţi să vedeţi toate componentele acelui tip sau doar favoritele.

Dacă adăugaţi o componentă la site-ul dumneavoastră, este necesar să selectaţi butonul Refresh pentru a o vedea în lista panoului Assets.

Previzualizarea componentelorElementele listate în panoul Assets sunt implicit sortate în ordine alfabetică. Puteţi

sorta elementele după orice antet de coloană disponibil, dând clic pe capul (antetul) de coloană.

De exemplu, în loc de sortarea implicită, după numele de fişier, puteţi sorta componentele de imagine după dimensiunea fişierului.

Uneori, puteţi localiza fişierul iniţial al componentei în panoul sau fereastra Site. Dreamweaver are o comandă care deschide panoul sau fereastra Site având evidenţiat fişierul componentei. Clic-dreapta pe o componentă şi apoi selectează comanda Locate in Site (localizare în site) din meniul contextual. Comanda funcţionează doar pentru componentele care se află în fişierele individuale, cum sunt filmele sau imaginile, şi nu funcţionează pentru componentele care sunt elemente de pagină Web, cum sunt URL-urile sau culorile.

Examinarea componentelor de imagineCategoria de imagini a panoului Assets afişează toate imaginile din site-ul

dumneavoastră Web. Dreamweaver cataloghează imaginile în formate GIF, JPG sau PNG.Examinarea componentelor de culoareCategoria de culori a panoului Assets afişează toate culorile folosite în site-ul Web

definit. Culorile sunt catalogate şi sunt afişate în format hexazecimal. Dreamweaver afişează o previzualizare a culorii selectate, împreună cu definirile hexazecimală şi RGB, în partea de sus a panoului.

Examinarea componentelor pentru legăturiCategoria URL-urilor din panoul Assets păstrează toate hiperlegăturile conţinute în

siteul Web curent definit. Această categorie listează toate URL-urile din site, incluzând cele FTP, pentru e-mail, pentru Gopher, JavaScript, HTTP (Web) şi HTTPS (Web protejat).

Examinarea componentelor de filmeExistă trei categorii diferite de componente de filme: filme Flash, filme Shockwave şi

filme. Categoria filmelor va conţine diferite tipuri de filme, altele decât Flash sau Shockwave, cum sunt filmele QuickTime sau MPEG. Există un buton Play/Stop în colţul din dreapta sus al ferestrei de previzualizare care permite redarea filmului în fereastra de previzualizare.

Examinarea componentelor de tip scriptCategoria scripturilor din panoul Assets conţine toate fişierele script externe din site-

ul dumneavoastră Web. Fişierele script externe se termină cu extensia .js. Aceste fişiere script conţin funcţii JavaScript pe care le puteţi apela din paginile Web. Fereastra de previzualizare arată codul real din script.Codul JavaScript conţinut în pagini Web individuale nu este inclus în categoria de scripturi a panoului Assets.

Faceţi trimitere la un script extern din secţiunea head a paginii Web. Dacă apelaţi o funcţie care este conţinută într-un script extern, trebuie să legaţi fişierul script extern la pagina dumneavoastră Web, prin tragerea sa cu mouse-ul din categoria scripturilor a panoului Assets în secţiunea Head Content (comanda Head Content din meniul View) din fereastra Document în Dreamweaver.

Adăugarea componentelor la o pagină WebFolosiţi panoul Assets pentru a adăuga componente paginii dumneavoastră Web.Pentru a adăuga o componentă paginii Web:1. Selectaţi o categorie.2. Găsiţi componenta pe care doriţi să o adăugaţi, prin derularea listei până la

numele ei sau vizualizând-o în fereastra de previzualizare.3. Plasaţi punctul de inserare în pagina dumneavoastră Web, acolo unde doriţi să

poziţionaţi componenta.4. Selectaţi butonul Insert şi componenta este inserată în pagina Web.De asemenea, mai puteţi folosi componentele din panoul Assets pentru a modifica

alte obiecte de pe pagina Web. De exemplu, puteţi aplica o componentă de culoare unui text de pe pagina Web, după cum urmează:

1. Selectaţi un text de pe pagină.

160

Page 161: curs DPW.docx

2. Trageţi cu mouse-ul o culoare din panoul Assets prin selectarea numelui, fie din fereastra de previzualizare, fie din lista de categorii.

3. Plasaţi culoarea peste textul selectat.În loc de operaţiile de tragere şi plasare peste text, puteţi doar să apăsaţi butonul

Apply pentru a aplica acea culoare textului.Pentru a sări rapid la o secţiune din lista de componente, se selectează una dintre

componentele din listă şi apoi se introduce prima literă din numele componentei căutate. Se ajunge la prima componentă care începe cu acea literă.

Crearea de componente favoriteExistă adesea componente în site-ul Web pe care le folosim în mod repetat. Puteţi

ataşa aceste componente la lista de favorite, astfel încât ele să fie uşor de selectat din panoul Assets.

Pentru a crea o componentă favorită, selectaţi componenta din panoul Assets şi apoi selectaţi butonul Add to Favorites (adăugare la favorite). Când selectaţi butonul radio Favorites, ar trebui să apară în listă componentele favorite adăugate deja. Puteţi da unei componente favorit un alt nume, printr-un click-dreapta pe ea, selectarea comenzii Edit Nickname (editarea pseudonimului).

Componentele favorite nu sunt disponibile pentru categoriile Templates şi Library ale panoului Assets.

Vă puteţi organiza componentele favorite pe grupuri, prin crearea de noi dosare în cadrul listei de favorite. Butonul New Favorites Folder (dosar cu favorite noi) vă permite să creaţi un dosar în cadrul listei de favorite. După ce aţi creat un dosar, puneţi componentele în acesta cu operaţia drag-and-drop (tragere şi plasare). Extindeţi dosarul pentru a vizualiza conţinutul selectând butonul + de lângă numele dosarului. Comprimaţi vizualizarea dosarului prin selectarea butonului – de lângă numele dosarului.

Înlăturaţi elementele din lista de favorite prin selectarea butonului Remove from Favorites (îndepărtarea dintre favorite). Elementul este înlăturat doar din lista de favorite, nu este şters din site-ul Web. De asemenea, puteţi să daţi clic-dreapta pe un element şi să selectaţi comanda Remove from Favorites din meniul contextual.

Crearea de noi componente în panoul AssetsPuteţi adăuga o nouă culoare, un URL, şablon sau element de bibliotecă.Când vizualizaţi componentele favorite, mai puteţi crea noi URL-uri şi culori pentru a

fi folosite în site. Aceste noi componente sunt apoi disponibile chiar dacă nu au fost folosite încă în site-ul Web.

Pentru a crea o culoare nouă sau o nouă componentă de legătură:1. Selectaţi butonul radio Favorites din partea de sus a panoului Assets. Selectaţi fie

categoria culorilor, fie categoria legăturilor.2. Daţi clic-dreapta pentru a lansa meniul contextual.3. Selectaţi comanda New Color (culoare nouă) sau New URL (URL nou). Apare fie

selectorul de culoare, fie caseta de dialog Add URL.4. Alegeţi o culoare din selectorul de culoare sau completaţi URL-ul şi numele asociat

în caseta de dialog Add URL (adăugare de URL).Copierea componentelor în alt sitePuteţi copia în alt site o singură componentă, un grup de componente sau un grup de

favorite. Pentru a copia o singură componentă în alt site, executaţi click-dreapta pe numele elementului din listă şi selectaţi comanda Copy to Site. Selectaţi site-ul definit în care vreţi să copiaţi componenta. Dreamweaver copiază structura exactă a dosarului şi a fişierului pentru o componentă imagine sau film.

Pentru a copia un grup de componente în alt site selectaţi mai multe elemente din lista de componente prin Shift-clic (sau Ctrl-clic) pe numele elementelor. Daţi clic-dreapta pe grup şi selectaţi comanda Copy to Site din meniul contextual. Toate componentele vor fi copiate în celălalt site. Parcurgând aceiaşi paşi puteţi copia un grup de favorite în alt site.

Panoul Assets ne poate ajuta să organizăm imaginile astfel încât să nu fie nevoie să folosim mai multe directoare pentru organizare. Puteţi folosi o convenţie de denumire pentru a sorta imaginile. De exemplu, toate imaginile pentru secţiunea 1 a unui site Web pot să înceapă cu numărul 1 (1_image1, 1_image2 etc.). După ce aţi sortat imaginile, puteţi crea componente favorite şi dosare pentru a organiza favoritele astfel încât să puteţi găsi rapid imaginile de care aveţi nevoie.

Dacă există URL-uri care încep cu numefisier:/// în lista panoului Assets atunci se identifică paginile care conţin aceste legături este prin rularea raportului Check Links

161

Page 162: curs DPW.docx

(verifică legăturile) din panoul Site. Selectaţi fişierele care apar în raport ca având legături ce încep cu numefisier:/// şi modificaţi URL-ul cu o adresă relativă la document.

Inserarea de tabeleSe foloseşte meniul Insert, opţiunea Table, se specific numărul de rânduri şi coloane,

lăţimea tabelului în pixeli (între 600 şi 800), Border thickness(grosimea bordurii) dacă se pune 0 nu e vizibilă, deci pentru a fi văzută trebuie un număr mai mare sau egal cu unu, Cell padding adaugă spaţiu în interiorul celulei, Cell spacing adaugă spaţiu între celule.

Proprietăţile tabeluluiAceste proprietăţi se pot vizualiza în panoul de proprietăţi:

Se observă că se poate adăuga nume tabelului, alinierea, background-ul acestuia.Proprietăţile celulelor tabeluluiAcestea se pot vedea printr-un click într-o celulă:

Aici se pot modifica lăţimea şi înălţimea celulei, alinierea în celulă, se mai poate insera antet, background, îmbina celulele sau scinda.

Adăugarea celulelor de antet la tabelConţinutul celulelor de antet apare îngroşat şi centrat. Pentru a face un rând de

celule de antet de-a lungul părţii de sus a tabelului, selectaţi primul rând din tabel şi bifaţi în fereastra de inspectare Property caseta de validare de lângă Header. Bifarea casetei de validare Header transformă tagurile pentru celule de tabel <td> în taguri pentru celula cap de tabel, <th>.

Adăugarea şi sortarea datelorPentru a introduce date daţi clic într-o celulă de tabel, introduceţi date de la tastatură

şi apoi apăsaţi tasta Tab pentru a trece la următoarea celulă. Când ajungeţi la celula cea mai din dreapta a rândului de jos, apăsarea tastei Tab va crea un nou rând. Când folosiţi tasta Tab pentru a crea noi rânduri de tabele, Dreamweaver dă noului rând atributele celui precedent. Dar, dacă folosiţi tasta Tab ca să creaţi un rând nou după un rând de celule de titlu, noul rând va fi unul de noi titluri!

Dreamweaver facilitează sortarea datelor din tabelul dumneavoastră cu comanda Sort Table din meniul Commands. Pentru a sorta un tabel cu comanda Sort Table:

162

Page 163: curs DPW.docx

1. Selectaţi tabelul. Selectaţi comanda Sort Table din meniul Commands. Caseta de dialog Sort Table conţine mai multe meniuri derulante pentru sortarea tabelului.

2. În meniul Sort By, selectaţi coloana după care se face sortarea.3. În meniul derulant Order, alegeţi dacă doriţi să sortaţi coloana în ordine alfabetică

sau numerică.4. Alegeţi dacă doriţi sortarea în ordine crescătoare sau descrescătoare din opţiunile

din dreapta meniului derulant Order.5. Sub primul set de opţiuni de sortare puteţi stabili un al doilea set de opţiuni.

Dreamweaver va sorta mai întâi după prima coloană şi apoi după a doua coloană.6. Dacă primul rând al tabelului este un rând de anteturi (cap de tabel), lăsaţi

nebifată caseta Sort Includes First Row (sortarea include primul rând). Dacă nu aveţi celule de antet – cu alte cuvinte, cap de tabel -, puteţi include primul rând în sortare.

7. Caseta de validare Keep TR Attributes With Sorted Row (păstrează atributele de rând de tabel în rândul sortat) permite să se păstreze atributele rândului de tabel după sortare. Dacă aţi formatat tabelul într-un anumit mod, puteţi bifa această casetă pentru a nu pierde formatarea.

8. Daţi clic pe OK pentru a lansa sortarea.Adăugarea şi înlăturarea rândurilor şi a coloanelorPentru a adăuga sau a înlătura un rând sau o coloană folosiţi meniul contextual care

apare când daţi clic-dreapta pe o celulă de tabel. Daţi clic-dreapta pe o celulă de tabel şi selectaţi submeniul Table; apare un alt submeniu cu câteva comenzi pentru a adăuga şi a înlătura rânduri, coloane sau ambele. Selectaţi una dintre aceste comenzi pentru a face modificări în tabel. La folosirea comenzilor de inserare, Dreamweaver inserează o nouă coloană în stânga coloanei curente.

Mai puteţi adăuga sau şterge rânduri şi coloane prin editarea proprietăţilor de tabel din fereastra de inspectare Property. Pentru a adăuga sau şterge grupuri de celule ajustaţi numărul de rânduri şi coloane din fereastra de inspectare Property având tot tabelul selectat.

La folosirea ferestrei de inspectare Property, Dreamweaver inserează o nouă coloană în partea cea mai din dreapta a tabelului şi un rând nou în partea de jos a tabelului. Dacă ştergeţi coloane sau rânduri în fereastra de inspectare Property, coloanele vor fi înlăturate din partea dreaptă, iar rândurile vor fi şterse din partea de jos. Se pierd toate datele care se află în coloanele sau rândurile şterse.

Modificarea lăţimii coloanei şi a înălţimii rânduluiSe pot modifica lăţimea coloanei şi înălţimea rândului prin tragerea cu mouse-ul a

marginilor de celulă sau prin introducerea valorilor în fereastra de inspectare Property. Dacă preferaţi să dimensionaţi fără a sti dimensiunile, poziţionaţi cursorul peste o margine de celulă până când cursorul devine un cursor cu două linii (paralele). Trageţi cursorul cu două linii pentru a modifica lăţimea coloanei sau înălţimea rândului.

Folosiţi casetele W (lăţime) şi H (înălţime) din fereastra de inspectare Property pentru a da valori exacte lăţimii şi înălţimii. Valorile sunt exprimate în pixeli sau în procente.

Redimensionarea unui tabelAvând tot tabelul selectat, deplasaţi marcajele de dimensionare pentru a da tabelului o altă dimensiune. Dacă nu aţi dat valori pentru lăţimea şi înălţimea celulelor, rândurilor şi coloanelor, celulele se vor distribui singure proporţional când se modifică dimensiunea întregului tabel. Pentru a şterge toate valorile de lăţime şi de înălţime din tabel, selectaţi submeniul Table din meniul Modify. În partea de jos a meniului sunt comenzi de ştergere a înălţimii celulelor sau de ştergere a lăţimii celulelor. Mai sunt disponibile comenzi pentru a converti toate valorile în pixeli sau în procente. Aceste comenzi sunt la îndemână dacă stabiliţi atributele de tabel în pixeli şi doriţi să le modificaţi în procente sau invers. Când este selectat tabelul, butoanele pentru aceste comenzi sunt disponibile în jumătatea de jos a ferestrei de inspectare Property.

Stabilirea spaţiilor de umplere a celulei şi distanţarea celulelorSpaţiile de umplere a celulei (cell padding) stabilesc distanţa dintre un obiect

conţinut într-o celulă şi marginea celulei. Spaţierea celulelor (cell spacing) stabileşte distanţa dintre două celule.

Adăugarea unui titlu de tabel din secţiunea Table a barei InsertCele mai multe comenzi ale secţiunii Tables a barei Insert sunt active doar atunci

când vizualizaţi pagina Web în Code View. Aceste comenzi sunt destinate utilizatorilor de Dreamweaver care preferă să lucreze singuri codul HTML. Folosirea secţiunii Tables este

163

Page 164: curs DPW.docx

singura cale de a adăuga tagul <caption> la pagina dumneavoastră Web, pentru a adăuga un titlu de tabel.

Pentru a adăuga un titlu de tabel:1. Selectaţi Code View sau vizualizarea dublă a codului şi designului.2. Plasaţi punctul de inserare imediat după tagul de deschidere <table>.3. Selectaţi secţiunea Tables din bara Insert.4. Selectaţi comanda Table Caption. Dreamweaver adaugă paginii Web tagurile

pereche <caption>, punând cursorul între cele două taguri.5. Introduceţi un titlu între tagurile <caption>.6. Plasaţi punctul de inserare imediat înainte de paranteza de închidere a tagului de

deschidere <caption> şi apăsaţi bara de spaţiu de la tastatură. După câteva secunde, apare meniul derulant cu atribute. Selectaţi atributul align.

7. Dreamweaver plasează punctul de inserare între ghilimelele atributului <align>. Selectaţi bottom din atributele meniului derulant pentru aliniere. În acest fel se cere browserului să afişeze titlul de tabel în partea de jos a tabelului.

Importul datelor în tabelDacă aveţi deja date într-o foaie de calcul sau o bază de date, acestea se pot importa

datele exportate din aplicaţia de foi de calcul sau de baze de date în Dreamweaver cu comanda Import Tabulator Data. Cele mai multe aplicaţii de foi de calcul sau baze de date pot exporta date într-un fişier de text astfel încât Dreamweaver să-l poată importa. Trebuie să cunoaşteţi ce caracter este folosit în fişierul de date ca delimitator înainte de a putea importa cu succes datele în Dreamweaver. Un delimitator este un caracter folosit între câmpurile individuale de date. Delimitatorii folosiţi de obicei sunt spaţiul Tab, spaţiul, virgula, punctul şi virgula şi două puncte. Când exportaţi fişierul de date, va trebui să alegeţi un delimitator care să nu apară în date.

Microsoft Excel importă şi exportă fişiere cu extensia de fişier .cvs, având virgula ca delimitator şi cu extensia .prn, având spaţiul ca delimitator.

Puteţi crea fişiere de date deschizând un editor de texte, precum Notepad, şi introduceţi nişte date. Creaţi o singură linie de text cu mai multe câmpuri separate prin spaţii Tab. Creaţi mai multe înregistrări repetând în fişierul text procedura pentru linii succesive. Salvaţi fişierul şi importaţi-l în Dreamweaver ca fişier cu date delimitate prin spaţii tab.Pentru a importa date în Dreamweaver:

1. Plasaţi punctul de inserare în fereastra Document, acolo unde doriţi să se afle tabelul.

2. Selectaţi fie obiectul Tabular Data din secţiunea Common a barei Insert, fie comanda Import Tabular Data dintre submeniul Table Objects al meniului Insert. Apare caseta de dialog Insert Tabular Data.

3. Selectaţi pictograma Browse (dosarul) pentru a naviga la fişierul de date pentru tabel şi al importa în Dreamweaver.

4. Selectaţi delimitatorul de câmpuri din meniul derulant Delimiter. Dacă delimitatorul nu este unul dintre cele patru delimitatoare obişnuite din listă, selectaţi Other (altul) şi introduceţi delimitatorul în caseta care apare la dreapta meniului derulant Delimiter.

5. Alegeţi din casetele de sub Table Width dacă noul tabel va avea lăţimea conform datelor (Fit to Data) sau va avea o anumită valoare în pixeli sau în procente.

6. Dacă este necesar, introduceţi o valoare pentru spaţiul de umplere (cell padding) şi spaţierea celulelor (cell spacing). Nu uitaţi, mai târziu puteţi să modificaţi aceste valori prin editarea tabelului.

7. Selectaţi o valoare din meniul derulant pentru formatul primului rând (care este rândul de anteturi sau capul de tabel). Va trebui să ştiţi dacă fişierul de date are capete de coloană care vor apărea ca celule de antet în tabelul dumneavoastră HTML.

8. Introduceţi o valoare pentru grosimea chenarului tabelului.9. Daţi clic pe butonul OK pentru a importa datele în tabel.Exportul datelor din tabelDe asemenea, puteţi, să exportaţi date dintr-un tabel HTML. Datele pot fi apoi

importate într-o aplicaţie de foi de calcul, baze de date sau pe altă aplicaţie care are capacitatea de a prelucra date delimitate.

Pentru a exporta date dintr-un tabel Dreamweaver:1. Selectaţi un tabel sau plasaţi cursorul în oricare dintre celulele tabelului.

164

Page 165: curs DPW.docx

2. Selectaţi submeniul Export din meniul File şi apoi selectaţi comanda Table. Apare caseta de dialog Export Table.

3. Selectaţi delimitatorul de date din meniul derulant Delimiter.4. Din meniul derulant Line Breaks selectaţi stilul pentru linie nouă. Stilul pentru linie

nouă depinde de sistemul de operare, deci selectaţi sistemul de operare ce va rula când va fi importat fişierul de date. De exemplu, dacă trimiteţi fişierul de date cuiva care va rula o aplicaţie de foi de calcul pe un calculator Macintosh, selectaţi Macintosh.

5. Daţi clic pe butonul Export şi salvaţi fişierul.Proiectarea machetei de pagină folosind tabeleMacheta paginii Web (page layout) se referă la proiectarea modului în care va arăta

pagina atunci când va fi vizualizată în browser. Poziționați textul, meniurile şi alte elemente de pagină într-un mod eficient şi atractiv.

Dreamweaver vă permite să lucraţi în vizualizarea Layout (vizualizarea machetei) astfel încât să puteţi trasa elementele de tabel direct în fereastra Document. Acest lucru facilitează crearea tabelelor pentru macheta paginii.

Utilizarea vizualizării LayoutProiectarea tabelelor pentru o machetă de pagină este o sarcină complicată.

Modificarea sau crearea numărului perfect de celule solicită dezvoltatorilor de Web să unească, să divizeze şi să distribuie diverse rânduri şi coloane pentru a face paginile să arate aşa cum doresc. Dreamweaver include o vizualizare a machetei (vizualizarea Layout) ce vă permite să trasaţi, să mutaţi şi să editaţi uşor celule de tabel.

Examinarea unui tabel în vizualizarea StandardDupă ce aţi proiectat macheta dumneavoastră în vizualizarea Layout, reveniţi la

vizualizarea Standard pentru a adăuga conţinut. Puteţi edita tabelul dumneavoastră de machetă în vizualizarea Standard prin modificarea atributelor tabelului şi ale celulelor lui. Mai trebuie stabilită alinierea conţinutului din celule.

Unirea şi separarea celulelor de tabelPuteţi să aveţi în tabelul dumneavoastră unele rânduri sau coloane cu mai puţine

celule decât alte rânduri. De exemplu, puteţi avea în rândul de sus al unui tabel un titlu care este centrat peste toate coloanele. Cum se poate face asta?

Puteţi creşte sau descreşte întinderea coloanelor şi a rândurilor fie prin separarea, fie prin unirea celulelor. Pentru a uni un rând întreg astfel încât să apară ca o singură celulă, selectaţi rândul şi daţi clic pe butonul Merge. Mai puteţi da clic-dreapta oriunde în rând şi selecta comanda Merge Cells din submeniul Table al meniului contextual.

Alinierea conţinutului celulelor tabeluluiMeniul pentru alinierea verticală stabileşte alinierea conţinutului unei singure celule

sau al unui grup de celule. Aliniaţi conţinutul unei celule sau al unui grup de celule pe verticală. Când stabiliţi o aliniere verticală, aveţi următoarele opţiuni:

• Default este de obicei alinierea implicită, aceeaşi cu alinierea pe mijloc a conţinutului celulei.

• Top aliniază conţinutul celului în partea de sus a celulei.• Middle aliniază conţinutul celulei pe mijlocul celulei.• Bottom aliniază conţinutul celulei în partea de jos a celulei.• Baseline se aplică la mai multe celule dintr-un rând, aliniind partea de jos a

obiectelor din toate celulele. De exemplu, dacă aveţi un text foarte mare în prima celulă şi un text mic în a doua celulă, partea de jos a ambelor linii de text va fi aliniată prin aliniere verticală a liniilor de bază.Aliniaţi conţinutul unei celule sau al unui grup de celule pe orizontală cu meniul derulant pentru aliniere orizontală. Când stabiliţi o aliniere pe orizontală, aveţi următoarele opţiuni:

• Default este de obicei alinierea implicită, aceeaşi cu alinierea la stânga pentru conţinutul de celulă şi pe centru pentru conţinutul unei celule de antet.

Adăugarea culorilor la tabelExistă mai multe locuri în care puteţi adăuga culori la tabel:• O culoare de fundal pentru o celulă sau un grup de celule în tabel• O culoare de fundal pentru tot tabelul• O culoare pentru chenarul unei celule sau grup de celule• O culoare de chenar pentru tot tabelulStabiliţi fundalul tabelului şi chenarul tabelului în fereastra de inspectare Property.

Border Color stabileşte culoarea chenarului pentru tot tabelul.Puteţi adăuga o imagine de fundal unei celule de tabel sau unui tabel întreg.

Introduceţi URL-ul pentru o imagine de fundal în caseta numită Bg în fereastra de inspectare

165

Page 166: curs DPW.docx

Property. Trebuie să introduceţi o valoare în pixeli în proprietatea de dimensiune a chenarului (Border Size) pentru a vedea un chenar.

Există un butn cu un tabel, acest mic tabel arată ce celule aţi selectat: o singură celulă, un rând sau o coloană. Cuvintele cell (celulă), row (rând) şi column (coloană) apar la dreapta acestui mic tabel.

Imbricarea unui tabel într-un tabelPlasarea unui tabel într-o celulă de tabel creează un tabel imbricat (nested). Pentru a

imbrica un tabel, plasaţi punctul de inserare în interiorul unei celule de tabel şi inseraţi un tabel nou. Dimensiunile celulei de tabel limitează lăţimea şi înălţimea tabelului imbricat. Ar putea fi mai uşor să imbricaţi tabele în vizualizarea Layout. Trasarea unui tabel machetă folosind instrumentul Draw Layout Table vă permite să trasaţi un tabel peste o celulă existentă. Tabelul imbricat se va distribui la dimensiunea celulei părinte.

Este frumos să imbricaţi tabele în tabele. Dar, dacă imbricaţi prea mult, browserul ar putea afişa tabelele mai lent. Dacă browserul trebuie să muncească mult pentru a reda tabelele, ar fi mai bine să formataţi informaţia în alt mod.

Există un buton de eliminare a imbricării (Remove Nesting).Utilizarea unei imagini schiţă pentru a transfera un proiect în pagina WebImaginea schiţă (tracing image) este utilă atunci când creaţi un design de pagină şi

aveţi o imagine care arată toate elementele paginii finale. Puteţi utiliza această imagine ca fiind o imagine schiţă. În loc să estimaţi unde vor merge elementele pe ecran, puteţi afişa o imagine schiţă şi să amplasaţi perfect fiecare element de imagine şi de text peste imaginea schiţă. O imagine schiţă facilitează alinierea obiectelor.

Încărcaţi o imagine schiţă în Dreamweaver cu caseta de dialog Page Properties. Imaginea schiţă este vizibilă doar în Dreamweaver şi nu este niciodată vizibilă în browser. O imagine schiţă acoperă orice culoare de fundal sau imagine de fundal. Culoarea de fundal sau imaginea de fundal vor fi totuşi vizibile în browser.

Pentru a încărca o imagine schiţă în Dreamweaver:1. Deschideţi Page Properties din meniul Modify şi selectaţi butonul Browse de lângă

caseta Tracing Image (aflat în partea de jos a casetei de dialog). Sau selectaţi comanda Tracing Image din meniul View şi alegeţi Load.

2. Navigaţi până la fişierul imaginii schiţă. Ar trebui să fie un GIF, JPEG sau PNG.3. Deplasaţi cu mouse-ul glisorul Image Transparency (transparenţa imaginii) pentru

a stabili cât de opacă sau transparentă să fie imaginea schiţă.4. Daţi clic pe butonul OK.După ce aţi încărcat imaginea schiţă, puteţi trece la vizualizarea Layout din

Dreamweaver şi să începeţi trasarea proiectului pe care îl vedeţi „sub” fereastra Document în imaginea schiţă. Această facilitate este foarte utilă când implementaţi un design complicat care a fost creat de un grafician. De obicei, elementele de pagină, cum sunt butoanele, titlurile şi siglele, sunt decupate într-un program de editare de imagini. Artistul grafic poate exporta o imagine a întregului proiect pentru a-l utiliza ca imagine schiţă.

Transformarea tabelului în straturiStraturile permit o amplasare absolută a obiectelor pe pagină. Dreamweaver

converteşte un tabel într-un grup de straturi. Pentru a transforma un tabel în straturi:1. Selectaţi tabelul.2. Selectaţi comanda Tables to AP Divs (transformarea unui tabel în straturi) din

submeniul Convert al meniului Modify.3. Apare caseta de dialog Convert Tables to Ap Divs.4. Acceptaţi valorile implicite şi daţi clic pe OK.Caseta de dialog Convert Tables to AP Divs creează un strat pentru fiecare celulă de

tabel.Utilizarea limbajului Dynamic HTML şi a straturilorDynamic HTML (DHTML) oferă flexibilitatea necesară pentru machetarea paginilor

Web şi includerea elementelor de interactivitate. Straturile din Dreamweaver oferă o modalitate de control al amplasării obiectelor pe pagină. Puteţi pune elementele exact acolo unde le doriţi, fără a fi nevoie să creaţi tabele complicate. Dacă doriţi să distribuiţi pagina Web pentru browsere mai vechi ce nu pot reda elemente de Dynamic HTML, Dreamweaver poate crea un tabel care foloseşte straturile pentru a afişa formatul creat de dumneavoastră.

Ce este Dynamic HTML?Dynamic HTML (DHTML) permite să creaţi vizitatorului paginii Web o experienţă

interactivă. DHTML este un termen folosit de dezvoltatorii de Web pentru a se referi la o

166

Page 167: curs DPW.docx

colecţie de tehnologii folosite pentru a produce o pagină Web mai interactivă. Principalele trei componente din DHTML sunt straturile, foile de stil în cascadă (Cascading Style Sheets – CSS) şi JavaScript.

DHTML este o extensie a lui HTML care acordă dezvoltatorilor de pagini Web un control mai mare asupra machetării şi poziţionării în pagină. DHTML permite o mai mare interactivitate fără a depinde de interacţiunea cu un server. Când se vorbeşte de DHTML se înţelege de obicei combinaţia dintre HTML 4 şi Cascadyng Style Sheets (CSS). Aceste elemente funcţionează împreună printr-un limbaj de tip script, de obicei JavaScript.

Iată o listă scurtă de tipuri de acţiuni posibile prin DHTML:• Adăugarea de imagini ascunse pe pagină, care vor apărea când utilizatorul apasă

pe un buton sau dă clic pe o zonă fierbinte.• Miscarea imaginilor sau textului pe pagina Web.• Crearea meniurilor popup.• Realizarea de către utilizatori a operaţiilor drag-and-drop (tragere-şi-plasare)

asupra unui obiect pe ecran, aşa cum vrea el.• Determinarea schimbării culorii sau dimensiunii textului atunci când utilizatorul

trece cu mouse-ul peste el.• Încărcarea în mod repetat un text într-o zonă a ecranului, ca răspuns la o acţiune a

utilizatorului. De exemplu, dacă utilizatorii dau clic pe o variantă greşită dintr-un chestionar, puteţi să le transmiteţi o reacţie şi să înlăturaţi reacţia când dau răspunsul corect.

Adăugarea unui stratStraturile sunt containere pe care le folosiţi pentru a poziţiona conţinutul pe o pagină

Web.Straturile au două atribute interesante:• Visibility – Această proprietate permite să ascundeţi tot conţinutul unui strat şi apoi

să declanşaţi apariţia lui când utilizatorul execută o acţiune. De exemplu, puteţi simula un clic pe un meniu într-un program. Stratul care conţine imaginea meniului este iniţial ascuns. Utilizatorul dă clic pe titlul de meniu de pe ecran şi un script modifică atributele stratului în care se află meniul pentru ca acesta să devină vizibil.

• z-index – Această proprietate controlează ordinea de aşezare (stacking order) a straturilor de pe pagină. Puteţi suprapune straturile unul peste altul (overlapping) şi controla ordinea lor. Aceasta dă capacitatea de a crea proiecte complicate.

Puteţi crea un strat în Dreamweaver prin două metode diferite: Cea mai simplă este să selectaţi instrumentul de trasare a straturilor din bara

Insert şi să trageţi cu mouse-ul pe pagina dumneavoastră cursorul în cruce până când stratul ajunge la dimensiunea pe care o doriţi.

Selectaţi comanda AP Div din meniul Insert pentru a insera un strat. Categoria AP Div din preferinţele Dreamweaver este locul în care stabiliţi valorile

implicite ale straturilor. Puteţi stabili vizibilitatea, lăţimea, înălţimea, culoarea de fundal şi imaginea de fundal. Mai puteţi activa imbricarea prin marcarea casetei de dialog Nesting.

Se observă reperele de manevrare pentru redimensionare pe fiecare margine a stratului. Puteţi deplasa aceste repere pentru a mări sau micşora stratul. Mai puteţi stabili lăţimea şi înălţimea stratului în fereastra de inspectare Property. Unitatea de măsură implicită este pixelul. Este bine să daţi nume straturilor. Când veţi începe să adăugaţi funcţii behavior (comportamente) sau animaţie în straturi, numele vă vor ajuta să identificaţi fiecare strat în parte. Puteţi specifica un nume în caseta ID din ferereastra de inspectare Property. Nu se folosesc spaţii sau punctuaţie în numele de straturi.

Stabilirea poziţiei stratuluiStraturile au un reper de manevrare pentru tragere în colţul din stânga sus. Pentru a

selecta mai multe straturi, ţineţi apăsată tasta Shift în timp ce daţi clic pe straturi pentru a le adăuga la selecţie.Mutaţi straturile apucându-le de reperul de tragere. Dacă nu puteţi folosi reperul de tragere deoarece stratul este în marginea de sus a ferestrei Document, selectaţi-l în panoul Property al Ap Div-ului şi folosiţi tastele cu săgeţi pentru a-l muta sau introduceţi valorile de poziţie în fereastra de inspectare Property.

Adăugarea unei culori de fundal şi a unei imagini de fundalStraturile pot avea o culoare de fundal. Puteţi folosi selectorul de culoare sau puteţi

introduce de la tastatură o culoare în format hexazecimal standard HTML, precedat de un #.Această opţiune trebuie să fie necompletată dacă doriţi ca stratul să fie transparent. Mai puteţi pune o imagine de fundal într-un strat. Imaginea se va repeta de mai multe ori (tiling), ca un mozaic, în cadrul stratului dacă stratul este mai mare decât imaginea de fundal.

167

Page 168: curs DPW.docx

Selectaţi pictograma de navigare (dosarul) de lângă caseta Bg Image în fereastra de inspectare Property şi navigaţi la fişierul cu imaginea de fundal.

Despre ordinea de aşezare a straturilorOrdinea de aşezare decide care strat este deasupra celorlalte. Valoarea z-index este

cea care determină ordinea de aşezare, putând fi o valoare negativă sau pozitivă. Stratul cu cel mai mare z-index va fi deasupra.

Dreamweaver dă tuturor straturilor dumneavoastră o valoare unică pentru z-index. În HTML este permis să aveţi mai multe straturi cu acelaşi z-index. Dacă reordonaţi straturile, Dreamweaver le va renumerota cu un z-index unic.

Alinierea straturilor şi utilizarea grileiPuteţi activa şi dezactiva grila şi în meniul View Options din bara de instrumente.Modificarea vizibilităţii unui stratStraturile au un atribut de vizibilitate ce poate lua valorile visible (vizibil), hidden

(ascuns), inherit (moştenit) sau default (implicit).În panoul AP Elements, ochiul de lângă un strat este deschis când stratul este

configurat vizibil. El este închis când stratul este ascuns. Opţiunea inherit nu are o reprezentare printr-un ochi. eţi stabili caracteristicile de vizibilitate ale straturilor prin selectarea pictogramei ochi din capul de tabel al panoului AP Elements.

Vizibilitatea implicită are în cele mai multe browsere opţiunea inherit.Imbricarea straturilorPuteţi crea un strat în cadrul altui strat; noul strat este imbricat în stratul său părinte.

Când mutaţi stratul părinte, noul strat copil se mută o dată cu el. Stratul copil moşteneşte şi atributele de vizibilitate ale părintelui.Pentru a crea un strat imbricat plasaţi cursorul în interiorul stratului părinte şi alegeţi comanda AP Div din meniul Insert, submeniul Layout Objects. Se poate trasa un strat imbricat în cadrul unui strat existent. Puteţi plasa un strat existent în cadrul unui alt strat selectându-l în timp ce ţineţi apăsată tasta Ctrl şi apoi plasându-l în alt strat.

Construirea cadrelor şi a seturilor de cadreCrearea unui set de cadreExistă o diversitate de configuraţii disponibile printr-un clic pe pictogramele din

secţiunea Frames a barei Insert, submeniul HTML. Când lucraţi cu cadre, folosirea comenzii Save devine mai complicată. În timp ce lucraţi cu cadre, Dreamweaver activează comenzile Save Frameset (salvarea setului de cadre) şi Save Frameset As (salvarea setului de cadre ca) din meniul File. Mai puteţi folosi şi comanda Save All pentru a salva tot conţinutul cadrului şi al setului de cadre. Există, de asemenea, o comandă suplimentară de deschidere, comanda Open in Frame (deschidere în cadru), care apare în meniul File când lucraţi cu cadre.

Puteţi deschide cu această comandă o pagină Web existentă într-un cadru. Sunt trei metode de a crea cadre:

• Vizualizaţi chenarele de cadre şi apoi deplasaţi-le cu mouse-ul pentru a crea noi cadre.

• Folosiţi comenzile din submeniul Frameset al meniului Modify. S-ar putea să fie nevoie de utilizarea comenzilor de meniu când configurarea cadrului pe care doriţi să-l creaţi nu este posibilă prin tragerea chenarelor cu mouse-ul.

• Folosiţi configuraţiile de cadre preconstituite, disponibile în bara Insert.Vizualizarea chenarelor de cadreTrebuie să vizualizaţi chenarele de cadre înainte de a le putea trage cu mouse-ul şi a

crea cadre noi. Selectaţi comanda Frame Borders din submeniul Visual Aids (ajutoare vizuale) al meniului View. Veţi vedea un set de chenare ce înconjoară pagina. Aceste chenare sunt instrumente vizuale ajutătoare din Dreamweaver şi nu reprezintă modul în care va arăta pagina finală în browser. Puteţi deplasa aceste chenare pentru a redimensiona proiectul.

Divizarea unei pagini în cadrePentru a crea cadre, trageţi cu mouse-ul chenarele de cadru. Într-o pagină Web

goală, puteţi crea două cadre, sus şi jos, prin tragerea în jos cu mouse-ul a chenarului cadrului de sus.

Denumirea cadrelorCând comanda Frame Borders nu este bifată în submeniul Visual Aids al meniului

View, pagina Web apare aşa cum va fi în browser.Acum veţi diviza cadrul de jos în două cadre. Dacă trageţi cu mouse-ul latura din

stânga a chenarului, veţi avea în final patru cadre – două în partea de sus şi două în partea

168

Page 169: curs DPW.docx

de jos. În schimb, folosind comenzile din submeniul Frameset al meniului Modify, divizaţi cadrul de jos în două cadre.

Pentru a diviza cadrul de jos: 1. Având cursorul în cadrul de jos, selectaţi comanda Split Frame Right din submeniul

Frameset al meniului Modify. Această comandă plasează cadrul existent în partea dreaptă şi adaugă un nou cadru în partea stângă. Alternativ, puteţi trage cu mouse-ul latura din stânga a cadrului, ţinând apăsată tasta Ctrl.Puteţi selecta setul de cadre dând clic pe unul dintre chenarele de cadru. Puteţi spune că aţi selectat setul de cadre atunci când vedeţi tagul <frameset> în selectorul de taguri. Salvaţi pagina Web cu setul de cadre prin selectarea comenzii Save Frameset din meniul File. Puteţi denumi setul de cadre index.html.

În timp ce aveţi setul de cadre selectat, daţi paginii Web un titlu în bara de instrumente.

Doar titlul setului de cadre apare în bara de titluri a browserului, niciodată titlurile separate ale paginilor Web din cadre.

Dacă nu aţi salvat încă paginile Web din cadre şi pagina Web a setului de cadre, Dreamweaver vă va solicita să faceţi salvarea înainte de a le previzualiza în browser. Când salvaţi prima oară, este mai simplu să salvaţi separat fiecare pagină Web ce conţine câte un cadru şi setul de cadre cu pagini Web, decât să salvaţi toate fişierele deodată la solicitarea din Dreamweaver.

Utilizarea panoului FramesPanoul Frames vă permite să selectaţi cadre individuale şi să stabiliţi atributele

cadrului. Panoul Frames reprezintă vizual cadrele care sunt în pagina dumneavoastră Web. Selectaţi un cadru dând un clic pe reprezentarea cadrului din panoul Frames. Mai puteţi selecta un cadru dând Alt-clic în interiorul cadrului din fereastra Document.

Când daţi clic pe reprezentarea unui cadru în panoul Frames, proprietăţile cadrului sunt disponibile în fereastra de inspectare Property.

Este important ca fiecare cadru să aibă un nume. Numele cadrului este folosit pentru a stabili ţinta unui cadru, făcând o pagină Web să se încarce în cadru printr-un clic pe o legătură din alt cadru. Daţi clic pe fiecare cadru din panoul Frames şi introduceţi un nume în caseta Frame Name din fereastra de inspectare Property. Puteţi denumi cadrul de sus banner, cadrul din stânga toc (de la table of contents), iar cadrul din dreapta main.

Numele de cadre nu ar trebui să conţină semne de punctuaţie, precum punctul, cratimele sau spaţiile. În numele de cadre puteţi folosi linia de subliniere. De asemenea, nu ar trebui să folosiţi nume rezervate ca top, parent, self sau blank.

Imbricarea cadrelorDaţi clic pe unul dintre cadrele de jos ale panoului Frames şi uitaţi-vă la selectorul de

taguri. Veţi vedea un cadru în interiorul unui set de cadre în interiorul unui alt set de cadre. Daţi clic pe cadrul de sus al panoului Frames. Selectorul de taguri arată că acest cadru este într-un singur set de cadre. Cele două cadre de jos sunt într-un set de cadre imbricat.

Dreamweaver creează un set de cadre suplimentar deoarece seturile de cadre pot conţine fie rânduri, fie coloane, dar nu pe ambele. Primul set de cadre creat are două rânduri. Al doilea set de cadre creat are două coloane.

Utilizarea în cadre a paginilor Web existentePentru a încărca o pagină Web existentă într-un cadru:1. Având panoul Frames deschis, daţi clic pe un cadru.2. În fereastra de inspectare Property, selectaţi pictograma cu dosar de lângă caseta

de text Src şi navigaţi la o pagină Web existentă sau introduceţi un URL absolut în caseta Src.

3. Dacă ea este pe un disc local veţi vedea pagina Web afişată. Dacă aţi făcut trimitere la un URL absolut al unei pagini de pe Internet, Dreamweaver va afişa un mesaj ce spune că acel cadru conţine un fişier aflat la distanţă şi arată URL-ul.

Puteţi deschide o pagină Web existentă în cadrul în care se află cursorul, folosind comanda Open in Frame din meniul File.

Stabilirea atributelor pentru cadre şi a seturilor de cadreExistă atribute separate pentru fiecare cadru şi set de cadre care le înglobează.

Unele atribute se suprapun (chenare, de exemplu), aşa că trebuie să fiţi atent ce atribute stabiliţi şi unde le stabiliţi. Puteţi experimenta modelele de seturi de cadre livrate cu Dreamweaver pentru a încerca rapid mai multe atribute.

169

Page 170: curs DPW.docx

Stabilirea atributelor de derulare şi redimensionareEste important să vă gândiţi dacă doriţi ca utilizatorul să aibă posibilitatea de a

derula materialul într-un cadru. Barele de derulare pot apărea în cadru fie pe orizontală, fie pe verticală. Barele de derulare orizontale nu sunt des utilizate şi în general nu sunt de dorit. Barele de derulare verticale sunt foarte utilizate şi apar atunci când materialul din pagina Web este mai lung decât ceea ce se poate vedea în fereastra browserului.

Fiecare cadru are propriile atribute de derulare afişate în fereastra de inspectare Property când este selectat un cadru în panoul Frames. Există patru valori în meniul derulant Scroll din fereastra de inspectare Property.

• Valoarea Yes activează barele de derulare fie dacă există un conţinut care le necesită, fie dacă nu există. Ambele bare, orizontală şi verticală, pot apărea, în funcţie de browser.

• Valoarea No dezactivează barele de derulare fie dacă există un conţinut ce le necesită, fie dacă nu există. Dacă utilizatorii nu pot vedea conţinutul în cadru, nu au nici o posibilitate de a-l derula ca să-l vadă.

• Valoarea Auto activează barele de derulare când conţinutul cadrului este mai mare decât ceea ce se poate vedea în fereastra browserului. Dacă este vizibil tot conţinutul, barele de derulare sunt dezactivate. Această valoare activează doar barele de derulare necesare, orizontală sau verticală.

• Pentru cele mai multe browsere, valoarea Default este aceeaşi cu Auto. Bifaţi caseta de validare No Resize dacă nu doriţi ca utilizatorul să poată redimensiona cadrele.

Stabilirea chenarelorNavigând prin Web, uneori este dificil să identificaţi site-urile Web care folosesc

cadre, deoarece au chenarele de cadre dezactivate sau colorate astfel încât să se înglobeze în designul site-ului.

În fereastra de inspectare Property puteţi activa şi dezactiva chenarele, stabili culoarea chenarului şi modifica grosimea acestuia. Atributele de chenar sunt puţin dificile pentru că unele dintre ele se stabilesc în cadru, altele, în setul de cadre şi altele pot fi stabilite în ambele locuri. Stabilirea proprietăţilor într-un anumit cadru are întâietate asupra proprietăţii stabilite în setul de cadre. Dacă stabiliţi atributele pentru cadre, iar ele par să nu funcţioneze, verificaţi dacă aţi stabilit atributele în toate seturile de cadre; poate lucraţi cu un cadru imbricat care este afectat de două seturi de atribute de seturi de cadre.

Stabiliţi grosimea chenarului din setul de cadre. Cea mai simplă cale de a selecta setul de cadre, afişând atributele setului de cadre în fereastra de inspectare Property, este să selectaţi tagul <frameset> din selectorul de taguri.

Selectaţi un cadru din panoul Frames şi daţi clic pe tagul <frameset> din partea cea mai din stânga. Daţi chenarului o valoare pentru grosime şi selectaţi o culoare din caseta de culori.Pentru a dezactiva chenarele de cadre, având setul de cadre selectat, alegeţi No din meniul derulant Borders. Va trebui să dezactivaţi chenarele din toate seturile de cadre ale paginii. În situaţia în care chenarele din anumite cadre sunt activate, se vor suprapune peste valorile date pentru seturile de cadre şi chenarele vor fi vizibile. Pentru a dezactiva un chenar, toate cadrele adiacente trebuie să aibă şi ele chenarele dezactivate. Dacă nu doriţi să apară chenarele, ar trebui să mai verificaţi că nu au alocată o culoare de chenar.

Stabilirea dimensiunii unui cadruPuteţi trage uşor cu mouse-ul chenarele cadrului în Dreamweaver pentru a

redimensiona un cadru. Pentru un control mai fin al dimensiunii unui cadru, puteţi stabili dimensiunile de cadru în fereastra de inspectare Property, având selectat setul de cadre. Puteţi selecta rândurile sau coloanele în setul de cadre, dând clic pe mica reprezentare din fereastra de inspectare Property. Adesea, primul cadru are o valoare absolută (în pixeli sau în procente), în timp ce al doilea cadru este definit ca relativ.

Crearea de alternative la cadreSelectaţi comanda Edit NoFrames Content (editarea de conţinut fără cadre) din

submeniul Frameset al meniului Modify. Există o bară gri de-a lungul părţii de sus a ferestrei Document care spune că este vorba de conţinut fără cadre (NoFrames Content).

Stabilirea destinaţiei paginilor legate astfel încât să se deschidă întrun anumit cadru

Setul de cadre este părintele, iar cadrele sau seturile de cadre pe care le conţine sunt copii.Înţelegerea acestui concept vă ajută să înţelegeţi metoda targeting (stabilirea destinaţiei).

170

Page 171: curs DPW.docx

Există patru nume rezervate pentru destinaţii: _top, _self (valoarea prestabilită), _parent şi _blank.

Meniul derulant Target din fereastra de inspectare Property conţine lista numelor rezervate de destinaţii, plus numele tuturor cadrelor. Crearea unei hiperlegături şi selectarea unui nume de cadru din meniul derulant Target va determina ca pagina Web legată să se încarce în acea fereastră. Dacă nu este introdusă nici o destinaţie, pagina legată se va încărca în cadrul care conţine legătura.

Folosiţi grupul iniţial de cadre pe care le-aţi creat la începutul acestei lecţii pentru a da destinaţia unei hiperlegături:

1. Creaţi o hiperlegătură în cadrul numit toc.2. Selectaţi main din meniul derulant Target.3. Daţi comanda Save All.4. Previzualizaţi cadrele în browser. Daţi clic pe legătură.Utilizarea funcţiei behavior Go To URL pentru încărcarea cadrelorFuncţia behavior (numită şi comportament) Go To URL (salt la URL) are capacitatea

de a da o destinaţie cadrelor şi este o metodă bună de a obţine un conţinut de încărcat în două cadre deodată. De exemplu, puteţi modifica atât cadrul cu tabela de cuprins, cât şi conţinutul cadrului main atunci când utilizatorul dă clic pe o hiperlegătură în cadrul numit banner. Utilizatorul poate selecta o secţiune diferită a conţinutului care are alte pagini Web ca tabelă de cuprins şi conţinut în main. Deoarece o hiperlegătură poate schimba conţinutul doar într-un cadru, trebuie să folosiţi funcţia behavior Go To URL. Pentru a folosi funcţia behavior (comportamentul) Go To URL:

1. Selectaţi un obiect din cadrul numit banner pentru a deveni hiperlegătură. Adăugaţi nişte text şi creaţi o hiperlegătură dacă nu aţi adăugat încă nici un conţinut.

2. Introduceţi javascript:void(); în caseta Link din fereastra Property pentru a crea o legătură goală.

3. Deschideţi panoul Behaviors din meniul Window. Cu hiperlegătura tocmai creată selectaţi butonul + din panoul Behaviors şi selectaţi Go To URL.

4. Selectaţi cadrul numit toc. Introduceţi un URL şi apoi daţi clic pe butonul OK.5. Declanşaţi acţiunea Go To URL executând dublu-clic pe ea în panoul Behavior.6. Remarcaţi un asterisc lângă cadrul numit toc. Asta înseamnă că există un URL

introdus pentru acest cadru. Adăugaţi un alt URL unui alt cadru prin selectarea mai întâi a cadrului numit main. Introduceţi un URL în caseta de dedesubt şi daţi clic pe OK.

7. Salvaţi cadrele şi previzualizaţi pagina în browser.CSSO problemă importantă când avem un site cu multe pagini este atunci când dorim să

facem anumite schimbări în elementele paginii: fundalul, grafica sau fontul textelor din pagini.Prin utilizarea CSS (Cascading Style Sheets), "foi de stil in cascada", acest lucru nu mai este o problemă, realizându-se relativ uşor, prin schimbarea sau adăugarea unor elemente în codul CSS, nefiind nevoie să lucrăm la fiecare pagină sau la fiecare element din pagină.

CSS se ocupă în general cu aspectul şi controlul grafic al elementelor din pagină, cum ar fi: textul, imaginile, fundal, culorile şi aşezarea acestora în cadrul ferestrei paginii.CSS foloseşte stiluri, acestea înglobează, sub un anumit nume, atribute de formatare care se aplică asupra unui element individual din pagină, asupra unui grup de elemente sau la nivelul intregului document. CSS funcţionează cu HTML, însă nu este HTML. El extinde funcţionalităţile HTML, permiţând redefinirea etichetelor HTML existente. Prin utilizarea CSS aspectul documentului pe ansamblu, sau a unui element individual din interiorul său, poate fi controlat mult mai uşor. Stilurile pot fi aplicate asupra unui element, a unui document sau chiar asupra unui întreg site web. Un dezavantaj ar fi ca unele navigatoare nu sunt compatibile CSS, astfel că documentele HTML sunt afişate ca şi cum CSS n-ar exista, dar cele mai cunoscute şi utilizate browsere, cum ar fi: Mozilla Firefox, Internet Explorer, Opera, şi altele, sunt compatibile cu CSS.

Avem nevoie de un editor de texte simplu, cum ar fi Notepad, şi un navigator, de exemplu Mozilla Firefox.

Scrierea codului CSS folosind tag-uriCodurile CSS pot fi scrise în interiorul paginii sau într-un fişier extern cu

extensia".css".Codul CSS, ca formă generală, este alcatuit din: obiectul care va fi formatat, proprietăţile acestuia şi valoarea (sau atributele) fiecărei proprietăţi. Când este adăugat în documentul

171

Page 172: curs DPW.docx

HTML, trebuie scris în cadrul unui tag <style> din secţiunea HEAD a documentului HTML, după cum urmeaza: <html><head><title>Titlul</title><styletype="text/css"> obiect_css{    proprietate:valoare;    alta_proprietate:valoare;    }</style></head><body>... Continut ...</body></html>

Se poate observa sintaxa codului CSS. Perechile proprietate:valoare se scriu între acoladele obiectului CSS pe care-l definesc, între "proprietate" şi "valoare" trebuie să fie un caracterul (:) iar la sfârşitul perechii se adaugă un caracterul (;)

Cand este adăugat într-un fişier extern ".css", codul CSS se scrie la fel, dar nu se mai adaugă tag-ul <style>.

1. Obiectele (regulile) CSSExistă trei tipuri principale de obiecte CSS: selector, clasa şi identificator.

Selectorul HTMLSelectorul HTML se foloseşte pentru a redefini modul de afişare a conţinutului

etichetei HTML.Un selector HTML reprezintă partea etichetei HTML care indică browser-ului tipul de etichetă.

De exemplu: h1 { font-family:"Arial"; font-size:15px; }

Aici selectorul este "h1". Definirea unui selector HTML folosind CSS are ca rezultat redefinirea etichetei HTML. Selectorul şi eticheta deşi par identice, totuşi nu sunt.

ClasaClasa este un obiect care poate fi aplicat oricărei etichete HTML. O clasă trebuie creată în interiorul etichetei HTML înainte de a fi definită într-un cod CSS. Crearea clasei în interiorul etichetei se face simplu, prin specificarea cuvantului class şi numele clasei, ca în exemplu de mai jos:

<h1 class="nume_clasa"> Text </h1>

- "nume_clasa", poate fi orice nume dorim.Apoi în interiorul codului CSS, clasa trebuie definită prin adăugarea unui caracter (.)

înaintea numelui clasei, ca în exemplul următor: .nume_clasa { font-family:"Arial"; font-size:15px; }

Numele aceleaşi clase poate fi atribuit mai multor etichete HTML din aceeaşi pagină, şi toate vor prelua acelaşi stil css.

IdentificatorObiectele de tip identificator (ID) sunt asemănătoare cu clasele. Pot fi aplicate

oricărei etichete HTML, dar spre deosebire de clase, numele unui identificator trebuie atribuit numai unei singure etichete HTML dintr-o pagină, pentru altă etichetă se adaugă un ID cu nume diferit.

Ca şi clasa, identificatorul trebuie întâi creat în interiorul etichetei HTML. Modul de creare este simplu, prin specificarea cuvântului id şi numele clasei, ca în exemplu de mai jos:

<h1 id="nume_id"> Text </h1>- "nume_id", poate fi orice nume dorim.

In interiorul codului CSS, identificatorul este definit prin adăugarea unui caracter diez (#) înaintea numelui, ca în exemplu urmator: #nume_id { font-family:"Arial"; font-size:15px; }

172

Page 173: curs DPW.docx

2. Componentele unui obiect CSSObiectele CSS, indiferent de tipul lor, au în componenţă următoarele elemente:

Selectorii - identifică un obiect; pot fi selectori de etichete HTML, clase sau identificatori.

Proprietatile - identifică o proprietate a obiectului; se referă în special la aspect. Valorile - sunt atributele unei proprietăţi; pot fi cuvinte cheie, valori numerice sau

procentuale, tipul valorii depinzând de proprietate.Sintaxa generală a unei reguli CSS este următoarea:

selector {proprietate: valoare; }Proprietăţile şi valorile constituie definiţia regulii (obiectului) CSS. Acestea se

regăsesc sub forma de perechi,despărţite de caracterul două puncte ”:”, fiecare pereche se termină cu un caracter punct şi virgulă ";".

Etichetele HTML nu sunt sensibile la diferenţa între majuscule şi litere mici. Dar odată cu apariţia limbajului XHTML, acesta face distincţie între majuscule şi minuscule, astfel că toate etichetele şi toti selectorii trebuie scrişi cu litere mici.

Crearea Foilor de Stil1. Etichete HTML si stiluri CSSCSS oferă posibilitatea de a schimba aspectul fiecărei etichete în parte, prin stabilirea

unui anume stil în interiorul ei, cu atributul "style". Acest lucru este util mai ales pentru a anula alte stiluri ale elementului respectiv sau de a da elemente grafice de stil doar etichetei respective.Sintaxa pentru definirea stilurilor este următoarea:

<eticheta style="proprietate:valoare;"> text ... </eticheta>CSS permite şi definirea unor reguli de stil generale într-o pagina web. Acest set de reguli trebuie scris in secţiunea de antet (head) a documentului, în cadrul tag-ului <style>.Sintaxa pentru definirea CSS într-un document HTML, în interiorul etichetei <head> </head>, este următoarea:

<style type="text/css">selector_1 {proprietate1:valoare1; proprietate2:valoare2; ... }...selector_n {proprietate1:valoare1; proprietate2:valoare2; ... }</style>

- Definirea tuturor stilurilor într-o locaţie comună uşurează modificarea mai rapidă a unei pagini.

Iata un exemplu practic de cod css: <style type="text/css">h1 { font-family:’Arial’; font-size:15px; font-weight:bold; color:#1111ff; }p {font-family:’Arial’; font-size:12px; color:blue; }</style>

Foile de stil pot fi utilizate nu doar la nivel de pagină web, ci şi la nivel de întreg site. Astfel, trebuie creată o foaie de stil externă într-un fişier separat, de preferat cu extensia ".css", care poate fi inclus în pagina HTML prin două procedee: legatură sau import.

In fişierul extern creat se adaugă reguli CSS, fără însă ca aceste reguli să fie incadrate în etichete STYLE.

Dupa ce a fost creată foaia de stil externă, aceasta poate fi folosită de un document HTML utilizând următoarea sintaxă, în interiorul tag-ului <head> </head>:

<link rel="stylesheet" href="nume_fisier.css" type="text/css">- Eticheta LINK apare în antetul documentului (secţiunea head), iar atributele folosite transmit navigatorului tipul de legatură ("rel" – legatura cu o foaie de stil, "type" - tipul codului din fişier) şi locaţia înspre fişierul ce conţine codul CSS ("href" – calea şi numele complet al fişierului, inclusiv extensia).

O altă modalitate de utilizare a foilor de stil externe într-un document HTML o reprezintă importul acestora folosind comanda @import.

Sintaxa pentru importul unei foi de stil externe este următoarea: <style type="text/css">

@import url(nume_fisier.css);</style>Pentru a importa un fişier CSS extern se foloseşte în cadrul secţiunii HEAD a

documentului HTML eticheta STYLE. In cadrul acestei etichete este adăugata instrucţiunea "@import" de mai sus, unde "nume_fisier.css" reprezintă calea şi numele fişierului ce

173

Page 174: curs DPW.docx

conţine regulile CSS definite.Alături de instrucţiunea "@import", în cadrul etichetei STYLE, pot fi adăugate definiţii

şi selectori. suplimentari.Legătura la un fişier CSS extern sau importul acestuia într-un document HTML are

acelaşi efect ca şi cum stilurile incluse ar fi fost definire direct în eticheta STYLE din secţiunea HEAD a documentului HTML.

2. Definirea selectorilorSelectorii HTML pot fi definiţi prin adăugarea unui număr de definiţii compatibilie cu

eticheta HTML la care se referă, având următoarea formă generală: selector_HTML {proprietate1:valoare1; proprietate2:valoare2; ... }

După redefinirea etichetei HTML, stilurile etichetelor respective din documentul HTML vor fi modificate automat. Prin redefinirea unei etichete, proprietăţile prestabilite existente nu sunt anulate, ci se adaugă altele noi.

Utilizarea selectorilor de tip clasă oferă posibilitatea realizării unor stiluri care se pot aplica doar acelor elemente care sunt etichetate cu clasa respectivă. Sintaxa generală de definire a unei clase CSS este:

.nume_clasa { proprietate1:valoare1; proprietate2:valoare2; ... }Există cazul în care o clasă este asociată unui selector HTML, ceea ce înseamnă că

acea clasă poate fi folosită doar cu eticheta HTML respectivă. Pentru a defini o clasă care să afecteze în mod direct un anume selector HTML, se foloseşte următoarea sintaxă:

selector_HTML .nume_clasa ă{proprietate1:valoare1; proprietate2:valoare2; ... }Selectoarele de clasă sunt acceptate de toate browserele. Numele unei clase e

recomandat să fie diferit de cuvintele rezervate JavaScript.Asemănător cu selectorii de clasă se definesc şi identificatorii (id-ul). Aceştia sunt

folosiţi pentru crearea de stiluri care pot fi atribuite unei singure etichete HTML dintr-o pagină. Sintaxa generală de definire a unui identificator este:

#identificator{ proprietate1:valoare1; proprietate2:valoare2; ... }Identificatorii permit definirea unui element sub forma unui obiect, fiind folosiţi doar o

singură dată în cadrul unei pagini web pentru identificarea tag-ului respectiv, astfel poate fi manipulat şi cu ajutorul funcţiilor JavaScript.

3. Crearea etichetelor HTML personalizateMajoritatea etichetelor HTML au unele proprietăţi prestabilite. Acestea fie rămân aşa

cum sunt, fie pot fi redefinite. Există însă cazuri în care se doreste crearea unor etichete personalizate, pornind de la zero. In acest caz se folosesc etichetele <span> si <div>.

Eticheta <span> nu are proprietăţi moştenite. Ea reprezinta doar o locaţie vidă care crează o etichetă în linie.

Pentru a configura o etichetă în linie trebuie definită o clasă sau identificator care să poată fi aplicat apoi unei etichete <span>. Iată un exemplu cu, forma generală, în care selectori sunt precedaţi de eticheta <span> : <span class="nume_clasa"> ... </span>...<span id="span1"> ... </span>...<span class="clasa_span"> ... </span>...

Acum iată cum pot fi definiţi aceştia în interiorul unei foi de stil: .nume_clasa { proprietate1:valoare1; proprietate2:valoare2; ... }span1 { proprietate1:valoare1; proprietate2:valoare2; ... }span .clasa_span { proprietate1:valoare1; proprietate2:valoare2; ... }

In momentul în care se doreşte configurarea unui bloc separat de restul conţinutului unui document HTML, soluţia este eticheta <div>. Aceasta crează o zonă proprie în pagină, cu linie nouă atât deasupra sa cât şi dedesubtul său.

Pentru crearea etichetelor DIV se procedează la fel ca şi în cazul etichetelor în linie SPAN, prin definirea mai întâi a unei etichete de tip clasă sau identificator, urmată apoi de aplicarea ei asupra unei etichete <div>.

Iată forma generală de aplicare a unei etichete <div> într-o pagină HTML : ...<div class="nume_clasa"> ... </div>...<div id="div1"> ... </div>

174

Page 175: curs DPW.docx

... Definirea acestor etichete <div> într-un cod CSS se face astfel: div { proprietate1:valoare1; proprietate2:valoare2; ... }.nume_clasa { proprietate1:valoare1; proprietate2:valoare2; ... }div1 { proprietate1:valoare1; proprietate2:valoare2; ... }

Regulile CSS pentru definirea etichetelor <span> sau <div>, pot fi plasate la fel ca şi celelalte tipuri de selectoare, în secţiunea "head" a documentului în interiorul etichetei "style", sau într-un fişier extern carev ulterior este legat sau importat in documentul HTML.

4. Definirea de reguli similareDacă mai mulţi selectori folosesc aceleaşi definiţii css, aceştia pot avea aceeaşi listă

de elemente, fiind scrişi separat prin virgule. Sintaxa generală pentru definirea unei liste cu mai mulţi selectori este următoarea:

selector1, selector2, ... {proprietate1:valoare1; proprietate2:valoare2; ... }Impreună cu selectorii pot fi de asemenea definiţi identificatorii şi clasele.

Dezavantajul ar fi că în momentul în care este modificată o valoare a unei proprietăţi incluse în definiţie, valoarea respectivă se va modifica în toate etichetele reprezentate de aceşti selectori.

Formatarea paginilor Web cu HTML și cu Cascading Style SheetsDreamweaver afişează cele mai multe stiluri în fereastra Document; cele pe care nu

le poate afişa, sunt notate cu un asterisc la definirea stilului.Există trei tipuri diferite de stiluri. Crearea şi aplicarea unui stil personalPanoul CSS Styles conţine lista stilurilor personale ce au fost definite şi sunt gata să

fie aplicate obiectelor paginii dumneavoastră Web. Caseta de dialog CSS Style Definition din Dreamweaver are panouri cu liste ce conţin numeroase opţiuni de stiluri. Pentru a crea un stil personal:

1. Selectaţi butonul New CSS Style (stil CSS nou) din panoul CSS Styles. Mai puteţi selecta comanda New CSS Style în meniul options sau în submeniul CSS Styles din meniul Text din Dreamweaver.

2. Apare caseta de dialog New CSS Syle. Selectaţi butonul radio de lângă Class – creează un stil personal.

3. Introduceţi un nume de stil în caseta Name. Numele stilurilor personale încep întotdeauna cu un punct. Dreamweaver va introduce acest punct pentru dumneavoastră, dacă aţi uitat să-l introduceţi. Nu folosiţi spaţii sau semne de punctuaţie în numele stilurilor.

4. Selectaţi butonul radio de lângă This Document Only. Dacă treceţi peste acest pas, Dreamweaver vă va solicita să salvaţi stilul ca fiind o foaie de stil externă. Daţi clic pe butonul OK.

5. Apare caseta de dialog CSS Style Definition. Caseta se deschide având selectată categoria Type. În categoria Type, selectaţi un font şi o dimensiune de font. Alegeţi o culoare de font cu selectorul de culoare.

6. Selectaţi OK pentru a salva stilul. Panoul CSS Styles conţine în listă noul stil personal. Aplicaţi obiectelor stilul personal selectând mai întâi obiectul şi apoi executând clic pe stil în panoul CSS Styles.Unele atribute de stil vor funcţiona doar când sunt aplicate anumitor taguri. De exemplu, un stil numit bigcell cu valori pentru umplerea celulei, stabilite în categoria Box din caseta CSS Styles Definition, nu va avea efect asupra textului, deoarece atributul de umplere nu este un

175

Page 176: curs DPW.docx

atribut de text. În schimb, aplicarea acestui stil va avea efect asupra unui obiect corespunzător, cum ar fi o celulă de tabel.

Dacă aţi aplicat din greşeală un stil unui obiect, puteţi să-l înlăturaţi selectând opţiunea No CSS Style din panoul CSS Styles.

Opţiunile stilurilorCaseta de dialog CSS Style Definition are opt panouri cu numeroase opţiuni pe care le

puteţi folosi pentru a defini un stil.• Panoul Type defineşte atributele de scriere. Aceste opţiuni de stil pot fi aplicate

unui text sau unui obiect care conţine text.

• Panoul Background defineşte atributele de fundal, cum ar fi culoarea sau imaginea. Aceste opţiuni de stil pot fi aplicate obiectelor în care puteţi stabili un fundal, precum straturile şi tabelele.

• Panoul Block defineşte atributele de scriere pentru paragrafe.

• Panoul Box defineşte atribute aplicate unui obiect, precum dimensiunea marginii.

176

Page 177: curs DPW.docx

• Panoul Border defineşte atribute care sunt aplicate obiectelor cu chenare, cum ar fi straturile şi tabelele.

• Panoul List defineşte atribute pentru liste, cum este tipul de marcare.• Panoul Positioning defineşte atributele unui strat, cum ar fi vizibilitatea şi z-index.• Panoul Extensions defineşte diverse atribute care sunt fie dezvoltări ulterioare, fie

valabile doar pentru Internet Explorer.Opţiunile de stil din caseta de dialog Style Definition

Panoul TypeSize - Stabileşte dimensiunea fontului şi unitatea de măsură.Line Height- Stabileşte înălţimea liniei de text şi unitatea de măsură. Această

opţiune este numită în mod obişnuit leading (interliniere).Weight - Adaugă o grosime textului. Textul bold obişnuit are o grosime de 700.Variant - Stabileşte varianta cu litere mari la nivelul celor mici pentru text.

Panoul BackgroundAttachment - Stabileşte dacă imaginea de fundal se derulează o dată cu conţinutul

sau este fixată în poziţia ei iniţială.Horizontal Position - Poziţia orizontală iniţială a imaginii de fundal.Vertical Position - Poziţia verticală iniţială a imaginii de fundal.

Panoul BlockWord Spacing - Folosiţi valori negative pentru a reduce spaţiul dintre cuvinte.Letter Spacing - Utilizaţi valori negative pentru a reduce spaţiul dintre litere.Vertical Alignment - Stabileşte alinierea obiectului relativ la obiectele din jurul lui.Text Align - Aliniază textul dintr-un obiect.Text Indent - Stabileşte cu cât este indentată prima linie. Folosiţi valori negative

pentru a stabili un outdent (opusul indentării).Whitespace - Stabileşte cum va apărea spaţiul liber într-un obiect. Opţiunea Normal

elimină spaţiul liber, Pre afişează tot spaţiul liber, iar Nowrap stabileşte ca textul să se limiteze la lăţimea obiectului care îl conţine doar când se întâlneşte tagul <br>.

Panoul BoxFloat - Stabileşte pe care parte se vor aranja alte obiecte (cum ar fi textul) în jurul

unui obiect.Clear - şterge opţiunea Float pentru ca obiectele (cum ar fi textul) să nu se aranjeze

în jurul altui obiect.Padding - Stabileşte cât spaţiu să fie între obiect şi chenarul său (sau margine).Margin - Stabileşte cât spaţiu să fie între chenarul unui obiect şi alte obiecte.

Panoul BorderStyle - Stabileşte aspectul stilului chenarului. Opţiunile sunt dotted (punctat), dashed (linie întreruptă), solid (linie plină), double (linie dublă), groove (crestat), ridge (încreţit), inset şi outset.

Panoul ListType - Stabileşte aspectul marcajelor. Opţiunile sunt decimal (numerotare zecimală),

lower-roman (cifre romane mici), upper-roman (cifre romane mari), lower-alpha (caractere alfanumerice mici) şi upperalpha (caractere alfanumerice mari).

Panoul PositioningType - Stabileşte modul în care este poziţionat stratul. Opţiunile sunt relative (cu

coordonatele relative la poziţia lui), absolute (cu coordonatele exacte) şi static (la locul său în derularea documentului).

177

Page 178: curs DPW.docx

Placement - Stabileşte atributele left, top, right şi bottom ale unui strat.Clip - Stabileşte atributele de decupare pentru laturile top, right, bottom şi left şi ale

unui strat. Panoul Extensions

Page Break - Forţează o întrerupere de pagină în timpul tipăririi fie înainte, fie după un obiect. Acest stil nu este acceptat de multe browsere.

Cursor - Schimbă cursorul când este plasat peste un obiect. Acceptat doar în Internet Explorer versiunea 4.0 sau mai recent.

Filter - Aplică efecte speciale. Este acceptat doar în Internet Explorer versiunea 4.0 sau mai recent.

Poziţionarea unui strat cu un stilPentru a defini un stil de poziţionare pentru un strat:1. Creaţi şi denumiţi un stil personal.2. Selectaţi categoria Positioning.3. Selectaţi Absolute din categoria Type. Stabiliţi proprietăţile Left, Top, Width şi

Height.4. Selectaţi butonul OK.Creaţi un strat în pagina dumneavoastră Web şi poziţionaţi-l în altă zonă a ecranului

decât cea în care tocmai l-aţi definit. Ştergeţi proprietăţile de strat L (left), T (top), W (width) şi H (height) şi aplicaţi stratului stilul. Stratul ar trebui să sară în poziţia pe care aţi definit-o în stil.

Trebuie să înlăturaţi proprietăţile din tagul <div> al stratului pentru ca stratul să preia proprietăţile definite în stil. Puteţi spune că acest strat are aplicat un stil deoarece numele stilului este evidenţiat în panoul CSS Styles atunci când selectaţi stratul.

În loc de a crea mai întâi un strat, puteţi pur şi simplu să aplicaţi stilul tocmai creat unui obiect în pagina dumneavoastră Web. Stilul va crea un strat în jurul unui obiect.

Crearea unei foi de stil externeDacă aţi creat deja stiluri într-o pagină Web, înainte de a vă decide să folosiţi o foaie

de stil externă folosiţi comanda Export CSS Styles din submeniul Export al meniului File. În loc de a crea un fişier nou, legaţi-vă la acest fişier folosind butonul Attach to Style Sheet (ataşare la foaia de stil) din partea de jos a panoului CSS Styles.

Cum se poate şterge sublinierea din hiperlegăturile realizate cu stiluri CSS? Redefiniţi tagul ancoră <a> din CSS Styles. Daţi atributului Decoration valoarea „none” în categoria Type a casetei de dialog Style Definition.

Pentru a crea legătura goală introduceţi javascript:void(); în caseta Link a ferestrei Property.

Funcţia behaviorCând aplicaţi unui obiect o funcţie behavior, Dreamweaver inserează cod JavaScript

în secţiunea <head> a documentului HTML. Un element de bibliotecă nu are o secţiune <head>. Pentru a edita o funcţie behavior ataşată unui element trebuie mai întâi să detaşaţi elementul, să editaţi funcţia behavior şi apoi să recreaţi elementul.

Funcţia behavior permite vizitatorilor să interacţioneze cu site-ul, putând să-l modifice în anumite feluri. Atunci cînd ataşezi unui element comportament, browser-ul cheamă acţiunea respectivă asociată evenimentului respectiv prin codul JavaScript aferent.

Un singur eveniment poate avea mai multe acţiuni.Afişarea unui mesaj în bara de stareAcţiunea “The Set Text of Status Bar” afişează un mesaj în bara de stare, această

opţiune va deschide o fereastră în care se introduce un mesaj ce trebuie afişat.

178

Page 179: curs DPW.docx

Afișarea și ascunderea straturilorStraturile din Dreamweaver oferă o modalitate de control al amplasării obiectelor pe

pagină. Puteţi pune elementele exact acolo unde le doriţi, fără a fi nevoie să creaţi tabele complicate.

Straturile au două atribute interesante:• Visibility – Această proprietate permite să ascundeţi tot conţinutul unui strat şi

apoi să declanşaţi apariţia lui când utilizatorul execută o acţiune. De exemplu, puteţi simula un clic pe un meniu într-un program. Stratul care conţine imaginea meniului este iniţial ascuns. Utilizatorul dă clic pe titlul de meniu de pe ecran şi un script modifică atributele stratului în care se află meniul pentru ca acesta să devină vizibil.

• z-index – Această proprietate controlează ordinea de aşezare (stacking order) a straturilor de pe pagină. Puteţi suprapune straturile unul peste altul (overlapping) şi controla ordinea lor. Aceasta dă capacitatea de a crea proiecte complicate.

Deschiderea unei ferestre noiAcţiunea “Use the Open Browser Window” deschide un URL într-o fereastră nouă,

căreia i se pot specifica dimensiunile, attribute ca navigation toolbar, location toolbar, menu bar şi nume.

Schimbarea background-ului paginiiPentru a modifica culoarea sau imaginea background-ului paginii se dă click în

interiorul paginii, iar în panoul cu proprietăţi se caută butonul "Page Properties", astfel se va deschide o nouă ferestră. Dacă se doreşte schimbarea culorii se foloseşte butonul "Background color", iar o unealtă de colorare va apărea şi vă va permite să schimbaţi culoarea.

Dacă se doreşte să se introducă ca şi background o imagine, se salvează aceasta în folderol cu imagini ale paginilor create pentru site, iar în fereastra de proprietăţi se selectează butonul “Browse” apărând o fereastră cu "Select Image Source" , unde se va selecta imaginea. Dacă imaginea este mică se poate apăsa butonul "Repeat" pentru a se realize copii ale imaginii pe întreaga suprafaţă a paginii.

Bara de stare a aplicaţiei Dreamweaver

Bara de stare apare asemănător ca în figura de mai jos:

Aceasta este foarte important dacă se doreşte personalizarea site-ului web(adică schimbarea culorii, fontului a întregii pagini, printr-o singură operaţie). Partea stângă a bării de stare conţine un text de neînţeles, conţinut între paranteze, ca de exemplu "<div#container> <div#sidebar1> <p>". Acestea sunt tag-uri utilizate în limbajul HTML. Pe fiecare din aceste tag-uri se poate face click, de exemplu dacă se face click pe tag-ul <div#sidebar1> toată coloana stângă va fi selectată. Fiecare dintre aceste etichete indică un bloc de elemente de pe ecran.

Schimbarea background-ului antetului, subsolului, barei laterale, conţinutului principal

Pentru a modifica partea care se vrea se pune cursorul în secţiunea respectivă. Se dă click în bara de stare pe tag-ul <divţheader> pentru antet, <div#sidebar1> pentru coloana din stânga, <divţmainContent> pentru coloana din dreapta.

Schimbarea background-ului pentru antet, subsol, bara laterală se face la fel, adică prin panoul de CSS Styles, unde se modifică background-ul aşa cum se doreşte.

Trebuie vizualizată linia cu Properties pentru ".twoColLiqLtHdr ţmainContent", mutaţi mouse-ul pe linia care separă aceste cuvinte glisaţi-l în sus până când puteţi vedea link-ul "Add property", daţi click pe acesta şi va apărea o casetă derulantă, dacă se vrea schimbarea culorii background-ului se alege "background-color", altfel "background-image", urmând alegerea culorii sau sursa imaginii alese.

Crearea unei animaţiiRedimensionarea controluluiDimensiunea implicită a obiectelor plug-in este de 32 x 32 pixeli. Este destul de mică,

dar puteţi redimensiona un obiect plug-in.Dimensionarea corespunzătoare a unui plug-in poate fi destul de dificil de prevăzut.

Dacă aţi inclus un fişier de sunet în pagina dumneavoastră Web, unii vizitatori pot folosi un applet Java implicit, LiveAudio, din Netscape pentru a reda sunetul. Alţii pot avea modulul înregistrat de QuickTime pentru a reda fişiere WAV într-o pagină Web. Alţii pot folosi Windows Media Player.

179

Page 180: curs DPW.docx

Înălţimea de 25 de pixeli era necesară pentru a afişa butoanele din Windows Media Player în Internet Explorer. In funcţie de modulul plug-in sau controlul ActiveX înregistrat în browser pentru a reda fişiere MP3, ecranul dumneavoastră s-ar putea să nu arate la fel. Până acum aţi utilizat un program de redare în linie (inline) sau înglobat (embedded), adică modulul plug-in apare în cadrul paginii dumneavoastră Web. Când creaţi o hiperlegătură la un fişier de sunet, utilizatorul va lansa controlerul într-o fereastră separată când selectează legătura.

Adăugarea capacităţii de ciclare a sunetuluiPrin caseta de dialog Parameters, Dreamweaver oferă flexibilitatea de a lucra cu

atribute avansate ale obiectelor şi chiar cu atribute care nu au fost create încă. Selectarea butonului Parameters deschide caseta de dialog Parameters. Parameters constă din două părţi: un nume de parametru şi o valoare.

Multe module plug-in au parametric opţionali sau impuşi pe care îi puteţi stabili în caseta de dialog Parameters. Parametrii disponibili pentru sunete, cum sunt loop (ciclare) şi autostart, pot fi sau nu disponibili pentru alte formate. Module plug-in diferite au parametri disponibili diferiţi.

După selectarea butonului Parameters, daţi clic pe butonul + pentru a adăuga un parametru.

• Pentru a cicla un sunet, introduceţi loop ca nume al parametrului. Apăsaţi tasta Tab sau daţi clic în coloana pentru valoare şi introduceţi TRUE. Valoarea implicită este false, deci dacă doriţi ca sunetul să fie redat doar o dată, nu trebuie să introduceţi parametrul loop. Netscape va recunoaşte un număr ca fiind valoarea pentru parametrul loop şi va reda sunetul de acel număr de ori.

• Pentru a crea acelaşi efect cu Internet Explorer, adăugaţi parametrul playcount în plus faţă de loop. Valoarea implicită pentru contorul redării sunetului este unu. Daţi clic pe butonul OK. Pentru a edita un parametru, selectaţi din nou butonul Parameter şi daţi clic pe parametrul pe care doriţi să-l modificaţi. Ignoraţi pictogramele cu săgeţile fulger; ele sunt implicate în încărcarea dinamică a datelor în câmpurile parametrilor atunci când folosiţi scripturi de tip server-side (aflate pe partea de server).

Adăugarea unei legături la un fişier PDFPână acum, aţi inclus conţinut multimedia într-o pagină Web. Mai puteţi să faceţi o

legătură la un conţinut care apare singur. Legaţi fişiere multimedia tot aşa cum aţi face legătura la o altă pagină Web.

Adobe Acrobat Reader este un program de redare distribuit gratuit şi care a devenit un standard Web de vizualizare a fişierelor de text formatate. Fişierele PDF (portable digital format) permit unui vizitator să vadă un fişier exact aşa cum s-a dorit, fonturile, macheta paginii şi grafica apar după cum s-a prevăzut. Creaţi fişiere PDF şi le vizualizaţi cu Acrobat Reader. Când este instalată aplicaţia Reader este de obicei instalat şi un modul plug-in Acrobat Reader. Pentru a afişa un fişier PDF creaţi o hiperlegătură la URL-ul fişierului PDF. Fişierul se va deschide în cadrul browserului dacă există modulul plug-in Acrobat. Dacă nu există instalat modulul plug-in, dar există Acrobat Reader, fişierul PDF se va deschide în Acrobat Reader în afara browserului.

Adăugarea unui fişier de sunetFolosiţi obiectul Plugin din secţiunea Media a barei Insert (sau comanda Plugin din

submeniul Media al meniului Insert) pentru a insera un sunet într-o pagină Web.Pentru a insera un obiect Plugin:1. Poziţionaţi punctul de inserare în fereastra Document în Dreamweaver acolo unde

aţi vrea să apară controlul de sunet la vizualizarea paginii în browser.2. Selectaţi obiectul Plugin din secţiunea Media a barei Insert. Apare caseta de dialog

Select File. Navigaţi la un director care conţine un fişier de sunet şi selectaţi un fişier. Daţi clic pe butonul Select după ce aţi selectat fişierul.

3. Salvaţi modificările şi apoi previzualizaţi pagina dumneavoastră Web într-un browser, pentru a vedea cum arată şi cum sună.

Remarcaţi că fereastra de inspectare Property pentru obiectul Plugin are unele proprietăţi care sunt similare cu unele pe care le-aţi văzut în timp ce lucraţi cu imagini. Selectarea unui fişier completează caseta Src. Există un meniu derulant Align, similar cu cel pentru imagini, care afectează modul în care alte obiecte se aliniază la obiectul Plugin. Alte proprietăţi familiar sunt W, H, V Space, H Space. Mai puteţi adăuga un chenar la obiectul Plugin. Plg URL şi butonul Parameters sunt două proprietăţi suplimentare pe care le vom comenta mai târziu în această lecţie.

180

Page 181: curs DPW.docx

Includerea elementelor multimedia depinde foarte mult de tipul de browser şi de module plug-in pe care le are utilizatorul. Unele module plug-in şi unele formate de fişiere de sunet sunt mai cunoscute decât altele. Formatele de sunet RealMedia şi MP3 sunt cunoscute şi foarte des întâlnite pe Web.

Adăugarea funcţiilor behavior avansate Drag LayerFereastra Dreamweaver Document are o bară de stare de-a lungul părţii de jos a

paginii.Ea conţine selectorul de taguri, meniul derulant Windows Size şi statisticile de

descărcare.Selectorul de taguri din colţul din stânga jos al ferestrei Document oferă un acces

uşor la tagurile HTML care sunt implicate în orice obiect de pe ecran.Selectorul de taguri arată toate tagurile HTML care influenţează un obiect.Selectorul de taguri facilitează mult selectarea întregului conţinut al paginii Web,

printrun simplu clic pe tagul <body>.Meniul derulant Window Size funcţionează doar atunci când nu aveţi fereastra

Document maximizată.Dimensiunile ferestrei de browser sunt mai mici decât rezoluţia ecranului, deoarece

interfaţa de browser (butoane şi meniuri, de exemplu) ocupă din spaţiu.Comanda Edit Sizes vă duce în categoria Status Bar din Dreamweaver Preferences,

unde puteţi adăuga dimensiunea proprie de fereastră.Deoarece lăţimea de bandă este adesea o problemă în dezvoltarea pentru Web, este

bine de ştiut dimensiunea estimată a unui fişier şi durata de descărcare a paginii dumneavoastră Web.

Durata estimată de descărcare arătată în bara de stare se bazează pe configurarea modemului din categoria Status Bar din Dreamweaver Preferences.

Crearea unui formular şi utilizarea acestuia pentru a prelua dateCrearea unui formularUn obiect formular este un container pentru alte obiecte şi, în acelaşi timp, un

element invizibil. Când adăugaţi un formular unei pagini Web, dacă aveţi bifată opţiunea Form Delimiter (delimitator de formular) în categoria Invisible Elements din caseta de dialog Preferences, Dreamweaver îl reprezintă ca o casetă conturată cu linie întreruptă roşie. Pentru a putea vedea conturul formularului, verificaţi că aveţi această opţiune selectată.

Primul pas în crearea unui formular este să inseraţi în pagina dumneavoastră Web un obiect formular pentru a păstra toate obiectele formularului.

Pentru a adăuga un formular:1. Plasaţi punctul de inserţie acolo unde doriţi să inseraţi formularul.2. Selectaţi comanda Form din meniul Insert sau selectaţi obiectul formular din

panoul Forms al barei Insert.3. Poate apărea o casetă cu un mesaj care vă spune că nu veţi putea vedea

formularul decât dacă vizualizaţi elementele invizibile. Dacă este necesar, selectaţi comanda Invisible Elements din submeniul Visual Aids al meniului View.

4. Veţi vedea o casetă conturată cu linie întreruptă roşie, care reprezintă formularul.Puteţi formata suprafaţa unui formular cu tabele, linii despărţitoare, text şi alte

elemente pe care le aveţi de obicei într-o pagină Web. Singurele elemente care vor fi preluate sunt însă numele elementelor de formular şi datele introduse de utilizator în formular.

Pentru a selecta un formular, daţi clic pe marginea conturului formularului. Fereastra de inspectare Property afişează cele trei proprietăţi pe care le puteţi introduce pentru un formular:

• Form Name (numele formularului) este necesar dacă intenţionaţi să aplicaţi vreun script unui formular. Este bine să daţi întotdeauna nume formularelor.

• Action (acţiune) este un URL care trimite la o aplicaţie, de obicei un script, de pe server, care va prelucra datele formularului.

• Method (metoda) spune aplicaţiei de pe server cum ar trebui prelucrate datele.Daţi un nume formularului dumneavoastră. Pentru a formata un formular, daţi clic pe

conturul formularului; în selectorul de taguri apare tagul <form>. Pentru a insera obiecte plasaţi cursorul în interiorul formularului.

Adăugarea câmpurilor de textCâmpurile de text de o linie vă permit să introduceţi un nume, o adresă, un număr de

telefon sau alte mici informaţii. Câmpurile de text pot avea şi mai multe linii, adecvate

181

Page 182: curs DPW.docx

pentru comentarii sau informaţii mai lungi. Puteţi folosi unul dintre modelele disponibile prin selectarea categoriei Page Designs la crearea unei pagini noi .

Creaţi un grup de câmpuri de text proiectate pentru a prelua numele şi prenumele utilizatorului, adresa de e-mail şi comentariile. Începeţi prin a insera în pagina dumneavoastră Web un câmp de text de o linie pentru a prelua prenumele utilizatorului, după cum urmează:

1. Verificaţi dacă punctul de inserare se află în interiorul formularului.2. Selectaţi obiectul Text Field din secţiunea Forms a barei Insert sau selectaţi

comanda Text Field din submeniul Form al meniului Insert.3. În formular apare un câmp de text.Pentru a adăuga un câmp de text exact la dreapta primului, poziţionaţi punctul de

inserare după câmpul de text şi inseraţi un alt câmp de text pentru numele utilizatorului. Înainte de a insera câmpul de text, apăsaţi tasta Enter pentru a adăuga un nou paragraf în cadrul formularului. Adăugaţi un alt câmp de text de o singură linie pentru adresa de e-mail a utilizatorului.

Aplicarea atributelor pentru câmpul de textCând aveţi selectat un câmp de text, fereastra de inspectare Property prezintă

atributele câmpului de text. Dreamweaver completează un nume implicit unic. Redenumiţi toate câmpurile de text din formularul dumneavoastră dând nume intuitive şi unice; nume posibile ar putea fi prenume, nume, email.

Puteţi stabili atât dimensiunea câmpului de text cât şi numărul de caractere pe care le poate introduce un utilizator. Există două atribute diferite pentru lăţimea unui câmp de text:

• Char Width stabileşte dimensiunea câmpului de text şi numărul de caractere vizibile în câmp. Dacă există mai multe caractere în câmpul de text decât valoarea lăţimii, acestea vor fi transmise, dar nu vor fi vizibile.

• Max Chars limitează numărul de caractere introduse de un utilizator în câmpul de text.

Un câmp de text poate conţine până la 32700 de caractere!Există trei tipuri diferite de câmpuri de text:• Câmpurile de text Single line (cu o singură linie).• Câmpurile de text textarea (zonă de text) prezintă o zonă cu mai multe linii.• Câmpurile de text Password (parolă) sunt câmpuri speciale de o linie prin care se

maschează ceea ce introduce utilizatorul în câmp, folosind asteriscuri sau alte simboluri. Acest lucru nu criptează totuşi datele care sunt expediate la server.

Un obiect textarea are atributele Num Lines şi Wrap.Obiectul textarea nu are un atribut Max Characters; se poate controla doar numărul de linii vizibile pe ecran.

Valoarea implicită a proprietăţii Wrap (înfăşurare) face ca textul dintr-o zonă de text să treacă la o nouă linie atunci când utilizatorul ajunge la sfârşitul unei linii. Puteţi dezactiva înfăşurarea textului selectând comanda Off din meniul derulant Wrap. Există două attribute suplimentare pentru înfăşurarea textului: Physical şi Virtual. Physical (fizic) permite liniilor de text să se înfăşoare la capătul casetei punând un caracter de rând nou (CRLF) acolo. Virtual (virtual) permite liniilor de text să se înfăşoare la sfârşitul casetei, dar nu este inserat nici un caracter.

Puteţi adăuga un text care să apară în câmpul de text. Acesta poate consta în instrucţiuni asupra a ceea ce se introduce în câmp sau poate fi valoarea implicită.

Dreamweaver include unele elemente de formular împreună cu alte elemente în panoul Snippets (fragmente de cod). Un fragment util pentru formular ar putea fi Text Field, Autoclear; acesta plasează în formular un câmp de text ce conţine un text implicit. Când utilizatorul dă clic pe câmpul de text, textul implicit dispare automat.

Adăugarea etichetelorAţi creat câmpuri de text, dar pentru a face utilizabil formularul trebuie să îi adăugaţi

instrucţiuni, etichete şi alte elemente. Adăugaţi o etichetă în faţa fiecărui câmp de text care să descrie ce text ar trebui să introducă utilizatorul în câmp. Pentru a avea un control mai bun asupra alinierii obiectelor puteţi plasa etichetele şi câmpurile de text într-un tabel.

Adăugarea butoanelor radio şi a casetelor de validareButoanele radio sunt grupate astfel încât, la un moment dat, utilizatorul să poată

selecta doar un buton dintr-un grup. Pentru a grupa butoanele radio, ele trebuie să aibă acelaşi nume.

Pentru a crea un grup de butoane radio:

182

Page 183: curs DPW.docx

1. Plasaţi punctul de inserare în cadrul unui formular unde vor fi amplasate butoanele radio.

2. Selectaţi obiectul Radio Group din secţiunea Forms a barei Insert sau selectaţi comanda Radio Group din submeniul Form al meniului Insert.

3. Introduceţi numele grupului de butoane radio în caseta Name a casetei Radio Group.

4. Introduceţi un nume de etichetă în coloana Label şi valoarea butonului radio Checked Value (valoarea de validare) în coloana Value. Eticheta este un text simplu care apare lângă buton şi nu face parte din formular. Folosiţi butoanele + şi – pentru a adăuga sau şterge butoane radio. Daţi clic pe butonul OK pentru a salva configurările.

5. Selectarea unui buton radio afişează proprietăţile lui în fereastra Property. Alegeţi dacă butonul să fie bifat sau nu la prima încărcare a formularului, selectând fie opţiunea Checked (bifat), fie opţiunea Unchecked (debifat), care se află lângă atributul Initial State (starea iniţială).

Casetele de validare preiau intrarea de la utilizator când acesta fie bifează, fie debifează o casetă. Ele diferă de butoanele radio deoarece nu sunt grupate, ci se comportă independent. Butoanele radio îi permit utilizatorului să selecteze o singură opţiune, pe când casetele de validare îi permit să selecteze oricâte opţiuni doreşte. Pentru a adăuga o casetă de validare:

1. Plasaţi punctul de inserare în cadrul formularului în care se va afla caseta de validare.

2. Selectaţi obiectul Checkbox (casetă de validare) din bara Insert sau selectaţi comanda Checkbox din submeniul Form al meniului Insert.

3. Introduceţi un nume pentru caseta de validare în caseta CheckBox.4. Introduceţi o valoare de validare în caseta Checked Value.5. Alegeţi starea iniţială a casetei de validare Initial State dacă să fie cea bifată sau

nu.6. Introduceţi un text pentru eticheta de lângă caseta de validare.Adăugarea unei liste sau a unui meniuButoanele radio sunt o modalitate excelentă de a da utilizatorului nişte opţiuni

stabilite. Totuşi, uneori ele nu sunt adecvate. Obiectul List/Menu inserează liste de valori. Creaţi un obiect List/Menu fie ca o listă, care afişează un număr stabilit de linii, fie ca un meniu, un meniu derulant care afişează toate valorile din listă. Listele afişează un anumit număr de valori. Un meniu se derulează când utilizatorul dă clic pe el, permiţându-i acestuia să selecteze o valoare. Pentru a crea o listă:

1. Plasaţi punctul de inserare în cadrul formularului, acolo unde se va afla lista.2. Selectaţi obiectul List/Menu din bara Insert sau selectaţi comanda List/Menu din

submeniul Form al meniului Insert.3. Introduceţi numele listei în caseta Name.4. După ce aţi selectat List pentru atributul Type, devin active atributele Height

(înălţime) şi Allow Multiple (permite mai multe selecţii).5. Stabiliţi înălţimea în funcţie de numărul de elemente din listă pe care le doriţi

vizibile la un moment dat. Dacă sunt mai multe elemente de listă decât pot fi afişate, vor apărea automat bare de derulare.

6. Dacă doriţi să-i permiteţi utilizatorului să selecteze mai multe valori din listă, marcaţi caseta de validare Allow Multiple de lângă atributul Selections. Puteţi adăuga instrucţiuni care să spună utilizatorului că poate selecta mai multe elemente folosind tasta Ctrl şi dând clic pe mai multe selecţii.

7. Configuraţi valorile listei selectând butonul List Values. Apare caseta de dialog List Values.

8. Pentru fiecare element din listă introduceţi o etichetă şi o valoare. Eticheta de element este textul văzut şi selectat de utilizator. Valoarea este cea transmisă spre prelucrare.

9. Daţi clic pe butonul OK al casetei de dialog List Values.10.Selectaţi un element din caseta Initially Selected (selectat iniţial) dacă ar trebui

selectat implicit unul dintre elementele listei. Altfel, el va apărea ca prim element.11.Adăugaţi o etichetă alături de listă. În timp ce o listă poate afişa un număr de linii,

un meniu afişează numai una până când utilizatorul derulează meniul printr-un clic. Meniul foloseşte mai puţin spaţiu decât listele, pentru că meniul se poate derula peste alte obiecte ale paginii atunci când se dă clic pe el, dar se restrânge la numai o linie când nu este activ.

183

Page 184: curs DPW.docx

O metodă mai rapidă şi mai uşoară de a adăuga meniuri standard este prin intermediul panoului Snippets (fragmente de cod).

Adăugarea butoanelor şi a butoanelor cu imaginiExistă patru tipuri diferite de butoane pe care le puteţi adăuga formularelor:• Butonul Submit (expediere) trimite datele introduse de utilizator într-un formular

către script sau o aplicaţie server. Butonul Submit declanşează acţiunea pe care aţi stabilit-o în caseta Action a ferestrei de inspectare Property.

• Butonul Reset (repornire) şterge toate datele introduse de utilizator în formular şi reîncarcă valorile iniţiale.

• Un buton generic nu are o funcţie automată. Puteţi adăuga o funcţionalitate unui buton generic aplicându-i o funcţie behavior (un comportament).

• Un buton Image (cu imagine) se comportă ca un buton Submit. Toate datele din formular sunt transmise o dată cu coordonatele punctului în care s-a dat clic. Primele trei butoane sunt butoane de apăsare, create prin inserarea obiectului Dreamweaver Button. Ele diferă prin modul în care sunt configurate în fereastra de inspectare Property. Al patrulea buton, butonul cu imagine, este inserat folosind obiectul Image Field (câmp de imagine).

Adăugarea butoanelor Submit şi ResetMai întâi, adăugaţi formularului butoanele Submit şi Reset. Adăugaţi formularului un

buton poziţionând punctul de inserare şi apoi selectând obiectul Button din bara Insert (sau comanda Button din submeniul Form al meniului Insert). Selectaţi Submit Form (expedierea formularului) ca acţiune pentru butonul din stânga şi Reset Form (repornirea formularului) ca acţiune pentru butonul din dreapta. Fiecare formular trebuie să aibă un buton Submit pentru a trimite datele formularului. Butonul Reset este opţional. Ar trebui să aveţi un singur buton de tip Submit pe un formular.

Adăugarea unui câmp de imagine unui formular SubmitPuteţi înlocui un buton Submit cu un câmp de imagine. Când un utilizator dă clic pe

imagine este transmis conţinutul formularului, împreună cu coordonatele poziţiei în care utilizatorul a dat clic pe imagine. Dacă doriţi puteţi prelua şi prelucra informaţia despre coordonate. Mai întâi, verificaţi că punctul de inserare se află în interiorul formularului. Adăugaţi un câmp de imagine selectând fie obiectul Image Field din bara Insert, fie comanda Image Field din submeniul Form al meniului Insert. Caseta de dialog Select Image Source vă permite să navigaţi şi să selectaţi un fişier de imagine standard Web. Fereastra de inspectare Property afişează atributele de nume, lăţime, înălţime, sursă, text alternativ şi aliniere.

Adăugarea unui buton genericPuteţi adăuga un buton generic oriunde pe paginaă Web. Nu trebuie să fie în cadrul

formularului, deoarece el nu poate transmite conţinutul formularului. Adăugaţi un buton generic selectând obiectul Button din bara Insert sau comanda Button din meniul Insert. Daţi butonului un nume, daţi-i o etichetă şi selectaţi None (nici una) ca acţiune. Acum puteţi aplica butonului un comportament ce poate fi declanşat de un clic pe buton.

Cea mai simplă cale de a şterge un formular este să daţi clic-dreapta pe formular pentru a vizualiza meniul contextual. Alegeţi comanda Remove Tag <form>.

Puteţi transmite prin e-mail conţinutul unui formular prin amplasarea adresei de e-mail ca acţiune. Adresa de e-mail trebuie să fie prefaţată de „mailto” astfel încât să arate aşa mailto:[email protected]. În plus, s-ar putea să fie nevoie să adăugaţi atributul ENCTYPE=”text/plain” la tagul <form>. Un program de e-mail trebuie configurat corespunzător cu browserul pentru ca această metodă să funcţioneze. În plus, unele browsere afişează un mesaj de avertizare la transmiterea formularelor în acest fel.

Adăugarea unui meniu de navigareNu există reguli fixe pentru crearea unui site, dar majoritatea au o anumită structură:

harta site-ului (Site Map), Contact (o pagină care permite vizitatorilor să transmit un mesaj, această pagină conţine un formular), Despre noi sau About Us (conţine informaţii despre persoanele aflate în spatele site-ului), Link-uri.

Trimiterea şi primirea răspunsului la datele unui formularVa trebui să trimiteţi datele unui script de pe server pentru a prelucra datele

formularului.Scriptul de pe server poate stoca datele într-o bază de date, le poate trimite la o

adresă de email, poate trimite rezultatele înapoi la browser sau le poate prelucra aşa cum doriţi.

Mai puteţi avea scripturi de tip client-side (aflate pe partea de client) create în JavaScript pentru a prelucra datele formularului, dar acele scripturi nu vor avea acces la

184

Page 185: curs DPW.docx

resursele serverului şi nu vor putea să transmită datele prin e-mail sau să le insereze într-o bază de date.

Primirea informaţiei dintr-un formularMetoda standard de a prelucra un formular este prin intermediul unei aplicaţii server

care analizează datele şi efectuează o acţiune asupra lor. Analizarea (parsing) datelor este acţiuneade împărţire şi interpretare a perechilor de nume şi valori trimise la server.

Fiecare pereche de nume şi valoare conţine numele elementului de formular introdus în Dreamweaver şi valoarea pe care a introdus-o utilizatorul pentru acel câmp.

Un mod cunoscut de prelucrare a formularelor pe un server este script CGI. Aceste scripturi sunt scrise de obicei în Perl sau în alte limbaje de programare. Mai târziu în această lecţie veţi afla despre alt mod de prelucrare a formularelor, cu Hypertext Preprocessor (PHP).

Există mai multe locuri pe Web de unde se descarcă scripturi CGI deja scrise. Deoarece programarea scripturilor CGI nu este scopul acestei cărţi, exemplele vor utiliza un script existent care prelucrează datele de formular şi le trimite la o anumită adresă de e-mail.

CGI este acronimul pentru Common Gateway Interface, care este definiţia metodei standard de comunicare dintre un script şi serverul Web. Scriptul CGI se află într-un anumit director pe serverul Web. De obicei, accesul la acest director este limitat la administratorii de Web, din motive de siguranţă. Puteţi avea un director în propriul dumneavoastră director de Web care poate păstra scripturi CGI. Adesea, acest director este numit cgi-bin sau are cgi în componenţa numelui.

Va trebui să verificaţi dacă gazda serviciilor dumneavoastră Web, în caz că folosiţi una, acceptă scripturi CGI. Uneori puteţi folosi doar scripturile disponibile ale gazdei; verificaţi dacă este disponibil un script pentru formular de mail.

Introduceţi calea către scriptul CGI ca valoare pentru Action într-un formular. URL-ul trebuie să fie un URL absolut şi nu relativ, chiar dacă scriptul se află într-un director relativ la site-ul Web.

• Metoda GET adaugă un număr limitat de perechi de nume şi valori la sfârşitul unui URL de script CGI. Probabil aţi văzut URL-uri care au caractere suplimentare ataşate la ele. Aceste caractere sunt transmise serverului pentru prelucrare.

• Metoda POST trimite oricâte perechi de nume şi valori codificate, împreună cu alte informaţii, către script.

Adăugarea unui câmp ascunsCâmpurile ascunse sunt trimise împreună cu toate celelalte câmpuri ale formularului.Utilizatorul nu poate schimba conţinutul acestor câmpuri, nici nu poate vedea

câmpurile decât dacă vizualizează sursa dumneavoastră HTML. Creaţi câmpuri ascunse pentru destinatarul mesajului e-mail ce conţine datele de formular, pentru subiectul care apare în câmpul Subject al mesajului şi pentru URL-ul la care este redirecţionat utilizatorul după ce a completat formularul. Puteţi examina singur multe alte configuraţii.

Verificaţi ca formularul dumneavoastră să aibă ca acţiune URL-ul scriptului FormMail de pe server. Pentru transmiterea datelor, scriptul FormMail poate accepta metoda GET sau metoda POST. Eu vă sugerez metoda POST pentru că este mai cunoscută şi nu riscaţi să depăşiţi cantitatea de date cu care poate lucra metoda GET. Pentru a adăuga câmpuri ascunse în formularul dumneavoastră:

1. Plasaţi punctul de inserare oriunde în interiorul formularului dumneavoastră. Nu contează unde sunt amplasate câmpurile ascunse.

2. Selectaţi obiectul Hidden Field (câmp ascuns) din bara Insert sau comanda Hidden Field din submeniul Form al meniului Insert.

3. Dreamweaver afişează simbolul Hidden Form Field în pagina dumneavoastră Web. Trebuie să aveţi bifată opţiunea Invisible Elements din submeniul Visual Aids al meniului View; de asemenea, categoria Invisible Elements din preferinţele Dreamweaver trebuie să aibă bifată opţiunea Hidden Form Fields.

4. Introduceţi numele câmpului ascuns şi valoarea câmpului. Creaţi trei câmpuri ascunse folosind paşii de mai sus. Introduceţi următoarele perechi de nume şi valoare în câmpurile ascunse:

• Numiţi un câmp ascuns „recipient” (destinatar) şi daţi-i ca valoare adresa dumneavoastră de e-mail.

• Numiţi un câmp ascuns „subject” (subiect) şi introduceţi un text pe care îl veţi vedea în câmpul Subject al mesajului de e-mail pe care îl veţi primi o dată cu datele.

185

Page 186: curs DPW.docx

• Numiţi un câmp ascuns „redirect” (redirecţionare) şi introduceţi un URL al unei pagini Web preconstruite pe care o va vedea utilizatorul după ce a expediat formularul. Când utilizatorul expediază formularul, perechile de nume şi valoare sunt trimise la adresa de e-mail specificată în câmpul ascuns „recipient”, având subiectul specificat în câmpul ascuns „subject”. Browserul va încărca automat URL-ul specificat în câmpul ascuns „redirect”.

Aceasta este cea mai simplă prelucrare posibilă a unui formular. Alte scripturi pot salva datele într-o bază de date, pot valida şi prelucra informaţii de pe carduri de credit şi pot executa tot felul de acţiuni complexe.

Despre securitatea expedierii datelorCând utilizatorii dumneavoastră expediază informaţiile formularului prin butonul

Submit, informaţia călătoreşte în pachete prin Internet, împreună cu milioane de alte pachete. Pachetele sunt mănunchiuri electronice de informaţie care poartă datele dumneavoastră către server.

Aceste pachete de informaţie pot fi interceptate şi citite de persoane care înţeleg cum să intercepteze şi să reasambleze datele luate de pe Web. Chiar dacă acest lucru nu este uzual, tot ar trebui să faceţi ceva pentru a-i asigura pe utilizatorii dumneavoastră că datele sensibile sunt în siguranţă.

Din nou, este o problemă ce ţine de serverul Web. Serverul Web pe care este localizat site-ul dumneavoastră trebuie să aibă activate soclurile securizate (secure sockets). Mulţi furnizori de servicii Internet oferă acest serviciu. Întrebaţi administratorul dumneavoastră Web dacă aveţi acces la protejarea paginilor Web.

Un utilizator are acces la un URL protejat exact aşa cum ar avea la un URL obişnuit.Singura diferenţă este protocolul, care se schimbă din http în https. Când este în

modul protejat,browserul afişează în bara de stare un desen cu un lacăt.

Nu trebuie să vă faceţi griji în privinţa expedierii protejate a datelor, cu excepţia cazurilor în care utilizatorul introduce informaţii confidenţiale, cum ar fi numerele cardurilor de credit şi alte date financiare. Pentru sondaje sau formulare de răspuns, nu trebuie să protejaţi informaţia de eventuale furturi. Clienţii vor aştepta de la dumneavoastră să protejaţi datele lor sensibile. Aveţi nevoie de un certificat pentru a adăuga protecţie transmiterii de date din formulare. Uneori puteţi folosi certificatul gazdei paginii Web sau puteţi procura unul propriu. Unul dintre cei mai mari furnizori de certificate este Verisign şi puteţi afla mai multe despre certificate şi site-ul lor Web de la adresa www.verisign.com/.

Certificatul este un document electronic care verifică identitatea dumneavoastră electronică.

Încărcarea unui fişier dintr-un formularAţi putea să adăugaţi un câmp de fişier formularului dumneavoastră, care să permit

utilizatorilor să încarce fişiere pe Internet. Printr-un obiect câmp de fişier puteţi prelua imagini, teme de şcoală sau orice tip de fişiere de care aveţi nevoie să vă fie trimis. Utilizatorul selectează butonul Browse, pentru a selecta un fişier de pe discul local. Când apasă butonul Submit, fişierul este trimis către server.

Puteţi stabili dimensiunea câmpului de fişier prin introducerea unei valori în caseta Char Width din fereastra de inspectare Property. Mai puteţi stabili atributele Max Chars şi Init Val. Va trebui să daţi câmpului de fişier un nume unic.

Selectaţi multipart/form-data ca valoare pentru atributul EncType al tagului <form>, pentru ca fişierul să fie codificat corect. Trebuie să folosiţi metoda POST pentru transmiterea formularului; metoda GET nu funcţionează cu câmpuri de fişier.

Pregătiţi pagina dumneavoastră pentru a interacţiona cu cod PHPPe lângă scripturile CGI există alte metode de a prelucra formularele şi a crea

aplicaţii Web dinamice. Ca şi scriptarea CGI, aceste tehnologii interacţionează cu serverul Web pentru a prelucra informaţia de pe pagina Web. Dreamweaver vă permite să creaţi pagini Web dinamice care să încorporeze scripturi de tip server-side (aflate pe partea de server). Când creaţi o pagină Web nouă, creaţi o pagină dinamică selectând categoria Dynamic Page.

PHP (Hypertext Preprocessor) este un limbaj de scriptare server-side (aflat pe partea de server) care trimite pagini Web dinamice utilizatorului după interpretarea codului PHP. Puteţi include cod PHP în paginile dumneavoastră Web, iar Dreamweaver va reprezenta codul cu pictograme speciale. Când definiţi site-ul dumneavoastră pentru a conţine pagini dinamice, pagina dumneavoastră va arăta puţin altfel. Într-un site dinamic, Dreamweaver

186

Page 187: curs DPW.docx

afişează o reprezentare a codului; puteţi afişa date reale din baze de date prin afişarea paginiiWeb în vizualizarea Live Data View.

Pentru a edita codul PHP selectaţi pictograma corespunzătoare de pe pagina dumneavoastră Web. Apare fereastra de inspectare Property. Daţi clic pe butonul Edit pentru a afişa caseta de dialog Edit Contents. Editaţi codul dumneavoastră în această casetă de dialog.

Fereastra de inspectare Property afişează butonul Edit când selectaţi una dintre pictogramele Server Markup Tags de pe pagina Web. Caseta de dialog Edit Contents vă permite editarea codului.

Pentru a prelucra un formular puteţi să folosiţi scripturi PHP conţinute în fişiere externe.

În fereastra de inspectare Property faceţi referire la URL-ul scriptului ca fiind acţiunea formularului. Directorul scriptului trebuie să aibă permisiunea corespunzătoare pentru a executascriptul.

Când definiţi site-ul dumneavoastră ca fiind un site dinamic puteţi crea pagini Web dinamice în Dreamweaver.

Introducere în publicarea primei pagini webÎnainte de a trece la lustruirea paginii, putem face următorul pas, acela de a o

publica, adică de a transfera pagina web şi fişierele ataşate ei astfel încât să fie „vii” pe internet.

Deşi sunteţi probabil jenat de a face acest lucru la acest punct, deoarece pagina este incompletă, nu există de fapt nici o cauză de îngrijorare. Dacă nu aţi spus nimănui adresa site-ului, nimeni nu va şti de existenţa lui, de aceea nu va fi văzut decât de dvoastră.

Publicarea se realizează astfel: meniul “Site”, opţiunea “Manage Sites” , va apărea o fereastră de dialog cu numele site-ului, se va apăsa butonul “Next ” pănâ când se va ajunge la "How do you connect to your remote server?", dacă la început îl setasem pe “None”, acum se va modifica. În caseta derulantă se va alege “FTP”, iar la întrebarea "What is the hostname or FTP address of your Web Server?" se va introduce în căsuţa de răspuns adresa FTP a host-ului web pe care îl aveţi. Dacă aveţi propriul domeniu şi este găzduit de un host web commercial atunci adresa este precedată de ftp. De exemplu dacă adresa este exemplu.com, atunci adresa ftp va fi ftp.exemplu.com.

Următoarea întrebare este "What folder on the server do you want to store your files in?". Unele host-uri web vor ca răspuns un folder numit www, altele public_html, dacă nu, se va lăsa căsuţa goală.Pentru "What is your FTP login?" se va introduce contul pentru FTP, apoi pentru "What is your FTP password?" se va introduce parola.

Apoi se va apăsa pe butonul “Test Connection” pentru a testa dacă informaţiile au fost introduce correct. Dacă acesta eşuează, Dreamwaver va afişa o căsuţă în care întreabă dacă se vrea conectarea cu Passive FTP. Dacă în continuare testul eşuează, însemană că datele sunt incorecte. Dacă nu, se va trece mai departe cu ajutorul butonului “Next” până la “Done”.Pentru finalizarea publicării se foloseşte “Site” opţiunea “Put”, la întrebarea "Put dependent files?" răspunsul va fi “Yes”.

Testarea paginii webPentru a testa această pagină: se va folosi un browser web şi se va tasta adresa

paginii, dacă detaliile de ftp au fost introduce correct, pagina va putea fi vizualizată. Dacă apare o eroare "No DNS for www.example.com" sau "Domain not found" înseamnă că pagina nu a fost propagate de providerul de internet. Dacă eroarea este "404 File Not Found" înseamnă că numele directorului nu a fost introdus correct.

Administrarea şi încărcarea proiectuluiSite-urile Web complete rezidă de obicei pe un server Web prin care utilizatorii au

acces la paginile Web. În timp ce lucra#i la site-urile dumneavoastră Web, puteţi să le treceţi pe server pentru a le testa. La sfârşitul proiectului va fi nevoie să mutaţi paginile Web pe un server public pentru ca utilizatorii să le poată vizita. Există mai multe modalităţi de a trece fişierele pe server şi metode diferite de a vă asigura că versiunea fişierelor este corectă şi nu au fost suprascrise din greşeală.

Dreamweaver are mai multe comenzi utile pentru gestionarea întregului site Web. Puteţi crea (şi chiar salva) o hartă a site-ului, care este o reprezentare vizuală a relaţiilor dintre fişierele site-ului dumneavoastră Web. Există comenzi care actualizează legăturile din site şi caută şi înlocuiesc textul fie din porţiunile de text, fie din codul HTML al paginii Web.

187

Page 188: curs DPW.docx

Activarea conexiunii la serverCând definiţi un site Web în Dreamweaver definiţi un site local care oglindeşte exact

siteul final, public. Oglindirea înseamnă că site-ul local conţine o copie exactă a fişierelor de pe site-ul final. Dreamweaver numeşte site-ul final site-ul de la distanţă sau site-ul de pe server (remote site). Lucraţi asupra fişierelor pe site-ul dumneavoastră local şi apoi le încărcaţi pe site-ul de pe server folosind comenzile de transfer de fişiere din Dreamweaver.

Adăugarea site-ului de la distanţăDefiniţi un site de la distanţă prin editarea definiţiei site-ului Web (comanda Edit Sites

din meniul Site). Selectaţi butonul Edit pentru a lansa caseta de dialog Site Definition a site-ului Web selectat. În secţiunea Basic, daţi clic pe butonul Next până când ajungeţi la secţiunea Sharing Files (fişiere partajate) din programul wizard Site Definition.

Din meniul derulant puteţi alege cinci metode de transfer: FTP, Local/Network, RDS, SourceSafe Database, WebDAV

Metoda de transfer pe care o selectaţi depinde de locul în care rezidă site-ul de la distanţă. Site-ul poate fi în reţeaua intranet a companiei dumneavoastră şi, dacă este aşa, îl puteţi transfera pe site-ul de la distanţă folosind conexiunea LAN sau Local/Network. Site-ul poate fi la furnizorul dumneavoastră de servicii Internet (ISP) – cei care vă pun la dispoziţie un serviciu Internet prin legătură telefonică. În acest caz vă veţi conecta la serverele lor prin FTP.

Conexiunile SourceSafe, RDS sau WebV sunt mai puţin cunoscute, dar sunt uneori folosite în mediile profesionale de dezvoltare Web.

Configurarea informaţiei pentru FTPSelectaţi accesul FTP dacă vreţi să transferaţi fişiere pe Web către un server. Serverul

poate fi amplasat, din punct de vedere fizic, în clădirea dumneavoastră sau chiar pe partea cealaltă a Pământului. Aveţi nevoie de numele serverului FTP pentru a-l introduce în caseta FTP Host (gazda FTP). Adesea acesta este de forma: ftp.domeniultau.ro.

Nu introduceţi numele de server precedat de protocol aşa cum aţi face-o într-un browser (cum ar fi ftp://ftp.domeniultau.ro).

Introduceţi directorul corect în caseta de text, imediat sub caseta de text a adresei serverului FTP. Poate fi nevoie să obţineţi calea pentru acest director de la administratorul de Web sau de reţea (/domeniultau.ro/ sau domeniultau.ro/). Dacă nu sunteţi sigur ce director rădăcină este pe site-ul de la distanţă, încercaţi să lăsaţi caseta Host Directory (directorul gazdă) goală. Serverul FTP poate să vă poziţioneze în directorul corect dacă aveţi contul dumneavoastră configurat corespunzător.Veţi avea nevoie de un nume de utilizator (login) – folosit pentru deschiderea unei sesiuni de lucru - şi o parolă (Password) pentru accesul la serverul FTP. Numele standard de login anonymous (utilizator anonim), adesea utilizat pentru a descărca fişiere prin Internet, nu va funcţiona probabil la încărcarea fişierelor pe un site Web. Trebuie să deschideţi o sesiune de lucru ca un utilizator cu acces şi permisiune de a prelua şi a pune fişiere în directoarele care vor găzdui site-ul dumneavoastră Web. Dreamweaver salvează automat parola dumneavoastră.

Dacă au şi alţii acces la Dreamweaver pe calculatorul dumneavoastră şi nu doriţi ca ei să aibă acces la contul dumneavoastră FTP, debifaţi caseta de validare Save.

Selectaţi butonul Test Connection pentru a verifica dacă aţi introdus corect datele şi dacă vă conectaţi la serverul FTP. Puteţi depana problemele conexiunii FTP folosind FTP Log ce se găseşte în submeniul Results al meniului Window. FTP Log conţine lista cu motivele unei conexiuni eşuate. De exemplu, dacă înregistrarea din jurnalul conexiunii spune că parola a fost incorectă sau că directorul indicat de dumneavoastră nu există, le puteţi modifica în definiţia site-ului şi puteţi încerca din nou. Dacă sunteţi în spatele unui program de protecţie firewall (parafoc) sau folosiţi un server proxy, aţi putea avea dificultăţi cu conexiunea FTP. Consultaţi administratorul de reţea în legătură cu atributele care trebuie alese când configuraţi legătura FTP. Bifaţi caseta de validare Use Firewall (în Advanced selectaţi Remote Info) dacă accesul la Internet se face printr-un program firewall. Configuraţi portul şi gazda firewall în preferinţele Dreamweaver. (La Category selectaţi Site.) Dacă aveţi o legătură lentă la Internet, intervalul de timp de expirare implicit acordat pentru FTP (timeout) ar putea fi prea scurt, ceea ce ar întrerupe conexiunea FTP prea curând. Puteţi creşte acest interval în preferinţele din Site.

Configurarea informaţiei pentru LANSelectaţi accesul Local/Network, dacă serverul este pe un calculator la care vă puteţi

conecta direct folosind reţeaua. Dacă aveţi acces la fişierele de pe server, aşa cum aveţi acces la hard-discul dumneavoastră, şi mutaţi cu uşurinţă fişierele pe şi de pe server, atunci

188

Page 189: curs DPW.docx

aveţi acces LAN. Va trebui să ştiţi directorul accesibil prin Web; administratorul dumneavoastră de Web vă poate da această informaţie.Configuraţi accesul LAN la serverul de la distanţă introducând calea la directorul de pe server. Folosiţi pictograma cu dosar pentru a naviga la director sau tastaţi calea. Validarea opţiunii Refresh Remote File List Automatically (actualizarea automată a listei de fişiere de la distanţă) ar putea încetini puţin performanţele Dreamweaver, dar aţi avea o reflectare la zi a site-ului de la distanţă.

Utilizarea secţiunii Advanced pentru configurarea site-ului de la distanţăDaţi clic pe secţiunea Advanced din caseta de dialog Site Definition pentru a avea o

altă vizualizare a atributelor site-ului de la distanţă. Categoria Remote Info, afişează informaţia de deschidere a sesiunii (login) împreună cu atributele programului firewall şi altele. Puteţi selecta pe rând secţiunile Basic şi Advanced, dacă doriţi.

Puteţi închide caseta de dialog Site Definition selectând butonul OK pentru a salva valorile atributelor.

Mutarea site-ului dumneavoastră pe un serverDacă serverul dumneavoastră este localizat într-o reţea LAN, vă conectaţi de obicei la

server în momentul în care deschideţi sesiunea de lucru pe calculatorul dumneavoastră şi rămâneţi conectat toată ziua. Dacă aveţi acces la server prin Internet, folosind accesul FTP, vă conectaţi cât timp preluaţi şi puneţi fişiere pe server, iar apoi vă deconectaţi. Chiar dacă nu vă deconectaţi explicit calculatorul, conexiunea va expira pe server dacă aţi fost inactiv o perioadă şi va trebui să vă reconectaţi.

Panoul Site conţine butoane ce vă permit să transferaţi fişiere pe şi dinspre site-ul de la distanţă. Puteţi transfera fişiere pe site-ul dumneavoastră local selectând butonul Get (preia) şi puteţi transfera fişiere pe site-ul de la distanţă selectând butonul Put (pune). Comanda Synchronize (sincronizare), care este o metodă mai bună de a transfera fişiere. Comanda Synchronize detectează dacă un fişier local (sau de la distanţă) este mai nou şi îl transferă doar dacă este necesar, reducând astfel timpul de transfer.

• Butonul Connect/Disconnect (conectare/deconectare) stabileşte o conexiune la un server FTP. Acest buton are întotdeauna valoarea conectat când aveţi acces LAN la site-ul de la distanţă.

• Butonul Refresh (împrospătare) actualizează manual ferestrele Site locală şi de ladistanţă. Dacă la configurarea site-ului dumneavoastră nu aţi selectat opţiunea Refresh Local File List Automatically sau Refresh Remote File List Automatically, puteţi folosi acest buton pentru a actualiza manual lista de fişiere.

• Butonul Get (preia) recuperează fişiere de pe site-ul de la distanţă şi le mută pe site-ul local.

• Butonul Put (pune) aşază fişiere de pe site-ul local pe site-ul de la distanţă.Selectaţi butonul Expand/Collapse din marginea din dreapta a panoului Site pentru a extinde panoul în fereastra Site. Fereastra Site nu numai că prezintă site-ul local, ca panoul Site, dar mai arată şi site-ul de la distanţă. Când sunteţi conectat, apare o listă a fişierelor de pe site-ul de la distanţă. Dacă doriţi să reveniţi la vizualizarea ferestrei Document Dreamweaver, apăsaţi din nou butonul Expand/Collapse.

Capacităţile Dreamweaver de management al site-ului WebFolosiţi opţiunile Check In/Check Out ale Dreamweaver-ului pentru a fi siguri că la un

moment dat o singură persoană lucrează la un fişier. Dacă aveţi un fişier marcat Check Out, altcineva nu poate folosi acel fişier până nu va fi marcat din nou Check In.

Transferul fişierelorDupă ce îl marcaţi Check In, puteţi deschide fişierul, dar nu puteţi salva modificările

deoarece Dreamweaver îl marchează ca read-only (fişierul poate fi doar vizualizat).Pentru a prelua sau a pune fişiere, trebuie să verificaţi mai întâi dacă în meniul

derulant Site al panoului Site din fereastra Site este selectat site-ul corect. Dacă obţineţi accesul la site prin FTP, daţi clic pe butonul Connect. Dacă sunteţi deja conectat sau aveţi acces la fişiere întro reţea LAN, săriţi peste acest pas.

Pentru a prelua fişierele:1. Selectaţi fişierele pe care doriţi să le transferaţi pe site-ul dumneavoastră local.2. Daţi clic pe comanda Get.3. Dreamweaver poate afişa o casetă de dialog care vă întreabă dacă doriţi să

descărcaţi fişierele dependente. Fişierele dependente sunt imagini şi alte componente legate la fişierele pe care le transferaţi. Puteţi dezactiva această casetă de dialog prin bifarea casetei de validare Don’t show me this message again (nu-mi mai arăta acest mesaj din nou).

189

Page 190: curs DPW.docx

Pentru a transfera fişierele:1. Selectaţi fişierele pe care doriţi să le transferaţi pe site-ul de la distanţă.2. Daţi clic pe comanda Put. Dacă transferaţi un fişier deschis în acel moment,

Dreamweaver vă va cere să salvaţi fişierul înainte de a-l pune pe site-ul de la distanţă.3. Dreamweaver poate afişa o casetă de dialog întrebându-vă dacă doriţi să încărcaţi

şi fişiere dependente. Puteţi dezactiva această casetă de dialog prin bifarea casetei de validare Don’t show me this message again.

Importul unui site Web existentCând un site Web există deja pe un site de la distanţă (un server), trebuie să definiţi

siteul Web în Dreamweaver, să vă conectaţi la site-ul de la distanţă şi să descărcaţi toate fişierele de pe site pentru a lucra cu ele. Nu uitaţi, ar trebui să editaţi doar fişierele localizate pe propriul dumneavoastră calculator. Puteţi descărca şi edita un site existent, chiar dacă nu a fost creat cu Dreamweaver.

Când descărcaţi pentru prima dată site-ul ar putea să dureze ceva, în funcţie de accesul la site şi de viteza de conectare a reţelei. Totuşi, după ce aţi descărcat toate fişierele ar trebui să fie nevoie să descărcaţi numai un fişier care se modifică.

Pentru a importa un site Web existent nu trebuie decât să faceţi pe discul local o copie oglindă a site-ului. Nu există nici un proces de conversie şi fişierele vor rămâne nemodificate în Dreamweaver. Pentru a importa un site Web existent:

1. În caseta de dialog Site Definition configuraţi informaţiile atât pentru site-ul local, cât şi pentru site-ul de la distanţă.

2. Preluaţi toate fişierele de pe site-ul de la distanţă prin selectarea rădăcinii din secţiunea Remote Site a panoului Site. Selectarea elementului de sus din dosarul rădăcină selectează întregul site. Dacă selectaţi însă un fişier, veţi prelua doar acel fişier.

3. Selectaţi butonul Get pentru a transfera toate fişierele de pe site-ul de la distanţă pe siteul local.

Editarea unui site întregDreamweaver are mai multe comenzi utile ce vă pot ajuta să faceţi modificări în tot

siteul.În cele ce urmează, veţi folosi comenzi foarte puternice, putând economisi mult timp.Trebuie să aveţi grijă la modificarea elementelor din tot site-ul, pentru a nu face o

greşeală.Desigur, puteţi corecta greşeala tot la nivelul întregului site!Sincronizarea fişierelor pe site-urile local şi de la distanţăSincronizarea fişierelor de pe site-urile local şi de la distanţă pentru a vă asigura că

aveţi în ambele locuri fişierele actualizate. Dreamweaver are trei comenzi utile în determinarea site ului care are cele mai recente fişiere. Selectaţi comanda Syncronize pentru a sincroniza automat fişierele între site-urile local şi de la distanţă, aducând ambele site-uri la zi. În cazul în care doriţi să verificaţi dacă noile fişiere se află pe site-ul de la distanţă sau pe site-ul local, folosiţi comanda Select Newer Local (selectează-l pe cel mai nou de pe site-ul local) sau Select Newer Remote (selectează-l pe cel mai nou de pe site-ul de la distanţă) din meniul Edit. Pentru a vedea ce fişiere sunt mai noi pe site-ul de la distanţă:

1. Conectaţi-vă la site-ul de la distanţă dând clic pe butonul Connect, dacă aveţi acces FTP la site-ul de la distanţă.

2. Selectaţi fie directorul rădăcină, fie o secţiune de fişiere din site-ul local.3. Selectaţi comanda Select Newer Remote din meniul Edit.Dreamweaver caută prin fişierele de pe site-ul de la distanţă pentru a vedea care

dintre ele sunt mai noi decât fişierele corespunzătoare de pe site-ul local. Fişierele care sunt mai noi pe site-ul de la distanţă sunt selectate. Dacă fişierele care nu există pe site-ul local există pe site-ul de la distanţă, Dreamweaver le selectează şi pe acestea. Având toate fişierele selectate, preluaţi simplu fişierele de pe site-ul de la distanţă pentru a le actualiza pe cele de pe site-ul local.

Urmaţi aceiaşi paşi pentru a selecta fişierele mai noi de pe site-ul local, folosind comanda Select Newer Local.

Când sincronizaţi fişierele, Dreamweaver le analizează atât pe cele de pe site-ul local, cât şi pe cele de pe site-ul de la distanţă şi vă dă un raport asupra fişierelor care trebuie copiate pentru a sincroniza site-urile. Dumneavoastră aveţi un control total asupra procesului şi puteţi deselecta orice fişier pe care nu doriţi să îl transferaţi. Dreamweaver vă va mai spune dacă fişierele sunt complet actualizate şi dacă este nevoie să le sincronizaţi.

Pentru a sincroniza fişierele pe site-urile local şi de la distanţă:

190

Page 191: curs DPW.docx

1. Deschideţi fereastra Site şi selectaţi site-ul pe care vreţi să-l sincronizaţi.2. Dacă doriţi să sincronizaţi doar anumite fişiere, selectaţi acele fişiere.3. Selectaţi comanda Synchronize din meniul Site.4. Apare caseta de dialog Synchronize Files.5. În meniul derulant Synchronize alegeţi sincronizarea întregului site sau doar a

fişierelor pe care le-aţi selectat.6. Din meniul derulant Direction selectaţi modul în care doriţi să transferaţi fişierele.

Puteţi transfera fişierele mai noi pe site-ul de la distanţă, puteţi prelua fişierele mai noi de pe site-ul de la distanţă sau puteţi să preluaţi şi să puneţi fişierele mai noi în ambele direcţii.

7. Bifaţi caseta de validare de lângă opţiunea Delete local files not on remote server (ştergeţi fişierele locale care nu se află pe serverul de la distanţă) dacă doriţi să scăpaţi de orice fişier local în plus.

8. Daţi clic pe butonul Preview.9. Dacă fişierele dumneavoastră sunt la zi, veţi primi un mesaj că nu este necesară

nici o sincronizare. Dacă există fişiere care trebuie să fie sincronizate, Dreamweaver va afişa caseta de dialog Site, conţinând toate fişierele care fie nu există, fie sunt mai vechi.

10. Parcurgeţi lista şi deselectaţi orice acţiune pe care nu o doriţi. Când sunteţi gata să transferaţi fişierele, apăsaţi butonul OK.

11. În timpul transferului, Dreamweaver afişează o bară de evoluţie în colţul din dreapta jos al casetei de dialog Site. După ce s-a încheiat sincronizarea, caseta de dialog Site afişează mesajul „Synchronization complete” şi dă starea fiecărui fişier.

12. Dacă doriţi să salvaţi un jurnal al sincronizării, selectaţi butonul Save Log şi salvaţi fişierul pe hard-discul dumneavoastră. Altfel, apăsaţi butonul Close.

Crearea unei hărţi a site-uluiCreaţi o hartă a site-ului pentru a reprezenta vizual macheta site-ului

dumneavoastră.Pentru a facilita crearea hărţii site-ului, extindeţi panoul Site în toată fereastra Site cu

ajutorul butonului Expand/Collapse. Restrângeţi fereastra Site după ce aţi terminat crearea hărţii siteului, selectând butonul Expand/Collapse din fereastra Site. După ce aţi definit harta în fereastra Site, o puteţi vizualiza în panoul Site, selectând vizualizarea Map din meniul derulant View al panoului Site.

Înainte de a vizualiza harta site-ului trebuie să definiţi o pagină de start (home page) pentru site-ul dumneavoastră. Pentru a defini o pagină de start, selectaţi o pagină Web ca pagină de start pe site-ul local şi selectaţi comanda Set as Home Page din meniul Site.

Selectaţi pictograma Site Map pentru a afişa harta site-ului. Aceasta apare în fereastra Site alături de fişierele din site-ul local. În harta site-ului, fişierele apar ca pictograme având trasate linii ce reprezintă legăturile între fişierele corelate. Următoarele simboluri apar alături de pictogramele care descriu fişierele:

• O legătură invalidă (ruptă) apare ca un text roşu cu o mică imagine a unui lanţ de legătură rupt.

• O legătură apare ca un text albastru cu un mic glob alături.• Un fişier care poate fi doar citit (read-only) apare cu un lacăt alături.Puteţi modifica vizualizarea hărţii site-ului dând clic pe orice pictogramă şi selectând

comanda View as Root (să apară ca rădăcină) din meniul View.Pentru a modifica modul în care este afişată harta site-ului, selectaţi comanda Layout

din meniul View al panoului Site sau al ferestrei Site. Pentru a vedea această comandă, trebuie să afişaţi harta site-ului. Stabiliţi numărul de coloane afişate şi lăţimea lor.

Salvaţi harta site-ului fie ca fişier bitmap (.bmp), fie ca fişier PNG, folosind comanda Save Site Map din meniul File al panoului Site (sau al ferestrei Site).

Gestionarea legăturilorDreamweaver actualizează automat legăturile atunci când mutaţi sau redenumiţi un

fişier dintr-un site Web curent. Nu uitaţi ca atunci când definiţi site-ul Web să creaţi o copie cache pentru a mări viteza de procesare a actualizării. Când mutaţi sau redenumiţi paginile Web, Dreamweaver afişează caseta de dialog Update Files. În caseta de dialog este afişată o listă cu fişierele legate. Daţi clic pe butonul Update pentru a actualiza toate legăturile sau selectaţi fiecare fişier în parte pentru actualizare.

Folosiţi facilitatea Link Checker (verificarea legăturilor) pentru a verifica toate legăturile din site-ul dumneavoastră. Selectaţi comanda Check Links Sitewide (verifică legăturile din site)din meniul Site. Link Checker afişează trei categorii diferite: legături invalide (rupte), legături externe şi fişiere orfane. Legăturile externe sunt legături pe

191

Page 192: curs DPW.docx

care Dreamweaver nu le poate verifica. Fişierele orfane sunt fişiere nelegate la nici un alt fişier.

Legăturile invalide (rupte) trebuie refăcute. Din fericire, Dreamweaver facilitează acest lucru. Selectaţi legătura invalidă (ruptă), daţi clic pe pictograma dosar şi navigaţi la fişierul corect pentru a repara legătura.

Generarea de rapoarte despre site-ul WebRapoartele Dreamweaver vă permit să compilaţi informaţii despre site-ul

dumneavoastră, cum ar fi data când au fost create fişierele sau erorile din site. Sunt disponibile următoarele rapoarte:

• Combinable Nested Font Tags (taguri de font imbricate ce pot fi combinate)• Missing Alt Text (textul alternativ lipseşte)• Redundant Nested Tags (taguri imbricate redundante)• Removable Empty Tags (taguri goale ce pot fi şterse)• Untitled documents (documente fără titlu)Pentru a rula un raport:1. Selectaţi comanda Reports din meniul Site fie în Site Manager, fie în fereastra

Document.2. Apare caseta de dialog Reports. Selectaţi la ce vreţi să se refere raportul (la

documentul curent, la site-ul curent, la fişierele selectate sau la un anumit dosar).3. Selectaţi un raport.4. Unele rapoarte au atribute suplimentare care pot nuanţa descrierea. Dacă în

partea de jos a casetei de dialog este activ butonul Report Settings, înseamnă că sunt disponibile attribute suplimentare pentru raport.

5. Selectaţi butonul Run pentru a rula raportul.Reutilizarea elementelor din site-ul Web prin intermediul biblioteciiCând proiectaţi pagini Web puteţi crea elemente de bibliotecă din obiectele pe care

le folosiţi des. Dacă actualizaţi un element de bibliotecă, el se poate actualiza peste tot în site-uldumneavoastră.

Elementele de bibliotecă vă ajută să menţineţi consecvenţa site-ului Web.Când vă aflaţi în faza de design a site-ului dumneavoastră Web ar trebui să vă gândiţi

la elementele comune pe care ar fi adecvat să le creaţi ca elemente de bibliotecă în Dreamweaver.

Puteţi transforma tot felul de obiecte în elemente de bibliotecă. De exemplu, o bară de navigare care apare în multe dintre paginile site-ului dumneavoastră ar fi un candidat excelent la a deveni un element de bibliotecă. Când trebuie să adăugaţi un buton nou la bara de navigare este simplu să adăugaţi butonul elementului iniţial de bibliotecă şi apoi să actualizaţi automat întregul site cu acea modificare.

Crearea unui element de bibliotecăPuteţi să creaţi un element de bibliotecă, să îl salvaţi în categoria Library a panoului

Asset şi apoi să îl aplicaţi oricărei pagini Web din site-ul dumneavoastră Web. Puteţi include un element de bibliotecă de mai multe ori într-o pagină Web. Elementele de bibliotecă pot fi create din orice obiect conţinut în secţiunea body a paginii Web, precum formularele, tabelele, textul, applet-urile Java, modulele plug-in sau imaginile.

Trebuie să definiţi un site Web înainte ca Dreamweaver să insereze un element de bibliotecă. Dreamweaver creează în rădăcina site-ului Web un director numit Library, unde păstrează toate elementele de bibliotecă. Când inseraţi un element de bibliotecă în pagina dumneavoastră Web, Dreamweaver inserează în pagină o copie a conţinutului elementului de bibliotecă.

Elementele de bibliotecă diferă de şabloanele din Dreamweaver deoarece elementele de bibliotecă sunt porţiuni dintr-o pagină, pe când şablonul este o pagină întreagă. Bibliotecile şi şabloanele sunt similare, deoarece ambele pot actualiza automat toate legăturile şi paginile.

Utilizarea categoriei Library din panoul AssetCând creaţi şi aplicaţi elemente de bibliotecă, deschideţi categoria Library din panoul

Asset (componente). Categoria Library din panoul Asset vă arată toate elementele de bibliotecă din site-ul Web curent.

Categoria Library din panoul Asset afişează toate elementele de bibliotecă din site-ul Web curent pentru a insera, crea, deschide şi şterge elemente de bibliotecă. Există butoane în partea de jos a panoului.

Categoria Library din panoul Asset este împărţită în două. Jumătatea de jos conţine lista cu numele elementelor de bibliotecă din site-ul Web. Jumătatea de sus afişează

192

Page 193: curs DPW.docx

conţinutul unui element de bibliotecă selectat în jumătatea de jos. Butoanele din partea de jos sunt:

• Butonul Insert inserează în pagina Web elementul de bibliotecă selectat la acel moment.

• Butonul New Library Item creează un element de bibliotecă nou, fără conţinut.• Butonul Edit deschide elementul de bibliotecă în propria sa fereastră Document.• Butonul Delete şterge elementul de bibliotecă. Acest lucru nu afectează nici o

copie a elementului de bibliotecă. (deşi elementul nu mai poate fi actualizat nicăieri în site).Crearea unui element de bibliotecă din conţinutul existentExistă două căi de a crea obiecte de bibliotecă:• Din obiecte sau grupuri de obiecte existente – după ce vă decideţi să creaţi un

element de bibliotecă dintr-un grup de obiecte existent pe o pagină Web, selectaţi obiectele şi salvaţileîn bibliotecă.

• Luând-o de la început, cu un element nou, gol, de bibliotecă - puteţi crea un element de bibliotecă nou, puteţi să-l deschideţi şi să îi adăugaţi obiecte, ca şi cum ar fi o pagină obişnuită de Web.

Creaţi pe pagina dumneavoastră Web un element de bibliotecă dintr-un obiect sau grup de obiecte existent, după cum urmează:

1. Selectaţi un obiect sau grup de obiecte. Selectaţi mai multe obiecte fie deplasând cursorul peste ele, fie ţinând tasta Shift apăsată şi dând clic pe obiecte pentru a le adăuga la selecţie.

2. Pentru a adăuga selecţia la bibliotecă, daţi drag-and-drop (tragere şi plasare) pe jumătatea dejos a categoriei Library din panoul Asset. Selectaţi alternativ comanda Add Object to Library din submeniul Library al meniului Modify.

3. Daţi obiectului de bibliotecă un nume intuitiv. Câmpul numelui este selectat imediat după cecreaţi elementul de bibliotecă sau îl puteţi reselecta cu un clic lung pe el.

Dreamweaver creează un fişier individual pentru fiecare element de bibliotecă. Extensia de fişier pentru elementele de bibliotecă este .lbi. Dacă vă uitaţi în directorul Library al siteului dumneavoastră Web, veţi vedea câte un fişier .lbi pentru fiecare element de bibliotecă pe care îl aveţi în site-ul Web.

Crearea de la zero a unui element de bibliotecăCreaţi un element nou de bibliotecă şi adăugaţi obiecte după cum urmează:1. Daţi clic pe butonul New Library Item aflat în partea de jos a Library din panoul

Asset.2. Dreamweaver creează un element de bibliotecă nou. ]n jumătatea de sus a

categoriei Library din panoul Asset apare un mesaj care vă spune cum să adăugaţi conţinut elementului de bibliotecă gol.

3. Denumiţi elementul de bibliotecă. De exemplu, creaţi o declaraţie de copyright care se va afla în partea de jos a fiecărei pagini Web. Numele „Copyright” ar fi o soluţie bună.

4. În categoria Library din panoul Asset executaţi dublu-clic pe elementul de bibliotecă.

Dreamweaver deschide elementul de bibliotecă într-o fereastră Document separată. Puteţi spunecă aveţi deschis un element de bibliotecă, deoarece Dreamweaver afişează în bara de titlu <<Library Item>> alături de numele elementului de bibliotecă.

5. Inseraţi obiecte în fereastra Document a elementului de bibliotecă tot aşa cum aţi face-o înorice pagină Web. Inseraţi simbolul de copyright (din panoul Characters în bara Insert), un an şi numele dumneavoastră.

6. Închideţi fereastra Document şi salvaţi elementul de bibliotecă. Modificările dumneavoastră vor fi reflectate în categoria Library din panoul Asset. Categoria Library din panoul Asset are un meniu pop-up care conţine comenzi utile. Comanda New Library Item este o altă cale de a crea un element de bibliotecă. Exact acelaşi meniu apare când daţi clic dreapta pe un element de bibliotecă în categoria Library din panoul Asset.

Adăugarea unui element de bibliotecă la o paginăDupă ce aţi creat un element de bibliotecă, trageţi-l cu mouse-ul din lista aflată în

categoria Library a panoului Asset şi plasaţi-l pe pagina dumneavoastră Web. Puteţi să

193

Page 194: curs DPW.docx

preluaţi elementul de bibliotecă şi să îl mutaţi în altă locaţie din fereastra Document. Nu veţi putea să selectaţi obiecte separate conţinute în elementul de bibliotecă pe care l-aţi inserat. Când daţi clic pe orice obiect, selectaţi de fapt tot elementul de bibliotecă; grupul de obiecte dintr-un element de bibliotecă este în esenţă un singur obiect în pagina dumneavoastră Web.

Când inseraţi un element de bibliotecă în pagina dumneavoastră Web este inserată o copie a conţinutului său. Nu mai trebuie să fie prezent elementul de bibliotecă iniţial. Când încărcaţi pagina Web pe un site Web de la distanţă (aflat pe server), nu trebuie să încărcaţi şI directorul de bibliotecă. Este bine să păstraţi directorul pentru situaţia în care doriţi să faceţi modificări la elementele de bibliotecă din site-ul Web.

Fereastra de inspectare Property afişează atributele elementului de bibliotecă selectat în fereastra Document. Caseta Src afişează numele elementului de bibliotecă (pe care nu îl puteţi modifica aici). ]n fereastra de inspectare Property există trei butoane care vă ajută să lucraţi cu un element de bibliotecă:

• Butonul Open (deschidere) deschide elementul de bibliotecă pe care doriţi să îl editaţi.

• Butonul Detach from Original (detaşare de original) rupe legătura dintre această copie a unui element de bibliotecă şi elementul original. Dacă elementul original de bibliotecă este modificat, un element detaşat nu va fi actualizat. Dacă detaşaţi un element de bibliotecă de originalul său obiectele individuale conţinute în element vor fi editabile.

• Butonul Recreate (recreare) suprascrie elementul original de bibliotecă cu copia selectată curent a elementului de bibliotecă. Acest lucru este util dacă elementul original de bibliotecă a fost editat din greşeală sau pierdut.

Puteţi aplica o evidenţiere elementelor de bibliotecă, astfel încât ele să fie uşor de văzut în fereastra Document. Evidenţierea apare doar în Dreamweaver şi nu în browser. În plus, evidenţierea apare doar dacă este bifată opţiunea Invisible Elements din meniul View. Stabiliţiculoarea de evidenţiere în categoria Highlighting din preferinţele Dreamweaver.

Modificarea unui element de bibliotecăEditaţi elementele de bibliotecă deschizând elementul pentru a adăuga sau modifica

obiectele din fereastra Document. Nu daţi atenţie culorii de fundal la editarea elementelor de bibliotecă; elementul va apărea pe culoarea de fundal a paginii în care este inserat. După ce aţi inserat într-o pagină elementul de bibliotecă creat anterior, deschideţi-l pentru a-l edita. Aplicaţi diferite formate unor obiecte din element.După ce aţi terminat editarea, salvaţi elementul de bibliotecă. Dreamweaver vă va întreba dacă doriţi să actualizaţi toate documentele din site-ul Web care conţin elementul de bibliotecă.

Selectaţi butonul Update pentru a actualiza automat toate elementele de bibliotecă legate.

Caseta de dialog Update Pages afişează statisticile despre fişierele examinate, cele actualizate şi cele care nu au putut fi actualizate. Caseta de validare Show Log (arată jurnalul) trebuie să fie bifată pentru a afişa aceste statistici. Selectaţi butonul Close pentru a închide caseta de dialog Update Pages.

Având opţiunea Show Log bifată, caseta de dialog Update Pages afişează câte fişiere au fost examinate, câte au fost actualizate şi câte nu au putut fi actualizate.

Puteţi actualiza manual elementele de bibliotecă în orice moment. Executaţi clic pe elementul de bibliotecă în categoria Library a panoului Asset şi selectaţi fie comanda Update Page pentru a actualiza pagina Web, fie comanda Update Pages pentru a actualiza întregul site Web. Comanda Update Current Page acţionează imediat şi nu apare nici o casetă de dialog. Când lansaţi comanda Update Pages (Update Site), apare caseta de dialog Update Pages. Executaţi clic pe butonul Start pentru a începe actualizarea tuturor elementelor de bibliotecă legate, aflate în site-ul Web.

Utilizarea funcţiilor behavior şi a stilurilor în elementele de bibliotecăCând aplicaţi unui obiect o funcţie behavior, Dreamweaver inserează cod JavaScript

în secţiunea <head> a documentului HTML. Un element de bibliotecă nu are o secţiune <head>. Ce se întâmplă cu codul JavaScript când trageţi un obiect cu mouse-ul în categoria Library din panoul Asset, dacă obiectul are aplicată o funcţie behavior? Când un element de bibliotecă care are ataşată o funcţie behavior este inserat într-o pagină Web, Dreamweaverinserează inteligent orice cod JavaScript necesar în secţiunea <head> a paginii Web.

Un element de bibliotecă are doar conţinut HTML şi nu este o pagină Web HTML. El nu include tagurile <head> sau <body>.

194

Page 195: curs DPW.docx

Probleme apar dacă doriţi să modificaţi funcţia behavior asociată cu un element de bibliotecă. Nu puteţi folosi panoul Behavior la editarea unui element de bibliotecă, deoarece este prezentă doar jumătatea cu evenimentele a funcţiei behavior. Pentru a edita o funcţie behavior ataşată unui element de bibliotecă trebuie mai întâi să detaşaţi elementul, să editaţi funcţia behavior şi apoi să recreaţi elementul de bibliotecă. Este mai uşor să stabiliţi cum doriţi să funcţioneze elementul de bibliotecă înainte de a-l pune în bibliotecă!

Puteţi aplica stiluri elementelor de bibliotecă, dar va trebui fie să copiaţi manual definiţia stilului în fiecare pagină care foloseşte elementul de bibliotecă, fie să folosiţi o foaie de stil legată. Pentru acest scop, este mai uşor să folosiţi o foaie de stil legată. Verificaţi ca toate paginile Web care includ elementul de bibliotecă să fie legate la foaia de stil care conţine definiţiile stilului folosit în elementul de bibliotecă. Dacă editaţi un stil în foaia de stil legată, toate elementele de bibliotecă vor reflecta modificările făcute stilului.

Zonele fierbinţi dintr-o imagine sunt pierdute când salvaţi harta de imagine ca un element de bibliotecă. Imaginea este salvată, dar coordonatele zonei fierbinţi sunt înlăturate.

Crearea şi aplicarea unui şablonCreaţi şabloane (templates) pentru a oferi o bază de control paginilor Web controlate.

Şabloanele conţin obiecte pe care le marcaţi ca fiind editabile; restul şablonului este blocat. Când actualizaţi un şablon original, el se va actualiza peste tot în site.

Crearea unui şablonMai întâi creaţi un şablon, salvaţi-l în categoria Templates a panoului Assets şi apoi

folosiţi-l pentru a crea o nouă pagină Web în cadrul site-ului dumneavoastră Web. Înainte ca Dreamweaver să poată insera un şablon, trebuie să definiţi un site Web. Dreamweaver creează un director numit Templates în rădăcina site-ului dumneavoastră Web, acolo unde se păstrează fişierele şablon originale. Dreamweaver păstrează codul unui şablon într-un fişier în directorul Template şi inserează o copie a codului, acolo unde aţi inserat un şablon într-o pagină Web.

Un şablon diferă de un element de bibliotecă deoarece şablonul se referă la o întreagă pagină Web, nu doar la o porţiune a unei pagini.

Utilizarea categoriei Templates din panoul AssetsCând creaţi şi aplicaţi şabloane, deschideţi categoria Templates a panoului Assets.Categoria Template prezintă toate şabloanele care există în site-ul Web curent.Butoanele din partea de jos sunt următoarele:• Butonul Apply (aplicare) aplică paginii Web şablonul selectat curent.• Butonul New Template (şablon nou) creează un şablon nou, gol.• Butonul Edit deschide şablonul în propria sa fereastră Document.• Butonul Delete Template (ştergere de şablon) înlătură şablonul din directorul

Templates.Aceasta nu afectează nici o copie a şabloanelor, atâta doar că şablonul înlăturat nu

maipoate fi actualizat în site.

Crearea unui şablon dintr-o pagină Web existentăExistă două moduri de a crea şabloane:• Dintr-o pagină Web existentă - dacă vă decideţi să creaţi un şablon pe baza unei

pagini Web, puteţi salva pagina ca şablon.• Luând-o de la zero – puteţi să creaţi un şablon nou, să îl deschideţi şi apoi să

adăugaţi obiecte la şablon ca şi când ar fi vorba de o pagină Web obişnuită. După ce aţi aplicat un şablon paginii dumneavoastră Web o copie a întregului conţinut din şablon va fi inserată în pagină. Nu mai trebuie să aveţi şablonul original prezent pentru ca pagina Web să fie afişată. Când încărcaţi pagina Web pe un site Web de la distanţă, nu trebuie să încărcaţi directorul Templates. Păstraţi directorul pentru momentul când veţi dori să faceţi modificări şabloanelor din site-ul dumneavoastră Web.

Păstrarea şabloanelor pe server vă asigură că aveţi o copie de siguranţă pentru cazul în care modificaţi din greşeală un şablon şi vreţi să-l readuceţi la forma iniţială. Folosiţi opţiunea cloaking (tăinuire) din Dreamweaver pentru a face ca directorul Templates să nu fie sincronizat sau încărcat când transferaţi fişiere. Activaţi tăinuirea în meniul Site şi apoi daţi clic-dreapta pe directorul Templates şi selectaţi comanda Cloak din submeniul Cloaking. Dosarul va apărea în site cu o linie roşie peste el.

Pentru a crea un şablon dintr-o pagină Web existentă:1. Selectaţi comanda Save As Template (salvare ca şablon) din meniul File.

195

Page 196: curs DPW.docx

2. Apare caseta de dialog Save As Template. Introduceţi un nume intuitiv pentru şablon.

Daţi noului şablon un nume intuitiv în caseta de dialog Save As Template. Veţi vedea o listă cu şabloanele existente în site-ul afişat la acel moment. Dreamweaver creează câte un fişier pentru fiecare şablon. Extensia de fişier pentru şabloane este .dwt. În directorul Templates al site-ului dumneavoastră Web, veţi vedea câte un fişier .dwt pentru fiecare şablon din site.

Crearea unui şablon de la zeroPentru a crea un şablon nou şi a-i adăuga obiecte:1. Daţi clic pe butonul New Template din partea de jos a categoriei Template a

panoului Asset.Dreamweaver creează un şablon nou. Apare un mesaj în jumătatea de sus a categoriei Template din panoul Asset, care vă spune cum să adăugaţi un conţinut şablonului.

2. Daţi şablonului un nume. De exemplu, creaţi un şablon pentru a afişa colecţia de cărţi şi numiţi-l „carte”.

3. Daţi dublu-clic pe şablon în categoria Template a panoului Asset. Dreamweaver deschide şablonul într-o fereastră Document separată. Puteţi spune că aveţi deschis un şablon deoareceDreamweaver afişează, în bara de titlu, <<Template>> împreună cu numele şablonului.

4. Inseraţi obiecte în fereastra Document a şablonului, aşa cum aţi face-o cu orice pagină Web.

5. Închideţi fereastra Document şi salvaţi şablonul. Modificările dumneavoastră vor fi reflectateîn categoria Template din panoul Asset. Nu vă faceţi griji acum cu mesajul pe care îl primiţi, relativ la faptul că şablonul dumneavoastră nu are regiuni editabile, deoarece în cele ce urmează veţi învăţa să adăugaţi nişte regiuni editabile.

Categoria Template din panoul Asset are un meniu pop-up care conţine comenzi utile. Sunt disponibile diferite comenzi în funcţie de ceea ce este selectat curent.

Marcarea unei regiuni existente ca fiind editabilăÎnainte de a aplica un şablon la o pagină Web, trebuie să marcaţi regiunile şablonului

ca fiind editabile. În mod implicit, toate regiunile din şablon sunt blocate. Marcaţi o regiune ca fiind editabilă dacă doriţi să o modificaţi, să adăugaţi sau să actualizaţi conţinutul din regiune. Lăsaţi blocate toate regiunile care nu trebuie modificate. Dacă este nevoie să faceţi schimbări într-o regiune blocată, puteţi schimba fişierul şablonului original şi să actualizaţi toate paginile Web legate la acel şablon. Comenzile Templates pentru lucrul cu regiunile editabile sunt localizate în submeniul Template Objects din meniul Insert.

Utilizaţi un înlocuitor de imagine în şablon pentru a reprezenta o imagine.Pentru a face editabilă o regiune existentă:1. Deschideţi un şablon şi selectaţi regiunea care trebuie să fie făcută editabilă.2. Selectaţi comanda Editable Region din submeniul Template Objects al meniului

Insert.3. Apare caseta de dialog New Editable Region. Daţi regiunii un nume intuitiv. După

ce aţi creat o regiune editabilă, numele regiunii apare în lista din partea de jos a submeniului Templates din meniul Modify, în timp ce lucraţi cu şablonul. Selectaţi în meniu unul dintre numele de regiune pentru a evidenţia acea regiune în fereastra Document. De asemenea, Dreamweaver creează automat regiuni editabile pentru titlul documentului (numit doctitle) şi o regiune goală în secţiunea <head> a documentului, disponibilă pentru codul JavaScript.

Dreamweaver vă oferă capacitatea de a crea regiuni editabile pe diferite obiecte dintr-un şablon. De exemplu, puteţi face editabil un strat. Veţi putea muta stratul sau modifica oricare dintre proprietăţile sale după ce aplicaţi şablonul paginii Web. Puteţi lăsa stratul blocat şi crea o regiune editabilă în cadrul stratului. După aceea, nu mai puteţi muta sau modifica proprietăţile stratului la aplicarea şablonului, dar puteţi plasa conţinut în strat.

Dreamweaver evidenţiază regiunile editabile astfel încât ele să fie uşor de găsit în fereastra Document. Evidenţierile vor fi vizibile în Dreamweaver, dar nu în browser. Pentru a vedea evidenţierile, selectaţi Invisible Elements din meniul View. Stabiliţi culoarea pentru evidenţiere în categoria Highlight a preferinţelor Dreamweaver. Regiunile editabile sunt evidenţiate doar când editaţi fişierul de şablon original. În paginile Web care au un şablon aplicat este valabil contrariul: regiunile blocate sunt evidenţiate.

196

Page 197: curs DPW.docx

Crearea unei regiuni editabile noiÎntr-un şablon puteţi crea regiuni opţional editabile. Selectaţi comanda Optional

Region (regiune opţională nouă) din submeniul Template Objects al meniului Insert. Numiţi noua regiune în caseta de dialog New Optional Region. O regiune opţională permite autorilor de pagini Web să decidă dacă au nevoie sau nu de conţinut în această regiune de pe pagina Web. Dacă regiunea nu este necesară, ei pot să o dezactiveze. O regiune editabilă apare cu un dreptunghi în jurul ei şi o bară care îi arată numele.Pentru a bloca o regiune care a fost anterior marcată ca fiind editabilă, selectaţi comanda Remove Template Markup (îndepărtarea marcării şablonului) din submeniul Templates al meniului Modify. Dacă aţi introdus informaţie în regiunile editabile anterioare din paginile Web, veţi pierde informaţia după blocarea regiunii şi actualizarea paginilor Web.

Aplicarea unui şablon la o pagină WebPuteţi aplica şabloane în trei moduri diferite:• Trageţi cu mouse-ul şablonul din categoria Template a panoului Asset şi aplicaţi-l

noii pagini Web.• Selectaţi un şablon din categoria Template a panoului Asset şi daţi clic pe butonul

Apply.• Selectaţi comanda New şi alegeţi secţiunea Templates. Din partea stângă a casetei

de dialog selectaţi site-ul care conţine şablonul, iar din partea dreaptă, selectaţi şablonul pe care doriţi să-l folosiţi în pagina dumneavoastră.

Modificarea unui şablonEditaţi şabloanele deschizându-le pentru a adăuga sau a schimba conţinutul lor.

Puteţi deschide şablonul din categoria Template a panoului Asset sau puteţi deschide şablonul din Site Manager. Editările asupra obiectelor blocate sunt aplicate tuturor paginilor Web care folosesc şablonul. Editările asupra obiectelor editabile nu au nici un efect în paginile Web care folosesc şablonul.

După ce editaţi şi salvaţi un şablon, Dreamweaver vă va întreba dacă doriţi să actualizaţi fişierele. Selectaţi fişierele şi apoi selectaţi butonul Update pentru a actualiza automat şabloanele legate. Caseta de dialog Update Pages afişează statistici asupra modului în care fişierele vor fi examinate, actualizate sau asupra fişierelor imposibil de actualizat. Pentru a vedea aceste statistici bifaţi caseta de validare Show Log. Executaţi clic pe butonul Close pentru a închide caseta de dialog Update Pages.

Mai puteţi actualiza manual fişierele legate la şabloane. Daţi clic-dreapta pe şablon în categoria Template a panoului Asset şi selectaţi fie comanda Update Current Page, pentru actualizarea paginii Web curente, fie comanda Update Site, pentru actualizarea întregului site Web. Comanda Update Current Page acţionează imediat şi nu apare nici o casetă de dialog. Când lansaţi comanda Update Site, apare caseta de dialog Update Pages. Daţi clic pe butonul Start pentru a actualiza toate şabloanele legate din site-ul dumneavoastră Web.

Utilizarea în şabloane a funcţiilor behavior şi a stilurilorÎn şabloane puteţi folosi funcţii behavior (comportamente) şi stiluri. Stilurile şi codul

JavaScript vor fi aplicate unei pagini Web bazate pe un şablon. Pentru a edita stiluri şi funcţii behavior (comportamente) într-o pagină Web, obiectele la care acestea sunt aplicate trebuie să fie editabile. Selectaţi un obiect cu un stil sau cu o funcţie behavior (un comportament) şi editaţi stilul sau funcţia behavior (comportamentul) în panoul CSS Style sau în panoul Behaviors.

Chiar dacă puteţi edita funcţii behavior şi stiluri într-o pagină Web legată la un şablon, puteţi aplica funcţii behavior şi stiluri doar obiectelor din şablonul original.

Tagul <body> este blocat când se aplică un şablon.Creaţi o pagină Web nouă cu ajutorul şablonului. Modificaţi orice obiect care trebuie

editat.Dacă nu aveţi o imagine în şablonul dumneavoastră, inseraţi un GIF mic transparent

(1x1 pixeli) undeva în pagina Web şi ataşaţi-i funcţia behavior (comportamentul).Utilizarea informaţiilor incluse dinamic de server şi adăugarea dateiInformaţiile incluse dinamic de server (Server-side Includes – SSI) vă pot adduce

economie de timp şi de effort în dezvoltarea unui site Web. Atunci când un utilizator vă accesează pagina Web, dumneavoastră creaţi fişiere care vă sunt inserate în pagina Web de către server. Serverul în care este păstrat site-ul Web prelucrează o comandă pe care aţi inserat-o în pagina dumneavoastră Web.

Utilizarea informaţiilor incluse dinamic de server permite serverului Web să plaseze dinamic informaţia în paginile dumneavoastră Web. Deoarece prelucrarea informaţiei incluse are loc pe server, nu puteţi vizualiza corespunzător fişierul fără a-l încărca de pe

197

Page 198: curs DPW.docx

server. Dreamweaver simulează aspectul final al paginii Web prin afişarea informaţiei în fereastra Document. De asemenea, informaţiile incluse dinamic de server se afişează când previzualizaţi pagina Web în browser. Unei pagini Web îi mai puteţi adăuga data ultimei modificări. Dreamweaver poate actualiza automat data ultimei modificări făcute în pagina dumneavoastră Web.

Ce este o informaţie inclusă dinamic de server?O informaţie inclusă dinamic de server (SSI) permite serverului să pună date externe

în pagina dumneavoastră Web. Datele puse în pagină pot fi şiruri de date sau conţinutul unui fişier. Dreamweaver nu se va amesteca în informaţiile incluse dinamic de server. Dreamweaver poate să simuleze prelucrarea unor directive de server.

Veţi examina utilizarea facilităţilor Dreamweaver pentru a include alte fişiere în pagina dumneavoastră Web. Informaţiile incluse dinamic de server pot să insereze şi informaţie pe careDreamweaver nu o poate afişa. Puteţi include copii ale multor tipuri de informaţii incluse dinamic de server în paginile dumneavoastră Web.

Iată cele cinci lucruri principale pe care le fac informaţiile incluse dinamic de server:• Inserează un alt fişier în pagina Web curentă. Aceasta este utilă la adăugarea

antetelor, subsolurilor de pagină sau bannerelor cu reclame. Dreamweaver simulează aspectul astfel încât dumneavoastră nu trebuie să verificaţi mereu cum va arăta pagina transferând-o şi vizualizând-o de pe server.

• Transmite înapoi informaţia de la server pentru a afişa o dată, adresa IP a utilizatorului, URL-ul paginii Web anterioare sau alte informaţii disponibile pe server.

• Configurează informaţia într-o altă informaţie inclusă dinamic de server. De exemplu, adaugă o informaţie inclusă dinamic de server înaintea alteia pentru a face să apară o dată într-un anumit format.

• Execută un script CGI. De exemplu, dacă folosiţi o informaţie inclusă dinamic de server pentru a adăuga butoane de salt înainte sau înapoi la pagina Web, aceasta apelează un script CGI pentru a găsi care este hiperlegătura la pagina următoare şi la cea anterioară.

• Afişează dimensiunea fişierului paginii Web curente folosind informaţia de pe server. Pentru a face să funcţioneze informaţiile incluse dinamic de server, va trebui să cunoaşteţi puţin serverul dumneavoastră. Mai întâi, directorul în care veţi pune pagina Web trebuie să fie configurat pentru a permite informaţii incluse dinamic. Trebuie apoi să cunoaşteţi ce extensie de fişier recunoaşte serverul dumneavoastră pentru un eventual conţinut de informaţii incluse dinamic. Administratorul dumneavoastră de reţea sau de Web vă poate da această informaţie sau poate să o configureze pentru dumneavoastră.Consultaţi-vă cu administratorul dumneavoastră Web înainte de a proiecta informaţii incluse dinamic de server în site-ul Web. Unele conturi pur şi simplu nu permit utilizarea informaţiilor incluse dinamic.

Serverul trebuie să ştie în ce fişiere să caute informaţiile incluse dinamic. Dacă serverul dumneavoastră este configurat să caute informaţii incluse dinamic în toate fişierele, el aduce o încărcare mare a prelucrării şi poate încetini întregul server. Adesea, serverele sunt configurate să caute informaţii incluse dinamic doar în fişiere care se termină cu .shtml, .shtm, .stm sau alte extensii care spun serverului că în pagină este prezentă o informaţie inclusă dinamic. Serverul analizează numai acele pagini, căutând informaţii incluse dinamic şi prelucrându-le.

Informaţiile incluse dinamic de server de mare întindere, care necesită o prelucrare a codului, pot duce la un consum de resurse ale serverului Web. Dacă site-ul dumneavoastră rezidă pe un server cu mult trafic, informaţiile incluse dinamic pot creşte timpul necesar serverului pentru a transmite pagina utilizatorului.

Din aceleaşi motive pentru care aţi folosi elemente de bibliotecă în Dreamweaver, aţi putea folosi şi informaţiile incluse dinamic de server. Puteţi să actualizaţi un fişier inclus şi să modificaţi fiecare pagină din site-ul dumneavoastră la care face acesta trimitere. Dreamweaverinserează conţinutul elementului de bibliotecă în pagina Web, iar serverul inserează conţinutulfişierului la care se face referire într-o informaţie inclusă dinamic de server când este solicitat fişierul.

Inserarea unei informaţii incluse dinamic de serverInformaţiile incluse dinamic de server arată ca şi comentariile HTML. Puteţi insera un

comentariu în pagina dumneavoastră Web selectând obiectul Comment din secţiunea Common a barei de inserare sau comanda Comment meniul Insert. Apare caseta de dialog

198

Page 199: curs DPW.docx

Comment. Un comentariu Dreamweaver apare ca un element invizibil. Puteţi edita un comentariu în fereastra de inspectare Property. Dacă selectaţi editorul Quick Tag din fereastra de inspectare Property având selectat un comentariu, puteţi vedea codul HTML al comentariului.

Transformarea unui comentariu într-o informaţie inclusă dinamic de serverO informaţie inclusă dinamic de server arată ca un comentariu. Pentru informaţia

inclusă dinamic există un simbol ţ înainte de cod. Serverul înlocuieşte informaţia inclusă dinamic cu textul corespunzător (sau cu orice altceva inserează informaţia inclusă dinamic).

Există câteva comenzi diferite pentru informaţia inclusă dinamic, ce pot fi puse în pagina Webţecho var=”HTTP_REFERER” Afişează URL-ul paginii Web din care tocmai aţi venit.ţecho var=”DATE_LOCAL” Afişează data şi ora.ţecho var=”REMOTE_ADDR” Afişează IP-ul utilizatorului.ţecho var=”DOCUMENT_NAME” Afişează numele paginii Web curente.ţecho var=”HTTP_USER_AGENT” Afişează browserul utilizatorului şi sistemul de operare.ţfsize file=”my_file.shtml” Afişează dimensiunea fişierului.ţflastmod file=”my_file.shtml”Afişează data ultimei modificări a fişierului.

Dacă serverul dumneavoastră recunoaşte aceste comenzi, puteţi să le inseraţi într-un câmp de comentariu. Salvaţi fişierul (nu uitaţi, ar trebui să aibă o extensie specială de fişier), transferaţi pagina Web pe serverul de la distanţă şi apoi vizualizaţi pagina Web.

Includerea unui fişierPuteţi insera un comentariu pentru a adăuga orice informaţie inclusă dinamic.

Dreamweaver are însă un obiect specializat care vă permite să inseraţi un fişier inclus, un tip cunoscut de informaţie inclusă dinamic. Obiectul Server-Side Include (informaţii incluse dinamic de server) din Dreamweaver inserează o referinţă la un fişier extern inclus în pagina dumneavoastră Web.

Mai întâi trebuie să creaţi fişierul extern care va fi inclus în pagina dumneavoastră Web.

Fişierul inclus este un fragment de cod HTML, nu o pagină întreagă.Pentru a crea un fişier extern şi a insera conţinutul său într-o pagină Web printr-o

informaţie inclusă dinamic de server:1. Deschideţi un editor de texte, precum Notepad din Windows şi introduceţi un text

în el.2. Salvaţi fişierul de text în acelaşi director în care va rezida pagina dumneavoastră

Web. Puteţi da fişierului orice extensie; puteţi folosi .txt, .html sau .htm.3. Deschideţi o pagină Web în Dreamweaver.4. Puneţi punctul de inserare acolo unde doriţi să apară textul din fişier.5. Selectaţi obiectul Server-Side Include din panoul Script al barei Insert sau selectaţi

comandaServer-Side Include din meniul Insert.

6. Apare caseta de dialog Select File. Selectaţi fişierul de text pe care l-aţi creat mai devreme.Textul pe care l-aţi adăugat la fişierul separat apare acum în pagina dumneavoastră Web.

Fereastra de inspectare Property afişează numele fişierului cu informaţia inclusă dinamic de server, tipul de fişier şi un buton de editare. Observaţi că atunci când conţinutul fişierului extern este selectat, el nu poate fi editat în pagina Web.

Există două căi de a introduce adresa unui fişier extern folosit ca o informaţie inclusă dinamic. Selectaţi opţiunea Virtual sau opţiunea File din fereastra de inspectare Property, de lângă Type. Selectaţi File pentru a crea o adresă care este relativă la cea a fişierului current (similar cu adresarea relativă a documentului). Selectaţi Virtual pentru a adresa fişierul relativ la rădăcina serverului dumneavoastră Web (similar cu adresarea relativă la rădăcina site-ului).

Dacă folosiţi adresarea virtuală în informaţia inclusă dinamic, va trebui să ştiţi ce director este configurat ca rădăcină a site-ului Web pe server. Va mai trebui să obţineţi permisiunea corespunzătoare pentru a salva fişierul acolo.

Spre deosebire de elementele de bibliotecă, Dreamweaver nu inserează de fapt în pagina Web codul HTML pentru informaţia inclusă dinamic. Dacă vă uitaţi la codul HTML, veţi vedea un tag care arată aşa: <!-- ţinclude file=”header.txt” -->

Editarea fişierului de informaţii incluse dinamic de serverEditaţi fişierul dumneavoastră inclus chiar în Dreamweaver. Având selectată

informaţia inclusă dinamic, daţi clic pe butonul Edit în fereastra de inspectare Property.

199

Page 200: curs DPW.docx

Dreamweaver deschide conţinutul fişierului inclus într-o fereastră Document separată. Când salvaţi fişierul, modificările dumneavoastră vor fi reflectate în toate paginile Web care fac referire la fişier. Deoarece fişierul nu are nevoie de atribute de pagină, cum ar fi culoarea de fundal, culorile legăturilor sau imaginea de fundal, ele nu vor apărea când editaţi fişierul extern inclus.

În fişierul de text puteţi include taguri HTML, care să conţină referinţe la imagini, şi orice alt obiect pe care poate să-l conţină o pagină Web.

Adăugarea datei ultimei modificăriExistă două modalităţi prin care puteţi adăuga paginii Web data ultimei modificări: o

informaţie inclusă dinamic şi un obiect Date din Dreamweaver. O informaţie inclusă dynamic preia data ultimei modificări din atributele de fişier ale paginii. Obiectul Date din Dreamweaver actualizează pur şi simplu data (şi ora) de fiecare dată când editaţi şi salvaţi pagina Web în Dreamweaver.

Când selectaţi obiectul Date din secţiunea Common a barei Insert sau comanda Date din meniul Insert apare caseta de dialog Insert Date (inserarea datei). Selectaţi dintre diversele formate pentru zi, dată şi oră. Dacă selectaţi caseta de validare Update Automatically on Save (actualizare automată la salvare), Dreamweaver va actualiza data de fiecare dată când salvaţi pagina Web. Daţi clic pe OK pentru a insera data.

Editaţi formatul unei date pe care aţi inserat-o într-o pagină Web selectând mai întâi obiectul Date din fereastra Document şi apoi dând clic pe butonul Edit Date Format din fereastra de inspectare Property. După ce aţi stabilit actualizarea automată, nu mai puteţi să o retrageţi; va trebui fie să ştergeţi data şi să inseraţi una nouă, fie să editaţi codul HTML.

Modulul VI PHP şi My SQL

1. Introducere în PHP şi My SQLPHP este unul dintre cele mai populare limbaje de scripting pe parte de server.

Pentru multă lume, principala raţiune de a învăţa un limbaj precum PHP ar fi interacţiunea pe care o oferă cu bazele de date. Este, de fapt, surprinzător cât de utilă poate fi o bază de date, mai ales atunci când poate fi folosită într-un site Web. Sunt foarte multe lucruri care se pot face într-un astfel de caz, de la afişarea unor simple liste şi până la producerea integrală a paginilor Web dintr-o bază de date. Câteva exemple cu PHP şi MySQL, folosite împreună, sunt:

Schimbarea-rotaţia banner-elor. Pentru a realiza schimbarea pe ecran a imaginilor la diferitele vizitări ale unei pagini şi a asigura astfel un interes mai mare al vizitatorilor, se poate folosi un script PHP care deschide o bază de date şi extrage aleator o imagine sau un set de imagini, pentru a o(a-l) include într-un set de pagini Web. Scriptul PHP va contoriza de asemeni numărul de vizualizări ale banner-ului, putând, cu modificări minore, să urmărească chiar şi numărul de click-uri. Pentru a adăuga, schimba sau edita bannerele, tot ce avem de făcut este să schimbăm baza de date iar scriptul va încărca banner-ul corect în toate paginile site-ului Web.

Forumurile Web. Sute de forumuri de dezbatere sunt acum realizate şi rulează în PHP şi MySQL. Acestea s-au dovedit mult mai eficiente decât alte sisteme, creând câte o pagină pentru fiecare mesaj şi oferind o largă varietate de opţiuni. Toate paginile forumului pot fi actualizate prin schimbarea unui script PHP.

Bazele de Date. Un astfel de exemplu (edificator) îl oferă site-urile care dau toate informaţiile dintr-o bază de date.

Site-urile Web. Când avem un site de mari dimensiuni - cu multe pagini, şi dorim să modificăm aspectul general sau să schimbăm proiectul, chestiune care ar cere foarte mult timp pentru aducere la zi şi încărcare. Cu PHP şi MySQL întregul site Web se poate reduce la unul sau două scripturi PHP care să acceseze o bază de date MySQL pentru a obţine informaţiile pentru paginile Web. Pentru a actualiza sau a modifica proiectul centrului Web nu trebuie să schimbăm decât o pagină.

Sunt necesare trei componente pentru a putea rula scripturi PHP care să acceseze baze de date cu MySQL.

1. Un server Web. Acesta poate fi sau pe calculatorul personal sau pe o „gazdă” Web. Oricare pachet - oricare tip de server Web este acceptat şi va lucra cu PHP şi MySQL, dar cel mai recomandat este Apache, care e public şi gratis.

200

Page 201: curs DPW.docx

2. PHP trebuie să fie instalat pe server. Dacă nu este deja instalat, puteţi să o faceţi sau să apelaţi la administratorul serverului Web, în acest sens. Pachetul de instalare poate fi descărcat - preluat de la http://PHP.net şi este deasemeni public - gratuit.

3. MySQL. Acesta este de fapt pachetul de programe pentru gestiunea bazelor de date. Puteţi folosi de asemeni multe alte sisteme de baze de date (SQL, Oracle etc. ). Şi pachetul MySQL este public, gratuit, putând fi preluat din pagina oficială a firmei MySQL.

2. Instalarea şi configurarea PHP şi MySQL cu serverele web Apache sub sistemul de operare Windows

Pentru instalarea PHP aveți nevoie de un server web, instalat local, cum ar fi Apache HTTP Server.

2.1. Instalare MySQL 5Pentru început, puteți descărca kitul de instalare Windows Essentials de la

http://dev.mysql.com/downloads/mysql. Alegeți tipul de instalare Typical, iar la sfârșitul instalării optați pentru configurarea

imediată a serverului MySQL (opțiunea Configure the MySQL Server now trebuie să fie bifată).

Alegeți Standard Configuration, apoi debifați opțiunea Install As Windows Service în caz că nu doriți ca serverul MySQL să pornească ca serviciu Windows (dacăalegeți să debifați această opțiunea, va trebui să porniți manual serverul, rulând c:\Program Files\MySQL\MySQL Server 5. 0\bin\mysqld. exe pentru Windows 95/98 sau c:\Program Files\MySQL\MySQL Server 5. 0\bin\mysqld-nt. exe pentru Windows NT/2000/XP/Vista/7.

Pe o platforma de test, pe care o utilizați numai dumneavoastră, puteți lăsa pentru numele de utilizator sau pentru parola câte un șir gol. Mai târziu, va trebui să folosiți aceste date, la orice conectare la serverul MySQL.

Pentru a lăsa numele de utilizator și parola ca șiruri goale, debifați opțiunea Modify Security Settings, în acest stadiu. În acest fel, numele de utilizator va fi setat ca fiind "root". La sfârșit, apăsați Execute pentru a termina procesul de configurare.

2.2. Instalarea şi configurarea serverului ApacheAveți nevoie de kitul pentru serverul Apache, pachetul PHP (disponibil sub forma de

installer sau arhivă), serverul MySQL și un browser web. Informațiile pentru procurarea pachetelor de instalare sunt oferite treptat.

Apache HTTP Server este o soluție open-source (sursa liberă), dezvoltată de Apache Software Foundation care este folosită de peste 60% dintre siturile prezente pe web, fiind disponibil atât pentru Windows, cât și pentru Linux. Puteți descărca ultima versiune de la http://httpd.apache.org/download.cgi .

Apache 2.0.63, 2.3.15 sau mai nou este compatibil cu versiuni mai noi decât PHP 4.3.0 și respectiv PHP 5.

În timpul instalării, trebuie să specificați Network Domain și Server Name ca fiind „localhost”, iar la adresa administratorului puteți introduce adresa dumneavoastră de e-mail, deși nu are vreo importanță în utilizarea ulterioară a produsului (fereastra este ilustrată mai jos). Este instalat și Apache Monitor cu care puteți porni sau opri serverul web Apache.

Pentru a testa dacă server-ul a fost instalat corect, navigați cu browserul dumneavoastră web la adresa http://localhost.

Aveți capturi de ecran cu pagina încărcată în cazul în care instalarea a fost efectuată cu

201

Page 202: curs DPW.docx

succes. Pentru a încărca pagini ce pot fi accesate local de către serverul web, copiați-le în directorul:c:\Program Files\Apache Software Foundation\Apache2. 2 \htdocs\ pentru Apache

2.3. Instalarea PHP pentru Apache HTTP ServerÎn cazul în care ați descărcat arhiva ce conține fișierele PHP, creați un director \php

pe discul pe care este instalat sistemul de operare și serverul web Apache și dezarhivați pachetul acolo. Vom presupune de aici înainte ca discul respectiv este c:. Aceasta este o instalare tipică pentru PHP ca modul Apache.

1) Navigați la c:\php\ și redenumiți fișierul php.ini-dist în php.ini. Deschideți acest fișier în Notepad (pentru a face aceasta, cel mai bine este să deschideți o fereastră Notepad, apoi trageți de iconița fișierului, aflându-vă într-un file manager - Windows Explorer de exemplu - asupra ferestrei deschise), sau într-un alt editor text și căutați textul doc_root = pe care va trebui să-l înlocuiți cu doc_root = "C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\". Apoi căutați extension_dir = și înlocuiți cu extension_dir = "c:\php".

2) Copiați fișierele php.ini și php4ts.dll (sau php5ts.dll în caz ca ați ales PHP 5) din c:\php\ în c:\windows\system32\ (pentru Windows 2000/XP) sau c:\windows\system\ (pentru Windows 98/Me).

3) Acum, pentru a configura și serverul web Apache să lucreze cu PHP, mergeți la c:\Program Files\Apache Software Foundation\Apache2.2\conf\ (sau locația corespunzătoare distribuției instalate) și deschideți fișierul httpd.conf cu Notepad (sau alt editor text). Parcurgeți treptat instrucțiunile de mai jos și adăugați la sfârșitul fișierului liniile ce corespund situației dumneavoastră.

Încărcarea modulului PHP, pentru Apache 2 și PHP 4LoadModule php4_module c:/php/sapi/php4apache2.dll

Încărcarea modulului PHP, pentru Apache 2 şi PHP 5Pentru acest caz, există o cunoscută eroare de compatibilitate între Apache 2. 0.x şi

Apache 2.2.x, legată de interfața API. Pentru versiunile Apache 2. 0. x puteți utiliza cu succes directiva de mai jos. Pentru

2.2.x, trebuie să folosiți fișierul php5apache2_2.dll, disponibil în distribuția PHP 5. 2. x, aflată în stare de dezvoltare și testare.

Vizitați PHP Snapshots și descărcați ultimul pachet de tip (5.2.x-dev), din categoria Win32 Packages. Apoi dezarhivați într-un director separat conținutul pachetului și copiați fișierul menționat anterior la c:\php\. Alegeți una din directivele de mai jos:

o #pentru Apache 2. 0. xLoadModule php5_module c:/php/php5apache2.dll

o #pentru Apache 2. 2. xLoadModule php5_module c:/php/php5apache2_2.dll

Încărcarea modulului PHP, pentru Apache 1. 3. x şi PHP 4LoadModule php4_module c:/php/sapi/php4apache.dll

Încărcarea modulului PHP, pentru Apache 1. 3. x şi PHP 5LoadModule php5_module c:/php/sapi/php5apache.dll

Doar dacăați ales Apache 1. 3. x, adăugați și următoarea linie:AddModule mod_php4 c

Adăugarea suportului pentru fișiere de tip .php. AddType application/x-httpd-php . php

Adăugarea suportului pentru fișiere de tip .php3. AddType application/x-httpd-php . php3

Adăugarea suportului pentru fișiere de tip .phtml. AddType application/x-httpd-php . phtml

Pentru a configura calea către fișierul de configurare PHP (php.ini), adăugați următoarea linie (bineînțeles, înlocuiți cu calea corespunzătoare instalării dumneavoastră):

PHPIniDir c:\php\Pana acum trebuie să aveți trei linii pentru server-ele Apache 2 şi respectiv patru linii

pentru server-ele Apache 1. 3. X adăugate sfârșitul fișierului httpd.conf. Exemplu (Apache 1. 3. x şi PHP5):

LoadModule php5_module c:/php/sapi/php5apache. dlAddModule mod_php4. cAddType application/x-httpd-php . phpPHPIniDir c:\php\

202

Page 203: curs DPW.docx

Nota: Liniile precedate de caracterul "#" se numesc comentarii, acestea nu sunt interpretate de Apache și le puteți șterge.

4) Căutați linia DirectoryIndex index.html și modificați-o în DirectoryIndex index.html index.php. Astfel, indicați că pagina de index pe care o va deschide Apache când este accesat un director să fie ori index.html ori index.php, în aceasta ordine. După ce ați făcut acest lucru, restartați serverul Apache.

Pentru a testa dacăinstalarea PHP a fost realizată cu succes, creați următorul fișier PHP în Notepad:

<?phpphpinfo();?>Salvați cu numele index.php și copiați-l în directorul c:\Program Files\Apache

Software Foundation\Apache2. 2\htdocs. Deschideți pagina web http://localhost. Dacă se vor afișa informații despre server,

instalarea a fost finalizată cu succes. În alte cazuri, fișierul index.php poate fi propus pentru download, ceea ce înseamnă ca serverul web nu recunoaște extensia ".php". În acest caz asigurați-vă că pașii anteriori au fost parcurși ca atare (că serverul web, Apache, este pornit, ați copiat și editat fișierele prezentate mai sus etc. ).

2.3.1. Precizări pentru Apache HTTP ServerEste nevoie să editați php.ini pentru a activa extensia pentru MySQL. Deschideți acest fișier cu Notepad (în mod normal, fișierele de tip ini sunt asociate cu

Notepad) și căutați linia ;extension=php_mysql.dll, și ștergeți virgula din fața ei. Salvați fișierul și restartați serverul web Apache. În acest moment, suportul pentru

funcțiile MySQL este activat. Apache HTTP Server, PHP și MySQL sunt soluții gratuite open-source (sursă liberă)

protejate de GNU General Public License. Consultați licența pentru fiecare produs în parte dacă aveți nelămuriri cu privire la

termenii de utilizare. Documentația completă (inclusiv instrucțiuni de configurare pentru alte tipuri de

servere, note de compatibilitate între versiuni etc. ) o puteți găsi pe siturile producătorilor. Apache HTTP Server: http://httpd.apache.org PHP: http://www.php.netMySQL: http://www.mysql.com

2.4. Noţiuni de securitate. Securizarea conexiunii la MySQL Dacă serverul MySQL este instalat local pe calculatorul dumneavoastră, folosiţi

aplicaţii de tipul screen-saver sau mecanisme de blocare cu parolă a ecranului. Dacă serverul MySQL este instalat pe un server din afara reţelei dumneavoastră,

securizarea conexiunii ar trebui să fie prima prioritate. Ca orice altă transmisiune de date prin Internet, şi aceasta ar putea fi interceptată. Dacă transmisiunea este necriptată, persoana care o interceptează o poate reconstitui şi folosi. Să presupunem că transmisia necriptată conţine informaţia de autentificare pentru serverul MySQL - un individ răuvoitor are acum acces la baza dumneavoastră de date şi poate întreprinde diferite acţiuni folosind acreditările dumneavoastră.

O metodă sigură de a preveni astfel de întâmplări este să vă conectaţi la serverul dumneavoastră MySQL folosind o conexiune securizată. În loc să vă conectaţi la calculatorul aflat la distanţă folosind clasicul Telnet, conectaţi-vă prin intermediul SSH. SSH arată şi se comportă la fel ca Telnet, dar toate transmisiunile de la şi către calculatorul aflat la distanţă sunt criptate. De asemenea dacă folosiţi o interfaţă de administrare bazată pe tehnologie Web, cum este cazul phpMyAdmin sau orice alte instrumente puse la dispoziţie de furnizorul dumneavoastră de servicii Internet, aveţi grijă să le accesaţi prin intermediul unei conexiuni HTTP securizate.

2.5. Introducere în sistemul de privilegii al MySQL Sistemul de privilegii al MySQL este întotdeauna pornit. Prima dată când încercaţi să

vă conectaţi şi ulterior pentru orice acţiune întreprinsă, serverul MySQL verifică următoarele trei aspecte:

de unde accesaţi serverul (host-ul dumneavoastră); cine sunteţi sau pretindeţi că aţi fi (utilizatorul şi parola); ce operaţii aveţi dreptul să întreprindeţi (privilegiile dumneavoastră de

comandă). Toate aceste informaţii sunt stocate într-o bază de date intitulată mysql, care se

creează automat în momentul instalării. În această bază de date întâlniţi mai multe tabele:

203

Page 204: curs DPW.docx

columns_priv - conţine informaţiile referitoare la privilegiile unui anumit utilizator pentru anumite câmpuri dintr-o tabelă;

db - conţine informaţiile referitoare la permisiunile pentru toate bazele de date de pe server;

func - conţine funcţiile create de utilizator; host - conţine lista tuturor staţiilor (host-urilor) de unde sistemul poate accepta

conexiuni; tables_priv - conţine informaţiile cu privire la privilegiile unui anumit utilizator pe

tabele specifice dintr-o bază de date; user - conţine informaţiile referitoare la comenzile pe care un anumit utilizator are

dreptul să le execute sau nu.

2.6. Procesul de autentificare în doi paşi Serverul MySQL verifică staţia (host-ul) de unde vă conectaţi, precum şi perechea utilizator – parolă pe care aţi furnizat-o. Dacă staţia dumneavoastră este autorizată să se conecteze, parola corespunde utilizatorului şi utilizatorul este cel asociat staţiei respective, serverul MySQL trece la pasul următor.

Pentru orice comandă SQL pe care încercaţi să o rulaţi, serverul MySQL verifică dacă sunteţi autorizat să executaţi respectiva comandă asupra bazei de date, tabelei sau câmpului vizat.

Dacă sunt întâlnite erori la pasul 1, veţi vedea un mesaj care descrie respectivele erori şi nu veţi putea trece la pasul 2.

De exemplu: să presupunem că vă conectaţi la serverul MySQL folosind numele de utilizator joe şi parola abc123 şi că doriţi să accesaţi o bază de date intitulată myDB. Veţi primi un mesaj de eroare dacă oricare dintre aceste variabile de conectare sunt incorecte, din cauza unuia dintre următoarele motive:

parola este incorectă; utilizatorul joe nu există; utilizatorul joe nu are dreptul de a se conecta de pe staţia localhost; utilizatorul joe are dreptul de a se conecta de pe staţia localhost, dar nu are dreptul

să utilizeze baza de date myDB. Există şi posibilitatea să vedeţi o eroare precum cea de mai jos:

# /usr/local/mysql/bin/mysql -h localhost -u joe -pabc123 test Error 1045: Access denied for user: 'joe@localhost' (Usingpassword: YES)2.7. Lucrul cu privilegiile acordate utilizatorilor În cele mai multe cazuri, atunci când accesaţi serverul MySQL prin intermediul

furnizorului dumneavoastră de servicii Internet, veţi avea la dispoziţie doar un utilizator şi o singura bază de date. Iniţial, acel utilizator va avea acces la toate tabelele din acea bază de date şi va fi acreditat să efectueze orice acţiune asupra ei. În acest caz, responsabilitatea de a crea prin programare o aplicaţie sigură vă aparţine dumneavoastră ca dezvoltator.

Dacă sunteţi administratorul serverului propriu de baze de date sau sunteţi abilitat să adăugaţi oricâte baze de date şi utilizatori doriţi, precum şi să modificaţi drepturile şi privilegiile de acces ale utilizatorilor dumneavoastră, atunci următoarele secţiuni vă vor oferi informaţii foarte importante despre aceşti paşi.

2.7.1. Adăugarea utilizatorilor Administrarea serverului dumneavoastră cu ajutorul unui instrument dezvoltat de o

terţă parte v-ar putea oferi metode foarte simple de adăugare a utilizatorilor, cu ajutorul unor procese de tipul utilitarelor de asistenţă sau a unei interfeţe grafice specifice. Totuşi, adăugarea de utilizatori cu ajutorul utilitarului MySQL monitor nu este deloc dificilă.

Cea mai simplă metodă de a adăuga un utilizator nou este comanda GRANT. Conectându-vă la serverul MySQL ca utilizator root puteţi să tastaţi această comandă care vă permite adăugarea de noi utilizatori. Cealaltă metodă este utilizarea comenzii INSERT asupra tuturor tabelelor relevante din baza de date mysql, caz în care este necesară o cunoaştere temeinică a câmpurilor şi tabelelor în care sunt stocate permisiunile. Metoda comenzilor INSERT succesive produce acelaşi rezultat dar este puţin mai laborioasă şi mai complicată decât comanda clasică GRANT. Sintaxa simplă a comenzii GRANT este următoarea: GRANT privilegii ON nume_baza_de_date.nume_tabela TO nume_utilizator@host IDENTIFIED BY "parola";

Privilegiile pe care le puteţi oferi utilizatorilor prin intermediul comenzii GRANT sunt următoarele:

204

Page 205: curs DPW.docx

ALL - conferă utilizatorului toate privilegiile de mai jos; ALTER - utilizatorii pot modifica tabele, coloane şi indexuri; CREATE - utilizatorii pot crea baze de date, tabele şi indexuri noi; DELETE- utilizatorii pot şterge înregistrări din tabele; DROP- utilizatorii pot muta tabele şi baze de date; FILE - utilizatorii pot citi şi scrie fişiere; procedură folosită la importul şi exportul

(dump) datelor din baza de date; INDEX- utilizatorii pot adăuga sau şterge indexuri; INSERT- utilizatorii pot introduce date noi în tabele; PROCESS - utilizatorii pot vizualiza şi interacţiona cu procesele de sistem, oprindu-le,

resetându-le sau pornindu-le; ca măsură de securitate, doar administratorii şi utilizatorii de mare încredere ar trebui să poată beneficia de această facilitate;

REFERENCES - opţiunea nu este utilizată în prezent de către serverul MySQL; există totuşi în tabelul user o coloană rezervată pentru privilegii privind referinţele;

RELOAD - utilizatorii pot comanda resetarea serverului (FLUSH); opţiunea este recomandată numai administratorilor şi utilizatorilor de mare încredere;

SELECT - utilizatorii pot selecta şi vizualiza înregistrări din baza de date; SHUTDOWN - utilizatorii pot opri serverul MySQL; opţiune recomandată numai

administratorilor şi utilizatorilor de mare încredere; UPDATE - utilizatorii pot modifica şi actualiza datele din tabelele bazei de date; USAGE - utilizatorii se pot conecta la serverul MySQL, dar nu au nici un alt fel de

privilegiu. Dacă, de exemplu, doriţi să creaţi un utilizator numit john căruia să îi fie asociată parola 99hjc şi care să aibă privilegiile de a selecta (SELECT) şi introduce (INSERT) date în toate tabelele din baza de date numită myDB şi doriţi, de asemenea, ca acest utilizator să se poată conecta de la orice staţie, ar trebui să scrieţi o comandă ca cea de mai jos: GRANT SELECT, INSERT ON myDB.* TO john@"%" IDENTIFIED BY "99hjc";Observaţi utilizarea celor două caractere generale „joker” * şi %. Aceste caractere

generale sunt utilizate pentru a înlocui toate valorile posibile. În acest exemplu * înlocuieşte întreaga lista de tabele din baza de date myDB, iar % înlocuieşte lista tuturor numelor de staţii cunoscute în întreaga lume – listă, de altfel, extrem de lungă.

Iată un alt exemplu de adăugare a unui utilizator pe un server MySQL folosind comanda GRANT, de această dată pentru a adăuga un utilizator numit jane cu parola 45sdg11, care să aibă toate (ALL) privilegiile pentru o tabelă numită employees din baza de date numită myCompany. Acest nou utilizator se va putea conecta doar de la o staţie predefinită:

GRANT ALL ON myCompany.employees TO [email protected] IDENTIFIED BY "45sdg11";

În cazul în care ştiţi că staţia janescomputer.company.com are adresa de IP 63.124.45.2, puteţi înlocui această adresă în porţiunea din comanda GRANT dedicată numelui staţiei (hostname), la fel ca în exemplul de mai jos:

GRANT ALL ON myCompany.employees TO jane@'63.124.45.2' IDENTIFIED BY "45sdg11";

Trebuie avut în vedere un amănunt foarte important cu privire la adăugarea de utilizatori: folosiţi întotdeauna parole şi aveţi grijă ca aceste parole să îndeplinească cerinţele generale de securitate! Serverul MySQL vă permite să adăugaţi utilizatori fără a le defini o parolă, dar acest lucru lasă uşa deschisă acelor indivizi rău intenţionaţi care pot deduce un nume de utilizator din sistemul dumneavoastră care are toate privilegiile asociate.

În cazul în care folosiţi comanda GRANT pentru a adăuga utilizatori, modificările vor intra imediat în vigoare. Pentru a vă asigura complet de acest lucru, puteţi utiliza comanda FLUSH PRIVILEGES din interfaţa MySQL monitor, care duce la reîncărcarea tabelei de privilegii.

2.7.2. Revocarea privilegiilor Revocarea privilegiilor este la fel de simplă ca şi adăugarea lor; singura deosebire

este că în locul comenzii GRANT vom utiliza comanda REVOKE. Sintaxa comenzii REVOKE este următoarea:

REVOKE privileges ON nume_baza_de_date.nume_tabela FROM nume_utilizator@nume_host; De asemenea, în acelaşi mod în care puteţi conferi privilegii utilizând comanda

INSERT la nivelul tabelelor de sistem, le puteţi şi revoca folosind comanda DELETE pentru a şterge înregistrările aferente din tabelele de sistem din baza de date mysql. Totuşi, această

205

Page 206: curs DPW.docx

metodă presupune o foarte bună cunoaştere a tabelelor şi câmpurilor aferente fiecărui privilegiu, de aceea recomandăm utilizarea comenzii REVOKE, aceasta oferind o metodă mult mai uşoară şi mai sigură de revocare a privilegiilor.

Pentru a revoca abilitatea utilizatorului john de a introduce înregistrări noi în baza de date myDB, ar trebui să utilizaţi comanda REVOKE, aşa cum vă este ea prezentată în exemplul de mai jos:

REVOKE INSERT ON myDB.* FROM john@"%";Modificările făcute cu ajutorul comenzii REVOKE intră în vigoare imediat, dar pentru

ca serverul să afle despre aceste modificări trebuie să utilizaţi în interfaţa MySQL monitor comanda FLUSH PRIVILEGES. Serviciul de server MySQL nu ar trebui să ruleze sub utilizatorul root. De asemenea, utilizatorii înregistraţi pe serverul MySQL ar trebui să aibă întotdeauna o parolă, iar privilegiile lor de acces ar trebui să fie întotdeauna foarte bine definite.

MySQL foloseşte tabelele de privilegii într-un proces în doi paşi pentru fiecare solicitare făcută. MySQL trebuie să ştie cine sunteţi şi de unde vă conectaţi şi fiecare porţiune de informaţie pe care o oferiţi în cadrul acestui proces trebuie să se corespundă cu informaţiile stocate în baza de date mysql, în tabelele de privilegii. De asemenea, utilizatorul trebuie să beneficieze de permisiuni explicite pentru a executa un anumit tip de comandă.

3. Primii paşi cu PHPPe scurt, ce este PHP? Ca idee generală, PHP reprezintă un limbaj ce permite

modificarea paginilor web înainte ca acestea să fie transmise de server către browserele utilizatorilor. PHP poate insera text într-un fișier HTML deja definit, poate defini un fișier HTML de la zero, poate să afișeze o imagine sau să redirecționeze utilizatorul către altă pagină. În cadrul acestui proces, PHP poate consulta baze de date, fișiere externe sau orice alta resursă, poate trimite email-uri sau executa comenzi ale sistemului de operare.

Modul în care PHP modifica/definește o pagină ce va fi afișată de browser este prin instrucțiunile scrise de programator și delimitate de etichetele <?php…?>. Astfel, orice se află între aceste tag-uri va fi executat de interpretorul PHP și înlocuit cu rezultatul execuției. Ce este în afara lor rămâne neschimbat și este transmis către browser. Spre exemplu, avem o pagina ca mai jos.<html><body>Azi e <?php print date( 'd.m.Y' ); ?></body></html>

Rezultatul va fi o pagina HTML ce va conține cuvintele "Azi e" și rezultatul codului PHP (în cazul acesta - data curentă). Codul HTML final, transmis de server în urma procesării PHP este următorul:<html><body>Azi e 30.04.2010</body></html>

Codul PHP nu trebuie să fie neapărat intercalat în pagina HTML. Secvența de mai jos produce o pagina similara celei de mai sus (în acest caz PHP produce o pagina HTML de la zero).<?phpprint '<html><body>';print 'Azi e' . date( 'd.m.Y' );print '</body></html>';?>

Rezultatul unui script PHP este de obicei text simplu care, de cele mai multe ori, este interpretat ca fiind cod HTML. Cu alte cuvinte, în majoritatea cazurilor PHP returnează o pagină ce va fi afișată în browser. La început, acest lucru poate genera confuzii, întrucât sursa HTML este diferită de ceea ce se afișează efectiv în browser.

Spre exemplu, fie următoarea secvența de cod:<?phpprint "Salut";print "Acesta este un script simplu";?>

206

Page 207: curs DPW.docx

Probabil v-ați aștepta ca rezultatul să fie un text afișat pe 2 linii. Salvând aceasta secvență într-un fișier PHP ăi accesându-l prin intermediul unui web-server, veți observa că rezultatul este următorul:

Salut Acesta este un script simpluDeși este confuz, rezultatul este corect. Codul PHP afișează doar caracterele care i-au

fost indicate. Sfârșitul de linie reprezintă un caracter separat, neprintabil, dar care controlează cum apare textul pe ecran. În cazul nostru, nu s-a transmis acest caracter (numit și new-line) și prin urmare PHP nu l-a afișat.

Sa rescriem exemplul de mai sus pentru a se afișa și caracterul "sfârșit de linie"<?phpprint "Salut";print "\n"; # se afișează caracterul "new-line" care determina trecerea la un rând nou# rândul nou va fi afișat în textul trimis către browserprint "Acesta este un script simplu";?>

Verificând iar în browser veți constata că nu s-a schimbat nimic. La prima vedere. În realitate rezultatul este afișat pe 2 linii, în textul trimis de PHP către browser. Întrucât pagina este interpretată ca fiind HTML, browserul ignora caracterele new-line. Pentru verificare vizualizați sursa paginii (meniul View din browser -> view source).

Pentru a ajunge la efectele dorite (acelea de a afișa un text pe 2 linii) trebuie folosit următoarea secvența:<?phpprint "Salut";print "\n"; # acum se afișează caracterul care determina trecerea la un rând nou# rândul nou va fi afișat în textul primit de browser (vizibil în sursa HTML)print "<br>"; # se afișează tag-ul BR ce va fi interpretat de browser ca 'linie noua'# linia noua va fi afișată în pagina finala HTML după ce este interpretata de # browser şi nu are nici o legătura cu \nprint "Acesta este un script simplu";?>

Sursa paginii arata în felul următor:Salut<br>Acesta este un script simplu

În browser nu apare tag-ul BR, întrucât acesta este interpretat ca sfârșit de linie. Caracterul "new-line" afișat de noi (în print "\n") este ignorat oricum. Rezultatul:

SalutAcesta este un script simplu Nota: Este foarte important să se înțeleagă diferența dintre ceea ce se returnează în

urma execuției unui script PHP și ceea ce se afișează propriu-zis în browser. Pe scurt, PHP printează cod HTML care este afișat diferit de browsere.

De asemenea, trebuie înțeles faptul că funcția print nu afișează textul pe mai multe linii dacă nu se specifica acest lucru în mod express. Spre exemplu fie următoare secvența de cod:<?phpprint "1";print "2";print "3";?>

Rezultatul va fi123S-a afișat doar ce s-a indicat, 3 caractere, pe o singura linie, fără spații.Un alt lucru important de reținut este faptul ca odată printat, un text nu mai poate fi

"șters". Nu exista "undo" pentru un print. Se poate captura întregul conținut ce se transmite la finalul execuției, dar nu se poate altera textul afișat de o instrucțiune print anume.

Înțelegând aceste aspecte vă va fi mai ușor în lucrul cu PHP şi în modul în care verificați rezultatele scripturilor voastre.

XHTML, este o versiune mult mai stricta şi mai curata a HTML. Poate fi considerat o combinație intre Html şi XML.

XHTML 1.0 a devenit o recomandare a W3C (World Wide Web Consortium) la data de 26 ianuarie 2000. XHTML este un standard compatibil cu toate browserele şi este aproape identic cu HTML 4.01.

207

Page 208: curs DPW.docx

Diferențe între HTML şi XHTMLXHTML este o versiune stricta a html-ului. Vom lua un exemplu pentru a demonstra

aceasta afirmație. De exemplu, multe browsere ar afișa codul de mai jos fără erori.<html><head></head><title>Un exemplu de cod HTML cu greșeli</title><body><h1>Titlu aici<p>Text într-un paragraf<body>

Acesta nu ar fi un cod valid din punct de vedere XHTML.În XHTML toate elementele trebuiesc

- închise întotdeauna- închise în aceeași ordine în care au fost deschise- scrise cu litere mici- deschise şi închise în ordinea specifica

Reguli:1. în XHTML toate elementele trebuiesc închise

Cod HTML acceptat de browser<p>Acesta este un paragraf<p>Acesta este un alt paragrafCod corect XHTML<p>Acesta este un paragraf</p><p>Acesta este un alt paragraf</p>O greșeală întâlnită destul des este neînchiderea elementelor unei liste<ul><li>Element 1<li>Element 2</ul>Cod corect XHTML <ul><li>Element 1</li><li>Element 2</li></ul>

2. în XHTML toate elementele trebuiesc închise în ordinea în care au fost deschiseCod HTML acceptat de browser<b><i>Acest text este îngroșat şi inclinat în același timp</b></i>Cod corect XHTML<b><i>Acest text este îngroșat şi inclinat în același timp</i></b>

3. în XHTML toate elementele trebuiesc scrise cu minuscule.Cod HTML acceptat de browser<HTML><HEAD><TITLE>Cod XHTML incorect</TITLE></HEAD><BODY><P>Un paragraf oarecare</P></BODY></HTML>Cod corect XHTML<html><head><title>Cod XHTML corect</title></head><body>

208

Page 209: curs DPW.docx

<p>Un paragraf oarecare</p></body></html>

4. Toate elemente XHTML trebuiesc deschise şi închise în ordinea specifica. Mă refer aici la faptul ca toate elementele trebuiesc încapsulate în cele doua tag-uri <html> iar celelalte elemente deschise şi închise în ordinea corespunzătoare.<html> <head>....</head><body>....</body></html>

Scripturile PHP sunt destinate generării dinamice de conținut în paginile de Web. De aici rezulta faptul ca un astfel de script trebuie inclus într-o pagina HTML. în acest scop pot fi folosite mai multe tipuri de tag-uri HTML după cum urmează:

Stilul "scurt": <? echo "<H1>Text generat dinamic din PHP</H1?>"; ?>

Avantajul acestui stil este simplitatea. De aici rezulta o viteza mai mare de scriere a codului.

Stilul XML: <?php echo "<H1>Text generat dinamic din PHP</H1?>"; ?>

Acest stil este compatibil cu documente conforme cu standardul XML (Extensible Markup Language). Datorita răspândirii în continua creștere a acestui standard în continuare se va prefera acest stil.

Stilul SCRIPT: <SCRIPT LANGUAGE='php'> echo "<H1>Text generat dinamic din PHP</H1?>"; </SCRIPT>

Acest stil este destinat celor obișnuiți cu scrierea de cod JavaScript sau VBScript. Este util dacăse folosește un editor HTML care are probleme cu alte stiluri de tag-uri.

Textul care apare intre tag-ul de început şi cel de încheiere (indiferent de stil) va fi interpretat ca script PHP. Textul care apare în afara acestor taguri va fi tratat ca şi cod HTML obișnuit.

Codul PHP nu va fi vizibil în sursa trimisa de serverul Web către navigatorul clientului. Acest cod va fi interpretat de către modulul PHP din server şi doar textul generat de acest script va fi trimis mai departe de către server.

La scrierea codului, instrucțiunile PHP din script vor fi terminate printr-un separator punct şi virgula ';' asemănător celor din limbajul C, C++ sau Java. Omiterea acestui separator va genera o eroare de sintaxa.

Interpretorul de PHP va ignora în schimb spatiile dintre instrucțiuni sau dintre elementele unei instrucțiuni. Spre exemplu, secvențele: <?php echo "Hello"; echo "world !"; ?> şi <?php echo "Hello"; echo "world !" ;?> vor genera același rezultat.

Pentru claritatea codului se obișnuiește să se adauge comentarii în care să se explice rolul liniilor respective. Interpretorul de PHP va ignora textul din comentarii, el având doar rolul de a ajuta programatorul în dezvoltarea codului respectiv. Comentariile pot şi adăugate în trei moduri:

stilul C: Comentariul se poate întinde pe mai multe linii şi este cuprins intre semnele '/*' şi '*/'. El se poate insera chiar şi în mijlocul unei expresii dar nu poate fi imbricat în alt comentariu.

stilul C++: Comentariul se întinde pe o singura linie, de la apariția semnului '//' pana la sfârșitul liniei curente.

stilul Shell: Comentariul se întinde pe o singura linie, de la apariția semnului '#' pana la sfârșitul liniei curente. 4. Numere şi șiruri, tipul variabilelorProgramele de calculator manipulează datele, care reprezintă informații. Programele

PHP folosesc doua categorii principale de date: numere şi șiruri. Numerele sunt compuse mai ales din cifre, în timp ce un sir poate conține orice caracter, inclusiv cifre, litere şi simboluri speciale.

209

Page 210: curs DPW.docx

Decizia privind modul de stocare a datelor este importanta, în mod caracteristic, datele se stochează sub forma de numere atunci când se dorește executarea unor operații matematice asupra datelor, deoarece numerele sunt stocate într-un mod care permite efectuarea de calcule. Pe de alta parte, șirurile sunt stocate folosind o modalitate care facilitează înțelegerea lor de către operatorul uman. Datele trebuie stocate sub forma de șiruri dacăformatul acestora nu este numeric sau dacădoriți ca operatorul uman să fie capabil de a introduce sau de a vizualiza datele. Practic, puteți asimila numerele cu un mod de stocare a datelor în interiorul calculatorului. Șirurile se pot asimila unui mod de stocare a datelor în afara calculatorului.

Aceste doua mari categorii de date: numere şi șiruri, formează opt tipuri principale de variabile :

1. Boolean2. Integer3. Float4. String5. Array6. Object7. Resource8. Null

In mod normal tipul variabilelor nu este specificat explicit; acesta va fi evaluat de către interpretorul PHP la momentul run-time (in momentul executării scriptului).

1. Tipul booleanVariabilele de tipul boolean pot lua doar doua valori : FALSE sau TRUEVariabilele de alt tip decât boolean pot fi convertite la tipul boolean prin operatorul

cast (bool) sau (boolean), plasate înaintea valorilor, deși în general nu e nevoie de aceasta convertire, valoarea fiind automat recunoscuta de PHP.

2. Tipul integerPHP folosește doua categorii de numere: întregi (tipul integer) şi reale, cu virgula

(tipul float). Variabilele integer reprezintă numerele întregi, ele pot fi specificate în format zecimal, hexazecimal sau octal.

Numerele întregi reprezintă numerele fără parte fracționară folosite la numărare, plus zero şi numerele negative. Cu alte cuvinte, în PHP termenul de întreg are aceeași semnificație ca şi în matematica. De exemplu, numărul 100 poate fi reprezentat în PHP sub forma de întreg.

Scrierea numerelor PHP este simpla. Un întreg PHP se obține prin scrierea cifrelor care îi alcătuiesc valoarea. Dacăvaloarea este negativa, scrieți un semn minus imediat la stânga numărului. Evitați să scrieți spatii sau virgule ca parte a unui întreg PHP.

Iată câteva exemple de numere PHP întregi : 215678 - Număr în reprezentare zecimala 0x1A8; - Număr în reprezentare hexazecimala (reprezintă: 1*16*16 + 10*16 + 8 =

424 (in zecimal)) 67- Reprezintă: 6*8 + 7 = 55 (in zecimal)

Valorile minime, respectiv maxime pe care le poate lua o variabila de tip integer depind de sistemul de operare pe care rulează modulul PHP. De exemplu, pentru un sistem Windows valoarea unui integer se memorează pe 32 de biți: 31 bit pentru număr şi un bit pentru semn. în acest caz valorile unui întreg se afla în intervalul :-213 respectiv: 213. Dacăîncercăm să folosim un integer cu valori care ies din acest interval vor avea de-a face cu un fenomen de depășire : integer overflow. în acest caz interpretorul PHP convertește acesta valoare într-o valoare de tip float (care are un interval mai extins de valori).

In PHP simpla împărțire a doua valori întregi va produce ca rezultat o variabila de tip float. Pentru a obține doar partea întreaga acestui rezultat putem folosi operatorul cast (int) în fata rezultatului. Ex.: echo (int)8.7; (va returna 8)

Pentru a rotunji rezultatul la întregul cel mai apropiat de valoarea reala se poate folosi funcția round(), unde intre paranteze se adaugă valoarea.

Ex.: echo round(8.7); (va returna 9)3. Tipul floatReprezintă variabile de tip real [numerele cu virgula], (în lb. engleza se folosește

punctul zecimal în loc de virgula). De exemplu 2.5 In general, numerele reale (tipul float) sunt stocate folosindu-se formatul standard

IEEE-64, care furnizează 64 de biți. Acest format va permite să stocați valori care pot merge

210

Page 211: curs DPW.docx

până la 1,8 x 10 la puterea 308 sub forma de numere reale şi furnizează aproximativ 14 cifre după punctul zecimal (sau cifre semnificative) de precizie. Iată câteva exemple de numere reale (tipul float)

123.4567 - Număr de tip float 1.2e3; - Reprezintă: 1.2 * 103

4. Tipul stringReprezintă o înșiruire de caractere, fiecare caracter este memorat pe 1 byte; setul de

caractere este limitat la 256 valori distincte. Dimensiunea șirurilor poate fi oricât de mare în PHP, nu exista specificații care să limiteze numărul maxim de caractere dintr-un sir.

Spre deosebire de întregi şi de numere float, care conțin cifre, șirurile pot conține orice caracter. Ca atare, șirurile sunt utile pentru stocarea datelor care nu pot fi calculate, precum nume, fraze şi adrese.In PHP, un sir poate fi declarat în mai multe feluri:

1) Un mod simplu de a declara un sir este prin delimitarea cu ghilimele simple (' ')

Dacădorim ca șirul să conțină caracterul ' va trebui să inseram înaintea lui caracterul escape \. Dacădorim ca șirul să conțină caracterul \ va trebui să dublam acest caracter. Acest comportament este exemplificat în exemplul următor:<?php$var1 = 'Acesta este un sir de test';echo 'Curs \'PHP\''; echo '<br />Vrei să ștergi C:\\*.* ?'; echo '<br />Variabila var1=$var1';echo "<br />Variabila var1=$var1"; ?>In browser va apărea:Curs 'PHP'Vrei să ștergi C:\*.* ?Variabila var1=$var1Variabila var1=Acesta este un sir de test

Observați diferența dintre ultimele doua linii!In penultima linie, unde s-a folosit ghilimele simple pentru delimitarea șirului,

variabila $var1 nu este expandata adică nu este afișată valoarea variabilei var1. Acesta este un sir de test ci exact textul scris (numele ei). Pentru a realiza afișarea valorii variabilei şi nu numele acesteia, se folosesc ghilimelele duble, precum în ultima linie a exemplului de mai sus.

2) O alta metoda pentru a specifica un sir în PHP este prin folosirea ghilimelelor duble (" ").

Dacăintr-un sir delimitat prin ghilimele duble vrem ca acesta să afișeze numele unei variabile, nu valoarea acesteia, adăugam un caracter backslash (\) înaintea numelui variabilei. Exempluecho "Numele variabilei este \$var";

Acest cod va afișa Numele variabilei este $var, oricare ar fi valoarea variabilei "$var". Caracterele care alcătuiesc șirul sunt incluse între ghilimele duble (" "); De exemplu, șirul reprezentând numele fizicianului care a formulat teoria relativității

este "Albert Einstein". Așa cum s-a explicat, un sir poate conține date numerice; de exemplu, "3.14159".

Dacăse dorește adăugarea de ghilimele duble într-un sir delimitat de ghilimele duble, se adaugă caracterul \ în fata acestora.Exempluecho "Numele programului este \"PHP\".";

Prin delimitarea cu ghilimele duble PHP facilitează includerea în șiruri a unor caractere speciale, precum caracterele de salt la linie noua sau rând nou, prin furnizarea de secvențe escape care reprezintă caractere speciale.

Iată secvențele escape folosite în PHP: \n - salt la linie noua \r - rând nou \t - caracter de tabulare pe orizontala \\ - backslash \$ - simbolul dolarului

211

Page 212: curs DPW.docx

\” - ghilimele dubleCa exemplu, iată un sir care include un rând nou, urmat de un salt la linie noua:

"Salut, lume!\r\n".Rețineți că fiecare secvența escape începe cu un backslash (\). Pentru a include un

backslash într-un sir, trebuie să folosiți doua caractere backslash.Pe lângă imbricarea variabilelor în cadrul șirurilor delimitate prin ghilimele duble, PHP

pune la dispoziție operatorul de concatenare a șirurilor: . (punct) . Acest operator adaugă un sir la sfârșitul altui sir. De exemplu:<?php$nume = 'Popescu';$prenume='Costel';echo 'Numele de familie este '.$nume. 'iar prenumele este '.$prenume;?>

In browser va apărea:Numele de familie este Popescu iar prenumele este Costel

In anumite situații este necesar să accesam unul dintre caracterele unui sir. Pentru aceasta putem folosi parantezele{} ca în exemplul de mai jos:<?php$var1 = 'Acesta este un sir de test'; echo $var1{0}; // Afișează A (primul caracter din sir)echo $var1{2}; // Afișează e (al treilea caracter din sir)?>Rezultatul afișat va fiAe

3) Sintaxa heredoc este o alta modalitate de a delimita șiruriIn acest caz delimitatorul este ("<<<"); acesta trebuie urmat de un identificator unic,

după care urmează șirul de caractere, iar secvența se încheie din nou cu identificatorul menționat. Identificatorul de încheiere trebuie să se afle în prima coloana a liniei, acesta poate conține caractere alfanumerice dar neapărat trebuie să înceapă cu o litera, nu cu o cifra sau alt semn.

Veți înțelege mai bine studiind exemplu de mai jos:<?php$var1 = <<< EOTExemplu de sir care folosește delimitatorul heredoc.EOT;echo $var1;?>Rezultatul afișat va fi:

Exemplu de sir care folosește delimitatorul heredoc.5. Tipul arrayReprezintă un vector de valori fiecare element al matricei are asociat o cheie.

Aceasta cheie va fi folosita ulterior la identificarea unui element specific at matricei. în PHP tipul array se mai numește şi tip map ordonat, deoarece elemente vectorului sunt ordonate după câmpul cheie. Iată un exemplu simplu de variabile array:<?php$fructe[0] = 'mere';$fructe[1] = 'caise';$fructe[2] = 'piersici';?>

6. Tipul objectReprezintă de fapt instanța unei clase declarate în PHP. O clasa este o structura care

conține variabile membru şi funcții membru.7. Tipul resourceEste un tip special de variabila care păstrează o legătura spre resurse externe.

Exemple de resurse externe: manipulatori pentru deschidere de fișiere, conectare la baze de date, compresia fișierelor, resurse COM, etc...

8. Tipul NULLReprezintă variabilele care nu au încă atribuita o valoare.O variabila se considera a avea valoarea Null daca:

- este setata explicit prin atribuirea valorii NULL- nu a fost asignata încă o valoare acestei variabile

212

Page 213: curs DPW.docx

- variabila a fost ștearsă prin funcția unset();Putem afla tipul unei variabile folosind funcția gettype() care returnează un string

(sir) conținând tipul variabilei cercetate.Observați şi studiați exemplul de mai jos<?php$var1 = TRUE;$var2 = 100;$var3 = 23.88;$var4 = "Nume";$var[5] = "fructe";echo gettype($var1);echo '<br />'.gettype($var2);echo '<br />'.gettype($var3);echo '<br />'.gettype($var4);echo '<br />'.gettype($var[5]);echo '<br />'.gettype($var6);?>In browser va apărea:booleanintegerdoublestringstringNULL

Observați ca ultima linie afișată este NULL, asta deoarece $var6 nu are nici o valoare determinata

4.1. Tipuri de date. Conversii de tipLimbajul PHP suporta următoarele tipuri de date:

Integer - utilizat pentru numere întregi Double - utilizat pentru numere reale String - utilizat pentru șiruri de caractere Array - utilizat pentru a stoca date multiple de același tip Object - utilizat pentru a retine obiecte - instanțe ale claselor

In plus, PHP suporta şi tipurile pdfdoc respectiv pdfinfo pentru a asigura suport pentru PDF (standardul Portable Document Format).

PHP este un limbaj slab tipizat. în limbajele puternic tipizate, o variabila poate retine un singur tip de date pe toata durata să de viață, tip asignat la declararea acelei variabile. în PHP variabilele nu trebuie declarate explicit (ele sunt considerate ca fiind declarate implicit la prima lor utilizare în cod), iar tipul de date asignat este determinat de valoarea reținută în acel moment. Următoarele linii de cod sunt corecte în PHP (numele variabilelor PHP sunt prefixate de semnul $):$var1 = 1;$var1 = "șirul 1";

Tipul datelor extrase din variabile poate fi schimbat forțat (casting sau conversie de tip) în expresiile unde acestea intervin. Acest lucru se face prin precizarea noului tip intre paranteze rotunde în fata variabilei respective:$var1 = 1;$var2 = (double)$var1 + 3.52;

Conversia de tip nu afectează tipul real al variabilei.4.2. Identificatori. ConstanteIdentificatorii sunt cuvinte care denota entități într-un program. Exemple de

identificatori sunt: numele de variabile, de funcții sau de clase. în PHP identificatorii trebuie să respecte următoarele reguli:

Identificatorii pot fi de orice lungime şi pot fi formați din litere, cifre, liniuța de subliniere sau semnul dolar.

Identificatorii nu pot începe cu o cifra. Identificatorii sunt de tip "case sensitive" (țin cont de litere mici-mari). Spre exemplu,

$numepers este diferit de $numePers. Singurii identificatori care nu respecta aceasta regula sunt cei care denota nume de funcții PHP predefinite.

PHP permite folosirea a doua tipuri de constante. Constantele de tip valoare sunt precizate direct în expresii dependent de tipul lor:

213

Page 214: curs DPW.docx

constantele întregi: 0, 100, -1320 constantele de tip double: 0.00, 3.1523, -4.5 constantele de tip sir de caractere: "sir1", 'sir2', 'sir cu "ghilimele"! ', "sir cu

'apostrof'! " Constantele cu nume se aseamănă cu variabilele, dar valoarea lor nu poate fi

schimbata de-a lungul programului. Pentru a face codul scris mai lizibil se obișnuiește ca numele variabilelor să fie scrise în întregime cu litere mari. O diferența notabila fata de variabile este aceia ca numele acestora nu sunt precedate de semnul $. Declararea constantelor se face cu ajutorul cuvântului cheie define....define("PI",3.14);$unUnghi = PI;$altUnghi = 2*PI;

4.3. Variabile utilizator. Variabile referință. Domeniu de valabilitateVariabilele sunt locații de memorie desemnate printr-un identificator care începe cu

semnul $. Ele permit memorarea valorilor de diverse tipuri. Tipul unei variabile PHP poate fi modificat în momentul când i se asignează o valoare. Declararea variabilelor utilizator nu trebuie făcută explicit. O variabila se considera declarata implicit prima data când este folosita.

Pentru a asigna o valoare unei variabile se va folosi operatorul = sub forma $variabila = expresie. Dacă$variabila nu exista ea va fi creata în prealabil apoi i se va asigna valoarea expresiei.Variabilele referință permit schimbarea numelui unei variabile în mod dinamic. Acest lucru se face prin utilizarea valorii unei variabile pe post de nume de variabila. Indirectarea se realizează prin utilizarea marcajului dolar '$' în fata numelui variabilei referință, ca şi în exemplul următor:$var1 = 5;$var2 = "var1";echo "Valoarea din var1 este ";echo $var1;echo " sau ";echo $$var2;

In acest exemplu notația $$var2 a fost folosita pentru a desemna valoarea reținută de variabila $var1. Atenție: PHP face distincție intre literele mari şi mici. Astfel, cele 3 variabile de mai jos sunt TOTAL diferite:$variabila = "negru";$vaRiabila = "alb";$Variabila = 1;

4.3.1.Atribuirea de valoriSe realizează la fel ca şi declararea prin intermediul instrucțiunii de atribuire.

atribuirea unei valori anume$variabila = 2;

copierea valorii de la o alta variabila$text = $variabila;

Copierea valorii funcționează şi în cazul vectorilor. În urma copierii cei 2 vectori vor fi identici$vectorS = $vectorS2; # toate componentele lui $vectorS2 sunt copiate în $vectorS

În cazul vectorilor se pot atribui valori separat fiecărei componente$vectorS[ 0 ] = 100;$vectorS[ 3 ] = 10;$vector[ 'luni' ] = 'Lundi';$vector[ 'joi' ] = 'Jeudi';

4.3.2. Ștergerea variabilelorDe obicei nu e nevoie ca variabilele să fie șterse după ce au fost folosite. Totuși,

lucrul aceste se poate face în următoarele moduri:unset( $variabila );$variabila = null;

4.3.3. Afișarea variabilelorAfișarea se realizează utilizând oricare din instrucțiunile de afișare:

$variabila = "Text";$randNou = "<br>";

214

Page 215: curs DPW.docx

print $variabila; print $randNou;echo $variabila, $randNou;

Diferența dintre ghilimele simple şi duble la declararea variabilelorGhilimelele duble permit compilatorului să "citească" variabilele ce apar în interiorul

textului.$today = date( 'd-m-Y' );$text1 = "Azi e $today"; print $text1; // Azi e 17-07-2008

Astfel, textul cuprins intre ghilimele duble este procesat înainte de afișare: variabilele sunt căutate iar valoarea lor este afișată în locul numelui.

In cazul apostrofului, textul este afișat neschimbat, iar variabilele nu sunt interpretate.$today = date( 'd-m-Y' );$text2 = 'Azi e $today'; print $text2; // Azi e $today

4.3.4. Verificarea dacăo variabila e definitaSe pot folosi 2 funcții: isset şi empty .

// definim o variabila, cealaltă definire nu se executa$var = 0;// $var2 = 1;var_dump( isset($var) ); // bool(true)var_dump( isset($var2) ); // bool(false)var_dump( empty($var1) ); // bool(true), pentru ca 0 este considerat nulvar_dump( empty($var2) ); // bool(true)

Atenție, isset verifica dacăvariabila a fost definita, pe când empty verifica dacăa fost definita şi dacăare o valoare considerata vida. O variabila este vida dacăare următoarele valori:

"" (text de lungime 0) 0 (cifra 0) "0" (textul "0") null false array() (vector gol)

Pentru valorile de mai sus, empty returnează false 4.3.5. Operatorul {} Pot exista situații când anumite variabile trebuie procesate mai înainte decât altele,

sau mai înainte de procesarea întregii instrucțiuni. De exemplu:$salut = array(

'dimineața' => 'Buna dimineața','prânz' => 'Buna ziua','seara' => 'Noapte buna'

);print "$salut[ 'prânz' ], vizitatorule"; // eroare

Modul în care am scris variabila ($salut[ 'prânz' ]) este corect. Doar ca PHP-ul nu "știe" să vadă variabila ca pe un element din vector, sa-i ia valoarea şi apoi să afișeze tot textul. Pentru a rezolva aceasta problema folosim acoladele:print "{$salut[ 'prânz' ]}, vizitatorule"; // "Buna ziua, vizitatorule"

In acest caz spunem compilatorului să interpreteze mai întâi ce este intre acolade (elementul $salut[ 'prânz' ] din vector) şi apoi să afișeze tot textul.

Ori de cate ori e nevoie ca o variabila să fie interpretata cu prioritate, ea trebuie pusa intre acolade. Dublu-dolar ($$nume)$obiect = 'masina';$masina = "Chevrolet";$avion = "Boeing";$tren = "TGV";print $$obiect; // Chevrolet

Pentru a înțelege ce se întâmpla, trebuie menționat ca ultima linie poate fi scrisa astfel:print ${$obiect}; // Chevrolet

215

Page 216: curs DPW.docx

In virtutea explicației de mai sus a operatorului {}, putem vedea ușor ca PHP mai întâi extrage valoarea variabilei $obiect ( care este: "masina" ) şi apoi afișează variabila $masina (care are valoarea "Chevrolet".

Prin domeniul de valabilitate a unei variabile se înțelege locurile în care o variabila poate fi folosita (este vizibila) după ce a fost creata. Domeniile definite de PHP sunt următoarele:

Global - variabilele globale, definite în afara funcțiilor sunt vizibile în tot fișierul curent, mai puțin în interiorul funcțiilor.

Locale unei funcții - variabilele create în funcții sunt vizibile doar în interiorul acestora.

Globale în interiorul unei funcții - acest tip de variabile sunt folosite pentru a accesa variabilele globale cu același nume. 5. PHP şi formularele HTMLPrincipalul mecanism de colectare a datelor de la utilizatori prin intermediul unui site

Web îl reprezintă formularele HTML (HTML forms). Din acest motiv, limbajul PHP pune accent pe facilitarea accesului la aceste date.

Formularele sunt elementele prin intermediul cărora utilizatorii trimit date către server. Formularele sunt întâlnite în orice aplicație web, cele mai uzuale sunt paginile de login, contact sau înregistrare. Un formular HTML cuprinde câmpuri în care utilizatorul (cel care accesează pagina) poate introduce date. Pentru procesarea acestor date formularul definește o acțiune numita submit (trimitere), care corespunde de obicei apăsării unui buton cu același titlu. Rezultatul acestei acțiuni este accesarea unei alte pagini (pagina țintă - target) care va primi automat valorile completate în câmpurile formularului şi le va prelucra. în cadrul subiectului prezentat, paginile țintă ale formularelor vor fi fișiere PHP, paginile cuprinzând formularele putând fi fișiere PHP sau HTML.

In PHP datele dintr-un formular HTML pot fi accesate prin doua metode. Prima metoda, mai simpla dar mai înceată şi mai nesigura, consta în folosirea

variabilelor înregistrate global. în acest fel numele câmpurilor dintr-un formular HTML devin automat variabile PHP, cu valori setate corespunzător, în pagina țintă a formularului. Transmiterea se face asemănător cu transmiterea parametrilor spre funcții. Pentru a putea folosi aceasta metoda trebuie ca fișierul de configurare php.ini să aibă setarea register_globals pe valoarea "On".

A doua metoda presupune obținerea valorilor din doua tablouri create automat şi denumite $HTTP_POST_VARS, respectiv $HTTP_GET_VARS corespunzător metodei de trimitere din formular spre server (post sau get). Indicele de acces în tablou va fi chiar numele câmpului dorit din formular.

Din motive de claritate în general se utilizează prima metoda. în schimb, în scripturile profesionale, unde viteza şi securitatea sunt determinante, a doua metoda este de preferat.

Un formular trebuie să aibă specificate 2 atribute: "action" şi "method". Action reprezintă calea către fișierul ce va prelucra requestul clientului (de regula un fișier PHP). Acest atribut poate fi gol, specificând ca prelucrările vor fi făcute de același script ce afișează formularul (fișierul curent). Method specifica metoda de acces.

Formularele sunt strâns legate de conceptul de "Metoda de acces" (Request Method). De fapt, în funcție de modul în care se face cerința către server se clasifica şi formularele: formulare GET şi POST.

5.1. Metode de access: GET, POST şi altele Metodele de acces reprezintă modul în care cerinţele pentru o pagina web şi alte

informații aferente sunt transmise de la browser la serverul web. Exista 8 metode definite, în schimb doar 2 dintre ele sunt cel mai des folosite în dezvoltarea paginilor web.

GETEste cea mai uzuala metoda, folosita implicit de browsere pentru a trimite cereri

către servere. Aceasta metoda a fost proiectata pentru a transmite pagina de la server la client, deși se pot transmite mici bucăţi de informații şi în sens invers (de la client la server) odată cu cererea pentru o pagina. Aceste informații adiționale (date introduse de utilizatori) sunt adăugate la finalul URL-ului sub forma "?parametru=valoare".

Așadar GET este standardul pentru a "cere" informații de la server (in engleza "get data"). Prin urmare toate scrierea unui URL în bara de adrese a browserului sau accesarea unui link sunt request-uri de tip GET.

POSTOpus metodei GET, POST este folosita pentru a transmite informații către server (in

engleza "post data"). Spre deosebire de GET care permite doar o cantitate limitata de date

216

Page 217: curs DPW.docx

să fie transmisa de la client (browser) la serverul web, POST dispune de limite mai generoase, fiind standardul de transmitere a datelor. Astfel, upload-ul unui fișier pe server, salvarea unui post pe blog, etc - toate sunt requesturi de tip POST.

Pentru a face un request POST este necesara folosirea unui formular.5.2. Formulare de tip GET Acest tip de formulare permite utilizatorilor să transmită informații adiționale atunci

când cer o pagina web. Acțiunea unui formular GET poate fi ușor reprodusa specificând URL-ul şi parametrii direct în browser.

Datele transmise de utilizatori la un request de tip GET sunt disponibile pentru prelucrare în PHP folosind variabila globala $_GET. Fiecare parametru al requestului reprezintă o componenta a variabilei $_GET.

5.3. Formulare de tip POST Un alt tip de request folosit în practica este POST. Acesta permite transferul unei

cantităţi mult mai mari de date (de ordinul gigaocteţilor), în timp de metoda GET este limitata la câţiva octeți. Astfel, prin POST se pot transfera fișiere către web-servere şi se pot transmite texte foarte lungi, fără a ne face griji de formatul datelor transmise (care pot conține caractere speciale, pot fi în format binar).

Datele transmise de utilizator sunt disponibile în PHP prin intermediul variabilei globale $_POST. Astfel, dacăformularul conține 2 câmpuri numite "numele" şi "textfl", variabila $_POST va avea doua componente ce pot fi accesate prin $_POST[ 'numele'] şi $_POST[ 'textfl' ].

5.4. Formular de login în PHP Mai jos este un exemplu de formular ce poate fi folosit pentru autentificarea (logarea)

utilizatorilor. Deocamdată nu conține decât elementele de baza şi verificări simple, tocmai pentru a evidenția modul de lucru cu formulare în PHP. Codul conține comentarii în care sunt explicați pașii urmăriți.

Ar putea fi puțin derutant faptul ca porțiunea de cod PHP se afla în același fișier cu formularul HTML. Întrebarea fireasca ar fi: "nu se executa prelucrarea datelor când de fapt trebuie doar să afișeze formularul?" sau altfel spus "cum știe serverul când să prelucreze datele din formular?".

Ideea este ca acea porțiune de cod PHP se executa la fiecare afișare a paginii. De fapt nu toata, ci doar prima parte. Când se încarcă pagina (in urma unui click sau refresh), pe lângă codul HTML static se returnează şi rezultatul codului PHP. în cazul nostru, codul PHP consta în 2 atribuiri de variabile şi un if mare. Atribuirile se executa mereu (la fiecare afișare), la fel şi if-ul, doar ca rezultatul comparațiilor este adevărat doar atunci când datele din formular au fost trimise.

Cu alte cuvinte, acel if va fi evaluat true doar când utilizatorul da submit la formular - deci prelucrarea datelor se va face doar după ce utilizatorul face click pe "Login". Dacănu a fost făcut submit, e simplu: pur şi simplu afișează codul HTML static şi ce mai este prin script (rezultatul va fi un formular).După ce s-a încărcat pagina, utilizatorul va putea introduce datele în formular şi va putea da submit.

Atunci când se da submit, se face un request POST către aceeași pagina şi se executa încă o data codul PHP din cadrul fișierului, de aceasta data însă cu informațiile actualizate când se face submit, se intra pe ramura lui if unde se executa mai multe operații (in cazul nostru doar 2).

Este foarte important să se înţeleagă mersul lucrurilor, cum este tratata pagina în fiecare situație şi cum se ajunge să se execute fiecare porțiune de cod.

Dacăaceste aspecte nu sunt clare nu veți putea scrie formulare de unii singuri. Continuând cu explicarea codului, iată care sunt operațiile care se executa:se validează datele (se verifica dacăau fost introduse valori): if( !isset( $_POST[ 'user' ]) .se verifica dacănumele de utilizator şi parola sunt corecte: if( $erori == 0 ) ...

Dacăsunt corecte, atunci se face o redirecționare către o pagina ce poate fi accesata după autentificare. Redirecționarea se realizează folosind etichete HTML, deși exista o modalitate mai eleganta de a o realiza Codul este expus mai jos: <?php# username şi parola$user_corect = 'admin';$parola_corecta = 'ghiceste-Ma';# verific dacăse accesează pagina ca urmare a unui request POST$mesaj = '';

217

Page 218: curs DPW.docx

if( isset( $_POST ) && !empty( $_POST[ 'trimite' ] ) ) {# nota: se va intra pe ramura aceasta a lui if atunci când utilizatorul# face click pe butonul "Login"# Atunci când pagina este accesata normal (scriind adresa în browser)# variabila $_POST este goala$erori = 0;# validam datele, presupunem ca nu sunt erori şi verificam valorile introduseif( !isset( $_POST[ 'user' ] ) || strlen( $_POST['user' ] ) == 0 ) {$mesaj = 'Numele de utilizator nu a fost specificat';$erori = 1;} elseif( !isset( $_POST[ 'pass' ] ) || strlen( $_POST[ 'pass' ] ) == 0 ) {$mesaj = 'Parola nu a fost specificata';$erori = 1;}# dacănu au fost erori, atunci fac prelucrărileif( $erori == 0 ) {# pentru acum, vom face o verificare simplaif( $_POST[ 'user' ] === $user_corect &&$_POST[ 'pass' ] ===$parola_corecta ){# login realizat, redirecționezecho 'Ati fost autentificat. Veți fi redirecționat...';exit; # nu mai afișez nimic altceva} else {# nu s-a făcut login$mesaj = 'Username-ul sau parola sunt gresite';}}

}?><html><head><title>Aplicatie formular: pagina de login - Invata PHP</title></head><body style="font-family: verdana,sans-serif; font-size: small;"><form action="" method="post" style="width: 30%"><fieldset>

<legend>Date de autentificare</legend><input type="text" name="user" /> User<br /><input type="password" name="pass" /> Pass<br />

</fieldset><fieldset>

<legend>Actiuni</legend><input type="submit" value="Login" name="trimite" value="1" /> <input type="reset" value="Curata formular" />

</fieldset></form><?php# aici afişăm mesajul de eroare, dacăavemif( strlen( $mesaj ) > 0 ) {

echo '<p style="color: red">', $mesaj, '</p>';}?></body></html>

5.5. Formulare "in real life" - exemple de site-uri care folosesc formulare Mai jos sunt incluse o serie de formulare folosite în site-uri live. Veți fi surprinși poate

să observați ca majoritatea site-urilor folosesc formulare şi ca o mare parte din activitatea de navigare pe internet presupune folosirea formularelor.

La rândul vostru, ca dezvoltatori web, voi înşivă veți construi foarte des formulare şi veți scrie codul de prelucrare/manipulare a datelor provenite din formulare.

218

Page 219: curs DPW.docx

Exemplele de mai jos nu prezintă decât partea formala, codul HTML al formularelor. Partea de programare (codul efectiv care face prelucrarea) nu este disponibila, fiind gazduită de fiecare site în parte. Rolul acestor exemple este de a va da o idee despre cum sunt folosite formularele şi cu ce ocazii, ce elemente sunt întrebuințate şi care este comportamentul browserului pentru fiecare tip de formular (GET/POST).

5.5.1. Formular de căutare folosind motorul Bing<form id="form_bing" action="http://www.bing.com/search" method="get">

Expresie de căutat:<br /><input type="text" name="q" value="" /> <input type="submit" value="Cauta pe

Bing" /></form>

Analog se poate construi un formular pentru Google. Practic, trebuie schimbat decât atributul action din formular (pus URL-ul specific Google: http://www.google.com/search), întrucât cele doua motoare de căutare accepta același parametru GET (numit simplu q) pentru textul de căutat.

5.5.2. Formular de căutare în documentația PHP<form id="form_php" action="http://ro.php.net/manual-lookup.php" method="get">

Cauta funcția PHP sau un cuvânt:<br /><input type="text" name="pattern" value="" /> <input type="submit"

value="Cauta" /></form>

La fel ca mai sus, formularul folosește metoda GET, ceea ce oferă o facilitate: utilizatorul poate introduce singur, în URL, textul de căutat. Dați Cauta şi verificați adresa paginii care se deschide.

5.5.3. Formular de conversie valutara din EUR în RON<form id="form_xe" action="http://www.xe.com/ucc/convert.cgi" method="get" >

<fieldset><legend>Suma de convertit</legend><input type="text" name="Amount" value="10" style="width: 100px" /></fieldset><fieldset><legend>Moneda</legend><input type="text" name="From" value="EUR" style="width: 100px" />- moneda sursa<br /><input type="text" name="To" value="RON"style="width: 100px" /> moneda în care se face conversia<br /></fieldset><fieldset><input type="submit" name="image" value="Convertire" /> </fieldset>

</form>5.5.4. Formular de căutare locuri de munca pe site-ul ejobs.ro

<form action=http://www.ejobs.ro/user/searchjobs id="searchjob" method="post" ><input type="hidden" value="" name="refine"/><input type="hidden" value="" name="allof"/><table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="middle" style="padding-left: 3px;"><span>Locuri de

munca:</span></td><td valign="middle" style="padding-left: 9px;" rowspan="5"><input type="submit" value="Cauta Job >>" name="cauta_job" /></td></tr><tr><td valign="middle" style="padding-left: 3px;"><input onclick="if (this.value=='Cuvânt cheie') {this.value='';}" style="width: 210px;" name="jobskeyword" value="Cuvânt cheie" /></td></tr><tr><td valign="middle" style="padding-left: 3px;">

219

Page 220: curs DPW.docx

<select style="width: 210px;" name="oras"><option value="">Toate orașele</option></select></td></tr><tr><td valign="middle" style="padding-left: 3px;"><select style="width: 210px;" name="categ"><option value="">Toate departamentele</option></select></td></tr><tr><td valign="middle" style="padding-left: 3px;"><select style="width: 210px;" name="nivel_cariera"><option value="">Orice nivel de cariera</option></select></td></tr></table>

</form>Acesta este un formular puțin mai cuprinzător. Conține mai multe tipuri de elemente,

inclusiv de tip ascuns (hidden). Aceste sunt folosite pentru a transmite anumite informații care nu trebuie în mod necesar să fie accesibile utilizatorilor. Elementele hidden sunt accesibile ca orice alt input, prin intermediul variabilei $_POST.

Formularul de la eJobs folosește metoda POST. Ca urmare datele introduse nu apar în URL şi nu pot fi modificate imediat. Mai mult, la refresh pe pagina de rezultate o să apară acea avertizare care cere confirmarea ca datele introduse să fie trimise încă o data la server,

Formularul folosit pentru upload este unul special, având un parametru obligatoriu (enc-type) şi metoda POST.

Important de verificat, pentru ca funcționalitatea de upload să fie activata: directiva file_uploads din php.ini trebuie să fie 'on'directiva upload_tmp_dir din php.ini trebuie să se refera la o cale existenta pe server şi cu permisiuni suficiente pentru ca web-serverul să poată crea fișiere directivele upload_max_filesize şi post_max_size din php.ini specifica mărimea maxima a fișierului şi respectiv a datelor ce pot fi transmise prin intermediul formularului; este recomandat ca aceste valori să fie revizuite atributul enctype="multipart/form-data" NU TREBUIE omis, altfel uploadul nu va funcționa. Formularul trebuie să conţină un input de tip FILE, ca în exemplul de mai jos.<!-- Encoding type, specificat de atributul enctype, TREBUIE specificat ca mai jos --><form enctype="multipart/form-data" action="upload.php" method="POST"> Încărca un fișier: <input name="fișier" type="file" /> <input type="submit" value="Trimite fișier" /></form>

Nota asupra mecanismului de upload:web serverul copiază fișierul transmis de utilizator într-o locație temporara (specificata de directiva upload_tmp_dir) interpretorul PHP este invocat, având variabila $_FILES populata cu informații despre upload. Programatorul este responsabil cu prelucrarea fișierului încărcat pe server (mutare într-o alta locație, citire, copiere, etc), prelucrare ce se face cu ajutorul funcțiilor puse la dispoziție de PHP. Dacăfișierul încărcat nu este mutat (sau redenumit) din locația temporara, acesta va fi șters automat la terminarea execuției scriptului (la finalul requestului, mai exact).

Fișierul PHP (upload.php) ce va prelucra uploadul continu următoarea secvenţă de cod (include şi validare).<?php# se verifica dacăfișierul încărcat a depășit dimensiunea maxima acceptata# dacăacest lucru se întâmpla, variabilele $_POST şi $_FILES se golesc automatif( empty( $_POST ) && empty( $_FILES ) ) {

# a fost făcut un POST sau nu?if( isset( $_SERVER['CONTENT_LENGTH'] ) ) {# atunci când se trimit date prin post variabila $_SERVER['CONTENT_LENGTH']

220

Page 221: curs DPW.docx

# conține valoarea dimensiunii datelor$POST_MAX_SIZE = ini_get('post_max_size');if( !empty( $POST_MAX_SIZE ) ) {# determin limita maxima (care poate fi în KB, MB sau GB$mul = substr($POST_MAX_SIZE, -1);$mul = ($mul == 'M' ? 1048576 :($mul == 'K' ? 1024 :($mul == 'G' ? 1073741824 : 1)));

if ( $_SERVER['CONTENT_LENGTH'] > $mul*(int)$POST_MAX_SIZE && $POST_MAX_SIZE ) {print "Fișier prea mare! Ați depășit limita maxima permisa";}} else {print "Eroare nespecificata (probabil fișierul este prea mare)";}} else {# nu s-a făcut încă submit la fișier, afișez un mesajprint "Apăsați pe 'Trimite fișier' pentru a face upload!";}

} else {# $_POST şi $_FILES sunt setate; verific alte erori ce pot să aparăif( $_FILES['fișier']['error'] > 0 ) {print "A intervenit o eroare (#{$_FILES['fișier']['error']})";} else {# fișierul uploadat va fi pus în subfolderul 'upload' (care trebuie să # existe deja în aceeași locație ca şi fișierul upload.php$uploaddir = dirname( __FILE__ ). DIRECTORY_SEPARATOR . 'upload' .

DIRECTORY_SEPARATOR;$uploadfile = $uploaddir . basename($_FILES['fișier']['name']);if (move_uploaded_file($_FILES['fișier']['tmp_name'], $uploadfile)) {print "Fișier încărcat cu succes!";} else {print "Nu s-a putut încărca fișierul";}}

}?>

5.6. Constante magice Limbajul PHP dispune de o serie de "constante magice" care au valori diferite în

funcție de anumiți momentul şi codul în care sunt folosite. Denumirea de 'constanta' este improprie, pentru ca, așa cum știți deja, o constanta nu-si poate schimba valoarea. Nici 'variabile' nu pot fi numite deoarece nu au nevoie de declarare sau inițializare, așa ca s-a recurs la un compromis: denumirea 'constante magice' (magic constants).Cele mai uzuale sunt __LINE__, __FILE__, __FUNCTION__ şi __CLASS__. Mai noile __DIR__, __METHOD__ şi __NAMESPACE__ sunt mai rar folosite datorita faptului ca au nevoie de o versiune mai noua a interpretorului PHP (cel puțin versiunea 5.0 sau chiar 5.3)

Mai jos sunt explicate aceste constante. LINE Returnează linia curenta a scriptului PHP.

<?php# afișează numărul liniei pe care este scrisa instrucțiunea echoecho __LINE__; // 162?>

FILE Conține calea completa către scriptul PHP care se executa. Dacăeste folosita într-un

fișier inclus atunci numele acestui fișier este returnat.<?phpecho __FILE__; // numescript.php?>

FUNCTION Returnează numele funcție din interiorul căreia se folosește constanta.

<?php

221

Page 222: curs DPW.docx

# declar o funcție care conține o constanta magica function spuneNumele() {echo __FUNCTION__;

}# apelez funcția care va afișa valoarea constanteispuneNumele(); // va afișa: spuneNumele?>

CLASS Returnează numele clasei curente. DIR Conține numele directorului în case este salvat scriptul curent. Aceasta constanta

este echivalenta cu dirname(__FILE__). METHOD Conține numele metodei de clasa din care se folosește constanta. Se poate folosi

numai cu clase. NAMESPACE Conține numele spațiului de lucru curent (name-space). 5.7. Operatorul ternar PHP oferă un operator care are 3 termeni. Sintaxa lui este următoarea:

(conditie ? adevărat : fals )De remarcat ca adevărat, fals şi condiție nu sunt instrucțiuni ci expresii (variabile,

constante, stringuri, etc) iar operatorul returnează o valoare şi nu o variabila.print ( 1 == 2 ? 'egal' : 'ne-egal' ); // afișează ne-egal

6. Utilizarea numerelor. Crearea şi afișarea șirurilorNumerele în PHP pot fi manipulate cu uşurinţă, principalele operații la care sunt

folosite fiind: adunare, scădere, înmulțire, împărţire, împărţire modulo, incrementare respectiv decrementare

Valorile de tip sir sunt secvențe de caractere incluse între ghilimele duble sau simplePuteți include un caracter special în cadrul unui sir folosind o secvenţă escape care

reprezintă caracterul special.Variabilele pot fi de tip string şi li-se poate atribui o valoare de tip sir.Operatorul de concatenare, punct, ( . ) se poate folosi pentru unirea șirurilor.PHP poate converti în mod automat o valoare numerica într-un sir, respectiv valoarea

unui sir într-un număr.Secvențele escape folosite în PHP: \n - salt la linie noua \r - retur de car (rând nou) \t - caracter de tabulare pe orizontala \\ - backslash \$ - simbolul dolarului \" - ghilimele duble \xxx - caracterul asociat valorii ASCII xxx, exprimata sub forma unui număr în

octal \xnn - caracterul asociat valorii ASCII xxx, exprimata sub forma unui număr în

hexazecimal6.1. Secvențe escape şi cod ASCIIUltimele doua secvențe escape prezentate mai sus folosesc un cod ASCII (America

Standard Code for Information Interchange) pentru reprezentarea unui caracter.Codurile ASCII sunt valori întregi, care sunt cuprinse între 0 şi 255; fiecare litera sau

simbol folosit frecvent în limbile vest-europene are asociat un cod ASCII. De exemplu, codul ASCII asociat literei A este 65, iar codul asociat cifrei l este 49.

Prima secvenţă escape necunoscuta (\xxx) va permite să folosiți reprezentarea în octal (baza 8) a unui cod ASCII pentru specificarea caracterului corespunzător. De exemplu, valoarea zecimala 65 (care este codul ASCII al literei A) poate fi reprezentata în octal sub forma 101. Ca atare, puteți reprezenta litera A folosind secvenţă escape "\101".

Cea de-a doua secvenţă escape necunoscuta (\xnn) va permite să folosiți reprezentarea hexazecimala (în baza 16) a unui cod ASCII pentru specificarea caracterului corespunzător. De exemplu, valoarea zecimala 65 (care este codul ASCII al literei A) poate fi reprezentat sub forma hexazecimala 41. Ca atare, puteți reprezenta litera A cu ajutorul secvenței escape "\41".

222

Page 223: curs DPW.docx

Valoarea unui număr zecimal este suma produselor dintre fiecare cifra care îl compune şi o putere a lui 10. De exemplu, numărul zecimal 123 are valoarea l x 10 la puterea 2 + 2 x 10 la puterea 1 + 3 x 10 la puterea 0 = 1x100 + 2x10 + 3x1.

Puteți determina valoarea unui număr reprezentat folosind o alta baza prin înlocuirea lui 10 cu valoarea bazei respective într-o expresie ca aceea prezentata anterior. De exemplu, valoarea hexazecimala 123 este echivalenta cu valoarea zecimala l x 16 la puterea 2 + 2 x 16 la puterea 1 + 3 x 16 la puterea 0 = l x 156 + 2 x 16 + 3 x l = 291.

Similar, valoarea în octal 123 este echivalenta cu valoarea zecimala 1x8 la puterea 2 + 2x8 la puterea 1 + 3x8 la puterea 0 = 1x64 + 2x8 + 3xl=83.

Dacăvi se pare complicat să calculam astfel, nu intrați în panica; în continuare veți învăţa să determinați valoarea în octal sau hexazecimal echivalenta cu orice valoare zecimala, folosind funcții PHP.

6.2. Utilizarea codurilor ASCIINumeroase funcții PHP sunt deosebit de folositoare la utilizarea codurilor ASCII.

Aceste funcții sunt enumerate în tabelul următor.Funcții folositoare în utilizarea codurilor ASCIIFuncție Descrierechr(/n) - Returnează caracterul având codul ASCII dat de "n"

dechex(n) - Returnează valoarea hexazecimala echivalenta cu valoarea zecimala data de "n"

decoct(n) - Returnează valoarea în octal echivalenta cu valoarea zecimala data de "n"

hexdec(n) - Returnează valoarea zecimala echivalenta cu valoarea hexazecimala data de "n"

octdec(n) - Returnează valoarea zecimala echivalenta cu valoarea în octal data de "n"ord(c) - Returnează codul ASCII echivalent caracterului "c"

Iată un exemplu de utilizare a funcției ord() pentru a determina codul ASCII corespunzător unui anumit caracter:<?php$c = "A";$n = ord($c);echo "<br /> Valoarea ASCII a caracterului $c este $n";?>Scriptul va afișa următorul rezultat:

Valoarea ASCII a caracterului A este 656.3. Crearea datelor de ieșire formatatePHP include doua funcții utile pentru generarea datelor de ieșire formatate, în speţă

printf() şi sprintf().Funcția printf() afișează datele sale de ieșire, în timp ce funcția sprintf() returnează

datele sale de ieșire sub forma unei valori sir.În general, fiecare funcție preia doua sau mai multe argumente. Primul argument

este un sir, denumit sir de formatate, care specifica formatul datelor de ieșire, iar celelalte argumente specifica valorile care vor constitui datele de ieșire.

Iată un exemplu simplu de utilizare a funcției sprintf():<?php$num = 8.7;echo $num;$num = sprintf("%05.2f", $num);echo '<br>'. $num;?>

Rezultatul afișat va fi:8.708.70

Cu ajutorul expresiei "%05.2f", sprintf() formatează numărul din $num astfel încât acesta să fie format din 5 caractere dintre care unul punct (.) şi 2 zecimale.

Iată şi doua exemple de utilizare a funcției printf():<?php$n = 8;printf("Valoarea lui n este: %d", $n);?>

Va afișa "Valoarea lui n este: 8".

223

Page 224: curs DPW.docx

Al doilea exemplu, puțin mai complicat, prezintă modul de utilizare a funcției printf() cu mai multe argumente pentru datele de ieșire:<?php$sir = 'Aceasta este curs %d din cursul %s';$num = 13;$tip = 'PHP';printf($sir, $num, $tip);?>

Includerea datelor formatate în sir se face în ordinea adăugării variabilelor intre parantezele funcției "sprintf()".

Va afișa "Aceasta este curs 13 din cursul PHP".Șirul de formatare consta dintr-o serie de caractere şi directive ordinare. Un caracter

ordinar este orice caracter, în afara caracterului "%". Caracterele ordinare sunt pur şi simplu copiate la ieșire.

Directivele reprezintă secvențe de caractere care încep cu simbolul "%"; aceste determina modul în care va fi formatat argumentul corespunzător.

O directiva simpla, cum este cea din exemplul precedent, poate consta dintr-un caracter "%" urmat de un specificator de tip, precum "d", care arata ca argumentul trebuie tratat ca număr zecimal. Cu toate acestea, o directiva mai sofisticata poate include următoarele componente, care trebuie să apară în ordinea indicata:

Specificator de completare (opțional): - Un specificator de completare precizează caracterul care se va folosi pentru a completa rezultatul până la dimensiunea ceruta a șirului, în cazul în care caracterul de completare este omis, rezultatul este completat cu spatii. Specificatorul de completare poate fi un caracter spațiu sau un 0 (zero). Un specificator de completare de tip spațiu este folosit frecvent cu șirurile, iar un specificator de completare zero se folosește mai ales alături de numere. Un alt caracter de completare poate fi specificat prin prefixarea acestuia cu un singur semn al citarii ('). De exemplu, pentru a completa un rezultat cu liniuțe de subliniere, specificați '_ drept caracter de completare.

Specificator de aliniere (opțional): - Un specificator de aliniere indica dacărezultatul trebuie să fie aliniat la stânga sau la dreapta. Dacăspecificatorul de aliniere este omis, rezultatul va fi aliniat la dreapta; dacăse indica o cratima (-) drept specificator de aliniere, rezultatul va fi aliniat la stânga.

Specificator de lăţime (opțional): - Un specificator de lăţime este un întreg care determina numărul minim de caractere ale rezultatului; sau, dacăargumentul este de tip double, numărul minim de caractere situate la stânga punctului zecimal. Dacărezultatul conține un număr mai redus de caractere, atunci va conține şi caractere de completare.

Specificator de precizie (opțional): - Un specificator de precizie este un punct zecimal, urmat de un întreg care determina numărul de cifre după punctul zecimal pe care trebuie să le conţină rezultatul. Specificatorul de precizie nu are nici un efect pentru alte tipuri decât double (float).

Specificator de tip (obligatoriu): - Specificatorul de tip determina modul de tratare şi afișare a argumentului.

Tabelul următor prezintă specificatorii de tip disponibili.Specificatorii de tip PHP folosiți la formatarea șirurilor

Specificator de tip Descriere

b - Tratează argumentul ca pe un întreg şi îl afișează ca valoare binara

c - Tratează argumentul ca pe un întreg şi afișează caracterul cu aceeași valoare ASCII ca şi argumentul

d - Tratează argumentul ca pe un întreg şi îl afișează ca valoare zecimala

f - Tratează argumentul ca pe o valoare de tip double şi îl afișează ca valoare cu virgula mobila

o - Tratează argumentul ca pe un întreg şi îl afișează ca pe o valoare scrisa în octal

s - Tratează argumentul ca pe un sir şi îl afișează

x - Tratează argumentul ca pe un întreg şi îl afișează ca număr hexazecimal, cu litere scrise cu minuscule

X - Tratează argumentul ca pe un întreg şi îl afișează ca număr

224

Page 225: curs DPW.docx

hexazecimal, cu litere scrise cu majusculeDacădoriți să inserați simbolul procentului în datele de ieșire ale unui apel la funcția

printf() sau sprintf(), inserați doua caractere "%".Tabelul următor prezintă rezultatele aplicării a diferite șiruri de formatare valorilor

selectate. Studiați tabelul şi verificați dacăați înțeles corect modul de operare a specificatorilor din cadrul fiecărui sir de formatare. Remarcați ca, în cazul omiterii cifrelor zecimale, se produce automat o rotunjire.

Spatiile au fost înlocuite prin accente circumflexe(^), pentru a facilita determinarea numărului de spatii şi a amplasării acestora.

Exemple de rezultate ale utilizării a diferite șiruri de formatare

Valoare Format Rezultat

100 %d 100

100 %b 1100100

100 %o 144

100 %x 64

100 %f 100.000000

12.345 %^-10f 12.345000^^^^^^^^

12.345 %^10f ^^^^^^^^12 .345000

12.345 %^-10.2f 12.35^^^^^^^^

12.345 %10.2f ^^^^^^^^12.35

test %^-10s test^^^^^^

test %^10s *^^^^^^testDacăutilizarea funcțiilor printf() şi sprintf() pentru formatarea numerelor pare cam

greoaie, puteți folosi funcția number_format(), care returnează o valoare de tip sir conținând un rezultat formatat. Puteți apela funcția cu unul, doua sau patru argumente:

number_format(număr) number_format(număr, zecimale) number_format(număr, zecimale, punct_zecimal, separator_mii)

Argumentul "număr" specifica valoarea numerica pe care doriți să o formatați.

Argumentul "zecimale" specifica numărul dorit de cifre zecimale. Argumentul "punct_zecimal" precizează caracterul ce se va folosi drept

punct zecimal. Argumentul "separator_mii' precizează caracterul care se va folosi ca

separator al miilor.În mod prestabilit, rezultatul este formatat fără zecimale, este inserat un punct (.)

înaintea cifrelor care compun partea zecimala, respectiv se folosește o virgula (,) pentru separarea miilor.

De exemplu, apelul la funcția number_format(1.234, 2) returnează valoarea 1.23Funcția PHP sscanf(), este complementara funcției printf(). Dacăfuncția printf()

generează date de ieșire formatate, funcția sscanf() citește un sir, îl interpretează prin referirea la un sir de formatare şi stabilește valorile variabilelor specificate în funcție de conținutul șirului.

Sa luam în considerare următorul exemplu:<?php$subiect = "08,25,2008";$n = sscanf($subiect, "%d,%d,%d", &$luna, &$zi, &$an);echo "Au fost găsite $n valori";echo "<br /> luna = $luna"; echo "<br /> zi = $zi"; echo "<br /> an = $an";?>

Datele de ieșire ale acestui script sunt:Au fost găsite 3 valoriluna = 8zi = 25an = 2008

225

Page 226: curs DPW.docx

6.4. Manipularea șirurilorPHP conține peste 70 de funcții care lucrează cu șiruri. Aceasta secțiune descrie

câteva funcții pe care este posibil să le utilizați frecvent. Aceste funcții va permit să obțineți lungimea unui sir, să eliminați dintr-un sir caracterele de tip spațiu alb, să convertiți caracterele unui sir în majuscule sau minuscule şi altele.

Funcția strlen() returnează lungimea șirului specificat ca argument al funcției. Iată un exemplu simplu de utilizare a funcției strlen():<?php$s = "Acesta este un sir";$n = strlen($s);echo "<br /> Lungimea șirului este: $n";?>

Scriptul de mai sus va afișa:Lungimea șirului este: 18

Numeroase funcții PHP va permit să eliminați caracterele de tip spațiu alb de la una sau ambele extremităţi ale unui sir.

Iată un exemplu; care prezintă modul de operare al acestor funcții:<?php$s = " Acesta este un sir ";$n = strlen($s);echo "<br /> Lungimea șirului este: $n";$trim =chop($s); // Elimina spatiile albe din partea dreapta a șirului$n = strlen($trim);echo "<br /> Lungimea șirului este: $n";$trim = ltrim($s); // Elimina spatiile albe din partea stânga a șirului$n = strlen($trim);echo "<br /> Lungimea șirului este: $n";$trim = rtrim($s); // Elimina spatiile albe din partea dreapta a șirului$n = strlen($trim);echo "<br /> Lungimea șirului este: $n";$trim = trim($s); // Elimina spatiile albe din ambele părţi a șirului$n = strlen($trim);echo "<br /> Lungimea șirului este: $n";?>

Scriptul de mai sus va afișa:Lungimea șirului este: 36Lungimea șirului este: 27Lungimea șirului este: 27Lungimea șirului este: 27Lungimea șirului este: 18

Următorul tabel prezintă Funcțiile PHP de eliminare a caracterelor din șiruri:

Funcții PHP de eliminare a caracterelor din șiruri

Funcție Descriere

chop(s)

- Returnează valoarea lui 's', eliminând spatiile albe de la extremitatea din dreapta a șirului. Similar cu rtrim()

ltrim(s)

- Returnează valoarea lui 's', eliminând spatiile albe de la extremitatea din stânga a șirului

rtrim(s)

- Returnează valoarea lui 's', eliminând spatiile albe de la extremitatea din dreapta a șirului. Similar cu chop()

trim(s) - Returnează valoarea lui 's', eliminând spatiile albe de la ambele extremităţi

Funcția strtoupper() returnează valoarea argumentului, convertita la majuscule. Funcția strtolower() returnează valoarea argumentului, convertita la minuscule. Funcția ucfirst() returnează valoarea argumentului, cu primul caracter din sir

majuscula. Nici una din funcții nu modifica valoarea argumentului, valoarea convertita este cea

returnata ca rezultat al funcției.Iată un scurt exemplu, care prezintă modul de operare a acestor funcții:

<?php$s = "abcdefg";

226

Page 227: curs DPW.docx

$rezultat = strtoupper($s);$rezultat2 = ucfirst($s);echo "<br />strtoupper('$s'): $rezultat";echo "<br />ucfirst('$s'): $rezultat2";$s = "ABCDE";$rezultat = strtolower($s);echo "<br />strtolower('$s'): $rezultat";?>

Scriptul de mai sus va afișa:strtoupper(abcdefg): ABCDEFGucfirst(abcdefg): Abcdefgstrtolower(ABCDE): abcde

6.5. Compararea șirurilorPHP furnizează patru funcții care sunt deosebit de utile pentru compararea șirurilor.

Aceste funcții sunt enumerate în tabelul următor.Fiecare funcție returnează o valoare al cărei semn determina rezultatul comparației;

nu trebuie să încercați să interpretați valoarea returnata efectiva.

Funcții PHP de comparație între șiruri

Funcția Descriere

strcasecmp(s1, s2)

- Executa o comparație fără sensibilitate la diferența între majuscule şi minuscule. Returnează o valoare mai mica decât zero dacă's1' este mai mic decât 's2', o valoare mai mare decât zero dacă's1' este mai mare decât 's2', respectiv 0 în celelalte cazuri.

strcmp(s1, s2)

- Executa o comparație cu sensibilitate la diferența între majuscule şi minuscule. Returnează o valoare mai mica decât zero dacă's1' este mai mic decât 's2', o valoare mai mare decât zero dacă's1' este mai mare decât 's2', respectiv 0 în celelalte cazuri.

strncasecmp(s1, s2, n)

- Executa o comparație fără sensibilitate la diferența între majuscule şi minuscule. La comparație sunt luate în considerare un număr de 'n' caractere. Returnează o valoare mai mica decât zero dacă's1' este mai mic decât 's2', o valoare mai mare decât zero dacă's1' este mai mare decât 's2', respectiv 0 în celelalte cazuri.

strncmp(s1,s2, n)

- Executa o comparație cu sensibilitate la diferența între majuscule şi minuscule. La comparaţie sunt luate în considerare un număr de 'n' caractere. Returnează o valoare mai mica decât zero dacă's1' este mai mic decât 's2', o valoare mai mare decât zero dacă's1' este mai mare decât 's2', respectiv 0 în celelalte cazuri.

Iată un scurt exemplu care prezintă modul de utilizare a acestor funcții:<?php$s1 = "abcd";$s2 = "ABCE";$rezultat = strcasecmp($s1, $s2);echo "<br /> Funcția strcasecmp a returnat $rezultat";$rezultat = strcmp($s1, $s2);echo "<br /> Funcția strcmp a returnat $rezultat";$rezultat = strncasecmp($s1, $s2, 3);echo "<br /> Funcția strncasecmp returnat $rezultat";$rezultat = strncmp($s1, $s2, 3);echo "<br /> Funcția strncmp a returnat $rezultat";?>

Scriptul de mai sus va afișa:Funcția strcasecmp a returnat -1Funcția strcmp a returnat 1Funcția strncasecmp returnat 0Funcția strncmp a returnat 1

Datele de ieșire va arata ca funcția strcasecmp() a identificat șirul "abcd" ca fiind mai mic decât "ABCE", în schimb, funcția strcmp(), la fel ca şi funcția strncmp(), a identificat șirul "abcd" ca fiind mai mare decât "ABCE". Aceasta s-a întâmplat deoarece literele minuscule

227

Page 228: curs DPW.docx

au în secvenţă ASCII o poziție superioara literelor scrise cu majuscule; litera 'A' are valoarea ASCII 65, iar litera 'a' are valoarea ASCII 97.

De asemenea, datele de ieșire arata ca funcția strncasecmp() a identificat șirul "s1" ca egal cu "s2", deoarece au fost luate în considerare numai primele 3 caractere.

6.6. Descoperirea şi extragerea subșirurilorPHP include numeroase funcții care găsesc şi extrag sub-tiruri, adică părţi dintr-un sir.

Cele mai importante funcții de acest gen sunt rezumate în tabelul următor:

Funcții PHP de extragere şi căutare

Funcție Descriere

strchr(s1,s2)Returnează toate șirurile 's1' de la prima apariție a șirului 's2' şi până la sfârșit. Dacă's1' nu este găsit, funcția returnează FALSE. Funcția strstr() executa aceeași operație

stristr(s1,s2)

Returnează toate șirurile 's1' de la prima apariție a șirului 's2' şi până la sfârșit. Dacă's1' nu este găsit, funcția returnează FALSE. Șirurile 's1' şi 's2' sunt comparate fără a se tine cont dacăliterele sunt majuscule sau minuscule

strpos(s1,s2) Returnează poziția (nr. întreg) a primei apariții a șirului 's2' în 's1'.Dacă's2' nu este găsit, funcția returnează FALSE

strrchr(s1,s2)Returnează toate șirurile 's1' de la ultima apariție a șirului 's2' şi până la sfârșit. Dacă's1' nu este găsit, funcția returnează FALSE. La comparație este folosit numai primul caracter al șirului 's2'

strstr(s1,s2)Returnează toate șirurile 's1' de la prima apariție a șirului 's2' şi până la sfârșit. Dacă's1' nu este găsit, funcția returnează FALSE. Funcţia strchr() executa aceeași operație

substr(s, starf) substr(s, start, lung)

Returnează porțiunea șirului 's' specificata de indexul întreg 'start' respectiv de indexurile 'start' şi 'lung'. Prima poziție a șirului este poziția 0.

Iată un exemplu simplu, care prezintă modalitățile de utilizare a mai multor funcții de extragere şi căutare:<?php$s = "the cat on the mat near the bat";$b = "at";$n = strpos($s, $b);echo "<br /> strpos(\"$s\", \"$b\"): $n";$s = "the cat on the mat near the bat";$b = "at";$n = strchr($s, $b);echo "<br /> strchr(\"$s\", \"$b\"): $n";$s = "the cat on the mat near the bat";$b = "at";$n = strrchr($s, $b);echo "<br /> strrchr(\"$s\", \"$b\"): $n";$s = "the cat on the mat near the bat";$rezultat = substr($s, 4, 3);echo "<br /> substr(\"$s\", 4, 3): $rezultat";?>

Studiați cu atenție scriptul şi tabelul de mai sus pentru a înțelege datele de ieșire. Iată şi datele de ieșire:strpos("the cat on the mat near the bat", "at"): 5strchr("the cat on the mat near the bat", "at"): at on the mat near the batstrrchr("the cat on the mat near the bat", "at"): atsubstr("the cat on the mat near the bat", 4, 3): cat

O potenţială dificultate în utilizarea funcției strpos() consta în aceea ca poate fi greu de sesizat diferența dintre valoarea returnată 0, care arata ca subşirul a fost găsit în poziția iniţială a șirului, şi valoarea returnată FALSE, care arata ca subşirul nu a fost găsit.

Iată un scurt exemplu care indica un mod adecvat de testare a valorii returnate de funcția strpos(), astfel încât să se poată face diferența între cele doua rezultate:

228

Page 229: curs DPW.docx

<?php$poz = strpos($s1, $s2);if ($poz == FALSE) {

echo "<br /> subşiirul nu a fost găsit";}?>

Procedeul prezentat folosește operatorul de identitate (==) pentru a determina dacăvaloarea returnata este identica - nu doar aritmetic egala - cu valoarea FALSE.

6.7. Înlocuirea unui subșirO operație frecvent folosita în programare consta în găsirea unui subșir şi înlocuirea

să cu o valoare noua. PHP are doua funcții deosebit de utile pentru asemenea operații, şi anume str_replace() şi substr_replace().

Mai jos sunt prezentate pe scurt aceste funcții. Remarcați ca funcția str_replace() notează subșirul prin valoarea sa, în timp ce

funcția substr_replace() notează subşirul prin poziția să în interiorul șirului subiect. str_replace(cauta, înlocuire, subiect) - Se cauta în șirul 'subiect' subșirul 'cauta';

dacăsubșirul este găsit, returnează valoarea 'subiect', înlocuindu-se prima apariție a șirului 'cauta' cu 'înlocuire'.

substr_replace(subiect, înlocuire, start, lungime) - Returnează valoarea 'subiect', înlocuind subșirul care începe de la 'start' şi având lungimea 'lungime' cu șirul 'înlocuire'.

Iată un exemplu care prezintă modul de utilizare a acestor funcții:<?php$subiect = "the cat on the mat near the bat";echo "<br /> Subiect : $subiect";$cauta = "cat";$inlocuire = "DOG";$rezultat = str_replace($cauta, $inlocuire, $subiect);echo "<br /> str_replace : $rezultat";$inlocuire = "CAT";$rezultat = substr_replace($subiect, $inlocuire, 4, 3);echo "<br /> substr_replace : $rezultat";?>

Iată şi rezultatul exemplului :Subiect : the cat on the mat near the batstr_replace : the DOG on the mat near the batsubstr_replace : the CAT on the mat near the bat

6.8. OperatoriOperatorii sunt simboluri care pot fi utilizate pentru a efectua operații asupra unor

variabile şi constante de diverse tipuri. Entitățile asupra cărora se aplica un operator se numesc operanzi. Un operator poate avea unul, doi sau chiar trei operanzi. Majoritatea operatorilor sunt binari (au doi operanzi). în general operatorii sunt clasificați funcție de tipul datelor asupra cărora acționează.

6.8.1. Operatori aritmeticiOperatorii aritmetici provin din matematica şi acționează asupra datelor de tip

numeric.Aceștia sunt:

Operator

Denumire Exemplu

+ adunare $a + $b

- scădere $a - $b

* înmulțire $a * $b

/ împărţire $a / $b

% modulo $a % $b

++ incrementare - post

$a++

++ incrementare - pre

++$a

-- decrementare - $a--

229

Page 230: curs DPW.docx

post

-- decrementare - pre

--$a

Operatorul % (modulo) are ca şi rezultat restul împărţirii numerelor transmise.Operatorii de incrementare/decrementare sunt operatori unari care au ca rezultat

creșterea/descreșterea cu o unitate a variabilei operand asupra căreia se aplica. Operatorii post se aplica după ce valoarea este evaluata în expresia din care face parte iar operatorii pre se aplica înainte de evaluarea expresiei.

Exemple:$a = 5;$b = $a++; // b = 5, a = 6$c = ++$a; // c = 7, a = 7$d = 4 + --$a; // d = 10, a = 6$e = 4 + --$c; // e = 11, c = 6

Dacăoperatorii aritmetici se aplica asupra unor valori de tip string, PHP va încerca conversia acestora în numere. Dacăconversia nu reușește, șirurile sunt convertite la valoarea 0.

6.8.2. Operatori pe șiruri de caractereIn PHP exista un singur operator pe șiruri de caractere, restul operațiilor fiind

efectuate prin intermediul unor funcții din biblioteca standard a limbajului. Acest operator este operatorul de concatenare - punct '.'.$s1 = "Șirul 1";$s2 = "Șirul 2";$s3 = $s1."-".$s2; // s3 = "Șirul 1-Sirul 2"

6.8.3. Operatori de asignareOperatorii de asignare permit atribuirea de valori variabilelor. Cel mai simplu

operator este operatorul '='. El are doi operanzi: o variabila în partea stânga şi o expresie în partea dreapta. Valoarea expresiei este evaluata apoi atribuita variabilei din partea stânga si, în final, returnata de operator. Deoarece = nu este o intrucţiune PHP ci un operator, el poate intra în expresii complexe de genul: $a = $b = 4 + ($c = 3); // a = 7, b = 7, c=3

In plus fata de operatorul de asignare simplu, PHP pune la dispoziția programatorilor şi operatori de asignare combinați:

Operator

Utilizare Echivalent cu

+= $a += $b $a = $a + $b

-= $a -= $b $a = $a - $b

*= $a *= $b $a = $a * $b

/= $a /= $b $a = $a / $b

%= $a %= $b $a = $a % $b

.= $s1 .= $s2

$s1 = $s1 . $s2

6.8.4. Operatori de referireVersiunea PHP 4 a introdus un nou operator şi anume operatorul de referire '&'. El

este un operator unar, având ca operand o variabila şi permite legarea unui nume de variabila de zona de memorie a variabilei operand. Spre exemplu se considera secvenţă:$a = 3;$b = $a; // a = 3, b = 3$b = 5; // a = 3, b = 5

In urma acestei secvențe vor exista doua variabile independente $a şi $b. Modificarea ulterioara a valorii lui $b nu afectează valoarea reţinută de $a. Daca, în schimb, consideram secvenţă:$a = 3;$b = &$a; // a = 3, b = 3$b = 5; // a = 5, b = 5

Se va observa ca $b nu este o variabila independenta ci este un nou nume pentru variabila $a (ambele vor indica spre aceiași zona de memorie). Orice modificare a valorii lui $b va afecta în aceiași măsură şi valoarea lui $a.

230

Page 231: curs DPW.docx

6.8.5. Operatori de comparareOperatorii de comparare sunt operatori binari care au ca şi scop compararea valorilor

operanzilor. Rezultatul acestor operatori este unul logic, având valoarea true (adevărat) sau flase (fals). Aceștia sunt:

Operator

Denumire Exemplu

== egalitate $a == $b

=== test de identitate

$a === $b

!= inegalitate $a != $b

<> inegalitate $a <> $b

< mai mic $a < $b

> mai mare $a > $b

<= mai mic egal $a <= $b

>= mai mare egal $a >= $bDacăoperanzii nu sunt de același tip se va încerca conversia operanzilor pentru a

deveni compatibili şi apoi se va face comparația. în cazul operatorului test de identitate '===' operanzii nu sunt considerați egali dacănu au același tip. Exemple:<?php$a = 4; # iniţializăm $a cu numărul 4$b = "4"; # iniţializăm $b cu string-ul "4"if( $a == 4 ) print "\$a este 4"; # va afișa "$a este 4"else print "\$a nu este 4";if( $a == $b ) print "Sunt egale"; # va afișa "Sunt egale"else print "Nu sunt egale";if( $a === $b ) print "Sunt identice"; # va afișa "Nu sunt identice"else print "Nu sunt identice";# Nota: deoarece $a este număr iar $b string, ele nu sunt identiceif( $a > 4 ) print "\$a este mai mare decât 4";?>

Atenție! Dacăse compara un string (text) cu un număr, stringul este convertit la un număr. Exemplu:"text" == 0 // echivalent 0 == 0, evaluează la true

Dacăse compara 2 stringuri ce conțin numere, acestea sunt mai întâi convertite la numerele pe care le reprezintă şi apoi are loc comparația. Astfel, 2 texte care sunt diferite ar putea fi considerate egale. Exemplu:"1" == "01" // echivalent 1 == 1, evaluează la true"1" == "1e0" // echivalent 1 == 1, evaluează la true

Nota: "01" şi "1e0" sunt notații matematice diferite pentru numărul 1.6.8.5.1. Diferența intre operatorii == şi =Operatorul == este diferit de operatorul de atribuire = şi nu trebuie confundați.

Dublu-egal (==) este folosit pentru comparare iar egal simplu (=) - pentru atribuirea de valori unei variabile.

$a = 5 este o atribuire.print $a = 5; // 5

Instrucțiunea print afișează rezultatul atribuirii ( rezultatul unei atribuiri este întotdeauna egal cu valoarea atribuita

$a == 1 este o verificare. Instrucțiunea afișează rezultatul verificării.print $a == 1; // false

In timp ce atribuirile se pot folosi atât de sine statator ($a = 1;), cat şi ca expresii în cadrul instrucțiunilor (print $a = 1; return $a = 1;) operatorii == sau === sunt folosiți doar în cadrul instrucțiunilor.

corect$a = 10; atribuire de sine stătătoareprint $a = 10; atribuire + afișarea rezultatului atribuirii

incorect - nu generează erori dar aceasta construcție este inutila.231

Page 232: curs DPW.docx

$a == 1; nu se face nimic cu rezultatul comparației corect

print $a == 1; # se afișează rezultatul comparațieiprint $a === '1'; # se afișează rezultatul comparației exacteif( $a == 1 ) echo 'egal'; # se face o verificare

6.8.6. Operatori logiciOperatorii logici sunt utilizați pentru a combina valori logici în expresii.

Aceștia sunt:Operator

Denumire Rezultat

! negare !$a neaga valoarea logica a lui $a

&& si logic $a && $b întoarce adevărat doar dacăambele valori $a şi $b sunt adevărate

and si logic $a and $b întoarce adevărat doar dacăambele valori $a şi $b sunt adevărate

|| sau logic $a || $b întoarce adevărat dacăcel puțin una dintre valorile lui $a sau $b este adevărata

or sau logic $a or $b întoarce adevărat dacăcel puțin una dintre valorile lui $a sau $b este adevărata

xor sau exclusiv

$a xor $b întoarce adevărat dacă$a şi $b au valori logice diferite

6.8.7. Operatori pe bițiOperatorii pe biți ajuta la prelucrarea numerelor întregi considerate ca șiruri de biți.

Aceștia sunt:Operator

Denumire Rezultat

~ negare pe biți ~$a inversează valorilor tuturor biților lui $a

& si pe biți $a &$b doar biți pe 1 în $a şi $b simultan sunt setați pe 1 în rezultat

| sau pe biți $a | $b biți pe 1 în $a sau $b sunt setați pe 1 în rezultat

^ sau exclusiv pe biți

$a ^ $b biții setați în $a sau $b dar nu în ambele sunt setați pe 1 în rezultat

<< deplasare stânga

$a << $b deplasează biții din $a la stânga cu $b poziții

>> deplasare dreapta

$a >>$b deplasează biții din $a la dreapta cu $b poziții

6.8.8. Operatori adiționaliOperatorii prezentați în acest subcapitol sunt: operatorul condițional, operatorul de

suprimare a erorilor şi operatorul de execuție. Operatorul condițional are sintaxa:

condiție ? valoare_adevărata : valoare_falsaOperatorul evaluează mai întâi expresia logica din condiție. Dacăcondiția este

adevărata va întoarce expresia valoare_adevărata iar în caz contrar valoare_falsa.Exemplu: echo ($varsta < 18) ? "adolescent" : "matur";

Operatorul de suprimare a erorilor '@' are sintaxa:@(expresie)

El are rolul de a suprima erorile şi avertismentele generate de expresia operand.Exemplu: $a = ($b / 0); // generează avertisment de împărţire la zero$a = @($b / 0 ); // nu generează avertisment

In cel de al doilea caz, valoarea lui $a va fi setata pe valoare vida ( convertita la 0 ca întreg).

Operatorul de execuție poate fi folosit pentru a executa o comanda pe interpretorul de comenzi al serverului.

El consta în două apostroafe inverse '`'între care este plasată comanda de executat. Exemplu `ls -al`.

232

Page 233: curs DPW.docx

Operatorul de execuție acționează doar dacăopțiunea safe_mode din php.ini este dezactivata (Off). în general acest operator nu se folosește datorita breșelor de securitate pe care le deschide pe server.

6.9. ExpresiiO definiție simpla a expresiilor PHP este următoarea: "expresie = orice are o valoare".

Cea mai mare parte a unui program PHP consta în expresii. Expresiile combina operanzi şi operatori de diverse tipuri: constante, variabile sau nume de funcții.

La evaluarea expresiilor operatorii se vor aplica într-o ordine prestabilita, data de "precedenta" lor. Tabelul următor prezintă operatorii în ordinea inversa a precedenţei lor (in fata sunt cei mai puțin prioritari).

Precedenta

Asociativitate

Operator

1 stânga ,

2 stânga or

3 stânga xor

4 stânga and

5 stânga = += -= *= /= .= %=

6 stânga ? :

7 stânga ||

8 stânga &&

9 stânga |

10 stânga ^

11 stânga &

12 - == != ===

13 - < > <= >=

14 stânga << >>

15 stânga + - .

16 stânga * / %

17 dreapta ! ~ ++ -- @

18 dreapta []

19 - new

20 - ( )O atenție deosebita trebuie acordata șirurilor de caractere intre ghilimele " ". La

evaluarea expresiei în care acestea apar, toate numele de variabile care apar în interiorul lor sunt înlocuite cu valorile corespunzătoare.

Exemplu:$nume = "Vasile";$sir1 = "Domnul $nume are masina roșie!";$sir2 = 'Domnul $nume are masina roșie!';echo $sir1; // afișează Domnul Vasile are masina roșie!echo $sir2; // afișează Domnul $nume are masina roșie!

7. Structuri de control7.1. Instrucțiuni condiționaleInstrucțiunile condiționale permit execuția condiţionată a secvențelor de program. în

lipsa unor astfel de instrucțiuni ar fi practic imposibil de implementat o mare parte dintre problemele din lumea reala.

7.1.1. Instrucțiunea if Instrucțiunea if permite luarea de decizii privind execuția unei alte instrucțiuni sau a

unui bloc de instrucțiuni inclus intre acolade ('{' şi '}').Cea mai simpla sintaxa a instrucțiunii if este:if (expr) instrucțiune

Expresia expr este o expresie (condiție) logica ce se evaluează la true sau false. Dacăevaluarea condiției are ca rezultat o valoare adevărata se va executa instrucțiunea specificata, dacănu, instrucțiunea va fi ignorata şi se va trece mai departe.

233

Page 234: curs DPW.docx

Exemplu:if ($nota < 5)

echo 'Examenul trebuie repetat!';Dacăexpresia condiţională nu este una logica, se va face o conversie automata la o

valoare logica. Valorile numerice 0 sau 0.0, șirurile vide (""), tablourile fără nici un element sau variabilele neinițializate vor fi evaluate la fals, restul fiind evaluate la true.

Dacăse dorește execuția condiţională a mai mult de o instrucțiune se va utiliza construcţia de bloc, ca în exemplul următor:if ($nota < 5){

echo 'Examenul trebuie repetat!';$bursa = 0;

} In multe cazuri, pentru condiție neadevărată se dorește execuția altei instrucțiuni sau

a unu bloc de instrucțiuni. în acest caz se va folosi clauza opţională else. Exemplu:if ($nota < 5){

echo 'Examenul trebuie repetat!';$bursa = 0;

} else{

echo 'Felicitări pentru trecerea examenului!';$bursa = 1000000;

} In unele situații, la luarea unei decizii exista mai multe opțiuni. în acest caz ar trebui

testate mai multe condiții. Pentru aceasta, limbajul PHP pune la dispoziția programatorilor clauza elseif. în acest caz sintaxa instrucțiunii este:if (expr1) instructiune1elseif (expr2) instructiune2... elseif (expr3) instrucțiuneExemplu:if ($nota < 5){

echo 'Insuficient';$bursa = 0;

} elseif ($nota<7){

echo 'Suficient';$bursa = 500000;

} elseif ($nota<9){

echo 'Bine';$bursa = 1000000;

}else{

echo 'Bine';$bursa = 1500000;

}

7.1.2. Instrucțiunea switch Instrucțiunea switch este similara cu o serie de instrucțiuni if care testează mai multe

valori posibile pentru o anumita expresie. Avantajul sau este o scriere mai concisa şi mai simplu de înţeles şi depanat. Sintaxa acestei instrucțiuni este:

234

Page 235: curs DPW.docx

switch (expr) { case valoare_1:

instrucțiune_1; break;

case valoare_2: instrucțiune_2; break;

... case valoare_n:

instrucțiune_n; break;

default: instrucțiune_default;

} După evaluarea expresiei, valoarea obţinută este comparata cu valorile din clauzele

case. Dacăse intâlneşte o potrivire se va continua cu execuția instrucțiunilor din clauzele case următoare, pana la întâlnirea instrucțiunii break. Consecința este ca, dacăinstrucțiunile dintr-o clauza case nu se termina cu break, se va continua execuția cu instrucțiunile clauzei următoare. Acest lucru se poate utiliza pentru a executa o secvenţă de instrucțiuni comuna pentru mai multe valori, ca şi în exemplu următor:switch ($nota) { case 1: case 2: case 3: case 4:

echo ' nu are bursa!'; break;

case 5: case 6: echo ' bursa este 500000.'; break;

case 7: echo ' bursa este 700000.'; break;

case 8: case 9: echo ' bursa este 1000000.'; break;

case 10: echo ' bursa este 1500000.'; break;

default: echo 'nota nu este corecta!';

} 7.2. Instrucțiuni repetitiveInstrucțiunile repetitive permit implementarea algoritmilor care necesita repetarea

unei secvențe de calcul. 7.2.1. Instrucțiunea while Instrucțiunea while se folosește pentru a implementa o bucla repetitiva cu test inițial.

Ea permite execuția unei instrucțiuni sau a unui bloc de instrucțiuni inclus intre acolade ('{' şi '}') şi are sintaxa:while (expr) instrucțiune

Expresia expr este o expresie (condiție) logica ce se evaluează înainte de fiecare repetiție. Dacărezultatul evaluării condiției este adevărat, se va executa instrucțiunea specificata apoi secvenţă se va relua. Dacărezultatul evaluării este fals, instrucțiunea va fi ignorata şi se va trece la intrucţiunea de după while.Exemplu:$i = 1;while ($i< 5)

echo 'Numărul '.$i++."<BR>";7.2.2. Instrucțiunea do-while Instrucțiunea do-while este asemănătoare cu instrucțiunea while dar se folosește

pentru a implementa o bucla repetitiva cu test final. Ca şi while, ea permite execuția unei instrucțiuni sau a unui bloc de instrucțiuni inclus intre acolade ('{' şi '}') şi are sintaxa:do instrucțiune

235

Page 236: curs DPW.docx

while (expr);Expresia expr este o expresie (condiție) logica ce se evaluează după fiecare repetiție.

Daca, după executarea instrucțiunii condiția este adevărata se va relua secvenţă de la început. în cazul în care condiția devine falsa, repetiția se va încheia şi se va trece la intrucţiunea de după do-while.Exemplu:echo "Se generează un sir de numere aleatoare în intervalul 0-100.<BR>";echo "Generarea se opreşte la primului număr mai mare de 90 sau când s-au depășit 20 de numere.<BR>";$i = 1;do {

$n = rând(0,100);echo 'Numărul '.$i++." = ".$n."<BR>";

} while ($n<=90 and $i<21);In cazul buclei do-while, instrucțiunea din bucla se va executa cel puțin o data chiar şi

în cazul în care condiția nu este adevărata de la început.7.2.3. Instrucțiunea for Instrucțiunea for este inspirata din limbajul C. Ca şi while, ea permite execuția unei

instrucțiuni sau a unui bloc de instrucțiuni inclus intre acolade ('{' şi '}') şi are sintaxa:for (expr1; expr2; expr3) instrucțiune

Prima expresie (expr1) este numita expresie de inițializare şi se executa o singura data, necondiționat, la începutul ciclului. De obicei aceasta expresie conține atribuiri. Expr2 este o condiție logica ce se evaluează la începutul fiecărei iterații. Pentru condiție adevărata se va executa instrucțiunea din bucla, dacăeste falsa, repetiția se va încheia şi se va trece la instrucțiunea de după for. Expr3 se numește expresie de iterare şi se evaluează la sfârșitul fiecărei repetări. Ea are rolul de a asigura trecerea la pasul următor (incrementarea contoarelor, citirea datelor următoare etc.).

Oricare dintre cele trei expresii pot fi vide. Dacăexpr3 este vida PHP o va considera adevărata şi va cicla la infinit. în acest caz trebuie asigurata o ieșire forţată din bucla utilizând una dintre instrucțiunile de control pentru. Exemplu de folosire a instrucțiunii for:echo "Tabloul factorialelor primelor 10 numere naturale.<BR>";echo "Definiția factorialului unui număr n este n!=1*2*3*...*n.<BR>";echo "<TABLE border=1>";for ($n = 1, $factorial = 1; $n <= 10; $n++) {

echo "<TR> <TD>";echo $n;echo "</TD> <TD>";$factorial *= $n; echo $factorial;echo "</TD> </TR>";

} 8. Tablouri PHP. Instrucțiunea foreachUn tablou este un tip de date ce poate retine un set de valori. în PHP tabloul va

asocia fiecărei intrări o cheie prin care aceasta poate fi regăsită. Cheile pot fi numerice (in acest caz indicii creați implicit vor fi 0,1,2 ...) sau pot fi șiruri de caractere (caz în care tabloul se numește asociativ). Valorile reținute pot avea orice tip dar sunt de același fel pentru un tablou dat.

O variabila de tip tablou poate fi creata prin constructorul array(). Sintaxa pentru crearea unui tablou indexat numeric este:

$tablou = array (el0, el1, ... el_n);Exemplu:$culori= array ("alb", "albastru", "verde", "roșu", "galben");

Accesul la elementele tabloului se face prin indecși numerici (cu semnificația de numere de ordine în tablou). Spre exemplu $culori[0] are valoarea "alb", $culori[4] are valoarea "galben" etc.

In PHP dimensiunea unui tablou este variabila. Pentru a adăuga un nou element se va atribui pur şi simplu variabilei cu următorul indice o anumita valoare. Spre exemplu $culori[5]="negru" va adăuga un nou element ("negru") la sfârșitul tabloului $culori.

236

Page 237: curs DPW.docx

Numărul curent de elemente ale unui tablou se poate afla în orice moment cu ajutorul funcției count($tablou).

Tablourile asociative sunt tablouri în care valorilor conținute le sunt asociate chei prin care acestea pot fi regăsite. Sintaxa pentru crearea unui astfel de tablou este:$tablou = array( "cheie1" => el1, "cheie2" => el2, ... "cheie_n" => el_n);Exemplu:

$pret = array ("pâine alba" => 7000, "ou" => 3000, "zahar" => 24000);Accesul la un element se face prin cheia asociata. Spre exemplu $pret["pâine alba"]

are valoarea 7000. şi în acest caz tabloul poate şi extins dinamic prin adăugarea unui nou element a cărei cheie nu exista în tablou. Spre exemplu $pret["miere 500g"] = 30000 va adăuga elementul 30000 cu cheia "miere 500g" la tabloul $pret, acesta având acum patru elemente.

Ambele tipuri de tablouri rețin intern o referința (pointer) către elementul curent de prelucrat. Acest lucru permite scrierea secvențelor pentru parcurgerea şi prelucrarea elementelor lor. Instrucțiunea foreach este asemănătoare cu instrucțiunea for dar este destinata exclusiv parcurgerii de tablouri, în special a celor asociative. Sintaxa acestei instrucțiuni are doua forme alternative:

foreach (tablou as valoare_element_curent)instrucțiuneforeach (tablou as cheie => valoare_element_curent)instrucțiune

Prima forma permite extragerea tuturor valorilor din tablou şi prelucrarea lor individual, pe când cea de a doua forma permite şi extragerea şi prelucrarea cheilor asociate.

La prelucrarea tablourilor numerice se prefera folosirea iterației după index în genul:echo "<UL>";for ($i = 0; $i < count($culori); $i++)

echo "<LI>".$culori[$i]."</LI>";echo "</UL>";

8.1. Utilizarea matricelorDeseori este convenabila stocarea mai multor valori într-o variabila. O asemenea

variabila se numește matrice sau "tablou", iar valorile individuale se numesc elementele matricei. Aici, ambele denumiri: "matrice" sau "tablou" reprezintă același lucru (in varianta engleza: Array), fapt pentru care vom folosi oricare dintre aceste denumiri.

Fiecare element al unei matrici are doua elemente importante: cheia şi valoarea elementului.

Matricele pot fi create folosind doua metode principale:1. utilizând direct instrucțiunile de atribuire2. folosind sintaxa array()

8.1.1. Crearea de matrice folosind funcția de atribuirePentru a crea o matrice, atribuiți unui element al matricei o valoare şi o cheie. De

exemplu, următoarea instrucțiunea de atribuire:$clasa[1] = "geometrie";creează un tablou denumit "$clasa" şi un element cu valoarea "geometrie" identificat prin cheia "1".

Pentru a stoca în matrice o a doua valoare, puteți folosi următoarea instrucțiune de atribuire:$clasa[2] = "algebra";

Pentru a obține acces la un element al matricei, specificați numele matricei şi valoarea cheii. De exemplu, instrucțiunea de atribuire$clasa_mate = $clasa[1];

Atribuie valoarea "geometrie" variabilei $clasa_mate.Cheile folosite pentru identificarea elementelor unei matrice nu trebuie să fie

obligatoriu numere consecutive; nici măcar nu trebuie să fie numere. De exemplu, iată instrucțiuni de atribuire care creează o matrice ce stochează preferințe în materie de fructe:$preferinte[Nelu] = "cireșe";$preferinte[Radu] = "mere";$preferinte[Gabi] = "pere";

8.1.2. Crearea de matrice folosind sintaxa array()

237

Page 238: curs DPW.docx

Dincolo de utilizarea instrucțiunilor de atribuire, cealaltă modalitate principala de creare a unui tablou PHP consta în utilizarea funcției array(). Iată un exemplu simplu, care creează un tablou având drept chei valori întregi consecutive:$limbaje = array("Perl", "PHP", "Python");

Deoarece valoarea cheilor nu a fost specificata, acestea vor fi automat trecute de program ca numere întregi consecutive, începând de la "0" (prima cheie va avea valoarea '0', a doua cheie va avea valoarea '1', ...)

Aceasta instrucțiune creează o matrice care conține următoarele asocieri:0 => Perl1 => PHP2 => Python

Dacădoriți să asociați unei valori o anumita cheie, puteți folosi operatorul =>, astfel:$limbaje = array(10=>"Perl", "PHP", "Python");

Aceasta instrucțiune creează următoarea matrice:10 => Perl11 => PHP12 => Python

Ca şi în cazul utilizării unei instrucțiuni de atribuire pentru crearea unei matrice valorile cheilor nu trebuie să fie consecutive şi nici măcar întregi:$limbaje = array("PHP"=>"Ridicat", "Python"=>"Mediu", "Perl"=>"Redus");

Aceasta instrucțiune creează următoarea matrice:PHP => RidicatPython => MediuPerl => Redus

8.2. Matrici multi-dimensionaleEste posibil ca un element al matricei să fie de asemenea o matrice. în acest caz

avem de-a face cu o matrice multi-dimensională.Sa luam un exemplu practic :

<?php$multiDimArray[firstLine] = array(1=>10, 2=>20, "a"=>"alpha");$multiDimArray["nextLine"] = array(1=>20, 2=>40, "b"=>"beta");echo "<br />".$multiDimArray["firstLine"][1]; echo "<br />".$multiDimArray["nextLine"][1]; echo "<br />".$multiDimArray["firstLine"][2]; echo "<br />".$multiDimArray["firstLine"]["a"]; echo "<br />".$multiDimArray["nextLine"]["b"]; ?>Sau putem scrie același script şi astfel (rezultatul e același) :<?php$multiDimArray=array("firstLine"=>array(1=>10,2=>20,"a"=>"alpha"),"nextLine"=>array(1=>20, 2=>40, "b"=>"beta"));echo "<br />".$multiDimArray["firstLine"][1]; echo "<br />".$multiDimArray["nextLine"][1]; echo "<br />".$multiDimArray["firstLine"][2]; echo "<br />".$multiDimArray["firstLine"]["a"]; echo "<br />".$multiDimArray["nextLine"]["b"]; ?>

Rezultatul afișat va fi următorul :102020alphabeta

In exemplul de mai sus am declarat un array cu 2 linii şi 3 coloane. Prima linie este identificata de array-ul cu numele "fisrtLine", iar ce-a de-a doua linie este identificata de "nextLine".

Observați de asemenea folosirea în funcția "echo" a operatorului de concatenare "." împreună cu "<br />" (care este un element din XHTML), pentru ca la afișarea în browser fiecare rezultat al funcției "echo" să fie trecut pe o linie noua. în caz contrar rezultatele ar fi fost pe aceeași linie : 10 20 20 alfa beta

8.3. Accesul la datele unui tablou

238

Page 239: curs DPW.docx

Când ați stocat date într-un tablou, puteți obține acces la valoarea unui element al tabloului sau îi puteți modifica valoarea prin intermediul cheii asociate elementului.

De exemplu, să presupunem ca folosiți următoarele instrucțiuni pentru a crea un tablou:$x = array(1=>10, 2=>100, 3=>1000);

Puteți obține acces la valoarea asociata cheii 2 prin intermediul unei instrucțiuni ca aceasta:$y = 3*$x[2];

Similar, puteți modifica valoarea asociata cheii 3 prin intermediul unei instrucțiuni ca aceasta:$x[3] = 101;

8.4. Parcurgerea iterativa a unui tablouUneori, în loc de a obține accesul la un singur element al unui tablou sau de a-l

modifica, doriți să obțineți accesul la mai multe elemente ale tabloului. De exemplu, să presupunem ca doriți să determinați dacăîn tablou exista o anumita cheie sau valoare. Sau să presupunem ca tabloul reprezintă preturi şi doriți să micșorați fiecare valoare cu 10 procente. Operații de acest gen implica parcurgerea iterativa a tabloului sau, altfel spus, accesul la fiecare element al tabloului.

Un tablou ale cărui chei sunt valori întregi consecutive se numește "tablou secvențial".

În general, valoarea cea mai mica a unei chei dintr-un tablou secvențial este zero; totuși, puteți crea un tablou secvențial folosind valoarea 1 sau orice alta valoare întreaga ca valoare minima a cheii.

În cazul în care cunoașteți valoarea minima a cheii unui tablou secvențial, puteți parcurge iterativ tabloul folosind o bucla for. Pentru aceasta, inițializați variabila de bucla la valoarea cea mai redusa a cheii. Folosiți funcția count() pentru a forma expresia de test (condiția) a buclei. Funcția count() returnează numărul elementelor dintr-un tablou.

Iată un exemplu simplu<?php$limbaje = array(0=>"Perl", 1=>"PHP", 2 =>"Python");$limita = count($limbaje);for ($i = 0; $i < $limita; $i++) {

echo "<br />$i => $limbaje[$i]";}?>

Prima variabila $limbaje creează tabloul. Cea de-a doua variabila $limita folosește instrucțiunea count() pentru a obține

numărul elementelor din tablou. Instrucțiunea for folosește variabila bucla $i pentru a parcurge iterativ (element cu

element) tabloul; corpul instrucțiunii include o instrucțiune echo care afișează cheia şi valoarea fiecărui element din tablou.

Datele de ieșire vor fi astfel:0 => Perl1 => PHP2 => Python

Sa ne concentram asupra problemei de a determina dacăun tablou conține o anumita valoare.

Iată un exemplu:<?php$limbaje = array(0=>"Perl", 1=>"PHP", 2 =>"Python");$cauta = PHP; // se cauta în tabloul $limbaje valoarea $cauta$limita = count($limbaje);for ($i = 0; $i < $limita; $i++) {

echo "<br />Determinarea unei identitati cu $limbaje[$i]"; if ($cauta == $limbaje[$i]) { echo "<br />$cauta este un limbaj excelent."; }

}?>

Prima variabila $limbaje creează tabloul în care se va cauta.

239

Page 240: curs DPW.docx

Cea de-a doua instrucțiune atribuie valoarea "PHP" variabilei $cauta; (în exemplu, se cauta în tablou valoarea stocata în variabila $cauta).

După comentariu (care începe cu //), următoarea instrucțiune obține numărul elementelor din tablou şi stochează aceasta valoare în variabila $limita.

Instrucțiunea for funcționează ca mai înainte; de data aceasta însa, corpul sau conține alte instrucțiuni şi se executa o alta operație. O instrucțiune echo afișează valoarea fiecărui element al tabloului pe măsură ce iterația (parcurgerea tabloului) avansează. Instrucțiunea if testează fiecare element şi afișează un mesaj dacăvaloarea elementului este una şi aceeași cu valoarea variabilei $cauta.

Iată rezultatul rulării exemplului:Determinarea unei identitati cu PerlDeterminarea unei identităţi cu PHPPHP este un limbaj excelent.Determinarea unei identităţi cu Python

8.6. Instrucțiunea breakObservați ca iterația continua chiar şi după găsirea valorii căutate. Când se cauta într-un tablou, execuția căutării poate fi oprita după găsirea

elementului dorit; continuarea iterației în tablou nu face decât să irosească resursele calculatorului, fără a afecta rezultatele operației.

Pentru a opri execuția unei iterații, puteți folosi instrucțiunea break, care determina încheierea imediata a buclei care o conține.

Iată cum se poate revizui exemplul anterior, astfel încât să includă o instrucțiune break:<?php$limbaje = array(0=>"Perl", 1=>"PHP", 2 =>"Python");$cauta = PHP; // se cauta în tabloul $limbaje valoarea $cauta$limita = count($limbaje);for ($i = 0; $i < $limita; $i++) {

echo "<br />Determinarea unei identităţi cu $limbaje[$i]"; if ($cauta == $limbaje[$i]) { echo "<br />$cauta este un limbaj excelent."; break; }

}?>

Acum, după stabilirea unei identităţi, instrucțiunea break provoacă sistarea buclei for.Iată datele de ieșire rezultate, care acum omit examinarea inutila a elementului

tabloului asociat cu limbajul "Python":Determinarea unei identităţi cu PerlDeterminarea unei identităţi cu PHPPHP este un limbaj excelent.

8.7. Instrucțiunea continueO instrucțiune corelata cu instrucțiunea break este continue. Instrucțiunea continue oprește secvenţă curenta a buclei, determinând evaluarea

imediata a expresiilor de incrementare şi de test. Ca un exemplu, să presupunem ca doriți să căutați în tabloul $limbaje pentru a

determina numărul limbajelor care au nume scurte, adică nume alcătuite din maximum 4 caractere. Iată un exemplu care executa aceasta prelucrare a datelor:<?php$limbaje = array(0=>"Perl", 1=>"PHP", 2 =>"Python");$scurt = 0;$limita = count($limbaje);for ($i = 0; $i < $limita; $i++) {

$n = strlen($limbaje[$i]); echo "<br />$limbaje[$i] are $n caractere lungime"; if ($n > 4) continue; $scurt++;

}echo "<br />Au fost găsite $scurt limbaje cu nume scurte.";?>

240

Page 241: curs DPW.docx

O instrucțiune de atribuire stabilește valoarea iniţială a variabilei $scurt la zero, folosita pentru a număra numele scurte găsite.

Instrucțiunea for se aseamănă celor folosite anterior. Corpul acestei instrucțiuni diferă, desigur, de cele folosite anterior. Valoarea variabilei $n este stabilita ca fiind egala cu numărul caracterelor care compun numele limbajului, folosind funcția strlen(), care calculează lungimea unui sir.

Dacăinstrucțiunea if stabilește ca elementul curent al tabloului face referire la un limbaj cu nume lung, se executa instrucțiunea continue. Instrucțiunea continue determina trecerea iterației la următorul element din tablou, fără a mai executa expresia "$scurt++"; dacănu au mai rămas elemente în tablou, bucla for își încheie execuția.

La finalizarea iterației, o instrucțiune echo afișează numărul numelor scurte de limbaje găsite în tablou. Iată rezultatul:Perl are 4 caractere lungimePHP are 3 caractere lungimePython are 6 caractere lungimeAu fost găsite 2 limbaje cu nume scurte.

8.8. Instrucțiunea return permite terminarea forţată a funcției sau programului curent. Ea poate fi folosita în instrucțiunile for, foreach, while sau do..while unde, prin terminarea scriptului, termina în mod evident şi bucla curenta. Dacăse dorește generarea unui mesaj în pagina înainte de încheierea scriptului, în loc de return se pot folosi funcțiile exit(mesaj) sau die(mesaj) - die fiind un alias al funcției exit. Exemplu - în exemplul anterior, la generarea lui 0 se termina forțat pagina:for ($i=1; $i <= 20; $i++){

$a = rând(0,50);if ($a == 0) { echo "Eroare: S-a generat 0."; return;}/* alternativ se poate folosi secvenţăif ($a == 0)die("Eroare: S-a generat 0.");*/echo "Pasul $i: 1000 / $a = ".(1000/$a)."<BR>";

} echo "Generare terminata !";

8.9. Lucrul cu funcții listaÎn afara de modalitățile de parcurgere iterativa a tablourilor, PHP oferă numeroase

funcții care va permit traversarea tablourilor, deplasându-va înainte sau înapoi prin elementele acestuia.

Prima dintre aceste funcții este current(), care returnează valoarea curenta a tabloului. Funcția current() folosește un pointer intern de tablou, pe care PHP îl creează pentru fiecare tablou. (Când creați un tablou, pointerul intern de tablou este configurat astfel încât să facă referire la primul element al tabloului).

Funcțiile next() şi prev() modifica pointerul intern al tabloului şi se pot folosi alături de funcția current() pentru a parcurge un tablou.

Funcția next(), așa cum îi arata şi numele, modifica pointerul intern al tabloului astfel încât acesta să facă referire la următorul element, în timp ce funcția prev() modifica pointerul intern al tabloului astfel încât acesta să facă referire la elementul anterior.

Iată un exemplu care prezintă modul de operare al funcțiilor menționate:<?php$limbaje = array(10=>"Perl", 20=>"PHP", 21=>"Python");$curent = current($limbaje);

echo "<br />funcția current() a returnat $curent";$urmator = next($limbaje);

echo "<br />funcția next() a returnat $urmator";$urmator = next($limbaje);

echo "<br />funcția next() a returnat $urmator";$anterior = prev($limbaje);

241

Page 242: curs DPW.docx

echo "<br />funcția prev() a returnat $anterior";?>

Iată datele de ieșire ale exemplului:funcția current() a returnat Perlfuncția next() a returnat PHPfuncția next() a returnat Pythonfuncția prev() a returnat PHP

Observați modul în care sunt utilizate funcțiile prev() şi next() pentru deplasarea înapoi, respectiv înainte, în interiorul tabloului.

8.9.1. Funcția key()Funcția key() este corelata cu funcția current(). Dacăfuncția current() returnează

valoarea asociata elementului curent, funcția key() returnează cheia asociata elementului curent.

Iată un exemplu care ilustrează modul de operare al acestei funcții:<?php$limbaje = array(10=>"Perl", 20=>"PHP", 21=>"Python");$curent = current($limbaje);$cheie = key($limbaje);echo "<br />funcția current() a returnat $curent";echo "<br />funcția key() a returnat $cheie";?>

Iată datele de ieșire ale exemplului:funcția key() a returnat 10

8.9.2. Funcția each()O alta funcție utila în parcurgerea tablourilor este each().Funcția each() returnează perechea "cheie-valoare" care se afla la poziția curenta din

tabloul specificat. Perechea "cheie-valoare" este returnata sub forma unui tablou asociativ cu patru elemente, după cum urmează:

Cheie Valoare

0 - Componenta cheie a perechii cheie-valoare curenta

1 - Componenta valoare a perechii cheie-valoare curenta

key - Componenta cheie a perechii cheie-valoare curenta

value - Componenta valoare a perechii cheie-valoare curenta

Observați ca puteți folosi valoarea cheie "0" sau "key" pentru a obține accesul la componenta cheie a perechii "cheie-valoare"; similar, puteți folosi valoarea cheie "1" sau "value" pentru a obține accesul la componenta valoare a perechii "cheie-valoare".

Pentru a înțelege mai bine cum se folosește funcția each(), studiați exemplul următor:<?php$limbaje = array(10=>"Perl", 20=>"PHP", 21=>"Python");$fiecare = each($limbaje);$zero = $fiecare[0];$unu = $fiecare[1];$cheie = $fiecare['key’];$valoare = $fiecare['value’];echo "<br />zero=$zero";echo "<br />unu=$unu";echo "<br />cheie=$cheie";echo "<br />valoare=$valoare";?>

Iată datele de ieșire ale exemplului:zero=10unu=Perlcheie=10valoare=Perl

8.9.3. Funcția list()O alta funcție utila în lucrul cu tablouri este funcția list(), aceasta va permite să

atribuiți valori la numeroase variabile în cadrul unei instrucțiuni.242

Page 243: curs DPW.docx

Funcția list() este deseori folosita cu funcția each(), deoarece funcția list() facilitează accesul separat la cheia şi la valoarea returnate de funcția each().

Forma generala de utilizare a funcției list() este următoarea:list($var1, $var2, ..…, $varn) = valoare_tablou;

Fiecare dintre variabilele specificate, de la $var1 la $varn, primește o valoare din tabloul "valoare_tablou".

Într-un fel, funcția list() este opusa funcției array(), deoarece funcția list() împarte un tablou într-o serie de valori scalare, în timp ce funcția array() construiește un tablou dintr-o serie de valori scalare.

Iată un exemplu care ilustrează modul de utilizare a funcției list():<?php$limbaje = array(10=>"Perl", 20=>"PHP", 21=>"Python");list($cheie, $valoare) = each($limbaje);echo "<br />cheie = $cheie, valoare = $valoare";$urmator = next($limbaje);echo "<br />următor = $urmator";?>

Iată datele de ieșire ale exemplului:cheie = 10, valoare = Perlurmător = Python

PHP conține peste 40 de funcții pentru lucrul cu tablourile. De exemplu, funcția array_search() facilitează căutarea într-un tablou.

Pentru informații despre aceasta funcție şi despre alte funcții utilizate în lucrul cu tablouri, vizitați site-ulwww.php.net.

8.10. Sortarea tablourilorSortarea reprezintă o alta operație frecvent aplicata tablourilor. PHP furnizează o

suita de funcții care facilitează sortarea unui tablou.De exemplu, un tablou poate fi creat după cum urmează: $limbaje = array(10=>"Perl", 20=>"PHP", 21=>"Python");Apoi, doriți să sortați tabloul în ordine alfabetica, în funcție de numele limbajului de

programare.Pentru aceasta, pur şi simplu invocați funcția sort(): sort($limbaje);După sortare, conținutul tabloului apare în ordinea cum se poate vedea mai jos:

0 => PHP1 => Perl2 => Python

Observați ca secvenţă de sortare sau secvenţă de aranjare (cum este numita uneori) este sensibila la diferența între majuscule şi minuscule. Deoarece litera "H" mare este sortata înaintea literei "e" mic, PHP apare înainte de Python în datele de ieșire sortate.

Iată un exemplu practic de folosire a funcției sort() :<?php$arr = array(0=>'Popescu', 1=>'Avram', 5=>'Cristian',3=>'Dan');sort($arr);foreach($arr as $key=>$nume) {

echo "<br />Cheie=$key Valoare=$nume";}?>Rezultatul afișat este următorul :Cheie=0 Valoare=AvramCheie=1 Valoare=CristianCheie=2 Valoare=DanCheie=3 Valoare=Popescu

Se observa ca instrucțiunea sort($arr) sortează matricea $arr după câmpul valoare (ordine alfabetica).

Observam de asemenea ca valorile câmpului cheie a fost alterata, fără să conteze valoarea sau ordinea cheilor.

Dacădorim să sortam în ordine inversa alfabetic, folosim funcția rsort()Iată același exemplu, da cu funcția rsort()

<?php$arr = array(0=>'Popescu', 1=>'Avram', 5=>'Cristian',3=>'Dan');

243

Page 244: curs DPW.docx

rsort($arr);foreach($arr as $key=>$nume) {

echo "<br />Cheie=$key Valoare=$nume";}?>

Acum rezultatul afișat este următorul :Cheie=0 Valoare=PopescuCheie=1 Valoare=DanCheie=2 Valoare=CristianCheie=3 Valoare=Avram

Se observa ca şi în acest caz au fost alterate valorile inițiale ale cheilor.Pentru a sorta matricea "$arr" păstrând corelarea iniţială dintre valori şi cheile

corespunzătoare se folosesc funcțiile asort(), respectiv arsort(). .In afara de acestea mai sunt şi alte funcții utile pentru sortarea tablourilor.Iată un tabel care prezintă funcțiile folositoare pentru sortarea unui tablou, împreună

cu rezultatul aplicării fiecărei funcții.Vom lua ca model pentru exemplificare următoarea matrice:

$limbaje = array(10=>"Perl", 20=>"PHP", 21=>"Python");Funcție Operația efectuata Rezultat

sort()- Sortarea unui tablou în funcție de valoare, în ordine alfabetica, fără să se tina cont de cheile inițiale

0 => PHP 1 => Perl 2 => Python

asort()- Sortarea unui tablou în funcție de valoare, în ordine alfabetica, păstrând corelarea iniţială dintre valori şi cheile corespunzătoare

20 => PHP 10 => Perl 21 => Python

rsort- Sortarea unui tablou în funcție de valoare, în ordine invers alfabetica, fără să se tina cont de cheile inițiale

0 => Python 1 => Perl 2 => PHP

arsort- Sortarea unui tablou în funcție de valoare, în ordine invers alfabetica, păstrând corelarea iniţială dintre valori şi cheile corespunzătoare

21 => Python 10 => Perl 20 => PHP

ksort- Sortarea unui tablou în funcție de cheie, în ordine ascendenta

10 => Perl 20 => PHP 21 => Python

krsort- Sortarea unui tablou în funcție de cheie, în ordine descendenta

21 => Python 20 => PHP 10 => Perl

O modalitate de a executa o căutare fără sensibilitate la diferența între majuscule şi minuscule ar fi utilizarea funcției natcasesort(), care sortează un tablou folosind o ordine care nu este sensibila la diferența între majuscule şi minuscule.

O alta modalitate consta în a utiliza funcția usort() sau una dintre funcțiile sale conexe, în speţă uksort() şi uasort().

Funcția usort() sortează valorile din tablou şi returnează un tablou secvențial; funcția uksort() sortează cheile tabloului, iar funcția uasort() sortează un tablou asociativ.

De exemplu, următoarele instrucțiuni creează un tablou şi îl sortează într-o maniera insensibila la diferența între majuscule şi minuscule:$limbaje = array("Perl", "PHP", "Python");usort($limbaje, "strcmpcase");foreach($limbaje as $key=>$nume) {

echo "<br />$key => $nume";}

Funcția strcmpcase() este o funcție din biblioteca PHP care compara doua șiruri fără a tine cont de majuscule sau minuscule. Funcția returnează o valoare negativa dacăprimul sir este mai mic decât al doilea, zero dacășirurile sunt identice, respectiv o valoare pozitiva dacăprimul sir este mai mare decât al doilea.Rezultatul va fi :0 => Perl1 => PHP2 => Python

244

Page 245: curs DPW.docx

8.11. Transformarea șirurilor în matrice şi inversPHP pune la dispoziția utilizatorilor funcții pentru conversia intre șiruri şi matrice.

Acestea pot fi utile în situații în care valoarea matricelor trebuie memorate în baza de date.Pentru a transforma un sir într-o matrice folosim funcția explode(). Sintaxa aceste funcții este:$matrice = explode(" ", $sir);

In loc de spațiul dintre (" "), ca indiciu de separare, poate fi scris orice caracter; după cum se dorește împărţirea șirului.

Iată un exemplu:<?php $sir = "Popescu Avram Cristian Dan";$matrice = explode(" ",$sir);foreach($matrice as $key=>$nume) {

echo "<br />Cheie = $key Valoare = $nume";}?>

Acest cod va produce următorul rezultat:Cheie = 0 Valoare = PopescuCheie = 1 Valoare = AvramCheie = 2 Valoare = CristianCheie = 3 Valoare = Dan

Pentru a transforma o matrice într-un sir, folosim funcția implode(). Sintaxa aceste funcții este:$sir = implode(" ", $matrice);

In loc de spațiul dintre (" "), ca semn de separare a elementelor în sir, poate fi scris orice caracter; după cum se dorește crearea șirului.

In continuare, pentru exemplificare, folosind exemplul de mai sus, sortam matricea "$matrice" alfabetic şi apoi transferam matricea într-un alt sir , de aceasta data sortat (Observați folosirea caracterelor ( \" ) în expresia echo, pentru ca la ieșire rezultatul să conţină ghilimele):<?php$matrice = array("Popescu", "Avram", "Cristian", "Dan");sort($matrice);$sir = implode(" - ",$matrice);echo "<br />Șirul rezultat : \"$sir\"";?>

Acest cod va produce următorul rezultat:Șirul rezultat : "Avram - Cristian - Dan - Popescu"

PHP dispune de câteva variabile "built-in". Acestea sunt pre-populate de PHP în momentul execuției, deci nu trebuie definite sau inițializate. Sunt disponibile în orice porțiune a codului şi în orice script PHP şi pot fi folosite fără să fie nevoie de alte pregătiri. Anumite variabile (ca de exemplu $_POST) au valori doar în anumite situații (spre exemplu, doar atunci când sunt folosite formulare). Mai jos sunt descrise pe scurt aceste variabile

$_GET Vector asociativ ce conține parametrii transmiși prin URL. De exemplu, dacăpagina noastră PHP se numește test.php, un URL de genulhttp://localhost/test.php?nume=Alex&varsta=12&ocupatie=elev ar popula variabila $_GET cu următoarele valori:print_r( $_GET );/* afișează:Array( [nume] => Alex [varsta] => 12 [ocupatie] => elev)*/

Numele parametrilor au rol de cheie în vectorul $_GET.Vectorul $_GET este de asemenea populat la folosirea formularelor GET.

$_POSTSimilar cu $_GET, doar ca parametrii sunt transmiși prin formulare (forms) -

$_REQUEST

245

Page 246: curs DPW.docx

Înglobează atât $_GET cat şi $_POST. $_SESSION

Folosita pentru a defini date ce sunt disponibile atâta timp cat utilizatorul accesează site-ul, indiferent de paginile vizualizate. în mod normal o variabila este definita doar când un utilizator cere o pagina. La finalul execuției scriptului, valorile variabilelor se pierd (inclusiv variabile $_GET, $_POST, etc). Dacăsunt puse în vectorul $_SESSION, valorile pot persista şi după terminarea execuției scripturilor.

$_SERVERFurnizează informații despre server, pagina ceruta şi utilizatorul care accesează

pagina.print_r( $_SERVER );

$_ENVAfișează informații despre mediul curent în care este instalat şi rulează interpretorul

PHP, despre scriptul curent, etc $_COOKIE

Folosita pentru a vedea elementele de tip Cookies de la site-ul/pagina curenta, disponibile pe calculatorul utilizatorilor.

$_FILESFolosita la încărcarea fișierelor pe server (file uploads) - Deși toate aceste variabile au şi nume alternative, este recomandat să se folosească

în forma în care au fost prezentate mai sus.8.12. Obținerea şi utilizarea datelor de la o variabila de mediuVariabilele de mediu sunt folosite pentru stocarea opțiunilor şi a parametrilor care

personalizează mediul de aplicație. Aplicațiile pot obține accesul la valorile variabilelor de mediu şi în funcție de acestea își pot ajusta comportamentul.

De exemplu, calea de căutare a programelor MS-DOS este stocata într-o variabila de mediu denumita PATH. în general, comenzile sistemelor de operare sunt folosite pentru a configura variabilele de mediu şi pentru a stabili valorile acestora. Cu toate acestea, unele aplicații manipulează valorile variabilelor de mediu.

Atât serverul Web Apache, cât şi serverul de aplicație PHP folosesc variabile de mediu pentru a prezenta informații de stare. Unele dintre cele mai importante variabile de mediu folosite de Apache şi PHP sunt rezumate în tabelul de mai jos. Numeroase servere Web, altele decât Apache, furnizează o parte din aceste variabile de mediu sau chiar pe toate.

Multe dintre aceste variabile reflecta caracteristicile cererii HTTP care a solicitat execuția PHP. Puteți vizualiza toate variabilele de mediu disponibile pentru programele PHP prin invocarea funcției phpinfo() şi vizualizarea datelor de ieșire generate de aceasta.

Vizualizarea datelor unei variabile de mediu se poate face folosind variabila $_SERVER şi o cheie (intre paranteze pătrate) ce reprezintă numele variabilei de mediu.De exemplu, pentru afișarea domeniului serverului unde rulează scriptul

echo $_SERVER['SERVER_NAME'];

Variabila de mediu Descriere

CONTENT_LENGTH - Lungimea, în octeți, a corpului cererii.

CONTENT_TYPE - Tipul MIME al datelor din corpul cererii.

DOCUMENT_ROOT - Calea care constituie rădăcina arborelui catalogului cu documente al serverului Web.

GATEWAZ_INTERFACE - Returnează versiunea protocolului CGI (Common Gateway Interface) folosit de serverul Web.

HTTP_ACCEPT - Conținutul antetului HTTP Accept.

HTTP_ACCEPT_CHARSET

- Conținutul antetului HTTP Accept-Charset:, care specifica seturile de caractere înțelese de client.

HTTP_ACCEPT_ENCODING

- Conținutul antetului HTTP Accept-Encoding:, care specifica tipurile de conținuturi înțelese de client.

HTTP_ACCEPT_LANGUAGE

- Conținutul antetului HTTP Accept-Language:, care specifica limbajele preferate de client.

HTTP_CONNECTION - Conținutul antetului HTTP Connection:, care indica opțiunile solicitate de client.

HTTP_HOST - Conținutul antetului HTTP Host:, care indica numele de gazda,

246

Page 247: curs DPW.docx

folosit de client la prezentarea cererii.

HTTP_REFERER - Adresa URL a paginii Web care a trimis clientul la pagina curenta.

HTTP_USER_AGENT - Conținutul antetului HTTP user-Agent, care indica tipul şi versiunea browser-ului folosit.

PATH - Calea de execuție asociata cu mediul serverului.

QUERY_STRING - Șirul de interogare, dacăexista, prin care a fost accesata pagina.

REMOTE_ADDR - Adresa IP a clientului (vizitatorului).

REMOTE_HOST - Numele de gazda al clientului.

REMOTE_PORT - Adresa portului clientului de unde a pornit cererea.

REQUEST_METHOD - Metoda de cerere HTTP folosita; de exemplu, GET, POST, PUT sau HEAD.

REQUEST_URI - URI folosit pentru accesul la pagina curenta. URI este alcătuit dintr-un URL şi un sir opțional de interogare.

SCRIPT_FILENAME - Numele de cale absolut al scriptului curent.

SCRIPT_NAME - Adresa URL a scriptului curent.

SERVER_ADMIN - Adresa de e-mail a administratorului serverului Web.

SERVER_HOST - Numele de gazda asociat serverului Web care prelucrează cererea.

SERVER_PORT - Portul folosit de serverul Web pentru comunicații.

SERVER_PROTOCOL - Numele şi versiunea protocolului prin intermediul căruia s-a executat cererea.

SERVER_SIGNATURE - Șirul care identifica versiunea serverului Web şi numele de gazda folosit pentru prelucrarea cererii.

SERVER_SOFTWARE - Șirul care identifica programul server Web şi versiunea acestuia.

Puteți obține accesul la variabila de mediu folosind variabila $_SERVER care este de fapt un Array în care cheile elementelor sunt numele variabilelor de mediu

De exemplu, următoarea instrucțiune echo trimite browserului adresa IP a clientului (vizitatorului):<?php$ip = $_SERVER['REMOTE_ADDR'];echo "Adresa dv. IP este $ip";?>

Afișarea sau nu a acestor variabile globale depinde de permisiunile făcute la configurarea serverului PHP şi de datele transmise.

8.13. Depanarea unui scriptUneori, în locul datelor de ieșire ale scriptului dumneavoastră, puteți vedea unul din

următoarele: Textul scriptului, în loc de datele de ieșire ale acestuia caseta de dialog, prin care sunteți întrebat dacădoriți să descărcați fișierul care

conține scriptul Un mesaj în care se spune ca scriptul nu exista Un mesaj în care se spune ca browserul dumneavoastră Web nu are permisiunea de

a obține accesul la script Un mesaj în care se spune ca scriptul dumneavoastră conține o eroare

La vizualizarea rezultatelor unui script PHP se pot produce numeroase erori, chiar dacăscriptul în sine este corect.

Dacăvedeți textul scriptului dumneavoastră sau o caseta de dialog prin care sunteți întrebat dacădoriți să descărcați fișierul care conține scriptul, este posibil ca extensia fișierului script să fie incorecta sau ca serverul PHP să nu funcționeze. Deși fișierele script PHP trebuie să aibă, în general, extensia .php, este posibil (dar mai rar) ca un administrator de sistem să configureze un server PHP astfel încât acesta să impună o alta extensie de fișier. Astfel, dacăscriptul dumneavoastră eșuează din unul dintre aceste doua motive, luați legătura cu administratorul dumneavoastră de sistem.

247

Page 248: curs DPW.docx

Dacăvedeți un mesaj în care se spune ca scriptul nu exista, este posibil ca dumneavoastră să fi tastat incorect adresa URL. Verificați dacăați tastat corect adresa URL identificata de administratorul dumneavoastră de sistem, precum şi dacăați atașat corect la aceasta numele fișierului care conține scriptul, folosind un slash numai dacăadresa URL identificata de administratorul dumneavoastră de sistem nu se încheie cu acest caracter.

Dacăvedeți un mesaj în care se arata ca browserul dumneavoastră Web nu are permisiunea de a obține accesul la script, poate ca este necesar să modificați permisiunile fișierului script. Pentru a afla cum trebuie procedat, consultați-va cu administratorul de sistem.

Dacăvedeți un mesaj în care se spune ca scriptul dumneavoastră conține o eroare, verificați dacănu a apărut vreuna din următoarele probleme:

eroare de tastare, cum ar fi scrierea greşită a cuvântului echo eroare de punctuație, cum ar fi paranteze, ghilimele sau punct şi virgula, lipsa sau

inserate greșit Neincluderea sau includerea eronata a liniilor de delimitare a scriptului, în speţă <?

php şi ?> Un marcaj de comentariu ( / / ) care lipsește sau care a fost introdus greșitDe exemplu, iată un script care conține un tip de eroare frecvent întâlnit. Puteți identifica

eroarea?<?php// Acest script conține o eroare de sintaxaecho "Salut, World Wide Web!;?>

Din script lipsește caracterul ghilimele duble de închidere, care trebuie să delimiteze expresia de tip text. Dacăîncercați să executați acest script, puteți vedea doar o pagina goala sau o eroare similara celei prezentate în continuare.

Parse error. Parse error în /home/bmccarty/public_html/php/module-01/syntax-error.php On line 7

Mesajul de eroare încearcă să va indice sursa erorii, indicând numărul liniei la care s-a produs eroarea. Totuși, remarcați ca mesajul va îndruma spre linia 7 a unui script care conține numai 4 linii. Din moment ce ghilimelele duble de închidere lipsesc, serverul PHP cauta dincolo de sfârșitul scriptului pentru a găsi ghilimelele duble respective. Ca atare, serverul PHP este oarecum derutat cu privire la sursa erorii.

Morala este aceea ca nu puteți conta în totalitate pe serverul PHP pentru a determina locația erorii; folosiți numărul de linie furnizat de server numai ca îndrumar pentru a depista locația probabila a erorii.

8.14. Tratarea erorilorModulul PHP poate fi configurat astfel încât să afișeze erorile întâlnite în codul PHP.

Acest lucru poate fi foarte util în cazul depanării programelor. Pentru a activa afișarea erorilor exista doua metode:

- modificarea parametrului display_errors din fișierul de configurare "php.ini"- folosirea funcției ini_set(‘display_errors’);In cazul primei metode trebuie să avem drepturi de administrator pentru a modifica

fișierul php.ini. Nu se recomanda setarea parametrului display_errors la valoarea 1(TRUE) în cazul site-urilor de producție; mesajele de eroare afișate nu sunt folositoare utilizatorului. Pe de alta parte aceasta ar contribui la mărirea riscului unui atac.

A doua metoda consta în folosirea funcției ini_set, care permite unui script să redefinească temporar un parametru din fișierul de configurare php.ini.

Consideram un exemplu de cod în care intenționat încercăm să citim variabile care nu exista:<?phpini_set('display_errors',1);echo "Valoarea transmisa este ".$var;?>

In exemplul de mai sus dacăvariabila cu nume: "var" nu exista PHP va afișa un mesaj de eroare de genul:Notice: Undefined variabile: var

Putem determina tipurile de erori pe care le semnalează PHP folosind funcția: error_reporting(). Aceasta preia o constanta care specifica nivelul la care se afișează

erorile. error_reporting(E_ALL) - semnalează toate tipurile de erori

248

Page 249: curs DPW.docx

error_reporting(E_ALL & ~E_NOTICE) - semnalează toate erorile în afara de anunțuri error_reporting(0) - dezactivează acesta caracteristica.

Exemplu :<?phpini_set('display_errors',1);error_reporting(E_ALL & ~E_NOTICE);echo "Valoarea transmisa este ".$_GET['orase'];?>

9. Crearea aplicaţiilor WEB. Crearea formularelor cu memorie9.1. Operații comune cu indicatori de timp Limbajul PHP oferă soluții simple (dar puternice) pentru lucrul cu data şi timpul. în

versiunile mai noi (după 5.1) sunt introduse facilităţi avansate cum ar fi DST (Daylight Saving Time), Timezones, Date Intervals, s.a. Înainte de acestea însă lucrul cu timpul se realiza folosind Unix timestamp.

Conceptul de Unix timestamp desemnează numărul de secunde scurse de la 1 ianuarie 1970 (când se considera ca a început era Unix).

Unix Timestamp-ul curent: 1272599166Fiind vorba de un număr pozitiv ce are mereu aceeași referința, este ușor să se

realizeze operații cum ar fi scăderea, adunarea sau compararea a doua date reprezentate printr-un Unix timestamp.

Mai jos sunt câteva aplicații menite să evidențieze cat de ușor se pot manipula date şi ore în PHP.<?php// data curentaprint date( 'd.m.Y H.i.s' ); // 30.04.2010 06.46.06 // data în format Unix (UNIX timestamp)print time(); // 1272599166 // alegerea unui fus orardate_default_timezone_set( 'Europe/Bucharest' );// parsarea unei dateprint strtotime("now");print strtotime('1st January 2004'); //1072915200?>

9.2. Trimitere date la o adresa de e-mailEste util să avem pe o pagina din site un formular prin care vizitatorii să poată trimite

mesaje la o adresa de e-mail. Am putea lăsa pe pagina doar adresa de e-mail la care vizitatorii să ne poată

contacta, dar aceasta metoda (comoda pt. webmaster) nu este indicata. în primul rând din cauza programelor bot care circula pe net şi colectează adresele de e-mail de pe site-uri pentru ca mai târziu să transmită mail-uri spam. în al doilea rând este mai simplu şi mai rapid pentru vizitator să trimită mesajul direct de pe site.

Un mod simplu de utilizare a limbajului PHP pentru a expedia la o adresa de e-mail date sub forma de text, este preluarea datelor de la un formular HTML.

Pentru a putea expedia datele la adresa de mail, scripturile PHP trebuie să fie capabile de a obține accesul la serviciile SMTP (Simple Mail Transfer Protocol).

Dacăfolosiți serviciile oferite de un "web hosting", majoritatea au implementate aceste funcții.

Dacăfolosiți propriul sistem pentru găzduirea site-ului, sau pentru teste, este nevoie să aveți instalat şi un server SMTP, acesta preia datele prelucrate de modulul PHP şi le trimite la adresa de e-mail.

9.2.1. Expedierea mesajelor de e-mailConfigurația PHP standard accepta expedierea mesajelor de e-mail prin intermediul

SMTP (abreviere de la Simple Mail Transfer Protocol). Acesta este protocolul standard folosit pentru transferul mesajelor de e-mail, prin intermediul Internetului.

Mesajele de e-mail sunt alcătuite din doua părţi: o serie de antete de mesaj şi un corp.

Antetele de mesaj indica adresa destinatarului şi subiectul mail-ului, precum şi alte informații.

Corpul conține mesajul în sine.Pentru a trimite datele la o adresa de e-mail, se folosește funcția mail(), care preia 3

argumente principale, având următoarea forma:

249

Page 250: curs DPW.docx

mail($to, $subject, $message)Unde, în ordinea argumentelor: primul argument, aici variabila "$to", va conține adresa de e-mail a destinatarului

(unde va fi trimis mesajul) al doilea argument, aici variabila "$subject", va conține subiect-ul mail-ului al treilea argument, aici variabila "$message" va conține mesajulFuncția "mail()" poate conține şi alte adrese de e-mail opționale, astfel un al patrulea

argument poate fi "From", care indica adresa de e-mail a expeditorului (cel care trimite mesajul).

Funcția ar avea astfel următoarea forma:mail($to, $subject, $message, $from )

Variabila "$from" trebuie să conţină în sir cuvântul "From: " înaintea adresei de e-mail, adică așa: $from="From: [email protected]";

Dacăargumentul "$from" nu este specificat, serverul va transmite automat aceasta adresa (in funcție de cum este configurat). Astfel, când primim mail-ul, pe lângă subiect vom avea adresa expeditorului, şi dacănu este specificata, putem vedea ceva de genul "[email protected]" Datele pentru aceste argumente, în special al treilea (aici "$message"), pot fi

preluate dintr-un formular HTML, folosind funcția "$_POST". Funcția "mail()" returnează TRUE dacămail-ul a fost acceptat pentru expediere, în caz

contrar returnează FALSE. Iată un script PHP simplu care va trimite mesaje la o adresa de e-mail:

<?php// Verifica dacăau fost trimise datele de la formularif (isset($_POST['email']) && isset($_POST['mesaj'])) { $to = '[email protected]'; // Adresa unde va fi trimis mesajul $subiect = 'Mesaj de pe site'; $mesaj = $_POST['mesaj']; $from = 'From: '. $_POST['email']; // PHP trimite datele la serverul de e-mail if (mail($to, $subiect, $mesaj, $from)) {

echo 'Mesajul a fost trimis cu succes.'; } else {

echo 'Eroare, mesajul nu a putut fi expediat.'; }}?>

Întâi se verifica (cu isset()) dacăau fost trimise date de la formularul HTML. Fără aceasta verificare, s-ar expedia mesaje de e-mail ori de cate ori cineva (intenționat) accesează direct fișierul php cu scriptul.

Variabilele "$mesaj" şi "$from" preiau datele adăugate de vizitator în câmpurile unui formular HTML care au atributele 'name="mesaj"' şi 'name="email"'. Dacăfuncția "mail()" este executata cu succes, va apare mesajul "Mesajul a fost

trimis cu succes.", în caz contrar va afișa "Eroare, mesajul nu a putut fi expediat.". Un model de cod HTML pentru crearea formularului care trimite datele la scriptul php

de mai sus este următorul:<h3>Trimiteti mesaj</h3><form name="form" method="post" action="nume_script.php"><label>E-mail : </label> <input type="text" name="email" size="20" /> <br /><label>Scrie mesajul : </label> <br /><textarea name="mesaj" cols="35" rows="6"></textarea> <br /><input type="submit" value="Trimite" /></form>

"nume_script.php" este calea şi numele fișierului în care se afla scriptul php de mai sus.

In browser va apare:Trimiteți mesaj

250

Page 251: curs DPW.docx

Top of Form

E-mail : Scrie mesajul :

Bottom of Form9.3. Headere Headerele sunt elemente prin care browser-ul şi serverul web comunica în fundal

pentru a afișa o pagina web în bune condiții.Exista 2 tipuri de headere: cele emise de browser (headere de request) şi cele emise

de server (headere de răspuns). 9.3.1. Request headersDe fiecare data când un utilizator accesează o pagina web, browserul trimite către

server cantităţi mici de date, sub forma request headers (sau, într-o traducere destul de rar folosita la noi, antetelor de cerere). Aceste antete cuprind detalii despre pagina care a fost solicitata, modul de transfer a ei, precum şi informații despre capabilitățile browser-ului.

De exemplu, când ați accesat aceasta pagina, browser-ul dumneavoastră a trimis către server următoarele headere de request:GET /http/ HTTP/1.1Host: domeniu.roConnection: closeUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ro; rv:1.9.1) Gecko/20090624 Firefox/3.5Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7Cache-Control: noAccept-Language: de,en;q=0.7,en-us;q=0.3

Headerele sunt trimise de browser în mod implicit, utilizatorul nu trebuie să facă ceva anume pentru asta. De asemenea, headerele nu pot fi (ușor) modificate înainte de a fi trimise.

9.3.2. Response headersIn răspuns la request headers primite de la browsere, serverele web trimit înapoi 2

tipuri de informație: headere de răspuns (response headers) conținutul efectiv al paginii solicitate (conținut ce poate fi construit/modificat prin intermediul PHP)

Headerele de răspuns conțin informații despre pagina solicitata (cum ar fi: dacăexista sau nu, dimensiunea ei, tipul de conținut, etc).

Headerele reprezintă prima parte, separate de conținut prin 2 linii goale (reprezentate prin caracterele \r\n\r\n). Din acest răspuns, browserul "știe" să interpreteze headerele şi să afișeze în pagina doar conținutul, astfel ca antetele nu vor fi niciodată vizibile utilizatorului final.

La fel ca în cazul antetelor de cerere, cele de răspuns sunt trimise în mod automat de către server, înainte de a trimite conținutul şi nu este nevoie ca programatorul să intervină. Exista însă situații când trebuie ca anumite antete să fie modificate. Acest lucru este posibil cu ajutorul limbajului PHP.

PHP oferă posibilitatea modificării headerelor de răspuns prin intermediul funcției header. Trimiterea unui semnal (Not-Found, Status OK, etc) header( 'HTTP/1.0 404 Not Found' ); // spune browserului să afișeze un mesaj de eroare header( 'HTTP/1.0 200 OK' ); // anunţă ca pagina exista şi va fi trimisa către browser

redirecționare - "spune" browserului să "meargă" la alta adresaheader( 'Location: http:// www.domeniu.ro/' );

specificarea tipului paginii ce se va afișa - în urma acestor apeluri, browser-ul va aștepta alte tipuri de conținut decât pagini HTMLheader( 'Content-type: application/pdf' );

251

Trimite

Page 252: curs DPW.docx

// browserul va aștepta să fie trimis un PDF header( 'Content-type: text/css' ); // fișier css

10. Cookies 10.1. Accesul la variabilele cookieValorile majorităţii variabilelor dispar atunci când scriptul PHP care le conține își

încheie execuția. Spre deosebire de acestea, valorile variabilelor cookie se pot păstra un timp indefinit. Pentru ca valorile lor să se poată păstra, browserul utilizatorului stochează variabilele cookie în unitatea de hard-disc a utilizatorului.

Majoritatea navigatoarelor de Web au posibilitatea să activeze/dezactiveze cookie-urile. Trebuie să ţineţi cont de acest lucru când doriți să folosiți cookie în scripturile dv., totuși, conform statisticilor, în jur de 1% dintre utilizatori au opțiunea cookie dezactivata.

PHP pune la dispoziția utilizatorilor funcții pentru transmiterea cookie-urilor de la server la browser, şi modalităţi de citire a cookie-urilor.

Pentru a citi cooki-urile puteți utiliza variabila PHP de tip tablou $_COOKIE sau $_HTTP_COOKIE_VARS, acestea conțin numele şi valoarea fiecărei variabile cookie curenta. Dacădoriți să obțineți acces la acest tablou, puteți folosi un program ca următorul:foreach($_COOKIE as $nume => $valoare)echo "<br /> $nume => $valoare";$_COOKIE['numeCookie'] este o variabila super-globala, putând fi accesata şi în funcții fără a mai specifica "global".

10.2. Crearea unei variabile cookieUn lucru important de reținut este faptul ca cookie-urile trebuie să fie transmise la

browser înaintea oricărei alte informații.Pentru a evita problemele, asiguraţi-vă ca un script PHP care stabilește o valoare a

unei variabile cookie este plasat în partea superioara a fișierului, fără caractere de tip spațiu alb care sa-l preceadă. De asemenea, stabiliți valoarea variabilei cookie înainte de a executa o instrucțiune 'echo' sau o alta instrucțiune PHP care trimite browserului date de ieșire.

Pentru a crea o variabila cookie, folosiți funcția setcookie(), care are următoarea forma:setcookie(numeCookie, valoare, expirare)

Argumentul 'numeCookie' specifica numele variabilei cookie, iar argumentul 'valoare' specifica valoarea variabilei.

Valoarea variabilei cookie este automat transmisa "urlencode" şi când este primita e automat decodata.

Argumentul 'expirare' indica momentul expirării variabilei cookie; după ora specificata, variabila cookie nu mai este accesibila.

În general, este convenabil să se specifice momentul expirării folosind funcția time(), care returnează intervalul de timp (exprimat în secunde) scurs de la 1 ianuarie 1970. Puteți adăuga o valoare de tip decalaj (offset), care specifica intervalul de timp pe durata căruia variabila cookie trebuie să fie accesibila.

Folosind aceasta funcție se pot transmite mai multe cookie-uri succesiv; protocoalele Web limitează însă la maximum 20 numărul cookie-urilor ce pot fi trimise aceluiași utilizator.

De exemplu, să luam în considerare următoarea instrucțiune:setcookie("fruct", "banana", time()+3600);

Aceasta instrucțiune creează o variabila cookie denumita 'fruct', care are valoarea 'banana'. Variabila cookie va fi disponibila timp de o ora (3600 secunde) de la crearea sa.Dacăpreferați, puteți specifica momentul expirării folosind funcția mktime(). Aceasta

funcție are următoarea forma:mktime(ore, minute, secunde, luna, zi, an)

De exemplu, următoarea instrucțiune creează o variabila cookie care expira la o secunda după miezul nopții primei zile a anului 2009:Setcookie("fruct", "banana", mktime(0, 0, 1, 1, 1, 2009));

10.3. Ștergerea unei variabile cookieDeoarece o variabila cookie are o data de expirare, aceasta va fi ştearsă automat la

un oarecare interval de timp după crearea sa. Totuși, puteți șterge o variabila cookie imediat. Pentru aceasta, fixați momentul expirării variabilei cookie la un moment de timp în trecut.

De exemplu, pentru a șterge o variabila cookie denumita 'fruct', puteți folosi următoarea instrucțiune:setcookie("fruct", "", time()-3600);

252

Page 253: curs DPW.docx

Aceasta instrucțiune stabilește timpul de expirare cu o ora (3600 de secunde) în urma.

Remarcați ca valoarea variabilei cookie este exprimata sub forma unui sir vid (""); din moment ce variabila cookie nu va mai fi disponibila, valoarea să nu mai are importanta.

10.4. Specificarea accesului la o variabila cookie şi alte opțiuniFuncția setcookie() poate prelua maximum șase argumente.Iată formatul complet al funcției setcookie():

setcookie(nume, valoare, expirare, cale, domeniu, secure)Argumentele 'nume', 'valoare' şi 'expirare' au fost descrise în secțiunea precedenta.

Argumentul 'cale' va permite să specificați calea URL asociata variabilei cookie. În mod prestabilit, variabila cookie este disponibila pentru scripturile din catalogul care conține scriptul în care a fost configurata variabila respectiva, precum şi pentru scripturile din sub-cataloagele aferente catalogului respectiv. În particular, scripturilor din cataloagele părinte ale catalogului care conține scriptul nu li se permite accesul prestabilit la variabila cookie.Pentru a pune variabila cookie la dispoziția scripturilor dintr-un anumit catalog şi cataloagele sale, specificați o valoare a argumentului 'cale'. De exemplu, pentru a pune variabila cookie la dispoziția întregului arbore de cataloage, specificați " /" ca valoare a argumentului cale; pentru a face variabila cookie disponibila în catalogul "/test" şi în sub-cataloagele sale, specificați "/test/" ca valoare a argumentului 'cale'.

Dacănu este specificat nici un argument 'domeniu', o variabila cookie este disponibila numai pentru scripturile din domeniul Web care a creat variabila respectiva. Argumentul 'domeniu' va permite să specificați numele de domeniu asociat unei variabile cookie. În consecinţă, variabila cookie va fi disponibila numai pentru siturile Web din cadrul domeniului specificat. De exemplu, să presupunem ca un script din serverul Web http://www.subdomeniu.domeniu.com creează o variabila cookie. În mod prestabilit, variabila cookie este disponibila numai pentru gazda respectiva. Cu toate acestea, puteți face variabila cookie disponibila pe întreg domeniul 'subdomeniu.domeniu.com', specificând "subdomeniu.domeniu.com" ca valoare a argumentului 'domeniu'.

Argumentul 'secure' este o valoare întreaga, care specifica dacăvariabila cookie trebuie trimisa prin intermediul unei conexiuni sigure (HTTPS). Specificați valoarea l pentru a împiedica transmiterea variabilei cookie în cazul în care conexiunea nu este sigura; pentru a permite transmiterea variabilei cookie prin conexiuni HTTP obișnuite, specificați valoarea 0.

10.5. Despre sesiuni, crearea unei sesiuni PHPSesiunea reprezintă o modalitate prin care PHP retine informații de la o pagina la

alta. Odată cu inițializarea unei sesiuni, utilizatorul poate păstra anumite variabile chiar

dacăin continuare vizitează şi alte pagini ale site-ului. în principiu informația se păstrează pana la închiderea browser-ului, sau pana când utilizatorul distruge în mod intenționat sesiunea curenta.

Lucrurile se desfăşoară ca în felul următor: în momentul când un user s-a logat la site, PHP atribuie acestuia un identificator unic de sesiune : SID. Acest SID este înglobat într-un coockie cu numele PHPSESSID şi trimis apoi către browserul utilizatorului. Dacăbrowserul nu suporta cookie-uri sau acestea sunt dezactivate, atunci acest SID este adăugat la adresa URL. în același timp se creează pe server un fișier cu numele SID. în continuare dacăutilizatorul dorește să stocheze anumite informații, acestea vor fi practic scrise în acest fișier SID de pe server.

Sesiunile au următoarele avantaje: Pot fi folosite chiar dacăbrowserul utilizatorului nu suporta cookie-uri sau

dacăacestea sunt dezactivate. Permit stocarea unui volum mare de informații, spre deosebire de cookie-uri care

sunt limitate în aceasta privinţă. Sunt mai sigure în raport cu cookie-urile deoarece informațiile nu sunt transmise în

mod repetat intre client şi server.Inițializarea unei sesiuni se face cu funcția :

session_start()Aceasta trebuie să fie printre primele linii de cod dintr-un script PHP, deoarece apelul

acestei funcții trebuie făcut înainte de trimiterii către browser-ul Web a vreunui cod HTML sau chiar a unui spațiu vid.

Dacăfolosim stocarea ieșirii în buffer, instrucțiunea session_start() nu trebuie inserata neapărat la începutul codului.

253

Page 254: curs DPW.docx

Instrucțiunea session_start() nu este necesare dacăin fișierul de configurare "php.ini", variabila "session.auto_start" are valoarea TRUE.

Pentru a înțelege mai bine modul de lucru cu sesiuni şi funcția session_start(), folosim un exemplu în care avem o pagina principala "a.php" unde cream o variabila cu numele "userName", atribuindu-i valoarea "Eu", pe care o stocam într-o sesiune PHP, pagina conține o legătura către o alta pagina "b.php", aceasta din urma va folosi funcția session_start() pentru a prelua, prin sesiune, valoarea variabilei "user_name" din pagina "a.php", astfel putem folosi valoarea acestei variabile într-un script din pagina "b.php".

Conținutul fișierului "a.php" este următorul:<?php//Fișierul a.phpsession_start(); if(!isset($_SESSION['userName']))

$_SESSION['userName'] = "Eu";?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><body>Aceasta este pagina "a.php"<?phpecho "<br />Variabila de sesiune are valoarea: ". $_SESSION['userName'];?><br />Legătura <a href="b.php">spre pagina b.php</a></body></html>Conținutul fișierului "b.php" este următorul:<?php//Fișierul b.phpsession_start();?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>Pagina b.php</title></head><body>Aceasta este pagina b.php<?phpecho "<br />Variabila de sesiune are valoarea: ". $_SESSION['userName'];?></body></html>

Observați ca atribuirea, respectiv citirea variabilelor se face folosind variabila super-globala : _SESSION.

Deschizând prima pagina, "a.php", va fi afișat următorul rezultatAceasta este pagina "a.php"

Variabila de sesiune are valoarea: EuLegătura spre pagina b.phpCând apăsăm click pe link-ul "spre pagina b.php", se va deschide aceasta pagina,

afișând următorul conținut:Aceasta este pagina "b.php"Variabila de sesiune are valoarea: EuIn acest exemplu se observa ca pagina "b.php" deține informații despre variabila de

sesiune creata în pagina "a.php".10.5.1. Manipularea variabilelor sesiunii.In anumite momente ar putea fi util să aflam identificatorul sesiunii curente. Pentru

aceasta folosim funcția session_id(), ca în exemplul următor:<?phpecho "<br /> Identificatorul sesiunii curente SID este:". session_id();//Va afișa un rezultat asemănător cu: "Identificatorul sesiunii curente SID este:2846240682abf24a09f42664fc03bbf3"

254

Page 255: curs DPW.docx

?>Funcția session_id() accepta un parametru. Astfel putem seta un anumit SID pentru

sesiunea curenta. în acest caz trebuie să apelam funcția session_id() înainte de funcția : session_start(), ca în exemplul următor:<?phpsession_id('123abc');session_start();echo "<br /> Identificatorul sesiunii curente SID = ". session_id();//Va afișa rezultatul: "Identificatorul sesiunii curente SID = 123abc"?>

Deoarece variabilele de sesiune pot fi citite de alți utilizatori neautorizați, nu este indicat să păstrăm aici informații esențiale cum sunt parolele.

Pentru a creea un minimum de securitate putem codifica aceste informații, folosind funcţiile de codare oferite de PHP:md5() sau crypt()

Funcția md5(sir_de_caractere) codifica șirul de caractere furnizat ca parametru şi returnează un sir de 32 charactere hexazecimale. Aceasta funcție folosește algoritmul de criptare: "RSA Data Security, Inc. MD5 Message-Digest Algorithm".

Iată un exemplu de utilizare al acestei codificări:<?php$user = "Eu";$codificat = md5($user);echo "<br /> user codificat = $codificat";// Va afișa: "user codificat = 0a460e3d95526f05a0064154ad94a378"?>

Consideram cazul în care avem o variabila de sesiune "$parola" care păstrează o parola şi dorim să codificam şi să transmitem această variabilă astfel încât utilizatorii neautorizați să nu o poată folosi. Pentru aceasta folosim funcția md5(), pentru a o cripta. Mai mult iniţializăm o variabila globala cu numele "$secret", căreia ii atribuim ca valoare un sir de caractere oarecare. în continuare, înainte de a introduce parola într-o sesiune PHP, concatenam valorile "$secret" şi "$parola" şi criptam rezultatul. Astfel, chiar dacăcineva reușește să decripteze variabila de sesiune, este puțin probabil să poată separa șirul "$secret" creat de noi.

Este bine să păstrăm acest fișier într-un director protejat, cum ar fi cu un nivel mai sus decât directorul pentru pagini de Web.

Iată cum se prezintă exemplul prezentat mai sus. (consideram o variabila "$passtest" care verifica dacăvaloarea acesteia este egala cu parola):<?php$secret = 'abcgfd43599oopjhfdxcaqq30pmnvcx';$parola = 'mypass';$cod = md5($secret. $parola);session_start();$_SESSION['parola'] = $cod;// Consideram variabila "$passtest" pentru a testa dacăvaloarea acesteia este egala cu parolaif (md5($secret. $passtest) == $_SESSION['parola']) echo "Parola acceptata";else echo "Parola nu este valida";?>

Astfel, dacăvaloarea variabilei "$passtest", care poate fi obţinută de exemplu dintr-un formular HTML, este identica cu parola păstrată de noi, va fi afișat mesajul "Parola acceptata".

10.5.2 Ștergerea unei sesiuniPentru a putea șterge o sesiune este necesar să începem scriptul PHP cu

instrucțiunea:session_start(), ca întotdeauna când folosim sesiuni.Pentru a șterge toate variabilele memorate în matricea $_SESSION folosim:

unset($_SESSION);Pentru a șterge doar o variabila memorata în sesiune folosim :

unset($_SESSION['nume_variabila']);

255

Page 256: curs DPW.docx

Datele sesiunii sunt memorate în server în fișiere temporare. Pentru a șterge datele sesiunii din server folosiți:session_destroy()

Iată un exemplu care ilustrează aceasta procedura:<?php// Inițializează datele sesiuniisession_start();// Șterge tabloul $_SESSIONunset($_SESSION);// Șterge datele de sesiune din serversession_destroy();echo "<br /> Sesiunea curenta a fost închisa";?>

11. Funcții în PHP Funcțiile sunt blocuri de cod PHP (secvențe de cod) bine delimitate şi identificate

printr-un nume, ce executa un set de operații. Funcțiile pot fi executate de mai multe ori în cadrul unui script prin simpla apelare a numelui lor.

11.1. Funcţii predefiniteExista funcții predefinite, specifice limbajului PHP (cum ar fi print, empty, etc) ce poți

fi folosite în orice moment, fără a fi nevoie de vreo acțiune speciala; şi exista funcții definite de utilizator, scrise practic de programatori. Pentru ca acestea să poată fi folosite este nevoie să fie declarate (si implementate).

PHP include funcții care executa operații utile. Iată unele exemple de funcții: abs(x) - Returnează valoarea absoluta a lui 'x' ceil(x) - Returnează valoarea 'x', rotunjita la întregul imediat superior floor(x) - Returnează valoarea 'x', rotunjita la întregul imediat inferior max(x,y,...) - Returnează valoarea maxima a unui set de valori min(x,y,...) - Returnează valoarea minima a unui set de valori pow(x,n) - Returnează numărul 'x', ridicat la puterea specificata 'n' strftime(f) - Returnează data curenta, formatata conform conținutului parametrului

'f' sqrt(x) - Returnează rădăcina pătrată a lui 'x'

În afara de acestea, PHP include multe alte funcții. Consultați site-ul www.php.netMajoritatea funcțiilor necesita una sau mai multe valori de intrare, cunoscute sub

numele de argumente. De exemplu, funcția "sqrt" necesita un argument (aici este 'x') care specifica valoarea a cărei rădăcina pătrată trebuie calculata.

Unele funcții, precum min şi max, preiau un număr nedefinit de argumente. Alte funcții nu necesita nici un fel de argumente. Pentru a putea folosi o funcție în mod corespunzător, trebuie să cunoașteți:

Numele funcțieiAcțiunea funcției şi valoarea returnata de aceasta, dacăexista

Numărul argumentelor preluate de funcțieSemnificația fiecărui argumentIată un exemplu simplu care folosește o funcție pentru calculul lungimii laturilor unui

pătrat, dacăeste cunoscuta aria pătratului:$latura=sqrt($arie);

Reţineţi modul în care argumentul funcției este inclus între paranteze, precum şi modul în care funcția şi argumentul sau sunt folosite într-un mod asemănător cu o valoare literala sau o variabila. Iată un exemplu care prezintă modul de utilizare a funcției "max", care preia mai multe argumente:$punctaj_maxim=max($punctaj1, $punctaj2, $punctaj3);

Rezultatul dat variabilei "$punctaj maxim" va fi determinat de funcția "max", aceasta determinând valoarea cea mai mare a argumentelor din paranteza.

Observați ca fiecare argument este separat de vecinul sau printr-o virgula.11.2. Funcţii definite de utilizatorExemplu de funcție definita de utilizator:

<?php# funcțiile se declara folosind cuvântul cheie "function" urmat de numele funcției# numele funcției trebuie să fie orice identificator valid (adică să înceapă cu # litere sau cu caracterul _ ) şi să nu conţină caractere speciale sau spațiu# după numele funcției se pun paranteze rotunde

256

Page 257: curs DPW.docx

# corpul funcției (implementarea) trebuie încadrată în acoladefunction afisLuna(){

$luni = array( 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul','Aug', 'Sep', 'Oct', 'Nov', 'Dec');echo '<select>';for( $i = 0; $i < 12; $i++ ) {# întrucât se cunosc nr de pași, se folosește structura repetitiva forecho "<option>{$luni[ $i ]}</option>\n";}echo '</select>';

}# mai jos vom folosi funcția pentru a afișa un drop-down cu lunile anului:echo 'Luna începerii activității: ';afisLuna();echo '<br /><br />Luna terminării activității: ';afisLuna();?>

Am scris, așadar, o singura data codul care afișează lunile anului şi l-am apelat de cate ori am avut nevoie. Apelarea funcției se face prin specificarea numelui urmat de paranteze. Intre paranteze se pot specifica parametrii, după cum vom vedea mai jos. Alternativ, o funcție definita de utilizator se poate apela folosind instrucțiunea call_user_func

Vom rescrie ultima parte a coduluiecho 'Luna începerii activității: ';call_user_func( 'afisLuna' );echo '<br /><br />Luna terminării activității: ';call_user_func( 'afisLuna' );

Instrucțiunea call_user_func este utila atunci când numele funcției este furnizat de o variabila, cu ajutorul căruia se poate apela dinamic o funcție. Exemplu:<?php# definesc 2 funcții diferitefunction unu() {

print 'Azi suntem în întâi!<br />';}function alta() {

print 'Azi e o zi obișnuita<br />';}# declar o variabila care să aibă ca valoare numele funcției$functie = 'unu';# variabila $functie poate să se schimbe în funcție de diferite condiții# în cazul nostru, dacăziua curenta e prima zi din luna, valoarea va fi 'unu'if( date( 'd' ) == 1 ) $functie = 'unu';else $functie = 'alta';# la final apelez dinamic funcția data de variabila# Interpretorul nu știe exact care funcție va fi el doar executa ce-i transmite variabila# eventual pot face niște validări:# - function_exists verifica dacăfuncția transmisa a fost definita# - is_callable verifica dacăvariabila transmisa poate fi apelata ca funcțieif( function_exists( $functie ) && is_callable( $functie ) ) {

call_user_func( $functie );} else {

echo "Nu pot apela funcția $functie";}// Rezultat (live): Azi e o zi obișnuita?>

Foarte important de știut este faptul ca variabilele definite în afara funcțiilor nu sunt disponibile în interiorul lor. Astfel, codul de mai jos nu va funcționa așa cum ne aşteptăm:<?php

257

Page 258: curs DPW.docx

# declar o variabila$a = "Afara e frumos";# definesc o funcțiefunction afisMesaj() {

echo $a;}# apelez funcțiaafisMesaj(); // nu va afișa nimic!!?>

Funcția nu va afișa mesajul, așa cum v-ați fi gândit la prima vedere. Aceasta pentru ca ce este definit în afara funcției nu este recunoscut în interior. în mod similar, variabilele definite în interiorul unei funcții se pierd şi NU sunt disponibile în afara acesteia.

Exista totuși o modalitate prin care variabilele definite în afara unei funcții să fie 'aduse' în interiorul ei: folosind instrucțiunea global.<?php# declar o variabila$a = "Afara e frumos";# definesc o funcțiefunction afisMesaj() {

# folosind cuvântul 'global' ii spun interpretorului PHP ca # vreau să folosesc o variabila din afara funcțieiglobal $a;echo $a;

}# apelez funcțiaafisMesaj(); // va afișa Afara e frumos?>

Dacăe nevoie să se folosească mai multe variabile globale în cadrul unei funcții, acestea se pot specifica toate într-o singura instrucțiune global:global $a, $b, $Vector;

11.3. De ce sunt folosite funcțiile?Printre avantajele folosirii funcțiilor, se număra:reutilizarea codului. Spre exemplu,

dacăeste nevoie să se execute aceeași secvenţă de cod în mai multe părţi ale unui program sau script, pentru a nu se rescrie codul de fiecare data, se definește o funcție care este apelata de mai multe ori,

Odată cu apariția funcțiilor (a subprogramelor, în general) s-a introdus şi conceptul de modularizare care presupune împărţirea (spargerea) problemei ce trebuie rezolvata în probleme mai mici. Fiecare modul problema mai mica reprezintă un subprogram, implementat într-o funcție care contribuie la rezultatul final.

Spre exemplu, avem o operație (relativ) complexa: afișarea inbox-ului unui utilizator. Aceasta problema poate fi împărţită în părţi mai mici/simple. Pentru fiecare parte s-ar defini cate o funcție în loc să se scrie un singur script foarte mare, iar la final codul va arata cam în felul următor:

preluareDateAutentificare(); verificareDate(); preluareMesajeInbox(); afisareInbox();

Observam menținerea uşoară a codului şi înțelegerea mai uşoară a logicii aplicației sau a scriptului

Acestea sunt urmări imediate ale primelor 2 puncte. Dacăscriptul este structurat, împărţit în bucăţi mai mici, în care aceleași secvențe de cod nu se repeta atunci va fi mai ușor şi de înţeles şi de modificat sau întreținut.

11.4. Valori returnate. Parametrii De multe ori este nevoie ca o funcție să returneze o valoare. Majoritatea funcțiilor

predefinite fac lucrul aceasta; spre exemplu empty returnează TRUE sau FALSE în funcție de starea şi conținutul unei variabile transmise ca parametru.

Si funcțiile definite de utilizator pot returna o valoare, cu ajutorul instrucțiunii return. Exemplu:<?phpfunction formatareData() {

$rezultat = date( 'd-m-Y' );

258

Page 259: curs DPW.docx

return $rezultat;}# rezultatul returnat de funcție poate fi folosit în diferite moduri:$azi = formatareData(); // atribuirea rezultatuluiprint formatareData(); // afișarea rezultatuluiformatareData(); // rezultatul nu este folosit - dacă funcţia nu printează ceva// atunci apelul nu are nici un efect vizibil?>

De asemenea, funcțiile pot primi date ce pot fi folosite în interiorul lor pentru diverse prelucrări. Aceste date de intrare sunt transmise sub forma de parametrii.

Pentru ca o funcție să poată primi parametrii, aceasta trebuie să ii declare intre parantezele rotunde, ca în exemplul de mai jos<?php# funcția este declarata să primească 2 parametrii ce vor fi prelucrați# funcția returnează şi o valoare, în funcție de datele de intrarefunction minim($a, $b) {

if( $a < $b ) return $a;else return $b;

}# la apelul funcției, este obligatoriu să se transmită 2 parametrii# parametrii pot fi orice expresie (variabile, constante, rezultatul altor funcții, etc)print minim( 3, 4 ); // parametrii sunt 2 valori numerice$x = 1; $y = 4;print minim( $x, $y ); // parametrii sunt 2 variabile$x = 4; $a = 3; $b = 5;print minim( $x, minim( $a, $b ) ); // parametrii primului apel sunt: variabila $x// şi rezultatul unui alt apel cu 2 parametrii diferiți?>

Întrucât funcția minim() returnează o valoare, ea poate fi folosita ca şi cum ar fi un număr normal. De aceea apelul de mai sus este valid. Alte exemple valide sunt mai jos:<?php$a = 1 + minim( 4, 3 );if( minim( $a, 4 ) > 5 ) { echo "If-ul este True"; }else { echo "If-ul este False"; }?>

O facilitate avansata oferita de limbajul PHP este folosirea valorilor predefinite pentru parametrii funcțiilor. Aceasta permite ca o funcție să nu fie apelata cu toți parametrii ei, urmând ca pentru valorile care lipsesc să fie folosite valorile predefinite. Funcția minim() definita mai sus poate fi rescrisa în felul următor:<?phpfunction minim($a = 1, $b = 2) {

if( $a < $b ) return $a;else return $b;

}?>

Declararea funcției de mai sus se traduce în felul următor: dacăfuncția minim() nu este apelata cu toți parametrii, atunci folosește valoarea 1 pentru $a şi valoarea 2 pentru $b în calculele din interiorul funcției. în acest caz, funcția se poate apela în felul următor:<?phpecho minim(); // echivalent cu echo minim(1,2);echo minim(7); // echivalent cu echo minim(7,2);echo minim(7,8); // apel normal cu toți parametrii?>

12. Operații cu fișiere şi directoare12.1. Obținerea atributelor unui fișierPrivilegiile asociate unui fișier sau unui catalog determina operațiile pe care le poate

executa un utilizator cu fișierul sau catalogul respectiv.Pentru a adăuga un fișier într-un director, folosind PHP, trebuie să aveți permisiunea

de scriere în acel director, de asemenea, pentru a adăuga date într-un fișier, trebuie să aveți permisiunea de scriere în fișierul respectiv.

Aceste permisiuni sunt date (configurate) de administratorul sistemului respectiv.

259

Page 260: curs DPW.docx

PHP furnizează numeroase funcții care va permit să obțineți informații care descriu un fișier. Tabelul următor rezuma cele mai cunoscute dintre aceste funcții.

Funcții PHP pentru obținerea atributelor unui fișier

Funcție Descriere

file_exists() - Returnează TRUE dacăfișierul specificat exista, respectiv FALSE în caz contrar

fileatime() - Returnează timpul de acces la fișier sub forma de amprenta de timp UNIX.

filectime()- Returnează timpul de modificare al i-nodului (structura de date care conține informații despre fișiere UNIX - N. T.) sub forma de amprenta de timp UNIX.

filegroup() - Returnează identificatorul numeric al grupului care deține fișierul

filemtime() - Returnează momentul de timp al modificării fișierului sub forma de amprenta de timp UNIX

fileowner() - Returnează identificatorul numeric de utilizator al fișierului

fileperms() - Returnează permisiunile fișierului

filesize() - Returnează dimensiunea fișierului, în octeți

filetype() - Returnează tipul fișierului, în speţă "fifo", "char", "dir", "block", "link", "file" sau "unknown"

is_dir() - Returnează TRUE dacădirectorul specificat exista; în caz contrar, returnează FALSE

is_file() - Returnează TRUE dacăfișierul specificat exista; în caz contrar, returnează FALSE

is_readable()

- Returnează TRUE dacăfișierul specificat exista şi poate fi citit; în caz contrar, returnează FALSE

is_writable() - Returnează TRUE dacăfișierul specificat exista şi se poate scrie în acel fișier; în caz contrar, returnează FALSE

Funcțiile fileowner() şi filegroup() returnează fiecare un identificator numeric; puteți converti identificatorul numeric într-un sir prin invocarea funcției posix_getpwuid() cu un identificator de utilizator, respectiv a funcției posix_getgrgid() cu un identificat de grup. Acestea returnează informații despre identificatorul precizat.

Iată un exemplu în care puteți vedea, şi înțelege mai bine, cum sunt folosite funcțiile prezentate în tabelul anterior (fișierul 'test.txt' care va fi folosit de funcții se afla în același director cu scriptul php):<?php$filename = "test.txt";$result = file_exists($filename);echo "<br /> file_exists(): $result";$result = fileowner($filename);echo "<br /> fileowner(): $result";$result = filegroup($filename);echo "<br /> filegroup(): $result";$result = filetype($filename);echo "<br /> filetype(): $result";$result = filesize($filename);echo "<br /> filesize(): $result";$result = fileatime($filename);$result = date("m/d/Y H:i", $result);echo "<br /> fileatime(): $result";$result = filectime($filename);$result = date("m/d/Y H:i", $result);echo "<br /> filectime(): $result";$result = filemtime($filename);$result = date("m/d/Y H:i", $result);echo "<br /> filemtime(): $result";

260

Page 261: curs DPW.docx

$result = fileperms($filename);$result = decoct($result);echo "<br /> fileperms(): $result";$result = is_file($filename);echo "<br /> is_file(): $result";$result = is_dir($filename);echo "<br /> is_dir(): $result";$result = is_readable($filename);echo "<br /> is_readable(): $result";$result = is_writable($filename);echo "<br /> is_writable(): $result";?>Datele de ieșire ale exemplului sunt următoarelefile_exists(): 1fileowner(): 0filegroup(): 0filetype(): filefilesize(): 5fileatime(): 08/28/2008 00:00filectime(): 08/28/2008 10:49filemtime(): 08/28/2008 11:32fileperms(): 100666is_file(): 1is_dir():is_readable(): 1is_writable(): 1

12.2. Privilegii de fișierPrivilegiile asociate unui fișier (sau director) determina operațiile pe care utilizatorii le

pot efectua cu fișierul (sau directorul) respectiv. Privilegiile sunt date sub forma a trei grupuri alcătuite din câte trei caractere fiecare;

cu alte cuvinte, trei triade. Prima triada indica privilegiile acordate posesorului fișierului. Cea de-a doua triada indica privilegiile acordate membrilor grupului posesor al fișierului. Cea de-a treia triada indica privilegiile acordate altor utilizatori.

Cele 3 caractere care alcătuiesc un grup sunt reprezentate, în sistemele UNIX, prin următoarele trei litere: 'r', 'w' şi 'x'; acestea reprezintă:

r - fișierul poate fi citit w - se poate scrie în fișier x - conținutul fișierului poate fi executat

Caracterele unei triade apar întotdeauna în secvenţă 'rwx'. Dacăo anumita litera este înlocuita de o cratima (-), privilegiul asociat nu este accesibil.

De exemplu, să examinam privilegiile specificate în următorul exemplu:rwxr-xr--

Aceste caractere au următoarea semnificație: "rwx", posesorul fișierului poate citi, scrie sau executa fișierul "r-x", membrii grupului posesor al fișierului pot citi sau executa fișierul, dar nu pot

scrie în fișier "r--", alți utilizatori pot citi fișierul, dar nu pot scrie în fișier sau executa conținutul

fișieruluiPrivilegiul 'x' este semnificativ numai pentru fișierele care includ un conținut

executabil, cum sunt fișierele binare executabile (.exe) sau anumite categorii de scripturi. Posesorul unui fișier poate modifica privilegiile asociate fișierului emițând comanda chmod (aceasta funcționează în sistemele de operare UNIX).

Aceasta comanda are doua forme. O forma va permite să specificați privilegiile folosind cifre scrise în octal; cealaltă va permite să le specificați folosind litere.

Pentru a specifica privilegiile folosind cifre în octal, calculați valoarea numerica a fiecărei triade. Pentru aceasta, însumați numerele corespunzătoare fiecărui privilegiu disponibil din cadrul triadei. Numerele asociate privilegiilor sunt următoarele:r - 4w - 2x - 1

261

Page 262: curs DPW.docx

De exemplu, privilegiul "rwx" are valoarea 4 + 2 + 1 = 7. Similar, privilegiul "r-x" are valoarea 4 + l = 5, iar privilegiul "r--" are valoarea 4.

După ce ați calculat valoarea numerica a fiecărei triade, formați un număr din trei cifre scris în octal, care este alcătuit din valoarea numerica a privilegiilor utilizatorilor, valoarea numerica a privilegiilor membrilor grupului, şi valoarea numerica a privilegiilor altor utilizatori. Astfel, privilegiile "rwxr-xr--" corespund valorii în octal 754.

12.2.1. Modificarea privilegiilor unui fișierPentru a modifica privilegiile unui fișier, folosiți funcția chmod(), care are următoarea

forma:chmod(nume_fișier, mod)

Argumentul 'nume_fișier' specifica numele şi calea de acces a fișierului ale cărui privilegii urmează a fi modificate, iar argumentul 'mod' specifica privilegiile dorite, în general, se prefera exprimarea privilegiilor sub forma unui număr scris în octal. Pentru aceasta, prefixați valoarea folosind cifra 0.

De exemplu, puteți atribui unui fișier "text.txt" privilegiile "rwxr-xr--" specificând pentru 'mod' valoarea 0754, funcția "chmod" va fi chmod("text.txt", 0754)

Pentru ca funcția chmod() să se execute cu succes, PHP trebuie să ruleze sub contul utilizatorului posesor al fișierului. Funcția returnează TRUE în caz de reuşită, respectiv FALSE în caz contrar.

Pentru a modifica grupul posesor al unui fișier, invocaţi funcția chgrp(), care are forma:chgrp("nume_fifier", grup)

Unde "grup" este un nume sau număr care desemnează grupul respectiv.Funcțiile chmod() şi chgrp() nu funcționează sub Microsoft Windows.

12.3. Deschiderea unui fișierÎnainte de a putea citi sau scrie într-un fișier, trebuie să deschideți fișierul folosind

funcția fopen().fopen("nume_fișier", "mod")

Unde 'nume_fișier' specifica numele şi calea spre fișierul care urmează a fi deschis, iar 'mod' indica tipul de acces dorit.Modurile de deschidere a unui fișier sunt următoarele:

r - Permite doar citirea fișierului r+ - Citire sau scriere de la începutul fișierului w - Crează fișierul dacănu exista şi suprascrie datele existente w+ - Citire sau scriere; la scriere , creează fișierul dacănu exista şi suprascrie datele

existente a - Adăugare; Creează fișierul dacănu exista şi adăuga datele noi la sfârșitul fișierului

existent a+ - Citire sau scriere; la scriere, crează fișierul dacănu exista şi adăuga datele noi la

sfârșitul fișierului existent x - Doar scriere; Creează fișierul dacănu exista şi generează un avertisment

dacăacesta exista x+ - Citire sau scriere; Creează fișierul dacănu exista şi generează un avertisment

dacăacesta exista b - Deschide fișierul în mod binar

Funcția fopen() returnează FALSE dacăPHP nu a reușit să deschidă fișierul, în caz contrar, returnează o valoare care conține un întreg, numit "identificator de fișier", care se folosește pentru identificarea unui fișier de către funcțiile care executa operații cu fișiere.

De exemplu, instrucțiunea următoare deschide fișierul 'carte.txt' pentru citire:$fh = fopen("carte.txt", "r");

Sub Microsoft Windows, fișierele ASCII şi fișierele binare sunt tratate în mod diferit. Când deschideți un fișier binar sub Windows, specificați "b" ca al doilea caracter al modului; de exemplu, "rb" pentru citire, "wb" pentru scriere, "a+b" pentru citire şi adăugare. Dacănu procedați astfel, citirile din fișier şi alte operații se vor încheia prematur sau vor eșua.

12.4. Verificarea finalizării unei operații cu un fișierOperațiile cu fișiere (inclusiv cele legate de deschiderea, citirea unui fișier şi scrierea

într-un fișier) pot eșua dintr-o varietate de motive. Deci, este important să verificați dacăfiecare operație s-a încheiat cu succes.

Iată o modalitate în care puteți proceda:<?php$fh = fopen("carte.txt", "rb");

262

Page 263: curs DPW.docx

if (!$fh) { echo "Nu a fost deschis fișierul carte.txt.";

}?>

Funcția fopen() returnează FALSE dacănu reușește să deschidă fișierul. în acest caz, scriptul executa instrucțiunea echo care afişează un mesaj.

O forma alternativa mai simpla folosește operatorul OR (SAU):<?php($fh = fopen("carte.txt", "rb"))

OR die("Nu a fost deschis fișierul carte.txt.");?>

12.5. Închiderea unui fișierUn fișier deschis consuma resursele sistemului. Când un script a terminat de utilizat

un fișier, scriptul trebuie să închidă fișierul, eliberând aceste resurse. La sfârșitul unui script, PHP închide în mod automat fișierele deschise. Totuși, la

programare se recomanda să închideți fișierele mai rapid, ori de câte ori este posibil.Pentru a închide un fișier, folosiți funcția fclose():

fclose(identificator_fișier)Unde 'identificator_fișier' este identificatorul fișierului, returnat la deschiderea

acestuia cu funcția fopen()Iată un exemplu caracteristic de deschidere, utilizare şi închidere a unui fișier:

<?php$fh = fopen("carte.txt", "rb");if (!$fh) {

echo "Nu a fost deschis fișierul carte.txt.";}// Aici se inserează instrucțiunile care folosesc fișierul deschisfclose($fh);?>

Funcția fclose() returnează valoarea TRUE dacăfișierul a fost închis cu succes. Testarea acestei valori este rareori necesara, deoarece nu se mai pot face prea multe după ce s-a ratat o încercare de a închide un fișier.

12.6. Citirea dintr-un fișierPHP furnizează o varietate de funcții pentru citirea fișierelor. Una dintre acestea este

fread(), care are următoarea forma:fread(identificator_fișier, lungime)

Argumentul 'identificator_fișier' este valoarea returnata de funcția fopen(), iar argumentul 'lungime' specifica numărul maxim de octeți care vor fi citiți. Octeții citiți din fișier sunt returnați sub forma de valoare de tip sir. Dacăoperația de citire întâlnește sfârșitul fișierului, PHP va returna mai puțin de lungime octeți data.

Iată un exemplu de citire şi de afișare a unui text dintr-un fișier, folosind funcția fopen() (Fișierul "carte.txt" folosit ca test în exemplele de mai jos trebuie să se afle în același director în care este şi scriptul php):<?php$fh = @fopen("carte.txt", "rb");if (!$fh) {

echo "Nu a fost deschis fișierul carte.txt.";}else {

$s = fread($fh, 256); echo "<br /> Citește: $s"; fclose($fh);

}?>

Exemplul citește maximum 256 de octeți din fișier dacăfișierul a fost deschis. Am folosit caracterul @ în fata funcției "fopen()" pentru a împiedica afișarea erorilor

de la server în cazul când fișierul nu poate fi deschis. Este deja funcția "if()" care verifica şi afișează mesaj în caz de nedeschidere a fișierului.

Pentru a citi un număr mai mare sau mai mic de octeți, modificați valoarea argumentului lungime al funcţiei fread().

263

Page 264: curs DPW.docx

PHP include o funcție conexa, denumita fgetc(), care citește un octet din fișierul specificat.

Pentru a citi şi a afișa întregul conținut al fișierului, puteți folosi funcția filesize() pentru a furniza valoarea argumentului lungime, astfel:<?php$nume = "carte.txt";$fh = @fopen($nume, "rb");if (!$fh) {

echo "Nu a fost deschis fișierul carte.txt.";}else {

$l = filesize($nume); $s = fread($fh, $l); echo "<br /> Citește: $s"; fclose($fh);

}?>

12.7. Citirea unei linii de textSe obișnuiește frecvent citirea linie cu linie a unui text dintr-un fișier.Funcția fgets() citește o linie dintr-un fișier; funcția are următoarea forma:

fgets(identificator_fișier, lungime)Argumentul 'identificator_fișier' este o valoare returnata de funcția fopen(); aici,

argumentul 'lungime' specifica numărul maxim de octeți dintr-o linie care vor fi citiți, minus o unitate, pentru a permite includerea caracterului de terminare a liniei (acesta poate fi omis şi va citi toata linia). Octeții citiți din fișier sunt returnați ca valoare de tip sir.

Iată un exemplu care prezintă modul de citire şi de afișare a primilor 125 octeți din prima linii a unui fișier :<?php$nume = "carte.txt";$fh = @fopen($nume, "rb");if (!$fh) {

echo "Nu a fost deschis fișierul carte.txt.";}else {

$s = fgets($fh, 126); echo "<br /> Citește: $s"; fclose($fh);

}?>

In exemplul de mai sus, dacăprima linie din fișierul "carte.txt" are mai mult de 125 de caractere, va afișa doar primele 125, dacăare mai puțin de 125 de caractere, va afișa doar caracterele care sunt incluse în prima linie.

12.8. Citirea linie cu linie a unui întreg fișierÎn general, dintr-un fișier trebuie citit mai mult decât prima linie a acestuia. Pentru

aceasta, un script trebuie să dispună de o modalitate de a determina momentul când fișierul a fost citit în totalitate.

Funcția feof() are chiar acest scop, returnând o valoare care arata dacăs-a ajuns sau nu la sfârșitul fișierului. Funcția are următoarea forma: feof(identificator_fișier)

Argumentul 'identificator_fișier' este valoarea returnata de funcția fopen(). Funcția feof() returnează TRUE dacăfișierul specificat este la sfârșit; în caz contrar,

returnează FALSE.Iată cum se poate folosi funcția feof() pentru a controla procesul de citire a unui

întreg fișier, linie cu linie:<?php$nume = "carte.txt";$fh = @fopen($nume, "rb");if (!$fh) {

echo "Fișierul carte.txt nu a putut fi deschis";}while (!feof($fh)) {

264

Page 265: curs DPW.docx

$s = fgets($fh, 256); echo "<br /> Citește : $s";

}fclose($fh);?>

Instrucțiunea "while" asigura faptul ca funcția fgets() este apelata în mod repetat, până la citirea tuturor liniilor.

O alta modalitate simpla de a citi linie cu linie un întreg fișier consta în a folosi funcția file(). Aceasta funcție returnează un tablou în care fiecare element conține o linie a fișierului specificat.

Iată un exemplu care folosește funcția file() pentru a citi şi pentru a afișa conținutul unui fișier:<?php$tablou = file("carte.txt");foreach ($tablou as $s) {

echo "<br /> Citește : $s";}?>

Aceasta metoda nu este adecvata pentru fișiere de foarte mari dimensiuni, deoarece în tablou este încărcat întregul conținut al fișierului, ceea ce poate necesita o cantitate de memorie superioara celei disponibile.

12.9. Afișarea conținutului unui fișierPHP furnizează doua funcții care facilitează afișarea conținutului unui fișier.Una dintre funcții, fpassthru(), necesita un argument care specifica identificatorul

fișierului care urmează să fie afișat:$fh = fopen("carte.txt", "rb");fpassthru($fh);

După ce a afișat fișierul, funcția îl închide automat.Cealaltă funcție, readfile(), necesita numai numele sau calea fișierului:

readfile("carte.txt");12.10. Navigarea printr-un fișierFiecare fișier are un pointer asociat care indica poziția octetului unde se va produce

următoarea operație.Puteți folosi funcția rewind() pentru a readuce pointerul la începutul fișierului.

Funcția are următoarea forma ('identificator_fișier' este identificatorul de fișier returnat de funcția fopen()): rewind(identificator_fișier)

Nu puteți readuce pointerul unui fișier la începutul propriu-zis al unui fișier dacăfișierul a fost deschis pentru un acces de tip atașare, adică într-unul din modurile 'a' sau 'a+'.

Iată un exemplu care prezintă modul de utilizare a funcției rewind() pentru a afișa de doua ori conținutul unui fișier:<?php$nume = "carte.txt";$fh = @fopen($nume, "rb");if (!$fh) {

echo "Fișierul carte.txt nu a putut fi deschis";}while (!feof($fh)) {

$s = fgets($fh, 256); echo "<br /> Citește : $s";

}// Derulează la începutul fișierului şi reia redarea acestuiarewind($fh);while (!feof($fh)) {

$s = fgets($fh, 256); echo "<br /> Citește \$s : $s";

}fclose($fh);?>

Dacăse produce vreo eroare, funcția rewind() returnează zero.

265

Page 266: curs DPW.docx

Deși funcția rewind() este utila în caz de nevoie, necesitatea de a readuce un pointer de fișier la începutul fișierului nu este chiar atât de frecventa.

Funcția fseek() furnizează o mai mare flexibilitate, permițându-va să poziționări pointerul de fișier astfel încât să puteți citi sau scrie în orice punct al fișierului.

Funcția are doua forme, cea mai simpla fiind următoarea: fseek(identificator_fișier, offset)unde 'identificator_fișier' este identificatorul de fișier returnat de funcția fopen(), iar 'offset' este poziția dorita a pointerului de fișier, specificata în octeți, în raport cu începutul fișierului.

In caz de reuşită, funcția fseek() returnează 0; în caz contrar, returnează -l .O forma alternativa a funcției asigura un grad superior de flexibilitate, având

următoarea forma: fseek(identificator_fișier, offset, baza)unde 'identificator_fișier' şi 'offset' au semnificațiile definite anterior, iar 'baza' ia una ; dintre următoarele valori:

SEEK_SET, care stabilește poziția pointerului de fișier în raport cu începutul fișierului SEEK_CUR, care stabilește poziția pointerului de fișier în raport cu valoarea curenta a

pointerului SEEK_END, care stabilește poziția pointerului de fișier relativ la sfârșitul fișierului

Valoarea argumentului 'offset' poate fi pozitiva, negativa sau zero. De exemplu, pentru a poziționa pointerul cu 1000 de octeți înainte de sfârșitul

fișierului, emiteți următorul apel de funcție:fseek($fh, -1000, SEEK_END)

Pentru a obține valoarea curenta a pointerului de fișier, folosiți funcția ftell(), care are următoarea forma:ftell(identificator_fișier)

Funcția returnează valoarea curenta a identificatorului de fișier, respectiv valoarea zero dacăfuncția eșuează.

12.11. Scrierea într-un fișierPentru a scrie într-un fișier se folosește funcția fwrite(), aceasta are următoarea

forma: fwrite(identificator_fișier, date);

Unde 'identificator_fișier' este identificatorul de fișier returnat de funcția fopen(), iar 'date' este o valoare sir care determina datele care urmează a fi scrise.

Dacăexecuția funcției reușește, returnează numărul octeților scriși; în caz contrar, returnează valoarea -l.

Iată un exemplu care prezintă modul de scriere a datelor într-un fișier:<?php$nume = "carte.txt";$fh = @fopen($nume, "ab");if (!$fh) {

echo "Nu a fost deschis fișierul carte.txt.";}else {

$ok = fwrite($fh, "Acestea sunt datele adăugate \n"); echo "<br /> Rezultatul scris este: $ok"; fclose($fh);

}?>

Acest script va avea următoarele date de ieșire:Rezultatul scris este: 30

Programul prezentat în exemplul anterior scrie în fișierul "carte.txt" o linie de text. Deoarece fișierul a fost deschis folosind modul "a", datele sunt atașate la fișier; cu alte cuvinte, datele sunt scrise la sfârșit, după toate datele existente în fișier.

Observați ca a fost scris şi un caracter de terminare a liniei ("\n"), astfel încât fișierul să poată fi citit linie cu linie la un moment de timp ulterior. Dacălucrați cu un fișier text, în general e util să includeți un caracter de terminare a liniei la sfârșitul fiecărei linii scrise în fișier.Programul din exemplu scrie în fișier o singura linie de text. Totuși, puteți scrie mai multe linii, dacădoriți. Dacăapelați funcția fwrite() din interiorul unei bucle, aveți posibilitatea de a

266

Page 267: curs DPW.docx

scrie mai multe linii. După ce ați scris toate liniile de care aveți nevoie, închideți fișierul prin apelarea funcției fclose().

PHP mai furnizează şi o forma alternativa a funcției fwrite():fwrite(identificator_fișier, date, lungime);

Aceasta forma include un al treilea argument, şi anume "lungime", care va permite să specificați numărul maxim de octeți care vor fi scriși.

Argumentul "lungime" al funcției fwrite() trebuie utilizat atunci când se scrie în fișiere binare sub Microsoft Windows.

Windows prefera secvenţă de terminare a liniei "\r\n". Atunci când scrieți programe PHP pentru sisteme Windows, este de preferat să folosiți secvenţă "\r\n" de terminare a liniei.

PHP dispune de o alta funcție pentru scrierea fișierelor, fputs(). Totuși, în afara de nume, fputs() este similara cu funcția fwrite().

12.12. Obținerea accesului exclusiv la un fișierWeb-ul ridica o problema speciala pentru dezvoltatorii de programe, deoarece mai

mulți utilizatori pot avea acces simultan la un singur script PHP. Uneori, accesul simultan poate avea ca rezultat date incorecte. Pentru a vedea cum se poate produce aceasta, să luam în considerare următorul script, care reprezintă un contor pentru numărul de deschideri a unei pagini.<?php$contor = "ctr.txt";$fh = @fopen($contor, "r+b");if (!$fh) {

echo "Nu a fost deschis fișierul ctr.txt.";}else {

$s = fgets($fh, 7); $count = (int) $s; $count = $count + 1; rewind($fh); fwrite($fh, $count); echo "<br /> Nr. vizitări: $count"; fclose($fh);

}?>

Remarcați funcțiile pe care le folosește scriptul pentru a executa operațiile cu fișiere. Programul deschide fișierul "ctr.txt" pentru citire şi scriere, preia datele din acesta, care sunt un număr întreg, mărește acel număr cu o unitate, întoarce pointerul la începutul fișierului "rewind" după care rescrie noul număr, afișează numărul şi închide fișierul.

Secvenţă de cod descrisa mai sus poate creea probleme în cazul în care, de exemplu doi utilizatori diferiți accesează același fișier, în același timp, când contoarul este, de exemplu, la numărul 100. Amândoi vor incrementa numărul 100 cu o unitate şi va rescrie în fișierul "ctr.txt" 101; în final, contoarul va arata 101, în loc de 102 cum ar fi trebuit (deoarece au fost 2 vizitatori). Pentru a evita astfel de conflicte PHP pune la dispoziția utilizatorilor o metoda prin care se poate bloca accesul temporar la un fișier. Pe durata blocării, un alt utilizator nu va mai putea scrie/citi din acest fișier. De aceea durata blocării trebuie să fie limitata.

Funcția care realizează blocarea este flock(), care are următoarea forma:flock(identificator_fișier, operație)

Unde "identificator_fișier" este identificatorul de fișier returnat de funcția fopen(). Argumentul "operație" este o constanta sau o expresie care poate avea următoarele valori:

LOCK_SH - Blocare partajata în scopuri de citire LOCK_EX - Blocare exclusiva în scopuri de scriere LOCK_NB - Blocare fără fixare LOCK_UN - Eliminarea blocării

Iată cum se folosește procesul de blocare, vom folosi același exemplu, contoarul de mai sus, de data aceasta îmbunătăţit.- <?php$contor = "ctr.txt";$fh = @fopen($contor, "r+b");if (!$fh) {

267

Page 268: curs DPW.docx

echo "Nu a fost deschis fișierul ctr.txt.";}else {

flock($fh, LOCK_EX); $s = fgets($fh, 7); $count = (int) $s; $count = $count + 1; rewind($fh); fwrite($fh, $count); flock($fh, LOCK_UN); echo "<br /> Nr. vizitări: $count" fclose($fh);

}?>

De data aceasta scriptul blochează fișierul "ctr.txt" pe timpul citirii şi scrierii acestuia, astfel încât accesul simultan să nu cauzeze o numărare eronata.

Blocare se face imediat după ce a fost deschis fișierul, cu "LOCK_EX", şi se încheie imediat după rescrierea în fișier, prin deblocare acestuia "LOCK_UN".

12.13. Copierea unui fișierO funcție care facilitează copierea fișierelor, este copy(). Funcția copy() are

următoarea forma:copy (sursa, destinatia)

Unde "sursa" este numele şi calea fișierului care urmează a fi copiat, iar "destinație" este numele sau calea copiei.

Funcția returnează TRUE dacăoperația de copiere reușește; în caz contrar, returnează FALSE.

Iată un exemplu în care este prezentat modul de utilizare a funcției copy():<?php$ok = copy("test.txt", "test.txt.bak");if (!$ok) {

echo "Copierea nu a reușit.";}?>

Exemplul creează o copie a fișierului "test.txt", cu numele "test.txt.bak", în același director.

Funcția copy() va suprascrie fișierul destinație, dacăacesta exista.12.14. Modificarea numelui unui fișierFuncția care va permite să modificați numele unui fișier este rename(), aceasta care

are următoarea forma:rename(nume_vechi, nume_nou)

Unde "nume_vechi" este numele şi calea originala a fișierului, iar "nume_nou" este numele dorit.

Funcția returnează TRUE dacăoperația de modificare a numelui a reușit; în caz contrar, returnează FALSE.

Iată un exemplu de utilizare a funcției rename():<?php$ok = rename("test.txt", "teste.dat");if (!$ok) {

echo "Modificarea numelui nu a reușit.";}?>

Exemplu modifica numele fișierului "test.txt" în "teste.dat".12.15. Ștergerea unui fișierFuncția care va permite să ștergeți un fișier este unlink(), aceasta care are

următoarea forma:unlink(nume_fișier)

Unde "nume_fișier" este numele şi calea fișierului care va fi șters.Funcția returnează TRUE dacăoperația de ștergere a reușit; în caz contrar, returnează

FALSE.Iată un exemplu de utilizare a funcției unlink():

<?php

268

Page 269: curs DPW.docx

$ok = unlink("test.txt");if (!$ok) {

echo "Ștergerea fișierului nu a reușit.";}?>

Exemplu șterge fișierului "test.txt".Reţineţi ca PHP trebuie să aibă acces de scriere la catalogul în care se vor executa

operațiile de copiere, redenumire sau ștergere; în caz contrar, PHP nu va putea executa aceste operații.

12.16. Încărcarea unui fișier în serverPentru încărcarea unui fișier în server, se folosesc formulare HTML împreună cu un

script PHP de încărcare care folosește funcția move_uploaded_file() pentru operația de upload.

Pentru a crea un formular de încărcare, specificați ENCTYPE="multipart/form-data" în eticheta FORM şi includeți un control de introducere a datelor cu atributul TYPE="FILE".

Iată un exemplu de script PHP şi formular HTML care încărca fișierele în server:<?php if(isset($_POST['submit'])) { $uploadpath = "upload/"; // Modifica aici directorul de upload $uploadpath = $uploadpath . basename( $_FILES['fișier']['name']); if(move_uploaded_file($_FILES['fișier']['tmp_name'], $uploadpath)) {

echo"Fișier: ". basename( $_FILES['fișier']['name']). " a fost încărcat"; } else {

echo "Eroare la urcarea fișierului pe server, mai încerca o data!"; } } ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data"> Alege fișierul: <input type="file" name="fișier" /> <br /><input type="submit" name='submit' value="Trimite" /> </form>

Când utilizatorul apăsa pe butonul de "Trimite", scriptul PHP preia datele şi va încărca fișierul dorit în server

12.17. Utilizarea cataloagelor (Directoare)Cele mai importante funcții pentru utilizarea cataloagelor va permit să obțineți

catalogul de lucru şi să lucrați cu acesta, să manipulați cai de acces, să citiți conținutul unui director, să vizualizați şi să modificați privilegiile unui director, precum şi să creați şi să ștergeți cataloage.

In acest context, numele "catalog" şi "director" reprezintă același lucru.12.18. Obținerea şi modificarea directorului de lucruFuncția getcwd() returnează numele catalogului curent de lucru. Funcția nu necesita

argumente şi poate fi utilizata astfel:$cdir = getcwd();Pentru a schimba catalogul curent de lucru, puteți folosi funcția chdir(), care are următoarea forma:chdir(nume_director)

Unde "nume_director" este calea sau numele catalogului de lucru dorit. Funcția returnează TRUE dacăoperația reușește; în caz contrar, returnează FALSE.De exemplu, dacăin directorul curent se afla alt director "temp", pentru a face din

"temp" catalogul curent de lucru, folosiți funcția chdir() după cum urmează:<?php$ndir = chdir("temp/");?>

12.19. Manipularea cailor de accesPHP include numeroase funcții utile pentru manipularea cailor de acces.Funcția dirname() preia calea de acces la un fișier şi returnează toata calea, mai

puțin componenta finala a caii specificate, în cazul în care componenta finala este un fișier, funcția va ajuta să izolați numele fișierului de restul caii.

269

Page 270: curs DPW.docx

De exemplu, dacăse da calea "utilizator/curs-php/curs/curs1.php", funcția va returna "utilizator/curs-php/curs".

Funcția are următoarea forma:dirname(cale_fișier)

Funcția basename() executa operația complementara, returnând numai componenta finala a caii specificate.

De exemplu, dacăeste data calea "utilizator/curs-php/curs/curs1.php", funcția "basename()" va returna "curs1.php".

Funcția are următoarea forma:basename(cale_fișier)

Dacădoriți să executați mai multe operații cu o cale, funcția pathinfo() va poate fi de folos. Aceasta funcție returnează un tablou care include patru elemente (al patrule începând de la versiunea PHP 5.2.0):

1. dirname - rezultatul invocării funcției dirname() având ca argument calea respectiva

2. basename - rezultatul invocării funcției basename() având ca argument calea respectiva

3. extension - extensia fișierului (dacăexista) dat de rezultatului funcției basename()4. filename - numele fișierului dat de rezultatului funcției basename(), dar fără

extensieIată un exemplu care prezintă modul de utilizare a funcției pathlnfo() :

<?php$path_parts = pathinfo('utilizator/curs-php/curs/curs1.php');foreach ($path_parts as $num => $val) {

echo "<br /> $num => $val";}?>

Datele de ieșire ale scriptului de mai sunt următoarele :dirname => utilizator/curs-php/cursbasename => curs1.phpextension => phpfilename => curs1

Un alt mod în care puteți utiliza şi afla valorile returnate de funcţia pathinfo() este următorul:<?php$path_parts = pathinfo('utilizator/curs-php/curs/curs1.php');echo "<br />". $path_parts['dirname'], "\r\n";echo "<br />". $path_parts['basename'], "\r\n";echo "<br />". $path_parts['extension'], "\r\n";echo "<br />". $path_parts['filename'], "\r\n";?>

Acest exemplu va returna următoarele date de ieșire :utilizator/curs-php/curscurs1.phpphpcurs1

12.20. Vizualizarea şi modificarea privilegiilor directoarelorPentru a vizualiza privilegiile unui director, puteți folosi aceleași funcții utilizate

pentru vizualizarea privilegiilor fișierelor, prezentate în tabelul "Funcții PHP pentru obținerea atributelor unui fișier". folosind ca argument numele sau calea directorului. Aceste funcții va permit să vizualizați o varietate de caracteristici ale directoarelor, inclusiv privilegiile de catalog, care sunt returnate de funcția fileperms().

Pentru a modifica privilegiile unui director, folosiți funcția chmod() care a fost descrisa la secțiunea "Modificarea privilegiilor unui fișier". Utilizați aceasta funcție exact așa cum ați folosi-o pentru a stabili privilegiile de fișier, folosind ca argument un director.

Pentru a putea atribui sau schimba privilegiile unui director sau fișier, modulul PHP instalat trebuie să aibă drepturi de modificare a directoarelor /fișierelor specificate.

12.21. Citirea conținutului unui directorPHP furnizează trei funcții care va permit să citiți conținutul unui catalog, ca şi cum

catalogul ar fi un fișier. Aceste funcții sunt:1. opendir() - deschide directorul pentru citire

270

Page 271: curs DPW.docx

2. readdir () - citește o intrare dintr-un catalog 3. closedir() - închide catalogul, eliberând resursele alocate de funcția opendir()Rezultatul apelării funcției readdir() este un sir care conține numele următorului fișier

sau sub-director din catalogul deschis. Funcția returnează FALSE atunci când au fost citite toate intrările din catalog.

Iată un exemplu care prezintă modul de utilizare a acestor funcții pentru citirea conținutului unui catalog:<?php$dc = @opendir("home/utilizator/curs-php");if (!$dc) {

echo "Directorul nu a putut fi deschis";}else {

while ($ok = readdir($dc)) { echo "<br /> $ok"; } closedir($dc);

}?>

Datele de ieșire ale exemplului pot fi similare cu cele prezentate mai jos :styleimgscursscriptsindex.phpsau puteți folosi funcția scandir($dir). Aceasta preia într-un Array numele tuturor directoarelor şi fișierelor din directorul "$dir". în caz de nereuşită returnează False.

12.22. Crearea unui directorPentru a crea un director, utilizați funcția mkdir(), care are următoarea forma:

mkdir(nume_dir, mod)Unde "nume_dir" este calea sau numele directorului care va fi creat, iar "mod"

reprezintă privilegiile care trebuie acordate noului catalog.In mod normal, prima cifra a argumentului mod trebuie să fie 0, astfel încât PHP sa-l

perceapă ca pe o valoare scrisa în octal. Funcția returnează TRUE dacăcreează catalogul; în caz contrar, returnează FALSE.

De exemplu, pentru a crea un catalog denumit "lucru" şi pentru a-i atribui privilegiile "rwxr-x--x", utilizați funcția mkdir() după cum urmează:<?php$cd = mkdir("lucru", 0751);if ($cd)

echo "Directorul a fost creat";else

echo "Directorul nu a putut fi creat";?>

Pentru a modifica numele unui director, puteți folosi funcția rename(), care are următoarea forma:

rename(nume_vechi, nume_nou)Unde "nume_vechi" este numele şi calea originala a directorului, iar "nume_nou" este

numele nou dorit13. Noțiuni fundamentale despre bazele de date şi SQLSpre deosebire de fișiere, bazele de date prezintă multe avantaje, inclusiv o mai

mare protecție a integrității datelor şi asigurarea partajării datelor.SQL este limbajul standard pentru crearea, accesul şi manipularea bazelor de date

relaționale. Detaliile (cu precădere sintaxa SQL sunt cele referitoare la MySQL, cel mai popular limbaj de baze de date folosit cu PHP.

13.1. Structura unei baze de date relaționaleO baza de date relaționale stochează datele în tabele, iar fiecare tabel stochează în

coloane informații despre un anumit tip de element. In continuare puteți vedea un tabel caracteristic dintr-o baza de date relaţională care

prezintă personalitaţi istorice ale Americii.PersoanaID Nume AnNastere

271

Page 272: curs DPW.docx

001 George Washington 1732

002 John Adams 1735

003 Thomas Jefferson 1743Primul rând al tabelului atribuie nume pentru fiecare coloana.Fiecare rând al tabelului, altul decât primul rând, descrie o singura personalitate. De

exemplu, al doilea rând descrie o personalităţi pe nume George Washington.Fiecare coloana, descrie un anumit atribut al personalității De exemplu, a doua

coloana conține numele personalităților, iar a treia coloana conține anii în care s-au născut aceștia.

Pentru a se putea face referire, mai ușor, la un anumit rând al tabelului, se obișnuiește ca fiecare tabel să conţină o coloana care identifica în mod unic fiecare rând. Aceasta coloana se numește "cheia primara" a tabelului. în exemplul prezentat, coloana numita "PersoanaID" servește drept cheie primara.

Dacănici o coloana nu conține o valoare unica pentru fiecare rând, se pot combina valorile mai multor coloane pentru a crea o "cheie primara compusa".

O baza de date relaţională se numește astfel datorita capacităţii sale de a stabili relații între date din mai multe tabele.

Următorul exemplu prezintă doua tabele şi o relație între acestea.PersoanaID Nume AnNastere

001 George Washington 1732

002 John Adams 1735

003 Thomas Jefferson 1743

Meserie PersoanaID

Arhitect 003

General 001

Filozof 002Al doilea tabel conține informații despre meseriile caracteristice ale persoanelor

prezentate în exemplul anterior. Mai precis, tabelul identifica persoana cu o anumita meserie. Numele meseriei servește drept cheie primara a tabelului, care mai conține, în afara de aceasta, o singura coloana.

Coloana respectiva stochează atributul "PersoanaID" din primul tabel, al persoanei care cunoaște meseria descrisa de un anumit rând. De exemplu, angajatul cu numărul 003 este arhitect.

Reţineţi ca "PersoanaID" este atât cheia primara a tabelului original, dar şi o coloana din noul tabel. Coloana "PersoanaID" a noului tabel se numește "cheie externa"; deși nu este cheia primara a noului tabel, este cheia primara a unui alt tabel.

Aplicația software care găzduiește o baza de date se numește "sistem de gestiune a bazelor de date" (SGBD). Exista multe sisteme de gestiune a bazelor de date, printre cele mai populare asemenea sisteme se număra: DB2 , Interbase , MySQL , Oracle , Postgresql , SQL Server , Sybase.

MySQL este cel mai popular sistem de gestiune a bazelor de date destinat utilizării cu PHP, în mare măsură deoarece este gratuit. Totuși, prin intermediul PHP este posibil accesul la aproape orice SGBD modern.

Bazele de date relaționale înțeleg SQL (Structured Query Language), un limbaj relativ simplu, folosit pentru solicitarea datelor. în ciuda simplității sale, SQL este un limbaj foarte puternic, care poate obține accesul la date stocate în mai multe tabele, poate filtra datele dorite şi poate sorta, rezuma şi afișa rezultatele.

În general, bazele de date relaționale își stochează datele într-un singur fișier sau catalog. Aceasta caracteristica de organizare facilitează administrarea datelor, deoarece executarea copiei de siguranţă, respectiv restaurarea unui singur fișier sau catalog se realizează mai ușor.

Sistemele de gestiune a bazelor de date relaționale necesita mai multe cicluri de procesor pentru a satisface o cerere de date decât cele necesare pentru accesul la un fișier normal, dar oferă protecție sporita a datelor, iar pentru accesul la distanta ușurează traficul deoarece majoritatea operațiilor sunt efectuate de programul SQL, astfel singurele date transmise în rețea ar fi rezultatul cerut.

13.2. Proiectarea unei baze de dateCând creați un tabel într-o baza de date, este important să ţineţi cont de "cheia

primara" şi să va bazați pe aceasta. Coloanele dintr-un tabel trebuie să se bazeze pe cheia primara în totalitatea sa.

O alta operație importanta este specificarea unui tip de date pentru fiecare coloana. Majoritatea bazelor de date relaționale accepta următoarele tipuri de date generale:

Caracter

272

Page 273: curs DPW.docx

Întreg Zecimal Data şi ora Binar

Tabelul următor rezuma tipurile de date cele mai frecvent utilizate, acceptate de MySQL şi de majoritatea bazelor de date relaționale. MySQL accepta multe alte tipuri de date, dar acestea sunt cele mai folosite.

Principalele tipuri de date din MySQL

Tip de date Descriere

BLOB - Date binare arbitrare, cu o lungime maxima de 65535 octeți

CHAR(m)- Un sir de caractere de lungime fixa, cu un maxim de m caractere, unde m este mai mic decât 256. Pentru obținerea lungimii dorite, se inserează spatii finale

DATE - O data în format an-luna-zi; de exemplu 2008-10-15

DECIMAL DECIMAL(m,d)

- Un număr zecimal, reprezentat sub forma de sir cu "m" cifre, din care "d" se afla la dreapta punctului zecimal. Dacă"m" şi "d" sunt omise, în mod prestabilit se vor utiliza valorile 10 şi 0

DOUBLE DOUBLE (m, d)

- Un număr cu virgula mobila, cu dubla precizie, având o lăţime de afișare egala cu "m" şi un număr de "d" cifre după virgula.

FLOAT(m,d) - Un număr cu virgula mobila, cu simpla precizie, având o lăţime de afișare egala cu "m" şi un număr de "d" cifre după virgula

INTEGER INTEGER UNSIGNED

- Un întreg pe 32 de biți. Dacăse specifica atributul UNSIGNED, domeniul de valori este cuprins între 0 şi 4294967295; în caz contrar, domeniul este cuprins între valorile -2147483648 şi 2147483647

NUMERIC NUMERIC (m, d)

- Similar cu DECIMAL

REALREAL(m, d)

- Similar cu DOUBLE

SMALLINT SMALLINT UNSIGNED

- Un întreg pe 16 biți. Dacăse specifica atributul UNSIGNED, domeniul de valori este cuprins între 0 şi 65535; în caz contrar, domeniul este cuprins între valorile –32768 şi 32767

TIME TIMESTAMP TIMESTAMP(m)

- Ora în format ora-minut-secunda; de exemplu, 08-20-00. O valoare de tip data şi ora, în format an-luna-zi ora-minut-secunda; de exemplu, 1976-01-05 00:00:00. Aceasta reprezentare este similara celei returnate de funcțiile UNIX. Pt. stocare valoarea este transformata din timpul curent în UTC şi transformata invers la solicitarea datei.

VARCHAR(m)

- Un sir caracter de lungime variabila, cu un maximum de "m" caractere, unde m este mai mic decât 256 pentru versiuni MySQL anterioare 5.0.3, iar pt. cele mai noi limita este 65 535 bytes. Spatiile finale au fost eliminate

Iată câteva indicații pentru selectarea tipurilor de date: Alegeți BLOB ca tip pentru datele pe care nu trebuie să le manipulați şi la care nu

veți obține acces prin intermediul limbajului SQL. Alegeți un tip data sau ora adecvat pentru coloanele care conțin date

calendaristice sau ore. Alegeți un tip numeric pentru coloanele folosite pentru numere sau în calcule. Pentru cantităţi foarte mari sau foarte mici, alegeți DOUBLE ca tip de date. Pentru coloane care conțin numere fără parte zecimala de dimensiuni medii,

alegeți SMALLINT sau INTEGER ca tip de date. Pentru alte coloane care conțin date numerice, alegeți DECIMAL ca tip de date. Alegeți CHAR sau VARCHAR ca tip pentru celelalte coloane, chiar şi pentru cele

care conțin cifre, cum ar fi un cod poștal.13.3. Crearea unei baze de date MySQL şi a unui tabel

273

Page 274: curs DPW.docx

La început, o baza de date nu conține tabele. Pentru a crea o baza de date şi apoi un tabel într-o baza de date, folosiți un sub-limbaj SQL special, cunoscut sub numele de Data Definition Language (DDL).

Puteți emite comenzi DDL şi alte comenzi SQL prin intermediul unui interpretor SQL sau prin intermediul PHP. Pentru început va fi prezentat modul de emitere a comenzilor SQL folosind un interpretor SQL.

După ce aveți instalat MySQL, deschideți interpretorul "MySQL Command Line Client" (asemănător cu, "Command Promt") în care scrieți comenzile SQL (În general, SQL nu este sensibil la diferența între majuscule şi minuscule. Deci, puteți scrie comenzile cum preferați, cu majuscule sau minuscule).

Ca regula, după scrierea comenzilor, la sfârșit trebuie să fie caracterul "punct şi virgula" (;)Pentru a crea o baza de date, folosiți următoarea comanda:

CREATE DATABASE nume_db;Unde "nume_db" este numele bazei de date care va fi creata.

Înainte de a crea un tabel sau a lucra cu alte comenzi într-o baza de date, trebuie să intrați în baza de date existenta, acest lucru se face folosind comanda:

USE nume_db;Unde "nume_db" este numele bazei de date. Cu aceeași comanda "USE nume_db" se schimba şi baza de date în care vrem să lucram.

Pentru a crea un tabel într-o baza de date, emiteți comanda "CREATE TABLE", care are următoarea forma:

CREATE TABLE tabel (coloana tip, coloana tip, …);Unde "tabel" este numele tabelului, "coloana" este numele unei coloane, "tip" este tipul datelor incluse în coloana, se poate specifica un număr nedefinit de coloane.

De exemplu, comanda următoare creează un tabel numit "carte", care conține coloanele "carteid", "titlu" şi "pret":CREATE TABLE carte (carteid CHAR(10), titlu VARCHAR(255), pret decimal(5,2));

În afara tipului de date, intre paranteze, puteți specifica şi alte atribute opționale ale unei coloane:

NOT NULL - Fiecare rând trebuie să conţină o valoare a coloanei asociate; valorile nule nu sunt permise.

DEFAULT valoare - Dacănu este data o valoare a coloanei asociate, se va presupune valoarea specificata.

AUTO INCREMENT - MySQL va repartiza în mod automat un număr de serie ca valoare a coloanei asociate.

PRIMARY KEY - Coloana asociata este cheia primara a tabelului care o conține.Iată un exemplu ceva mai complicat de creare a unui tabel, care folosește unele din

aceste atribute opționale:CREATE TABLE carte (carteid CHAR(10) PRIMARY KEY,titlu VARCHAR(255) NOT NULL,pret DECIMAL(5,2) DEFAULT 50.00);

13.4. Ștergerea şi modificarea unui tabelȘtergerea unui tabel sau a unei coloane este un act irevocabil, datele fiind definitiv

șterse.Pentru a șterge un tabel, scrieți următoarea comanda:

DROP TABLE tabel;Unde "tabel" este numele tabelului care va fi șters.

După crearea unui tabel, îl puteți modifica prin emiterea unei comenzi "ALTER TABLE", care are mai multe forme.

Următoarea forma a comenzii va permite să ștergeți o coloana din tabel:ALTER TABLE tabel DROP coloana;

Unde "tabel" este numele tabelului care va fi modificat, iar "coloana" este numele coloanei care va fi ştearsă.

O alta forma a comenzii va permite să adăugați o noua coloana în tabel:ALTER TABLE tabel ADD coloana tip [opțiuni];

Unde "tabel" este numele tabelului care va fi modificat, "coloana" este numele coloanei care va fi adăugată, "tip" este tipul noii coloane, iar "[opțiuni]" constituie toate opțiunile dorite, precum PRIMARY KEY.

De exemplu, pentru a adăuga coloana "pretnou" la tabelul "carte", scrieți comanda:ALTER TABLE carte ADD pretnou DECIMAL(5,2) DEFAULT 50.00;

Pentru a vedea toate bazele de date create în MySQL, folosiți următoarea comanda:

274

Page 275: curs DPW.docx

SHOW DATABASES;Pentru a vedea toate tabelele dintr-o baza de date din MySQL, folosiți următoarea

comanda:SHOW TABLES;

Pentru a vedea toate coloanele dintr-un tabel, şi atributele acestora, folosiți următoarea comanda:

SHOW COLUMNS FROM tabel;13.5. Acordarea şi revocarea privilegiilor de accesCând un utilizator încearcă să obţină acces la o baza de date relaţională, aplicația

care gazduieşte baza de date (in cazul nostru MySQL) verifica dacăutilizatorul are permisiunea de a executa operația. Administratorul de sistem poate folosi comanda MySQL "GRANT" pentru a autoriza un utilizator să obţină accesul la un tabel din baza de date. Comanda are următoarea forma:

GRANT ALL ON tabel TO utilizator IDENTIFIED BY ’parola’;Unde "tabel" este numele tabelului, "utilizator" este numele contului de utilizator, iar "parola" este parola pe care o va furniza utilizatorul pentru a-si proba identitatea.

Alternativ, administratorul de sistem poate autoriza un utilizator să obţină acces la orice tabel dintr-o baza de date specificata, folosind următoarea forma a comenzii "GRANT":

GRANT ALL ON baza_de_date.* TO utilizator IDENTIFIED BY ’parola’;De exemplu, comanda următoare autorizează pe utilizatorul "Ana" să obţină acces la

toate tabelele din baza de date numita "testdb", ori de câte ori utilizatorul furnizează parola "mypassword":

GRANT ALL ON testdb.* TO Ana IDENTIFIED BY ’mypassword’;Comanda "REVOKE" se poate folosi pentru retragerea privilegiilor acordate anterior,

interzicerea accesului.Comanda are următoarele forme:

REVOKE ALL ON tabel FROM utilizator;REVOKE ALL ON baza_de_date.* FROM utilizator;

De exemplu, pentru a revoca toate privilegiile (din toate bazele de date) utilizatorului "tip_rau", scrieți comanda:REVOKE ALL ON *.* FROM tip_rau;

Comanda "GRANT" are şi o forma mai complexa pentru a autoriza accesul numai la anumite coloane specificate. Forma avansata a acestei comenzi este:GRANT privilegiu (coloane) ON tabel TO utilizator IDENTIFIED BY 'parola’; sauGRANT privilegiu (coloane) ON baza_de_date.* TO utilizator IDENTIFIED BY 'parola’;Unde "privilegiu" este privilegiul care urmează a fi extins, "coloane" sunt coloanele cărora li se aplica privilegiul, iar "tabel", "baza_de_date", "utilizator" şi "parola" au semnificațiile cunoscute.Sunt permise şi forme similare ale comenzii REVOKE:REVOKE privilegiu (coloane) ON tabel FROM utilizator; sauREVOKE privilegiu (coloane) ON baza_de_date.* FROM utilizator;

Între privilegiile posibile se număra următoarele: INSERT - care permite adăugarea de date în coloana specificata SELECT - care permite accesul de citire la rândurile care conțin coloana specificata UPDATE - care permite actualizarea rândurilor care conțin coloana specificata

De exemplu, pentru a permite unui utilizator să obţină accesul la o coloana, fără a o modifica, puteți folosi o secvenţă de comenzi similara cu următoarea:REVOKE ALL ON carte FROM Ana;GRANT SELECT(carteid, titlu, pret), INSERT(carteid, titlu, pret), UPDATE(carteid, titlu, pret) ON carte TO php IDENTIFIED BY 'mypassword'; REVOKE INSERT(pret) ON carte FROM Ana; REVOKE UPDATE(pret) ON carte FROM Ana;

Prima comanda revoca toate privilegiile de la nivelul tabelului; în caz contrar, aceste privilegii le vor elimina pe cele situate la nivel de coloana.

Pentru a vedea privilegiile acordate unui anumit utilizator, folosiți următoarea comanda:

SHOW GRANTS FOR nume_utilizator;

275

Page 276: curs DPW.docx

Caracteristica privilegiilor furnizata de MySQL este mai sofisticata şi furnizează mult mai multe opțiuni.

13.6. Accesul la datele dintr-o baza de date, interogările SQLÎn afara de Data Definition Language, SQL include Data Manipulation Language

(DML). DML va permite să formați interogări, care obțin accesul la datele aflate într-o baza de date relaţională şi raportează aceste date. De asemenea, puteți folosi DML pentru a insera, actualiza şi șterge rândurile dintr-un tabel.

Cea mai elementara forma de interogare este comanda "SELECT" simpla.Cea mai simpla interogare raportează toate coloanele din toate rândurile unui tabel.

Interogarea are următoarea forma:SELECT * FROM tabel;

unde "tabel" este numele tabelului la care se va obține accesul.Aceasta comanda va afișa un tabel cu fiecare rând pe o linie separata. Datele de

ieșire includ numele coloanelor şi linii care separa coloanele.Dacădoriți să selectați numai anumite coloane sau să raportați coloanele într-o

anumita ordine, puteți folosi următoarea forma a comenzii "SELECT":SELECT coloana1, coloana2 FROM tabel;

unde "tabel" este numele tabelului, iar "coloana1" şi "coloana2" sunt coloanele la care se va obține accesul şi al căror conținut va fi afișat.

Puteți specifica mai multe coloane, separate prin virgula.Dacăvreți să fie selectate numai acele rânduri care satisfac un anumit criteriu, clauza

"WHERE" va permite să specificați o condiție; rândurile care nu satisfac condiția nu sunt raportate.

De exemplu, iată o interogare care raportează un singur rând:SELECT titlu, pret FROM carte WHERE carteid=1;

Forma condițiilor folosite în sub-limbajul DML al limbajului SQL este similara cu aceea a condițiilor PHP. Puteți folosi oricare din următorii operatori relaționali:= Egalitate<> Inegalitate!= Inegalitate, diferit de< Mai mic decât> Mai mare decât<= Mai mic sau egal cu=> Mai mare sau egal cu

Puteți compara valoarea unei coloane cu aceea a altei coloane, respectiv valoarea unei coloane cu o valoare string. Valorile string SQL (șirurile) trebuie să fie incluse între ghilimele simple, nu între ghilimelele duble.

Când unei coloane nu i-a fost repartizata nici o valoare, SQL îi atribuie valoarea speciala NULL. De asemenea, programatorii pot atribui în mod explicit valoarea NULL unei coloane. Comparațiile obișnuite cu valori NULL, care folosesc operatorii de (in)egalitate, vor returna un rezultat fals. Totuși, puteți folosi operatorul special "<=>". care compara valorile ținând cont de valoarea NULL. Dacăfolosiți acest operator pentru a compara doua valori NULL, se obține un rezultat adevărat.SQL include şi numeroși operatori de comparație non-algebrici:

Operator Descriere

x BETWEEN y AND z Adevărat, dacăvaloarea lui x este cuprinsa între valorile lui y şi z

x LIKE y Adevărat dacăvaloarea lui x este echivalenta cu modelul y

x NOT LIKE y Adevărat dacăvaloarea lui x nu este echivalenta cu modelul y

x în (y1, y2) Adevărat dacăvaloarea lui x este un membru al listei y1, y2. Lista poate conține unul, doi sau mai mulți membri

x NOT în (y1, y2) Adevărat dacăvaloarea lui x nu este un membru al listei y1, y2. Lista poate conține unul, doi sau mai mulți membri

x IS NULL Adevărat dacăx are valoarea NULL

x IS NOT NULL Adevărat dacăx nu are valoarea NULLSub-limbajul folosit pentru specificarea modelelor asociate operatorului "LIKE" este

diferit de cel folosit de PHP. Meta-caracterul "%" corespunde unui număr de zero sau mai multe caractere, iar meta-caracterul "_" corespunde unui singur caracter.

276

Page 277: curs DPW.docx

Modelele, precum șirurile, sunt incluse între ghilimele simple.De exemplu, modelul '%ar%' corespunde oricărui sir care conține subşirul 'ar',

inclusiv șiruri precum 'ar', 'arc' şi 'un zar'.Pentru a plasa un caracter "%" sau "_" într-un sir test, folosiți secvenţă "\%" sau "\_";

ca în PHP.Ca şi PHP, sub-limbajul DML din SQL va permite să formați expresii logice care

combina expresiile relaționale. Puteți folosi oricare din următorii operatori logici: AND , && - SI, adevărat dacăambii operanzi sunt adevărați OR , || - SAU, adevărat dacăun operand este adevărat NOT , ! - NU, adevărat dacăoperandul este fals

De exemplu, următoarea interogare raportează rândurile care au prețul de carte mai mare decât 11 sau al căror titlu include subşirul 'Curs':SELECT titlu, pret FROM carte WHERE pret>11 OR titlu LIKE ’%Curs%’;

Pentru a compara o valoare cu o expresie regulata în MySQL, folosiți următoarea forma:x REGEXP y, unde "x" este valoarea care va fi testata, iar "y" este o expresie regulata, delimitata prin ghilimele simple.

13.7. Modificarea datelor dintr-o baza de dateSub-limbajul SQL, Data Manipulation Language, include comenzi care va permit să

inserați rânduri noi într-un tabel, să actualizați una sau mai multe coloane ale rândurilor existente, respectiv să ștergeri rânduri dintr-un tabel.

Pentru a insera un nou rând într-un tabel, folosiți comanda "INSERT", care are următoarea forma:

INSERT INTO tabel VALUES (valoare1, valoare2);unde "tabel" este numele tabelului la care se va adăuga rândul, "valoare1" este valoarea pentru prima coloana din tabel, iar "valoare2" este valoarea celei de-a doua coloane din tabel. Se pot da mai mult sau mai puțin de doua valori; numărul valorilor date ar trebui să fie egal cu acela al coloanelor din tabel.

O coloana poate primi şi valoarea "NULL", cu excepția situațiilor când definiția coloanei nu permite.

O forma mai buna (si recomandata) a comenzii INSERT specifica numele coloanelor cărora le sunt atribuite valorile:

INSERT INTO tabel (coloana1, coloana2) VALUES (valoare1, valoare2);unde coloana denumita "coloana1" primește valoarea "valoare1", iar coloana denumita "coloana2" primește valoarea "valoare2".

Pot fi specificate mai mult sau mai puțin de doua coloane şi valori. Numărul coloanelor specificate trebuie să fie egal cu numărul valorilor specificate.

Coloanele care nu sunt denumite în comanda "INSERT" şi care nu au o valoare prestabilita (DEFAULT) primesc valoarea NULL, cu excepția situațiilor când valoarea respectiva nu este permisa (în acest caz, comanda INSERT eșuează).

Dacădoriți să adăugați mai multe rânduri într-un tabel, într-o singura inserare, puteți folosi următoarea forma a comenzii INSERT:INSERT INTO tabel (coloana1, coloana2) VALUES (valoare1, valoare2),

(valoare3, valoare4), (valoare5, valoare6);Pentru a modifica valoarea unui rând sau mai multor rânduri existente într-un tabel,

folosiți o comanda "UPDATE", care are următoarea forma:UPDATE tabel SET coloana1=valoare1, coloana2=valoare2WHERE condiție;unde "tabel" este numele tabelului ale cărui rânduri urmează să fie modificate, "coloana1" este numele primei coloane care urmează a fi modificata, "valoare1" este valoarea care va fi repartizata în "coloana1", "coloana2" este numele celei de-a doua coloane care urmează a fi modificata, "valoare2" este valoarea care va fi repartizata în "coloana2", iar "condiție" identifica rândul sau rândurile care urmează a fi actualizate, după o anumita condiție.

Poate fi actualizat un număr mai mare sau mai mic de coloane. Dacăse dorește ca toate rândurile coloanei să fie actualizate, clauza "WHERE" poate fi omisa.

De exemplu, comanda următoare modifica din coloana "titlu" numele asociat cărţii în "Curs2", în rândul unde coloana "pret" are valoarea 5.UPDATE carte SET titlu=’Curs2’

277

Page 278: curs DPW.docx

WHERE pret=5;Pentru a șterge un rând dintr-un tabel, folosiți comanda "DELETE", care are

următoarea forma:DELETE FROM tabel WHERE condiție;

Dacăse vrea a fi șterse toate rândurile tabelului, clauza WHERE poate fi omisa.De exemplu, comanda următoare șterge rândul din tabelul "carte" asociat titlului

"Curs2":DELETE FROM carte WHERE titlu='Curs2';

13.8. Sortarea şi grupareaDeseori, este important ca datele să fie raportate într-o anumita secvenţă. Puteți

specifica ordinea de raportare a rezultatelor interogării folosind clauza "ORDER BY", care are următoarea forma:

ORDER BY valoareDacăse vor folosi mai multe câmpuri de sortare, acestea vor fi separate prin virgula.Dacădoriți să indicați o sortare descendenta, în locul uneia ascendente, specificați

"DESC" după valoare.De exemplu, pentru a ordona toate carţile în funcție de pret, de la cel mai mare la cel

mai mic, respectiv după titlu pentru un pret egal, puteți folosi următoarea interogare:SELECT pret, titlu FROM carte ORDER BY pret DESC, titlu;

Pentru a include numai titlurile care au un pret mai mare de 50, adăugați o clauza WHERE la comanda SELECT:SELECT pret, titlu FROM carte WHERE pret>50 ORDER BY pret DESC, titlu;

SQL include funcții care va permit să raportați valori diferite, valori utile, precum un număr al rândurilor tabelului. Iată cele mai importante funcții în acest sens:

Funcție Descriere

count(*) - Numărul rândurilor din tabel

count(coloana) - Numărul rândurilor din tabel care conțin o valoare diferita de NULL în coloana specificata

count(distinct coloana)

- Numărul valorilor distincte diferite de NULL care apar în coloana specificata

avg(coloana) - Valoarea mijlocie (medie) a coloanei numerice specificate

min(coloana) - Valoarea minima din coloana specificata

max(coloana) - Valoarea maxima din coloana specificata

sum(coloana) - Suma valorilor din coloana specificataDe exemplu, interogarea următoare raportează numărul cărţilor şi prețul mediu al

acestora:SELECT count(*), avg(pret) FROM carte;

Datele de ieșire vor fi afișate pe o singura linie.Clauza SQL "AS" specifica un nume nou pentru o coloana sau expresie. Numele

specificat este folosit ca titlu în rapoartele SQL. Clauza "AS" este utila în lucrul cu funcțiile din tabelul anterior, va ajuta să identificați mai ușor datele de ieșire.

De exemplu, interogarea precedenta poate fi rescrisa pentru a include o clauza "AS", astfel:SELECT count(*) AS Carte_Număr, avg(pret) AS Pret_Mediu FROM carte;

O alta clauza utila este "GROUP BY", aceasta are următoarea forma:GROUP BY coloana-sortare

unde "coloana-sortare" este numele sau valoarea unei coloane, specificata într-o clauza "ORDER BY", care trebuie să urmeze după clauza "GROUP BY".

De exemplu, avem un tabel "carte" cu 4 coloane (carteid, titlu, anul şi pret), interogarea următoare raportează numărul cărţilor şi prețul mediu pentru fiecare an (anul) în parte:SELECT count(*), avg(pret) FROM carte GROUP BY anul

278

Page 279: curs DPW.docx

ORDER BY anul;Pentru a include în datele de ieșire numai grupurile selectate, specificați clauza

"HAVING" imediat după clauza "GROUP BY". Clauza "HAVING" are următoarea forma:HAVING condiție

De exemplu, pentru a include numai cărţile al căror atribut "anul" are valoare mai mare decât 1980, scrieţi următoarea interogare:SELECT count(*), avg(pret) FROM carte GROUP BY anul HAVING anul>1980 ORDER BY anul;

Mai jos sunt afișați operatorii matematici folosiți în SQL:+ Adunare - Scădere * Înmulțire / Împărţire | SAU, la nivel de bit & şi la nivel de bit >> Deplasare la dreapta << Deplasare la stânga _ Complement la nivel de bit

13.9. Expresii şi funcțiiSQL va permite să formați expresii folosind valori din coloane, valori literale şi funcții.

Ca şi în PHP, puteți controla ordinea de evaluare a expresiilor SQL folosind paranteze pentru a delimita sub-expresiile care trebuie evaluate mai întâi.

Tabelele următoare rezuma funcțiile MySQL frecvent folositeFuncții matematice frecvent folosite în MySQL

Funcție Descriere

abs(x) - Valoarea absoluta a lui x

atan(x) - Arc tangenta lui x, unde x este dat în radiani

atan2(y,x) - Arc tangenta lui y/x, unde semnele ambelor argumente sunt folosite pentru a determina cadranul cercului trigonometric

ceiling(x) - Cel mai mic întreg care nu este mai mic decât x

cos(x) - Cosinusul lui x, unde x este exprimat în radiani

exp(x) - Baza logaritmilor naturali (e) ridicata la puterea x

floor(x) - Cel mai mare întreg care nu este mai mare decât x

log (x) - Logaritmul natural al lui x

mod(x,y) - Restul împărțirii x/y

power(x,y) - x la puterea y

rând(x) - Valoare aleatoare cu virgula, mai mare sau egala cu zero şi mai mica decât unu

sign(x) - Valoarea -1, 0 sau 1, după cum valoarea lui x este negativa, zero sau pozitiva

sin(x) - Sinusul lui x, unde x este dat în radiani

sqrt(x) - Rădăcina pătrată a lui x

tan(x) - Tangenta lui x, unde x este dat în radiani

Funcții sir frecvent folosite în MySQL

Funcție Descriere

ascii(s) - Codul ASCII al octetului celui mai din stânga al șirului s

char(n) - Caracter al cărui cod ASCII este n

concat(s1, s2) - Concatenarea șirurilor s1 şi s2; cu alte cuvinte, s2 atașat la s1

lcase(s) - Șirul s, unde toate majusculele au fost transformate în minuscule

left(s,n) - Primii n octeți ai șirului s, de la stânga la dreapta279

Page 280: curs DPW.docx

length(s) - Numărul octeților din șirul s

locate(s1, s2) - Poziția primei apariții a lui s1 în s2, respectiv zero dacăs1 nu se găsește în s2

ltrim(s) - Șirul s, cu eliminarea spatiilor de început

right(s,n) - Primii n octeți din șirul s, de la dreapta la stânga

rpad(s1,n,s2) - Șirul s1, completat la dreapta cu șirul s2 până când rezultatul are lungimea n

rtrim(s) - Șirul s, cu spatiile finale eliminate

space(n) - Un sir alcătuit din n spatii

substring(s,m,n)

- Sub-sir al lui s, care începe de la poziția m şi care are lungimea n

trim(s) - Sub-sir al lui s, cu spatiile inițiale şi finale eliminate

ucase(s) - Șirul s, cu toate minusculele convertite în majuscule

Funcții MySQL de data şi ora frecvent utilizate

Funcție Descriere

dayofmonth(d)

- Ziua din luna a datei specificate (1-31)

dayofweek(d) - Ziua din săptămâna a datei specificate (1 =duminica, 2=luni,…, 7=sâmbăta)

dayofyear(d) - Ziua din an a datei specificate (1-366)

hour(t) - Partea orelor din momentul de timp menționat (0-23)

minute(t) - Partea minutelor din momentul de timp menționat (0-59)

month(d) - Luna datei specificate (1-12)

now() - Data şi ora curenta

second(t) - Partea secundelor din momentul de timp menționat (0-59)

week(d) - Săptămâna din an a datei specificate (0-53)

year(d) - Partea anilor din momentul de timp menționat (1000-9999)

Funcții specifice MySQL

Funcție Descriere

database() - Returnează numele bazei de date deschise

get_lock(s,n) - Obține o blocare a bazei de date

md5(s) - Returnează o suma de control a șirului s, calculata după algoritmul MD5

password(s) - Returnează șirul s, criptat folosind algoritmul aplicat de MySQL parolei

release_lock(s)

- Anulează blocarea unei baze de date

user() - Returnează numele utilizatorului curent

version() - Returnează numărul versiunii MySQL13.10. JoinsSQL va permite să obțineți accesul la mai multe tabele într-o singura interogare, în

general, aceasta operație se executa pentru ca datele dintr-un tabel să poată fi folosite cu date din alt tabel.

De exemplu, să presupunem ca baza de date este asemănătoare celei prezentate mai jos, unde avem doua tabele, primul numit "persoane" iar cel de-al doilea numit "meserii", şi o relație cheie externa - cheie primara (persoanaid) asociază cele doua tabelele.

persoanaid nume AnNastere

001 George Washington 1732

002 John Adams 1735

meserie persoanaid

Arhitect 003

General 001

280

Page 281: curs DPW.docx

003 Thomas Jefferson 1743 Filozof 002Sa examinam următoarea interogare:

SELECT nume, meserie FROM persoane, meserii WHERE persoane.persoanaid=meserii.persoanaid;

Construcțiile "persoane.persoanaid" şi "meserii.persoanaid" se numesc "nume definite", prima se refera la coloana "persoanaid" din tabelul "persoane", iar a doua se refera la coloana "persoanaid" a tabelului "meserii".

Clauza WHERE asigura o echivalenta între valoarea cheii externe din tabelul "meserii" cu aceea a cheii primare din tabelul "persoane", (în absenta clauzei WHERE, se va stabili o corespondenta între fiecare rând din tabelul cu meserii şi fiecare rând din tabelul cu persoane; un asemenea rezultat, numit "produs cartezian", conține în general multe rânduri - majoritatea nedorite - şi ca atare trebuie evitat).

Rezultatul interogării de mai sus este un raport care indica numele şi meseria asociata fiecărui angajat prezentat în tabelul "meserii".

O interogare ca aceasta, care combina date din mai multe tabele, se numește "unire". Sunt posibile şi uniri mai complexe, care implica trei sau mai multe tabele.

Dacăun rând dat din tabelul principal (aici "persoane") nu are nici un rând asociat în tabelul cu detalii (aici "meserii"), rândul respectiv din tabelul principal nu va apărea în datele de ieșire ale unei uniri. în cazul acesta, pentru a determina apariția acestei înregistrări din tabelul principal, se poate folosi o categorie speciala de unire, cunoscuta sub numele de "unire la stânga" sau "unire exterioara la stânga". Iată un exemplu:SELECT nume, meserie FROM persoane LEFT JOIN meserii ON persoane.persoanaid=meserii.persoanaid;

Aceasta interogare va afișa toate persoanele, indiferent dacăacestea au sau nu asociata o meserie. Persoanele fără o meserie au specificația NULL în coloana corespunzătoare meseriei.

13.11. Executarea instrucțiunilor dintr-un fișier externComenzile MySQL pot fi scrise şi într-un fișier extern (editat de exemplu, în Windows,

cu Notepad), acest fișier se numește "script de shell".Scriptul din fișierul extern poate fi executat din fereastra de comanda MySQL (MySQL

Command Line Client), utilizând comanda:SOURCE nume_fișier

unde "nume_fișier" este calea şi numele fișierului în care se afla scriptul de shell.De exemplu, scriem următoarele comenzi într-un fișier numit "lucru.txt" pe care-l

salvam în directorul "C:/teste".CREATE DATABASE lucrudb;USE lucrudb;GRANT ALL ON lucrudb.* TO php IDENTIFIED BY 'mypass';CREATE TABLE angajat (

angajatnr SMALLINT PRIMARY KEY, nume VARCHAR(50), ore SMALLINT, departament CHAR(16), salariu DECIMAL(8,2), data_angajare DATE);

INSERT INTO angajat ( angajatnr, nume, ore, departament, salariu, data_angajare)

VALUES ( 1, 'George Washinton', 40, 'Contabilitate', 500.00, '2007-10-04'), ( 2,

281

Page 282: curs DPW.docx

'John Adams', 35, 'Marketing', 1000.00, '2007-10-11'), ( 3, 'Thomas Jefferson washinton', 20, 'Vanzari', 1300.00, '2007-07-02');Pentru a executa acest script, scriem în fereastra de comanda MySQL: SOURCE

C:/teste/lucru.txtMySQL va executa comenzile din script ca şi cum acestea ar fi scrise direct în linia de

comanda.Exemplul de mai sus va crea o baza de date noua, numita "lucrudb", va acorda

utilizatorului "php" toate drepturile în utilizarea acestei baze de date, după care va crea tabelul "angajat", cu 6 coloane ("angajatnr", "nume", "ore", "departament", "salariu", "data_angajare") în care vor fi adăugate trei linii 13.12. Conectarea la serverul MySQL

Pentru a utiliza o baza de date MySQL, avem nevoie de o conexiune la serverul de baze de date. Aceasta conexiune va fi utilizata ca punct de access pentru comenzi mysql.

Pentru a va conecta la un server MySQL, utilizați funcția mysql_connect(), a cărei sintaxa este următoarea:

mysql_connect(nume_gazda, nume_utilizator, parola)unde "nume_gazda" este numele gazdei, serverul pe care rulează serviciul MySQL, "nume_utilizator" este numele utilizatorului care se conectează la serverul MySQL, iar "parola" este parola MySQL asociata utilizatorului.

In cazul în care serverul MySQL rulează pe calculatorul dv. personal, parametrul "nume gazda" este în general "localhost". în alte cazuri, dacăserverul MySQL rulează pe un alt computer, va trebui să specificați adresa computerului pe care rulează serverul MySQL.

Funcția returnează FALSE în caz de eșec; în caz contrar, returnează o valoare denumita identificator de legătura, care servește ca instrument de manipulare pentru accesul la serverul MySQL.

Iată un exemplu de utilizare a funcției mysql_connect():<?php$conn = mysql_connect( "localhost", "Ana", "mypass") or die("Unable to connect to MySQL");print "Connected to MySQL <br />";?>

In acest exemplu, serverul MySQL rulează pe "localhost" ca şi modulul PHP, utilizatorul este "Ana" iar parola "mypass".

După execuția acestui script, dacănu se reușește conectarea la MySQL, va apărea mesajul "Unable to connect to MySQL", în caz de reuşită, apare mesajul "Connected to MySQL"

În mod prestabilit, funcția mysql_connect() se conectează la serviciul MySQL prin intermediul portului 3306, portul MySQL standard. Dacădoriți să obțineți accesul la un server MySQL care rulează pe un port non-standard, puteți atașa un caracter doua puncte şi numărul portului dorit la argumentul care conține numele gazdei; de exemplu, "localhost:3308".

13.13. Încheierea conexiunii la serverul MySQLPentru terminarea unei conexiuni la serverul MySQL se folosește instrucțiunea:

mysql_close();. Aceasta funcție închide conexiunea curenta. Funcția returnează TRUE în caz de reuşită; în caz contrar, returnează FALSE.

În general, nu este necesara invocarea funcției mysql_close(), deoarece PHP închide automat conexiunile deschise cu bazele de date atunci când un script își încheie execuția.

Iată un exemplu de conectare la serverul MySQL şi închidere a conexiunii folosind funcția mysql_close():<?php$conn = mysql_connect( "localhost", "Ana", "mypass") or die("Unable to connect to MySQL");

282

Page 283: curs DPW.docx

// Aici adăugați datele necesare lucrului cu serverul MySQLmysql_close();?>

13.14. Detectarea apariției erorilorBiblioteca MySQL din PHP furnizează doua funcții de verificare a erorilor, şi anume

mysql_errno() simysql_error().Fiecare funcție returnează un rezultat care reflecta eroarea, dacăaceasta exista. Nici una din cele doua funcții nu necesita argumente. Funcția mysql_errno()

returnează un cod numeric de eroare, în timp ce funcția mysql_error() returnează un sir care descrie eroarea. Dacănu s-a produs nici o eroare, codul numeric al erorii este zero şi descrierea are ca valoare un sir vid. Informațiile de eroare sunt disponibile numai dacăeste activa o conexiune cu serverul MySQL. Prin urmare, întâi trebuie să se reuşească conectarea la MySQL.

Iată cum puteți folosi funcțiile respective pentru a verifica modul de operare a funcției mysql_select_db()(aceasta selectează baza de date pentru lucru):<?php$conn = mysql_connect( "localhost", "Ana", "mypass") or die("Unable to connect to MySQL");print "Connected to MySQL<br />";mysql_select_db("lucrudb");if (mysql_error()) { echo "<br />". mysql_errno(). " : ". mysql_error();}?>

Dacăse reușește conexiunea la serverul MySQL şi baza de date cu numele "lucrudb" este inexistenta, rezultatul afișat de exemplul de mai sus va fi următorul:Connected to MySQL1049 : Unknown database 'lucrudb'

13.15. Eliminarea mesajelor de eroare şi a avertismentelor nedoriteNumeroase funcții PHP pot produce erori sau mesaje de avertizare care îi pot deruta

pe utilizatorii siturilor Web sau le pot cauza neplăceri.PHP furnizează funcția error_reporting(), care va permite să eliminări mesajele nedorite. Funcția are următoarea forma:

error_reporting(mask)unde "mask" specifica tipul mesajelor care vor fi raportate. Dacăspecificați zero ca valoare a atributului "mask" (error_reporting(0)), nu va fi raportat nici un mesaj. Dacăspecificați "E_ALL" în loc de "mask" (error_reporting(E_ALL)), vor fi raportate toate mesajele.

Sau, o alta metoda pentru oprirea mesajelor de eroare, explicata anterior, este adăugând @înaintea funcției.

13.16. Crearea şi selectarea unei baze de date.O funcție importanta în lucrul cu bazele de date este mysql_query(), care are

următoarea forma: mysql_query("interogare") sau mysql_query("interogare", "id_con")

"interogare" este un sir ce conține comenzile SQL care urmează a fi executate (in PHP, comenzile SQL nu trebuie să se încheie cu un caracter punct şi virgula);"id_con" este identificatorul de conectare returnat de funcția mysql_connect(), dacăacesta este omis se folosește ultima legătura deschisa cu aceasta funcție.

Funcția mysql_query() returnează TRUE dacăserverul a reușit să execute interogarea; în caz contrar, returnează FALSE.

Pentru a crea o noua baza de date folosim comanda SQL "CREATE DATABASE numeBazaDeDate;", pe care o putem lansa de la o consola MySQL, sau o putem apela de la un script PHP prin intermediul funcției mysql_query(). Iată un exemplu prin care creem baza de date "lucrudb":<?php$conn = mysql_connect( "localhost", "Ana", "mypass") or die("Unable to connect to MySQL");$createdb = mysql_query("CREATE DATABASE lucrudb");if ($createdb) echo "Baza de date lucrudb a fost creata <br />";

283

Page 284: curs DPW.docx

else echo "<br />". mysql_errno(). " : ". mysql_error();mysql_close();?>

După executarea acestui script, dacătotul este corect, va fi creata baza de date "lucrudb" şi va fi afișat mesajul "Baza de date lucrudb a fost creata".

După ce programul a obținut o conexiune cu serverul MySQL, înainte de a lucra cu tabelele dintr-o baza de date MySQL, programul trebuie să selecteze baza de date respectiva. Pentru aceasta, folosiți functiamysql_select_db(), care are următoarea forma:mysql_select_db(baza_de_date) unde "baza_de_date" este numele bazei de date la care urmează a se obține acces.

Funcția returnează TRUE dacăpoate obține accesul la baza de date, respectiv FALSE în caz contrar.

Iată un exemplu de selectare a bazei de date "lucrudb":<?php$conn = mysql_connect( "localhost", "Ana", "mypass") or die("Unable to connect to MySQL");$selectdb = mysql_select_db('lucrudb');if ($selectdb) echo "Baza de date lucrudb a fost selectata <br />";else echo "<br />". mysql_errno(). " : ". mysql_error();mysql_close();?>

13.16. Crearea tabelelorDupă conectare şi selectarea bazei de date putem crea tabele în cadrul bazei de date

selectate. Pentru aceasta folosim limbajul SQL CREATE TABLE numeTabel (coloana1, coloana2, ...); împreună cu funcția mysql_query().

In exemplul următor cream tabelul cu numele "carti" care conține următoarele câmpuri:

Nume câmp Tip

id Identificator unic, Not Null, cheie primara

nume Char(30)

autor Char(25)

gen Char(10)

data_intrare Date

pret Decimal(12,2)In stânga, la "Nume Câmp", sunt trecute coloanele tabelului, iar în dreapta tipul

acestora, coloana cu nume "id" fiind cheia primara. De asemenea, folosim indicatorul "AUTO_INCREMENT" pentru a preciza faptul ca

MySQL va repartiza o valoare secvenţială unica în coloana care servește drept cheie primara a tabelului.

Iată şi scriptul PHP pentru crearea tabelului:<?php$conn = mysql_connect("localhost", "Ana", "mypass") or die("Unable to connect to MySQL");$selectdb = mysql_select_db('lucrudb'); if (!$selectdb) echo "Baza de date lucrudb nu a putut fi selectata deoarece : ". mysql_errno(). " : ". mysql_error();$sql = "CREATE TABLE `carti` (id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, nume varchar(30) NOT NULL, autor varchar(25) , gen varchar(10) NOT NULL, data_intrare date, pret decimal(12,2))";if (mysql_query($sql, $conn)) echo "Tabelul carti a fost creat <br />";else echo "Tabelul carti nu a putut fi creat deoarece : ". mysql_errno(). " : ". mysql_error();mysql_close();?>

284

Page 285: curs DPW.docx

In exemplul de mai sus, variabila "$sql" conține comanda SQL pentru crearea acestui tabel.

Instrucțiunea mysql_query($sql, $conn), executa aceasta comanda şi în cazul în care rezultatul este TRUE se trimite la ieșire șirul: "Tabelul carti a fost creat". în cazul în care instrucțiunea SQL nu a putut fi executata, funcția mysql_query($sql) întoarce valoarea FALSE, afișând eroarea din cauza căreia tabelul nu a putut fi creat.

13.17. Adăugarea de date în tabelDupă ce aveți tabelul creat în baza de date MySQL puteți adăuga date în el, pentru

aceasta se folosește funcția mysql_query("interogare") unde "interogare" este următoarea comanda:

INSERT INTO `nume_tabel` (coloana1, coloana2, ...) VALUES ('date1', 'date2', ...)unde `nume_tabel` este numele tabelului în care se adăuga datele- "coloana1, coloana2, ..." sunt numele coloanelor în care se dorește adăugarea datelor- "date1, date2, ..." sunt datele care vor fi adăugate, ținându-se cont de ordinea şi numărul lor cu cea a coloanelor

Iată un exemplu, în care se folosește tabelul "carti" creat mai sus<?php$conn = mysql_connect("localhost", "Ana", "mypass") or die("Unable to connect to MySQL");$selectdb = mysql_select_db('lucrudb');if (!$selectdb) echo "Baza de date lucrudb nu a putut fi selectata deoarece : ". mysql_errno(). " : ". mysql_error();$sql = "INSERT INTO `carti` (nume, autor, gen, data_intrare, pret) VALUES ('Glossa', 'Mihai Eminescu', 'poezie', '19-05-2009', '8')";if (mysql_query($sql, $conn)) echo 'Datele au fost adăugate';else echo "Datele nu au fost adăugate deoarece : ". mysql_errno(). " : ". mysql_error();mysql_close();?>

In acest exemplu, datele "'Glossa', 'Mihai Eminescu', 'poezie', '19-05-2009', '8'" vor fi adăugate în coloanele "nume, autor, gen, data_intrare, pret" în aceeași ordine în care sunt scrise şi datele şi coloanele.

Dacăau fost adăugate cu succes, apare mesajul "Datele au fost adăugate", în caz contrar apare mesajul de eroare.

Dacădoriți să adăugați mai multe linii în tabel, printr-o singura interogare, puteți folosi următorul model<?php// Aici adăugați comenzile pt. conectare şi selectarea bazei de date $sql = "INSERT INTO `nume_tabel` (coloana1, coloana2, coloana3) VALUES

('date1', 'date2', 'date3'), ('valoare1', 'valoare2', 'valoare3'), ('text1', 'text2', 'text3')";

if (mysql_query($sql)) echo 'Datele au fost adăugate';else echo "Datele nu au fost adăugate deoarece : ". mysql_errno(). " : ". mysql_error();mysql_close();?>

Observați sintaxa de scriere corecta a interogărilor MySQL în PHP, numele tabelului se scrie intre caracterele ( ` ` ) şi valorile intre ghilimele simple ( ' ' )

13.18. Verificarea interogărilor care nu returnează rânduri de tabelDin punctul de vedere al limbajului PHP, exista doua categorii de interogări SQL,

ambele fiind emise folosind funcția mysql_query().Interogările SELECT, care returnează rânduri ale unui tabelInterogările UPDATE, INSERT şi DELETE, care nu returnează rânduri ale unui tabelPentru a verifica dacăo interogare UPDATE, INSERT sau DELETE a avut efectul dorit,

puteți folosi functiamysql_affected_rows(), care returnează numărul rândurilor afectate de interogarea cea mai recenta.

285

Page 286: curs DPW.docx

O alta funcție utila este mysql_insert_id().Când introduceți un rând într-un tabel a cărui cheie primara este de tipul

AUTO_INCREMENT, functiamysql_insert_id() determina valoarea cheii primare atribuite de MySQL. Funcția returnează valoarea zero dacăinterogarea precedenta nu a generat o valoare AUTO_INCREMENT. Ca atare, funcția trebuie apelata la puțin timp după interogarea care a inserat rândul în tabel, astfel încât o alta interogare ulterioara să nu modifice rezultatul.

Iată un exemplu de utilizare a funcțiilor mysql_affected_rows() şi mysql_insert_id() împreună cu interogarea INSERT (care adăuga rânduri în tabel). Folosim baza de date "lucrudb" şi tabelul "carti".<?php$conn = mysql_connect("localhost", "Ana", "mypass") or die("Unable to connect to MySQL");$selectdb = mysql_select_db('lucrudb');if (!$selectdb) echo "Baza de date lucrudb nu a putut fi selectata deoarece : ". mysql_errno(). " : ". mysql_error(); $sql = "INSERT INTO `carti` (nume, autor, gen, data_intrare, pret) VALUE ('Carte2', 'Autor2', 'Educativ', '2008-9-16', 11.00)"; if (mysql_query($sql)) echo "Datele au fost adăugate în tabelul carti <br />"; else echo "Datele nu au fost adăugate în tabelul carti deoarece : ". mysql_errno(). " : ". mysql_error(); $nranduri = mysql_affected_rows();$id = mysql_insert_id(); if ($nranduri == -1) { echo "INSERT nu a putut să adauge datele";}else echo "Au fost adăugate $nranduri rânduri, cheia primara = $id" ;mysql_close();?>

După ce s-a făcut conectarea la serverul MySQL şi s-a reușit selectarea bazei de date, variabila "$sql" conține comanda SQL pentru introducerea unui nou rând în tabelul "carti", prin intermediul functieimysql_query($sql) se introduce datele în baza de date, variabila "$nranduri" preia de la functiamysql_affected_rows() numărul de rânduri afectate (aici introduse) iar variabila "$id" va avea (prin "mysql_insert_id()") valoarea cheii primare atribuite de MySQL.

Dacănu apare nici o eroare, rezultatul afișat de acest script este următorul:Datele au fost adăugate în tabelul cartiAu fost adăugate 1 rânduri, cheia primară = 2

Funcția mysql_insert_id() poate returna un rezultat incorect pentru coloanele MySQL de tipul BIGINT [BIGINT este un tip de valoare care suporta numere cu 20 de cifre, folosit pentru câmpurile integer (spre deosebire de MEDIUMINT care suporta numere de la 0 la 16.777.215 (3 bytes) sau INT care suporta numerele de la 0 la 4.294.967.295 (4 bytes)].

După efectuarea unei interogări INSERT, în locul funcției mysql_insert_id() se poate folosi functiaLAST_INSERT_ID(), aceasta returnează valoarea atribuita de MySQL unei coloane AUTO_INCREMENT, indiferent de tipul coloanei. Mai mult, apelurile ulterioare în script la funcții MySQL nu afectează rezultatul returnat de LAST_INSERT_ID(), care este afectat numai de operațiile INSERT în care sunt implicate coloane AUTO_INCREMENT.

Totuși, spre deosebire de "mysql_insert_id()", LAST_INSERT_ID() necesita o interogare suplimentara la MySQL.

Iată un exemplu care prezintă modul de obținere a valorii LAST INSERT ID():<?php $sql = "INSERT INTO `carti` (nume, autor, gen, data_intrare, pret) VALUE ('Carte3', 'Autor3', 'Gen3', '2008-9-16', 8.30)";$insert = mysql_query($sql);if (!$insert) { echo "<br /> Comanda INSERT a eșuat: ". mysql_errno(). " : ". mysql_error(). "<br />";}

286

Page 287: curs DPW.docx

$interogare = "SELECT LAST_INSERT_ID() FROM `carti`";$rezultat = mysql_query($interogare);if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />";}$rand = mysql_fetch_row($rezultat);echo "<br /> Ultimul ID repartizat: $rand[0]";mysql_close();?>

După executarea acestui script, dacănu apare vreo eroare, rezultatul afișat va fi de genul:Ultimul ID repartizat: 3

Funcția last_insert_id() returnează rezultatul corect numai după ce a fost efectuata o comanda INSERT.

Funcția mysql_affected_rows() număra numai rândurile efectiv modificate de către o interogare UPDATE. Rândurile în cazul cărora vechea şi noua valoare din coloana sunt identice nu se număra printre rândurile afectate.

De asemenea, o interogare DELETE care nu conține o clauza WHERE va determina functiamysql_affected_rows() să returneze valoarea zero, indiferent de numărul rândurilor șterse din tabel.

O modalitate simpla de a determina dacăștergerea tuturor rândurilor unui tabel a reușit consta în a emite o interogare care returnează numărul rândurilor existente în tabel. De exemplu:<?php$sql = "SELECT COUNT(*) FROM `carti`";$result = mysql_query($sql);$nr = mysql_fetch_row($result); echo $nr[0];?>

Dacăinterogarea returnează valoarea zero, demonstrează ștergerea tuturor rândurilor din tabel.

13.19. Prelucrarea rezultatelor interogărilor SELECTInterogările SELECT returnează ca rezultate rânduri de tabel.Rândurile unui tabel sunt incluse într-o structura de date numita "set de rezultate".

Prelucrarea setului de rezultate returnat de o interogare SELECT implica parcurgerea rândurilor setului de rezultate.

O modalitate de parcurgere a rândurilor unui set de rezultate este prin utilizarea unei instrucțiuni "WHILE".

1. Întâi se verifica dacănumărul de rânduri returnat este 0 folosind funcția mysql_num_rows(), transferându-i ca argument valoarea returnata de funcția mysql_query()

2. Dacănumărul de rânduri este 0 înseamnă ca interogarea SELECT nu a returnat nici un rând din tabel,

3. Dacănumărul de rânduri este diferit de 0, se executa o instrucțiune WHILE împreună cu una din funcțiile:

mysql_fetch_assoc() (sau mysql_fetch_array() cu parametru "MYSQL_ASSOC") sunt similare, adăuga datele într-o matrice asociativa unde pentru fiecare element avem chei cu numele coloanelor iar valorile lor sunt datele din rândul respectiv.

mysql_fetch_row() adăuga datele într-o matrice asociativa unde pentru fiecare element avem chei cu numere consecutive (începând de la 0) care reprezintă ordinea coloanelor iar valorile lor sunt datele din rândul respectiv

mysql_fetch_object()aduce rezultatele rândului sub forma de obiect cu perechile $rand->coloana

4. Pentru a prelucra coloanele stocate în matrice, depinde de funcția folosita. - pentru mysql_fetch_assoc() (sau mysql_fetch_array()) puteți folosi o sintaxa de

genul$rand['coloana'] - pentru mysql_fetch_row() puteți folosi o instrucțiune "foreach", prin care parcurgeți

datele din fiecare element a matricei - pentru mysql_fetch_object() puteți folosi o sintaxa de genul $rand->'coloana'Aceste funcții returnează FALSE dacănu mai exista rânduri în setul de rezultate

287

Page 288: curs DPW.docx

Ca să înţelegeţi mai bine, vom arata cate un exemplu cu fiecare în parte (folosind acelaşi tabel, "carti")..

Nu s-au mai introdus în aceste exemple instrucțiunile pentru conectarea la serverul MySQL şi pentru selectarea bazei de date, le adăugați dumneavoastră.

De exemplu, dacădoriți să aflați toate datele din anumite coloane puteți folosi funcția mysql_fetch_assoc() astfel:<?php$interogare = "SELECT `nume`, `autor` FROM `carti`";$rezultat = mysql_query($interogare);if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />";}if (mysql_num_rows($rezultat) == 0) { echo '0 rezultate';}else { while ($rand = mysql_fetch_assoc($rezultat)) {

echo '<br />'. $rand['nume']. ' - '. $rand['autor']; }}?>

Variabila "$rand" devine o matrice ale cărei chei sunt numele coloanelor iar valorile lor sunt datele coloanelor respective din rândul curent; instrucțiunea WHILE parcurge fiecare rând.

Iată acest exemplu, dar cu funcția mysql_fetch_array(). în plus, în interogare SQL vom adăuga numele coloanelor prin variabile, ca să vedeți cum se lucrează şi cu variabile.<?php// Variabilele cu numele coloanelor$col1 = 'nume';$col2 = 'autor';// Interogarea SQL folosind şi variabile$interogare = "SELECT `$col1`, `$col2` FROM `carti`";$rezultat = mysql_query($interogare);if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />";} if (mysql_num_rows($rezultat) == 0) { echo '0 rezultate';}else { while ($rand = mysql_fetch_array($rezultat, MYSQL_ASSOC)) {

echo '<br />'. $rand['nume']. ' - '. $rand['autor']; }}?>

Cel de-al doilea argument al funcției mysql_fetch_array() este opțional. Totuși, dacănu specificaţi MYSQL_ASSOC ca valoare a argumentului, PHP returnează un tablou în care valoarea cheilor vor fi numerele şi numele coloanelor.

Conform datelor adăugate în tabelul "carti", aceste doua exemple vor afișa următorul rezultatGlossa - Mihai EminescuCarte2 - Autor2Carte3 - Autor3

Dacădoriți să afișați toate datele din fiecare coloana de pe fiecare rând al tabelului, puteți folosi funcția mysql_fetch_row() astfel:<?php$interogare = "SELECT * FROM `carti`";$rezultat = mysql_query($interogare);if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />";}

288

Page 289: curs DPW.docx

if (mysql_num_rows($rezultat) == 0) { echo '0 rezultate';}else { while ($rand = mysql_fetch_row($rezultat)) {

foreach ($rand as $coloana) { echo "| $coloana |"; } echo "<br />";

}}?>

Exemplul de mai sus v-a afișa următorul rezultat, în funcție de datele din tabel:| 1 || Glossa || Mihai Eminescu || poezie || 0000-00-00 || 8.00 || 2 || Carte2 || Autor2 || Educativ || 2008-09-16 || 11.00 || 3 || Carte3 || Autor3 || Gen3 || 2008-09-16 || 8.30 |

Dacădoriți să obțineți acces la valoarea unei anumite coloane, puteți face referire la elementul din tablou folosind o cheie a tabloului.

De exemplu, dacărezultatul funcției mysql_fetch_row() este stocat în variabila "$rand", puteți obține acces la prima coloana folosind sintaxa "$rand[0]", la a doua coloana folosind sintaxa "$rand[1]" etc.

Iată un exemplu în care este utilizata funcția mysql_fetch_object(), iar în interogarea SQL este adăugată şi o condiție WHERE şi o variabila "$nr".<?php$nr = 3;$interogare = "SELECT `nume`, `autor` FROM `carti` WHERE `id`<'$nr'";$rezultat = mysql_query($interogare);if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />";} if (mysql_num_rows($rezultat) == 0) { echo '0 rezultate';}else { while ($rand = mysql_fetch_object($rezultat)) {

echo '<br />'. $rand->nume. ' - '. $rand->autor; }}?>

Precizare: - Conform sintaxei MySQL cu PHP, numele tabelelor şi coloanelor se scriu intre caracterele ` `(semnul din stânga tastei 1), deși funcționează şi fără, așa e corect, conform standardului, şi e necesar în cazul numelor de tabele /coloane formate din mai multe cuvinte.

Variabilele, cum e aici $nr se scriu intre ghilimele simple ' 'Biblioteca de funcții MySQL a limbajului PHP include funcții care va permit să obțineți

informații despre un set de rezultate, inclusiv: Numărul coloanelor din setul de rezultate Numele fiecărei coloane Lungimea fiecărei coloane Indicatorii MySQL asociați coloanei Tipul MySQL al fiecărei coloane Numele tabelului MySQL care conține coloana13.20. Obținerea numărului coloanelor dintr-un tabel MySQLPentru a obține numărul coloanelor dintr-un set de rezultate, utilizați funcția

mysql_num_fields()Aceasta folosește ca argument valoarea returnata de funcția mysql_query().Iată un exemplu în care funcția mysql_num_fields() determina numărul coloanelor

dintr-o interogare care selectează toate coloanele folosind specificatorul SQL pentru toate câmpurile "*", astfel puteți afla numărul de coloane dintr-un tabel:<?php$sql = "SELECT * FROM `nume_tabel`";

289

Page 290: curs DPW.docx

$rezultat = mysql_query($sql);if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />";}$nr_câmpuri = mysql_num_fields($rezultat);echo "<br /> Număr câmpuri: $nr_câmpuri";mysql_close();?>

13.21. Obținerea numelui unei coloanePentru a obține numele unei coloane dintr-un tabel MySQL, folosiți funcția

mysql_field_name()Aceasta returnează numele coloanei din setul de rezultate. Funcția preia doua

argumente: valoarea returnata de funcția mysql_query() şi indexul coloanei care va fi descrisa. Indexul asociat cu prima coloana este 0, indexul asociat celei de-a doua coloane este l etc.

Iată un exemplu care determina numele primei coloane dintr-un tabel MySQL:<?php$sql = "SELECT * FROM `nume_tabel`"; $rezultat = mysql_query($sql);if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />";}$nume = mysql_field_name($rezultat, 0);echo "<br /> Coloana 1 : $nume";mysql_close();?>

13.22. Obținerea lungimii unei coloanePentru a obține lungimea unei coloane dintr-un tabel MySQL, folosiți funcția

mysql_field_len()Aceasta returnează lungimea maxima a coloanei din setul de rezultate. Funcția preia

doua argumente: valoarea returnata de funcția mysql_query() şi indexul coloanei care va fi descrisa. Indexul asociat cu prima coloana este 0, indexul asociat celei de-a doua coloane este l etc.

Iată un exemplu care determina lungimea maxima a coloanei doi dintr-un tabel MySQL:<?php$sql = "SELECT * FROM `nume_tabel`"; $rezultat = mysql_query($sql);if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />";}$lungime = mysql_field_len($rezultat, 1);echo "<br /> Lungime Coloana 2 - $lungime";mysql_close();?>

13.23. Obținerea indicatorilor MySQL asociați unei coloanePentru a obține indicatorii SQL asociați unei coloane dintr-un tabel MySQL, folosiți

funcțiamysql_field_flags()

Aceasta preia doua argumente: valoarea returnata de funcția mysql_query() şi indexul coloanei care va fi descrisa. Indexul asociat cu prima coloana este 0, indexul asociat celei de-a doua coloane este l etc.Funcția mysql_field_flags() raportează următorii indicatori:

AUTO_INCREMENT BINARY BLOB ENUM MULTIPLE_KEY NOT_NULL PRIMARY_KEY TIMESTAMP

290

Page 291: curs DPW.docx

UNIQUE_KEY UNSIGNED ZEROFILL

Dacăla o coloana sunt asociați mai mulți indicatori, fiecare indicator este separat de vecinii săi prin intermediul unui singur spațiu.

Iată un exemplu care determina indicatorii asociați primei coloane dintr-un tabel MySQL:<?php$sql = "SELECT * FROM `nume_tabel`"; $rezultat = mysql_query($sql);if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />";}$indicatori = mysql_field_flags($rezultat, 0);echo "<br /> Indicatorii Coloanei 1 : $indicatori";mysql_close();?>

13.24. Obținerea tipului MySQL al unei coloanePentru a obține tipul MySQL al unei coloane dintr-un tabel MySQL, folosiți funcția

mysql_field_type()Aceasta preia doua argumente: valoarea returnata de funcția mysql_query() şi

indexul coloanei care va fi descrisa. Indexul asociat cu prima coloana este 0, indexul asociat celei de-a doua coloane este l etc.

Principalele tipuri MySQL returnate de funcția mysql_field_type() sunt prezentate în tabelul "Principalele tipuri de date din MySQL".

Iată un exemplu care determina tipul primei coloane dintr-un tabel MySQL:<?php$sql = "SELECT * FROM `nume_tabel`"; $rezultat = mysql_query($sql);if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />";}$tip = mysql_field_type($rezultat, 0);echo "<br /> Tip Coloana 1 : $tip";mysql_close();?>

13.25. Determinarea tabelului MySQL asociat unei coloanePentru a determina tabelul MySQL (dacăexista) asociat unei anumite coloane, folosiți

funcțiamysql_field_table()

Aceasta preia doua argumente: valoarea returnata de funcția mysql_query() şi indexul coloanei care va fi descrisa. Indexul asociat cu prima coloana este 0, indexul asociat celei de-a doua coloane este l etc.

În cazul în care coloana conține o valoare calculata sau dacărespectiva coloana nu este asociata în alt mod cu un tabel MySQL, funcția returnează un sir vid.

Iată un exemplu care determina tabelul asociat primei coloane din setul de rezultate:<?php$sql = "SELECT * FROM `nume_tabel`"; $rezultat = mysql_query($sql);if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />";}$tabel = mysql_field_table($rezultat, 0);echo "<br /> Nume tabel : $tabel";mysql_close();?>

13.26. Obținerea structurii complete a setului de rezultateDacădoriți obținerea mai multor caracteristici ale setului de rezultate, o funcție utila

poate fi:mysql_fetch_field()

291

Page 292: curs DPW.docx

Aceasta funcție returnează un obiect ale cărui proprietăţi conțin o varietate de informații cu privire la coloana unui tabel MySQL. Proprietățile sunt următoarele:

blob - are valoarea 1 în cazul în care coloana este de tip BLOB max_length - lungimea maxima a coloanei; multiple_key - are valoarea 1 în cazul în care coloana este o cheie non-unica name - numele coloanei not_null - are valoarea 1 în cazul în care coloana nu poate conține valoarea NULL numeric - are valoarea 1 în cazul în care coloana este numerica primary_key - are valoarea 1 în cazul în care coloana este o cheie primara table - numele tabelului MySQL căruia îi aparține coloana type - tipul MySQL al coloanei unique_key - are valoarea 1 în cazul în care coloana este o cheie unica unsigned - are valoarea 1 în cazul în care coloana este de tip UNSIGNED zerofill - are valoarea 1 în cazul în care coloana este completata cu zerouri

Funcția mysql_fetch_field() preia doua argumente: valoarea returnata de funcția mysql_query() şi indexul coloanei care va fi descrisa. Indexul asociat primei coloane este 0, indexul asociat celei de-a doua coloane este l etc.

Iată un exemplu care prezintă modul de obținere şi descriere a structurii complete a setului de rezultate pentru prima coloana dintr-un tabel MySQL:<?php$sql = "SELECT * FROM `nume_tabel`"; $rezultat = mysql_query($sql);if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />";}$info = mysql_fetch_field($rezultat, 0);echo "<br /> Coloana 1: ";echo "<PRE> blob: $info->blobmax_length: $info->max_lengthmultiple_key: $info->multiple_keyname: $info->namenot_null: $info->not_nullnumeric: $info->numericprimary_key: $info->primary_keytable: $info->tabletype: $info->typeunique_key: $info->unique_keyunsigned: $info->unsignedzerofill: $info->zerofill</PRE>";mysql_close();?>

Pentru a obține aceste proprietăţi pentru toate coloanele din tabel, folosiți o instrucțiune "for", după exemplul de mai jos, care parcurge fiecare coloana, folosind ca limita a numărului de coloane valoarea returnata de funcția mysql_num_fields()<?php$sql = "SELECT * FROM `nume_tabel`"; $rezultat = mysql_query($sql);if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />";}$nr_câmpuri = mysql_num_fields($rezultat);for ($i=0; $i<$nr_câmpuri; $i++) { echo "<br /> Coloana $i: "; $info = mysql_fetch_field($rezultat); if ($info) {

echo "<PRE> blob: $info->blob max_length: $info->max_length multiple_key: $info->multiple_key

292

Page 293: curs DPW.docx

name: $info->name not_null: $info->not_null numeric: $info->numeric primary_key: $info->primary_key table: $info->table type: $info->type unique_key: $info->unique_key unsigned: $info->unsigned zerofill: $info->zerofill </PRE>";

} else {

echo "Necunoscut"; }}mysql_close();?>

13.27. Accesul non-secvențial la coloanele unui set de rezultateFuncțiile mysql_fetch_row() şi mysql_fetch_array() returnează, în general,

rândurile dintr-un set de rezultate în mod secvențial, începând de la primul rând al tabelului. Totuși, funcția mysql_data_seek()permite obținerea accesului la rândurile unui set de rezultate într-o maniera non-secvențiala, . Funcția are forma:

mysql_data_seek(rezultat, număr_rând)unde "rezultat" este valoarea returnata de funcția mysql_query(), iar "număr_rând" este indexul rândului la care doriți să obțineți accesul. Primul rând al tabelului este numerotat cu 0, al doilea cu 1 etc.

Funcția returnează TRUE dacăexecuția reușește, respectiv FALSE în caz contrar. Apoi, o invocare ulterioara a funcției mysql_fetch_row() sau a funcției

mysql_fetch_array() va returna rândul din poziția specificata în funcția mysql_data_seek().Studiați următorul exemplu, care obține accesul la al treilea rând al setului de

rezultate returnat de o interogare anterioara:<?php$sql = "SELECT * FROM `nume_tabel`"; $rezultat = mysql_query($sql);if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />";}if (!mysql_data_seek($rezultat, 2)) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />";}else { $rand = mysql_fetch_array($rezultat, MYSQL_ASSOC); foreach ($rand as $coloana) {

echo "| $coloana |"; }}mysql_close();?>

Acest exemplu afișează datele din rândul trei pentru fiecare coloana a tabelului MySQL

13.28. Determinarea bazelor de date găzduite de un server MySQLPentru a determina bazele de date găzduite de un server MySQL la care aveți acces,

utilizați funcția:mysql_list_dbs()

Funcția returnează un set de rezultate alcătuit din numele bazelor de date găzduite. Întâi determinați numărul rândurilor din setul de rezultate utilizând funcția

mysql_num_rows(), așa cum procedați în cazul unui set de rezultate normal. Apoi trebuie să preluați fiecare rând cu functiamysql_tablename(), care preia ca argumente valoarea returnata de funcția mysql_list_dbs() şi numărul rândului care va fi citit. Rândurile sunt numerotate începând de la 0.

293

Page 294: curs DPW.docx

Iată un exemplu prin care puteți afișa numele bazelor de date găzduite pe "localhost":<?php$dbh = mysql_connect( "localhost", "nume_user", "parola") or die("Unable to connect to MySQL");$dblist = mysql_list_dbs();$nr = mysql_num_rows($dblist);if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />";}for ($i=0; $i<$nr; $i++) { echo "<br />". mysql_tablename($dblist, $i);}mysql_close();?>

13.29. Determinarea tabelelor incluse într-o baza de date MySQLPentru a obține o lista a tabelelor incluse într-o baza de date specificata, folosiți

funcțiamysql_list_tables()

Aceasta folosește ca argument numele bazei de date şi returnează un set de rezultate similar celui returnat de mysql_list_dbs().

Pentru a obține acces la lista cu tabele, parcurgeți setul de rezultate cu ajutorul unei instrucțiuni "for" în cadrul căreia utilizați funcția mysql_tablename().

Iată un exemplu care prezintă modul de obținere şi afișare a listei tabelelor din baza de date "lucrudb":<?php$dbh = mysql_connect( "localhost", "nume_user", "parola") or die("Unable to connect to MySQL");$tabele = mysql_list_tables("lucrudb");$nr = mysql_num_rows($tabele);if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />";}for ($i=0; $i<$nr; $i++) { echo "<br />". mysql_tablename($tabele, $i);}mysql_close();?>

Pentru a putea obține lista cu tabelele dintr-o baza de date, trebuie ca numele de utilizator şi parola folosite să ofere acces la baza de date respectivă, în caz contrar veți primi un mesaj de eroare.

13.30. Determinarea coloanelor incluse într-un tabelPentru a obține o lista a coloanelor incluse într-un tabel, puteți utiliza funcția:

mysql_list_fields()Aceasta returnează un set de rezultate alcătuit din numele coloanelor tabelului

specificat, folosește ca argumente numele bazei de date şi numele tabelului.Iată un exemplu care va prezintă modul de obținere a numelui coloanelor din tabelul

"carti", folosind functiamysql_list_fields():<?php$dbh = mysql_connect( "localhost", "nume_user", "parola") or die("Unable to connect to MySQL");$coloane = mysql_list_fields("lucrudb", "carti");$nr = mysql_num_fields($coloane);if (mysql_errno()) { echo "<br />". mysql_errno(). " : ". mysql_error(). "<br />";}for ($i=0; $i<$nr; $i++) { echo "<br />". mysql_field_name($coloane, $i);}mysql_close();?>

294

Page 295: curs DPW.docx

Dacăin locul numelui coloanelor doriți să obțineți alte informații despre colanele dintr-un tabel MySQL, folosiți în locul funcției mysql_field_name() din interiorul instrucțiunii "for", una din funcțiile:mysql_fetch_fields(), mysql_field_flags(), mysql_field_len() sau mysql_field_type().

14. Scrierea expresiilor regulate (Regex)Expresiile regulate (regex) sunt un sir de caractere șablon care descriu mulțimea

cuvintelor posibile care pot fi formate cu acele caractere, respectând anumite reguli. Aceste expresii regulate folosesc paranteze (rotunde, pătrate, acolade) prin care formează regulile de formare a cuvintelor. Utilitatea cea mai frecventa a unei expresii regulate consta în a recunoaște dacăun sir conține sau nu cuvinte sau sub-sir care pot fi formate prin expresia regulata respectiva.

De ex.: expresia m[ai]r poate forma cuvintele: mar şi mirSa presupunem ca doriți să specificați un sir care poate include orice vocala. Puteți

face aceasta folosind expresia regulata [aeiou]. Prin includerea valorilor posibile între paranteze, formați o expresie regulata echivalenta cu formularea "alege oricare din aceste valori". Dacădoriți să permiteți şi utilizarea, majusculelor, puteți scrie [aeiouAEIOU].

Sa presupunem ca doriți să specificați un sir care poate include orice caracter scris cu minuscule. Puteți scrie: [abcdefghijklmnopqrstuvwxyz]. Sau puteți folosi o forma mai compacta [a-z], unde prin cratima se înțelege "o serie de caractere consecutive".

Sa presupunem ca doriți să specificați într-o expresie regulata șirurile "sat", "mat" şi "lat". Pentru aceasta, aveți nevoie de expresia regulata [sml]at. Semnificația acestei expresii regulate este următoarea: "alege oricare din literele 's', 'm' şi 'l' şi scrie după litera respectiva literele 'at'".

Dacăun accent circumflex (^) este primul simbol menționat între parantezele drepte, acesta are ca efect inversarea semnificației expresiei regulate plasate între paranteze.

De exemplu, expresia regulata [^a-z] corespunde oricărui caracter care nu este o litera mica.

Pentru a specifica faptul ca o expresie regulata se poate repeta, expresia regulat va fi urmata de o pereche de acolade, care includ limitele superioara şi inferioara ale repetiției.

De exemplu, expresia regulata [aeiou]{1,4} corespunde șirurilor care pot conține intre 1 şi 4 vocale.

Pentru a specifica repetarea mai multor părţi ale unei expresii regulate, includeți părţile respective între paranteze rotunde.

De exemplu, expresia regulata ([sml]at){1 ,2} corespunde unui număr de una sau doua repetări ale oricăruia dintre șirurile "sat", "mat" sau "lat".

Pentru a simplifica scrierea de reguli într-o expresie regulata se folosesc anumite caractere "speciale"

Sa presupunem ca doriți să reprezentați o înmulțire intre doua numere, puteți obține ceva de genul [0-9]*[0-9]. Totuși, aceasta expresie regulata nu are semnificația dorita, deoarece '*' este un factor de repetiție, nu un caracter dintr-un sir. Pentru a dezactiva semnificația speciala a caracterului '*', trebuie sa-l prefixați cu un caracter backslash: [0-9]\*[0-9].

Pentru a specifica faptul ca o expresie regulata corespunde numai unui sub-sir care include anumite caractere la început, prefixați expresia regulata cu un accent circumflex "^". De exemplu, expresia regulata^[sml]at corespunde subşirurilor "sat", "mat" sau "lat" numai dacăacestea apar la începutul șirului subiect.

Similar, pentru a arata ca o expresie regulata corespunde numai unui sub-sir care include anumite caractere la sfârșit, anexați la expresia regulata un simbol al dolarului "$". De exemplu, expresia regulata[sml]at$ corespunde șirurilor "sat", "mat" sau "lat" numai dacăacestea apar la sfârșitul șirului subiect.

Iată o lista cu mai multe caractere speciale şi rolul lor în expresiile regulate: ^ - indica începutul liniei $ - indica sfârșitul liniei . - (punct) orice caracter [] - un caracter dintre cele din parenezele pătrate [^] - orice caracter, în afara celor din parenezele pătrate \ - scoate din contextul formari expresiei caracterul care urmează + - caracterul (expresia) anterior acestui semn se poate repeta odată şi de cate ori

e posibil (de la 1 la infinit) - caracterul (expresia) anterior acestui semn se poate repeta de cate ori e posibil sau

niciodată (de la 0 la infinit)

295

Page 296: curs DPW.docx

? - caracterul (expresia) anterior acestui semn se poate repeta cel mult odată un cuvânt întreg

(|) - lista de opțiuni SAU {m, n} - repetarea expresiei de la "m" la "n" ori

Iată câteva exemple de expresii regulate: (.*) - Reprezintă toate caracterele (prin .) repetate de cate ori e posibil (dat de *) <salut> - Cuvântul "salut" (ci|co)tim - Reprezintă "citim" şi "cotim" ^The .* hack$ - Șirurile care încep cu "the " şi se sfârșesc cu " hack" ^www.[a-z0-9]+.ro$ - Reprezintă șirurile "www.---.ro" unde '---' poate fi orice litera

sau cuvânt ce conține litere mici şi numere (^-\+[0-9]*) - Orice număr care începe cu "-" sau "+" ^([a-zA-Z0-9]+[a-zA-Z0-9._%-]*@([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,4})$ - Expresie

regulata pentru adrese de e-mail14.1. Utilizarea expresiilor regulatePHP include numeroase funcții care lucrează cu expresii regulate. Tabelul următor

descrie unele din aceste funcții.

Funcții PHP pentru expresii regulate

Funcție Descriere

ereg - Executa o identificare cu o expresie regulata (începând cu versiunea PHP 5.3 şi anulata la PHP 6)

ereg_replace- Înlocuiește un subşir care corespunde unei expresii regulate (depreciata începând cu versiunea PHP 5.3 şi anulata la PHP 6 - în locul ei poate fi folosita preg_replace)

eregi- Executa o identificare cu o expresie regulata insensibila la diferența între majuscule şi minuscule (depreciata începând cu versiunea PHP 5.3 şi anulata la PHP 6)

eregi_replace

- Înlocuiește un sub-sir care corespunde unei expresii regulate insensibile la diferența între majuscule şi minuscule (depreciata începând cu versiunea PHP 5.3 şi anulata la PHP 6 - în locul ei poate fi folosita preg_replace)

preg_replace - Cauta în sir caracterele sau șablonul care se potrivește cu expresia regulata din funcție şi o înlocuiește cu alte valori date

split- Divide un sir într-un tablou folosind o expresie regulata (depreciata începând cu versiunea PHP 5.3 şi anulata la PHP 6 - în locul ei poate fi folosita preg_split)

sql_regcase- Creează o expresie regulata, insensibila la diferența între majuscule şi minuscule, dintr-un sir care conține o expresie regulata (depreciata începând cu versiunea PHP 5.3 şi anulata la PHP 6)

In continuare este dat un exemplu cu funcția ereg().Forma simpla a funcției ereg() preia doua argumente: un sir care conține o expresie

regulata şi un sir subiect. Funcția returnează TRUE dacăexpresia regulata corespunde unui sub-sir al șirului subiect; în caz contrar, returnează FALSE.

Iată un exemplu:<?php$model = "[sml]at";$subiect = "La noi în sat";$rezultat = ereg($model, $subiect);if ($rezultat) { echo 'Model inclus în subiect';}?>

296

Page 297: curs DPW.docx

In acest script, variabila $rezultat primește valoarea TRUE, deoarece șirul 'subiect' conține subşirul "sat", care corespunde expresiei regulate.

Pentru verificare, instrucțiunea "if" verifica dacă"$resultat" este TRUE şi în caz afirmativ executa comanda dintre acolade, "echo" care afișează 'Model inclus în subiect'.

Pentru a verifica dacăun sir conține numai litere şi numere, puteți folosi direct funcția ctype_alnum()

Deoarece funcțiile "ereg" au fost depreciate începând cu versiunea PHP 5.3 şi anulate din PHP 6, este indicat să nu le mai folosiți, cunoașterea lor e necesara dacăle întâlniţi în scripturi mai vechi. Acestea au fost înlocuite cu funcții "preg_" (Perl-Compatible)..

Expresiile regulate compatibile Perl se adăuga intre caractere "/". De exemplu șablonul ([a-z0-9]+) se folosește /([a-z0-9]+)/.

Iată un exemplu cu preg_grep(), aceasta returnează un array compus din elementele unei matrice care conțin șablonul, expresia regulata căutată. Acest exemplu va returna doar acele elementele dintr-o matrice care conțin în ele subşirurile "casa" sau "masa".<?php$matrice = array('123casa', 'abc masa', '12-xy', '$asa_0/', '123abc casa');$filtru = preg_grep("/([cm]așa)/", $matrice);print_r ($filtru); // Afișează elementele matricei?>

Variabila "$matrice" conține un Array cu mai multe elemente cu șiruri.In variabila $filtru e preluat rezultatul funcției "preg_grep()" a cărei prim parametru

este un șablon de expresie regulata (adăugată intre ghilimele duble), iar al doilea este matricea în care e căutat șablonul.

Cu funcția "print_r()" se va afișa elementele matricei obținute în variabila "$filtru". Rezultatul afișat e următorul:Array ( [0]=>123casa [1]=>abc masa [4]=>123abc casa )

Un ultim exemplu util, folosim funcția preg_replace() şi o expresie regulata pentru a elimina caracterelor speciale dintr-un sir<?php$sir = 'Sir& ce conține*a <caractere: speciale? /in co@nte>xt';$sir = preg_replace("/([^ A-Za-z0-9_]+)/", "", $sir);echo $sir; ?>

In acest exemplu avem un sir (stocat în variabila $sir) ce conține diferite caractere mai puțin uzuale.

Funcția "preg_replace", împreună cu expresia regulata "/(^ A-Za-z0-9_]+)/", păstrează în $sir numai literele, cifrele, caracterul '_' şi spațiu.

Instrucțiunea "echo" va afișa următorul rezultat:Sir ce conținea caractere speciale în context

O abordare importanta a activității de programare, care a devenit populara după 1990, este orientarea spre obiecte, OOP (Object Oriented Programming).

Orientarea spre obiecte a fost creata ca o modalitate de organizare mai eficienta a unor programe de simulare complexe, metoda care s-a dovedit utila în scrierea şi utilizarea programelor interactive.

Principiul de baza al programării orientate spre obiecte îl reprezintă încapsularea datelor, gruparea lor în module.

Un program care nu este orientat spre obiecte este organizat ca un set de funcții şi un set de variabile globale utilizate de acele funcții. Orice funcție poate opera folosind orice variabila globala.

Un program orientat spre obiecte combina una sau mai multe funcții create de programator într-o unitate, cunoscuta sub numele de "clasa".

Programele orientate spre obiecte pot fi mai ușor de înțeles şi modificat, deoarece interacțiunile între clasele unui program orientat spre obiecte sunt relativ reduse ca număr. Astfel, un programator poate studia şi înțelege un program orientat spre obiecte abordând fiecare clasa în parte, nu toate clasele deodată.

Pe lângă modalitatea de programare liniara (procedurala), învăţată pana acum, PHP permite să creați şi să folosiți clase şi obiecte, respectiv proprietățile şi metodele asociate acestora.

14.2. ClaseleO clasa este de fapt o structura care conține variabile (membrii) şi funcții (metode),

Metodele sunt operațiile pe care membrii clasei le pot efectua.

297

Page 298: curs DPW.docx

Membrii şi metodele declarate într-o clasa aparțin clasei respective şi se accesează specificând numele clasei.

O clasa poate include o metoda speciala, numita "metoda constructor" sau "constructor". Aceasta este o funcției din clasa care are același nume cu denumirea clasei.

Diferența între clasa şi obiect este importanta. Dacă o clasa poate fi asimilata unui tip de date, un obiect poate fi echivalat cu o variabila sau cu o valoare având un anumit tip de date. Practic, o clasa este o "fabrica" de obiecte, care produce obiecte cu aceeași structura, având proprietăţi şi metode identice.

Pe lângă încapsularea datelor, o alta caracteristica importanta al POD este moștenirea

Moștenirea consta în aceea ca putem declara anumite clase ca fiind derivate din alte clase de baza. în cele mai multe situații clasa derivata (numita şi clasa copil) extinde, primește funcţionalităţile clasei de baza (numita şi clasa părinte). în acest fel se reduce foarte mult cantitatea de cod necesara.

14.2.1. Alcătuirea şi instanţierea unei claseDefinirea unei clase începe cu un cuvântul cheie "class". Variabilele sau membrii

clasei se specifica folosind cuvântul "var". Funcțiile sau metodele unei clase se declara specificând cuvântul "function" . Structura generală de alcătuire a unei clase este următoarea:class nume_claca { var membru1; var membru2; ................. function nume_funcție(); {

function metoda1(); function metoda2(); .................

}}

Pentru a înțelege mai bine modalitatea de definire a unei clase în PHP, consideram următorul exemplu în care alcătuim o clasa simpla denumita "ContBanca":<?php// Definirea claseiclass ContBanca { var $sold = 0; // Membru clasei // Definirea primei metode a clasei function c_depozit($suma) {

$this->sold = $this->sold + $suma; } // Definirea celei dea doua metode a clasei function obține_sold() {

return $this->sold; }}?>

Clasa "ContBanca" are un singur membru, "$sold" şi doua metode: "c_depozit()" şi "obține_sold()".

Membru (variabila) "$sold" este definita de o instrucțiune "var". Clasa "ContBanca" atribuie variabilei "$sold" valoarea iniţială zero ( Nu este necesara atribuirea unei valori inițiale unei proprietăţi, dar astfel programele devin mai simple şi mai ușor de citit).

Cele doua metodele (funcții) sunt definite folosind cuvântul cheie "function". (Diferența dintre metode şi funcții este legata de amplasarea acestora, pentru a se face deosebirea; metodele sunt definite în interiorul claselor, în timp ce funcțiile sunt definite în exteriorul acestora).

Un aspect interesant al metodelor consta în modalitatea în care acestea obțin accesul la variabila, folosind sintaxa "$this->" (aceasta are o semnificație similara cu a pronumelui posesiv din limba româna (al meu)). Când o metoda face o referire de forma "$this->sold", se considera ca face trimitere la membru "$sold" a obiectului curent, aici efectul este similar cu acela al expresiei "sold-ul mea".

Instanţierea unei clase se face prin operatorul "new", având următoarea forma generala:

298

Page 299: curs DPW.docx

$nume_variabila = new nume_clasa();Variabila "$nume_variabila" conține o referința la clasa "nume_clasa". în continuare

se apelează metodele clasei respective, asta se face prin operatorul de referința "->" ca mai jos:

$nume_variabila->Metoda1();Variabila apelează metoda cu numele "Medoda1()", care aparține clasei

"nume_clasa".Ștergerea instanțelor unei clase se face simplu prin apelarea funcției:

unset($nume_variabila)După aceasta ștergere, orice apel de genul "$nume_variabila->Metoda1();" va fi

semnalat ca eroare.Iată un exemplu concret de instanţiere în care folosim clasa "ContBanca", definita

mai sus.<?php// Definirea claseiclass ContBanca { var $sold = 0; // Membru clasei // Definirea primei metode a clasei function c_depozit($suma) {

$this->sold = $this->sold + $suma; } // Definirea celei dea doua metode a clasei function obține_sold() {

return $this->sold; }}// Instanţierea clasei (setarea obiectului)$cont = new ContBanca();// Apelarea metodelor din obiectul setat$cont->c_depozit(90);echo "<br /> Soldul este : ". $cont->obține_sold();?>

Prima instrucțiune, după crearea clasei, setează (instanțială) un obiect "ContBanca" folosind operatorul "new" şi stochează referința la acest obiect în variabila "$cont", care va fi utilizata ulterior pentru a obține acces la metodele obiectului.

A doua instrucțiune folosește variabila "$cont", (care face referire la obiectul "ContBanca" creat de prima instrucțiune). Operatorul "->" arata ca PHP trebuie să apeleze metoda "c_depozit()" asupra obiectului desemnat de variabila "$cont".

Astfel, prin a doua instrucțiune se va executa metoda "c_depozit()", căreia ii este transmis argumentul 90. După cum este definita, metoda "c_depozit", aceasta incrementează valoarea membrului "$sold" cu valoarea argumentului din paranteze, "$suma" (adică aici 90).

Cea de-a treia instrucțiune invoca metoda "obține_sold()", care returnează valoarea membrului "$sold". Instrucțiunea afișează valoarea returnata prin intermediul unei instrucțiuni "echo", afișând "Soldul este : 90".

14.2.2. Definirea unei metode constructorMetoda constructor este o funcție din interiorul clasei care are aceeași denumire cu

numele clasei.Pentru ca o clasa să fie eficienta, ar trebui să aibă mai mulți membri.De exemplu, clasa "ContBanca", pe lângă membrul "$sold", ar necesita membrii care

să definească numele şi id-ul posesorului. Iată o noua versiune a clasei, care include trei membri şi o metoda constructor:

<?php// Definirea claseiclass ContBanca { // Membri clasei var $cont_id; var $nume_posesor; var $sold = 0; // Definirea metodei constructor function ContBanca($id, $nume, $suma) {

299

Page 300: curs DPW.docx

$this->cont_id = $id; $this->nume_posesor = $nume; $this->sold = $suma;

} // Definirea celei dea doua metode a clasei function c_depozit($suma) {

$this->sold = $this->sold + $suma; return $this->sold;

}}?>

Constructorul este "function ContBanca()", așa cum se observa, are același nume ca al clasei. Deosebirea fata de ceilalți membri este ca la invocarea operatorului "new", pentru setarea obiectului, PHP va apela automat şi aceasta funcție din clasa.

Argumentele constructorului sunt folosite pentru a stabili valorile inițiale ale membrilor noului obiect, "$id", "$nume" şi "$suma".

Iată cum s-ar putea folosi noua clasa, adăugăm codul de mai jos după datele de definire a clasei, pe care nu le mai repetam:<?php// Aici sunt adăugate datele pentru definirea clasei// Setarea (instanţierea) obiectului "ContBanca"$cont = new ContBanca(8, "Plo Mar", 100);echo "<br /> Contul $cont->cont_id aparține lui $cont->nume_posesor";// Apelarea celei dea doua metode$cont->c_depozit(90);echo "<br /> Soldul este $cont->sold";?>

Instrucțiunea "$cont = new ContBanca(8, "Plo Mar", 100);" obține accesul la membrii obiectului în mod direct, prin "constructorul" care are același nume cu al clasei, transferându-le valorile "8", "Plo Mar" şi "100"

Datele de ieșire ale acestui exemplu sunt următoarele:Contul 8 aparține lui Plo Mar Soldul este 190

14.2.3. Utilizarea moșteniriiAșa cum s-a explicat la început, un avantaj al programării orientate spre obiecte este

facilitatea cunoscuta sub numele de moștenire.Pentru a înțelege cum funcționează, iată un exemplu care prezintă modul de derivare

a unei clase "ContCurent" din clasa de baza "ContBancar", definita anterior şi pe care o salvam într-un fișier extern "contbanca.php":<?phpinclude("contbanca.php"); // Include clasa părinte (sau poate fi scrisa aici)// Definirea clasei copilclass ContCurent extends ContBanca { var $cec_nr; // Membru clasei copil // Metoda constructor a clasei copil function ContCurent($id, $nume, $suma, $cecnr) {

$this->cont_id = $id; $this->nume_posesor = $nume; $this->sold = $suma; $this->cec_nr = $cecnr;

} // A doua metoda a clasei copil function primire_cec($cecnr, $suma) {

$this->sold = $this->sold - $suma; } // A treia metoda a clasei copil function obține_sold() {

return $this->sold; }}?>

300

Page 301: curs DPW.docx

Exemplul folosește o instrucțiune "include" pentru a obține accesul la definiția clasei "ContBanca". (sau puteți scrie direct aceasta clasa în locul "include").

Cuvântul cheie "extends" stabilește identitatea clasei "ContCurent" ca fiind derivata (copil) a clasei "ContBanca".

Clasa derivata definește un membru, "$cec_nr", de asemenea, definește un constructor şi alte doua metode, "primire_cec()" şi "obține_sold()".

Important este faptul ca aceasta clasa mai include şi membrii definiți în clasa de baza (părinte): "$cont_id", "$nume_posesor" şi "$sold", în plus va moșteni şi metoda "c_depozit()". Constructorul clasei copil atribuie valori membrilor moșteniți, dar şi membrilor noi definiți în clasa copil.

Clasa derivata (copil) se folosește ca orice clasa.După ce adăugăm datele de definire a claselor părinte şi copil prezentate mai sus,

creem un obiect "ContCurent" care face referire la aceasta clasa copil, ca în exemplul următor.<?php// Aici sunt adăugate datele pentru clasa părinte şi clasa derivata (copil)// Setarea (instanţierea) obiectului "ContCurent"$cont = new ContCurent(8, "Plo Mar", 100, 11);$cont->primire_cec(11, 150); // Apelează metoda creata în clasa copil$cont->c_depozit(250); // Apelează metoda moştenităecho "<br /> Soldul este". $cont->obține_sold();?>

Observați ca metoda "c_depozit()", care este definita în clasa de baza, este invocata ca şi cum ar fi fost definita în clasa derivata; metodele moștenite se apelează la fel ca cele create în clasa copil.

După ce veți include în același fișier php clasa părinte, clasa copil şi instanţierea de mai sus, rezultatul afișat după execuția acestui fișier va fi: Soldul este 200".

14.2.4. Redefinirea metodelorUneori, o clasa părinte include o metoda (funcție) care nu este adecvata pentru o

clasa copil. în loc de a re-crea noua clasa fără referire la o clasa de baza, puteți anula metoda inadecvata adăugând o metoda cu același nume în clasa copil (derivata). Astfel la instanţiere va fi folosita metoda, cu același nume, din clasa derivata.

De exemplu, să consideram următoarea clasa:<?phpclass ContBanca2 { var $cont_id; var $nume_posesor; var $sold = 1; function ContBanca2($id, $nume, $suma) {

$this->cont_id = $id; $this->nume_posesor = $nume; $this->sold = $suma;

} function închide_cont() {

$suma = $this->sold; $this->sold = 1; return $this->sold;

}}?>

Sa presupunem ca dorim să derivam din aceasta o clasa copil care reprezintă un nou tip de cont bancar, cu dobânda. La închiderea contului, programul trebuie să calculeze dobânda pe care să o adauge la soldul curent şi să returneze suma acumulata.

Iată cum putem proceda, definim clasa derivata astfel:<?phpclass ContEco extends ContBanca2 { function închide_cont($zile, $rata) {

$suma = $this->sold * $rata * ($zile / 365); $suma = $suma + $this->sold; $this->sold = 1; return $suma;

301

Page 302: curs DPW.docx

}}?>

In cadrul clasei derivate (copil) este definita o metoda numita "închide_cont()". O metoda cu același nume exista şi în clasa de baza (clasa părinte), dar are o alta definiție. Astfel, în clasa copil nu va mai fi moştenită metoda cu același nume, ci o va folosi pe cea proprie.

In continuare creem un obiect "ContEco" şi apelam metoda "închide_cont()" astfel:<?php// Aici sunt adăugate datele pentru definirea clasei de baza, ContBanca2// Aici sunt adăugate datele pentru definirea clasei derivate, ContEco$cont = new ContEco(8, "Didi", 100);echo "<br /> Didi primește ". $cont->închide_cont(22, 0.8);// Va fi afișat șirul: "Didi primește 104.82191780822"?>

Este invocata metoda "închide_cont" definita de clasa copil, nu cea definita în clasa părinte. Astfel, metoda definita în clasa părinte a fost anulata (redefinita) de către metoda, cu același nume, definita în clasa copil.

14.2.5. Invocarea unei metode redefiniteDacăîncercați să invocați o metoda anulata (redefinita), probabil ca veți obține o

eroare. Dacăin exemplul anterior, am fi scris instrucțiunea: "echo "<br /> Didi primește ".

$cont->închide_cont();", fără cele doua argumente (22, 0.8), încercând astfel să facem referire la metoda anulata "închide_cont()", am primi mesaje de eroare:Warning: Missing argument 1 for ContEco::închide_cont(),Warning: Missing argument 2 for ContEco::închide_cont(),

Cu toate acestea, este posibila invocarea metodei redefinite. Prin specificarea în clasa copil a numelui clasei părinte, urmat de o pereche de caractere doua puncte (::) şi metoda redefinita. Astfel se poate indica programului PHP să folosească metoda, cu același nume, definita în clasa părinte, nu metoda definita în clasa copil.

Invocarea unei metode redefinite este un procedeu mai complicat, pentru începători este mai bine a fi evitat deoarece poate complica înțelegerea scriptului.

Iată cum ar arata clasa derivata utilizând acest procedeu:<?phpclass ContEco extends ContBanca2 { function închide_cont($zile, $rata) {

$suma = ContBanca2::închide_cont(); $suma = $suma + $suma * $rata * ($zile / 365); return $suma;

}}?>

14.3. Tablouri cu obiecteTablourile (numite şi matrice) reprezintă o modalitate convenabila pentru lucrul cu

mai multe valori. Valorile stocate în tablouri pot face referire la obiecte exact așa cum procedează în cazul numerelor sau al șirurilor.

Un tablou care face referire la obiecte se numește "tablou cu obiecte".Pentru a înțelege modul de utilizare a unui tablou cu obiecte, să examinam

următoarea clasa "ContBanca" şi doua clase copil ale acesteia:<?php// Clasa părinteclass ContBanca { var $cont_id; var $nume_posesor; var $sold; var $tip_cont; function ContBanca($id, $nume, $suma, $tip) {

$this->cont_id = $id; $this->nume_posesor = $nume; $this->sold = $suma; $this->tip_cont = $tip;

302

Page 303: curs DPW.docx

} function dump() {

return "Cont = ". $this->cont_id. " posesor = ". $this->nume_posesor. " sold = ". $this->sold. " tip = ". $this->tip_cont;

}}// Începe codul pt. prima clasa copilclass ContCurent extends ContBanca { function ContCurent ($id, $nume, $suma) {

ContBanca::ContBanca($id, $nume, $suma, "curent"); }}// Începe codul pt. a doua clasa copilclass ContEco extends ContBanca { function ContEco ($id, $nume, $suma) {

ContBanca::ContBanca($id, $nume, $suma, "economii"); }}?>

Remarcați faptul ca metodele constructor ale celor doua clase copil fac referire la constructorul clasei părinte (folosind perechea "::"), reutilizând în mod eficient caracteristica furnizata de clasa părinte, reducând astfel codul programului.

Acum, creem instanțe ale claselor copil şi stocam referințele la aceste instanțe într-un tablou:<?php$cont[0] = new ContCurent(11, "Plo Mar", 100);$cont[1] = new ContEco(12, "Didi", 140);?>

După ce referințele au fost stocate în tablou, pot fi accesate în mai multe moduri,.De exemplu, după ce am definit clasele şi am stocat instanțele în tabloul "$cont[]" de

mai sus, adăugăm următorul cod:<?php// Aici adăugăm datele pt. definirea claselor// Aici adăugăm codul pentru stocarea instanțelor în tablouforeach ($cont as $contul) { echo "<br /> ". $contul->dump();}?>

Apelam metoda "dump()" deoarece aceasta este inclusa în clasa părinte, deci moştenită de clasele copil, şi are ca rol returnarea datelor.

Tabloul este simplu de parcurs, prin invocarea metodei "dump()", care doar afișează membrii claselor unui obiect "ContBancar" sau ale unui obiect din una din clasele sale copil.Exemplul va afișa următorul rezultat:Cont = 11 posesor = Plo Mar sold = 100 tip = curent Cont = 12 posesor = Didi sold = 140 tip = economii

Primul rând reprezintă datele returnate din "$cont[0]" care face referire la obiectul clasei copil "ContCurent"

Al doilea rând reprezintă datele returnate din "$cont[1]" care face referire la obiectul clasei copil "ContEco

15. Resurse PHP online Developer Shed - Un site plin de informaţii pentru programatori, server-side, client-

side, inclusiv PHP, MySQL, Perl etc. - http://www.devshed.com Documentaţie funcţii PHP (Zend) - Cuprinde descrierea funcţiilor PHP realizată de

Zend Technologies. - http://www.zend.com/phpfunc Funcţii PHP nedocumentate - Manualul PHP nu documentează toate funcţiile PHP. Aici

pot fi găsite informaţii detaliate despre aceste funcţii nedocumentate. http://www.zend.com/phpfunc/nodoku.php

Manualul PHP Offline - PHP oferă celor interesaţi posibilitatea de a descărca documentaţie în diverse formate (text, html, pdf, chm).

303

Page 304: curs DPW.docx

http://www.php.net/download-docs.php Building a Database-Driven Web Site Using PHP and MySQL - Un tutorial scris de

Kevin Yank excelent atât pentru începători, cât şi pentru cei puţintel mai avansaţi. De la instalare, sub diverse sisteme de operare, până la chestiuni complexe legate de expresii regulate sau interogări SQL, tutorialul merită citit.

http://www.sitepoint.com/books/phpmysql1/ Cel mai tare tutorial de php - Intrați pe cel mai tare tutorial...în curând şi noi

versiuni...cuprinde totul inclusiv o serie de exerciții, sisteme de autentificare....etc.http://oriceon.com

Ghid PHP pentru începători - Conţine lecţii PHP pentru începători, cu exemple practice, explicaţii şi rezolvări - http://php.punctsivirgula.ro/

Internet Application Workbook - Lecţii interesante publicate de unul dintre cei mai activi universitari din SUA. Cursuri excelente atât pentru începători, cât şi pentru şlefuirea cunoştinţelor avansaţilor. - http://philip.greenspun.com/internet-application-workbook

Programare.net - O scurtă introducere în PHP însoţită de cerinţele de sistem şi de un exemplu. http://www.programare.net/?t=1

Redirectare - Redirectare către o altă pagină folosind funcţia header(). http://www.programare.net/?t=5

TheScripts.com - Web Programming Resource - O colecţie de tutoriale pentru PHP/PHP-MySQL realizate de profesionişti.

http://www.thescripts.com/serversidescripting/php Trimiterea unui formular prin email folosind PHP - Un caz des utilizat de folosire a

PHP-ului este în procesarea datelor unui formular. Adăugați şi funcţia mail() şi veţi avea un sistem rudimentar dar puternic de submitere a datelor introduse de vizitatori.

http://www.programare.net/?t=2 Tutorial Find - O listă în plină dezvoltare cu diverse tutoriale dedicate limbajului PHP

sau duetului PHP-MySQL. http://www.find.com.au/tutorials/webdevelopment/php Tutoriale diverse - Aici veţi găsi o mulţime de tutoriale...

http://www.devshed.com/Server_Side/PHP Tutoriale şi scripturi - Tutoriale (în limba română)- PHP, MySQL, Java, HTML, Adobe

Photoshop, 3D Studio Max. http://cata.lx.ro/tutoriale.php web design house-php tutorial - 1.Creating my first PHP file 2. Displaying Date and

Time 3.GET and POST methods and how to get info from them 4.PHP Session 5. Learn abour your server: php variables http://www.wdh.ro/ifphp.html

WebMonkey | Programming | PHP - O listă de tutoriale (în limba engleză) care acoperă diverse aspecte ale iniţierii în PHP.

http://hotwired.lycos.com/webmonkey/programming/php Zend Tutorials Aici găsiţi o serie de tutoriale PHP - atât pentru începători, cât şi

pentru avansaţi. http://www.zend.com/zend/tut/ 15.1. Administratorul bazei de date Administratorul bazei de date este un program ce asigură interfaţa dintre datele

înmagazinate, aplicaţiile care folosesc aceste date şi întrebările adresate sistemului cu ajutorul cărora se extrag datele necesare. De obicei, bazele de date necesită un spaţiu mare de înmagazinare pe mediul de stocare ales, ce poate ajunge de ordinul gigabytes-ilor. Pentru a putea fi prelucrate datele se transferă din memoria externă în memoria internă a sistemului. Scopul sistemului bazei de date este acela de a uşura accesul la date, iar administratorul bazei de date este răspunzător de următoarele:

asigură interacţiunea cu administratorul de fişiere (trebuie să transfere instrucţiunile limbajului de manipulare a datelor în comenzi de nivel scăzut recunoscute de sistemul de fişiere);

asigură integritatea datelor prin verificările pe care le efectuează în momentul actualizării datelor astfel încât acestea să nu încalce constrângerile impuse şi să fie consistente;

asigură securitatea datelor prin accesul controlat la date pe care îl oferă utilizatorilor (aceştia nu pot accesa orice fel de date dacă nu le este permis acest lucru);

creează copiile de siguranţă şi asigură refacerea datelor, în cazul apariţiei unei erori sau defecţiuni în baza de date, la starea la care acestea se aflau înainte de apariţia erorii sau defecţiunii;

304

Page 305: curs DPW.docx

asigură controlul concurenţei păstrând consistenţa datelor atunci când acestea sunt accesate în acelaşi timp de mai mulţi utilizatori.Resursele umane sunt reprezentate de:1. Administratorul de date este responsabil de gestionarea resurselor de date şi

proiectarea conceptual / logică a bazei de date.2. Administratorul bazei de date este responsabil de realizarea fizică a bazei de date

ce implică proiectarea şi implementarea acesteia. Administratorul bazei de date este o persoană care are în răspundere controlul centralizat al datelor şi al aplicaţiilor ce folosesc aceste date. Îndatoririle administratorului bazei de date cuprind:

defineşte schema bazei de date, ceea ce presupune scrierea unui set de definiţii în limbajul de definire a datelor care apoi să poată fi compilate de către un compilator DDL şi transformate într-un set de tabele păstrate în catalogul sistemului;

defineşte structura de stocare şi a metodele de acces prin scrierea unui set de definiţii transferate compilatorului;

modifică schema şi organizarea fizică prin scrierea unui set de definiţii utilizate de către compilatorul DDL pentru a face modificările cerute în tabele;

asigură securitatea prin acordarea drepturilor de acces utilizatorilor pe baza unor conturi de utilizator create în acest scop;

verifică respectarea constrângerilor de integritate ori de câte ori se introduc date în baza de date;

monitorizează toate activităţile utilizatorilor; monitorizează creşterea dimensiunilor bazei de date; îşi formează o imagine de ansamblu asupra sistemului, urmărind părţile tari şi slabe

ale acestuia; asigură controlul concurenţei prin alegerea tipului de blocare ce va fi folosit atunci

când aceleaşi date sunt folosite de mai mulţi utilizatori în acelaşi timp; asigură fiabilitatea sistemului în cazul apariţiei unor erori.

Proiectanţii de baze de date care pot fi: Proiectant de baze de date logice:

o identifică datele (entităţi şi atribute);o identifică relaţiile dintre date;o identifică constrângerile;o identifică regulile ce descriu principalele caracteristici ale datelor;o implică utilizatori în realizarea modelului de date.

Proiectant de baze de date fizice: o transpune modelul logic într-un set de tabele şi constrângeri;o selectează structuri de stocare şi metode de acces specific;o asigură securitatea datelor.

Utilizatorii finali care pot fi de următoarele categorii: Programatorii de aplicaţii. Aceştia sunt profesioniştii ce interacţionează cu sistemul

folosind instrucţiuni scrise în limbajul de manipulare a datelor pe care le încorporează în cadrul unor interfeţe create în alte limbaje de programare. Precompilatorul DML converteşte apelurile scrise în limbajul de manipulare a datelor în proceduri specifice limbajului gazdă. Compilatorul limbajului gazdă generează apoi codul obiect.

Utilizatori cu pregătire specială. Aceştia interacţionează cu sistemul fără a scrie programe, dar ei formulează cereri pentru a extrage date din baza de date cu ajutorul instrucţiunilor specifice limbajului de manipulare a datelor. Aceste cereri sunt transmise procesorului de interogare care desparte o instrucţiune specifică limbajului de manipulare a datelor în instrucţiuni specifice modulului de administrare a bazei de date.

Utilizatori specializaţi. Aceştia sunt utilizatori cu pregătire specială care scriu programe aplicaţie specializate pentru diverse zone de interes (sisteme CAD, sisteme expert etc.).

Utilizatori obişnuiţi. Aceştia sunt utilizatori care interacţionează cu sistemul folosind interfeţele create de programatorii de aplicaţii.

305

Page 306: curs DPW.docx

306