Utilizarea Programarii Web Pentru Evidenta Publicatiilor Dintr Un Departament Universitar
LUCRARE DE LICENȚĂ
UTILIZAREA PROGRAMĂRII WEB PENTRU EVIDENȚA PUBLICAȚIILOR DINTR-UN DEPARTAMENT UNIVERSITAR
CUPRINS
Introducere
Capitolul I. Fundamente teoretice ale paginilor web – Limbajul HTML
Scurt istoric al apariției și funcționării Internetului. Rețeaua WWW și conceptul de Hypertext
Despre website-uri
HTML standard – limbaj descriptiv al unei pagini web
Scrierea de cod HTML. Editoare specializate și validatoare HTML
Structura de bază a unei pagini
Paragrafe. Atribute ale unui tag
Elemente care permit formatarea textului
Liste
Imagini
Tabele
Legături (link-uri)
Capitolul II. Limbajul de programare PHP
Instalare PHP
Inițiere în PHP
Exemplu de creare a unui script PHP
Variabilele și lucrul cu acestea
Constante
Variabile predefinite
Tipuri de variabile
Clase și obiecte
Capitolul III. Baze de date. Sistemul de gestiune MySQL
Ce este MySQL?
Ce este PHP?
Instalare EasyPHP
Instalare manual Apache
Lucrul cu baze de date MySQL
Fundamente MySQL
Conectarea și deconecatea de la server
Introducerea interogărilor
Crearea și selectarea unei baze de date
Crearea tabelelor
Introducerea datelor în tabel
Selectarea datelor din tabel
Actualizarea datelor
Ștergerea datelor
Procesul de proiectare a bazelor de date
Tipuri de relații între tabele
Forme de normalizare a tabelelor
MySQL și PHP
Conectarea la MySQL din PHP
Execuția comenzilor MySQL din PHP
Crearea unei tabele din PHP
Capitolul IV. Utilizarea programării Web pentru evidența publicațiilor dintr-un departament universitar
Concluzii
Bibliografie
CAPITOLUL I
Fundamente teoretice ale paginilor web – Limbajul HTML
Scurt istoric al apariției și funcționării Internetului. Rețeaua WWW și conceptul de Hypertext
Istoria Internetului debutează în anul 1968, când guvernul Americii intenționa să interconecteze universitățile, unitățile militare și de apărare ale statului, astfel încât ele să colaboreze în cadrul unor proiecte de cercetare comune. În acest fel, s-a alcătuit o agenție cu numele Advanced Research Projects Agency (ARPA). Una dintre cheile proiectului punea în dezbatere faptul că, depozitarea tuturor informațiilor pe un singur computer nu ar fi fost deloc sigură, fie din cauză că acesta ar putea fi punctual sensibil al unui eventual atac, fie pur și simplu din cauză că acestea ar putea fi pierdute în cazul unei defecțiuni tehnice majore. O rezolvare pentru a face față unei asemenea situații ar fi de a copia și distribui informațiile pe mai multe computere, în întregul stat, folosind o rețea.
În 1975, câteva dintre limbajele sau protocoalele pe care computerele le foloseau pentru a comunica între ele s-au tipizat. Majoritatea universităților importante și a instituțiilor de apărare din Statele Unite ale Americii s-au legat împreună într-o rețea ce se numea DARPANET, toate computerele folosind același protocol pe care azi îl cunoaștem sub denumirea de TCP/IP. Rețeaua, cu trecerea timpului, a fost schimbată de mai multe rețele, care astăzi împânzesc întreagă lume.
În anul 1980, mai multe colegii și universități au fost legate la Internet. Acest lucru a permis universităților să-și fragmenteze informații despre cercetările lor, programe și știri actuale. În anii ’90 Internetul a început să fie folosit și în scopuri comerciale. În curând, multe alte căi de utilizare a informațiilor trimise prin intermediul acestei uriașe rețele au fost dezvoltate.
În prezent, este posibil să folosești Internetul pentru a trimite email-uri pe întregul glob în doar câteva secunde. Poți căuta informații despre orice subiect dorești. Expresia „World Wide Web” (WWW) definește o adunare de documente care se întinde în câteva sute de milioane de computere.
Principiul de bază al funcționării Internetului constă în faptul că două sau mai multe computere pot comunica între ele. Pentru ca acest lucru să fie realizabil este necesar să existe un „protocol”, adică o mulțime de norme care trebuie respectate de computere (deci de programele care rulează pe ele) pentru ca transmisia de date să poată avea loc.
Normele se raportează la:
• găsirea computerului destinatar al transferului de date;
• schimbul efectiv al datelor;
• modalități prin care expeditorul comunică faptul că au fost trimise toate datele, iar destinatarul comunică faptul că le-a primit;
• compresia datelor: prin folosirea anumitor algoritmi matematici, datele care urmează să fie trimise sunt prelucrate de așa natură, încât să fie memorate prin folosirea unui spațiu mic de memorie. Prin urmare, trimiterea lor durează mai puțin. Invers, la destinație sunt decompresate prin utilizarea acelorași algoritmi matematici;
• recunoașterea erorilor care pot interveni în trimiterea datelor: și aici există mai mulți algoritmi care permit recunoașterea și corectarea erorilor.
Standardul care s-a impus în privința Internetul, constă în protocolul TCP/IP. Numele este de fapt, numele general al unei familii de protocoale folosite pentru transferul datelor în rețea. Orice computer conectat la Internet are o adresă, care se numește adresă IP (Internet Protocol Address). O adresă IP este compusă din 4 numere între 0 și 255, prin urmare o astfel de adresă ocupă 4 octeți. Cum trimiterea datelor la un moment dat se face între două computere, datele se transmit de la o adresă IP la alta.
Protocolul IP reglementează trimitereaa datelor de la o adresă IP la alta. Datele sunt transmise împărțite în pachete. În acest fel, se preîntâmpină monopolizarea transmisiei în rețea doar de către un singur utilizator.
Protocolul TCP (Transmission Control Protocol): de la pornire, un program TCP împarte informația de trimitere în mai multe pachete IP. Acestea sunt transmise la destinație cu ajutorul rețelei. O dată sosite la destinație, un alt program TCP îmbină și aranjează în ordinea corectă pachetele IP de date primite. Desigur, din cauza unor probleme hardware, anumite pachete se pot pierde pe drum. Protocolul TCP se ocupă și de acest lucru. Așadar, când împachetează datele într-un plic „IP”, protocolul TCP al trimițătorul adaugă și un număr (denumit sumă de control) care va permite destinatarului să se asigure de faptul că datele primite sunt corecte. Receptorul restabilește suma de control și o compară cu cea trimisă de emițător. Dacă ele nu sunt asemănătoare, înseamnă că a apărut o eroare în momentul transmisiei, motiv pentru care protocolul TCP înlatură acel pachet, cerând retransmiterea sa.
În anul 1989 au fost puse Bazele World Wide Web (WWW) la Centrul European de Cercetări Nucleare (CERN) în Geneva. Propunerea de început pentru crearea a unei colecții de documente având relații între ele a fost făcută de Tim Berners-Lee în martie, anul 1989. Această propunere s-a ivit în urma problemelor de comunicare pe care le întâlneau echipele de cercetători ce utilizau centrul, chiar și folosind poșta electronică.
Primul server web utilizat de Tim Berners-Lee a apărut nu mult înainte de decembrie, în anul 1991, când s-a făcut prima lui demonstrație oficială. Studiul a continuat prin apariția primei aplicații grafice Mosaic, în februarie 1993, înființată de cercetătorul Marc Andreessen de la centrul universitar National Center for Supercomputing Applications (NCSA) din orașul Urbana-Champaign din statul federal Illinois, SUA. Ulterior WWW-ul s-a dezvoltat până la ceea ce este azi, un serviciu integrativ și multimedial, având ca suport fizic Internetul.
Practic, WWW este un ansamblu de documente și informații de tip hipertext unite între ele, care pot fi accesate prin rețeaua universală de Internet. Documentele, care se află în diferite locații pe diverse computere-server, pot fi regăsite cu ajutorul unei adrese unice. Hipertextul este prelucrat cu sprijinul unui program de navigare în web care se numește browser și care descarcă paginile web de pe un server web și le afișează pe un terminal.
Prin hipertext se înțelege un fel de document electronic, o metodă de organizare a informațiilor, unde datele sunt stocate într-o rețea de noduri și legături, putând fi accesată cu ajutorul programelor de navigare interactivă, și manipulată de un editor structural. Noțiunea de bază în denumirea hipertextului este "legătura" (link-ul), fie în cadrul aceluiași document, fie către alt document. Legătura de tip link acceptă organizarea neliniară a informațiilor.
Un sistem hipertext permite autorului său să înființeze așa-numite "noduri", să le unească între ele, iar cititorului navigarea de la un nod la altul. Astfel un nod înfățișează un concept putând cuprinde orice fel de informație: text, grafică, imagini, animații, sunete, etc.
Nodul sursă al unei legături este denumit "referință", iar cel destinație "referent" sau ancoră, punctele de legătură din respectivele noduri fiind marcate. Activarea marcajelor unei legături duce la vizualizarea nodurilor. Asocierea cu unele elemente mediale a dus la dezvoltarea noțiunii de hipertext către "hipermedii".
Despre website-uri
Noțiunea de website (sau pur și simplu site, ori „site web”) denumește o grupă de pagini web multimediale (conținând texte, imagini fixe, imagini mișcătoare și chiar sunete), accesibile în Internet în principiu oricui, de obicei pe o temă anume, și care sunt conectate între ele prin așanumite hyperlinkuri. Diversele situri web pot fi oferite de către o companie, un proiect, o rețea de utilizatori, o persoană particulară, o administrație publică și multe altele.
Pentru crearea paginilor web s-a impus limbajul HTML (HyperText Markup Language)– un limbaj de marcare, al cărui scop constă în prezentarea într-un anumit format a informațiilor: paragrafe, tabele, fonturi, culori, ș.a.m.d.
Calculatorul pe care se găsește site-ul se numește „server”, iar calculatoarele care accesează conținutul site-ului se numesc „client”.
Orice calculator client trebuie să dispună de un program specializat, numit „browser”, cu ajutorul căruia să se poată interpreta și deci vizualiza fișierele HTML.
Pe server trebuie să se găsească un program care răspunde cererilor browser-ului aflat pe calculatorul client. Cererea efectuată de către browser și răspunsul server-ului se fac prin respectarea unui anumit protocol. Acest protocol se numește HTTP (HyperText Transfer Protocol).
HTML standard – limbaj descriptiv al unei pagini web
HTML este un limbaj de marcare orientat către prezentarea fișierelor text pe o singura pagină.
Folosind un software de redare specializat, numit agent utilizator HTML (cel mai bun exemplu de astfel de software fiind browserul web) HTML furnizează mijloacele prin care conținutul unui document poate fi adnotat cu diferite tipuri de metadate și sugestii de redare. Sugestiile de redare pot varia de la modelări minore ale textului (cum ar fi specificarea faptului că un anumit cuvânt trebuie subliniat sau că o imagine trebuie introdusă) până la scripturi complicate, hărți de imagini și formulare. Metadatele pot conține informații despre titlul și autorul fișierului, informații structurale despre cum este divizat documentul în diferite segmente, paragrafe, liste, titluri etc. și informații cruciale care permit ca fișierul să poată fi unit de alte fișiere pentru a forma astfel hiperlink-uri.
HTML este un format text propulsat pentru a putea fi citit și editat de oameni folosind un editor de text simplu. Totuși, scrierea și modificarea paginilor în acest fel necesită cunoștințe solide de HTML și este ocupă timp. Editoarele grafice precum Macromedia Dreamweaver sau Microsoft FrontPage permit ca paginile web sa fie folosite asemănător cu documentele Word, dar cu observația că aceste programe generează un cod HTML care este de multe ori de calitate proastă.
HTML se poate genera direct utilizând tehnologii de codare din partea serverului cum ar fi PHP, JSP sau ASP.
Scrierea de cod HTML. Editoare specializate și validatoare HTML
Crearea unui document HTML este foarte simplă, putând fi folosită cu ajutorul oricărui editor de text. Însă, pentru a avea un control ridicat în privința corectitudinii codului scris care conținutul unui document poate fi adnotat cu diferite tipuri de metadate și sugestii de redare. Sugestiile de redare pot varia de la modelări minore ale textului (cum ar fi specificarea faptului că un anumit cuvânt trebuie subliniat sau că o imagine trebuie introdusă) până la scripturi complicate, hărți de imagini și formulare. Metadatele pot conține informații despre titlul și autorul fișierului, informații structurale despre cum este divizat documentul în diferite segmente, paragrafe, liste, titluri etc. și informații cruciale care permit ca fișierul să poată fi unit de alte fișiere pentru a forma astfel hiperlink-uri.
HTML este un format text propulsat pentru a putea fi citit și editat de oameni folosind un editor de text simplu. Totuși, scrierea și modificarea paginilor în acest fel necesită cunoștințe solide de HTML și este ocupă timp. Editoarele grafice precum Macromedia Dreamweaver sau Microsoft FrontPage permit ca paginile web sa fie folosite asemănător cu documentele Word, dar cu observația că aceste programe generează un cod HTML care este de multe ori de calitate proastă.
HTML se poate genera direct utilizând tehnologii de codare din partea serverului cum ar fi PHP, JSP sau ASP.
Scrierea de cod HTML. Editoare specializate și validatoare HTML
Crearea unui document HTML este foarte simplă, putând fi folosită cu ajutorul oricărui editor de text. Însă, pentru a avea un control ridicat în privința corectitudinii codului scris, este recomandat să folosim un editor specializat, care să evidențieze diversele elemente de marcare (TAG-uri, numite și „elemente” sau „etichete”) sau, mai mult, să poată verifica și descoperi erorile.
Din categoria editoarelor care pun evidențiază diferitele elemente se află editorul Notepad++, iar din categoria validatoarelor CSE HTML Validator Lite, amândouă fiind gratuite și putând fi găsite pe Internet.
Structura de bază a unei pagini
Structura inițială a unei pagini HTML este următoarea (Fig. 1.1.) :
Fig. 1.1
Iată și modul în care pagina de mai sus este vizualizată în Mozilla Firefox (Fig. 1.2) :
Fig. 1.2
Dacă analizăm exemplul observăm că:
Pagina începe cu tag-ul <HTML> și se termină cu tag-ul </HTML>;
Pagina are un antet (HEAD) și corpul propriu-zis (BODY);
Antetul se află între tag-urile <HEAD> și </HEAD>;
Corpul se află între etichetele <BODY> și </BODY>;
Opțional, antetul poate conține titlul paginii, cuprins între tag-urile <TITLE> și </TITLE>. Titlul apare pe bara de titlu a ferestrei afișate în browser.
Corpul poate conține texte și/sau imagini. În exemplu, pagina conține textul „Acesta este primul exemplu de pagina…”
Comentariile, care nu sunt afișate de către browser, pot fi scrise între tag-urile <!—și –>.
Numele tag-urilor nu sunt case sensitive, deci pot fi scrise atât cu litere mici cât și cu litere mari. În continuare, pentru a le pune în evidență, le vom scrie cu litere mari.
Paragrafe. Atribute ale unui tag
În general, textele conținute de o pagină se pot afla în mai multe paragrafe. Un paragraf se introduce între tag-urile <P> -</P>.
La afișare, două paragrafe consecutive vor fi despărțite printr-o linie goală.
Tag-ul </P> poate lipsi; un nou paragraf poate fi descoperit prin tag-ul <P>.
În cadrul unui fișier HTML, Enter-ul nu are nici un efect. În același timp, dacă două cuvinte ale unui paragraf sunt despărțite prin mai multe spații sau alte caractere albe (enter-uri, tab-uri), în browser se afișează doar un singur spațiu.
Majoritatea tag-urilor li se pot adăuga atribute. Acestea definește comportamentul mai amănunțit al elementului respectiv.
Un atribut se precizează înainte de închiderea parantezei unghiulare a etichetei “>” prin nume_atribut=”valoare”.
În cazul paragrafului, atributul “align” ajută la alinierea textului din cadrul paragrafului. Dacă acest atribut nu este specificat, alinierea se face în mod implicit la stânga. Acest atribut poate conține una dintre valorile center, left, right, justify, ca în exemplul de mai jos:
<HTML>
<HEAD>
<TITLE>Alinierea paragrafelor</TITLE>
</HEAD>
<BODY>
<P align="center">Aliniat in centru</P>
<P align="right">Aliniat la dreapta</P>
<P align="left">Aliniat la stinga</P>
<P align="justify">Paragraful acesta este aliniat la ambele margini</P>
</BODY>
</HTML>
Iată pagina al cărei cod tocmai a fost prezentat, vizualizată în Internet Explorer (Fig.1.3.):
Fig. 1.3.
Elemente care permit formatarea textului
<BR> : Forțează afișarea a ceea ce urmează pe următorul rând. Acest tag nu face un nou paragraf;
<B></B> : Are ca rol să afișeze textul bold (îngroșat) cuprins între cele două tag-uri ale sale. Un tag asemănător lui <B> este: <STRONG></STRONG>;
<I></I> : Are rol să afișeze italic (înclinat) textul dintre cele două tag uri ale sale.
<U></U> : Are rolul de a afișa subliniat textul cuprins între cele două etichete ale sale. O etichetă sinonimă a lui <U> este: <INS></INS>;
<S></S> : Afișează tăiat (cu o linie orizontală) textul dintre cele două tag-uri ale sale. Sinonim tag-ului <S> este: <DEL></DEL>;
<BIG></BIG> : Are rolul de a afișa textul dintre cele două etichete ale sale mai mare decât textul în care este cuprins;
<SMALL></SMALL> : Are rol de a afișa textul dintre cele două tag uri ale sale mai mic decât textul în care este cuprins;
<SUP></SUP> : Are rolul de a afișa textul dintre cele două tag-uri ale sale la sfârșitul textului și deasupra acestuia (ca o putere);
<SUB></SUB> : Are rolul de a afișa textul dintre cele două tag-uri ale sale ca un indice;
<TT></TT> : Rolul acestui tag este de a afișa textul cuprins între cele două etichete ale sale mai sus monospațiat (toate caracterele sunt pe aceeași lungime – practic, se utilizează fontul Courier New).
În cod-ul HTML de mai jos se află toate aceste etichete exemplificate:
<HTML>
<HEAD>
<TITLE>Formatarea textului</TITLE>
</HEAD>
<BODY>
<P>
<B>Acest text este afisat folosind tag-ul B</B> <BR>
<STRONG>Acest text este afisat folosind tag-ul STRONG</STRONG> <BR>
<I>Acest text este afisat folosind tag-ul I</I> <BR>
<DFN>Acest text este afisat folosind tag-ul DFN</DFN> <BR>
<EM>Acest text este afisat folosind tag-ul EM</EM> <BR>
<U>Acest text este afisat folosind tag-ul U</U> <BR>
<INS>Acest text este afisat folosind tag-ul INS</INS> <BR>
<S>Acest text este afisat folosind tag-ul S</S> <BR>
<DEL>Acest text este afisat folosind tag-ul DEL</DEL> <BR>
Normal <BIG>Mai mare</BIG> Normal <BR>
Normal <SMALL>Mai mic</SMALL> Normal <BR>
Iata si un <SUP>exponent</SUP> <BR>
iar acum un <SUB>indice</SUB> <BR>
<TT>Acest text este monospatiat</TT>
</P>
</BODY>
</HTML>
Acest cod vizualizat în browser arată în felul următor:
Fig. 1.4.
Pentru scrierea titlurilor se folosesc etichetele <H1></H1>, <H2><H2/>, . . . , <H6></H6>. Practic, în funcție de numărul de după H dimensiunea fontului diferă (<H1> folosește fontul de dimensiune maximă, <H6> fontul de mărime minimă) iar textul care apare între etichete este scris îngroșat (bold);
Pentru fixarea font-ului se folosește eticheta <FONT></FONT>. Atributele acestuia sunt:
– “face” exemplifică numele font-ului;
– “size” indică dimensiunea font-ului (trebuie să fie un număr cuprins între 1 și 7. Implicit este 3);
– “color” reprezintă specificarea culorii. Aceasta se specifică prin intermediul constantelor predefinite ale HTML-ului (numele englezesc al culorii) ori prin componentele sale de Roșu, Verde și Albastru exprimate în hexazecimal, de forma #RRGGBB.
Iată un exemplu de utilizare al lor:
<HTML>
<HEAD>
<TITLE>Exemplificare titluri si font</TITLE>
</HEAD>
<BODY>
<P>
<H1>Acesta este un titlu de tip H1</H1>
<H2>Acesta este un titlu de tip H2</H2>
<H3>Iar acesta este un titlu de tip H3</H3>
<FONT face="arial" color="blue" size="4">
Acest text este scris cu fontul Arial, albastru, dimensiune 4
</FONT><BR>
Iar acest text este scris normal<BR>
</P>
<P>
Iata si culorile cucubeului, scrise cu font-ul Comic Sans MS,
bold, dimensiune 7:<br>
<B>
<FONT face="Comic Sans MS" size="7" color="red">R</FONT>
<FONT face="Comic Sans MS" size="7" color="orange">O</FONT>
<FONT face="Comic Sans MS" size="7" color="yellow">G</FONT>
<FONT face="Comic Sans MS" size="7" color="green">V</FONT>
<FONT face="Comic Sans MS" size="7" color="blue">A</FONT>
<FONT face="Comic Sans MS" size="7" color="darkblue">I</FONT>
<FONT face="Comic Sans MS" size="7" color="magenta">V</FONT>
</B>
</P>
</BODY>
</HTML>
Vizualizat în browser (Fig. 1.5.):
Fig. 1.5.
Așa cum am văzut, dacă în interiorul unui text din cadrul fișierului HTML apare un grup de mai multe spații, în browser se va afișa doar un singur spațiu. Dacă dorim forțarea afișării unui spațiu, se utilizează identificatorul special (ultimul caracter, ”;”, face parte din identificator).
Liste
Acestea permit ca unele enunțuri (texte, elemente) să fie numerotate sau marcate într-un anumit fel. O astfel de structură se numește listă.
În HTML există 3 feluri de liste:
Liste ordonate (Ordered Lists): sunt liste în care elementele sunt numerotate.
Introducerea lor în cadrul documentului HTML se face prin etichetele <OL></OL>, elementele (itemii) lor fiind introduse între aceste două etichete prin <LI></LI> (tag-ul de sfârșit nu este obligatoriu). Astfel, numerotarea se face cu numere arabe (1, 2, 3, …). Ea poate fi schimbată prin folosirea atributului type în cadrul tag-ului OL. Acesta poate avea una dintre valorile:
– a : numerotarea va fi făcută cu litere mici (a, b, c, …)
– A : numerotarea va fi făcută cu litere mari (A, B, C, …)
– i : numerotarea va fi făcută cu numere romane mici (i, ii, iii, iv …)
– I : numerotarea va fi făcută cu numere romane mari (I, II, III. IV, …)
– 1 : (implicit) numerotarea va fi făcută cu numere arabe obișnuite (1, 2, 3, …)
Liste neordonate (Unordered Lists): sunt liste unde elementele nu sunt numerotate, însă în dreptul fiecărui element este afișat un marcator.
Inserarea lor în cadrul fișierului HTML se face prin etichetele <UL></UL>, elementele (itemii) lor fiind trecute între aceste două etichete prin <LI></LI>. Astfel, marcarea lor se face prin cercuri pline. Ea poate fi schimbată prin folosirea atributului type în cadrul etichetei UL. Acesta poate avea o valoare dintre următoarele:
– disc : marcarea este făcută cu cercuri pline (implicit)
– square : marcarea este făcută cu pătrățele
– circle : marcarea este făcută cu cercuri goale
Liste de definiție (Definition Lists): au ca rol să descrie o listă de definiții.
Inserarea lor în interiorul fișierului HTML se face prin etichetele <DL></DL>. Elementele lor sunt de două feluri:
– Termenul definit: este introdus între etichetele <DT>…</DT> (eticheta de
sfârșit nu este obligatorie).
– Definiția propriu-zisă: este introdusă între etichetele <DD></DD> (eticheta de sfârșit
nefiind obligatorie).
Imagini
Eticheta utilizată pentru inserarea unei imagini în fișierul HTML este <IMG>. Forma de bază a acestui element este <IMG atribute>. Această etichetă nu are și formă de închidere.
Atributele sale sunt:
src găsește fișierul efectiv de pe computer, ce conține imaginea respectivă. Dacă imaginea este în fișierul curent, se specifică doar numele și extensia sa. Dacă se află într-un subfișier, acesta se va specifica înaintea numelui și extensiei imaginii, delimitat prin caracterul /. Imaginile recunoscute de aproape toate browser-ele internet sunt de tipul .jpg, .gif, .png;
align specifică felul de aliniere al imaginii în legătură cu textul în cadrul căruia se găsește. Acesta poate avea una dintre următoarele valori:
– right : imaginea va fi aliniată în dreapta, iar textul ce urmează este scris în locul
rămas liber, în partea stânga a acesteia;
– left : imaginea va fi aliniată în stânga, iar textul care va urma va fi scris în locul
rămas gol, în dreapta acesteia;
– top : numai latura de sus a imaginii se ordonează cu rândul de text în cadrul căruia se
află; rândul următor de text se va fi afișa după imagine, ocupând toată lățimea ecranului;
– middle : rândul de text în locul în care se află imaginea se va alinia la jumătatea
înățimii acesteia; succesorul rând de text se va fi afișa după imagine, fiind în întreaga lățime a ecranului;
– bottom : numai partea de jos a imaginii se ordonează cu rândul de text în cadrul căruia
este; următorul rând de text se va fi afișa după imagine, ocupând toată lățimea ecranului;
Dacă dorim încetarea unei alinieri de imagine de tipul right sau left înainte ca textul să fi umplut spațiul gol din stânga, respectiv dreapta acesteia, se poate folosi eticheta <br>, căruia i se va adăuga unul din atributele clear=”left” sau clear=”right” sau clear=”all”, depinde de caz;
Atributul alt=”text” acceptă specificarea unui text alternativ care va fi afișat ori dacă ținem cursorul mouse-ului deasupra imaginii, ori în locul imaginii propriu-zise, numai dacă imaginea nu poate fi încărcată din cauza unei probleme de conexiune;
Atributele height și width aprobă specificarea altor mărimi pentru imagine, decât mărimile reale ale acesteia. Bineînteles, dacă mărimile nu sunt proporționale cu cele reale, imaginea va fi denaturată. În același timp, dacă specificăm mărimi mai mari decât cele reale, imaginea va avea o claritate mai puțin bună. În realitate, imaginea este transmisă de pe server la mărimile sale originale, redimensionarea făcându-se doar la nivelul computerului pe care este vizionată pagina;
Atributul border acceptă stabilirea grosimii chenarului care va împrejmui poza. Implicit, valoarea setată pentru border-ul inițial este ”0”, fapt care înseamnă că imaginea nu este împrejmuită de un chenar.
Tabele
Tabelele înfățișează un element extrem de important al unei pagini web. În foarte multe cazuri, tabele cu margini invizibile sunt utilizate ca și „schelet” al paginii, pentru a putea să realizeze alinieri mai dezvoltate ale elementelor acesteia.
Eticheta pentru definirea unui tabel este <TABLE></TABLE>. În cadrul acestora se impune descrierea liniilor (rândurilor) tabelului, în cadrul fiecărui rând fiind definite celulele acestuia. Descrierea unui rând se face între etichetele <TR></TR>. Totodată, celulele din cadrul rândului se definesc între <TD></TD>. Atît eticheta </TR> cât și eticheta </TD> pot fi neglijate.
Un prim atribut al etichetei <TABLE> este border=”grosime_pixeli”. Dacă acest atribut este uitat, tabelul va avea o margine invizibilă. Dacă se precizează doar atributul, omițând grosimea, aceasta va fi dată, implicit, ca fiind 1.
Atribute ale etichetei <TABLE>:
cellpadding=”nr_pixeli” acceptă stabilirea unui spațiu care va fi lăsat, în orice celulă a tabelului, între conținutul celulei și marginile acesteia. Dacă acest atribut nu este specificat, el va fi considerat în mod implicit 0;
cellspacing=”nr_pixeli” acceptă stabilirea spațiului care va fi lăsat între chenarele căsuțelor vecine în tabel (și inclusiv între ele și chenarul din afara tabelului). Dacă nu se menționează acest atribut, el este în mod implicit setat 2. Interiorul unei celule poate fi cât se poate de general: de la text și imagini până la alte tabele;
width=”lățime” permite stabilirea lățimii tabelului. Lățimea se poate seta în procente, cazul unde se va calcula ca și procent din lățimea ferestrei browser-ului (ex: width=”80%”) sau în pixeli (ex: width=”300”);
height=”înălțime” permite stabilirea înălțimii tabelului. Lățimea poate fi dată, asemenea atributului width, în procente sau în pixeli;
atributul align decide ordonarea tabelului în pagină. Poate avea una dintre valorile left, right sau center. Dacă, pe lângă tabel, se mai inserează și text, acesta se va poziționa față de tabel în același fel în care se poziționează și față de imagini;
bgcolor=”culoare” acceptă stabilirea culorii de fundal al întregului număr de cellule ale tabelului;
bordercolor=”culoare” acceptă stabilirea culorii chenarului (în același timp al celui interior cât și al celui exterior).
Atribute ale etichetei <TR>:
align precizează, pentru toate celulele de pe linie, felul alinierii conținutului pe orizontală, în cadrul celulelor. Poate avea una dintre valorile left, right, center sau justify;
valign precizează, pentru toate celulele de pe linie, felul alinierii conținutului pe verticală, în cadrul celulelor. Poate avea una dintre valorile top, bottom sau middle;
bgcolor precizează, pentru toate celulele de pe linia curentă, culoarea de fundal.
Atribute ale etichetei <TD>:
width și height precizează, pentru celula respectivă, lățimea și înălțimea. Poate fi setată în procente sau pixeli. Dacă e setată în procente, se va modifica din lățimea, respectiv înălțimea tabelului. Schimbarea lățimii și a înălțimii unei celule va avea efect și în cadrul celorlalte celule, pentru ca tabelul să fie aliniat;
align și valign determină, la fel ca și în cazul etichetei <TR>, felul în care este aliniat conținutul în interiorul celulei, pe orizontală sau pe verticală, având întâietate față de alinierea la nivel de linie;
colspan=”n” determină întinderea celulei respective în dreapta cu n coloane;
rowspan=”n” determină întinderea celulei respective în jos cu n linii;
bgcolor precizează, pentru celula respectivă, culoarea de fundal. Bineînțeles, are prioritate față de același atribut la nivel de linie.
Eticheta <TH></TH> poate înlocui eticheta <TD></TD>. Atributele sunt aceleași. Singura deosebire este că textele de după eticheta <TH> sunt, în mod implicit, inserate îngroșat (Bold), iar ordonarea lor se setează pe centru;
Eticheta <CAPTION></CAPTION> acceptă scrierea titlului unui tabel. Această etichetă trebuie să se insereze imediat după </TABLE>. Eticheta suportă atributul align. Acesta poate avea una dintre valorile: left (titlul va fi așezat în stânga sus), right (așezare dreapta sus), top (așezare pe centru sus), bottom (așezare pe centru jos);
În Figura 1.6. vom realiza un tabel folosind eticheta caption:
Fig. 1.6.
Legături (link-uri)
După cum am observat în partea de introducere a acestui capitol, noțiunea de www este strâns legată de fișierele de tip hipertext.
Tot ceea ce am descris din limbajul HTML până în momentul actual, reprezintă doar partea de descriere a acestuia, cu ajutorul căreia se poate compune un conținut static.
Link-urile sau legăturile sunt mecanismul prin care:
Permite ca un vizitator al paginii, prin executarea unui click, să acceseze o altă pagină, la care vrem să-i creăm oportunitatea unui acces rapid și, dacă acesta dorește, să permită revenirea în pagina inițială prin executarea butonului Back din browser-ul de Internet;
Permite ca un vizitator al paginii noastre să obțiină un anumit document, de orice fel, care se găsește pe pagina noastră (download);
Permite ca un vizitator al paginii să asculte un mesaj sonor sau chiar să poată viziona un video;
Permite ca, printr-un click, să putem viziona o pagină (inclusiv cea curentă) doar dintr-un anumit loc, fără a utiliza barele de derulare;
Permite ca, printr-un click, cel care vizitează site-ul să ne poată expedia un e-mail.
Pentru toate acestea, se folosește eticheta <A></A>, numită și Ancoră.
Ancorele care leagăt alte pagini permit ca un anumit element din fișier să conțină link-ul către o altă pagină. Elementul care realizează legătura este în general un text sau o imagine. În general, elementul legat își modifică aspectul față de cel clasic: textul va fi subliniat și colorat în alt mod, iar imaginea va avea un chenar colorat. În cazul în care ducem mouse-ul deasupra elementului legat, acesta va lua forma unei mâini, exemplificându-ne astfel că este vorba de o legătură pe care o putem utiliza. Printr-un simplu click, putem intra pe pagina către care este făcut link-ul.
Acest fel de legătură se face practic utilizând atributul href, ca în exemplul de mai jos (Fig. 1.7. )
<p> Prin executarea unui click
<A href="http://mail.yahoo.com">
pe acest text </A>
poti accesa direct pagina de mail yahoo.
</p>
Fig. 1.7.
Precum se observă, atributul href obține adresa completă a paginii către care dorim să facem link-ul. Dacă e vorba de un document local, din același fișier cu pagina din care facem link-ul, la href este destul să scriem numele și extensia (de ex: href=”index.html”).
Ancorele de legătură către documente (pentru download) se realizează în mod analog cu cele către alte pagini, la atributul href fiind necesară specificarea adresei fișierului respectiv (dacă este în același fișier cu pagina din care facem link-ul, e suficient să-i scriem numele și extensia).
Ex: în cazul în care documentul pentru descărcare este local:
Pentru descărcare arhivă executa un click
<A href="arhiva.zip">aici</A>
Link-urile către fișiere de tip sunet sau video se fac absolut în același mod. În funcție de extensia lor (.avi, .mp3, .wav) în momentul în care executăm click asupra obiectului care face legătura către ele, acestea se vor deschide automat de către browser cu soft-ul corespunzător.
Legăturile relative la conținutul fișierului (paginii) sunt acele link-uri care permit accesarea directă a unei pagini într-un loc anume, fără să se mai folosească barele de derulare pentru a accede în acel loc. Pentru acest lucru, locul respectiv trebuie marcat. Acest lucru se realizează tot cu ajutorul etichetei <a>, însă utilizând atributul id, care va denumi locul respectiv printr-un identificator, precum în exemplul de mai jos (a se observa că în întreaga etichetă de deschidere și cea de închidere putem să nu punem nici un element): <A id=”chapter2”></A>.
Accesarea directă a acestui loc cu ajutorul unui link se poate realiza astfel:
a) Din interiorul aceleiași pagini: exemplificând la atributul href identificatorul respectiv (cel al id-ului) înainte de care se inserează caracterul #, ca în exemplul de mai jos:
<A href=”#chapter2”>Salt direct la capitolul 2</A>.
b) Din altă pagină: exemplificând la atributul href adresa paginii accesate (a paginii html) precedată de caracterul #, ca în exemplul următor:
<A href=”http://www.numesite.ro/fisier.html#chapter2”>Deschide fișier extern, direct la capitolul 2</A>.
Ancoră de legătură pentru expedirea unui e-mail poate ca, atunci când o cineva ne vizitează site-ul, dacă dorește, să ne trimită un e-mail accesând un simplu click pe link-il respectiv. Însă, pentru ca acest lucru să funcționeze, cel care vizitează site-ul are nevoie să aibă configurat pe computerul său un client de e-mail (cel mai folosit este Outlook Express).
Mai jos avem un exemplu pentru o astfel de legătură:
<ADDRESS>
Apasati <A href=”mailto:[anonimizat]”>aici</A> pentru a expedia un e-mail
</ADDRESS>
(eticheta <ADDRESS></ADDRESS> nu face altceva decât să afișeze textul din interiorul său italic)
După cum se observă, pentru expedierea unui e-mail, după atributul href trebuie inserat mailto: precedat de adresa de e-mail a celui căruia dorim să-i trimitem e-mailul.
CAPITOLUL II
Limbajul de programare PHP
Instalare PHP
Pentru a instala PHP avem nevoie de un pachet PHP care se poate descărca gratuit de pe site-ul http://php.net. Conținutul pachetului PHP îl vom dezarhiva și îl vom copia într-un folder numit php. Folderul php îl vom copia în C:\Program Files\Apache Group\.
În cele ce urmează, trebuie să edităm documentul de configurare al PHP-ului, și anume php.ini
Intrăm în C:\Program Files\Apache Group\php, copiem fișierul php.ini-recommended și îi vom da un al nume, acest nume fiind php.ini. Apoi deschidem documentul cu Notepad++ și efectuăm următoarele schimbări:
Căutăm doc_root = și modificăm cu doc_root = “C:\Program Files\Apache Group\Apache2\htdocs”. (această operațiune se realizează pentru a arăta calea către folderul unde se află scripturile, paginile).
Căutăm extension_dir = și modificăm cu extension_dir = “C:\Program Files\Apache Group\php\extensions”. (această operațiune se execută pentru a seta calea către fișierul unde sunt ținute extensiile php).
Căutăm display_errors = Off și modificăm cu display_errors = On. (această operațiune se realizează pentru a seta ON afișarea erorilor).
Căutăm ;session.save_path = /tmp și modificăm cu session.save_path = “C:\Program Files\Apache Group\php\sesiuni”. (intrăm apoi in fișierul cu php (C:\Program Files\Apache Group\php) și creăm un document cu numele “sesiuni” (această operațiune se execută pentru a seta calea către sesiunile temporare de pe server).
După ce am efectuat aceste modificări în documentul php.ini, deschidem fișierul de configurare al serverului Apache, din C:\Program Files\Apache Group\Apache2\conf sub numele de httpd.conf și efectuăm urmatoarele schimbări:
Inserăm la sfârsitul fișierului, urmatoarele 3 linii:
ScriptAlias /php/ "C:/Program Files/Apache Group/php/"
AddType application/x-httpd-php .php
Action application/x-httpd-php "/php/php.exe"
Cautăm linia DirectoryIndex index.html și o modificăm cu DirectoryIndex index.html index.php
Salvăm și restartăm serverul Apache.
Intrăm în C:\Program Files\Apache Group\Apache2\htdocs și facem un nou fișier cu numele test.php în care introducem textul de mai jos, salvăm și îl accesăm în browser: http://localhost/test.php. (Fig. 2.1.).
Fig. 2.1.
<?php
echo 'Primul script PHP';
?>
Dacă rezultatul care se afișează în browser este la fel ca cel din figura de mai sus, atunci serverul Apache + PHP a fost instalat cu succes și rulează.
Inițiere în PHP
Exemplu de creare a unui script PHP
Trebuie să știm că mereu codul php este delimitat cu tagurile <? și respectiv ?> sau <?php și respectiv ?>.
Să luăm ca exemplu codul următor:
<?php
echo 'Salut, acesta este primul meu script PHP';
?>
Accesăm folderul unde am instalat serverul web (în cazul nostru: C:\Program Files\EasyPHP-1.8\) și accesăm folderul WWW. Acesta este fișierul rădăcină de unde serverul nostru știe să acceseze paginile. Realizăm o nouă pagină cu numele primul_script.php, însă verificăm ca nu cumva să avem extensiile ascunse, deoarece, dacă executăm click dreapta / new / text document și îl redenumim în primul_script.php , acesta va avea numele de primul_script.php.txt deoarece extensia .txt este ascunsă.
După ce am creat documentul primul_script.php în C:\Program Files\EasyPHP-1.8\www, îl vom accesa cu un browser (Internet Explorer sau Mozilla Firefox) și scriem adresa: http://localhost/primul_script.php. (Fig. 2.2.).
Fig. 2.2.
După cum observăm, textul este afișat în pagină datorită construcției echo, care este delimitată de ghilimelele magice ‘. Acestea pot fi și dublate “ însă în nici un caz una simplă și cea de inchidere dublată: ‘ și “ sau “ și ‘. Trebuie să știm că în scriptul PHP se poate îngloba și HTML astfel:
<?php
echo 'Acesta este un script ce contine si <b>HTML</b> <br>
<a href="pagina_mea.php">Legatura catre pagina mea</a>';
?>
Creăm un document cu numele php_cu_html.php, introducem codul în document, salvăm și accesăm în browser cu ajutorul adresei http://localhost/php_cu_html.php. (Fig. 2.3.).
Fig. 2.3.
Variabilele și lucrul cu acestea
O variabilă este o zona de memorie căruia i se atribuie un nume pentru a putea fi recunoscută mai târziu și pentru a ne putea referi mai ulterior la ea. Ca să realizăm o variabilă, este necesar să îi atribuim și o valoare.
<?php
$autor = 'autor';
echo 'Acesta este un tutorial realizat de '.$autor.' ';
?>
Punem codul de mai sus într-un fișier variabila.php, salvăm și apoi vizualizăm în browser accesând http://localhost/variabila.php. (Fig. 2.4.).
Fig. 2.4.
După cum se observă, o variabilă este alcătuită dintr-un $ care se pune in fața ei, un = și ghilimele magice ‘ ‘ sau “ “ în cadrul cărora se află valoarea variabilei și apoi construcția se inchide cu ;. În exemplul din figura 2.4 avem declarată variabila cu numele autor și ca valoare textul “autor”. Nu omitem că din construcția variabilei să lipsească cele de mai sus și anume $numele_variabilei = ‘ ’; sau $numele_variabilei = “ “;
Constante
O constantă memorează o valoare, asemenea unei variabile, dar această valoare, după ce a fost fixată, nu mai poate fi schimată în script. Pentru a denumi o constantă, ne vom folosi de funcția define(); iar numele constantelor va fi inserat cu litere mari, această optiune nu este indispensabilă, însă va afișa codul introdus mai frumos și mai lizibil.
O deosebire de bază între constante și variabile, este faptul că o constantă nu are înaintea ei semnul $.
<?php
define('AUTOR', 'autor');
define('VARSTA', '23 ani');
echo AUTOR.' <br> '.VARSTA;
?>
Creăm o pagină cu numele define.php și apoi introducem în browser pentru a vedea rezultatele (Fig. 2.5.).
Fig. 2.5.
Variabile predefinite
Tipuri de variabile predefinite:
$GLOBALS = permite accesarea tuturor variabilelor globale care sunt permise script-ului PHP curent.
$_SERVER = este alcătuit dintr-o serie de variabile ale căror valori sunt inserate de server-ul web; aproape toate valorile variabilelor din vectorul respectiv depind de mediul de execuție al script-ului curent.
$_GET și $_POST conțin variabile setate de script prin ajutorul unor transmisiuni care utilizează metodele HTTP get, respectiv post. De exemplu, cu ajutorul acestor vectori, pot fi accesate valorile câmpurilor dintr-un formular care a fost completat și expediat utilizând una dintre cele două metode.
$_COOKIE cuprinde valorile variabilelor care conțin informații cu privire la cookie-urile memorate pe computerul utilizatorului ce accesează pagina web.
$_FILES cuprinde variabile recepționate de script cu ajutorul încărcărilor de fișiere prin metoda post.
$_ENV cupride variabile disponibile cu ajutorul mediului în care este executat.
$_REQUEST cuprinde variabile disponibile prin intermediul oricărui fel de mecanism cu ajutorul căruia utilizatorul poate implementa date.
$_SESSION este alcătuit din variabile care corespund sesiunii curente a script-ului.
Tipuri de variabile
Tipul unei variabile se raportează la felul de date care sunt introduse in ea. Variabilele pot fi de mai multe feluri, nu doar numere. PHP are opt feluri de variabile. Patru dintre ele sunt tipuri scalare (boolean, integer, float si string), două dintre acestea sunt tipuri compuse (array și object), iar celelalte două sunt tipuri speciale (resource și null). Totodată, din motive de lizibilitate, au fost implementate trei pseudotipuri: mixed, number și callback. Mai este și tipul double, însă semnificația acestui tip este aceeași cu cea a lui float. Ambele denumiri coexistă doar din temeiuri "istorice". În PHP, de cele mai multe ori, tipul unei variabile nu este precizat de către programator, dar este fixat în timpul execuției în funcție de contextul în care este utilizată variabila.
Variabilele de tip boolean pot conține numai două valori: ADEVĂRAT sau FALS. Aceste valori pot fi definite prin cuvintele cheie TRUE sau FALSE (pentru niciunul dintre cuvinte nu se face deosebire între literele mari și cele mici). Există eventualitatea de a schimba o variabilă de orice tip la tipul boolean. În timpul efectuării unei schimbări, sunt convertite la valoarea FALSE următoarele valori:
– numărul întreg 0;
– numărul real 0.0;
– șirul vid;
– șirul "0";
– un vector fără niciun element;
– un obiect fără nicio variabilă membru;
– o variabilă de tipul NULL;
– o variabilă nedefinită.
Orice altă valoare este modificată la valoarea TRUE (în special resursele). Acest tip se poate utiliza de exemplu pentru testarea logării într-o pagină de administrare. După ce se fac testările, dacă utilizatorul este logat ca administrator, funcția noastră va returna o valoare de adevăr TRUE, în cazul în care este logat sau FALSE în cazul în care nu este, și în acest mod vom afla dacă îi vom acorda sau nu acces în pagina de administrare.
O variabilă de gen integer simbolizează o valoare din mulțimea numerelor întregi. Numerele acestea pot fi introduce în baza 10, în baza 16 sau în baza 8, convențiile fiind asemenea ca și în limbajele C/C++ sau Java. Modul de înfățișare depinde de platforma folosită; de obicei se utilizează reprezentarea pe 32 de biți. Interpretorul PHP nu dă suport pentru numerele întregi fără semn. Trebuie subliniat faptul că în PHP nu se află nici un operator pentru realizarea de împărțiri întregi. De exemplu, rezultatul operației 4/3 nu va fi numărul întreg 1 (ca în C/C++ sau Java), ci numărul real (float) 1.5. Iar pentru numerele întregi există posibilitatea realizării de conversii:
– valoarea logică TRUE este modificată la valoarea întreagă 1;
– valoarea logică FALSE este modificată la valoarea întreagă 0;
– un număr real este convertit prin "rotunjire înspre 0"; astfel, valoarea reală 3.5 va fi convertită la valoarea întreagă 3, în timp ce valoarea reală -3.5 va fi convertită la valoarea întreagă -3;
– un șir de caractere este convertit fiind luat în considerare numai primele caractere care conțin informații numerice; astfel șirul "20" va fi convertit la valoarea întreagă 20; în același timp șirul "20 ani" va fi convertit tot la valoarea 20; dacă primele caractere nu sunt alcătuite din informații numerice, rezultatul conversiei va fi valoarea 0.
O variabilă de tip float poate fi definită folosind ori forma zecimală, ori cea științifică (cu exponent). Asemenea cazului tipului integer, precizia variabilelor de tipul float depinde de platforma folosită. De cele mai multe ori se folosește standardul IEEE 64. Există oportunitatea de a converti o variabilă de orice tip la tipul float. În cazul numerelor reale se pot realiza următoarele conversii:
– un șir de caractere poate fi convertit luând în considerare numai primele caractere care conțin informații numerice; astfel șirul "12.3" va fi convertit la valoarea reală 12.3; șirul "4.56E1 ani" va fi convertit la valoarea 4.56;
– în restul cazurilor se realizează conversii la numere întregi care mai târziu sunt convertite la valorile reale corespunzatoare.
Variabilele de tip resource sunt utilizate pentru păstrarea unor relații către anumite resurse externe precum conexiuni la baze de date, documente, etc. Relațiile sunt create și folosite de anumite funcții speciale. Cu ajutorul specificului acestui tip de date, valoarea nici unei variabile de alt tip nu se poate converti la tipul resource.
Valoarea specială NULL este atribuită unei variabile care nu a fost inițializată. Respectiva valoare este singura pe care o pot avea variabilele de tip NULL. Se apreciază că o variabilă are tipul NULL dacă:
– i s-a atribuit constanta NULL;
– nu a fost inițializată;
– a fost dezinițializată (prin intermediul funcției unset () ).
Clase și obiecte
Orice clasă este o sumă de variabile și funcții care operează asupra acelor variabile. Codul folosit pentru definirea unei clase în PHP este:
În cazul numelui unei clase poate fi folosit orice identificator acceptat în PHP cu o singură exceptie: sdtclass. Acest identificator este utilizat de PHP în scopuri interioare. În PHP funcțiile ale caror identificatori încep cu '_' sunt luate fiind funcții magice și folosirea acestora nu este tocmai indicată. În PHP, datele componente nu pot fi inițializate decât cu valori constante. Pentru a inițializa variabilele cu valori care nu sunt constante trebuie
utilizat un constructor.
În exemplul de mai jos putem observa o inițializare de clasă incorectă:
În PHP clasele sunt considerate a fi tipuri de date; ele pot fi luate ca fiind "amprentele" variabilelor propriu-zise. Pentru a iniția o variabilă al carei tip este o clasă, trebuie folosit operatorul new. Mai departe, vom denumi o clasă aritmetică cu două date membre x și y care sunt numere întregi și două feluri care retunrează adunarea, respectiv înmulțirea lor.
class Numeclasa {
var x = 2;
var y = 3;
function Suma() {
return $this -> x + $this -> y;
}
function Produs() {
return $this -> x * $this -> y;
}
}
Pentru a obține un obiect de tipul aritmetică, vom folosi o instrucțiune de tipul:
$aritm = new Numeclasa;
Acum putem folosi metodele clasei; pentru a returna suma sau produsul celor două numere, trebuie să apelăm cele două metode astfel:
echo $aritm -> Suma();
echo $aritm -> Produs();
Vom primi rezultatele 5, iar pentru produs 6. Valorile datelor membre pot fi și ele schimbate prin instrucțiuni de genul:
$aritm -> x = 5;
$aritm -> y = 4;
Dacă, în urma schimbării apelăm din nou metodele Suma și Produs, rezultatele vor fi 9, iar pentru produs 20.
În codul de mai jos vom observa cum funcționează o clasa:
<?php
class PHP4 {
var $salut = 'Salut PHP4!';
function Salut() {
return $this -> salut;
}
}
$salutare = new PHP4;
echo $salutare -> Salut().'<br>';
?>
Realizăm o pagină cu numele clasa.php, punem codul de mai sus și îl testăm în browser (Fig. 2.6.).
Fig.2.6.
CAPITOLUL III
Baze de date. Sistemul de gestiune MySQL
Ce este MySQL?
Mysql (se rostește mai-es-chiu-el) este sistemul de gestiune a bazelor de date, foarte rapid și solid.
O bază de date vă permite să memorați, să căutați, să ordonați și să vă regăsiți datele în mod eficace.
Serverul MySQL verifică accesul la datele dumneavoastră pentru a asigura că mai mulți utilizatori pot lucra în același timp cu acestea. Așadar, MySQL este un server multi-user (mai mulți useri) și multi-thread (mai multe fire de execuție). MySQL este accesat în mod public din anul 1996, dar istoria construcției sale debutează în anul 1979. A câștigat de mai multe ori Linux Journal Readers` Choice Award. MySQL este accesat sub o licența Open Source, dar dacă este necesar sunt disponibile și licențe comerciale.
Ce este PHP?
PHP (se rostește pe-haș-pe) este un limbaj de programare ce rulează un server, proiectat în mod deosebit pentru WEB. Într-o pagina HTML se poate îngloba cod PHP care va fi executat la fiecare vizitare a paginii. Codul utilizatorului PHP este interpretat pe serverul WEB și generează un cod HTML care va fi observat de utilizator (clientului browserului), fiindu-i trimis numai cod interpretat ca și HTML.
Limbajul PHP a fost inventat în anul 1994 și a fost inițial activitatea unui singur om, Rasmus Lerdorf. A fost însușit de alți oameni înzestrați și a trecut prin trei rescrieri însemnate pentru a ajunge la produsul clar și matur din zilele noastre. În luna octombrie 2002, era folosit de mai mult de opt milioane de domenii din toată lumea, iar acest număr a fost într-o continuă dezvoltare. Numărul actual al acestor utilizatori îl se poate găsi la adresa http://www.php.net/usage.php.
PHP este un produs Open Source, cu acces la codul sursă. Se poate utiliza, modifica și redistribui în mod gratuit de orice utilizator al internetului. La început, PHP era acronimul de la Personal Home Page, dar a fost schimbat pentru a se alinia la conversia de numire recursivă GNU (GNU = Gnu`s Not Unix) și acum este acronimul pentru PHP Hypertext Preprocessor.
Instalare EasyPHP
Dacă nu doriți să aveți prea multă bătaie de cap, și vreți să instalați intr-un timp cât mai scurt un pachet complet care să conțină Apache + PHP + MySQL + phpMyAdmin, se recomandă pachetul EasyPHP. Acest pachet nu impune decât o instalare simplă (ca a oricărui program) și se poate downloada de pe pagina oficială www.easyphp.org (Fig. 3.1.).
Fig. 3.1.
De subliniat este faptul că EasyPHP se va instala în C:\Program Files\EasyPHP-1.8\, iar folderul unde sunt stocate și de unde se accesează paginile și scripturile PHP este www.
Instalare manual Apache
După ce vom rula executabilul de instalare al Apache și vom termina instalarea propriu-zisă a acestuia vom accesa pagina http://localhost/.
Fiecare server/pachet instalat are câte un fișier de configurare. Fișierul de configurare al serverului Apache este httpd.conf pe care îl putem găsi în folderul din C:\Program Files\Apache Group\Apache2\conf\.
Lucrul cu baze de date MySQL
In figura de mai jos (Fig. 3.2.) vom vedea modul în care o bază de date lucrează cu serverul.
Fig. 3.2.
După ce am descărcat de pe internet ultima versiune de phpMyAdmin, ne asigurăm că am dezarhivat și am pus folderul în directorul www. Intrăm apoi în folderul phpMyAdmin și deschidem fișierul config.inc.php. Căutăm și edităm liniile 84, 85 și 86 care
arată cam așa:
$cfg['Servers'][$i]['auth_type'] = 'config'; // Authentication method (config, http or cookie based)?
$cfg['Servers'][$i]['user'] = 'root'; // MySQL user
$cfg['Servers'][$i]['password'] = ‘’; // MySQL password (only needed
Modificăm modul de autentificare și alegem în loc de config, cookie astfel încât linia să fie:
$cfg['Servers'][$i]['auth_type'] = 'cookie';
Apoi setăm o parolă secretă pentru modul de autentificare. Căutăm linia $cfg['blowfish_secret'] = ''; și setăm în interiorul ei un cuvânt, de exemplu $cfg['blowfish_secret'] = 'baubau';
După ce am făcut aceste modificări, este recomandat ca în locul user-ului root, să creăm un altul cu mai puține drepturi. Intrăm în phpMyAdmin ca root și creăm un nou utilizator apoi îl setăm în config.inc.php.
Accesăm apoi http://localhost/phpmyadmin și observăm că va cere un user și o parolă pentru a ne autentifica (Fig. 3.3.).
Fig. 3.3.
Introducem username root,iar ca parolă, introducem cea setată de noi. Dacă am instalat EasyPHP, acest pachet nu ne setează o parola de început (default) pentru baza de date, acest lucru îl facem noi. Fără să facem vreo modificare în fișierul acesta de configurare, accesăm http://localhost/phpmyadmin după ce am pus folderul phpMyAdmin in www.
După ce s-a încărcat pagina, apăsăm pe legătura “Drepturi de acces” (dacă interfața este în limba română), dacă este în engleză, apăsăm pe “Privileges”. Acest buton se află în mijlocul paginii. Ne va încărca pagina cu drepturile de acces asupra MySQL-ului, apoi apăsăm pe butonul ce l-am încercuit în figura de mai jos (Figura 3.4.).
Fig. 3.4.
Apoi, după ce s-a încărcat urmatoarea pagină, găsim unde apare ”Schimbare parola” și bifăm ”Parola”, apoi tastăm parola dorită de noi și în prima, și în a-II-a căsuță, după care apăsăm pe butonul „Executa” (Figura 3.5.).
Fig. 3.5.
De acum avem setată o parolă la baza de date MySQL, următorul pas este să ne întoarcem la fișierul config.inc.php și să îi setăm parola în câmpul $cfg['Servers'][$i]['password'] = ‘’; și anume
$cfg['Servers'][$i]['password'] = ‘parolamysql’;.
Fundamente MySQL
Conectarea și deconecatea de la server
Pentru conectarea la un server MySQL trebuie specificat un nume de utilizator și o parolă. În cazul în care serverul rulează de pe alt calculator trebuie specificat și un hostname.
Conectarea se realizează astfel:
„ shell> mysql -h host -u user -p ”
„ Enter password: ******* ”
Hostul și userul reperzintă hostname-ul unde rulează MySQL și respectiv numele utilizatorușui, contul MySQL ,iar „******* ” reprezentând parola ce trebuie introdusă.
Atunci când conectarea se realizează cu succes sunt afișate informații introductive,
urmate de promt-ul mysql>:
„ shell> mysql -h host -u user -p
Enter password : *******
Welcome to the MySQL monitor. Commands end with ; or \q.
Your MySQL connection id is 25338 to server version: 4.0.14 –log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> “
După acest promt, mysql este gata pentru a primi comenzi. Deconecatera de la serverul MySQL se poate face prin introducerea comenzii QUIT sau \q .
Introducerea interogărilor
Următoarea comandă este o interogare simplă ce îi va cere serverului date despre versiune și data curentă a serverului MySQL:
„mysql> SELECT VERSIN() , CURRENT_DATE;
+–––––+–––––+
| VERSION() | CURRENT_DATE |
+–––––+–––––+
| 3.22.20a-log | 2013-03-19 |
+–––––+–––––+
1 row in set (0.01 sec)
mysql> „
Această interogare ilustrează câteva lucruri despre MySQL:
– o comandă MySQL constă într-o declarție SQL urmată de punct și virgulă.
– MySQL tirimite comanda serverului spre execuție și afișeaza rezultatul, după care se afișează iar prompt-ul „mysql>” arătând că este gata pentru a accepta alte comenzi.
– rezultatele interogării sunt afișate într-o formă tabelară, prima linie conținând etichetele, iar liniile ce urmează rezultatele interogării.
– se mai afișează numărul de rânduri returnate și timpul necesar pentru execuția interogării.
Crearea și selectarea unei baze de date
Pentru a vedea bazele de date existente pe un server se utilizează comanda „SHOW”:
„mysql> SHOW DATABASES;
+–––-+
| Database |
+–––-+
| mysql |
| test |
| tmp |
+–––-+”
Sintaxa generică pentru crearea unei baze de date este:
„mysql> CREATE DATABASES nume_database;
+–––-+
| Database |
+–––-+
| mysql |
| test |
| tmp |
+–––-+”
După crearea bazei de date nu este implicită și selectarea acesteia pentru utilizare, acest lucru făcându-se cu ajutorul comenzii USE:
„mysql> USE nume_database
Database changed”
Crearea tabelelor
După ce o bază de date a fost creată aceasta nu conține nici un tabel, iar comanda prin care se poate observa acest lucru este SHOW TABLES:
„mysql> SHOW TABLES;
Empty set (0.00 sec)”
Comanda ce crează un tabel este asemănătoare cu cea a unei baze de date cu mici modificări:
„mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),
species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);”
Introducerea datelor în tabel
Pentru a adăuga înregistrări noi într-un tabel MySQL, se folosește comanda INSERT INTO.
Există două metode prin care o interogare INSERT poate fi scrisă:
1. Nu specifică numele coloanelor unde datele for fi introduse, ci doar valorile lor.
– Sintaxa:
INSERT INTO nume_tabel VALUES (valoare1, valoare2, valoare3, …)
În această metodă, trebuie să specificați o valoare pentru fiecare coloană, chiar dacă este NULL. Dacă sunt cinci coloane în tabel, trebuie să adaugați cinci valori, separate prin virgulă.
2. Pentru a doua metodă se specifică atât numele coloanei/coloanelor cât și valorile care vor fi introduse:
– Sintaxa:
INSERT INTO nume_tabel (coloana1, coloana2, coloana3,…)VALUES (valoare1, valoare2, valoare3,…)
Aceasta este în general metoda preferată, deoarece puteți adăuga doar coloanele care vor primi valori. Orice coloană căruia nu îi este atribuită o valoare va fi tratată ca NULL (sau îi va fi dată valoarea default, dacă aceasta este definită).
Dacă o coloană nu poate avea valoarea NULL (a fost definită ca NOT NULL) și nu are o valoare default, nespecificând o valoare va genera eroare.
Dacă o coloana este AUTO_INCREMENT, nu este nevoie să fie specificată în interogarea SQL, serverul MySQL va seta și adăugă valoarea automat.
Selectarea datelor din tabel
Când baza de date conține câteva înregistrari, se poate prelua informația stocată, folosind comanda SELECT.
O interogare SELECT returnează rânduri selectate de la unul sau mai multe tabele.
– Sintaxa:
SELECT nume_coloana/e FROM nume_tabel
– "nume_coloana/e" – este numele coloanei sau coloanelor care vor fi selectate.
Pentru a selecta mai multe coloane, se folosește următoarea sintaxă:
SELECT coloana1, coloana2, coloana3 FROM nume_tabel
Pentru a selecta toate coloanele, se utilizează sintaxa:
SELECT * FROM nume_tabel
Ca să fie trimisă comanda SQL la baza de date MySQL și pentru a prelua datele selectate, se folosește metoda query().
Când este folosită cu interogări SELECT, această metodă returnează un obiect care conține rândurile de date, sau False în caz de eroare.
Pentru a parcurge datele returnate se utilizează metoda fetch_assoc. Metoda fetch_assoc() returnează un array asociativ ce conține rândurile preluate, cheile din array reprezintă numele coloanelor.
Cu o buclă while() se poate prelua informațiile din fiecare rând stocat în acel array. Pentru a afla numărul de rânduri returnat de o interogare SELECT, se folosește proprietatea num_rows, aplicată la obiectul rezultat.
Actualizarea datelor
După introducerea datelor în tabelul MySQL, acestea se pot modifica folosind comanda UPDATE. Instrucțiunea UPDATE este folosită pentru a modifica sau actualiza informațiile existente într-un tabel.
– Sintaxa:
UPDATE nume_tabel SET coloana1=valoare, coloana2=valoare2, … WHERE
– Clauza WHERE este importantă într-o interogare UPDATE, specifică serverului MySQL carei înregistrari trebuie actualizate. Dacă omiteti clauza WHERE, vor fi afectate toate rândurile.
– Comanda UPDATE este trimisă la serverul MySQL cu metoda query().
Ștergerea datelor
Comanda DELETE este folosită pentru a șterge rănduri din tabel.
– Sintaxa:
DELETE FROM nume_tabel WHERE condiție
Clauza “WHERE condiție” este foarte importantă, ea specifică exact care rând sau rânduri trebuie șterse. Este importantă folosirea aceste clauze, deoarece rândurile șterse nu mai pot fi recuperate, decât daca este salvată baza de date. Dacă nu este adaugată clauza WHERE, serverul MySQL va șterge toate înregistrarile din tabel.
Procesul de proiectare a bazelor de date
Tipuri de relații între tabele
Relațiile dintre tabele pot să fie de mai multe feluri:
– relații unul la unul;
– relații unul la mai multe;
– relații mai multe la mai multe;
În cazul relației unul la unul, o cheie dintr-o tabelă apare o singură dată într-o tabelă cu care aceasta se află în relație. De exemplu dacă avem o tabelă angajați și o tabelă departament, ele nu au o relație de tipul unul la unul deoarece, mai mult ca sigur mai mulți angajați aparțin aceluiași departament. O relație unul la unul ar putea exista dacă fiecărui angajat i sa-r aloca un singur calculator în cadrul companiei.
O relație de tipul unul la mai multe, cheile dintr-o tabelă apar de mai multe ori într-o tabelă cu care aceasta se găsește în relație.
Relțiile de tipul mai multe la mai multe provoacă probleme în exemplele de baze de date normalizate astfel încât este uzual ca ele să fie separate în serii de relații unul la mai multe. Valoarea cheie dintr-o relație de tipul mai multe la mai multe poate apărea de mai multe ori într-o tabelă cu care aceasta se află în relație. Exemplul cel mai ușor pentru acest tip de relație este o tabelă cu studenți, o tabelă ce cuprinde cursurile, un student are un id și un nume,un curs are un id și un nume, de obicei un student este înscris la mai multe cursuri în același timp, iar un curs conține întotdeauna mai mult decât un student.
Forme de normalizare a tabelelor
Normalizarea este pur și simplu un set de reguli ce permit organizarea bazelor de date în așa fel încât tabelele să fie relaționate în felul cel mai potrivit, formând o structură flexibilă în vederea extinderilor ulterioare. Pentru a putea spune ca o bază de date este normalizată ea trebuie să respecte cele trei reguli de normalizare:
1. Prima formă normală presupune eliminarea informației redundante și crearea de tabele separate pentru datele aflate în relație.
2. Pentru a doua formă normală nici un atribut non-cheie nu depinde de o porțiune a cheii primare, acest lucru înseamnă că, în cazul în care există câmpuri care nu au o legătură foarte mare cu cheia primară în tabelă, atunci mai este de lucrat la tabelă.
3. Cea de-a treia formă normală presupune că nici un atribut nu depinde de un alt atribut care nu este cheie primară, acest lucru înseamnă, defapt, că trebuie să ne uităm cu atenție la tabelă și să vedem dacă există câmpuri care mai pot fi puse în tabele separat și care nu depind de cheia primară. Această formă normală este cea mai potrivită pentru eliminarea redundanțelor și permite flexibilitatea.
MySQL și PHP
Conectarea la MySQL din PHP
Caracterul @ din fața unei funcții ca de exemplu mysql_pconnect() este caracterul care elimină mesajul de eroare. Unele funcții PHP scriu un mesaj de eroare în caz de eșec, pe lângă returnarea unui cod de stare, în cazul funcției mysql_pconnect(), o încercare ratată de conexiune determină apariția în pagina Web care este trimisă către browserul clientului a unui mesaj. Dacă în orice moment unui proces de interogare a bazei de date se produce vreo eroare, scriptul își încheie pur si simplu execuția. Nu sunt generate nici un fel de date de ieșire privind eroarea produsă, deoarece acestea pot fi derutante pentru cei care vizitează siteul Web.
Dacă generăm întreaga pagină Web prin intermediul liniilor de program PHP, oprirea programului în caz de eroare fără afișarea nici unor date de ieșire îi poate agasa pe cei care ne citesc paginile, deoarece unele browsere vor afișa o casetă de dialog cu mesajul „această pagină nu conține nici un fel de date", casetă care trebuie eliminată.
Funcția mysql_pconnect() preia ca argumente numele gazdei, numele utilizatorului și parola și returnează un identificator de legătură în cazul în care conexiunea a fost stabilită cu succes, respectiv FALSE, dacă se produce vreo eroare. Dacă nu reușește încercarea de conexiune, este recomendat ca scriptul să apeleze funcția exit(), care termină imediat execuția scriptului, caz în care nu mai sunt generate alte date de ieșire.
„ Warning: MySQL Connection Failed: Access denied for user:
'[anonimizat]' (Using password: YES)”
Se poate folosi caracterul @ cu orice funcție PHP, dar, apelul inițial la funcția mysql_pconnect() are cele mai mari șanse să eșueze, ca atare, exemplele din acest capitol elimină numai mesajele generate de funcția respective.
“ mysql_pconnect() sau mysql_connect() ? “
O funcție care este similară cu mysql_pconnect () este mysql_connect (). Ambele preiau ca argumente numele de gazdă, numele utilizatorului și parola și ambele returnează FALSE pentru a indica reușita sau eșecul încercării de conexiune. Diferența dintre cele două apeluri este că mysql_pconnect () stabilește o conexiune persistentă, în timp ce mysql_connect() stabilește o conexiune non-persistentă. O conexiune persistentă diferă de o conexiune non-persistentă în sensul că prima nu este închisă la terminarea scriptului. Dacă un alt script PHP este executat ulterior de același proces Apache și apelează funcția mysql_pconnect () cu aceleași argumente, conexiunea este refolosită. Acest procedeu este cu mult mai eficient decât stabilirea fiecărei conexiuni pornind de la zero.
Funcția mysql_query() trimite interogarea la server pentru a fi executată. Interogarea nu trebuie să se termine cu un caracter punct și virgulă și nici cu grupul de caractere \g. Funcția mysql_query() returnează FALSE dacă interogarea a fost ilegală sau dacă nu a putut fi executată dintr-un motiv oarecare. În caz contrar, returnează un identificator al setului de rezultate. Acest identificator este o valoare pe care o putem folosi pentru a obține informații despre setul de rezultate. Pentru interogarea noastră, setul de rezultate constă dintr-un singur rând cu o singură valoare din coloană, reprezentând numărul de membri. Pentru a obține această valoare, transferăm identificatorul setului de rezultate funcției mysql_fetch_array() pentru a prelua rândul, atribuim rândul unei variabile și obținem accesul la primul element (care se întâmplă să fie și singurul) sub forma $row[0].
Funcția mysql_free_result() este utilă în scripturile care execută interogări foarte mari sau un număr mare de interogări și previne utilizarea unei cantități excesive de memorie.
Scipturile PHP sunt localizate în arborele cu documente al servervrului de Web. Astfel, apare o problemă de securitate: o eroare de configurare a serverului poate determina afișarea accidentală pentru clienți, sub formă de text simplu, a paginilor localizate în arborele cu documente. Aceasta înseamnă că numele de utilizator și parolele pentru stabilirea conexiunilor cu serverul MySQL sunt într-un pericol mai mare de a fi expuse lumii exterioare dacă sunt folosite într-un script PHP.
Pentru a rezolva această problemă, mutăm parametrii de conexiune în afara scriptului folosind două dintre caracteristicile limbajului PHP. Se scrie o funcție samp_db_connect() pentru a stabili conexiunea, respectiv vom plasa funcția într-un fișier include – un fișier care nu face parte din scriptul principal, dar la care se se poate face referire din acesta. Unele avantaje ale acestor abordări sunt:
Programul de stabilire a conexiunii este mai ușor de scris. Nu avem nevoie să scriem toți parametrii și putem cere funcției samp_db_connect () să selecteze baza de date automat după conectare, astfel încât o funcție să execute atribuțiile a două funcții PHP. Astfel, scripturile devin mai ușor de înțeles, deoarece atenția noastră se poate concentra asupra aspectelor caracteristice ale scriptului, fără a fi deturnată de programul de configurare a conexiunii.
Fișierul include este accesibil din scriptul nostru, dar poate fi deplasat în afara arborelui cu documente Apache. Ca atare, conținutul său devine inaccesibil clienților și aceștia nu mai pot avea acces la parametrii de conexiune, chiar dacă serverul Web suferă o eroare de configurare. Utilizarea unui fișier include este o bună strategie pentru ascunderea oricăror categorii de informații importante, care nu doriți să fie trimise în afara sitului de către serverul dumneavoastră de Web.
Fișierul include poate fi folosit în mai multe scripturi. Astfel este promovată reutilizarea programelor, iar liniile de program devin mai ușor de întreținut. De asemenea, permite efectuarea cu ușurință de modificări globale în fiecare script care obține acces la fișier.
PHP are o funcționalitate require() care este similară cu include() . Deosebirea între ele este că în cazul funcției include() , fișierul este citit și evaluat la fiecare execuție a instrucțiunii include() . În cazul funcției require(), fișierul este prelucrat o singură dată (de fapt, coținutul fișierului înlocuie instrucțiunea require()). Aceasta înseamnă că, dacă dorim să citim un alt fișier de fiecare dată când ne executăm programul sau avem un ciclu care parcurge un set de fișiere, avem nevoie de include(), deoarece putem configura o variabilă cu numele fișierului pe care dorim să-l includem și să folosim variabila ca argument al funcției include().
Execuția comenzilor MySQL din PHP
După conectarea la server și selecția bazei de date dorite, putem începe execuția comenzilor pe server.
Există două moduri de a executa o comandă. Prima revine pur și simplu la introducerea comenzii în PHP. Acest mod este utilizat atunci când nu apar rezultate ca urmare a execuției comenzii.
Cea de-a doua variantă este să definim comanda ca o variabilă. Aceasta va atribui variabilei rezultatele operației.
Comanda va arăta in felul următor:
„mysql_query($query);”
Folosirea acestei forme a comenzii este utilă pentru că repetăm pur și simplu aceeași comandă fără a fi nevoie să memorăm altele. Tot ce avem de făcut este să schimbăm variabila.
Toate datele vor fi introduse cu o singură comandă:
“$query = "INSERT INTO nume_tabel VALUES ('',’camp1’,
‘camp2’,…)";”
Crearea unei tabele din PHP
Să creăm o tabelă din PHP este ceva mai dificil decât cu MySQL. Avem de parcurs următorii pași:
“CREATE TABLE nume_tabel {
Fields
}”
Câmpurile sunt definite după cum urmează:
“fieldname type(length) extra info,”
Ultimul câmp introdus nu poate include nici o virgulă.
Pentru a crea o tabelă vom folosi următoarea secvență de comenzi PHP:
“<?
$user="username";
$password="password";
$database="database";
mysql_connect(localhost,$user,$password);
@mysql_select_db($database) or die( "Baza de date nu poate fi selectata");
$query="CREATE TABLE contacts (id int(6) NOT NULL auto_increment,coloana1 varchar(15) NOT NULL, coloana2 varchar(15) NOT NULL ,PRIMARY KEY (id),UNIQUE id (id),KEY id_2 (id))";
mysql_query($query);
mysql_close();
?>”
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: Utilizarea Programarii Web Pentru Evidenta Publicatiilor Dintr Un Departament Universitar (ID: 150754)
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.
