Explorați Cărți electronice
Categorii
Explorați Cărți audio
Categorii
Explorați Reviste
Categorii
Explorați Documente
Categorii
PROIECT DE DIPLOM
SITE DE WEB PENTRU AGENIE IMOBILIAR
COORDONATOR: ABSOLVENT:
BUCURETI 2007
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
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
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.
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
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.
PROIECT de DIPLOM
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.
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.
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.
10
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
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
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.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.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
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
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
PROIECT de DIPLOM
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.
17
PROIECT de DIPLOM
18
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.
19
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.
20
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
PROIECT de DIPLOM
22
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
PROIECT de DIPLOM
24
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.
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
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.
26
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.
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.
27
PROIECT de DIPLOM
28
PROIECT de DIPLOM
29
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.
30
PROIECT de DIPLOM
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
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
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.
Clientul Aplicaiile care se pot dezvolta folosind MySQL i PHP folosesc un singur client: browserul Web.
33
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):
34
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
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`;
ATTRIBUTES UNSIGNED
NULL
DEFAULT
EXTRA
KEY
No Yes No No No Yes No No
auto-increment
PRI
NULL
UNSIGNED UNSIGNED
NULL
36
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;
smallint(6)
No
auto-increment
PRI
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;
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;
id_tip nume_tip
smallint(6)
No
auto-increment
PRI
varchar(50)
No
38
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;
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
PROIECT de DIPLOM
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;
40
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;
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
PROIECT de DIPLOM
Figura 9. Diagrama EA
42
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:
43
PROIECT de DIPLOM
44
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
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
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
PROIECT de DIPLOM
48
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 :
49
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 :
50
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
PROIECT de DIPLOM
52
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
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
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
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
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.
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
58
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
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
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
PROIECT de DIPLOM
62
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
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).
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
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:
65
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:
66
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
69
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
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:
71
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
PROIECT de DIPLOM
73
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
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
PROIECT de DIPLOM
76
PROIECT de DIPLOM
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
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.
79
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
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
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
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
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
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.
2. Fiierul utile.js din folderul Admin n acest fiier avem urmtoarele 6 funcii :
86
PROIECT de DIPLOM
87
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
89
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
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
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
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
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
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
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 !'); ?>
96
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']." ".$r['data']."</span>"; echo "</div>"; echo "</td>"; echo "</tr></table>"; }
function ultimele_anunturi()
97
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/>"; } }
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
PROIECT de DIPLOM
function despre_noi() { echo "<div class=\"txt\"><br/><br/> 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/> 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/> 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/> 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> In cadrul agentiei Casa TA, se imbina intelepciunea cu entuziasmul caracteristic tinerilor, media de varsta a echipei fiind de 26 de ani. <br/><br/> 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> 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
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
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>"; ?> </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
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>
103
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">* Vanzare <?=$row['nume_tip']."<br/> ".$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">* Inchiriere <?=$row['nume_tip']."<br/> ".$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
PROIECT de DIPLOM
<p class="nletter"> 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
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
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
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> </p> <p><img src="images/logo_text.jpg" width="442" height="119" /></p> <p class="prima_pagina"> & 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;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;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
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
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
PROIECT de DIPLOM
<?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
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
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"> </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"> 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
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>
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
PROIECT de DIPLOM
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
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
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
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
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
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> :: 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
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" /> <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" /> <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
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
PROIECT de DIPLOM
<table border="1" cellpadding="5" cellspacing="0" width="98%"> <tr> <td width="1%"> </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
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
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%"> </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
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%"> </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
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
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
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
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
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