2012-01-22 24 views
7

私はショッピングカートを持つサイトを作成しています。私は特別な機能を必要としないので、準備ができているものを統合するのではなく、自分でカートを作成しています。私の製品はデータベースにあらかじめ定義された価格を持っていません。価格は、ユーザーが商品ページに入力した値に基づいて動的に生成されます。だから、ユーザーは、一部の仕様を選択した数量を入力し、私は次の値を取得する:

アイテムID
数量
合計価格私は$ _SESSION変数と、ループでそれらの値を格納する必要が

結果を入手してショッピングカートに印刷する必要がある場合は、その上に表示されます。問題は、たくさんの製品があり、選択した製品に対してこれらの値(数量、合計価格)を区別して保存する必要があることです。それで、$ _SESSION変数にItem ID、Quantity、Total priceをどのように格納し、それらの値をお互いに関連付けるのですか?

ありがとうございます。

EDIT:私のコードは、マイケルの提案を実装する:

$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

単純な多次元配列になります。 –

+1

'$ _SESSION []'自体が配列です。配列を格納することもできます。 – Joseph

答えて

11

他の項目の配列を保持している配列のキーとして、アイテムIDを使用します。

// 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... 

としてそれらにアクセス:

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

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

マイケルに感謝します!しかし、これは$ _SESSION変数の既存の値を消去します。たとえば、$ itemID = 29で1つの値セットを追加した後、$ itemID = 30で別の値を追加すると、my $ _SESSION変数には最後のデータセットのみが含まれます。 – cycero

+0

@cyceroそうではありません。 '$ _SESSION ['items']'は配列です。 '$ _SESSION ['items'] [$ newitemID]'で項目を追加するたびに、配列に追加します。前のものを上書きしません。 –

+0

私は単純なprint_r($ _ SESSION)を実行すると、すべてではなく最後の値のセットだけを出力します。 – cycero

関連する問題