Tehnologii Utilizate
INTRODUCERE
Dezvoltarea rapidă din ultima perioadă a resurselor software și hardware din domeniul tehnologiei informației are meritul de a oferi o mai bună comunicare și un acces mult mai rapid la toate categoriile de date.
Motivația alegerii lucrării constă in contribuția la crearea unei baze de date moderne cu interfata accesibila pentru o intreprindere imobiliara prin implementarea unor instrumente actuale ca Web design-ul, Internetul, Bazele de date.
Importanța lucrării și actualitatea temei. La momentul actual nu există instituții care să nu fie înzestrate cu calculatore și diferitele programe prin care aceste instituții lucrează. Să ne gândim numai la bănci, casierii, hoteluri, magazine, toate folosesc calculatoare pentru a-și ține evidențele, trasferul de date și multe altele.
Agentiile imobiliare folosesc calculatoare pe care sunt instalate diferite programe care ușurează munca lor, comunicarea dintre agenti și clienti la calculator face ca clientul sa acumuleze cat mai multă informație. Aplicatia finala va lucra cu baze de date în care sunt înregistrate toate activitățile si informatiile legate de agentie si apartamentele disponibile unui client. Este destinată special pentru informarea clientilor cu ofertele disponibile, cit si evidenta disponibilitatii pentru agentie. Prin intermediul acestei aplicații agentiei ii este foarte ușor să țină evidența disponibilității apartamentelor și să aiba toate informațiile despre clienti.
Teza de Licenta cuprinde aspecte teoretice și practice ale modalităților de concepere și implementare a unei baze de date.
Teza este structurată în Introducere, 3 capitole, Concluzie si Bibliografie, fiecare capitol, la rândul lui având mai multe subcapitole.
Introducere reprezintă partea introductivă a lucrării, prezentarea domeniului din care face parte proiectul, a temei propriu-zise și structurarea aplicației.
Capitolul 1 – reprezintă o scurtă introducere a principalelor noțiuni legate de Internet, Baze de date, SQL, MySQL. Noțiunile de bază ale bazelor de date relaționale. Este prezentat modul de utilizare a MySQL, conectarea și deconectarea de la server, crearea și selectarea bazelor de date, crearea tabelelor și introducerea interogărilor.
Capitolul 2 – Prezentarea generală a aplicației și modalitatea de stocare a informațiilor și a datelor.
Capitolul 3 – Implementarea aplicației reprezintă descrierea aplicației. Implementarea acesteia a fost realizată folosind limbajul de server side scripting PHP datorită flexibilității acestuia și a faptului că poate fi folosit gratuit, fără restricții. De asemenea, a fost ales sistemul de gestiune a bazelor de date relațioale MySQL datorită faptului că și acesta poate fi folosit gratuită, Open Source este cel mai potrivit produs pentru accesarea și administrarea bazelor de date prin Internet.
De asemenea, este prezentat modul de creare a bazei de date a aplicației pentru Automatizarea lucrului intr-o Agentie Imobiliara, crearea unor tabele (ex : admin si clienti).
Interfața grafică a aplicației este construită pe baza unui template, pe care toate paginile site-ului îl folosesc pentru a păstra același layout pe întregul site. De asemenea, pentru setarea modalităților de afișare a diferitelor elemente HTML, pentru alegerea stilului site-ului s-a folosit un fișier .css, acesta putând fi modificat sau înlocuit și întregul site își schimbă automat înfățișarea.
Concluzii prezintă opinia personală despre aplicația realizată.
CAPITOLUL 1.
TEHNOLOGII UTILIZATE
Calculatorul este folosit de dimineață la o cafea, la diferitele domenii de activitate și seara cu finalizarea unui film, tot mai mulți sunt aceia care, stând neclintiți în fața calculatoarelor, navighează prin rețeaua de calculatoare ce acoperă întreaga lume, călătoresc și activează in spațiul cibernetic. Pentru cercetătorul care descoperea libertatea de comunicare și oferta internațională din Internet, multitudinea de biblioteci, reviste și grupuri de dezbatere, accesul la Internet seamănă cu un vis care nu se mai termină, vacanța pe care urmează să o faci în Europa sau America la distanțe foarte marii prin site-rile unde sunt prezentate locuri frumoase și utilizatorul stand in fața calculatorului iși aduce lumea cea mare in afara calculatorului și mică la calculator.
Prin Internet înțelegem de obicei ansamblul rețelelor de calculatoare interconectate din intreaga lume. De fapt, specialiștii susțin că Internetul nu este o rețea ci un ansamblu de reguli – protocoale de comunicație – care permit transferul de date între diferite rețele de pe glob, accesul la informațiile stocate în calculatoarele acestora.
Accesul la Internet este atât modul de conectare in rețea, cât, mai ales, accesul la informația ce se vehiculează prin calculatoarele legate in rețea, posibilitatea de comunicație cu specialiștii din toată lumea întreagă.
Internetul este o gigantică rețea de calculatoare, mai precis, o rețea de rețele de calculatoare.Unele dintre aceste calculatoare oferă o diversitate de servicii pentru oameni.
Dezvoltarea internetului a fost foarte rapidă, în anul 1985, aproximativ 2000 de calculatoare erau legate la Internet. In momentul de față există zeci chiar sute de milioane de calculatoare conectate în întreaga lume, care permit accesul in rețea a unui număr foarte mare de oameni. In fiecare an, comunitatea primește milioane de noi utilizatori care doresc sa utilizeze internetul pentru a cunoaște informații noi din domenii diferite.
Internetul în Moldova a pătruns relativ încet, multă vreme fiind considerat un lux inutil. Chiar și acum, pentru uz personal, mai ales datorită costurilor foarte mari ale serviciilor telefonice, este destul de puțin utilizat. Din punct de vedere al infrastructurii lucrurile au avansat destul de mult, din punct de vedere al resurselor informatice disponibile evoluția este destul de greoaie. Majoritatea companiilor și chiar unele structuri administrative au ințeles prezența în Internet că este foarte importantă, încă nu există resurse și depozite informaționale românești semnificative. Din acest motiv traficul observat in rețeaua românească este mai mult de aducere de informații din exterior decât de export de informații în cadrul țării.
In contextul internațional actual de afaceri, academic și tehnologic, fenomene ca globalizarea și liberalizarea accesului la informație dinamică și nivelul de performanță al dezvoltărilor în domeniul comunicațiilor și al calculatoarelor, sunt deja lucruri commune și legate unele de altele. Dincolo de granițe, in restul omenirii, Internetul a devenit deja cea mai comodă sursă de informație, in timp ce ceea ce este disponibil și in Moldova pe Internet este fie vechi, fie incorect, fie lipsește prin costurile ridicate.
Pentru a ne da seama ce ne rezervă viitorul in privința rețelei Internet, trebuie să
înțelegem tipurile de tehnologii elaborate de experții implicați in dirijarea rețelei și pentru utilizarea internetului cât mai ușor cu putință.
Colaborare
In dezvoltarea internetului s-au făcut mari progrese în domeniul conferințelor video la distanțe marii.
De exemplu, există tehnologii care permit colaborarea la anumite documente prin intermediul rețelei. De asemenea putem lua parte la conferințe audio și chiar să folosim o „planșetă” electronică pentru a ne expune schemele și proiectele, astfel încât acestea să poată fi vizualizate de către toți participanții.
Obiecte
Creatorii paginilor Web nu mai sunt limitați la texte și grafică, așa incât putem fi siguri că vom găsi o mulțime de elemente interesante pe Web și cu o viteză foarte mare de accesare.
Câteva inovații recente permit chiar și distribuirea de programe prin Web.
Mesaje e-mail complexe
Nu mai suntem limitați la mesaje simple de text.
Limbajul HTML permite formatarea acestora, cu caractere aldine și cursive, și cu diferite formate de paragraf. Mai mult decât atât, putem atașa mesaje de e-mail, imagini și alte elemente multimedia.
Securitate
Specialiștii din spatele rețelei Internet lucrează pentru a securiza comerțul
on-line, oferind metode de protejare a tranzacțiilor din multitudinea de domenii de activitate.
Ei crează un mediu mai sigur pentru copiii care se joacă pe Web, furnizând criterii de evaluare a paginilor, și asigură securitatea rulării aplicațiilor distribuite, prin autentificări de cod și o securitate foarte bine pusă la punct.
Limbajul PHP
PHP, acronim care provine din "PHP: Hypertext Preprocessor", este un limbaj de scripting utilizat pe scară largă, realizat și distribuit în sistem Open Source, care este special realizat pentru a dezvolta aplicații web, prin integrarea codului PHP în documente HTML. Sintaxa sa provine din C, Java și Perl și este ușor de învățat. Scopul principal al limbajului este acela de a scrie rapid pagini web dinamice, dar cu PHP se pot realiza mult mai multe.
PHP este una dintre cele mai interesante tehnologii existente în prezent. Deoarece îmbină caracteristici dintre cele mai complexe cu simplitatea în utilizare, PHP a devenit rapid un instrument de frunte pentru dezvoltarea aplicațiilor în Web. Totuși, spre deosebire de alte instrumente populare pentru dezvoltarea aplicațiilor Web, cum este Perl, PHP este un limbaj de programare comod pentru începători, chiar și pentru cei care nu au mai desfășurat activități de programare în trecut.
Ca și alte limbaje de scripting pentru Web, PHP vă permite să furnizați un conținut Web dinamic, adică un conținut Web care se modifică automat de la o zi la alta sau chiar de la un minut la altul. Conținutul Web este un element important în susținerea traficului unui sit Web; de regulă, vizitatorii nu vor mai reveni la o pagină Web care conține aceleași informații ca și cele prezentate la ultima vizită. Pe de altă parte, siturile Web frecvent actualizate pot atrage cantități enorme de trafic.
Mai mult, spre deosebire de limbajele de scripting, precum JavaScript, PHP rulează pe serverul Web, nu în browserul Web. În consecință, PHP poate obține accesul la fișiere, baze de date și alte resurse inaccesibile programului JavaScript. Acestea constituie bogate surse de conținut dinamic, care atrag vizitatorii.
Noțiuni Fundamentale
Spre deosebire de un script scris în alte limbaje cum ar fi Perl sau C – în loc de a scrie un program cu o mulțime de comenzi pentru a produce un HTML, folosind PHP se poate scrie un script HTML, ca cel de mai jos, ce include cod pentru a realiza ceva.
Codul PHP este delimitat de coduri de start și de sfârșit ce permit intrarea și ieșirea din "modul PHP".
<html>
<head>
<title>Exemplu</title>
</head>
<body>
<?php
echo "Salut, sunt un script PHP!";
?>
</body>
</html>
Diferența dintre PHP și altceva cum ar fi JavaScript, este acela că PHP este executat pe server pe când JavaScript este executat pe calculatorul clientului (de browserul Web). Pentru un script similar celui de mai jos sus pe un server, clientul ar primi doar rezultatele scriptului ce este rulat, fără a vedea în nici un fel codul din spatele acestuia. Se poate chiar configura serverul de web ca acesta să proceseze toate fișierele HTML cu PHP și astfel nu exită nici o metodă ca un utilizator să știe de fapt ce există în fișiere.
Cu PHP se poate face orice. PHP este în principal axat pe partea de scripting ce rulează pe server, deci poate face orice face și un program CGI, cum ar fi colectarea de date de la formulare, generarea de conținut dinamic sau trimitere și primire de cookie-uri. Dar PHP poate face mult mai multe.
Există trei domenii principale unde sunt folosite scripturile PHP.
Scripturi ce rulează pe server. Acesta este cel mai tradițional și cel mai important pentru PHP. Este nevoie de trei lucrui pentru a face să meargă: interpretorul PHP (CGI sau modul de server), un server web și un browser web. E nevoie ca serverul de web să fie pornit, cu o conexiune PHP instalată. Se poate accesa rezultatul programelor PHP cu un browser prin intermediul serverului de web.
Scripting în linie de comandă. Se poate face ca PHP să ruleze fără a fi nevoie de server și de browser, ci doar de interpretorul PHP. Această metodă este ideală pentru script-urile ce se vor a fi executate de regulă folosind cron (task scheduler în Windows), sau sarcini simple de procesare a textelor.
Scrierea de aplicații ce rulează de partea clientului în mod grafic (GUI). Probabil că PHP nu este limbajul cel mai bun de a scrie aplicații cu ferestre pentru Windows sau alte sisteme de operare, dar dacă este bine cunocut și se dorește folosirea unor facilități avansate ale PHP-ului în aplicațiile ce rulează de partea clientului, se poate totuși folosi PHP-GTK pentru a scrie astfel de programe. De asemenea, există posibilitatea de a scrie aplicații ce rulează pe platforme diferite folosind această metodă. PHP-GTK este o extensie a PHP-ului, nedisponibilă în distribuția principală de PHP.
PHP poate fi folosit pe aproape toate marile sisteme de operare, incluzând Linux, multe variante de Unix (incluzând HP-UX, Solaris și OpenBSD), Microsoft Windows, Mac OS X, RISC OS, probabil și altele. PHP are de asemenea suport pentru majoritatea serverelor de web din prezent. Acestea includ serverele Apache, Microsoft Internet Information Server, Personal Web Server, Netscape și iPlanet, serverul Oreillz Website Pro, Caudium, Xitami, OmniHTTPd, și multe atele. Pentru majoritatea serverelor PHP are un modul, iar pentru celelalte suportă standardul CGI, PHP putând să lucreze ca un procesor CGI.
Deci, cu PHP, există libertatea de a alege un sistem de operare și un server de web. Chiar mai mult, există posibilitatea de a alege programarea procedurală sau programarea orientată obiect, sau chiar să se combine acestea. Cu toate acestea, nu orice facilitate a standardului POO este prezentă în versiunea curentă a PHP-ului, multe librării de cod și aplicații mari (incluzând și librăria PEAR) sunt scrise folosind doar cod POO.
Cu PHP programatorul nu este limitat să scoată rezultat HTML. Posibilitățile PHP-ului includ afișarea de imagine, fișiere PDF și chiar filmulețe Flash (folosind librăriile libswf și Ming) toate generate instant. Se poate de asemeanea ca rezultatul să fie orice fișier text, cum ar fi XHTML sau orice alte fișiere XML. PHP poate genera automat aceste fișiere și să le salveze în sistemul de fișiere în loc să le afișeze, formând un cache de partea serverului pentru conținutul dinamic.
Una dintre cele mai puternice și importante facilități în PHP este suportul său pentru o gamă largă de baze de date. Scrierea une pagini de web ce interacționează cu o bază de date este incredibil de simplă. PHP suportă și ODBC, standardul Open Database Connection, deci se poate conecta la orice altă bază de date ce suporta acest standard mondial.
PHP are de asemenea suport pentru a conversa cu alte servicii folosind protocoale cum ar fi LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (pe Windows) și multe altele. Se pot, de asemenea, deschide socket-uri de rețea și se poate interacționa între aproape toate limbajele de programare Web. PHP are suport pentru instanțierea obiectelor Java și utilizarea lor într-un mod transparent ca obiecte PHP. Se pot de asemenea folosi extensii CORBA pentru a accesa obiecte aflate la distanță.
PHP are capabilități extrem de folositoare pentru procesarea textului, de la POSIX Extins sau expresii regulare Perl, până la parsarea documentelor XML. Pentru parsarea și accesarea documentelor XML, suportă standardele SAX și DOM.
Folosind PHP în domeniul comerțului electronic, sunt foarte folositoare pentru programul tău de plați online funcții de plată Cybercash, CyberMUT, VeriSign Payflow Pro și CCVS.
În cele din urmă, dar nu în ultimul rând, PHP are și alte extensii interesante, cum ar fi funcții ale motorului de căutare mnoGoSearch, funcții pentru accesarea IRC-ului, multe utilitare de compresie (gzip, bz2), conversie de calendar, traducere, etc.
Ieșirea din modul HTML
Când PHP interpretează un fișier trece prin textul acestuia până când întâlnește unul din tag-urile speciale care îi spun să pornească interpretarea textului ca fiind cod PHP. Mai departe, parser-ul execută tot codul întâlnit, până la întâlnirea unui tag PHP de închidere, care anunță trecerea normală prin text, din nou.
Acest mecanism permite înglobarea codului PHP în interiorul codului HTML: tot ceea ce este în afara tag-urilor PHP este lăsat nemodificat, în timp ce tot ceea ce este în interior este interpretat ca fiind cod.
Există patru categorii de tag-uri care pot fi folosite pentru a marca bolcurile de cod PHP. Dintre acestea, doar două (<?php. . .?> și <script language="php">. . .</script>) sunt întotdeauna disponibile. Cu toate ca tag-urile în format scurt și cele de tip ASP par a fi convenabile, ele nu sunt la fel de portabile ca cele în format lung. De asemenea, dacă se dorește includerea codului PHP în XML sau XHTML, este necesar să se folosească tag-urile în forma <?php. . .?> pentru a corespunde standardului XML
Cele patru tipuri de tag-uri sunt:
<?php echo("daca vrei sa vezi documente XHTML sau XML, apasa aici\n"); ?>
2. <? echo ("Acasta este o instructiune de procesare SGML \n"); ?>
<?= expression ?> Aceasta este un shortcut pentru "<? echo expresie ?>"
3. <script language="php">
echo ("unele editoare (ca FrontPage) nu suporta instructiuni de procesare");
</script>
4. <% echo ("Folositi tag ASP-style"); %>
<%= $variable; # Aceasta este un shortcut pentru "<% echo . . ." %>
Prima varianta, <?php. . .?>, este metoda preferată deoarece permite folosirea PHP-ului în cod corform standardului XML, cum ar fi XHTML.
Cea de-a doua variantă nu este întotdeauna posibilă. Tag-urile prescurtate pot fi folosite doar dacă au fost activate. Acest lucru poate fi făcut prin intermediul funcției short_tags() (numai în PHP3), prin activarea opțiunii short_open_tag în fișierul de configurare, sau prin compilarea scripturilor folosind opțiunea enable-short-tags. Chiar dacă este implicit activată în fișierul php.ini, folosirea tag-urilor prescurtate nu este recomandată.
Cea de-a patra variantă poate fi folosită numai dacă tag-urile de tip ASP au fost activate folosind setarea asp_tags din fișierul de configurare.
PHP permite folosirea unor structuri ca cea de mai jos:
<?php
if ($expresie) {
?>
<strong>Este adevarat.</strong>
<?php
} else {
?>
<strong>Este fals.</strong>
<?php
}
?>
Aceasta funcționează exact cum este de așteptat, deoarece când PHP întâlnește tag-ul de închidere ?> începe afișarea a ceea ce întâlnește până la apariția unui alt tag de start.
În cazul blocurilor mari de text, ieșirea din modul PHP este în general mai eficientă decât trimiterea textului folosind echo() sau print().
PHP Superglobals
$GLOBALS – Conține o referință la fiecare variabilă care este în mod curent valabilă în scopul global al script-ului. Cheile acestui șir sunt numele variabilelor globale.
$_SERVER – Reprezintă variabilele setate de serverul de web sau legate direct de mediul de execuție al scriptului curent.
$_GET – Reprezintă variabilele oferite scritpt-ului direct prin HTTP GET. Analog vechiului șir $HTTP_GET_VARS (care încă este valabil, dar depreciat).
$_POST – Reprezintă variabilele oferite scritpului direct prin HTTP POST. Analog vechiului șir $HTTP_POST_VARS (care încă este valabil, dar depreciat).
$_COOKIE – Reprezintă variabilele oferite scritpului direct prin HTTP. Analog vechiului șir $HTTP_COOKIE_VARS (care încă este valabil, dar depreciat).
$_FILES – Reprezintă variabilele oferite scritpului prin upload-ul de fișiere folosind modul POST din HTTP. Analog vechiului șir $HTTP_POST_FILES (care încă este valabil, dar depreciat).
$_ENV – Reprezintă variabilele oferite scritpt-ului prin mediu. Analog vechiului șir $HTTP_ENV_VARS (care încă este valabil, dar depreciat).
$_REQUEST – Reprezintă variabilele oferite scritpt-ului prin mecanismele de input GET, POST, și COOKIE, deci care nu pot fi de încredere.
$_SESSION – Reprezintă variabilele registrate unei sesiuni a script-ului. Analog vechiului șir $HTTP_SESSION_VARS (care încă este valabil, dar depreciat).
Formulare HTML (GET și POST)
Când un formular este trimis unui scrip PHP, informațiile din acel formular sunt automat transmise scriptului PHP. Sunt mai multe modalități de a accesa informația, de exemplu:
<form action="foo.php" method="POST">
Name: <input type="text" name="username"><br>
Email: <input type="text" name="email"><br>
<input type="submit" name="submit" value="Submit me!">
</form>
În funcție de setările și preferințele particulare, sunt multe modalități de a accesa datele din formulare HTML. Câteva exemple:
<?php
// Available since PHP 4.1.0
print $_POST['username'];
print $_REQUEST['username'];
import_request_variables('p', 'p_');
print $p_username;
// Available since PHP 3. As of PHP 5.0.0, these long predefined
// variables can be disabled with the register_long_arrays directive.
print $HTTP_POST_VARS['username'];
// Available if the PHP directive register_globals = on. As of
// PHP 4.2.0 the default value of register_globals = off.
// Using/relying on this method is not preferred.
print $username;
?>
Folosirea unui formular de tip GET este similară, cu deosebirea că se va folosi variabila predefinită GET în schimb. GET se poate folosi și pentru extragerea informțiilor din QUERY_STRING (informațiile de după semnul ? din URL). De exemplu, URL-ul http://www.example.com/test.php?id=3 conține date GET care sunt accesibile prin $_GET['id'].
Baze De Date
Noțiuni generale
Bazele de date au devenit o componentă esențială a vieții de fiecare zi în societatea modernă. În cursul oricărei zile, fiecare dintre noi desfășurăm activități care implică interacțiunea cu o bază de date, ca de exemplu, depunerea sau extragerea unor sume de bani din bancă, rezervarea biletelor la tren sau avion, rezervarea locurilor la hotel, căutarea unei referințe bibiografice într-o bibliotecă computerizată (digital library), etc.
În sensul cel mai larg, o bază de date (database) este o colecție de date corelate din punct de vedere logic, care reflectă un anumit aspect al lumii reale și este destinată unui anumit grup de utilizatori. O bază de date poate fi creată și menținută manual (de exemplu, fișele de evidență a cărților dintr-o bibliotecă, așa cum erau folosite cu ani în urmă) sau computerizat, ceea ce reprezintă obiectul cursului de față.
O bază de date trebuie să asigure:
abstractizarea datelor (baza de date fiind un model al realității),
integrarea datelor (baza de date este un ansamblu de colecții de date intercorelate, cu redundanță controlată),
integritatea datelor (se referă la corectitudinea datelor încarcate și manipulate astfel încât să se respecte restricțiile de integritate),
securitatea datelor (limitarea accesului la baza de date),
partajarea datelor (datele pot fi accesate de mai mulți utilizatori, eventual în același timp),
independența datelor (organizarea datelor să fie transparentă pentru utilizatori, modificările în baza de date să nu afecteze programele de aplicații).
Limbajul SQL
SQL (Structured Query Language – Limbaj Structurat de Interogare) , apărut în 1970 este un limbaj de programare specific lucrului cu bazele de date, devenit un standard în domeniu (standardizat ANSI-ISO), fiind cel mai popular limbaj utilizat pentru creearea, modificarea, regăsirea și manipularea datelor de către SGBD-urile (Sistemele de Gestiune a Bazelor de Date) relaționale.
Caracteristici generale:
SQL conține atât componența de descriere a datelor (LDD), cât și componența de manipulare a datelor (LMD);
Manipularea (interogarea) este partea extinsă;
Limbaj neprocedural: secvența de comenzi (instrucțiuni), fiecare comandă este transmisă SGBD-ului, este interpretată și returnează un rezultat.
Prezentarea limbajului SQL
Standardul SQL3 (SQL ’98) definește modelul obiect-relațional de baze de date.
Structura sintactica: limbajul este compus din instrucțiuni (comenzi). O comandă SQL este o secvență de elemente componente (token). Elementele componente pot fi: cuvinte cheie, identificatori, caractere speciale și constante (literali).
Cuvintele cheie și identificatorii
Aceștia au o structură lexicală identică. Lexical, un cuvânt cheie sau un identificator inseamnă o secvență de litere și caracterul ‘_’.
Din punct de vedere semantic, cuvintele cheie sunt elemente cu semnificație fixa în limbaj:
nume de comenzi (clauze): SELECT, INSERT, etc;
exemplu de SELECT:
SELECT * FROM clienti WHERE adminID='{$_SESSION['logat_client_id']}'
//scoate datele clientului autentificat din baza de date
tipuri de date: integer, numeric, char, varchar, etc.
Limbajul SQL nu diferențiază caracterele mari de cele mici: este case insensitive.
Identificatorii au aceeași structură lexicală; din punct de vedere semantic reprezintă nume într-o comandă și pot fi: nume de tabele, de coloane, etc. SQL folosește termenii de tabel, coloană și linie pentru relație, atribut și tuplu (cei subliniați sunt cei folosiți în definirea matematică a modelului relațional).
Identificatorii sunt:
– obișnuiți (simpli): Secție, ANGAJAT, etc;
– delimitați: reprezintă un nume pus între ghilimele, care poate să conțină orice fel de caractere. Un identificator delimitat este folosit, în general, pentru un nume mai mare de tabel.
Constantele
Constantele pot fi:
– de tip număr întreg: ex 1234 (reprezentate pe 4 octeți);
– de tip număr real: ex 12.5, 12e5 (reprezentate de 8 octeți, în formatul double);
– de tip șir de caractere: ex “Acesta este un șir”;
– de tip NULL: constanta specială, reprezintă lipsa de informație.
Caracterele speciale
– operatori (+,-,…);
– “;” termină o comanda;
– punctul zecimal (constante reale, codificări ale coloanelor);
– separatorii: blank, TAB, CR ; sunt ceruți uneori între elemente.
Operatori, expresii și funcții SQL
Operatorii SQL: pot fi reprezentați prin unul sau mai multe caractere speciale (+, <,…) sau prin cuvinte cheie (AND, OR, NOT, UNION).
Operatorii pot fi clasificați:
– operatori binari: au nevoie de doi operanzi;
– operatori unari: se aplică unui singur operand și pot fi postfixe sau prefixe.
– aritmetici: +, -, <, <=, <> (!=);
– logici: AND, OR, NOT.
Operatorii logici se aplica asupra unor valori ternare (o valoare ce reprezintă un operand ce poate avea valoare TRUE (1), FALSE (0) și NULL (lipsă de informație)).
Nu există tipul de date boolean asupra caruia să se aplice operatorii logici dar operatorii de comparație returnează o valoare booleana.
Operatorii de comparație evaluează orice expresie la o valoare logica (bool): TRUE, FALSE. Tipul boolean există însa incepând din SQL3. Operatorii de comparație pot fi:
aritmetici: <, >, <=, >=, =, != (<>);
relaționali
A BETWEEN val_min val_max;
A LIKE model_șir -> A șir;
A IS NULL sau A IS NOT NULL;
A IN lista_valori.
O expresie SQL este o expresie formată din operanzi, operatori și paranteze. Operatorii, în general, sunt nume de coloane (se va folosi valoare atributului definit de acea coloană) sau o constantă.
Orice expresie se evaluează la o valoare care poate fi apoi folosită în alte operații.
Funcțiile SQL:
– funcții totalizatoare (de grupare): calculează anumite valori pentru coloane din tabele: SUM, AVE, MIN, MAX, …;
– funcții matematice: calcule trigonometrice, puteri, logaritmi, rotunjiri;
– funcții pentru șiruri;
– funcții pentru date calendaristice;
– funcții pentru conversii.
Ex: calcularea mediei
SELECT (SUM(pret)/count(*)) as avg FROM apartamente WHERE adminID='{$_SESSION['logat_client_id']}'
Comenzi SQL
Există două tipuri de comenzi:
Comenzi de creeare a tabelelor, de ștergere a tabelelor și de modificare a tabelelor formează comenzile de definire a datelor (Limbaj de definire a datelor);
Comenzile de manevrare a datelor (LMD): SELECT (interogările de baza), INSERT, UPDATE, DELETE.
Ex: SELECT n.*, e.* FROM apartamente n LEFT JOIN client e ON n.clientID=e.clientID
WHERE e.adminID='{$_SESSION['logat_client_id']}' ORDER by apartamentID ASC
SQL asigură toate operațiile care se consideră necesare într-o bază de date.
MYSQL
Prezentare generală
MySQL este un sistem de gestiune a bazelor de date relațional, produs de compania suedeză MySQL AB și distribuit sub Licență Publică Generală GNU. Este cel mai popular SGBD open-source la ora actuală, fiind o componentă cheie a stivei LAMP(Linux, Apache, MySQL, PHP).
Deși este folosit foarte des împreună cu limbajelel de programare JAVA,PHP, cu MySQL se pot construi aplicații în orice limbaj major. Există multe scheme API disponibile pentru MySQL ce permit scrierea aplicațiilor în numeroase limbaje de programare pentru accesarea bazelor de date MySQL, cum are fi: C, C++, C#, Borland Delphi, Java, Perl, PHP, Python, FreeBasic, etc., fiecare dintre acestea folosind un tip spefic API. O interfață de tip ODBC denumită MyODBC permite altor limbaje de programare ce folosesc această interfață, să interacționeze cu bazele de date MySQL cum ar fi ASP sau Visual Basic.
În multe cărți de specialitate este precizat faptul că MySQL este mult mai ușor de invățat și folosit decât multe din aplicațiile de gestiune a bazelor de date, ca exemplu comanda de ieșire fiind una simplă și evidentă: „exit” sau „quit”.
Pentru a administra bazele de date MySQL se poate folosi modul linie de comandă sau, prin descărcare de pe internet, o interfață grafică: MySQL Administrator și MySQL Query Browser. Un alt instrument de management al acestor baze de date este aplicația SQL Manager.
MySQL poate fi rulat pe multe dintre platformele software existente: AIX, FreeBSD, GNU/Linux, Mac OS X, NetBSD, Solaris, SunOS, Windows 9x/NT/2000/XP/Vista.
Serverul de baze de date MySQL este foarte rapid, fiabil și ușor de utilizat. Inițial a fost dezvoltat pentru a manipula baze de date de dimensiuni mari mult mai rapid decât soluțiile existente.
MySQL Database Software este un sistem client/server ce constă într-un server MySQL multithreaded care suportă diferite programe client și biblioteci, unelte administrative și o gamă largă de interfețe pentru programarea aplicațiilor (Application Programming Interfaces – APIs)
Caracteristicile de bază ale MySQL
Câteva dintre caracteristicile de bază ale MySQL sunt:
Funcționează pe diferite platforme
Dispune de API pentru C, C++, Eiffel, Java, Perl, PHP, Pyton, Ruby și Tcl
Complet multi-threaded folosind thread-uri de kernel. Acest lucru înseamnă că poate lucra cu ușuință pe mai multe procesoare dacă sunt disponibile
Un sistem de alocare a memoriei foarte rapid și bazat pe thread-uri
Folosește tabele temporare stocate în memorie
Funcțiile SQL sunt implementate folosind o bibliotecă de clase optimizată și sunt foarte rapide. De obicei, nu are loc alocare a memoriei după inițializarea interogărilor.
Serverul este disponibil ca program separat ce poate fi folosit într-un mediu de rețea de tip client/server. De asemenea, este disponibil și ca bibliotecă ce poate fi inclusă în aplicații de sine stătătoare
Oferă motoare tranzacționale și non-tranzacționale de stocare a datelor
Tipuri de date utilizate de MySQL
Tipurile de date care apar în coloanele MySQL sunt diferite în funcție de tipul lor. MySQL alocă spațiu pe disc în funcție de tipul de date specificat de utilizator. Iată și tipurile de date, spațiul pe care îl ocupă precum și valorile minime și maxime pe care le pot avea:
Tipul de câmp TIMESTAMP oferă posibilitatea de a data automat operațiile de tip INSERT și UPDATE. El este compus implicit din 14 caractere pentru formatul 'YYYYMMDDhhmmss' dar putem să specificăm la crearea unui tabel că dorim să conțină mai puține caractere.
Tipurile de string-uri în MySQL sunt BLOB, TEXT, CHAR, VARCHAR, ENUM și SET. În tabelul următor puteți vedea marimea maximă admisă pentru cele mai folosite dintre ele precum și spațiul alocat pe disc pentru fiecare:
Câmpul de tip BLOB poate conține o cantitate variabilă de informație, similar cu TEXT însa diferit printr-un singur aspect: căutarea într-un câmp BLOB este case sensitive (se face diferență între majuscule și minuscule), iar într-un câmp TEXT nu este. Tipul VARCHAR este similar tipului TEXT cu deosebirea ca într-o coloană de tip VARCHAR putem specifica numărul maxim de caractere admise.
Administrarea bazelor de date MySQL din linia de comandă
În cazul unui sistem de operare Windows, conectarea pentru a lucra în mod interactiv cu cu serverul MySQL instalat pe același calculator realizează lansând în execuție monitorul MySQL numit mysql.exe din directorul mysql/bin:
C:\mysql\bin>mysql.exe
Welcome to MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3 to server version: 4.0.15-nt
Type ’help;’ or ’\h’ for help.Type ’\c’ to clear the buffer.
mysql>_
Comenzile SQL se pot scrie cu litere mari sau mici, având același efect. Comenzile SQL se termină, uzual, cu caracterul “ ; “. Dând comanda help; (sau \h sau ?) pe ecran apar o serie de comenzi MySQL importante.
Câteva comenzi din linia de comandă:
-create database – crează o bază de date
-use – se selectează o bază de date
-create table – se crează tabele
-alter – modificarea definiției unei tabele se realizează folosind comanda alter
-insert – adăugare de înregistrări într-un tabel
-update – permite modificarea valorilor unor câmpuri dintr-un tabel
-drop – permite suprimarea unui tabel din baza de date
-show – se folosește pentru listarea tabelelor care alcătuiesc baza de date
-select – este cea mai complexă comandă din limbajul SQL și este destinată regăsirii unor anumite date
-quit – determină întreruperea conexiunii cu serverul MySQL
CAPITOLUL 2.
SPECIFICAȚIILE APLICAȚIEI
Prezentare generală
Odată ce omul a devenit o ființă economică (homo oeconomicus) putem presupune ca a apărut și nevoia de măsurare și înregistrare a activității sale economice desfășurate la nivel individual sau comunitar.
Conținutul informațional din întreaga lume în zilele noastre este convertit la o formă digitală, făcând astfel informațiile disponibile oricui, oriunde și oricând. Prin intermediul sistemelor informatice, multe dintre activitățile pe care omul le întreprinde pot fi ușurate și chiar îmbunătățite.
Apariția calculatoarelor și folosirea lor în toate domeniile a reprezentat o dezvoltare majoră în viata omenirii. Din acea zi în care omul a început să folosească calculatorul fie pentru nevoile personale, fie pentru nevoile comunității, a realizat că își ușurează viața și că poate să realizeze lucruri pe care până atunci nu putea, sau le făcea cu muncă grea.
Să ne gândim puțin cum lucrau intreprinderile înaintea apariției calculatoarelor. Datele erau introduse în catalog de hârtie. Gândiți-vă ce cantitate de hârtii s-a adunat, și pentru stocarea acestora era necesar un spațiu de depozitare mare. Era doar un dezavantaj al inexisteței calculatoarelor. Alt dezavantaj ar fi faptul că înregistrările, datele, nu erau în siguranță, nu erau protejate. Calculatorul prin apariția lui a rezolvat toate dezavantajele și defectele trecutului. Intreprinderile din zilele noastre folosesc calculatoare și programe diferite pentru îndeplinirea serviciilor, simplificând sarcinile omului.
Aplicația Sistem de automatizare a lucrului in Agentii Imobiliare a fost proiectată să fie utilizată de către agenti imobiliari și clientii unei agentii. Este concepută în așa fel încât să fie ușor de înțeles și de folosit. Persoanele care vor folosi acest program nu necesită cunoștințe superioare în domeniul informaticii. Proiectul conține doar ferestre, butoane, câmpuri de introducere a datelor, și tabele, iar utilizarea acestora este foarte simplă. Adăugarea, ștergerea elevilor si a profesorilor, crearea, modificarea conturilor sunt doar câteva dintre operațiile care se pot face în interiorul aplicației. Aplicația dispune și de o parte care trimite în cazul în care un client și-a uitat parola de autentificare.
Pagina de acces
Fișierul predefinit pentru directorul web catalog este index.php, deci înseamnă că atunci când accesăm serverul prin comanda http://localhost/catalog/ serverul va trimite fișierul de bază, adică prima pagină a site-ului (index.php) ce va fi afișat în browser (Fig 3.1).
Prima pagina reprezintă pagina de autentificare. Paginile sunt concepute astfel ca să fie ușor de folosit de elevi si profesori. Prin intermediul acestei pagini pot accesa utilizatorii datele personale si informatiile asupra notelor obtinute la fiecare materie.
Design-ul paginii a fost realizat in Adobe Dreamweaver, desi unii creatori de pagini web critică aceste tipuri de editoare deoarece produc pagini de dimensiuni mult mai mari decât ar fi necesar, ceea ce conduce la o funcționare neperformantă a browserelor web. Afirmația in sine este în mare parte adevarată deoarece paginile web produse folosesc design-ul pe bază de tabel. În plus, produsul a mai fost criticat în trecut și pentru producerea de coduri care adesea nu erau conform standardelor W3C, dar acest aspect a fost mult îmbunătățit în versiunile recente. Cu toate acestea, Macromedia a crescut suportul pentru tehnologia CSS precum și alte modalități de design fără a fi necesară folosirea design-ului pe bază de tabel.
Dreamweaver permite folosirea majorității browserelor instalate pe calculatorul utilizatorului, pentru a previzualiza website-ul creat. De asemenea conține și câteva utilitare pentru administrarea site-urilor, cum ar fi cele pentru a găsi și modifica un paragraf sau o linie de cod, în întregul web site, pe baza oricăror parametri specificați de către utilizator. Cu ajutorul panourilor de stare se poate crea cod JavaScript fără a avea cunoștințe de programare.
Odată cu apariția versiunii MX, Macromedia a încorporat utilitare de generare dinamică a conținutului. De asemenea este oferit suport pentru conectarea la baze de date (cum ar fi MySQL și Microsoft Access) pentru a filtra și afișa conținutul folosind script-uri de genul PHP, ColdFusion, Active Server Pages (ASP) și ASP.NET, fără a avea nevoie de o prealabilă experiență în programare.
Un aspect foarte lăudat al Dreamweaver-ului îl reprezintă arhitectura sa extensibilă. Extensiile, așa cum sunt ele cunoscute, sunt mici programe, pe care orice dezvoltator le poate scrie (de obicei în HTML și JavaScript) și pe care oricine le poate descarca și instala, acestea aducând un spor de performanță și funcționalitate îmbunătățită programului. Există o comunitate de dezvoltatori care produc aceste extensii și le publică (atât comercial cât și gratuit) pentru probleme de dezvoltare web, de la simple efecte rollover până la soluții complete de vânzare online.
Header-ul conține două poze: prima conține titlul lucrării. Am prelucrat această poză folosind Adobe Photoshop, adăugând două pictograme. După cum ați observat, de pe prima pagină elevii au posibilitatea de înregistrare și recuperare parolă. Funcțiile celor două link-uri vă voi prezentate mai în amănunte în următorul capitol.
Stocarea informațiilor
O aplicație pentru web prelucrează date de diferite naturi: siruri de caractere, valorile numerice, date calendaristice etc. Exemple : denumiri de materii, nume de utilizatori, parole, adrese de e-mail, note, data primirii notelor etc. Informațiile păstrate într-o bază de date relațională sunt dispuse într-un ansamblu de fisiere. Din considerente legate de cresterea vitezei de accesare a informațiilor, fisierele sunt formate din articole având aceeasi structură. Articolele au o structura a unui fisier de date este definită la crearea sa, prin precizarea câmpurilor pe care le va conține fiecare articol.
Un câmp dintr-un articol conține o informație elementară. Fiecare câmp are un nume, conține un tip de informație (sir de caractere, număr, dată calendaristică, fisier etc.), are o lungime de reprezentare a informației si, În cazul pentru câmpurilor numerice, are precizat numărul de zecimale. Datorită faptului că formatul articolului este fix, frecvent se foloseste pentru fisier o reprezentare tabelară si chiar se foloseste pentru fisierele de date denumirea de "tabele".
O aplicație de tip server este un program care asteaptă comenzi din partea unor aplicații client. În cazul serverelor de baze de date relaționale (Oracle, MySQL, IBM DB2, Microsoft Access, OpenOffice Base etc.) se foloseste limbajul SQL (Structured Query Language).
In stocarea informatiilor introduse in baza de date am folosit XAMPP-ul, care este un pachet de aplicații care constituie infrastructura software necesară găzduirii saiturilor web: server de web (Apache), server de baze de date (MySQL), interpretoare pentru scripturi scrise în limbajele PHP si PERL. Pentru a putea fi folosit pe servere care găzduiesc saituri, după instalarea pachetului de aplicații trebuie operate unele configurări, mai ales pentru ameliorarea securității acestor pachete.
XAMPP a fost creat însă pentru a pune la dispoziția dezvoltatorilor un instrument eficient de testare a diferitelor aplicatii in dezvltare. Odată instalat pe calculatorul propriu, pachetul de aplicații va face ca acesta să aibă comportamentul unui server, permițând testarea aplicațiilor scrise fără a intra în conflict cu firma care va găzdui în final produsul software realizat.
XAMPP (http://www.apachefriends.org/en/xampp-windows.html) are si o variantă « lite », XAMPP Lite, care poate fi utilizată imediat după descărcare si dezarhivare, fără a fi necesară instalarea. După instalare, prezența pe calculator a pachetului de aplicații se manifestă prin
aplicația XAMPP Control Panel Application.
Fig. XAMPP Control Panel Application
După lansarea în execuție a acestei aplicații se vor apăsa butoanele Start din dreptul celor două aplicații esențiale testării saiturilor : Apache si MySQL.
Notă : Dacă se utilizează varianta XAMPP Lite, se dezarhivează arhiva descărcată din Internet în rădăcina discului care va fi folosit pentru testarea site-urilor si aplicatiilor in dezvoltare.
În urma desarhivării, pe discul selectat va fi adăugat directorul xampplite. În această variantă pornirea aplicatiilor Apache si MySQL necesare testării saiturilor se realizează selectând xampp_start din directorul xampplite.
Fig 3.5 Directorul xampplite
Pentru oprirea aplicațiilor se va selecta xampp_stop.
Verificarea funcționării aplicațiilor necesare pentru testarea saiturilor se poate realiza tastând în browser adresa aplicației web integrate în XAMPP și destinate administrării serverului de baze de date MySQL: http://localhost/phpmyadmin/.
Ca aplicație de tip server am folosit Apache. O aplicație de acest tip este un program reactiv. El rulează în continuu pe calculatorul destinat păstrării unuia sau mai multor saituri web și așteaptă cereri din partea unei aplicații client (Internet Explorer, Mozilla Firefox, Opera etc.).
Ca aplicație, serverul pentru web accesează un ansamblu de fișiere dispuse pe HDD a calculatorului pe care acesta este instalat. Dacă o aplicație client solicită un fișier existent, serverul pentru web îl va furniza respectând regulile unui protocol precizat în cererea clientului (http).
Paginile web sunt de regulă documente multimedia conținând text, imagini, sunet, animații. Ele sunt stocate pe HDD în mai multe fișiere, fiecare fișier conținând informații de un anumit tip. Corespunzător, serverul pentru web va primi din partea aplicației client o suită de cereri de transfer de fișiere începând cu fișierul principal.
Asamblarea documentului din fragmentele primite cade în sarcina aplicației client. Pe serverele pentru Internet funcționând sub UNIX sau Linux, Apache este configurat astfel încât rădăcina structurii arborescente de directoare care găzduiesc saituri diferă de cea creată în urma instalării XAMPP.
CAPITOLUL 3.
IMPLEMENTAREA APLICAȚIEI
Crearea bazei de date a aplicației
Crearea unei baze de date folosind XAMPP
Baza de date a fost realizată cu aplicația XAMPP folosind phpMyAdmin.
Pentru deschiderea aplicației phpMyAdmin se pornește XAMPP și se tastează în caseta de text pentru adrese a aplicației Internet Explorer adresa http://localhost/phpmyadmin/
În fereastra afișată se va tasta numele noii baze de date (apartamente) și se va apăsa butonul Create.
phpMyAdmin va crea comanda SQL de creare a unei baze de date și o va trimite serverului MySQL. phpMyAdmin va afișa de fiecare dată comenzile pe care le-a trimis serverului de baze de date MySQL.
Odată creată, baza de date apartamente va fi bază de date curentă. Comenzile ulteriore, de exemplu cele prin care se vor crea tabelele (fișierele) acesteia, se vor adresa acesteia.
La următoarele porniri ale aplicației phpMyAdmin intrarea în baza de date apartamente se va realiza prin selectarea acesteia în arborele afișat în panoul aplicației.
Crearea unui tabel al bazei de date
Crearea tabelei admin
Tabelul admin va conține datele de identificare a utilizatorilor autorizați să opereze în baza de date. Acest tabel este prezent în toate bazele de date accesibile prin Internet.
Crearea unui tabel se realizează concomitent cu definirea structurii sale.
Fig .
Tabelul admin are 6 câmpuri (engl. fields).
În vederea creării comenzii create table, phpMyAdmin va cere introducerea numelui și tipului fiecăruia dintre câmpurile tabelului.
Fig .
Câmpurile tabelului admin sunt adminID (INT – valoare întreagă), username
(VARCHAR lungime maximă 20 caractere), password (VARCHAR – lungime maximă tot 20
caractere), email(VARCHAR), matID(INT- valoare întreagă), tipID(INT- valoare întreagă). Tipul VARCHAR se folosește pentru siruri de caractere de lungime variabilă. Pentru câmpul adminID s-a mai precizat că este PRIMARY și s-a selectat caseta AUTO_INCREMENT.
Prima caracteristică, PRIMARY indică faptul că adminID este cheie primară. Cheia primară a unui tabel din baza de date are valori distinct pentru toate articolele din tabel și are rolul de identificator unic al acestora. Dacă ulterior se va dori suprimarea unui articol se va putea selecta articolul indicându-i cheia primară.
Proprietatea AUTO_INCREMENT indică modul de formare a valorilor câmpului adminID. Valoarea acestuia pentru un nou articol care urmează să fie adăugat se calculează automat, prin incrementarea valorii corespunzătoare ultimului articol present în tabel.
Câmpul username s-a definit ca fiind INDEX. Impunerea ca index a unui câmp facilitează căutările în tabel efectuate după valori ale respectivului câmp. În cazul dat, serverul MySQL va atașa tabelului admin un fișier ale cărui înregistrări vor conține perechi de valori username – adresă articol pe HDD.
În noul fișier înregistrările vor fi păstrate ordonate crescător după valorile câmpului username. La căutarea după username a unui articol din tabelul admin se va căuta mai întâi în fișierul asociat tabelului adresa articolului căutat după care se va extrage direct articolul dorit.
Notă: Spre deosebire de PRIMARY, INDEX nu înseamnă valori distincte. Câmpul username permite introducerea aceluiași nume de mai multe ori.
În acest caz, în fișierul asociat tabelului admin vor fi înregistrate grupat mai multe perechi username – adresă conținând același nume. La căutarea unui nume care apare repetat, serverul MySQL va furniza tot grupul de articole corespunzând criteriului de căutare impus.
Crearea tabelului se realizează prin apăsarea butonului .
phpMyAdmin va afișa și comanda CREATE TABLE trimisă serverului MySQL.
Interfața cu utilizatorul
Aplicația prin lansarea ei produce apariția ferestrei principale a paginii Web, care se ocupă de autentificarea utilizatorilor care doresc să folosească acestă aplicație.
CONCLUZII
Importanța Internetului în zilele noastre este deja cunoscută iar exploatarea oportunitaților oferite de acesta trebuie sa fie o prioritate pentru o firmă modernă mai ales dacă concurența are deja prezență online. Un web site costă o singură dată și rămâne permanent, 24 de ore din 24 în atenția publicului din orice zonă a lumii. Oricând, conținutul unui web site poate fi actualizat sau modificat după bunul Dumneavoastră. plac.
La baza aplicației Sistem de automatizare a lucrului in Agentii Imobiliare stă limbajul de programare PHP cu baza de date relationala MySQL, care este un limbaj foarte puternic, și foarte des folosit. Din aceste motive am ales acest limbaj pentru implementarea aplicației. În zilele noastre cele mai multe aplicații distribuite sunt scrise în PHP, care este o soluție convenabilă pentru proiectare a unei aplicații de comerț electronic pentru clienții care dispun de un buget redus.
Lumea se schimbă de la o zi la zi, tehnologiile avansează, apar noi și noi aplicații, software care ne vor conduce într-o lume computerizată. Eu cred că PHP ocupă un loc foarte important în această lume și are un rol deosebit în dezvoltarea noilor tehnologii.
Aplicația Sistem de automatizare a lucrului in Agentii Imobiliare este doar o mică parte din această lume imensă a limbajului PHP, dar o parte semnificativă, deoarece folosirea lui ușurează munca multor oameni cu vârste diferite.
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: Tehnologii Utilizate (ID: 150698)
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.
