2011-12-08 9 views
0

フォームPOSTを取得し、(送信)ボタンを押すとデータベースの項目(プライマリキー) 。PHP配列は、2行目をループして、2番目の行/インデックスを上書きします。

これらのPOSTのそれぞれについて、$ artidで設定されたキーにマップされた配列に新しいオブジェクト値を追加しようとします。そのため、一意でなければなりません。配列は$ _SESSIONに追加され、毎回同じ配列を出力します。

最初のオブジェクトは追加されましたが、他のオブジェクトは配列の2番目の位置を上書きします。私はそれが成長し続ける必要があります。

コード:任意の助けを事前に

if (!isset($_SESSION['itemArray'])) { 
    ... 
    $cartArr = array(); 
    $bookitem = new BookItem($artid, $qty, $price); 
    $cartArr[$artid] = $bookitem; 

    $_SESSION['itemArray'] = $cartArr; 

    foreach($cartArr as $key => $obj) { .... } 
} 
else { 
    $cartArr = $_SESSION['itemArray']; 
    if (array_key_exists($artid, $cartArr)) { 
     $cartArr[$artid]->quantity = $qty; 
    } 
    else { 
     $bookitem = new BookItem($artid, $qty, $price); 
     $cartArr[$artid] = $bookitem; 
    } 
    foreach($cartArr as $key => $obj) { ... } 
} 

ありがとう!

答えて

1

新しい要素を追加すると、セッション配列を設定したようには見えません。したがって、次回にページが読み込まれたときに新しい値が保存されませんでした。

あなたは2つのオプションがあります:

1)あなたのforeachのがこのセッションでは、このような新しい要素を追加するなどの変更を()保存されます$_SESSION['itemArray'] = $cartArr;を設定した後。

2)右後$cartArrに加えた変更は、実際にあなたが$cartArr =& $_SESSION['itemArray'];することによってこれを行うだろう$_SESSION['itemArray']に作られていますので、$_SESSION['itemArray']を参照すること$cartArrを割り当て、あなたのelse

1

あなたのforeachで起こることについてもっと詳しく調べることができますか?配列にクラスプロパティを割り当てていますか?

また、配列値をセッション値に割り当てる前に配列をシリアル化してみることもできます。

他のすべてが失敗した場合、これは通常、私が間違っているつもりどこに私が気付いて助け:

print_r($cartArr); 

グッドラック!

EDIT: 別の回答を見た後、セッション変数の初期割り当てを見落としたことに気付きました。あなたはあなたのforeachの後にそれを割り当てる必要があります、またはBenが言ったように - あなたのforeachによって行われた仕事は引き継ぐつもりはありません。 (私はまだ配列をシリアル化します)

+2

私は 'のvar_dump()'と避難所を使用するように変更振り返っていない。 – Dan

関連する問題