[PHP] Jak stworzyć koszyk zamówień do sklepu internetowego z wykorzystaniem cookies?
Chcesz stworzyć koszyk zamówień w dowolnym sklepie internetowym.
Koszyk zamówień, gdzie klient gromadzi kupione produkty, przegląda je, kasuje, zwiększa lub zmniejsza ilość sztuk zamówionych towarów to jeden z najważniejszych elementów sklepu internetowego. Trudno wyobrazić sobie funkcjonowanie sklepu bez koszyka.
Koszyk powinien być prosty w obsłudze, elastyczny i bezpieczny. Stwórzmy go, bo bez wątpienia będzie Ci potrzebny, jeżeli zamierzasz cokolwiek sprzedawać w Sieci.
Zasymylujemy przy okazji wszystkie procesy, z których korzysta klient, a więc dodanie produktu do koszyka (kupno towaru), usunięcie go z koszyka, zmianę sztuk danego produktu i oczywiście przegląd koszyka. Wystarczy, że umieścisz poniższy skrypt w pliku index.php aby zobaczyć, jak przebiega obsługa koszyka.
Oczywiście każdy sklep musi mieć koszyk dostosowany do własnych potrzeb, jednak poniższy szablon można zastosować w każdym sklepie bez wyjątku. Wystarczy dodać grafikę i obsługę cen. Ponieważ wykorzystuje on cookies, użytkownik musi je mieć włączone.
<?
$koszyk=$_COOKIE["koszyk"];
$id=$_GET["id"];
$ile=$_GET["ile"];
if ($ile<0) unset($ile);
function dodaj($koszyk,$id,$ile) {
$zakupy = explode("|",$koszyk);
for ($i=0;$i<count($zakupy)-1;$i++) {
$p = explode("#",$zakupy[$i]);
if ($p[0]==$id) {
if (isset($ile)) $p[1]=$ile;
else $p[1]++;
$jest=true;
}
if ($p[1]>0) $nowy .= "$p[0]#$p[1]|";
}
if (!$jest) $nowy .= "$id#1|";
return $nowy;
}
if ($id<>"") {
$koszyk = dodaj($koszyk,$id,$ile);
setcookie("koszyk", $koszyk, 0, "/");
header("Location: index.php");
exit;
}
?>
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html><head><meta http-equiv="content-type"
content="text/html; charset=iso-8859-2">
<title>Koszyk </title></head><body>
<p>
Zawartość koszyka:
<p>
<?
echo "<table border=1>";
echo "<tr align=center><td><b>id</b></td><td><b>sztuk</b></td><td> </td>";
$zakupy = explode("|",$koszyk);
for ($i=0;$i<count($zakupy)-1;$i++) {
$p = explode("#",$zakupy[$i]);
echo "<tr><td valign=center>$p[0]</td>";
echo "<td><form action=\"index.php\" action=\"get\" style=\"display:inline;\">
<input type=\"hidden\" name=\"id\" value=\"$p[0]\">
<input type=\"text\" name=\"ile\" value=\"$p[1]\" style=\"width:50px;\">
<input type=\"submit\" value=\" zmień \" style=\"80px;\"></form></td>";
echo "<td><form action=\"index.php\" action=\"get\" style=\"display:inline;\">
<input type=\"hidden\" name=\"id\" value=\"$p[0]\">
<input type=\"hidden\" name=\"ile\" value=\"0\">
<input type=\"submit\" value=\" skasuj \" style=\"80px;\"></form></td>";
echo "</tr>";
}
echo "</table><p>";
echo "Wygląd koszyka w cookies:<p>$koszyk";
?>
<p>
Produkty do kupienia:<br>
<a href="index.php?id=1">kup produkt 1</a> |
<a href="index.php?id=23">kup produkt 23</a> |
<a href="index.php?id=3">kup produkt 3</a> |
<a href="index.php?id=4">kup produkt 4</a> |
<a href="index.php?id=54">kup produkt 54</a> |
<a href="index.php?id=119">kup produkt 119</a> |
</body></html>
Zobaczmy jak to działa. Sercem koszyka jest funkcja dodaj(), która wstawia do cookies identyfikator produktu (ID) oraz ilość sztuk tego produktu (co najmniej jedną sztukę produktu zawsze musimy w koszyku mieć).
Do obsługi koszyka wystarczą nam dwie informacje o produkcie - jego niepowtarzalny identyfikator i oczywiście liczba sztuk. Mając te dane, bez problemu można wyciągnąć z bazy szersze informacje o produkcie - jego cenę, nazwę, kolorystykę czy opis.
Dla koszyka istotna jest jeszcze cena produktu i cena zbiorcza, ale mając identyfikator produktu możesz ją łatwo wyciągnąć z bazy produktów i za pomocą prostych operacji matematycznych wypisać obok cenę za sztukę, cenę łączną (cena sztuki*ilość) i cenę zbiorczą zamówionych towarów (suma cen łącznych).
W cookies będziemy zapisywać więc tylko identyfikator i ilość sztuk w formacie id#sztuk, a poszczególne towary oddzielimy znakiem |. Cookies o nazwie $koszyk może zawierać następujacy wpis: id#sztuk|id#sztuk|id#sztuk| itd...
Cookies może mieć do 4096 znaków, a więc mając id o długości 10 znaków i liczbę sztuk 99, możemy w cookies pomieścić 300 różnych produktów po 99 sztuk, a gdy id jest krótsze nawet ponad 500 towarów. Życzę Ci takiego zamówienia... Jak widzisz, nigdy nie wykorzystasz nawet ułamka pojemności cookies.
Najważniejsze założenie jest takie, że wystarczy przekazać w odnośniku numer id produktu, aby go umieścić w koszyku. A więc na dowolnej stronie z produktami wystarczy umieścić link z identyfikatorem produktu, np. /koszyk/index.php?id=12345.
Po kliknięciu funkcja dodaj() umieści w koszyku jedną sztukę produktu. Jeżeli sztuk ma być od razu więcej, wystarczy użyć dodatkowego parametru ile, np. /koszyk/index.php?id=12345&ile=3
Jeżeli wartość ile będzie równa zero, to produkt zostanie usunięty z koszyka, jeżeli wcześniej tam był. Jeżeli mamy określoną liczbę produktów, a prześlemy dodatkowy parametr ile, wtedy liczba produktów zmieni się na podaną wartość - taka operacja wykonywana jest w momecie zmiany ilości w formularzu znajdującym się w koszyku.
Jeżeli klient dwa razy kliknie na zamówieniu wybranego produktu, zwiększy o jeden ilość posiadanych w koszyku produktów - jak widzisz, zamawianie jest uniwersalne i intuicyjne.
Po każdym zamówieniu lub zmianie (wtedy id jest podany) następuje aktualizacja koszyka w cookies i przeładowanie strony na ten sam adres (index.php), ale bez parametrów, aby użytkownik odświeżając stronę nie zmienił przez przypadek (i nieświadomie) zawartości własnego koszyka.
W skrypcie znajduje się też wypisywanie zawartości koszyka na ekranie, zarówno dla klienta, jak i dla Ciebie - możesz zobaczyć jak wygląda zawartość cookies w momencie zamówienia lub zmiany zawartości koszyka.
Są też przykładowe linki symulujące zakupy - po kliknięciu możesz zobaczyć jak dodawane są towary do koszyka. Całość jest bardzo prosta, wystarczy chwilę poeksperymentować ze skryptem aby dostosować go do własnej bazy danych z produktami.