Jednoduchý internetový obchod v PHP 5.
Ukáži vám, jak ve vytvářeném obchodě pracovat s položkami vloženými zákazníkem do nákupního košíku.
Položky nákupního košíku a jejich editace
Vložení objednávaných položek do nákupního košíku řeší předchozí, čtvrtý díl seriálu. Předpokládám tedy, že zákazník si již něco vybral a nyní se chce podívat do svého košíku. Úkolem skriptu kosik.php, kterému se v tomto dílu budu věnovat, je zobrazit jméno a popis již vložených položek, jejich objednaný počet a odpovídající cenu. Skript samozřejmě spočítá i s celkovou cenou všech objednávaných položek. Rozhodne-li se zákazník některou položku z nákupního košíku odstranit, případně změnit objednávaný počet kusů, učiní to jednoduchým klepnutím na příslušné tlačítko. Je-li košík zákazníka prázdný, zobrazí se odpovídající oznámení. Kvůli větší přehlednosti jsem skript kosik.php rozdělil a část umožňující zákazníkovi změnit počet objednávaných kusů položky jsem umístil do samostatného skriptu zmenit.php.
Vysvětlení činnosti skriptu kosik.php
Jádrem skriptu je dotaz na tabulku „kosiky“ databáze mySQL. Tuto tabulku jsem podrobně popsal v předchozím díle svého seriálu, proto jen stručně. Tabulka obsahuje pole identifikující a popisující položku vloženou do košíku, čas tohoto vložení, množství objednaných kusů a kód zákazníka (pomocí proměnné $PHPSESSID, viz třetí díl seriálu), který položku do košíku vložil. Výsledné záznamy z tabulky „kosiky“ odfiltrované na konkrétního zákazníka se zobrazí do tabulky (tedy košíku) v kódu HTML tak, aby zákazník získal přehled o všech položkách vložených do „svého košíku“. Každou položku tohoto košíku je možné identifikovat pomocí elementu hidden dvou různých formulářů. První formulář odešle po stisknutí příslušného tlačítka skriptu kosik.php identifikaci položky určené zákazníkem k odstranění z košíku. Na začátku tohoto skriptu je příslušný příkaz na tabulku kosiky, který identifikovanou položku odstraní. Je-li aktivován druhý formulář, odešle se skriptu zmenit.php identifikace položky, u které si zákazník přeje změnit objednávané množství.
Skript zmenit.php
Skript je velice podobný předchozímu, jediný rozdíl je v zobrazení položky identifikované jako ta, kde si zákazník přeje změnit počet objednávaných kusů. Aktivuje se nový formulář s textovým polem, ve kterém zákazník může změnit údaj o počtu objednávaných kusů pro danou položku. Po potvrzení této volby předá formulář údaj zpět skriptu kosik.php, který provede aktualizaci tabulky kosiky a zajistí výpis položky s novým počtem objednaných kusů a samozřejmě i s přepočítanou cenou, včetně ceny celkové.
Výpis položek nákupního košíku
Pomocí cyklu do-while (viz druhý dil) se připojím k databázi mySQL pracovně nazvané obchod, ve které se nalézá i tabulka kosiky. Do proměnné $vypis uložíte dotaz na tuto tabulku, kterým zjistíte všechny potřebné údaje o položkách objednaných daným zákazníkem (identifikovaným pomocí proměnné $PHPSESSID). Do proměnné $soucet uložíte dotaz na tabulku zjišťující součet cen objednávaných položek. Hodnotu tohoto součtu v sobě obsahuje prvek soucet pole $soucet_vypis, které vzniklo použitím funkce Mysql_fetch_array( ). Je-li jeho hodnota rovná nule, vypíše se upozornění oznamující zákazníkovi, že je jeho košík prázdný.
|
Nadefinujete tabulku v kódu HTML, do které budete zákazníkovi vypisovat údaje o objednávaných položkách. Zajímat ho bude jméno objednávané položky, počet objednávaných kusů a cena za tento počet (výpočet ceny podle objednaných kusů dané položky je řešen v předchozím díle). Záhlaví tabulky může potom vypadat např. takto:
|
Pomocí cyklu while a funkce Mysql_fetch_array vypíšete údaje o jednotlivých položkách do přehledné tabulky, resp. košíku. Každé položce přiřadíte dva formuláře. První s názvem Zmenit předá po klepnutí na tlačítko Změnit skriptu zmenit.php proměnnou $ID (jméno elementu hidden formuláře) obsahující jednoznačnou identifikaci položky (pomocí hodnoty pole id_vyrobek tabulky kosiky, kterou vyjadřuje proměnná $zaznam[id_vyrobek]). Druhý formulář s názvem Smazat předá obdobným způsobem proměnnou $ID aktuálnímu skriptu kosik.php. Tento formulář je vhodné ošetřit JavaScriptem, který se po klepnutí na tlačítko Smazat zeptá zákazníka, zda chce skutečně odstranit položku ze svého košíku.
|
Do spodního řádku tabulky umístěte údaj o celkové ceně za všechny objednané položky ($soucet_vypis[soucet]) a formulář, který po stisknutí tlačítka objednat nasměruje zákazníka na stránku objednat.php, kde vyplní kontaktní údaje a potvrdí objednávku. Poté ukončete připojení k databázi.
|
Změna počtu kusů u objednávané položky
Aby mohl zákazník změnit počet kusů u dané položky košíku, musí klepnout na tlačítko Změnit. Aktivuje tím formulář Zmenit, který skriptu zmenit.php předá proměnnou $ID jednoznačně identifikující položku, u které si zákazník přeje změnit počet kusů. Skript zmenit.php je velice podobný dosud popsanému skriptu kosik.php. Jediný rozdíl je v cyklu while, kterým do košíku načítáte jednotlivé položky zákazníka (viz ukázka kódu níže vyznačená tučným písmem). Každá položka je podrobena testu, zda její identifikátor (tedy příslušná hodnota pole id_vyrobek tabulky kosiky, kterou v cyklu vyjadřuje proměnná $zaznam[id_vyrobek]) odpovídá proměnné $ID. Pokud ano, skript pozná, že jde o položku, u které chce zákazník změnit počet objednávaných kusů. Vypíše pak textové pole nového formuláře nazvaného Zpet obsahujícího aktuální počet objednávaných kusů (value = \“$zaznam[mnozstvi]\“). Zákazník v něm napíše novou hodnotu pro objednávaný počet kusů. Opět je vhodné tento formulář ošetřit JavaScriptem, který např. zákazníkovi nedovolí do textového pole zadat jinou hodnotu, než celé kladné číslo. Stisknutím tlačítka OK potvrdí zákazník svou volbu a skriptu kosik.php pošle zpět proměnnou $kolik (jméno textového elementu formuláře) nesoucí informaci o novém počtu objednávaných kusů položky a proměnnou $ID (jméno elementu hidden formuláře) tuto položku jednoznačně identifikující.
|
Změny v tabulce kosiky
Na počátku skriptu kosik.php inicializujte proměnné $ID a $kolik.
|
Nyní můžete skript rozdělit do dvou větví. Pokud se proměnná $ID nerovná prázdnému řetězci, je jasné, že jí musel nějakou hodnotu udělit zákazník klepnutím na tlačítko Smazat formuláře Smazat nebo OK formuláře Zpet ve skriptu zmenit.php. Je-li současně proměnná $kolik rovna prázdnému řetězci, můžete vyloučit klepnutí na tlačítko OK. Zákazník si tedy přeje položku identifikovanou proměnnou $ID z košíku odstranit. Skript provede příslušný příkaz DELETE pro záznam tabulky kosiky odpovídající proměnné $ID (viz proměnná $vysledek1 v ukázce kódu níže). Protože se může klidně stát, že v tabulce kosiky bude mít více zákazníků uloženou tutéž položku, musíte příkaz DELETE pomocí proměnné $PHPSESSID omezit pouze na daného zákazníka. V opačném případě by rozhodnutím tohoto zákazníka byla položka z tabulky vymazána úplně a zmizela by tak i z košíků ostatních zákazníků. Obdobně, je-li proměnná $ID různá od prázdného řetězce a totéž platí i pro proměnnou $kolik, je jasné, že zákazník klepnul na tlačítko OK ve skriptu zmenit.php a chce tedy u takto identifikované položky změnit počet objednávaných kusů. Provedete tedy příkaz UPDATE a poli mnozstvi příslušného záznamu tabulky kosiky předáte hodnotu definovanou v proměnné $kolik (viz proměnná $vysledek2).
|
Nyní zbývá u dané položky znovu přepočítat cenu tak, aby odpovídala aktuálnímu počtu objednávaných kusů (stále pokračujete ve větvi elseif (($ID != „“) && ($kolik != „“))). Nejdříve si z tabulky vyrobky zjistěte pro danou položku jednotkovou cenu (viz proměnná $vyrobky_cena, resp. $jedn_cena) a z ní odvodíte celkovou cenu pro objednávaný počet kusů (viz proměnná $celkova_cena). Tuto celkovou cenu promítnete do košíku zákazníka (viz proměnná $update). Pro jistotu ještě zkontrolujte, zda se cena položky v košíku nerovná nule (datový typ pole cena tabulky kosiky je SMALLINT UNSIGNED; při pokusu zadat jinou hodnotu, než kladné celé číslo, se do tohoto pole uloží nula). Pokud se nule rovná, položku z košíku odstraníte (viz proměnná $smazat).
|
Správné logické pořadí příkazů skriptu kosik.php
Až nyní jsem se dostal opět k té části skriptu kosik.php, kterou jsem článek začal – tj. k výběru příslušných záznamů zákazníka z tabulky kosiky (viz proměnná $vypis) a jejich zobrazení do košíku. Aby skript fungoval logicky správně, je nutno toto pořadí zachovat – nejdříve se tedy musí provést příslušné změny v tabulce kosiky a až potom se výsledné záznamy mohou vypsat do zákazníkova košíku.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Optimalizace a zlepšení výkonu kódu: tipy a triky
14. srpna 2023 -
10 nejpopulárnějších programovacích jazyků a jejich využití
9. listopadu 2023
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024