Programozás | PHP » Zsáki Erik - Nagykereskedelmi webáruház fejlesztése

Alapadatok

Év, oldalszám:2007, 56 oldal

Nyelv:magyar

Letöltések száma:1008

Feltöltve:2007. június 21.

Méret:548 KB

Intézmény:
-

Megjegyzés:

Csatolmány:-

Letöltés PDF-ben:Kérlek jelentkezz be!



Értékelések

Nincs még értékelés. Legyél Te az első!


Tartalmi kivonat

SZAKDOLGOZAT Nagykereskedelmi webáruház fejlesztése Konzulens: Ujvárosi György Dózsa György Gazdasági és Mőszaki Szakközépiskola és Szakiskola Kalocsa Készítette: Zsáki Erik Számítástechnikai programozó OKJ 54 4641 05 Dózsa György Gazdasági és Mőszaki Szakközépiskola és Szakiskola Kalocsa 2007 Zsáki Erik Nagykereskedelmi webáruház fejlesztése Tartalomjegyzék 1. BEVEZETİ . 2 2. A MAGYAR ONLINE KERESKEDELEM. 3 3. HASZNÁLT ESZKÖZÖK . 5 3.1 3.2 3.3 3.4 3.5 3.6 4. PHP . 5 MYSQL . 6 APACHE . 6 HTML. 6 CSS. 7 BÖNGÉSZİK . 8 A SZOFTVER-FOLYAMAT TEVÉKENYSÉGEI [5] . 9 4.1 SZOFTVER SPECIFIKÁCIÓ. 11 4.11 A megrendelı szemszögébıl 11 4.12 Funkciók 12 4.13 A vásárlás folyamata 14 4.14 A termék útja a vásárlóhoz 14 4.15 Az oldallal szembeni elvárások 14 4.16 Felhasználói eset diagrammok 16 4.2 SZOFTVER-TERVEZÉS ÉS IMPLEMENTÁCIÓ . 17 4.21 Általános felépítés 17 4.22 Az adminisztrációs és a felhasználói

(vevı) oldal kinézete 18 4.23 Az adatbázis tervezése [4] 20 4.24 Mysql használata PHP-ból 27 4.25 Program kódolása 30 4.251 Admin beléptetése . 31 4.252 Kategória törlése . 33 4.253 Képek feltöltése . 35 4.254 Rendelések teljesítése. 36 4.255 A kosár mőködése . 38 4.256 Keresés a termékek között . 41 4.257 Képek megjelenítése. 45 4.3 SZOFTVER VALIDÁCIÓ . 47 4.31 Tesztelés 47 4.4 SZOFTVER KARBANTARTÁS . 50 4.41 Továbbfejlesztési lehetıségek 50 5. FELHASZNÁLÓI DOKUMENTÁCIÓ . 51 5.1 5.2 5.3 5.4 WEBÁRUHÁZ TELEPÍTÉSE . 51 ÜZEMELTETÉSI LEÍRÁS . 52 TESZT ADATOK. 52 SZÜKSÉGES HARDVER ÉS SZOFTVER . 52 6. ÖSSZEFOGLALÁS. 53 7. FELHASZNÁLT SZAKIRODALOM ÉS FORRÁSOK. 54 8. MELLÉKLET. 55 1 Zsáki Erik Nagykereskedelmi webáruház fejlesztése 1. Bevezetı Egy nagykereskedelmi webáruház megvalósítása a célom, ami különféle növényeket, mezıgazdasági termékeket, kész élelmiszereket, ıstermelık végtermékeit

értékesít. Az internet térhódításával az online kereskedelem is jelentıs tömegbázist tudhat maga mögött. Ma Magyarországon ez a fajta értékesítési mód még nem annyira elterjedt, ennek oka az internetes infrastruktúra, és a magyar vásárlói szokások. Az áruház a virtuális és valós világ összekapcsolásával alkot kereskedelmi egységet majd. A termékek kiválasztása és rendelése a világhálón, átvétele a valós világban, személyesen történik. Így a vásárlók nagyobb bizalommal lesznek, gyorsabb szállítást és problémamegoldást remélhetnek. Könnyen használható és praktikus felülettel kell rendelkeznie, a vásárlók és az eladók felé egyaránt. Biztosítva az egyértelmőséget, és egyszerő fizetési módot a vásárlók részére Funkcióiban lehetı legjobban közelítse meg a „megszokott” (nem interneten keresztül történı) vásárlás formáját. A vevık döntı többsége nem érdekelt az

informatikában, számukra ez a vásárlási forma csak egy eszköz (mint például egy gépjármő, pénztárgép, vagy banki szolgáltatás). Természetesen némi tudás szükséges részükrıl, amit a lehetı legjobban minimalizálni kell a fejlesztés során. Megvalósításhoz a jól bevált Apache, MySQL, PHP hármast veszem igénybe. Az információk tárolása adatbázisban történik, melybıl a php segítségével dinamikus, könnyen karbantartható oldalt képez. Ma már ez az egyik legelterjedtebb technika, ami kiváló alapot biztosít a webáruháznak. Azért esett választásom erre a témára, mert az informatikán belül számomra az egyik legérdekesebb téma az internet. A megvalósítás folyamán átfogó képet kapok a mőködésérıl, és lehetıségeirıl, melyet késıbbi munkáim során kívánok kamatoztatni. Emellett családi vállalkozásunk hasonló kereskedelemben érintett, ezért számomra ismertek a követelmények, elvárások, és jól

követhetı lesz számomra, miként állja meg helyét a termék egy esetleges tényleges bevezetés után. 2 Zsáki Erik Nagykereskedelmi webáruház fejlesztése 2. A magyar online kereskedelem „Miközben Magyarországon több százezren használják az elektronikus banki szolgáltatásokat, az internetes vásárlás egyelıre a hagyományos kiskereskedelem csupán 0,1 százalékát teszi ki. Az e-kereskedelem legnagyobb kerékkötıje, hogy ragaszkodunk a hagyományos vásárlási formákhoz. Ám lassan felnı az a korosztály, amely hozzászokott a világhálón való böngészéshez, és nem idegenkedik az on-line vásárlástól. A kereskedelem szereplıinek is szemléletváltozásra van szükségük: üzleti modelljeiket át kell dolgozniuk az on-line üzletmenetre.” (forrás: http://wwwpiacesprofithu/?r=10530 ) 1.ábra Áruház célcsoportja azok a felhasználok, akik a nagykereskedelemben érdekeltek. Az 1.ábra a korcsoportok és azok internet

használatának százalékos arányát fejezi ki Célközönség életkora 25-50 év közé tehetı (természetesen nem zárt az intervallum), és ennek a csoportnak kell, hogy megfeleljen a szolgáltatás. 2. ábra 3 Zsáki Erik Nagykereskedelmi webáruház fejlesztése A 2. ábrán látható hogy az évek múlásával nı az interneten történı vásárlások száma Egy jól kialakított kereskedelmi oldal esetében könnyebb megtartani, és „megszerezni” a vásárlókat. Feltehetıen az elkövetkezı években jelentısen nıni fog az interneten vásárlók bázisa, és nem lesz annyira idegen ez a vásárlási forma. A munkájukhoz internetet használók nagyobb része hatékonyabbnak találja az internet használatát (3. ábra) 3. ábra Cél, hogy a felhasználók szemében egy eszközként szerepeljen a weboldal. A webáruház üzemeltetıjének az-az érdeke, hogy egyes felhasználók rendszerességgel vásároljanak a már meglévı és új termékek közül.

Amennyiben elégedettek a szolgáltatással, biztos lehet a vásárlói kör kiszélesedésében, és az árú forgalom növekedésében. Az interneten történı vásárlás elınyökkel jár a vásárló és az eladó számára egyaránt. Eladó: • • • • • • Önkiszolgáló vendégek Vásárló adatainak gyors elérése Könnyebb elszámolás a hivatalos szervek felé Internet kapcsolattal bárhonnan elérhetı az áruház Kisebb munkaerıigény Hatékony kommunikáció a vevıkkel Vevı: • • • 24 órás nyitva tartás Könnyen áttekinthetı, és szelektálható terméklista Gyors ügyintézés Információk forrása [1] 4 Zsáki Erik Nagykereskedelmi webáruház fejlesztése 3. Használt eszközök 3.1 PHP A PHP elterjedt nyílt forráskódú szerveroldali programozási nyelv. Szintaktikája leginkább a C programozási nyelvéhez hasonlít. Megalkotója Rasmus Lerdorfd A PHP nyelv túlnıtt eredeti jelentıségén. Születésekor csupán egy makró

készlet volt, amely személyes honlapok karbantartására készült. Innen ered neve is: Personal Home Page Tools. Késıbb a PHP képességei kibıvültek, így egy önállóan használható programozási nyelv alakult ki, amely képes nagymérető webes adatbázis-alapú alkalmazások mőködtetésére is. A PHP jelenleg hivatalosan a PHP: Hypertext Preprocessor (Hiperszöveg Elıfeldolgozó) elnevezést használja. Tulajdonképpen kiszolgáló-oldali programozási nyelv, amit jellemzıen HTML oldalakon használnak. A hagyományos HTML lapokkal ellentétben azonban a kiszolgáló a PHP parancsokat nem küldi el az ügyfélnek, azokat a kiszolgáló oldalán a PHP-értelmezı dolgozza fel. A programban lévı HTML elemek érintetlenül maradnak, de a PHP kódok lefutnak A kódok végezhetnek adatbázis-lekérdezéseket, dinamikusan létrehozhatnak képeket, fájlokat olvashatnak és írhatnak, kapcsolatot létesíthetnek távoli kiszolgálókkal. A lehetıségek száma végtelen. A

PHP kódok kimenete a megadott HTML elemekkel együtt kerül az ügyfélhez A Zend Technologies a PHP mögött álló elsı számú cég, a PHP alapjainak készítıi indították. Az értelmezıt támogató kereskedelmi termékeket fejlesztenek, terméktámogatással. A honlapjukon található referenciák egyértelmővé teszik a PHP egyre szélesedı elfogadottságát a magasabb üzleti szektorban. A PHP továbbra is ingyenes termék, minden feladatra elérhetıek költségmentes megoldások. A PHP-t alapvetıen úgy tervezték, hogy alkalmas legyen számos operációs rendszeren való használatra, együttmőködve különbözı kiszolgálókkal és adatbázis-kezelıkkel. Hivatalos honlap: http://www.phpnet/ 5 Zsáki Erik Nagykereskedelmi webáruház fejlesztése 3.2 MySQL A MySQL egy több felhasználós, többszálú, SQL-alapú relációs adatbázis-kezelı szerver. Az MySQL az egyik legelterjedtebb adatbázis-kezelı, aminek egyik oka lehet, hogy a teljesen nyílt

forráskódú LAMP (Linux–Apache–MySQL–PHP) összeállítás részeként költséghatékony és egyszerően beállítható megoldást ad dinamikus webhelyek szolgáltatására. A MySQL adatbázisok adminisztrációjára a mellékelt parancssori eszközöket ( mysql és mysqladmin) használhatjuk. A MySQL honlapjáról grafikus felülető adminisztráló eszközök is letölthetık: MySQL Administrator és MySQL Query Browser. Széles körben elterjedt és népszerő alternatíva a PHP nyelven írt, nyitott forráskódú phpMyAdmin. A phpMyBackupPro (amelyet szintén PHP-ban írtak) adatbázisok (akár idızített, ismétlıdı) mentésére szolgál eszközül. A phpMyAdmin a MySQL adatbázisok WEB alapú, teljes körő adminisztrációját teszi lehetıvé. 3.3 Apache A legelterjedtebb nyílt forrású, szabadon terjeszthetı webszerver, amelynek különbözı változatai többek között Windows, Linux és OS/2 operációs rendszerek alatt is futtathatóak. 3.4 HTML A HTML

(HyperText Markup Language) egy leíró nyelv, melyet weboldalak készítéséhez fejlesztettek ki. Az SGML leegyszerősített változata, amely ma már internetes szabvánnyá vált, a W3C (World Wide Web Consortium) támogatásával. Az aktuális változata a 401 amelyet lassan kiszorít az XHTML. A HTML-t egy bizonyos Tim Berners-Lee fejlesztette ki. Akkor vált igazán népszerővé, amikor (1993) elkészült (az NCSA webszerverhez) a Mosaic, az elsı grafikus internetböngészı (Unix rendszereken), ami HTML-t jelenített meg. Ez a böngészı késıbb megjelent Machintoson és Windowson is. A Mosaic projektbıl késıbb kilépett néhány fontos ember, és megalapította a Netscape Communications Corporationt, amely kifejlesztette a Netscape Navigátor böngészıt. Ez a 6 Zsáki Erik Nagykereskedelmi webáruház fejlesztése legelterjedtebb és legnagyobb tudású böngészı volt 1996-ig, amikor is az Internet Explorer vált a leggyakrabban használt böngészıvé. A

HTML nyelvet szabványosították, valamint ápolását és továbbfejlesztését pedig a WWW Consorcium vette át. HTML általában szöveges állományokban található meg olyan számítógépeken, melyek az internethez kapcsolódnak. Ezek az állományok tartalmazzák azokat a szimbólumokat, amelyek a megjelenítı programnak leírják, hogyan is kell megjeleníteni, illetve feldolgozni az adott állomány tartalmát. Megjelenítı program lehet egy webböngészı (web browser), aural böngészı (olyan, amelyik a felhasználónak felolvassa a megjelenítendı szöveget), levelezı program (mint például: Mozilla Thunderbird, Microsoft Outlook, stb.), valamint egyéb eszközök, például mobiltelefon. Az XHTML a HTML megfogalmazása XML-ben (a HTML SGML-ben van definiálva). Gyakorlatilag nincs jelentıs eltérés a két nyelv között, csak a formai követelmények lettek szigorúbbak. 3.5 Css A CSS (Cascading Style Sheets) egy stílusleíró nyelv, mely a HTML vagy XHTML

típusú strukturált dokumentumok megjelenését írja le. Ezen kívül használható bármilyen XML alapú dokumentum stílusának leírására is. A CSS specifikációját a World Wide Web Consortium felügyeli. A CSS segítségével az oldalaknak professzionális megjelenítés adható, mindezt úgy, hogy egy stíluslapot (css fájlt) kell hozzá rendelni az összes oldalhoz, így egy esetleges változást, stílusbeli módosítást az összes szükséges helyen, egy mozdulattal végrehajtható, anélkül, hogy hosszú órákat kellene tölteni a forráskódok kézi szerkesztésével. Munkáim során a XAMPP telepítı csomagot használom, mely egyszerően és gyorsan telepíti az Apache 2.24-t, a MySQL 5033-t, a PHP 521 és PHP 445-t windows-os környezetre. http://www.apachefriendsorg/en/xampp-windowshtml 7 Zsáki Erik Nagykereskedelmi webáruház fejlesztése 3.6 Böngészık Ezek a programok felelısek a felhasználói felületek megjelenítéséért. A webböngészık a

webszerverekkel HTTP protokollon keresztül kommunikálnak. A HTTP segítségével a böngészık adatokat küldhetnek a webszervereknek, valamint weblapokat tölthetnek le róluk. A leggyakrabban használt HTTP szabvány a HTTP/1.1, melynek teljes leírása az RFC 2616 alatt található meg. Mivel többféle grafikus böngészı létezik, ezért a három leggyakrabban használt böngészı használatával végzem az oldal fejlesztését. • Microsoft Internet Explorer 6 • Mozilla Firefox • Opera 4. ábra A 4. ábra szemlélteti az Adatbázis-szerver és a Web-szerver kapcsolatát Internetes felhasználás esetén.[3] Eszközökrıl szerzett információk [2] 8 Zsáki Erik Nagykereskedelmi webáruház fejlesztése 4. A szoftver-folyamat tevékenységei [5] A szoftver folyamat olyan tevékenységek és kapcsolódó eredmények egymás utána, amely egy szoftver terméket állít elı. A jó szoftver tulajdonságai: • Rendelkezzen a felhasználó által elvárt

funkciókkal és teljesítménnyel • Legyen karbantartható, üzembiztos • Használható A szoftver folyamat négy alapvetı tevékenységre bontható 1. Szoftver specifikáció: Itt történik a szolgáltatások, követelmények meghatározása. Szükség esetén megvalósíthatósági elemzés is történhet. Az egyes funkciókhoz prioritás rendelhetı 2. Szoftver-tervezés és implementáció: Elkezdıdik a specifikációt megvalósító szoftver struktúra megtervezése. Arhitekturális, interfész, komponens, adatstruktúra, algoritmus tervezés. A terv kóddá (programmá) alakítása, és a hibák eltávolítása. 3. Szoftver validáció: Szoftver vizsgálata, hogy a specifikációnak, és a megrendelı igényeinek eleget tesz-e. Rendszer tesztelése, szoftverben lévı hibák feltárása, egység teszt, elfogadási teszt. 4. Szoftver karbantartás: A szoftver javítása, adaptív változtatása, kibıvítése. Ez a szakasz tart legtovább a

szoftver-fejlesztésben. A tervezés folyamán fontos jól ütemezni a megfelelı szakaszokat, a jól átgondolt tervezési struktúra idıt és energiát takarít meg. Amennyiben a szoftver-fejlesztést csapatban (team) végzik elengedhetetlen ez a struktúra, de egyszemélyes munkánál is célszerő betartani. Egy komplex feladat esetén ez a struktúra leegyszerősíti, kezelhetı mértekre bontja az adott feladatott. 9 Zsáki Erik Nagykereskedelmi webáruház fejlesztése Különféle statikus és dinamikus modellek jöttek létre a szoftver fejlesztés gyorsabb és egyszerőbb elvégzése érdekében. Statikusra példa a vízesés modell (Waterfall), spirális modell (Spiral), vagy az evolúciós fejlesztési modell (Evolutionary Prototyping), dinamikusra pedig a Scrum. Az itt leírt négy tevékenység és a hozzájuk tartozó altevékenységek egy általános szoftver létrehozását adják meg. A webáruház esetében nincs szükség minden egyes részletre, és a

különbözı egységeket akár össze is lehet vonni. Ennek oka, hogy az oldal bonyolultsága nem igényel ilyen színtő tervezést. Ezért a leírt egységet rugalmasan kezelve láttam neki az áruház megalkotásának. Ez egy ilyen kisebb projekt esetében megengedhetı, egy túlzott tervezés esetleg bonyolítaná a programot, de mindenképp idıveszteséggel járna. Ehhez a fajta tervezéshez fontos ismerni az alapot jelentı szoftver-folyamat tevékenységeit, ezért kerülnek leírásra a tevékenységek. 10 Zsáki Erik Nagykereskedelmi webáruház fejlesztése 4.1 Szoftver Specifikáció Ebben a részben a szoftver mőködését és a mőködésére vonatkozó megszorításokat definiálom. Meghatározom a webáruház funkcióit és fıbb mőködési momentumait Fontos ezt a szakaszt jól átgondolni és megtervezni mivel késıbb a szoftver fejlesztés során annál könnyebb lesz a munka. Validáció során ki fog derülni, hogy megfelel a szoftver a

követelményeknek. Ennek fényében lehet eszközölni változtatásokat a követelményekben, de csak óvatosan, apróbb változtatások hasznosak lehetnek, viszont nagy átalakítások esetén kérdéses, hogy meg fog-e felelni a szoftver a megbízónak. Lényeges a megrendelıvel a hatékony kommunikáció, minél pontosabb leírást ad a követelményekrıl, annál könnyebben és precízebben írható le a specifikáció. Megvalósíthatósági tanulmány készítése, ez annak vizsgálata, hogy a megrendelı kívánságai kielégíthetık-e az adott szoftver- és hardvertechnológia mellett. Esetleg felhozhatók példák, illetve kiindulási alapnak már kész rendszer. Ezek után az elemzési tevékenységekbıl összegyőjtött információkat rendszerezni kell. 4.11 A megrendelı szemszögébıl Fogyasztók Az áruház kivitelezés elıtt feltétlenül tisztázni kell a célközönség szokásait, igényeit, elvárásait a szolgáltatással kapcsolatban.

Gyakorlatban bárki igénybe veheti a szolgáltatás, de általánosságban kereskedık, viszonteladók, cégek, és egyéb nagykereskedelemben érdekeltek lesznek partnerek. Fizetési mód A vevık nagy része még mindig a készpénzes fizetési módszert favorizálják. Ennek tükrében egy hitelesítı email elfogadása után kerülhet sor a tényleges (személyes) vásárlásra. Nyilvántartás Remélhetıleg a vevık elégedettek lesznek a teljes szolgáltatással (az áru minısége is megfelelı), és további megrendelésekre lehet majd számítani. İket szolgálja ki az-az adatbázis, mely tartalmazza adataikat. Itt jelentkezik a „valóságos” vásárlás egyik eleme a törzsvendég. 11 Zsáki Erik Nagykereskedelmi webáruház fejlesztése Hitelesség Úgy kell megalkotni a webáruházat, hogy az általa létrehozott dokumentumok hitelesek, hibamentesek, könnyen értelmezhetık legyenek, és bizonyítékul szolgáljanak a vásárlást illetıen. Természetesen

nem fog hivatalos dokumentumként szolgálni, de megkönnyíti annak kitöltését (kézpénzfizetési számla). Használhatóság Alapkövetelmény mind az eladók, mind a vevık részére, hogy fizikai helytıl függetlenül tudják használni az áruházat. 4.12 Funkciók A vásárlói oldal: Regisztráció: Bárki nézelıdhet, és pakolhatja kosarába a termékeket, de a megrendelések teljesítése csak a regisztrált, és bejelentkezett tagokat illeti meg. Belépés: A regisztráció után teljes jogú ügyfele lesz az áruháznak a felhasználó. Rendelhet, írhat a vendégkönyvbe, feliratkozhat a hírlevélre. A feledékenyebb felhasználóknak van lehetıségük arra, hogy lekérdezzék jelszavukat. Kosár: Az oldalon mindig látható lesz a kosár tartalma, és a végösszeg. A kosárban lévı tételeket lehet módosítani, törölni, és érvényesíteni. Hírlevél: Bármikor fel és le lehet iratkozni. Egy hírlevél modullal ellehet érni, hogy azok a látogatók,

akik most csak nézelıdnek a honlapon, késıbb vásároljanak. Vendégkönyv: Itt közölhetik a regisztrált felhasználók, észrevételeiket, problémáikat, igényeiket. Ennek alapján befolyásolhatnak más felhasználókat, remélhetıleg jó tapasztalataikat írják le, és így jobban megbíznak majd az áruházban. 12 Zsáki Erik Nagykereskedelmi webáruház fejlesztése Keresés: A felhasználóknak lehetıségük van keresni a termékek között, megadhatják keresési feltételeiket. Navigáció az oldalon: A felhasználók mindig pontosan tudni fogják, hogy az áruház melyik részén tartózkodnak éppen. Adminisztrációs oldal: Az áruháznak több adminisztrátora lehet, mint ahogy egy boltban több eladó. Számukra egy gyors és könnyen használható felület kell, amin a következıket végezhetik el: • Új kategória létrehozása • Kategória módosítása • Kategória törlése • Új termék létrehozása • Termék módosítása

• Termék törlése • Aktív termék • Kép feltöltése a termékhez • Keresés a termékek között • Vendégkönyv karbantartása • Felhasználó törlése • Email küldése az összes, a hírlevélre feliratkozott, és az egyes felhasználóknak • Oldal számlálóinak megtekintése, nullázása • Adminisztrátori jelszó módosítása • Új adminisztrátor felvétele • Kiszerelések és áfák felvétele, módosítása, törlése • Rendelések kezelése • Rendelések kiírása szöveges fájlba 13 Zsáki Erik Nagykereskedelmi webáruház fejlesztése A szoftver kialakítása során nagyobb prioritást élveznek a vásárlással kapcsolatos funkciók, ilyen a kategóriákkal, termékekkel, megrendelésekkel kapcsolatos mőveletek. Csak ezek befejeztével jöhetnek az egyéb funkciók, vendégkönyv, hírlevél. Ennek elvében kerülnek kialakításra az egyes részegységek, idıben és energiában. 4.13 A vásárlás

folyamata 1. Regisztráció: fontos hogy valós, és helyes adatokat közöljön a vásárló A termékek böngészése, kosárba helyezése regisztráció nélkül is megtörténhet. Regisztrációra a kosár tartalmának megrendelésekor van szükség. 2. Kategóriaválasztás illetve keresés: termékeket a jobb áttekinthetıség végett kategóriákba kell sorolni. Innen, vagy keresés alapján választja ki a vevı a kívánt terméket. 3. Termék kiválasztása: miután kiválasztotta a kategóriát vagy lefutatta a megfelelı keresést, megjelenek az egyes termékek. Itt végezhetı el a kosárba helyezés Az adott termékhez tartozhat egy kép is. 4. A kosár: a vásárlás végeztével, az összesítés pontnál, ha be van jelentkezve megrendelheti a kívánt termékeket. 4.14 A termék útja a vásárlóhoz Amint a vásárló érvényesíti a kosár tartalmát, az eladóhoz megérkezik a rendelés kérelme. Amennyiben a rendelés teljesíthetı, a vevı kap egy email-t, ami

tudatja az üzlet létrejöttérıl. A termékek átvétele az árusítónál történik, mivel az itt történı rendelések nagy része 100 kg felett van, így a postai csomagküldés szóba sem jöhet. Ez a gyakorlatban bevett szokás Probléma estén jönnek jól a valós vásárlói adatok, lehetıség van felvenni a kapcsolatot a vevıvel, és megoldani a problémát. 4.15 Az oldallal szembeni elvárások Fontos szót ejteni a felhasználói felületrıl, ami mind a vásárlói, mind az adminisztrációs oldalra igaz. Az oldalak kinézetét a html és a css nyelv fogja meghatározni 14 Zsáki Erik Nagykereskedelmi webáruház fejlesztése A vásárlókör ismertében kell megtervezni az oldal felépítését, kinézetét. Figyelembe kell venni a szabványokat, és az alapvetı ergonómiai szempontokat. Ez azért fontos, mert egy jól kialakított webáruház szélesebb körben válik ismertté, népszerővé, remélhetıleg ennek függvényében a vásárlások száma is

nıni fog. Ellenkezı esetben, ha egy oldal lassú vagy nem lehet tájékozódni rajta, a felhasználók inkább továbbállnak és keresnek egy másik oldalt a témában. Ehhez a következı tényezıket kell figyelembe venni: • Fontos a gyorsaság. Minél hamarabb tölti le az oldal a felhasználó, annál élvezetesebb lesz számára a böngészés. A sebességet sok tényezı befolyásolja, a kiszolgáló szerver teherbírása, sebessége, a felhasználó sávszélessége. • Az oldal kinézete ne menjen a gyorsaság rovására. Legfontosabb az információ szerzése, ehhez az információhoz kell minél hamarabb hozzájutattni a felhasználót. Ennél az oknál fogva nem használok flash animációkat, nagymérető képeket, különféle grafikus elemeket. A jól kiépített, könnyen használható felületnek nagyobb hasznát veszik a felhasználók, mint egy túl díszített, képekkel teletőzdelt oldalnak. • Css használatával egyszerőbb egységes oldalakat

készíteni, és változtatásokat is könnyebben lehet eszközölni. • Lehetıleg minden böngészı program azonos formában jelenítse meg az oldalt. Kisebb eltérések persze adódnak, de ez az oldal használhatóságát nem csorbíthatja. • Sütik (cookie) engedélyezése nélkül is teljes funkcionalitással mőködjön az oldal. • Navigáció: Egy felhasználó, ha az oldalhoz ér, könnyen fel tudja térképezni, mi hol van, mire kell kattintani. A legfıbb cél, hogy a felhasználó az adott információt a lehetı legrövidebb idın belül megtalálja. • Javasolt a legtöbb gépen lévı alapértelmezett fontok használata, mivel ezek általában könnyen olvasható betők. • Kerülendı a rikító, szemet fárasztó színösszeállítást. 15 Zsáki Erik Nagykereskedelmi webáruház fejlesztése 4.16 Felhasználói eset diagrammok 5.ábra (Eladó esetei) 6. ábra (vevı esetei) 16 Zsáki Erik Nagykereskedelmi webáruház fejlesztése 4.2

Szoftver-tervezés és implementáció Ez az eljárás, amelynek során a specifikáció egy futtatható rendszerré alakul át. Szoftver-tervezés: olyan szoftver struktúra tervezése, amely megvalósítja a specifikációt. Implementáció: a tervezett struktúrának végrehajtható kóddá alakítása. Az egész rendszert kisebb, kezelhetı mérető alrendszerekre kell bontani, melyek közt definiálni kell a kapcsolatot (architekturális tervezés). Minden egyes alrendszer számára meg kell tervezni a többi alrendszer felé mutatott interfészét (interfész tervezés). A szolgáltatásokat el kell helyezni a komponensekben és meg kell tervezni a komponensek interfészeit (komponens tervezés). Meg kell határozni és részletesen meg kell tervezni az implementációban használandó adatszerkezeteket (adatszerkezet tervezés). Végül a szolgáltatások biztosításához szükséges algoritmusokat kell meghatározni (algoritmus tervezés). 4.21 Általános felépítés A

specifikációban leírt webáruház megvalósításánál két nagy komponenst különböztetek meg. Az egyik a vevıi oldal, a másik az adminisztrációs oldal Ezek mint funkcióban, mint kinézetben különböznek, de mégis szoros kapcsolat van közöttük. Felhasználói (vevı) oldal Korábban már utaltam a felépítésének egyes részeire, mint például a regisztrálás. Csak vásárlás esetén fontos a regisztrációt igénylı bejelentkezés. Ennek köszönhetıen bárki ismerkedhet az oldalal, pakolhat termékeket a kosárba, olvashat a vendégkönyvben. Így elkerülhetık a feleslegesen történı regisztrációk, mivel csak akkor kell regisztrálni és bejelentkezni, ha valaki valóban szeretne vásárolni. A kosárba pakoláskor több lehetıség is van a tartalom módosítására, megrendelés után erre már nincs lehetıség. Fontosak a helyesen megadott személyes adatok, és mivel ezek változhatnak, lehetıséget kell biztosítani ezek módosítására

(kivétel az email cím és a login név). A termékek kategóriákba vannak sorolva, ezek alapján, vagy keresés segítségével találhatók meg az egyes termékek. A termékekhez tartozhat egy kicsi kép, amire kattintva megjelenik annak nagyobb felbontású megfelelıje. Ezeken túl, pár apróbb funkció is szerepel, például az elfelejtett jelszó lekérdezése, email küldése az oldal email címére, vagy a navigálás az oldalon. 17 Zsáki Erik Nagykereskedelmi webáruház fejlesztése Fontos hogy ellenırizve legyenek a felhasználóktól bekért adatok. Az adminisztrációs (eladó) oldal Az admin belépése az admin.php oldalon történik, helyen login név és jelszó esetében Itt határozza meg az eladó tulajdonképpen, hogy mi is jelenjen meg a vevık részére. Központi helyen szerepelnek a termékek, melyek kategóriákba vannak sorolva, és egy kiszerelés és egy áfa rendelıdik hozzájuk. Itt lehet feltölteni a szerverre a termékhez tartózó kis és

nagy képet. A felhasználó kérésére, vagy az admin döntésére törölhetı egy felhasználó Másik fontos rész a rendelések kezelése, két csoportjuk van. Teljesített, ezek már kiírhatók egy txt állományban, mivel már nincs fontos szerepük az oldal mőködésében. A másik a teljesítés alatt álló rendelések, ha az eladó megállapítja a rendelés teljesíthetıségét, akkor a vevı kap egy üzenetet, amivel tudatható a rendelés sikeressége. Mivel több eladó is lehet, ezért egy admin felvehet másik admint is, az admin csak a jelszavát képes módosítani. Egy alapszintő vendégkönyv karbantartást is végez az admin, ami csupán egy hozzászólás törlésében merül ki. Ekkor az admin kilép az adminisztrátori felületrıl, és a vevıi oldalon találja magát. 4.22 Az adminisztrációs és a felhasználói (vevı) oldal kinézete Már a kódolás során egy jól áttekinthetı felület kellett, melyen elkülöníthetık az egyes egységek. Mivel

kódolás közben is végzek hiba vizsgálatot, illetve ellenırzöm az algoritmusok mőködésének helyességét ezért is fontos volt, hogy errıl a felületrıl tudjam ellenırizni magam. Az admin oldalon css segítségével egy gombhatású menüsor látható, mely menü pontok a különbözı funkciókat tartalmazzák. 18 Zsáki Erik Nagykereskedelmi webáruház fejlesztése 7. ábra (admin felület kinézete) A vevıi oldalon kinézetét és elrendezését szintén css segítségével, hoztam létre. Ennek a résznek az érdekessége, hogy a jobb oldalon található úgynevezett „dobozok” minden egyes oldalon szerepelnek. Innen tájékozódhat a vevı az aktuális állapotáról, az elsı doboz tulajdonképpen a menü. Itt tud a vevı belépni, regisztrálni, vendégkönyvet megnyitni, jelszót lekérdezni, információkat szerezni az oldal mőködésérıl. Abban az esetben, ha bejelentkezett a felhasználó, itt tud kilépni, és adatott módosítani. Következı

doboz a kategóriák, itt lehet böngészni a termékek között, és itt érhetı el a keresés. A harmadik dobozban a kosár aktuális tartalma látható, ha a kosár tartalmaz már terméket, akkor jelenik meg az összesítés hivatkozás. A negyedik doboz a számlálókat tartalmazza Mivel az oldal dinamikus tartalommal él, ebbıl következik hogy a dobozok mérete sem álladó. A cél az volt, hogy a négy doboz egyként mozogjon, és tartalmuk ne fedje a másikat. Ennek megoldására a négy doboz belekerül még egy dobozba, amit én csak „oldal falnak” hívok. Minden egyes doboz egy php oldal tartalmaz. Melyet a require() függvénnyel hívok be, a következıképpen <div id="oldal fal"> <div id="login"> <?php require("include/login.php"); ?> </div> <div id="kategoria"><?php require("kategoria.php");?> </div> <div id="kosar"><?php

require("kosar.php");?> </div> <div id="lab"><?php require("lab.php");?></div> </div> 19 Zsáki Erik Nagykereskedelmi webáruház fejlesztése 8. ábra (vásárlói felület kinézete) Mint látható a kinézetnek nem tulajdonítottam nagy jelentıséget, mivel elsısorban php programozás a szakdolgozat alapja, és nem a html és css használata. Természetesen egy minimális ismeret szükségez ahhoz, hogy a szoftver áttekinthetı, és használható legyen. Ez a felület alkalmas erre a célra, és a korábban leírt egyszerőség is érvényes rá. A két felvétel már a kész programról készült, így talán jobban szemlélteti az oldal felépítését. 4.23 Az adatbázis tervezése [4] • Az adatbázis céljának meghatározása, a feladat megfogalmazása. Meg kell határozni a tárolandó adatok körét, az adatbázis használatának módját és az általa elvégzendı részfeladatokat. 20

Zsáki Erik • Nagykereskedelmi webáruház fejlesztése A szükséges táblák meghatározása. Az összegyőjtött információkat témakörökre, táblákra kell bontani (normalizálás). Kerülni kell a többszörös adatbevitelt (redundancia) • A táblák mezıinek meghatározása. El kell dönteni a táblában szereplı egyedekrıl, hogy mit kell tudni róluk és ehhez milyen jellemzı adataikra lesz szükség. Ennek ismeretében kell meghatározni a mezıneveket. Figyelni kell, hogy van-e a táblának olyan mezıje, amely egyértelmően azonosítja a tábla rekordjait, vagyis betöltheti az elsıdleges kulcs szerepét, ha nincs, akkor fel kell venni egy ilyen mezıt, amely (akár egy egyszerő sorszámozással) biztosítja a rekordok egyértelmő azonosítását. • Kapcsolatok felállítása a táblák között. Meg kell határozni, hogy milyen táblákból kell összetartozó információkat kigyőjteni és biztosított-e közöttük a kapcsolat, ha nincs, akkor

gondoskodni kell úgynevezett kapcsolómezık közbeiktatásáról. A kulcs mezıt mindkét kapcsolódó táblának tartalmaznia kell. Meg kell vizsgálni a kapcsolatok típusát (amely lehet: egy az egyhez, egy a többhöz, több a többhöz) és az adatintegritási szabályokat. • A bemutató változat elkészítése, a terv finomítása. A táblákat fizikailag is létre kell hozni és próba-adatokkal feltöltve. Meg kell nézni, hogy mely mezık maradnak üresek, minden szükséges adat rögzül-e, és jól választottuk-e meg az elsıdleges kulcsokat. Az adatbázisnak tárolnia kell: • • • • • • • • • Felhasználókat és az adataikat Adminisztrátorokat és az adataikat Termék kategóriákat Termékeket és az adataikat Termékekhez tartozó képek címeit Rendeléseket Vendégkönyvet Számlálókat Segéd táblákat A fentebb említett tervezési pontokat most itt egybevonom, és úgy fejtem ki az adott táblát. 21 Zsáki Erik Nagykereskedelmi

webáruház fejlesztése Admin tábal: Itt tárolódik az adminisztrátoroknak a neve, login neve, és jelszava. Ennek a táblának a segítségével lehet beléptetni az adminisztrátort az admin felületre. Önmagában az admin login is funkcionálna kulcs két, a könnyebb használat érdekében azonban az admin id az elsıdleges kulcs. Ez a tábla nem áll kapcsolatban egyetlen másik táblával sem Tábla Admin azonosító (kulcs) Admin neve Admin login neve Admin jelszava ADMIN admin id admin nev admin login admin jelszo User tábla: Itt tárolódnak a felhasználóknak az adatai. Nevük, jelszavuk, email címük, tartózkodási címük, telefonszámuk, és az állapota a hírlevéllel (kér-e hírlevelet vagy sem). A felhasználókról fontos nyilvántartani ezeket az adatokat, mivel ezek alapján rendelhetnek. Az email címükre érkezik a hírlevél, az admin üzenete, értesítés a rendelésrıl, és a feledékenyeknek a jelszavuk. Ezért fontos hogy az email cím valódi

és egyedi legyen, akárcsak a login név. Ennél a táblánál is bevezetem egy azonosító mezıt, a könnyebb használat érdekében. Ez a tábla már kapcsolatban áll több táblával is Egyrészt kapcsolódik a vendégkönyv táblához, egy felhasználónak több hozzászólása lehet. Másrész kapcsolódik a megrendelések fej táblához, egy a többhöz kapcsolattal. Tábla Felhasználó azonosító (kulcs) Felhasználó neve Felhasználó login neve Felhasználó jelszava Felhasználó email címe Felhasználó születési dátuma Felhasználó országa Felhasználó irányító száma Felhasználó települése Felhasználó utcája Felhasználó ház száma Felhasználó telefon száma Kér-e hírlevelet? 22 USER user id user nev user login user jelszo user email user szul ido user orszag user ir szam user telepul user ut user haz szam user tel hir level Zsáki Erik Nagykereskedelmi webáruház fejlesztése Aru tábla: Ez a tábla tárolja az áruk adatait. Mivel az

áruház legfontosabb pontja a benne szereplı termékek, ezért ez a tábla a legösszetettebb, és ez rendelkezik a legtöbb kapcsolattal. Tárolja a termék nevét, nettó árát, egy esetleges leírást, és az állapotát. Továbbá a kiszereles és afa segédtáblákkal tárolja a termék kiszerelési egységét, és a termékhez tartozó áfa kulcsot. Itt nincs tényleges kapcsolat a táblák között, a két tábla csak kényelmi funkciót lát el, hogy ne kelljen begépelni mindig az adott értéket, és így csökkenek a gépelésbıl adódó eltérések. Amikor változás történik a kiszereles vagy a az afa táblában, az nem von maga után változást a már felvett termékek esetében. Viszont szoros kapcsolat van a kategoria táblával, ezen kapcsolat alapján lehet a termékeket kategóriákba sorolni. Egy termék csak egy kategóriába tartozhat. Továbbá kapcsolódik még a kepek táblához is, itt a termékhez tartózó kicsi (bélyeg) és nagy kép neve

található. Mivel az áruházban jelenleg egy termékhez csak egy kép rendelhetı, fel lehetett volna venni ezt a két mezıt az aru táblába is. Amiért ezt a megoldást választottam az, hogy a késıbbiekben az adatbázis változtatása nélkül ki lehessen bıvíteni több kép hozzárendelését egy termékhez. Végül kapcsolódik még a megrendelések táblához Kulcsként az aru id funkcionál. Tábla Áru azonosító (kulcs) Kategoria azonosító Áru neve Áru kiszerelési egysége Áru nettó ára Leírás az áruról Az áruhoz tartozó áfa Aktív vagy passzív termék ARU aru id kat id aru nev Kiszereles aru netto ar aru leir Afa Allapot Kategoria tábla: Ebben a táblában tárolódnak a termékek rendezését szolgáló kategóriák. Tartalmaz egy azonosított, egy kategória nevet, és opcionálisan felvehetı leírást. Mivel ezek alapján rendezıdnek a termékek, természetesen kapcsolódik az aru táblához. A jelenlegi rendszer alapján egy kategóriába

több termék, de egy termék csak egy kategóriába tartozhat. Tábla Kategória azonosító (kulcs) Kategória neve Kategória leírása 23 KATEGORIA kat id kat nev kat leir Zsáki Erik Nagykereskedelmi webáruház fejlesztése Kepek tábla: Itt vannak az adott áruhoz tartozó képek. Elıször is van egy kep id ami a kép azonosítója, ehhez tartozik egy aru id, hogy be lehessen határolni melyik termékhez tartozik az adott kicsi és nagy kép. A két azonos tartalmú, de különbözı mérető képre azért van szükség mert, ha kilistázzuk a termékeket és oda egy nagyobb felbontású kép kerül, az jelentıs oldal betöltési idıt igényel. Ezért a jóval kisebb mérető kép kerül a listába, és erre kattintva jelenik meg a nagyobb felbontású kép. Mint korában írtam, ezzel a megoldással lehetséges több kép hozzárendelése egy termékhez, de jelen esetben elegendı egy kép. Képek nevénél a termek kep mappában szereplı jpg állomány neve

található, innen töltıdik be az oldalra. Ez a tábla szintén kapcsolatban áll az aru táblával Tábla Kép azonosító (kulcs) Áru azonosító Kicsi kép neve Nagy kép neve KEPEK kep id aru id kicsi kep nagy kep Kiszereles és afa táblák: Ez a két tábla hasonló funkcióval bír, ezért mutatom be egyszerre ıket. Csak kényelmi funkciót vannak, segítségükkel egységesek lesznek az aru táblában a kiszerelés és afa mezık. Ennek a módszernek vannak hátrányai, ha az admin nem elég körültekintıen használja. Például, ha tırıl vagy módosít egy kiszerelés, akkor a korábban felvett kiszerelés alapján már nem tud keresni a keresés opciónál. Tábla Áfa értéke (kulcs) AFA Afa Tábla A kiszerelés egysége (kulcs) KISZERELES Kiszereles Megrendelesek fej tábla: A webáruház egy másik fontos pontja, a rendelések kezelése. Ezt a feladatott két tábla segítségével oldottam meg. A fejrészben tárolódik a rendelésnek a fıbb paraméterei,

ki rendel, mikor, és mennyiért. A rendelés dátumát a mysql now() függvénye szolgáltatja Ez a tábla szoros kapcsolatban áll a megrendelesek táblával, mivel itt vannak a konkrét fejhez tartozó rendelt termékek. Minden fej rendelkezik egy állapottal attól függıen, hogy teljesítve van vagy folyamatban az adott rendelés. A teljesített rendelésekre a késıbbiekben már nincs 24 Zsáki Erik Nagykereskedelmi webáruház fejlesztése nagy szükség, azért a biztonság kedvéért egy txt fájlba kerülnek kiírásra, majd törlıdnek az adatbázisból, úgyszintén törlıdnek a megrendelesek tábla megfelelı sorai is. A tábla kapcsolódik még az user táblához is, innen kerülnek megjelenítésre a megrendelı adatai. Tábla Rendelés azonosító (kulcs) Vásárló azonosító A vásárlás dátuma Teljesített vagy feldolgozás alatt Vásárlás nettó összege MEGRENDELESEK FEJ rendel id vasarlo id vasarlas datum allapot osszeg Megrendelesek tábla: Mint

fentebb írtam itt vannak a megrendelesek fej tábla rendelés azonosítójához tartozó termékek, és a rendelt mennyiségek. Vagyis egyrészt kapcsolódik a fej táblához, másrészt az aru táblához. Tábla Megrendelés azonosító (kulcs) Ez azonosítja, hogy a rendelés melyik fejhez tartozik A megrendelés terméke Az áru kiszerelésbıl rendelt mennyiség MEGRENDELESEK sor id fej id aru id Mennyiseg Vendegkonyv tábla: Ez a tábla egy egyszerőbb vendégkönyvet tárol, ami ehhez az áruházhoz elegendı. A tábla kapcsolatban van a user táblával, mivel fontos a hozzászólás szerzıje. A dátumot itt is a now() függvény adja. A tárolandó szöveg pedig text típusú A user táblával való kapcsolatnál fontos megjegyezni, hogy egy felhasználó törlése nem vonja maga után a hozzászólás törlését. Tábla Hozzászólás azonosító (kulcs) A hozzászóló felhasználó azonosítója Hozzászólás dátuma Hozzászólás VENDEGKONYV konyv id user id datum

szoveg Szamlalo tábla: Ez a tábla statisztikai szerepeket szolgál, csupán egy sora van, amiben minden mezı alapértelmezett értéke 0. Amikor egy megfelelı esemény bekövetkezik, a hozzá tartózó számláló eggyel növekszik. Az adminisztrátornak lehetısége van a számlázok nullázására, és 25 Zsáki Erik Nagykereskedelmi webáruház fejlesztése ennek következtében új számolást indítani. Ezt a feladatot egy szöveges fájl segítségével is meg lehetne oldani, de meglátásom szerint adatbázis használata a praktikusabb. Tábla Elküldött email-ek száma Törölt felhasználók száma Az oldalt látogatók száma Teljesített rendelések száma Elfelejtett jelszavak kérelmének száma Vendégkönyvbe írások száma Vendégkönyvbe törlések száma Bejelentkezések száma Regisztrációk száma SZAMLALO email torolt user latogatok rendeles felejt email konyv ir konyv torol login regisztralt Az adatbázis felépítését az 9. ábra szemlélteti

9. ábra 26 Zsáki Erik Nagykereskedelmi webáruház fejlesztése 4.24 Mysql használata PHP-ból Miután elkészült az adatbázis, itt az ideje, hogy a php is használatba vegye. A php rendelkezik a mysql adatbázis használatához szükséges függvényekkel. A kapcsolódáshoz meg kell adni a szerver nevét, a felhasználói nevet és jelszót, ez a következıképpen néz ki. mysql connect($host,$user,$pass); Ezt követıen a kívánt adatbázis kell megnyitni. mysql select db($db); Ezek után végezhetık mőveletek az adott adatbázissal. Mivel minden olyan php oldalnak tartalmaznia kell ezeknek az utasításoknak amiben adatbázis használ a program, ezért ez egy külön php oldalon fog szerepelni amit mindig meg kell hívni. Így elkerülhetı a felesleges kód ismétlés, és egy esetleges változtatást is csak egy helyen kell elvégezni. Az sql.php fájl tartalmazza a táblák létrehozásához szükséges összes információt, ez az oldal a böngészıbıl

megnyitva, automatikusan telepíti az oldal mőködéséhez szükséges táblákat, és adat sorokat. Itt egy részlet, ami egyben példázza a táblák létrehozásának módját. Itt csak az az SQL szkript szerepel, amely a termékek tárolásáért felelıs táblát hozza létre: CREATE TABLE `aru` ( `aru id` int(11) NOT NULL auto increment, `kat id` int(11) NOT NULL, `aru nev` varchar(20) collate latin1 general ci NOT NULL, `kiszereles` varchar(20) collate latin1 general ci NOT NULL, `aru netto ar` int(20) NOT NULL, `aru leir` varchar(255) collate latin1 general ci default NULL, `afa` int(3) default NULL, `allapot` enum(0,1) collate latin1 general ci default NULL, PRIMARY KEY (`aru id`) ) 27 Zsáki Erik Nagykereskedelmi webáruház fejlesztése Következı lépés, hogy a tábla mezıit értékekkel kell feltölteni. Az elızı példánál maradva egy termék felvétele lesz bemutatva. Részlet az admin felület termekekphp oldalról, ahol már a PHP szkript továbbítja

az INSERT lekérdezést a MySQL kiszolgálónak: $query str="INSERT INTO aru(aru nev,kat id,kiszereles,aru netto ar,afa,allapot,aru leir) VALUES($ POST[uj ter nev],$ POST[uj ter kat],$ POST[uj ter kiszerel], $ POST[uj ter ar],$ POST[uj ter afa],1,$ POST[uj ter leir])"; if(mysql query($query str)) {$uzen=$admin uzen[7];} else {$uzen=$admin uzen[8];} Ennek eredményeként bekerül az adatbázisba egy termék. A mysql query() függvény sikeres végrehajtás esetén TRUE-val tér vissza, hiba esetén pedig FALSE-al az INSERT-nél. Ezt kihasználva egy feltételes elágazás segítségével, egyszerően tudatható az adminnal a mővelet sikeressége. Adatok bevitele után szükséges lehet az adatok törlése. Szintén ezen az oldalon található a termékek törlésére vonatkozó részlet is. $query str="DELETE FROM aru WHERE aru id=$ertek"; if(mysql query($query str)) {$uzen=$admin uzen[6];} A törlés esetében felmerülnek olyan problémák, amikor a kapcsolatban

álló tábláknál az egyik sor törlésével a másik táblából egy sor feleslegessé, értelmetlenné válik. Ebben az esetben használatos a kaszkádolt törlés, ekkor az a bizonyos felesleges sor is törlıdik a táblából. Az oldal esetében a legösszetettebb törlés, ha egy kategóriát kell törölni Ebben az esetben már nincs értelme megtartani azt az árut, aminek a kategóriája törölve lett, de az áru törlésekor a hozzá kapcsolódó képeket is kell törölni, mivel azok is feleslegessé váltak. Ennek megoldása az elıbb leírt sorrend fordítottja. Elıször a termékekhez kapcsolódó képeket, majd a kategóriához tartózó termékeket, végül a kategóriát kell törölni. Az adatbázis használatának lényege az adatok használata. Ebben az esetben lekérdezésre kerülnek a megadott tábla vagy táblák sorai és oszlopai Itt egy egyszerő lekérdezés, ami a kategoria tábla összes sorát és oszlopát adja meg. SELECT * FROM kategoria 28

Zsáki Erik Nagykereskedelmi webáruház fejlesztése Lekérdezések estében jóval összetettebb formák is léteznek, adható meg egy vagy több feltétel a WHERE záradékkal, több feltétel esetén azokat logikai mőveletekkel (AND/OR) kapcsolhatjuk össze. Megadható több tábla lekérdezése a JOIN, LEFT JOIN, RIGHT JOIN segítségével. A sorokat lehet rendezni (ORDER BY) csoportosítani (GROUP BY), és megadni a lekérdezendı sorok számát (LIMIT). A LIMIT használata nagy könnyedséget jelent majd a termékek lapozásánál. Felmerülhet az igény már felvett sor módosítására is. A következı rész a kategoriakphp-ból a már létezı kategóriák módosításáért felelıs. $query str="UPDATE kategoria SET kat nev=$ POST[kat mod nev], kat leir=$ POST[kat mod leir] WHERE kat id=$ POST[kat mod id]"; mysql query($query str); A leírtak inkább mysql–el kapcsolatosak, nem pedig a php-val. Mégis fontosnak tartom ezek ismeretét, hiszen a csak így

képezhetı egyszerőn és gyorsan egy dinamikus tartalommal rendelkezı weboldal. Számomra ez az egyik legérdekesebb rész a php-ban, szerintem részben ennek köszönheti azt a széles elterjedést, ami manapság tapasztalható. 29 Zsáki Erik Nagykereskedelmi webáruház fejlesztése 4.25 Program kódolása Következzék a tervezés során megfogalmazott információk forráskóddá alakítása, pontosabban azok felhasználása a kódoláshoz. Mivel az egész program forrásának ismertetése nem fér a szakdolgozat keretei közé, ezért csak a kulcs fontosságú és a számomra érdekes részek kerülnek bemutatásra, ismertetésre. A forráskódot szükséges helyeken a szükséges információval kommenteztem, így jobban áttekinthetı és értelmezhetı a kód. Az áttekinthetıséghez kapcsolódik még a kódsorok betördelése, elkülönítése. Ezek használatával a már korábban kódolt részek is hamar értelmezhetıvé vállnak, és könnyebben lehet

összeilleszteni az egyes oldalakat. A részletek minden esetben a programból származnak, azzal a kiegészítéssel, hogy a kommenteket nem jelenítem meg, mivel ezek ebben az esetben inkább zavaró tényezık. Néhány részletett folyamatábrával is szemléltetek Programozás során a függvények használatával egyszerősödik a forráskód, könnyebb azon változtatni és az egyes függvények újrahasznosíthatók. A programozás során két fájlban győjtöttem össze a függvényeket, egyik a vevıi oldal függvényeit tároló fugveny.php, másik az admin fugvenyek.php oldala Elıfordul, hogy egyes függvényeket mindkét felület használja. A kódolás során használom a php szuperglobális változóit. Az egyik legfontosabb a $ SESSION, ez tárolja a munkamenethez rendelt változókat. A php munkamenet kezelése lehetıvé teszi adatok megırzését az egymást követı oldal lekérdezések között. Minden látogató egy-egy egyedi azonosítót kap, az úgynevezett

munkamenet azonosítót (session azonosítót). Ez vagy egy sütiben (cookie) tárolódik a látogató gépén, vagy az URL-ben közlekedik oldalról oldalra. A követelmények között szerepelt, hogy az oldal mőködjön a sütik használata nélkül is. Ennek megvalósítására az URL-ben továbbítom a session azonosítót, amit az SID érték tárol. Fontos még a $ POST és $ GET szuperglobál asszociatív tömbök, amelyek a HTTP protokoll POST illetve GET metódusai által a kiszolgálónak továbbított adatokat tárolják. A fenti tömbök kulcsai ezeknek az adatoknak az azonosítói, mint karakterláncok. A $ POST tömb esetében például az őrlap egy adott mezıjének name attribútum értéke. 30 Zsáki Erik Nagykereskedelmi webáruház fejlesztése Eladói oldal 4.251 Admin beléptetése Az adminisztrátorok beléptetése az admin.php oldalon történik, ahol az adatbázisból vett adatokkal ellenırzıdik a belépni kívánó eladó login neve és jelszava.

Amennyiben helyesek az adatok az admin felület index.php oldalán találja magát if(!empty($ POST[admin login]) && !empty($ POST[admin jelszo])) { $query str="SELECT * FROM admin WHERE admin login=$ POST[admin login]"; $eredmeny=mysql query($query str); if(mysql num rows($eredmeny)==1) { $elem=mysql fetch object($eredmeny); if($elem->admin jelszo==$ POST[admin jelszo]) { $ SESSION[admin id]=$elem->admin id; header("Location: admin/index.php?"SID); } } } A $ POST[admin login] és a $ POST[admin jelszo] értékek a bejelentkezni kívánó adminisztrátortól jönnek, ezek az értékek kerülnek összehasonlításra az admin táblából, elıször a login név majd a jelszó. Egyezés esetében eltárolódik sessionben az admin azonosítója, amelynek köszönhetıen látogathatja az admin felület összes oldalát. A header() függvény ezek után az admin felület index.php oldalára irányítja az eladót Az eltárolt admin azonosító

segítségével nem kell minden egyes oldalon ezt a procedúrát végigjárni. Az eladó simán váltogathat az oldala között, de az illetéktelenek elıtt továbbra is rejtett kell, hogy maradjon az oldal. Ennek megoldása nagyon egyszerő, minden adminisztrátori oldalon el kell helyezni a következı feltételt. if(!isset($ SESSION[admin id])) { header("Location: ./adminphp"); } 31 Zsáki Erik Nagykereskedelmi webáruház fejlesztése Ha a $ SESSION tömbben nincs beállítva az admin azonosító, akkor egyszerően visszakerül a felhasználó a bejelentkezı oldalra, annál a felhasználónál, akinél be van állítva, nem történik semmi. Ezt kihasználva történik az eladó kiléptetése is. if($ GET[kilep]==1) { session destroy(); header("Location: ./adminphp"); } Amikor az eladó kilépés linkre kattint, a GET[kilep] értéke 1 lesz, és ekkor teljesül a feltétel. A session destroy() függvényt törli a session összes változóját, és

ettıl fogva ismét be kell jelentkeznie az eladónak. A beléptetés mőködését egy folyamatábrával is szemléltetem, ami a 10. ábra 10. ábra 32 Zsáki Erik Nagykereskedelmi webáruház fejlesztése 4.252 Kategória törlése Már említettem a kategória törlés problémáját, most ismertetem a részletesebb megoldását. Feladat már ismert, kategória törlése maga után vonja a hozzá tartózó termékek, és a termékekhez tartózó képek törlését is. if($ GET[del]==1) { $query str="SELECT kicsi kep,nagy kep FROM kategoria JOIN aru JOIN kepek ON aru.kat id=kategoriakat id AND aruaru id=kepekaru id WHERE kategoria.kat id=$ GET[id]"; $eredmeny=mysql query($query str); while($elem=mysql fetch object($eredmeny)) { unlink("./termek kep/$elem->kicsi kep"); unlink("./termek kep/$elem->nagy kep"); } $query str="SELECT aru id FROM aru WHERE kat id=$ GET[id]"; $eredmeny=mysql query($query str); while($elem=mysql fetch

object($eredmeny)) { $query str="DELETE FROM kepek WHERE aru id=$elem->aru id"; mysql query($query str); } $query str="DELETE FROM aru WHERE kat id=$ GET[id]"; mysql query($query str); $query str="DELETE FROM kategoria WHERE kat id=$ GET[id]"; mysql query($query str); } Az elsı lekérdezés megkeresi az adott kategóriába tartózó termékek képeinek a nevét, és az unlink() függvény segítségével törlıdnek a termek kep mappából. Miután a képek törölve lettek, jöhetnek a kepek tábla törlésre szánt sorai, majd a kategóriába tartózó összes termék, végül maga a kategória. Azt, hogy melyik kategóriát kell törölni a $ GET[id] értéke határozza meg, ami maga a törlendı kategória azonosítója. Itt is fellépnek problémák, mivel a kategória törlésénél olyan termék is törlıdhet, ami éppen egy nem teljesített rendeléshez tartozik. A kategóriák kiírását a kategoria kiir tabla() függvény végzi el, és

ı hívja meg a torolheto() függvényt. A 33 Zsáki Erik Nagykereskedelmi webáruház fejlesztése torolheto($aru id,$kat id,$user id) egy olyan függvény, ami eldönti a neki átadott értékekbıl, hogy megrendelés alatt áll-e az elem. Ezt a függvényt használom a kategória, az áru, és a felhasználó vizsgálatára. Paraméterezése úgy történik, hogy a törölni kívánt elem azonosítóját megadom, a maradék kettı paraméter értéke pedig 0, mindezt a megfelelı sorrendben. Azért kap 0 értéket a másik két paraméter, mivel az azonosítók automatikusan inkrementálódnak és a kezdı érték 1, vagyis nem lehet azonosító a 0 érték. A torolheto() függvény visszatérési értéke 1 ha a keresett sorok száma nagyobb mint 0, vagyis van olyan sora a megadott táblának, ami köthetı egy még nem teljesített megrendeléshez. function torolheto($aru id,$kat id,$user id) { if($aru id!=0) { $query str="SELECT aru id FROM megrendelesek JOIN

megrendelesek fej ON rendel id=fej id WHERE aru id=$aru id AND allapot=0"; } if($kat id!=0) { $query str="SELECT kat id FROM aru JOIN megrendelesek JOIN megrendelesek fej ON megrendelesek.aru id=aruaru id AND rendel id=fej id WHERE kat id=$kat id AND megrendelesek fej.allapot=0"; } if($user id!=0) { $query str="SELECT user id FROM user JOIN megrendelesek fej ON user id = vasarlo id WHERE user id=$user id AND megrendelesek fej.allapot=0"; } $eredmeny=mysql query($query str); if(mysql num rows($eredmeny)>0) { return 1; } A paraméter átadásra a legjobb példa, ha megmutatom a függvényhívását a kategóriák esetében. 34 Zsáki Erik Nagykereskedelmi webáruház fejlesztése function kategoria kiir tabla() { $query str="SELECT * FROM kategoria ORDER BY kat nev"; $eredmeny=mysql query($query str); while($elem=mysql fetch object($eredmeny)) { echo "<tr><td>".$elem->kat

nev"</td><td>"$elem->kat leir"</td><td> <a href="kategoriak.php?id="$elem>kat id"&mod=1&"SID"">Modosít</a></td><td>"; if(torolheto(0,$elem->kat id,0)==1) { echo "Megrendelés alatt</td></tr>"; } else { echo "<a href="kategoriak.php?id="$elem>kat id"&del=1&"SID"">Töröl</a></td></tr>"; }}} Az adott kategória esetében teljesül a törölhetıség (nem tartozik teljesítetlen rendeléshez), egy töröl link jelenik meg, melyre kattintva kapja értékül a $ GET[id] a törlendı kategória azonosítóját. 4.253 Képek feltöltése A törlés kapcsán felmerült hogy, a termek kep mappában lévı képeket is törölni kell. Most az kerül kifejtésre, hogyan kerülnek oda a képek. Egy képpárt lehetıség van hozzárendelni egy termékhez a módosítás opcióban.

if(strlen($ FILES[kicsi kep][tmp name]) && strlen($ FILES[nagy kep][tmp name])) { $query str="INSERT INTO kepek (aru id) VALUES($ POST[kep aru id])"; mysql query($query str); $query str="SELECT LAST INSERT ID() as id"; $eredmeny= mysql query($query str); $elem=mysql fetch object($eredmeny); $kep id=$elem->id; $kicsi nev="k ".$ POST[kep aru id]" "$kep id"jpg"; $nagy nev="n ".$ POST[kep aru id]" "$kep id"jpg"; $query str="UPDATE kepek SET kicsi kep=$kicsi nev, nagy kep=$nagy nev WHERE kep id=$kep id"; mysql query($query str); $mappa = ./termek kep/; 35 Zsáki Erik Nagykereskedelmi webáruház fejlesztése $fajl = $mappa . $kicsi nev; if(move uploaded file($ FILES[kicsi kep][tmp name], $fajl)) {$uzen=$admin uzen[2];} else {$uzen=$admin uzen[3];} $fajl = $mappa . $nagy nev; if(move uploaded file($ FILES[nagy kep][tmp name], $fajl)) {$uzen=$admin uzen[2];} else {$uzen=$admin uzen[3];}

} elseif(isset($ POST[kep aru id])) {$uzen=$admin uzen[3];} Miután vizsgálat alá esett a feltölteni kívánt képek neve az strlen() függvénnyel, utána egy új sor lesz beszúrva a képek táblába, ami tartalmazza a kép és áru azonosítókat. A LAST INSERT ID() mysql függvénnyel lekérdezhetı a legutolsó auto increment azonosító értéke, ezt felhasználva rakható össze a képek neve. Amikor elkészültek a képek nevei, bekerülnek az elıbb felvett sorba. A kép nevének az összetétele, kicsi kép esetében „k” -val, nagy képnél „n”-el kezdıdik, azt követi az áru azonosítója, utána a kép azonosítója, végül a jpg kép kiterjesztés. Azért jpg a kiterjesztés, mivel webes környezetben az egyik legelterjedtebb forma, és könnyő képet jpg-vé konvertálni. Miután megvannak a képnevek, csak move uploaded file() függvénnyel fel kell tölteni, megadva paraméterként a feltöltendı állomány eredeti nevét, és azt a nevet (útvonallal

kiegészítve) amivel felkerül a termek kep mappába. A kép feltöltés sikerességérıl egy rövid üzenet tájékoztatja az admint Hiba vizsgálatot nem végzek a feltölteni kívánt állomány kiterjesztésére. 4.254 Rendelések teljesítése A vevık által érkezett rendeléseket az eladói felület a megrendeles.php oldal tartalmazza Elsınek a megrendelések fej részei kerülnek kiírásra, amik a megrendeles fej táblából jönnek. Az allapot értéke teljesítet rendelés esetén 1, ellenkezı esetben 0. Kiíratáskor ezt az értéket figyelembe véve kerül megjelenítésre az állapot. $allapot=$elem->allapot==0?<strong>Folyamatban</strong>:Feldolgozva; Minden rendelés fejnél van egy Megtekintés gomb, melyre kattintva megjelennek a rendelés részletei, a megrendelı adatai, a rendelés adatai és a rendelt termékek. Amennyiben a rendelés 36 Zsáki Erik Nagykereskedelmi webáruház fejlesztése állapota Folyamatban, akkor a Teljesítés

gombra kattintva lehet a rendelést teljesíteni. Az állapot átállítása a következıképen történik. $query str="UPDATE megrendelesek fej SET allapot=1 WHERE rendel id=$ GET[teljesit id]"; mysql query($query str); A $ GET[teljesit id] tartalmazza a teljesített rendelés azonosítóját. Amennyiben az email küldés lehetısége megvan (van email kiszolgáló telepítve), a rendszer értesíti a vevıt rendelése elfogadásáról. Ehhez csupán a mail() függvényre van szükség mail($cim,$tema,$szoveg) A teljesített rendelésekre tovább már nincs szükség, ezek egy txt fájlba kerülnek kiírásra. Erre azért van szükség, mert ha módosítás történik az árukat illetıen, akkor a változtatás jelentkezik egy már leadott rendelésen. Ez programozás technikailag helyesen mőködne, de ellentmond az úgynevezett „üzleti logikának”. Hiszen ha egy rendelés alatt álló termék ára módosítva lesz, akkor maga a rendelés összege is módosul. A

rendelések kiírásának az is haszna, hogy a megrendelesek és megrendelesek fej táblák feleslegessé vált sorai törlıdnek, de továbbra is megtekintheti az eladó a teljesített megrendeléseket a következı formában. 11. ábra (Rendelések formátuma a txt fájlban) A kiírt rendelések helye az admin mappán belüli a rendelesek mappában találhatók, a pontos dátummal címezve. 37 Zsáki Erik Nagykereskedelmi webáruház fejlesztése Vásárlói oldal 4.255 A kosár mőködése A következı 12. ábra szemlélteti a kosár logikai mőködését, azt, hogy hogyan kerülnek a termékek és a hozzájuk tartózó mennyiségek a kosárba. 12. ábra Mivel bárki pakolhat a kosarába, és csak rendelés esetén kell belépni, ezért a kosár tartalmát sessionban tárolom. A $ SESSION[kosar] egy asszociatív tömböt tárol, melyet a kosárba kerülés sorrendjével indexelek, az indexelés 0-tól indul. Egy index két értéket tartalmaz, az egyik a megrendelni

kívánt termék azonosítója, a másik a rendelni kívánt mennyiség. A kosár értékeinek kinyerésére jó példa, a baloldalon található kosár tartalma doboz. 38 Zsáki Erik Nagykereskedelmi webáruház fejlesztése $tomb=$ SESSION[kosar]; foreach($tomb as $i=>$ertek) { echo $tomb[$i][1]."db "kosarba kiiras($tomb[$i][0])"<br>"; $osszeg +=kosar osszeg($tomb[$i][0],$tomb[$i][1]); } Foreach segítségével bejárható az egész tömb, ez azért fontos mert, ha törlıdik egy termék a kosárból, akkor is kinyerhetı minden elem. $tomb[$i][0] a rendelt mennyiséget pedig A kosárban szereplı áru azonosítóját $tomb[$i][1] tartalmazza. A kosár logikai mőködését szemléltetı 12. ábrán látható, hogy mik a kosárba helyezés feltételei Fontos vizsgálni a rendelt mennyiséget, nem adható meg csak 0-tól nagyobb egész szám, mivel nincs értelme például -1 vagy „a” mennyiségnek. Ezek után fontos eldönteni, hogy a kosár

tartalmazza már a megrendelt terméket, ha igen akkor csak a mennyiséget kell növelni, ellenben bekerül a kosárba a termék és a mennyiség is. if($ POST[db]>0 && (((string)(int)$ POST[db]) === $ POST[db])) { $van=0; foreach($tomb as $i=>$ertek) { if($tomb[$i][0] ==$ POST[kos aru id]) { $van=1; $van id= $i; } } if($van==1) { $tomb[$van id][1]+=$ POST[db]; $ SESSION[kosar]=$tomb; } else { $tomb[]=Array($ POST[kos aru id],$ POST[db]); $ SESSION[kosar]=$tomb; } } A $ POST[db] tartalmazza a rendelt mennyiséget, a $ POST[kos aru id] pedig a termék azonosítóját. 39 Zsáki Erik Nagykereskedelmi webáruház fejlesztése A vevı dönthet úgy, hogy nem szeretné érvényesíteni a megrendelést, vagy kezdene egy másikat, erre az esetre tudja a kosár teljes tartalmát üríteni. Ennek megoldása, hogy egy üres tömböt kap értékül. $ SESSION[kosar]=array(); A kosár összesítésénél lehetıség van egyesével törölni termékeket, és változtatni a

rendelt mennyiségen. Az unset() függvény segítségével van lehetıség a tömb egy sorának törlésére, a $ GET[sor] tartalmazza a törölni kívánt sort. unset($tomb[$ GET[sor]]); $ SESSION[kosar]=$tomb; Mennyiség módosítás esetében, ismét kell vizsgálni az értékre. if($ POST[mod db]>0 && (((string)(int)$ POST[mod db]) === $ POST[mod db])) { $tomb[$ POST[sor id]][1]=$ POST[mod db]; $ SESSION[kosar]=$tomb; } Ezen lehetıségeket használva a vevı összeállíthatja a rendelést, és ha be van jelentkezve meg is rendelheti azt. A rendelést elıször az adatbázisban el kell tárolni, majd az elıbb leírt módon üríteni a session-t. Az adatbázisba írásért a megrendeles() függvény a felelıs Mőködése a következı. Elıször a megrendelesek fej táblába szúrja be az új megrendelés adatait, majd az azonosítót lekérdezve a megrendelesek táblába belepakolja a fejhez tartozó rendelt termékeket, és mennyiségeket. function megrendeles()

{ $query str="INSERT INTO megrendelesek fej(vasarlo id,vasarlas datum,allapot,osszeg) VALUE($ SESSION[id],now(),0,$ SESSION[kosar osszeg])"; mysql query($query str); $query str="SELECT LAST INSERT ID() as id"; $eredmeny= mysql query($query str); $elem=mysql fetch object($eredmeny); $megrendel id=$elem->id; 40 Zsáki Erik Nagykereskedelmi webáruház fejlesztése $tomb=$ SESSION[kosar]; foreach($tomb as $i=>$ertek) { $query str="INSERT INTO megrendelesek(fej id,aru id,mennyiseg) VALUES($megrendel id,".$tomb[$i][0]","$tomb[$i][1]")"; mysql query($query str); } } A kosár megrendelésekor hívódik meg ez a függvény, és ezek után az eladó már láthatja a megrendelést. A rendelés után a vevı a kezdı oldalon találja magát, ahol értesül a rendelés beírásáról. if($ GET[megrendel]==1) { megrendeles(); $ SESSION[kosar]=array(); $ GET[megrendel]=0; header("Location: index.php?rendel=1&"SID); } 4.256

Keresés a termékek között A megvalósítás során ez volt az a terület, aminél sok probléma jelentkezett. A problémák onnan erednek, hogy a felhasználónak mindig az általa keresett termékeket kell látnia. Mivel több száz termék is szerepelhet, ezért lapozást vezettetem be, egy oldalon egyszerre 5 termék látható, így könnyebb az áttekintés. Vagyis lapozás során mindig a megfelelı 5 termék jelenjen meg. Akkor is, ha egy terméket kosárba pakol a vevı, vagy éppen akkor jelentkezik be. Elsı lépésnek elı kell állítani a keresési stringet, amit a vevı egy őrlapról küld el. Ezt a mőveletet a keresesi string() függvény végzi, melynek egyetlen paramétere, hogy ki kéri a lekérdezést. Mivel ezt a függvényt használja az eladó is function keresesi string($ki) { if($ki=="user") { $query str="Select * from aru join kategoria On aru.kat id=kategoriakat id WHERE aru.allapot=1"; $and=1; } else { 41 Zsáki Erik

Nagykereskedelmi webáruház fejlesztése $query str="Select * from aru join kategoria On aru.kat id=kategoriakat id"; $and=0; } if(!empty($ POST[keres nev])) { if($and==0) {$query str.=" WHERE aru nev LIKE %$ POST[keres nev]%";} else {$query str.=" AND aru nev LIKE %$ POST[keres nev]%";} $and=1; } if(isset($ POST[keres ter kat]) && $ POST[keres ter kat]!="all") { if($and==0) {$query str.=" WHERE arukat id=$ POST[keres ter kat]";} else {$query str.=" AND arukat id=$ POST[keres ter kat]";} $and=1; } if(isset($ POST[keres ter kiszerel]) && $ POST[keres ter kiszerel]!="all") { if($and==0) {$query str.=" WHERE arukiszereles=$ POST[keres ter kiszerel]";} else {$query str.=" AND arukiszereles=$ POST[keres ter kiszerel]";} $and=1; } if(!empty($ POST[min ar]) && !empty($ POST[max ar])&& (((string)(int)$ POST[min ar]) === $ POST[min ar]) && (((string)(int)$ POST[max

ar]) === $ POST[max ar])) { if($and==0) {$query str.=" WHERE aru netto ar BETWEEN $ POST[min ar] AND $ POST[max ar]";} else {$query str.=" AND aru netto ar BETWEEN $ POST[min ar] AND $ POST[max ar]";} $and=1; } if(isset($ POST[keres ter afa]) && $ POST[keres ter afa]!="all") { if($and==0) 42 Zsáki Erik Nagykereskedelmi webáruház fejlesztése {$query str.=" WHERE afa=$ POST[keres ter afa]";} else {$query str.=" AND afa=$ POST[keres ter afa]";} $and=1; } if(isset($ POST[ker rendez])) { $query str.=" ORDER BY $ POST[ker rendez]"; } $ SESSION[sor]=mysql num rows(mysql query($query str)); return $query str; } A lekérdezés aszerint kerül összeállításra, hogy milyen keresési értékek lettek átadva. A függvény visszatér a keresési stringgel, és megadja, hogy az adott kereséshez hány eredménysor tartozik. Ez a lapozásnál hasznos, mivel ez alapján lehet eldönteni, hogy hány terméket kell

lapozhatóvá tenni. A lapozás megoldására a mysql LIMIT elıírását használtam Aminek meg kell adni azt, hogy hányadik sorttól, és mennyi sor írjon ki az adott lekérdezésben. A lapozás mőködtetéséhez linkeken keresztül állítom be a kívánt oldalt A lekérdezés sessionban eltárolom, így mindig a megfelelı keresési feltételen belül lapozhatok. Akkor, ha a vevı a kosárba helyez, pontosan ugyan arra az oldalra kerül vissza, ez igaz a bejelentkezésre is. Fontos ezt lekezelni, mivel ha ez nem így mőködne, az megnehezítené a vásárlást, hiszen mindig újra kéne keresni, majd lapozni. Az áttekinthetıség érdekében külön jönnek az egyes kód részletek, abban a sorrendben, ahogy a forráskódban is vannak. Amikor egy termék a kosárba kerül, marad az aktuális oldal. $sor szam=$ SESSION[sor]; $elso=$ GET[elso]; $query str=$ SESSION[query string]; Itt hívódik meg a keresesi string() függvény, minden egyes új keresés során. 43

Zsáki Erik Nagykereskedelmi webáruház fejlesztése $query str=keresesi string("user"); Ez a rész akkor teljesül, ha léptetés van az oldalak között. $query str=$ SESSION[query string]; Majd jöhet a megfelelı keresés beállítás után a mysql futtatás. $sor szam=$ SESSION[sor]; $eredmeny=mysql query($query str." LIMIT $elso,5"); if(mysql num rows($eredmeny)==0) {echo "<center>".$user uzen[2]"</center>";} while($elem=mysql fetch object($eredmeny)) { A while ciklusban íródnak ki megfelelı formában a termékek. A forma kiírását nem részletezem, ez inkább a html-hez tartozik. Az adatbázisból kinyert adatokat, táblázat segítségével rendeztem a következı formába. 13. ábra(a termék kiírás elrendezése) A kosár gomb hatására lesz elküldve a termék azonosítója és a rendelt mennyiség. Majd a mysql lekérdezést sessionban eltárolom. $ SESSION[query string]=$query str; Ez után jön az

oldalak léptetését beállító kód sor. Vizsgálni kell, hogy van e léptetési lehetıség valamely irányban. Ezt mindig az $elso értékéhez kell viszonyítani, ezért kell például a lekérdezés összes sorának a száma, mert így tudható meg, hogy az utolsó oldalon jár a vevı. 44 Zsáki Erik Nagykereskedelmi webáruház fejlesztése if($elso>0) { echo "<a href="".$ SERVER[PHP SELF]"?elso= ".($elso5)"&keres=3&"SID""> Elızı </a>"; } echo ($utolso/5)." oldal "; if($elso<$sor szam-5) { echo "<a href="".$ SERVER[PHP SELF]"?elso= ".$utolso"&keres=3&"SID""> Következı </a>"; } Ez a lapozás hasonlóan mőködik, ha a vevı a kategóriák szerint kíván válogatni, csak ott a keresési string helyett egy lekérdezés van állandóan. mysql query("SELECT aru id FROM aru WHERE kat id=$ SESSION[kategoria] AND

allapot=1"); Az eladónak lehetısége van egy terméket aktivá, vagy passzivá tenni. A vevık csak az aktív termékeket látják. 4.257 Képek megjelenítése A termékekhez tartózó képek megjelenítéséért a kep kirak() függvény a felelıs, amely paraméterként a termék azonosítóját várja. Egyszerő kivitelezés érdekében használok itt javascript-et. Akkor, ha az áruhoz nem tartozik kép, a kep mappában lévı k nincs kepjpg képet illeszti be. Azoknál a termékeknél ahol van kép, ott a termek kep mappában található hozzátartozó képet jeleníti meg. A képre kattintva megjelenik a termékhez tartózó nagy kép, ezért felelıs a script. Ekkor a nagy kepphp oldat nyitja meg egy külön ablakban, ami megkapja a kép azonosítóját. A függvény egy <IMG> html elemmel tér vissza, ami bekerül az elıbb leírt termék kiírásba. function kep kirak($aru id) { $query str="SELECT * FROM kepek WHERE aru id=$aru id"; $eredmeny=mysql

query($query str); if(mysql num rows($eredmeny)==0) { $kep ="<img src="kep/k nincs kep.jpg" border=0 width=100 height=100>"; 45 Zsáki Erik Nagykereskedelmi webáruház fejlesztése } else { $elem=mysql fetch object($eredmeny); $kep="<a href="nagy kep.php?kep id="$elem->kep id"" onclick="javascript: window.open(nagy kepphp?kep id="$elem>kep id",,resizable=no,toolbar=no,menubar=no,scrollbars=no,status=no,directories=no,wi dth=600,height=500, top=200, left=200);return false"><img src="termek kep/".$elem>kicsi kep"" border=0 width=100 height=100></a>"; $ SESSION[kep id]=$elem->kep id; } return $kep; } A programban természetesen ennél több funkció van, és az általam leírt megoldások más módszerekkel is megvalósíthatók. A programozás során voltak olyan problémák melyek igényelték azt, hogy más módszerrel közelítsem meg, mint ami az

eredeti elképzelés volt. A kódolás során igyekezetem úgy alkotni a forráskódot, hogy az esetleges változtatások minél könnyebben menjenek. 46 Zsáki Erik Nagykereskedelmi webáruház fejlesztése 4.3 Szoftver validáció Ebben a szakaszban a már kész programot kell vizsgálni. Ellenırizni kell, hogy a specifikációban leírtaknak eleget tesz-e a program. Majd tesztelni kell, hogy felszínre kerüljenek az egyes hibák. A specifikációban foglalt összes megvalósítani kívánt egységet, sikeresen kódoltam. Az egységek képesek együtt mőködni, és így egy rendszert alkotni. Igyekeztem már a tervezés során úgy kialakítani a rendszert, hogy az esetleges javítások, és változtatások hamar és könnyen elvégezhetık legyenek. Illetve új elemek, funkciók könnyen beépíthetık legyenek 4.31 Tesztelés A megvalósított rendszert tesztelni is kell, mivel így derül ki, hogy a specifikációnak megfelelı termék jött-e létre. A tesztelésnek

több módszere is van, ezek közül igyekeztem minél többet használni. Elsı a kódolás közbeni tesztelés. Célszerő a kódoláskor professzionális fejlesztıi környezeteket használni, mint például a PHPED,a ZendStudio, vagy EMS SQL Manager. Ezeknél az eszközöknél már pusztán a szintaktikai kiemeléssel észrevehetık a hibák, és egyes hibákat már ık is feltárnak. Elsıdleges hibaforrás az elgépelésbıl, a rossz szintaktikából fakad. Ezeket általában nem nehéz felderíteni és javítani, köszönhetıen az eszközöknek, és a php által küldött hiba üzeneteknek, melyek megadják a hiba helyét is. A kódolás során folyamatosan teszteltem, mint az egységeket, mint az addig kész rendszert. A teszteléshez nagy segítség volt az echo() amivel az egyes értékeket tudtam megjeleníteni. Fontos volt ez, mivel az oldalak között áramló adatokról mindig pontos képet kaptam, az értékek kiíratásával mindig eljutottam a probléma

forrásához. Másik nagy segítség a mysql error() függvény volt, amely a mysql-tıl érkezı hibaüzeneteket jeleníti meg. Egyes hibákról az admint és a vevıt is kell tájékoztatni, erre létrehoztam az uzen.php oldalt, ahol tömbben tárolom az egyes üzeneteket. $hiba[11]="Érvénytelen email forma!"; 47 Zsáki Erik Nagykereskedelmi webáruház fejlesztése Majd a megfelelı feltétel esetén iratom ki az üzenetet. if(mysql query($query str)) {$uzen=$admin uzen[9];} else {$uzen=$admin uzen[10];} echo $uzen; Így egyrészt megállapíthatom az adott egységrıl a mőködés helyességét a tesztelés során, és a késıbbiekben informálhatom a felhasználókat. Fontos a vizsgálni a felhasználóktól érkezı adatokat, arra az esetre, ha nem a megfelelı értéktartományból kívánnak értéket átadni. Ezen szélsıséges értékekkel is végeztem teszteléseket, ebbıl tudhattam meg, hogy mőködnek-e a hibakezelési funkciók. A vizsgálatra

itt van két példa. Ez a feltétel vizsgálja, hogy megfelelı-e a rendelt mennyiség if($ POST[db]>0 && (((string)(int)$ POST[db]) === $ POST[db])) Például ha, a rendelt mennyiségre „aaa” értéket adom meg, nem fog változni a kosár tartalma. Ez pedig, hogy megfelelı-e a vevı által megadott email. if(ereg("^([0-9,a-z,A-Z]+)([., ]([0-9,a-z,A-Z]+))*[@]([0-9,a-z,A-Z]+)([., ,-] ([0-9,a-z,A-Z]+))*[.]([0-9,a-z,A-Z]){2}([0-9,a-z,A-Z])?$",$ POST[reg email])) Ez az ellenırzés a http://weblabor.hu/forumok/temak/1809 helyrıl származik, úgy gondoltam valamilyen szintő ellenırzést az email is kíván, ezért kerestem hozzá ezt a kódrészletet, amely egy úgynevezett reguláris kifejezéssel veti össze adott email címet [13]. 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, elvégeztem a rendelés összeállítását, bejelentkeztem, rendeltem, az admin oldalról teljesítettem a

rendelést. Termékeket, kategóriákat vittem fel, módosítottam, töröltem, az adatokat, és visszaellenıriztem az adatbázisból. Igyekeztem a felhasználók szemszögébıl elvégezni a tesztelést, bár a rendszerre már nem tudok laikus szemmel nézni. Éppen ezért töltöm fel az oldalt egy ingyenes php kiszolgálására is alkalmas tárhelyre. Így élesben az internetrıl is tudom tesztelni, és felmérhetem a hatékonyságát is. A tesztelésben megkértem 48 Zsáki Erik Nagykereskedelmi webáruház fejlesztése számos ismerıst, 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 pontos hibaismertetésre, esetleg dokumentálására. Az oldal üzemeltetése és tesztelése nem zárul be a szagdolgozat elkészítésével, vagyis a mellékletben megadott címen bárki kipróbálhatja. A tesztelés megkönnyítésére létrehoztam tesztadatokat, ami az áruház

esetében valós termékeket, árakat, kategóriákat, kiszerelések jelent. Azért jó valós adatokkal dolgozni, mert így könnyebb észrevenni a hibákat. Ezeket az adatokat mellékelem a programhoz A tesztelés során felmerülı hibák nagy részét javítottam, de elıfordultak hibák, amiket nem sikerült. Ilyen például a vendégkönyvbe íráskor, ha a szöveg automatikusan tördelıdik, a hiba nem az oldal fı funkcióiban jelentkezett. Megoldás jelent, hogy az admin tudja törölni a hozzászólást. Hiba jelentkezik a mail() függvény használatakor, ha nincs email kiszolgáló telepítve. Az email tesztelésénél az ingyen tárhelyen aktiváltam a mail használatát, és mindent rendben találtam. A tesztelés során felmerült egy hiba a keresésnél. Az volt a hiányosság, hogy ha keresési érték nem számot kap értékül az összegnél, akkor hibás keresési eredményt ad vissza. Ezt a hibát az egyik tesztelı ismerısöm jelezte, amit ki is javítottam.

Az oldal feltelepítettem egy szerverre, telepítettem a teszt adatokat, majd regisztráltam a személyes adataimmal. Pakoltam termékeket a kosárba, változtattam a kosár összetételén, majd megrendeltem. A telepítés során létrehozott adminnal belépve, érvényesítettem a megrendelést, és meg is érkezett a hitelesítı email a címemre. 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, visszadobott a beléptetı oldalra. Szintén ellenıriztem, hogy csak abban az esetben tudok rendelni a vásárlói oldalról, ha be vagyok jelentkezve, és itt is rendben volt. 49 Zsáki Erik Nagykereskedelmi webáruház fejlesztése 4.4 Szoftver karbantartás A szoftver karbantartása a rendszeren történı változtatások folyamata, miután a rendszer egyszer „munkába” állt. A karbantartás költsége akár a fejlesztés

költségeinek többszöröse is lehet, de sokkal kisebb kihívás, mint egy eredeti szoftver kifejlesztése. A szoftver életciklusának ez teszi ki a legnagyobb részét. Használat közben jelentkezı problémák kiküszöbölésébıl, és a felmerülı új igények kielégítésébıl áll ez a rész. 4.41 Továbbfejlesztési lehetıségek A program fejlesztése közben felmerültek már bennem fejlesztési lehetıségek, illetve már bejáratott webáruházak megtekintésével is sok hasznos funkciót lehet ellesni. 1. Egy adott termékhez tartozó hozzászólások, ahol ki lehet fejteni a termékkel kapcsolatos észrevételeket, véleményeket. Ennek a megoldása hasonló, mint a vendégkönyvé. 2. Több kép hozzárendelése egy termékhez, ehhez az adatbázis készen áll 3. Az áruház forgalmától függıen akár az eladó is kiszállíthatja a rendeléseket Ebben az esetben egy szállítási költség kalkulátor kell létrehozni. 4. Egy termék több kategóriába

sorolása, ehhez egy kapcsolótáblát kellene felvenni. Elıfordulnak olyan termékek, amiket nem is olyan egyszerő csak egy kategóriába sorolni. 5. 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 egy dokumentumba győjtése. 6. Az adminisztrátori tevékenységek naplózása Ebbıl tudható meg, hogy az egyes eladók milyen tevékenységeket és mikor végeztek. Ehhez egy olyan függvényt kell létrehozni, amely az adott tevékenységnek megfelelı paramétereket eltárolja egy dokumentumban. 7. Stílus lapok kialakítása A felhasználóknak lehetıségük lenne az ı ízlésüket kielégítı színsémákat használni. Ehhez a már létezı 1css fájlt kellene átalakítani, és tárolni melyik felhasználónak mi a sémája. 8. Az oldal kinézetét egy grafikus szakemberrel együttmőködve továbbfejleszteni 50 Zsáki Erik Nagykereskedelmi webáruház fejlesztése 5. Felhasználói

dokumentáció 5.1 Webáruház telepítése 1. Az áruházhoz tartozó fájlokat fel kell másolni a szerverre 2. A configphp fájlban a megadott helyen meg kell adni az oldal email címét, és a pénz nemét. 3. Az include/dbphp fájlban meg kell adni a mysql használatos paramétereket, itt egy példa erre. 4. Az sqlphp állomány futatása a böngészıben, amennyiben helyesek a mysql használatához magadott paraméterek, ez a szkript telepíti a táblákat a megadott adatbázisban. Alapértelmezésként létrehoz egy admint, ezzel lehet bejelentkezni elıször az admin felületre. 5. Amennyiben a futtatás után a „Törölje az sqlphp állományt” kiírás látható, és semmi más. Akkor a táblák telepítése sikeres volt A késıbbi véletlen futtatás megelızve, törölni kell a sql.php állományt 6. Az oldal használatra kész Az admin felületre a belépést, azt automatikusan létrejött admin felhasználóval történik. Login név: admin Jelszó: admin A

belépést követıen ajánlott a jelszavat módosítani, illetve fel lehet venni új adminisztrátort is. Az oldal telepítésének leírást mellékeltem az a webáruházhoz is, Telepites.txt néven 51 Zsáki Erik Nagykereskedelmi webáruház fejlesztése 5.2 Üzemeltetési leírás Az adminisztráció felület használatát tartalmazó leírás az Oldal adatai menüpontban a Segítség linkre kattintva érhetı el. Azért döntöttem úgy, hogy az áruházba beépítem, mert így mindig elérhetı lesz az oldal mőködésének leírása. A vevıi oldalon is mellékelve van a használati útmutató, amit az Információk menüpont megnyitásával lehet elérni. A teljesített rendelések elérhetık az admin mappán belüli rendelesek mappában. A termékekhez rendelt képek a termek kep mappában találhatók. 5.3 Teszt adatok Az áruházhoz mellékeltem teszt adatokat. Amiket a következıképpen kell telepíteni 1. A teszt adat mappában lévı teszt adat.php fájt

futatni kell a böngészıben 2. A teszt adat mappán belüli termek kep mappa tartalmazza a termékekhez kapcsolódó képeket, ennek a tartalmát az áruház termek kep mappájába kell másolni. 5.4 Szükséges hardver és szoftver A vevı és az eladói oldal használatához és mőködtetéséhez egy internet böngészı program szükséges. Javasolt böngészık:Mozilla Firefox, Opera, Internet Exploer Ajánlott felbontás: 1024 X 786 Az áruház telepítéséhez szükséges egy webszerver, egy adatbázis kiszolgáló, és egy php értelmezı. Ezen eszközök legegyszerőbb telepítési módja a XAMPP telepítı csomag használata. Ami ingyenesen letölthetı a http://wwwapachefriendsorg/en/xampphtml címrıl, de mellékelem a program mellé is. 52 Zsáki Erik Nagykereskedelmi webáruház fejlesztése 6. Összefoglalás A szakdolgozat célja egy nagykereskedelemben használható, könnyen kezelhetı, és karbantartható, termékek értékesítésére alkalmas program

volt. A rögzített követelményeknek eleget téve sikerült létrehoznom ezt a kereskedelmi egységet. A fı funkciók mellet sikeresen megvalósítottam az áruház hatékonyabb mőködését elısegítı egységeket is. Legfontosabb funkció volt, a termékek és a hozzá tartozó adatok felvétele, karbantartása, majd a termékek értékesítése. A tesztelés során már kibontakozott egy kép bennem, hogy milyen hatékonysággal képes ellátni a feladatát a szoftver, de az egyik fı célom, hogy az oldalt valós vásárlói tevékenységek alatt mőködjön. Vagyis szeretném megoldani, hogy olyan környezetben használják, mint amire terveztem. Remélhetıleg a közeljövıben ez meg fog valósulni, és így tudni fogom milyen színvonalú terméket készítettem. A téma kiválasztása óta szélesítettem ismereteimet és tapasztalataimat, átfogó képet kaptam az aktuális technikákról. Megismertem a szoftverkészítés menetét, sikerült alkalmaznom a nagyobb

projektek esetében használatos elveket. Elsajátítottam a MySQL adatbázis kezelı használatát alapszinten, és betekintést nyertem az adatbáziskezelés elméletébe. Sikeresen telepítettem és használtam az Apache webszervert, és megfigyelhettem az internet mőködését kicsit részletesebben. Ami számomra a leghasznosabb volt, hogy megtanultam egy olyan programozási nyelvet, ami egyesíti az elıbb leírtakat, könnyen használható, bıséges szakirodalommal rendelkezik, és rengeteg feladat megoldására képes. Ezért is kívánom mind ez irányú tudásomat, mind az elkészített programot tovább bıvíteni. Reményeim szerint szakdolgozatom jó ajánlólevél lehet, mivel ezen e területen áll szándékomban dolgozni a jövıben. 53 Zsáki Erik Nagykereskedelmi webáruház fejlesztése 7. Felhasznált szakirodalom és források [1] A magyar társadalom és az internet 2005 végén Cím: http://www.tarkihu/adatbank-h/kutjel/pdf/a880pdf [2] Wikipedia Cím:

http://hu.wikipediaorg/ [3] Adatbázisok elmélete, tervezése, és egy gyakorlati alkalmazás a B2C elektronikus kereskedelembıl Cím: http://www.peetsofthu/publikaciok/B2C adatbazis modellezespdf [4] forrás: http://www.ujhelyisulinethu/x3/c3/e 4htm [5] Szervezési ismeretekkel kapcsolatos információk Cím: http://rs1.szifhu/~heckenas/okt/lifecycpdf [6] Matt Zandstra: Tanuljuk meg a PHP4 használatát 24 óra alatt 2001 Kiskapu Kft. [7] Julie C. Meloni: Tanuljuk meg a MYSQL használatát 24 óra alatt 2003 Kiskapu Kft. [8] Varga Csaba: Webáruház fejlesztése [9] Amit a CSS-rıl feltétlenül tudni kell Cím: http://web.axelerohu/fodorsi/html/css1html [10] Horváth Sándor: Web oldalak használhatósága a példák tükrében GAMF 2005 [11] PHP kézikönyv Cím: http://www.phpnet/manual/hu/ [12] Prog.hu Cím: http://www.proghu/katalog/4670/PHPhtml [13] Weblabor Cím: http://weblabor.hu/ [14] Tutorial.hu Cím: http://www.tutorialhu/ [15] Xampp telepítı készlet Cím:

http://www.apachefriendsorg/en/xampphtml 54 Zsáki Erik Nagykereskedelmi webáruház fejlesztése 8. Melléklet • A webáruház megtekinthetı az interneten a http://www.zoldsegshopextrahu/ címen Létrehoztam egy vásárlót, amivel be lehet jelentkezni. Login név: vasarlo Jelszó: vasarlo • Az eladói oldalra a bejelentkezés a http://www.zoldsegshopextrahu/adminphp címen, az alapértelmezett adminnal. Login név: admin Jelszó: admin A mellékelt CD tartalma: • A szakdolgozat szövege doc és pdf kiterjesztésben • A weboldal forrása benne az adatbázist, és a teszt adatokat létrehozó php fájlok • Xampp telepítı csomag 55