Specializarea : [611208]

UNIVERSITATEA „LUCIAN BLAGA” DIN SIBIU
FACULTATEA DE ȘTIINȚE

Specializarea :
Sisteme și Tehnologii Informatice Avansate

LUCRARE DE DISERTAȚIE

Masterand: [anonimizat]
2017

UNIVERSITATEA „LUCIAN BLAGA” DIN SIBIU
FACULTATEA DE ȘTIINȚE

Specializarea :
Sisteme și Tehnologii Informatice Avansate

Aplicație WEB și pentru
telefonia mobilă (pentru o
firmă de turism)

Coordonator științific
Lector univ. dr. Mircea NEAMȚU Masterand: [anonimizat]
2017

Declarație pentru conformitat e asupra originalității operei
științifice

Cuprins

INTRODUCERE ………………………….. ………………………….. ………………………….. ……………………. 1
CAPITOLUL 1. TEHNOLO GII INFORMATICE UTIL IZATE LA REALIZAREA APLIC AȚIEI ….. 2
1.1 PREZENTARE GENERALĂ A UNEI APLICAȚII WEB ………………………….. ………………………….. ….. 2
1.2 HTML ………………………….. ………………………….. ………………………….. ………………………….. 3
1.2.1 Tag -uri principale ale limbajului HTML ………………………….. ………………………….. ……………….. 3
1.2.2 Tag -uri pentru liste ………………………….. ………………………….. ………………………….. …………….. 4
1.2.3 Tag -uri pentru tabele ………………………….. ………………………….. ………………………….. ………….. 4
1.3 CSS ………………………….. ………………………….. ………………………….. ………………………….. .. 5
1.3.1 Proprietăți CSS pentru text și font ………………………….. ………………………….. …………………….. 5
1.3.2 Proprietăți CSS pentru culoare și fundal ………………………….. ………………………….. …………….. 6
1.3.3 Proprietăți CSS pentru chenar e și imagini ………………………….. ………………………….. ………….. 6
1.3.4 Proprietăți CSS pentru poziții ………………………….. ………………………….. ………………………….. . 6
1.4 PHP ………………………….. ………………………….. ………………………….. ………………………….. .. 7
1.4.1 Instrucțiunea if ………………………….. ………………………….. ………………………….. ………………….. 8
1.4.2 Instrucțiunea if-else ………………………….. ………………………….. ………………………….. ……………. 8
1.4.3 Instrucțiunea elseif ………………………….. ………………………….. ………………………….. …………….. 8
1.4.4 Instrucțiunea while ………………………….. ………………………….. ………………………….. …………….. 9
1.4.5 Instrucțiunea for ………………………….. ………………………….. ………………………….. ………………… 9
1.5 JAVASCRIPT ………………………….. ………………………….. ………………………….. ………………….. 9
1.6 MYSQL ………………………….. ………………………….. ………………………….. ………………………. 10
1.6.1 Conectarea la Serverul MySQL ………………………….. ………………………….. ……………………….. 10
1.6.2 Crearea si selectarea unei baze de date ………………………….. ………………………….. …………… 11
1.6.3 Crearea tabelelor ………………………….. ………………………….. ………………………….. ……………… 11
1.6.4 Interogarea tabelelor. Comanda SELECT ………………………….. ………………………….. …………. 12
1.7 APACHE ………………………….. ………………………….. ………………………….. ……………………… 13
1.8 DESPRE RESPONSIVE WEB DESIGN ………………………….. ………………………….. ………………. 13
CAPITOLUL 2. PREZENT AREA APLICAȚIEI ………………………….. ………………………….. ……… 16
2.1 BAZA DE DATE ………………………….. ………………………….. ………………………….. ……………… 16
2.1.1 Tabelul circuite ………………………….. ………………………….. ………………………….. …………………. 16
2.1.2 Tabelele citybreaks și hotele ………………………….. ………………………….. ………………………….. .17
2.1.3 Tabelul rezervari_circuite ………………………….. ………………………….. ………………………….. ……19
2.1.4 Tabelul rezervari_citybreaks ………………………….. ………………………….. ………………………….. ..19
2.2 STRUCTURA APLICAȚIEI ………………………….. ………………………….. ………………………….. ….. 20
2.2.1 Pagina principală (index.php) ………………………….. ………………………….. ………………………….. 20

2.2.2 Pagina circuite.php ………………………….. ………………………….. ………………………….. …………… 22
2.2.3 Pagina details.php ………………………….. ………………………….. ………………………….. ……………. 23
2.2.4 Pagina citybreaks.php ………………………….. ………………………….. ………………………….. ……….. 25
2.2.5 Pagina citybreaks1.php ………………………….. ………………………….. ………………………….. ……… 25
2.2.6 Pagina detaliihotel.php ………………………….. ………………………….. ………………………….. ………. 26
2.2.7 Pagina contact.php ………………………….. ………………………….. ………………………….. …………… 27
2.2.8 Pa gina admin.php ………………………….. ………………………….. ………………………….. …………….. 27
2.3 MODULE ALE APLICAȚIEI ………………………….. ………………………….. ………………………….. …. 27
2.3.1 Meniul ………………………….. ………………………….. ………………………….. ………………………….. …27
2.3.2 Modul pentru filtrarea listei de oferte ………………………….. ………………………….. …………………. 28
2.3.3 Modulul de căutare ………………………….. ………………………….. ………………………….. …………… 28
2.3.4 Harta interactivă a aplicației ………………………….. ………………………….. ………………………….. ..29
2.4 INSTRUMENTE FOLOSITE ÎN DEZVOLTARE ………………………….. ………………………….. ………… 29
CONCLUZII ………………………….. ………………………….. ………………………….. ………………………… 31
BIBLIOGRAFIE ………………………….. ………………………….. ………………………….. …………………… 33

Introducere
În zilele noastre, internetul a ajuns să ocup e o poziție destul de importantă în viața
cotidiană. Se poate spune că internetul a devenit principala sursă de informație pentru o arie
destul de largă de utilizatori, unde, până nu demult, acesta era disponib il doar persoanelor de
elită.
Viteza mare de dezvoltare a resurselor software și hardware din ultima perioadă în
domeniul tehnologiei informației, a contribuit la un acces mult mai rapid și ușor, din orice zonă a
lumi, la toate categoriile de informații , oferind de asemenea o comunicare mult mai bună.
Astfel, prin utilizarea sistemului World Wide Web, se poate accesa orice tip de resurse
informaționale, prin intermediul unui simplu click de mouse.
Lucrarea de față are ca și scop realizarea unui site web pentru căutarea și rezervarea de
bilete pentru diferite pachete turistice, fiind construit ca și tehnologii PHP împreună cu sistemul
de gestiune al bazelor de date MySQL. Acest site se dorește a fi o implementare Web pentru o
firmă de turism care pune la d ispoziția clienților săi (în acest caz turiștii) o multitudine de oferte
de vacanță pentru diferite destinații turistice ale lumii . Astfel un turist poate opta pentru două
tipuri de oferte turistice, primul fiind acela de circuit care presupune vizitarea u nei destinații sau
a unor destinații după un program stabilit pe zile împreună cu un ghid însoțitor , sau pot opta
pentru o ofertă de tip citybreak care oferă posibilitatea rezervarii biletului de avion și a cazării
pentru vizitarea unui oraș turistic.
Am optat pentru tema “Aplica ție web și pentru telefonia mobilă (pentru o firmă de
turism) ” în primul rând datorită pasiuni mele pentru dezvoltarea de aplicații web, dorind de
asemenea să descopăr și să îmi aprofundez mai mult cunoștiințele legate de tehnolog iile web.
În al doilea rând, pentru câ tot mai mulți oameni apelează la comerțul electronic atunci
când vor să facă o tranzacție în schimbul unui produs sau serviciu. Un alt motiv îl reprezintă
ușurința cu care consumatorul poate căuta și își poate crea r apid o imagine de ansamblu asupra
acelor produse sau servicii pe care le dorește, în cazul nostru despre ofertele turistice disponibile,
fiind mult mai la îndemână pentru orice utilizator să navigheze pe internet și să caute exact cea
ce îl interesează.
Lucrarea es te structurată pe două capitole. În primul capitol se prezintă tehnologiile
informatice utilizate pentru realizarea aplicației, punând accent pe punctele lor forte și motivând
astfel alegerea lor. În capitolul al doilea este prezentată aplicația, aceasta funcționând sub forma
unui site web, fiind descrisă fiecare pagină în parte, implementarea și adaptarea aplicației în
vederea rulării optime pe orice dispozitiv (pc, tableta, smartphone). De asemenea se descriu
câteva dintre cele mai importante mo dule ale aplicației dar și structura bazei de date.

Capitolul 1. Tehnologii informatice utilizate la realizarea
aplica ției
1.1 Prezentare generală a unei aplicații web

O aplicație web este o aplicație de tip client -server care este accesată de către utilizatori
prin intermediul unui browser web având o conexiune permanentă la o rețea de internet.
Aplicațiile web sunt implementate folosind tehnologii precum PHP, HTML, CSS,
JAVASCRIPT, ASP, MySQL, etc. Astfel, pentru partea vizuală a aplicație i (site -ului) se folosesc
limbaje precum HTML (limbaj de marcare are rolul de a defini structura pagini, afișarea ficărui
element in parte), CSS (este limbajul de stilizare care se ocupă cu stilizarea elementelor de tip
HTML), JAVASCRIPT (acesta permite c rearea unei interacțiuni mai interactive pe pagina web
cu utilizatorul), în timp ce PHP se ocupă cu prelucrările ce au loc pe server (asigură
funcționalitatea aplicației) iar MySql asigură interacțiunea cu baza de date prin stocarea datelor
și accesul la a cestea. In plus, o astfel de aplicație poate fi stocată pe un server HTTP (Apache).
Ca și avantaje în crearea unei aplicații web putem avea urm ătoarele:
sunt independente față de sistemul de operare, astfel putem rula un website aproape de pe orice
dispozitiv (pc, telefon, tableta) care rulează un sistem de operare , prin intermediul unui browser
web.
Nu este necesară instalarea acesteia, fiind s uficientă existența unui browser web.
Actualizările / upgrade -urile nu sunt o problemă, acestea făcându -se practic într -un singur loc, și
anume pe server , ele propagându -se automat către toți clienții, nefiind necesară instalarea sau
reinstalarea aplicație i pe computerul acestora.
Backup -ul este simplu de realizat, toate datele sunt stocate centralizat.
De regulă majoritatea operațiilor, prelucrărilor se fac pe server, astfel că necesarul de resurse al
dispozitivului de pe care se ruleaza site -ul este minim .
Dezvoltarea de aplicații web este facilitată de existența de software Open Source precum:
Codeignifer, Symphony etc.

Există și un dezavantaj al aplicațiilor web precum:

Poate fi dificil sau chiar imposibil de stabilit o conexiune cu hardware -ul local a l utilizatorului
(imprimante, scanner etc.)

1.2 HTML

Hyper Text Markup Language (HTML) reprezintă un limbaj de marcare folosit pentru
crearea paginilor web ce pot fi afi șate într-un browser (navigator). Principalul rol al limbajului
HTML îl reprezintă mai degrabă prezentarea informațiilor precum: paragrafe, fonturi, tabele ,
formulare etc . dec ât descrierea semanticii documentului. Specificatiile HTML sunt dictate de
World Wide Web Consortium (W3C). HTML este o forma de marcare orientata catre
prezentare a documentelor de tip text pe o singura pagina, utilizand un software de redare
specializat, numit agent utilizator HTML, exemplul cel mai bun de astfel de software fiind
browserul web.
Limbajul HTML pune la dispoziție mijloacele prin care continutul unu i document poate
fi adnotat cu diverse tipuri de metadate si indicatii de redare. Indicatiile de redare pot varia de la
decoratiuni minore ale textului, cum ar fi specificarea faptului ca un anumit cuv ânt trebuie
subliniat sau ca o imagine trebuie introdus a, pana la scripturi mai complexe , precum harti de
imagini si formulare. Metadatele pot include date cum ar fi titlul si autorul documentului,
informatii structurale despre cum este impartit documentul in diferite secțiuni , paragrafe, liste,
titluri etc. si informatii cruciale care permit ca documentul sa poata fi legat de alte documente
pentru a forma astfel hiperlink -uri (sau web -ul). [1]
1.2.1 Tag-uri principale ale limbajului HTML

TAG -URI HTML EXPLICATIE
<html > </html> Definește un fișier în format Web
<head> </head> Antetul documentului
<title> </title> Tilul documentului
<body> </body> Corpul paginii HTML
<p> </p> Paragraf
<h1> </h1> Nivel cel mai mare de subtitlu al documentului (h1 -h6)
<br> Linie nouă
<pre> </pre> Informație preformatată
<sup> </sup> Text exponențial, superscript
<sub> </sub> Tagul subscript

Tabelul 1.1. Tag-uri principale . [6]

1.2.2 Tag-uri pentru liste

TAG -URI HTML EXPLICATIE
<DD> Descriere definiție
<DL> </DL> Lista de tip definiție
<DT> Termen de definiție
<UL> Listă neordonată (marcată)
<OL> Listă ordonată (numerotată)
<LI> Element de listă
Tabelul 1.2. Tag-uri pentru liste . [6]

1.2.3 Tag-uri pentru tabele

TAG -URI HTML EXPLICATIE
<table> </table> Tabel HTML
<colgroup>
</colgroup> Definește un set de definiții de coloane cu ajutorul marcajului
<thead> </thead> Definește titlul tabelului <div> </div> Elementul de diviziune , acesta este un element de tip block si ajuta la o
mai buna organizare a continutului si afisarii in pagi na
<img> Imaginea , acest element ajuta la introducerea in pagina web a imaginilor.
<span> </span> Acesta este un container inline , asemanator cu div numai ca acest element
nu poate contine in interior elemente de tip block.
<a> </a> Linkul , acest ele ment creaza link -uri catre alte pagini.

<tbody> </tbody> Definește corpul tabelului
<tr> </tr> Linie de tabel
<td> </td> Celula de date a tabelului
Tabelul 1.3. Tag-uri pentru tabele . [6]
1.3 CSS

CSS (Cascading Style Sheets) este limbajul de stilizare a elementelor unui document
HTML . Stilurile se pot atasa elementelor HTML în două moduri: prin scrierea codului între
atributele <style> </style> în cadrul documentului HTML în secțiunea head a acestuia sau prin
crearea unor fisiere externe de tip css si importarea acestora în documentul folosind sintaxa:

<link rel="stylesheet" type="text/css" href="mystyle.css">

CSS poate fi utiliza t si pentru formatarea elementelor XHTML, XML si SVGL.
Beneficiile sintaxei CSS sunt:
• formatarea este introdusa intr -un singur loc pentru tot documentul
• editarea rapida a etichetelor
• datorita faptului ca etichetele sunt introduse într -un singur loc se obtine o micsorare a
codului paginii, implicit încarcarea mai rapida a acesteia [1]
1.3.1 Proprietăți CSS pentru text și font

PROPRIETATE EXPLICATIE
font-style Este folosit pentru a adauga caracteristica italica fontului.
font-weight Este paramerul care stabileste grosimea caracterului putand lua valorile
numerice de la 100 la 900
font-size Este parametrul prin care stabilim dimesiunea fontului
text-decoration Adauga sublinierea sau taierea blocului text asociat
text-indent Este folosit pentru alinierea textului in interior
text-align Pozitioneaza pe orizontala obiecte
Tabelul 1.4. Proprietăți pentru formatarea textului si a fontului . [7]

1.3.2 Proprietăți CSS pentru culoare și fundal

PROPRIETATE EXPLICATIE
background -image Asociaza o imagine ca fundal unui obiect.
background -repeat In functie de dimensiunile obiectului caruia ii sunt asociate imaginile de
fond se repeta pe orizontala si verticala.
background –
position In mod normal imaginea de fundal incepe din coltul stanga sus al obiectului
asociat, dar prin aceasta comanda o pozitionam in functie de unde dorim sa
apara
color Prin aceasta comanda setam culoarea textului
Tabelul 1.5. Proprietăți pentru setarea culorii și a fundalului . [7]

1.3.3 Proprietăți CSS pentru chenare și imagini

PROPRIETATE EXPLICATIE
height Stabileste inaltimea unui element
padding Stabileste distanta dintre obiect si chenar simultan pentru toate laturile
margin Stabileste distanta dintre chenar si celelalte obiecte din pagina simultan
pentru toate laturile.
border Afiseaza chenarul
Tabelul 1.6. Proprietăți pentru chenare și margini . [7]
1.3.4 Proprietăți CSS pentru poziții

PROPRIETATE EXPLICATIE
Poziti onarea fixa Folosind valuarea „fixed” pentru atributul „position” vom obtine un
element pe pagina care are o pozitie fixa indiferent de celelalte elemente
Pozitionarea Pozitionarea relativa se refera la o pozitie diferita fata de pozitia statica

relativa
Pozitionarea
absoluta Elementele pozitionate absolut vor fi pozitionate in functie de primul
element parinte care are o pozitionare non -statica
Tabelul 1.7. Tipuri de poziții . [7]

1.4 PHP

PHP este un limbaj de programare destinat în cea mai mare parte Internetului, reușind să
aduc ă dinamică unei pagini web. Reprezintă unul dintre cele mai importante limbaje de
programare web open -source (este gratuit și, în plus, utilizatorii pot acționa liber asupra
procesului de dezvoltare) și server -side (codul sursă se rulează serverul web și nu pe calculatorul
celui care vizualizează pagina ).
Este unul dintre cele mai utilizate limbaje de programare de tip server -side. Statisticile
arată că la 1 mai 2008, numărul website -urilor create folosind suportul PHP a ajuns la peste 20
de milioane dintr -ul total de 70 de milioane de website -uri active în lumea întreagă.
În marea majoritate a cazurilor, l imbajul PHP, se folosește sub formă de secvențe de cod
inserate în cadrul unui document HTML. Din acest motiv, se prefer ă termenul de „script PHP”,
în detrimentul celui de program PHP. Un script PHP are o structură foarte asemănătoare cu cea a
unui cod scris în limbajul C, mai ale s datorită faptului că majoritatea structurilor de programare
au aceeași sintaxă și aceeași funcționalitate.
Un rol de bază al unui script PHP constă în aceea că sc ript-ul poate prelua datele trimise
de către o pagină web de la un client ( de obicei , aceste date sunt trimise de către o pagină web
prin intermediul formularelor HTML ) și de a executa o secvență de program în urma căreia va
rezulta un cod HTML, cod pe care clientul îl va primi sub forma unei pagini web. Desigur,
clientul nu va avea acces la co dul efectiv al script -ului, ci, prin faptul că acesta se află pe server
și se rulează tot pe acesta, va primi direct codul HTML generat prin intermediul script ului. [2]
Acest limbaj se bucură de o p opularitate extrem de ridicată și se datorează următoarel or
sale caracteristici:
• Familiaritatea – sintaxa limbajului este una foarte simplă , fiind foarte la îndemână , mai
ales pentru programatorii care cunosc limbajul C;
• Simplitatea – limbajul are o sintaxă destul de liberă. Nu este necesară includerea de
biblioteci sau de alte directive de compilare, codul PHP inclus într -un document fiind trecut între
două marcaje speciale , <?php si ?>;
• Securitatea – tehnologia PHP pune la dispoziția programatorilor o gamă largă și
eficient ă de măsuri de siguranță;

• Flexibilitatea – fiind apărut din necesitatea dezvoltării web -ului, PHP a fost modularizat
pentru a ține ritmul cu dezvoltarea altor tehnologii. Nefiind legat de un anumit server web, PHP –
ul a fost integrat pentru mai multe servere web exitente: Apache, I IS, Zeus, etc.
• Gratuitatea – probabil că e ste cea mai importantă caracteristică a limbajului PHP.
Dezvoltarea PHP -ului sub licența open -source a determinat adaptarea rapidă a sa la nevoile web –
ului, eficientizarea și securizarea codului. [ 2]
Instructiu nile PHP au o sintaxa asemanatoare cu sintaxa instructiunilor C. Mai jos sunt
prezentate câteva din cele mai importante și utilizate instrucțiuni PHP pe care le -am folosit în
dezvoltarea aplicației.

1.4.1 Instrucțiunea if

Instructiunea if este utilizat a atunci cand se doreste selectarea unei actiuni din
doua posibile, sau cand – inainte de a continua executia – trebuie decis asupra efectuarii sau nu a
unei secvente de cod.
Sintaxa:

if (conditie)
instructiune

Folosirea unei astfel de structuri in dica faptul ca instructiunea se va executa daca si
numai daca valoarea expresiei conditie (eventual dupa conversia la tipul boolean ) este true. [5]

1.4.2 Instrucțiunea if-else

In foarte multe cazuri dorim sa executam o alta instructiune daca valoarea
expresiei conditie este false . In PHP putem utiliza o constructie de tipul if – else in acest scop.
Sintaxa este:

if (conditie)
instructiune #1
else
instructiune #2 [5]

1.4.3 Instrucțiunea elseif

Uneori, suntem nevoiti sa folosim structuri alternative imbricate in diferite scopuri.
Limbajul PHP permite folosirea unei prescurtari si anume constructia elseif . Practic, aceasta
inlocuieste un else urmat de un if. Folosind aceasta structura, codul anterior poate fi scris astfel:

if (conditie #1)
instructiune #1
elseif (conditie #2)
instructiune #2
elseif

elseif (conditie #n)
instruciune #n
else
instructiune #n+1 [5]

1.4.4 Instrucțiune a while

Majoritatea script -urilor PHP vor contine cicluri. Pentru a folosi o bucla anterior
conditionata vom utiliza structura while . Sintaxa acestei proceduri este:

while (conditie)
instructiune

Efectul acestei structuri este executarea instructiun ii atat timp cat valoarea ex presiei
conditie (eventual dupa conversia la tipul boolean ) este true. [5]

1.4.5 Instrucțiunea for

O alternativa cu o functionalitate mai ridicata pentru utilizarea buclelor este structura
repetitiva for. Sintaxa este foarte asemanatoare cu cea din limbajele C/C++ si Java si anume:
for (expresie #1; expresie #2; expresie #3)
instructiune

Prima expresie este evaluata o singura data, inainte de inceperea executiei ciclului.
Instructiunea este executata cat timp cea de -a doua expresie are valoarea true. De fiecare data,
dupa executarea instructiunii este evaluata cea de -a treia expresie. [5]

1.5 JavaScript

JavaScript reprezintă un limbaj de programare orientat obiect ce se bazează pe concept ul
prototipurilor. Este folosit, mai ales pentru pentru int roducerea unor functionalitati paginil or
web, codul Javascript atașat paginilor web, fiind rulat de catre browser. Acest l imbaj este foarte
utilizat în special pentru construirea site -urilor web, dar de asemenea este folosit si pentru acesul

la obiecte incastrate (embedded objects) in alte aplicatii. Cea des utilizare a limbajului JavaScript
o reprezintă scriptarea paginilor web.
Programatorii web pot ingloba in paginile HTML diferite scripturi pentru diverse
activitati cum ar fi verificarea corectitudinii datelor introduse de catre utilizatori sau crearea de
meniuri si alte efecte animate. Fiecare browser își stocheaza în m emorie o reprezentare a unei
pagini web sub forma unui arbore de obiecte si mai apoi pun la dispozitie aceste obiecte
scripturilor JavaScript, care le pot citi si manipula. Un astfel de arbore de obiecte poarta
denumirea de Document Object Model sau DOM. E xista un standard W3C pentru DOM -ul pe
care un browser trenuie să il puna la dispozitie, ceea ce ofera posibilitatea scrierii de scripturi
portabile, care sa functioneze pe toate browserele. In practica, standardul W3C pentru DOM nu
este complet implementat. În ciuda faptului că tendinta browserelor este de a se alinia
standardului W3C, există încă unele browsere care inca prezinta incompatibilitati majore, cum
este cazul Internet Explorer. [1]
1.6 MySql

Tehnologia MySQL reprezintă un sistem de gestiune a bazelor de date, foarte rapid și
robust. O bază de date permite stocarea datelor dar și efectuarea unor operații precum căutarea,
sortarea și regăsirea acestora într -un mod eficient.
Serverul MySQL controlează accesul la datele utilizatorului pentru a garanta că mai mulți
utilizatori pot lucra sim ultan cu acestea. Așadar , MySQL este un server multi -user (mai mulți
utilizatori) și multi -thread (mai multe fire de execuție). Utilizează limbajul SQL (Structured
Query Language), limbajul standard care se ocupă cu interogare a bazelor de date din întreaga
lume.

1.6.1 Conectarea la Serverul MySQL

Pentru a utiliza o baza de date MySQL, este nevoie de o conexiun e la serverul de baze de
date. Aceasta conexiune va fi utilizata ca punct de acces pentru com enzile mysql. Pentru
conectarea la un server MySQL, se utilizeaza functia mysql_connect() , a carei sintaxa este
urmatoarea:

mysql_connect(nume_gazda, nume_utilizator, parola)

Unde "nume_gazda" este numele gazdei pe care ruleaza serviciul MySQL, "nume_utilizator"
este numele utilizatorului care se conecte aza la serverul MySQL, iar "parola" este parola MySQL
asociata utilizatorului. In cazul in care serverul MySQL ruleaza pe acelasi computer ca si
modulul PHP, parametrul "nume gazda" este ‘localhost’. In alte cazuri, daca serverul MySQL
ruleaza pe un alt co mputer, este necesara specificarea adresa computerului pe care ruleaza

serverul MySQL.Functia returneaza FALSE în caz de esec; în caz contrar, returneaza o valoare
denumita identificator de legatura, care serveste ca instrument de manipulare pentru accesul la
serverul MySQL. [3]

1.6.2 Crearea si selectarea unei baze de date

Una din cele mai importante funcții în lucrul cu bazele de date este mysql_query(), care
are urmatoarea form ă:

mysql_query(interogare)

Unde "interogare" reprezintă un sir ce contine comenzile SQL (ce poate fi interogarea propriu
zisa intre ghilimele duble sau o variabila PHP cu interogarea respectiva) care urmeaza a fi
executate. Functia va returna TRUE daca serverul a reusit sa execute interogarea , iar în caz
contrar, returneaza FALSE.
Pentru crearea unei noi baze de date se utilizeaza comanda SQL:

CREATE DATABASE numeBazaDeDate;

Aceasta se poate lansa de la o consola MySQL, sau se poate apela de la un script PHP prin
intermediul functiei mysql_query().
Dupa ce s-a obtinut o c onexiune cu serverul MySQL, programul poate selecta baza de
date la care va avea acces. Pentru aceasta exista functia mysql_select_db(), care are urmatoarea
forma:

mysql_select_db(baza_de_date)

Unde "baza_de_date" este numele bazei de date la care urmeaza a se obtine acces. Functia
returneaza TRUE daca poate obtine accesul la baza de date, respectiv FALSE în caz contrar. [3]

1.6.3 Crearea tabelelor

Dupa conectarea si selectarea bazei de date putem crea tabele in cadrul bazei de date
selectate. Pentru ac easta se foloseste urmatoarea structura:

SQL CREATE TABLE numeTabel (coloana1, coloana2, …); impreuna cu functia mysql_query() .

1.6.4 Interogarea tabelelor. Comanda SELECT

Comanda SELECT este una dintre cele mai utilizate comenzi SQL și are rolul de a
extrage informații din baza de date. Setul de date returnate prin intermediul unei comenzi
SELECT este compusă, asemenea tabelelor bazei de date, din linii și coloane, și vor putea fi
afișate simplu, sau pot popula o tabelă cu datele returnate de cătr e comanda SELECT.
Cu ajutorul comenzii SELECT se pot efectua următoarele tipuri de operații:

 selecția – constă în filtrarea rezultatelor ce vor fi afișate. Pentru filtrarea linilor se
folosește clauza WHERE pentru a defini criter iul sau criteriile pe care trebuie să le
îndeplinească o linie pentru a fi returnată de către comanda SELECT.
 proiecția – constă în alegerea doar a anumitor coloane pentru a fi afișate.
 join – se referă la preluarea datelor din două sau mai multe tabele, " legate" conform
unor reguli precizate.

Figura 2.1 Operațiile realizate cu ajutorul comenzii SELECT

Cea mai simplă formă a comenzii SELECT are sintaxa:

SELEC T Lista_expresii FROM tabela

În clauza SELECT se specifică o listă de coloane sau expresii care vor fi afișate , separate prin
câte un spațiu. În clauza FROM precizăm tabela din care se vor extrage coloanele ce vor fi
afișate sau pe baza cărora se pot efectua diverse calcule. [4]
1.7 Apache
Apache Server este un server web open source, fiind unu l dintre cele mai populare si
folosite servere HTTP. Ini țial a fost conceput pentru mediile de lucru Unix, urmând să fie portat
și pentru sisteme de operare precum Windows sau alte sisteme de operare în rețea.
Prima versiune a serverului web apache a fost lansată de Robert McCool, în timp ce lucra
la proiectul National Center for Supercomputimg Applications (NCSA). Versiunea a doua a pus
accent pe Apache Portable Runtime, fiind considerat un nivel foarte important la vremea
respectivă.
Apache a apărut ca o primă alternativă de succes pentru Netscape Communications
Corporation, urmâand să se dezvolte și să devină un competitor pentru toate celelalte server web
bazate pe Unix . Fiind un program open source ( cu sursă deschisă ), Apache este dezvoltat de o
echip a de programatori coordona ți de Apache So ftware Foundation. Serverul Apache poate fi
executat pe o gama larga de sisteme de operare, precum: Unix, FreeBSD, Mac OS X, Linux,
Microsoft Windows.
Modul de funcționare Apache poate fi extins de o multitudine de module care variază de
la programarea pe partea de server, până la anumite scheme de autentificare dinspre partea de
client. Câteva dintre limbajele de programare suportate de Apache se pot enumera: mod_perl,
mod_python, Tcl iș PHP. O facilitate aparte a serverului Apache este reprezentată de găzduirea
virtuală, care se referă la posibilitatea ca pe un singur server să fie găzduite simultan mai multe
site-uri
Ca și principali competitori al serverului Apache sunt: Microsoft Internet Information
Services ( IIS), Zeus Web Server, Sun Java System Web Server etc. Apache are o importanță
foarte mare prin prisma faptului că unele dintre cele mai mari site -uri din lume îl folosesc ca și
server. Ca și exemplu, motorul de căutare Google, folose ște un modul modificat de Apache
denumit Google Web Server (GWS).
Apache a avut un rol important în dezvoltarea web, cunoscând o ț cre tere impresionantă,
iar în prezent este folosit la peste jumătate din paginile de Internet active.

1.8 Despre Responsive Web Design
Conceptu l Responsive Web Design reprezinta o tehnica de creare / adaptare a layout –
urilor (design -ului) unui website pentru a putea fi vizualizat în mod optim pe orice dispozitiv
folosit. Zi de zi to mai multe browsere, platforme și telefoane mobile inteligente ap ar pe piață și
de aceea a apărut tehnica Responsive Web Design pentru ca acest lucru să nu mai afecteze
modul de afișare a unui website în funcție de factorii respectivi.

Mai precis spus, Responsive Web Design este aceea tehnică ce se ocupă de interpretar ea
corectă și cât mai prietenoasă a design -ului unui website și să răspundă la comportamentul și
mediul de vizualiazare al utilizatorului, indiferent de rezoluțiaecranului și platforma de orientare.
Modul Responsive Web Design a apărut prima dată în 2010 și a fost dezbătut de Ethan
Marcotte în articolul său scris pe AListApart , acesta câștigând popularitate 2 ani mai târziu.
Metoda se bazează pe 3 elemente fundamentale:

 Griduri fluide , care iau in considerare o paleta larga de rezolutii. Pe masura ce rezolutia
se schimba, elementele din pagini se redimensioneaza / rearanjeaza. Gridurile fluide le -au
înlocuit pe cele fixe datorită faptului că în pre zent există o multitudine de rezoluții.
Acestea se bazează pe principiul calculării proporțiilot și permit modificarea lațimii și a
înălțimii în funcție de orice rezoluție, astfel că dimensiunile se măsoară în procente și
unități relative, evitânduse astfe l folosirea pixelilor.
 Imagini flexibile , care i și pot modifica inaltimea sau latimea in functie de grid, Este
recomandată salvarea pe server a mai multor versiuni ale imaginii (având diferite
dimensiuni), pentru ca mai apoi să poată fi utilizată imaginea optimă.
 Media queries , se referă la un procedeu foarte simplu și eficient de interpretare a
regulilor CSS în funcție de dimensiunea ecranului de pe care se vizualizează website -ul.
În funcție dispozitivul și rezoluția detectată se accesează regulile CSS c orespunzătoare.

Crearea unui design responsive presupune implică un timp mai mare de creare a design –
ului și implementării acestuia folosind HTML CSS. În loc să se creeze o singură versiune de
layout, se creează între 3 și 5, fiecare dintre acestea trebu ind să fie și implementate. Astfel pentru
un anumit loc în layout avem mai multe imagini de diferite dimensiuni, în loc de una singură cu
o singură dimensiune. Aceste imagini sunt stocate pe server și în funcție de rezoluție se va
încărca imaginea potrivit ă.

Avantajele
 Accesibilitate – pe toate dispozitivele exista câte o versiune de site functionala! Nu mai
sunt necesare alte versiuni speciale de mobil, care trebuie implementate separat, astfel se
eficentizeaza costurile.
 Simple sharing – site-ul se acces ează printr -un singur URL de către toată lumea!
 Experienta buna de navigare – fiindca se adapteaza rezolutiei, se elimina erorile de
nagivare, aparitia scroll -urilor orizontale, intalnirea butoanelor prea mici pentru a fi
apasate, etc
Dezavantajele
 Costuri – creste volumul de munca, dupa cum am specificat și mai sus, prin urmare, cresc
si costurile.

 Compatibilitate – există riscul apariției unor erori de afișsare sau incompatibilități între
browsere. [8]

Capitolul 2. Preze ntarea aplicației
În cadrul acestei aplicații, prin utilizarea tehnologiilor web PHP și MySQL am urmărit
realizarea unui site dinamic care dă posibilitatea vizitatorilor să caute și să -și rezerve diferite
oferte de vacanță în diferite locuri ale lumii.
Deocamdată, pentru utilizarea aplicației nu este necesară crearea unui username și o
parolă pentru a beneficia de toate facilitățile acestuia, orice vizitator având acces la toate paginile
și modulele site -ului. Există 2 tipuri de utilizatori ai aplicației : turiștii , cei care vizitează și
utilizează efectiv aplicația și administratorii care se ocupă de administrarea aplicației web , mai
exact de introducerea, actualizarea datelor pe site.
2.1 Baza de date
Baza de date a aplicației este formată din 5 tabele: circuite, citybreaks, hotele, rezervari_circuite,
rezervari_citybreaks. În continuare este prezentat mai jos fiecare tabel în parte:

2.1.1 Tabelul circuite

În acest tabel sunt stocate toate ofertele de tip circuit . Fiecare circuit are ca informații
urmă toarele: titlu (acesta este afișat în pagina detaliată a fiecarui circuit), orase (conține orașul
sau orașele de destinație a circuitului), perioada (perioada calendaristică a circuitului),
data_plecare, data_intoarcere, preț (prețul circuitului pentru o singură persoana), transport
(avion sau autocar), loc_pelcare (locul de unde se va pleca), cazare (numele hotelului), masa (cu
sau fara mic dejun), descriere (programul pe zile al circuitului), obiective (obiective turistice care
vor fi vizitateș acestea v or fi marcate pe site pe o harta google maps), imagine (imaginea care va
fi afișată ca preview al circuitului pe pagina circuite.php), imagini_aditionale (imagini ale
obiectivelor turistice ale fiecărui circuit care vor fi afișate pe pagina details.php), descriere_img
(descriere a fiecărei imagini ), locuri (numarul de locuri inca disponibile, pentru fiecare rezervare
realizată acesta va scădea cu câte un loc), data (aceasta coloana se completează automat la
introducerea unui nou circuit de către administrat orul site -ului și ne ajută la sortarea circuitelor în
funcție de cele mai noi) .

Figura 2.1. Tabelul circuite .

2.1.2 Tabelele citybreaks și hotele

Tabel ele citybreaks și hotele sunt în strânsă legătură prin prisma faptului că un citybreak
este o ofer tă care poate oferi clientului o multitudine de oferte de cazare la diferite unități de
cazare.
Tabelul citybreaks este compus din: titlu (acesta este afișat în pagina detaliată a fiecarui
citybreak, mai exact pe pagina citybreaks1.php ), orase (conține o rașul de destinație),
data_plecare, ), transport (avion sau autocar), imagine (imaginea care va fi afișată ca preview al
citybreak -ului pe pagina citybreaks.php), pret (reprezintă prețul cel mai mic dintre hotele
existente pentru un anumit citybreak, prețu l fiind pentru o singură persoană), data (aceasta
coloana se completează automat la introducerea unui nou circuit de către administratorul site –
ului și ne ajută la sortarea circuitelor în funcție de cele mai noi) .

Figura 2.2. Tabelul citybreaks .

Tabe lul hotele este compus din coloanele : id_citybreak (reprezintă id -ul aferent
citybreak -ului), numehotel (numele hotelului), stele (reprezintă numarul de stele al hotelului),
adresa (adresa hotelului), descriere (o scurtă descriere a hotelului), data_plecar e,
data_intoarcere , ora_plecare1 (ora plecari cu avionul în data de plecare), ora_sosire1 (ora de
sosire cu avionul în data de plecare), ora_plecare2 (ora plecari cu avionul în data de întoarcere),
ora_sosire2 (ora sosiri cu avionul în data de întoarcere), aeroport_plecare (aeroportul de unde se
va pleca în prima zi), aeroport_sosire (aeroportul de destinație), camera (tipul de cameră al
hotelului), masa (cu sau fara mic dejun), transport, loc_plecare (orașul de plecare),
loc_intoarcere (orașul de întoarcere), imagine (imaginea de preview al hotelului care va fi afișată
pe pagina cityb reaks1 .php), km (distanța în km de la hotel până în centrul orașului), nopți
(numărul de nopți al călătoriei), preț (prețul pentru o singură persoană),

Figura 2.3. Tabelul hotele .

2.1.3 Tabelul rezervari_circuite

Acest tabel cuprinde toate rezervări le realizate de către fiecare client pentru ofertele de
tip circuit. În acest tabel avem următoarele coloane: id_circuit (reprezintă id -ul circuitului pentru
care s -a facut rezervarea, asftfel incât orice rezervare este unică), nume (numele clientului),
prenumele (prenumele clientului), telefon, email, mesaj (acest câmp nu este obligatoriu și
reprezintă un eventual mesaj al clientului în legătura cu rezervarea efectuată), perioada (perioada
calendaristică a circuitului), circuit (traseul circuitului, conțin ând orașul sau orașele aferente).

Figura 2.4. Tabelul rezervari_circuite .

2.1.4 Tabelul rezervari_ci tybreaks

În tabelul rezervari_ citybreaks sunt cuprin se toate rezervările realizate de către fiecare
client pentru ofertele de tip ci tybreak . În acest tabel avem următoarele coloane: id_citybreak
(reprezintă id -ul citybreak -ului pentru care s -a facut rezervarea), id_hotel (reprezintă id -ul
hotelului aferent fiecărui citybreak, astfel orice rezervare este unică), nume (numele clientului),
prenumele (pren umele clientului), telefon, email, mesaj (acest câmp nu este obligatoriu și
reprezintă un eventual mesaj al clientului în legătura cu rezervarea efectuată), perioada (perioada
calendaristică a circuitului), citybreak (conține orașul de destinație ).

Figu ra 2.5. Tabelul rezervari_ citybreaks .

2.2 Structura aplicației
Pentru o organizare cât mai bună a aplicației am introdus fișierele, pe cât posibil, în
directoare cu denumiri semnificative. Astfel, directorul images conține toate imaginile incluse în
paginile site -ului, în directorul css sunt stocate toate fișierele de tip .css (Cascading Style Sheet)
folosite pentru realizarea layout -ului site -ului. În directorul js sunt incluse fișierele ce conțin
script -urile javascript.
Aplicația funcționează sub for ma unui site web, astfel că este structurată pe mai multe
pagini. Mai jos va fi prezentată detaliat fiecare pagină, cu câte un printscreen al acestora, atât
pentru versiune de pc cât si cea pentru versiunea pentru telefonul mobil (modul responsive):

2.2.1 Pagina principală (index.php)

Este pagina de început a site -ului și are ca conținut următoarele: un modul de căutare
pentru oferte de vacanță (circuit sau citybreak) format dintr -un textbox pentru introducerea
destinației dorite și un textbox pentru sel ectarea datei de plecare dorite (acest câmp nefiind
obligatoriu să fie completat). Mai jos se află o hartă interactivă a lumii cu țările în care există
oferte de vacanță disponibile.

Figura 2.6. Pagina index .php în modul standard

Figura 2.7. Pagina index .php în modul responsive

2.2.2 Pagina circuite.php

În această pagină sunt afișate toate ofertele de tip circuit. Acestea sunt afișsate sub forma
unor chenare ce prezintă în primă fază informații principale a fiecărui circuit (Titlul circuitului,
orașul, prețul, numărul de zile și modalitatea de transport oferită, precum și o imagine de
preview), existând ulterior o pagina mai detaliată a fiecărui circuit în parte care permite și
rezervarea unui biletș această pagină va fi prezentată în secțiunea ur mătoare.
Aici există posibilitatea filtrării circuitelor în funcție de două criterii: filtrare după modul
de transport (avion sau autocar) și/sau filtrare după un interval de preț. De asemenea, toate
ofertele existente se pot sorta în funcție de vechimea acestora (cele mai noi) și în funcție de preț
(crescător sau descrescător)

Figura 2.8. Pagina circuite.php în modul standard

În modul responsive , se observă așezarea di ferită a elementelor în pagină fiind
poziționate sub forma unui bloc. Pentru a nu c rea senzația de aglomerare a elementelor și a
economisi cât mai mult spațiu, secțiunea de filtre funcționeaza sub forma unui div expandabil.

Restul elementelor rămân nemodificate, doar că acestea sunt poziționate in stil bloc (unul sub
altul)

Figura 2.9. Pagina circuite.php în modul responsive

2.2.3 Pagina details.php

Aici se găsesc informații supl imentare pentru fiecare circuit, conținand o galerie de
imagini cu diverse puncte de atracție / obiective turistic e, detalli despre perioada călatoriei, hot el,
preț, programul pe zile al circuitului. Există o hartă interactivă (implementata utilizând modulul
google maps) cu principalele puncte ce vor fi vizitate .

Figura 2.10. Pagina details .php în modul standard

În verisunea pentru telefon mobil a aceste i pagini, pentru a face e economie de spațiu, am
creat o secțiune ce conține 2 tab -uri dinamice, primul tab conținând informațiile legate de
programul circuitului și celîlalt tab având o hartă cu câteva obiective turistice. Astfel este
posibilă vizualizare a unui singur tab la un moment dat (accesarea unui tab determină ascunderea
celuilalt tab).

Figura 2.11. Pagina details .php în modul responsive (în dreapta avem 2 tab -uri dinamice, astfel
că este posibilă vizualizarea unui singur tab la un moment da t,

2.2.4 Pagina citybreaks.php

Pagina citybreaks.php este asemănătoare ca și layout cu pagina circuite.php, singura
diferență fiind aceea că un citybreak este un tip de vacanță care are ca destinație un singur oraș și
oferă o multitudine de variante de cazare (hotele) clientului. Astfel accesând un astfel de vom fi
redirecționați către pagina citybreaks1.php care va fi descrisă în secțiunea următoare.

2.2.5 Pagina citybreaks1.php

Este pagina care ne afișează mai multe variante de unități de cazare pe ntru un anumit
citybreak . Aici fiecare hotel este prezentat ca o imagine de ansamblu, conținând principalele
informații de interes (o imagine de preview a hotelului, numele hotelului, numarul de stele,
prețul sau alte servicii importante) urmând ca mai apo i să avem o a treia pagină, detaliihotel.php,
care prezintă detaliat fiecare hotel și ofera posibilitatea rezervării unui bilet pentru acesta.
De asemenea aici găsim o secțiune prin care putem filtra toate rezultatele existente (în
funcție de numărul de stele sau de un interval de preț). Există și posibilitatea sortării în funcție de
vechimea ofertelor (cele mai noi) sau de prețul acestora (crescător sau descrescător).

Figura 2.12. Pagina citybreaks1 .php în modul standard

Figura 2.13. Pagina cityb reaks1 .php în modul responsive

2.2.6 Pagina detaliihotel.php

Aici se găsesc informații suplimentare pentr u unitatea de cazare selectată cum ar fi:
adresa exactă a hotelului, o scurtă descriere a acestuia, numărul de km față de centrul orașului,
perioada de ședere, tipul camerei, tipul de masă inclus. Mai jos există detalii precum locul
(aeroportul de plecare), data și ora plecării către destinație dar și o harta Google Maps cu locația
hotelului. În această pagină se poate face și o rezervare online pentr u oferta respectivă.

Figura 2.14. Pagina detaliihotel .php în modul standard

Figura 2.15. Pagina detaliihotel .php în modul responsive

2.2.7 Pagina contact.php

Aici se află un formular HTML prin care se poate trimite un mesaj către un operator al
site-ului. Este necesară completarea următoarelor câmpuri: nume, prenume, email, subiectul care
are legătură cu mesajul ce va fi trimis și mesajul propriu -zis. După trimiterea mesajului
administratorul site -ului va primi o notificare pe adresa de email cu mesajul respectiv, putând
astfel să transmită un eventual răspuns celui care a trimis mesajul.

2.2.8 Pagina admin.php

Este o pagin ă destinată strict administratorului site-ului și permite introducerea unor noi
oferte de tip circuit și citybreak în baza de date. Astfel pagina conține două formulare intuitive
care permit introducerea și selectarea rapidă a tuturor informațiilor.

2.3 Module ale aplicației

2.3.1 Meniul

Meniul este creat sub forma unei bare de navigare orizontală, având in partea stângă
logo-ul și denumirea companiei și în partea dreaptă legăturile către fiecare pagină a site -ului.
Există 2 versiuni a meniului, primul fiind meniul destinat ecranelor de dimensiuni mai mari de

826px, iar cealaltă versiune a meniului este afișată pentru ecra ne cu lungime mai mică de 826px
(smartphone, tableta etc). Versiunea responsive a meniului presupune afișarea unei iconițe (tip
burger) ce permite afiș area link -urilor pe verticală. Codul sursă al meniului este afișat în anexa a
doua a documentului.

Figura 2.16. Meniul pentru ecrane mai mari de 826 px.

Figura 2.17. Meniul pentru ecrane mai micii de 826 px.

2.3.2 Modul pentru filtrarea listei de oferte

Acesta se găsește pe orice pagină (în partea stângă) în care vizualizăm o listă de oferte de
tip circuit sau citybreak (circuite.php, citybreaks.php, dar și rezultate.php unde suntem
redirecționați atunci când efectuăm o căutare prin intermediul modulului de căutare) și conține o
variantă de filtrare în funcție de modalitatea de transport preferată și în funcție de un interval de
preț. Putem găsi o variantă puțin diferită de filtrare pe pagina hotele.php când vizualizăm lista de
hotele disponibile pentru un anumit cutybreak. Acest filtru conține o varianta de filtrare în
funcție de numărul de stele al h otelului, pe lânga varianta de filtrare după un anumit interval de
preț.

2.3.3 Modulul de căutare

Apare pe pagina principala a site -ului și permite căutarea unei oferte turistice prin
introducerea destinației dorite și a datei de placare (acest câmp nef iind obligatoriu să fie
completat). Astfel după introducerea destinației de către utilizator se va trimite o solicitare către
server și se vor căuta în baza de date oferte de tip circuit sau citybreak disponbile pentru
destinația aleasă, iar clientul va fi redirecționat către o pagina rezultate.php care va afișa
rezultatele căutarii. Utilizatorul poate opta să caute o destinație selectând suplimentar și data

plecării prin intermediul unui datepicker, iar astfel se vor afișa ofertele disponibile pentru data
selectata. Dacă în cazul în care nu s -a găsit vreun rezultat pentru data selectată, se va afișa oferta
cea mai apropiată după numărul de zile înaintea sau după data selectată.
Implementarea mdulului de căutare este prezentată în secțiunea anexe (anexa cu numărul
1)

2.3.4 Harta interactivă a aplicației

Pe prima pagină a platformei găsim o hartă interactivă cu toate statele lumii, în care
putem naviga pe orice continent al lumii și putem vizualiza toate țările acesteia. Un țară poate fi
colorată în verde sau albastru, iar cele colorate în verde au asociate un link către o pagină
ulterioara a site -ului. Țările colorate cu verde reprezentă acele țări în care există pe site cel puțin
o ofertă de tip citybreak sau circuit turistic, astfel efectuând un click p e statul respectiv vom fi
redirecționați către o pagină c are ne va afișa toate ofertele disponibile pentru acesta. Țările
colorate cu albastru semnifică faptul ca deocamdata nu există oferte disponibile pentru acestea.
În anexa a treia a documentului este prezentată implementarea hărții.

Figura 2.18. Harta interactivă a aplicației

2.4 Instrumente folosite în dezvoltare

Partea executabilă a aplicației este compusă în cea mai mare parte din coduri în limbajul
server -side PHP, care sunt rulate pe serveru l de web și al căror rezultat este vizualizat de către
utilizatorul client pe calculatorul său, prin intermediul unui browser local.

Aplicația web a fost dezvoltată folosind următoarele limbaje de programare și aplicații
Web:
 Pentru partea de programare s-a utilizat PHP, împreuna cu MySQL
 Pentru partea de design s -a utilizat CSS si HTML
 Pentru partea de baze de date s -a utilizat MySQL

Există mai multe module ale aplicației ce au fost implementate folosind diferite plug –
inuri deja existente și anume:
 Pentru modulul de căutare de pe pagina principală am folosit plug -inul datepicker
(compus din fișierul javascript datepicker.js și fișierul css datepicker.css) pentru a afișa
chenarul pentru selectarea dății preferate, dupa delectarea lunii si a zilei aceast a se
generează într -un format prestabilit acceptat de câtre server, ușurând astfel introducerea
acesteia fară a fi nevoie de o introducere manuală prin scrierea de text.
 Tot pe pagina principală a aplicației, am folosit scriptul pentru afișarea hărții ce c onține
toate continentele lumii (script disponibil pe http://simplemaps.com/world ). Utilizând
acest script am personalizat harta respectivă în vederea funcționarii acesteia în funcție de
ofertele turistice exist ente pe site. Astfel dacă există cel puțin o ofertă turistică pentru o
anumită țară aceasta va avea un background de culoare verde și va avea atașat un link
către o pagină care ne va afișa toate ofertele disponibile pentru aceea țară. Implementarea
hărții o putem găsi în secțiunea anexe pa pagina index.php.

Concluzii
În ziua de astăzi, prezența unei firme în mediul online a devenit o chestiune la ordinea
zilei, iar pentru multe dintre acestea fiind chiar o necesitate. Având în vedere costuri le relativ
scăzute, chiar și firmele mai mici și -au permis să -și creeze propriul website. Odată cu crearea
site-ului, unde firma se prezenta și își expunea oferta de produse și servicii , apărea imediat
nevoia de a le face publice . Astfel, marketing -ul a că pătat o popularitate tot mai mare în rândul
Internetului, fiind rapid adaptat rapid cerințelor specifice mediului online.
Utilizarea internetului în zilele noastre a căpătat o importanță extrem de ridicată, astfel ca
orice firmă ar trebui să exploateze o portunitațile oferite de acesta și să-și stabilească această
prioritate de ași crea propriul site, mai ales dacă concurența are deja prezență online. Un website
prezintă foarte multe avantaje, pe lângă costul scăzut și realizarea relativ rapidă a acestuia oferă o
mai bună promovare a firmei și rămâne permanent 24 de ore din 24 în atenția publicului din
orice colț al lumii. În orice moment, conținutul unui site web poate fi modificat sau actualizat sau
modificat în funcție de preferințele celui care îl admin istrează .
Ținând cont de cele spuse mai sus , aplicația dezvoltată reprezintă o soluție modernă și
viabilă pentru implementarea unui magazin online cu oferte de vacanță , având ca obiectiv
cumpărarea și rezervarea de pachete turistice pentru o multitudine d e destinații turistice .
Aplicația intitulată “ Aplicație web și pentru telefonia mobilă (pentru o firmă de turism) ”,
constă într -o colecție de pagini web ce pun la dispoziție două funcționalități importante:

 oferă publicului larg o multitudine de oferte t uristice împreună cu informații detaliate
despre acestea (destinația, data plecării, perioada, obiective turistice de vizitat, modalitatea de
transport, detalii legate de hotel etc) .
 permit rezervarea de pachete turistice .

Aplicația a fost implementată folosind limbajul de programare PHP, care este un limbaj
foarte puternic, este open -source și este principalul limbaj folosit în dezvoltarea aplicațiilor web .
Din aceste motive am decis să aleg acest limbaj p entru implementarea aplicației.
O primă propun ere de îmbunătățire a lucrării ar fi crearea unui modul ce permite
selectarea unei limbi și afișarea site -ului în limba respectivă, venind astfel în sprijinul
vizitatorilor din străinătate.
O altă îmbunătățire ar fi putea fi legată de procesul de rezerva re a unui bilet de vacanță.
Astfel după ce un client efectuează o rezervare pentru o ofertă turistică acesta să poată primi pe
adresa de email un document pdf cu biletul de rezervare împreună cu alte detalii legate de oferta
respectivă.
De asemenea, ar pu tea fi adăugat și modulul de înregistrare și logare a utilizatorilor pe
site, astfel reținându -se și datele personale ale acestora pentru ca atunci când aceștia doresc să

facă o rezervare pe site să nu mai fie necesară introducerea acestor date. Suplimenta r se poate
adăuga și posibilitatea de logare cu un cont extern cum ar fi Facebook, Google, Twitter, și poate
cel mai important lucru implementarea modulului de securitate a tranzacțiilor cu posibilitatea
plății cu cardul.

Bibliografie
[1] https://users.in fo.uvt.ro/~vaipan.dragos/doc.pdf .
[2] http://www.seap.usv.ro/~valeriul/lupu/html_php_mysql.pdf
[3] http://www.marplo.net/php -mysql/mysql.html
[4] https://tuneam.files.wordpress.com/2014/10/curs -1-sql-paul-erco.pdf
[5] http:/ /etutoriale.ro/articles/80/1/Structuri -de-control -in-PHP/
[6] http://abm -designbuild.com/mysite/blog/2017/02/27/tag -uri-html/
[7] http://abm -designbuild.com/mysite/blog/2017/02/27/proprietati -css/
[8] http://webblog.bestwebimage.ro/2014/03/ce -inseamna -design -responsive/

Anexe
Anexa 1. Implementarea modulului de căutare

Pagina index.php . Aici se preiau dat ele de la utilizator și se transmit paginii rezultate.php prin
variabile de tip session.

<?php
session_start();
$server = mysqli_connect("localhost", "root", "root");
$db = mysqli_select_db($server, "magentotour");

if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

if(isset($_POST['btnCauta'])) {
$_SESSION['destinatie'] = $_POST['destinatie'];
$_SESSION['data_plecare'] = $_POST['data_plecare'];

header('Location: rezultate.php?keyword='.$_POST ['destinatie']);
}
?>

<form class="formcauta" method="post" action="index.php">
<div class="subtitlu">Cauta vacanta preferata</div>
<input type="text" name="destinatie" class="txtDestinatie" placeholder="Introdu destinatia">
<input type="text" name= "data_plecare" class="txtData" size="8" id="datepicker" placeholder="Data
plecare">
<input type="submit" class="btnCauta" name="btnCauta" value="Cauta">
</form>

Pagina rezultate.php . Aici se preiau datele de la pagina principală și se efectuează interogă riile
bazei de date pentru returnarea rezultatelor în funcție de destinația și data aleasă.

$_GET['keyword'];
$flagCT = true;
$flagCB = true;
session_start();
$destinatie = $_SESSION['destinatie'];
$data_plecare = $_SESSION['data_plecare'];
//convertire d ati
if ($data_plecare != "") {
$dateP = str_replace('/', ' -', $data_plecare);
$data_plecare = date('Y -m-d', strtotime($dateP));
}
if ($data_plecare == "") {

$query_cautareCT = mysqli_query($server, "SELECT * FROM circuite WHERE orase LIKE
'%$destinatie% '");
$query_cautareCB = mysqli_query($server, "SELECT * FROM citybreaks WHERE oras LIKE
'%$destinatie%'");
$nr_circuite = mysqli_num_rows($query_cautareCT);
$nr_citybreaks = mysqli_num_rows($query_cautareCB);
} else {
$query_cautareCT = mysqli_query($s erver, "SELECT * FROM circuite WHERE orase LIKE '%$destinatie%'
AND data_plecare LIKE '%$data_plecare%'");
$query_cautareCB = mysqli_query($server, "SELECT * FROM citybreaks WHERE oras LIKE
'%$destinatie%' AND data_plecare LIKE '%$data_plecare%'");
$nr_c ircuite = mysqli_num_rows($query_cautareCT);
$nr_citybreaks = mysqli_num_rows($query_cautareCB);
}
echo "<div>";
if (mysqli_num_rows($query_cautareCT) > 0) {
if (mysqli_num_rows($query_cautareCT) == 1) {
echo "<div style='margin -top: 33px;margin -left: 20px;'>S -a gasit 1 circuit</div><br>";
} else {
echo "<div style='margin -top: 33px;margin -left: 20px;'>S -au gasit $nr_circuite (de)
circuite</div><br>";
}
while ($row = mysqli_fetch_assoc($query_cautareCT)) {
$id = $row["id"];
$imagine = $row["ima gine"];
$titlu = $row["orase"];
$pret = $row["pret"];
$transport = $row["transport"];
$data_plecare = $row["data_plecare"];
$data_intoarcere = $row["data_intoarcere"];
$zile = floor((strtotime($data_intoarcere) – strtotime($data_plecare)) / (60 * 60 * 24));
echo "<div class='tour -box' style='margin -top: 0px;'> < div class = 'img -box' > < a href =
'details.php?id=$id' > < img src = '$imagine'
width = '270'
height = '240'
alt = '' > < /a> < /div> < div class = 'info -box' > < a href = 'deta ils.php?id=$id' > $titlu < /a> < div
class = 'pret' > $pret€ < /div> < div class = 'nrzile' > Transport cu $transport * $zile zile < /div> < /div> < /div>" ;
}
} else {
$flagCT = false;
echo "<div style='margin -top: 28px;margin -left: 19px;'>Nu ex ista oferte pentru data aleasa!</div>";
}
echo "</div>";
echo "<div>";
if (mysqli_num_rows($query_cautareCB) > 0) {
if (mysqli_num_rows($query_cautareCB) == 1) {
echo "<div style='margin -top: 33px;margin -left: 20px;'>S -a gasit 1 citybreak</div><br>";
} else {
echo "<div style='margin -top: 33px;margin -left: 20px;'>S -au gasit $nr_citybreaks (de) citybreak –
uri</div><br>";
}
while ($row = mysqli_fetch_assoc($query_cautareCB)) {
$id = $row["id"];

$imagine = $row["imagine"];
$titlu = $row["oras"];
$pret = $row["pret"];
$transport = $row["transport"];
$data_plecare = $row["data_plecare"];
$data_intoarcere = $row["data_intoarcere"];
$zile = floor((strtotime($data_intoarcere) – strtotime($data_plecare)) / (60 * 60 * 24));
echo "<div class='t our-box' style='margin -top: 0px;'> < div class = 'img -box' > < a href =
'citybreaks1.php?id=$id' > < img src = '$imagine'
width = '270'
height = '240'
alt = '' > < /a> < /div> < div class = 'info -box' > < a href = 'citybreaks1.php?id=$id' > $titlu < /a> < div
class = 'pret' > < span style = 'font -size: 16px;color: #aaa;' > de la < /span>$pret €</div > < div class = 'nrzile' > Avion
+ hotel < /div> < /div> < /div>" ;
}
} else {
$flagCB = false;
echo "<div style='margin -top: 28px;margin -left: 19px;'>Nu exista oferte pentru data aleasa!</div>";
}
echo "</div>";
//afisare cel mai apropiat rezultat ca data
if ($flagCT == false) {
$query_cautare = mysqli_query($server, "SELECT * FROM circuite WHERE orase LIKE '%$destinatie%'
AND data_plecare <> '$ data_plecare' ORDER BY data_plecare DESC LIMIT 1;");
$row = mysqli_fetch_assoc($query_cautare);
$id = $row["id"];
$imagine = $row["imagine"];
$titlu = $row["orase"];
$pret = $row["pret"];
$transport = $row["transport"];
$data_plecare_tabel = $row["d ata_plecare"];
$data_intoarcere = $row["data_intoarcere"];
$zile = floor((strtotime($data_intoarcere) – strtotime($data_plecare_tabel)) / (60 * 60 * 24));
$nr_zile = floor((strtotime($data_plecare_tabel) – strtotime($data_plecare)) / (60 * 60 * 24));
if ($nr_zile > 0) {
echo "<div style='margin -top: 28px;margin -left: 19px;'>Oferta valabila cu $nr_zile zile inainte de
data selectata</div>";
}
elseif($nr_zile < 0) {
$nr_zile = abs($nr_zile);
echo "<div style='margin -top: 28px;margin -left: 19px;'>O ferta valabila cu $nr_zile zile dupa data
selectata</div>";
}
echo "<div class='tour -box'> < div class = 'img -box' > < a href = 'details.php?id=$id' > < img src = '$imagine'
width = '270'
height = '240'
alt = '' > < /a> < /div> < div class = 'info -box' > < a href = 'details.php?id=$id' > $titlu < /a> < div class = 'pret'
> $pret€ < /div> < div class = 'nrzile' > Transport cu $transport * $zile zile < /div> < /div> < /div>" ;
}
if ($flagCB == false) {
$query_cautare = mysqli_query($server, "SELE CT * FROM citybreaks WHERE orase LIKE '%$destinatie%'
AND data_plecare <> '$data_plecare' ORDER BY data_plecare DESC LIMIT 1;");
$row = mysqli_fetch_assoc($query_cautare);

$id = $row["id"];
$imagine = $row["imagine"];
$titlu = $row["orase"];
$pret = $ row["pret"];
$transport = $row["transport"];
$data_plecare_tabel = $row["data_plecare"];
$data_intoarcere = $row["data_intoarcere"];
$zile = floor((strtotime($data_intoarcere) – strtotime($data_plecare_tabel)) / (60 * 60 * 24));
$nr_zile = floor((strt otime($data_plecare_tabel) – strtotime($data_plecare)) / (60 * 60 * 24));
if ($nr_zile > 0) {
echo "<div style='margin -top: 28px;margin -left: 19px;'>Oferta valabila cu $nr_zile zile inainte de
data selectata</div>";
}
elseif($nr_zile < 0) {
$nr_zile = abs($nr_zile);
echo "<div style='margin -top: 28px;margin -left: 19px;'>Oferta valabila cu $nr_zile zile dupa data
selectata</div>";
}
echo "<div class='tour -box'> < div class = 'img -box' > < a href = 'citybreaks1.php?id=$id' > < img src =
'$imagine'
width = '270'
height = '240'
alt = '' > < /a> < /div> < div class = 'info -box' > < a href = 'citybreaks1.php?id=$id' > $titlu < /a> < div class =
'pret' > < span style = 'font -size: 16px;color: #aaa;' > de la < /span>$pret €</div > < div class = 'nrzile ' > Avion + hotel
< /div> < /div> < /div>" ;
} ? >

Anexa 2. Implementarea meniului
Meniul este implementat într -un fișier separat ( meniu.html ) și este importat pe fiecare pagină a
site-ului folosind sintaxa <?php include("meniu.html"); ?> . Meniul este creat dub forma unei
liste de link -uri și are asociate reguli css care se aplică în funcție de dispozitivul de pe care rulăm
aplicația. A stfel, există un set de reguli css implementate prin intermediul media queries, care se
aplică atunci când vizuali zarea pagini web se realizează de pe un ecran mai mic de

Fișierul meniu.html

<nav class="nav -bar">
<div class="nav -hold">
<div class="nav -logo">
<img src="images/logo.png" >
</div>
<div class="nav -menu" id="nav"><img src="images/hamb urger.png" style="width: 20px;"></div>
<ul class="nav -items">
<li><a href="index.php">Acasa</a>
<li><a href="circuite.php">Circuite</a>
<li><a href="citybreaks.php">City Break</a>
<li><a href="#">Promotii</a>
<li><a href="conta ct.php">Contact</a>

</ul>
</div>
</nav>

Fișierul meniu. css

body {
font-family: Arial, sans -serif;
margin: 0 auto;
}
a {
text-decoration: none;
}
.nav-bar {
background -color: #e2e2ef;
width: 100%;
}
.nav-hold {
display: block;
}
.nav-logo {
float: left;
display: block;
padding: 5px 0px 0px 30px;
font-weight: 600;
}
.nav-logo a {
color: #f9f9f9;
}
.nav-items {
float: right;
margin -right: 50px;
}
.nav-items li {
display: block;
float: left;
padding: 10px 20px;
margin -left: 10px;
}
.nav-items li a {
color: black;
font-family: Arial, sans -serif;
font-size: 14px;
font-weight: bold;
text-align: center;
text-decoration: none;
transition: 0.3s;
}
.nav-items li a:hover {
color: #a03f3f;
}
.nav-hold {

overflow: hidden;
}
.nav-menu {
display: none;
}

/*media Queries*/
@media screen and (max -width: 826px) {
.nav-logo {
float: left;
display: block;
padding: 5px 0px 0px 10px;
font-weight: 600;
}
.nav-menu {
display: block;
float: right;
padding: 23px 20px;
cursor: point er;
color: black;
}
.nav-items {
width: 100%;
height: 0px;
margin: 0px;
background: #C8C8C8;
}
.nav-items li {
width: 100%;
display: block;
padding: 20px;
}
}
.nav-open {
height: auto;
}

Anexa 3. Implementarea hărții interactive

Pentru stabilirea culorii, link -urilor și a descrierii fiecărui stat am creat 3 funcții specifice
având ca argument numele statului curent .
Funcția culoare se ocupă cu stabilirea culorii hărțiilor și funcționează astfel: se preia
argumentul funcției și se interoghează tabelele circuite și citybreaks ale bazei de date,
verificânduse dacă există cel puțin o ofertă disponibilă pentru oricare dintre acestea și se
memorează într -un arrray . Dacă există atunci se returnează green , altfel se returnează default .
Funcția oferte preia numele țării ca argument și verifică dacă un obiect de tip array
include numele țării respective și returnează numărul de apariții a acestuia pentru fiecare tip de
circuit (citybreak sau circuit)

Funcția linktara, ca și în cazul funcți ei culoare verifică dacă există cel puțin o ofertă
disponibilă pentru oricare tip de ofertă și dacă există se returnează un link care poate fi accesat
dând click pe țara respectivă care ne va redirecționa către pagina oferte -tara.php care ne va afișa
toate ofertele turistice disponibile pentru țara respectivă.

<?php
$server = mysqli_connect("localhost", "root", "root");
$db = mysqli_select_db($server, "magentotour");

if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect _error();
}

$query_circuite = mysqli_query($server,"SELECT tara FROM circuite");
$query_citybreaks = mysqli_query($server,"SELECT tara FROM citybreaks");
$circuite = array();
$circuite = array();

while ($row = mysqli_fetch_assoc($query_circuite) ) {
$circuite[] = $row['tara'];
}
while ($row = mysqli_fetch_assoc($query_citybreaks)) {
$citybreaks[] = $row['tara'];
}

?>

<html>
<head>
<script>
var lungime = window.innerWidth – 18;
var tariCT = <?php echo json_encode($circuite); ?>;
var tariC B = <?php echo json_encode($citybreaks); ?>;
var objCT = { };
for (var i = 0, j = tariCT.length; i < j; i++) {
objCT[tariCT[i]] = (objCT[tariCT[i]] || 0) + 1;
}
var objCB = { };
for (var k = 0, l = tariCB.length; k < l; k++) {
objCB[tariCB[k]] = (obj CB[tariCB[k]] || 0) + 1;
}

function culoare (Ctara) {
if ((tariCT.includes(Ctara)) || (tariCB.includes(Ctara))) {
return "green";
} else {
return "default";
}
}

function oferte (Otara) {
if ((objCT[Otara]==undefined) && (objCB[Otara]==un defined)){
return "Oferte circuit: 0<br>Oferte citybreak: 0";
}else if (objCT[Otara]!=undefined && objCB[Otara]==undefined){
return "Oferte circuit: "+objCT[Otara]+"<br>Oferte citybreak: 0";
}else if (objCT[Otara]==undefined && objCB[Otara]!=undefine d){
return "Oferte circuit: 0<br>Oferte citybreak:" +objCT[Otara];
}else if (objCT[Otara]!=undefined && objCB[Otara]!=undefined){
return "Oferte circuit: "+objCT[Otara]+"<br>Oferte citybreak: "+objCB[Otara];
}
}

function linktara (Ltara) {
if ((ta riCT.includes(Ltara)) || (tariCB.includes(Ltara))) {
return "oferte -tara.php?keyword="+Ltara;
} else {
return "";
}
}

var simplemaps_worldmap_mapdata={
main_settings: {
//General settings
width: lungime, //or 'responsive'
backg round_color: "#FFFFFF",
background_transparent: "yes",
border_color: "#ffffff",
popups: "detect",

//State defaults
state_description: "State description",
state_color: "#88A4BC",
state_hover_color: "#3B729F",
state_url: "http://simplemaps.com",
border_size: 1.5,
all_states_inactive: "no",
all_states_zoomable: "no",

//Location defaults
location_description: "Location description",
location_color: "#FF0067",
location_opacity: 0.8,
locat ion_hover_opacity: 1,
location_url: "",
location_size: 25,
location_type: "square",
location_border_color: "#FFFFFF",
location_border: 2,
location_hover_border: 2.5,
all_locations_inactive: "no",
all_locations_hidden: "no",

//Label defaults

label_color: "#d5ddec",
label_hover_color: "#d5ddec",
label_size: 22,
label_font: "Arial",
hide_labels: "no",

//Zoom settings
manual_zoom: "no",
back_image: "no",
arrow_color: "#cecece",
arrow_color_border: "#808080",
initial_back: "no",
initial_zoom: -1,
initial_zoom_solo: "no",
region_opacity: 1,
region_hover_opacity: 0.6,
zoom_out_incrementally: "yes",
zoom_percentage: 0.99,
zoom_time: 0.5,

//Popup settings
popup_color: "white",
popup_opacity: 0.9,
popup_shadow: 1,
popup_corners: 5,
popup_font: "12px/1.5 Verdana, Arial, Helvetica, sans -serif",
popup_nocss: "no",

//Advanced settings
div: "map",
auto_load: " yes",
rotate: "0",
url_new_tab: "no",
images_directory: "default",
fade_time: 0.1,
link_text: "View Website"
},
state_specific: {
AF: {
name: "Afghanistan",
description: oferte("Afghanistan"),
color: culoare("Afg hanistan"),
hover_color: "default",
url: linktara("Afghanistan")
},
AO: {
name: "Angola",
description: oferte("Angola"),
color: culoare("Angola"),
hover_color: "default",
url: linktara("Angola")
},//toate s tatele sunt enumerate astfel
},

locations: {},
labels: {}
};
</script>
<script src="harta/worldmap.js"></script>
</head>
<body>

<div id="map"></div>

</body>
</html>

Similar Posts