2012-01-22 3 views
7

Tworzę witrynę z koszykiem na zakupy. Nie potrzebuję żadnej specjalnej funkcjonalności, więc sam tworzę koszyk zamiast integrować gotowy. Moje produkty nie mają wstępnie zdefiniowanej ceny w bazie danych. Cena jest generowana dynamicznie na podstawie wartości wprowadzonych przez użytkownika na stronie produktu. Tak, użytkownik wybiera pewne specyfikacje, wchodzi ilość i uzyskać następujące wartości:

ID artykułu
Ilość
Całkowita cena

muszę przechowywać te wartości w $ _SESSION zmiennej i pętli w razie potrzeby, aby uzyskać wyniki i wydrukować je w koszyku. Problem polega na tym, że istnieje wiele produktów i muszę osobno przechowywać wszystkie te wartości (Ilość, Całkowita Cena) dla wybranego produktu. To powiedziawszy, jak mam przechowywać identyfikator towaru, ilość i cenę całkowitą w zmiennej $ _SESSION i powiązać te wartości ze sobą?

Dzięki za pomoc.

EDIT: Mój kod implementujący Michaela propozycje:

$itemid = $db->escape($_POST['productid']); 
    $itemquantity = $db->escape($_POST['itemquantity']); 
    $totalprice = $db->escape($_POST['totalprice']); 

    $_SESSION['items'] = array(); 

    $_SESSION['items'][$itemid] = array('Quantity' => $itemquantity, 'Total' => $totalprice); 

    var_dump($_SESSION); 
+0

zrobi to prosta wielowymiarowa tablica. –

+1

'$ _SESSION []' sama jest tablicą. możesz również w nim przechowywać tablice. – Joseph

Odpowiedz

11

Użyj identyfikatora elementu jako klucz tablicy, która posiada szereg innych elementów:

// Initialize the session 
session_start(); 

// Parent array of all items, initialized if not already... 
if (!isset($_SESSION['items']) { 
    $_SESSION['items'] = array(); 
} 

// Add items based on item ID 
$_SESSION['items'][$itemID] = array('Quantity' => $quantity, 'Total' => $total); 
// Another item... 
$_SESSION['items'][$another_itemID] = array('Quantity' => $another_quantity, 'Total' => $another_total); 
// etc... 

i korzystać z nich jak:

// For item 12345's quantity 
echo $_SESSION['items'][12345]['Quantity']; 

// Add 1 to quantity for item 54321 
$_SESSION['items'][54321]['Quantity']++; 
+0

Dzięki Michael! Powoduje to jednak usunięcie istniejących wartości zmiennej $ _SESSION. Powiedzmy, że dodałem jeden zestaw wartości z $ itemID = 29, a kiedy dodam inny z $ itemID = 30 moja zmienna $ _SESSION zawiera tylko ostatni zestaw danych. – cycero

+0

@cycero Nie tak. '$ _SESSION ['items']' jest tablicą. Za każdym razem, gdy dodajesz do niego element za pomocą '$ _SESSION ['items'] [$ newitemID]' dodajesz do tablicy, nie zastępując poprzedniej. –

+0

Kiedy wykonuję prosty print_r ($ _ SESSION), drukuje on tylko ostatni zestaw wartości, nie wszystkie. – cycero