Dokončení krátkého seriálu o nákupním košíku. Dnes si
ukážeme práci se sessions a cookies. Nakonec bude také potřeba
spočítat celkovou cenu objednávky pomocí JavaScriptu.
Nákupní košík musí provádět čtyři základní funkce. Musí
umožnit uživateli přidávat a mazat výrobky z jejich košíku.
Pak také musí umět měnit počet položek a spočítat celkovou
cenu zásilky.
Soubor kosik.php obsahuje čtyři funkce popsaná v
předchozím odstavci. Použijeme rozcestník switch, aby byl
script přehlednější.
<?php
include("db.php");
switch($_GET["action"])
{
case "add":
{
addprod($_GET["id"], $_GET["pocet"]);
ukazkosik();
break;
}
case "update":
{
updateprod($_GET["id"], $_GET["pocet"]);
ukazkosik();
break;
}
case "remove":
{
removeprod($_GET["id"]);
ukazkosik();
break;
}
default:
{
ukazkosik();
}
}
Jak vidíte, používám proměnou $_GET, která byla do PHP
přidána až ve verzi 4.2. Pokud používáte starší verzi, budete
muset tuto proměnou nahradit $HTTP_GET_VARS. Používání $_GET
je ale rychlejší.
V rozcestníku switch máme čtyři možné případy, jak
postupovat dál. Podívejme se na ně podrobněji:
- add: Když kliknete na odkaz "Přidat" v souboru
seznam.php, zavoláte funkci addprod(), která přidá
položku z databáze podle ID.
- update: Změní se počet produktů, které si chce
uživatel objednat. Jak uvidíte, každá položka má vysunovací
seznam s počtem, kolikrát ho chceme objednat. Při změně
změní cenu i počet výrobků v košíku.
- remove: smaže produkt z košíku
Když navštívíme dokument kosik.php bez dalších
parametrů, je zavolána funkce ukazkosik(). Nyní si ukážeme
funkci addprod(), která má dva parametry (id a počet
kůsů).
function addprod($id, $pocet)
Hlavní část fuknce addprod() kontroluje, jestli už není
produkt náhodou v zákazníkově košíku. Pokud ano, zvětšíme
počet kusů, ale nevložíme ho znovu.
$result = mysql_query("select count(*) from kosik where
cookieid = '" .
KosikId() . "' and produktid = $id");
$row = mysql_fetch_row($result);
$pocetradku = $row[0];
if($pocetradku == 0)
{
// položka neexistuje, a proto ji uložíme
mysql_query("insert into kosik(cookieid, produktid, pocet) values('" .
KosikId() . "', $id, $pocet)");
}
else
{
// položka existuje, zvýšíme počet
updateprod($id, $pocet);
}
Při pohledu na kód si jednoduše odvodíte jeho funkčnost.
Když proměnná $pocetradku je nula (produkt ještě není v
košíku), pak vložíme do nákupního košíku vybranou položku.
Jestliže proměnná není nula, stačí pouze přidat jeden kus
pomocí funkce updateprod().
function updateprod($id, $pocet)
Funkce pokračuje jednoduchým SQL příkazem, zvýšením počtu
kusů vybraného výrobku. Pole cookieid použijeme ke kontrole
uživatelova session ID k patřičnému produktu, abychom si byli
jisti, že bude upraven pouze počet kusů správného
uživatele.
mysql_query("update kosik set pocet = $pocet where cookieid = '" .
KosikId() . "' and produktid = $id");
Odstranění položky z košíku je jediná věc, o kterou se
stará funkce removeprod(). K vymazání z databáze potřebujeme
pouze parametr ID.
function removeprod($id)
mysql_query("delete from kosik where cookieid = '" . KosikId() . "' and
produktid = $id");
Teď máme hotové základní funkce, které budeme potřebovat.
Pokročilejší funkce si ukážeme v dalším odstavci.
Sestavení nákupního košíku
Nakonec musíme vytvořit seznam všech položek, které jsou v
nákupním košíku, a také spočítat celkovou cenu zásilky. U
každého výrobku bude vysunovací seznam, ve kterém zvolíte
počet kusů.
Začneme SQL dotazem INNER JOIN k získání seznamu produktů z
tabulky kosik a detailů z tabulky produkty.
$result = mysql_query("select * from kosik inner join produkty on
kosik.produktid = produkty.id where kosik.cookieid = '"
. KosikId() . "'
order by produkty.jmeno asc");
Když jsme znovu získali seznam prvků, zobrazíme je jako
řádky tabulky.
while($row = mysql_fetch_array($result))
{
// zjistí celkovou cenu
$totalcena += ($row["pocet"] * $row["cena"]);
?>
<tr>
<td width="15%">
<select name="<?php echo $row["id"]; ?>"
onChange="updatepocet(this)">
<?php
for ($i = 1; $i <= 20; $i++)
{
echo "<option ";
if ($row["pocet"] == $i) {
echo " selected ";
} else {
echo ">" . $i . "</option>";
}
}
?>
</select>
</td>
<td width="55%">
<?php echo $row["jmeno"]; ?>
</td>
<td width="20%">
<?php echo $row["cena"]; ?> Kč
</td>
<td width="10%">
<a href="kosik.php?action=remove&id=<?php echo $row["id"];
?>">Odstranit</a>
</td>
</tr>
<?php
}
Celkovou cenu položek uchováme v proměnné $totalcena.
Zjistíme ji takto:
$totalcena += ($row["pocet"] * $row["cena"]);
// jiný způsob zápisu
$totalcena = $totalcena + ($row["pocet"] * $row["cena"]);
Důležitý je tag select, který při události onChange zavolá
funkci JavaScriptovou updatepocet(). Tato funkce je definována
v hlavičce souboru. Je velmi jednoduchá a vlastně jen
přesměrovává prohlížeč na jiný dokument s parametry, které
obstarají správnou funkci.
<script language="JavaScript">
function updatepocet(polozka)
{
id = polozka.name;
pocet = polozka.options[polozka.selectedIndex].text;
document.location.href =
'kosik.php?action=update&id='+id+'&pocet='+pocet;
}
</script>
Při zavolání funkce zjistí vybranou hodnotu počtu kusů a
také ID položky. Pak je vloží do parametrů adresy souboru
kosip.php.
Závěr
V tomto krátkém seriálu jste si mohli vytvořit pomocí PHP,
mySQL a JavaScriptu základ internetového obchodu. Nákupní
košík je dobrý odrazový můstek pro stavbu celého eshopu.
Nebyly uveřejněny všechny zdrojové kódy, jen ty zajímavější.
Kompletní script si můžete stáhnou zde.