Jednoduchý internetový obchod v PHP 4.
Tentokrát se dozvíte, jak napsat skript php, který objednané položky vloží do košíku, provede potřebný cenový výpočet a navíc zamezí vkládání neplatných objednávek.
Naplněný košík
Vložení objednaných položek do nákupního košíku řeší skript nazvaný select_kosik.php ve spolupráci s tabulkami „vyrobky“ a „kosiky“ databáze pracovně nazvané „obchod“ (viz díl první – tabulka „vyrobky“ a díl třetí – skript „select_kosik.php“). Tabulka „kosiky“ pro vás bude nová. Funkcí této tabulky je držet záznamy o zboží vloženém do košíku po určitou definovanou dobu, pokud se zákazník nerozhodne zboží z košíku a tím i z této tabulky odstranit dříve.
Nahlédnutí do košíku
Tabulka „kosiky“obsahuje sedm polí. První pole „id_vyrobek“ definuje každou položku sortimentu, další dvě pole se jmény „nazev“ a „kat_cislo“ jsou převzaty přímo z tabulky „vyrobky“. Pole „mnozstvi“ udává pro každý záznam tabulky (tj. položku vloženou do košíku) objednaný počet a pole „cena“ odpovídající cenu. Pole „id_host“ v sobě obsahuje systémovou proměnnou PHP „$PHPSESSID“ jednoznačně definující každého návštěvníka obchodu. Tuto proměnnou návštěvníkovi přidělil skript select.php (viz třetí díl). A konečně pole „cas“ s užitečným formátem „TIMESTAMP“ udává přesný čas vložení daného záznamu do tabulky (a tím i do košíku). Tabulka obsahuje dvoupoložkový klíč složený z polí „id_vyrobek“ a „id_host“. K tomuto klíči se ještě vrátím. Skript select_kosik.php potřebuje mít ke své práci vygenerované tyto proměnné: $PHPSESSID (viz třetí díl), $skupina a $klic (definují výběrová kritéria návštěvníka – (viz druhý a třetí díl), $ident (jednoznačně definuje položku sortimentu podle pole „id_vyrobek“ z tabulky „vyrobky“ – viz předchozí díly) a $kolik (udávající hodnotu textového pole formuláře, do které zákazník zadá počet objednávané položky). Všechny tyto proměnné jsou vygenerovány skriptem select.php (viz třetí díl).
Inicializace proměnných
Skripty select_kosik.php a select.php jsou si velmi podobné. Opět si tedy nadefinujte jednotlivé kategorie sortimentu obchodu a odkazy na ně i formulář umožňující vyhledat položku podle klíčového slova (tuto problematiku řeší podrobně druhý díl). Poté se pomocí cyklu do-while připojte k databázi MySQL „obchod“. Následuje inicializace proměnných $ident a $kolik (předpokládejte, že proměnné $skupina a $klic jsou již inicializované).
|
Tyto proměnné jsou vygenerovány skriptem select.php, respektive elementy typu text a hidden jeho formulářů s atributem action = „select_kosik.php“. Počet formulářů skriptu select.php je proměnlivý – vždy se rovná počtu vygenerovaných záznamů z tabulky „vyrobky“ databáze mySQL, tj. počtu položek, které odpovídají zadanému kritériu návštěvníka. Tyto položky jsou zobrazeny do normální tabulky v kódu html – každému řádku tabulky odpovídá jeden formulář (=jedna položka) a tím i jedna proměnná $ident, resp. proměnná $kolik (k problematice vygenerování tabulky viz třetí díl). Zákazník tak klepnutím na ikonu košíčku u požadované položky (řádku tabulky) předá skriptu select_kosik.php právě jednu dvojici proměnných $kolik a $ident. Skript select_kosik.php pak pozná, kolik kusů ($kolik) dané položky ($ident) chce zákazník do košíku vložit.
Zjištění zbývajících údajů o objednané položce
|
Abyste mohli vložit objednanou položku do tabulky „kosiky“, musíte kromě proměnných $PHPSESSID, $ident a $kolik znát i její název, cenu a katalogové číslo (tato hodnota samozřejmě není povinná, ale předpokládám, že každý vlastník obchodu má své zboží pro vnitřní potřebu označené i číselnými nebo textovými kódy). Všechny tyto údaje zjistí dotaz MySQL na tabulku „vyrobky“ obsažený v proměnné $polozka. Ptáte se na jediný záznam tabulky, jehož klíčové pole „id_vyrobek“ odpovídá proměnné $ident. Získáte potřebné proměnné: $nazev odpovídá údaji z pole „nazev“ daného záznamu (a udává tedy jméno objednané položky), $katalog odpovídá údaji z pole „kat_cislo“ daného záznamu (určuje kód objednané položky) a $jedn_cena odpovídá údaji z pole „cena“ daného záznamu (a určuje cenu objednané položky – pozor, tato cena je jednotková, tj. odpovídá ceně za jednu položku).
Určení ceny pro daný počet kusů
|
Tímto jediným řádkem kódu zajistíte přepočet jednotkové ceny (proměnná $jedn_cena) položky na cenu, která odpovídá zadanému počtu objednaných kusů položky (proměnná $kolik). Výsledná cena se tedy bude rovnat součinu těchto dvou proměnných (proměnná $celk_cena).
Vymazání košíku
|
Příkazem MySQL obsaženém v proměnné $smazat_cas smažete z tabulky „kosiky“ všechny staré záznamy. Ulehčí se tím databázi. Lhůtu pro mazání záznamů určuji atributem INTERVAL (je možné použít i např. dny nebo měsíce – DAY, MONTH). Jak jsem se již zmínil výše, pole „cas“ tabulky je datového formátu „TIMESTAMP“ – tento formát zaručí při vložení záznamu nebo při jakékoli změně automatické vložení příslušného času s přesností na vteřinu. Pokud je tedy záznam v tabulce beze změny po dobu delší než 5 hodin (v tomto případě), stává se kandidátem na odstranění. Při následné aktivaci skriptu select_kosik.php (tj. při pokusu vložit do košíku položku, nezávisle na proměnné $PHPSESSID) je tento záznam vymazán. Příkaz MySQL obsažený v proměnné $vysledek zaručí vložení záznamu (tedy objednané položky) se všemi požadovanými informacemi do tabulky „kosiky“. Skriptu kosik.php (zobrazení košíku a spočítání celkové ceny) se budu věnovat v příštím díle.
Vyloučení chybných objednávek
|
Za chybné objednávky považuji objevení se téže položky více, než jednou v nákupním košíku jednoho zákazníka a nulový počet objednaných kusů u jakékoli položky. Tabulka „kosiky“ obsahuje vícepoložkový klíč složený z polí id_vyrobek a id_host. Do prvního pole se, jak jsem již uvedl, vkládá proměnná $ident jednoznačně určující položku a do druhého pole proměnná $PHPSESSID jednoznačně určující zákazníka. Složený klíč zabrání duplicitě záznamů se stejnými hodnotami těchto dvou polí. Zákazník tedy nemůže k objednané položce přidat tutéž položku ještě jednou. Skript select_kosik.php obsahuje i trik s tzv. temporary table, která při generování tabulky html, obsahující vybrané položky, umožní vytřídění položek vložených do košíku (viz třetí díl).
Nulový počet u objednané položky by nastal, kdyby zákazník například uvedl do textového pole formuláře jako objednávaný počet kusů číslo nula. Proto ještě před vytříděním záznamů pomocí „temporary table“ použijte v proměnné $kontrola dotaz MySQL na cenu přidávané položky. Je-li hodnota pole cena u této položky rovna nule, vymažte tuto položku z košíku (viz proměnná $delete).
To je vše ke skriptu select_kosik.php. Jistě by nebyl problém spojit skripty select.php a select_kosik.php v jeden. Rozdělení jsem použil pro lepší názornost.
V příštím díle bych se chtěl věnovat problematice zobrazování košíku s objednanými položkami a další manipulaci s těmito položkami.
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
-
Webdesign: Jak optimalizovat tlačítka na webu
7. března 2024
Nejnovější
-
Doména .io v ohrožení: Co přinese předání Čagoských ostrovů?
10. října 2024 -
Jak se chránit před podvody na internetu – část 1
8. října 2024
Tom
Čvc 4, 2009 v 19:29je mozne to cele nekde tahnout?