552 PHP i MySQL dla każdego
Cały kod funkcji printltem to seria instrukcji echo tworzących tabelę HTML, służącą do prezentacji danych. Dane są pobierane z tablicy row i umieszczane w poszczególnych komórkach tabeli. Komórka znajdująca się z prawej strony zawiera odnośnik umożliwiający dodanie książki do koszyka. Odnośnik ten ma postać:
<a href='main.php?action-atb&id-$row[Id]'>Do koszyka</a> czyli jest to wywołanie skryptu main.php, któremu zostały przekazane argumenty: action o wartości atb i id, wskazujący identyfikator książki.
Obsługą koszyka na zakupy zajmują się trzy funkcje:
♦ atb — dodająca nową książkę do koszyka;
♦ showBasket — wyświetlająca zawartość koszyka;
♦ modi fyBasket — modyfikującą zawartość koszyka.
Koszyk w sklepie internetowym można realizować na kilka sposobów, które można ogólnie podzielić na dwa rodzaje:
♦ koszyki zapisywane w bazie danych,
♦ koszyki zapisywane w zmiennych sesji.
Wybierzemy sposób drugi, który jest prostszy w realizacji i wydajniejszy, gdyż nie wymaga ciągłych odwołań do bazy danych. Koszykiem będzie tablica asocjacyjna, w której kluczami będą identyfikatory znajdujących się w koszyku książek, a wartościami kluczy — liczba egzemplarzy danego tytułu. Jeśli zatem klient zamówi dwa egzemplarze książki o identyfikatorze 15, w tablicy pojawi się klucz o nazwie 15 i wartości 2. Taka tablica będzie zapisana w zmiennej sesji o nazwie koszyk.
Kod funkcji atb, dodającej nowe pozycje do koszyka, został przedstawiony na listingu 21.9. Przyjmuje ona w postaci argumentu o nazwie id identyfikator książki, która ma zostać dodana. Pierwszym zadaniem funkcji jest sprawdzenie, czy istnieje koszyk, czyli czy istnieje zmienna sesji o nazwie koszyk. Jeśli nie, jest tworzona. Następnie jest wywoływana funkcja makeDBConnection dokonująca połączenia z bazą. Jeśli jej wywołanie zakończy się sukcesem, jest wykonywane zapytanie SQL sprawdzające, czy w bazie faktycznie istnieje książka o identyfikatorze zgodnym z wartością argumentu id. Zapytanie to ma postać:
SELECT C0UNT(*) FROM Książki WHERE id=$id
Listing 21.9. Kod funkcji atb___
function atb($id)
{
i f(!i sSet($_SESSI0N['koszyk'])){
$_SESSI0N['koszyk'] - arrayO: