KOVÁCS ATTILA |
Tankör: G-5FP Nk: B44S1J |
E-mail: KOVACS52@IIT.UNI-MISKOLC.HU | SZILÁGYI LAJOS |
Tankör: G-5FP Nk: AUHWTO |
E-mail: SZILAGYI4@IIT.UNI-MISKOLC.HU |
1. Alapfunkciók
1.1. Az adminisztrációs és a felhasználói (vevő) oldal kinézete
1.2. Mysql használata PHP-ből
2. Eladói oldal
3. Vásárlói oldal
Munkanapló
A kódolás során egy jól áttekinthető felület kell, melyen elkülöníthetők az egyes egységek. Mivel kódolás közben is végzünk hiba vizsgálatot, illetve ellenőrizzük az algoritmusok működésének helyességét ezért is fontos volt, hogy erről a felületről tudjuk ellenőrizni magunkat. 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. 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 majd. 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 oldal falnak hívunk. Minden egyes doboz egy PHP oldal tartalmaz.
A php rendelkezik a mysql adatbázis használatához szükséges függvényekkel. Akapcsoló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);
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 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`) );
Következő lépés, hogy a tábla mezőit értékekkel kell feltölteni.
$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]')";
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";
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.
Felmerülhet az igény már felvett sor módosítására is. A következő rész a kategoriak.phpbó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);
Adminbeléptetés
A kódolás során használjuk 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 URLben 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. Fontos még a $_POST és $_GET szuper globá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.
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. Az 1. ábra mutatja az admin belépését.
![]() |
1. ábra
Kategória törlése
Már említett a kategória törlés részletesebb ismertetése.
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.
Képek feltölté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 jpgvé 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.
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.
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 á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:
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 megrendelések és megrendelesek_fej táblák feleslegessé vált sorai törlődnek.
A kosár működése
A következő (2. á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.
![]() |
2. ábra
Csak a rendelés esetén kell belépni, ezért a kosár tartalmát sessionban kell tárolni. 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.
$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]);
}
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.
Keresés a termékek között
Problémák eredhetnek, 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 vezethető 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.
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álunk itt
javascriptet. Akkor, ha az áruhoz nem tartozik kép, a kep mappában lévő k_nincs_kep.jpg
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_kep.php oldat nyitja meg egy külön ablakban, ami
megkapja a kép azonosítóját.
Kezdet | Időtartam | Résztvevők | Tevékenység | Eredmény |
2008-11-26 | 10 óra egyéni munka + 2 óra konzultáció 10 óra egyéni munka + 2 óra konzultáció |
Kovács Attila Szilágyi Lajos |
Részfeladatok kiosztása. | Feladatkiosztás:Kovács Attila:
|
2008-12-01 | 3 óra konzultáció 3 óra konzultáció |
Kovács Attila Szilágyi Lajos |
Elkészült részfeladatok elemzése, javítása.
A szoftver implementációs dokumentum összeállítása. |
A szoftver implementációs dokumentum és a munkanapló beadásra szánt változata. |
Név | Összidőszakra (∑100%) [%] |
Kovács Attila | 50 |
Szilágyi Lajos | 50 |