Sunteți pe pagina 1din 138

UNIVERSITATEA POLITEHNICA BUCURETI FACULTATEA DE AUTOMATIC I CALCULATOARE SPECIALIZAREA CALCULATOARE

PROIECT DE DIPLOM
SITE DE WEB PENTRU AGENIE IMOBILIAR

COORDONATOR: ABSOLVENT:

BUCURETI 2007

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Cuprins
Cuprins ....................................................................................................................................... 2 1. Introducere ............................................................................................................................ 4 2. Baze de Date i Sistemul Baze de Date noiuni, concepte i arhitectur............................ 7 2.1. Ce este o baz de date ? ............................................................................................... 8 2.2. Clasificarea sistemelor de baze de date ..................................................................... 10 2.2.1. Clasificare dup modelul de date......................................................................... 10 2.2.2. Clasificare dup numrul de utilizatori ............................................................... 13 2.2.3. Clasificare dup numrul de staii pe care este stocat baza de date ................... 13 2.3. Componentele unui sistem de baze de date ............................................................... 13 2.3.1. Hardware ............................................................................................................. 13 2.3.2. Software ............................................................................................................... 14 2.3.3. Utilizatorii............................................................................................................ 15 2.3.4. Date persistente.................................................................................................... 16 2.4. Arhitectura intern a sistemlor de baze de date ......................................................... 16 2.5. Limbaje SGBD .......................................................................................................... 18 2.6. Interfee SGBD .......................................................................................................... 19 2.7. Exemple de SGBD .................................................................................................... 20 3. Proiectarea Bazelor de Date ............................................................................................... 22 3.3. Ce este proiectarea ? .................................................................................................. 22 3.4. Modelul Entitate Asociere. Obiectele bazelor de date relaionale.......................... 24 3.5. Construcia schemelor relaie .................................................................................... 25 3.5.1. Relaia unul-la-unul (1-1 sau one to one) ........................................................ 25 3.5.2. Relaia unul-la-multe (1-N sau one to many) .................................................. 26 3.5.3. Relaia multe-la-multe (M-N sau many to many) ............................................ 26 3.5.4. Relaia unar ........................................................................................................ 27 3.6. Diagrama Entitate-Asociere ...................................................................................... 27 3.7. Constrngeri de integritate......................................................................................... 28 3.7.1. Constrngerile de domeniu .................................................................................. 29 3.7.2. Constrngerile referitoare la tupluri (nregistrrile din tabel)-Cheia primar.... 29 3.7.3. Constrngeri ntre tabele ...................................................................................... 30 4. Tehnologii folosite n realizarea proiectului ....................................................................... 31 4.1. Descriere ........................................................................................................................ 31 4.2. Cum interacioneaz ? ................................................................................................... 33 5. Descrierea proiectului ......................................................................................................... 36 5.1. Proiectarea conceptual a Bazei de Date ................................................................... 36 5.1.1. Tabela pp_anunuri .............................................................................................. 36 5.1.2. Tabela pp_clieni ................................................................................................. 37 5.1.3. Tabela pp_email .................................................................................................. 38 5.1.4. Tabela pp_tipuri ................................................................................................... 38 5.1.5. Tabela pp_users ................................................................................................... 39 5.1.6. Tabela pp_zona .................................................................................................... 40 5.1.7. Restriciile de integritate ..................................................................................... 40 5.1.8. Asocierile ntre entiti (diagrama EA) ............................................................... 42 5.2. Utilizarea site-ului ..................................................................................................... 44 5.2.1. Aplicaia Utilizator .............................................................................................. 44 5.2.2. Aplicaia Administrator ....................................................................................... 64 5.3. Implementarea site-ului ............................................................................................. 76 5.3.1. Fiierele .PHP ...................................................................................................... 77 2

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

5.3.2. Fiierele .JS.......................................................................................................... 86 5.3.3. Fiierele .CSS ...................................................................................................... 87 5.3.4. Comenzi SQL ...................................................................................................... 89 6. Optimizare .......................................................................................................................... 91 7. Concluzii............................................................................................................................. 93 8. Bibliografie ......................................................................................................................... 95 Anexa ........................................................................................................................................ 96

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

1. Introducere
Odat cu apariia i dezvoltarea reelei Internet i a disponibilitii ctre utilizator a conexiunilor de mare vitez, s-a schimbat modul de abordare asupra informrii, comunicrii, colaborrii i dezvoltrii unui business. Datorit acestui fapt, a aprut posibilitatea de a putea vizualiza ofertele companiilor (i de a le contacta), dar i informaii de interes pentru eventualii colaboratori ale acestora. i n cazul celor care doresc s vnd, s nchirieze sau s cumpere un imobil se ntmpl acelai lucru. Prin colaborarea cu o agenie imobiliar clienii sunt scutii de eforturi suplimentare i aceasta i ajut s fac cea mai bun tranzacie indiferent dac vnd, cumpr, nchiriaz sau dezvolt un proiect. Apelnd la o agenie imobiliar, vnztorul are urmtoarele avantaje: evaluarea realist a preului, publicitatea vnzrii oferit de agenie, selecia cumprtorilor, securitatea tranzaciei. Se obine n timpul cel mai scurt preul optim, agenia verific i realizeaz n timp util o documentaie de vnzare. Cumprtorii nu se mai nghesuie s bat la uile ageniilor imobiliare n cutarea unei proprieti, ca n anii trecui. Tot mai multe firme i prezint ofertele detaliate prin intermediul portalurilor imobiliare, convingndu -i clienii chiar online. Nici particularii nu ocolesc site-urile de specialitate i i posteaz anunurile de vnzare/cumprare. n condiiile n care anul trecut numrul de vizitatori unici care s -au plimbat virtual de la o cas la alta a depit milionul numai pe un singur portal, este din ce n ce mai evident c tot mai muli clieni viziteaz portalurile specializate n imobiliare atunci cnd vor s cumpere o locuin. Abia dup un prim contact cu anunurile de pe Internet urmeaz ntlnirea cu agenia imobiliar i vizitarea locaiei. Practic, muli clieni vizioneaz ofertele de case, apartamente i terenuri prezentate detaliat pe site-ul unei agenii i i fac o list de posibile achiziii. Acesta este ns abia primul pas. Portalurile sunt bune ca punct de pornire. Mai departe, clientul urmeaz s contacteze agenia respectiv, fie direct, fie s trimit un e-mail.

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Aadar, majoritatea ageniilor imobiliare dein un site, prin intermediul cruia i prezint ofertele ctre cei interesai i d posibilitatea persoanelor ce doresc vinderea unui imobil de a face public acest lucru prin colaborarea cu agenia. Lucrarea prezentat n capitolele ce urmeaz se intituleaz Site de web pentru agenie imobiliar i reprezint, aa cum spune i titlul, un site ce va fi utilizat de ctre o singur agenie imobiliar, unde agenia va putea s-i prezinte ofertele ctre cei interesai. Utilizatorii care doresc s cumpere sau s nchirieze un imobil vor putea efectua cutri n cadrul bazei de date cu ofertele pe baza anumitor criterii. Site-ul va oferi de asemenea celor interesai posibilitatea nregistrrii unei oferte n baza de date prin trimiterea unui e-mail cu descrierea imobilului de vnzare/nchiriere i cu toate datele necesare ageniei. Toate datele despre imobilele de vnzare/nchiriere sunt introduse de cei interesai s vnd/nchirieze n formularul de pe site, date ce sunt reinute ntr-o baz de date ce este gestionat i ntreinut de administrator. Aplicaia cuprinde dou platforme distincte ce se pot desfaura n paralel: una public i o alta de administrare. Platforma design Public este interfaa cu utilizatorul i este compus din mai multe categorii de oferte imobiliare (oferte cu ultimele anunuri, vnzri, chirii) i, tot aici gsim prerea clienilor despre serviciile ageniei. Categoriile sunt editabile din interfaa de administrare i pot fi n numr nelimitat n funcie de nevoile i cerinele societii n proprietatea creia se afl site-ul. La rndul lor, fiecare categorie principal poate conine un numr nelimitat de tipuri de oferte (apartamente, case, sedii firme, spaii comerciale i terenuri, etc). Pentru fiecare ofert exist de asemenea opiune de contactare a ageniei. Un alt atuu important al aplicaiei l constituie prezena unui motor de cutare pe site ce permite identificarea ofertei dup tipul imobilului, tipul ofertei (vnzare/nchiriere), criteriu de sortare (dup pre sau data introducerii anunului), cu mod de sortare cresctor sau descresctor n funcie de pre i de data introducerii. Sunt disponibile urmtoarele module:

Ultimele anunuri Cutare avansat Curs valutar Newsletter Download ofert Contact 5

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Platforma administrare prezint o serie de opiuni suplimentare, cum ar fi cele de administrare a ofertelor, modulelor aplicaiei i coninut site. Cu ajutorul platformei de administrare proprietarul aplicaiei poate deine controlul complet al site-ului, indiferent de nivelul de cunoatere i nelegere a noiunilor de design web sau programare. Se va oferi administratorului posibilitatea de a valida datele trimise de ctre utilizatori. Obiectivul acestei lucrri este acela de a permite ageniei ce folosete acest proiect s se poat dezvolta i urca rapid n topul celor mai recunoscute agenii imobiliare ; s aib capacitatea de a colabora cu ct mai muli doritori de tranzacii imobiliare i totodat s ofere acestora posibilitatea de a-i rezolva problema n timp scurt, ntr-un mod ct mai simplu i mai uor.

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

2. Baze de Date i Sistemul Baze de Date noiuni, concepte i arhitectur


n ultimii ani, dezvoltarea sistemelor de baze de date reprezint unul dintre cele mai importante aspecte n domeniul tehnologiei informaiei, avnd un impact decisiv asupra modului de organizare i funcionare a numeroaselor instituii i servicii. Acestea sunt companiile de comunicaie, intreprinderile de comer, serviciile bancare, serviciile de transport, asigurrile, universitile, etc. Acestea sunt dependente de funcionarea corect i nentrerupt a sistemelor de baze de date. Sistemele de baze de date sunt o component important a vieii de zi cu zi n societatea modern. Zilnic, majoritatea persoanelor desfoar activiti care implic interaciunea cu o baz de date: depunerea sau extragerea unei sume de bani din banc, rezervarea biletelor de tren sau de avion, cutarea unei cri ntr-o bibliotec computerizat, gestiunea angajailor dintr-o firm, cumprarea unor produse, etc. Bazele de date pot avea mrimi (numr de nregistrri) i complexiti extrem de variate, de la cteva zeci de nregistrri (de exemplu, baza de date pentru o agend de telefon a unei persoane) sau pot ajunge la milioane de nregistrri (de exemplu, baza de date pentru crile dintr-o bibliotec, baza de date cu stocarea angajailor unei firme sau baza de date unde se pstreaz informaii despre situaia studenilor etc). n acest moment termenul de baz de date a intrat n limbajul curent fiind folosit uneori i n alte accepiuni dect cea de provenien. Pentru a lmuri aceast noiune va fi definit, n cele ce urmeaz, conceptul de baz de date (BD). Baza de date (BD, Database - DB) constituie o aplicaie fundamental n toate domeniile de activitate, civile sau de aprare : financiar, administrativ, educaional, informaional, de comunicaii i, nu n ultimul rnd, cel al calculatoarelor. BD asigur independena program-date, dar i controlul accesului i manipulrii datelor. Sitemele de baze de date, ca aplicaie software, reprezint una din cele mai importante realizri din domeniul ingineriei programrii pe calculator. Complexitatea i dimensiunea BD evolueaz rapid, determinnd reproiectarea algoritmilor de stocare i acces al fiierelor i chiar schimbarea unor principii de

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

administrare a acestora. Simultan este necesar pregtirea de personal specializat n domeniul bazelor de date : administratori proiectani programatori Scopul ntregii activiti de proiectare, programare i administrare a BD const n punerea la dispoziia utilizatorului final a unor BD permanent actualizate, coerente i uor accesibile.

2.1. Ce este o baz de date ?


Prin baz de date se nelege orice colecie partajat de date nregistrat pe suporturi accesibile calculatorului, ntre care exist relaii logice, cu o descriere a datelor, care reflect un aspect al lumii reale, proiectat pentru a satisface simultan necesitile informaionale ale unei organizaii sau grup de utilizatori ntr-un mod selectiv i n timp util. Orice baz de date are urmtoarele proprieti implicite: Baza de date este o colecie logic coerent de date ce are cel puin un neles Baza de date este destinat, construit i populat de date despre un domeniu bine precizat. Ea are un grup de utilizatori i se adreseaz unui anumit grup de aplicaii O baz de date reprezint cteva aspecte ale lumii reale crend orizontul propriu. Schimbrile orizontului sunt reflectate n baza de date. BD este gndit ca o resurs unic, utilizat simultan de mai muli utilizatori, n care datele sunt integrate mpreun cu o descriere a lor, cu o dublare minim n scopul reducerii redundanei i meninerii coerenei lor. BD include o definiie intern a fiecrui obiect, folosit de programele de aplicaie, i o definiie extern a obiectului oferit utilizatorilor. Acest fapt prezint procesul de abstractizare a datelor n BD i asigur transparena pentru utilizatorii finali, interesai doar de anumite vizualizri externe i nu de modalitile de stocare i manipulare a datelor. Totodat este permis modificarea structurii datelor sau a modalitilor de stocare a lor fr a afecta vederile externe. Numai eliminarea anumitor elemente (cmpuri, atribute, etc.) poate deranja eventualele programe de aplicaii care le utiliza la momentul respectiv. Acest neajuns este evitat prin tratarea corespunzatoare a tranzaciilor n BD.

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Pentru realizarea unei BD este necesar identificarea urmtoarelor elemente specifice : entiti atribute relaii.

O entitate este un obiect distinct inclus n BD (persoane, locuri, firme, documente, concepte, etc). De exemplu, angajaii unei organizaii pot fi inclui n BD ca o entitate distinct denumit personal. Un atribut este o proprietate care descrie un anumit aspect al unei entiti. De exemplu, numele, prenumele, salariul constituie atribute ale entitii personal. O relaie reprezint o asociaie ntre mai multe entiti. De exemplu, entitatea personal gestioneaz entitatea contracte pentru o firm. BD poate fi modelat grafic sub forma unei diagrame Entitate-Asociere(EA) n care entitile sunt reprezentate, prin convenie, sub forma de dreptunghiuri, relaiile ca romburi, iar atributele ca ovale, toate legate ntre ele sub forma unui graf neorientat. Fa de vechile metode de nregistrare a datelor privind diferite activiti pe fie (documente scrise) sau chiar n fiiere pe disc, sistemele de baze de date ofer avantaje considerabile, ceea ce explic extinsa utilizare a acestora. Cteva dintre avantajele oferite sunt: Controlul centralizat al datelor, putnd fi desemnat o persoan ca responsabil cu administrarea bazei de date Vitez mare de regsire i actualizare a informaiilor Sunt compacte: volumul ocupat de sistemele de baze de date este mult mai redus dect documetele scrise Flexibilitatea ce const n posibilitatea modificrii structurii bazei de date fr a fi necesar modificarea programelor de aplicaie Redundan sczut a datelor memorate, care se obine prin partajarea datelor ntre mai muli utilizatori i aplicaii. n sistemele de baze de date, mai multe aplicaii pot folosi date comune, memorate o singur dat. De exemplu, o aplicaie pentru gestionarea personalului dintr-o universitate i o aplicaie pentru gestionarea rezultatelor la examene din aceeai universitate care folosete o singur baz de date, pot folosi aceleai informaii referitoare la structurarea facultilor.

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Posibilitatea introducerii standardelor privind modul de stocare a datelor, ceea ce permite interschimbarea datelor ntre organizaii Meninerea integritii datelor prin politica de securitate (drepturi de acces difereniate n funcie de rolul utilizatorilor), prin gestionarea tranzaciilor i prin refacerea datelor n caz de funcionare defectuoas a diferitelor componente hardware sau software.

Independena datelor fa de suportul hardware utilizat. Sistemul de gestiunea a bazelor de date ofer o vizualizare a datelor, care nu se modific atunci cnd se schimb suportul de memorare fizic, ceea ce asigur imunitatea structurii bazei de date i a aplicaiilor la modificri ale sistemului hardware utilizat.

2.2. Clasificarea sistemelor de baze de date


Se pot lua n considerare mai multe criterii de clasificare ale sistemelor de baze de date.

2.2.1. Clasificare dup modelul de date


Majoritatea sistemelor de baze de date actuale sunt realizate n modelul de date relaional sau n modelul de date orientat obiect. Dezvoltarea continu a acestor modele a condus ctre o nou categorie de baze de date numite obiect-relaionale, care combin caracteristicile modelului relaional cu caracteristicile modelului orientat obiect. Modelul de date relaional (Relational Model) se bazeaz pe noiunea de relaie din matematic, care corespunde unei entiti de acelai tip i are o reprezentare uor de neles i de manipulat, ce const dintr-un tabel bidimensional, compus din linii i coloane. Deci, datele sunt reprezentate sub forma unor tabele. Fiecare linie din tabel reprezint o nregistrare sau tuplu i este compus din mulimea valorilor atributelor entitii respective, iar fiecare atribut corespunznd unei coloane (caracteristici sau cmpuri) a tabelului. Modelul de date relaional a fost propus de cercettorul E.F.Codd de la compania IBM, care a publicat n 1970 lucrarea Un model relaional de date pentru bnci mari de

10

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

date partajate (n original A Relational Model of Data for Large Shared Databanks). Alte lucrri ale lui Codd, ca i ale altor cercettori ca R. Boyce, J.D. Ullman etc au perfecionat modelul de date relaional i au permis dezvoltarea sistemelor de baze de date. Chiar dac noiunile de relaie i tabel difer n esena lor, relaia reprezentnd o mulime de entiti i tabelul o reprezentare vizual a acesteia, cele dou denumiri se pot folosi, n general pentru acelai scop. Pe baza acestor noiuni, se poate sintetiza esena modelului relaional prin urmtoarele caracteristici: Datele sunt percepute de utilizatori ca tabele. Operatorii relaionali care pot fi folosii pentru prelucrarea datelor genereaz un tabel rezultat din tabelele operanzi Asocierea dintre tabele se realizeaz prin intermediul egalitii valorilor unor atribute comune, ceea ce permite rezolvarea oricrei interogri. Pe lng avantajul unui model de date precis i simplu, sistemele de baze de date relaionale mai beneficiaz i de un limbaj de programare recunoscut i acceptat, limbajul SQL (Structured Query Language), pentru care au fost emise mai multe standarde de ctre Organizaia Internaional de Standardizare (International

Standardization Office-ISO). Majoritatea sistemelor de gestiune a bazelor de date relaionale actuale implementeaz versiunea din anul 1992 a standardului pentru limbajul SQL, denumit SQL 92 sau SQL2. Modelul de date orientat obiect (Object Model) este un concept unificator n tiina calculatoarelor, fiind aplicabil n programare, n proiectarea hardware, a interfeelor, a bazelor de date etc. Sistemele de baze de date orientate obiect se bazeaz pe limbaje de programare orientate obiect cu capaciti de persisten, n care datele sunt independente de timpul de via al programelor care le creeaz sau acceseaz, prin memorare pe suport magnetic (disc). Exist i unele domenii, n special cele care manipuleaz tipuri de date complexe, cum ar fi proiectarea asistat de calculator, sisteme de informaii geografice, medicin etc, n care modelul relaional s-a dovedit a fi insuficient de expresiv i cu performane de execuie reduse. Caracteristicile importante ale modelului orientat obiect sunt: abstractizarea, motenirea, ncapsularea, modularizarea.

11

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Din perspectiva realizrii bazelor de date, o alt proprietate a modelului obiect, persistena, este aceea care asigur memorarea transparent pe suport magnetic a obiectelor care alctuiesc o baz de date orientat obiect. Modelul de date obiect-relaional (Object-Relational Model) reprezint extinderea modelului relaional cu caracteristici ale modelului obiect, extindere necesar pentru realizarea bazelor de date care definesc i prelucreaz tipuri de date complexe. n esen, modelul obiect-relaional pstreaz structurarea datelor n relaii (reprezentate ca tabele), dar adaug posibilitatea definirii unor noi tipuri de date, pentru domeniile de valori ale atributelor. Tipurile de date definite de utilizator pot fi extinse prin mecanismul de motenire i pentru fiecare tip sau subtip se pot defini metode pe care le pot executa obiectele de acel tip. De asemenea mai sunt nc n funciune baze de date modele mai vechi: modelul ierarhic i modelul reea. n modelul de date ierarhic (Hierarchical Model) o baz de date se reprezint printr-o structur ierarhic de nregistrri de date (records) conectate prin legturi (links). Modelul ierarhic a fost primul model folosit pentru dezvoltatea bazelor de date. Schema conceptual a unei baze de date n modelul ierarhic se reprezint printr-un numr oarecare de scheme ierarhice. O schem ierarhic este un arbore direcionat, reprezentat pe mai multe niveluri, n care nodurile sunt tipurile de nregistri, iar arcele sunt tipurile de legturi. Fiecare nod (cu excepia nodului rdcin) are o singur legtur ctre un nod de pe un nivel superior (nodul printe) i fiecare nod (cu excepia nodurilor frunz) are una sau mai multe legturi ctre noduri de pe nivelul imediat inferior (noduri fii). Modelul de date reea (Network Model) folosete o structur de graf pentru definirea schemei conceptuale a bazei de date; nodurile grafului sunt tipuri de entiti (nregistrri, records), iar muchiile grafului reprezint n mod explicit asocierile (legturile, links) dintre tipurile de entiti. La fel ca i modelul ierarhic, dezavantajul principal al modelului reea este acela c fiecare interogare trebuie s fie prevazut nc din faza de proiectare, prin memorarea 12

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

explicit a legturilor ntre tipurile de entiti. n plus, complexitatea reprezentrii datelor n modelul reea este deosebit de ridicat, iar programatorii trebuie s o cunosasc pentru a putea realiza aplicaiile necesare.

2.2.2. Clasificare dup numrul de utilizatori


Majoritatea sistemelor de baze de date sunt sisteme multiutilizator, adic permit accesul concurent (n acelai timp) a mai multor utilizatori la aceeai baz de date. Exist i un numr redus de sisteme monoutilizator, adic suport accesul doar al unui utilizator (la un moment dat).

2.2.3. Clasificare dup numrul de staii pe care este stocat baza de date
O alt clasificare este cea dup numrul de staii pe care este stocat baza de date. Exist dou categorii de sisteme de baze de date: centralizate i distribuite. Un sistem de baze de date centralizat (Centralized Database System) este un sistem de baze de date n care datele i sistemul de gestiune sunt stocate pe un singur calculator. Un sistem de baze de date distribuit (Distributed Database System) poate avea att datele, ct i sistemul de gestiune, distribuite pe mai multe calculatoare interconectate printr-o reea de comunicaie.

2.3. Componentele unui sistem de baze de date


Un sistem de baze de date (Database System) reprezint un ansamblu de componente care asigur crearea, utilizarea i ntreinerea uneia sau mai multor baze de date. Componentele unui sistem de baze de date sunt: hardware, software, utilizatori, date persistente.

2.3.1. Hardware
Calculatoarele pe care sunt instalate de obicei sistemele de baze de date sunt PC standard, dar i calculatoare multiprocesor foarte puternice. Performanele generale de operare ale calculatorului (numrul i viteza procesoarelor, dimensiunea i viteza de

13

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

operare a memoriei etc) influeneaz n mod corespunztor perfomanele sistemului de baze de date. Cea mai important caracteristic a calculatorului pe care funcioneaz sistemul de baze de date este capacitatea harddisk-ului, utilizat pentru memorarea datelor din baza de date. Deoarece ntr-un sistem de baze de date este necesar accesul rapid la oricare dintre nregistrrile de date, pentru memorarea acestora se folosesc discurile magnetice (harddiskuri). Benzile magnetice (care ofer acces secvenial la nregistrrile de date) se folosesc pentru duplicarea (backup), salvarea i restaurarea datelor.

2.3.2. Software
ntre baza de date (colecia de date memorate fizic n fiiere harddisk-uri) i utilizatorii sistemului exist un nivel software, numit sistem de gestiune a bazei de date (SGBD, Database Management System - DBMS). O baz de date computerizat poate generat i meninut fie cu ajutorul unui grup de programe aplicaie specifice acestui scop, fie cu acest SGBD. Sistemul de gestiune a bazelor de date administreaza si controleaza accesul la acestea. Asadar, SGBD este un sistem de programe software care permite definirea, crearea, administrarea si accesarea bazei de date.

Figura 1. Componente ale sistemului de baze de date Sistemul de gestiune al bazei de date (SGBD) este un interpretor de cereri, el recepionnd de la utilizatori anumite cereri de acces la baza de date, le interpreteaz, execut operaiile respective i returneaz rezultatul ctre utilizatori. De fapt, SGBD este un sistem de programe general ce faciliteaz procesul definirii, construciei i manipulrii datelor pentru diverse aplicaii. Definirea bazei de date presupune specificarea tipurilor de date ce vor fi stocate n baza de date, precum i descrierea detaliat a fiecrui tip de dat. Construcia bazei de date reprezint procesul stocrii datelor nsi prin mediul controlat prin SGBD.

14

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Prin manipulare se neleg o serie de funcii ce faciliteaz implementarea cererilor pentru gsirea datelor specificate, adugarea de noi date ce reflect modificarea contextului, generearea de rapoarte pe baza coninutului bazei de date. n concluzie, pachetul software ce asigur manipularea datelor, mpreun cu datele nsi (coninutul bazei de date) formeaz ceea ce se numete sistemul de baze de date (DataBase System). Un SGBD ofer utilizatorilor o viziune a datelor stocate n baza de date, nemaifiind

necesar cunoaterea organizrii particulare a sistemului, asigur o protecie a datelor fa de accese neautorizate i de anumite defecte de funcionare.

2.3.3. Utilizatorii
Utilizatorii unui sistem de baze de date se mpart n cteva categorii: Programatorii de aplicaii sunt cei care dezvolt aplicaiile de baze de date n anumite medii de programare. Aplicaiile pot fi aplicaii desktop (stand alone) i aplicaii client-server. Aplicaiile desktop sunt aplicaiile care se instaleaz i ruleaz pe un anumit calculator. Acestea sunt aplicaii implementate n medii de programare cum ar fi: Visual Basic, Visual C, Java, C++, Delphi etc, iar aplicaiile clientserver sunt aplicaii care se instaleaz pe un calculator numit server i ruleaz de pe orice calculator aflat n acea reea. Aceste aplicaii sunt aplicaii web implementate n limbajul de scripturi php sau asp, cu interfaa dezvoltat n html. Pentru ca aceste aplicaii s funcioneze trebuie instalat i un server de web, cum ar fi Apache sau IIS i pe fiecare calculator de unde va fi accesat aplicaia, precum i un browser de web: Internet Explorer, Netscape, Mozilla, etc. Utilizatorii obinuii sunt acei utilizatori care acceseaz baza de date prin intermediul unei aplicaii de baze de date. Aceti utilizatori au drepturi limitate asupra accesului la datele din baza de date, ei neavnd cunotine aprofundate asupra structurii i a datelor din acea baz de date. Administratorul bazei de date (DataBase Administrator) care este o persoan autorizat, care are ca sarcin administrarea resurselor, autorizarea accesului la baza de date, a coordonrii i monitorizrii utilizatorilor acelei baze de date. Administratorul bazei de date efectueaz i operaii periodice de salvare a datelor (backup) i de refacere a lor atunci cnd este necesar.

15

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

2.3.4. Date persistente


Datele memorate ntr-o baz de date sunt date persistente, adic date care rmn memorate pe suport magnetic, independent de execuia programelor de aplicaii. Datele persistente ale unei baze de date se introduc, se terg sau se actualizeaz n funcie de date de intrare provenite de la tastatur. Iniial datele de intare sunt date nepersistente, ele devenind persistente dup ce au fost validate de SGBD. Datele de ieire ale unui sistem de baze de date sunt tot date nepersistenete, ele provenind din operaii de interogare a bazei de date i puse la dispoziie utilizatorului sunt form de raport, afiare etc.

2.4. Arhitectura intern a sistemlor de baze de date


Arhitectura intern a unui sistem de baze de date propus prin standardul ANSI/X3/SPARC (1975) conine trei niveluri funcionale ce vor fi descrise mai jos. Una din caracteristicile fundamentale a bazelor de date este dat de faptul c produce cteva niveluri de abstractizare a datelor, prin ascunderea detaliilor legate de stocarea datelor, detalii ce nu sunt utile utilizatorilor bazei de date. Se definete modelul datelor ca un set de concepte ce poate fi utilizat n descriereea structurii datelor. Prin structura bazei de date se nelege tipul datelor, legtura dintre ele, restriciile ce trebuie ndeplinite de date. Cele mai multe baze de date includ un set de operaii ce specific modul de acces la date. O structur de date asociat unei baze de date poate fi reprezentat pe trei niveluri, avnd ca scop separarea aplicaiilor utilizatorului de baza de date fizic. Schema bazei de date pe cele trei niveluri poate fi vzut astfel: Nivelul intern constituit din schema intern ce descrie structura de stocare fizic a datelor n baza de date, utiliznd un model al datelor fizice. La acest nivel se descriu detaliile complete ale stocrii, precum i modul de acces la date. Nivelul conceptual sau schema conceptual descrie structura ntregii baze de date pentru o comunitate de utilizatori. La nivelul conceptual se face o descriere complet a bazei de date, ascunznd detaliile legate de stocarea fizic, concentrndu-se asupra descrierii entitilor, tipurilor de date, relaiilor dintre ele, precum i a restriciilor asociate. Poate fi utilizat cu bune rezultate, la model de nivel nalt sau un model specific de implementare. 16

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Nivelul extern sau nivelul vizual (utilizator) include o colecie de scheme externe ce descriu baza de date prin prisma diferiilor utilizatori. Fiecare grup de utilizatori descrie baza de date prin prisma propriilor interese. Exist tendina la acest nivel ca grupuri de utilizatori s ascund detalii de care nu sunt interesate. i la acest nivel se pot folosi modele de implemetare sau modele de nivel nalt. Desigur c n multe SGBD nu se poate face o distincie net ntre cele trei nivele.

Cu toate acestea se poate remarca la majoritatea SGBD un nivel conceptual puternic ce suplinete aparent de cele mai multe ori celelalte niveluri. De asemenea, se remarc o contopire mai ales la dezvoltarea aplicaiilor a nivelului conceptual i extern. Se remarc faptul c arhitectura pe trei niveluri reprezint numai o descriere a datelor la nivel fizic. Grupurile de utilizatori se refer numai la schema extern, deci SGBD este cel ce va trebui s transforme schema extern n schem conceptual. De la modelul conceptual cererile sunt adresate modelului intern pentru a fi procesate i aplicate datelor stocate. Procesul transferului cererilor i rezultatelor ntre nivele este numit cartografiere (mapping). Acest proces este mare consumator de timp pentru care multe SGBD nu posed nivel extern.

Figura 2. Arhitectura intern a unui sistem de baze de date

17

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

2.5. Limbaje SGBD


SGBD trebuie s ofere limbajele corespunztoare tuturor categoriilor de utilizatori. Dup proiectarea bazei de date i alegerea SGBD, este foart important construirea schemei interne i conceptuale a bazei de date. Cum n cele mai multe situaii, nu exist o separaie net ntre cele dou nivele, un limbaj numit Data Definition Language (DDL) este utilizat de administratorul bazei de date i de proiectantul bazei de date n definirea ambelor scheme. Un compilator DDL proceseaz instruciunile pentru identificarea descrierilor despre construcie i memoreaz aceasta n catalogul SGBD. n SGBD cu o clar separaie ntre nivelul conceptual i cel intern, DDL este utilizat pentru specificarea schemei conceptuale. Un alt limbaj numit Storage Definition Language (SDL) este utilizat pentru specificarea schemei interne. Legtura ntre cele dou nivele de implementare este asigurat de unul din cele dou. n general, fr specificare explicit, referirea la definirea bazei de date presupune utilizarea DDL. Pentru o arhitectur pe trei nivele, este necesar un al treilea nivel numit View Definition Language (VDL) destinat utilizatorilor i legturii acestora cu nivelul conceptual. Multe sisteme de baze de date realizeaz aceasta printr-un DDL ce accept i declaraii specifice nivelului extern. Instruciunile n limbaj DDL pot fi nglobate ntr-un limbaj general de programare sau pot fi compilate separat. Odat schema compilat i baza de date populat cu date, utilizatorul are o serie de faciliti pentru manipularea datelor. Operaiile tipice includ cutarea, inserarea, tergerea i modificare datelor. Pentru aceasta SGBD dispune de Data Manipulation Language (DML). La rndul su, DML poate fi mprit n dou componente: un DML de nivel nalt un DML de nivel sczut Seciunea DML de nivel nalt sau neprocedural este utilizat pentru specificarea operaiilor complexe n baza de date ntr-o form concis. n general, operaiile utiliznd aceast seciune sunt realizate fie ntr-o form interactiv de la terminal, fie prin utilizarea unui limbaj de programare universal. Seciunea DML de nivel sczut sau procedural este realizat utiliznd un limbaj de programare general. Cu aceast seciune se realizeaz operaiile tipice, cum sunt refacerea

18

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

unei nregistrri individuale, procesarea separat a nregistrrilor bazei de date. Din motivul c opereaz asupra nregistrrilor individuale, aceast prelucrare se mai numete i nregistrare cu nregistrare. O comand pentru DML de nivel nalt specific o cerere de acces la date, dar nu specific modul n care se realizeaz acasta. Din acest motiv acest limbaj se numete declarativ. Oricum, comenzile DML fie de nivel nalt, fie de nivel sczut sunt implementate ntr-un limbaj de programare general, limbaj numit i limbaj gazd, iar DML este numit limbaj de date. DML de nivel nalt utlizat ntr-o manier interactiv formeaz ceea ce se numete query language.

2.6. Interfee SGBD


SGBD trebuie s ofere interfee corespunztoare tuturor categoriilor de utilizatori. Aceste interfee au ca scop facilitarea legturii ntre utilizatori i sistemul de baze de date. Principalele tipuri de interfee oferite de SGBD sunt: Interfee bazate pe meniuri. Acestea ofer utilizatorului o list de opiuni, numite meniuri care i ajut la formularea cererilor. Nu este necesar memorarea unor comenzi deoarece o comand specific este format pas cu pas prin compunerea opiunilor indicate prin meniu. Interfee grafice. Aceste interfee afieaz utilizatorului o diagram. Utilizatorul poate formula cererea prin manipularea acestei diagrame. n cele mai multe cazuril, interfeele grafice sunt combinate cu meniuri. Interfee bazate pe forme. Aceste interfee sunt acelea prin intermediul crora utilizatorul poate completa formele cu noile date pe care le dorete s le insereze, sau folosete aceste forme pentru a cere SGBD s obin datele de interes. Interfee n limbaj natural. Aceste interfee accept cereri scrise n limba englez sau alte limbi de circulaie internaional. O interfa n limbaj natural conine uzual o schem proprie similar cu schema conceptual a bazelor de date. Interpretarea cererilor se face pe baza unui set standard de cuvinte cheie ce sunt interpretate pe baza schemei interne. Dac interpretarea se realizeaz cu succes, programul de interfa genereaz cererea de nivel nalt corespunztoare celei n limbaj natural, ce va fi transmis ctre SGBD. Interfee specializate aferente cererilor repetate. Aceste interfee sunt destinate unei anumite categorii de utilizatori, de exemplu utilizatorii care se ocup de operaiile

19

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

dintr-o banc. Uzual, un mic set de comenzi prescurtate sunt implementate pentru a scurta timpul necesar introducerii comenzii, sau chiar utilizarea de chei funcionale. Aceste interfee implementeaz un limbaj numit i limbaj de comand. Interfee pentru administratorii bazelor de date. Acestea sunt utilizate n implementarea comenzilor privilegiate ce sunt folosite de administratorii bazelor de date. Astfel de comenzi includ crearea de conturi, setarea parametrilor sistemului, autorizarea intrrii ntr-un anumit cont, reorganizarea structurii de stocare a datelor din baza de date, precum i o serie de faciliti legate de administrarea bazei de date, cum sunt: accesul la tabele i nregistrri, faciliti de acces la cmpuri ale tabelelor de date.

2.7. Exemple de SGBD


n momentul de fa, pe pia exist o ofert foarte mare de sisteme de gestiune a bazelor de date, de la sisteme care se pot folosi gratuit (fr licen sau cu licen public), pn la sisteme de nalt performan, a cror utilizare necesit cumprarea de licene. Pentru aceste sisteme exist pe site-urile productorilor versiuni de test numite trial version, pentru care nu se pltete licen, durata folosirii respectivului produs fiind limitat la un numr de zile (30, 60 zile, n funcie de productor). Microsoft SQL Server este sistemul de gestiune a bazelor de date relaionale multiutilizator dezvoltat de firma Microsoft pentru sistemele de operare Windows. Au existat mai multe versiuni, cea actual fiind SQLServer 2000 (SQL Sever 2003 fiind nc n faza de testare). n toate versiunile, acest sistem de baze de date suport standardul SQL2, cu implementarea perfomant a trsturilor avansate de stocare i prelucrare a datelor. Exist o interfa grafic pentru interaciunea cu utilizatorul, pentru folosirea tuturor opiunilor: de export/ import date, de creare i manipulare a tabelelor, pentru popularea cu date a tabelelor, de creare a interogrilor, a procedurilor stocate, a triggerelor etc. Pentru a obine gratuit o versiune de test, accesai adresa http://www.microsoft.com. Microsoft Access este unul din cele mai cunoscute sisteme de gestiune a bazelor de date relaionale pe platforme de calculatoare personale. Microsoft Access dispune de un sistem de control al bazei de date (database engine) i o intefa grafic pentru interaciunea cu utlizatorul. Aplicaiile de baze de date n MS Access se pot dezvolta cu mult uurin

20

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

datorit generatoarelor de aplicaii (wizards) care permit proiectarea vizual a bazelor de date, a formularelor (forms) pentru interfeele grafice i a rapoartelor (reports). MS Access este folosit n special pentru aplicaii personale sau pentru mici afaceri i licena acestuia se cumpr odat cu cumprarea licenei produsului Microsoft Office. Acest sistem este cel folosit de noi n capitolele urmtoare. Sistemul Oracle este un sistem de gestiune al bazelor de date multi-utilizator foarte puternic, cu implementri pe toate platformele (Windows, Linux, Unix), care ofer att performane de execuie ridicate, ct i un grad mare de protecie i securitate a datelor. n toate versiunile, Oracle ofer implementarea complet a caracteristicilor modelului relaional, conform standardului SQL2, iar ultimele versiuni (Oracle8i, Oracle9i etc) sunt sisteme de gestiune obiect-relaionale distribuite, implementnd extensiile orientate obiect prevzute n standardul SQL3 i oferind posibilitatea de dezvoltare a bazelor de date distribuite. De la adresa http://www.oracle.com se poate obine o versiune a sistemului de gestiune Oracle, dar i a diferitelor instrumente de dezvoltare a aplicaiilor de baze de date. Termenii licenei permit utilizarea gratuit a acestor sisteme n scopuri necomerciale pe o perioad nelimitat, pentru utliizarea n scopuri comerciale trebuie pltite licenele corespunztoare. MySQL este un sistem de gestiune a bazelor de date relaionale cu implementri pentru sistemele de operare Linux, Unix, Windows. Acest sistem se poate utiliza gratuit, fiind open source. Ultima versiune i documentaia sistemului de gestiune a bazelor de date MySQL se poate descrca de la adresa http://www.mysql.com. Acest sistem este compatibil cu standardul SQL2, dar unele prevederi ale standardului fiind implementate parial. Visual FOX PRO este un limbaj de programare complet, care accept un mediu interactiv i un mediu compilat la rulare. Visual FOX PRO este compatibil cu toate versiunile anterioare de FoxPro. Stilul de proiectare a interfeei FoxPro a fost ntotdeauna orientat ctre flexibilitate i uurin n utilizare. Pe de alt parte, fora i viteza brut au reprezentat dintotdeauna punctul forte al lui FoxPro. Nici un produs creat de celelalte companii axate pe baze de date, care au fcut trecerea la modelul orientat obiect nu a putut rivaliza cu FoxPro n ce privete viteza de execuie a funciilor specifice bazelor de date. i acest mediu conine vrjitori (Wizard) pentru gestionarea mai multor taskuri.

21

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

3. Proiectarea Bazelor de Date


3.3. Ce este proiectarea ?
Proiectarea unei baze de date const din proiectarea logic i fizice a acesteia, pentru a corespunde cerinelor utilizatorilor pentru un anumit set de aplicaii. n general, vom considera c proiectarea corect a unei baze de date trebuie s parcurg urmtoarele etape: Analiza cererilor i strngerea de informaii referitoare la aplicaie. Proiectarea conceptual a bazei de date. Alegerea unui sistem de gestiune al bazelor de date. Proiectarea logic a bazei de date. Proiectarea fizic a bazei de date. Implementarea bazei de date i a aplicaiei. nainte de a se proiecta efectiv o baz de date, este necesar s se cunoasc ce rezultate se ateapt potenialii utilizatori s obin de la baza de date respectiv i documentarea asupra informaiilor ce sunt disponibile pentru aceasta. De asemenea, este necesar i definirea ct mai exact a aplicaiei (De ex.: aplicaie de gestiune a stocurilor, a crilor ntr-o bibliotec, aplicaie contabil, aplicaie folosit la salarizare, aplicaie referitoare la gestiunea studenilor, a profesorilor, a cursurilor, a notelor dintr-o instituie de nvmnt etc.). Avnd cerinele formulate precis i concis se poate trece la elaborarea schemei conceptuale utiliznd un model de nivel nalt. Schema conceptual reprezint o descriere concis a datelor utilizatorului, incluznd descrierea detaliat a tipurilor de date, a relaiilor i restriciilor acestora. Deoarece pn la acest moment nu se includ detalii de implementare, rezultatele pot fi comunicate utilizatorilor, chiar dac sunt nespecializai n domeniu, i analizate de acetia pentru eliminarea eventualelor conflicte care pot aprea. Urmtoarea etap este cea de construcie a bazei de date innd cont de detaliile actuale, cu ajutorul unui sistem de gestiune a bazelor de date (SGBD). Aceast etap

22

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

nglobeaz etapele de alegere a unui SGBD, de proiectarea logic a bazei de date i cea de proiectarea fizic a bazei de date. Alegerea SGBD se face n funcie de complexitatea aplicaiei, de capacitatea de stocare a datelor, de posibilitatea refacerii datelor, de numrul de utilizatori care vor folosi aplicaia, dar i de costurile de achiziie ale sistemului, de costurile de ntreinere etc. Urmtoarea faz, cea de proiectare logic poate fi realizat n dou sub -faze: transpunerea schemei conceptuale n modelul de date al sistemului SGBD ales, dar independent de sistemul de gestiune propriu-zis, sau rafinarea schemei conceptuale i a schemelor externe obinute anterior, astfel nct s se utilizeze mai multe din facilitile oferite de sistemul SGBD ales (modul de generare a cheilor primare, definirea constrngerilor, etc.). Aceste dou sub-faze se pot realiza mpreun, folosind unul din instrumentele de proiectare oferite de sistemul SGBD ales. Rezultatul acestei faze de proiectare l constituie, aadar, schema conceptual i schemele externe ale bazei de date, dependente de sistemul SGBD ales i de modelul de date al acestuia. Proiectarea fizic a bazei de date reprezint procesul de alegere a structurilor de memorare i de acces la fiierele bazei de date, pentru a obine performane ct mai bune pentru aplicaia proiectat. Ca parametrii generali de alegere a opiunilor proiectului fizic al unei baze de date relaionale se pot enumera: timpul de rspuns, utilizarea spaiului de memorare, capacitatea tranzacional. Deciziile de proiectare fizic se pot lua numai dup o analiz a aplicaiilor care se vor executa i n principal, a interogrilor i tranzaciilor pe care acestea le vor lansa. n urma analizei se pot sintetiza informaii care s dea imaginea de ansamblu a utilizrii atributelor relaiilor bazei de date: care atribute sunt actualizate cel mai frecvent, care atribute sunt folosite cel mai frecvent n selecii ale interogrilor, etc. Aceste informaii se folosesc pentru stabilirea indecilor secundari ai relaiilor. Ultima etap este cea de implementare efectiv a bazei de date i a aplicaiei. Aici se creaz pe baza modelului definit obiectele bazei de date, se populeaz cu date baza de date, se verific constrngerile, se creaz interfeele cu utlizatorul i rapoartele neceare cu datele extrase din baza de date.

23

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

3.4. Modelul Entitate Asociere. Obiectele bazelor de date relaionale


Modelul Entitate-Asociere (Entitate-Relaie) este cel mai utilizat model conceptual de nivel nalt, care reprezint schema conceptual a bazei de date cu ajutorul entitilor i a relaiilor dintre acestea. Acest model a fost introdus n anul 1976 de P.S.Chen. El se constituie ntr-o abordare de tip grafic a proiectarii bazelor de date i a fost adoptat de comunitatea tiinific precum i de productorii de software n domeniu datorit simplitii i expresivitii sale. Elementele de baz folosite n cadrul acestui model sunt conceptele de entitate i cel de relaie. O entitate (o colecie de informaii logice relaionale tratat ca o unitate) este un obiect al lumii reale, cu o existen independent i poate reprezenta un obiect fizic, o activitate, un concept. O entitate este un obiect cu existen fizic, de exemplu: persoan particular, automobil, companie, activitate, curs universitar. O tabel este compus din nregistrri (tupluri) sau rnduri. Fiecare nregistrare este tratat ca o simpl unitate. Fiecare nregistrare este legat de nregistrri ale altei tabele. Orice entitate are o serie de proprieti numite atribute, ce descriu entitatea respectiv. nregistrrile sunt constituite din cmpuri (atribute) . Un cmp este o particul atomic a bazei de date ce reprezint cea mai mic cantitate de informaie care poate fi manipulat. Toate nregistrrile dintr-o tabel au aceleai cmpuri. Atributelor li se asociaz valori care au ca scop identificarea entitii. Aceast atribuire de valori pentru fiecare atribut formeaz o nregistrare a tabelului respectiv. Unele atribute pot fi divizate n mai multe pri cu semnificaie independent. Un astfel de atribut este un atribut complex. Atributele care nu sunt compuse se numesc atribute atomice. Valoarea atributelor complexe se formeaz prin concatenarea valorilor atributelor atomice. Multe atribute au valoare unic pentru o entitate particular i sunt numite atribute cu o singur valoare. De exemplu CNP-ul unei persoane. Exist atribute ce pot lua mai multe valori dintr-un set dat, cum ar fi gradele didactice ale profesorilor universitari, culorile etc. Aceste atribute sunt atribute cu mai multe valori.

24

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Atributele derivate sunt atributele ce se pot determina din alte atribute, cum ar fi vrsta unei persoane se poate calcula din data curent minus data naterii persoanei respective. n anumite situaii, o entitate poate s nu aib valori pentru toate atributele asociate ei, n acest caz folosindu-se o valoare special numit atributul null. Un exemplu ar fi lipsa din atributul Adres a numelui blocului sau a scrii, etc.

3.5. Construcia schemelor relaie


n proiectarea bazelor de date se definesc relaii sau asocieri ntre mulimile de entiti componente, pentru a reprezenta anumite aspecte ale realitii pe care o modeleaz baza de date. O relaie este o coresponden ntre entiti din una sau mai multe mulimi de entiti. Gradul unei relaii este dat de numrul de mulimi de entiti asociate. Relaiile pot fi binare (ntre 2 mulimi de entiti) sau multiple (ntre mai mult de 2 entiti). Relaiile binare sunt mprite n trei categorii, dup numrul elementelor din fiecare din cele dou mulimi puse n coresponden de relaia respectiv. Se consider 2 mulimi de entiti E1 i E2.

3.5.1. Relaia unul-la-unul (1-1 sau one to one)


Relaia unul-la-unul este cel mai simplu tip de relaie. Ea este relaia prin care unui element din mulimea E1 i corespunde un singur element din mulimea E2 i reciproc.

Figura 3. Relaia unul-la-unul Aceast relaie unul-la-unul este foarte rar folosit n lumea real. Cel mai des, ea este folosit pentru a reduce numrul de atribute dintr-o entitate, pentru a nu depi numrul

25

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

maxim de cmpuri asociate pentru o tabel, acesta fiind de circa 255. Se mai poate folosi i n cazul n care dorim desprirea elementelor fixe, a informaiilor care se modific mai rar fa de cele care se modific destul de des.

3.5.2. Relaia unul-la-multe (1-N sau one to many)


Aceast relaie este o relaie prin care unui element din mulimea E1 i corespund unul sau mai multe elemente din mulimea E2, dar unui element din mulimea E2 i corespunde un singur element din mulimea E1.

Figura 4. Relaia unul-la-multe

3.5.3. Relaia multe-la-multe (M-N sau many to many)


Aceast relaie este o relaie prin care unui element din mulimea E1 i corespund unul sau mai multe elemente din mulimea E2, i reciproc.

Figura 5. Relaia multe-la-multe

26

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Acest tip de relaie este foarte des ntlnit, dar nu poate fi implementat n bazele de date relaionale. De fapt, pentru modelarea acestei relaii se folosete o relaie suplimentar, de tip unul-la-multe pentru fiecare din relaiile iniiale.

3.5.4. Relaia unar


Toate relaiile prezentate anterior sunt relaii binare, avnd cte dou relaii implicate. Relaiile unare folosesc doar o singur relaie, aceasta fiind asociat cu ea nsi.

Figura 6. Relaia unar Exemplul clasic al acestei relaii unare este cazul managerului unei companii, care la rndul su este tot un angajat al acelei companii. Relaiile unare se modeleaz la fel ca i relaiile binare.

3.6. Diagrama Entitate-Asociere


Diagrama Entitate-Asociere este modelul entitate-asociere reprezentat prin mulimile de entiti i relaii dintre acestea. Exist mai multe variante de notaii pentru redarea acestei diagrame, astfel:

27

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

3.7. Constrngeri de integritate


Constrngerile de integritate sunt reguli care se definesc la proiectarea unei baze de date i care trebuie s fie respectate de-a lungul existenei acesteia. Vom folosi n continuare pentru termenul de entitate denumirea tabel. Constrngerile se pot clasifica astfel: n cadrul tabelei sau ntre tabele. Constrngerile sunt de 3 categorii: constrngeri de domeniu. Aceste constrngeri sunt condiii care se impun valorilor atributelor i asigur integritatea domeniilor atributelor. constngeri de tuplu (de nregistrare din tabel). Aceste constrngeri sunt condiii care se impun tuplurilor unei entiti (nregistrrilor din tabel) i asigur identificarea corect a tuplurilor prin intermediul cheilor primare. constrngeri impuse de dependene de date (dependene funcionale). Acestea sunt constrngeri prin care valorile unor atribute ale unei entiti (cmpuri ale tabelei) determin valorile altor atribute ale aceleiai entiti. Constrngerile ntre tabele sunt reguli care se impun ntre dou sau mai multe relaii. Cele mai importante sunt constrngerile de integritate referenial, care se realizeaz prin intermediul cheilor strine i asigur asocierea corect a tabelelor.

28

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

3.7.1. Constrngerile de domeniu


Constrngerile de domeniu sunt condiii impuse valorilor atributelor pentru ca acestea s corespund semnificaiei pe care o au n realitatea modelat. n reprezentarea unei entiti printr-un tabel, valorile atributelor sunt reprezentate pe coloane. Din aceast cauz aceste constrngeri se mai numesc i constrngeri de coloan. Vom descrie 3 tipuri de constrngeri de coloan: Constrngerea NOT NULL. Valoarea NULL este o valoare particular, care nu reprezint valoarea 0, ci lips de informaie. Aceast valoare NULL poate aprea cnd nu se cunosc respectivele informaii. Nu orice atribut poate lua valoarea NULL. n astfel de situaii la definirea relaiilor se impune atributului constrngerea NOT NULL, nsemnnd c acest atribut nu poate lua valoare NULL n orice nregistrare din tabel. Constrngerea DEFAULT. Aceast constrngere este folosit pentru stabilirea unei valori implicite (DEFAULT) pentru un atribut al entitii. n cazul n care la inserarea unui tuplu (nregistrri) nu se specific valoarea unui atribut (cmp), atunci acesta primete valoarea implicit (dac a fost definit) sau valoarea NULL (dac nu a fost definit o valoare implicit pentru atributul respectiv, dar sunt admise valori NULL). Dac nu a fost definit o valoare implicit i nici nu sunt admise valori NULL se genereaz o eroare. Constrngerea CHECK. Constrngerea CHECK este dup cum i spune i numele o constrngere de verificare.

3.7.2. Constrngerile referitoare la tupluri (nregistrrile din tabel)-Cheia primar


O entitate este definit ca o mulime de tupluri. Deci, tuplurile entitii trebuie s fie distincte, acest lucru nsemnnd c ntr-o entitate nu pot exista dou sau mai multe tupluri care c conin acceai combinaie de valori pentru fiecare atribut. O cheie primar a unei entiti (tabele) este o submulime de atribute ale entitii care are urmtoarele proprieti: este unic, adic orice combinaie de valori ale atributelor acestei chei este unic pentru orice stare a relaiei

29

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

este stabil, adic informaia corespunztoare ei nu se modific niciodat prin operaii de actualizare a datelor nu se admit valori NULL pentru nici unul din atributele cheii respective Cheile pot fi: simple (formate dintr-un singur atribut) sau compuse (formate din mai

multe atribute). n concluzie, o cheie primar reprezint unul sau mai multe cmpuri ale tabelei care identific unic fiecare nregistrare din tabela respectiv.

3.7.3. Constrngeri ntre tabele


Relaiile dintre tipurile de entiti definite n modelul conceptual al unei baze de date se realizeaz n modelul relaional prin intermediul cheilor strine. O cheie strin este o submulime de atribute ale unei entiti E1 care refer entitatea E2 i ndeplinete urmtoarele condiii: atributele cheii strine din E1 sunt definite pe domenii compatibile cu cele ale atributelor cheii din entitatea E2, i cheia din entitatea E2 este cheie primar n aceast relaie. Aceast cheie strin determin o asociere ntre cmpurile unor tabele cu cele ale altei tabele i creeaz abilitatea de realizare a unirii tabelelor respective prin intermediul operaiilor JOIN. Integritatea referenial este proprietatea bazei de date care garanteaz c oricare valoare a unei chei strine se regsete printre valorile cheii corespunztoare din relaia referit, sau cheia strin are valoarea NULL (dac atributele acesteia nu sunt supuse constrngerii NOT NULL).

30

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

4. Tehnologii folosite n realizarea proiectului


4.1. Descriere
Pentru a realiza aceast site de web pentru agenie imobiliar s-au avut n vedere folosirea mai multor tehnologii. Un site web este o colecie de documente (similare unei colecii de documente word, de exemplu). Spre deosebire de acestea, documentele care formeaza site-ul (pe care le vom numi pagini) nu sunt independente unele de altele, ci sunt legate printr-un sistem care se numete sistemul de navigare n cadrul site-ului.

HTML. Paginile site-ului sunt create cu ajutorul unui limbaj numit HTML. n spatele oricrei pagini web st codul HTML al paginii. Vizualizarea codului surs HTML poate fi realizat selectnd din meniul View al browserului opiunea Source. Cu ajutorul limbajului HTML pot fi incluse ntr-o pagina web texte, imagini, legturi ctre alte pagini din site sau ctre web, liste, tabele, formulare. Acesta nu este un limbaj de programare propriu zis, ci un limbaj de marcare. Prin intermediul su programatorul stabilete ce elemente vor face parte din pagina web i care va fi aspectul acestora. Acest lucru se realizeaz cu ajutorul unor cuvinte cheie incluse ntre paranteze unghiulare care se numesc tag-uri. n afara limbajului HTML, la realizarea unui site pot participa i alte limbaje sau tehnologii. CSS. Prescurtare de la Cascading Style Sheets, foi de stiluri n limba romn. Servesc la stabilirea unui aspect unitar pentru elementele care fac parte din pagina web i modificarea cu uurinta a lor. De exemplu, dac vom crea o pagin de stiluri n care vom stabili c titlurile care apar n site vor fi de culoare roie i mrimea de 20 de pixeli, n cazul cnd a dori modificarea culorii nu va mai fi necesar s modific fiecare pagin a site-ului. Este suficient s modific pagina de stiluri i toate paginile i vor modifica aspectul n consecin.

31

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Java Script. Spre deosebire de HTML, Java Script este un limbaj de programare. Se folosete mpreun cu limbajul HTML. ntr-o pagin scris n HTML se pot integra programe (numite scripturi) scrise n Java Script. Utilizri frecvente: ferestrele pop-up, meniurile dinamice, afiarea imaginilor, textele care fac scroll, verificarea formularelor, etc.

SQL este o abreviere pentru Structured Query Language (Limbaj Structurat de Interogare). Limbajul SQL este un limbaj utilizat de majoritatea sistemelor de baze de date relaionale pentru definirea i manipularea datelor. SQL este un standard internaional n interogarea i extragerea de informaii din baze de date. Interogrile SQL permit selectarea, inserarea, updatarea i determinarea locaiilor de date. MySQL. Acronimul MySQL provine de la My Structured Query Language i este n esen un server SQL multi-user i multi-thread rspunde la cereri de informaie scrise n SQL. MySQL este cel mai popular SGBD (Sistem de Gestiune a Bazelor de Date) relaional, open-source i gratuit pentru folosire, care se bazeaz pe SQL pentru procesarea datelor din baza de date. MySQL pune la dispozite API-uri (Application Programming Interface) pentru limbajele C, C++, Java, Perl, PHP i Python. MySQL este folosit n special pentru aplicaii web i embedded. Principalele atuuri MySQL sunt viteza, scalabilitatea i stabilitatea, la care dac se adaug faptul c este gratis l transform ntr-un competitor extraordinar comparativ cu alte baze ca Oracle sau Microsoft SQL Server.

PHP. Pentru a comunica cu serverul MySQL se pot folosi o varietate de limbaje de programare, cel folosit n lucrarea de fa i unul din cel mai comune fiind PHP (Preprocesor Hypertext) limbaj de programare folosit la crearea paginilor web dinamice. PHP este ceea ce se cheam un limbaj server-side (prezent pe majoritatea serverelor Apache), spre deosebire de JavaScript care este un limbaj client-side. Aceasta nseamn c scripturile JavaScript sunt executate de ctre client (adic de browser), n vreme ce scripturile PHP sunt executate de ctre server. PHP se folosete pentru a crea diverse aplicaii: magazine virtuale, cataloage de produse, forumuri, motoare de cutare, etc. PHP este un produs open-source cu acces la codul surs care poate fi modificat i redistribuit, totul gratuit. Poate rula pe majoritatea sistemelor de operare (Linux, Windows, Solaris, OpenBSD, etc.) i poate interaciona cu majoritatea serverelor web ca: Apache, IIS (Internet Information Services), Netscape, etc. i baze de date ca: MySQL, Oracle, PostgreSQL, etc. 32

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

APACHE. Pentru a avea un site funcional este nevoie de un server HTTP (Hyper Text Transport Protocol). Acest server poate fi APACHE, ce ruleaz pe majoritatea site urilor web existente. i acesta este un produs open-source, fiind dezvoltat de ctre Apache Group. Ruleaz pe sisteme de operare Linux, Windows.

4.2. Cum interacioneaz ?


Pentru a funciona corect i pentru a putea scrie aplicaii n PHP avem nevoie de 3 componente: un server web, un server de baze de date i un program server-side. n cadrul acestui document rolul acestor trei componente va fi jucat de Apache, MySQL i limbajul PHP. Problema cu aceste 3 componente este modul n care ele conlucreaz i cum sunt configurate. Modul n care un server web funcioneaz este urmtorul: cnd se scrie o adres n bara de adrese a unui browser i se apas ENTER, browser-ul trimite o cerere server-ului http (sau de web): afieaz pagina pagina.html a site-ului. Server-ul tie s serveasc (de unde si numele server) doar pagini HTML, ns dac se lucreaz n PHP, aceste fiiere vor avea extensia .php, deci server-ul va cuta s vad dac nu este configurat s serveasc i alt tip de fiiere. Dac a fost configurat s serveasc i pagini php, atunci ele vor fi trimise unui unui alt program care se ocup s le recunoasc, s le citeasc i apoi s trimit napoi o pagin care s poat fi afiat clientului care a fcut n primul rnd cererea. Acest program care este apelat de ctre server este PHP, care descifreaz codul scris n fiier, iar dac se cer informaii dint-o baz de date, atunci tot el extrage aceste informaii i le prelucreaz astfel nct ele s poat fi afiate la client. La nivel cel mai de jos World Wide Web-ul se bazeaz pe o arhitecur client/server. Asta nsemn c i severul central, dar i aplicaia-client sunt responsabile de o parte din procesarea datelor.

Clientul Aplicaiile care se pot dezvolta folosind MySQL i PHP folosesc un singur client: browserul Web.

33

Universitatea POLITEHNICA Bucureti Server-ul

PROIECT de DIPLOM

Aproape tot ce fac aplicaiile Web are loc pe un server. O aplicaie specific, numit server Web, va fi responsabil pentru comunicarea cu browser-ul. n cele din urm, mai este nevoie de un limbaj care s intermedieze cereri ntre server-ul web i un server de baze de date, n cazul nostru i s realizeze sarcini prin program asupra informaiilor ce vin i se duc spre sever-ul Web. Toate aceste trei elemente (server-ul Web, limbajul de programare i serverul de baze de date) trebuie s fie compatibile i cu sistemul de operare din calculatorul pe care sunt folosite.

Figura 7. Arhitectura aplicaiilor Web Middleware PHP face parte din clasa limbajelor middleware (ASP, Perl, ColdFusion etc.). Aceste limbaje lucreaz cu serverul Web pentru a interpreta cererile fcute dinspre World Wide Web, proceseaz aceste cereri, interacioneaz cu alte programe pe server pentru a ndeplini cererile i va indica, apoi, server-ului exact ceea ce trebuie servit browser-ului clientului. O tranzacie normal cu baza de date Web se constituie din urmtorii pai (numerotai n figur):

Figura 8. Pai n tranzacia cu Web BD

34

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

1. Browser-ul unui utilizator face o cerere HTTP pentru o anumit pagin (spre exemplu se caut o anumit carte un site prin intermediul fiierului results.php). 2. Server-ul Web primete cererea pentru results.php, caut fiierul i l paseaz motorului PHP pentru a fi procesat. 3. Motorul PHP ncepe procesarea i gsete o comand de conectare la o baza de date i o interogare dup un anumit criteriu. PHP deschide o conexiune cu server-ul MySQL i i trimite interogarea. 4. Server-ul MySQL primete interogarea i o proceseaz i trimite rezultatul (o lista de cri, n cazul nostru) PHP-ului. 5. PHP-ul termin de rulat script-ul (de obicei are loc o formatare a rezultatelor interogrii n HTML) i returneaz fiierul HTML rezultat server-ului Web 6. Server-ul Web trimite HTML-ul napoi ctre browser de unde utilizatorul poate vedea lista crilor pe care le-a cerut. De ce am ales s folosesc PHP i MySQL pentru realizarea proiectului?

Apache i PHP sunt absolut gratuite. La fel i MySQL cu unele limitri PHP i MySQL pot fi folosite pe majoritatea platformelor Dei MySQL nu dispune de toate caracteristicile suportate de concuren, este la fel de rapid i de puternic Conectivitatea, viteza i securitatea face server-ul MySQL extrem de potrivit pentru accesarea bazelor de date pe Internet PHP a reuit s ajung la mix-ul perfect de putere, rapiditate, structur i uurin n folosire i PHP i MySQL sunt mbuntite n mod constant.

35

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

5. Descrierea proiectului
5.1. Proiectarea conceptual a Bazei de Date
Baza de date de sub MySQL a proiectului se numete casata. Ca pentru orice baz de date trebuie identificate entitile, atributele i relaiile. Aceast baz de date conine urmtoarele 6 tabele (entiti): pp_anunuri pp_clieni pp_email pp_tipuri pp_users pp_zona

Sintaxa SQL folosit pentru crearea i folosirea bazei de date casata este: CREATE DATABASE `casata`; USE `casata`;

5.1.1. Tabela pp_anunuri


Tabela pp_anunuri cuprinde urmtoarele cmpuri (sau altfel spus, pentru entitatea pp_anunuri avem urmtoarele atribute):
FIELD TYPE

id_anun fel id_tip id_zona pre descriere ora data

mediumint(9) enum(vanzare, inchiriere) smallint(6) smallint(6) int(11) varchar(255) time date

ATTRIBUTES UNSIGNED

NULL

DEFAULT

EXTRA

KEY

No Yes No No No Yes No No

auto-increment

PRI

NULL

UNSIGNED UNSIGNED

NULL

36

Universitatea POLITEHNICA Bucureti Explicaii:

PROIECT de DIPLOM

id_anun codul anunului (resprezint numrul anunului respectiv n baza de date); fel reprezint felul anunului(ofertei): anun de vnzare sau anun de nchiriere; id_tip codul tipului de imobil din anun; id_zona codul zonei unde se afl imobilul din anun; pre preul imobilului de vnzare sau preul/lun al celui de nchiriat; descriere detalii privind imobilul (comandat/decomandat, etaj, suprafa, mobilat/nemobilat, utilat sau nu cu gresie, faian, aer condiionat, termopane, central termic, parchet, main de splat, cuptor cu microunde; pentru case/vile numrul camerelor, canalizare, garaj, etc. ); ora ora introducerii anunului; data data introducerii anunului. Sintaxa SQL folosit pentru crearea tabelei pp_anunuri este: CREATE TABLE `pp_anunturi` ( `id_anunt` mediumint(9) UNSIGNED NOT NULL AUTO_INCREMENT, `fel` enum('vanzare','inchiriere'), `id_tip` smallint(6) UNSIGNED NOT NULL, `id_zona` smallint(6) UNSIGNED NOT NULL, `pret` int(11) NOT NULL, `descriere` varchar(255), `ora` time NOT NULL, `data` date NOT NULL, PRIMARY KEY(`id_anunt`), FOREIGN KEY(`id_tip`) REFERENCES `pp_tipuri`(`id_tip`), FOREIGN KEY(`id_zona`) REFERENCES `pp_zona`(`id_zona`) ) TYPE=MYISAM ROW_FORMAT=default;

5.1.2. Tabela pp_clieni


Tabela pp_clieni cuprinde urmtoarele cmpuri:
FIELD TYPE ATTRIBUTES UNSIGNED NULL DEFAULT EXTRA KEY

id titlu poveste foto Explicaii:

smallint(6)

No

auto-increment

PRI

varchar(50) varchar(255) blob

Binary

No Yes Yes

NULL NULL

id numrul de identificare al opiniei/observaiei/sugestiei clientului ageniei; titlu denumirea dat de client acestei opinii/observaii/sugestii; poveste ceea ce a relatat clientul; 37

Universitatea POLITEHNICA Bucureti foto fotografia ataat de client mesajului transmis. Sintaxa SQL folosit pentru crearea tabelei pp_clieni este:

PROIECT de DIPLOM

CREATE TABLE `pp_clieni` ( `id` smallint(6) UNSIGNED NOT NULL AUTO_INCREMENT, `titlu` varchar(50), `poveste` varchar(255), `foto` blob, PRIMARY KEY(`id`) ) TYPE=MYISAM ROW_FORMAT=default;

5.1.3. Tabela pp_email


Tabela pp_email cuprinde urmtoarele cmpuri:
FIELD TYPE ATTRIBUTES UNSIGNED NULL DEFAULT EXTRA KEY

id_email email Explicaii:

smallint(6)

No

auto-increment

PRI

varchar(30)

No

id_email codul email-ului nscris de un posibil client; email email-ul unui posibil client, doritor al ofertelor de vnzare/nchiriere ale ageniei. Sintaxa SQL folosit pentru crearea tabelei pp_email este: CREATE TABLE `pp_email` ( `id_email` smallint(6) UNSIGNED NOT NULL AUTO_INCREMENT, `email` varchar(30) NOT NULL, PRIMARY KEY(`id_email`) ) TYPE=MYISAM ROW_FORMAT=default;

5.1.4. Tabela pp_tipuri


Tabela pp_tipuri cuprinde urmtoarele cmpuri:
FIELD TYPE ATTRIBUTES UNSIGNED NULL DEFAULT EXTRA KEY

id_tip nume_tip

smallint(6)

No

auto-increment

PRI

varchar(50)

No

38

Universitatea POLITEHNICA Bucureti Explicaii:

PROIECT de DIPLOM

id_tip codul tipului de imobil; nume_tip felul de imobil; acesta poate fi: garsonier, ap. 2 camere, ap. 3 camere, ap. 4 camere, cas/vil, spaiu comercial, teren, etc. Sintaxa SQL folosit pentru crearea tabelei pp_tipuri este: CREATE TABLE `pp_tipuri` ( `id_tip` smallint(6) UNSIGNED NOT NULL AUTO_INCREMENT, `nume_tip` varchar(50) NOT NULL, PRIMARY KEY(`id_tip`) ) TYPE=MYISAM ROW_FORMAT=default;

5.1.5. Tabela pp_users


Tabela pp_users cuprinde urmtoarele cmpuri:
FIELD TYPE ATTRIBUTES UNSIGNED NULL DEFAULT EXTRA KEY

id user password Explicaii:

smallint(6)

No

auto-increment

PRI

varchar(50) varchar(50)

No No

id numrul de nregistrare al user-ului respectiv; user user-ul folosit de o persoan autorizat pentru a se loga; password parola cu care se va loga user-ul respectiv. Sintaxa SQL folosit pentru crearea tabelei pp_users este: CREATE TABLE `pp_users` ( `id` smallint(6) UNSIGNED NOT NULL AUTO_INCREMENT, `user` varchar(50) NOT NULL, `password` varchar(50) NOT NULL, PRIMARY KEY(`id`) ) TYPE=MYISAM ROW_FORMAT=default;

39

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

5.1.6. Tabela pp_zona


Tabela pp_zona cuprinde urmtoarele cmpuri:
FIELD TYPE ATTRIBUTES UNSIGNED NULL DEFAULT EXTRA KEY

id_zona nume_zona Explicaii:

int(11)

No

auto-increment

PRI

varchar(50)

No

id_zona codul zonei unde se afl imobilul; nume_zona numele zonei unde se gsete imobilul (ex: Aviaiei, Unirii, Roman, Universitate, Drumul Taberei, Crngai, etc.) Sintaxa SQL folosit pentru crearea tabelei pp_zona este: CREATE TABLE `pp_zona` ( `id_zona` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, `nume_zona` varchar(50) NOT NULL, PRIMARY KEY(`id_zona`) ) TYPE=MYISAM ROW_FORMAT=default;

5.1.7. Restriciile de integritate


a) Constrngerile de domeniu: NOT NULL (valori nenule) pp_anunuri: id_anun, id_tip, id_zona, pre, ora, data; pp_clieni: id, titlu; pp_email: id_email, email; pp_tipuri: id_tip, nume_tip; pp_users: id, user, password; pp_zona: id_zona, nume_zona. DEFAULT pp_anunuri: fel, descriere; pp_clieni: poveste, foto.

40

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

b) Constrngerile de tuplu: PRIMARY KEY (cheie primar) pp_anunuri: id_anun; pp_clieni: id; pp_email: id_email; pp_tipuri: id_tip; pp_users: id; pp_zona: id_zona. Toate cheile primare au opiunea extra auto_increment, aceasta fiind de folos atunci cnd se introduc date n tabele, prin faptul c id-ul nu trebuie introdus deoarece se autoincrementeaz. c) Constrngerile ntre tabele: FOREIGN KEY (cheie strin) pp_anunuri: id_tip, id_zona;

Principalele tipuri de date din MySQL:

Tipul de date SMALLINT MEDIUMINT INT sau INTEGER BLOB sau TEXT VARCHAR(s) DATE TIME

Descriere
ntreg mic. Valori SIGNED (cu semn) de la -32768 la 32767. Valori UNSIGNED (fara semn) de la 0 la 65535. ntreg de lungime medie. Valori SIGNED de la -8388608 la 8388607. Valori UNSIGNED de la 0 la 16777215. ntreg de lungime normal. Valori SIGNED de la -2147483648 la 2147483647. Valori UNSIGNED de la 0 la 4294967295. O coloan BLOB sau TEXT cu o lungime de 65535 caractere. iruri de caractere alfanumerice de lungime variabil, maximum s caractere (255 caractere maxim). O data calendaristic, n format YYYY-MM-DD , cuprins ntre 1000-0101 i 9999-12-31. Ora, minutele i secundele n format HH:MM:SS.

41

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

5.1.8. Asocierile ntre entiti (diagrama EA)


Aadar, tipurile de entiti ( i atributele pentru fiecare din ele) existente n baza de date casata sunt: pp_anunuri (id_anun, fel, id_tip, id_zona, pre, descriere, ora, data); pp_clieni (id, titlu, poveste, foto); pp_email (id_email, email); pp_tipuri (id_tip, nume_tip); pp_users (id, user, password); pp_zona (id_zona, nume_zona). Diagrama Entitate Asociere a acestei baze de date este artat n figura de mai jos:

Figura 9. Diagrama EA

42

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Dup cum se observ din diagram avem 2 asocieri: se gsete ntre pp_tipuri i pp_anunuri se afl ntre pp_zona i pp_anunuri

Ambele relaii sunt de tipul unul-la-multe (1-N sau one to many). Un nume de imobil se poate gsi n mai multe anunuri, dar un anun nu poate s conin mai multe tipuri de imobil (de aceea avem relaia 1- N ntre pp_tipuri i pp_anunuri). O zon (cartier, regiune) se poate regsi n mai multe anunuri, dar un anun nu poate s aib ca localizare a imobilului mai multe zone (de aceea avem relaia 1 N ntre pp_zona i pp_anunuri). Legtura ntre cmpurile tabelelor din baza de date este artat n figura ce urmeaz:

Figura 10. Legtura ntre cmpurile tabelelor

43

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

5.2. Utilizarea site-ului


Aa cum am precizat i n introducerea lucrrii de fa, acest site de web pentru agenie imobiliar cuprinde dou platforme ce se pot desfura n paralel: Platforma Design Public (aplicaia utilizator) Platforma de Administrare (aplicaia administrator)

5.2.1. Aplicaia Utilizator


Aceast aplicaie ofer utilizatorului o interfa grafic prin intermediul creia acesta poate efectua mai multe tipuri de operaiuni. Una din regulile n conceperea unei interfee utilizator pentru un produs software este urmtoarea: o interfa utilizator este bine scris atunci cnd programul se comport exact aa cum se ateapt utilizatorii si. Aceast regul trebuie avut i la conceperea site-urilor web. Site-ul de web pentru agenie imobiliar este destinat utilizatorilor (clienii ageniei, viitorii colaboratori, vizitatori ai site-ului, etc.), iar interfaa trebuie s mulumeasc, s menajeze i s ajute utilizatorul. n conceperea site-ului, a fost adoptat un design orientat ctre utilizator. Cum interfeele utilizator grafice (ex.: Windows) au fost proiectate s ofere utilizatorilor un acces direct dar facil la propriile calculatoare, utilizatorii ateapt acelai nivel sofisticat dar sugestiv al design-ului i n cazul site-urilor web. Pentru a asigura un design orientat ctre utilizator au fost luate n calcul posibilitile de navigare prin site, accesul direct i rapid la informaii, asigurarea simplitii, stabilitatea design-ului i nu n ultimul rnd crearea unui coninut accesibil. Site-ul web dezvoltat este pentru agenia imobiliar numit Casa TA Imobiliare, care se ocup cu tranzacia de imobile. n figura 11 este prezentat prima pagin a site-ului (homepage). Este foarte important ca utilizatorul s aib acces direct n ct mai multe locuri din site nc din prima pagin. Aranjarea informaiilor pe site a fost fcut cu ajutorul unor module care se i adapteaz automat dimensiunile n funcie de informaiile pe care le conin.

44

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Cea mai important problem de interfa n cazul site-urilor de web este absena orientrii n cadrul organizrii locale a informaiei din acel document. Imaginile clare, o privire de ansamblu asupra paginii i n cazul de fa o seciune de categorii ale ofertelor de vnzare/nchiriere, motor de cutare, ultimele anunuri pot da utilizatorilor ncrederea c au posibilitatea de a gsi informaiile dorite ntr-un mod eficient. Utilizatorii trebuie s aib ntotdeauna posibilitatea de a se ntoarce cu uurin la prima pagina a site-ului (acest lucru a fost realizat cu plasarea unui link pe sigla ageniei ctre homepage) i la oricare alte puncte importante de navigare prezente n cadrul site-ului. Lipsa legturilor dintr-o pagin creeaz confuzie, deoarece utilizatorul nu mai are n ce direcie s navigheze i astfel ansele ca el s prseasc site-ul sunt foarte mari. Menuirile din pagina principal i accesibile i din celelalte pagini sunt:

Meniul principal (cel din partea de sus a paginii) Meniul lateral (cel din partea stng a paginii)

Meniul principal cuprinde urmtoarele seciuni: Despre noi Consultan Vnzri Inchirieri Clienii notrii Contact Meniul lateral este alctuit din 4 module : Ultimele anunuri News letter Cutare oferte Curs valutar

45

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Figura 11. Homepage-ul site-ului Pe prima pagin a site-ului se poate observa, n partea de sus-dreapta a acesteia, afiat numrul de nregistrri din baza de date cu anunurile de vnzare/nchiriere, numr ce se modific automat la refresh-ul paginii imediat cum se schimb structura bazei de date : Numr anunuri: 12 vnzri, 14 nchirieri

46

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Urmeaz pe pagin un logo, o parte cu numele ageniei (Casa TA Imobiliare) i motto-ul acesteia (o locuin pentru fiecare), iar imediat sub aceast parte se observ bara cu butoanele meniului principal. Din acest loc i pn nainte de ultima afiare cu numele ageniei i anul curent, pagina este mprit n 2 coloane. n coloana din stnga avem meniul lateral compus din cele 4 module menionate anterior. Tot ce a fost adus n discuie pn n momentul de fa este partea fix a paginii siteului. Coloana din dreapta este singura parte a paginii care se schimb n funcie de opiunile urmate de utilizatori i arat coninutul a ceea ce s-a cutat. Pentru Homepage, n aceast parte a site-ului apar cteva cuvinte despre agenie i ageni, tot aici aprnd i posibilitatea de a trimite mail ageniei prin click pe Contactai-ne acum ! . Imediat sub aceste rnduri introductive sunt 3 poze cu interiorul i exteriorul ageniei. Finalul design-ului de pagin a acestui site este o inscripionare cu numele ageniei i anul curent (2007).

MENIUL PRINCIPAL : 1. Opiunea Despre noi n aceast seciune vizitatorii site-ului pot afla mai multe detalii despre agenie i despre cei ce lucreaz n aceast firm. n primul rnd este precizat scopul ageniei : Acesta este de a oferi servicii profesionale i de a cuta soluii imobiliare avantajoase pentru satisfacerea exigenelor clienilor notrii. Apoi urmeaz n cateva paragrafe s se fac o caracterizare a angajailor i a serviciilor oferite de acetia, precum i 2 poze cu ambientul ageniei. Pagina site-ului arat ca n figura de mai jos :

47

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Figura 12. Pagina Despre noi

48

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

2. Opiunea Consultan n pagina de consultan, clienii, i nu numai, pot afla n ce domenii ofer consultan agenia. Pentru o mai bun nelegere, n figura de mai jos este afiat pagina consultan a site-ului :

Figura 13. Pagina Consultan

49

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

3. Opiunea Vnzari Cnd utilizatorul dorete s afle anunurile cu imobiliele de vnzare aflate n baza de date a ageniei, acesta trebuie s acceseze butonul Vnzri aflat pe pagina. n urma acestei aciuni se va ncrca o pagin n care se gsesc urmtoarele :

Figura 14. Pagina Vnzri

50

Universitatea POLITEHNICA Bucureti un titlu al paginii (n cazul acesta -- vnzri) ;

PROIECT de DIPLOM

un formular de cuare cu anunurile de vnzare, ce cuprinde cmpurile tip imobil dorit i zona n care se vrea localizarea lui ; partea n care se observ rezultatul formularului de cutare (aici sunt afiate anunurile de vnzare cu imobilele care ndeplinesc condiiile date n formular la completarea acestuia de utilizator).

Fiecare anun este afiat n felul urmtor : o pe prima linie sunt : tipul imobilului, zona acestuia i preul n euro ; o pe a doua linie este menionat o scurt descriere a imobilului ; o pe ultima linie se gsete Anun introdus la , urmat de timpul (or:minut:secund) i data introducerii anunului. Anunurile pot fi nsoite sau nu de o poz cu imobilul respectiv. 4. Opiunea nchirieri Cnd utilizatorul dorete s afle anunurile cu ofertele de nchiriere imobilie aflate n baza de date a ageniei, acesta trebuie s acceseze butonul nchirieri aflat pe pagina. n urma acestei aciuni se va ncrca o pagin n care se gsesc urmtoarele : un titlu al paginii (n cazul acesta -- nchirieri) ; un formular de cuare cu anunurile de nchiriere, ce cuprinde cmpurile tip imobil dorit i zona n care se vrea localizarea lui ; partea n care se observ rezultatul formularului de cutare (aici sunt afiate anunurile de nchiriere cu imobilele care ndeplinesc condiiile date n formular la completarea acestuia de utilizator). i anunurile din aceast pagin au acelai format de afiare ca i cele din pagina de vnzri, incluznd sau nu o poz cu imobilul n dreptul anunului.

51

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Figura 15. Pagina nchirieri

52

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

5. Opiunea Clienii notrii n aceast pagin sunt afiate opiniile clienilor cu privire la serviciile oferite lor de ctre cei implicai n bunul mers al ageniei. Pagina are titlul aferent ei (Clienii notrii) i o zon cu opinia persoanei ce a dorit s menioneze anumite lucruri despre agenia cu care a colaborat n vederea vinderii sau nchirieii unui imobil. Fiecare meiune este format din : un titlu ; o zon n care apare sugestia/critica/opinia clientului; o fotografie cu respectivul client.

6. Opiunea Contact n urma vizitrii site-ului, n cazul n care persoana ce a urmrit cu atenie cele relatate n paginile acestuia este dispus s aib o colaborare cu agenia, aceasta trebuie s ia legtura cu agenia. Acest lucru se poate realiza n mai multe feluri : s sune la agenie folosind numerele de telefon afiate pe site s contacteze direct agenia prin prezentarea la sediul acesteia s fac doar un click de mouse pe butonul Contact Dac a fost aleas ultima variant, n urma acestui fapt va aprea o pagin ca cea din figura 16. n aceast pagin se poate observa urmtoarea structur : titlul aferent paginii (Contact) ; adresa ageniei ; telefoanele ageniei, disponibile pentru fiecare persoan ce dorete informaii de orice fel cu privire la activitatea ageniei ; adresa de e-mail a ageniei ; un formular.

53

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Figura 16. Pagina Contact Prin intermediul acestui formular ce se gsete pe pagina de contact a site-ului, persoanele interesate s vnd sau s nchirieze unul sau mai multe imobile vor trebui s -l completeze cu urmtoarele : adresa acestora de e-mail i dorina lor. Pentru persoanele ce doresc s vnd/nchirieze un imobil, n zona intitulat Solicitare , acestea vor trebui s menioneze urmtoarele :

54

Universitatea POLITEHNICA Bucureti tipul imobilului zona n care se afl localizat

PROIECT de DIPLOM

preul dorit n cazul unui imobil de vnzare sau preul/lun n cazul unuia de nchiriere o descriere general a imobilului o eventual poz cu interiorul imobilului date de contact (singurele din list care nu vor aprea pe site) alte lucruri considerate necesare.

Pentru persoanele ce doresc s cumpere/nchirieze un imobil, n zona intitulat Solicitare, acestea vor trebui s menioneze urmtoarele : ce tip de imobil doresc s cumpere/nchirieze o zon aproximativ unde doresc s fie imobilul un pre posibil ce sunt dispuse s ofere date de contact alte lucruri considerate necesare.

n urma completrii cmpurilor din formular, se face click pe Trimite e-mail , iar datele completate n formular sunt trimise pe mail-ul ageniei. De aici nainte este de domeniul administratorului sau pesoanei care are acces la baza de date s adauge anunul pe site i ca urmare s-l fac vizibil celor interesai. Tot aceste persoane (sau cele vizate s fac acest lucru) pot s valideze sau nu anunurile venite prin e-mail i ca urmare acestea pot fi afiate sau nu pe site la seciunea Vnzri sau nchirieri (depinde de anun).

MENIUL LATERAL : Aa cum am menionat i mai sus, acest meniu este format din 4 module. Le vom discuta pe fiecare n parte n cele ce urmeaz. 1. Modulul Ultimele anunuri n acest modul sunt afiate, n partea de sus, ultimele 3 anunuri din baza de date cu ofertele de vnzare, iar n partea de jos, ultimele 3 anunuri din baza de date cu ofertele de nchiriere. n cazul n care nu sunt cte minim 3 anunuri din fiecare categorie, se vor afia exact cele care sunt, fie ele dou sau chiar unul singur. n momentul n care se face click pe unul din anunuri (fie de vnzare, fie de nchiriere), pagina principal va arta n felul urmtor : 55

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Figura 17. Pagina Ultimele anunuri Primele 3 anunuri sunt ultimele din baza de date cele de vnzare, urmate de celelalte 3 de nchiriere (la fel, ultimele introduse n baza de date). Modul n care sunt afiate anunurile este acesta : pe prima linie apare Vnzare: sau nchiriere: asta depinznd la ce categorie se refer anunul ;

56

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

pe a doua linie sunt : tipul imobilului, zona acestuia i preul n euro (sau euro/lun dac este vorba de un anun de nchiriere); pe a treia linie este menionat o scurt descriere a imobilului ; pe ultima linie se gsete Anun introdus la , urmat de timpul (or:minut:secund) i data introducerii anunului.

Anunul poate fi nsoit opional de o fotografie cu imobilul descris.

2. Modulul News letter Acest modul este alctuit din mai multe regiuni. n prima regiune se gsete un formular, care permite celor doritori trimiterea pe emailul (ce se va introduce n cmpul destinat pentru acest lucru) acestora ofertele ageniei cu imobilele de vnzare/nchiriere n format pdf. n a doua regiune utilizatorii/doritorii pot s downloadeze pe calculatorul lor personal un pdf cu toate ofertele de vnzare/nchiriere existente la acel moment n baza de date. Acest lucru este posibil cu un click pe -> Download oferta -< i apoi salvarea n computer a pdf-ului ntors n browser. n a treia regiune a acestui modul se pot observa contactele ageniei (e-mail i 2 numere de telefon fix), utile pentru oricine dorete o tranzacie imobiliar prin intermediul acestei firme. De menionat faptul c aceste contacte pe pagina principal sunt foarte utile i puse intenionat aici pentru a-i fi foarte uor utilizatorului s aib din primul moment al navigrii pe acest site, o surs de legtur cu agenia. Cele menionate mai sus pot fi vizibile n oricare din paginile de mai sus inserate (plecnd de la figura 11 n jos).

3. Modulul Cutare oferte Acest modul este practic un motor de cutare pe site al ofertelor ageniei aflate momentan n baza lor de date. Poziionarea acestuia pe partea fix a paginii site-ului este foarte important i folositoare n acelai timp, deoarece permite oricnd utilizatotilor cutarea dup anumite preferine, printre ofertele existente. Cutarea se face dup urmtoarele criterii :

57

Universitatea POLITEHNICA Bucureti Tip de imobil Tip de ofert Criteriu de sortare Mod de sortare

PROIECT de DIPLOM

La seciunea Tip de imobil utilizatorul trebuie s selecteze imobilul pe care-l caut. El are de ales ntre urmtoarele imobile: 2 camere 3 camere 4 camere 5 camere 6 camere Cas/Vil Garsonier Spaiu comercial Teren

Figura 18. Tip imobil

58

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

La seciunea Tip de ofert utilizatorul trebuie s selecteze oferta pe care o caut. El are de ales ntre : Ofert nchiriere Ofert vnzare

Figura 19. Tip ofert La seciunea Criteriu de sortare utilizatorul trebuie s selecteze n funcie de ce anume dorete cutarea. El are de ales ntre criteriul dup : Pre Data introducerii

59

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Figura 20. Criteriu de sortare La seciunea Mod de sortare utilizatorul trebuie s selecteze modul n care dorete afiarea ofertei cutate. El are de ales ntre modul: Acendent Descendent

60

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Figura 21. Mod de sortare Spre exemplu, dac utilizatorul alege ca i criterii urmtoarele : 2 camere Ofert vnzare Pre Data introducerii

61

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Figura 22. Motor de cutare

62

Universitatea POLITEHNICA Bucureti Rezultatul va arta ca n figura urmtoare :

PROIECT de DIPLOM

Figura 23. Rezultat motor cutare Dac nu se vor completa toate cmpurile formularului de cutare, ceea ce va ntoarce formularul va fi o ntiinare : Completai fiecare opiune din formularul de cutare !

63

Universitatea POLITEHNICA Bucureti 4. Modulul Curs valutar

PROIECT de DIPLOM

Acesta este ultimul modul din meniul lateral i arat cursul valutar la zi, de pe siteul BNR, al dolarului i euro-ului din data curent indicat i n modul. Tot aici exist posibiliatea de a vedea valorile tuturor valutelor pe ultimele 5 zile (inclusiv data curent), cu ajutorul link-ului ce trimite ctre pagina respectiv a BNR-ului unde se gsete informaia. Acest lucru e posibil printr-un click de mouse pe Toate Valutele . Cursul valutar este vizibil pe orice pagin a site-ului n partea stng jos (urmrind oricare din figurile de mai sus, plecnd de la figura 11 se poate observa acest curs valutar).

5.2.2. Aplicaia Administrator


Aceast aplicaie este destinat doar acelor persoane autorizate s administreze ofertele, s le valideze pe altele noi, s modifice coninutul site-ului, n principiu s se ocupe de tot ceea ce nseamn design pentru cei ce viziteaz site-ul ageniei. Pot fi mai multe persoane autorizate s foloseasc aceast parte a proiectului , acest lucru fiind stabilit de patronul ageniei respective: Administratorul Proprietarul ageniei Alte persoane crora li s-a dat acest drept.

Administratorul este o persoan angajat n firm pentru a se ocupa cu administrarea resurselor, avnd autorizaia de a accesa baza de date a ageniei i de a o modifica i ntreine; tot lui i se acord i dreptul de a aduce modificri n partea platformei publice (vazut de cei ce navigheaz pe site). Pentru a putea lucra n spatele a ceea ce vd utilizatorii cnd intr pe si te-ul ageniei, persoana autorizat trebuie mai nti de toate s se logheze. Pentru asta el folosete un nume (user) i o parol (password), acestea dou fiind nregistrate tot n baza de date. Ceea ce este foarte important atunci cnd persoana autorizat dorete s se logheze i mai departe s administreze site-ul i/sau baza de date, este faptul c ea trebuie s utilizeze nu orice browser de web, ci numai Mozilla Firefox sau Netscape Navigator. Acest lucru a fost intenionat fcut, datorit faptului c majoritatea persoanelor folosesc Internet

64

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Explorer ca mijloc de navigare pe Internet, iar celelalte browsere nefiind foarte utilizate i cunoscute, sunt exact ce trebuie pentru un administrator. Se va observa faptul c n partea de administrare design-ul nu mai este att de complex ca n cea vizibil clienilor, deoarece acetia neavnd accesul aici, felul n care arat nu conteaz aa de mult, iar pentru administrator e foarte bine. Pagina cu logarea persoanei autorizate arat ca n figura urmtoare:

Figura 24. Pasul de logare pentru persoanele autorizate Urmtorul pas este ca persoana autorizat s introduc n cmpurile din formularul resprectiv numele i parola pentru a se putea loga. De exemplu, administratorul site-ului ageniei Casa TA Imobiliare ncearc s se logheze:

Figura 25. Caseta de logare

65

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

n cazul n care e greit completat cel puin unul din cele dou cmpuri ale formularului, ceea ce va aprea va fi:

Figura 26. Euat(e) user i/sau password Dac autentificarea a rezultat cu succes, administratorul fiind logat poate de acum nainte, pn se va deloga, s realizeze ce are n plan. Prima pagin a platformei de administrare a site-ului ageniei Casa TA Imobiliare este:

Figura 27. Homepage partea administrativ

66

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Dup cum se poate observa din figura 27, prima pagin ncepe cu un titlu ::ADMIN::Casa TA Imobiliare::, apoi urmeaz o bar cu meniul format din: Tipuri Zone Anunuri vnzri Anunuri nchirieri Clieni News letter Ieire

Pagina mai cuprinde i informaii legate despre numrul de ntregistrri din tabelele pp_tipuri, pp_zona i pp_anunuri, mai exact sunt afiate cte tipuri de imobile sunt n baza de date (9), cte zone (55), numrul de anunuri de vnzare (12) i cel al anunurilor de nchiriere (14). Aceste informaii fac parte din partea paginii care se schimb n funcie de opiunea aleas, restul fiind fixe. Finalul design-ului de pagin a acestui modul administrator este o inscripionare cu numele ageniei, numele administratorului i anul curent (2007). MENIUL PRINCIPAL 1. Opiunea Tipuri n aceast seciune se pot vizualiza ntr-un tabel tipurile de imobile existente n baza de date; aici avem posibilitatea de a terge unul sau mai multe tipuri existente printr-un click de mouse pe aflat pe fiecare rnd al tabelului n prima coloan i corespunde

tipului de imobil urmat. n cazul n care se face un click pe acel X va aprea o caset de interogare cu ntrebarea: Sigur dorii s tergei tipul (SE VOR TERGE TOATE ANUNURILE LEGATE DE ACEST TIP)!. La opiunea Cancel se renun la tergere, la Ok tipul respectiv se va terge din tabelul vizibil n pagin i implicit din baza de date, mpreun cu toate anunurile legate de acel tip. Sub tabelul prezentat, se afl un formular prin intermediul cruia se pot introduce noi tipuri de imobile, n tabelul vizibil pe pagin i implicit n baza de date.

67

Universitatea POLITEHNICA Bucureti Aceast pagin prezentat mai sus arat ca n figur:

PROIECT de DIPLOM

Figura 28. Tipuri 2. Opiunea Zone La fel ca i n opiunea Tipuri, n aceast seciune se pot vizualiza ntr-un tabel zonele unde pot fi localizate imobile existente n baza de date i viitoare; avem deasemenea posibilitatea de a terge una sau mai multe zone existente printr-un click de mouse pe aflat pe fiecare rnd al tabelului n prima coloan i corespunde zonei urmate. n cazul n care se face un click pe acel X va aprea o caset de interogare cu ntrebarea: Sigur dorii s tergei zona (SE VOR TERGE TOATE ANUNURILE LEGATE DE ACEST ZON)!. La opiunea Cancel se renun la tergere, la Ok zona respectiv se va terge din tabelul vizibil n pagin i implicit din baza de date, mpreun cu toate anunurile legate de acea zon. Sub tabelul prezentat, se afl un formular prin intermediul cruia se pot introduce noi zone n tabelul vizibil pe pagin i implicit n baza de date.

68

Universitatea POLITEHNICA Bucureti Aceast pagin prezentat mai sus arat ca n figura 29:

PROIECT de DIPLOM

Figura 29. Zone

69

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

3. Opiunea Anunuri vnzri Dup cum am spus n capitolul 5.2.1., persoanele care doresc s afle orice informaie legat de tranzacii imobiliare, de agenie, au anumite ntrebri sau pur i simplu doresc s colaboreze cu agenia pentru a-i vinde/nchiria imobilul sau pentru a cumpra/nchiria unul existent, printre alte opiuni pot trimite e-mail ageniei. E-mail-urile sosite pe adresa ageniei care au subjectul CONTACT WEB SITE sunt exact cele de care am vorbit mai sus. Administratorul (sau cine e angajat s fac asta) citete mail-urile i le selecteaz n funcie de ceea ce conin. Unele dintre e-mail-uri se refer la oferte de vnzare. n acest caz sunt extrase informaiile de acolo i introduse de administrator pe site pentru a le face vizibile posibililor clieni. Pagina existent la seciunea Anunuri vnzri cuprinde 2 pri importante: Adugare anun vnzri Anunuri vnzri

n partea de adugare exist un formular cu cmpurile: Tip Zona Descriere Pre Fotografie

La Tip se va selecta din meniu - tipul imobilului, la Zona - locaia unde se afl acesta, n partea de Descriere se face o scurt descriere a imobilului, apoi este tiprit preul n euro la Pre i n final se adaug opional o fotografie cu locuina (rezoluia maxim acceptat a pozei este 320x240). Cmpurile Descriere i Pre sunt obligatoriu de completat, iar dac acest lucru nu este ndeplinit, la apsarea butonului Adaug va aprea o caset n care se ntiineaz asupra acestui fapt. n partea de anunuri vnzri sunt afiate ntr-un tabel aceste anunuri, iar pe lng cmpurile din formularul de mai sus mai apare n tabel nc o coloan intitulat Timpul, ce cuprinde ora i data introducerii anunului respectiv. Aici avem posibilitatea de a terge unul sau mai multe anunuri existente printr-un click de mouse pe aflat pe fiecare rnd

al tabelului n prima coloan i corespunznd anunului ce urmeaz. n cazul n care se face un click pe acel X va aprea o caset de interogare cu ntrebarea: Sigur dorii s tergei 70

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

anunul?. La opiunea Cancel se renun la tergere, la Ok anunul respectiv se va terge din tabelul vizibil n pagin i implicit din baza de date. Pagina existent la seciunea Anunuri vnzri arat aa:

Figura 30. Anunuri vnzri

71

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

4. Opiunea Anunuri nchirieri Aceast pagin este foarte asemntoare cu cea de la opiunea Anunuri vnzri. Singurele diferene sunt : anunurile introduse aici i afiate n tabel nu mai sunt de vnzri, ci de nchirieri, fondul de culoare al formularului nu mai este gri ca cel de la anunuri vnzri, ci este galben (tocmai pentru a face diferena mai vizibil), iar preul introdus n formular i afiat n tabel reprezint chiria n euro/lun. Pagina existent la seciunea Anunuri nchirieri arat ca n figura 31. 5. Opiunea Clieni Aceast opiune corespunde cu opiunea Clienii notrii din cap. 5.2.1. Acolo clienii trimiteau mail pe adresa ageniei cu sugestiile/opiniile lor cu privire la tranzaciile fcute i la calitatea serviciilor primite. Aici mail-urile sunt primite, iar administratorul le pune pe site, dup cum urmeaz. Pagina existent la opiunea Clieni cuprinde 2 pri importante: un formular n care se introduc datele din mail-uri i un tabel cu cele existente n baza de date. Formularul este alctuit din cmpurile: Titlu Poveste Fotografie

unde la Titlu se scrie evident titlul cu care s apar pe site opinia, la Poveste ceea ce are de menionat persoana respectiv, iar n ultimul cmp se adaug o poz cu respectiva persoan la rezoluia maxim 320x240. Toate cmpurile din formular sunt obligatorii. Exist posibilitatea de a terge una sau mai multe opinii existente printr-un click de mouse pe aflat pe fiecare rnd al tabelului n prima coloan i corespunznd opiniei ce

urmeaz. n urma aciunii de tergere nu va mai aprea caseta de interogare aa cum am vzut n alte cazuri. Pagina existent la opiunea Clieni arat ca n figura 32.

72

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Figura 31. Anunuri nchirieri

73

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Figura 32. Clieni 6. Opiunea News letter Aceast opiune corespunde cu modulul News letter al meniului lateral din cap. 5.2.1. Acolo clienii care doreau ofertele ageniei pe mail i nscriau adresele lor de e-mail n formular i-l trimiteau apsnd nscriere. Aici n seciunea News letter apar adresele trimise de acetia n ordine alfabetic, iar dup ce pdf-ul cu ofertele este trimis la cte o adres din list, adresa respectiv este tears folosind formularul din partea de sus a paginii.

74

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

7. Opiunea Ieire Cnd se dorete ieirea din partea de administraie a site-ului trebuie realizat delogarea. Acest lucru de face cu un click pe Ieire aflat pe bara de meniuri. Ceea ce va aprea n urma acestui fapt arat aa:

Figura 33. Ieire Dup cele 5 secunde de ateptare, fereastra care va aprea este cea din figura 24. De aici procesul se repet.

75

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

5.3. Implementarea site-ului


Proiectul intitulat Site de web pentru agenie imobiliar a fost realizat prin crearea i ulterior utilizarea mai multor fiiere. Pentru a pstra o ordine, o parte din fiiere sunt separate n directoare potrivite. n total sunt 5 foldere, ce conin fiierele : Admin funcii.inc.php index.php login.php logout.php style.css utile.js Config config.inc.php Fpdf Font (folder) fpdf.php fpdf.css Images .jpg-urile folosite n site Img ix.jpg pozele imobilelor de nchiriat (x>=1, ex: i1.jpg, i2.jpg,...) vy.jpg pozele imobilelor de vnzare (y>=1, ex: v1.jpg, v2.jpg,...) Pe lng aceste foldere mai avem separat alte 7 fiiere: connect.php disconnect.php export_pdf.php funcii.inc.php index.php style.css utile.js

76

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

5.3.1. Fiierele .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 aplicaii web, prin integrarea codului PHP n documente HTML. Sintaxa s provine din C, Java i Perl i este uor de nvat. Scopul principal al limbajului este acela de a scrie rapid pagini web dinamice, dar cu PHP se pot realiza mult mai multe. Ca i alte limbaje de scripting pentru Web, PHP v permite s furnizai un coninut Web dinamic, adic un coninut Web care se modific automat de la o zi la alta sau chiar de la un minut la altul. Coninutul Web este un element important n susinerea traficului unui sit Web; de regul, vizitatorii nu vor mai reveni la o pagin Web care conine aceleai informaii ca i cele prezentate la ultima vizit. Pe de alt parte, siturile Web frec vent actualizate pot atrage cantiti 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 obine accesul la fiiere, baze de date i alte resurse inaccesibile programului JavaScript. Acestea constituie bogate surse de coninut dinamic, care atrag vizitatorii. Fiierele ce conin limbaj PHP sunt salvate cu extensia .php. 1. Fiierul config.inc.php Acest fiier este unul de configurare. Aici sunt declarate 5 variabile ($mysql_host, $mysql_user, $mysql_password, $mysql_db, $uploaddir), care sunt folosite n fiierele connect.php i disconnect.php. 2. Fiierul connect.php De cte ori se lucreaz cu MySQL va trebui s se fac conectarea la baza de date folosind o anume sintax. Am salvat aceast secven de cod cu numele connect.php, putnd fi folosit ulterior n mai multe scripturi utiliznd funcia require(). ************************************************************************* <?php require('config/config.inc.php'); $link = mysql_connect($mysql_host,$mysql_user,$mysql_password) or die('Probleme conexiune baza de date !'); mysql_select_db($mysql_db,$link) or die('Eroare selectare baza de date !'); ?> *************************************************************************

77

Universitatea POLITEHNICA Bucureti n secvena de cod de mai sus am folosit anumite funcii:

PROIECT de DIPLOM

mysql_connect() este funcia prin care ne conectm la baza de date cu urmtorii paramatrii: numele serverului, nume utilizator i parola pentru conectarea la baza de date. Variabila $link va avea valoarea TRUE sau FALSE n funcie de rezultatul

conectrii la serverul MySQL folosind funcia mysql_connect(), iar n cazul eurii va afia mesajul coninut de construcia die(). mysql_select_db() este funcia care stabilete baza de date la care ne vom conecta, avnd ca parametrii numele bazei de date ( casata ) i identificatorul de acces la conexiunea ctre serverul MySQL. n mod similar, variabila $mysql_db, folosind funcia mysql_select_db(), va afia n cazul negsirii bazei de date mesajul coninut de die(). 3. Fiierul disconnect.php Dup ce operaiile dorite au fost executate cu baza de date va trebui s nchidem conexiunea, folosind funcia mysql_close(), avnd ca argument datele de acces la serverul MySQL. <?php @mysql_close($link); ?> 4. Fiierul funcii.inc.php Acest fiier conine 7 funcii, folosite n fiierul principal al proiectului pe partea de design site index.php. Cele 7 funcii sunt: no_anunturi($a,$b) ntoarce numrul de anunuri de vnzare/nchiriere afiseaza_anunt($id) afieaz anunul cu id-ul indicat ca argument ultimele_anunturi() afieaz ultimele anunuri (vezi cap. 5.2.1.) motor_cautare($tip_imobil, $tip_oferta, $sortare, $ordinea) ntoarce anunurile care satisfac criteriile cerute despre_noi() tiprete textul din pagina aflat n figura 12 consultanta() tiprete textul din pagina aflat n figura 13 contact() - tiprete textul din pagina aflat n figura 16, cu excepia formularului 78

Universitatea POLITEHNICA Bucureti 5. Fiierul export_pdf.php

PROIECT de DIPLOM

Acest fiier conine o clas numit pdf, ce cuprinde 6 funcii: Header() Footer() Titlu() Zona($label) AfiseazaAnunt($tip,$zona,$des,$pret,$b) AfiseazaDateContact()

Este creat o instan a clasei numit $pdf i sunt afiate n pagina pdf-ului anunurile de la vnzri cu titlu Vnzri i cele de la nchirieri cu titlu nchirieri. 6. Fiierul index.php n acest fiier se gsete codul surs al site-ului (vizibil dac n browser-ul de web se selectez View - Source), coninnd att cod n PHP, ct i n HTML. HTML reprezint o implementare simpl a limbajului SGML (Standard Generalized Markup Language) care permite crearea de documente hipertext pentru paginile Web. Principalele caracteristici ale acestui limbaj sunt: descrierea structurii documentului; nu este descris aranjarea n pagin; permite fiecrui navigator s aib propria prezentare; un document HTML poate fi reutilizabil.

Orice document SGML este reutilizabil i se caracterizeaz prin coninut i organizarea sa. Normele de interschimbare a documentelor descriu: elementele legate de coninut: partea vizibil; structura: derularea logic a documnetului; aranjarea n pagin: prezentarea. natura informaiei: texte, grafic, tabele, ecuaii; structur: - numele: titluri capitole, paragrafe, legende; concepia obiectelor imbricate; prezentare: operaia de formatare.

Coninutul unui document se caracterizeaz prin:

79

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Limbajul HTML include o mare diversitate de tag-uri (marcatori), sub forma: <Nume_Tag> Text ------------[</Nume_Tag>] Tag-urile sunt: - singulare, cnd se regsete numai tag-ul de nceput (<P>); - pereche, reprezentat prin tag de nceput (<HEAD>) i tag de sfrit (</HEAD>). Unele tag-uri dein atribute (parametri) care pot lua anumite valori, n acest caz sintaxa este: <Nume_tag atrib1="valoare1" atrib2="valoare2"> Unele elemente HTML sunt vide: aceasta nseamn c nu afecteaz nici un bloc din documentul n care sunt plasate. Astfel de elemente nu au nevoie de etichete de sfrit. Eticheta <HR> este un exemplu tipic, ea fiind destinat pentru a desena o linie orizontal de-a lungul unei pagini. n numele elementelor HTML pot s apar litere mari sau mici, la alegere. HTML nu acord atenie acestui amnunt. Multe din elementele HTML pot avea argumente care pot transmite parametri interpretorului care manipuleaz aceste elemente. Aceste argumente se numesc atribute ale elementului. De exemplu, elementul A, care marcheaz o zon de text ca nceput sau sfrit a unui link hypertext, poate fi nsoit de mai multe atribute. Cel mai des utilizat dintre acestea, HREF, specific documentul hypertext la care este stabilit legtura prin bucata de text: <A HREF = "HTTP://WWW.INFO.UVT.RO /POSTUNIV/INDEX.HTML ">

Cursuri Post-universitare </A> Elementul A nu este vid, el este nsoit de eticheta de sfrit </A>. Etichetele de sfrit nu sunt nsoite niciodat de atribute. Orice document HTML include un antet i un corp. Pentru structura documentului se utilizeaz tag-urile: <HTML> -definete nceputul i sfritul documentului; <HEAD> -nceput/sfrit antet document; <TITLE> -nceput/sfrit titlu document; <BODY> -nceput/sfrit document propriu-zis; Fiierul index.php ncepe cu o parte de PHP, unde sunt incluse fiierele: require_once('connect.php'); require_once('functii.inc.php'); 80

Universitatea POLITEHNICA Bucureti i sunt atribuite urmtoarele valori, variabilelor: $opt = $_GET['opt']; $fac = $_POST['fac'];

PROIECT de DIPLOM

Pentru a nelege mai bine ce fac $_GET i $_POST voi vorbi n rndurile urmtoare despre acestea. Pentru a descrie un formular trebuie folosit eticheta FORM, care are urmtoarea form elementar: <FORM METHOD=metoda ACTION=url >

Atributul METHOD poate lua una din valorile GET sau POST. Cnd METHOD este GET (implicit), datele introduse n formular sunt trimise ca o cerere HTTP GET cu form_data adugat la sfritul URL-ului specificat de atributul ACTION . Astfel, datele trimise prin metoda GET pot fi vizualizate de ctre utilizator (dezavantaj). Folosirea metodei GET permite ca trimiterea form-ului s fie coninut n URL. Aceasta prezint avantajul c poate fi fcut bookmark n browserele actuale. De asemenea, cantitatea de date care poate fi procesat prin metoda GET este limitat de lungimea maxim a URL-ului pe care o accept serverul i browserul. Pentru siguran, form-urile care ar putea conine caractere non-ASCII sau mai mult de 100 de caractere trebuie s foloseasc METHOD=POST. Cu valoarea METHOD egal cu POST, datele introduse n form sunt trimise ca o cerere HTTP POST , iar datele sunt coninute n interiorul cererii. Majoritatea browserelor actuale nu pot face bookmark la cereri POST, dar, astfel POST nu limiteaz lungimea i tipul de caracter introdus precum la GET. Variabilele $opt i $fac sunt preluate din formulare prin modalitatea : $opt = $_GET['opt']; $fac = $_POST['fac']; (n funcie de atributul method al formului post sau get). Urmeaz s se analizeze ce se ntmpl cnd variabila $fac ia valoarea 0 i 1. Pentru valoarea 0 se insereaz email-ul n baza de date, n tabela pp_email: ************************************************************************* if (isset($_POST['fac']) && $_POST['fac'] == 0) { $email = strip_tags(trim($_POST['nemail'])); $qr = "INSERT INTO pp_email (email) VALUES('$email');"; mysql_query($qr); } *************************************************************************

81

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Pentru valoarea 1 se trimite e-mail ageniei, ca rezultat al formularului de pe pagina Contact a site-ului. Dup bucata de cod PHP urmeaz antetul paginii, cu titlul ::Casa TA Imobiliare:: i cu un script. Acesta verific dac se accept poze i la rspuns afirmativ sunt declarai 2 vectori cu imagini ce vor avea rolul de rollover pentru opiunile meniului. Dup antet ncepe body-ul documentului. Pagina este vzut ca un mare tabel centrat, cu 5 rnduri. Mai jos sunt trecute n vedere ce cuprind rndurile: rnd 1 o parte ngust unde este afiat apelnd funcia no_anunturi(&$a, &$b) numrul de anunuri de vnzare/nchiriere; rnd 2 patru imagini: cu casa, cu logo-ul firmei, cu numele i motto-ul acesteia --trimite link la pagina principal (<a href="index.php"><img src="images/a2.jpg" /></a>) i restul de imagine; rnd 3 bara de meniu cu cele 6 opiuni; pentru fiecare opiune variabila $opt are o valoare (despre noi -> opt=1, consultant > opt=2, ...., contact > opt=6) Dac se apropie mouse-ul de oricare dintre opiuni, de exemplu Despre noi se observ c se trece din culoarea gri a imaginii, n verde (lucru posibil cu scriptul din antet). Atunci cnd se face click de mouse pe opiunea respectiv, se va observa c aceasta va ramne la culoarea verde, n timp ce celelalte opiuni au trecerea de la o culoare la alta, doar la apropierea mouse-ului de ele. rnd 4 singurul rnd ce este mprit n 2 coloane pe prima coloan avem un alt tabel cu 4 module ce alctuiesc meniul lateral pe a doua coloan informaia se schimb n funcie de opiunea aleas; aici apare rezultatul oricrei cutri i opiuni alese din meniul principal sau lateral. rnd 5 o parte ngust unde apare numele ageniei i anul 2007.

Se nchide tagul body i html, iar n finalul fiierului index.php avem inclus disconnect.php. <?php require('disconnect.php'); ?>

82

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

n folderul Admin se gsesc alte 6 fiiere, diferite ca i coninut de ce am prezentat mai sus. 7. Fiierul login.php Acest fiier conine cod HTML i PHP. Ca urmare, are parte de antet i parte de body. n antet este menionat titlul paginii <title>:: Casa TA Imobiliare :: ADMIN ::</title>. n partea de body avem un formular cu cmpurile user i password i un buton de submit. Urmeaz o parte scurt de PHP care spune c dac parola sau userul sunt greit introduse s afieze o ntiinare. 8. Fiierul funcii.inc.php Acest fiier conine 3 funcii, folosite n fiierul principal al proiectului pe partea de administraie index.php. Cele 3 funcii sunt: stats() are rolul de a afia cele 4 rnduri scrise n pagina introductiv logrii imediat sub Stats (vezi figura 27) sterge_email($email) funcie folosit pentru a terge adresele de email acelor persoane crora li s-au trimis pe mail pdf-ul cu ofertele ageniei check_picture($picture) funcie care verific dac poza introdus alturi de un anun este sau nu n limita cerinelor de rezoluie.

9. Fiierul index.php n acest fiier se gsete codul surs al site-ului pe partea de administrare (vizibil dac n browser-ul de web se selectez View - Source), coninnd att cod n PHP, ct i n HTML. Acest fiier ncepe cu o parte de cod PHP i sunt folosite aa numitele sesiuni. n mod normal, o variabil local declarat ntr-o pagin .php este valabil doar n acea pagin, dac nu intervenim ntr-un fel pentru a o transfera i pe alte pagini unde avem nevoie de ea. Modalitile de pstrare a informaiilor pe tot parcursul aplicaiei sunt: variabile globale sesiuni cookies transferul variabilelor locale prin forme sau n header-ul unei alte pagini

83

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

O sesiune reprezint una din cile de a pstra datele de lucru ale unei aplicaii atunci cnd se face transferul de la o pagin la alta. PHP folosete n mod nativ sesiuni. Fiecare sesiune trebuie declarat la nceputul paginii, cu ajutorul funciei: start_session(). Acest lucru se ntmpl i n acest fiier. Dac userul i parola sunt corecte $_SESSION['logat'] = 1; asta nsemnnd c logarea a reuit, altfel sunt greite cel puin una i logarea nu va avea loc. n platforma n care lucreaz administratorul exist un meniu cu 6 opiuni, iar pentru fiecare opiune, variabila$opt ia o anumit valoare. Aadar, pentru opiunea: Tipuri ---- $opt = 1 Zone ---- $opt = 2 Anunuri vnzri ---- $opt = 3 Anunuri nchirieri ---- $opt = 4 News letter ---- $opt = 5 Clieni ---- $opt = 6

************************************************************************* if ($_GET['opt'] == 1) { if ( isset($_POST['fac']) && $_POST['fac'] == 0 ) { $qr= "INSERT INTO pp_tipuri(nume_tip) VALUES('".$_POST['tip_nou']."')"; mysql_query($qr); } if ( isset($_POST['fac']) && $_POST['fac'] != 0 ) { $qr = "DELETE FROM pp_anunturi WHERE id_tip=".$_POST['fac'].";"; mysql_query($qr); $qr = "DELETE FROM pp_tipuri WHERE id_tip=".$_POST['fac'].";"; mysql_query($qr); } } ************************************************************************* n acest exemplu, dac valoarea variabilei $opt este 1, atunci se verific valoarea lui $fac. n cazul n care $fac: este setat i este 0 se adaug un nou tip de imobil n baza de date, mai exact n tabela pp_tipuri; este setat i diferit de 0 se vor terge din baza de date att tipul respectiv, ct i toate anunurile ce-l cuprind.

84

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Mai departe n fiier, se procedeaz aproximativ la fel pentru $opt = 2, singura diferen fiind c se vor aduga i terge zone. Pentru opiunea anun vnzare/nchiriere lucrurile se modific un pic, adic: dac $fac = 2, se adaug un nou anun n pp_anunuri cu valorile completate de administrator n formularul existent pe pagin; dac $fac = 3, se va terge anunul cu id-ul specificat din baza de date. Dup aceast parte de cod PHP, se ncepe scrierea platformei de administrare propriu-zise cu alternare de coduri scrise n PHP i HTML. n partea de HEAD avem stabilirea titlului :: Casa TA Imobiliare :: ADMIN ::, iar n partea de BODY avem: a) crearea meniului ************************************************************************* <table style="background-color:#1cd613"> <tr><td> <ul class="navigator"> <li><a href="index.php?opt=1">* Tipuri</a></li> <li><a href="index.php?opt=2">* Zone</a></li> <li><a href="index.php?opt=3">* Anunturi vanzari</a></li> <li><a href="index.php?opt=4">* Anunturi inchirieri</a></li> <li><a href="index.php?opt=6">* Clienti</a></li> <li><a href="index.php?opt=5">* News Letter</a></li> <li><a href="logout.php">* Iesire</a></li> </ul> </td></tr> </table> ************************************************************************* b) dac nu este setat nici o opiune se va afia n pagin rezultatul funciei stats() explicat n fiierul funcii.inc.php (if (!isset($_GET['opt'])) { stats(); }) c) altfel, dac este setat prima opiune (elseif ($_GET['opt']==1)) se realizeaz un formular, unde n prima parte a acestuia e tabelul cu tipurile de imobile, sub tabel fiind cmpul numit Tip nou: de tip text cu butonul Adaug (aici <input type="hidden" name="fac" value="0"/>). d) altfel, dac este setat a doua opiune (elseif ($_GET['opt']==2)) se realizeaz un formular, unde n prima parte a acestuia e tabelul cu zonele n care pot fi localizate imobilele, sub tabel fiind cmpul numit Zon nou: de tip text cu butonul Adaug (aici <input type="hidden" name="fac" value="0"/>). e) altfel, dac este setat a treia opiune (elseif ($_GET['opt']==3)) se realizeaz un formular, unde n prima parte a acestuia e tabelul Adugare anun vnzri cu 6 rnduri, unde se completeaz tipul, zona, descrierea, preul, poza (opional) imobilului i pe ultimul rnd butonul Adaug. n partea a doua a formularului e tabelul 85

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Anunuri vnzri , avnd titlurile de coloane: Tip, Zona, Descriere, Pre, Timpul, Foto i rndurile formate din anunurile de acest fel. f) altfel, dac este setat opiunea 4, idem e) cu excepia c este vorba de anunurile de nchirieri imobile. g) altfel, dac este setat a cincea opiune se realizeaz un formular, cu un cmp text, unul submit i unul ascuns, pentru a terge emailul din cmpul text atunci cnd n cel ascuns avem valoarea 1. Sub formular sunt enumerate email-urile din tabela pp_email. h) altfel, dac e setat a asea opiune se realizeaz un formular, unde n prima parte a acestuia e tabelul Poveti clieni cu 4 rnduri, unde se completeaz titlul, opinia i poza (toate fiind obligatorii), iar pe ultimul rnd butonul Adaug. n partea a doua a formularului se mai gsete un tabel, avnd titlurile de coloane: Titlu, Poveste, Foto i rndurile formate din opiniile clienilor.

5.3.2. Fiierele .JS


Fiierele salvate cu extensia .js sunt fiiere cu cod JavaScript. JavaScript este un limbaj de scripting simplu, interpretat, orientat spre obiecte, permind scrierea de secvene de program, care se execut la apariia unui eveniment utilizator. JavaScript poate fi folosit pentru a aduga un comportament interactiv simplu unei pagini HTML prin intermediul unui script de cuvinte-cheie inserate ntr-o pagin web. Scriptul este ncadrat de marcajele <script>...</script> i totul este nglobat ntr-un comentariu astfel nct programele de navigare care nu interpreteaz Javascript nu sunt derutate de scriptul n sine. 1. Fiierul utile.js n acest fiier avem urmtoarele 3 funcii : swapImg(buton,fac) folosit la crearea efectelor coloristice ale meniului isValidEmail() valideaz o adres de mail dac este sau nu corect ca form foo(file) permite logarea ca admin doar din browserele Mozilla i Netscape

2. Fiierul utile.js din folderul Admin n acest fiier avem urmtoarele 6 funcii :

86

Universitatea POLITEHNICA Bucureti tip(fac) zona(fac) anuntv(id,fac) cver() modcc(id,fac) verificacar()

PROIECT de DIPLOM

5.3.3. Fiierele .CSS


Ce este un fiier CSS? n primul rnd CSS reprezint prescurtarea de la Cascading Style Sheets (denumirea oficial a standardului). Un fiier CSS este un fiier text cu extensia ".css", definind stiluri pentru paginile HTML. Stilurile indic ntr-un mod mult mai riguros dect atributele HTML, cum s afieze browserul elementele componente ale unui document HTML (text, grafic, formulare, etc...), oferind posibiliti mult superioare standardului HTML. Fiierele CSS permit stilizarea n bloc a documentelor HTML cu un efort semnificativ mai mic dect n cazul stilizrii elementelor de pagina n cadrul fiecrui document HTML n parte, prin intermediul atributelor tagurilor. Sunt 2 moduri de a folosi CSS-urile : Stilurile interne este plasat codul CSS n interiorul fiecrei pagini html pe este dorit a se folosi stilurile respective, ntre tagurile <head> </head>. Stilurile externe sunt ideale atunci cnd stilul este folosit pentru mai multe pagini. Cu un stil extern se poate schimba forma ntregului site doar modificnd un singur fiier (salvat cu extensia .css). Fiecare pagin care dorete s utilizeze acest stil trebuie s fac referire la fiierul .css, folosind tagul <link> n seciunea head. De exemplu, n fiierul index.php avem definit un stil extern : <link href="style.css" rel="stylesheet" type="text/css" /> Browserul va citi definiiile stilurilor din fiierul style.css i va afia documentul corespunztor cu ele. Stilurile n linie se definesc chiar n codul HTML n elementul care se dorete stilizat. Acestea nu vor permite schimbri rapide i facile, pe mai

87

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

multe fiiere n acelasi timp, fiecare element necesitnd atentie, pe toate paginile.

Sintaxa CSS Sintaxa CSS este alctuit din trei pri: un selector, o caracteristic i o valoare: selector {caracteristic: valoare} Selectorul este elementul/tagul pe care vrem s-l definim, caracteristica este atributul pe care dorim s-l schimbm i fiecare caracteristic poate lua o valoare. Caracteristica i valoarea sunt separate de semnul (:) i sunt ncadrate de acolade. Exemplu din fiierul style.css : body { background-color: #FFFFFF; margin-top: 5px; margin-left: 0px; margin-right: 0px; margin-bottom: 0px; } Adic, pentru tagul body se vrea urmtoarele: culoarea de fundal s fie alb, marginea de sus la 5 pixeli, restul la 0.

Atributul class Cu acest atribut putem defini stiluri diferite pentru acelai element. Trebuie apoi folosit atributul class n documentul HTML. De exemplu, pentru body am definit : .prima_pagina { font-family:Verdana, Arial, Helvetica, sans-serif; color:#000000; font-size:12px; font-weight:bold; line-height: 20px; } adic font-family definete o list de nume de familii de fonturi, la culoarea negru, mrimea fontului de 12 px i grosimea lui fiind bold. Pentru a utiliza . prima_pagina, am folosit atributul class aa : <p class="prima_pagina"> n fiierul index.php, unde am vorbit despre prima pagin. Alte clase pentru body mai sunt i acestea: .top { font-family: Verdana, Arial, Helvetica, sans-serif;

88

Universitatea POLITEHNICA Bucureti font-size: 10px; color: #333333; } .nletter { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; color: #333333; padding-left:5px; line-height: 14px; }

PROIECT de DIPLOM

5.3.4. Comenzi SQL


Cele mai uzuale comenzi SQL sunt cele folosite pentru: 1. interogarea bazei de date (SELECT) 2. actualizarea bazei de date (INSERT, UPDATE, DELETE) Iat cteva exemple folosite n fiierele .php: Exemplul 1 : ************************************************************************* $qri = "SELECT id_anunt, descriere, nume_tip, nume_zona, pret, ora, data FROM pp_anunturi ,pp_tipuri, pp_zona WHERE pp_anunturi.id_tip = pp_tipuri.id_tip AND pp_anunturi.id_zona = pp_zona.id_zona AND fel='vanzare' ORDER BY id_anunt DESC LIMIT 3;"; $rez = mysql_query($qri); ************************************************************************* Secvena de cod de mai sus atribuie variabilei $qri textul interogrii respective, iar rezultatul (datele de interes) l ntoarce n variabila $rez. Sunt selectate cmpurile id_anunt, descriere, nume_tip, nume_zona, pret, ora, data din tabelele pp_anunturi ,pp_tipuri, pp_zona relaionate astfel: cmpul id_tip din tabela pp_anunuri este egal cu cmpul id_tip din tabela pp_tipuri I cmpul id_zona din tabela pp_anunuri este egal cu cmpul id_zona din tabela pp_zona, iar a treia condiie este cmpul fel s aib valoarea vnzare. nregistrrile ntoarse trebuie s fie n numr de 3 i s fie ordonate descresctor dup id_anun. Mysql_query() este cea mai utilizat funcie pentru accesul bazelor de date de ctre programatori i ea primete ca parametru textul interogrii.

89

Universitatea POLITEHNICA Bucureti Exemplul 2 :

PROIECT de DIPLOM

************************************************************************* $qr = "INSERT INTO pp_tipuri(nume_tip) VALUES('".$_POST['tip_nou']."')"; mysql_query($qr); ************************************************************************* Secvena de cod de mai sus atribuie variabilei $qr textul respectiv. Pe a doua linie se insereaz n cmpul nume_tip al tabelei pp_tipuri valoarea tip_nou trimis prin formular.

Exemplul 3 : ************************************************************************* $qr = "DELETE FROM pp_anunturi WHERE id_tip=".$_POST['fac'].";"; mysql_query($qr); $qr = "DELETE FROM pp_tipuri WHERE id_tip=".$_POST['fac'].";"; mysql_query($qr); ************************************************************************* Secvena de cod de mai sus atribuie variabilei $qr textul respectiv. Pe linia a doua se terge din tabela pp_anunuri nregistrarea care are ca valoare a cmpului id_tip, valoarea variabilei fac trimis prin formular. Prin codul ultimei linii se terge din tabela pp_tipuri nregistrarea care are ca valoare a cmpului id_tip, valoarea variabilei fac trimis prin formular.

Exemplul 4 : ************************************************************************* function no_anunturi($a,$b) { $a = mysql_result(mysql_query("SELECT count(*) FROM pp_anunturi WHERE fel='vanzare';"),0); $b = mysql_result(mysql_query("SELECT count(*) FROM pp_anunturi WHERE fel='inchiriere';"),0); } ************************************************************************* Variabila $a ia ca valoare numrul nregistrrilor din tabela pp_anunuri, care au ca valoare vnzare a cmpului fel. Variabila $b ia ca valoare numrul nregistrrilor din tabela pp_anunuri, care au ca valoare inchiriere a cmpului fel.

90

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

6. Optimizare
Un site web bine realizat este un site web care se ncarc rapid, oferind vizitatorilor si un coninut uor de accesat. Structura informaiei trebuie s fie simpl i clar, asigurnd o navigare intuitiv pentru acces rapid la toate informaiile. n urma optimizrii, site-ul va fi gsit mult mai uor de cei care caut exact ceea ce ofer. Optimizarea site-ului devine necesar n momentul n care se dorete ca afacerea firmei ce-l folosete s fie una de succes. Scopul final al acestei optimizri este atragerea de vizitatori noi (posibili clieni) i pstrarea celor deja existeni.

Optimizarea site-ului presupune: 1. optimizarea textului pentru relevan maxim n motoarele de cutare 2. optimizarea elementelor grafice pentru o ncrcare mai rapid a paginilor 3. optimizarea codului HTML pentru ncrcarea mai rapid a paginilor 4. optimizarea structurii paginilor pentru o poziionare superioar n motoarele de cutare 5. optimizarea elementelor dinamice pentru ncrcarea mai rapid a paginilor 6. optimizarea structurii bazelor de date pentru minimizarea timpilor de procesare 7. analizarea statisticilor detaliate despre vizitatori n vederea ajustrii strategiei site-ului. Site-ului de web adresat ageniei Casa TA Imobiliare i pot fi aduse optimizri, deoarece ntotdeauna este loc de mai bine. Aa cum am precizat mai sus, acesta, urmnd a fi folosit pentru a satisface cerinele clienilor unei agenii, trebuie adus la o form ct s e poate de bun. Important n optimizarea pentru motoarele de cutare este folosirea corect a meta tag-urilor title, description i keywords, precum i a coninutului website-ului. Astfel, fiecare pagin trebuie s aib un titlu, o descriere i cuvinte cheie proprii, n cazul n care abordeaz subiecte diferite fa de celalalte pagini.

91

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Cuvintele cheie, descrierea i titlul aferente site-ului meu sunt: <META name="KEYWORDS" content="imobiliare, garsoniera, inchirieri, apartament, terenuri, case, vile, vanzari"> <META name="DESCRIPTION" content="Agentie imobiliara"> <title>:: Casa TA Imobiliare ::</title> ncrcarea paginilor site-ului este relativ scurt, dar au fost i momente cnd acest lucru a durat ceva mai mult (la realizarea design-ului paginilor au fost folosite i imagini .jpg cu mrimi cuprinse ntre 1KB i 30KB).

92

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

7. Concluzii
Domeniul imobiliar a fost unul dintre cele mai profitabile sectoare din ultimii ani. Acest lucru a dus la apariia pe pia a unui numr impresionant de agenii imobiliare. Multe apar, dar foarte puine reuesc s se menin i s se dezvolte ulterior. Un pion important n aceast afacere, cum de altfel se gsete n majoritatea business-urilor, este realizarea unui mod prin care s-i fac publicitate, de a atrage clienii i de a rezista n fa celorlalte agenii concurente. n acest context apare nevoia unui site de web, exact ceea ce am dezvoltat n urma acestui proiect, prin intermediul cruia agenia s-i poat face cunoscute ofertele i clienii s se poat orienta asupra lor online, nainte de a lua contact direct cu agenia. Scopul acestei lucrri a fost acela de a prezenta modul n care a fost posibil realizarea unui site de web pentru o agenie imobiliar, dar i formarea ct de ct a unor idei despre noiuni privind tehnicile folosite. Scopul acestui site este de a face publicitate ageniei, prin intermediul Internetului, dar i de a face cunoscute ofertele de vnzare/nchiriere existente n baza de date a firmei. Acest web site conine opiuni de cutare a diferitelor imobile, pentru cei ce doresc achiziionarea unuia. Totodat d i posibilitatea persoanelor ce vor s vnd/nchirieze un anumit imobil, de a face public acest lucru. Fiecare anun cu vnzare/nchiriere de imobile, care poate fi vizualizat pe site are alturat preul, zona n care se afl localizat, o descriere sumar, o fotografie opional i data introducerii lui. Seciunile site-ului i tabelele MySQL folosite au fost descrise n detaliu n paginile lucrrii. Site-ul poate fi mbuntit, adugndu-i mai multe opiuni, cum ar fi : pe lng cursul valutar se poate aduce i un convertor valutar, care s calculeze o sum de bani dintr-o moned ntr-o alta ; adugarea unor efecte n flash pentru a face site-ul mai interactiv, dar realizarea cu atenie a acestui lucru, pentru a nu ncrca paginile foarte mult i a deveni apoi obositor pentru utilizatori i greu de urmrit ;

93

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

posibilitatea vizualizrii de interior/exterior al imobilului prin intermediul unui filmule alturat anunului i/sau posibilitatea existenei unei galerii de fotografii pentru ce anunuri se dorete acest lucru (deocamdat exist doar posibilitatea vizualizrii unei singure poze pentru un anun) ;

noi opiuni n meniu (ex : o opiune numit Nouti a crei pagini s conin informaii utile cu privire la domeniul imobiliar); crearea posibilitii ca site-ul s fie accesat i ntr-o alt limb de circulaie internaional, ca de exemplu limba englez, francez, german, etc.

94

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

8. Bibliografie
[1] Ionescu, Felicia, Baze de date relaionale i Aplicaii, Editura Tehnic, Bucureti, 2004 [2] Crstoiu, Dorin, Baze de date relaionale, Editura Printech, 1999 [3] Rdulescu, Florin, Baze de date n Internet, Editura Printech, 2000 [4] Till Gerken, Tobias Ratschiller, Web Applications Development With Php 4.0, New York, 2000 [5] Luke Welling, Laura Thomson, PHP and MySQL Web Development, USA, 2001 [6] Thomas Connoly, Carolyn Begg, Anne Strachan, Baze de date Proiectare, Implementare, Gestionare, Editura Teora, 2001 [7] http://www.php.net [8] http://www.htmlhelp.com [9] http://www.mysql.org [10] http://www.w3schools.com

95

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

Anexa
Linii de program:

1. Config.inc.php //Acest fiier este de configurare <?php $mysql_host = "mysql5.hostbase.net"; $mysql_user = "aura"; $mysql_password = "123456"; $mysql_db = "casata"; // Upload files $uploaddir = "../img/"; ?>

2. Connect.php //n acest fiier facem conexiunea cu baza de date <?php /* Connect to MySQL */ require('config/config.inc.php'); $link = mysql_connect($mysql_host,$mysql_user,$mysql_password) or die('Probleme conexiune baza de date !'); mysql_select_db($mysql_db,$link) or die('Eroare selectare baza de date !'); ?>

3. Disconnect.php <?php @mysql_close($link); ?> 4. Funcii.inc.php <?php function no_anunturi($a,$b) {

96

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

$a = mysql_result(mysql_query("SELECT count(*) FROM pp_anunturi WHERE fel='vanzare';"),0); $b = mysql_result(mysql_query("SELECT count(*) FROM pp_anunturi WHERE fel='inchiriere';"),0); }

function afiseaza_anunt($id) { global $uploaddir; $qri = "SELECT id_anunt,descriere,nume_tip,nume_zona,pret,ora,data,fel from pp_anunturi,pp_tipuri,pp_zona WHERE pp_anunturi.id_tip = pp_tipuri.id_tip AND pp_anunturi.id_zona = pp_zona.id_zona AND id_anunt=$id"; $rez = mysql_query($qri); $r = mysql_fetch_array($rez); if (strcmp($r['fel'],'inchiriere')==0) { $lit='i'; $add = " Euro/luna"; } else { $lit="v"; $add=" Euro"; } echo "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">"; echo "<tr>"; if ( file_exists("img/".$lit.$r['id_anunt'].'.jpg') ) { echo "<td>"; echo "<span onClick=\"JavaScript: foo('img/".$lit.$r['id_anunt'].".jpg');\" style=\"cursor: pointer;\"> <img src=\"".'img/'.$lit.$r['id_anunt'].".jpg\" alt=\"foto\" width=\"60\" height=\"40\" border=\"1\"/> </span>"; echo "</td>"; } echo "<td>"; echo "<div class=\"anunt\">"; echo "<b>".$r['nume_tip'] . " - ".$r['nume_zona']." - ".$r['pret'].$add."</b>"; echo "<br/>"; echo $r['descriere']; echo "<br/>"; echo "<span style=\"font-size:10px;color:#333333;\">Anunt introdus la ".$r['ora']."&nbsp;&nbsp;".$r['data']."</span>"; echo "</div>"; echo "</td>"; echo "</tr></table>"; }

function ultimele_anunturi()

97

Universitatea POLITEHNICA Bucureti {

PROIECT de DIPLOM

echo "<br/>"; $qri = "SELECT id_anunt from pp_anunturi WHERE fel='vanzare' ORDER BY id_anunt DESC LIMIT 3;"; $rez = mysql_query($qri); while ($row = mysql_fetch_array($rez)) { echo "<span style=\"color:#3b5c61\"><b>Vanzare:</b></span>";afiseaza_anunt($row['id_anunt']); echo "<br/>"; } $qri = "SELECT id_anunt from pp_anunturi WHERE fel='inchiriere' ORDER BY id_anunt DESC LIMIT 3;"; $rez = mysql_query($qri); while ($row = mysql_fetch_array($rez)) { echo "<span style=\"color:#3b5c61\"><b>Inchiriere:</b></span>";afiseaza_anunt($row['id_anunt']); echo "<br/>"; } }

function motor_cautare($tip_imobil,$tip_oferta,$sortare,$ordinea) { echo "<br/>";

if ($tip_imobil && $tip_oferta && $sortare && $ordinea) { $qri = "SELECT id_anunt,descriere,nume_tip,nume_zona,pret,ora,data from pp_anunturi,pp_tipuri,pp_zona WHERE pp_anunturi.id_tip = pp_tipuri.id_tip AND pp_tipuri.nume_tip = '$tip_imobil' AND pp_anunturi.id_zona = pp_zona.id_zona AND pp_anunturi.fel='$tip_oferta' ORDER BY $sortare $ordinea;";

$rez = mysql_query($qri); while ($r = mysql_fetch_array($rez)) { afiseaza_anunt($r['id_anunt']); echo "<br/>"; } } else { echo "Completati fiecare optiune din formularul de cautare !";

98

Universitatea POLITEHNICA Bucureti } }

PROIECT de DIPLOM

function despre_noi() { echo "<div class=\"txt\"><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Agentia imobiliara Casa TA a fost infiintata cu urmarirea unui scop precis. Acesta este de a oferi servicii profesionale si de a cauta solutii imobiliare avantajoase pentru satisfacerea exigentelor clientilor nostrii.<br/><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;De la primii pasi si pana astazi, am cautat in permanenta sa crestem, sa ne imbunatatim performantele, sa diversificam serviciile pe care le oferim, sa patrundem pe noi si noi segmente de piata.<br/><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cei cativa oameni care au pornit la drum impreuna au acumulat multa experienta si au acum satisfactia de a spune ca sunt mentorii unei echipe de real succes. <br/><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;La biroul companiei noastre va asteapta, gata oricand sa va raspunda la intrebari, oameni bine pregatiti si informati, specialisti instruiti in domenii diverse, mereu la dispozitia Dumneavoastra. <br/><br/> <center><img src=\"images/poza1.jpg\" /> <img src=\"images/poza2.jpg\" /></center> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;In cadrul agentiei Casa TA, se imbina intelepciunea cu entuziasmul caracteristic tinerilor, media de varsta a echipei fiind de 26 de ani. <br/><br/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Servicii oferite ofertare de proprietati imobiliare intermediere in tranzactii imobiliare asistenta juridica si acte notariale in trei cuvinte ne-am putea caracteriza: <ul> <li>profesionalism</li> <li>seriozitate</li> <li>promptitudine</li> </ul> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Toti clientii nostri au certitudinea ca tranzactiile la care iau parte se deruleaza in deplina siguranta. Deoarece Casa TA inseamna in primul rand un partener

99

Universitatea POLITEHNICA Bucureti de afaceri si un consilier de incredere pentru toti clientii nostri. Pentru ca piata imobiliara a viitorului va apartine intermediarilor profesionisti, companiilor care vor oferi servicii complete si de calitate. <br/><br/>

PROIECT de DIPLOM

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sperand ca aceste argumente va vor convinge de seriozitatea noastra, asteptam sa ne contactati si va asiguram ca proprietatea achizitionata prin noi nu este doar imobilul mult dorit, dar si o foarte buna investitie in timp. <br/><br/> </div>"; } function consultanta() { echo "<div class=\"txt\"><br/><br/> Agentia imobiliara Casa TA ofera consultanta gratuita in domeniul <ul> <li>inchirierii si vanzarii de apartamente</li> <li>case/vile ,spatii birouri, terenuri</li> </ul> In cazul exclusivitatii asiguram cadastru si intabulare gratuit. <br/><br/> <center><img src=\"images/poza3.jpg\" /><img src=\"images/poza4.jpg\" /></center> </div>"; } function contact() { echo "<div class=\"txt\"><br/><br/> <u>Adresa:</u><br/> <p>Bd. I.C. Bratianu nr. 38, <br/> Sector 1, Bucuresti</p> <br/><br/> <u>Telefoane:</u> <ul> <li>021-443.51.02</li> <li>021-443.52.05</li> <li>0724.702.020</li> <li>0720.560.300</li> <li>0720.560.301</li> <li>0720.560.302</li> <li>0720.560.303</li> </ul> <u>E-mail:</u> <a href=\"mailto:casa_ta@yahoo.com\">casa_ta@yahoo.com</a><br/><br/><br/> </div>"; } ?>

100

Universitatea POLITEHNICA Bucureti 5. Index.php //Reprezint prima pagin a site-ului <?php require_once('connect.php'); require_once('functii.inc.php'); $opt = $_GET['opt']; $fac = $_POST['fac'];

PROIECT de DIPLOM

/// ADAUGA EMAIL || FAC == 0 if (isset($_POST['fac']) && $_POST['fac'] == 0) { $email = strip_tags(trim($_POST['nemail'])); $qr = "INSERT INTO pp_email (email) VALUES('$email');"; mysql_query($qr); } /// TRIMITE MAIL CONTACT if (isset($_POST['fac']) && $_POST['fac'] == 1) { $dest = "casa_ta@yahoo.com"; $subject = "CONTACT WEB SITE"; $expe = trim($_POST['email']); $mesaj = $_POST['solicit'];

if (strlen($mesaj)!=0 && strlen($expe)!=0) { $ok=mail($dest, $subject, $mesaj, "From: $expe\r\n" ."Reply-To: $expe\r\n" ."X-Mailer: PHP/" . phpversion()); } } ///////////////////////

?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <META name="KEYWORDS" content="imobiliare, garsoniera, inchirieri, apartament, terenuri, case, vile, vanzari"> <META name="DESCRIPTION" content="Agentie imobiliara"> <title>:: Casa TA Imobiliare ::</title> <script type="text/javascript" src="utile.js"></script>

101

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

<script type="text/JavaScript"> <!-if (document.images) { var but = new Array(); but[1] = new Image; but[1].src = 'images/c1.jpg'; but[2] = new Image; but[2].src = 'images/c2.jpg'; but[3] = new Image; but[3].src = 'images/c3.jpg'; but[4] = new Image; but[4].src = 'images/c4.jpg'; but[5] = new Image; but[5].src = 'images/c5.jpg'; but[6] = new Image; but[6].src = 'images/c6.jpg'; var xbut = new Array(); xbut[1] = new Image; xbut[1].src = 'images/xc1.jpg'; xbut[2] = new Image; xbut[2].src = 'images/xc2.jpg'; xbut[3] = new Image; xbut[3].src = 'images/xc3.jpg'; xbut[4] = new Image; xbut[4].src = 'images/xc4.jpg'; xbut[5] = new Image; xbut[5].src = 'images/xc5.jpg'; xbut[6] = new Image; xbut[6].src = 'images/xc6.jpg'; }

//--> </script> <link href="style.css" rel="stylesheet" type="text/css" /> </head> <body> <center> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td background="images/top.jpg" height="34" align="right" colspan="2"> <?php no_anunturi(&$a,&$b); echo "<span class=\"top\">Numar anunturi: $a vanzari, $b inchirieri</span>"; ?>&nbsp;&nbsp; </td> </tr> <tr> <td colspan="2"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td><img src="images/a1.jpg" alt="casa" /></td> <td><img src="images/logo.jpg" /></td> <td><a href="index.php"><img src="images/a2.jpg" /></a></td>

102

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

<td><img src="images/a3.jpg" /></td> </tr> </table> </td> </tr> <tr valign="top"> <td colspan="2"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td><?php if ($_GET['opt']==1) { ?><img src="images/xc1.jpg" name="b1" width="267" height="51" border="0" /><?php } else { ?><a href="index.php?opt=1" onmouseout="swapImg(1,1)" onmouseover="swapImg(1,0)"><img src="images/c1.jpg" name="b1" width="267" height="51" border="0" /></a><?php } ?></td> <td><?php if ($_GET['opt']==2) { ?><img src="images/xc2.jpg" name="b2" width="101" height="51" border="0" /><?php } else { ?><a href="index.php?opt=2" onmouseout="swapImg(2,1)" onmouseover="swapImg(2,0)"><img src="images/c2.jpg" name="b2" width="101" height="51" border="0" /></a><?php } ?></td> <td><?php if ($_GET['opt']==3) { ?><img src="images/xc3.jpg" name="b3" width="101" height="51" border="0" /><?php } else { ?><a href="index.php?opt=3" onmouseout="swapImg(3,1)" onmouseover="swapImg(3,0)"><img src="images/c3.jpg" name="b3" width="101" height="51" border="0" /></a><?php } ?></td> <td><?php if ($_GET['opt']==4) { ?><img src="images/xc4.jpg" name="b4" width="101" height="51" border="0" /><?php } else { ?><a href="index.php?opt=4" onmouseout="swapImg(4,1)" onmouseover="swapImg(4,0)"><img src="images/c4.jpg" name="b4" width="101" height="51" border="0" /></a><?php } ?></td> <td><?php if ($_GET['opt']==5) { ?><img src="images/xc5.jpg" name="b5" width="101" height="51" border="0" /><?php } else { ?><a href="index.php?opt=5" onmouseout="swapImg(5,1)" onmouseover="swapImg(5,0)"><img src="images/c5.jpg" name="b5" width="101" height="51" border="0" /></a><?php } ?></td> <td><?php if ($_GET['opt']==6) { ?><img src="images/xc6.jpg" name="b6" width="101" height="51" border="0" /><?php } else { ?><a href="index.php?opt=6" onmouseout="swapImg(6,1)" onmouseover="swapImg(6,0)"><img src="images/c6.jpg" name="b6" width="101" height="51" border="0" /></a><?php } ?></td> <td><img src="images/c7.jpg" width="8" height="51" /></td>

</tr> </table> </td> </tr> <tr valign="top">

103

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

<td width="184" align="left" valign="top" background="images/love.jpg"> <table border="0" cellpadding="0" cellspacing="0" width="184"> <tr> <td><img src="images/stiri.jpg" /></td> </tr> <tr> <td width="184"> <p class="nletter"> <?php $qri = "SELECT id_anunt,descriere,nume_tip,nume_zona,pret,ora,data from pp_anunturi,pp_tipuri,pp_zona WHERE pp_anunturi.id_tip = pp_tipuri.id_tip AND pp_anunturi.id_zona = pp_zona.id_zona AND fel='vanzare' ORDER BY id_anunt DESC LIMIT 3;"; $rez = mysql_query($qri); while ($row = mysql_fetch_array($rez)) { ?> <a href="index.php?opt=7" class="stiri">*&nbsp;&nbsp;Vanzare &nbsp;<?=$row['nume_tip']."<br/>&nbsp;".$row['nume_zona'].' - '.$row['pret']?> Euro</a><br/><br/> <? } $qri = "SELECT id_anunt,descriere,nume_tip,nume_zona,pret,ora,data from pp_anunturi,pp_tipuri,pp_zona WHERE pp_anunturi.id_tip = pp_tipuri.id_tip AND pp_anunturi.id_zona = pp_zona.id_zona AND fel='inchiriere' ORDER BY id_anunt DESC LIMIT 3;"; $rez = mysql_query($qri); while ($row = mysql_fetch_array($rez)) { ?> <a href="index.php?opt=7" class="stiri">*&nbsp;&nbsp;Inchiriere &nbsp;<?=$row['nume_tip']."<br/>&nbsp;".$row['nume_zona'].' - '.$row['pret']?> Euro/luna</a><br/><br/> <? } ?> </p> </td> </tr> <tr> <td><img src="images/letter.jpg" /></td> </tr>

<tr valign="top"> <td width="184" valign="top"> <form id="email" action="index.php" method="post" >

104

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

<p class="nletter">&nbsp;&nbsp;&nbsp;Daca doriti sa primiti ofertele noastre pe e-mail introduceti adresa dumneavoastra <input type="text" name="nemail" maxlength="100" size="25"/></br> <center><input type="button" value="Inscriere" onclick="JavaScript:isValidEmail();"/></center> <input type="hidden" name="fac" value="0" /> </p> <center><b>..........................</b><br/><br/> <?="<div class=\"txt\"> <a href=\"export_pdf.php\" target=\"_blank\">-> Download oferta <-</a> <br/><br/> <a href=\"casa_ta@yahoo.com\">casa_ta@yahoo.com</a><br/><br/> Telefoane<br/>021-443.51.02<br/>072-470.20.20 </div>"?> </center> </form></td> </tr>

<tr> <td width="184" valign="top" align="center"> <form action="index.php?opt=8" method="post" name="cautare" id="cautare"> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td height="20" valign="top"><img src="images/cautare.jpg" /></td> </tr> <tr> <td height="25" align="center" valign="middle"> <select name="tip_imobil"> <option value="0" selected>Tip de imobil :</option> <?php $hq = mysql_query("SELECT * from pp_tipuri ORDER BY nume_tip;"); while ($rand = mysql_fetch_array($hq)) { ?> <option value="<?=$rand[1]?>"><?=$rand[1]?></option> <?php } ?> </select></td> </tr> <tr> <td height="25" align="center" valign="top"><select name="tip_oferta"> <option value="0" selected>Tip de oferta :</option> <option value="inchiriere">Oferta inchiriere</option>

105

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

<option value="vanzare">Oferta vanzare</option> </select></td> </tr> <tr> <td height="25" align="center" valign="top"><select name="sortare"> <option value="0" selected>Criteriu de sortare :</option> <option value="pret">Pret</option> <option value="data">Data introducerii</option> </select></td> </tr> <tr> <td height="25" align="center" valign="top"><select name="ordinea"> <option value="0" selected>Mod de sortare :</option> <option value="ASC">Ascendent</option> <option value="DESC">Descendent</option> </select></td> </tr> <tr> <td height="25" align="center" valign="middle"><input name="cauta" type="submit" id="cauta" value="Cauta"></td> </tr> </table> </form></td> </tr>

<tr><td width="184" valign="top"> <?php /// CURS VALUTAR echo '<style type="text/css"> <!-.bold { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; font-weight: bold;} .normal { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px;} --> </style>'; // aici se incearca deschiderea fisierului de la bnr $file = fopen("http://www.bnro.ro/Ro/Info/", "r"); if (!$file) { echo "<p>Imposibil sa deschid fisierul pentru citire."; exit; } $today = date("d-m-Y"); // se baga in array numele valutelor pentru afisare ulterioara $numeValuta = array("Dolar SUA","Euro");

106

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

// se genereaza capul de tabel cu data de azi echo '<table border="0" cellspacing="0" cellpadding="0" align="center">'; echo '<tr><td align="center"><img src="images/curs.jpg" /><br> '.$today.'<br> (<a href="http://www.bnro.ro/Ro/Info/" target="_blank">sursa BNR</a>) :</div></td></tr>'; echo '<tr><td align="center" valign="top"> <table border="0" cellspacing="5" cellpadding="0" class="normal">'; // se cauta cursul in fisierul preluat de la bnr while (!feof($file)) { $line = fgets($file, 1024); // se executa cautarea in fisier if (eregi('<TD class="bold">(.*)</TD>', $line, $out)) { $cursvalutar = each ($out); // se afiseaza ce s-a gasit in fisier while (list($key,$val)=each($numeValuta)) { if ($val == "Euro") { $euroi=$cursvalutar[1]; } if ($val == "Dolar SUA") { $dolarel=$cursvalutar[1]; } // dupa preluare se intrerupe bucla break; } } } // se inchide fisierul deschis si tagurile html fclose($file); // se afiseaza cursul echo "<tr><td>USD</td>".$euroi. "<td>LEI</td></tr>"; echo "<tr><td>Euro</td>".$dolarel. "<td>LEI</td></tr>"; echo '</table></td></tr>'; echo '<tr><td align="center" valign="top"><a href="http://www.bnro.ro/Ro/Info/curs_ext.asp" target="_blank">Toate valutele</a></td></tr>'; echo '</table>'; ?> </td></tr> </table> </td>

107

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

<td width="596" align="left" bgcolor="#cbcbcb" valign="top" background="images/xlove.jpg"> <?php /// PRIMA PAGINA if ( !isset($_GET['opt'])) { ?> <table border="0" cellpadding="0" cellspacing="0"> <tr> <td><img src="images/linie_sus.jpg" /></td> </tr> <tr> <td align="left"><p>&nbsp;</p> <p><img src="images/logo_text.jpg" width="442" height="119" /></p> <p class="prima_pagina">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& nbsp;Agentia imobiliara Casa TA a fost infiintata cu urmarirea unui scop precis. <br/>Acesta este de a oferi servicii profesionale si flexibile, potrivit nevoilor dumneavoastra actuale si pe termen lung si de a cauta solutii imobiliare avantajoase pentru satisfacerea exigentelor clientilor nostrii. <br/></p> <p class="prima_pagina">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& nbsp;Noi va oferim permanent informatii de ultima ora despre piata imobiliara si va dam posibilitatea de a lucra cu un colectiv calificat, dinamic, ambitios, ce va poate oferi solutia favorabila problemei dumneavoastra. <br/></p> <p class="prima_pagina">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& nbsp;Doriti sa vindeti, sa cumparati sau sa inchiriati un apartament, o casa sau un teren si nu stiti CUM, UNDE si la ce PRET ? <?php echo " <a href=\"mailto:casa_ta@yahoo.com\"> Contactati-ne acum! </a> " ?> </p><br/><br/> <p><img src="images/case.jpg" width="549" height="138" /></p> </td> </tr> </table> <?php } ?> <?php /// ULTIMELE ANUNTURI if ( isset($_GET['opt']) && $_GET['opt'] == 7) { ?> <img src="images/uan.jpg" /> <div class="continut"><?php ultimele_anunturi(); ?></div> <?php }?>

108

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

<?php /// DESPRE NOI if ( isset($_GET['opt']) && $_GET['opt'] == 1) { ?> <img src="images/u1.jpg" /> <div class="continut"><?php despre_noi(); ?></div> <?php }?>

<?php /// CONSULTANTA if ( isset($_GET['opt']) && $_GET['opt'] == 2) { ?> <img src="images/u2.jpg" /> <div class="continut"><?php consultanta(); ?></div> <?php }?>

<?php /// VANZARI if ( isset($_GET['opt']) && $_GET['opt'] == 3) { ?> <img src="images/u3.jpg" /> <br/><br/> <div class="continut"> <form action="index.php?opt=3" method="POST"> <table border="0" cellpadding="5" cellspacing="0"> <tr> <td class="txt">Tipul imobilului:</td> <td> <select name="tip"> <option value="" selected>--------------------------------</option> <?php $hq = mysql_query("SELECT * from pp_tipuri ORDER BY nume_tip;"); while ($rand = mysql_fetch_array($hq)) { ?> <option value="<?=$rand[0]?>"><?=$rand[1]?></option> <?php } ?> </select> </td> </tr> <tr> <td class="txt">Zona:</td> <td><select name="zona"> <option value="" selected>--------------------------------</option> <?php $hq = mysql_query("SELECT * from pp_zona ORDER BY nume_zona;"); while ($rand = mysql_fetch_array($hq)) { ?>

109

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

<option value="<?=$rand[0]?>"><?=$rand[1]?></option> <?php } ?> </select> </td> </tr> <tr> <td align="center" colspan="2"><input type="submit" value="Cauta" /></td> </tr> </table> </form> <hr/> <?php if (isset($_POST['tip']) && $_POST['tip']!=0 && isset($_POST['zona']) && $_POST['zona']!=0) { $qri = "SELECT id_anunt from pp_anunturi where id_zona=".$_POST['zona']." AND id_tip=".$_POST['tip']." AND fel='vanzare' ORDER BY pret;"; } else { if (isset($_POST['zona']) && $_POST['zona']!=0) { $qri = "SELECT id_anunt from pp_anunturi where id_zona=".$_POST['zona']." AND fel='vanzare' ORDER BY pret;"; } elseif (isset($_POST['tip']) && $_POST['tip']!=0) { $qri = "SELECT id_anunt from pp_anunturi where id_tip=".$_POST['tip']." AND fel='vanzare' ORDER BY pret;"; } elseif (!isset($_POST['tip']) && !isset($_POST['zona'])) { $qri = "SELECT id_anunt,descriere,nume_tip,nume_zona,pret,ora,data from pp_anunturi,pp_tipuri,pp_zona WHERE pp_anunturi.id_tip = pp_tipuri.id_tip AND pp_anunturi.id_zona = pp_zona.id_zona AND pp_anunturi.fel='vanzare' ORDER BY nume_tip;"; } } $rez = mysql_query($qri); while ($r = mysql_fetch_array($rez)) {

110

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

afiseaza_anunt($r['id_anunt']); ?> <br/> <?} ?> </div> <?php }?>

<?php /// INCHIRIERI if ( isset($_GET['opt']) && $_GET['opt'] == 4) { ?> <img src="images/u4.jpg" /> <br/><br/> <div class="continut"> <form action="index.php?opt=4" method="POST"> <table border="0" cellpadding="5" cellspacing="0"> <tr> <td class="txt">Tipul imobilului:</td> <td> <select name="tip"> <option value="" selected>--------------------------------</option> <?php $hq = mysql_query("SELECT * from pp_tipuri ORDER BY nume_tip;"); while ($rand = mysql_fetch_array($hq)) { ?> <option value="<?=$rand[0]?>"><?=$rand[1]?></option> <?php } ?> </select> </td> </tr> <tr> <td class="txt">Zona:</td> <td><select name="zona"> <option value="" selected>--------------------------------</option> <?php $hq = mysql_query("SELECT * from pp_zona ORDER BY nume_zona;"); while ($rand = mysql_fetch_array($hq)) { ?> <option value="<?=$rand[0]?>"><?=$rand[1]?></option> <?php } ?> </select> </td> </tr> <tr>

111

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

<td align="center" colspan="2"><input type="submit" value="Cauta" /></td> </tr> </table> </form> <hr/> <?php if (isset($_POST['tip']) && $_POST['tip']!=0 && isset($_POST['zona']) && $_POST['zona']!=0) { $qri = "SELECT id_anunt from pp_anunturi where id_zona=".$_POST['zona']." AND id_tip=".$_POST['tip']." AND fel='inchiriere' ORDER BY pret;"; } else { if (isset($_POST['zona']) && $_POST['zona']!=0) { $qri = "SELECT id_anunt from pp_anunturi where id_zona=".$_POST['zona']." AND fel='inchiriere' ORDER BY pret;"; } elseif (isset($_POST['tip']) && $_POST['tip']!=0) { $qri = "SELECT id_anunt from pp_anunturi where id_tip=".$_POST['tip']." AND fel='inchiriere' ORDER BY pret;"; } elseif (!isset($_POST['tip']) && !isset($_POST['zona'])) { $qri = "SELECT id_anunt,descriere,nume_tip,nume_zona,pret,ora,data from pp_anunturi,pp_tipuri,pp_zona WHERE pp_anunturi.id_tip = pp_tipuri.id_tip AND pp_anunturi.id_zona = pp_zona.id_zona AND pp_anunturi.fel='inchiriere' ORDER BY nume_tip;"; } } $rez = mysql_query($qri); while ($r = mysql_fetch_array($rez)) { afiseaza_anunt($r['id_anunt']); ?> <br/> <?} ?> </div>

<?php }?>

112

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

<?php /// CLIENTI if ( isset($_GET['opt']) && $_GET['opt'] == 5) { ?> <img src="images/u5.jpg" /> <br/><br/> <div class="continut"> <table border="0" cellpadding="3" cellspacing="0" width="90%"> <?php $qr = "SELECT * from pp_clienti;"; $rez = mysql_query($qr); while ($row = mysql_fetch_array($rez) ) { ?> <tr valign="top"> <td align="left" width="1%"> <span onClick="JavaScript: foo('img/<?=$row['foto']?>');" style="cursor: pointer;"> <img src="img/<?=$row['foto']?>" width="60" height="40" alt="foto" border="1" /> </span> </td> <td align="left"> <div class="anunt"><b><?=$row['titlu']?></b><br/><?=$row['poveste']?></div> </td> </tr> <tr><td colspan="2">&nbsp;</td></tr> <?php } ?> </table> </div> <?php }?> <?php /// CONTACT if ( isset($_GET['opt']) && $_GET['opt'] == 6) { ?> <img src="images/u6.jpg" /> <div class="continut"><?php contact(); ?></div> <br/> <form action="index.php?opt=6" method="POST" > <span class="txt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Daca doriti sa ne adresati o intrebare, doriti sa cautam pentru dumneavoastra sau doriti sa faceti public un anunt cu vanzare/inchirierea unui imobil, ne puteti contacta si cu ajutorul formularului de mai jos:</span> <br/><br/><table border="0" cellpadding="5" cellspacing="0"> <tr> <td class="txt">E-Mailul dumneavoastra:</td> <td><input type="text" name="email" size="40"/></td> </tr> <tr valign="top">

113

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

<td class="txt">Solicitare:</td> <td><textarea name="solicit" rows="4" cols="50"></textarea></td> </tr> <tr> <td colspan="2" align="center"><input type="submit" value="Trimite e-mail"/></td> </tr> </table> <input type="hidden" name="fac" value="1"/> </form><br/> <?php }?> <?php /// MOTOR DE CAUTARE if ( isset($_GET['opt']) && $_GET['opt'] == 8) { ?> <img src="images/u7.jpg" /> <div class="continut"><?php motor_cautare($_POST['tip_imobil'],$_POST['tip_oferta'],$_POST['sortare'],$_POST['ordi nea']); ?></div> <?php }?> </td> </tr> <tr> <td colspan="2"><img src="images/bottom.jpg" /></td> </tr> </table>

</center> </body> </html> <?php require('disconnect.php'); ?>

6. Export_pdf.php <?php require('fpdf/fpdf.php'); require('connect.php'); class PDF extends FPDF { // Header pagina function Header() {

114

Universitatea POLITEHNICA Bucureti // Adauga Logo $this->Cell(80); $this->Image('images/pdf_logo.jpg',140,2,70); $this->Ln(10); } function Footer() { //Position at 1.5 cm from bottom $this->SetY(-15); //Arial italic 8 $this->SetFont('Arial','I',8); //Page number $this->Cell(0,10,'Pagina '.$this->PageNo().'/{nb}',0,0,'C'); } function Titlu() { $this->SetFont('Arial','B',16); $this->Cell(0,6,'Oferta Casa TA Imobiliare'); $this->Ln(10); } function Zona($label) { //Arial 12 $this->SetFont('Arial','B',12); //Background color $this->SetFillColor(201,201,201); //Title $this->Cell(0,6,"$label",0,1,'L',1); //Line break $this->Ln(4); }

PROIECT de DIPLOM

function AfiseazaAnunt($tip,$zona,$des,$pret,$b) { if ($b==1) $pret = $pret. " Euro/luna"; else $pret = $pret. " Euro"; $this->SetFont('Times','B',10); $this->Cell(0,10,'* '.$tip.' - '.$zona.' - '.$pret); $this->Ln(5); $this->SetFont('Times','',8); $this->Cell(0,10,$des); $this->Ln(10); } function AfiseazaDateContact() {

115

Universitatea POLITEHNICA Bucureti $this->Ln(20); $this->SetFont('Arial','B',10); $this->SetFillColor(201,201,201); $this->Cell(0,6,"Casa TA Imobiliare",0,1,'L',1); $this->SetFont('Arial','',10); $this->Cell(0,6,"www.casa_ta_imobiliare.ro",0,1,'L',1); $this->Cell(0,6,"e-mail: casa_ta@yahoo.com",0,1,'L',1); $this->Cell(0,6,"Telefoane:",0,1,'L',1); $this->Cell(0,6," 021-443.51.02",0,1,'L',1); $this->Cell(0,6," 072-470.20.20",0,1,'L',1); } } //Instanciation of inherited class $pdf=new PDF(); $pdf->AliasNbPages(); $pdf->AddPage(); $pdf->Titlu(); $pdf->Zona('Vanzari');

PROIECT de DIPLOM

// INTRODUCE ANUNTURILE DE LA VANZARI $qri = "SELECT id_anunt,descriere,nume_tip,nume_zona,pret,ora,data from pp_anunturi,pp_tipuri,pp_zona WHERE pp_anunturi.id_tip = pp_tipuri.id_tip AND pp_anunturi.id_zona = pp_zona.id_zona AND pp_anunturi.fel='vanzare' ORDER BY nume_tip,nume_zona;"; $rez = mysql_query($qri); while ( $row = mysql_fetch_array($rez) ) { $pdf>AfiseazaAnunt($row['nume_tip'],$row['nume_zona'],$row['descriere'],$row['pret'],0); } $pdf->Ln(15); $pdf->Zona('Inchirieri'); // INTRODUCE ANUNTURILE DE LA INCHIRIERI $qri = "SELECT id_anunt,descriere,nume_tip,nume_zona,pret,ora,data from pp_anunturi,pp_tipuri,pp_zona WHERE pp_anunturi.id_tip = pp_tipuri.id_tip AND pp_anunturi.id_zona = pp_zona.id_zona AND pp_anunturi.fel='inchiriere' ORDER BY nume_tip,nume_zona;"; $rez = mysql_query($qri); while ( $row = mysql_fetch_array($rez) ) { $pdf>AfiseazaAnunt($row['nume_tip'],$row['nume_zona'],$row['descriere'],$row['pret'],1); }

116

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

$pdf->AfiseazaDateContact(); $pdf->Output(); ?>

7. Utile.js /* JavaScript for Casa TA Imobiliare by Ciobanu Aurelia */ function swapImg(buton,fac) { if (fac == 0) { eval("document.b"+buton+".src=xbut["+buton+"].src"); } if (fac == 1) { eval("document.b"+buton+".src=but["+buton+"].src"); } } function isValidEmail() { var str = document.forms['email'].nemail.value; if ( (str.indexOf(".") > 2) && (str.indexOf("@") > 0) ) { document.forms['email'].submit(); } else { alert("Introduceti o adresa de e-mail corecta !"); } }

function foo(file) { x=340; y=260; var string= "width="+x+",height="+y+",toolbar=no,menubar=no,resizable=no, titlebar=no" a = window.open(file,'name',string) ; if (navigator.appName == "Mozilla") { a.focus() } if (navigator.appName == "Netscape"){ a.focus() } }

117

Universitatea POLITEHNICA Bucureti 8. Style.css /* CSS Document for Casa TA Imobiliare */

PROIECT de DIPLOM

a img { border: none; } body { background-color: #FFFFFF; margin-top: 5px; margin-left: 0px; margin-right: 0px; margin-bottom: 0px; } .prima_pagina { font-family:Verdana, Arial, Helvetica, sans-serif; color:#000000; font-size:12px; font-weight:bold; line-height: 20px; } .top { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; color: #333333; } .nletter { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; color: #333333; padding-left:5px; line-height: 14px; } textarea { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; background-color: #f7f7f7; border: 1px solid #47748b; color: black; } a.stiri{ text-decoration:none;

118

Universitatea POLITEHNICA Bucureti color: #333333; } a{ text-decoration:none; color: #3a5c61; } a:hover { text-decoration:underline; color:#3a5c61; }

PROIECT de DIPLOM

a:hover.stiri { color:#3a5c61; } .anunt { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; color: #black; padding-left:10px; line-height: 14px; } .continut { padding-left:20px; padding-right:5px; } .txt { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; color: #333333; padding-left:5px; line-height: 14px; font-weight:bold; } input { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; background-color: #f7f7f7; border: 1px solid #47748b; color: black; }

119

Universitatea POLITEHNICA Bucureti option { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; background-color: #f7f7f7; color: black; } select { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; background-color: #f7f7f7; border: 1px solid #47748b; color: black; }

PROIECT de DIPLOM

9. Index.php (admin) //Reprezint prima pagin pe partea de administraie <?php ob_start(); session_start(); require_once('../connect.php'); require('functii.inc.php'); if (isset($_GET['login']) && $_GET['login']==1) { $user = strip_tags(trim($_POST['user'])); $pass = md5(strip_tags(trim($_POST['pass']))); $x = mysql_result(mysql_query("SELECT * from pp_users WHERE user='$user' AND password='$pass';"),0); if ($x == 1) $_SESSION['logat'] = 1; else { ob_end_clean(); header("LOcation: login.php?err=1"); exit; } } if ($_SESSION['logat'] != 1) { ob_end_clean(); header("LOcation: login.php"); exit; } ///// OPT == 1

120

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

if ($_GET['opt'] == 1) { /// ADAUGA TIP if ( isset($_POST['fac']) && $_POST['fac'] == 0 ) { $qr = "INSERT INTO pp_tipuri(nume_tip) VALUES('".$_POST['tip_nou']."')"; mysql_query($qr); } if ( isset($_POST['fac']) && $_POST['fac'] != 0 ) { $qr = "DELETE FROM pp_anunturi WHERE id_tip=".$_POST['fac'].";"; mysql_query($qr); $qr = "DELETE FROM pp_tipuri WHERE id_tip=".$_POST['fac'].";"; mysql_query($qr); } }

///// OPT == 2 if ($_GET['opt'] == 2) { /// ADAUGA ZONA if ( isset($_POST['fac']) && $_POST['fac'] == 0 ) { $qr = "INSERT INTO pp_zona(nume_zona) VALUES('".$_POST['zona_nou']."')"; mysql_query($qr); } if ( isset($_POST['fac']) && $_POST['fac'] != 0 ) { $qr = "DELETE FROM pp_anunturi WHERE id_zona=".$_POST['fac'].";"; mysql_query($qr); $qr = "DELETE FROM pp_zona WHERE id_zona=".$_POST['fac'].";"; mysql_query($qr); } } ///// OPT == 3 if ($_GET['opt'] == 3) { /// ADAUGA ANUNT if ( isset($_POST['fac']) && $_POST['fac'] == 1 ) { if ( strlen($_FILES['foto']['name']) == 0 || (strlen($_FILES['foto']['name']) != 0 and check_picture($_FILES['foto']['tmp_name'])) ) { $descriere = strip_tags(trim($_POST['descriere'])); $descriere = substr($descriere,0,255); $pret = strip_tags(trim($_POST['pret']));

121

Universitatea POLITEHNICA Bucureti $ora = date('h:i:s'); $data = date('Y-m-d'); $id_tip = $_POST['tip']; $id_zona = $_POST['zona']; $qr="INSERT INTO pp_anunturi(fel,descriere,pret,id_tip,id_zona,ora,data)

PROIECT de DIPLOM

VALUES('vanzare','$descriere','$pret',$id_tip,$id_zona,'$ora','$data');"; mysql_query($qr); if ( strlen($_FILES['foto']['name']) != 0 and check_picture($_FILES['foto']['tmp_name']) ) { /* Se ocupa de upload */ $id = mysql_insert_id($link); $name = 'v' . $id; $ext = strtolower(substr($_FILES['foto']['name'],-3)); $file_name = $name.'.'.$ext; $upload_file = $uploaddir.$file_name; if (move_uploaded_file($_FILES['foto']['tmp_name'],$upload_file) ) { $qr = "UPDATE pp_anunturi SET foto = '$file_name' WHERE id_anunt=$id;"; mysql_query($qr); } } } else { echo "<span style=\"color:red; text-size=14px;\">!!! Tip sau dimensiuni grsite la Fotografie !!!</span>"; } } /// STERGE ANUNT if ( isset($_POST['fac']) && $_POST['fac'] == 2 ) { $id = $_POST['id_anunt']; $file_name = $uploaddir . mysql_result(mysql_query("SELECT foto FROM pp_anunturi WHERE id_anunt='$id';"),0); unlink($file_name); $qr = "DELETE FROM pp_anunturi WHERE id_anunt = ".$_POST['id_anunt']; mysql_query($qr); } }

122

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

///// OPT == 4 if ($_GET['opt'] == 4) { /// ADAUGA ANUNT if ( isset($_POST['fac']) && $_POST['fac'] == 1 ) { if ( strlen($_FILES['foto']['name']) == 0 || (strlen($_FILES['foto']['name']) != 0 and check_picture($_FILES['foto']['tmp_name'])) ) { $descriere = strip_tags(trim($_POST['descriere'])); $descriere = substr($descriere,0,255); $pret = strip_tags(trim($_POST['pret'])); $ora = date('h:i:s'); $data = date('Y-m-d'); $id_tip = $_POST['tip']; $id_zona = $_POST['zona']; $qr="INSERT INTO pp_anunturi(fel,descriere,pret,id_tip,id_zona,ora,data) VALUES('inchiriere','$descriere','$pret',$id_tip,$id_zona,'$ora','$data');"; mysql_query($qr); if ( strlen($_FILES['foto']['name']) != 0 and check_picture($_FILES['foto']['tmp_name']) ) { /* Se ocupa de upload */ $id = mysql_insert_id($link); $name = 'i' . $id; $ext = strtolower(substr($_FILES['foto']['name'],-3)); $file_name = $name.'.'.$ext; $upload_file = $uploaddir.$file_name; if (move_uploaded_file($_FILES['foto']['tmp_name'],$upload_file) ) { $qr = "UPDATE pp_anunturi SET foto = '$file_name' WHERE id_anunt=$id;"; mysql_query($qr); } } } else { echo "<span style=\"color:red; text-size=14px;\">!!! Tip sau dimensiuni grsite la Fotografie !!!</span>"; } } /// STERGE ANUNT

123

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

if ( isset($_POST['fac']) && $_POST['fac'] == 2 ) { $id = $_POST['id_anunt']; $file_name = $uploaddir . mysql_result(mysql_query("SELECT foto FROM pp_anunturi WHERE id_anunt='$id';"),0); unlink($file_name); $qr = "DELETE FROM pp_anunturi WHERE id_anunt = ".$_POST['id_anunt']; mysql_query($qr); } } // ADAUGA POVESTE CLIENT if ($_GET['opt'] == 6) { /// ADAUGA ANUNT if ( isset($_POST['fac']) && $_POST['fac'] == 1 ) { if ( strlen($_FILES['foto']['name']) != 0 and check_picture($_FILES['foto']['tmp_name']) ) { $titlu = strip_tags(trim($_POST['titlu'])); $poveste = strip_tags(trim($_POST['poveste'])); $qr="INSERT INTO pp_clienti(titlu,poveste) VALUES('$titlu','$poveste');"; mysql_query($qr); /* Se ocupa de upload */ $id = mysql_insert_id($link); $name = 'c' . $id; $ext = strtolower(substr($_FILES['foto']['name'],-3)); $file_name = $name.'.'.$ext; $upload_file = $uploaddir.$file_name; if (move_uploaded_file($_FILES['foto']['tmp_name'],$upload_file) ) { $qr = "UPDATE pp_clienti SET foto = '$file_name' WHERE id=$id;"; mysql_query($qr); } } else { echo "<span style=\"color:red; text-size=14px;\">!!! Tip sau dimensiuni grsite la Fotografie !!!</span>"; } } /// STERGE CLIENT if ( isset($_POST['fac']) && $_POST['fac'] == 2 )

124

Universitatea POLITEHNICA Bucureti {

PROIECT de DIPLOM

$id = $_POST['id']; $file_name = $uploaddir . mysql_result(mysql_query("SELECT foto FROM pp_clienti WHERE id='$id';"),0); unlink($file_name); $qr = "DELETE FROM pp_clienti WHERE id = ".$_POST['id']; mysql_query($qr); } } ////////////////////////////////////////////////////////////////// ?> <html> <head> <title>:: Casa TA Imobiliare :: ADMIN ::</title> <link rel="stylesheet" type="text/css" href="style.css" /> <script type="text/javascript" src="utile.js" /> </head> <body> <h2>&nbsp;&nbsp;&nbsp;&nbsp;:: ADMIN :: Casa TA Imobiliare ::</h2> <table style="background-color:#1cd613"> <tr><td> <ul class="navigator"> <li><a href="index.php?opt=1">* Tipuri</a></li> <li><a href="index.php?opt=2">* Zone</a></li> <li><a href="index.php?opt=3">* Anunturi vanzari</a></li> <li><a href="index.php?opt=4">* Anunturi inchirieri</a></li> <li><a href="index.php?opt=6">* Clienti</a></li> <li><a href="index.php?opt=5">* News Letter</a></li> <li><a href="logout.php">* Iesire</a></li> </ul> </td></tr></table> <div class="continut"> <?php if (!isset($_GET['opt'])) { stats(); } elseif ($_GET['opt']==1) { ?> <h4>Tipuri de imobile</h4> <form id="tip" method="POST" action="index.php?opt=1"> <table border="1" cellpadding="5" cellspacing="0"> <?php $qr = mysql_query("SELECT * FROM pp_tipuri ORDER BY nume_tip;"); while ( $row = mysql_fetch_array($qr)) { ?> <tr>

125

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

<td><span style="cursor:pointer" onclick="JavaScript:tip(<?=$row[0]?>)"><img src="b_drop.png" alt="sterge" /></span></td> <td><?=$row['nume_tip']?></td> </tr> <? }?> </table><br/> Tip nou: <input type="text" name="tip_nou" maxlength="20" size="30" /> &nbsp;&nbsp;&nbsp; <input type="button" value="Adauga" onclick="JavaScript:tip(0)"/> <input type="hidden" name="fac" value="0"/> </form> <?php } elseif ($_GET['opt']==2) { ?> <h4>Zonele in care se afla imobilele</h4> <form id="zona" method="POST" action="index.php?opt=2"> <table border="1" cellpadding="5" cellspacing="0"> <?php $qr = mysql_query("SELECT * FROM pp_zona ORDER BY nume_zona;"); while ( $row = mysql_fetch_array($qr)) { ?> <tr> <td><span style="cursor:pointer" onclick="JavaScript:zona(<?=$row[0]?>)"><img src="b_drop.png" alt="sterge" /></span></td> <td><?=$row['nume_zona']?></td> </tr> <? }?> </table><br/> Zona noua: <input type="text" name="zona_nou" maxlength="50" size="40" /> &nbsp;&nbsp;&nbsp; <input type="button" value="Adauga" onclick="JavaScript:zona(0)"/> <input type="hidden" name="fac" value="0"/> </form> <?php } elseif ($_GET['opt']==3) { ?> <form id="anunt" method="POST" action="index.php?opt=3" enctype="multipart/form-data"> <h4>Adaugare anunt vanzari</h4> <table border="1" cellpadding="5" cellspacing="0" bgcolor="#cccccc"> <tr> <td><b>Tip:</b></td> <td> <select name="tip">

126

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM <?php $hq = mysql_query("SELECT * from

pp_tipuri ORDER BY nume_tip;"); while ($rand = mysql_fetch_array($hq)) { ?> <option value="<?=$rand[0]?>"><?=$rand[1]?></option> <?php } ?> </select> </td> </tr> <tr> <td><b>Zona:</b></td> <td> <select name="zona"> <?php $hq = mysql_query("SELECT * from pp_zona ORDER BY nume_zona;"); while ($rand = mysql_fetch_array($hq)) { ?> <option value="<?=$rand[0]?>"><?=$rand[1]?></option> <?php } ?> </select> </td> </tr> <tr> <td><b>Descriere:</b></td> <td> <textarea name="descriere" rows="3" cols="40"></textarea> </td> </tr> <tr> <td><b>Pret:</b></td> <td><input type="text" name="pret" maxlength="20" /></td> </tr> <tr> <td><b>Fotografie:</b></td> <td><input type="file" name="foto" /> <i>(rezolutie maxima 320x240)</i> </td> </tr> <tr> <td colspan="2" align="center"><input type="button" value="Adauga" onclick="JavaScript:anuntv(0,1)"/></td> </tr>

127

Universitatea POLITEHNICA Bucureti </table> <h4>Anunturi vanzari</h4>

PROIECT de DIPLOM

<table border="1" cellpadding="5" cellspacing="0" width="98%"> <tr> <td width="1%">&nbsp;</td> <td><b>Tip</b></td> <td><b>Zona</b></td> <td><b>Descriere</b></td> <td width="1%"><b>Pret</b></td> <td width="1%"><b>Timpul</b></td> <td width="1%"><b>Foto</b></td> </tr> <?php $qri = "SELECT id_anunt,descriere,nume_tip,nume_zona,pret,ora,data from pp_anunturi,pp_tipuri,pp_zona WHERE pp_anunturi.id_tip = pp_tipuri.id_tip AND pp_anunturi.id_zona = pp_zona.id_zona AND fel='vanzare' ORDER BY nume_tip,nume_zona,data,ora;"; $qr = mysql_query($qri); while ( $row = mysql_fetch_array($qr)) { ?> <tr valign="top"> <td><span style="cursor:pointer" onclick="JavaScript:anuntv(<?=$row[0]?>,2)"><img src="b_drop.png" alt="sterge" /></span></td> <td><?=$row['nume_tip']?></td> <td><?=$row['nume_zona']?></td> <td><?=$row['descriere']?></td> <td><?=$row['pret']?></td> <td><?=$row['ora']."<b>**</b>".$row['data']?></td> <td> <?php if ( file_exists($uploaddir.'v'.$row['id_anunt'].'.jpg') ) { ?> <img src="<?=$uploaddir.'v'.$row['id_anunt'].'.jpg'?>" width="80" height="60" alt="poza" /> <? } else echo "<b>-</b>"; ?> </td> </tr> <? }?> </table> <input type="hidden" name="fac" value="1"/> <input type="hidden" name="id_anunt" value="0"/> </form> <? }

128

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

elseif ($_GET['opt']==4) { ?> <form id="anunt" method="POST" action="index.php?opt=4" enctype="multipart/form-data"> <h4>Adaugare anunt inchirieri</h4> <table border="1" cellpadding="5" cellspacing="0" bgcolor="yellow"> <tr> <td><b>Tip:</b></td> <td> <select name="tip"> <?php $hq = mysql_query("SELECT * from pp_tipuri ORDER BY nume_tip;"); while ($rand = mysql_fetch_array($hq)) { ?> <option value="<?=$rand[0]?>"><?=$rand[1]?></option> <?php } ?> </select> </td> </tr> <tr> <td><b>Zona:</b></td> <td> <select name="zona"> <?php $hq = mysql_query("SELECT * from pp_zona ORDER BY nume_zona;"); while ($rand = mysql_fetch_array($hq)) { ?> <option value="<?=$rand[0]?>"><?=$rand[1]?></option> <?php } ?> </select> </td> </tr> <tr> <td><b>Descriere:</b></td> <td> <textarea name="descriere" rows="3" cols="40"></textarea> </td> </tr> <tr> <td><b>Pret:</b></td> <td><input type="text" name="pret" maxlength="20" /></td> </tr>

129

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

<tr> <td><b>Fotografie:</b></td> <td><input type="file" name="foto" /> <i>(rezolutie maxima 320x240)</i> </td> </tr> <tr> <td colspan="2" align="center"><input type="button" value="Adauga" onclick="JavaScript:anuntv(0,1)"/></td> </tr> </table> <h4>Anunturi inchirieri</h4> <table border="1" cellpadding="5" cellspacing="0" width="98%"> <tr> <td width="1%">&nbsp;</td> <td><b>Tip</b></td> <td><b>Zona</b></td> <td><b>Descriere</b></td> <td width="1%"><b>Pret</b></td> <td width="1%"><b>Timpul</b></td> <td width="1%"><b>Foto</b></td> </tr> <?php $qri = "SELECT id_anunt,descriere,nume_tip,nume_zona,pret,ora,data from pp_anunturi,pp_tipuri,pp_zona WHERE pp_anunturi.id_tip = pp_tipuri.id_tip AND pp_anunturi.id_zona = pp_zona.id_zona AND fel='inchiriere' ORDER BY nume_tip,nume_zona,data,ora;"; $qr = mysql_query($qri); while ( $row = mysql_fetch_array($qr)) { ?> <tr valign="top"> <td><span style="cursor:pointer" onclick="JavaScript:anuntv(<?=$row[0]?>,2)"><img src="b_drop.png" alt="sterge" /></span></td> <td><?=$row['nume_tip']?></td> <td><?=$row['nume_zona']?></td> <td><?=$row['descriere']?></td> <td><?=$row['pret']?></td> <td><?=$row['ora']."<b>**</b>".$row['data']?></td> <td> <?php if ( file_exists($uploaddir.'i'.$row['id_anunt'].'.jpg') ) { ?> <img src="<?=$uploaddir.'i'.$row['id_anunt'].'.jpg'?>" width="80" height="60" alt="poza" />

130

Universitatea POLITEHNICA Bucureti <? } else echo "<b>-</b>"; ?> </td> </tr> <? }?> </table>

PROIECT de DIPLOM

<input type="hidden" name="fac" value="1"/> <input type="hidden" name="id_anunt" value="0"/> </form> <?php } elseif ($_GET['opt']==5) { if ( isset($_POST['st_em']) && $_POST['st_em'] == 1 ) { sterge_email($_POST['e_sters']); } ?> <br/><br/> <form action="index.php?opt=5" method="POST"> <input type="hidden" name="st_em" value="1" /> Sterge e-mail -->> <input type="text" name="e_sters" /> <input type="submit" value="Sterge Email" /> </form> <?php echo "<h4>E-Mailuri inscrise ale clientilor !</h4>"; $qr = "SELECT * FROM pp_email ORDER BY email;"; $rez = mysql_query($qr); while ($row = mysql_fetch_array($rez)) { echo $row[1]." ; "; }?> <?php } elseif ($_GET['opt']==6) { ?> <h4>Povesti clienti</h4> <form id="clienti" method="POST" action="index.php?opt=6" enctype="multipart/form-data"> <input type="hidden" name="fac" value="1" /> <input type="hidden" name="id" value="0" /> <table border="1" cellpadding="5" cellspacing="0"> <tr> <td><b>Titlu:</b></td> <td><input type="text" name="titlu" size="50" maxlength="50" /></td> </tr> <tr> <td><b>Poveste:</b></td> <td> <textarea name="poveste" rows="3" cols="60"></textarea> </td>

131

Universitatea POLITEHNICA Bucureti </tr>

PROIECT de DIPLOM

<tr> <td><b>Fotografie:</b></td> <td><input type="file" name="foto" /> <i>(rezolutie maxima 320x240)</i> </td> </tr> <tr> <td colspan="2" align="center"><input type="button" value="Adauga poveste" onclick="JavaScript:cver()"/></td> </tr> </table> <br/><br/><br/> <table border="1" cellpadding="5" cellspacing="0" width="98%"> <tr> <td width="1%">&nbsp;</td> <td><b>Titlu</b></td> <td><b>Poveste</b></td> <td width="1%"><b>Foto</b></td> </tr> <?php $qri = "SELECT id,titlu,poveste,foto FROM pp_clienti ORDER BY titlu;"; $qr = mysql_query($qri); while ( $row = mysql_fetch_array($qr)) { ?> <tr valign="top"> <td><span style="cursor:pointer" onclick="JavaScript:modcc(<?=$row['id']?>,2)"><img src="b_drop.png" alt="sterge" /></span></td> <td><?=$row['titlu']?></td> <td><?=$row['poveste']?></td> <td><img src="<?=$uploaddir.$row['foto']?>" wight="80" height="60" alt="foto" /></td> </tr> <? }?> </table> </form> <?}?> </div> <br/> <table style="background-color:#1cd613" width="100%"> <tr><td align="center"><b>Casa TA Imobilare | ADMIN by <a href="mailto:aura_ro21@yahoo.com">Ciobanu Aurelia</a> @2007</b></td></tr> </table> </body>

132

Universitatea POLITEHNICA Bucureti </html> <?php require('../disconnect.php'); ?>

PROIECT de DIPLOM

10. Login.php <html> <head> <title>:: Casa TA Imobiliare :: ADMIN ::</title> <link rel="stylesheet" type="text/css" href="style.css" /> </head> <body> <center><br/><br/><br/><br/><br/> <form action="index.php?login=1" method="POST"> <table border="1" cellpadding="3" cellspacing="0"> <tr valign="middle"> <td colspan="2" align="left"><b><u>Casa TA Imobiliare</u></b></td> </tr> <tr> <td><b>User:</b></td> <td><input type="text" name="user" /></td> </tr> <tr> <td><b>Password:</b></td> <td><input type="password" name="pass" /></td> </tr> <tr> <td colspan="2" align="center"><input type="submit" value="Login" /></td> </tr> <?php if ($_GET['err']==1) { ?> <p style="color:red">Parola sau user gresit(a) !</p> <?php }?> </table> </form> </center> </body> </html>

133

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

11. Logout.php <?php session_start(); /* PAGINA DE LOGOUT */ session_destroy(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Casa TA Imobiliare Logout</title> <script> function dute() { window.location="index.php"; } </script> </head> <body> <center><br/><br/><br/> <h3>Asteptati 5 secunde ...</h3> </center> <script language="javascript" type="text/javascript"> setTimeout("dute()",5 * 1000); </script> </body> </html> 12. Funcii.inc.php (admin) <?php function stats() { $result = Array(); $result[0] = mysql_result(mysql_query("SELECT count(*) from pp_tipuri;"),0); $result[1] = mysql_result(mysql_query("SELECT count(*) from pp_zona;"),0); $result[2] = mysql_result(mysql_query("SELECT count(*) from pp_anunturi WHERE fel='vanzare';"),0); $result[3] = mysql_result(mysql_query("SELECT count(*) from pp_anunturi WHERE fel='inchiriere';"),0); echo "<h4>Stats</h4>";

134

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

echo "Tipuri de imobile: ".$result[0]; echo "<br/>Numar de zone: ".$result[1]; echo "<br/>Anunturi pentru vanzare: ".$result[2]; echo "<br/>Anunturi pentru inchirieri: ".$result[3]."<br/>"; } function sterge_email($email) { $qr = "DELETE FROM pp_email WHERE email='$email';"; $ok = mysql_query($qr); } function check_picture($picture) { list($width,$height,$type,$attr) = getimagesize($picture); $valid = true; if ($width > 320) $valid = false; if ($height >240) $valid = false; $vtype = array(1,2,3,4,6); if (!in_array($type,$vtype)) $valid = false; return $valid; } ?>

13. Utile.js (admin) /* JavaScript for Casa TA by Ciobanu Aurelia */ function tip(fac) { if (fac != 0) { if (confirm('Sigur doriti sa stergeti tipul ( SE VOR STERGE TOATE ANUNTURILE LEGATE DE ACEST TIP ) ?')) { document.forms['tip'].fac.value = fac; document.forms['tip'].submit(); } } else { document.forms['tip'].fac.value = fac; document.forms['tip'].submit(); } }

135

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

function zona(fac) { if (fac != 0) { if (confirm('Sigur doriti sa stergeti zona ( SE VOR STERGE TOATE ANUNTURILE LEGATE DE ACESTA ZONA ) ?')) { document.forms['zona'].fac.value = fac; document.forms['zona'].submit(); } } else { document.forms['zona'].fac.value = fac; document.forms['zona'].submit(); } } function anuntv(id,fac) { if (fac == 1) { var d = document.forms['anunt'].descriere.value; var p = document.forms['anunt'].pret.value; if (d.length !=0 && p.length !=0) { document.forms['anunt'].fac.value = fac; document.forms['anunt'].id_anunt.value = id; document.forms['anunt'].submit(); } else { alert("Campurile descriere si pret sunt obligatorii !"); } } if (fac == 2) { if (confirm('Sigur doriti sa stergeti anuntul ?')) { document.forms['anunt'].fac.value = fac; document.forms['anunt'].id_anunt.value = id; document.forms['anunt'].submit(); } } if (fac == 3) { document.forms['anunt'].fac.value = fac;

136

Universitatea POLITEHNICA Bucureti document.forms['anunt'].id_anunt.value = id; document.forms['anunt'].submit(); } } function cver() { titlu = document.forms['clienti'].titlu.value.length; poveste = document.forms['clienti'].poveste.value.length; foto = document.forms['clienti'].foto.value.length; var valid = true; if (titlu == 0) valid= false; if (poveste == 0) valid= false; if (foto == 0) valid= false; if (valid) document.forms['clienti'].submit(); else alert("ATENTIE ! Completati toate campurile !"); } function modcc(id,fac) { document.forms['clienti'].fac.value=fac; document.forms['clienti'].id.value=id; document.forms['clienti'].submit(); } function verificacar() { x = document.forms['anunt'].descriere.value.length; if (x>5) { alert("a"); return false; } }

PROIECT de DIPLOM

14. Style.css (admin) /* Style for PP Admin */ body { background: url(back.jpg) repeat-y fixed; margin-top: 5px; margin-left: 10px; margin-right: 0px; margin-bottom: 0px; font-weight: bold; } h2 { color: black; }

137

Universitatea POLITEHNICA Bucureti

PROIECT de DIPLOM

ul.navigator { list-style-type: none; margin-top: 0px; } .navigator li { float: left; margin-right: 15px; margin-top: 0px; } a{ color: white; text-decoration: none; font-weight: bold; } a:hover { color: black; text-decoration: underline overline; font-weight: bold; } div.continut { margin-left: 10px; } h4 { text-decoration: underline; }

138

S-ar putea să vă placă și