Nagykereskedelmi Webáruház Fejlesztése
Nagykereskedelmi Webáruház Fejlesztése
Konzulens: Készítette:
Ujvárosi György Zsáki Erik
Számítástechnikai programozó
Dózsa György Gazdasági OKJ 54 4641 05
és Mőszaki
Szakközépiskola és Szakiskola Dózsa György Gazdasági
Kalocsa é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. PHP ...................................................................................................................................................... 5
3.2. MYSQL ................................................................................................................................................ 6
3.3. APACHE ................................................................................................................................................ 6
3.4. HTML................................................................................................................................................... 6
3.5. CSS........................................................................................................................................................ 7
3.6. BÖNGÉSZİK .......................................................................................................................................... 8
4. A SZOFTVER-FOLYAMAT TEVÉKENYSÉGEI [5] ............................................................................ 9
4.1. SZOFTVER SPECIFIKÁCIÓ..................................................................................................................... 11
4.1.1. A megrendelı szemszögébıl .......................................................................................................... 11
4.1.2. Funkciók ........................................................................................................................................ 12
4.1.3. A vásárlás folyamata ..................................................................................................................... 14
4.1.4. A termék útja a vásárlóhoz ............................................................................................................ 14
4.1.5. Az oldallal szembeni elvárások...................................................................................................... 14
4.1.6. Felhasználói eset diagrammok ...................................................................................................... 16
4.2. SZOFTVER-TERVEZÉS ÉS IMPLEMENTÁCIÓ .......................................................................................... 17
4.2.1. Általános felépítés.......................................................................................................................... 17
4.2.2. Az adminisztrációs és a felhasználói (vevı) oldal kinézete............................................................ 18
4.2.3. Az adatbázis tervezése [4] ............................................................................................................. 20
4.2.4. Mysql használata PHP-ból ............................................................................................................ 27
4.2.5. Program kódolása ......................................................................................................................... 30
4.2.5.1. Admin beléptetése ..................................................................................................................... 31
4.2.5.2. Kategória törlése ...................................................................................................................... 33
4.2.5.3. Képek feltöltése ......................................................................................................................... 35
4.2.5.4. Rendelések teljesítése................................................................................................................ 36
4.2.5.5. A kosár mőködése ..................................................................................................................... 38
4.2.5.6. Keresés a termékek között ......................................................................................................... 41
4.2.5.7. Képek megjelenítése.................................................................................................................. 45
4.3. SZOFTVER VALIDÁCIÓ ......................................................................................................................... 47
4.3.1. Tesztelés......................................................................................................................................... 47
4.4. SZOFTVER KARBANTARTÁS ................................................................................................................. 50
4.4.1. Továbbfejlesztési lehetıségek ........................................................................................................ 50
5. FELHASZNÁLÓI DOKUMENTÁCIÓ .................................................................................................. 51
5.1. WEBÁRUHÁZ TELEPÍTÉSE .................................................................................................................... 51
5.2. ÜZEMELTETÉSI LEÍRÁS ........................................................................................................................ 52
5.3. TESZT ADATOK.................................................................................................................................... 52
5.4. 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ı
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
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
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-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.
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.
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
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 4.01
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 internet-
böngészı (Unix rendszereken), ami HTML-t jelenített meg. Ez a böngészı késıbb megjelent
Machintoson és Windowson is.
6
Zsáki Erik Nagykereskedelmi webáruház fejlesztése
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.
http://www.apachefriends.org/en/xampp-windows.html
7
Zsáki Erik Nagykereskedelmi webáruház fejlesztése
3.6. Böngészık
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.
4. ábra
8
Zsáki Erik Nagykereskedelmi webáruház fejlesztése
A jó szoftver tulajdonságai:
• Rendelkezzen a felhasználó által elvárt funkciókkal és teljesítménnyel
• Legyen karbantartható, üzembiztos
• Használható
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
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
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.
Fogyasztók
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
11
Zsáki Erik Nagykereskedelmi webáruház fejlesztése
Hitelesség
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.1.2. 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
13
Zsáki Erik Nagykereskedelmi webáruház fejlesztése
14
Zsáki Erik Nagykereskedelmi webáruház fejlesztése
• 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.
15
Zsáki Erik Nagykereskedelmi webáruház fejlesztése
16
Zsáki Erik Nagykereskedelmi webáruház fejlesztése
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).
17
Zsáki Erik Nagykereskedelmi webáruház fejlesztése
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
<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
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.
20
Zsáki Erik Nagykereskedelmi webáruház fejlesztése
• 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 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
Admin azonosító (kulcs) admin_id
Admin neve admin_nev
Admin login neve admin_login
Admin jelszava 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 USER
Felhasználó azonosító
(kulcs) user_id
Felhasználó neve user_nev
Felhasználó login neve user_login
Felhasználó jelszava user_jelszo
Felhasználó email címe user_email
Felhasználó születési
dátuma user_szul_ido
Felhasználó országa user_orszag
Felhasználó irányító száma user_ir_szam
Felhasználó települése user_telepul
Felhasználó utcája user_ut
Felhasználó ház száma user_haz_szam
Felhasználó telefon száma user_tel
Kér-e hírlevelet? hir_level
22
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 ARU
Áru azonosító (kulcs) aru_id
Kategoria azonosító kat_id
Áru neve aru_nev
Áru kiszerelési egysége Kiszereles
Áru nettó ára aru_netto_ar
Leírás az áruról aru_leir
Az áruhoz tartozó áfa Afa
Aktív vagy passzív termék 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 KATEGORIA
Kategória azonosító (kulcs) kat_id
Kategória neve kat_nev
Kategória leírása kat_leir
23
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 KEPEK
Kép azonosító (kulcs) kep_id
Áru azonosító aru_id
Kicsi kép neve kicsi_kep
Nagy kép neve nagy_kep
Tábla AFA
Áfa értéke (kulcs) Afa
Tábla KISZERELES
A kiszerelés egysége
(kulcs) 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 MEGRENDELESEK_FEJ
Rendelés azonosító (kulcs) rendel_id
Vásárló azonosító vasarlo_id
A vásárlás dátuma vasarlas_datum
Teljesített vagy feldolgozás alatt allapot
Vásárlás nettó összege 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 MEGRENDELESEK
Megrendelés azonosító (kulcs) sor_id
Ez azonosítja, hogy a rendelés melyik fejhez
tartozik fej_id
A megrendelés terméke aru_id
Az áru kiszerelésbıl rendelt mennyiség 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 VENDEGKONYV
Hozzászólás azonosító (kulcs) konyv_id
A hozzászóló felhasználó azonosítója user_id
Hozzászólás dátuma datum
Hozzászólás 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 SZAMLALO
Elküldött email-ek száma email
Törölt felhasználók száma torolt_user
Az oldalt látogatók száma latogatok
Teljesített rendelések száma rendeles
Elfelejtett jelszavak kérelmének száma felejt_email
Vendégkönyvbe írások száma konyv_ir
Vendégkönyvbe törlések száma konyv_torol
Bejelentkezések száma login
Regisztrációk száma regisztralt
9. ábra
26
Zsáki Erik Nagykereskedelmi webáruház fejlesztése
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);
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.
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:
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 termekek.php 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];}
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.
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 kategoriak.php-ból
a már létezı kategóriák módosításáért felelıs.
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
30
Zsáki Erik Nagykereskedelmi webáruház fejlesztése
Eladói oldal
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: ../admin.php");
}
31
Zsáki Erik Nagykereskedelmi webáruház fejlesztése
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
if($_GET[del]==1)
{
$query_str="SELECT kicsi_kep,nagy_kep FROM kategoria JOIN aru JOIN kepek
ON aru.kat_id=kategoria.kat_id AND aru.aru_id=kepek.aru_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");
}
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
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=aru.aru_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;
}
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.
$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
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.
$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
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.
37
Zsáki Erik Nagykereskedelmi webáruház fejlesztése
Vásárlói oldal
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. A kosárban szereplı áru azonosítóját
$tomb[$i][0] a rendelt mennyiséget pedig $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($van==1)
{
$tomb[$van_id][1]+=$_POST[db];
$_SESSION['kosar']=$tomb;
}
else
{
$tomb[]=Array($_POST['kos_aru_id'],$_POST['db']);
$_SESSION['kosar']=$tomb;
}
}
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();
unset($tomb[$_GET[sor]]);
$_SESSION['kosar']=$tomb;
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);
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);
}
function keresesi_string($ki)
{
if($ki=="user")
{
$query_str="Select * from aru join kategoria On aru.kat_id=kategoria.kat_id WHERE
aru.allapot='1'";
$and=1;
}
else
{
41
Zsáki Erik Nagykereskedelmi webáruház fejlesztése
$and=1;
}
$and=1;
}
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;
}
42
Zsáki Erik Nagykereskedelmi webáruház fejlesztése
$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.
$sor_szam=$_SESSION[sor];
$elso=$_GET[elso];
$query_str=$_SESSION['query_string'];
43
Zsáki Erik Nagykereskedelmi webáruház fejlesztése
$query_str=keresesi_string("user");
$query_str=$_SESSION[query_string];
$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))
{
$_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>";
}
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.
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.
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_kep.php?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
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.
4.3.1. 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.
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.
47
Zsáki Erik Nagykereskedelmi webáruház fejlesztése
if(mysql_query($query_str))
{$uzen=$admin_uzen[9];}
else
{$uzen=$admin_uzen[10];}
echo $uzen;
Például ha, a rendelt mennyiségre „aaa” értéket adom meg, nem fog változni a kosár tartalma.
48
Zsáki Erik Nagykereskedelmi webáruház fejlesztése
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.
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.
49
Zsáki Erik Nagykereskedelmi webáruház fejlesztése
50
Zsáki Erik Nagykereskedelmi webáruház fejlesztése
5. Felhasználói dokumentáció
51
Zsáki Erik Nagykereskedelmi webáruház fejlesztése
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://www.apachefriends.org/en/xampp.html címrıl,
de mellékelem a program mellé is.
52
Zsáki Erik Nagykereskedelmi webáruház fejlesztése
6. Összefoglalás
53
Zsáki Erik Nagykereskedelmi webáruház fejlesztése
[2] Wikipedia
Cím: http://hu.wikipedia.org/
[12] Prog.hu
Cím: http://www.prog.hu/katalog/4670/PHP.html
[13] Weblabor
Cím: http://weblabor.hu/
[14] Tutorial.hu
Cím: http://www.tutorial.hu/
54
Zsáki Erik Nagykereskedelmi webáruház fejlesztése
8. Melléklet
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