Aplicatie de Prezentare Si Rezervari Hoteliere

1 Introducere

Trăim în era informației, a vitezei și a dezvoltării continuă a tehnologiilor. Necesitatea de centralizare a informațiilor, de distribuire și de accesare rapidă a acestora, doar la un click distanță, a dus la dezvoltarea numeroaselor aplicații web.

O aplicație web este o colecție interconectată de pagini Web, stocate pe un server web, care are un conținut generat dinamic și oferă utilizatorilor o funcționalitate specifică. Aceasta este creată într-un limbaj de programare interpretabil de către browser-ul pe care se rulează. Avantajul major al unei aplicații online este că poate fi folosită de un număr infinit de utilizatori, din diferite părți ale lumii, fără a necesita vreo instalare sau configurare pe calculatorul personal. De asemenea, oferă reducerea costurilor de afaceri, eliminarea materialelor tipărite, gestionarea optimă a timpului și a informațiilor, actualizări rapide și eficiente, disponibilitate permanentă, precum și securizarea datelor cetralizate.

În prezent, majoritatea companiilor, organizațiilor, firmelor își promovează produsele și serviciile prin intermediul site-urilor web personalizate. Designul unui site web este foarte important pentru că rezolvă o problemă de comunicare, luând în considerare atât partea funcțională, cât și partea estetică.

Spre exemplu, crearea unui site web dedicat unităților de cazare oferă un mare avantaj față de concurență, în ceea ce privește credibilitatea în ochii clienților. Aceștia se pot informa ușor și pot afla toate detaliile referitoare la serviciile oferite, iar un client informat este un client câștigat. Un astfel de site web permite accesibilitate permanentă, iar clienții pot face rezervări online, la orice oră, oriunde s-ar afla. O aplicație web bine structurată și cu un design modern este cea mai rapidă și mai ieftină metodă de promovare a unităților de cazare.

Fiind pasionată de călătorii, prima problemă care apare în momentul planificării unei vacanțe este locul de cazare. Astfel mi-a venit ideea de-a dezvolta o aplicație web de prezentare a unui hotel, punând accentul pe posibilitatea de a efectua rezervări online.

În ziua de azi este bine ca toate hotelurile să aibă un site propriu de prezentare, deoarece o mare parte a activității de turism s-a mutat online.

2 Cerințe și specificații

Scopul proiectului de licență este realizarea unei aplicații web de prezentare și rezervări hoteliere, vizând partea de prezentare pentru utilizatori și partea de gestionare pentru administrator.

Pentru realizarea acestei aplicații au fost stabilite următoarele cerințe și specificații:

Design și structură – personalizată

Alegerea unui nume original pentru hotel, și anume, „Hotel Unison” – semnificând armonia între confort – calitate și preț în același timp. De asemenea, realizarea logo-ului, folosirea paletei de culori: negru – alb – portocaliu și gri pentru întreg site-ul.

Galerie foto pentru prezentare

Prezentarea generală a hotelului inclusă într-o galerie foto animată, în pagina principală a site-ului. Precum și clasificarea camerelor pe categorii însoțite de prezentare text și poze.

Afișare oferte speciale

Clienții hotelului pot beneficia de reduceri alegând pachete promoționale din ofertele speciale afișate. Afișarea acestora va fi pe o singură pagină, reducând din memorie și viteza de accesare. Clienții înregistrați, care au făcut minim 2 rezervări la hotelul Unison, vor beneficia de 20% discount în momentul în care se autentifică.

Modulul rezervări online

Aplicația să permită efectuarea rezervărilor online, urmând pașii din modulul de rezervare. Rezervările online se pot face doar de clienții înregistrați, memorând rezervările făcute anterior, astfel putând beneficia de reduceri pentru clienții fideli. Cine nu dorește să-și facă cont, pot face rezervări telefonice sau electronice la adresa de email al hotelului.

Localizare dinamică pe hartă și formular de contact

Pentru informații de contact, se face localizarea dinamică a adresei hotelului pe hartă. De asemenea, pentru orice întrebare sau rezervare se pot trimite datele prin intermediul formularului de contact de pe ultima pagină a site-ului.

Funcții speciale pentru diferite tipuri de utilizatori

Realizarea unei interfețe interactive cu funcții specifice fiecărui tip de utilizator. Tipurile de utilizatori sunt următoarele: vizitator, client, oaspete, angajat și administrator . Vizualizarea site-ului poate fi făcută de către toți utilizatorii iar rezervăriile online pot fi efectuate doar de către client, angajat și administrator. Administratorul poate înregistra orice tip de utilizator, pe când ceilalți sunt limitați.

Managementul rezervărilor

Posibilitatea de gestiune a rezervărilor în timp real, implicând funcțiile de vizualizare, modifcare, ștergere și adăugare. Vizualizarea rezervărilor făcute pe toate camerele, sau individual pe un anumit tip de cameră, la fel și pe anumite perioade de timp: prezent și viitor. Rezervările expirate se păstrează în baza de date, nu și pe pagina de administrare. Accesarea paginii de administrare este posibilă doar de către administrator și angajați.

Accesul securizat al utilizatorilor

Aplicația să permită autentificarea administratorului, angajaților și clienților înregistrați. Înregistrarea se realizează în dependență de drepturile administrative a fiecărui tip de utilizator. Stocarea parolelor se face folosind criptarea și funcția de hashing + salting, adică parola se trece prin funcția de hashing care o convertește în sens unic, într-un șir de caractere aleatoriu, la care se adaugă un set aleatoriu de caractere specific fiercărui utilizator (salting).

3 Analiza problemei

Odată cu expansiunea Internetului, în mod special a serviciului web, s-a extins o întreagă industrie numită web design, prin care se înțelege realizarea de aplicații web, din momentul conceperii structurii și interfeței grafice și până la finalizarea programării și introducerea propriu-zisă a datelor – imagini, text, fișiere și alte elemente – care alcătuiesc conținutul unui site web.

Există mai multe tipuri de site-uri web, fiecare având specificațiile sale:

Blog

Site web de prezentare

Magazin online

Site web Custom (portale web, site-uri gurvernamentale, site-uri complexe cu diferite funcționalități).

Blogul este poate cel mai simplist website. Pe acesta regăsindu-se 2-3 pagini statice de prezentare iar în rest numai articole. Blogurile sunt deținute în special de persoanele publice sau de persoanele cărora le place să împărtășească experiențe, păreri, sau de persoanele cărora le place să socializeze. Blogul poate fi atașat de asemenea oricărei categorii de website-uri. Și pe un site de prezentare, dar și pe un magazin online putem regăsi secțiune intitulată Blog, în care proprietarii site-urilor își informează vizitatorii cu privire la noutățile din domeniu.

Site-urile web de prezentare sunt destinate în special întreprinzătorilor. Celor ce au afaceri locale sau afaceri destinate publicului internațional. Acest tip de site este alcătuit din 5-20 de pagini în care se prezintă serviciile pe care le oferă o anumită firmă sau companie. În cazul unui site de prezentare a unui hotel, se pune accent pe funcționalități: crearea unui formular care să permită rezervarea camerelor online, galerie de imagini mai complexă, vizualizare camere disponibile, implementare tur virtual.

Magazinele online sunt site-uri web destul de complexe ce au un număr foarte mare de pagini. Complexitatea unui magazin online presupune: pagini statice, produce sortate pe categorii, optimizare SEO de bază, panou de administrare, panou de administrare pentru vizitator, coș de cumpărături personalizat, opțiuni de plată integrate, precum și posibilitatea de a adăuga / șterge / modifica produse.

Site web Custom se referă la un site web creat complet de la zero pentru a putea fi adoptat nevoilor clientului. Aceste tipuri de site-uri sunt fie site-uri de presă, site-urile instituțiilor guvernamentale, fie site-urile marilor corporații ce rulează mari cantități de informații, portaluri web complexe, fie site-uri ce au scopuri clare (site-uri de reduceri colective, site-uri ce se autosusțin, site-uri ale firmelor de găzduire web).

Lumea virtuală te ademenește prin ușurința și eficiența satisfacerii anumitor dorințe sau obținerea unor necesități. Astăzi, totul e simplu, prin câteva click-uri „totul vine la picioarele tale”. Însă puțini sunt cei care se gândesc ce se află dincolo de ecran.

În acest sens, drept proiect de licență, mi-am propus realizarea unui site web de prezentare, utilizând cele mai noi tehnologii, și punând în evidență interactivitatea interfeței web cu funcționalitățile specifice.

„Aplicație de prezentare și rezervări hoteliere” este tema lucrării de licență și are ca obiectiv prezentarea unui hotel, posibilitatea de efectuare a rezervărilor online, precum și managementul bazei de date. Denumirea aplicației este „Hotel Unison”, a cărui existență este fictivă, scopul principal fiind implementarea noilor tehnologii în dezvoltarea unui site web de la zero.

3.1 Tipuri de utilizatori

Aplicația web conține o interfață prietenoasă pentru mai multe tipuri de utilizatori:

utilizatori neînregistrați – vizitatori

utilizatori înregistrați – clienți, angajați, administratori

Vizitatorii site-ului vor avea la dispoziție informații generale despre hotel, serviciile și facilitățile pe care le oferă, vizualizarea ofertelor speciale, prezentarea camerelor clasificate pe categorii în funcție de tipul acestora, precum și informații de contact însoțite de un formular în cazul în care au întrebări sau doresc să facă o rezervare fără înregistrare.

În momentul în care un vizitator dorește să facă o rezervare online, acesta are acces la pagina de rezervare de pe site, fiind întâmpinat de un formular de înregistrare pentru a-și crea un cont.

Clienții hotelului se consideră acele persoane care au un cont pe site și minim o rezervare efectuată. Aceștia au acces la pagina de rezervare și pot beneficia de oferta „Client fidel”.

Administratorul hotelului are un modul în spatele site-ului special creat pentru administrare. Acesta are drepturi de gestiune a datelor: vizualizare integrală sau după un anumit criteriu, creare rezervări, pe care le poate transforma în oferte speciale, modificare rezervări și ștergerea acestora. De asemenea, administratorul poate înregistra alte persoane în baza de date a hotelului.

3.2 Cazuri de utilizare

Pentru realizarea unei rezervări online, utilizatorii trebuie să urmeze următorii pași din modulul de rezervare:

autentificarea sau înregistrarea utilizatorului

selectarea perioadei de ședere

alegerea tipului și numărului de camere, precum și specificarea numărului de persoane (adulți, copii < 12 ani)

verificarea rezervării și acceptarea termenilor și condițiilor

efectuarea plății online

confirmarea și finalizarea rezervării

O precondiție pentru efectuarea unei rezervări este:

utilizatorii trebuie mai întâi să se autentifice

4 Proiectarea bazei de date

Proiectarea bazei de date pentru aplicația web „Hotel Unison” a fost concepută astfel încât să cuprindă toate informațiile necesare pentru gestiunea și administrarea unui hotel.

Baza de date „Unison” este compusă din 8 tabele: cameră, tipCameră, stareCameră, utilizator, tipUtilizator, login_încercări, rezervare și cameră_rezervare.

4.1 Modelul logic al datelor (MLD)

CAMERA[idCamera, idStare, idTipCamera, nr_camera, order, pret_camera]

TIP_CAMERA [idTipCamera, nr_copii, nr_maxim_pers, tip_camera]

STARE_CAMERA [idStare, descriere]

UTILIZATOR [idUtilizator, idTipUtilizator, numePren, data_nasterii, CNP, telefon, email, localitate, username, parola, salt]

TIP_UTILIZATOR [idTipUtilizator, tipUtilizator]

LOGIN_ÎNCERCĂRI [idUtilizator, timp]

REZERVARE [idRezervare, pret_final, data_sosire, data_plecare, durata_nopti, nr_adulti, nr_copii, data_rezervare, oferta, pret_promotional, descriere]

CAMERA_REZERVARE [idCamera , idRezervare, idUtilizator]

4.2 Modelul conceptual al datelor (MCD)

4.3 Structura bazei de date

1. Tabelul „camera” memorează toate camerele din hotel atribuindu-le câte un id unic, un order după care se face încărcarea camerelor în momentul rezervării, un număr de cameră și un preț. De asemenea tabelul „cameră” reține id-ul stării din tabela „stareCamera” și id-ul tipului de cameră din tabela „tipCamera”.

2. Tabelul „tipCamera” conține informații despre tipurile de camere care sunt în hotel la fel și numărul maxim de adulți și copii atribuit fiecărui tip.

Tipurile de cameră existente în hotel sunt:

single – capacitate: 1 pat pentru 1 adult + max. 1 copil

double – capacitate: 1 pat pentru 2 adulți + max. 1 copil

twin – capacitate: 2 paturi pentru 2 adulți + max. 2 copii

triple – capacitate: 3 paturi pentru 3 adulți + max. 3 copii

apartament – capacitate: 4 paturi pentru 4 adulți + max. 4 copii

3. Tabelul „stareCamera” reține stările în care se poate afla o cameră din hotel.

În câmpul „descriere” se memorează stările posibile ale unei camere:

murdar – încă nu s-a făcut curățenie

curățare – în proces de curățare

pregătit – „gata” de rezervat

4. Tabelul „utilizator” conține toate informațiile despre utilizatori. Acesta memoreaza o serie de date de identificare, precum și date de autentificare în cazul în care utilizatorul este deja înregistrat în baza de date. Pentru înregistrarea unui utilizator este necesar să se respecte următoarele cerințe:

numele de utilizator poate conține doar cifre, litere ( mari și mici ) și simbolul de subliniere ( _ )

adresele de email trebuie să aibă un format specific valid

parolele trebuie să aibă cel puțin 6 caractere și să conțină cel puțin o literă mare ( A..Z ), cel puțin o literă mică ( a..z ) și cel puțin o cifră ( 0..9 ).

De asemenea tabelul „utilizator” reține id-ul tipului de utilizator din tabele „tipUtilizator”.

5. Tabelul „tipUtilizator” reține tipurile de utilizatori posibili:

admin

client

oaspete

angajat

6. Tabelul „login_încercări” reține toate autentificările greșite ale utilizatorilor. Pe baza câmpului „timp”, care reține data completă la care s-a făcut autentificarea, se poate implementa diferite măsuri de securitate.

7. Tabelul „rezervare” conține informații despre rezervări. Datele salvate în momentul în care utilizatorii doresc să efectueze o rezervare sunt:

perioada ( „data_sosire” și „data_plecare”)

„durata_nopti” se poate selecta manual sau genera automat

„data_rezervare” se generează automat cu funcția now()

numărul de persoane asociate pe tipul de cameră pentru care s-a optat („nr_adulti” și „nr_copii”)

câmpul „plata” se completează automat cu 100% în momentul efectuării plății online

„status” reprezintă starea în care se află o rezervare, și de asemenea este generat și modificat automat. Stările posibile sunt: Nou, Confirmat, Sosit, Plecat, Sosit cu întârziere, Plecat cu întârziere și Expirat (nu a fost confirmat în timp)

câmpul „pret_final” reprezintă suma totală pentru o rezervare, calculată automat

adițional sunt 3 câmpuri pentru oferte speciale: „oferta”, „pret_promotional” și „descriere_oferta”. Câmpul „oferta” este de tip boolean, reprezentând o opțiune pentru clienți.

8. Tabelul „camera_rezervare” memorează toate rezervările efectuate. Acest tabel reține idCamera din tabelul „camera”, idRezervare din tabelul „rezervare” și idUtilizator din tabelul „utilizator”. Practic, adună toate informațiile despre o rezervare, menționând de către cine e făcută și pe ce cameră.

5 Proiectarea interfeței

Aplicația va conține 5 pagini principale vizibile tuturor:

Acasă

Oferte speciale

Camere

Rezervare

Contact

Aspectul tutoror paginilor va coincide din punctul de vedere al designului și al structurii.

Principalele secțiuni pe care le vor conține fiecare pagină web sunt:

header-ul – secțiune în partea de sus a paginii

body-ul – secțiune ce va cuprinde conținutul paginii

footer-ul – secțiune în partea de jos a paginii

Header-ul și footer-ul vor fi comune pentru toate paginile, iar body-ul se va modifica în funcție de conținutul fiecărei pagini.

Header-ul aplicației va conține logo-ul hotelului și un meniu de navigare către celelalte pagini, iar footer-ul doar meniul de navigare. În dependență de pagina selectată se va activa elementul corespunzător din meniu, astfel încât, să se evidențieze pagina pe care se află momentan utilizatorul.

Un click pe logo va avea întotdeauna efectul de redirecționare pe prima pagină a site-ului.

În continuare, voi prezenta schițele (wireframe-urile) tuturor paginilor care vor alcătui aplicația de prezentare și rezervări hoteliere, specificând componentele pe care le vor conține. Așa cum header-ul și footer-ul vor fi comune pentru toate paginile, nu voi mai face referire la ele.

1. Pagina „Acasă”

Această pagină va fi prima pagină a site-ului, cea de întâmpinare a a utilizatorilor. Ea va conține în partea superioară a body-ului un slide cu poze reprezentative ale hotelului. Mai jos, în partea stângă – centrat, va fi un container textual cu informații generale despre hotel, iar în partea dreaptă, vor fi poziționate 3 imagini cu efect de butoane, care ne vor redirecționa spre alte pagini ascunse. Paginile ascunse vor face parte din descrierea generală a site-ului și se vor referi la serviciile oferite de hotel.

2. Pagina „Oferte speciale”

În cea de-a doua pagină se vor include toate ofertele speciale ale hotelului. Acestea vor fi incluse într-un container centrat de tip accordion, pentru a evita redirecționare către fiecare ofertă pe pagină separată. În acest mod voi ușura parcurgerea lor de către utilizator, fiind nevoie doar de un singur click pe o anumită secțiune din accordion pentru afișarea sau ascunderea conținutului unei oferte.

3. Pagina „Camere”

Acestă pagină va fi una de prezentare a camerelor din hotel.

Corpul paginii va conține în partea de sus, un tabel în care se vor include următoarele informații:

Tipul de cameră

Numărul maxim de adulți / cameră

Numărul maxim de copii < 12 ani / cameră

Tariful / cameră

Clasificarea camerelor după tip se va face cu ajutorul unui meniu tabular. La selectarea unui tab, se va deshide o pagină locală, care va conține prezentarea tipului de cameră corespunzător. Prezentarea va presupune o galerie de imagini și un accodion cu specificații.

4. Pagina „Rezervare”

Pagina destinată rezervărilor va conține un modul special reprezentat printr-un meniu de navigare de tip „breadcrumb”. Acest tip de navigare îmi va permite să distribui informațiile necesare efectuării unei rezervări într-o gamă secvențială de etape.

Prima etapă va presupune autentificarea sau înregistrarea utilizatorului.

Un utilizator înregistrat va putea accesa direct caseta de autentificare. În cazul în care utilizatorul nu are un cont pe site va trebui să apese butonul de înregistrare aflat în dreptul mesajului. Acesta îi va oferi un formular de înregistrare, care inițial va fi ascuns în aceeași pagină. Pentru utilizatorii care nu vor dori să-și creeze un cont pe site, vor putea să sune la numărul de telefon afișat pe pagină.

Butonul „Continuă” din partea de jos a paginii va redirecționa utilizatorul la etapa următoare.

În momentul trecerii de la o etapă la alta meniul navigator din interiorul body-ul se va modifica.

Cea de-a doua etapă din modulul de rezervare va fi alegerea perioadei de ședere, care va fi încadrată în centrul paginii într-un container.

Datele de intrare introduse de utilizator vor fi sub forma de casete de selectare. Pentru alegerea perioadei de sosire și cea de plecare se va afișa câte un calendar, iar pentru numărul de nopți – o casetă de selectare numerică.

Și pe această pagină în partea de jos va fi butonul „Continuă” pentru a trece la următoarea etapă din modul.

Etape numărul 3 va fi alegerea camerei. În centrul paginii va fi un container care va conține informațiile pe care va trebui să le completeze un utilizator în momentul alegerii unei camere.

Se va selecta tipul de cameră dintr-o listă de opțiuni, apoi se va preciza numărul de camere dorit pentru tipul respectiv, plus numărul de adulți și numărul de copii pe cameră. Va fi și un buton „Adaugă cameră” care le va permite utilizatorilor să adauge alte tipuri de cameră dacă vor dori.

În josul paginii va fi butonul „Continuă” pentru a permite trecerea la etapa următoare.

Următoarea etapă va fi verificarea datelor de intrare selectate de către utilizator. Pentru vizualizarea datelor respective se va genera un tabel în centrul paginii.

Inițial butonul „Continuă” din josul paginii va fi ascuns. Numai după ce utilizatorul va bifa caseta din dreptul mesajului : „Termeni și condiții”, acel buton se va face vizibil.

Mesajul „Termeni și condiții” va fi un link, în momentul accesării lui, se va deschide o nouă fereastră în browser care va conține un document în format pdf.

Ultima etapă din modulul de rezervare va conține în centrul paginii un formular. Acel formular va solicita informații de la utilizator pentru efectuarea plății online cu cardul.

După completărea formularului se va putea apăsa butonul „Finalizare” poziționat în partea de jos a paginii.

În momentul accesării butonului, rezervarea utilizatorului va fi terminată.

Îndeplinirea tuturor etapelor din modulul de rezervare va duce la realizarea cu succes a unei rezervări online.

5. Pagina „Contact”

Aceasta va fi ultima pagină pe care o pot vizualiza utilizatorii site-ului. Ea va conține informațiile de contact ale hotelului:

în partea stângă – centrat va fi poziționată o hartă generată de Google Maps pentru localizarea virtuală a hotelului

în partea dreaptă – sus va fi un formular de contact pentru orice întrebare sau rezervare electronică

în partea dreaptă – jos va fi un container cu date de contact: adresa fizică, numere de telefoane, fax și adresa de email

6 Tehnologii folosite

Pentru realizarea aplicației web de prezentare și rezervări hoteliere „Hotel Unison” am folosit următoarele tehnologii:

Brackets – editor de text folosit pentru scrierea codului sursă

HTML – HyperText Markup Language – limbaj de marcare utilizat pentru crearea paginilor web

CSS – Cascading Syle Sheets – standart pentru formatarea elementelor unui document HTML

Bootstrap – Framework folosit cu scopul de a defini stilul conținutului HTML.

PHP – PHP: Hypertext Preprocessor – limbaj de programare folosit pentru a adăuga funcționalități elementelor din paginile web

JavaScript – limbaj de programare orientat-obiect utilizat în scriptarea paginilor web

AJAX – Asynchronous JavaScript and XML – un nou mod de a folosi standardele existente pentru crearea de pagini web rapide și dinamice

Jquery – librărie de funcții JavaScript și pentru dezvoltare AJAX

DayPilot – librărie dezvoltată de ASP .NET utilizată pentru managementul rezervărilor folosind un calendar de evenimente

MariaDB – sistem de gestiune a bazelor de date

Apache – server web pentru PHP

XSP – Extensibil Server Pages – server de aplicații pentru managementul worker-ului ASP .NET

6.1 Brackets

Pentru scrierea codului pot fi utilizate diverse editoare de text, eu am ales să folosesc editorul Brackets versiunea 1.4. După părerea mea este unul dintre cele mai bune editoare de text pentru realizarea paginilor web.

Brackets este un editor de text modern creat de Adobe Systems, gratuit, cu cod open-source, concentrat pe HTML, CSS și JavaScript. Mai mult de atât, el este construit folosind o combinație de HTML, CSS și JavaScript, destinat în mare parte dezvoltării paginilor web. Caracteristica LivePrewiew este incredibil de utilă, aceasta permite sincronizarea cu browser-ul, adică, codifică instant în browser modificările efectuate în editor.

6.2 HTML

HTML este prescurtarea de la HyperText Markup Language și reprezintă un limbaj de marcare pentru crearea unui document astfel încât să poată fi publicat pe Word Wide Web și vizualizat cu ajutorul unui browser de internet. Un limbaj de marcare este o metodă de formatare a unui text de pe o pagină web, care combină textul cu informațiile suplimentare despre acel text. Informațiile suplimentare sunt exprimate utilizând marcatori. Prin urmare, pe lângă afișarea textului simplu, documentele HTML mai afișează și hypertext, care se referă la modalitatea în care se realizează legăturile între diferite pagini HTML.

HTML constituie piatra de temelie care stă la baza paginilor web și este folosit pentru crearea și reprezentarea vizuală a acestora, nu și pentru adăugarea funcționalităților.

Limbajul este scris în formă de elemente HTML constând din tag-uri sau etichete incluse între paranteze unghiulare, sub forma <html>. Tag-urile sunt cuvinte cheie care descriu conținutul documentului și apar în mod normal în perechi de forma: <div> </div>, tag de start și tag de sfârșit. Navigatoarele de internet nu afișează etichete HTML și script-uri, dar le folosesc pentru interpretarea conținutului paginii și afișarea rezultatului pe ecran. Fișierele HTML se salvează cu extensia .html sau .htm.

Pentru crearea paginilor web din cadrul proiectului meu de licență am folosit ultima versiune de HTML, versiunea 5.0.

6.3 CSS

CSS, prescurtat de la Cascading Style Sheets, este un limbaj folosit pentru controlul asupra prezentării elementelor unui document, care a fost scris în limbaj cu marcatori – HTML sau XHTML. Cu ajutorul acestui standard putem personaliza diferite elemente HTML, setare culori, formatare text, poziționare în pagină, etc.

Stilurile se pot atașa elementelor HTML, fie în cadrul documentului, prin intermediul elementului <style>, fie în fișiere externe salvate cu extensia .css. Avantajul fișierelor externe este că oferă posibilitatea de-a schimba aspectul și layout-ul tuturor paginilor din cadrul unui site web, doar prin editarea unui singur fișier.

Pentru proiect am folosit ultimul standard de CSS, și anume CSS3, care este complet compatibil cu vechile versiuni, dar aduce în plus, alte caracteristici noi. Cele mai importante module adăugate în CSS3 sunt:

Selectori, Modelul box, Fundaluri și borduri, Valori imagine și înlocuire conținut, Efecte text, Transformări 2D/3D, Animații, Layout coloane multiple și interfața cu utilizatorul.

6.4 Bootstrap

Nevoia de a avea o bază solidă pentru începerea construirii proiectului am folosit framework-ul Bootstrap.

Bootstrap este o colecție de instrumente, gratuită și open-source, utilizată pentru a gestiona cât mai bine faza inițială a unei aplicații web.

În momentul de față, Bootstrap este cel mai utilizat framework pentru dezvoltarea interfețelor web, devenind foarte rapid standardul în crearea template-urilor pentru principalele sisteme CMS, cum sunt WordPress și Joomla.

Framework-ul dezvoltat de Twitter, ajuns acum la versiunea 3, permite de asemenea, realizarea de site-uri web responsive, care se adaptează la orice rezoluție de dispozitiv.

Bootstrap oferă implicit un set de foi de stil, care definesc stilul de bază a tuturor componentelor cheie HTML. De asemenea, bootstrap-ul vine cu o serie de componente JavaScript sub formă de plugin-uri jQuery. Acestea oferă elemente suplimentare pentru interfața cu utlizatorul, cum ar fi casetele de dialog, butoane, tab-uri, meniuri verticale, baloane de ajutor (eng. Tooltips), carusele și multe altele.

6.5 PHP

PHP reprezintă un limbaj de programare ce permite modificarea paginilor web înainte ca acestea să fie transmise de server către navigatoarelor web ale utilizatorilor.

PHP poate genera conținut HTML pe baza unor fișiere existente sau pornind de la zero, poate să afișeze o imagine sau orice alt conținut accesibil prin web, sau să redirecționeze utilizatorul către alte pagini. În cadrul acestui proces, PHP poate consulta baza de date, fișiere externe sau alte resurse, poate trimite email-uri sau executa comenzi ale sistemului de operare. PHP este considerat un limbaj de programare server-side , întrucât procesarea se realizează la nivelul serverului web, înainte ca paginile web să ajungă în browser.

Modul în care PHP generează conținut pentru o pagină ce va fi afișată de navigatorul web este prin instrucțiunile delimitate de etichetele <?php și ?>. Astfel, orice se află între aceste tag-uri va fi considerat cod-sursă și va fi executat de interpretatorul PHP și înlocuit cu rezultatul execuției. Ce este în afara tag-urilor rămâne neschimbat și este transmis către browser.

PHP este un limbaj de programare de tip interpretat sau mai este numit și limbaj de scripting, ceea ce înseamnă că fișierele .php sunt interpretate ca atare în momentul execuției.

Programele PHP execută trei categorii de operații elementare:

Obțin date de la un utilizator.

Execută prelucrări ale datelor, respectiv obțin accesul la datele stocate în fișiere și baze de date și le manipulează.

Afișează date astfel încât un utilizator să le poată vizualiza.

Am folosit ultima versiune de PHP 5.6.12 .

6.6 JavaScript

JavaScript este un limbaj de programare orientat pe obiecte, bazat pe conceptul prototipurilor. Este utilizat în special pentru introducerea unor anumite funcționalități în paginile web, codul JavaScript din interiorul acestor pagini fiind rulat de către browser. Limbajul este folosit adesea în construirea site-urilor web, dar se mai utilizează și pentru accesul la obiecte încastrate în alte aplicații.

De asemenea, JavaScript este un limbaj de script-uri ( liste de comenzi executate fără a interacționa cu utilizatorul ) dezvoltat de Netscape. Este dedicat creării cu relativă ușurință a paginilor Web interactive.

În scopul dinamizării paginilor HTML, care alcătuiesc conținutul site-ului „Hotel Unison”, am folosit versiunea 1.8.5 JavaScript.

6.7 AJAX

AJAX este arta de a schimba date asincron între browser și server și de a actualiza părți ale unei pagini Web, fără a reîncărca toată pagina.

Termenul AJAX aparține lui Jesse James Garrett și reprezintă o suită de tehnologii deschise, încorporând (Eernisse, 2005):

limbaje standardizate de prezentare a datelor, precum XHTML – Extensible HTML și CSS – Cascading Style Sheets (W3C);

redare și interacțiune via standardul DOM – Document Object Model;

interschimb și manipulare de date prin XML și/sau XSLT – Extensible Stylescheet Language Transformations;

transfer asincron de date via obiectul XMLHttpRequest;

procesare prin limbajul ECMAScript/JavaScript (ECMA).

Componenta de bază este obiectul XMLHttpRequest pus la dispoziție de către browser-ul Web. Acest obiect permite realizarea de cereri HTTP, prin metoda GET și POST, dintr-un program rulând la nivel client (browser) spre o aplicație de pe server, într-un mod asincron. Astfel, conținutul paginilor web nu mai trebuie reîncărcate în întregime.

6.8 jQuery

jQuery este o librărie gratuită de funcții JavaScript care ușurează foarte mult munca designerilor web ce vor să dezvolte pagini web animate și dinamice. Această librărie accesează anumite părți dintr-o pagină web schimbându-le conținutul și comportamentul.

jQuery poate fi stocat într-un singur fișier JavaScript, conținând toate metodele jQuery sau poate fi adăugat la o pagină web (în secțiunea <head>) cu o singură linie de markup:

<head>

<script type = ''text/javascript'' src = ''jquery.js''></script>

</head>

Cu librăria jQuery se poate selecta elemente HTML și realiza „acțiuni” cu ele. Sintaxa de bază fiind: $(selector).acțiune()

un semn dolar pentru a defini cod jQuery

un (selector) pentru a găsi „query” elementele HTML

acțiune jQuery action() ce va fi executată pe elemente

În jQuery, metodele jQuery de manipulare a evenimentelor sunt funcții esențiale. Gestionarea de evenimente sunt metode ce se apelează când „se întâmplă ceva” în HTML. În mod uzual, se introduce codul jQuery al metodei de gestionare a evenimentului în secțiunea <head>.

AJAX și jQuery

jQuery are o bogată librărie de metode pentru dezvoltare AJAX. Am folosit jQuery AJAX pentru a obține date în format HTML de la server, utilizând atât cereri HTTP Get cât și cereri HTTP Post.

6.9 DayPilot

Pentru implementarea sistemului de administrare a rezervărilor de camere hoteliere am folosit DayPilot, componentă JavaScript Scheduler. Aceasta este o librărie dezvoltată de ASP .NET care oferă următoarele caracteristici:

creare și adăugare de evenimente

mutarea și redimensionarea evenimentelor prin drag and drop

ștergere de evenimente

afișare calendar cu diferite dimensiuni ale casetelor

posibilități se selectare unei anumite perioade

filtrarea evenimentelor după anumite criterii

suport pentru baza de date MySQL

încărcarea mai multor resurse dintr-o bază de date

actualizarea evenimentelor în timp real

control asupra interfaței utilizatori HTML5

integare de cod PHP

DayPilot este un set de controale AJAX cu ajutorul căruia se pot dezvolta aplicații ce implică lucru cu un calendar de evenimente.

ASP .NET este un framework pentru aplicațiile web, open-source, dezvoltat de Microsoft. Acesta permite programatorilor să construiască aplicații web și site-uri web dinamice. ASP .NET este succesorul lui ASP (Active Server Pages) și beneficiază de puterea platformei de dezvoltare .NET, și de setul de instrumente oferite de mediul de dezvoltare al aplicației „Visual Studio .NET”.

Cu ASP .NET ai acces la processing pipeline-ului unui request, care este un state machine, și poți segrega ușor și eficient bucăți de funcționalitate a aplicației.

6.10 MariaDB

MariaDB este un sistem de gestiune a bazelor de date (SGBD) relațional bazat pe MySQL, dezvoltat în totalitate de către comunitate. Acesta este distribuit sub Licența Publică Generală GNU (GPL) v2.1 și Licența Publică Generală Redusă GNU (LGPL) v2.1 (pentru librăriile client). MariaDB dorește să păstreze o compatibilitate foarte mare cu MySQL, fiind un „înlocuitor” al acestuia având API-uri și comenzi similare.

Motivul principal pentru care am ales acest sistem de gestiune a bazelor de date a fost că el rulează pe platforma Linux.

Asemeni oricărui SGBD, MariaDB este un server multi-user și multi-thread care permite stocarea, căutarea și sortarea datelor într-un mod foarte rapid și eficient.

Pentru a administra bazele de date am folosit aplicația gratuită scrisă în PHP, phpMyAdmin, care constituie un instrument de management al bazelor de date MySQL.

6.11 Apache

Cel mai simplu mod de a lucra cu PHP este să fie instalat pe calculatorul personal astfel încât acesta să devină un server web. Pentru acest lucru am instalat Apache HTTP server versiunea 2.4.7, care este o aplicație capabilă să accepte cereri și să transmită pagini web ca răspuns. La această aplicație s-a „atașat” mai apoi interpretorul PHP care va interveni în procesul de servire a paginilor web din cadrul site-ului „Hotel Unison”.

„Apache este un server web dezvoltat de o comunitate deschisă de programatori sub emblema Apache Software Foundation. Aplicația este disponibilă pentru o mare varietate de sisteme de operare incluzând Unix, FreeBSD, Linux, Solaris, Novell NetWare, Mac OS X, Microsoft Windows și OS/2.”

Interpretatorul PHP acționează ca o componentă aditională, o extensie a serverului web care este invocată ori de câte ori o pagină PHP este accesată. Această componentă procesează codul-sursă din pagină și apoi transmite rezultatul înapoi la web-server, ajungând în final în navigatoarele web a utilizatorilor.

Acest proces este prezentat în imaginea de mai jos:

Sursă: http://php.punctsivirgula.ro/serverside/

6.12 XSP

XSP este server web simplu și independent, scris în C# care găzduiește Sistemul ASP .NET pentru Linux și pentru alte sisteme de operare Unix. Acesta funcționează atât în cadrul runtime Mono pentru Linux, cât și în Microsoft runtime, făcându-l ușor de utilizat ca un server web pe orice platformă care suportă .NET.

XSP este soluția ideală pentru inițializarea și familiarizarea cu Mono și ASP .NET. Cel mai simplu mod de a porni XSP este de-al rula din cadrul directorului rădăcină al aplicației. Acesta va servi cererile pe portul 8080.

7 Manualul utilizatorului

La accesarea aplicației utilizatorul este întâmpinat de pagina „Acasă”.

Această pagină conține în partea de sus, logo-ul hotelului și un meniu de navigare. De asemenea, și în partea de jos a paginii se găsește un meniu de navigare pentru o parcurgere mai eficientă a site-ului.

Datele informative despre hotel sunt reprezentate prin text și imagini. Putem observa în partea centrală un slide cu imagini ale hotelului. Vizualizarea imaginilor se poate face, fie apăsând butonul „play”- care face tranziția automată, fie folosind săgețile „stânga”, „dreapta”.

Sub slide este un container care conține informații generale despre hotel și o listă verticală cu 3 poze, care au efect de buton. Aceste imagini redicționează utilizatorul către alte pagini ascunse: „Restaurant Unison”, „Servicii și facilități”, „Conferințe și evenimente”. (Ilustrația 2)

Pagina „Oferte speciale” conține toate ofertele speciale ale hotelului, organizate într-un accordion. Inițial este deschisă doar secțiunea de sus a accordionului în care se află conținutul primei oferte. Pentru vizualizarea celorlalte oferte se apasă fie pe titlul ofertei, fie pe săgeata din dreapta, astfel fiind selectată secțiunea din accordion care se dorește să fie afișată.

Conținutul ofertei este însoțit de un buton „Rezervă” care redirecționează utilizatorul către pagina de rezervare. (Ilustrația 3)

Pagina „Camere” este o pagină de prezentare a camerelor din hotel. În partea de sus se află un tabel informativ depre: tipul camerei, capacitate și tarif.

Pentru prezentarea cât mai compactă a tuturor tipurilor de camere existente în hotel, le-am clasificat și încadrat într-un meniu tabular. Astfel încât, la selectarea unui tab se deschide pagina de prezentare pentru tipul de cameră respectiv.

Prezentare conține o galerie de poze și un accordion în care se face descrierea camerei și se specifică facilitățile camerei și ale hotelului. Accordionul se accesează identic ca cel de pe pagina cu oferte.

(Ilustrația 4)

Pentru efectuare unei rezervări online, utilizatorul trebuie să urmeze o serie de pași. În cazul în care utilizatorul are deja un cont pe site, acesta trebuie să se autentifice completând formularul din centrul paginii. (Ilustrația 5)

Dacă nu are cont, se poate accesa săgeata din dreptul mesajului de înregistrare, aceasta are efect de buton și la un click pe ea se deshide un formular de înregistrare.

Formularul de înregistrare solicită informații despre date personale de identificare, date de contact și date de autentificare în baza de date. Se pot folosi butoanele „Reset” pentru resetarea câmpurilor introduse și „Înregistrare” pentru salvarea datelor. (Ilustrația 6)

Odată ce și-a creat un cont, utilizatorul se poate autentifica și trece la pasul următor apăsând butonul „Continuă”.

Autentificare se face pentru a salva în baza de date informații despre clienți, precum și istoricul rezervărilor efectuate de aceștia.

În cazul în care utilizatorii nu doresc să își creeze un cont pe site, ei pot face rezervări online la numărul de telefon afișat în josul paginii.

Trecerea la pasul următor presupune selectarea perioadei de timp pentru care se dorește a face rezervarea. (Ilustrația 7)

Data de sosire este setată implicit – data actuală, eventual aceasta se poate schimba după dorința utilizatorului.

Pentru setarea dății de plecare sunt două variante: fie se alege numărul de nopți din caseta numerică și aceasta completează automat caseta calendaristică, fie se selectează manual din calendarul care se deschide la un click pe caseta de input. (Ilustrația 7)

De menționat faptul că la trecerea de la un pas la altul, meniul breadcrumb se schimbă evidențiind pasul curent.

În ilustrația 8 este prezentat pasul 3, cel de alegere al unei camere pentru rezervare. Tipul de cameră se alege din lista de opțiuni. Clientul trebuie să specifice numărul de camere dorit pentru un anumit tip, precum și numărul de persoane pe cameră: adulți și copii. Copii se consideră persoane mai mici de vârsta de 12 ani.

La dorința clientului se pot adăuga alte tipuri de cameră apăsând butonul „Adaugă cameră” sau se pot șterge, apăsând butonul „X” din dreptul rândului respectiv.

Ca și funcționalitate, am implementat anumite reguli referitoare la selectarea numărului de camere și numărului de persoane: adulți și copii.

În dependență de perioada selectată la pasul anterior, numărul total de camere se modifică în conformitate cu disponibilitatea acestora.

La fel și pentru persoane, nu se pot selecta mai multe persoane decât capacitatea specifică fiecărui tip de cameră.

În cazul în care clientul selectează mai multe camere de un anumit tip atunci se calculează și se modifică numărul maxim de persoane disponibil pentru numărul de camere selectat.

Următorul pas este verificarea datelor introduse de către client. Pentru parcurgerea mai eficientă a acestora, se generează un tabel informativ. (Ilustrația 9)

Prețul total pentru rezervare se poate vedea imediat sub tabel.

Dacă un client are în istoric minim 2 rezervări făcute, acesta beneficiază de o reducere de 20% pe rezevare. În acest caz, se poate observa recalcularea prețului total. Prețul vechi se marchează cu roșu și se taie cu o linie, prețul nou se afișează în contiuare.

Acceptarea termenilor și condițiilor permite trecerea la pasul următor.

Ultimul pas este efectuarea plății online. Această procedură se realizează prin completarea formularului de plată. Mai întâi clientul trebuie să selecteze modalitatea de plată din lista de opțiuni, apoi să introducă date referitoare la card: data expirării, codul de securitate, codul cardului și date personale: Nume Prenume, Adresă, Telefon, Email.

La apăsarea butonului „Finalizare” apare un mesaj de confirmare a rezervării. În acel moment se salvează rezervarea în baza de date.

Pentru a afla detalii despre locația hotelului și informații de contact, utilizatorii pot accesa pagina „Contact”. (Ilustrația 12)

Aceasta le oferă localizarea virtuală pe hartă, un container care conține adresa fizică a hotelului și date de contact. În cazul în care apare o întrebare sau neclaritate, utilizatorii pot completă formularul din pagină.

Administrarea și gestiunea rezervărilor se poate face de către angajați sau administrator accesând pagina „Administrare”. O precondiție pentru accesarea paginii respective este autentificare în baza de date a site-ului. Această acțiune este posibilă din pagina „Autentificare” – Ilustrația 13.

Accesul în baza de date este securizat, astfel ca fiecare utilizator să aibă un nume de utilizator unic și o parolă criptată.

Pentru crearea conturilor în baza de date se poate accesa pagina „Înregistrare”. (Ilustrația 14)

Accesul pe această pagină este restricționat, doar administratorul site-ului o poate accesa.

Înregistrarea se realizează completând formularul din pagină.

Este important să fie respectate regulile de introducere a datelor. Mai mult de atât, de menționat faptul că administratorul are opțiunea de a înregistra mai multe tipuri de utilizatori.

Se pot utiliza butoanele „Reset” pentru resetarea câmpurilor introduse și „Înregistrare” pentru salvarea datelor.

În josul paginii este un link care te redirecționează pe pagina de autentificare.

Pagina „Administrare” este oglinda rezervărilor. (Ilustrația 16)

Vizualizarea rezervărilor se poate face în mai multe moduri:

după selectarea tuturor camerelor

după selectarea unui anumit tip de cameră

după setarea unei anumite date

după setarea unui anumit interval de timp

De asemenea, pentru o vizualizare mai compactă, administratorul poate modifica lățimea celulelor calendaristice. (Ilustrația 15)

În imaginea de mai jos este prezentată oglinda rezervărilor după toate camerele pe un interval de 2 luni, începând cu ziua curentă.

În cadrul paginii de administrare, se pot efectua mai multe acțiuni:

Adăugare rezervare nouă

Ștergere rezervare

Modificare rezervare, care presupune:

Redimensionare interval de timp

Mutare pe o altă cameră

Voi descrie în continuare fiecare acțiune:

Adăugare rezervare nouă

La selectarea cu mouse-ul din dreptul unei anumite camere, pe o anumită perioadă de timp, apare un formular pop-up care solicită introducerea numelui și prenumelui utilizatorului pentru care se dorește a face rezervarea, restul informațiilor completându-se automat.

Observație: administratorul poate crea o rezervare pe numele lui sau pe numele altor utilizatori. În cazul în care numele și prenumele de utilizator introdus nu există în baza de date, acesta îl crează automat.

(Ilustrația 17)

Important! – Nu se pot suprapune 2 rezervări. (Ilustrația 18)

Rezervările se fac în dependența de disponibilitatea camerelor.

Ștergere rezervare

În momentul poziționării mouse-ului pe o casetă de rezervare, în partea dreaptă sus a casetei apare un buton „X”, la apăsarea lui, rezervarea selectată se va șterge. În ilustrația 19 se poate observa că a fost ștearsă rezervarea pe numele Țurcanu Tatiana.

Redimensionare interval de timp

Operația de „resize” se poate aplica pe orice rezervare dorită, în cazul solicitării. În ilustrația 20 se poate observa redimensionarea rezervării pe numele Istrati Oana. Se presupune că acest client a solicitat prelungirea termenului de ședere. În aces caz, administratorul prin mișcarea drop-down cu mouse-ul poate modifica ușor rezervarea respectivă.

Mutare pe o altă cameră

Există situații când administratorul este nevoit să mute o rezervare de pe o cameră pe alta. De exemplu, din cauza unor probleme tehnice sau renovări într-o anumită cameră, aceasta devine indisponibilă pentru cazare. Și atunci procedura de mutare se poate realiza foarte ușor prin selectarea rezervării cu mouse-ul și mutarea ei prin acțiunea drop-down.

În continuare voi prezenta un exemplu în acest sens:

Clientul Guțu Andreea a făcut o rezervare pe camera cu numărul 34, care este de tip double. (Ilustrația 21)

Din anumite motive, această cameră a devenit indisponibilă pentru cazare. În acest caz, administratorul va face o mutare prealabilă.

Se poate observa că în momentul mutării rezervării rămâne o umbră.

Mutarea a fost făcută pe camera cu numărul 25, păstrându-se tipul de cameră. (Ilustrația 22)

În urmă oricărei acțiuni, apare un mesaj de confirmare marcat cu portocaliu.

8 Concluzii

În această lucrare am realizat o aplicație web de prezentare a unui hotel integrând toate informațiile de care are nevoie un client cât și posibilitatea de a rezerva online un anumit număr de camere. Chiar dacă această aplicație face referire la un hotel simulat, care nu există în realitate, aceasta poate fi o excelentă bază de plecare pentru o aplicație web de prezentare în domeniul de cazare, o aplicație care ține cont de toate regulile de rezervare care sunt practicate acum în întreaga lume, o aplicație care promovează un client eficient și rentabil din punct de vedere economic.

Prin această aplicație s-a dorit atingerea următoarelor obiective:

crearea unui site web de prezentare și promovare a serviciilor hoteliere

posibilitatea clienților de a face rezervări online

oferirea reducerilor pentru clienții fideli

prezentarea și clasificarea camerelor în funcție de categorie

gestionarea rezervărilor de către administrație

Din punct de vedere practic, consider că scopul lucrării a fost atins și rezultatul final poate fi folosit cu succes pentru prezentarea și promovarea serviciilor diverselor unități de cazare: hoteluri, pensiuni, vile, moteluri, cabane, complexuri turistice.

În viitor, aplicația poate fi îmbunătățită, actualizată și modificată în conformitate cu necesitățile și specificațiile fiecărei unități de cazare.

Se poate adăuga o funcționalitate de gestiune a camerelor: adaugare, editare, ștergere direct din interfața destinată administrației.

Bibliografie

[1] Marius Mănescu, Cum realizăm un site web.

http://www.webit-ps.com/tutoriale/HTML/1.pdf

[2] Documentație Brackets

http://brackets.io/

[3] Documentație HTML

https://en.wikipedia.org/wiki/HTML

https://html.spec.whatwg.org/multipage/

[4] Limbaj de marcare https://ro.wikipedia.org/wiki/Limbaj_de_marcare

[5] Documentație CSS

https://ro.wikipedia.org/wiki/Cascading_Style_Sheets

http://www.w3.org/Style/CSS/Overview.en.html

[6] Documentație Bootstrap

http://dana-damoc.eu/blog/introducere-la-bootstrap-3/

https://en.wikipedia.org/wiki/Bootstrap_(front-end_framework)

[7] Documentație PHP

http://php.punctsivirgula.ro/serverside/

Bill McCarty, PHP 4, Editura Teora, 2001, pag.15

http://php.net/

[8] Documentație JavaScript

https://ro.wikipedia.org/wiki/JavaScript

Ciprian-Daniel NEAGU, Daniela NEAGU, Hypermedia , Editura MatrixRom, București, pag.74

[9] Documentație AJAX

Volum coordonat de Sabin-Corneliu Buraga, Tendințe actuale în proiectarea și dezvoltarea aplicațiilor Web, Volumul de lucrări ale celei de a V-a ediții a worksho-ului <Web /> dedicat tehnologiilor Web, Iași 26-27 noiembrie 2005, pag. 9

[10] Documentație jQuery

http://dpw.bistrita.ro/wp-content/uploads/jQuery_ro.pdf

[11] Documentație DayPilot

http://www.daypilot.org/tutorials/

[12] Documentație ASP .NET

https://ro.wikipedia.org/wiki/ASP.NET

[13] Documentație MariaDB

https://mariadb.org/en/about/

[14] Documentație Apache (server) https://ro.wikipedia.org/wiki/Apache_(server)

[15] Documentație Server XSP

http://www.mono-project.com/docs/web/aspnet/

[16] Tutoriale pentru realizarea aplicației

http://www.marplo.net/

http://php.punctsivirgula.ro/

https://www.codecademy.com/

http://www.wikihow.com/Create-a-Secure-Login-Script-in-PHP- and-MySQL

http://code.daypilot.org/

Similar Posts