Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Koszyk do sklepu internetowego
Forum PHP.pl > Forum > Przedszkole
in5ane
Cześć, zastanawiam się nad fajnym rozwiązaniem wykonania koszyka do sklepu internetowego. Próbuję zrobić to na tablicach wielowymiarowych oraz na sesjach. Czy to dobry pomysł? Myślałem, by zrobić to np. tak:
  1. $koszyk = array("$_SESSION[id_u]" => array("id_produktu" => 1, "ilosc" => 2, "rodzaj" => 1));

Kod
Array
    (
    [2] => Array // tutaj mam ID użytkownika z bazy
        (
        [id_produktu] => 1 // tutaj mam ID produktu z bazy
        [ilosc] => 2 // tutaj mam ilość danego produktu
        [rodzaj] => 1 // tutaj mam rodzaj transakcji (sprzedaż nowej, używanej, kupno nowej, używanej)
        )
    )

Tylko teraz mam pytanie, jak to dodać do sesji oraz jak to później odczytywać. No i czy operacje na tym będą dość łatwe (mam na myśli późniejsze dodawanie do bazy).
Z góry dzięki za pomoc.
blooregard
Przecież w sesji możesz zapisywac dowolne zmienne (proste i złożone), tak samo, jak w każdej innej zmiennej/tablicy. W czym konkretnie widzisz problem?
in5ane
Zastanawiam się jeszcze nad tym czy pierwszą dana ma być ID usera, czy może numer L.p. produktu w koszyku. No bo powiedzmy w koszyku będzie 5 produktów, to musi być 5 sesji chyba, czy jak, możesz podać przykład utworzenia takiej zmiennej sesyjnej, dodanie do niej produktu oraz wyczytanie z nich produktu?
blooregard
Myślę, że dobrym rozwiązaniem jest zagnieżdżenie:
ID klienta -> ID produktu ->dane produktu, które muszą być trzymane w sesji, czyli:
  1. $_SESSION['basket']['customer_id'] = array(
  2. 'id_produktu_1' => array('cena' => 123 , 'nazwa' => towar1, ...(itd) ),
  3. 'id_produktu_2' => array('cena' => 213 , 'nazwa' => towar2, ...(itd) ),
  4.  
  5. }
  6.  

Dodanie produktu:
  1. $_SESSION['basket']['customer_id'][] = array('id_produktu' => array ('cena' => 543, 'nazwa' => 'towar3'));


Pobranie danych produktu (wyświetlenie zawartości koszyka):
  1. while (list($key , $item) = each($_SESSION['basket']['customer_id'] ) {
  2. //$item to array z cena i nazwa
  3. echo $item['nazwa'] . ' cena: ' . $item['cena'];
  4. }
in5ane
OK, dzięki, pokombinuję z tym ;-)

A mam jeszcze jedno pytanie. W jaki sposób mam zrobić, aby skrypt wiedział, że ma być produkt1, produkt2 itd.? Skoro ktoś doda sobie np. monitor, później chodzi po stronie i dodaje np. głośniki, no to skąd skrypt ma wiedzieć, że monitor to produkt1, a głośniki to produkt2?

Aha i czy jest sens ustawienia w sesji ID użytkownika?
blooregard
  1. ...
  2. 'id_produktu_1' => array('cena' => 123 , 'nazwa' => towar1, ...(itd) ),
  3. ...

Te identyfikatry to był przykład. Możesz sobie przecież dodać w tej tablicy ze szczegółami produktu co tylko chcesz: kategorię produktu, nazwę, symbol - no, co chcesz. A jako klucz w tej tablicy użyć ID produktu w bazie danych (tu przy?ładowo 3213):
  1. ...
  2. 3213 => array('category' => 'Monitory' , 'type' => 'LCD' , 'size' => '20\'\'', 'manufacturer' => 'Samsung' , 'model' =>'LCD20' , 'price' => 799.90),
  3. ...


Cytat
Aha i czy jest sens ustawienia w sesji ID użytkownika?

Jasne, że tak.
W momencie np. zamawiania czegoś to ID pozwoli Ci w prosty sposób utworzyć zapytanie do tabeli z zamówieniami, gdzie ID klienta to klucz obcy tworzący relację pomiędzy tabelą z zamówieniami a tabelą z danymi klientów.
Taka sama sytuacja wystąpi w momencie, gdy np. dodasz opcję zapamietywania stanu koszyka pomiędzy kolejnymi wizytami w sklepie. Wtedy do tabeli (przykładowo) 'zapamietane_koszyki' wstawiasz kolejne produkty jako rekordy, w których jedno z pól to ID klienta zapamiętane w sesji.

Po ponownym zalogowaniu się, wyciągasz z 'zapamietane_koszyki' te produkty, które należą do klienta o danym ID, tworzysz w sesji tablicę z poprzednich postów i ładnie wyświetlasz klientowi koszyk.
in5ane
Dziękuję za pomoc, ale jednak troszkę inaczej to zrobiłem ;-)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.