Aplicatie web pentru organizarea de evenimente folosind mijloace din PHP și JOOMLA [304679]
[anonimizat]: [anonimizat]:
Lect. univ. dr. Popescu Doru Anastasiu
PITEȘTI
2016
[anonimizat] o [anonimizat], un instrument pentru facilitarea afacerilor și un debușeu comercial.
Cel mai popular mijloc de acces la informație în Internet îl reprezintă “Rețeaua globală “ (World Wide Web). [anonimizat]. [anonimizat] (cu folosirea limbajului HTML).
Rețeaua globală a cucerit o [anonimizat], științei, politicii ș.a. [anonimizat], [anonimizat] a sistemelor de căutare. [anonimizat], păstrare și căutare a informației în WWW se referă la categoriile sistemelor informaționale și de căutare. Cu toate că locul de păstrare a [anonimizat].
[anonimizat] a [anonimizat], să creeze foarte ușor un document multimedia la care să aibă acces toți ceilalți utilizatori.
Internetul și WWW reprezintă o [anonimizat] o persoană, firmă, [anonimizat], [anonimizat].
[anonimizat], vor cunoaște o dezvoltare mai mare: [anonimizat] o navigare ușoară prin noianul de colecții de date disponibile; totodată, [anonimizat], în favoarea perioadei afectată realizării lucrărilor în care sunt angajați.
Internetul va fi din ce în ce mai mult folosită pe baze comerciale. [anonimizat]-și pot permite realizarea unor rețele proprii. Desigur, se întrevăd și unele neajunsuri în această tendință. [anonimizat], cu atât mai mult cu cât utilizarea curentă a serviciilor Internet nu este peste tot o obișnuință.
Dezvoltarea rapidă a [anonimizat], adoptă o nouă abordare a sistemelor informatice și o reconsiderare a tehnologiilor și relațiilor din sfera mecanismelor comerciale.
Importanța și impactul tehnologiei WWW în proiectarea aplicațiilor din domeniul comerțului poate fi comparat cu cel petrecut în proiectarea aplicațiilor din domeniul industrial o dată cu standardizarea reprezentării tridimensionale (3D).
Analogia poate fi făcută și prin faptul că tehnologia Web a dat cel puțin trei dimensiuni noi informației conținute în documente: sunet, imagine, animație.
Dacă în sfera producție (industrie), tehnologia informatică s-a cristalizat în aplicații care au ajuns la maturitate printr-o evoluție ascendentă, normală, în sfera economicului și în special în domeniul comerțului evoluția tehnologiei Web este explozivă. Numărul de servere cuplate în Internet și numărul de persoane conectate cunosc o rată anuală incredibilă. Dacă la începutul anului 1996 erau peste 5 milioane de servere în anul 2001 s-a ajus la 210 milioane. Cele 210 milioane servere sunt accesate de aproximativ 350-400 milioane de utilizatori.
CapitoLUL 1. NOȚIUNI TEORETICE
Prezentare a tehnologiilor World Wide Web (WWW)
Unul dintre cele mai importante și de succes servicii ale rețelei Internet, WWW-ul a fost creat la CERN (Centrul European de Cercetări Nucleare, Geneva), Elveția în anul 1989 de Tim Berners-Lee, Robert Caillau și echipa lor, dar dezvoltarea sa ulterioară a fost facilitată de programul client Mosaic, sub mediul X Window, de la NCSA (Centrul național pentru aplicațiile supercalculatoarelor, Universitatea Urbana-Champaign) furnizat gratuit din 1993, care avea o mare simplitate de utilizare și facilități multimedia.
WWW este un sistem distribuit de hipermedia funcționând în mod client-server prin Internet. Sistemul pune la dispoziție informațiile sub formă de hipertext (mixtură între text, grafică, elemente multimedia, plus referințe încrucișate). Pentru a căpăta acces la WWW, utilizatorul va fi nevoit să folosească un program client (user-agent) cum ar fi Lynx (în mod text) sau Mosaic și Netscape (în mod grafic) și bineînțeles va trebui să cunoască localizarea fizică a documentului dorit. Localizarea unui document hiper-text se exprimă sub forma de URL (Uniform Resource Locator), o modalitate flexibilă și eficientă de accesare a oricărei resurse Internet, prin oricare protocol (TELNET, FTP, Gopher, HTTP, mail) bazat pe TCP/IP.
Modul de dialogare între clienți și servere WWW se realizează prin protocolul HTTP (HyperText Transfer Protocol). Un document WWW trebuie în prealabil formatat (sau 'marcat') cu ajutorul limbajului HTML, marcaj ce va descrie structura logică a documentului și va fi procesat de programul client. Orice astfel de document poate cuprinde legături de tip hipertext, indicate prin zone de text sau imagini, conducându-l pe cititor fie în alt punct al aceluiași document, fie într-un alt document, care poate să se găsească stocat local (pe serverul curent) sau la distantă (pe oricare alt server Web din lume). Aceste legături încrucișate între miile și sutele de mii de servere WWW realizează o adevărată pânza de păianjen (web) planetara (world-wide) de unde vine și denumirea WWW, iar utilizatorul navighează în ciber-spațiul reprezentat de această rețea.
Clientul WWW poate manipula documente multimedia datorită facilitaților puse la dispoziție de diferitele versiuni ale limbajului HTML ce prevăd includerea de imagini (formate grafice precum GIF sau JPG), fișiere audio și video. Mai mult, programele client se pot comporta ca programe client FTP, Gopher sau News (NNTP) și sunt capabile să gestioneze poșta electronică. În HTML pot fi concepute formulare (forms) pentru introducerea interactivă a datelor (texte, meniuri, liste, butoane de selecție etc.) și trimiterea lor către server spre a fi procesate. Îmbinarea limbajului HTML cu rutine scrise în alte limbaje (scripturi) conferă o sporită interactivitate a Web-ului.
Deși în prezent nu există standarde privind securitatea schimbului de informații între client și server, compania Netscape a propus protocolul SSL (Secure Socket Layer) pentru canale de comunicații fiabile, autentificate și sigure, protocol independent de aplicație, putând fi folosit și de alte programe TCP/IP (ca de exemplu FTP ori TELNET). O alternativă este S-HTTP (Secure HyperText Transfer Protocol) propus de NCSA.
Viitorul Web-ului este extinderea sa la cea de a treia dimensiune. În primăvara anului 1994, la prima conferință asupra problematicii Web-ului de la Geneva, s-a născut proiectul VRML (Virtual Reality Modeling Language), limbaj de descriere al spațiului virtual tridimensional bazat pe formatul Open Inventor al firmei Silicon Graphics. Succesul VRML va depinde de existența programelor client capabile a interpreta acest limbaj pentru diverse platforme. Aceasta va constitui cu siguranță o nouă sursă de aplicații, mai ales în arhitectură, tele-medicină, industria jocurilor. Tot în 1994 a apărut și termenul de telesensation, concept care combină grafica computațională, realitatea virtuală, programarea vizuală și telecomunicațiile, imaginile transmise de la distanță fiind percepute global.
1.2 Arhitectura Client – Server
1.2.1 Noțiuni generale
Tehnologiile de dezvoltare a aplicațiilor, client-server, ne indică faptul că avem de a face cu două entități distincte care comunică între ele, una îndeplinind cererile celeilalte. Cele două entități trebuie să poată lucra separat, fie pe calculatoare distincte, fie ca două procese independente în cazul în care este disponibil un sistem de operare multiproces. Unul dintre procese, procesul server, rulează în permanență în gol, așteptând să primească sarcini de executat. Un server poate în general deservi mai multe procese client fie direct, fie prin intermediul unor procese fie create câte unul pentru fiecare client în parte. Procesul server trebuie să poată să fie găsit întotdeauna la aceeași adresă de către clienți (adică pe același calculator, la aceeași căsuță postală), pentru ca aceștia să îi poată comunica cererile. Clienții însă, pot lansa cererile de oriunde din rețea.
Desigur, între clienți și server trebuie să existe un limbaj comun în așa fel încât cererile adresate serverului să poată fi ușor întelese și rezolvate de către acesta. De multe ori, rezolvarea cererilor înseamnă returnarea unui set de date către client, selectat după dorințele acestuia. Diferența nu este prea mare deocamdată, fată de arhitectura clasică de rețea, Novell de exemplu. Serverul de fișiere Novell acceptă cererile de date venite de la stații și le prelucrează. Să luăm exemplul unui program xBase lucrând cu fișiere memorate în rețea, și care dorește să prelucreze datele dintr-un fisier DBF aflat pe un server. Să presupunem că programul nu vrea să prelucreze toate întregistrările din fisierul DBF, ci doar acelea care îndeplinesc o anumită condiție: au un câmp logic pe valoarea adevărat sau au o dată de înregistrare nu mai veche de o lună, etc. Care este soluția clasică? Aceea de a deschide fișierul de pe server și de a-i cere acestuia să transmită rând pe rând toate înregistrările aflate în fisier. Pe măsură ce aceste înregistrări sosesc la client, acestea sunt verificate dacă îndeplinesc condiția dată și, în caz de succes, sunt prelucrate.
Dezavantajul unei astfel de abordări este acela că toate înregistrările, indiferent dacă îndeplinesc sau nu conditia dorită, sunt transferate către client. O idee mai bună ar fi aceea că împreună cu cererea, să-i fie comunicată serverului și condiția care trebuie îndeplinită de către înregistrări pentru a putea fi prelucrate. În acest caz, serverul ar putea transmite spre client doar acele înregistrări care îndeplinesc condiția. În acest fel, traficul pe rețea este mult mai mic. În plus, clienții (în număr mare de obicei) nu trebuie să conțină în interior algoritmi sofisticați de selectare a înregistrărilor care îndeplinesc o anumită condiție. Acești algoritmi sunt memorați o singură dată, în interiorul serverului. Mai mult decât atât, datele originale sunt mereu protejate de server și memorate în orice format consideră serverul că este mai eficient. Clienții trebuie să cunoască doar formatul în care sosesc datele pe rețea, un format în general mult mai simplu.
Acestea sunt ideile care stau la baza unei arhitecturi client-server. Clienții comunică într-un limbaj standard cererile lor către server, iar acesta le execută indiferent dacă este vorba de cereri de selectare de date sau de actualizare a acestora. Într-un mod asemănător lucrează FoxPro atunci când lansează o cerere SQL-SELECT către un server SQL. Rezultatul cererii este memorat într-o tabelă temporară în memorie si poate fi prelucrat în același mod ca și o tabelă normală. Datele din memorie sunt o copie a acelora de pe server, modificarea lor duce doar opțional și la modificarea originalelor. Limbajul SQL în sine este un limbaj standard, des utilizat pentru comunicația dintre un server de baze de date și clienții acestuia.
Aplicația demonstrativă folosește o arhitectură de tip client-server pentru a selecta date dintr-un fișier de date. Comunicația între aplicații se face folosind protocolul TCP/IP. Atât serverul cât si clientul pot fi compilate sub Unix sau sub Windows. Sub Windows, este folosită implementarea de socluri TCP/IP standard, WINSOCK.DLL. Această implementare este foarte apropiată de implementarea standard BSD la nivelul interfeței de programare. Cele mai multe apeluri de rețea sunt identice. Serverul folosește un anumit port TCP/IP la care îl pot căuta clienții. Adresa Internet a calculatorului pe care rulează serverul trebuie dată ca parametru pe linia de comandă a clientului.
Fișierele de date sunt păstrate în format DBF pe calculatorul pe care rulează serverul. Rutinele de lucru cu fișiere DBF sunt scrise de mine, dar spațiul din revistă împiedică publicarea surselor lor. Funcțiile se pot compila pe DOS/Windows/Macintosh/Unix. Cunoașterea modului de memorare a datelor este un privilegiu al aplicației server. Aplicația client comunică serverului cererile sale printr-un soclu cu conexiune, sub formă de mesaje. Mesajele sunt de lungime variabilă, primii doi octeți ai acestora păstrând lungimea mesajului sub formă binară. Serverul analizează cererea și comunică înapoi datele solicitate.
În implementarea actuală, serverul nu poate deservi decât un singur client. Motivul acestei limitări este acela că faptul nu este important deocamdată iar spațiul în revistă limitat. O implementare care deservește mai mulți clienți este mai complicată în Windows, unde nu putem apela rutine de tip fork pentru crearea de aplicații.
Fenomenul client/server a constituit suportul unei adevărate mutații în arhitectura sistemelor informaționale, mutație vizibilă în prima parte a anilor '90. Prin combinarea ergonomiei de lucru specifice suprafețelor grafice de lucru, cu un control centralizat și unitar al datelor, s-au cristalizat o serie de avantaje: flexibilitate, scalabilitate, portabilitate, deschidere către diferite platforme de lucru etc.
Într-o tentativă de definiție ambiguă, client-server este un model de lucru în care mai multe programe autonome comunică prin schimb de mesaje. Sistemele client/server sunt sisteme informatice distribuite. Un client este un calculator care, prin intermediul unui mesaj, formulează o cerere de informații/servicii, cerere adresată unui alt calculator denumit server. Serverul, tot prin intermediul unui mesaj, furnizează informațiile/serviciile clientului, întreaga operațiune derulându-se de o manieră transparentă pentru utilizator.
În general, clienții sunt calculatoare personale (PC-uri) utilizate pentru activități de gestionare a datelor. Un post client se caracterizează prin faptul că: a) prezintă o interfață utilizator care e de obicei grafică (GUI); b) "formulează" interogări (cereri, consultări) sau comenzi pe care le "înaintează" serverului; c) transmite interogările/comenzile respective serverului prin intermediul unei tehnologii de comunicație; d) analizează datele din rezultatele interogărilor/comenzilor primite de la server, iar un server prin faptul că: a) furnizează un serviciu clientului; b) răspunde la interogările/comenzile clientului; c) ascunde detaliile sistemului client/server, făcând transparent dialogul dintre client și server.
Orice sistem distribuit este alcătuit din minimum trei componente principale:
– interfața cu utilizatorul (sistem de operare/mediu grafic)
– aplicația (prelucrările sau procesele)
– sistemul de gestiune a bazelor de date.
Toate organizațiile din ziua de azi guvernamentale, economice și majoritatea întreprinderilor mari și mici recunosc rolul central pe care aplicațiile software îl au în cadrul lor, aplicațiile având rolul reducerii costurilor și
imbunătățirii serviciilor față de competiție.
Această dezvoltare și necesitatea utilizării pe o arie mare a unor date de interes comun a dus la apariția, utilizarea și proiectarea modelului Client/Server, care oferă date distribuite, portabilitate între platforme și un acces standardizat la resurse.
Termenul de Client/Server provine de la metoda tradițională de accesare a unui computer central numit server de către computere aflate la distanță sau clienți într-o infrastructură de rețea. Serverele utilizează baze de date relaționale în stocarea și întreținerea datelor între care există referințe. Aceste referințe sunt menținute printr-o tehnologie denumită integritate referențială (referential integrity) care oferă mecanisme care acționează asupra datelor (trigger) și proceduri de stocare (stored procedure).
Acest model este o combinație a trei tehnologii: sistemul relațional de management al bazelor de date (DBMS), rețeaua și interfața client (bazată pe GUI/PC). Fiecare element contribuie în funcționarea platformei
având rolul său, dar independent în execuția funcțiilor sale.
Foarte multă lume consideră clientul și serverul ca fiind două entități hardware, dar de fapt sunt entități software. Trebuie înteles că modelul Client/Server implică o entitate software (clientul) care efectuează cereri, acestea fiind îndeplinite de o altă entitate software (serverul). Clientul este cel ce transmite o cerere server-ului, acesta o interpretează și apoi o efectuează. Pentru a putea îndeplini cererea serverul poate referi o sursă de informație (baze de date), să efectueze procesări asupra datelor, să controleze periferice sau să efectueze cereri adiționale altor servere. În foarte multe arhitecturi, un client poate face cereri la multiple servere și un server și un server poate deservi mai mulți clienți.
Relația între client și server este una de comandă/control, clientul inițiază cererea și serverul este cel ce o îndeplinește transmițând rezultatul clientului, aplicația fiind procesată prin divizarea ei între cele două entități iar transferul de date este bidirecțional.
Un server nu inițializează niciodată un dialog cu clienții. Clientul poate funcționa pe un server hardware și să efectueze cereri de la un server care rulează pe un alt server hardware sau pe un PC saz clientul și serverul pot funcționa pe același computer.
Spre deosebire de un sistem file/server în care datele sunt aduse de pe file server pentru a fi procesate pe o masină locală în acest sistem comenzile sunt transmise asupra bazelor de date localizate pe server,
rezultatul fiind transmis înapoi clientului pentru a fi vizualizat.
Arhitectura afectează toate aspectele software, ea trebuie să ia în considerare complexitatea aplicației, nivelul de integrare și interfațare cerut, numărul utilizatorilor, răspundirea lor geografică natura rețelelor și toate tipurile de tranzacții necesare înainte de a decide tipul arhitecturii.
De asemenea alegerea arhitecturii afectează timpul de dezvoltare, flexibilitatea precum și întreținerea aplicației. La majoritatea aplicațiilor end user se urmărește: prezentare, procesare și date. Arhitecturile Client/Server definesc cum aceste trei componente sunt împărțite între entitățile software și distribuite în rețea, există o varietate de moduri cum pot fi divizate și implementate, utilizarea unor astfel de arhitecturi putând aduce multe beneficii în viitor companiei permițând adaptarea la diferite standarde și tehnologii. Câteva din caracteristicile acestei arhitecturi sunt:
Centralizarea informației – într-un astfel de mediu , datele sunt stocate pe un server central și există un singur punct de control care administrează cererile aplicațiilor și platformelor. Aceste servere de baze de date utilizează un sistem de management al bazelor de date (DBMS) pentru a defini, stoca și manipula date .Serverul este generic, programatorii neavând nevoie să cunoască un limbaj anume pentru a accesa date. Utilizând tehnicile de identificare o organizație poate creea magazii de date de la diferite servere distribuite în diferite zone geografice. Această tehnică maximizează performanțele fără a compromite modelul centralizat și reduce probabilitatea existenței de date redundante în aplicații.
Serverul procesor central – preluând acest avantaj , organizațiile pot reduce procesarea redundantă prin utilizarea procedurilor trigger și de stocare. Server-ul este orientat în procese standard ca: menținerea unor reguli, validări, și referințe de integritate, iar prin intermediul funcțiilor de stocare pe un server comun datele pot fi manipulate corect din punct de vedere logic și viabile pentru o varietate de limbaje și unelte ale lor.
Performanțe – serverul este un computer dedicat să proceseze un set limitat de cereri de la clienți. Singura sa funcție este să proceseze cererile asupra bazelor sale de date. SQL oferă facilități eficient de utilizare a traficului în rețea deoarece doar subseturi ale datelor sunt transmise în rețea , în plus serverele și DBMS sunt desemnate să gestioneze baze de date masive fără o degradare simțitoare a performanțelor.
Securitate – serverele ce lucrează pe platforme ca UNIX , Windows NT sau OS/2 pot oferi o mai mare securitate pentru managementul bazelor de date în comparație cu file server-ele standard. Mecanismele de duplexing, mirroring și copiere permise administratorilor asigură evitarea dezastrelor, de asemenea aceste baze de date permit definirea de useri și parole care permit evitarea accesului unor persoane neautorizate.
Referitor la costurile unor astfel de arhitecturi, server-ele sunt cele ce necesită procesoare rapide, memorie, hard disc-uri mari și un sistem de operare, clienți care le accesează. Licențierea, instalarea și întreținerea unor sisteme ca Oracle, Sybase sau Informix necesită sute de mii de dolari iar dezvoltarea unor aplicații necesită memorie, mașini noi și noi sisteme de operare. Din acest motiv în prezent multe organizații care au utilizat mainframe- uri sau acomodat foarte ușor acestui mediu client/server care oferă o excelentă infrastructură pentru a asigura informație organizației asigurând integritate, viteză și securitate.
Cele mai populare tipuri de arhitecturi sunt cu doua entități(two-tier) și cu trei(three-tier).
1.2.2 Arhitectura two-tier
În această implementare, cele trei componente ale unei aplicații (prezentare, procesare și date) sunt divizate între două entități (tiers): codul aplicației client și bază de date server. O aplicație client dezvoltă un limbaj și un mecanism de interschimb pentru a transmite cererea server-ului. Prezentarea este deținută în exclusivitate de client, procesarea este împărțită între client și server și datele sunt stocate și accesate de pe server. PC-ul client își asumă întreaga responsabilitate a functionării logice a aplicației, timp în care motorul bazei de date verifică integritatea. Într-o astfel de topologie motorul datelor (data engine) este cel ce procesează cererile clientului, limbajul utilizat fiind o formă a SQL, transmiterea unei cereri presupune că aplicația client să cunoască sintaxa serverului sau aceasta să fie tradusă printr-o aplicație (API), totodată să se cunoască serverul, cum sunt organizate datele și denumirea lor. Datele transmise clientului pot fi manipulate de acesta cum doreste, datele de pe server fiind centralizate. Aceste medii dețin o varietate de structuri de date, totodată aceste arhitecturi bine în medii eterogene, aplicația client deținînd controlul orice modificare care apare în cadrul unui sistem ducînd doar la modificarea aplicației client.
Sistemul de securitate într-un astfel de mediu este complicat deoarece un user trebuie să dețină parole pentru fiecare server SQL, iar creșterea utilizatorilor poate duce la compromiterea securității bazelor aflate pe server. În prezent majoritatea aplicatiilor client/server sunt proiectate să lucreze cu produse middleware care duc la cresterea securității, ele deținând unelte de acces la date.
1.2.3 Arhitectura three-tier
Această arhitectură a apărut datorită limitărilor arhitecturii precedente, ea aduce ca noutate separarea prezentării , procesării și datelor în entități(tiers) software distincte. Aceleași tipuri de unelte care în arhitectura precedentă erau utilizate pentru prezentare, acum ele sunt dedicate doar
pentru prezentare.
Când clientul solicită o cerere pentru acces la date sau o procesare a datelor, cererea se face la nivelul de mijloc care este un server. Acest nivel poate efectua procesări de date sau cereri asemeni unui client la alte servere.
Serverele din nivelul mijlociu pot fi multi-treaded și pot fi accesate de clienți multipli, asemeni unei aplicații separate. Sistemele three-tier pot fi implementate utilizând o varietate de tehnologii, mecanismul de cerere al clientului de la server în majoritatea sistemelor este utilizat apelul procedurilor remote(RPC). Apelul unor astfel de proceduri de către client asigură sistemului o flexibilitate foarte mare în comparație cu apelurile SQL efectuate de client în arhitectura precedentă, aceasta datorită faptului în care parametrii necesari cererii efectuate de client sunt foarte ușor transmiși și specificațiile structurilor de date care preiau datele primite (if any), acest lucru permițând organizațiilor sau structurilor back-end(aflate pe servere) să poată să-și modifice configurările în sistem, datele să poată fi organizate ierarhic, relațional sau obiectual permițând firmelor să simplifice trecerea la noi tehnologii legate de organizarea bazelor de date, fără a fi nevoie de modificări la nivelul aplicației client.
Un alt avantaj este acela că având entități software separate permit o alocare flexibilă a resurselor. Entitățile mijlocii (servere) pot fi alocate dinamic și repartizate în funcție de necesitățile firmei. Traficul de rețea este redus având server-le nivelului mijlociu, preluând date de la structuri precise înainte să le distribuie la clienți în rețea, PC-urile client fiind dedicate doar prezentării, memoria și discurile fiind reduse.
Din punct de vedere al dezvoltărilor software modularitatea oferă reutilizarea unor subrutine cu efort minim reducând costurile.
În concluzie această arhitectură este un termen lung de funcționare al aplicațiilor indiferent de modificările apărute în afaceri, cod reutilizabil, întreținere usoară și ușurință în migrarea către noi platforme server și medii.
1.3 Concepția de bază de date
1.3.1 Esența noțiunii de bază de date
Sub bază de date înțelegem un depozit de date structurate. De obicei ele se creează pentru păstrarea și accesarea la anumite date, ce conțin informație despre un anumit domeniu de valori. Acest domeniu poate aparține atât activității umane, cât și lumii înconjurătoare. Fiecare bază de date reprezintă prin sine un sistem de date despre un domeniu de valori. Bazele de date ce se referă la aceleași domenii de valori, în diferite cazuri conțin date mai puțin sau mai mult detaliate despre ea. Nivelul de detalizare se determină reieșind din anumiți factori. De exemplu, scopul folosirii informației din baza de date și nivelul de complexitate a proceselor de producere ce există în domeniul de valori în condiții concrete.
1.3.2 Bazele de date relaționale
Dezvoltarea teoriei bazelor de date relaționale a căpătat o amploare nemaivăzută în domeniul aplicării tehnicii de calcul. Rezultatele obținute în teoria relațională au influențat esențial sistemele de gestiune ce se bazează pe celelalte două metode de date: ierarhic și rețea. Modelul relațional de date este aplicat pe larg și în bazele de date deductive.
“Revoluția relațională” a introdus mai multe idei valoroase în lumea bazelor de date. Printre acestea progrese tehnologice și beneficii ale sistemelor de gestiune ale bazelor de date pot fi menționate:
Tabelele sunt un mijloc simplu de reprezentare a datelor. Ele permit de a organiza datele în mod acceptabil. Extinderea modelului relațional a confirmat puterea de atracție a acestei reprezentări.
SQL este un standard de limbaje de interpelări foarte comod. El e un limbaj nonprocedural de manipulare a datelor și a contribuit mult la creșterea popularității sistemelor de gestiune ale bazelor de date relaționale.
Joncțiunile sunt instrumente puternice de asociere a înregistrărilor anterior independente. Apelând la joncțiune se pot crea noi seturi de înregistrări (așa numitele tabele virtuale).
Interpelări interactive. Căutarea și prelucrarea datelor în mod dinamic a adus la utilizarea largă a bazelor de date relaționale. Gestionarea tabelelor, vizualizarea interactivă și îmbunătățirea interactivă a contribuit ca utilizatorul ca utilizatorul să-și dea votul pentru sistemele relaționale.
Consistența datelor. Sistemele de gestiune relaționale asigură că nici un utilizator și nici o aplicație nu pot modifica baza de date, dacă modificare e în contradicție cu constrângerile de integritate.
Bazele de date relaționale reprezintă prin sine o mulțime de tabele de date. Legăturile între tabele poate să se reflecte în structura datelor, sau poate numai presupus, adică să fie prezente la nivel neformalizat.
Fiecare tabelă de date se reprezintă ca o mulțime de rânduri și coloane, unde coloanele corespund exemplarului obiectului, evenimentului sau acțiunii concrete, iar rândurile corespund atributelor ce caracterizează aceste obiecte, evenimente sau acțiuni.
Modelul relațional a fost primul exemplu de model de date formal și a fost propus de E. Codd în 1970. Prin model datele utilizatorului sunt reprezentate și manipulate în mod abstract. Modelul de asemenea presupune tehnici ce ajută administratorul de a detecta și corecta posibilele de proiectare ce pot apărea odată cu pregătirea datelor pentru implementare într-un SGBD concret.
Orice model de date se bazează pe trei componente:
Structuri de date. Structurile sunt definite de un limbaj de definire a datelor (data definition language). Datele în modelul relațional sunt structurate în relații bidimensionale. Elementele principale ale structurii relaționale sunt relațiile, tuplurile, atributele, domeniile.
Constrângerile de integritate. Prin integritatea datelor se subînțelege că datele rămân stabile, în siguranță și corecte. Integritatea în modelul relațional este menținută de constrângeri interne care nu sunt cunoscute utilizatorului.
Manipularea datelor. Relațiile pot fi manipulate utilizând un limbaj de manipulare a datelor (data manipulation language). În modelul relațional, limbajul folosește operatorii relaționali bazați pe conceptul algebrei relaționale. În afară de aceasta, există limbaje echivalente algebrei relaționale, cum ar fi calculul relațional orientat pe domeniu.
În sistemele obișnuite de gestionare a fișierelor câmpul este cea mai mică unitate accesibilă de date.
Se presupune că fiecare câmp poate conține un anumit tip de date (integer, real, character, string etc.), pentru care se specifică numărul necesar de octeți de memorie. Câmpul, bineînțeles, are și un nume. Făcând analogie, în modelul relațional fiecare coloană a unei linii dintr-un tabel corespunde noțiunii de câmp în fișiere.
Pentru organizarea cererilor către bazele de date relaționale a fost elaborat limbajul SQL (Structured Query Language, limbajul cererilor structurate), care ulterior a căpătat un caracter industrial în sistemele relaționale de dirijare a bazelor de date relaționale. De aceea, la trecerea de la o bază de date relațională la alta, utilizatorii și proiectanții folosesc același limbaj. Un alt plus al limbajului SQL este faptul că el este orientat la operații de nivel înalt cu datele. Efectuând o cerere, nu trebuie să avem grijă de problemele de acces inferior la date specifice pentru diferite baze de date, deoarece interpretarea cererilor ține cont numai de sistema concretă de gestionare a bazelor de date.
1.3.3 Structura relațională a datelor. Atribute și domenii
Se numesc atribute sau nume de atribute mulțimea nevidă de elemente A1, A2, …,An. Mulțimea U={A1, A2,…,An} se numește unei baze de date relaționale sau mulțime universală.
Domeniul unui atribut Ai din U, n, notat cu dom(Ai), este o mulțime finită de valori de același tip care le poate primi atributul Ai.
Domeniul este simplu, dacă elementele sale sunt atomice (adică nu pot fi descompuse din punct de vedere al SGBD – ului). Atributul care are un domeniu de valori simplu se numește atribut atomic.
În modelul relațional fiecare tabel se spune că reprezintă o relație. Atributele sunt niște identificatori pentru a diferenția și a marca coloanele tabelului. Deci, câmpul sau numele de coloană e și un atribut. Toate atributele ce apar într-un tabel trebuie să fie distincte și să fie incluse în universul U. Atributele au un caracter global în baza de date: dacă un nume denotă două coloane în tabele distincte în aceeași bază de date, atunci el reprezintă același atribut.
Relația tabelară cu i linii și j coloane are i*j elemente. Fiecare element este o valoare dintr-un domeniu simplu. Cu toate că atributele în universul U trebuie să fie distincte, domeniile acestor atribute nu trebuie neapărat să fie disjuncte.
1.3.4 Tupluri
În sistemele cu fișiere, o mulțime de câmpuri ce sunt concepute ca o unitate de salvare și căutare se numesc înregistrare. Înregistrarea are un format specific și depinde de tipurile de date ale câmpurilor. O linie dintr-o relație tabelară corespunde înregistrării din fișiere și în teoria relațională se numește tuplu.
Fie R o submulțime a universului U, R∩U, unde R0 și fie dom(R) domeniul mulțimii R. Se numește tuplu o funcție, t:R dom(R), din R în dom(R), adică
t = {(Ai1, a1),…,(Aik, ak)},
unde orice Aij, 1n, este un atribut în R și un argument al lui t, iar orice aj, 1 j k, este o valoare în dom(Aij).
Se poate menționa faptul că în tuplul t = <a1…ak|Ai1…Aik> distingem două componente – string-ul de atribute Ai1…Aik care este invariant în timp și string-ul de valori a1…ak, care este foarte dinamic. Partea invariantă a tuplului vom numi-o schema tuplului (se mai notează sch(t)). Deci expresia “tuplul asupra R” devine clară și este echivalentă expresiei “tuplul t cu schema R”.
Pentru comoditate notațională, un tuplu cu numele t și schema R se va nota uneori
t(R) = t(Ai1)t(Ai2)…t(Aik).
Deci putem concepe tuplul t(R) ca un tuplu variabilă asupra R și fiecare componentă t(Aij), j , cu un domeniu variabil. Dacă tuplul t(R) are o formă constantă, adică string-ul lui de valori este <c1…ck> și aceste valori sunt în dom(R), el se numește tuplu constantă, cu un domeniu variabil. Dacă tuplul t(R) are o formă constantă, adică string-ul lui de valori este <c1…ck> și aceste valori sunt în dom(R), el se numește tuplu constantă.
Altfel spus, între unu sau mai multe tabele pot exista relații de subordonare. Relațiile de subordonare determină că fiecărei înscrieri în tabela principală (denumită și tată) poate exista una sau mai multe înregistrări în tabela subordonată (fiică).
Există trei tipuri de legături între tabele:
“unul – la – unul” – când fiecărei înregistrări din tabela tată îi corespunde o singură înregistrare în tabela fiică.
“unul – la – mai multe” – când unei înregistrări din tabela tată îi corespunde una sau mai multe înregistrări în tabela fiică.
“multe – la – multe” – când la o înregistrare din tabela tată în tabela fiică corespund mai multe înregistrări, și în tabela fiică înregistrăriile date corespund cu mai multe înregistrări în tabela tată.
Să examinăm legătura ce se întâlnește cel mai des in bazele de date, și anume relația “unul – la – mai multe”. Tabelele sunt legate între ele prin intermediul unor câmpuri specificate anterior. Aceste câmpuri se numesc câmpuri de legătură.
Sunt posibile două schimbări în urma cărora se va pierde integritatea legăturilor între tabelul tată și tabelul fiică: schimbarea valorii câmpului de legătură în tabelul tată fără a schimba valoarea câmpului de legătură în tabelul fiică.
Schimbarea valorii câmpului de legătură în una din înregistrările tabelei fiică și ne schimbarea valorii respective în tabelul tată.
În primul caz dacă se modifică valoarea câmpului de legătură în tabelului tată sau înregistrarea dată este ștearsă din baza de date, este necesar de a șterge datele respective în tabelul fiică.
Dacă modificarea are loc conform cazului doi, atunci putem obține niște câmpuri care nu vor fi accesate niciodată din program, deoarece poate să nu existe nicio înregistrare în tabelul fiică unde valoarea câmpului de legătură să coincidă cu valoarea câmpului de legătură din tabelul tată.
Ambele aceste cazuri duc la pierderea integrității datelor în baza de date cea ce nu-i de dorit. De aceea e necesar de prevăzut tot prin mijloace de soft. Pentru a evita aceasta trebuie folosită metoda schimbărilor cascadate. Această metodă prevede:
Trebuie de interzis schimbarea valorii câmpului de legătură în prima tabela fără a modifica valorile câmpului de legătură în a doua tabelă și invers.
Dacă ștergem înregistrarea din primul tabel, atunci trebuiesc șterse toate înregistrările respective în a doua tabelă.
1.3.5 Relații și scheme
Fie R o submulțime a universului U.
Relația r asupra R este o mulțime finită de tupluri cu schema R.
Aritatea relației r este egală cu cardinalitatea mulțimii R.
Cardinalitatea relației r este numărul de tupluri în ea.
Fie RU și relația r asupra lui R. Mulțimea de atribute R se numește schema relației r (notată cu sch(r) = R).
Baza de date relațională (sau simplu „baza de date”) este o mulțime finită de relații,
db = <r1,…,rm >, unde ri este o relație cu schema Ri, m.
Schema bazei de date este mulțimea schemelor relațiilor ce formează baza de date,
Db = <R1,…,Rm > ,unde Ri = sch(ri).
Deci schema unei relații este o expresie a priorităților comune și invariante ale tuplurilor ce compun o relație. Schema unei relații mai este cunoscută sub denumirea de intensia unei relații. Relația se mai numește extensie. Extensia reprezintă mulțimea tuplurilor care compun la un moment dat relația, mulțime care este variabilă în timp.
Prin intermediul celor menționate anterior se poate spune că:
Ordinea coloanelor e nesemnificativă;
Valorile atributelor în ri sunt atomice fiindcă domeniile sunt simple.
Într-o relație nu există coloane cu nume duplicate, fiindcă atributele Aij, 0k, sunt elemente ale mulțimii Ri.
Ordinea tuplurilor în ri este nesemnificativă, fiindcă ri este o mulțime.
Relația ri nu are tupluri identice, fiindcă ri este o mulțime de tupluri.
Relațiile ce se stochează fizic și formează baza de date se numesc relații de bază. Există, însă, și situații în care extensia nu se memorează în baza de date. Este cazul așa – numitelor relații virtuale, cunoscute și sub numele de relații derivate sau viziuni. Relația virtuală nu este definită explicit ca relația de bază, prin mulțimea tuplurilor componente, ci implicit pe baza altor relații. Relațiile de bază sunt proiectate de administratorul bazei de date, în timp ce viziunile sunt definite de utilizatorii bazei de date.
Relațiile asupra unei mulțimi de atribute pot avea un nume, sau pot să nu aibă, dacă ele sunt identificate în mod unic de schemele sale. Numele relației se scrie de obicei cu minuscule.
1.3.6 Tipuri de constrângeri
Constrângerile de integritate, numite și restricții de integritate definesc cerințele pe care trebuie să le indeplinească datele din baza de date pentru a putea fi considerate corecte, coerente în raport cu lumea reală pe care o reflectă.
Constrângerile sunt principalul mod de integrare a semanticii datelor în cadrul modelului relațional. Mecanismele de definire și verificare ale acestor restricții reprezintă instrumentele principale de control al semanticii datelor. În modelul relațional, constrângerile sunt studiate mai ales sub aspectul puterii lor de modelare și al posibilității de verificare a respectării lor.
Constrângerile de integritate pot fi divizate în linii mari în două grupuri: constrângeri de comportament și dependențe între date.
Constrângerile de comportament specifică caracteristicile independente ale unui atribut (sau domeniu). Ele exprimă semantica elementelor domeniilor.
1.3.7 Chei. Tipuri de chei
Întrucât relația reprezintă o mulțime de tupluri, iar o mulțime nu poate conține elementele duplicate, relația nu poate prezenta tupluri identice. Deci tuplurile sunt unice și trebuie să existe posibilitatea identificării lor în cadrul unei relații. Identificarea unui tuplu fără a consulta toate componentele tuplului a dus la apariția noțiunii de cheie.
Fie U mulțimea universală de atribute, RU și R0. Mulțimea K de atribute, unde KR, se numește cheie pentru schema R (sau pentru relația r cu schema R), dacă ea posedă următoarele proprietăți:
(1) Pentru oricare două tupluri t1 și t2 avem t1[Kt2[K];
(2) Nici o submulțime K1 proprie a lui K2 nu posedă proprietatea (1).
Proprietatea (1), numită restricția de unicitate a cheii, permite K-valorilor să identifice în mod unic toate tuplurile dintr-o relație. Însă respectarea proprietății de unicitate poate fi complicată, dacă însăși K conține o cheie K1 și KK1. În acest caz, cu toate că atributele din K sunt suficiente de a atinge scopul, unele din ele nu sunt necesare, deci pot fi eliminate din cheie fără a se efectua unicitatea. Dacă, însă, K este o submulțime proprie a unei chei, atunci utilizarea a astfel de K-valori pentru căutarea datelor va descoperi tupluri ce coincid pe toate valorile atributelor din K.
Proprietatea (2) ne asigură că o cheie K constituie numai acele atribute ce sunt necesare și suficiente pentru a determina univoc pe celelalte. Cu alte cuvinte K-valorile întotdeauna asigură un grad exact de informație nici mai mult, nici mai puțin, pentru a găsi un tuplu unic într-o relație.
1.3.8 Noțiune de supercheie și cheie primară
Mulțimea de atribute ce posedă proprietatea (1) se numește supercheie.
Deci cheia este o supercheie minimală. Orice cheie e și supercheie. Afirmația inversă nu e corectă.
Este evident că o mulțime vidă nu poate servi drept cheie a unei relații ce conține mai mult de un tuplu. Orice relație are cel puțin o cheie. La limită cheia este definită fie dintr-un singur atribut, fie din totalitatea atributelor din schema relației respective.
Într-o relație sunt posibile existența mai multor chei. Se spune în acest caz, că relația posedă mai multe chei candidate. În această caz se va stabili una din cheile candidate de către administrator să servească în mod efectiv la identificarea unică a tuplurilor. Ea primește numele de cheie primară. Primare se vor numi și domeniile atributelor ce formează o cheie primară.
Cheia primară a unei relații se numește cheie simplă, dacă este constituită dintr-un singur atribut, iar atunci când este alcătuită din mai multe atribute este denumită cheie compusă.
Așadar, prin cheie primară înțelegem un câmp sau un set de câmpuri care identifică univoc înregistrarea. În tabel nu trebuie să existe două sau mai multe câmpuri cu aceleași valori a cheii primare. Cheia primară nu trebuie să conțină câmpuri, ștergerea lor din cheia primară s-ar reflecta asupra unicitatății cheii.
De unicitatea cheii primare se ține cont în program. În primul caz la adăugarea unui câmp nou, aplicația ce lucrează cu baza de date găsește valoarea maximală corespunzătoare cheii primare și o incrementează cu 1. În al doilea caz unicitatea se realizează prin câmpurile autoincrimentabile. Pentru el acțiunile indicate se efectuează de însăși baza de date.
O cheie externă reprezintă un atribut (grup de atribute) dintr-o schemă Ri definit (definite) pe același (aceleași) domeniu (domenii) ca și cheia primară a altei scheme Rj. Relația ri se numește relație care referă, iar rj poartă numele de relație referită.
Unele atribute pot avea așa numitele valori nedefinite sau necunoscute notate cu “nul”. Însă sunt bine cunoscute constrângerile formulate prin următoarele reguli numite reguli de actualizare (inserare, modificare, și eliminare) a relațiilor.
Constrângerea entității: cheia primară a unei relații de bază nu poate conține valori “null”;
Constrângerea referirii: dacă atributul A al unei chei compuse relației rI este definit pe un domeniu primar, atunci trebuie să existe o relație de bază rj cu o cheie primară B încât orice A-valoare din ri să apară în calitate de B-valoare în rj.
Constrângerea entității impune ca la inserarea unui tuplu, valoarea cheii să fie cunoscută, pentru a putea verifica faptul că această valoare nu este deja încărcată (respectarea constrângerii de unicitate a cheii). Cu valori “null” cheia își pierde rolul de identificator de tuplu.
Constrângerea referențială impune ca într-o relație ri, care referă o relație rj, valorile cheii compuse să figureze printre valorile cheii primare din relația rj pentru atributele compatibile.
E de dorit ca, cheile pe parcursul timpului să nu să se schimbe. Cheile trebuie să rămână chei pentru orice eventuale extensii. Prin urmare determinarea cheii unei relații necesită cunoașterea semanticii relației respective, nu numai celei din momentul în care se stabilește cheia. Dacă relația posedă o singură cheie s-ar dori să evidențiem numai cheia primară mai departe vom sublinia atributele ce formează această cheie.
Regulile de actualizare a bazei de date fac parte din cele trei componente ale modelului relațional de date. Vom examina cele trei operații de actualizare a datelor: inserarea datelor, ștergerea datelor și modificarea datelor.
Scopul operației de inserție constă în adăugarea unui tuplu într-o relație concretă. Fie că în relația r(A1A2…An) vrem să introducem date. Operația de inserție, a unui tuplu în relația r poate avea forma:
Add(r;<a1a2…an|A1A2…An>).
În cazul că ordinea atributelor în relație e cunoscută, e acceptabilă o formă mai scurtă a operației:
Add(r;<a1a2…an>).
Rezultatul operației poate să eșueze din următoarele cauze: tuplul de inserție e definit pe o mulțime de atribute ce nu corespunde schemei relației; valorile componentelor tuplului nu sunt luate din domeniile corespunzătoare; în relație deja se găsește un tuplu cu asemenea componente cheie. În toate aceste cazuri operația Add păstrează relația r intactă.
Operația de ștergere se utilizează pentru eliminarea conținutului relațiilor. Pentru relația r de mai sus, operația de ștergere se reprezintă:
Del(r;<a1a2…an|A1A2…An>).
În cazul când numele de atribute sunt sortate, poate fi utilizată următoarea notație scurtă:
Del(r;<a1a2…an>).
În realitate o parte di informația de mai sus poate fi redundantă pentru determinarea tuplului destinat ștergerii. E suficientă definiția valorilor atributelor cheie. Dacă K=B1B2…Bm este cheia relației r, atunci e utilă următoarea formă a operației Del:
Del(r;<b1b2…bn|B1B2…Bn>).
Rezultatul de ștergere a tuplurilor nu se lasă mult așteptat. Tuplul e eliminat, dacă el este relație. În cazul când tuplul lipsește – relația rămâne intactă. Nu se pune nici o restricție asupra eliminării ultimului tuplu în relație: relația vidă se admite.
Uneori, în loc de eliminarea unui tuplu e mai efectivă schimbarea unei părți a tuplului. Schimbarea se face cu operația de modificare. Dacă C1C2…CkA1A2…An, atunci operația de modificare poate avea forma:
Ch(r;<a1a2…an|A1A2…An>;<c1c2…ck|C1C2…Ck>).
Dacă mulțimea K=B1B2…Bm este cheia relației r, atunci expresia de mai sus poate fi redusă la:
Ch(r;< b1b2…bn|B1B2…Bm>;<c1c2…ck|C1C2…Ck>).
Operația de modificare este foarte utilă. Același rezultat poate fi obținut prin intermediul operațiilor de înserare și ștergere sunt specifice și operației modificare.
Operațiile binare asupra relațiilor: uniunea, intersecția și diferența, necesită ca operanzii(relațiile) să fie definiți pe scheme compatibile.
Vom spune că două relații r(R) și s(S) sunt compatibile (sau au scheme compatibile), dacă între R și S există o corespondență biunivocă f: pentru orice atribut A din R, există un atribut B în S încât dom(A)=dom(B), B=f(A) și A=f-1(B), unde f-1 este funcția inversă funcției f.
Uniunea a două relații compatibile r(R) și s(S), notată cu rs, e o relație definită pe schema R sau S și constă din tuplurile ce aparțin relațiilor r sau s, adică
rs = {t | t r t s}.
Operația uniunea posedă proprietățile de asociativitate și de comutativitate.
Intersecția a două relații compatibile r(R) și s(S), notată cu rs, este o relație definită pe schema R sau S și constă din tuplurile ce aparțin concomitent relațiilor r și s, adică:
rs = {t | t r t s}.
Diferența a două relații compatibile r(R) și s(S), notată cu r \ s. este o relație definită pe mulțimea de atribute R sau S și are în calitate de tupluri, toate tuplurile din relația r ce nu sunt în s, adică
r \ s = {t | t r ts}
Prin proiectarea bazei de date se subînțelege proiectarea unei scheme logice care ar înlătura apariția unor anomalii în lucrul cu baza de date, asigurând totodată facilități și performanțe sporite la expluatarea ei.
Anomaliile care apar în lucrul cu baza de date sunt cunoscute sub anomalii de actualizare a datelor. Ele sunt puse în legătură cu dependențele care se manifestă între atribute. O asemenea abordare a anomaliilor de actualizare permite caracterizarea riguroasă a gradului de perfecțiune a schemei bazei de date și face posibilă definirea unor tehnici formale de proiectare a unor astfel de scheme.
Prelucrarea datelor o perioadă de timp, cum se întâmplă în bazele de date, poate provoca o serie de probleme personalului responsabil de menținerea integrității datelor. Anomaliile în date cum ar fi datele duplicate sau pierderile de informații pot apărea, dacă datele nu sunt organizate într-un mod rezonabil.
Cercetările la zi și experiența acumulată în domeniul proiectării bazelor de date au arătat că unele aranjări de date lucrează mai bine decât altele. S-au elaborat tehnici de analiză a datelor și organizare a lor într-o structură flexibilă și stabilă.
Procesul de normalizare constă în aplicarea unui set de reguli predefinite asupra unei aranjări a datelor cu scopul reducerii structurii complexe și transformării lor în structuri mai mici și stabile ce vor facilita manipularea și menținerea datelor.
La fiecare pas o regulă este aplicată, datele pot fi restructurate și când regula este satisfăcută se spune că datele sunt într-o formă normală.
Deci normalizarea este o abordare formală de analiză și grupare a datelor în structuri mai eficiente ce se pot acomoda viitoarelor actualizări. În afară de aceasta normalizarea minimizează impactul ce poate avea loc asupra aplicațiilor în procesul actualizării bazei de date.
Pentru a produce o bază de date bine proiectată de obicei se pornește de la relații nenormalizate și printr-o serie de pași se descompun structurile de date pentru a obține schema finală a bazei de date.
Unul din scopurile, pe care și le propune să le atingă modelul relațional este eliberarea utilizatorului de a specifica căile de acces la date. Această problemă este cunoscută sub denumirea de problema navigației logice. Însă, dacă baza de date constă din mai multe relații independența navigației logice nu este asigurată.
Formulând o interpelare (cerere) la baza de date ce se referă la mai multe relații din baza de date e comod a interpreta lumea reală ca o singură relație, schema căreia include toate atributele din schemele relațiilor bazei. Această relație se numește relație universală, iar schema ei – schema relației universale sau schema universală.
Modelul relației universale realizează complet independența navigației logice, excluzând astfel definirea unor căi de acces neoptimale din partea unor utilizatori neinițiați. Deci acest model facilitează interacțiunea sistem – utilizator, cerând de la ultimul doar cunoașterea atributelor și semanticii.
Cea mai strictă formă de realizare a relației universale constă în construirea propriu – zisă a bazei de date dintr-o singură relație pe mulțimea de atribute universală U. Dar aici apar multe dezavantaje. În primul rând, nu toate tuplurile vor avea valori definite. În al doilea rând, păstrarea tuturor datelor într-o singură relație inevitabil va genera o serie de anomalii de actualizare.
De aceea, baza de date, constă dintr-o mulțime de relații normalizate definite pe submulțimi de atribute ale schemei relației imaginare universale. Însă în acest caz baza de date trebuie să satisfacă unele condiții.
Una din condiții presupune că baza de date trebuie să posede proprietatea joncțiunii fără pierderi, descompunerea relației universale imaginare conservă dependențele și că atributele în schema universală joacă un singur “rol”. Astfel ambiguitățile sunt excluse.
O altă importantă proprietate a descompunerii unei relații r(R) pe mulțimea de scheme R1,…,Rm, unde R= R1,…,Rm, constă că mulțimea de dependențe valide în r(R) să se deducă din dependențele valide în proiecțiile R1(rRm(r).
Fie F o mulțime de dependențe funcționale asupra schemei R. Proiecția mulțimii F asupra unei mulțimi de atribute Z, notată z(F), este mulțimea de dependențe XY din F+ și XYZ. Să observăm că dependența XY nu neapărat trebuie să aparțină mulțimii F+. E de ajuns ca ea să aparțină închiderii F, adică F|-XY.
Dependențele sunt constrângeri de integritate asupra relațiilor cu schema dată. Dacă în dependențele proiectate nu ar urma mulțimea F, atunci s-ar găsi o descompunere R1(r),…,Rm(r) a relației r(R) ce nu satisface mulțimea de dependențe F, dar posedă proprietatea joncțiunii fără pierderi.
Anomaliile, care apar în lucrul cu baza de date, se produc datorită dependențelor “nedorite” care se manifestă între atributele din cadrul schemelor relațiilor din baza de date. Aceste dependențe determină creșterea redundanței datelor și reducerea flexibilității structurii bazei de date, făcând extrem de dificil lucrul cu ea.
În primul rând, o schemă poate fi ineficientă fiindcă conține o mulțime de date redundante.
În al doilea rând, o bază de date “rea” poate limita posibilitatea de înserare a datelor. Într-o relație nu pot fi introduse date despre o entitate până nu se cunosc alte date conform restricțiilor de integritate ale entității.
Ca o consecință a primei cauze actualizarea unei baze redundante poate duce la situația când ea va conține fapte logice contradictorii. O parte de date pot rămâne nemodificate. Deci o bază de date “rea” duce la apariția unor inconsistențe la modificarea datelor.
În al patrulea rând, pot apărea pierderi de date la ștergere. În mod normal, prin operația de ștergere trebuie să se poată elimina din baza de date numai datele pe care dorim să le ștergem. Atunci când, concomitent cu aceste date sunt șterse și altele, care numai pot fi reconstituite din baza de date, spunem că la operația de ștergere se produc pierderi de date. [2]
1.4 Sisteme de administrare a continutului – CMS
Un sistem de administrare a conținutului sau CMS (în engleză Content Management System, CMS) este un sistem software creat pentru automatizarea cât mai deplină a gestiunii conținutului, în special a siturilor web. Scopul este de a reduce sau elimina intervenția programatorilor la editarea și administrarea siturilor lor. CMS-ul facilitează organizarea, controlul și publicarea de documente sau alt tip de conținut, cum ar fi imagini și resurse multimedia. Un CMS facilitează adesea crearea in comun de documente. Un "CMS web" este un CMS cu facilități adiționale pentru ușurarea publicării de conținut pe diversele situri.
Date fiind complexitatea siturilor web și inexistența unui model standard, definirea unitară a CMS precum și a părților sale componente este foarte greu de realizat. Granițele dintre portale, sisteme CMS, DMS (Document Management System – Sistem de Administrare a Documentelor) și ECS (E-commerce Systems – Sisteme de Comerț Electronic) nu sunt evidente și acestea adesea se suprapun.
Sistemele de administrare a conținutului web sunt folosite adesea pentru stocarea și controlul documentelor cum ar fi articole, manuale tehnice sau de alte naturi, ghiduri de vânzări și broșuri de marketing. Un CMS poate avea următoarele funcții:
– crearea și transferul de documente și material multimedia
– identificarea utilizatorilor cheie și a rolului lor în gestionarea conținutului
– atribuirea de roluri și responsabilități diferitelor categorii de conținut
Definirea de sarcini de lucru, adesea cuplate cu trimiterea de mesaje în funcție de eveniment, astfel încât managerii de conținut sunt alertați automat când intervin schimbări ce îi privesc urmărirea și organizarea mai multor versiuni ale aceluiași element de conținut.
Publicarea conținutullui într-o bibliotecă, pentru a sprijini accesul la conținut. În ultima vreme biblioteca (bază de date) este o parte tot mai importantă a sistemului; ea poate fi ușor interogată.
Majoritatea sistemelor folosesc o bază de date pentru stocarea conținutului, și un layer de prezentare pentru afișarea acestuia vizitatorilor obișnuiți, bazat pe un set de modele sau mostre (templates). Administrarea se face în mod normal printr-un browser web, dar unele sisteme pot fi modificate și pe alte căi.
Un CMS web diferă de creatoare de situri precum FrontPage sau Dreamweaver prin faptul că un CMS permite utilizatorilor fără cunoștințe tehnice să facă schimbări în sit cu training puțin sau deloc. Un CMS este ușor de folosit și permite utilizatorilor autorizați să administreze un sit web. Un CMS este mai mult o unealtă de întreținere decât de creere de sit-uri.
Un sistem de administrare a conținutului web oferă următoarele facilități cheie:
Templateuri automate – Creează templateuri vizuale standard care pot fi aplicate automat conținutului nou și existent, creând un punct central pentru schimbarea interfeței unui sit web.
Conținut ușor editabil – Odata ce conținutul e separat de reprezentarea vizuală a sitului, editatul și manipulatul devin de obicei mult mai ușoare și mai rapide. Cele mai multe CMS-uri includ unelte de editat WYSIWYG ce permit personalului ne-tehnic să creeze și să editeze conținut.
Scalable feature sets – Cele mai multe CMS-uri au pluginuri sau module care pot fi instalate ușor pentru a extinde funcționalitatea.
Upgrade-uri după standardele web – Soluțiile active de administrare a conținutului primesc de-obicei update-uri regulate care includ noi facilități și țin sistemul la standardele web.
Administrarea workflow-ului – Workflowul este procesul creării de sarcini secvențiale și paralele care trebuiesc indeplinite de către CMS. De exemplu, un creator de conținut scrie un articol care nu este publicat pe sit până cand nu este curățat de editorul de copii și aprobat de editorul șef.
Administrarea documentelor – CMS-urile pot veni cu mijloace de gestionare a ciclului de viață al unui document, de la creare, prin revizii, publicare, arhivare și distrugere.
Un sistem de administrare a continutului unui sit web rulează des pe serverul sitului. Majoritatea sistemelor oferă acces controlat pentru diferite ranguri de utilizatori cum ar fi administratorii, editorii si creatorii de conținut. Accesul se face de obicei prin browserul web, posibil combinat cu FTP pentru uploadarea conținutului.
Creatorii de conținut incarcă documentele lor în sistem. Editorii acceptă sau resping documentele, editorii de layout aranjează sit-ul. Editorul șef este deci responsabil cu publicarea conținutului pe sit-ul live. CMS-ul controlează și ajută la controlarea fiecărui pas din workflow, incluzând partea tehnică a publicării documentelor pe unul sau mai multe servere web.
Conținutul și toate informațiile care au legătură cu sit-ul sunt de-obicei stocate într-o bază de date relaționala pe server. CMS-ul ține în mod normal evidența edițiilor anterioare ale sit-ului și a edițiilor nepublicate încă. Paginile controlate și publicate printr-un CMS pot fi apoi văzute de vizitatorii sitului.
Următorii termeni sunt adesea folosiți referitor la CMS-urile web, dar nu sunt nici standard nici universali:
Bloc – Un bloc este un link către o secțiune din situl web. Blocurile pot de-obicei fi setate să apară în toate paginile sitului (de exemplu pe un meniu de navigație) sau doar în pagina principală.
Modul – Un modul de conținut este o secțiune a sit-ului, de exemplu o colecție de articole de știri, o secțiune FAQ, etc.
Temă – O temă definește aparența fiecărei pagini din sit, controlând proprietăți cum ar fi culori și fonturi.
CMS-uri bazate pe module – Majoritatea sarcinilor din ciclul de viață al unui document sunt îndeplinite de module ale CMS-ului. Module comune sunt crearea și editarea de documente, transformarea și publicarea.
TODDS CMS – TODDS (din engleza "Totally Organic Data Driven System"). E o unealtă nouă care ajuta departamentele IT să-și facă slujba mai eficient, în special când ar trebui să aparțină unei organizații de tip marketing.
CMS bazat pe web – O altă apropiere față de construirea de CMS-uri folosește baze de date cum ar fi PostgreSQL, MySQL sau MS SQL, și limbaje de scripting cum ar fi Coldfusion, PHP, JSP sau ASP pentru interacțiuea cu datele, pentru a le introduce în conținutul vizual. Datele sunt compilate în pagini HTML sau alte documente și transformate folosind CSS. Aceste sisteme pot include un număr de alte funcții, cum ar fi forumurile, blogurile sau newsletterele e-mail.
CAPITOLUL 2 DESCRIEREA MIJLOACELOR INSTRUMENTALE
2.1 Limbajul HTML – Hipertext Markup Language
2.1.1 Noțiunea HTML – Hipertext Markup Language
Indispensabil în crearea paginilor Web, HTML este un descendent al limbajului SGML, folosit pentru dezvoltarea de documente hiper-text accesibile prin Internet. Acest capitol trece in revista o serie din caracteristicile, implementările și tendințele acestui limbaj.
2.1.2 Scurt istoric al HTML
Ca descendent al SGML-ului, limbajul HTML are o istorie care debutează cu publicarea în 1986 de către Organizația internațională pentru standardizare (ISO) a unui articol întitulat "Information Processing – Text and Office Systems – Standard Generalized Markup Language (SGML)". După trei ani, Tim Berners-Lee de la CERN înaintează o propunere – proiect ce a circulat sub numele de "HyperText and CERN" – de sistem de documente hipertext, denumit în octombrie 1990 World Wide Web. El scrie de asemeni prima aplicație Web, un pachet de server Web rulând pe calculatoare NeXT. În noiembrie 1990, Nicola Pellow începe să conceapă un navigator (browser) text care la sfârșitul aceluiași an era disponibil în cadrul CERN.
În mai 1991, CERN prezintă WWW la seminarul anual și browser-ele în mod linie pentru platforme ca VAX, RS6000 și SUN sânt disponibile pe grupurile de știri alt.hypertext, comp.sys.net, comp.text.sgml și comp.mail.multi-media (august 1991).
Dan Connolly se alătură proiectului Web, iar experiența sa în utilitare de documentare on-line și sisteme formale îl ajută să dezvolte specificația pentru HTML. Pe data de 15 ianuarie 1992 apare pentru prima dată, disponibil prin FTP anonim, un browser text conceput de CERN, interpretând noul limbaj HTML, prezentat și la AIHEP'92 – La Londe. Proiectului Web i se alătură Jean-Francois Groff și Carl Barker.
În 1993, primul navigator grafic, numit Mosaic, rulând sub X Window este proiectat de Marc Andreesen și făcut public de NCSA (luna februarie). Mosaic utilizează primul standardul HTML, bazat pe tag-uri, inspirat după SGML.
Urmează ulterior prezentarea standardului HTML 2.0 (IETF RFC 1866) care include abilități de afișare mai precisă a imaginilor, utilizarea de formulare, tabele, tipuri de legaturi etc. HTML 2.0 permite dezvoltarea masivă a Web-ului și toate browser-ele WWW moderne îl suportă fără restricții. În fapt, standardul HTML 2.0 doar pune în ordine anumite facilități practice apărute începând cu anul 1994. Netscape extinde o parte din specificațiile HTML 2.0 în 1996 adăugând o serie de tag-uri utile în versiunea foarte populară Netscape Navigator 2.0.
HTML+ se dorea a fi o încercare de a extinde HTML-ul, prima dată publicată de Dave Raggett în 1993 și prezentată la prima conferință Web în 1994.
O extensie a HTML+ a fost HTML 3.0 care n-a fost niciodată standardizată. Ea a fost propusă de tânărul pe atunci Consorțiu W3, format în 1994 de către CERN și MIT cu scopul de a alcătui un standard viabil al limbajului HTML și de a ghida conceperea de pagini Web.
În luna iulie 1996, consorțiul W3 anunță oficial standardul HTML 3.2 adăugând specificații pentru tabele, imagini, applet-uri, perfect compatibil cu HTML 2.0. În ianuarie 1997, acest standard a fost aprobat și toate navigatoarele recente se așteaptă a se conforma acestui standard.
Proiectanții de navigatoare (ca Netscape și, mai nou, Microsoft) au adăugat diferite facilități care nu apar definite de nici un standard HTML. De exemplu, Netscape Navigator 3.0 oferă posibilități de adăugare de elemente multimedia direct în paginile Web, fundaluri reprezentate de imagini, cadre (frames) etc. plus suport pentru script-uri Java interpretate direct de către client.
Următoarea versiune a HTML-ului dezvoltată de consorțiul W3, denumita Cougar, este standardul HTML 4.0, apărut relativ recent, în anul 1997, care aduce suport pentru accesibilitatea paginilor Web din partea persoanelor cu handicap, foi de stiluri interne, suport lingvistic și pentru formule matematice, evenimente etc. După cum stipulează inventatorul Web-ului și directorul W3C, Tim Berners-Lee: "Cu HTML 4.0, orice aplicație Web va fi independentă de navigator."
HTML 4.0 este disponibil în trei variante:
•HTML 4.0 Strict
•HTML 4.0 Transitional
•HTML 4.0 Frameset
Pentru a asigura fidelitatea și corectitudinea comunicațiilor pe WWW, consorțiul W3 a introdus HTML Validation Service (http://validator.w3.org/) care verifică dacă un anumit document respectă standardul HTML 4.0. În prezent, nu există încă un navigator care să suporte acest standard, dar se așteaptă apariția noilor versiuni care să se conformeze acestuia. De fapt, Tim Berners-Lee declară că HTML 4.0 n-a fost conceput pentru navigatoare ci pentru aplicații viitoare și produse Web.
2.1.3 Prezentare a limbajului HTML
Un document poate fi indentificat prin următoarele caracteristici fundamentale: structură, conținut și formă. Dacă forma de vizualizare este dependentă de programul de afișare a informațiilor conținute de acel document, structura și conținutul său trebuie să aibă un format general de reprezentare, pentru a asigura portabilitatea.
Format:
Formatul se specifică prin HTML, limbaj care conformându-se SGML-ului, acceptă un număr de tag-uri pentru formatarea documentului. Ca și în SGML, tag-urile se încadrează între < și >, putând exista tag-uri de început și de sfârșit. Fișierele HTML sânt fișiere ASCII obișnuite având extensia .html (sau .htm) și sânt divizate în două parți: antetul (head) și corpul (body).
Astfel, o pagină Web marcată cu tag-uri HTML are forma generală:
<html> <!– tag obligatoriu –>
<head> <!– început de antet –>
…
</head> <!– sfârșit de antet –>
<body> <!– început de corp –>
…
</body> <!– sfârșit de corp –>
</html> <!– sfârșit de document –>
Conform specificației HTML 3.2 pentru a fi identificat ca document SGML un fișier HTML trebuie precedat și de linia:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.2 Final//EN>
pentru a putea fi procesat și de analizatoarele SGML.
În cadrul antetului, printre altele, poate apărea titlul documentului (al paginii Web) specificat de tag-ul <title>:
<title>Faculty of Computer Science</title>
De obicei între <head> și </head> apar definiții de rutine scrise în limbaje script (ca JavaScript) pentru a fi siguri că sânt analizate și memorate de navigator (antetul e procesat primul).
Tag-uri:
În cadrul corpului pot apare diverse tag-uri:
• Stil de afișare
<b> (îngroșat), <i> (înclinat), <u> (subliniat), <strong> (intensificat), <big> (mai mare), <small> (mai mic), <sub> (indice), <sup> (exponent), <font> (dimensiune și culoare font), <pre> (text preformatat), <code> (cod sursă), <center> (centrat), <blink> (clipitor)
• Titluri
<h1> … <h6>
• Secțiuni
<div> (diviziuni), <p> (paragrafe), <hr> (linie orizontală), <br> (trecere la linie nouă)
• Liste
<ul> (lista nenumerotată), <ol> (lista numerotată), <li> (element de listă), <dir> (lista de directoare), <menu> (meniu)
• Imagini
<img>
• Tabele
<table> (început de tabel), <tr> (linie de tabel), <td> (definiție celulă), <th> (antet)
• Legaturi (ancore)
<a>
• Formulare
<form> (definiție), <input> (câmp de interogare)
• Cadre (frame-uri)
<frameset> (definire), <frame> (cadru), <noframes>
• Suport pentru alte limbaje
<applet>, <script>, <style>
• Suport multimedia
<embed> (extensie Netscape)
• Extensii
<meta>
• Entități speciale
< > & © etc.
În continuare, vom prezenta definițiile formale pentru o parte din tag-urile de mai sus, împreună cu atributele aferente, conform notației DTD.
• Corpul documentului
<!–========= Document Body ========–>
<!ENTITY % body.content "(%heading | %text | %block | ADDRESS)*">
<!ENTITY % color "CDATA"
– specificația de culori: #HHHHHH (RGB, în hexă) –>
<!ENTITY % body-color-attrs "
bgcolor %color #IMPLIED <!– culoare fundal –>
text %color #IMPLIED <!– culoare caractere –>
link %color #IMPLIED <!– culoare legaturi –>
vlink %color #IMPLIED <!– culoare legaturi vizitate –>
alink %color #IMPLIED <!– culoare legaturi active –>
">
<!ELEMENT BODY O O %body.content>
<!ATTLIST BODY
background %URL #IMPLIED – textura pentru fundalul documentului –
%body-color-attrs; – bgcolor, text, link, vlink, alink –
>
<!ENTITY % address.content "((%text;) | P)*">
<!ELEMENT ADDRESS – – %address.content>
• Secțiuni
<!ELEMENT DIV – – %body.content> <– tag-ul diviziune –>
<!ATTLIST DIV
align (left|center|right) #IMPLIED – alinierea textului –
>
<!– CENTER e o 'scurtătura' pentru DIV cu ALIGN=CENTER –>
<!ELEMENT center – – %body.content>
• Liste
<!– liste de definiții – DT pentru termen, DD pentru definiția lui –>
<!ELEMENT DL – – (DT|DD)+>
<!ATTLIST DL
compact (compact) #IMPLIED – stil compact –
>
<!ELEMENT DT – O (%text)*>
<!ELEMENT DD – O %flow;>
<!– liste ordonate OL și liste neordonate UL –>
<!ELEMENT (OL|UL) – – (LI)+>
<!–
Stil de numărare
1 numere arabe 1, 2, 3, …
a litere mici a, b, c, …
A litere mari A, B, C, …
i litere romane mici i, ii, iii, …
I litere romane mari I, II, III, …
–>
<!ENTITY % OLStyle "CDATA" – restrâns la: [1|a|A|i|I] –>
<!ATTLIST OL – liste ordonate –
type %OLStyle #IMPLIED – stil de numărare –
start NUMBER #IMPLIED – startul secvenței de numărare –
compact (compact) #IMPLIED – compactare –
>
<!– stiluri de 'bullet'-uri –>
<!ENTITY % ULStyle "disc|square|circle">
<!ATTLIST UL – liste neordonate –
type (%ULStyle) #IMPLIED – stil –
compact (compact) #IMPLIED – compactare –
>
<!ELEMENT (DIR|MENU) – – (LI)+ -(%block)>
<!ATTLIST DIR
compact (compact) #IMPLIED
>
<!ATTLIST MENU
compact (compact) #IMPLIED
>
<!– <DIR> Lista de directoare –>
<!– <DIR COMPACT> Ca mai sus, compactat –>
<!– <MENU> Lista de meniuri –>
<!– <MENU COMPACT> Ca mai sus, compactat –>
<!ENTITY % LIStyle "CDATA" – restrâns la: "(%ULStyle|%OLStyle)" –>
<!ELEMENT LI – O %flow – element de listă –>
<!ATTLIST LI
type %LIStyle #IMPLIED – stil –
value NUMBER #IMPLIED – valoare –
>
• Tabele
<!– locul de amplasare orizontală a tabelului în cadrul ferestrei –>
<!ENTITY % Where "(left|center|right)">
<!– alinierea orizontală a conținutului celulelor de tabel –>
<!ENTITY % cell.halign
"align (left|center|right) #IMPLIED"
>
<!– alinierea verticala a conținutului celulelor de tabel –>
<!ENTITY % cell.valign
"valign (top|middle|bottom) #IMPLIED"
>
<!ELEMENT table – – (caption?, tr+)>
<– un tabel e compus din titlu și rânduri –>
<!ELEMENT tr – O (th|td)*>
<!ELEMENT (th|td) – O %body.content>
<!ATTLIST table elementul de tabel –
align %Where; #IMPLIED – poziția relativă la fereastră –
width %Length #IMPLIED – lățimea relativă la fereastră –
border %Pixels #IMPLIED – cadru tabel –
cellspacing %Pixels #IMPLIED – spații dintre celule –
cellpadding %Pixels #IMPLIED – spațiere în cadrul celulelor –
>
• Imagini
<!ENTITY % Length "CDATA" – nn pentru pixeli sau nn% pentru procente –>
<!ENTITY % Pixels "NUMBER" – lungimea în pixeli –>
<!ENTITY % IAlign "(top|middle|bottom|left|right)">
<!ELEMENT IMG – O EMPTY – Încorporează o imagine în document –>
<!ATTLIST IMG
src %URL #REQUIRED – URL-ul imaginii –
alt CDATA #IMPLIED – text afișat în locul imaginii –
align %IAlign #IMPLIED – aliniere orizontală / verticală –
height %Pixels #IMPLIED – înălțimea în pixeli –
width %Pixels #IMPLIED – lățimea în pixeli –
border %Pixels #IMPLIED – lățimea bordurii imaginii –
hspace %Pixels #IMPLIED – spațiere orizontală –
vspace %Pixels #IMPLIED – spațiere verticală –
usemap %URL #IMPLIED – utilizează client harta de imagini –
ismap (ismap) #IMPLIED – utilizează server harta de imagini – >
2.2 PHP – Hipertext Preprocessor
2.2.1 Noțiuni generale despre limbajul PHP
Limbajul PHP permite crearea paginilor cu context dinamic. PHP este un limbaj de “scripting” utilizat în fișierele HTML. Scriptul PHP este rulat pentru a permite programatorilor Web să scrie rapid pagini ce se generează dinamic. Prin intermediul PHP se pot accesa Microsoft SQL Server și baze de date Microsoft ACCES cu ajutorul ODBC. PHP este un limbaj de programare destul de tânar. El a fost creat în 1994 de către programistul Расмусом Лердофом. Chiar de la început limbajul reprezenta în sine CGI-interfața, scrisă pe Perl, care a lucrat pe pagina de acasă a lui Лердофом. Pe urmă autorul a copiat interfata de pe Perl pe C. Toate schimbarile sau înclus în întregul pachet, aparut în anul 1995 și numindu-se Personal Home Page Tools (PHP). El includea în sine cîteva macrosuri folositoare, parțial, se putea de găsit cartea de adrese, contorul și multe altele.
Rasmus Ledorf s-a pasionat serios de baze de date, adăugând interfața sa, mijloace pentru organizarea interpelării favorabile. Programatorul de asemenea a scris interfața pentru schimbul comod între bazele de date și formele textuale – Form Interpreter. Unirea lucrarilor trecute și de asemenea descrierea de mai sus a pachetelor sau înclus în crearea PHP/FI (PHP and Form Interpreter). Anume acest limbaj a ramas actual pentru PHP4. În perioada de la 1996-1997 îl foloseau circa 50 mii de WebMasters. În anul 1997 codul limbajului a fost transcris și complectat de Zivom Suranski și Endy Gatmensom – anume ei au creat pachetul de bază PHP4. Limbajul a început treptat cucerirea lumii. El a fost un sistem deschis, a adus la aceea că sute de specialiști începeau să creeze complectarea și corectarea pentru PHP4, aprovizionarea lui cu noile posibilități.
Principiile de lucru PHP
Oficial el se numește preprocesorul hipertextual. Spre deosebire de Perl, care cerea scrierea programului aparte, PHP lucreaza cu scenariu, aflându-se în failul obișnuit HTML. Cum numai acest script este gasit, el se trimite pe ordonarea interpretorului pe server, care și îndeplinește toate instrucțiunile scrise de WebMasters.
Acest mecanism este foarte comod din punct de vedere al programării și el este utilizat în cele mai populare limbaje ale serverelor, cum sunt Asp și ColdFusion.
Cu ajutorul PHP se pot crea pagini de WEB dinamice, care sunt generate în momentul în care programul utilizator (de exemplu: Nescape) a formulat cererea către serverul de WEB. Serverul de WEB trebuie să aibă activat suportul pentru PHP. Toate fișierele care au extensia .php4 trebuie să fie rulate de către motorul PHP. Fișierele se creează în aceeași manieră ca și fișierele HTML.
Începutul semnalului PHP – scenariul este containerul <?… cod …/?>. Alte însemnări ale PHP-script este exprimarea <?php … cod…/?>, <script language = “php”>cod</script>. La determinarea reglării PHP e posibil chiar întrebuințarea tag-ului asp-lui <%…%>. În total este comod, desigur, de atribuit primul variant, astfel încât el este compact.
Exemplu de pagină cu tag-uri PHP:
<html><head><title>PHP Test</title></head>
<body>
<?php echo “Hello World<P>”: ?>
</body></html>
Fiecare tag PHP începe cu <? php, se continuă cu propoziția PHP și se închide în partea dreaptă cu ?>. Într-un fișier HTML pot exista un număr nelimitat de tag-uri PHP.
Identificarea tipului de browser o putem vedea în cazul când tipul de browser pe care utilizatorul îl folosește pentru a vizualiza pagina dorită, informațiile pe care browserul le trimite împreună cu cererea pe care o face către serverul web.
PHP este foarte asemanator cu C – acest limbaj de programare Rasmus Ledorf îl stima și-l aprecia – așa dar, daca voi sunteți cunoscuți măcar cu Java Script, atunci cu comanda PHP nu este atât de greu să te descurci.
Comentarii:
PHP lucrează cu câteva tipuri de date: masivuri numere întregi și fracționare, obiecte și șiruri. Una din cele mai importante caracteristici este “database integration layer”. Scrierea pagenilor Web cu acces la baze de date este foarte ușor datorită PHP4. Următoarele SCBD-uri pot fi utilizate împreună cu PHP4: Oracle, Adabas D, Sybase, FilePro, mSQL, Velocis, MySQL, Informix, Solid, dBase, ODBC, Unix dbm, PostgreSQL, Interbase.
Este comod, că în limbaj nu se cere descrierea schimbării înaintea începerii lucrului cu ele, cum, de exemplu, în C sau Pascal. În script pur si simplu, se scrie expresia $<variabila>= <valoare> și se întîmpla atribuirea schimbării valorii. Expresia <variabila> se supune acelorași legi, cum și numele în toate limbajele de programare. Elementul <valoare> pentru toate tipurile de date poate fi și negativ și pozitiv, și întelege a șaisprezecea variantă de înscrire a datelor.
În schimbarea elementelor fracționare <valoare> se scrie în forma <valoare intreagă>.<valoare zecimală>. La fel se poate scrie numărul fracționar în formă prescurtată.
Rândurile întotdeauna se termină cu ghilimele duble “” și le împarte după posibilitatea prelucrării simbolurilor speciale, caracteristic trăsăturii în care se află în prezența slash-ului înapoi (back slash).
2.2.2 Sintaxa și gramatica limbajului PHP
Sintaxa PHP este luată în prealabil din C, Java și Perl tot așa au influențat pe sintaxicul limbii date.
Trecerea din HTML
Sunt trei metode de ieșire din HTML și trecerii în “regimul PHP cod”.
Exemplu: Metoda de trecere din HTML. 1. <? echo(“metoda simplă, instrucțiuni prelucrătoare SGML\n”); ?> 2. <?php echo(“la lucru cu documentele XML faceți în felul următor \n”); ?> 3. <script language=”php”>echo (”unii redactori (ca și Front Page)nu acceptă instrucțiunile prelucrate”); </script>; 4. <% echo(“ De la PHP 3.0.4 se poate individual de aplicat tag-ul ASP”); %>
Divizarea instrucției
Instrucțiunile afirmației se divizează tot așa cum în C sau Perl – punct și virgulă. Închiderea tag-ului (?>) de asemenea se subînțelege sfîrșitul afirmării, de aceea următoarea înscriere este echivalentă.
<php
echo “Acesta este un test”;
?>
<php echo“Acesta este un test”?>
Tipuri de variabile
PHP susține următoarele tipuri de variabile:
integer – întregi
double – număr cu parte fracționară
string – șirul variabil
array – masiv
object – variabilă obiectivă
pdfdoc – PDF- document (numai în prezența susținerii PDF)
pdfinfo – PDF-info (numai în prezența susținerii PDF)
Tipul variabil obișnuit nu se stabilește de către programator; în locul acestuia, el stabilește în PHP timpul îndeplinirii programului, în dependență de context în care variabila dată este utilizată.
Dacă vă place să indicați tipul variabilei direct, voi puteți utiliza pentru aceasta instrucțiunea cast sau funcția settype().
Variabila poate să se comporte în diferite situații stabilite, în dependență de aceea, ce fel de tip este stabilit pentru ea în timpul dat..
Inițializarea variabilei
Pentru inițializarea variabilei în PHP, pur și simplu îi atribuim ei o valoare. Pentru majoritatea variabilelor aceasta este anume așa; pentru masivuri și variabilelor obiective, totuși se poate utiliza câteva mecanizme.
Inițializarea masivelor
Masivul poate să inițializeze unul din două posibilități: succesiv atribuirea valorilor sau prin construirea instrucțiunii array().
La adăugarea succesivă a valoarii în masiv, vor fi pur și simplu notate valorile elementelor masivului, utilizând indexul gol. Fiecare valoare următoare va fi adăugată în calitatea ultimului element a masivului.
$names[] = "Jill"; // $names[0] = "Jill"
$names[] = "Jack"; // $names[1] = "Jack"
Cum în C și Perl, elementele masivului se numerotează începând cu 0, dar nu cu 1.
Inițializarea obiectelor
Pentru inițializarea variabilelor obiective utilizați noile recomandări pentru a decide obiectul, variabila obiectivă.
Exemplu:
class foo {
function do_foo () {
echo "Doing foo.";
}
}
$bar = new foo;
$bar -> do_foo ();
Domeniul variabilei
Domeniul variabilei se află în context, înauntru căreia ea este determinată. În caz general, toate variabilele PHP au un singur domeniu. Însă, înăuntrul funcției este determinat de utilizatori, prezentării domeniului local al funcției. Orice variabilă, determină implicit înăuntru funcției restrângerea domeniului funcției locale.
De exemplu:
$a = 1; /* domeniul global */
Function Test () {
echo $a; /* trecerea pe domeniul variabilei locale */
}
Test ();
Acest script, nu va da ceva la ieșire pentru că instrucțiunea echo se referă la versiunea variabilei locale $a, valoarea căreia se atribuie nu în înăuntrul acestui domeniu. În PHP variabilele globale trebuie să fie declarate în interiorul funcției globale, dacă se presupune utilizarea lor în funcțiile date.
De exemplu:
$a = 1;
$b = 2;
Function Sum () {
global $a, $b;
$b = $a + $b;
}
Sum ();
echo $b;
Descrierea de mai sus a scriptului va da valoarea “3”. Întrucât $a și $b se declară global în înăuntrul funcției, referite pe variabilele date sunt tratate ca referințe la versiunile globale ale lor. Nu există restrângere la numărul variabilelor globale, cu care se poate manipula în înăuntrul funcției. A doua posibilitate de trecere la variabilele din domeniul global este utilizarea determinării masivului special PHP $GLOBALS.
Variabilele în PHP
Formele HTML (GET și POST)
Când programul prelucrării formelor este PHP- script, variabilele acestor forme automat sunt accesibile pentru scriptul dat PHP.
Exemplu: Formele variabilelor simple. <form action=”foo.php3” method=”post”> Name: <input type=”text name”=”name”><br> <input type=”submit”> </form>
La activizarea formei PHP va creea variabila $name, sensul căreia va fi acel conținut, care a fost introdus în câmpul Name: formei date.
PHP de asemenea primește masive în context cu formele variabilelor, dar numai concomitent. De exemplu, putem să grupăm în legături variabilele împreună sau de întrebuințat această caracteristică pentru determinarea semnificației la alegerea a mai multor variabile la ieșire:
Exemplu: Formele variabilelor mai compuse <form action="array.html" method="post"> Name: <input type="text" name="personal[name]"><br> Email: <input type="text" name="personal[email]"><br>Beer: <br><select multiple name="beer[]"><option value="warthog">Warthog<optionvalue="guinness">Guinness</select><input type="submit"> </form>
Dacă PHP- atributul track_vars inclus, peste instalarea configurației track_vars sau directivei <?php_track_vars?>, când variabilele, sunt activizate prin metodele POST sau GET, vor fi de asemenea găsite în asociativitatea masivelor globale $HTTP_POST_VARS și $HTTP_GET_VARS corespunzător.
HTTP – Cookie
PHP în mod evident susține HTTP cookie, este determinat în Netscape's Spec. Cookie
este mecanismul păstrării datelor în scoaterea browser-ului, utilizate pentru a menține procedurile de schimbare sau indentificarea răspunsului utilizatorului. Cookie se poate amplasa utilizând funcția SetCookie(). Cookie este o parte a titlului HTTP, de aceea funcția SetCookie() trebuie să cheme mai întâi decât orice transferare a datelor să fie transmise browser-ului. Este de asemenea limitare ca și pentru funcția Header(). Orice cookie, transmise clienților, automat se transformă în schimbarea PHP, de asemenea metodele datelor GET și POST.
Dacă este numai decât de stabilit sensul multiplu al unui cookie, pur și simplu trebuie să adăugăm paranteze pătrate la numele cookie.
De exemplu:
SetCookie ("MyCookie[]", "Testing", time()+3600);
Exemplu de funcție SetCookie:
$Count++; SetCookie ("Count", $Count, time()+3600); SetCookie ("Cart[$Count]", $item, time()+3600);
Directivele configurației serverului
Schimbarea tipului
PHP nu are nevoie de determinare a tipului la anunțarea variabilei, tipul variabilei se determină după context în care ea se folosește. Adică, dacă îi atribuiți o semnificație de șir a variabilei var, var se transformă în șir. Dacă după aceea se atribuie variabilei var semnificația numărului întreg, atunci va fi număr întreg (integer).
Exemplu de transformare automată a tipului PHP poate servi operatorul adunării '+'. Dacă careva din operanzi este număr cu fracție (tip double), atunci după aceasta toți operanzii se apreciază ca și double. Astfel, acești operanzi vor fi interpretați ca integer și rezultatul de asemenea va fi de tip întreg. Specificăm că totodată nu se schimbă tipurile operanzilor, se schimbă doar nota acestor operanzi.
$foo = "0"; // $foo reprezintă șirul (ASCII 48)
$foo++; // $foo reprezintă șirul "1" (ASCII 49)
$foo += 1; // $foo reprezintă întreg(2)
$foo = $foo + 1.3; // $foo are tip double (3.3)
$foo = 5 + "10 Little Piggies"; // $foo este întreg(15)
$foo = 5 + "10 Small Pigs"; // $foo este întreg (15)
Aducerea tipului
Aducerea tipului funcționează în PHP multilateral ca și în C: denumirea tipului folosit se înscrie în paranteze rotunde () înainte de variabila care trebuie să fie adusă la tipul dat.
$foo = 10; // $foo is an integer
$bar = (double) $foo; // $bar is a double
Se permite următoarele aduceri ale tipului:
(int), (integer) – aducerea la întreg
(real), (double), (float) – aducerea la tipul double
(string) – aducerea la șir
(array) – aducerea la masiv
(object) – aducerea la variabilă de obiect
Remarcăm, ca tabularea și spațiile se permit înăuntrul parantezelor rotunde, deaceea următoarele sunt funcțional echivalente:
$foo = (int) $bar;
$foo = ( int ) $bar;
Transformarea șirurilor
Atunci când variabila de șir se prețuiește ca de număr, însemnătatea rezultatului și tipul variabilei se determină în felul următor. Variabila string va fi preluată ca și double,dacă ea conține oricare din simbolurile '.', 'e', sau 'E'.
Manipularea cu masivuri
PHP susține atât masivele scalare cât și asociative. Practic, între ele nu-i nicio diferență. Putem crea masivuri folosind funcțiile list() sau array(), sau poate clar crea însemnătatea fiecărui element al masivului.
$a[0] = "abc";
$a[1] = "def";
$b["foo"] = 13;
Masivul poate fi sortat cu funcțiile asort(), arsort(), ksort(), rsort(), sort(), uasort(), usort(), și uksort() în dependență de tipul sortării dorite.
Numărarea numărului de elemente este permisă de funcțiile next() și prev(). Alte metode tipice transformării masivului reprezintă folosirea funcției. each().
Orice script PHP este alcătuit succesiv din operatori. Operatorul poate fi atribuit, chemarea funcției, ciclul, expresiilor condiționale sau a expresiei vide.(care nimic nu îndeplinesc). Operatorii de obicei se termină cu punct și virgulă. De asemenea operatorii pot fi grupați în grupuri, închiderea grupurilor de operanzi în paranteze figurate. Grupuri de operatori sunt de asemenea operatori.
Constante
PHP determină câteva constante și acordă mecanismul pentru determinarea constantelor. Constantele sunt asemănătoare variabilelor, dar ele au o mică schimbare a sintaxei.
Constantele predeterminate – sunt __FILE__ and __LINE__, care corespund numelui failului și numărul șirului, care se îndeplinește în timpul de față.
Exemplu: Utilizarea __FILE__ и __LINE__ <?php function report_error($file, $line, $message) { echo "An error occured in $file on line $line: $message."; } report_error(__FILE__,__LINE__, "Something went wrong!"); ?>
Putem determina constantele complimentare cu ajutorul funcției define() și undefine() .
Exemplu: Descrierea constantelor <?php define("CONSTANT", "Hello world."); echo CONSTANT; // outputs "Hello world." undefine ("CONSTANT"); ?>
Expresiile
Expresiile – sunt piatră unghiulară în PHP. În PHP apoape toate sunt expresii. Exemple simple sunt constante și variabile. Când scriem , "$a = 5", noi atribuim valoarea'5' variabilei $a. '5' cu alte cuvinte '5' este expresia cu valoarea 5 ( în situația dată '5' este constanta numărului întreg).
Câteva exemple mai complicate de expresii sunt funcțiile.
De exemplu:
function foo () {
return 5;
}
PHP susține 3 tipuri scalare de valori: întregi, număr cu virgulă mobilă și șir. PHP susține 2 tipuri de structuri (nescalare): masivuri și obiecte.
Fiecare din aceste valori pot fi atribuite de variabile sau întoarse de funcții. Operatorii de majorare și micșorare sunt variable++ and variable–.
PHP este limbajul orientat pe expresii, practic toate sunt expresii.
În PHP există două tipuri de incrimenți – precedentul și următorul. Și precedenții și următorii incrimenți măresc valorile variabililor și influințiază la variabila indentică. Precedenta mărire, care se notează ca '++$variable', se egalează cu majoritatea variabilelor (PHP mărește variabilele ână când citește valoarea ei).
Expresiile de comparare au valoarea 0 sau1. (înseamnă fals sau true corespunzător) PHP susține: > (mai mare ca), >= ( mai mare sau egal), = (egal), < (mai mic ca) și <= ( mai mic sau egal). Aceste expresii în general se utilizează în interiorul condiției, de exemplu de operatorul IF. Există încă astfel de expresii – operatorul convențional cu trei operanzi:
$first ? $second : $third
Dacă valoarea primei expresii este adevărată (nu este egală cu zero), atunci se folosește a doua expresie și aceasta este rezultatul convențional al expresiei date. În caz contrar se folosește al treilea operator. Orice expresie nu egală cu zero dar întreagă este TRUE, zero este FALS.
Instrucțiunea IF
Structura IF este una din importantele posibilități a mai multor limbaje, incluzând PHP. Ea permite de organizat îndeplinirea fragmentelor codurilor după condiție. Posibilitatea PHP pe utilizarea expresiei IF este asemănătoare ca în C:
if (expr) statement
Dacă expr este egală cu TRUE, atunci PHP îndeplinește “statement”, dar dacă FALSE – se ignorează.
Următorul exemplu extrage fraza 'a is bigger than b' dacă $a e mai mare ca $b:
if ($a > $b)
print “a is bigger than b”;
Instrucțiunea ELSE
ELSE – mărește posibilitățile IF pe părți prelucrătoare variantelor expresiilor, când ea este egală cu FALSE.
Exemplul dat, extrage fraza 'a is bigger than b' dacă $a e mai mare ca $b, și 'a is NOT bigger than b' în situația contrară:
if ($a > $b) {
print "a is bigger than b";
} else {
print "a is NOT bigger than b";
}
Expresia ELSE se îndeplinește dacă numai expresia IF este egală cu FALSE, dar dacă este construcția ELSEIF – atunci de asemenea sunt egale cu FALSE.
Instrucțiunea ELSEIF
ELSEIF, este combinația IF, ELSE. ELSEIF cum și ELSE permite îndeplinirea expresiei dacă valoarea IF este egală cu FALSE, dar spre deosebire de ELSE ea îndeplinește numai dacă expresia ELSEIF este egală cu TRUE. Exemplul următor extrage 'a is bigger than b' dacă $a>$b, 'a is equal to b' dacă $a==$b, și 'a is smaller than b' dacă $a<$b:
if ($a > $b) {
print "a is bigger than b";
} elseif ($a == $b) {
print "a is equal to b";
} else {
print "a is smaller than b";
}
Expresia ELSEIF va fi îndeplinită numai dacă expresia IF precedentele ELSEIF sunt egale cu FALSE, dar ELSEIF date sunt egale cu TRUE.
Instrucțiunea WHILE
Ciclul WHILE – cel mai simplu tip a ciclului în PHP4. El funcționează ca și C.forma principală a operatorului WHILE:
WHILE(expr) statement
Instrucțiunea DO..WHILE
Ciclul DO..WHILE este asemănător cu WHILE cu excepția că, această însemnătate a expresiei logice se verifică nu până ci după, terminarea interației.
Exemplu:
$i = 0;
do {
print $i;
} while ($i>0);
Acest ciclu se execută odată, deoarece după terminarea interației se va verifica însemnătatea expresiei logice,iar ea este egală cu FALSE ($i nu mai mare ca 0), și ciclu va fi finisat.
Instrucțiunea FOR
Ciclul FOR este cel mai puternic ciclu în PHP. El lucrează ca și analogul în C. Sintaxa ciclului FOR este:
FOR (expr1; expr2; expr3) statement
Prima expresie se execută înaintea ciclului. Înaintea fiecării interații se execută expr2. Dacă ea este egală cu TRUE atunci ciclu se va prelungi și se vor executa operatorii integrați. Dacă el este egal cu FALSE, atunci ciclul este întrerupt, finalul din aceste expresii se execută espresia 3.
Exemplu:
for ($i = 1; $i <= 10; $i++) {
print $i;
}
Instrucțiunea BREAK
BREAK – întrerupe executarea ciclului trecut.
Exemplu:
$i = 0;
while ($i < 10) {
if ($arr[$i] == "stop") {
break;
}
$i++;
}
Instrucțiunea CONTINUE
CONTINUE – trece la începutul ciclului apropiat.
Exemplu:
while (list($key,$value) = each($arr)) {
if ($key % 2) { // skip even members
continue;
}
do_something_odd ($value);
}
Instrucțiunea SWITCH
Operatorul SWITCH se aseamănă cu grupul de operatori IF cu aceeași expresie. SWITCH execută fiecare operator unul după altul. La început codul nu se execută. PHP continuă execuția operatorilor până la sfârșitul blocului SWITCH sau până nu va întâlni operatorul BREAK. Dacă nu vom scri Break la sfârșitul ciclului, atunci PHP va continua să execute operatorii și a următorului SWITCH.
Exemplu:
switch ($i) {
case 0:
print "i equals 0";
break;
case 1:
print "i equals 1";
break;
case 2:
print "i equals 2";
break;
}
Instrucțiunea REQUIRE
Operatorul REQUIRE înlocuiește pe sine cu conținutul fișierului, asemănător #include din C. C #include. Aceasta înseamnă că nu putem require() în mijlocul fișierului dat. Folosiți INCLUDE require ('header.inc');
Instrucțiunea INCLUDE
Operatorul INCLUDE întroduce și execută conținutul fișierului dat. Aceast se întîmplă de fiecare dată când se întâlnește operatorul INCLUDE, așa că putem include acest operator înăuntrul ciclului pentru a conecta câteva fișiere.
Exemplu:
$files = array ('first.inc', 'second.inc', 'third.inc');
for ($i = 0; $i < count($files); $i++) {
include($files[$i]);
}
FUNCTION
Funcția poate fi definită în modul următor:
Exemplu:
function foo ($arg_1, $arg_2, …, $arg_n) {
echo "Example function.\n";
return $retval;
}
În interiorul funcției poate fi oricare cod corect PHP4, ori chiar dacă este declarată altă funcție sau clasă.
Întoarcerea rezultatelor
Rezultatele se întorc prin operatorul return. Rezultatul întors poate fi de orice tip, incluzând liste și obiecte.
Exemplu:
function my_sqrt ($num) {
return $num * $num;
}
2.3 Sisteme de gestiune a bazelor de date MySQL
2.3.1 Noțiuni generale despre MySQL
MySQL a fost elaborat de către Michael Widenius. El reprezintă un SGBD destul de mic după mărime și destul de rapid și relațional fondat pe tradițiile Huges Technologies Mini SQL (mSQL).
Cele mai îmbucurătoare facilități implementate în pachetul MySQL sunt :
Multithread – Posibilitatea de a efectua simultan mai multe comenzi SQL.
Optimizarea legăturilor și cuplarea mai multor date la un singur proces de cerere.
Driverul ODBC este furnizat în complect cu pachetul MySQL.
Un sistem flexibil de previlegiere și a parolelor.
Până la 16 chei în tabelă. Fiecare chee poate fi compusă din maximum 15 câmpuri.
Susținerea numerelor cu o lungime de la 1 pâna la 4 biti (ints, float, double, fixed), stringuri cu o marime variabilă etc.
Este concepută pe thread-uri, o repartizare a memoriei rapidă.
Toate datele se păstrează în formatul ISO8859_1.
Toate operațiile lucrului cu stringuri nu atrag atenție la regiștrii simbolurilor în prelucrarea stringurilor.
Pseudonimele sunt aplicate atât pentru tabele, cât și pentru coloane în parte.
Toate câmpurile au valoare predefinită.Ușurința de lucrul și manevrare a tabelelor – este ușor de adăiuga sau a elimina orice chee și câmp.
Acest SGBD are ca baza limbajul SQL – Structured Querz Languages (limbaj de interogare).
2.3.2 Noțiuni generale și sintaxa limbajului SQL
Acest capitol realizează o introducere în limbajul de interogare utilizat pentru a accesa o bază de date MySQL. Mulțimea comenzilor SQL sunt conturate ca blocuri de interogare de bază. În particular, noi discutăm declarațiile SQL folosite la:
execuția calculelor;
specificarea alternativă a capetelor de coloană;
concatenarea coloanelor;
sortarea rîndurilor;
introducerea criteriilor de căutare.
Privire de ansamblu asupra SQL
Un sistem de management al bazei de date necesită un limbaj de interogare pentru a permite utilizatorului să acceseze datele, SQL (limbaj de interogare structurată) este limbajul utilizat de majoritatea sistemelor de bază de date relațional.
Limbajul SQL a fost dezvoltat într-un prototip de sistem de management a bazelor de date relaționale – System R -de IBM la mijlocul anilor 1970.În 1979, Corporația Oracle introduce prima implementare a SQL în varianta comercială.
Trăsături caracteristice SQL
SQL este prezentat în limba engleză. Folosește cuvintele select, insert, delete ca părți ale setului de comenzi.
SQL este un limbaj neprocedural: specifică ce informații dorești, dar nu cum să le obții.Cu alte cuvinte SQL nu îți cere să specifici metoda de acces la date.Toate cererile SQL folosesc optimizarea cererilor- o parte a RDBMS – pentru a determina rapid remedierea datelor specificate. Aceste trăsături ușurează obținerea rezultatelor dorite.
Procesarea SQL asupra înregistrărilor nu se poate face decât asupra unei singure înregistrări la un moment dat.Cea mai comună formă a unui set de înregistrări este un tabel.
SQL poate fi folosit de un șir de utilizatori încluzând DBA, programatori de aplicații, personal de management și multe alte tipuri de utilizatori.
SQL pune la dispoziție comenzi pentru o varietate de tascuri încluzând:
date interogate; înserarea, extragerea și ștergerea rândurilor într-un tabel; crearea, modificarea și ștergerea obiectelor de tip bază de date; controlul accesului la baza de date și la obiectele de tip bază de date; garantarea consistenței bazei de date.
La început sistemele de management a bazei de date a utilizat un limbaj separat pentru fiecare categorie în parte. SQL le-a unificat pe toate acestea într-un singur limbaj.
SQL a devenit un limbaj standard industrial pentru bazele de date relaționale. Institutul Național American de Standarde(ANSI) a adoptat SQL ca limbaj standard pentru RDBMS în anul 1986. Organizația Internațională de Standarde (ISO) a adoptat deasemenea SQL ca limbaj standard pentru RDBMS. Toate RDBMS-urile suportă unele forme de SQL și toți vânzătorii de
RDBMS intenționează să alinieze la standardele ANSI.
2.3.2.1 Comenzile limbajului SQL
SELECT – este comanda cea mai utilizată, este folosită pentru obținerea datelor din bazele de date;
INSERT, UPDATE, DELETE – aceste trei comenzi sunt utilizate pentru a introduce noi rânduri, pentru a schimba rândurile existente și ștergerea rândurilor nedorite din tabelele bazelor de date respective. (Ele sunt cunoscute în ansamblu ca DML sau comenzi ale limbajului de manipulare a datelor.)
CREATE, ALTER, DROP – aceste trei comenzi sunt utilizate dinamic pentru a crea, utiliza și șterge orice structură de date, de exemplu, tabele, expuneri, indecși. (Ele sunt cunoscute sub numele colectiv DDL sau comenzi ale limbajelor de definire a datelor).
GRANT, REVOKE – aceste două comenzi sunt utilizate pentru a da sau a lua drepturile de acces pentru bazele de date și structurile din Oracle.
Acestea sunt o parte a comenzilor SQL.
Scrierea comenzilor SQL
Când scriem comenzi SQL, este important să ne reamintim câteva reguli simple pentru construirea unor declarații valide care sunt și ușor de citit și de editat:
Comenzile SQL pot fi pe una sau mai multe linii;
Clauzele sunt uzual plasate pe linii separate;
Tabelarea poate fi folosită;
Cuvintele de comandă nu pot fi separate pe mai multe linii;
Comenzile SQL nu sunt “case sensitive”;
Comandă SQL este introdusă la promptul SQL și liniile subsecvențelor sunt numărate;
O singură declarație poate fi considerată curentă cât timp ea este în buffer și poate fi rulată într-un număr de moduri:
– plasând un punct și virgulă (;) la sfârșitul ultimei clauze;
– plasând un punct și virgulă/slash la ultima linie în buffer;
– plasând un slash(/) la promptul SQL;
– scriind un R[UN] (comanda SQL) la promptul SQL.
Fiecare din următoarele declarații sunt valide:
SELECT * FROM EMP;
SELECT
*
FROM
tdb_produse
SELECT *
FROM tdb_produse;
Blocul de interogare de bază
Declarația SELECT regăsește informația din baza de date implementând toți operatorii din algebra relațională.
În cele mai simple forme trebuie să conțină:
1. O clauză SELECT, care listează coloanele pentru afișare astfel încât este esențială o proiecție.
O clauză FROM care specifică tabela implicată.
Pentru a lista toate numerele departamentelor, numele angajaților și numărul managerilor în tabela EMP introduceti urmatoarele:
Exemplu:
SELECT id, parentid, denumirea
FROM tdb_produse;
De remarcat că numele coloanelor sunt separate prin spațiu.
Este posibil să selectăm toate coloanele din tabelă prin specificarea unui asterix ('*') după cuvântul SELECT
Exemplu:
SELECT *
FROM tdb_produse;
Alte elemente în clauza SELECT
Este posibil să se includă și alte elemente în clauza SELECT.
Expresii aritmetice;
Alias-uri de coloane;
Coloane concatenate;
Literali.
Toate aceste opțiuni ajută utilizatorul să ceară date și să le manipuleze în funcție de scopurile interogării; de exemplu, execuția calculelor, legarea coloanelor împreună, sau afișarea șirurilor de litere din text.
Expresii aritmetice
O expresie este o combinație de una sau mai multe valori, operatori și funcții care să evaluează la o valoare.
Expresiile aritmetice pot conține nume de coloane, valori numerice constante și operatori aritmetici:
Operatori Descriere
+ adunare
– scădere
* înmulțire
/ împărțire
Exemplu:
SELECT id, pret*12, parentid
FROM tdb_produse;
Aliasuri de coloană
Când se afișează rezultatul unei interogări, SQL*Plus în mod normal utilizează numele coloanelor selectate ca titlu. În multe cazuri acest nume poate fi criptic sau fară înțeles.
Putem schimba un titlu de coloană utilizând un 'ALIAS'.
Un alias de coloană dă unei coloane un nume de titlu alternativ la ieșire.
Specificați aliasul dupa coloană în lista selectată. Prin default, titlurile alias vor fi forțate la litere mari si nu pot conține blankuri, numai dacă aliasul este înclus între ghilimele (" ").
Pentru a afișa titlul de coloană pret_dolar pentru salariul anual însemnând Pret*12, utilizați un alias de coloană:
Exemplu:
SELECT denumirea, pret*13 pret_dolar, parentid
FROM tdb_produse;
Într-o declarație SQL, un alis de coloană poate fi utilizat numai în clauza SELECT.
Operatorul de concatenare
Operatorul de concatenare (||) permite coloanelor să fie legate cu alte coloane, expresiilor aritmetice sau valorilor constante să creeze o expresie de caractere.
Coloanele din cealaltă parte a operatorului sunt combinate pentru a obține o singură coloană.
Pentru a combina EMPNO și ENAME și să se dea aliasul EMPLOYEE expresiei, introduceți:
Exemplu:
SELECT EMPNO||ENAME EMPLOYEE
FROM EMP;
2.3.2.2 Operatori SQL
Sunt patru operatori SQL care operează pe toate tipurile de date:
Operator Semnificație
BETWEEN..AND… între două valori(inclusiv)
IN(list) compară cu o listă de valori
LIKE compară cu un model de tip caracter
IS NULL estе o valoare nulă
Operatorul BETWEEN
Realizează teste pentru valori între, și inclusiv, o valoare minimă și o valoare maximă.
Presupunând că dorim să vedem angajații ai căror salariu este între 1000 și 2000:
Exemplu:
SELECT ENAME, SAL
FROM EMP
WHERE SAL BETWEEN 1000 AND 2000;
De notat că valorile specificate sunt inclusive și că limita minimă trebuie specificată prima.
Operatorul IN
Testează valorile dintr-o lista specificată.
Presupunem că dorim să găsim angajații care au unul din cele trei numere de marcă(MGR):
Exemplu:
SELECT EMPNO, ENAME, SAL, MGR
FROM EMP
WHERE MGR IN (7902,7566,7788);
Dacă caracterele sau datele calendaristice sunt utilizate, ele trebuie introduse între ghilimele(' ').
Operatorul LIKE
Uneori nu se cunosc valorile exacte pe care le căutăm. Utilizând operatorul LIKE este posibil să selectăm rândurile care se potrivesc cu un model specificat de caractere.Operația de petter-matching a caracterelor poate fi asemanată cu o căutare 'wild-card'. Două simboluri se pot utiliza la construirea șirului de căutare.
Simbol Reprezentare
% orice secvență de zero sau mai multe caractere
– un singur caracter oarecare
Pentru a lista toți angajații al căror nume începe cu un S, introduceți:
Exemplu:
SELECT ENAME
FROM EMP
WHERE ENAME LIKE 'S%';
Caracterul '_' poate fi utilizat pentru căutarea unui anumit număr de caractere.
Semnele '%' și '_' pot fi utilizate în orice combinație de caractere.
Operatorul IS NULL
Operatorul IS NULL face teste specifice pentru valorile care sunt NULL.
Exemplu:
SELECT ENAME,MGR
FROM EMP
WHERE MGR IS NULL;
Negarea expresiilor
Urmatorii operatori fac teste de negație:
Operator Descriere
!= diferit de(VAX,UNIX,PC)
^= diferit de(IBM)
<> diferit de(toate o/s)
NOT NUMECOL= diferit de
NOT NUMECOL> mai mic sau
2.4. Joomla – CMS pe platforma LAMP (Linux, Apache, MySQL, PHP)
Aplicațiile colaborative, cunoscute sub numele de groupware, au devenit deosebit de importante în practica de livrare de software. Se pare că un nivel ridicat de colaborare este de dorit din ce în ce mai mult în condițiile actuale, deoarece procesul de dezvoltare software este unul destul de dificil de realizat. Aceasta dificultate se datoarează în mare parte cerințelor neclare, modificărilor care trebuiesc făcute în timp real, cerințelor complexe ale aplicațiilor și ale serviciilor ce urmeaza sa fie livrate.
În prezent, echipele sunt adesea distribuite din punct de vedere geografic sau organizational, adăugând noi complicații la procesul de dezoltare software, complicații datorate fusului orar, politicilor corporative și limbii vorbite.
În aceste condiții, groupware ajută la îmbunătățirea colaborării și comunicării prin punerea la dispoziție o unor noi căi de comunicare între utilizatori multiplii. La baza, aceasta comunicarea ar trebui sa conste într-un schimb de mesaje instant. La un nivel mai complex, soft-ul ar putea oferi capacitatea de conferinte web și calendare de grup pentru programarea task-urilor.
Joomla! este un Sistem de Management al Conținutului, gratuit și în sursă deschisă, folosit în „back-end” pentru diferite tipuri de site-uri web, de la bloguri personale mici la site-uri vaste corporative și politice. De exemplu:
Site-uri corporative, portaluri
Reviste, ziare și publicații online
Comerț online, rezervări online
Aplicații guvernamentale
Site-uri Web pentru afaceri mici
Site-uri Web pentru organizații non-profit
Avantajele folosirii acestui produs software:
Joomla! este ușor de instalat, distribuit gratuit și în sursă deschisă
Poate fi folosit la crearea oricarui tip de site web
Dispune de drepturi depline CMS (Sistem de Management al Conținutului)
Dispune de posibilități de navigare, secțiuni în secțiuni, categorii în categorii
Incepătorii dispun de un număr mare de informații și tutoriale Joomla! online
Administrează mult mai mult decât articole (useri, drepturi de acces, template-uri, sondaje)
Interfața de administrare este una intuitivă
Ca dezavantaje ale folosirii Joomla! pentru crearea unui site avem:
Timp de încărcare a paginii mai mic comparativ cu alte sisteme de management al conținutului
Posibilități de costuri adiționale pentru hosting
Dezvoltarea este lipsită de tact dacă vrei sa modifici layout-ul
Unele module costă bani (in timp ce multe module sunt gratuite cu WordPress și Drupal)
Unele modificări pot necesita intervenția unor programatori
Pentru o instalare se poate crea un singur site
Pe langă Joomla in lumea CMS (Content Management Systems) întâlnim câțiva competitori importanți cum ar fi Drupal si WordPress.
S-a realizat un studiu de caz în care trei echipe au incercat să creeze un site cu aceleași cerințe, folosind cele 3 produse enumerate anterior. Rezultatele sunt următoarele:
Dupa cum se poate observa chiar dacă WordPress are parte de un „back-end” mult mai prietenos, poate fi mult mai costisitor iar perioada de implementare poate dura de două ori mai mult comparativ cu site-urile realizate cu Joomla. În cazul acesta WordPress este recomandat mai mult la crearea de blog-uri, unde s-a dovedit a fi un competitor real pentru Joomla și Drupal. Pentru Joomla însă, Drupal pare a fi singurul competitor serios.
Pentru acest proiect am ales ca produs software Joomla deoarece, cu ajutorul lui se pot crea site-uri web într-un timp mai scurt, cu mai multe caracteristici, la un preț mai mic. În plus Joomla a fost creat pentru a fi ușor de instalat și configurat chiar și pentru începători, așa cum am precizat anterior.
Joomla folosește MySQL
suportă numai Apache
suportă logări și pagini SSL.
Joomla! constă în multe părți distincte ce permit extensii modulare și integrări mai ușoare. Un exemplu de astfel de extensii sunt cele numite "Plug-in-uri", cunoscute anterior ca și "Mambot". Aceste extensii permit lui Joomla! noi funcționalități. WikiBot, de exemplu, permit autorilor de conținut Joomla! să folosească "Wikitaguri" în articolele Joomla! care vor auto crea hiperlinkuri dinamice către articole Wikipedia. Există pentru 4.000 extensii pentru Joomla! disponibile prin Directorul de Extensii.
În plus față de aceste pluginuri, sunt cateva extensii mai complexe. "Componentele" permit webmasterilor să creeze comunități prin extinderea caracteristicilor de utilizator, să facă backup pentru site, să traducă conținutul, să creeze URL-uri mai prietenoase pentru motoarele de căutare, etc. "Modulele" au funcționalități precum afișarea unui calendar sau includerea de coduri precum Google AdSense etc. în codul Joomla!.
Joomla! permite administratorilor să seteze parametri globali de configurare care influențează fiecare articol. Fiecare pagină se conformează acestor parametri în mod implicit, dar o pagină poate avea propriile ei setări pentru fiecare parametru. De exemplu, poți selecta să arate sau să ascundă autorul articolului sau se poate merge direct pe parametrul global de "arată autorul".
Următoarele exemple de site-uri web care folosesc Joomla ne dezvaluie și diversitatea domeniilor în care se poate utiliza fără nici o problemă:
MTV Networks Quizilla (Social networking) – http://www.quizilla.com
IHOP (Restaurant chain) – http://www.ihop.com
Harvard University (Educational) – http://gsas.harvard.edu
Citibank (Financial institution intranet) – Not publicly accessible
The Green Maven (Eco-resources) – http://www.greenmaven.com
Outdoor Photographer (Magazine) – http://www.outdoorphotographer.com
PlayShakespeare.com (Cultural) – http://www.playshakespeare.com
Senso Interiors (Furniture design) – http://www.sensointeriors.co.za
http://www.linux.com/
Am ales aplicația Joomla deoarece este usor de utilizat chiar și de către cei care nu au cunoștințe avansate de web. Instalarea ușoară, numărul mare de informații și tutoriale Joomla! Online de care dispunem, dar și interfața de utilizare extrem de intuitivă, sunt doar câteva dintre motivele care ne-au dus la alegerea acestui tool.
Mai mult decât atât, acesta ne permite implementarea oricărei idei, deoarece opțiunea de a adăuga noi extensii/componente/plug-in-uri încurajează dezvoltarea ideilor noi.
Pentru a evidenția și caracterul colaborativ, ne vom axa pe implementarea unei aplicații de tip organizare de evenimente. Și cum poate fi un organizator de evenimente mai aproape de posibilii lui clientii, daca nu prin aducerea la cunoștință a evenimentelor cât mai aproape de momentul în care acestea s-au produs.
Realizarea site-ului pentru organizarea de evenimente va permite redactorilor să uploadeze articolele pe blog imediat ce sunt gata. Drepturile de gestionare (și implicit cel de ștergere) va fi acordat doar administratorilor, pentru că ei au aceasta responsabilitate.
De asemenea clientii sunt implicați direct în tot acest proces, ei putând să se autentifice pentru a primi informațiile noi pe mail, sau pentru a comenta articolele publicate. Numărul de accesări ale unui articol, de autentificări, de logări și comentariile, precum și localizarea geografică a celor care acceseaza aceste informații, reprezintă feedback-ul direct adus de clientii și implicit administratorilor, iar măsurile care vor fi luate în planul afacerii trebuie să țină cont de acest feedback primit.
Capitolul 3. Descrierea aplicației web realizate
După cum am precizat în capitolul anterior, dorim sa dezvoltăm și să implementăm o aplicație de tip organizare de evenimente. În cele ce urmează, vom descrie modul în care vom face acest lucru, folosind aplicația open-source Joomla!
3.1 Instalare Joomla
Primul pas este descărcarea aplicației de pe http://www.joomla.org/download.html. La ora aceasta ultima versiune de Joomla este 1.6: Joomla_1.6.3-Stable-Full_Package.zip
Odată descărcată pe calculator, se dezarhivează iar fișierele se mută sub un folder creat în C:\xampp\htdocs\, pe care îl vom numi: joomla (C:\xampp\htdocs\joomla\).
Pasul următor este sa creăm o bază de date pentru noul site. Pentru a putea realiza acest lucru, apelam în browser http://localhost/phpmyadmin/ si creăm baza de date, pe care o denumim joomla.
Fig. 1: Crearea bazei de date joomla
Tastăm în browser: localhost/joomla și instalarea Joomla începe cu pasul 1: Choose Language. Selectăm limba dorită din listă si trecem la Pasul Următor.
Fig. 2: Pasul 1 al instalării: Selectarea limbii
Pasul următor al instalării Joomla, (Pre-installation check for Joomla! 1.6.3 Stable [senu takaa ama baji ] 04-March-2011 18:00 GMT), face diverse verificări ale sistemului.
In pasul 3, Licența, ne sunt explicate condițiile sub care Joomla este distribuită.
Pasul 4 – Configurarea bazei de date necesită foarte multă atenție, deoarece dacă introducem o dată greșită, nu se va putea realiza conexiunea cu baza de date.
Tipul bazei de date: mysql
Numele serverului: localhost
Numele de utilizator: root; local este implicit root, pe un server online este foarte posibil ca numele de utilizator să fie altul
Parola: lăsăm necompletat deoarece la instalarea XAMPP nu am setat nicio parola; pe un server online sigur însă vom avea o parolă.
Fig. 3: Pasul de configurare al bazei de date
Pasul 5 – Configurare FTP, îl setăm pe “Nu”, deoarece instalarea se face local, și nu pe server.
Pasul 6 – Configurare de bază:
nume la site: Site Groupware – vă apare în titlul site-ului
adresa de email: local nu are importanță, dar dacă vom instala aplicația pe un server online, pe această adresă se vor primi înștiințări de la Joomla când un nou user se adaugă în site.
Parola administrator: admin (user default: admin)
Fig. 4: Pasul de configurare principală
Pentru a finaliza instalarea, trebuie să ștergem fișierul de instalare: C:\xampp*\htdocs\joomla\installation\.
Fig. 5: Finalizarea instalării
Configurare inițială (acces, autentificare, activare module)
Accesul către partea de administrare se poate face doar de către user-ul configurat în momentul instalării. La instalarea Joomla!, singurul user din site este Super Administratorul și are control total asupra părții de administrare a site-ului.
Consola de administrare a site-ului are doar modulele implicite, iar dacă se doresc și sunt necesare mai multe module, acestea trebuie încărcate prin modulul „Extensions”.
Descrierea detaliată a fiecărui modul utilizat
Joomla ne oferă o serie de module, atât la nivelul de administrare (prin meniul aplicației) a conținutului site-ului, cat si unul la nivelul paginilor din site (paginile sunt împărțite, în diferite zone, numite module).
Principalele module pentru administrarea conținutului site-ului puse la dispoziție de Joomla sunt: cel de articole, modulul media (administrează imaginile), modulul de administrare al meniului (Menu Manager), modulul de administrare al userilor, al template-urilor, al extensiilor, și nu în ultimul rând, cel de administrare a paginilor din site (Module Manager).
Fig. 6: Panoul principal de administrare a site-ului
În continuare ne vom axa pe descrierea principalelor module folosite pentru realizarea site-ului propus.
Secțiuni, Categorii si Articole
Conținutul unui site Joomla, reprezintă partea de text și imagini ce apar pe paginile site-ului. Joomla face ca adăugarea de articole să fie o foarte ușoară și intuitivă. Utilizând partea de administrare a site-ului, se poate adăuga foarte ușor conținutul, utilizând un editor care seamănă cu Microsoft Word Document. Imediat ce salvați în panoul de administrare, noul conținut va fi automat afișat în paginile site-ului. Conținutul este organizat pe 3 niveluri:
Secțiuni (Section Manager),
Categorii (Category Manager) si
Articole (ArticleManager). Articolele în site-ul Joomla, sunt conținute în categorii și categoriile fac parte din secțiuni. Este un mod foarte util de a ține toate articolele într-o perfectă ordine. Administrarea acestora se face din panoul Joomla, din meniul Content.
Administrarea meniurilor
În secțiunea precedentă am creat conținutul unei pagini noi, dar acesta este doar unul din pașii necesari publicării. Ceea ce lipsește acum este un link în cadrul meniului care să ne ducă pe pagina respectivă. Un meniu reprezintă o bară de butoane cu link-uri către diferite pagini cu articole din site, către componente, către harta site-ului, sau către URL-uri (link-uri) externe site-ului. Pentru crearea unui link nou sau pentru administrarea meniului site-ului trebuie să accesăm modulul „Menu Manager” din panoul principal.
Administrarea modulelor
Administrarea modulelor este mult mai simplă decât adăugarea unui nou articol pe site, însă presupune cunoașterea pozițiilor în care se pot dispune acestea pe pagina web. Dacă analizăm un template general Joomla, vom vedea ca pozițiile modulelor sunt denumite: hornav , left, right, breadcrumb, user1, user2, și așa mai departe. Deci pentru a publica un modul este necesar să știm unde îl vom plasa pe pagină. Spre exemplu dacă dorim sa îl adăugăm în coloana din stânga, atunci va trebui să alegem poziția "left" în general. Totul ține de modul în care a fost realizat template-ul pe care îl folosim.
Administrarea modulelor se face din meniul „Module Manager”. Nu toate modulele care apar în lista se datorează instalării unei extensii. Se pot crea module apăsând butonul "New" și selectând tipul de modul dorit dintr-o listă predefinită de Joomla. Lista cu tipuri de module implicite include:
Modul login – afișează pe pagina căsuțele: username si password pentru login utilizatori;
Modul search – afișează pe pagina o căsuță de căutare;
Modul menu – afișează un meniu;
Modul custom HTML – afișează conținut personalizat de administrator;
Modul syndicate – afișează un link de abonare la fluxul RSS (în cazul unui blog sau portal de știri);
Modul poll – afișează un sondaj de opinie.
Acestea sunt doar câteva din modulele implicite Joomla, lista fiind mai lungă. Am prezentat însă doar acele module care am dorit să le implementăm si in site-ul nostru.
Administrarea plugin-urilor
Plugin-urile sunt funcții care execută în general anumite sarcini fără a crea efectiv conținut pe pagina web (funcțiile de căutare, de login, decaching, înregistrare a erorilor, etc). Implicit Joomla vine cu o serie de plugin-uri gata instalate și activate, care vor funcționa fără a avea nevoie de configurări suplimentare din partea noastră. Daca însă instalăm un plugin nou, acesta în 99% din cazuri va fi regăsit în lista de plugin-uri dezactivat, și necesită configurare. Pentru activare și configurare navigate apelăm meniul „Plugin Manager”.
Extensii Joomla
Joomla este o platformă puternică de administrare a conținutului, iar flexibilitatea acesteia este dată de faptul că suportă instalarea unor extensii cu ajutorul cărora funcțiile de bază sunt îmbunătățite și extinse cu noi funcții specializate. Extensiile se împart în mai multe tipuri principale:
Components – componente
Modules – module
Plugins – plugin-uri
Templates – teme grafice
Languages – pachete lingvistice
3.1.8 Gestiunea utilizatorilor și a grupurilor de utilizatori
În principiu sunt două mari categorii de utilizatori Joomla!: vizitatori si useri (înregistrați).
Vizitatorii site-urilor Joomla! sunt aceia care va vizitează site-ul și in funcție de setările făcute de dumneavoastră, ei pot vedea tot site-ul/articole sau numai porțiuni din el, pentru restul trebuind să iși facă un cont/sa se înregistreze și astfel sa devină useri.
Cei care se înregistrează, au un cont în site-ul dumneavoastră, au un user și o parolă cu care se pot loga și accesa diferite părți ale site-ului, ori articole în front end ori direct în partea de administrare.Acest tip de user are acces în site și după logare poate crea și publica articole în site-ul dumneavoastră, vă pot ajuta să populați site-ul cu conținut, ei nu pot accesa partea de administrare sau partea de grafică a site-ului. Ei pot adăuga content direct de pe site utilizând un editor de text (ca acela pe care îl aveți în admin). Administratorul site-ului le poate da anumite roluri, în funcție de acestea ei vor avea definite niște nume pe care le găsiți în lista de useri din admin: Site -> User Manager.
După cum vedem în imaginea de mai sus, userii se împart in:
Registered – acest tip de user nu are nici un drept să creeze, modifice sau să publice content în Joomla!. Ei au acces la articolele de tip registered unde vizitatorii normali nu au.
Author – poate scrie content/articole pentru site, poate specifica data de publicare sau controla așezarea în pagină.
Editor – are aceleași drepturi ca un autor, în plus poate să editeze conținutul articolelor lui si ale celor adăugate de autor.
Publisher – are drepturile editorului dar poate să și publice articolele în site.
Numai administratorul site-ului poate modifica rolul oricărui user specificat mai sus.
Backend user – administration user
Acești useri se pot loga în partea de administrare a site-ului. Fiecare din ei poate avea un anumit rol.
Manager – este un publisher cu acces în partea de administrare a site-ului. Are acces asupra contentului din site dar nu poate schimba grafica/template, să șteargă sau sa adauge extensii în site. De asemenea nu au acces asupra managementului userilor, nu pot adăuga useri sau să le schimbe profilul celor existenți.
Administrator – are acces peste manager, poate șterge sau instala extensii în site, poate schimba template-ul site-ului și poate altera/schimba profilele userilor care sub nivelul lui. Nu poate edita profilul Super Administratorului, și nu are acces în zona de configurări globale (Global Config).
Super Administrator – are acces nelimitat la tot ce înseamnă Joomla!. Numai el poate să transforme un user în Super Administrator sau să creeze noi Super Administratori pentru site.
La instalarea Joomla!, singurul user din site este Super Administratorul și are control total asupra părții de administrare a site-ului.
Permisiunile care se pot moșteni, atribui sau respinge, atât la nivel de vizitatori (public), de frontend, cât și de backend user, sunt următoarele: de configurare, de acces la componente, de care, ștergere, editare, si cel de editare al stării.
Pentru realizarea site-ului propus avem nevoie de toate grupurile și nivelele de acces.
Fig. 7: Permisiunile acordate pe structuri/grupuri de useri
Configurarea temelor/aspectului aplicației
Se poate realiza folosind modulul „Template Manager”. Template-urile pe care site-ul le poate lua sunt gestionate în acest modul. Astfel, prin intermediul acestuia, site-ul poate lua diferite forme, fără ca administratorul sa facă eforturi foarte mari.
Pentru site-ul nostru am ales un template pe care l-am instalat cu ajutorul modulului „Extensions”. Pentru ca acesta să se adapteze temei pe care am ales-o, am adus si câteva modificări asupra codului sursă CSS: template.css si joomla.css (c:\xampp\htdocs\joomla\templates\as002027\css\).
Fig. 8: Modulul „Extensions”
3.2 Configurarea unei pagini proprii pentru utilizatori (home page)
Un Content Management System – CMS- păstrează separat conținutul de aplicațiile sau extensiile (plugin-uri, șabloane, extensii, module, componente) utilizate în cadrul acestui sistem. Acest lucru este foarte important deoarece puteți modifica aceste aplicații fără a fi necesar să modificați conținutul. De asemenea, atât conținutul cât și partea de administrare a site-ului pot fi modificate cu ajutorul unui panou de control.
Etapele de creare a unui site web sunt următoarele:
Analiza inițială a activității clientului pentru găsirea soluțiilor online pentru îndeplinirea obiectivelor stabilite.
Primul proiect: o dată stabilită funcționalitatea site-ului, se creaza un prim proiect și sitemap-ul.
Grafica: pagini de proiect, cum ar fi casa, produse/servicii, pentru a oferi clienților o idee de cum site-ul dumneavoastră odată definit.
Conținutul site-ului: textele si informațiile furnizate de către client vor fi completate si modificate în cheie SEO pentru un site optimizat pentru motoarele de căutare.
Testare si publicarea online: înainte ca site-ul să fie lansat există o fază preliminară de testare.
Monitorizare si optimizare: site-ul va fi monitorizat în mod constant si optimizat în ceea ce privește vizibilitatea pe motoarele de căutare. Voi oferi rapoarte trimestriale clientului in ceea ce privește controlul si evoluția site-ul si poziționarea acestuia in căutări (SERP) pentru cuvintele cheie.
Suport si asistenta.
Template ales pentru acest proiect se numește graffito si are structura de mai jos.
Figura 8. Pozitia modulelor în template
Templatul are mai multe opțiuni care pot fi personalizate:
Logo
CSS
Fonturi
Fig. 9. Meniul Style din Templates Manager
– Butoane sociale
Fig. 10. Meniul Features din Templates Manager
Meniuri
Copyright
Google Analitics
Poziționarea diverselor module/extensii
Layout
Fig. 11. Meniul Advances din Templates Manager
Vizitatorii au un efect vizual plăcut. Acest template este responsive si este alcătuit din elemente cu dinamica
slideshow
Fig. 12. Slideshow din home page
meniuri
Fig. 13. Tipuri de meniuri din site
slider
Fig. 13. Slider din home page
Fig. 14 Tipuri de taburi din site
customizare în funcție de culorile dorite
Fig. 15. Tipuri de stiluri din site
3.3 Crearea/configurarea entităților aplicației
În panoul de administrare Joomla! sunt câteva secțiuni distincte:
1. Un meniu orizontal drop-down
2. Legături(link-uri) rapide, cum ar fi log out(ieșire), view site(vizualizare site)
3. Ultimele actualizări, cum ar fi: Last 5 Added Articles(Ultimele cinci articole adăugate) etc.
4. Butoane, care vă oferă posibilitatea să adăugați rapid un nou articol, să administrați articole, categorii etc.
Meniul orizont drop-down cuprinde următoarele opțiuni:
· Site– conține principalele configurări pentru site.
Fig. 16. Meniul Site din partea de adminstrare
· Users– aici veți administra utilizatorii. Veți putea configura permisiunile pentru diferiți utilizatori sau grupuri de utilizatori.
Fig. 17. Meniul Users din partea de adminstrare
Se pot seta mai multe tipuri de drepturi pentru utilizatori
Fig. 18. Tipuri de utilizatori
· Menus– în această parte a meniului orizontal veți administra meniurile site-ului vostru.
Fig. 19. Meniul Menus din partea de adminstrare
· Content – veți administra articolele, categoriile, articolele care le veți publica pe prima pagină, fișierele media.
Elementele de meniu Category List cuprind o listă de articole care fac parte dintr-o categorie
Joomla ne oferă libertatea de a publica sau nu un articol pe pagina de start. Acest lucru este destul de simplu de făcut, fie din cadrul articolului pe care dorim să-l publicăm pe pagina de start, fie direct în Article Manager.
Fig. 20. Optiunile pentru editare articol
Pentru a crea articole vom utiliza Article Manager, fie icoana din Panoul de Control(Control Panel), fie Content din meniul orizontal drop drown.
· Components– aici veți administra componentele instalate. Aceste componente sunt, de fapt, niște aplicații care vă vor ajuta foarte mult pentru gestionarea site-ului, cum ar fi: editoare, galerii foto, rețele sociale, forumuri, coș de cumpărături și multe altele.
Acesta oferă posibilitatea să adăugați fișiere tip imagine, documente pdf, office și să le organizați în directoare și subdirectoare. Media Manager vă oferă posibilitatea de a adăuga imagini, documente PDF, Word și vă ajută să vă organizați aceste fișiere.
Media Manager poate fi accesată fie utilizând icoana din Panoul de Control, fie Content din meniul orizontal drop down. Fișierele din Media Manager pot fi vizualizate pe bază de miniaturi sau detalii.
Fig. 21. Meniul Components din panoul de administrare
· Extensions– sunt diverse aplicații care pot îmbunătăți performanța și funcționalitatea site-ului, cum ar fi: votare articole, traducere pagini, protecție spam și multe altele. Acest meniu include următoarele:
Module Manager– sunt aplicații care afișează pe site anumite informații, cum ar fi: afișare formular de logare, de contact, cele mai citite articole, ultimele articole publicate etc.
De asemenea, Joomla este un cadru (framework) pentru construirea de aplicații web rapide, cunoscute sub denumirea de extensii – plugin-uri, module, componente, șabloane (templates).
Fig. 22. Meniul Extension Manager din panoul de administrare
Plug-in Manager– sunt diverse scripturi care vă ajută la îmbunătățirea performanțelor site-ului, cum ar fi: traducere pagini, votare articole etc.
Template Manager– administrare șabloane, adică cum va arăta interfața site-ului: aspect, culoare, grafică etc.
Fig. 23. Meniul Template Manager din panoul de administrare
Language Manager– Joomla a fost tradus în mai mult de 40 de limbi. Cu ajutorul acestuia se pot încărca fișiere de traducere atât a interfeței, cât și a panoului de administrare Joomla.
· Help
Fig. 24. Meniul Help din panoul de administrare
3.4 Configurări globale ale site-ului
Configurări globale cuprinde o serie de setări foarte importante pentru funcționarea corespunzătoare a site-ului. El este disponibil numai pentru Super Users(super utilizatori). Global configuration (configurări globale) are următoarele tab-uri:
· Site– configurări legate de site, cum ar fi numele site-ului, personalizare offline(site închis) etc.
· Metadata– setări privind informații și cuvinte cheie care descriu ce se găsește pe site; acestea sunt foarte importante pentru optimizarea motoarelor de căutare (SEO).
· System– aici, de obicei, nu este nevoie să fie schimbate aceste setări, cum ar fi debug și cache.
· Server– nici aici nu trebuie făcute multe schimbări ale setărilor. Eventual, modificarea fusului orar, a emailului și a numelui.
· Permissions – setări permisiuni pentru utilizatori și grupuri de utilizatori
Joomla este un sistem de management al conținutului – Content Management System (CMS) care permite crearea și gestionarea cu ușurință a conținutul unui site web.
Fig. 25. Meniul Global Configurations din panoul de administrare
O pagină Web, bine optimizată, poate trece la etapa de promovare online sau mai popular, se poate accelera ocuparea unui loc mai bun în motoarele de căutare, adică:
SEO (Search Engine Optimization), sau Optimizare pentru Motoarele de Căutare este un aspect important al site-ului, aici facem referire în special la Google. Pagina noastră Web, trebuie să îndeplinească câteva standarde pentru a putea concura cu alte pagini care prezinta aceleași servicii sau produse. Daca pagina noastră Web, din punct de vedere al optimizării, are un procent ridicat, cu siguranță vom fi înaintea celorlalte. Se poate testa cât de bine este optimizată pagina, cu Page Speed, un tool de la Google, care arată problemele din site și modul de eliminare al erorilor.
SEM (Search Engine Marketing), sau Internet Marketing – în Internet, sunt foarte multe firme care se ocupă de acest domeniu. După optimizarea paginilor Web, ( eliminare erori, combinări de fișiere CSS, JavaScript, optimizare imagini, titluri, descrieri, cuvinte cheie sau conținut), se poate trece la marketing-ul online. În această etapă se poate înscrie site-ul în directoare Web, pe forum-uri, se poate participa la discuții pe blog-uri sau se pot crea blog-uri gratuite unde se face o prezentare la serviciile sau produsele noastre si se pune cate un link către site.
SMO (Social Media Optimization), sau promovarea prin intermediul retelelor sociale – acest serviciu este foarte important pentru un site Web. Promovarea prin rețelele sociale, aduce vizitatori destul de mulți si link-uri către site. Crearea unui cont pe Twitter, DiGG, StumbleUpon, Delicious, sau alte rețele si prezentarea articolelor, vor accelera ocuparea unui loc mai bun în motoarele de căutare.
Fig. 26. Meniul Systems din panoul de administrare
Concluzii
Colaborarea între indivizi, de la utilizatori si până la dezvoltatori, se află în centrul ingineriei software moderne. Fie că se face referire la activitatea colaborativă cu scopul de a rezolva probleme, de a negocia pentru a aplana conflicte sau pentru a crea soluții, colaborarea are un impact deosebit de important asupra activității de dezvoltare software. De asemenea, înțelegerea importanței utilizării acestor tehnologii colaborative, combinată cu scăderea costurilor de comunicație, va conduce cu siguranță la îmbunătațirea modului în care inginerii colaborează pentru a crea produse software de mari dimensiuni.
În lucrare este elaborat un site Web și programul de administrare al firmei. Site-ul Web este menit pentru a aduce la cunoștință utilizatorilor toată informația despre produsele propuse de întreprinderi în cauză, iar programul administrator se folosește de către colaboratorii firmei pentru a face schimbări pe site, pentru a adăuga un produs nou etc.
Site-ul Web al întreprinderii în cauză a fost creat în conformitate cu cerințele utilizatorilor. Designul lui a fost conceput după analiza logotipului firmei, iar în calitate de suport al datelor am folosit sistemul de gestiune al bazelor de date MySQL. Este un site flexibil ce corespunde cerințelor de astăzi, realizat cu ajutorul limbajului PHP si cu ajutorul JOOMLA. La intrarea pe site utilizatorul i se propun spre atenție atât ultimele știri (apariția spre vânzare a unui nou produs etc.), cât și un meniu de navigare.
Joomla este un sistem de management al continutului Open Source, scris in PHP, destinat publicarii de continut pe local sau online prin intermediul bazelor de date SQL.
Numele reprezintă transcrierea fonetică al cuvântului din limba Swahili, ceea ce înseamnă ¨împreun㨠sau ¨toți împreună¨. Este motto-ul dezvoltatorilor de sistem, care doresc să creeze un sistem prin care se poate crea tot ce vrei.
Pricipalele avantaje ale utilizării CMS-Joomla sunt rurmătoarele:
Gratuit. Este avantajul principal al acestui sistem, și ceea ce atrage pe începători, care nu sunt dispuși sa plătească o mulțime de bani pentru conținut. Acest lucru atrage mulți specialiști care creează site-uri web.
Op-soure: este un program gratuit.
Un numar mare de elemente suplimentare. Sistemul are un numar foarte mare de module, template-uri, etc.
Instalare rapidă și ușoară.
Setări prestabilite. Sistemul imediat după instalare are un minim necesar pentru lucru.
Actualizări constante. Dezvoltatorii găsesc vulnerabilități și imediat le închid.
Documentația. Deoarece CMS Joomla este creat cu mult timp în urma, pentru el s-au făcut o mulțime de documente si instrucțiuni.
Traducerea. Aproape toate modulele gratuite sunt traduse în limba română, panoul de administrare de asemenea este tradus în română.
Dezavantajele prograului Joomla sunt următoarele:
Dificil pentru începător. Panoul administrativ este oarecum greoi, a înțelege din prima principiul de funcționare este imposibil.
Cod suplimentar. Acest sistem creează o mulțime de cod suplimentar, care nu este necesar de fiecare dată. Un începător nu va înțelege si nu va reuși sa elimine codul suplimentar, este o sarcină pentru un profesionist cu experiență.
Module si teme plătite. Pentru Joomla! sunt create o mulțime de module și teme gratuite, care în cele mai multe cazuri sunt suficiente. Dar daca vrei să faci site-ul mai avansat nu vei reuși fară module plătite, iar prețul, după cum se știe, nu este mic si poate afecta portofelul.
Încărcarea lenta a paginii. Din cauza ca site-ul nou are o mulțime de cod suplimentar si o mulțime de module vor trebuii luate măsuri serioase pentru accelerare.
Bibliografie
Sisteme de gestionare a bazelor de date: Abase. A. Ștefănescu, V. Stanciu, București, Editura ALL 1994.
Pasu Corina, Pasu Andrei, Totul despre … SQL.: Interogarea bazelor de date. București, Editura Tehnică 1992.
Vitalie Cotelea, Baze de date relaționale: proiectare logică. Editura ASEM, Chișinău 1997.
Florin Pilat, Mădălina Răceanu, Carmen Stanciu, World Wide Web – Mosaic și Netscape, București, Editura Tehnică, 1996.
Valentin Cristea, Monica Pietroșanu, Cristian Petculescu, Mai multe despre Internet. Eudora. Netscape. Internet în România, București, Teora, 1995.
W. Bardere, World Wide Web, Global Tour Guide. NEW READERS PRESS, 1996.
Kris Jamșa, Suleiman Lalani, Steve Weakley, Programarea în Web, București, Teora, 1998.
Kris Jamșa, Ken Cope, Programarea Aplicațiilor Internet, Editura Teora, București,1998.
Teach Yourself SQL in 21 Days, Second Edition, Sams Publishing 1997.
Hamer Alex, Ullman Ghris, Dinamic HTML, Spravocnik, 2000.
Infornis Guide to SQL, Informix Press, Menlo Park, CA, 1994.
My SQL benchmark & documentation: http://www.mysql.com/docs.
DelphiClientServerHelpFile.
http://www.php.net.
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Aplicatie web pentru organizarea de evenimente folosind mijloace din PHP și JOOMLA [304679] (ID: 304679)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
