SZAKDOLGOZAT Négyesi Péter 2012

Hasonló dokumentumok
Vihar 2.0 rendszer Felhasználói kézikönyv

WordPress segédlet. Bevezető. Letöltés. Telepítés

Hiteles Elektronikus Postafiók

Használati útmutató a NÚSZ Zrt. e-ügyfélszolgálat portál kezeléséhez

Apisshop webáruház Felhasználói dokumentáció

Példa webáruház kialakítás rendszerdokumentáció

Felhasználói kézikönyv

Felhasználói kézikönyv a WEB EDInet rendszer használatához

Felhasználói dokumentáció a teljesítményadó állományok letöltéséhez v1.0

Felhasználói kézikönyv

Gyakorlati vizsgatevékenység A

A Perkapun keresztül a gazdálkodó szervezetek és a jogi képviselővel eljáró felek nyújthatják be beadványaikat. A szolgáltatást kizárólag

Felhasználói kézikönyv

TISZTASZOFTVER PROGRAM ONLINE IGÉNYLÉSI ÚTMUTATÓ

Gyakorlati vizsgatevékenység B

Csavarda mobil áruház

Internet programozása. 1. előadás

e-szignó Online e-kézbesítés Végrehajtási Rendszerekhez

Használati útmutató az MNVH rendszerébe történő regisztrációhoz

Mobil Partner telepítési és használati útmutató

TERC V.I.P. hardverkulcs regisztráció

PHP-MySQL. Adatbázisok gyakorlat

DMS One Oktatási Portál Felhasználói segédlet. DMS One Zrt

Tájékoztató e-közmű regisztrációhoz

DMS ONE Zrt. Oktatási Portál Felhasználói Segédlet

BEJELENTKEZÉS AZ EPK RENDSZERÉBE

cím létrehozása

Albacomp RI Rendszerintegrációs Kft Székesfehérvár, Mártírok útja 9. E K O P - 1. A. 2 - A D A T Á L L O M Á N Y O K

Webáruház felhasználói útmutató

MŰSZAKI DOKUMENTÁCIÓ. Aleph WebOPAC elérhetővé tétele okostelefonon. Eötvös József Főiskola 6500 Baja, Szegedi út 2.

EDInet Connector telepítési segédlet

Kézikönyv online bérletvásárláshoz

Kérjük, hogy mielőtt elkezdené használni a Csavarhat webáruházat, gondosan olvassa végig ezt a segédletet.

Felhasználói kézikönyv

Belépés a GroupWise levelező rendszerbe az Internet felől

Elektromos gépkocsi vásárlás támogatása Pályázati kiírás pályázói segédlete

A WORDPRESS TELEPÍTÉSÉNEK LÉPÉSEI

e-papír Felhasználói Kézikönyv

First Voice Kft. Stilldesign Üzletág

TÁJÉKOZTATÓ a MicroSigner alapú alkalmazás használatáról

Tartalom jegyzék 1 BEVEZETŐ SZOFTVER ÉS HARDVER KÖVETELMÉNYEK 2 2 TELEPÍTÉS 2 3 KEZELÉS 5

Útmutató. Elektronikus ügyintézéshez a oldalon július 25. Oldal: 1 / 8

Webáruház felhasználói útmutató

Felhasználói kézikönyv

PTE-PROXY VPN használata, könyvtári adatbázisok elérhetősége távolról

Felhasználói útmutató


Citroen Pásztor Alkatrész és tartozék webáruház

Budai Egészségközpont Online Ügyfélszolgálat

Hungaropharma Zrt. WEB Áruház felhasználói útmutató. Tartalomjegyzék

1. Mire használható a ViCA (Virtuális Chipkártya Alkalmazás)?

WEBrendelés modul Felhasználói kézikönyv

MŰSZAKI KÖVETELMÉNYEK, A KÖRKERESŐ SZOFTVER SPECIFIKÁCIÓJA, KÖLTSÉGVETÉS. A) Műszaki követelmények

SZOLGÁLTATÓI NYILVÁNTARTÁSI RENDSZER FELHASZNÁLÓI KÉZIKÖNYV

Az Egységes Pályázati Keretrendszer használata (akadémiai könyv- és folyóiratkiadási támogatás elnyerésére a 2014.

A mobil alkalmazás. Felhasználói útmutató - ios

QB-Suli Felhasználói útmutató verziószám: március 4.

Mikrobiológia MOODLE - gyakorló és vizsgarendszer használata az ELTE TTK Biológiai Intézet E- learning felületén

ÁNTSZ portál regisztráció, felhasználói adatok módosítása, jogosultságok felhasználói leírás [Alcím]

A telepítési útmutató tartalma

Használati útmutató a Székács Elemér Szakközépiskola WLAN hálózatához

A TERC VIP költségvetés-készítő program telepítése, Interneten keresztül, manuálisan

web works hungary Rövid technikai tájékoztató Mars (mars.intelliweb.hu) szerverünkkel kapcsolatban meglévő és új ügyfeleink számára.

Internet alkamazások Készítette: Methos L. Müller Készült: 2010

A webáruház kezdőlapján háromféle diavetítés beállítására van lehetőség:

Sulidoc Iskolai dokumentum megosztó Dokumentáció

Tanúsítvány igénylése sportegyesületek számára

Partner. kezelési útmutató

Webtárhely létrehozása a helyen. Lépések Teendő 1. Böngészőbe beírni: 2. Jobb oldalon regisztrálni (tárhelyigénylés).

Kezdő lépések Outlook Web Access

Magyar Nemzeti Bank - Elektronikus Rendszer Hitelesített Adatok Fogadásához ERA. Elektronikus aláírás - felhasználói dokumentáció

Knowledge Challenge Rendszer Használata. Keresés. Regisztráció. Belépés. Vásárlás. Fizetés. Végrehajtás. Létrehozás

Hiba bejelentés azonnal a helyszínről elvégezhető. Egységes bejelentési forma jön létre Követhető, dokumentált folyamat. Regisztráció.

Könyvtárellátó Nonprofit Kft. Szülői Ügyfélkapu Felület

Felhasználói Kézikönyv

Hiteles elektronikus postafiók Perkapu

Magyar Kereskedelmi és Iparkamara HelpDesk rendszer. Felhasználói útmutató

Közoktatási Statisztika Tájékoztató 2012/2013. Használati útmutató

Sú gó az ASIR/PA IR Públikús felú lethez

Új jelszó beállítása. Új jelszó beállítása az IFA rendszerhez. BIZALMAS INFORMÁCIÓ JET-SOL JET-SOL 2.0 verzió

1. DVNAV letöltése és telepítése

KISZÁLLÍTÁSI SEGÉDLET 1

CareLink Personal telepítési útmutató. Első lépések a CareLink Personal adatfeltöltéshez

GPRS Remote. GPRS alapú android applikáció távvezérléshez. Kezelési útmutató

Regisztráció folyamata az admin.kozadat.hu oldalon az Új adatgazda regisztráció menüpontban

LOGON HASZNÁLATI ÚTMUTATÓ

weblakszov Felhasználói útmutató

Elmib Önkormányzati hibabejelentő. Felhasználói kézikönyv v1.0

Dropbox - online fájltárolás és megosztás

Egészségterv és edzésprogram használati utasítás

A Down Alapítvány weboldalának (honlap) használata Weboldal szerkesztés

Adatbázis alapú rendszerek

Elektromos gépkocsi vásárlás támogatása Pályázati kiírás kereskedői regisztráció segédlete

Microsoft Office PowerPoint 2007 fájlműveletei

REGISZTRÁCIÓ ÜGYFELEK SZÁMÁRA

Szállítói útmutató: Felhasználói profil frissítése a MOL ebidding (elektronikus ajánlatkérési) rendszerben

Webes alapú értékesítőkliens használati útmutatója

HVK Adminisztrátori használati útmutató

A Windows az összetartozó adatokat (fájlokat) mappákban (könyvtárakban) tárolja. A mappák egymásba ágyazottak.

Tartalom. Bejelentkezés...2 Feltöltés...3 Dokumentumok...4 Jelszómódosítás...7 Jelszókérés...7 Kijelentkezés...8

Átírás:

SZAKDOLGOZAT 2012

LIA Alapítványi Óvoda és Szakközépiskola Szolnoki Tagintézmény Online könyvesbolt fejlesztése PHP és MySQL alapokon Konzulens: Pankucsi Szilárd mérnök informatikus Készítette: Web-programozó 2012

Nyilatkozat Alulírott kijelentem, hogy a szakdolgozat saját munkám eredménye. A dolgozat elkészítéséhez felhasznált valamennyi forrást az irodalomjegyzékben feltüntettem a hivatkozás szabályainak megfelelően. A dolgozat elkészítéséhez meg nem engedett segédanyagokat nem használtam fel. Szakdolgozatomat más intézményben nem adtam be. Kelt: Tiszagyenda, 2012.04.14. Web-programozó jelölt

Köszönetnyilvánítás Ezúton szeretném köszönetemet és tiszteletemet kifejezni mindenkinek, aki a szakdolgozatom elkészítéséhez nagyban hozzájárult. Rugalmasságáról, precízségéről és segítőkészségéről bizonyságot téve ezúton szeretném kinyilvánítani köszönetemet konzulensemnek, Pankucsi Szilárd tanár úrnak, akitől oly sokat tanultam a 2 év alatt. Külön szeretnék köszönetet mondani Nagy Kingának, aki szeretetével és odafigyelésével mindvégig támogatott. Végül, de nem utolsó sorban szeretném kifejezni megbecsülésemet, szívből jövő szeretetemet és köszönetemet családtagjaimnak, barátaimnak, akik szeretetükkel és segítségükkel mindvégig támaszt nyújtottak tanulmányaim során, és szakdolgozatom elkészítésének teljes ideje alatt türelmet, megértést tanúsítottak irántam. Hálásan köszönöm!

Tartalomjegyzék 1. Bevezetés...3 1.1. Témaválasztás indoklása...4 2. Alkalmazott technológiák...5 3. Az alkalmazás bemutatása...7 3.1. Vendég szemszögéből...7 3.1.1. Keresés...9 3.1.2. Regisztráció...9 3.2. Tag szemszögéből... 10 3.2.1. Bejelentkezés... 10 3.2.2. Adatmódosítás... 11 3.2.3. Könyvek böngészése... 11 3.2.4. Értékelés... 12 3.2.5. Kosár... 12 3.2.6. Rendelés... 13 3.2.7. Kijelentkezés... 14 3.3. Rendszergazda szemszögéből... 14 3.3.1. Tagok kezelése... 15 3.3.2. Rendelések kezelése... 16 3.3.3. Könyvek kezelése... 17 3.3.4. Kategóriák kezelése... 18 3.3.5. Vezércikkek kezelése... 18 3.3.6. Vezércikk kategóriák kezelése... 19 3.4. Alkalmazás telepítése és működtetése... 19 3.5. Hardver és szoftver környezet... 20 4. Fejlesztői dokumentáció... 21 4.1. Feladatspecifikáció... 21 4.2. Használati eset diagram... 22 4.3. Adatbázis terv... 23 4.3.1. Táblák ismertetése... 23 4.3.2. Táblák kapcsolata... 25 4.4. Adatbiztonság... 26 4.4.1. Bemenet érvényességének ellenőrzése... 26 4.4.2. Jogosultság-ellenőrzés... 28 4.4.3. Jelszavak titkosítása... 29 4.5. Az egyes funkciók működése... 30 4.6. Tesztelés... 39 1

4.7. Továbbfejlesztési lehetőségek... 40 5. Összefoglalás... 41 6. Irodalomjegyzék... 42 7. Ábrajegyzék... 43 8. Mellékletek... 44 2

1. Bevezetés Szeretnénk, ha a működési folyamatok egyszerűsítésével készülékeink használata olyan egyértelművé és egyszerűvé válna, akár egy kávéfőző vagy egy kenyérpirító használata. (Shiro Kondo) A szoftverfejlesztés világában a web alkalmazások (Web Application) népszerűségének oka, hogy az azokat használó web-böngésző kliensek szinte minden gépen rendelkezésre állnak, illetve ezen alkalmazások karbantarthatók a kliens gépek szoftverének változtatása nélkül. A web alkalmazások elérhetőek az Interneten, valamint intranet hálózaton, mai legelterjedtebb formái a webmail, fórum, blog, web-áruház, de ezeken kívül számtalan létezik belőlük. A korábbi kliens-szerver architektúráknál minden egyes alkalmazásnak saját kliens programja volt, ami felhasználói felületként szolgált, és amit minden számítógépre külön kellett feltelepíteni. Egy szerver-oldali frissítés általában a kliens-oldal szoftverének frissítésével járt, ami kevésbé hatékony megoldás. Ezzel ellentétben a web alkalmazások dinamikusan generálnak szabványos formátumú web dokumentumokat (HTML, XHTML), amit a web-böngészők támogatnak. A kliens-oldali szabványos nyelvű szkriptek, mint a JavaScript, a böngészők által már eleve értelmezhetők. Minden weboldal statikus dokumentumként érkezik a klienshez, viszont interaktív felhasználói élményt nyújt a beágyazott web-formokon keresztül. A kapcsolat közben a web-böngésző értelmezi és megjeleníti az oldalakat, és egy univerzális kliensként működik minden web alkalmazás számára. A Web alkalmazásokat általában három rétegre lehet bontani. Az első réteg maga a webböngésző, a második/középső réteg egy motor, mely dinamikus web tartalmat használ (pl. PHP, ASP, JSP, CGI), a harmadik réteg pedig az adatbázis. A web-böngészők kéréseket küldenek a középső rétegnek, ami kiszolgálja őket azáltal, hogy lekérdezéseket és módosításokat végez az adatbázisban, majd megjelenítik a felhasználói felületet. A mai web-orientált, rohanó világban a mindennapi élet számos területén találkozhatunk webes megoldásokkal, amelyek révén otthonunkból vehetjük igénybe a különféle web alkalmazások által nyújtott szolgáltatásokat, lehetőségeket mindössze egy böngésző segítségével. 3

Ezzel sok időt és pénzt spórolhatunk meg, ugyanis például ha használt, ugyanakkor jó állapotban lévő könyveket szeretnénk vásárolni, mi sem kínál egyszerűbb megoldást, mint otthonunkból böngészni az ilyen jellegű honlapokat. 1 1.1. Témaválasztás indoklása A mai világban egyre inkább jellemző a termékek elektronikus ismertetése és értékesítése. Egy termék megvásárlása előtt számtalan internetes katalógust bejárhatunk. Esetenként több információt és véleményt gyűjthetünk be vásárlás előtt, mint amennyit egy boltban vagy egy prospektust olvasgatva kapnánk. Szakdolgozatom témája egy olyan online, PHP és MySQL alapokon működő könyvesbolt fejlesztése, melynek ötletét egy gyerekkori ismerősömmel folytatott beszélgetés ihlette. A beszélgetés során elmondta nekem, hogy szeretne megválni használt, egyetemi tankönyveitől a lehető leggyorsabban és a legjobb áron. Ekkor javasoltam neki a Használt Könyvek Áruháza (HKA) elképzelésemet, mely révén bárki nagyon egyszerűen és gyorsan megrendelheti a kívánt könyveket, melyről ő e-mailben kap részletes tájékoztatást, ezáltal hozzájárulva a gyors ügyintézéshez. Egy ilyen internetes áruházon keresztül tökéletesen bemutathatóak a PHP és MySQL nyújtotta lehetőségek. A web alkalmazás a későbbiek során segítséget nyújthat azon személyek számára, akik meglévő, használt, avagy már megunt materiális illetve immateriális javaiktól szeretnének egyszerű, gyors és elegáns módon megválni, valamint nem járatosak a nyílt forráskódú Webshop CMS (Content Management System = Tartalomkezelő Rendszer) rendszerek használatában, melyek személyes véleményem alapján a web-áruházak mai legelegánsabb és legprofesszionálisabb megjelenési formái számos továbbfejlesztési lehetőséget hordozva önmagukban. Szakdolgozatom második fejezetében az alkalmazott technológiákat részletezem. 1 http://www.kreditvadasz.hu [2009]: Webalkalmazás készítése PHP. 4

2. Alkalmazott technológiák Egy online könyvesbolt szolgáltatásait tipikusan sok felhasználó veszi igénybe, ezért célszerű a felhasználói felületet webes alapon elkészíteni. A webes interfész korszerű, jól kézben tartható és kezelési módja széles körben ismert, ezért esett választásom a webes megvalósítási módra. A rendszer felépítését tekintve a web-alkalmazás szerves része egy adatbázis, amelyből a szükséges adatokat a rendszer valamely programozási nyelv segítségével lekérdezi, karbantartja, valamint a felhasználói felületet is ennek felhasználásával generálja. A webes felület nem más, mint (korszerűen) CSS-sel formázott XHTML dokumentumok összessége, melyek a szerveren állnak elő és melyeket a kliensen egy böngészőprogram dolgoz fel és jelenít meg. A rendszerben MySQL adatbázis használata mellett döntöttem annak egyszerűsége, gyorsasága, valamint ingyenes hozzáférhetősége miatt. Igaz ugyan, hogy a MySQL funkcionalitása erősen korlátozott az iparban elterjedt adatbázis-kezelőkhöz képest (pl. Oracle), jelen komplexitásban ez nem okozott jelentősebb problémákat. A szerver oldalon alkalmazásom az ingyenes PHP szkriptnyelvet használja, mely egyszerűen lehetővé teszi a MySQL adatbázishoz való rugalmas hozzáférést, az XHTML kimenet generálását, valamint számos web-szerverrel együttműködve képes a HTTP adatmozgás vezérlésére. Az otthoni számítógépen való teszteléshez a szintén ingyenes Apache webszerver alkalmazást használtam. Az általam választott technológiai együttes, az Apache, PHP és MySQL jelenleg a gyakorlati alkalmazásokban legelterjedtebb, és mindegyikre igaz, hogy (bizonyos korlátozásokkal) ingyenesen hozzáférhető, nagyon jól dokumentált és több platformon is rendelkezésre áll. Az alábbi ábra eme együttes tagjainak kapcsolatát szemlélteti. 2 2 1. ábra Az Apache, PHP és MySQL kapcsolata http://www.peetsoft.hu [2005]: Adatbázisok elmélete, tervezése, és egy gyakorlati alkalmazás a B2C elektronikus kereskedelemből. 5

Szakdolgozatom gyakorlati megvalósításához a legkényelmesebb megoldást az AppServ alkalmazás használata jelentette, mely bárki számára elérhető és letölthető az internetről, ezentúl tartalmazza az Apache webszervert, a PHP értelmezőt (Interpreter), a MySQL szervert, valamint a phpmyadmin interaktív MySQL adatbázismenedzselő felületet. Régóta dolgozom ezzel az alkalmazással, és lévén soha nem volt vele problémám, előnyben részesítem a hasonló alkalmazásokkal szemben. Egyik legelőnyösebb tulajdonsága, hogy a telepítés után a rendszer azonnal használhatóvá válik (az alapbeállítások a megfelelő konfigurációs állományokban testre szabhatóak). 6

3. Az alkalmazás bemutatása Szakdolgozatomnak ebben a fejezetében az új felhasználók részére szeretném bemutatni a rendszer által nyújtott szolgáltatásokat. Az alkalmazás (Használt Könyvek Áruháza) egy online könyvesboltot reprezentál, ahol lehetőség van: a könyvek közötti keresésre (egyszerű és összetett keresés), az oldalra történő regisztrációra, a könyvesbolt termékeinek böngészésére és értékelésére, a kiválasztott könyvek megrendelésére. A legtöbb online könyvesbolthoz hasonlóan itt is kategorizáltak a termékek, melyekből regisztráció és belépés után kiválasztva egyet megtekinthetjük annak adatlapját, kosárba tehetjük, majd az adatok egyeztetésével és a rendelés jóváhagyásával történik meg az értékesítés. Az esetleges nagy termékkínálatban való tájékozódásban az egyszerű és összetett kereső nyújt segítséget, valamint a heti akciók és az újdonságok állandóan szem előtt vannak az erre elkülönített sávban. Az alkalmazás bárki részére elérhető, aki rendelkezik internet hozzáféréssel. A fenti szolgáltatások igénybevételéhez mindössze egy web-böngészőre van szükség (flash pluginnel). A könyvesbolt megtekintéséhez nyissuk meg a Mozilla Firefox, Opera vagy Google Chrome böngészők valamelyikét, és lépjünk a http://negyesipeter.tk címre. A főoldal elrendezését tekintve 3 részre osztható mind vízszintesen, mind függőlegesen. Vízszintes sávokat tekintve beszélünk fejlécről, tartalmi részről és láblécről. A függőleges tagolást tekintve szintén középen helyezkedik el az aktuális/rendelhető tartalom, míg azt balról-jobbról körbeveszik a kiemelt termékek, az akciós termékek, az újdonságok és a személyes kedvencek. A következőkben az alkalmazás használatát mutatom be az egyes aktorok (Vendég, Tag, Rendszergazda) szemszögéből nézve. 3.1. Vendég szemszögéből Az alábbi ábrán látható oldal fogadja az oldalra érkező látogatót (Vendég felhasználó), melyről a flash intro alatt elhelyezkedő Belépés gombra való kattintással navigálhatunk tovább az alkalmazás főoldalára. 7

2. ábra Az üdvözlő oldal Az alkalmazás főoldalára érve, melyet az alábbi ábra szemléltet, láthatjuk a már említett függőleges és vízszintes hármas elrendezést. A fejlécben helyezkednek el a láblécben felsorolt szöveges hivatkozások (navigációs elemek) ikonmegfelelői ugyanolyan sorrendben, vagyis: Főoldal, Regisztráció, Kosár, Be- és Kijelentkezés, Admin Felület. 3. ábra A főoldal 8

Vendégként mindösszesen 2 funkció elérhető, a Keresés valamint evidens módon a Regisztráció. A továbbiakban ezen funkciók részletes bemutatása következik. 3.1.1. Keresés A főoldalon elhelyezkedő egyszerű keresés funkció révén tájékozódhatunk az online könyvesboltban elérhető/rendelhető könyvekről, így eldönthetjük, hogy szeretnénk-e rendelni, ezáltal regisztrálunk-e az oldalra. Az egyszerű keresés használata után megjelenik a keresési és szűrési feltételeknek megfelelő találatok száma, valamint a könyvek (soronként három) ABC sorrendben. Lehetőség van összetett keresésre is, melynek hivatkozása a találatok száma alatt található meg. Az összetett keresés funkció révén három újabb szűrőfeltétellel (lásd az alábbi ábrán) szűkíthetjük a keresést: Szerző, Az ár legalább, Az ár legfeljebb. 4. ábra Összetett keresés Az utóbbi 2 szűrőfeltétel által megadhatunk egy minimális és egy maximális összeget, amelyet könyvvásárlásra kívánunk fordítani. Csak a numerikus értékek megadására van szükség (Pl.: 3000). 3.1.2. Regisztráció Kattintsunk a fejlécben a Regisztráció ikonjára, avagy az annak megfelelő hivatkozásra a láblécben. Az alábbi ábrán látható regisztrációs űrlapot kell kitöltenünk: 5. ábra Regisztráció 9

Kötelezően kitöltendő mezők: Felhasználónév (csak kisbetűket, számokat, kötőjelet és alsó vonalat tartalmazhat) Jelszó (csak kisbetűket, nagybetűket, számokat, kötőjelet, alsó vonalat és felkiáltójelet tartalmazhat) Jelszó megismétlése Vezetéknév (csak a magyar ABC betűit és kötőjelet tartalmazhat) Keresztnév E-mail cím Ajánlottan kitöltendő mezők: Cím (csak a magyar ABC betűit, számokat, kötőjelet, pontot, vesszőt és perjelet tartalmazhat) Telefonszám (pl.: 06-30-1234567) Regisztrációs szándékunk megerősítéséhez a Regisztrál gombra kell kattintani. 3.2. Tag szemszögéből Regisztrált felhasználóként a közösség tagjává válhatunk, így Tag felhasználóként végre igénybe vehetjük az online könyvesbolt nyújtotta szolgáltatásokat. A következőkben a rendelés menetét fogom ismertetni. 3.2.1. Bejelentkezés Sikeres regisztráció esetén automatikusan átirányítódunk a bejelentkezési oldalra, ahol is az általunk választott felhasználónévvel és jelszóval beléphetünk (lásd az alábbi ábrán) az oldalra immáron Tagként. 6. ábra Be- és Kijelentkezés A sikeres bejelentkezés után megtekinthető a felhasználói adatlap (lásd az alábbi ábrákon), valamint látható, hogy a kosár még üres ( Az Ön kosara jelenleg üres! ). 10

7. ábra Felhasználói adatok 3.2.2. Adatmódosítás Amennyiben felhasználói adatainkat módosítani szeretnénk, úgy kattintsunk a felhasználónevünkre, mely hivatkozás révén eljutunk a Személyes információk (oldalra, ahol egy grafikus felület áll rendelkezésünkre az Adatmódosítás elvégzésére. Ahogy az alábbi ábrán is jól látható, a felhasználónevünk kivételével bármelyik személyes adatunkat megváltoztathatjuk, amennyiben a módosítás(ok) bevitele után a Frissítés gombra kattintunk. A jelszavunk biztonsági okokból nem látható a Jelszó mezőben, ugyanakkor a kívánt új jelszó begépelésével és a Frissítés gomb megnyomásával ez a módosítás is elvégezhető. 8. ábra Adatmódosítás 3.2.3. Könyvek böngészése Most menjünk vissza a Főoldalra (kattintsunk a fejléc megfelelő ikonjára, avagy a láblécben a megfelelő hivatkozásnévre), majd a Sikerlista részből válasszunk ki egy tételt a könyv címére vagy képére való kattintással. 11

Ezen az oldalon megtekinthetjük a kiválasztott könyv adatait (lásd az alábbi ábrán), mely révén ellenőrizhetjük, hogy a kívánt szerzőjű, tartalmú és értékű könyvet fogjuk-e megrendelni, avagy tovább folytathatjuk a könyvek közötti böngészést: 9. ábra Könyv adatai 3.2.4. Értékelés Ugyanezen az oldalon található meg a könyvek értékelését szolgáló funkció grafikus felülete is (lásd a lenti ábrán), ahol megtekinthető az eddigi értékelések átlaga (max. 5 csillag), az eddigi értékelések száma és a Tag által adott értékelés, mely lehet: Rossz, Átlagos, Jó, Nagyon jó és Kitűnő. Ezen lehetőségek egyikét kiválasztva, majd az Értékel gombra kattintva véleményezhetjük az adott könyvet. 10. ábra Értékelés 3.2.5. Kosár Szintén ugyanezen az oldalon van lehetőségünk a kiválasztott könyvet a kosarunkba tenni, melyhez csupán annyi szükséges, hogy megadjuk a rendelni kívánt mennyiséget (darabszámot) és a Kosárba gombra kattintsunk. 11. ábra Kosárba rakás felülete 12

A kiválasztott könyv(ek) kosárba tétele után eljutunk a kosarunkhoz, ahol már szerepel(nek) az előzően hozzáadott tétel(ek) (lásd az alábbi ábrán): 12. ábra Kosár tartalma A kosarunkba kerülő tételek mindegyike szerkeszthető a (Szerkesztés) ikonra történő kattintással, melynek segítségével frissíthetjük a Mennyiséget illetve akár törölhetjük is az adott tételt. A Böngészés gombra kattintva folytathatjuk a böngészést, újabb könyveket adhatunk hozzá a kosarunkhoz. 3.2.6. Rendelés Miután a megrendelni kívánt termékeket hozzáadtuk a kosarunkhoz, az Ellenőrzés gombra kattintva eljutunk a rendelésünk adatait tartalmazó oldalra (lásd az alábbi ábrán): 13. ábra Megrendelés adatai A Feladó, az E-mail és a Szállítási cím mezők kitöltésével nem kell bajlódnunk, ezáltal is könnyítve és gyorsítva a megrendelés menetét. A fenti ábra jobb felső részében kap helyet a rendelésünk végösszege. A Levél szövege mezőben általános tájékoztatást kapunk a Rendelés és fizetés módjáról (előre utalás a megadott számlaszámra), de ugyanakkor ez a tartalom szerkeszthető is, mely révén kérdéseket intézhetünk az online könyvesbolt üzemeltetője felé, ha további megjegyzésünk, esetleg kérésünk lenne a rendelés lebonyolításával kapcsolatban. 13

A Kosárba gombra kattintva módosíthatjuk kosarunk tartalmát (tétel hozzáadása, törlése, frissítése), míg ha a Megrendelés gombra kattintunk, akkor a rendelésünk elküldésre kerül. Ezután kapunk egy visszaigazolást (lásd az alábbi ábrán). Ha a Vissza gombra kattintunk, újra a kosarunknál találjuk magunkat, mely már ismét üres. 14. ábra Visszaigazolás 3.2.7. Kijelentkezés A vásárlás befejezése után jelentkezzünk ki az oldalról. Ezt kétféleképpen tehetjük meg. A Kijelentkezés első módszere, hogy a láblécben a Be- és Kijelentkezés hivatkozásra, avagy a fejlécben az ennek megfelelő ikonra kattintunk. Ezután a megjelenő oldalon kattintsunk a Kilépés gombra. A második kijelentkezési módszer, mely egyszerűségét tekintve inkább tekintendő az elsődleges módszernek, hogy a fejléc jobb felső sarkában rákattintunk a (Kilépés) ikonra. Három perc tétlenség esetén automatikusan kiléptetésre kerülünk, újbóli bejelentkezés szükséges. 3.3. Rendszergazda szemszögéből A Rendszergazda jelen esetben az online könyvesbolt üzemeltetője. Lehetősége van kezelni a Tagokat, a Rendeléseket, a Könyveket, a Kategóriákat, a Vezércikkeket és a Vezércikk kategóriákat az erre kialakított grafikus felületeken keresztül. Miután rendszergazdaként bejelentkeztünk az oldalra (lásd az alábbi ábrán), a láblécben az Admin Felület hivatkozásra, vagy a fejlécben ennek az ikonmegfelelőjére kattintva eljutunk az Admin Navigáció felületére (lásd az alábbi ábrán). 15. ábra Admin Felület 14

Az felsorolt elemek mindegyike egy-egy hivatkozás, melyekre való kattintással érhető el az adott funkció. A Kártya típusok kezelése jelenleg csak teszt-üzemmódban elérhető, nem képezi a web-alkalmazás szerves részét. 3.3.1. Tagok kezelése A Tagok kezelése funkció felülete (lásd az alábbi ábrán) 2 részre osztható. Lehetőségünk van a tagok közötti keresésre a teljes vagy részleges felhasználónév, vezetéknév, avagy keresztnév megadásával, majd a Keresés gombra történő kattintással. 16. ábra Tagok kezelése felület A felület második részében kerülnek felsorolásra a Tagok legfontosabb adatai (Felhasználónév, Vezetéknév, Keresztnév, Jogosultsági szint). Alapértelmezetten az összes regisztrált felhasználó megjelenítésre kerül. A felhasználónévre való kattintással elérhetőek az egyéb személyes adatok is, ahol ha ismét rákattintunk a felhasználónévre, lehetőség nyílik az adatok frissítésére, avagy a felhasználó törlésére. A fenti ábrán látható Beszúr hivatkozásra kattintva a rendszergazda új felhasználót regisztrálhat az oldalra (lásd az alábbi ábrán). 17. ábra Új Tag felvitele 15

Az új felhasználó felvitelére ugyanazok a szabályok érvényesek, mint a regisztrációnál, annyi különbséggel, hogy a Rendszergazda itt megadja a felhasználó jogosultsági szintjét, ami alapértelmezetten a Tag. A Hozzáadás gombra kattintva már meg is jelenik az új felhasználó a felsorolt Tagok között. Erre a funkcióra akkor lehet szükség, ha például valaki nem akar bajlódni a regisztrációval, és a rendszergazdát kéri meg, hogy hozzon létre számára egy felhasználót. 3.3.2. Rendelések kezelése A Rendelések kezelése felület bemutatása előtt először lássuk, milyen formában is érkezik meg egy rendelés a Rendszergazda számára (lásd az alábbi ábrán): 18. ábra Beérkezett rendelés formája A beérkező e-mail fejlécében látható a felhasználó e-mail címe (mathnek@gmx.com), valamint a beérkezés időpontja (20:11). A levél tartalmi részében szerepel a szakdolgozatom egy korábbi fejezetében (3.2.6. Rendelés) bemutatott tájékoztató, valamint ezt követően a megrendelt termék(ek) adatai (Cím, Ár, Mennyiség, Összesen), a rendelés végösszege, illetve a postázási adatok (Név, Cím). Több különböző termék megrendelése esetén a sorszámozott megjelenítés nagyban hozzájárul a tételek megfelelő elkülönítéséhez. Egy termék megrendelése esetén a beérkezett e-mailben a megrendelés adatainak formája az alábbi ábrán látható. 19. ábra Megrendelés adatainak formája egy termék esetén 16

A Rendelések kezelése felület (lásd az alábbi ábrákon) elsősorban demonstrációs céllal készült, mely azt hivatott bemutatni, hogyan tud a Rendszergazda: még el nem küldött rendelések között keresni, még el nem küldött rendeléseket szerkeszteni, még el nem küldött rendeléseket törölni, új rendelést felvinni bármelyik felhasználó nevében/részére. 20. ábra Rendelések kezelése felület 21. ábra Új rendelés felvitele 3.3.3. Könyvek kezelése A könyvek kezelése felület (lásd az alábbi ábrán) lehetővé teszi a Rendszergazda számára, hogy aktualizálja az online könyvesbolt termékeinek adatait. 22. ábra Könyvek kezelése felület 17

A kategória szerinti keresés mellett az Ajánlott (Mind/Igen/Nem) szűrőfeltétel megadásával kezelhetjük a könyvkészletet. Amennyiben egy könyv Ajánlott tulajdonságához Igen értéket rendelünk (pipát teszünk), úgy az a könyv a megrendelhető státuszt veszi fel, megjelenik a Főoldal Sikerlista részében. A (Szerkesztés) ikonra kattintva frissíthetjük az adott könyv adatait, vagy akár törölhetjük is az adott tételt (lásd a következő ábrán). 23. ábra Könyv adatainak szerkesztése A Rendelhető mezőben adhatjuk meg az adott könyv készleten lévő darabszámát. A Kép URL mezőben, ahogy az ábrán is jól látható, az adott könyv képének linkje található, amely lehet egy külső weboldal linkje, avagy jelen esetben a tárhelyünk egy megadott mappájában szereplő kép elérési útvonala. Új könyv felvitele esetén az előző ábra mezőit kell megfelelően kitöltenünk, majd a Hozzáadás gombra kattintanunk. 3.3.4. Kategóriák kezelése Itt tudjuk kezelni a különböző könyvkategóriákat. Az egyes kategórianevekre történő kattintással átnevezhetjük (frissítés), vagy akár törölhetjük is az adott kategóriát. Új kategória felviteléhez elég megadnunk a Kategória nevét, majd rákattintanunk a Hozzáadás gombra. 3.3.5. Vezércikkek kezelése Vezércikkek az összefoglaló neve a Főoldalon megtalálható Személyes kedvencek, Eheti kiemelt könyvek és az Újdonságok csoportoknak. A vezércikkek már felvitt, de még nem rendelhető könyvekhez társíthatók. A kezelőfelületen az egyes vezércikkek címére kattintva módosíthatjuk azok leírását, kategóriáját, vagy akár törölhetjük is az adott vezércikket. Új vezércikket a Cikk címe, a Cikk leírása, a Vezércikk kategória és a Tétel mezők helyes kitöltésével/megadásával vehetünk fel. 18

3.3.6. Vezércikk kategóriák kezelése Az alkalmazás három fő vezércikk kategóriát kezel (Újdonságok, Eheti, Személyes), melyek igazodnak a 3.3.5. fejezetben (Vezércikkek) felsorolt csoportokhoz. Jelen esetben, a Vezércikk kategóriák felülete (új kategória felvitele, frissítés, törlés) csak demonstrációs célt szolgál, ugyanis a Főoldalon csak a 3 fő kategóriához társított vezércikkek jelennek meg. 3.4. Alkalmazás telepítése és működtetése Az alkalmazás éles, üzemszerű telepítését egy távoli szerveren kell elvégezni, hiszen egy internetes tartalomról van szó. Kipróbálás céljából azonban a telepítést saját gépünkön is megtehetjük, amennyiben a számítógép rendelkezik Apache szerverrel, PHP és MySQL környezettel. Ehhez először töltsük le a http://www.appservnetwork.com oldalról az ingyenes AppServ 2.5.10 alkalmazás Windows-os telepítő fájlját, majd installáljuk fel azt (Telepítési útmutató a Melléklet II. pontjában). Ezután másoljuk a mellékelt zip fájlban található fájlokat helyi szerverünk (localhost) www könyvtárába. Ha nem szeretnénk, hogy ezek a már meglévőekkel összekeveredjenek, tegyük a fájlokat egy új mappába (ha távoli szerverre telepítjük az alkalmazást, úgy az FTP kapcsolattal másoljuk fel a fájlokat a gyökérkönyvtárba, ehhez szükségünk lesz a hozzáférési adatokra). Következő lépésként készítsük elő az adatbázis használatát, nyissuk meg a phpmyadmin felületet (http://localhost/phpmyadmin/). Itt a felhasználónév alapértelmezetten a root lesz, míg a jelszó az, amit az AppServ telepítése során megadtunk. A felület főoldalán először hozzunk létre egy adatbázist, majd ezt követően importáljuk be a database mappában található MySQL dump fájlt (lásd a következő ábrán). 24. ábra MySQL dump fájl importálása Ezután a common.php és a db_mysql.inc fájlokban írjuk át az adatbázis-kapcsolódási adatokat az alábbi megjegyzéssel jelölt helyeken: //-- adatbázis kapcsolat kezelése 19

Az importálás révén létrejön az adatbázis a szükséges táblákkal és tesztadatokkal (4 kategória, 3 vezércikk, 4 vezércikk kategória, 29 könyv), valamint létrejön egy rendszergazda felhasználó (Belépő: admin, Jelszó: admin), amellyel be lehet jelentkezni az Admin Felületre. A fenti műveletek után futtatáshoz írjuk be az oldal webcímét a kompatibilis böngészők valamelyikébe. Amennyiben saját gépünkre telepítettük fel a szervert, úgy webcímként pl. a következő címet írjuk be: http://localhost/szakdolgozat. Az Admin Felületre történő belépést követően ajánlott a jelszavat módosítani, illetve fel lehet venni új rendszergazdát is. A termékekhez rendelt képek az images/books mappában találhatóak meg. 3.5. Hardver és szoftver környezet A felhasználó által használt számítógép (kliensgép) követelményei: Ajánlott futtatási környezet: Firefox 9+, Opera 10+, Google Chrome 11+ böngészőprogramok; engedélyezett JavaScript támogatás; telepített Flash Player. Operációs rendszer: a fent említett környezetet futtatni képes rendszer. Célhardver: minimális, a fenti környezetet futtatni képes hardver. Az általunk használni kívánt szerver gép követelményei: Operációs rendszer: tetszőleges. Web-szerver konfiguráció: PHP 5, MySQL 5 elérhetőség, telepített e-mail kiszolgáló, engedélyezett mail() függvény (telepített e-mail kiszolgáló esetén sem biztos, hogy engedélyezve van, érdemes ellenőrizni). Célhardver: átlagos konfiguráció, néhány 100 megabyte tárhellyel a képek számától függően. 20

4. Fejlesztői dokumentáció Ebben a fejezetben a fejlesztés menetét fogom részletezni. Az alkalmazás PHP 4-es verzióban íródott, a Notepad++ szövegszerkesztő segítségével. A 4-es verzióval szemben a PHP 5 rengeteg új funkciót tartalmaz, melyek közül legfontosabb az objektum-orientált programozás megfelelően kidolgozott támogatása. Alkalmazásom komplexitását és a szükséges fejlesztési időt mérlegelve mégis a 4-es verzióval kompatibilis, procedurális programozási módot alkalmaztam. A rendszer által használt adatbázis a MySQL 5-ös verziójára támaszkodik. Az implementáció során nem ütköztem semmilyen olyan problémába, amelyet a MySQL fejlettebb rendszerekhez képesti limitált képességei idéztek volna elő. A kódolás során használom a php szuperglobális változóit, melyek közül az egyik legfontosabb a $_SESSION, ez tárolja a munkamenethez rendelt változókat. A $_POST (az alkalmazásomban csak ezt használom) és $_GET szuperglobális asszociatív tömbök a HTTP protokoll POST illetve GET metódusai által a kiszolgálónak továbbított adatokat tárolják. Web-alkalmazás fejlesztésekor mindig fontos szempont az egyszerűség, az áttekinthetőség és a későbbiekben történő esetleges továbbfejlesztés lehetősége. Épp ezért a megírt kódnak könnyen értelmezhetőnek kell lennie, melyet figyelembe vettem az alkalmazás megírásakor. Az alkalmazás működéséért elsősorban PHP fájlok, másodsorban JavaScript (JS) és CSS fájlok felelnek. A JS fájlok általában kliens oldali működést valósítanak meg, melyekre a barátságosabb működés miatt van szükség. A CSS fájlok a megjelenésre vonatkozó stíluslapok, melyeket most nem részletezem. 4.1. Feladatspecifikáció A feladat egy adatbázis alapú, interaktív, esztétikus megjelenésű és ergonómikus webáruház fejlesztése. A weboldal kategóriák és címek szerint is legyen képes megjeleníteni a termékkínálatot. A Főoldalon kapjanak helyet a rendelhető könyvek, a várható újdonságok, az üzemeltető személyes kedvencei, és az adott heti kiemelt könyvek. Az üzemeltetőnek legyen lehetősége egy bemutatkozó videó megosztására az oldalon. Az oldal rendelkezzen egy egyszerű és összetett keresővel, melyek révén az oldalra érkező látogató megtekintheti a kínálatot. A termékeket csak regisztráció és bejelentkezés után lehessen kosárba tenni, megrendelni, értékelni. Egy összeállított kosarat lehessen rendelésként feladni, melyről az üzemeltető e-mailben, a felhasználó pedig egy visszaigazolás formájában értesüljön. A regisztrált tagoknak legyen lehetőségük adataik módosítására. 21

A regisztrációs űrlap bolond biztos kell, hogy legyen, azaz egyértelművé kell tenni a leendő tag számára, milyen formátumú adatok bevitelével tud sikeresen regisztrálni az oldalra. A bejelentkezett tag felhasználóneve jelenítődjön meg az oldalon egy kijelentkezési ikon társaságában, ezzel vizuális értesítést küldve neki az oldalra való sikeres belépésről. A fentiekben felsorolt összes funkció legyen adminisztrálható egy jelszóval védett felületen, ahol programozói közbeavatkozás nélkül ezek könnyedén megtehetőek (pl. könyvek, vezércikkek felvitele, szerkesztése és törlése, regisztrált felhasználók listázása). Az adminisztrációs felület csak a rendszergazda számára legyen elérhető. 4.2. Használati eset diagram Az alábbi ábrán látható a web-alkalmazás használati eset diagramja, melyet a Pacestar UML Diagrammer szoftverrel készítettem el. 25. ábra Használati eset diagram 22

4.3. Adatbázis terv Az alkalmazás egyetlen adatbázist használ a könyvekkel kapcsolatos adatok lekezelésére és a regisztrált felhasználók adataira is. Az adatbázisban hat táblát hoztam létre, melyek nevét és a mezőneveket angolul neveztem el (lásd az alábbi ábrán). 26. ábra Az adatbázis felépítése Az adatbázishoz való kapcsolódás illetve az egyéb adatbázis függvények a db_mysql.inc fájlban találhatóak. 4.3.1. Táblák ismertetése Ebben a fejezetben az elkészített 6 adattábla szerkezetét mutatom be ABC sorrendben, ennek fényében magyarázom az oldal működését. A vastagon szedett mezőnév jelenti az elsődleges kulcsot. Minden táblához az alapértelmezett MyISAM motort, valamint az utf8_general_ci illesztést alkalmaztam. categories: könyvkategóriák adatainak tárolására szolgál Mezőnév Típus Leírás category_id int(11) könyvkategória azonosítója name varchar(50) könyvkategória neve 1. táblázat A categories tábla editorials: Mezőnév Típus Leírás article_id int(11) vezércikk azonosítója editorial_cat_id int(11) vezércikk kategóriájának azonosítója article_title varchar(200) vezércikk címe article_desc text vezércikk leírása/tartalma item_id int(11) könyv azonosítója 2. táblázat Az editorials tábla Ebben a táblában tárolom le a Főoldalon megjelenő Vezércikkek (Személyes kedvencek, Újdonságok, Eheti kiemelt könyvek) adatait. A vezércikk egy, még nem rendelhető könyvhöz kapcsolódik, van kategóriája, címe és leírása. 23

editorial_categories: vezércikk kategóriák adatainak tárolására szolgál Mezőnév Típus Leírás editorial_cat_id int(11) vezércikk kategória azonosítója editorial_cat_name varchar(50) vezércikk kategória neve 3. táblázat Az editorial_categories tábla items: Mezőnév Típus Leírás item_id int(11) könyv azonosítója category_id int(11) könyvkategória azonosítója name varchar(255) könyv címe author varchar(100) könyv szerzője price int(11) könyv ára product_url varchar(255) könyv url címe (Amazon v. 7books) image_url varchar(100) könyv borítójának url címe notes text könyv tartalma is_recommended tinyint(4) könyv ajánlott/rendelhető-e rating int(11) könyv értékelése (1-5) rating_count int(11) könyv értékeléseinek száma rendelheto int(2) könyv rendelhető max. darabszáma 4. táblázat Az items tábla Ebben a táblában tárolom le az egyes könyvek adatait. Amennyiben az is_recommended mező értéke 1 (az admin felületen a checkbox be van pipálva), úgy a könyv megjelenik a Főoldalon a rendelhető könyvek között (Sikerlista). Az image_url mezőben adhatjuk meg a könyv borítójának elérési útvonalát. A borító képének kiterjesztése lehet: jpg, gif, png. members: Mezőnév Típus Leírás member_id int(11) tag azonosítója member_login varchar(20) tag felhasználóneve member_password varchar(50) tag jelszava member_level int(11) tag jogosultsági szintje first_name varchar(50) tag vezetékneve last_name varchar(50) tag keresztneve email varchar(50) tag e-mail címe phone varchar(50) tag telefonszáma address varchar(50) tag postacíme notes text megjegyzések 5. táblázat A members tábla Ebben a táblában tárolom le a regisztrált tagok adatait. A jogosultsági szint lehet 1 (Tag) vagy 2 (Rendszergazda). Az oldalra történő sikeres regisztrációval a felhasználó jogosultsági szintje automatikusan 1-re állítódik. 24

orders: rendelések adatainak tárolására szolgál Mezőnév Típus Leírás order_id int(11) rendelés azonosítója member_id int(11) tag azonosítója item_id int(11) könyv azonosítója quantity int(11) rendelési mennyiség/darabszám 6. táblázat Az orders tábla A rendelések tábla szerkezetét tekintve jól látható, hogy csupán azt tárolja el, hogy ki miből mennyit vásárolt, ehhez társul egy rendelési azonosító. Amint a rendelés elküldésre kerül, a kosár automatikusan kiürül, ezáltal a tábla tartalma is. 4.3.2. Táblák kapcsolata Az alábbi ábrán, melyet a MySQL Workbench (a DBDesigner utódja) keresztplatformos adatbázis-tervezésre szolgáló szoftverrel készítettem el, jól látható a táblák közötti kapcsolat. 27. ábra A táblák kapcsolata 25

4.4. Adatbiztonság Egyes hackerek közvetlenül támadják meg a kiszolgálókat és hálózatokat, de a legtöbben az ezeken futó nem biztonságos alkalmazásokat keresik, és általuk nyitnak kaput a kiszolgálóra vagy hálózatra. Azért az alkalmazásokat veszik célba, mert gyakran ezek a rendszer leggyengébb láncszemei. Magát a kiszolgálót a fizikai biztonság és a hálózat védi, a hálózatot pedig egy tűzfal. A kiszolgálón futó alkalmazások azonban gyakran nyitott ajtók, amelyeken keresztül mind a fizikai biztonság, mind a hálózat biztonsága megkerülhető (lásd az alábbi ábrán). 28. ábra Alkalmazások sebezhetősége 3 Amint a kódunk futni kezd egy nyilvános kiszolgálón, feltételeznünk kell, hogy egy hacker előbb-utóbb rátalál, és megpróbálja feltörni. További biztonsági problémát jelent a felhasználó által a rendszerbe bevitt adatok kezelése. Mivel valamilyen formában tárolnunk kell a felhasználó e-mail címét és jelszavát ahhoz, hogy beléphessen, biztosítanunk kell azt is, hogy rajtunk és a programon kívül más ne férhessen hozzá ezekhez az adatokhoz. A hitelesítési információk tárolásának modernebb megközelítése egy felhasználói adatbázistábla (members tábla) használata. Ennél a módszernél a felhasználónevek és jelszavak az alkalmazás adatbázisának egy táblájában tárolódnak, az adott felhasználóra nézve egyéb fiókadatokkal együtt. Amikor egy felhasználó bejelentkezik az alkalmazásba, a felhasználónevét és jelszavát a program elküldi az adatbázisnak, amely TRUE vagy FALSE választ ad rá, attól függően, hogy a felhasználónév-jelszó pár megfelel-e a tábla valamelyik bejegyzésének, vagy sem. Mindezeket figyelembe vettem az alkalmazásom megírásakor. 4.4.1. Bemenet érvényességének ellenőrzése Az alapelv az, hogy minden felhasználói bemenetet ellenőrzünk, és mindent visszautasítunk, ami nem tűnik érvényesnek. Ehhez meg kell határoznunk, hogy az elvárásainknak milyen formátumú felhasználói bemenet felel meg. 3 Ballad [2010] 26

Mikor a felhasználó a regisztráció során megadja felhasználónevét, jelszavát, e-mail címét, és egyéb szükséges adatait, reguláris kifejezéseket alkalmazva ellenőrzöm azok helyességét (a bevitt adat megfelel-e az előre megadott mintának), minimálisra csökkentve ezzel az SQL-befecskendezés lehetőségét. Az alábbi táblázatban felsorolom a verifikáció során használt reguláris kifejezéseket: Mezőnév Felhasználónév Jelszó Teljes név E-mail cím Cím Telefonszám Reguláris kifejezés /^[_a-z0-9-]*$/ /^[_a-za-z0-9-!]*$/ /^[a-za-z- áéíóöőúüűáéíóöőúüű]*$/ /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9- ]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/ /^[a-za-z0-9-\/\.\, áéíóöőúüűáéíóöőúüű]*$/ /^06-(20 30 70)-([0-9]){7}$/ 7. táblázat Reguláris kifejezések Hibaüzenete(ke)t kaphat a felhasználó a következő esetekben (lásd az alábbi ábrán): üresen hagytunk egy kötelezően kitöltendő mezőt nem megengedett karakter(eke)t használtunk bármelyik mezőben olyan felhasználónevet választottunk, amely már szerepel az adatbázisban olyan e-mail címet választottunk, amellyel már regisztráltak 29. ábra Regisztrációs hibaüzenetek Feltételezve, hogy az oldalra regisztrálók valós vásárlási szándékkal rendelkeznek, érvényes formátumú adatok megadása után nem iktattam be validációt, azaz érvényesítést. Ezután már sor kerülhet a belépésre, melyhez szükségünk lesz a felhasználó azonosítására, az ehhez szükséges adatok ideiglenes tárolására. Ehhez egy munkamenet sütit fogok használni, 27

ami a böngészőablak bezárása után törlődik a felhasználó számítógépéről. A sütiben egy változó értéket fogok tárolni a süti azonosítására, természetesen titkosítva, megakadályozva ezzel a munkamenet-rögzítés és munkamenet-eltérítés lehetőségét. A PHP beépített session_regenerate_id( ) függvény ugyan hatásos védelmet nyújt az ilyesfajta támadások ellen, én mégis inkább a süti azonosítójának titkosítása mellett döntöttem. 4.4.2. Jogosultság-ellenőrzés Egy dinamikus honlapon gyakran szükség van arra, hogy különböző felhasználókat különítsünk el és további jogokat biztosítsunk számukra a weblaphoz történő hozzáférés tekintetében. Ennek megfelelően 3 felhasználót különböztetek meg: Vendég, Tag (1), Rendszergazda (2). A zárójelekben szereplő számok a jogosultsági szintek értékei. A jogosultság ellenőrzéséért a check_security($ilevel) függvény felel, melynek kódja a következő: function check_security($ilevel) { global $UserRights; if(!session_is_registered("userid")) { header ("Location: login.php?querystring=". tourl(getenv("query_string")). "&ret_page=". tourl(getenv("request_uri"))."&message=1"); } else { if(!session_is_registered("userrights") $UserRights < $ilevel) header ("Location: login.php?querystring=". tourl(getenv("query_string")). "&ret_page=". tourl(getenv("request_uri"))."&alert=1");} } Vendégként ($ilevel<1) mindösszesen 2 funkció elérhető, a Keresés valamint evidens módon a Regisztráció. Ha mindezek ellenére megpróbálunk mégis tiltott területre lépni, abban az esetben automatikusan átirányítódunk a belépési oldalra egy hibaüzenet (&message) kíséretében (lásd az alábbi ábrán). 30. ábra Jogosultsági hibaüzenet 1 28

Amennyiben egy már bejelentkezett felhasználó ($ilevel=1) szeretne az Admin Felületre navigálni ($ilevel<2), úgy egy, a fentihez hasonló hibaüzenet (&alert) kíséretében értesítést kap (lásd az alábbi ábrán), hogy nincs jogosultsága megtekinteni az oldalt. 31. ábra Jogosultsági hibaüzenet 2 Összefoglalva, ha egy oldal megtekintéséhez 1-es jogosultsági szint szükséges, úgy azokat csak Tagok láthatják, ha 2-es jogosultsági szint szükséges, úgy azokat csak a Rendszergazda tekintheti meg. 4.4.3. Jelszavak titkosítása A megadott felhasználónév és jelszó biztosítja a felhasználó számára a hozzáférést az oldalhoz, ezeket érdemes olyan formában tárolni, hogy más ne férhessen hozzá. Ez főként a jelszóra igaz, mivel azt más számára nem szabad olvasható formában tárolni. Ennek oka, hogy egy felhasználó más oldalakon is ugyanazt a jelszót használhatja, és ha mi kiadjuk, akkor elég komoly gondot okoztunk számára. Egyirányú hash algoritmussal minimális többlet-erőfeszítéssel érhetünk el magasabb szintű biztonságot. A legrégebbi és legkevésbé biztonságos a crypt() függvény által kínált Unix Crypt algoritmus. Az md5() függvény által megvalósított Message Digest 5 (MD5) algoritmus ennél erősebb. Még erősebb ugyanakkor a Secure Hash Algorithm 1 (SHA-1) nevű algoritmus, melyet én is használok a jelszavak titkosítására. Az sha1() PHP függvény erős, egyirányú kriptográfiai hash függvény, melynek prototípusa a következő: string sha1 ( string str [, bool nyers_kimenet] ) Ha adott az str karakterlánc, a függvény egy pszeudo-véletlenszerű, 40 karakteres sztringet ad vissza. Vegyük például a jelszo karakterláncot: az sha1() függvény ekkor a 2f712f2b4c17b108f5961465d36a19c98301c173 sztringet adja vissza. Ezt nem lehet visszafejteni, még az sem tudja jelszo -vá visszaalakítani, aki létrehozta. Az sha1() függvény hasznosságát az adja, hogy kimenete egyértelmű (determinisztikus). Ha ugyanazt a karakterláncot adjuk neki, az sha1() mindig ugyanazt az eredményt fogja visszaadni. Nem 29

szükséges tisztában lennünk azzal, hogyan nézett ki a jelszó az sha1( ) függvény alkalmazása előtt, csak arról kell meggyőződnünk, hogy az sha1() függvényt a begépelt és az eredeti jelszóra alkalmazva ugyanazokat a kimeneteket kapjuk-e. 4 4.5. Az egyes funkciók működése Az alkalmazásom magját a common.php fájl képezi, mely tartalmazza a rendszerben használt függvények kódját, valamint include-olva a db_mysql.inc fájlt, amely az adatbázis függvényeket tartalmazza. Az oldalak többségének kódjában a következő fájlok vannak include-olva: common.php fejlec.php lablec.php A fejléc bal felső sarkában található YouTube ikonra kattintva a Lightbox JS technológia révén elérhetővé válik az oldal üzemeltetőjének bemutatkozó videója, melynek URL-je a fejlec.php fájlban a jelölt helyen módosítható. A láblécben találhatóak az egyes szöveges navigációs elemek, melyek megjelenítéséért a Footer_Show() függvény, míg a fejlécben ezek ikonmegfelelői, melyek megjelenítéséért a Menu_Show() függvény felel. A Regisztráció csak abban az esetben jelenik meg a fejlécben és a láblécben, ha még nem jelentkeztünk be az oldalra, vagyis még nem vagyunk Tagok. Ezt a következőképpen oldottam meg: amennyiben az if($_session["userid"] == NULL) feltétel igaz, vagyis Vendég felhasználóról van szó, úgy elérhető a regisztrációs ikon és navigációs elem, egyébként nem. Ugyanezt a feltételt alkalmaztam a Reg_Show() függvény esetében is, amely a regisztrációs űrlap megjelenítéséért felel, ha valaki annak ellenére, hogy már regisztrált, megpróbál újra regisztrálni (beírja a regisztrációs oldal címét a böngészőbe). Ekkor az alábbi hibaüzenet jelenik meg: 32. ábra Többszörös regisztráció nem engedélyezett 4 Luke Welling [2010] 30

A regisztrációs űrlap input mezőiben megadott értékek helyességét a preg_match() függvény ellenőrzi, melynek első paramétere az elfogadott minta (reguláris kifejezés), második paramétere pedig a vizsgálandó változó. Ha az adott változó megfelel a mintának, úgy a függvény visszatérési értéke TRUE, egyébként FALSE. A felhasználónév helyességét ellenőrző függvény (is_valid_user) például így néz ki: function is_valid_user($fldmember_login) { if(preg_match("/^[_a-z0-9-]*$/", $fldmember_login)) { return true; } else { return false; } } A függvény paramétere a $fldmember_login (felhasználónév mezőben megadott értéknek megfelelő változó), melyre ha a preg_match() függvény visszatérési értéke TRUE, úgy helyes a felhasználónév, egyébként FALSE, vagyis nem megengedett karakter(eke)t tartalmaz. Ellenőrzésre kerül még, hogy a Jelszó és a Jelszó megismétlése mezőben megadott értékek megegyeznek-e, ezt a következőképp valósítottam meg: if ($fldmember_password!= $fldmember_password2) { $sregerr.= "\na két jelszó nem egyezik."; } Vagyis, ha a Jelszó mezőben ($fldmember_password) és a Jelszó megismétlése mezőben ($fldmember_password2) megadott értékek nem egyeznek, úgy hibaüzenetet kap a felhasználó: A két jelszó nem egyezik. Ezeken kívül még megvizsgáltam azokat az eshetőségeket is, hogy a regisztrálandó felhasználónév és e-mail cím szerepel-e már az adatbázisban. if(strlen($fldemail)) { $icount = 0; $icount = dlookup("members", "count(*)", "email=". tosql($fldemail, "Text")); if($icount > 0) $sregerr.= "Ez az e-mail cím már foglalt.<br>"; } Először az strlen() függvény segítségével megvizsgálom, hogy az e-mail cím mezőben ($fldemail) lett-e megadva érték. Ha igen, akkor deklarálok egy változót ($icount), melynek kezdeti értéke 0. Ezután az előző változóhoz új értéket rendelek, amely nem lesz 31

más, mint a dlookup() függvény visszatérési értéke. A függvény az adatbázis members táblájában megvizsgálja, hogy a bemenetben szereplő e-mail cím megegyezik-e az ott tárolt e- mail címek egyikével. Ha igen, akkor a $icount változó értéke 1 lesz, vagyis ez az e-mail cím már foglalt, ahogy ezt a hibaüzenet is jelzi. Hasonlóképpen oldottam meg a felhasználónév elérhetőségének ellenőrzését is. Ha a regisztrálandó adatok mindegyike átmegy az ellenőrzésen, úgy azok feltöltődnek az adatbázis members táblájába, ezzel új felhasználó került felvételre a rendszerbe. A felhasználó jelszava az sha1() függvénnyel titkosítva kerül be az előbb említett táblába. A be- és kijelentkezést (megjelenítéséért a Login_Show() függvény felel) egy switch szerkezettel oldottam meg. Bejelentkezés esetén a felhasználó által beírt felhasználónevet és jelszót letárolom egy-egy változóba ($slogin, $spassword), rögtön az input mezők ellenőrzése után. A jelszót, természetesen, sha1() függvénnyel itt is titkosítom. Ezután eme 2 változó értékét összevetem az adatbázis members táblájában szereplő bejegyzésekkel, és lekérdezem, létezik-e ilyen felhasználó. Ha igen, a rendszer deklarál két új munkamenet változót, melyeknek átadásra kerül a felhasználó azonosítója és jogosultsági szintje. Ezután a rendszer belépteti az adott felhasználót, és átirányítja a kosar.php oldalra, ahol személyes adatait és a jelenleg üres kosarát látja. A belépési folyamatot az alábbi folyamatábrával is szemléltetem: 33. ábra A belépési folyamat 32

Kijelentkezés esetén a felhasználó azonosítója és jogosultsági szintje törlődik a 2 munkamenet változóból. Bejelentkezés után a fejléc jobb felső sarkában található kép belsejében megjelenik az adott Tag felhasználóneve, az eddigi Vendég felirat helyett. Ezt a következő módon oldottam meg: ha az if ($_SESSION["UserID"] == NULL) feltétel igaz, úgy a kiírandó $user változó értéke Vendég. Ellenkező esetben lekérdezem az adatbázis members táblájából az adott felhasználói azonosítónak megfelelő (member_id=".$_session["userid"].") felhasználónevet, melyet eltárolok a $num tömb típusú változóban. Ekkor a kiírandó $user változó értéke a $num[0] lesz. A konyvadatok.php oldalon több funkció is alkalmazásra kerül. Itt kerülnek megjelenítésre a Detail_Show() függvény által a Főoldalon kiválasztott könyv részletes adatai. Itt tehetjük kosárba az adott könyvet, megadva a rendelni kívánt mennyiséget, mely felület megjelenítéséért az Order_Show() függvény felel. Nem utolsó sorban itt értékelhetjük az adott könyvet, melyet a Rating_Show() függvény által megjelenített felületen tehetünk meg. A Detail_Show() függvény lekérdezi az adatbázis items táblájából az adott könyv adatait, melyet változókban tároltam el, majd azokat táblázatos formában jeleníti meg (Könyv adatai felület). Az ár helyes formátumú megjelenítéséért a number_format() függvény felel. A Order_Show() függvény által megjelenített felületen (Kosárba) jól látható, hogy a Mennyiség mező mellett zárójelben szerepel egy érték, mely esetünkben az adott könyv maximálisan rendelhető, készleten lévő darabszámát ($rendelhetomax) jelöli. Az ezt tartalmazó változó értéke az adatbázis items táblájából kinyert rendelheto mezőben megadott érték. Ez az érték az Admin Felületen megadható új könyv felvitele esetén, illetve módosítható a könyv adatainak szerkesztésével. Ha a mennyiség megadása után kosárba tesszük a terméket, úgy az adatok (tag azonosítója, rendelési mennyiség, könyv azonosítója) feltöltődnek az adatbázis orders táblájába. Minden egyes kosárba tett termék külön rendelési azonosítót kap. A Rating_Show() függvény által megjelenített felületen (Értékelés) látható az eddig értékelések átlaga ($fldrating_view), az eddigi szavazatok száma ($fldrating_count), illetve a Tag által megadható értékelés ($fldrating). Az értékelések átlag úgynevezett 5 csillagos rendszerben történik. Alapértelmezetten a következő értesítést láthatjuk: az adott könyvet még nem értékelték. A csillagok kapcsolatban állnak a Tag által megadható értékeléssel: 33

1* = Rossz (1) 2* = Átlagos (2) 3* = Jó (3) 4* = Nagyon jó (4) 5* = Kitűnő (5) if ($fldrating_view == 0) { $fldrating_view = "Még nem értékelték"; $fldrating_count_view = ""; } else { $fldrating_view = "<img src=\"images/". round($fldrating/$fldrating_count). "stars.gif\">"; } Vagyis, ha még egy felhasználó sem értékelte az adott könyvet, úgy a $fldrating_view változó értéke Még nem értékelték, ellenkező esetben a Tagi értékelések és az eddigi szavazatok számának átlagának egészre kerekített értékének megfelelő csillagszámú kép elérési útvonala (Pl.: <img src=\"images/4stars.gif\">). A kosar.php oldalon az Items_Show() függvény jeleníti meg az eddig kosárba tett termékeket az alábbi lekérdezés által: SELECT order_id, name, price, quantity, member_id, quantity*price as sub_total FROM items, orders WHERE orders.item_id=items.item_id ORDER BY order_id; Ahogy a lekérdezésből is jól látható, a tételenkénti összeg (Összesen) egyenlő a Mennyiség és az Ár szorzatával. Egy fix érték (Postaköltség) automatikusan hozzáadódik a Fizetendő összeghez (megjelenítéséért a Total_Show() függvény felel), mely minden egyes rendelésnél megegyezik. A (Szerkeszt) ikonra kattintva frissíthetjük vagy törölhetjük az adott tételt a ShoppingCartRecord_Show() függvény segítségével, mely egy switch szerkezet révén frissítéskor (case "update":) az adatbázis orders táblájában frissíti az adott rendelési azonosítóhoz tartozó felhasználói azonosítót és a rendelési mennyiséget, míg törléskor (case "delete":) eltávolítja az adott rendelési azonosítóhoz tartozó tételt. A kosar.php oldal a megrendelés adatait továbbküldi egy rejtett form révén a megrendel.php oldalnak. Az alábbi kódrészlet ennek menetét tükrözi: 34

do { [...] $trash[$i] = $fldorder_id; //egy tömb típusú változóban eltárolom az aktuális rendelések azonosítóját // A $masolando egy kétdimenziós tömb típusú változó, melynek tartalma a kosárban található tételek adatai $masolando[$i][0] = $flditem_id; $masolando[$i][1] = $fldprice; $masolando[$i][2] = $fldquantity; $masolando[$i][3] = $fldsub_total; $i++; $is_next_record = @$db->next_record(); } while($is_next_record); //amíg van rákövetkező tétel a kosárban echo '<form method="post" action="megrendel.php">'; echo '<div style="display:none;">'; echo '<input type="text" name="member_id" value="'.$vevo_id.'">'; for ($i=0;$i<count($masolando);$i++) { echo '<input type="text" name="termek_'.$i.'_cim" value="'.$masolando[$i][0].'">'; echo '<input type="text" name="termek_'.$i.'_ar" value="'.$masolando[$i][1].'">'; echo '<input type="text" name="termek_'.$i.'_mennyiseg" value="'.$masolando[$i][2].'">'; echo '<input type="text" name="termek_'.$i.'_osszesen" value="'.$masolando[$i][3].'"><br>'; } echo '<input type="text" name="vevo_nev" value="'.$vevo_nev.'">'; echo '<input type="text" name="vevo_cim" value="'.$vevo_cim.'">'; echo '<input type="text" name="vevo_email" value="'.$vevo_email.'">'; echo '<input type="text" name="termekek_szama" value="'.count($masolando).'"><br />'; echo '</div>'; A megrendel.php oldalon a form jobb felső részében kap helyet a rendelésünk végösszege, mely automatikus generálás útján jelenítődik meg: for ($i=0;$i<$_post["termekek_szama"];$i++) { $vegosszeg2 = $vegosszeg2 + ($_POST["termek_".$i."_ar"]*$_POST["termek_".$i."_mennyiseg"]); } $postaktg2 = 2000; $vegosszeg2 = $vegosszeg2+ $postaktg2; $vegosszeg2 = number_format($vegosszeg2,0,',',' '); [...] echo $vegosszeg2; A Feladó, E-mail cím, Szállítási cím mezők szintén automatikusan kerülnek kitöltésre, köszönhetően a kosar.php oldal által elküldött, majd itt POST-olt adatoknak: 35

[ ] echo $_POST["vevo_Nev"]; echo $_POST["vevo_Email"]; echo $_POST["vevo_Cim"]; [ ] A fenti adatok nem módosíthatóak a form-on belül. A levél szövege mező tartalma előre megírt (textarea-ban elhelyezve), szabadon szerkeszthető a megrendelés elküldése előtt. A megrendelés a mail() függvény segítségével érkezik meg az üzemeltető e-mail címére, amely tartalmazza a megrendelési és a postázási adatokat, valamint az előbb említett, előre megírt levelet. Ezen adatokat a megrendel.php oldal küldi el a mail.php oldal részére egy rejtett form-on keresztül: <textarea name="mail_info" hidden> <? echo "<table>"; echo "<tr><td colspan=\"5\"><b>megrendelt termékek adatai</b></td></tr>"; echo "<tr><th align='left'>#</th><th align='left'>cím</th><th align='left'>ár</th><th align='left'>mennyiség</th><th>összesen</th></tr>"; for ($i=0;$i<$_post["termekek_szama"];$i++) {if($_post["termekek_szama"]>1) {$j = $i+1; $j.= ".";} else {$j="";} echo "<tr><td><b>".$j."</b></td>"; echo "<td>".$_post["termek_".$i."_cim"]."</td>"; echo "<td align='right'>".number_format($_post["termek_".$i."_ar"],0,',',' ')." Ft</td>"; echo "<td>".$_post["termek_".$i."_mennyiseg"]." darab</td>"; echo "<td align='right'>".number_format($_post["termek_".$i."_osszesen"],0,',',' ')." Ft</td></tr>"; $vegosszeg = $vegosszeg + ($_POST["termek_".$i."_ar"]*$_POST["termek_".$i."_mennyiseg"]); } $postaktg = 2000; $postaktg2 = number_format($postaktg,0,',',' '); $vegosszeg = $vegosszeg + $postaktg; $vegosszeg = number_format($vegosszeg,0,',',' '); echo "<tr><td>(pk)</td><td colspan='3'>postaköltség:</td><td align='right'>$postaktg2 Ft</td></tr>"; echo "<tr><td colspan=\"5\"><hr></td></tr>"; echo "<tr><td colspan='4'><b>végösszeg:</b></td><td align='right'><b>".$vegosszeg." Ft</b></td></tr>"; echo "</table>"; echo "<br>"; echo "<table>"; echo "<tr><td colspan=\"2\"><b>postázási adatok</b></td></tr>"; echo "<tr><td>név:</td><td>".$_post["vevo_nev"]."</td></tr>"; echo "<tr><td>cím:</td><td>".$_post["vevo_cim"]."</td></tr>"; echo "</table>";?> </textarea> 36

37 Ahogy az előző kódrészletben látható, az elküldendő levél tartalmi részében (mail_info) szerepelnek html tag-ek. Ezek helyes értelmezéséért és megjelenítéséért az alábbi kódrészlet felel: $uzenet = "<html><head></head><body><pre style=\"fontfamily:verdana;\">".$_post["mail_levelszov"]."</pre>\n\n". "".$_POST["mail_Info"]."\n\n </body></html>"; A mail() függvény által elküldött levél szerkezete: $cimzett = "mathnek@gmail.com"; $targy = "Megrendelés"; $uzenet = "<html><head></head><body><pre style=\"fontfamily:verdana;\">".$_post["mail_levelszov"]."</pre>\n\n". "".$_POST["mail_Info"]."\n\n </body></html>"; $fejlec = 'MIME-Version: 1.0'. "\r\n"; $fejlec.= 'Content-type: text/html; charset=utf-8'. "\r\n"; $fejlec.= "From: ".$_POST["mail_Email"].""; Vagyis a Megrendelés tárgyú e-mail fejlécében található meg a rendelést feladó Tag e-mail címe, a tartalmi részben pedig az alapértelmezett (vagy módosított) levél, illetve a megrendelt termékek adatai (több termék esetén sorszámozott megjelenítéssel) és a postázási adatok. Az alábbi kódrészlet révén megoldottam mind a levél (megrendelés) elküldését, mind a visszaigazolás küldését, mind pedig a kosár kiürítését: $success = mail($cimzett, $targy, $uzenet, $fejlec); //levélküldés if ($success) { //levél sikeres elküldésének ellenőrzése echo "<center>a levél sikeresen elküldve!</center>"; //elküldve $sql = 'DELETE FROM orders WHERE member_id='.$_post['member_id'].''; //kosár kiürítése $db->query($sql); echo "<center><input type='button' class='gomb' id='vissza' value='' onclick=\"location.href='kosar.php'\" /></center>"; } else { echo "<center>a levél nem került elküldésre!</center>"; //sikertelen küldés echo "<br/>"; echo "<center><input type='button' class='gomb' id='vissza' value='' onclick=\"location.href='kosar.php'\" /></center>"; }; Az Admin Felületen a Tagok, Rendelések, Könyvek, Vezércikkek és Vezércikk kategóriák kezelését a négy fő SQL parancs (SELECT, INSERT INTO, UPDATE, DELETE) és WHERE clause-ok által valósítottam meg, így az ismétlődést elkerülve, ezeket most nem részletezem. Az alkalmazás működését és a rendelés menetét a következő folyamatábrán is szemléltetem a könnyebb átláthatóság érdekében: a folyamatábrán nem szerepelnek a logisztikai folyamatok, ugyanakkor ezek is nélkülözhetetlen elemei lesznek az általam készített alkalmazásnak a későbbiek (a megrendelőnek történő átadás után) során.

34. ábra A rendelés menete 38

4.6. Tesztelés A megvalósított alkalmazást tesztelni is kell, mivel ily módon derül ki, hogy a feladatspecifikációnak megfelelő termék jött-e létre. A kódolás során folyamatosan teszteltem mind az egyes funkciókat, mind az addig elkészült rendszert. Sajnos, nem egyszer estem abba a hibába, hogy elgépeltem a kódot, rossz szintaktikát használtam. Ezeket, szerencsére, sikerült hamar felderítenem és javítanom, köszönhetően a Notepad++ szintaktikai kiemeléseinek, valamint a php által küldött hibaüzeneteknek, melyek megadják a hiba helyét is. A teszteléshez nagy segítség volt az echo()függvény, amellyel az egyes értékeket tudtam megjeleníteni. Ez azért is volt fontos, mert így az oldalak között áramló adatokról mindig pontos képet kaptam, az értékek kiíratásával pedig mindig eljutottam a probléma forrásához. Szintén nagy segítségemre volt a mysql_error() függvény, amely a mysql-től érkező hibaüzeneteket jeleníti meg. Egyes hibákról a rendszergazdát és a tagokat is tájékoztatni kell, erre feltételek sorát hoztam létre a szükséges oldalakon. Fontosnak tartottam a felhasználóktól érkező adatok vizsgálatát is, arra az esetre, ha nem megfelelő értéktartományból kívánnak értéket átadni. Szélsőséges értékeket használva erre is végeztem teszteléseket, melyből megtudhattam, hogy működnek-e a hibakezelési funkciók. A fejlesztői dokumentáció a Bemenetek érvényességének ellenőrzése fejezetben taglalt, a regisztráció során felmerülő hibaüzenetek jó példát szolgáltatnak ezekre. Az alkalmazást feltelepítettem a konzulensemtől kapott tárhelyre, valamint a http://dot.tk oldalon regisztráltam egy ingyenes domain-t (http://negyesipeter.tk), melyet átirányítottam erre a tárhelyre, elérhetővé téve ezzel a szakdolgozatom online példányát. A tesztelés folyamán többször is kipróbáltam teljesen végig járva a vevők és eladók lehetőségeit, bejelentkeztem, elvégeztem a rendelés összeállítását, rendeltem, ellenőriztem a mail() függvény helyes működését. Az Admin Felületen termékeket, kategóriákat, vezércikkeket vittem fel, módosítottam, töröltem azokat, és visszaellenőriztem az adatbázisból. A felhasználók szemszögéből történő teszteléshez megkértem számos ismerősömet, hogy ellenőrizzék le a rendszer működését, és osszák meg velem az észrevételeiket. Abban az esetben, ha hibát vélnek felfedezni, kértem őket a hiba pontos ismertetésére. Az alkalmazás üzemeltetése és tesztelése nem zárul le a szakdolgozat elkészítésével. 39

A tesztelés során felmerülő hibákat, köszönhetően ismerőseim visszajelzéseinek, többségükben sikeresen javítottam. Hiba jelentkezik a mail() függvény használatakor, ha nincs e-mail kiszolgáló telepítve. A Főoldalon a Heti akciók tartalma egyelőre csak a phpmyadmin felületén keresztül módosítható. A regisztrációs form kitöltésénél az input mezők vizsgálatánál hiányosak voltak a megadott reguláris kifejezések (magyar ékezetes betűk elfogadása). Ezt a hibát egyik tesztelő ismerősöm vette észre, jelezte felém, én pedig azonnal javítottam. Teszteltem a jogosultságokat is, megpróbáltam jogosultság nélkül belépni az Admin Felületre úgy, hogy az URL-ben megadtam az egyik admin oldal címét. Az elvártak szerint működött, hiba üzenet kíséretében visszadobott a bejelentkezési oldalra. Ellenőriztem továbbá azt is, hogy csak regisztrált felhasználóként tudok rendelni az oldalról, ami szintén rendben működött. 4.7. Továbbfejlesztési lehetőségek Az alkalmazás fejlesztése során felmerültek bennem további fejlesztési lehetőségek, illetve már sokat használt webáruházak megtekintésével is sok hasznos funkcióra lehet bukkanni. Az alábbiakban a továbbfejlesztés során megvalósítható funkciókat sorolom fel: Vendégkönyv fejlesztése, mely révén a felhasználók elmondhatják véleményüket az oldalról. Heti akciók kezelése felület létrehozása a Rendszergazda számára Egy adott könyvhöz tartozó hozzászólások, ahol megosztásra kerülhetnek a termékkel kapcsolatos észrevételek, vélemények. Több kép hozzárendelése egy könyvhöz. Ehhez az adatbázis módosítására van szükség. Egy termék több kategóriába sorolása. Ehhez egy kapcsolótáblára lesz szükség. A gyakran ismételt kérdések (GYIK) oldal létrehozása. Az oldal üzemeltetése során felmerülő kérdések, és megválaszolásuk. Számlázó alkalmazás fejlesztése és integrálása. A rendszergazdai tevékenységek naplózása. Ehhez olyan függvény kreálására lesz szükség, amely az adott tevékenységnek megfelelő paramétereket eltárolja egy dokumentumban. Az oldal kinézetének finomhangolása a stíluslapok módosításával. 40

5. Összefoglalás Szakdolgozatom célja egy könnyen kezelhető és karbantartható, termékek (használt egyetemi tankönyvek) értékesítésére alkalmas online könyváruház fejlesztése volt. A feladatspecifikáció által rögzített követelményeknek úgy gondolom, sikerül eleget tennem (a megkérdezett 34 emberből 34-en maximális értékelést adtak a Melléklet I. pontjában megtalálható üres kérdőív kérdéseire), a fő funkciókat sikeresen megvalósítottam. Az Admin Felület létrehozásával a termékek felvitele és karbantartása nagyon egyszerűvé és hatékonnyá vált, ezáltal a termékek értékesíthetőségének folyamata is felgyorsult. A megrendelő részére az alkalmazás hamarosan átadásra kerül, remélem, hogy az általam elkészített alkalmazással eléri célját, és meg tud válni használt egyetemi tankönyveitől. A téma kiválasztása óta szélesítettem ismereteimet és tapasztalataimat, átfogó képet kaptam az aktuális technikákról. Ami számomra a leghasznosabb volt, hogy eddigi ismereteimet, tanulmányaimat egy valós projektben használhattam fel. Elköteleztem magam a szakdolgozatomban alkalmazott technológiák mellett, ezért is kívánom mind ez irányú tudásomat, mind az elkészített alkalmazást tovább bővíteni. Reményeim szerint szakdolgozatom jó ajánlólevél lehet, mivel ezen a területen áll szándékomban dolgozni a jövőben. 41

6. Irodalomjegyzék A felhasznált irodalmak jegyzéke Ballad, T. B. [2010]: Biztonságos webalkalmazások PHP nyelven, Debrecen. John L. Viescas, Michael J. Hernandez [2009]: SQL-lekérdezések földi halandóknak, Debrecen. Luke Welling, L. T. [2010]: PHP és MySQL webfejlesztőknek, Budapest. Lynn Beighley, Michael Morrison [2009]: Agyhullám: PHP & MySQL, Debrecen. Sági Gábor [2005]: Webes adatbázis-kezelés PHP és MySQL használatával, Budapest. Virginia DeBolt [2005]: HTML és CSS, Debrecen. Internetes források http://www.kreditvadasz.hu (letöltés dátuma: 2012. március 11.) http://www.peetsoft.hu/publikaciok/b2c_adatbazis_modellezes.pdf dátuma: 2012. március 13.) (letöltés 42

7. Ábrajegyzék 1. ÁBRA AZ APACHE, PHP ÉS MYSQL KAPCSOLATA... 5 2. ÁBRA AZ ÜDVÖZLŐ OLDAL... 8 3. ÁBRA A FŐOLDAL... 8 4. ÁBRA ÖSSZETETT KERESÉS... 9 5. ÁBRA REGISZTRÁCIÓ... 9 6. ÁBRA BE- ÉS KIJELENTKEZÉS... 10 7. ÁBRA FELHASZNÁLÓI ADATOK... 11 8. ÁBRA ADATMÓDOSÍTÁS... 11 9. ÁBRA KÖNYV ADATAI... 12 10. ÁBRA ÉRTÉKELÉS... 12 11. ÁBRA KOSÁRBA RAKÁS FELÜLETE... 12 12. ÁBRA KOSÁR TARTALMA... 13 13. ÁBRA MEGRENDELÉS ADATAI... 13 14. ÁBRA VISSZAIGAZOLÁS... 14 15. ÁBRA ADMIN FELÜLET... 14 16. ÁBRA TAGOK KEZELÉSE FELÜLET... 15 17. ÁBRA ÚJ TAG FELVITELE... 15 18. ÁBRA BEÉRKEZETT RENDELÉS FORMÁJA... 16 19. ÁBRA MEGRENDELÉS ADATAINAK FORMÁJA EGY TERMÉK ESETÉN... 16 20. ÁBRA RENDELÉSEK KEZELÉSE FELÜLET... 17 21. ÁBRA ÚJ RENDELÉS FELVITELE... 17 22. ÁBRA KÖNYVEK KEZELÉSE FELÜLET... 17 23. ÁBRA KÖNYV ADATAINAK SZERKESZTÉSE... 18 24. ÁBRA MYSQL DUMP FÁJL IMPORTÁLÁSA... 19 25. ÁBRA HASZNÁLATI ESET DIAGRAM... 22 26. ÁBRA AZ ADATBÁZIS FELÉPÍTÉSE... 23 1. TÁBLÁZAT A CATEGORIES TÁBLA... 23 2. TÁBLÁZAT AZ EDITORIALS TÁBLA... 23 3. TÁBLÁZAT AZ EDITORIAL_CATEGORIES TÁBLA... 24 4. TÁBLÁZAT AZ ITEMS TÁBLA... 24 5. TÁBLÁZAT A MEMBERS TÁBLA... 24 6. TÁBLÁZAT AZ ORDERS TÁBLA... 25 27. ÁBRA A TÁBLÁK KAPCSOLATA... 25 28. ÁBRA ALKALMAZÁSOK SEBEZHETŐSÉGE... 26 7. TÁBLÁZAT REGULÁRIS KIFEJEZÉSEK... 27 29. ÁBRA REGISZTRÁCIÓS HIBAÜZENETEK... 27 30. ÁBRA JOGOSULTSÁGI HIBAÜZENET 1... 28 31. ÁBRA JOGOSULTSÁGI HIBAÜZENET 2... 29 32. ÁBRA TÖBBSZÖRÖS REGISZTRÁCIÓ NEM ENGEDÉLYEZETT... 30 33. ÁBRA A BELÉPÉSI FOLYAMAT... 32 34. ÁBRA A RENDELÉS MENETE... 38 35. ÁBRA APPSERV TELEPÍTÉSE 1. LÉPÉS... 45 36. ÁBRA APPSERV TELEPÍTÉSE 2. LÉPÉS... 45 37. ÁBRA APPSERV TELEPÍTÉSE 3. LÉPÉS... 46 38. ÁBRA APPSERV TELEPÍTÉSE 4. LÉPÉS... 46 39. ÁBRA APPSERV TELEPÍTÉSE 5. LÉPÉS... 47 40. ÁBRA APPSERV TELEPÍTÉSE 6. LÉPÉS... 47 41. ÁBRA APPSERV TELEPÍTÉSE 7. LÉPÉS... 48 42. ÁBRA APPSERV TELEPÍTÉSE 8. LÉPÉS... 48 43. ÁBRA APPSERV TELEPÍTÉSE 9. LÉPÉS... 49 44. ÁBRA APPSERV TELEPÍTÉSE 10. LÉPÉS... 49 45. ÁBRA APPSERV TELEPÍTÉSE 11. LÉPÉS... 50 43

8. Mellékletek I. Használt Könyvek Áruháza - Szakdolgozati kérdőív Ezen kérdőíven keresztül az általam elkészített webes alkalmazás (http://negyesipeter.tk) kezelhetőségét vizsgálom, melynek végleges adatait szakdolgozatomban használom fel. Kérem Önöket, hogy a valóságnak megfelelően és értelemszerűen töltsék ki a kérdőívet! A VÁLASZADÁS ÖNKÉNTES! 1. Neme A.) Nő B.) Férfi 2. Általánosságban hogyan értékeli a honlapot? A.) Rossz B.) Átlagos C.) Jó D.) Nagyon jó E.) Kiváló 3. Mennyire tartja átláthatónak a honlapot? A.) Nem átlátható B.) Átlátható C.) Jól átlátható D.) Teljesen átlátható 4. Mennyire tartja kezelhetőnek a honlapot? A.) Rosszul kezelhető B.) Kezelhető C.) Jól kezelhető D.) Nagyon jól kezelhető E.) Egyszerűbb nem is lehetne 5. Mi a véleménye a termékek leírásairól? A.) megfelelően részletesek, informatívak B.) átlagosnak mondhatóak C.) nem megfelelő az információ mennyisége, minősége 6. Milyen fizetési módot részesít előnyben internetes vásárlásnál? A.) utánvétet B.) átutalást C.) bankkártyás, hitelkártyás fizetést 7. Elégedett a rendelési folyamat gyorsaságával? A.) Nem vagyok elégedett B.) Elégedett vagyok C.) Teljesen elégedett vagyok KÖSZÖNÖM VÁLASZÁT! NÉGYESI PÉTER web-programozó LIA Szolnok 44

II. AppServ alkalmazás telepítésének útmutatója (képernyőmentések) 35. ábra AppServ telepítése 1. lépés 36. ábra AppServ telepítése 2. lépés 45

37. ábra AppServ telepítése 3. lépés 38. ábra AppServ telepítése 4. lépés 46

39. ábra AppServ telepítése 5. lépés 40. ábra AppServ telepítése 6. lépés 47

41. ábra AppServ telepítése 7. lépés 42. ábra AppServ telepítése 8. lépés 48

43. ábra AppServ telepítése 9. lépés 44. ábra AppServ telepítése 10. lépés 49