Tehnologii Utilizate In Proiectarea Si Implementarea Unei Aplicatii Privind Comertul Electronic
I. Introducere
Comerțul electronic și cumpărăturile online
Comerțul electronic mai este cunoscut și sub denumirea de Electronic Commerce sau E-Commerce este demersul de cumpărare sau vânzare prin intermediul transmiterii de date la distanță, demers specific politicii expansive a marketingului companiilor comerciale, dezvoltându-se o relație de servicii și schimb de mărfuri între ofertant și viitorul cumparător. Acest tip de comerț cuprinde întreg procesul online de dezvoltare, marketing, livrare, vânzare, servicii și plăți ale serviciilor și produselor.
În tranzacțiile comerciale clasice se disting următoarele etape: informarea comercială referitoare la tranzacție și anume cercetarea de marketing, încheierea contractului comercial general, comandarea/vânzarea produsului sau a serviciului, respectiv plata. În cadrul comerțului electronic pot fi tranzacționate bunuri și servicii digitale (sunt excluse fazele logistice), iar locul în care sunt tranzacționate aceste bunuri digitale poartă denumirea de piață electronică, sau e-marketspace, acesta fiind contextul virtual în care cumpărătorii și vânzătorii se găsesc unii pe alții și tranzacționează afaceri electronice.
Cumpărăturile online reprezintă procesul prin care consumatorul cumpără bunuri sau servicii de la un vânzător în timp real, fără a utiliza un serviciu intermediar, prin intermediul Internetului. Există mai multe categorii de comerț online, iar dintre acestea amintesc: B2B (business-to-business, în acest caz toți participanții sunt companii sua organizații), B2C (business-to-consumer, în acest caz companiile vând la cumpărători individuali), C2B (consumer-to-business, în cazul în care o persoană fizică utilizează Internetul pentru a-și vinde produsul către firme), C2C (consumer-to-consumer, tranzacții online între persoane fizice), precum și B2G (business-to-government), G2B (government-to-business), sau G2C (government-to-consumer).
Pentru a se realiza cumpărăturile online, fie că e vorba de persoane fizice, firme, organizații, sau guverne, aceștia trebuie să aibe acces la un calculator, la un cont bancar și la un card de debit.
Procesul prin care se efectuează cumpărăturile online este următorul: odată ce a găsit produsul dorit, consumatorul utilizează un “cărucior online” (sau shopping cart), sau își rezervă drepturile asupra acelui bun. Odată ce a selectat produsele dorite, consumatorul este îndreptat spre a completa un formular cu datele sale personale (nume, prenume, adresă, data nașterii) și datele sale privind cardul de credit (numărul cardului, numele și prenumele de pe card, data expirării cardului, precum și seria CCV), acest lucru fiind necesar pentru a efectua plata online. Toate aceste date sunt criptate și nu ajung în baza de date ale vânzătorului, ci acestea sunt stocate (în cazul în care consumatorul este client înregistrat al magazinului respectiv) de către o firmă specializată în protecția acestor tipuri de date.
Avantajele și dezavantajele cumpărăturilor online
Având ca suport rețeaua Internet și eventual și utilizarea unor pachete de programe software specifice, comerțul electronic a avut și are avantaje și beneficii pentru firme, consumatori individuali și societate.
Pentru firme, acestea ar fi:
Extinderea pe piețele internaționale prin asigurarea de servicii și performanță;
Asigurarea unei deschideri totale în privința relațiilor cu clienții: aceștia pot căpăta o imagine aproape completă asupra tuturor angajaților, ofertanților și partenerilor lor.
Scăderea costului de creare, procesare, distribuire, păstrare și regăsire a informației, până acum bazată pe hârtie, prin crearea unui sit web atractiv cu funcția unui magazin virtual. Siturile web personalizate, sugestiile pentru cumpărare și ofertele speciale personalizate pot într-o oarecare măsură substitui interacțiunile de tip față în față, de tip tradițional;
Creează posibilitatea modelării produselor și serviciilor după nevoile cumpărătorilor și simplificarea procedurilor;
Costuri de comunicație mai mici.
Seriozitate și siguranță. Serverele paralele, redundanța hardware-ului, tehnologia fail-safe, încriptarea informației și firewall-urile pot îndeplini această cerință;
Creșterea competitivității și raționalizarea proceselor de afaceri, prin restructurări interne și prin tehnologii ale informației.
Construirea unui lanț valoric electronic, în care se pune accentul pe un număr limitat de competențe-cheie – opusul unui magazin "cu o singură oprire". (Magazinele electronice pot fi atât speciale cât și generale, dacă sunt programate corect.)
Pentru consumatori, avantajele comerțului online sunt:
Posibilitatea consumatorilor să cumpere sau să facă tranzacții la orice oră din zi, în tot timpul anului, din aproape orice locație;
Acordă consumatorilor mai multe posibilități de alegere a produselor și prețurilor;
Consumatorilor li se dă siguranță asupra valorii. Vânzătorii pot realiza acest lucru oferind un produs sau o linie de produse care atrage potențialii clienți prin prețuri competitive, la fel ca și în comerțul ne-electronic;
Permite o livrare rapidă a produselor și/sau serviciilor (în anumite cazuri);
Consumatorii pot să primească informații relevante în decursul câtorva secunde, și nu zile sau săptămâni;
Asigurarea motivației consumatorilor de a cumpăra și, la nevoie, de a și returna. Vânzările promoționale pot implica cupoane, oferte speciale sau reduceri. Linkurile de pe alte situri web și programele afiliate de reclame pot fi de asemenea de ajutor;
Face posibilă participarea în licitații virtuale;
Îndemnarea consumatorilor la consum. Comercianții din Internet pot asigura acest tip de ajutor printr-o amplă informare comparativă și prin facilități bune de căutare;
Permite consumatorilor să interacționeze cu alți cumpărători în comunități electronice și să compare experiențele;
Lăsând clienții să se ajute singuri. Asigurând funcționarea unui sit de autoservire, ușor de folosit fără asistență, poate fi de ajutor în acest sens;
Facilitează competiția, ceea ce rezultă în scăderea prețurilor.
Familiarizează consumatorii cu tehnologia și îi ține pe aceștia în pas cu ultimele noutăți.
Pentru societate, comerțul online ajută la:
Crearea unui "simț comun" al comunității comerciale, de exemplu prin chaturi, foruri ce solicită implicarea clientului, scheme de loialitate și programe de afinitate;
Dă posibilitatea mai multor persoane să lucreze / să cumpere de acasă, ceea ce micșorează traficul rutier și poluarea aerului;
Permite ca anumite mărfuri să fie vândute la prețuri mai scăzute, cu avanateje pentru cei cu venituri mai mici;
Crește eficiența și/sau îmbunătățesc calitatea;
Pune la dispoziție o organizare suficient de atentă și agilă pentru a răspunde rapid la orice schimbări din mediul economic, social și fizic.
Administrarea hotelieră
Toate elementele prezentate anterior se aplică perfect în cazul unui hotel, prin simplul fapt că există un vânzător (hotelul) și un client (persoane fizice sau firme și organizații).
Un hotel este un stabiliment care oferă servicii de cazare contra cost, în general pentru perioade scurte de timp. Hotelurile oferă adesea clienților și alte servicii, cum sunt cele de restaurant, sau de săli pentru reuniuni și conferințe.
Hotelurile se clasifică în funcție de gradul de confort și serviciile oferite. Clasificarea diferă de la țară la țară și se poate marca prin (de la cele mai austere la cele mai luxoase):
stele (de la 1 la 5);
litere (de la E la A);
clase (de la a patra la întâi).
Pentru o administrare cât mai eficientă, hotelurile utilizează aplicații online sau offline pentru stocarea datelor despre clienți, angajați, contracte, prezentarea camerelor etc, toate aceste date fiind stocate în baza de date a programului respectiv (excepți făcând datele privind cărțile de credit).
Comerțul online în domeniul hotelier
Din fericire pentru comercianți, hotelurile reprezinta un element important în comerțul online, deoarece din ce în ce mai mute hoteluri preferă să se aprovizioneze utilizând cumpărăturile online și să își plătească facturile si taxele tot prin intermediul Internetului. Managerii de hotel profită de avantajele tranzacțiilor online prezentate anterior, acest lucru începând să devină o obișnuință atât pentru managerii de mari hoteluri, cât și pentru propiretarii de moteluri, pensiuni, sau cabane.
Clienții hotelurilor au de asemenea avantaje utilizând metodele de plată și rezervare online, câștigând prin aceasta siguranță și totodata timp, deoarece datele lor personale vor fi protejate atât de către aplicația hotelului la care au făcut rezervare, cât și de banca la care au contractul pentru cartea de credit cu care, pot plăti un avans sau chiar integral durata șederii la hotel.
II. Tehnologii utilizate
II.1 HTML
HTML sau Hyper Text Markup Language este, așa cum o sugerează și definiția, un limbaj de marcare pentru hypertext (termenul se referă la modalitatea în care se fac legăturile între diferite documente HTML). O pagină hypertext nu este doar o simplă pagină de text, deoarece pe lângă textul propriu-zis, mai conține legături (hiperlegături) către alte pagini unde se găsesc texte care abordează același subiect etc.
Un browser de Internet nu poate citi decât fișiere HTML (fișiere cu extensia .html sau .htm), iar afișarea corectă a elementelor unui text o poate face doar cu ajutorul unor comenzi. Crearea și editarea paginilor de Internet se poate face în orice program de editare de texte, pornind chiar de la Notepad-ul sistemului de operare Windows.
În general, fișierul principal al unui site este numit index.html iar instrucțiunile folosite se numesc tag-uri, care se scriu între semnele < și >. Conținutul oricărui fișier HTML trebuie inclus între tag-urile <HTML> și </HTML>. Ca structură, pagina are două părți: <HEAD> și </HEAD>, care conține informații de identificare a paginii și o parte delimitată de <BODY> și <//BODY> ce conține informațiile de prezentat efectiv in pagină. Titlul de asemenea va fi încadrat între tag-urile <TITLE> și <//TITLE>, iar acestea vor fi incorporate între <HEAD> și </HEAD>.
O pagină de bază de tip HTML are așadar structura următoare, structură pe care am utilizat-o în toate fișierele unde aveam nevoie de cod HTML:
<html>
<head> <title></title>
[stiluri pentru formatarea textului, scripturi și link-uri către fișiere externe]
</head>
<body>
[conținut pagină]
</body>
</html>
Am folosit în construcția aplicației web numeroase elemente HTML cu scopul de a realiza o interfață cât mai prezentabilă, elemente pentru editarea și structurarea formei, mărimii și culorilor de text, precum și de prezentare și tranziții. Pentru marcarea unor titluri și subtitluri, existente în codul HTML, am utilizat etichetele <h1>,<h2>, …, <h6>, fontul l-am stabilit utilizând etichetele <strong>,<b>, însă pentru a da textului culoare, mărime, sau un tip de font, utilizat un stil CSS din interiorul etichetei respective.
Navigarea între pagini am făcut-o posibilă prin utilizarea etichtei <a href=”nume_pagină.php”>, unde “a” crează hyperlink-ul, și “href” setează URL-ului legăturii respective (atât pentru HTML, cât și pentru PHP).
De asemenea, am realizat tabele și formulare cu ajutorul etichetelor <table>, respectiv <form>. Am introdus în tabele rânduri noi folosind eticheta <tr> (table row), cât și celule noi cu ajutorul etichetei <td>. Aceste două elemente au fost obligatorii în realizarea aplicației web, deoarece datele apelate din baza de date sunt afișate în tabele, iar formularele sunt folosite pentru crearea de conturi noi / editarea paginilor din zona administrativă etc.
Listele neordonate sunt realizate cu ajutorul etichetei <ul>, iar pentru adăugarea de itemi noi, am utilizat etichetele <li>. Paragrafele au fost implementate utilizând eticheta <p>, iar pentru trecerea la rând nou, am utilizat tag-ul <br>.
II.2 CSS (Cascading Style Sheets)
CSS (Cascade Style Sheets) este un standard folosit în vederea formatării elementelor unui fișier HTML, XHTML, sau XML.
Beneficiile CSS sunt:
formatarea este introdusă într-un singur loc pentru tot documentul
editarea rapidă a etichetelor
datorită introducerii într-un singur loc a etichetelor se obține o micșorare a codului paginii, implicit încarcarea mai rapidă a acesteia
Sintaxa CSS este structurata pe 3 nivele:
nivelul 1, fiind proprietățile etichetelor din documentul HTML, tip inline
nivelul 2 este informația introdusă în blocul HEAD, tip embedded
nivelul 3 este reprezentat de comenzile aflate în pagini separate, tip externe
Cea mai mare importanță (suprascrie orice alt parametru) o are sintaxa de nivelul 1 iar cea mai mica importanță o are cea de nivelul 3. Totodată, folosind un fișier extern (sau nivel 3, extenisa acestora fiind .css) care să conțină comenzi CSS este foarte practic, deoarece poate fi utilizat la mai multe fișiere HTML, eliminând timpul necesar introducerii codului corespunzător în fiecare pagină și totodată editarea lor într-un singur loc pentru mai multe fișiere.
Fiecare regulă sau set de reguli constă din unul sau mai mulți selectori (selectors) și un bloc de declarație (declaration block). Un bloc de declarație constă la rândul lui dintr-o listă de declarații în ramuri. Fiecare declarație proprie constă dintr-o proprietate, semnul de punctuație (:) și o valoare. Pentru declarații multiple într-un singur bloc de declarație se va folosi semnul de punctuație (;), pentru a putea separa fiecare declarație în parte.
Selectorii universali sunt reprezentați printr-un asterix (*) și pot fi atribuiți oricărui element dintr-un document HTML. CSS mai pot atribui valori și prin intermediul claselor sau identificatorilor elementelor HTML.
Sintaxă: selector {proprietate:valoare ; […] ; proprietate n:valoare n;}
Exemplu: h1 {color:blue ; font-size:12px;}
Exemplu selector universal: * {color:blue; font-size:12px;}
Exemplu clasă CSS: .nume_clasă {[…]}
Exemplu identificator CSS: #nume_identificator{[…]}
În cazul aplicației web realizate, am utilizat la utilizarea CSS de nivelul 3 (fișiere externe cu extensia .css apelate în cod), deoarece, cum am precizat anterior, acest lucru mi-a ușurat munca, folosind proprietățile respective la mai multe fișiere HTML / PHP.
Spre exemplu, următoarea secvență de cod
*{
margin: 0px;
padding: 0px;
}
am utilizat-o pentru implementarea marginii și a padding-ului iar
table tr
{
line-height: 30px;
}
pentru a stabili înălțimea liniei în tabele.
Cu ajutorul proprietății border, am implementat diverse stiluri de linii și culoare în cazul tabelelor, precum și a unor etichete <div>.
Dintre elementele CSS utilizate pentru o aranjare ordonată a paginii, amintesc: width (determinarea lungimii elementelor HTML), height (determinarea lățimii elementelor HTML), auto (asigură poziționarea automată a unor elemente HTML prin intermediul browserului), padding (folosirea spațiilor albe pentru redarea unui spațiu gol între diverse elemente ale unui document HTML), margin-top, margin-left, margin-right, acestea fiind utilizate împreună cu dimensiunile în pixeli, pentru amplasarea corectă a unor elemente în pagină.
În realizarea aplicației web, am utilizat elemente de CSS3, deoarece acesta include stiluri dinamice // animații și am reușit să le fac funcționale în browserele Mozilla Firefox v.3.6+ și Google Chrome.
II.3 jQuery UI
jQuery este o bibliotecă JavaScript care se poate folosi pentru următoarele manipularea elementelor CSS, efecte și animații, cereri tip Ajax, înregistrarea și modificare evenimentelor din browser pentru o dezvoltare web mai rapidă. jQuery a fost proiectat să schimbe modul în care programatorul este obișnuit să scrie JavaScript. jQuery a fost gândit să fie cât mai mic posibil, disponibil în toate versiunile de browsere importante existente, și să respecte filosofia "Unobtrusive JavaScript". Biblioteca a fost lansată in 2006 de către John Resig.
Aflat sub licență MIT și GNU General Public License, jQuery este un software liber din categoria open source. Plugin-urile sau extensiile sunt unele dintre cele mai interesante aspecte ale jQuery. Arhitectura sa permite programatorilor să dezvolte subaplicații bazate în biblioteca principală care extind funcțiile de bază jQuery cu funcții specifice plugin-ului. În acest fel, biblioteca principală poate ocupa foarte puțin spațiu, iar extensiile necesare în anumite pagini web pot fi încarcate la cerere, doar când este nevoie de ele.
Există un set de extensii principal numit jQuery UI (jQuery User Interface), utilizat totodată și la aplicația web NUME APLICATIE. jQuery UI ofera un set de extensii pentru interactivitate de bază, efecte mai complexe decât cele din biblioteca de bază și teme de culori. Avantajul jQuery UI față de alte extensii este că dezvoltarea și testarea acestor componente se face în paralel cu dezvoltarea bibliotecii principale, minimizând riscul de incomptibilitate.
Am utilizat în cadrul aplicației mele jQuery UI la implementarea părții de rezervare la hotel, acest lucru fiind inclus în fișierul js/jquery-ui.js începând de la liniile:
* jQuery UI Datepicker 1.8.12
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Datepicker
*
* Depends:
* jquery.ui.core.js
*/
În cadrul jQuery UI, declararea lunilor calendaristice se face astfel:
monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]
Funcția completă utilizată la selectarea datei calendaristice de către client conține în total 81 de linii de cod, acestea fiind oferite ca open-source de către MIT și GPL. Toate pluginurile jQuery UI au fost testate pe browserele Internet Explorer 6.0+, Firefox 3+, Safari 3.1+, Opera 9.6+ și Google Chrome.
II.4 PHP (Hypertext PreProcessor)
Spre deosebire de paginile HTML care pot fi verificate și pe calculatorul local, paginile PHP nu pot fi verificate decât dacă sunt găzduite pe un server web care are instalat PHP.
La accesarea unei pagini HTML, serverul care o găzduiește trimite pagina HTML către browser pentru afișare. În cazul unei pagini PHP, serverul citește codul PHP, îl interpretează și generează dinamic pagina HTML care este trimisa browserului spre afișare, iar pentru acest motiv, programatorii folosesc PHP pentru construirea unor pagini cu continut dinamic.
Fisierele PHP au extensia php, iar acestea se pot crea și edita cu ajutorul editorului de text Notepad / Notepad++, însă cel mai indicat este un editor specializat care va indica și numărul liniilor, lucru util la depanarea scripturilor.
Când PHP-ul parcurge un fișier, el de fapt "citește" textul până când întalneste una din etichetele speciale care-i spun să înceapă să interpreteze textul ca pe cod PHP și se execută codul până când este întâlnită eticheta de închidere, apoi se "citește" din nou textul mai departe. Acesta este motivul pentru care se poate adauga cod PHP in interiorul HTML-ului.
De menționat este faptul că:
în cazul funcțiilor, nu se face diferența între utilizarea literelor mari sau mici
pentru variabile se face diferența la utilizarea literelor mari sau mici
închiderea unui rând se face obligatoriu cu caracterul ;
ghilimelele se folosesc pereche "…" sau '…', folosirea "…' sau '…" constituie o eroare
Codul PHP este delimitat de unul din urmatoarele seturi de etichete de deschidere si inchidere:
<?php ?> etichete recomandate
<script language="php"?> </script>
<? ?> folosirea lor necesita anumite setari pe server
<% %> etichete tip ASP, folosirea lor necesita anumite setari pe server
Funcția echo este folosita pentru afisarea informatiilor delimitate de ghilimele. Nu uitati sa inchideti randul cu ;. Similar functiei echo este functia print.
In situatia in care scriptul nu este scris corect PHP-ul va afisa eroarea indicandu-va si locul unde aceasta apare. Erorile sunt afisate doar daca serverul este setat corespunzator (in php.ini este setat display_errors=On si error_reporting=E_ALL).
fisierul PHP poate contine intre etichetele <html> si </html> blocuri PHP delimitate de <?php ?>
<html>
<head><title>Exemplu0_3</title>
</head>
<body>
Bloc HTML<br>
<?php
echo "Bloc PHP";
?>
</body>
</html>
În PHP, există trei metode prin care se poate adauga un comentariu, care evident nu va fi afișat în browser, ci are ca scop adăugarea de informații necesare programatorului.
Tot ce urmeaza dupa caracterele // sau # este considerat comentariu. De exemplu:
// Urmeaza un comentariu in PHP
Un comentariu format din mai multe linii este incadrat de /* si */. De exemplu:
/* Comentariul in PHP
scris pe doua linii */
În PHP, variabila este un container de date care poartă un nume și i se poate atribui o valoare care poate fi modificată de mai multe ori sau salvată într-o bază de date. Numele variabilei începe cu simbolul $, urmat de orice litera mică (a-z), sau mare (A-Z), sau caracterul _, însă niciodată cu o cifră și nu poate conține spații goale (exemplu: $tudor_hering). Pentru evitarea problemelor, este recomandat ca numele variabilei să fie ales sugestiv, spre exemplu (adăugare și afișare):
<?php
$ziua="22";
$luna="12";
$anul="1995";
echo "Data nasterii este ".$ziua.".".$luna.".".$anul."";
?>
PHP oferă un număr mare de variabile predefinite oricărui script care rulează, iar începând cu versiunea 4.2.0, valoarea default pentru directiva register_globals este off (aceasta afecteaza setul de variabile predefinite disponibile în scop global). Spre deosebi re variabilele globale, variabilele statice există doar în scopul funcției locale dar își pierde valoarea când execuția scriptului încetează.
Un alt element PHP utilizat și în cadrul aplicației web NUME APLICATIE este condiționalul if, această instrucțiune având sintaxa următoare:
if (conditie) {
instructiuni executate daca este indeplinita conditia
}
În cadrul proiectului, am utilizat instrucțiunea if în diverse locuri, spre exemplu:
<?php
if(!empty($_SESSION['User.email'])){
include('includes/user_menu.php');
}else{
include('includes/user_login.php');
}
?>
În această secvență de cod, se verifică dacă sesiunea nu este goală; dacă intră pe prima rarmură (not empty), se include fișierul user_menu.php, care conține datele despre pagina ce va fi afișată în cazul în care clientul este autentificat pe site, iar în caz contrat, se va include fișierul user_login.php, care conține formularul de intrare în cont a utilizatorului, formular ce se regăsește în headerul paginii.
Un alt element PHP important este switch, asemănătoare funcției if, însă condiția trebuie să aibe mai mult de două valori. Funcția switch am utilizat-o în fișierul client.php, pentru o mai ușoară preluare a paginii din baza de date (includes/db_config.php).
Două funcții folosite pentru includerea unor fișiere externe în paginile php sunt include și require. Diferența dintre cele două funcții constă în faptul că dacă include dă greș, scriptul generează o avertizare dar funcționează în continuare, în timp ce la require se termină executarea scriptului. Pentru a exemplifica mai bine diferența dintre cele două, voi folosi două secvențe de cod din aplicația NUME APLICATIE:
require('includes/db_config.php');
În acest caz, require înștiințează necesitatea bazei de date.
<?php include('includes/home_page.php'); ?>
În acest caz, am inclus fișierul ce conține codul sursă al paginii principale, dar scriptul va rula și în cazul în care apar unele alerte, deoarece în pagină au mai fost incluse și alte scripturi.
Funcția este o secvență de cod ce poate fi utilizată de mai multe ori în interiorul marilor scripturi și este prezentată în script prin declararea ei. Funcția chemată (apelată / invocată) va conține același număr de argumente ca în declarație. În cadrul proiectului, am utilizat funcții pentru realizarea ferestrei pop-up care permite utilizatorului să selecteze o dată din calendar:
$(function() {
$( "#arival_date" ).datepicker();
});
Dintre elementele PHP importante utilizate și în aplicația web NUME APLICATIE este algoritmul MD5. Acest algoritm calculează pentru un șir oarecare o sumă de control corespunzătoare, un șir va întoarce întotdeauna aceeași sumă de control, însă orice modificare a șirului, chiar o modificare infimă, duce la modificari majore a sumei de control MD5.
MD5 este numit adesea un algoritm de criptare, lucru nu tocmai potrivit deoarece algoritmul MD5 nu permite decriptarea datelor. Suma de control MD5 (MD5 hash) este un număr cu lungimea de 128 biți. Uzual, acest număr este reprezentat ca un șir de 32 de caractere, reprezentarea hexazecimală a numărului respectiv. Indiferent de lungimea șirului, algoritmul asigură obținerea unei sume MD5 cu lungimea de 128 de biți (32 caractere în reprezentarea hexazecimală); chiar și pentru un șir vid, acesta returnând "d41d8cd98f00b204e9800998ecf8427e".
O caracteristică importantă este faptul că nu se poate determina șirul care a generat o anumita suma de control MD5, acest lucru recomandând MD5 pentru stocarea parolelor și alte verificari de integritate a datelor.
Algoritmul MD5 are așadar utilizări în:
protejarea parolelor – MD5 este un algoritm util în protejarea parolelor datorită incapacității sale de decriptare a șirului inițial
validarea datelor – algoritmul MD5 este adesea folosit pentru validarea datelor la transport
validarea fișierelor la download, aplicând un procedeu ca mai sus, mulți distribuitori de produse software calculează sumele MD5 pentru pachete de instalare pe care le produc, punând la dispoziția utilizatorilor aceste valori. Astfel, orice utilizator care descarcă o versiune a softului respectiv dintr-o sursă originală sau alternativă (mirror) va putea determina autenticitatea softului respectiv.
În cadrul proiectului, am apelat la MD5 pentru criptarea parolelor utilizatorilor site-ului, precum și a datelor clienților ce doresc să efectueze un avans la rezervarea camerei:
password = '".md5($password)."'
II.5 MySQL
MySQL este un sistem de gestiune a bazelor de date relațional, produs de compania suedeza MySQL AB și distribuit sub Licența Publică Generală GNU. Este cel mai popular SGBD open-source la ora actuală, fiind o componentă cheie a stivei LAMP (Linux, Apache, MySQL, PHP).
Folosit deseori împreună cu limbajul de programare PHP, cu MySQL se pot construi aplicații în orice limbaj major. Există multe scheme API disponibile pentru MySQL ce permit scrierea aplicațiilor în numeroase limbaje de programare pentru accesarea bazelor de date MySQL, cum ar fi: C, C++, C#, Java, Perl, PHP, Python, sau FreeBasic, fiecare dintre acestea folosind un tip spefic API. O interfață de tip ODBC denumită MyODBC permite altor limbaje de programare ce folosesc această interfață, să interacționeze cu bazele de date MySQL cum ar fi ASP sau Visual Basic. În sprijinul acestor limbaje de programare, unele companii produc componente de tip COM/COM+ sau .NET (pentru Windows) prin intermediul cărora respetivele limbaje să poată folosi acest SGBD mult mai ușor decât prin intermediul sistemului ODBC. Aceste componente pot fi gratuite (ca de exemplu MyVBQL) sau comerciale.
Licența GNU GPL nu permite încorporarea MySQL în softuri comerciale; cei care doresc să facă acest lucru pot achiziționa, contra cost, o licență comercială de la compania producătoare, MySQL AB.
MySQL este componentă integrată a platformelor LAMP sau WAMP (Linux/Windows-Apache-MySQL-PHP/Perl/Python). Popularitatea sa ca aplicație web este strâns legată de cea a PHP-ului care este adesea combinat cu MySQL și denumit Duo-ul Dinamic. În multe cărți de specialitate este precizat faptul ca MySQL este mult mai ușor de invățat și folosit decât multe din aplicațiile de gestiune a bazelor de date, ca exemplu comanda de ieșire fiind una simplă și evidentă: „exit” sau „quit”.
Pentru a administra bazele de date MySQL se poate folosi modul linie de comandă sau, prin descărcare de pe internet, o interfață grafică: MySQL Administrator și MySQL Query Browser. Un alt instrument de management al acestor baze de date este aplicația gratuită, scrisă în PHP, phpMyAdmin.
MySQL poate fi rulat pe multe dintre platformele software existente: AIX, FreeBSD, GNU/Linux, Mac OS X, NetBSD, Solaris, SunOS, Windows 9x/NT/2000/XP/Vista.
Pentru conectarea la mediul mySQL și bazele de date, se introduce adresa localhost/phpmyadmin în browser, iar aici se pot crea, edita și șterge baze de date, tabele și interogări diverse. Dintre operațiile cu baze de date amintesc: CREATE (creează o bază de date sau un tabel), DROP (șterge o bază de date sau un tabel), INSERT (adaugă înregistrări în tabel), DELETE (șterge înregistrări din tabel), UPDATE (updatează înregistrările dintr-un tabel), SELECT (selectează un tabel) și ALTER (alterarea unui tabel).
De menționat este faptul că pentru crearea unei baze de date, este nevoie de MySQL, PHP (instalat pe server) și un server, în acest caz, cel mai utilizat fiind Apache (pentru care e nevoie de software-ul gratuit XAMPP). În cadrul aplicației web NUME APLICATIE, baza de date este apelată utilizând secvența de cod require('includes/db_config.php');
II.6 XAMPP
Software-ul gratuit XAMPP are toate uneltele pentru setarea unui web server și mentenanța acestuia.
XAMPP vine de la X (numărul mare de sisteme pentru care oferă suport), Apache, MySQL, PHP și Perl. Cunoscut anterior ca WAMP sau WAMPP, această versiune specială pentru Windows este gratuită și include următoarele unelte: Apache 2.2.4, MySQL 5.0.33, PHP 5.2.1 & PHP 4.4.5 (cu PEAR și Switch), MiniPerl 5.8.7, OpenSSL 0.9.8d, phpMyAdmin 2.9.2, XAMPP Control Panel 2.4, Webalizer 2.01-10, Mercury Mail Transport System for Win32 and NetWare Systems v4.01a, FileZilla FTP Server 0.9.22, SQLite 2.8.15, ADODB 4.93a, Zend Optimizer 3.2.2 și XAMPP Security. Puteți descărca versiunea adecvată pentru suport Linux, MacOS sau Solaris.
Fig. III.1.1.1. Structura paginilor website-ului
Doar clienții înregistrați și autentificați pe site pot avea acces la paginile:
Circuite
Adaugă circuit
Oferte
Bilete de avion
Adaugă bilet
Listă bilete
III.1.1.1. Structura paginilor accesibile vizitatorilor
După cum se poate observa în figura III.1.1.1.1 și în cele ce uremează, un utilizator care accesează pagina web are acces în următoarele secțiuni:
Despre
Stațiuni
Galerie Foto
Contact
Obiective
Autentificare
Înregistrare utilizator
Fig. III.1.1.1.1. Structura paginilor accesibile vizitatorilor website-ului
III.1.1.2. Structura paginilor accesibile utilizatorilor autentificați
Odată autentificat, față de posibilitățile anterioare apar și posibilitățile de realizare a unor circuite turistice cu obținerea unui preț aproximativ, ofertelor și a biletelor de avion unde se poate adăuga un bilet în vederea rezervării sau se poate vizualiza lista de bilete pentru utilizatorul respectiv.
Fig. III.1.1.2.1. Structura paginilor accesibile clienților website-ului
Astfel față de simpli vizitatori, utilizatorii vor putea accesa după autentificare, pe lângă paginile accesibile vizitatorilor, meniul din car vor putea alege una din opțiunile: circuit, ofertă sau bilet de avion. Structura paginilor accesibile clienților este ilustrată în figura III.1.1.2.1.
III.1.1.3. Administarea aplicației web
Chiar dacă administrarea este un aspect important pentru o aplicație web, nu a fost implementată momentan în totalitate în cadrul aplicației realizate de mine. Cu toate că această aplicație este concepută în principal pentru prezentare și informare, partea de administrare ar fi benefică deoarece o aplicație web actualizată poate convinge vizitatorii și să le confere încredere.
Un alt motiv care încurajează administrarea este acela că internetul este un mediu în permanentă schimbare. Astfel pentru a menține vizitatorii interesați este nevoie de actualizarea textului, fotografiilor, evenimentelor și a ofertelor. Acest lucru se poate realiza și în aplicația mea însă doar prin modificarea sau adăugarea în baza de date și în codul sursă.
În cadrul aplicației Grecia Info Turism administrarea prevede posibilitatea unui utilizator cu alt nivel de acces față de utilizatorii obișnuiți să recepționeze și să vizualizeze cererile venite de la utilizatori către agenția de turism. Această persoană cu alt nivel de acces poate fi administratorul agenției de turism.
Astfel odată ce un client realizează o cerere pentru un circuit în aplicația web administratorul poate să gestioneze aceste circuite, să sesizeze ce anume dorește utilizatorul și să îi răspundă, pe baza adresei de email complectată de utilizator la înregistrarea pe site, printr-o ofertă concretă pentru circuitul dorit. De asemenea după soluționarea ofertei administratorul are dreptul de a șterge circuitele din baza de date.
Același principiu funcționează și în cadrul secțiunii bilete de avion însă în continuare se lucrează la implementarea funcționalităților în vederea extinderii și dezvoltării aplicației web.
III.1.2. Baza de date
Website-ul utilizează o bază de date creată cu ajutorul phpMyAdmin 4.0.4 conține șapte tabele și poartă numele giulio, aceasta fiind ilustrată în figura III.1.2.1.
Fig. III.1.2.1. – Baza de date a aplicației web
Structura tabelelor și legăturile dintre acestea se pot urmării în figura următoare unde acestea se reprezintă cu ajutorul secțiunii Designer din phpMyAdmin. Astfel în figura III.1.2.2 pot fi observate cele șapte tabele ale bazei de date precum și câmpurile acestora.
Fig. III.1.2.2. – Structura tabelelor și legăturile dintre acestea
Tabela user conține datele persoanelor care și-au creat un cont pe website. Aceasta conținând codul unic al utilizatorului util în atribuirea unui circuit sau bilet de avion unui utilizator, numele utilizatorului, parola codificată a utilizatorului și adresa de e-mail a utilizatorului pe care acesta va fi contactat de către personalul agenției de turism. Aceasta poate fi vizualizată în figura III.1.2.3.
Fig. III.1.2.3. – Tabela utilizator a bazei de date
Tabela bilet zbor conține, după cum se poate observa și mai jos câmpul cod unic al biletului de zbor, prețul zborului, clasa de zbor, numele clientului care a solicitat zborul, codul unic al zborului care coține plecarea și destinația.
Tabela mai conține de asemenea câmpurile nume, prenume, telefon și e-mail pentru persoanele care doresc doar bilet de avion aici fiind nevoie de complectarea unui formular care conțin și aceste date.
Diferența între persoanele care rezervă doar un bilet de avion și persoanele care au un bilet de avion în cadrul circuitului ales se face pe baza câmpului doar_bilet unde persoanele care au ales doar un bilet de avion vor avea valoarea unu iar cei care au un bilet de avion în circuitul ales vor avea valoarea zero.
Secvența de cod php prin care este inserat un bilet de zbor din interfața aplicației web în baza de date este următoarea:
$insert_bilet = mysql_query("INSERT INTO bilet_zbor VALUES ('', '$pret', '$tip_zbor', '$user_name', '$id_zbor')");
În continuare în figura III.2.1.4 est ilustrată tabela bilet_zbor a bazei de date.
Fig. III.1.2.4. – Tabela bilet zbor a bazei de date
Tabela circuit ilustrată în figura III.2.1.5. conține, câmpul cod unic al circuitului, prețul circuitului, codul unic al biletului de zbor, respectiv clientul care a solicitat ofertă pentru circuit.
Secvența de cod php prin care se realizeză inserarea unui circuit, creeat de către un utilizator, în baza de date este următoarea :
$insert_circuit = mysql_query("INSERT INTO circuit VALUES ('', '$pret', '$id_bilet', '$user_name')");
Fig. III.1.2.5. – Tabela circuit a bazei de date
Tabela circuit_locație este foarte importantă, numele ei este și sugestiv pentru cea ce realizează aceasta. Cu ajutorul acestei tabele se poate face legătura între locație și circuit, deoarece un circuit poate avea una sau mai multe locații.
Astfel după cum se poate observa în figura urnătoare, de exemplu circuitul cu codul unic nouăsprezece conține locațiile cu identificatorul unic unu, doi, respectiv trei. Aceste aspecte sunt vizibile și în figura III.1.2.6.
Fig. III.1.2.6. – Tabela circuit_locație a bazei de date
Pentru inserarea în tabela bazei de date cu numele circuit_locație este folosit următorul cod php, aici utilizându-se foreach pentru a insera locațiile :
foreach ($locatii as $locatie) {
mysql_query("INSERT INTO circuit_locatie VALUES ('$id_circuit', '$locatie')");
}
Tabela locație conține, campul cod unic al locației, numele locației, tipul locației care poate fi stațiune sau oraș, prețul, respectiv țara care poate fi Romania sau Grecia.
S-a folosit câmpul țară pentru face distincția între orașele din Romania și cele din Grecia, aceasta fiind folositoare la zboruri, aici avem locație plecare respectiv locație sosire și ele vor fi afișate în funcție de id.
Toate acestea fiind necesare atunci când utilizatorul generează o cerere pentru un circuit iar o parte din ele sunt folosite si pentru cererea unui bilet de avion.
Ilustrarea tabelei locație este făcută în figura III.1.2.7 care este prezentată în continuare.
Fig. III.1.2.7. – Tabela locație a bazei de date
Tabela zbor a bazei de date conține identificatorul unic al zborului, data la care are loc zborul, firma cu care se ralizează zborul, locația de plecare, pentru aceasta vom lua din tabela locație orașele cu parametrul ro, respectiv locația de sosire pentru care se va lua din tabela locație doar orașele cu parametrul gr. Tabela este ilustrată în figura III.1.2.8.
Inserarea unui zbor aferent unui circuit rezervat în cadrul aplicației web în baza de date se face prin următoarea secvență de cod php:
$insert_zbor = mysql_query("INSERT INTO zbor VALUES ('', 0, '$companie', '$loc_plecare', '$loc_sosire')");
Fig. III.1.2.8. – Tabela zbor a bazei de date
Tabela firmă_zbor este prezentată în figura III.1.2.9 și conține identificatorul unica al firmei de zbor, numele firmei de zbor, pagina web a firmei de zbor și un preț aproximativ perceput de fiecare firmă, în funcție de diferențele de preț dintre firme pe piața transportului.
Fig. III.1.2.9. – Tabela firma_zbor a bazei de date
III.2 Prezentarea aplicației web
Această aplicație a fost concepută în principal pentru informare, pentru a prezenta vizitatorilor cele mai frumoase atracții turistice din Grecia dar și pentru permite efectuarea unor operații.
Prima operație poate fi solicitarea unei oferte pentru un circuit creat în cadrul aplicației, pentru aceasta fiind necesară atât autentificarea vizitatorului cât și creerea circuitului în câțiva pași simpli, iar pe baza acestora agenția de turism îi va răspunde utilizatorului prin e-mailul complectat la creera contului cu cele mai bune oferte care le deține pentru cea ce el dorește.
O altă operație poate fi complectarea unui formular de către un utilizator în vederea rezervării unui bilete de avion, astfel el complectează datele necesare, primește un preț aproximativ, iar agenția îi va putea trimite biletul final cu oferta de preț pe adresa de e-mail sau printr-un mesaj la numărul de telefon complectat în formular.
Astfel unui client interesat de o anume ofertă, de creerea unui circuit, de unui bilet de avion sau pur și simplu de informare cu privire la unele stațiuni și locații turistice din Grecia îi va fi de folos utilizarea acesei aplicații.
III.2.1. Modulul pentru vizitatori
Aplicația web permite vizitatorilor navigarea cu ușurință între pagini, astfel și un utilizator cu cunoștințe minime în domeniul calculoatoarelor să se poată descurca și să găsească ceea ce caută odată ce a accesat website-ul.
Fig. III.2.1.1. – Prima pagină a aplicației web
Ca background am ales o culoare neutra, respectiv albul, pentru ca atenția sa fie focusată asupra detaliilor site-ului si a nu pune in dificultate vizitatorul in vederea obținerii informațiilor necesare.
Nu în ultimul rând albul semnificand puritate ofera site-ului web un aer ce denota profesionalismul firmei de curierat, simplitate si eficiența, lucru obligatoriu în cazul unui website cu acest specific.
În partea superioară se află meniul cu legăturile spre paginile de interes pentru orice posibil vizitator. Mai jos se prezintă secvența de cod care face posibilă afișarea meniului principal, precum și figura III.2.1.2 care ne prezintă acest meniu.
<ul id="navigation-menu">
<li><a href="<?php echo $base_url; ?>">Despre</a></li>
<li><a href="<?php echo $base_url; ?>/statiuni">Statiuni</a></li>
<li><a href="<?php echo $base_url; ?>/galerie">Galerie foto</a></li>
<li><a href="<?php echo $base_url; ?>/contact">Contact</a></li>
</ul>
Fig. III.2.1.2. – Meniul principal al aplicației web
Ca simplu vizitator al site-ului, oricine are acces la secțiunile meniului din header, care deschid paginile de prezentare a stațiunilor disponibile (Stațiuni), prezentarea stațiunilor disponibile prin imagini sugestive (Galerie foto), pagina principala a website-ului (Despre) respectiv pagina de contact (Contact).
Pagina Despre, care este pagina principală, pune la dispoziție câteva argumente care ne-ar putea determina să vizităm Grecia.
De aici sunt de asemenea accesibile și obiectivele turistice disponibile în număr de nouă.
Fiecare obiectiv poate fi accesat și pentru fiecare obiectiv se prezinta o fotografie sugestivă alături de un text cu o scurtă descriere a obiectivului precum putem observa în figura III.2.1.3.
Fig. III.2.1.3. – Obiectivele turistice prezente în cadrul aplicației
În pagina Stațiuni regăsim destinațiile de vacanță care pot fi puse la dispoziție de agenția de turism. Astfel când am accesat secțiune Stațiuni din meniu regăsim, precum în cazul obiectivelor, o fotografie concludentă urmată de un text de prezentare cu cele mai importante detalii legate de așezarea geografică, posibilele obiective de vizitat precum și descrieri ale peisajelor.
Reprezentarea stațiunilor în pagină este ilustrată în figura III.2.1.4, stațiunile disponibile pe website la momentul actual fiind următoarele:
Creta
Halkidiki
Mykonos
Naxos
Paros
Santorini
Skiathos
Zakynthos
Fig. III.2.1.4. – Stațiunile prezente în cadrul aplicației
Pagina Galerie foto ilustrată în figura III.2.1.5 conține pentru fiecare stațiune în parte un set de fotografii. Acestea putem spune că sunt de cele mai multe ori esențiale în luarea unei decizii, deoarece odată ce am vizualizat peisajele, plaja și alte frumuseți ale zonei putem să alegem una dintre stațiuni în funcție de preferințele și gusturile fiecărei persoane.
În galeria foto avem posibilitatea de a trece de la fotografiile unei stațiuni la alta prin selectarea stațiuni din partea dreaptă a galeriei. De asemenea la subsolul galeriei avem posibilitatea de a selecta una dintre acestea, în caz contrar are loc tranziția ordonată de la o fotografie la alta, această tranziție fiind animată.
Galeria flash a fost generata cu ajutorul unui soft numit iPixSoft Flash Gallery Factory. Astfel această galerie a fost introdusă în pagină ca și element flash astfel :
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9.0.0.0"
id="my_foto"
width="1200"
height="800">
<param name="movie" value="nume_fisier.swf">
<param name="bgcolor" value="#FFFFFF">
<embed name="AM" src="nume_fisier.swf"
quality="high" bgcolor="#FFFFFF" swLiveConnect="true"
width="1200"
height="800"
type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
</object>
Fig. III.2.1.5. – Galeria foto cu stațiunile din cadrul aplicației
Ultima pagină a meniului și anume Contact, conține adresa la care se află sediul agenției de turism urmată de o hartă Google Maps cu poziționarea acestuia, pentru persoanele care doresc să viziteze agenția pentru mai multe detalii.
De asemenea pagina Contact mai conține orarul, adresa de e-mail și numărul de telefon la care personalul agenției de turism va putea fi contactat. Pagina contact este ilustrată în figura III.2.1.6.
Fig. III.2.1.6. – Secțiunea contact din cadrul aplicației
III.2.2. Modulul pentru clienți
Partea de clienți a website-ului este destinată persoanelor care vizitează website-ul și ar fi interesate de rezervarea unei vacanțe sau de obținerea unor detalii suplimentare cu privire la anumite vacanțe sau bilete de avion.
Astfel un vizitator interesat are nevoie în primul rând de creerea unui cont care se poate realiza prin apăsarea butonului înregistrare din partea de sus a paginii, sau dacă are deja un cont creeat prin apăsarea butonului logare vizibil în figura III.2.2.1.
Fig. III.2.2.1. – Logarea și înregistrarea din cadrul aplicației
Formularul pentru înregistrarea unui nou utilizator conțome câmpurile : utilizator, e-mail, parolă și reintroducere parolă și este ilustrat în figura III.2.2.2.
Fig. III.2.2.2. – Formularul de înregistrarea din cadrul aplicației
Implementarea acestui formular s-a realizat în php și s-au folosit următoarele secvențe de cod :
private function registerNewUser()
{
if (empty($_POST['user_name'])) {
$this->errors[] = "<span class='error-message'>Introduceti nume utilizator.</span>";}
elseif (empty($_POST['user_password_new']) || empty($_POST['user_password_repeat'])) {
$this->errors[] = "<span class='error-message'>Introduceti parola.</span>";
} elseif ($_POST['user_password_new'] !== $_POST['user_password_repeat']) {
$this->errors[] = "<span class='error-message'>Parola si Repeta parola nu sunt identice.</span>";
} elseif (strlen($_POST['user_password_new']) < 6) {
$this->errors[] = "<span class='error-message'>Parola trebuie sa contina min. 6 caractere</span>";
Formularul pentru înregistrare utilizatorilor care au deja un cont creat este reprezentat după cum se poate observa în figura III.2.2.3.
Fig. III.2.2.3. – Formularul de logare din cadrul aplicației
Implementarea sistemului de logare s-a realizat în php, după cum urmează :
<form method="post" action="logare" name="loginform">
<div>
<label for="login_input_username">Utilizator</label>
<input id="login_input_username" class="login_input" type="text" name="user_name" required />
</div>
<div>
<label for="login_input_password">Parola</label>
<input id="login_input_password" class="login_input" type="password" name="user_password" autocomplete="off" required />
</div>
<input type="submit" name="login" value="Autentificare" />
</form>
<a href="inregistrare">Inregistrare cont nou</a>
Odată ce un utilizator are un cont și este logat pe site, devine disponibilă o secțiune de meniu, vizibilă în partea dreaptă a figurii III.2.2.4, prin care utilizatorul poate să rezerve un bilet de avion, o vacanță din ofertă sau să își creeze un circuit care să conțină mai multe stațiuni și obiective.
Fig. III.2.2.4. – Meniul clientului din cadrul aplicației
La apăsarea butonului Adauga circuit va fi deschisă o fereastră precum cea ilustrată în figura III.2.2.5. care permite selectare multiplă în care din destinațiile posibile putem alege mai multe stațiuni și obiective turistice în vederea obținerii unei oferte pentru circuitul dorit de către noi. De asemenea se va afișa automat un preț aproximativ pentru opțiunile alese.
Fig. III.2.2.5. – Selectarea destinațiilor pentru circuit din cadrul aplicației
Selecția multiplă a locațiilor precum în imaginea de mai sus este foarte utilă, oferinde de asemenea și un aspect plăcut, ordonat de asemenea și simplu de utilizat de către orice utilizator. Aceasta a fost implementată astfel:
<div class="modal modal-adauga-circuit" id="adauga-circuit">
<?php $locatii = get_locations('gr'); ?>
<select multiple="multiple" id="select-locations" name="my-select[]">
<?php foreach ($locatii as $locatie): ?>
<option value="<?php echo $locatie['id']; ?>" data-pret="<?php echo $locatie['pret']; ?>"><?php echo $locatie['nume']; ?></option>
<?php endforeach; ?>
</select>
<div class="next-step button" rel="#adauga-bilet-avion">Next</div>
<div class="total-price">Pret: <span>0</span> EURO</div>
</div>
</m>
La apăsarea butonului Urmatorul pas, se trece la următoarea etapă spre finalizarea comenzii. Aici utilizatorul va avea de complectat un formular ilustrat și în figura III.2.2.6, în care va avea de ales locul de plecare din Romania, preferințele utilizatorului cu privire la tipul de zbor și compania de zbor precum și data dorită.
Fig. III.2.2.6. – Complectarea datelor de zbor pentru circuit din cadrul aplicației
O parte din secvența care realizează cele prezentate mai sus este următoarea:
<div class="modal modal-bilet-avion" id="adauga-bilet-avion">
<div class="wrapper-select">
<?php $loc_plecare = get_locations('ro'); ?>
<label for="localitate-plecare">Plecare</label>
<select id="localitate-plecare" name="localitate-plecare">
<option></option>
<?php foreach ($loc_plecare as $locatie): ?>
<option value="<?php echo $locatie['id']; ?>" data-pret="<?php echo $locatie['pret']; ?>"><?php echo $locatie['nume']; ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="wrapper-select">
<label for="tip-zbor">Tip zbor</label>
<select id="tip-zbor" name="tip-zbor">
<option></option>
<option value="low-cost" data-pret="55">Low-cost</option>
<option value="business" data-pret="280">Business</option>
</select>
</div>
Odată ce a salvat circuitul reprezentanții agenției de turism vor contacta clientul prin adresa de e-mail înregistrată în baza de date la creerea contului, cu oferte de preț concrete în funcție de opțiunile clientului.
Circuitul este creat și adăugat în baza de date la apăsarea butonului Trimite comanda. După ce circuitul a fost creat el va apărea automat într-o tabelă prezentă în secțiunea circuit care conține locațiile dorite, firma de zbor, data la care se efectuează zborul respectiv prețul aproximativ. Felul în care această tabelă arată este ilustrat în figura III.2.2.7.
Fig. III.2.2.7. – Tabela cu circuitele clientului din cadrul aplicației
Afișarea acestui tabel în secțiunea circuit a meniului utilizator se ralizează cu următoarea secvență de cod:
<?php if ($circuite = get_circuite($_SESSION['user_name'])): ?>
<table class="tg">
<tr>
<th class="tg-s6z2">Id</th>
<th class="tg-031e">Locatii</th>
<th class="tg-031e">Firma avion</th>
<th class="tg-031e">Data</th>
<th class="tg-031e">Pret</th>
</tr>
<?php foreach($circuite as $circuit): ?>
<tr>
<td class="tg-031e"><?php echo $circuit['id']; ?></td>
<td class="tg-031e"><?php echo $circuit['locatii']; ?></td>
<td class="tg-031e"><?php echo $circuit['firma']; ?></td>
<td class="tg-031e"><?php echo $circuit['data']; ?></td>
<td class="tg-031e"><?php echo $circuit['pret']; ?></td>
</tr>
<?php endforeach; ?>
</table>
<?php else: ?>
<p>Nu ai circuite salvate</p>
<?php endif; ?>
<div class="adauga-circuit button" rel="#adauga-circuit">Adauga circuit</div>
Secțiunea de oferte a meniului utilizator, accesibilă doar utilizatorilor autentificați le permite acestora să beneficieze de cele mai bune oferte actuale pe care agenția de turism le deține. Această secțiune conține un meniu atractiv care la selectarea unei stațiuni va afișa ofertele pentru acea destinație. Ofertele sunt pentru cele opt stațiuni către care agenția de turism oferă sejururi.
Prezentarea ofertelor a fost realizată prin folosirea unui plugins jQuery UI numit Accordion. Acesta este foarte util deoarece permite afișarea panourilor montabile de conținut pentru reprezentarea informațiilor într-o cantitate limitată de spațiu. Acest lucru fiind foarte util având în vedere faptul că în cadrul agenției de turism vom putea avea la un moment dat sute de oferte.
Astfel folosirea acestei soluți oferă aplicației acuratețe și un design plăcut. Ofertele vor fi prezentate conform figurii III.2.2.8. :
Fig. III.2.2.8. – Secțiunea oferte din cadrul aplicației
La selectarea uneia dintre stațiuni se vor desfășura toate ofertele aferente acelei stațiuni. Acest lucru oferă aspect plăcut dar și îi permite clientului să găsească cu ușurință cea ce dorește.
Principiul de funcționare este simplu : la selectarea unei stațiuni din antet conținutul stațiunii selectat se extinde prezentând ofertele, de asemenea daca selectăm din nou aceași stațiune conținutul este restrâns meniul revenind la forma compactă.
O parte din a codului sursă pentru această reprezentare este prezentat mai jos :
<link rel="stylesheet" href="//code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
<link rel="stylesheet" href="css/oferte.css"/>
<script>
$(function() {
$( "#accordion" ).accordion({
collapsible: true,
heightStyle: "content"
});
});
</script>
<h3>Zakynthos</h3>
<div>
<h5>Hotel Majestic Spa</h5>
<h6>Laganas, Zakynthos, Grecia</h6>
<img src="images/oferte/creta.jpg" alt=""/>
<ul class="oferte">
<li>
<p><strong>Family room standard / Hotel Majestic Spa * * * *</strong></b></p>
<div style="margin: 10px 0 0 25px;">
<p>Data: <i>15.07.2014 – 25.07.2014</i></p>
<p>Transport: Charter avion</p>
<p>Plecare din Timisoara, Oradea, Cluj</p>
<p>Servicii incluse: All inclusive</p>
<p><strong>Pret 812 EUR</strong></p> </div>
Ultima funcționalitate din meniul utilizator o reprezintă secțiunea bilete de avion unde avem posibilitatea de a adăuga un bilet de avion în baza de date a agenției în vederea rezervării acestuia prin agenția de turism. Pentru aceasta utilizatorul trebuie să complecteze un formular ilustrat figura III.2.2.9 care conține câteva datele ale utilizatorului precum nume, prenume, telefon și e-mail, locurile de plecare și sosire, firma și clasa de zbor respectiv data de plecare. După alegerea acestor parametrii în formular se va afișa un preț aproximativ al biletului.
La apăsarea butonului trimite biletul este trimis în baza de date a agenției, pentru obținerea și emiterea biletului de zbor de către agenția de turism.
Fig. III.2.2.9. – Rezervarea biletelor de avion din cadrul aplicației
Datele de plecare, sosire, clasa de zbor și firma de zbor sunt preluate din baza de date. Prin următoarea secvență de cod vom observa cum se realizează preluarea locațiilor de plecare din baza de date:
<div class="plecare-sosire">
<div class="bilet-2-col">
<label for="plecare">Plecare</label>
<?php $locatii = get_locations('ro'); ?>
<select class="plecare get-val" name="plecare">
<?php foreach ($locatii as $locatie): ?>
<option value="<?php echo $locatie['id']; ?>" data-pret="<?php echo $locatie['pret']; ?>"><?php echo $locatie['nume']; ?></option>
<?php endforeach; ?>
</select>
</div>
Se observă în această secvență faptul că pentru diferențiera locațiilor se folosește un parametru ro în cazul locațiilor de plecare, dat fiind faptul că atât locațiile de plecare cât cele de sosire folosesc aceași tabelă a bazei de date. Astfel destinațiile vor avea ca parametru gr.
În secțiunea bilete de avion utilizatorul mai are de asemenea posibilitatea de a vizualiza lista de bilete pe care el a solicitat-o aceasta se ilustrează în figura III.2.2.10. Aceasta se realizează prin apăsarea butonului listă bilete.
Fig. III.2.2.10. – Lista biletelor de avion ale utilizatorului din cadrul aplicației
De asemenea în cadrul listei de bilete utilizatorul are posibilitatea de a renunța la un bilet. Aceast lucru se poate realiza prin apăsarea butonului , și fiind implementat astfel :
<div title="Delete" class="delete_ticket" ticket_id="<?php echo $id; ?>" zbor_id="<?php echo $val['zbor_id'];?>">x</div>
IV. Concluzii
Aplicația prezentată contribuie cu succes la gestionarea eficientă a unei agenții de turism oferind toate mijloacele, metodele și funcționalitățile necesare pentru evoluția unei agenții de turism în acest domeniu.
Realizând această aplicație am dorit să imi dovedesc cunoștințele dobândite asupra tehnologiile descrise în lucrare dar mai ales să învăț mai multe despre acestea și să evoluez la acest capitol.
Este o aplicație compatibilă cu toate browserele populare. Cea mai importantă caracteristică a aplicației fiind faptul că este ușor de folosit de către orice persoană indiferent de nivelul cunoștințelor sale, totul fiind sugestiv.
Faptul că este o aplicație simplu de utilizat dar în același timp utilă sporește și mai mult utilitatea aplicației spre deosebire de altele.
Modul în care aplicația a fost structurată permite o eventuală extindere a funcționalității acesteia în viitor. De asemenea baza de date a fost implementată și concepută pentru a suporta aceste funcționalități în vederea unei dezvoltări ulterioare.
Extinderea avută în vedere ar fi posibilitatea de achiziționare a excursiilor, circuitelor, ofertelor și a biletelor de avion direct în cadrul aplicației fără a mai fi nevoie de intervenția agenția de turism în procesul de cumpărare, totul realizându-se virtual, atât comanda cât și plata. Plata realizându-se prin card bancar. Aceaste schimbări ar transforma aplicația într-o agenție de turism cu toate funcționalitățile unei agenții de turism cu sediu fizic permițând astfel o economie substanțială a societății prin renunțarea la spațiu comercial cât și la o bună parte din personal.
Bibliografie
[1] http://ro.wikipedia.org/wiki/Comer%C8%9B_electronic
[2] http://ro.wikipedia.org/wiki/HyperText_Markup_Language
[3] http://ro.wikipedia.org/wiki/Interfe%C8%9Be_evoluate
[4] https://siteconstruct.ro/notiuni-de-baza-in-css
[5] http://ro.wikipedia.org/wiki/JQuery
[6] http://ro.wikipedia.org/wiki/MySQL
[7] http://www.wampserver.com/en/
[8] http://www.ipixsoft.com/flash-gallery-factory.html
[9] http://www.softpedia.com/get/Internet/WEB-Design/Flash/iPixSoft-Flash-Gallery-Factory.shtml
[10] https://wordpress.org/plugins/sis-accordion/
[11] http://downloads.mysql.com/docs/apis-php-en.pdf
[12] http://www.infoap.utcluj.ro/multi/programming_PHP.pdf
[13] http://www.nettech.in/e-books/Teach-Yourself-PHP4-in-24-Hours.pdf
[14] http://culturalview.com/books/php.pdf
[15] http://listic.ru/jQuery_Cookbook.pdf
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Tehnologii Utilizate In Proiectarea Si Implementarea Unei Aplicatii Privind Comertul Electronic (ID: 150699)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
